|
@ -12,7 +12,8 @@ |
|
|
> |
|
|
> |
|
|
<div class="list"> |
|
|
<div class="list"> |
|
|
<el-form-item |
|
|
<el-form-item |
|
|
v-for="item in editParams1" |
|
|
v-for="item in editParams" |
|
|
|
|
|
class="item" |
|
|
label-width="150px" |
|
|
label-width="150px" |
|
|
style="display: block" |
|
|
style="display: block" |
|
|
:key="'edit' + item.keyName" |
|
|
:key="'edit' + item.keyName" |
|
@ -62,94 +63,8 @@ |
|
|
</div> |
|
|
</div> |
|
|
</template> |
|
|
</template> |
|
|
|
|
|
|
|
|
<template v-if="item.type == 'number'"> |
|
|
<template v-if="item.type == 'date'"> |
|
|
<el-input-number |
|
|
<el-date-picker |
|
|
v-model="fmData[item.keyName]" |
|
|
|
|
|
class="item-number" |
|
|
|
|
|
size="small" |
|
|
|
|
|
clearable |
|
|
|
|
|
:precision="item.precision || 0" |
|
|
|
|
|
:step="item.step || 1" |
|
|
|
|
|
:min="item.min || 0" |
|
|
|
|
|
:max="item.max || 999999999999" |
|
|
|
|
|
:placeholder="item.placeholder || '请输入'" |
|
|
|
|
|
> |
|
|
|
|
|
</el-input-number> |
|
|
|
|
|
<span v-if="item.unitName">({{ item.unitName }})</span> |
|
|
|
|
|
</template> |
|
|
|
|
|
|
|
|
|
|
|
<template v-else-if="item.type == 'select'"> |
|
|
|
|
|
<el-select |
|
|
|
|
|
v-model="fmData[item.keyName]" |
|
|
|
|
|
:placeholder="item.placeholder || '请选择'" |
|
|
|
|
|
size="small" |
|
|
|
|
|
clearable |
|
|
|
|
|
class="item-select" |
|
|
|
|
|
> |
|
|
|
|
|
<el-option |
|
|
|
|
|
v-for="subItem in item.optionList" |
|
|
|
|
|
:key="subItem.value" |
|
|
|
|
|
:label="subItem.label" |
|
|
|
|
|
:value="subItem.value" |
|
|
|
|
|
> |
|
|
|
|
|
</el-option> |
|
|
|
|
|
</el-select> |
|
|
|
|
|
</template> |
|
|
|
|
|
|
|
|
|
|
|
<template v-else-if="item.type == 'address'"> |
|
|
|
|
|
<div class="address-item"> |
|
|
|
|
|
<el-input |
|
|
|
|
|
class="address-item-input" |
|
|
|
|
|
:placeholder="item.placeholder || '请输入所在地址'" |
|
|
|
|
|
v-model="fmData[item.keyName]" |
|
|
|
|
|
:maxlength="item.maxlength || ''" |
|
|
|
|
|
show-word-limit |
|
|
|
|
|
> |
|
|
|
|
|
</el-input> |
|
|
|
|
|
<el-button |
|
|
|
|
|
style="margin-left: 10px" |
|
|
|
|
|
type="default" |
|
|
|
|
|
size="small" |
|
|
|
|
|
ref="mapSearch" |
|
|
|
|
|
@click="handleSearchMap(item)" |
|
|
|
|
|
>查询</el-button |
|
|
|
|
|
> |
|
|
|
|
|
<div id="app" class="div_map"></div> |
|
|
|
|
|
<div style="margin-top: 10px" v-show="false"> |
|
|
|
|
|
<span>经度</span> |
|
|
|
|
|
<el-input |
|
|
|
|
|
class="address-item-input2" |
|
|
|
|
|
maxlength="50" |
|
|
|
|
|
placeholder="请输入经度" |
|
|
|
|
|
v-model="fmData[item.supKeys[0]]" |
|
|
|
|
|
> |
|
|
|
|
|
</el-input> |
|
|
|
|
|
<span style="margin-left: 20px">纬度</span> |
|
|
|
|
|
<el-input |
|
|
|
|
|
class="address-item-input2" |
|
|
|
|
|
maxlength="50" |
|
|
|
|
|
placeholder="请输入纬度" |
|
|
|
|
|
v-model="fmData[item.supKeys[1]]" |
|
|
|
|
|
> |
|
|
|
|
|
</el-input> |
|
|
|
|
|
</div> |
|
|
|
|
|
</div> |
|
|
|
|
|
</template> |
|
|
|
|
|
</el-form-item> |
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
<div class="list" v-if="editParams2.length > 0"> |
|
|
|
|
|
<el-form-item |
|
|
|
|
|
v-for="item in editParams2" |
|
|
|
|
|
label-width="150px" |
|
|
|
|
|
style="display: block" |
|
|
|
|
|
:key="'edit' + item.keyName" |
|
|
|
|
|
:label="item.field" |
|
|
|
|
|
:prop="item.keyName" |
|
|
|
|
|
:rules="item.rules || []" |
|
|
|
|
|
> |
|
|
|
|
|
<template v-if="item.type == 'input'"> |
|
|
|
|
|
<el-input |
|
|
|
|
|
v-if=" |
|
|
v-if=" |
|
|
formType == 'add' || (formType == 'edit' && !item.editDisable) |
|
|
formType == 'add' || (formType == 'edit' && !item.editDisable) |
|
|
" |
|
|
" |
|
@ -158,32 +73,10 @@ |
|
|
size="small" |
|
|
size="small" |
|
|
clearable |
|
|
clearable |
|
|
show-word-limit |
|
|
show-word-limit |
|
|
:maxlength="item.maxlength || ''" |
|
|
:format="item.format || 'yyyy-MM-dd'" |
|
|
:placeholder="item.placeholder || '请输入'" |
|
|
:placeholder="item.placeholder || '请输入'" |
|
|
> |
|
|
> |
|
|
</el-input> |
|
|
</el-date-picker> |
|
|
|
|
|
|
|
|
<div class="item-show" v-else> |
|
|
|
|
|
{{ fmData[item.keyName] || "--" }} |
|
|
|
|
|
</div> |
|
|
|
|
|
</template> |
|
|
|
|
|
|
|
|
|
|
|
<template v-if="item.type == 'textarea'"> |
|
|
|
|
|
<el-input |
|
|
|
|
|
v-if=" |
|
|
|
|
|
formType == 'add' || (formType == 'edit' && !item.editDisable) |
|
|
|
|
|
" |
|
|
|
|
|
v-model="fmData[item.keyName]" |
|
|
|
|
|
type="textarea" |
|
|
|
|
|
class="item-input" |
|
|
|
|
|
size="small" |
|
|
|
|
|
clearable |
|
|
|
|
|
show-word-limit |
|
|
|
|
|
:rows="3" |
|
|
|
|
|
:maxlength="item.maxlength || ''" |
|
|
|
|
|
:placeholder="item.placeholder || '请输入'" |
|
|
|
|
|
> |
|
|
|
|
|
</el-input> |
|
|
|
|
|
|
|
|
|
|
|
<div class="item-show" v-else> |
|
|
<div class="item-show" v-else> |
|
|
{{ fmData[item.keyName] || "--" }} |
|
|
{{ fmData[item.keyName] || "--" }} |
|
@ -224,6 +117,38 @@ |
|
|
</el-select> |
|
|
</el-select> |
|
|
</template> |
|
|
</template> |
|
|
|
|
|
|
|
|
|
|
|
<template v-else-if="item.type == 'cascader'"> |
|
|
|
|
|
<el-cascader |
|
|
|
|
|
v-model="fmData[item.keyName]" |
|
|
|
|
|
:placeholder="item.placeholder || '请选择'" |
|
|
|
|
|
:options="item.optionList" |
|
|
|
|
|
:props="item.optionProps || {}" |
|
|
|
|
|
:show-all-levels="false" |
|
|
|
|
|
size="small" |
|
|
|
|
|
clearable |
|
|
|
|
|
style="width: 240px" |
|
|
|
|
|
@change="(e) => handleChangeCascader(e, item)" |
|
|
|
|
|
> |
|
|
|
|
|
</el-cascader> |
|
|
|
|
|
</template> |
|
|
|
|
|
|
|
|
|
|
|
<template v-else-if="item.type == 'upload'"> |
|
|
|
|
|
<el-upload |
|
|
|
|
|
class="avatar-uploader" |
|
|
|
|
|
:action="uploadUrl" |
|
|
|
|
|
:data="{ customerId: customerId }" |
|
|
|
|
|
:show-file-list="true" |
|
|
|
|
|
:list-type="item.listType || 'picture'" |
|
|
|
|
|
:limit="item.limit || 100" |
|
|
|
|
|
:file-list="item.showList" |
|
|
|
|
|
:on-success="(res, file) => handleImgSuccess(res, file, item)" |
|
|
|
|
|
:on-remove="(res) => handleImgRemove(res, item)" |
|
|
|
|
|
:before-upload="beforeImgUpload" |
|
|
|
|
|
> |
|
|
|
|
|
<a><i class="el-icon-plus avatar-uploader-icon"></i> 点击上传</a> |
|
|
|
|
|
</el-upload> |
|
|
|
|
|
</template> |
|
|
|
|
|
|
|
|
<template v-else-if="item.type == 'address'"> |
|
|
<template v-else-if="item.type == 'address'"> |
|
|
<div class="address-item"> |
|
|
<div class="address-item"> |
|
|
<el-input |
|
|
<el-input |
|
@ -238,6 +163,7 @@ |
|
|
style="margin-left: 10px" |
|
|
style="margin-left: 10px" |
|
|
type="default" |
|
|
type="default" |
|
|
size="small" |
|
|
size="small" |
|
|
|
|
|
ref="mapSearch" |
|
|
@click="handleSearchMap(item)" |
|
|
@click="handleSearchMap(item)" |
|
|
>查询</el-button |
|
|
>查询</el-button |
|
|
> |
|
|
> |
|
@ -373,6 +299,9 @@ export default { |
|
|
|
|
|
|
|
|
editParams1: [], |
|
|
editParams1: [], |
|
|
editParams2: [], |
|
|
editParams2: [], |
|
|
|
|
|
|
|
|
|
|
|
uploadUrl: window.SITE_CONFIG["apiURL"] + "/oss/file/uploadqrcodeV2", |
|
|
|
|
|
customerId: localStorage.getItem("customerId"), |
|
|
}; |
|
|
}; |
|
|
}, |
|
|
}, |
|
|
components: {}, |
|
|
components: {}, |
|
@ -413,12 +342,13 @@ export default { |
|
|
}); |
|
|
}); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (item.type == "select") { |
|
|
if (item.type == "select" || item.type == "cascader") { |
|
|
if (item.optionUrl) { |
|
|
if (item.optionUrl) { |
|
|
this.getFmOptions( |
|
|
this.getFmOptions( |
|
|
index, |
|
|
index, |
|
|
item.optionUrl, |
|
|
item.optionUrl, |
|
|
item.optionUrlParams || {} |
|
|
item.optionUrlParams || {}, |
|
|
|
|
|
item.optionCook || null |
|
|
); |
|
|
); |
|
|
} |
|
|
} |
|
|
} else if (item.type == "address") { |
|
|
} else if (item.type == "address") { |
|
@ -440,18 +370,78 @@ export default { |
|
|
this.iniLoaded = true; |
|
|
this.iniLoaded = true; |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
async getFmOptions(index, url, params) { |
|
|
async getFmOptions(index, url, params, cookFn) { |
|
|
const { data, code, msg } = await requestPost(url, { |
|
|
const { data, code, msg } = await requestPost(url, { |
|
|
...params, |
|
|
...params, |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
if (code === 0) { |
|
|
if (code === 0) { |
|
|
this.editParams[index].optionList = data || []; |
|
|
this.editParams[index].optionList = |
|
|
|
|
|
typeof cookFn == "function" ? cookFn(data) : data || []; |
|
|
} else { |
|
|
} else { |
|
|
this.$message.error("请求检索基础数据失败!"); |
|
|
this.$message.error("请求检索基础数据失败!"); |
|
|
} |
|
|
} |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
handleChangeCascader(vals, item) { |
|
|
|
|
|
if (typeof item.handleChangeFn == "function") { |
|
|
|
|
|
item.handleChangeFn(vals, item); |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
beforeImgUpload(file, item) { |
|
|
|
|
|
if (typeof item.beforeImgUpload == "function") { |
|
|
|
|
|
return item.beforeImgUpload(file, item, this); |
|
|
|
|
|
} |
|
|
|
|
|
return true; |
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
handleImgRemove(file, item) { |
|
|
|
|
|
console.log("handleImgRemove", file); |
|
|
|
|
|
let url = file.url || file.response.data.url; |
|
|
|
|
|
if (url) { |
|
|
|
|
|
let { fmData } = this; |
|
|
|
|
|
this.fmData[item.keyName] = fmData[item.keyName].filter( |
|
|
|
|
|
(item) => item.url !== url |
|
|
|
|
|
); |
|
|
|
|
|
if (item.supKeys && Array.isArray(item.supKeys)) { |
|
|
|
|
|
if (item.supKeys.length > 0) { |
|
|
|
|
|
this.fmData[item.supKeys[0]] = fmData[item.keyName].map( |
|
|
|
|
|
(item) => item.url |
|
|
|
|
|
); |
|
|
|
|
|
} |
|
|
|
|
|
if (item.supKeys.length > 1) { |
|
|
|
|
|
this.fmData[item.supKeys[1]] = item.supValues[0][0] || ""; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
handleImgSuccess(res, file, item) { |
|
|
|
|
|
console.log("handleImgSuccess", res); |
|
|
|
|
|
if (res.code === 0 && res.msg === "success") { |
|
|
|
|
|
this.fmData[item.keyName].push({ |
|
|
|
|
|
url: res.data.url, |
|
|
|
|
|
name: file.name, |
|
|
|
|
|
size: file.size, |
|
|
|
|
|
type: file.type, |
|
|
|
|
|
format: file.name.split(".").pop(), |
|
|
|
|
|
}); |
|
|
|
|
|
if (item.supKeys && Array.isArray(item.supKeys)) { |
|
|
|
|
|
if (item.supKeys.length > 0) { |
|
|
|
|
|
this.fmData[item.supKeys[0]] = fmData[item.keyName].map( |
|
|
|
|
|
(item) => item.url |
|
|
|
|
|
); |
|
|
|
|
|
} |
|
|
|
|
|
if (item.supKeys.length > 1) { |
|
|
|
|
|
this.fmData[item.supKeys[1]] = item.supValues[0][0] || ""; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} else { |
|
|
|
|
|
this.$message.error(res.msg); |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
// 地图初始化函数,本例取名为init,开发者可根据实际情况定义 |
|
|
// 地图初始化函数,本例取名为init,开发者可根据实际情况定义 |
|
|
initMap(item) { |
|
|
initMap(item) { |
|
|
let { latitude, longitude } = this.$store.state.user; |
|
|
let { latitude, longitude } = this.$store.state.user; |
|
@ -663,7 +653,14 @@ export default { |
|
|
margin-top: 30px; |
|
|
margin-top: 30px; |
|
|
|
|
|
|
|
|
&.z-div { |
|
|
&.z-div { |
|
|
display: flex; |
|
|
.list { |
|
|
|
|
|
display: flex; |
|
|
|
|
|
flex-wrap: wrap; |
|
|
|
|
|
|
|
|
|
|
|
.item { |
|
|
|
|
|
width: 50%; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
.item-input { |
|
|
.item-input { |
|
|
width: 225px; |
|
|
width: 225px; |
|
|