const md5 = require('md5'); import {customClone} from "@/utils/xd.base"; import XdSelectList from "@/components/XdSelectList"; import XdSelectStatus from "@/components/XdSelectStatus"; import XdRange from "@/components/XdRange"; import XdRadioStatus from "@/components/XdRadioStatus"; import XdRadioList from "@/components/XdRadioList"; import XdSwitch from "@/components/XdSwitch"; import XdTransfer from "@/components/XdTransfer"; import XdUpload from "@/components/XdUpload"; import XdFontIcon from "@/components/XdFontIcon"; import XdCheckList from "@/components/XdCheckList"; import XdOverAddPrice from "@/components/XdOverAddPrice"; import XdSelectWeekTime from "@/components/XdSelectWeekTime"; import XdJsonView from "@/components/XdJsonView"; import XdRangeGroup from "@/components/XdRangeGroup"; import XdRemoteInput from "@/components/XdRemoteInput"; import XdRemoteCascader from "@/components/XdRemoteCascader"; import XdCascadeSelect from "@/components/XdCascadeSelect"; import XdTinymce from "@/components/XdTinymce"; import XdSetLabel from '@/components/XdSetLabel' {{each files}} import {{$value.fileName}} from "@/components/formItem/{{$value.fileName}}"; {{/each}} {{each privateFiles}} import {{$value.fileName}} from "@/components/formItemPrivate/{{$value.fileName}}"; {{/each}} export default { name: "XdBaseDynamicField", componentName: 'XdFormBaseDynamicField', components: { XdRangeGroup, XdJsonView, XdCheckList, XdSwitch, XdRadioStatus, XdSelectList, XdSelectStatus, XdRange, XdRadioList, XdTransfer, XdUpload, XdFontIcon, XdOverAddPrice, XdSelectWeekTime, XdRemoteInput, XdRemoteCascader, XdCascadeSelect, XdTinymce, XdSetLabel, {{each files}} {{$value.fileName}}, {{/each}} {{each privateFiles}} {{$value.fileName}}, {{/each}} }, props: { isAllDisabled:{ type: Boolean, default: false }, isGroupHide: { type: Boolean, default: true }, isGroupShowBgc: { type: Boolean, default: true }, isExpand:{ type: Boolean, default: false }, labelWidth: {type: String, default: '100px'}, size: {type: String, default: 'medium'}, //medium / small / mini list: {type: Array | null, default: null}, isCascaderSave:{ type: Boolean, default: false //级联属性时候,是否需要用原来的值进行替换 }, pickerOptions: { type: Object, default() { return { shortcuts: [ { text: '最近一周', onClick(picker) { const end = new Date(); const start = new Date(); start.setTime(start.getTime() - 3600 * 1000 * 24 * 7); picker.$emit('pick', [start, end]); } }, { text: '最近一个月', onClick(picker) { const end = new Date(); const start = new Date(); start.setTime(start.getTime() - 3600 * 1000 * 24 * 30); picker.$emit('pick', [start, end]); } }, { text: '最近三个月', onClick(picker) { const end = new Date(); const start = new Date(); start.setTime(start.getTime() - 3600 * 1000 * 24 * 90); picker.$emit('pick', [start, end]); } }, { text: '最近六个月', onClick(picker) { const end = new Date(); const start = new Date(); start.setTime(start.getTime() - 3600 * 1000 * 24 * 180); picker.$emit('pick', [start, end]); } }, { text: '最近一年', onClick(picker) { const end = new Date(); const start = new Date(); start.setTime(start.getTime() - 3600 * 1000 * 24 * 365); picker.$emit('pick', [start, end]); } } ], } } }, timeType: { type: Boolean, default: false //false=> 毫秒 true=>秒 }, textareaSize: { type: Object, default() { return {minRows: 4, maxRows: 6} } }, //当设置值的时候启动表单根据当前传入值进行隐藏与显示 activeStyle:{ type: String, default: '', }, //针对 edit X // isAdvanced : { type: Boolean|null, default: null }, isContent : { type: Boolean|null, default: null }, isStyle : { type: Boolean|null, default: null } }, watch: { list: { handler() { if(this.listTimer) clearTimeout(this.listTimer); this.listTimer = setTimeout(()=>{ this.initStatus = false; this.init(); }, 50) }, immediate: false, deep:true, }, form: { handler() { if(this.formTimer) { clearTimeout(this.formTimer); this.formTimer = null; } this.formTimer = setTimeout(()=>{ this.$emit('input', this.getParams()); this.isFrist = false }, 300); }, deep: true }, uiGroupList:{ handler(value){ this.$emit('on-group-status', value) }, deep: true }, }, data() { return { isPC:false, refID: null, formTimer: null, formStatus: false, //初始化完成 isFrist: true, form: {}, //绑定数据字段 rules: {}, //验证规则 uiList: [], //ui列表 uiListValue: {}, //保存上一次的值 uiGroupList:{}, //组信息 //测试数据 备注;valueKey必须唯一 testList: [], //分组功能收起功能 groupStatus:{}, //分组功能收起功能是否已初始化 groupStatusFlag: false, //已支持禁用功能组件 supportDisabled:[ 'el-input', 'xd-cascade', 'xd-cascade-panel', 'xd-size', 'xd-margin-padding', 'xd-color', 'xd-upload', 'xd-footer-setting', 'xd-radio-custom', 'xd-item-notice', 'xd-remote-select-list', 'xd-multiple-input', 'xd-group-input', 'xd-set-label', 'xd-set-sort-label', 'xd-cascade-select', 'xd-remote-cascader', 'xd-tinymce', 'xd-text-area-tag', 'xd-day-range', 'xd-table-product', 'xd-select-pages-path', 'xd-select-site-path', 'xd-full-cut-rule', 'xd-select-list', 'xd-input-unit', 'xd-table-cascade', 'xd-select-status', 'xd-radio', 'xd-switch', 'xd-check', 'xd-range', 'xd-date-range', 'xd-order-setting', 'xd-input-range', 'xd-remote-cascader-panel', 'xd-remote-input', 'xd-date', 'xd-range-group', 'xd-over-add-price', 'xd-select-week-time', 'xd-choose-namespace', 'xd-market-header', 'xd-site-select-list', 'xd-site-poster', 'xd-site-news', 'xd-site-content', //废弃 'xd-select-tag', //废弃 ], //变动与初始化表单否加载完成 initStatus: false, //需要过滤的元素 filterEleArr:['xd-line-title','slot','title','el-html','line','xd-line'], } }, computed:{ isGroupStatusEmpty(){ return this.$xdHelper.isEmpty(this.groupStatus) } }, created() { this.isPC = this.$xdHelper.isPC(); this.refID = `Xd-${this.$xdHelper.randomChar(20)}`; this.init(); }, methods: { handleGroup(item){ if(typeof item['isIcon'] !== 'undefined') return; if(this.isGroupHide === false) return; let key = `group_id_${item.group_id}`; this.$set(this.groupStatus, key, !this.groupStatus[key]); }, getTimeOptions(item , isFast = true) { let temp = {}; let options = this.$xdHelper.cloneDeep(this.pickerOptions); if (item.isShowPickerOptionsFast && isFast) temp = Object.assign({}, temp, options); //限制选择过去时间 if (item['filterPassTime']) { temp['disabledDate'] = (time)=>{ return time.getTime() > new Date().getTime() }; return temp; } //限制选择未来时间 if (item['filterFutureTime']) { temp['disabledDate'] = (time) => { return time.getTime() <= (new Date().getTime() - 24 * 60 * 60 * 1000) }; return temp; } //时间段 if(item['filterRange'] && this.$xdHelper.checkVarType(item['filterRange']) === 'array' && item['filterRange'].length === 2 ) { temp['disabledDate'] = (time) => { return time.getTime() < item['filterRange'][0] || time.getTime() > item['filterRange'][1] }; return temp; } return temp; }, handleElInout(key){ let value = this.form[key]; if(value.trim() === '') { this.form[key] = ''; } }, getClass(item){ let params = {}; if(this.activeStyle) { if(item.groupKey) { if(item.groupKey === this.activeStyle) params['xd-active'] = true; else params['xd-not-active'] = true; } else { params['active'] = true } } return { default: item.size === 'default', mini: item.size === 'mini' || !item.size, small: item.size === 'small', ...params, //设置是否可以隐藏节点 "jfb-hidden": item.hidden === true, } }, /** * @description 获取显示状态 * @param item {Object} form对象 */ getInline(item) { return item['inline'] === true || item['inline'] === undefined }, /** * @description 获取高和宽 * @param item {Object} form对象 * @param type {Boolean} true =》宽 false=》高 */ getWH(item, type) { if (type) return item['oneWidth'] ? item['oneWidth'] + 'px' : '100px'; return item['oneHeight'] ? item['oneHeight'] + 'px' : '100px'; }, getWHIcon(item){ let num = Math.min(item['oneWidth'],item['oneHeight']); if(num < 70) { let temp = num - 20; if(temp <= 16) return 16; return temp; } return 50; }, /** * @description 是否必填 * @param rules {null|object|Array} * @return {boolean} */ getRequire(rules = null){ if(!rules) return false; if(this.$xdHelper.checkVarType(rules) === 'object' && rules['required']) return true; if(this.$xdHelper.checkVarType(rules) === 'array') { let temp = rules.filter(item=>{ return item.required; }); if(temp.length > 0) return true } return false }, /** * @description 设置form item prop属性 * @param item 插件对象 */ getProp(item) { if (item.ele === 'xd-range') { return this.getItemToFormKey(item, 'xdRange'); } else if (item.ele === 'xd-date-range') { return this.getItemToFormKey(item, 'xdDate'); } else if (item.ele === 'xd-over-add-price') { return this.getItemToFormKey(item, 'xdOverAddPrice') } else if (item.ele === 'xd-select-week-time') { return this.getItemToFormKey(item, 'xdSelectWeekTime') } else { return item['valueKey'] } }, getCustomClass(item){ let params = { 'xd-html': item.ele === 'el-html', }; //标题与内容显示在一行 if(item['labelInline'] && item['labelInline'] === true){ params['cus-inline'] = true } //行缩进 if(item['indent'] && item['indent'] === true) { params['cus-indent'] = true } if(this.activeStyle) { if(item.groupKey) { if(item.groupKey === this.activeStyle) params['xd-active'] = true; else params['xd-not-active'] = true; } else { params['active'] = true } } //设置是否可以隐藏节点 params['jfb-hidden'] = (item.hidden === true); //设置组背景样式========== if(item['xd-group-color']) { params['group-bgColor'] = true } if(item['xd-group-color-first'] && item['xd-group-color-last']) { params['group-color-one'] = true } else { if(item['xd-group-color-first']) { params['group-color-first'] = true } if(item['xd-group-color-last']) { params['group-color-last'] = true } } if(item['xd-group-color'] && (item['ele'] === 'xd-shadow' || item['ele'] === 'xd-border') ) { params['cus-shAndBorder'] = true; } //设置组背景样式========== return params }, /** * @description 获取表单数据 */ getParams() { let form = this.$xdHelper.cloneDeep(this.form); let temp = {}; Object.keys(form).map(key => { //区间输入值与时间区间插件 if (/^(xdRange__|xdDate__)(.*)$/.test(key)) { let range = key.split('__'); if (form[key] && form[key].length > 0) { range.splice(0, 1); temp[range[0]] = form[key][0]; temp[range[1]] = form[key][1]; //时间毫秒转秒处理 if (/^(xdDate__)(.*)$/.test(key) && this.timeType) { temp[range[0]] = form[key][0] ? Math.floor(form[key][0] / 1000) : form[key][0]; temp[range[1]] = form[key][1] ? Math.floor(form[key][1] / 1000) : form[key][1]; } } else { range.splice(0, 1); temp[range[0]] = null; temp[range[1]] = null; } } //自定义时间插件与超过价格设置插件 else if (/^(xdOverAddPrice__|xdSelectWeekTime__)(.*)$/.test(key)) { temp = {...temp, ...form[key]} } //其他模式 else { if (this.$xdHelper.checkVarType(form[key]) === 'array' && this.dateFilter) { if (form[key].length > 0) { temp[key] = form[key]; } } else { let ele = this.$xdHelper.isKeyInLists(this.uiList, key, 'valueKey'); if(ele) { if (ele.ele === 'xd-date' && this.timeType) { temp[key] = form[key] ? Math.floor(form[key] / 1000) : form[key]; } else { temp[key] = form[key]; } } } } }); //去掉特殊字符头尾空白符,空白符包括:空格、制表符 tab、换行符等其他空白符 Object.keys(temp).map(key=>{ if(this.$xdHelper.checkVarType(temp[key]) === 'string') temp[key] = temp[key].trim(); }); if (this.dateFilter) { if (this.$xdHelper.isEmpty(temp)) { return temp } else { return this.$xdHelper.deleteParamEmptyKey(temp); } } else return temp }, //==设置表单====================================== /** * @description 对象获取form键值 * @param item 插件对象 * @param prefix 前缀 */ getItemToFormKey(item, prefix) { let key = []; if (this.$xdHelper.checkVarType(item.valueKey) === 'array') { key = [...item['valueKey']]; } if (this.$xdHelper.checkVarType(item.valueKey) === 'object') { Object.keys(item.valueKey).map((k) => { key.push(`${k}$${item.valueKey[k]}`) }); } return `${prefix}__${key.join('__')}` }, /** * @description 检查key值是否重复 * @param keys {Object} 键值计数对象 * @param list {Array} 检查对象或者数组 * @param isArray {Boolean} 默认:true */ checkKeyRepeat(keys, list, isArray = true){ if(isArray) { let arr = this.$xdHelper.cloneDeep(list); arr.map(item => { if (!this.filterEleArr.includes(item.ele)) { let key = item['valueKey']; if(this.$xdHelper.checkVarType(key) === 'array') key = key.join('_'); if (this.$xdHelper.checkVarType(key) === 'object') { let temp = []; Object.keys(key).map((item)=>{ if(this.$xdHelper.checkVarType(item) === 'array') temp = temp.concat(key[item]); else temp.push(key[item]) }); key = temp.join('_'); } if (keys[key]) keys[key] = keys[key] + 1; else keys[key] = 1; } }); } else { Object.keys(list).map(key=>{ if (keys[key]) keys[key] = keys[key] + 1; else keys[key] = 1; }) } let flag = false; let keyValue = ''; Object.keys(keys).map(key => { if (keys[key] > 1) { keyValue = key; flag = true; } }); if(flag) throw Error(`键值重复: ${JSON.stringify(keyValue)}`); }, /** * @description 设置刷新key值 * @param list {Array} */ setIndexKey(list){ return list.map(item=>{ //刷新局部操作(方式1) if(item.isRefresh) return item; //刷新局部操作(方式2) let keyObj = {key: item.valueKey, value: item.value, defaultValue: item.defaultValue}; if(item['isKey'] && item['key'] !== undefined) { keyObj['cusKey'] = item['key'] } return { ...item, key: md5(JSON.stringify(keyObj)) } }) }, /** * @description 特殊插件处理 */ handleSetFormAndRules(key, item){ let formKey = this.getItemToFormKey(item, key); if(key === 'xdDate') { let sNowLen = (Math.floor(new Date().getTime() / 1000) + '').length; //秒转化为毫秒 if(item.value && this.$xdHelper.checkVarType(item.value) === 'array' && item.value.length > 0) { item.value = item.value.map(time=>{ let timeStr = time + ''; if(timeStr.length === sNowLen) { return this.$xdHelper.multiplyFloatNumber(time, 1000); } else return time }) } } if (this.isCascaderSave && this.form[formKey]) item['value'] = this.form[formKey]; if (item['rules']) { this.$set(this.rules, formKey, item['rules']) } this.$set(this.form, formKey, item['value']) }, /** * @description 设置刷新key值 * @param list {Array} */ setFormAndRules(list) { list.map(item =>{ if(!this.filterEleArr.includes(item.ele)) { switch (item.ele) { case 'xd-range' : this.handleSetFormAndRules('xdRange', item); break; case 'xd-date-range' : this.handleSetFormAndRules('xdDate', item); break; case 'xd-over-add-price' : this.handleSetFormAndRules('xdOverAddPrice', item); break; case 'xd-select-week-time' : this.handleSetFormAndRules('xdSelectWeekTime', item); break; default : const isEmpty = (val)=>{ if(this.$xdHelper.checkVarType(val) === 'array' || this.$xdHelper.checkVarType(val) === 'object') { return this.$xdHelper.isEmpty(val) } return (val === null || val === '' || val === undefined) }; //普通组件传入value无值时候,并且form有值 进行数据赋值财操作 if(this.isCascaderSave && this.form[item['valueKey']] && isEmpty(item.value)){ item['value'] = this.form[item['valueKey']]; } //时间处理 if(item.ele ==='xd-date') { let sNowLen = (Math.floor(new Date().getTime() / 1000) + '').length; if(item.value && this.$xdHelper.checkVarType(item.value) === 'number') { let timeStr = item.value + ''; if (timeStr.length === sNowLen) { item.value = this.$xdHelper.multiplyFloatNumber(item.value, 1000); } } console.log('sNowLen', item) } if (item['rules']) { this.$set(this.rules, item['valueKey'], item['rules']) } this.$set(this.form, item['valueKey'], item['value']); } } }); }, spDisabled(item, disabled){ if(item.ele === 'xd-size') { item.disabled = { wDisabled: disabled, hDisabled: disabled } } return item; }, /** * @description 分组优化 * @param list {Array} */ sortList(list){ let contentArr = [{ label: "", groupKey: "content", ele: "title", size: "small", }]; let advancedArr = [{ label: "", groupKey: "advanced", ele: "title", size: "small", }]; let styleArr = [{ label: "", groupKey: "style", ele: "title", size: "small", }]; //判断是否有完全分组 let hasGroupKey = true; let len = list.length; for (let i = 0; i < len; i++) { if(list[i].groupKey === undefined) hasGroupKey = false; } //未完全分组不处理 if(!hasGroupKey) return list; customClone(list).map(item=>{ if(item.groupKey === 'content') contentArr.push(item); else if(item.groupKey === 'advanced') advancedArr.push(item); else if(item.groupKey === 'style') styleArr.push(item); else contentArr.push(item); }); return [].concat(contentArr).concat(styleArr).concat(advancedArr); }, checkValueIsRefresh(list){ let formData = this.getParams(); list.map(item=>{ if(item.value !== formData[item.valueKey]) { if(item['isRefresh'] === true) { item.isKey = true; item.key = this.$xdHelper.randomChar(20); } } }) }, /** * @description 初始化表单 */ init() { let arrList = []; //设置值 if (this.list === null) arrList = this.testList; else arrList = this.list || []; //检查值是否发生变化 if(!this.$xdHelper.isEmpty(this.form)) { this.checkValueIsRefresh(arrList) }; //设置组背景样式========== if(this.isGroupShowBgc) { let groupColorStatus = false; let groupColorFirst = true; //第一个 arrList = arrList.map((item,index)=>{ if(item.ele === 'group_start') { groupColorStatus = true; } else if(item.ele === 'group_end') { groupColorStatus = false; groupColorFirst = true; } else { if(groupColorStatus) { //设置组第一元素样式名称 if(groupColorFirst){ item['xd-group-color-first'] = true; groupColorFirst = false } //设置组最后一个元素样式名称 if(arrList[index+1].ele === 'group_end') { item['xd-group-color-last'] = true; } item['xd-group-color'] = true; } } return item; }).filter(item=>{ return !(item.ele === 'group_start' || item.ele === 'group_end') }); } else { arrList = arrList.filter(item=>{ return !(item.ele === 'group_start' || item.ele === 'group_end') }); } //设置组背景样式========== //检查键是否有重复 let keys = {}; this.checkKeyRepeat(keys, this.$xdHelper.cloneDeep(arrList)); arrList = this.setIndexKey(arrList); this.setFormAndRules(arrList); //设置默认值 let groupStyle = []; let groupContent = []; let groupAdvanced = []; let notSupportDisabled = []; let group_index = 0; let group_status = {group_id_0:true}; let isFirstGroup = true; //优化列表排序 arrList = this.sortList(arrList); //初始化值 let newList = customClone(arrList).map(item=>{ if(item.groupKey === 'style') { if(item.ele === 'title' && item.label !== '' && groupStyle.filter(i=>i).length === 0) { item.isFirst = true } groupStyle.push(item.valueKey); if(this.isStyle !== null) { if(item.disabled === undefined) item.disabled = !this.isStyle; item = this.spDisabled(item, !this.isStyle); } } if(item.groupKey === 'content') { if(item.ele === 'title' && item.label !== '' && groupContent.filter(i=>i).length === 0) { item.isFirst = true } groupContent.push(item.valueKey); if(this.isContent !== null) { if(item.disabled === undefined) item.disabled = !this.isContent; item = this.spDisabled(item, !this.isStyle); } } if(item.groupKey === 'advanced') { if(item.ele === 'title' && item.label !== '' && groupAdvanced.filter(i=>i).length === 0) { item.isFirst = true } groupAdvanced.push(item.valueKey); if(this.isAdvanced !== null) { if(item.disabled === undefined) item.disabled = !this.isAdvanced; item = this.spDisabled(item, !this.isStyle); } } if(!this.supportDisabled.includes(item.ele)) notSupportDisabled.push(item); if(item.ele === 'title') { group_index++; item.group_id = group_index; //是否折叠操作(折叠时候显示第一个组) if(this.isExpand) { group_status[`group_id_${item.group_id}`] = isFirstGroup; } else group_status[`group_id_${item.group_id}`] = true; if(isFirstGroup) isFirstGroup = false; } else { item.groupIdClass = `group_id_${group_index}`; item.group_id = group_index; } return item }); if(notSupportDisabled.length > 0) { console.warn(`Not Support Disabled: ${JSON.stringify(notSupportDisabled.map(item=>{ return { key: item.valueKey, ele: item.ele } }))}`); window['$notSupportDisabled'] = notSupportDisabled; } //未分组 if(newList.length > 0 && ( groupStyle.length === 0 && groupContent.length === 0 && groupAdvanced.length === 0) ) { this.uiGroupList = {style:groupStyle,content:[1],advanced:groupAdvanced}; } //已分组 else { this.uiGroupList = { style: groupStyle.filter(i=>i), content: groupContent.filter(i=>i), advanced: groupAdvanced.filter(i=>i) }; } //未分组进行设置过滤完成值 if(!this.groupStatusFlag) { this.groupStatus = group_status; } this.groupStatusFlag = true; this.uiList = newList.map(item=>{ if(typeof this.isAllDisabled === 'boolean'){ if(this.isAllDisabled === true) item.disabled = this.isAllDisabled } return item }); this.formStatus = true; if (!this.isFrist) this.$emit('input', this.getParams()); //判断表单是否完成 this.$nextTick(()=>{ this.initStatus = true; }) }, //==设置表单 结束================================== //==设置验证与返回值================================ /** * @description 获取插槽中的自定义表单元素 */ getSlotNodes(){ return this.$children[0].$children.filter(item => { return item.$options['componentName'] === 'XdFormBaseDynamicField' || item.$options['componentName'] === 'ElForm'; }); }, /** * @description 获取插槽中的自定义表单元素 */ getSlotPromises(){ return this.getSlotNodes().map(item=>{ if(item.$options['componentName'] === 'XdFormBaseDynamicField') return item['submit'](); else return new Promise((resolve,reject)=>{ item.validate((valid, error) => { if (valid) resolve(valid); else reject({valid, error}); }) }) }) }, /** * @description 获取插槽中的自定义表单元素数据 */ getAllFormData(){ let temp = {}; this.getSlotNodes().map(item=>{ if (item.$options['componentName'] === 'XdFormBaseDynamicField'){ temp = Object.assign({}, temp, this.$xdHelper.cloneDeep(item.getParams())) } else{ temp = Object.assign({}, temp, this.$xdHelper.cloneDeep(item.$options.propsData['model'])) } }); let keys = {}; this.checkKeyRepeat(keys, temp, false); this.checkKeyRepeat(keys, this.getParams(), false); return Object.assign({}, this.$xdHelper.cloneDeep(temp), this.$xdHelper.cloneDeep(this.getParams()), ); }, /** * @description 提交验证包含(插槽中的表单 + 与当前表单) */ submitAll(){ let promiseArr = this.getSlotPromises(); promiseArr.push(this.submit()); return new Promise((resolve, reject) => { Promise.all(promiseArr) .then(res => { resolve(res); }) .catch((error)=>{ let errorArr = Object.keys(error.error).map(key=>{ return error.error[key][0]['message'] }); errorArr.splice(1); // let str = `数据项填写错误,包扩:【${errorArr.join('】,【')}】`; // this.$alert(str, '数据项错误', { // confirmButtonText: '确定', // dangerouslyUseHTMLString: true, // }); this.$message({ message: `填写错误:【${errorArr[0]}】`, type: 'error' }) reject(error.valid); }) }) }, /** * @description 提交前验证数据 */ submit() { return new Promise((resolve, reject) => { this.$refs[this.refID].validate((valid, error) => { if (valid) resolve(valid); else reject({valid, error}); }) }); }, //==设置验证与返回值================================ //==图片上传======================================= /** * @description 上传成功 */ handleSuccess(res) { this.$emit('success', res) }, /** * @description 上传到本地服务器成功返回值时刻触发,设置url字段 * @param result * @param resolve */ handleApiSuccessUrl(result, resolve) { this.$emit('onApiSuccessUrl', result, (url) => { resolve(url); }) }, /** * @description 单文件上传参数设置 * @param file * @param resolve */ handleGetParamsAndHeader(file, resolve) { this.$emit('onGetParamsAndHeader', file, (params) => { resolve(params); }) }, //==图片上传======================================= getGroupFormData(){ let data = {}; let group = []; Object.keys(this.getParams()).map(valueKey=>{ let len = this.uiList.length; for(let i = 0;i < len; i++) { let item = this.uiList[i]; if(valueKey === item.valueKey) { if(item.groupKey) { if(!data[item.groupKey]){ group.push(item.groupKey); data[item.groupKey] = {}; } data[item.groupKey][valueKey] = this.getParams()[valueKey]; }else{ if(!data['all']){ group.push('all'); data['all'] = {}; } data['all'][valueKey] = this.getParams()[valueKey]; } break } } }); if(group.length === 1) { if(group.includes('all')) return {group, data:{content: data['all']}}; else return {data, group} } else return {data, group} }, } }