mk 3 years ago
parent
commit
dbd0602eee
  1. 742
      src/views/modules/cpts/base2/cpts/edit.vue

742
src/views/modules/cpts/base2/cpts/edit.vue

@ -1,274 +1,250 @@
<template>
<div>
<div class="g-cpt">
<el-form
v-if="iniLoaded"
ref="ref_form"
:model="fmData"
:inline="true"
:disabled="formType === 'watch'"
class="m-fm"
:class="{
'z-div': editParamsDiv,
'z-watch': formType === 'watch',
}"
>
<div
class="list"
:key="'list' + listIndex"
v-for="(list, listIndex) in editParams"
>
<el-form-item
v-for="item in list"
class="item"
label-width="100px"
style="display: block"
:key="'edit' + item.keyName"
:label="item.field"
:prop="item.keyName"
:rules="item.rules || []"
>
<template v-if="item.type == 'switch'">
<el-switch
v-model="fmData[item.keyName]"
size="small"
:active-text="item.activeText || ''"
:inactive-text="item.inactiveText || ''"
:active-value="item.activeValue || true"
:inactive-value="item.inactiveValue || false"
>
</el-switch>
</template>
<template v-else-if="item.type == 'input'">
<el-input
v-if="
formType == 'add' ||
(formType == 'edit' && !item.editDisable)
"
v-model="fmData[item.keyName]"
class="item-input"
size="small"
clearable
show-word-limit
:maxlength="item.maxlength || ''"
:placeholder="item.placeholder || '请输入'"
>
</el-input>
<div class="item-show" v-else>
{{ fmData[item.keyName] || "--" }}
<span v-if="item.attach">{{
item.attach
}}</span>
</div>
</template>
<template v-else-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>
{{ fmData[item.keyName] || "--" }}
</div>
</template>
<template v-else-if="item.type == 'date'">
<el-date-picker
v-if="
formType == 'add' ||
(formType == 'edit' && !item.editDisable)
"
v-model="fmData[item.keyName]"
:picker-options="item.pickerOptions"
class="item-input"
size="small"
clearable
show-word-limit
:value-format="item.format || 'yyyy-MM-dd'"
:placeholder="item.placeholder || '请输入'"
>
</el-date-picker>
<div class="item-show" v-else>
{{ fmData[item.keyName] || "--" }}
</div>
</template>
<template v-else-if="item.type == 'number'">
<el-input-number
v-if="
formType == 'add' ||
(formType == 'edit' && !item.editDisable)
"
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 class="item-show" v-else>
{{ fmData[item.keyName] || "--" }}
</span>
<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"
:multiple="item.multiple || false"
:filterable="item.filterable || false"
:allowCreate="item.allowCreate || false"
:collapse-tags="item.collapseTags || false"
default-first-option
@change="(e) => handleChangeSelect(e, item)"
>
<template v-if="item.optionType == 'group'">
<el-option-group
v-for="group in item.optionList"
:key="group.label"
:label="group.label"
>
<el-option
v-for="subItem in group.optionList"
:key="subItem.value"
:label="subItem.label"
:value="subItem.value"
>
</el-option>
</el-option-group>
</template>
<template v-else>
<el-option
v-for="(
subItem, subIndex
) in item.optionList"
:key="subItem.value + subIndex"
:label="subItem.label"
:value="subItem.value"
>
</el-option>
</template>
</el-select>
</template>
<template v-else-if="item.type == 'rich-text'">
<div
v-if="
formType == 'add' ||
(formType == 'edit' && !item.editDisable)
"
class="item-rich-text"
>
<Tinymce
:ref="'richText' + item.keyName"
v-model="fmData[item.keyName]"
:customerId="customerId"
:placeholder="item.placeholder || '请输入'"
:height="500"
/>
</div>
<div
v-else
class="item-rich-text z-show"
@click="handleClickHtmlNode"
>
<div v-html="fmData[item.keyName]"></div>
</div>
</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"
:collapse-tags="item.collapseTags || false"
size="small"
clearable
class="item-select"
@change="(e) => handleChangeCascader(e, item)"
>
</el-cascader>
</template>
<template v-else-if="item.type == 'upload'">
<el-upload
:headers="$getElUploadHeaders()"
v-if="
formType == 'add' ||
(formType == 'edit' && !item.editDisable)
"
ref="upload"
class="avatar-uploader"
:class="{
'z-full':
fmData[item.keyName].length >=
item.limit,
}"
:action="item.uploadUrl || uploadUrl"
:data="{ customerId: customerId }"
:show-file-list="true"
:list-type="item.listType || 'picture'"
:limit="item.limit || 100"
:file-list="fmData[item.keyName]"
:on-success="
(res, file) =>
handleImgSuccess(res, file, item)
"
:on-error="
(res, file) =>
handleImgError(res, file, item)
"
:on-remove="(res) => handleImgRemove(res, item)"
:on-exceed="(res) => handleImgExceed(res, item)"
:before-upload="
(file) => beforeImgUpload(file, item)
"
>
<a><i class="el-icon-plus"></i> 点击上传</a>
</el-upload>
<el-image
v-else-if="fmData[item.keyName].length > 0"
style="width: 100px; height: 100px"
:src="fmData[item.keyName][0].url"
fit="cover"
:preview-src-list="
fmData[item.keyName].map((item) => item.url)
"
></el-image>
<span v-else>--</span>
</template>
<template v-else-if="item.type == 'address'">
<div class="address-item">
<!-- <el-input class="address-item-input"
<div>
<div class="g-cpt">
<el-form
v-if="iniLoaded"
ref="ref_form"
:model="fmData"
:inline="true"
:disabled="formType === 'watch'"
class="m-fm"
:class="{
'z-div': editParamsDiv,
'z-watch': formType === 'watch',
}"
>
<div
class="list"
:key="'list' + listIndex"
v-for="(list, listIndex) in editParams"
>
<el-form-item
v-for="item in list"
class="item"
label-width="100px"
style="display: block"
:key="'edit' + item.keyName"
:label="item.field"
:prop="item.keyName"
:rules="item.rules || []"
>
<template v-if="item.type == 'switch'">
<el-switch
v-model="fmData[item.keyName]"
size="small"
:active-text="item.activeText || ''"
:inactive-text="item.inactiveText || ''"
:active-value="item.activeValue || true"
:inactive-value="item.inactiveValue || false"
>
</el-switch>
</template>
<template v-else-if="item.type == 'input'">
<el-input
v-if="
formType == 'add' || (formType == 'edit' && !item.editDisable)
"
v-model="fmData[item.keyName]"
class="item-input"
size="small"
clearable
show-word-limit
:maxlength="item.maxlength || ''"
:placeholder="item.placeholder || '请输入'"
>
</el-input>
<div class="item-show" v-else>
{{ fmData[item.keyName] || "--" }}
<span v-if="item.attach">{{ item.attach }}</span>
</div>
</template>
<template v-else-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>
{{ fmData[item.keyName] || "--" }}
</div>
</template>
<template v-else-if="item.type == 'date'">
<el-date-picker
v-if="
formType == 'add' || (formType == 'edit' && !item.editDisable)
"
v-model="fmData[item.keyName]"
:picker-options="item.pickerOptions"
class="item-input"
size="small"
clearable
show-word-limit
:value-format="item.format || 'yyyy-MM-dd'"
:placeholder="item.placeholder || '请输入'"
>
</el-date-picker>
<div class="item-show" v-else>
{{ fmData[item.keyName] || "--" }}
</div>
</template>
<template v-else-if="item.type == 'number'">
<el-input-number
v-if="
formType == 'add' || (formType == 'edit' && !item.editDisable)
"
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 class="item-show" v-else>
{{ fmData[item.keyName] || "--" }}
</span>
<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"
:multiple="item.multiple || false"
:filterable="item.filterable || false"
:allowCreate="item.allowCreate || false"
:collapse-tags="item.collapseTags || false"
default-first-option
@change="(e) => handleChangeSelect(e, item)"
>
<template v-if="item.optionType == 'group'">
<el-option-group
v-for="group in item.optionList"
:key="group.label"
:label="group.label"
>
<el-option
v-for="subItem in group.optionList"
:key="subItem.value"
:label="subItem.label"
:value="subItem.value"
>
</el-option>
</el-option-group>
</template>
<template v-else>
<el-option
v-for="(subItem, subIndex) in item.optionList"
:key="subItem.value + subIndex"
:label="subItem.label"
:value="subItem.value"
>
</el-option>
</template>
</el-select>
</template>
<template v-else-if="item.type == 'rich-text'">
<div
v-if="
formType == 'add' || (formType == 'edit' && !item.editDisable)
"
class="item-rich-text"
>
<Tinymce
:ref="'richText' + item.keyName"
v-model="fmData[item.keyName]"
:customerId="customerId"
:placeholder="item.placeholder || '请输入'"
:height="500"
/>
</div>
<div
v-else
class="item-rich-text z-show"
@click="handleClickHtmlNode"
>
<div v-html="fmData[item.keyName]"></div>
</div>
</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"
:collapse-tags="item.collapseTags || false"
size="small"
clearable
class="item-select"
@change="(e) => handleChangeCascader(e, item)"
>
</el-cascader>
</template>
<template v-else-if="item.type == 'upload'">
<el-upload
:headers="$getElUploadHeaders()"
v-if="
formType == 'add' || (formType == 'edit' && !item.editDisable)
"
ref="upload"
class="avatar-uploader"
:class="{
'z-full': fmData[item.keyName].length >= item.limit,
}"
:action="item.uploadUrl || uploadUrl"
:data="{ customerId: customerId }"
:show-file-list="true"
:list-type="item.listType || 'picture'"
:limit="item.limit || 100"
:file-list="fmData[item.keyName]"
:on-success="(res, file) => handleImgSuccess(res, file, item)"
:on-error="(res, file) => handleImgError(res, file, item)"
:on-remove="(res) => handleImgRemove(res, item)"
:on-exceed="(res) => handleImgExceed(res, item)"
:before-upload="(file) => beforeImgUpload(file, item)"
>
<a><i class="el-icon-plus"></i> 点击上传</a>
</el-upload>
<el-image
v-else-if="fmData[item.keyName].length > 0"
style="width: 100px; height: 100px"
:src="fmData[item.keyName][0].url"
fit="cover"
:preview-src-list="fmData[item.keyName].map((item) => item.url)"
></el-image>
<span v-else>--</span>
</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 || ''"
@ -280,116 +256,115 @@
size="small"
ref="mapSearch"
@click="handleSearchMap(item)">查询</el-button> -->
<el-select
v-if="
formType == 'add' ||
(formType == 'edit' && !item.editDisable)
"
v-model="searchAddressKeyword || fmData.location"
filterable
class="item-input"
size="small"
remote
:reserve-keyword="true"
placeholder="请输入关键词搜索"
:remote-method="remoteMethod"
:loading="loading"
>
<el-option
v-for="subitem in searchAddressOptions"
@click.native="
handleClickKey(subitem, item)
"
:key="subitem.value"
:label="subitem.label"
:value="subitem.value"
>
</el-option>
</el-select>
<div class="item-show" v-else>
{{ fmData[item.keyName] || "--" }}
</div>
<el-input
v-if="formType == 'add'||formType=='edit'"
v-show="false"
v-model="fmData[item.keyName]"
class="item-input"
size="small"
clearable
show-word-limit
:maxlength="item.maxlength || ''"
:placeholder="item.placeholder || '请输入'"
>
</el-input>
<div id="map" class="div_map"></div>
</div>
</template>
</el-form-item>
</div>
</el-form>
<div class="m-operate" v-if="!formBtnFixed">
<el-button
size="small"
class="diy-button--white"
@click="handleCancle"
>{{ editConfig.cancelBtnName || "取消" }}</el-button
>
<el-button
v-if="formType != 'watch'"
type="primary"
size="small"
class="diy-button--blue"
:disabled="btnDisable"
@click="handleComfirm"
>{{ editConfig.confirmBtnName || "保存" }}</el-button
>
<slot
name="operateSup"
v-bind:id="formId"
v-bind:info="fmData"
v-bind:formType="formType"
></slot>
</div>
<el-select
v-if="
formType == 'add' ||
(formType == 'edit' && !item.editDisable)
"
v-model="searchAddressKeyword || fmData.location"
filterable
class="item-input"
size="small"
remote
:reserve-keyword="true"
placeholder="请输入关键词搜索"
:remote-method="remoteMethod"
:loading="loading"
>
<el-option
v-for="subitem in searchAddressOptions"
@click.native="handleClickKey(subitem, item)"
:key="subitem.value"
:label="subitem.label"
:value="subitem.value"
>
</el-option>
</el-select>
<div class="item-show" v-else>
{{ fmData[item.keyName] || "--" }}
</div>
<el-input
v-if="formType == 'add' || formType == 'edit'"
v-show="false"
v-model="fmData[item.keyName]"
class="item-input"
size="small"
clearable
show-word-limit
:maxlength="item.maxlength || ''"
:placeholder="item.placeholder || '请输入'"
>
</el-input>
<div id="map" class="div_map"></div>
</div>
</template>
</el-form-item>
</div>
</el-form>
<div class="m-operate" v-if="!formBtnFixed">
<el-button
size="small"
class="diy-button--white"
@click="handleCancle"
>{{ editConfig.cancelBtnName || "取消" }}</el-button
>
<el-button
v-if="formType != 'watch'"
type="primary"
size="small"
class="diy-button--blue"
:disabled="btnDisable"
@click="handleComfirm"
>{{ editConfig.confirmBtnName || "保存" }}</el-button
>
<slot
name="operateSup"
v-bind:id="formId"
v-bind:info="fmData"
v-bind:formType="formType"
></slot>
</div>
<slot
name="bottomSup"
v-bind:id="formId"
v-bind:info="fmData"
v-bind:formType="formType"
></slot>
</div>
name="bottomSup"
v-bind:id="formId"
v-bind:info="fmData"
v-bind:formType="formType"
></slot>
</div>
<el-row>
<el-col span="24" align="right">
<el-button type="" size="small" style="margin-right:78px" @click="handleCancle">关闭</el-button>
</el-col>
</el-row>
<div class="m-operate" v-if="formBtnFixed">
<el-button
size="small"
class="diy-button--white"
@click="handleCancle"
>{{ editConfig.cancelBtnName || "取消" }}</el-button
>
<el-button
v-if="formType != 'watch'"
size="small"
class="diy-button--blue"
:disabled="btnDisable"
@click="handleComfirm"
>{{ editConfig.confirmBtnName || "保存" }}</el-button
>
<slot
name="operateSup"
v-bind:id="formId"
v-bind:info="fmData"
v-bind:formType="formType"
></slot>
</div>
</div>
<el-col span="24" align="right">
<el-button
class="diy-button--white"
size="small"
style="margin-right: 78px"
@click="handleCancle"
>关闭</el-button
>
</el-col>
</el-row>
<div class="m-operate" v-if="formBtnFixed">
<el-button size="small" class="diy-button--white" @click="handleCancle">{{
editConfig.cancelBtnName || "取消"
}}</el-button>
<el-button
v-if="formType != 'watch'"
size="small"
class="diy-button--blue"
:disabled="btnDisable"
@click="handleComfirm"
>{{ editConfig.confirmBtnName || "保存" }}</el-button
>
<slot
name="operateSup"
v-bind:id="formId"
v-bind:info="fmData"
v-bind:formType="formType"
></slot>
</div>
</div>
</template>
<script>
@ -874,12 +849,11 @@ export default {
.validate(this.fmData)
.then(() => {
this.submit();
if(this.formType!='add')return
setTimeout(() => {
nextTick(500)
this.formId = this.$parent.$parent.tableData[0].id
}, 500);
if (this.formType != "add") return;
setTimeout(() => {
nextTick(500);
this.formId = this.$parent.$parent.tableData[0].id;
}, 500);
})
.catch(({ err, fields }) => {
console.log("--------------", err, fields);

Loading…
Cancel
Save