diff --git a/package.json b/package.json index a76092f8f94f1477df46fdeaf0a441a7128cb8ce..e5bc381eb4b0995c5e8c4f17dcd016775bc11f27 100755 --- a/package.json +++ b/package.json @@ -40,6 +40,8 @@ "d3": "^5.14.2", "d3-graphviz": "^3.2.0", "docx-preview": "^0.1.13", + "exceljs": "^4.4.0", + "file-saver": "^2.0.5", "github-markdown-css": "^5.2.0", "handsontable": "^6.2.2", "highlight.js": "^11.8.0", diff --git a/src/resources/assets/js/util.js b/src/resources/assets/js/util.js index 01488e7077a5cabdde57805bd310b6b8cf8fc03d..046e83380e9ed7b0d87f6a2494f005f653b3cc64 100644 --- a/src/resources/assets/js/util.js +++ b/src/resources/assets/js/util.js @@ -104,7 +104,7 @@ const methods = { } else if (format == 'MMdd') { timestr = [month, day].join(''); } else if (format == 'yyyyMMddHHmmss') { - timestr = year + month + day + hours + minutes + seconds; + timestr = `${year}${month}${day}${hours}${minutes}${seconds}`; } return timestr; }, diff --git a/src/resources/assets/languages/term/en.json b/src/resources/assets/languages/term/en.json index b1740cf3d88a0e60ab816dd8e442edd238412de7..1c7b45562f71f7681b820330b5b3f03da324e0fe 100644 --- a/src/resources/assets/languages/term/en.json +++ b/src/resources/assets/languages/term/en.json @@ -1138,7 +1138,10 @@ "heartbeattime": "Last heartbeat time", "heartbeatrate": "heart rate ", "heartbeatthreshold": "Heartbeat threshold", - "versionlog": "Version Log" + "versionlog": "Version Log", + "exporttable": "Export Table", + "importtable": "Import Table", + "excelinputtemplate": "Table Input Template" }, "knowledge": { "document": "Document", diff --git a/src/resources/assets/languages/term/zh.json b/src/resources/assets/languages/term/zh.json index f0a7dd9180bac8240831827f713b901a9b52784e..44320dff31e29ffa372e5543df4fa7fa82c2efd4 100644 --- a/src/resources/assets/languages/term/zh.json +++ b/src/resources/assets/languages/term/zh.json @@ -1137,7 +1137,10 @@ "heartbeattime": "最近一次心跳时间", "heartbeatrate": "心跳频率", "heartbeatthreshold": "心跳阈值", - "versionlog": "版本日志" + "versionlog": "版本日志", + "exporttable": "导出表格", + "importtable": "导入表格", + "excelinputtemplate": "表格输入模板" }, "knowledge": { "document": "文档", diff --git a/src/resources/mixins/formMixins.js b/src/resources/mixins/formMixins.js index f0d75d7abb8730c57fb76b949609e72a21072350..2cf753ae5960d802069605f802c0e2d229723e1a 100644 --- a/src/resources/mixins/formMixins.js +++ b/src/resources/mixins/formMixins.js @@ -40,7 +40,12 @@ export default { desc: String, descType: String, //描述用alert组件进行包裹 info、success、warning、error clearable: Boolean, - readonlyTextIsHighlight: { type: Boolean, default: false } // 只读模式下,是否需要高亮显示值 + readonlyTextIsHighlight: { type: Boolean, default: false }, // 只读模式下,是否需要高亮显示值 + isClearEchoFailedDefaultValue: { + // 是否清空回显失败默认值 + type: Boolean, + default: false + } }, methods: { dispatch(componentName, eventName, params) { diff --git a/src/resources/plugins/TsForm/TsFormCheckbox.vue b/src/resources/plugins/TsForm/TsFormCheckbox.vue index a45c8199b3a17e05e8c4ffa6d992e0546adf20eb..674f592e3148232033b4bd22b1c68bb43a0197ca 100755 --- a/src/resources/plugins/TsForm/TsFormCheckbox.vue +++ b/src/resources/plugins/TsForm/TsFormCheckbox.vue @@ -155,6 +155,7 @@ export default { } }); } else if (_this.nodeList && _this.nodeList.length) { + this.handleEchoFailedDefaultValue(); // if (!_this.value.length) { // //如果没有值的 // let selectedItem = _this.nodeList.filter(n => { @@ -167,6 +168,20 @@ export default { // } } }, + handleEchoFailedDefaultValue() { + // 处理回显失败默认值,回显失败清空默认值 + let selectedList = []; + let valueList = this.currentValue instanceof Array ? this.currentValue : [this.currentValue]; + valueList.forEach((item, index) => { + if (item && !this.nodeList.find((n) => n[this.valueName] == item)) { + selectedList.push(item[this.valueName]); + this.currentValue.splice(index, 1); + } + }); + if (!this.$utils.isEmpty(selectedList) && this.isClearEchoFailedDefaultValue) { + this.onChangeValue(); + } + }, onChangeValue(val, item) { let isSame = JSON.stringify(this.value) == JSON.stringify(this.currentValue); let value = JSON.parse(JSON.stringify(this.currentValue)); @@ -222,6 +237,7 @@ export default { } }, 100); } + this.handleEchoFailedDefaultValue(); } }, computed: { diff --git a/src/resources/plugins/TsForm/TsFormRadio.vue b/src/resources/plugins/TsForm/TsFormRadio.vue index 93cb652913e7ec9b304633ad233f5c7103207a75..4584d58c8c87223389dbe713e9981d95949ee256 100755 --- a/src/resources/plugins/TsForm/TsFormRadio.vue +++ b/src/resources/plugins/TsForm/TsFormRadio.vue @@ -155,6 +155,7 @@ export default { _this.nodeList = _this.dealDataByUrl(_this.nodeList); } _this.setSelectList(); + _this.handleEchoFailedDefaultValue(); } }); } else if (_this.nodeList && _this.nodeList.length) { @@ -168,33 +169,48 @@ export default { _this.onChangeValue(); } } + + this.handleEchoFailedDefaultValue(); + } + }, + handleEchoFailedDefaultValue() { + // 处理回显失败默认值,回显失败清空默认值 + let selectedList = []; + if (this.currentValue) { + let selectedItem = this.nodeList.find((item) => item[this.valueName] == this.currentValue); + if (!selectedItem) { + this.currentValue = null; + } + } + if (!this.$utils.isEmpty(selectedList) && this.isClearEchoFailedDefaultValue) { + this.onChangeValue(); } }, onChangeValue() { - let _this = this; - let isSame = _this.value === _this.currentValue; + let isSame = this.value == this.currentValue; + let value = this.currentValue; //20210129_zqp_新增支持on-change方法第二个参数获取选中的选项的完整数据 let selectedItem = []; - if (this.nodeList && this.nodeList.length && _this.currentValue) { + if (this.nodeList && this.nodeList.length && value) { selectedItem = this.nodeList.find(n => { - return n[_this.valueName] === _this.currentValue; + return n[this.valueName] === value; }); } - _this.$emit('update:value', _this.currentValue); - _this.$emit('change', _this.currentValue, selectedItem || null); + this.$emit('update:value', value); + this.$emit('change', value, selectedItem || null); if (!(!this.isChangeWrite && isSame)) { //改变值时出发on-change事件 - _this.$emit('on-change', _this.currentValue, selectedItem || null); + this.$emit('on-change', value, selectedItem || null); } if (!isSame) { - typeof _this.onChange == 'function' && _this.onChange(_this.currentValue, selectedItem || null); - if (_this.currentValidList.length > 0) { - _this.valid(_this.currentValue); + typeof this.onChange == 'function' && this.onChange(value, selectedItem || null); + if (this.currentValidList.length > 0) { + this.valid(value); } } else { - _this.validMesage = ''; + this.validMesage = ''; } - this.setSelectList(selectedItem[_this.textName] || ''); + this.setSelectList(selectedItem[this.textName] || ''); }, setSelectList(selectedLabel) { let _this = this; @@ -233,11 +249,11 @@ export default { }, watch: { value(newValue, oldValue) { - let _this = this; - if (newValue != _this.currentValue) { - _this.currentValue = newValue; - _this.validMesage = ''; + if (newValue != this.currentValue) { + this.currentValue = newValue; + this.validMesage = ''; this.setSelectList(); + this.handleEchoFailedDefaultValue(); } }, dataList: { @@ -245,6 +261,7 @@ export default { if (!this.url) { this.$set(this, 'nodeList', newValue); this.setSelectList(); + this.handleEchoFailedDefaultValue(); } }, deep: true diff --git a/src/resources/plugins/TsForm/TsFormSelect.vue b/src/resources/plugins/TsForm/TsFormSelect.vue index ccc4731e665dc631ad0f323d43c6225b9632b394..5e6222abdad1de36f584e9c19ccf2c354009a3c1 100755 --- a/src/resources/plugins/TsForm/TsFormSelect.vue +++ b/src/resources/plugins/TsForm/TsFormSelect.vue @@ -534,7 +534,7 @@ export default { }; }, beforeCreate() {}, - created: function() { + created() { this.initDataListByUrl(false); }, mounted() {}, @@ -710,6 +710,7 @@ export default { this.setDefaultValue(); this.initValueByNodeList(); this.isSingel = !!(this.isSquare && this.currentSearch); // 解决文本占位符显示不出来问题 + this.handleEchoFailedDefaultValue(); } }, initValueByNodeList() { @@ -898,8 +899,10 @@ export default { }); } this.selectedList = selectedList.length > 1 ? list : selectedList; + this.handleEchoFailedDefaultValue(); } else { _this.selectedList = []; + this.handleEchoFailedDefaultValue(); } if (!_this.multiple) { @@ -914,6 +917,24 @@ export default { } }); }, + handleEchoFailedDefaultValue() { + // 处理回显失败默认值,回显失败清空默认值 + let selectedList = []; + let valueList = this.multiple ? this.currentValue : this.currentValue instanceof Array ? this.currentValue : [this.currentValue]; + valueList.forEach((item, index) => { + if (item && !this.selectedList.find((n) => n[this.valueName] == item)) { + selectedList.push(item[this.valueName]); + if (this.currentValue instanceof Array) { + this.currentValue.splice(index, 1); + } else if (this.currentValue) { + this.currentValue = null; + } + } + }); + if (!this.$utils.isEmpty(selectedList) && this.isClearEchoFailedDefaultValue) { + this.onChangeValue(); + } + }, dynamicSearch(query, isFirst) { //query:搜索的关键字,isFirst 是否第一次初始化下拉值,主要为了必填时只有一个下拉值时默认填充 let _this = this; diff --git a/src/resources/plugins/TsSheet/form-item.vue b/src/resources/plugins/TsSheet/form-item.vue index c1e45663713ee98122bdcc46edd956234c84d816..b5f0dd81650d9aba455ba7ec32535c375226d0fa 100644 --- a/src/resources/plugins/TsSheet/form-item.vue +++ b/src/resources/plugins/TsSheet/form-item.vue @@ -62,6 +62,7 @@ :required="(mode != 'defaultvalue'?formItem.config && formItem.config.isRequired:false)" :formData="formData" :readonlyTextIsHighlight="readonlyTextIsHighlight" + :isClearEchoFailedDefaultValue="isClearEchoFailedDefaultValue" @setValue="setValue" @resize="$emit('resize')" @select="selectFormItem" @@ -119,6 +120,11 @@ export default { default: function() { return {}; } + }, + isClearEchoFailedDefaultValue: { + // 默认值对应不上下列列表时,是否需要清空默认值 + type: Boolean, + default: false } }, data() { diff --git a/src/resources/plugins/TsSheet/form/component/base.vue b/src/resources/plugins/TsSheet/form/component/base.vue index 14e1436a8defe49bf1bd00fa7aa35a58b13c7abe..eec41998879ee41fc134be94b25daa92f9a8992d 100644 --- a/src/resources/plugins/TsSheet/form/component/base.vue +++ b/src/resources/plugins/TsSheet/form/component/base.vue @@ -10,7 +10,12 @@ export default { disabled: { type: Boolean, default: false }, required: { type: Boolean, default: false }, formData: Object, - readonlyTextIsHighlight: {type: Boolean, default: false} // 只读模式下,是否需要高亮显示值 + readonlyTextIsHighlight: {type: Boolean, default: false}, // 只读模式下,是否需要高亮显示值 + isClearEchoFailedDefaultValue: { + // 是否清空回显失败默认值 + type: Boolean, + default: false + } }, data() { return { diff --git a/src/resources/plugins/TsSheet/form/component/formcheckbox.vue b/src/resources/plugins/TsSheet/form/component/formcheckbox.vue index 085cc4c8c6d117db616917a5ee981dd9a6e31caa..cb48341505dd4e16d9b934741b1330518e04c978 100644 --- a/src/resources/plugins/TsSheet/form/component/formcheckbox.vue +++ b/src/resources/plugins/TsSheet/form/component/formcheckbox.vue @@ -9,6 +9,7 @@ :vertical="config.direction === 'vertical'" :validateList="validateList" :readonlyTextIsHighlight="readonlyTextIsHighlight" + :isClearEchoFailedDefaultValue="isClearEchoFailedDefaultValue" @change=" val => { setValue(val); diff --git a/src/resources/plugins/TsSheet/form/component/formradio.vue b/src/resources/plugins/TsSheet/form/component/formradio.vue index 3dbb1f18fd760504b4902d147b334e35fca696ae..5e48b56bbc2c0b740152875ee3a2d4cc72b7c12c 100644 --- a/src/resources/plugins/TsSheet/form/component/formradio.vue +++ b/src/resources/plugins/TsSheet/form/component/formradio.vue @@ -10,6 +10,7 @@ :validateList="validateList" :allowToggle="true" :readonlyTextIsHighlight="readonlyTextIsHighlight" + :isClearEchoFailedDefaultValue="isClearEchoFailedDefaultValue" @change=" val => { setValue(val); diff --git a/src/resources/plugins/TsSheet/form/component/formselect.vue b/src/resources/plugins/TsSheet/form/component/formselect.vue index aa19e5d0ffe1503d84742a9453b7bc5a3efe07ef..1546141d81873b822506e899e60ed387820978d9 100644 --- a/src/resources/plugins/TsSheet/form/component/formselect.vue +++ b/src/resources/plugins/TsSheet/form/component/formselect.vue @@ -9,6 +9,7 @@ :value="actualValue" :validateList="validateList" :readonlyTextIsHighlight="readonlyTextIsHighlight" + :isClearEchoFailedDefaultValue="isClearEchoFailedDefaultValue" border="border" search @change=" diff --git a/src/resources/plugins/TsSheet/form/component/formtableinputer/index.vue b/src/resources/plugins/TsSheet/form/component/formtableinputer/index.vue index a9f4c4a8b54bde399e24568df598c64890da7b21..ab02664e45f1a97e3a59ccc0f2b1f554ca5639ff 100644 --- a/src/resources/plugins/TsSheet/form/component/formtableinputer/index.vue +++ b/src/resources/plugins/TsSheet/form/component/formtableinputer/index.vue @@ -7,6 +7,41 @@
+ {{ $t('term.pbc.exporttemplate') }} + + + {{ $t('term.pbc.exporttemplate') }} + + {{ $t('term.framework.exporttable') }} + + + {{ $t('term.framework.exporttable') }} + + + + {{ $t('term.framework.importtable') }} + @@ -53,6 +89,8 @@ import base from '../base.vue'; import validmixin from '../common/validate-mixin.js'; import TsTable from '@/resources/components/TsTable/TsTable.vue'; +import ExcelJS from 'exceljs'; +import FileSaver from 'file-saver'; export default { name: '', @@ -71,7 +109,10 @@ export default { isTableSelectorDialogShow: false, selectedIndexList: [], tableData: { theadList: [], tbodyList: [] }, - rowFormItem: {} //保存每行的定义数据,避免每次都deepClone新数据,导致reaction失效 + rowFormItem: {}, //保存每行的定义数据,避免每次都deepClone新数据,导致reaction失效 + maxSize: 1024 * 10, + isShowExportExcelTemplate: true, + isShowExportExcel: true }; }, beforeCreate() {}, @@ -240,6 +281,295 @@ export default { updateRowSort(event) { let beforeVal = this.tableData.tbodyList.splice(event.oldIndex, 1)[0]; this.tableData.tbodyList.splice(event.newIndex, 0, beforeVal); + }, + async exportExcelTemplate() { + // 导出excel模板 + this.isShowExportExcelTemplate = false; + const _workbook = new ExcelJS.Workbook(); + const _sheet1 = _workbook.addWorksheet('sheet1'); // 添加工作表 + // 设置表头 + let theadList = []; + let theadUuidList = []; + this.tableData.theadList.forEach((item) => { + if (item?.key && item?.title) { + if (item.key != 'number') { + // 序号是否需要显示 + theadList.push({ + header: item.title, + key: item.key, + width: 20, + style: this.handleCellType(item.key) + }); + theadUuidList.push(item.key); + } + } + }); + _sheet1.columns = theadList; + let headerRow = _sheet1.getRow(1); // 获取第一行 + headerRow.eachCell((cell, colNum) => { + cell.font = { + bold: true, + size: 12, + name: '微软雅黑', + color: {argb: '000'} + }; + cell.alignment = { + horizontal: 'center', + vertical: 'middle', + wrapText: true // 单元格自动换行 + }; + }); + // 数据验证 + let selectCpmponentList = ['formselect', 'formradio', 'formcheckbox']; // 数据有效性列表 + const startRow = 2; + const endRow = 10; + for (let [index, item] of this.extraList.entries()) { + if (theadUuidList.includes(item.uuid) && selectCpmponentList.includes(item.handler)) { + // 遍历每一行,设置数据有效性 + let formulaeList = await this.handleFormulae(item.config); + for (let row = startRow; row <= endRow; row++) { + const worksheetRow = _sheet1.getRow(row); + const cell = worksheetRow.getCell(`${this.convertToExcelColumn(index + 1)}`); + cell.dataValidation = { + type: 'list', + allowBlank: false, + formulae: formulaeList + }; + } + } + } + // 导出表格 + _workbook.xlsx.writeBuffer().then((buffer) => { + let _file = new Blob([buffer], { + type: 'application/octet-stream' + }); + new Promise((resolve, reject) => { + try { + FileSaver.saveAs(_file, `${this.$t('term.framework.excelinputtemplate')}.xlsx`); + resolve(this.$t('page.success')); + } catch (error) { + reject(this.$t('page.fail')); + } + }).finally((message) => { + this.isShowExportExcelTemplate = true; + }); + }); + }, + async exportExcel() { + // 导出excel带表格数据 + this.isShowExportExcel = false; + const _workbook = new ExcelJS.Workbook(); // 创建工作簿 + const _sheet1 = _workbook.addWorksheet('sheet1'); // 添加工作表 + let columnsList = []; + let theadUuidList = []; // 获取所有表头的uuid列表 + this.tableData.theadList.forEach((item) => { + if (item?.key && item?.title) { + if (item.key != 'number') { + columnsList.push({ + header: item.title, + key: item.key, + width: 20, + style: this.handleCellType(item.key) // 单元格格式为文本类型,解决日期和时间导入时类型是Date日期的类型 + }); + theadUuidList.push(item.key); + } + } + }); + _sheet1.columns = columnsList; + let headerRow = _sheet1.getRow(1); // 获取第一行 + headerRow.eachCell((cell, colNum) => { + cell.font = { + bold: true, + size: 12, + name: '微软雅黑', + color: {argb: '000'} + }; + cell.alignment = { + horizontal: 'center', + vertical: 'middle', + wrapText: true // 单元格自动换行 + }; + }); + let tbodyList = this.$utils.deepClone(this.tableData.tbodyList); + tbodyList.forEach((item) => { + // 添加数据 + if (item) { + for (let key in item) { + if (key != 'uuid' && key != '_selected') { + let selectedItem = this.extraList.find((extraItem) => extraItem.uuid == key); + let {config = {}, handler = ''} = selectedItem || {}; + let {dataSource = '', isMultiple = false} = config; + if (dataSource == 'matrix' && isMultiple) { + // 矩阵数据源并且是多选,需要处理值去掉&=& + this.$set(item, [key], this.handleSpecialValue(item[key])); + } else if (dataSource == 'static' && (isMultiple || handler == 'formcheckbox')) { + // 静态数据源并且是多选 + this.$set(item, [key], item[key].join(',')); + } + } + } + _sheet1.addRow({...item}); + } + }); + // 数据验证 + let selectCpmponentList = ['formselect', 'formradio', 'formcheckbox']; // 数据有效性列表 + const startRow = 2; + const endRow = 10; + for (let [index, item] of this.extraList.entries()) { + if (theadUuidList.includes(item.uuid) && selectCpmponentList.includes(item.handler)) { + // 遍历每一行,设置数据有效性 + let formulaeList = await this.handleFormulae(item.config); + for (let row = startRow; row <= endRow; row++) { + const worksheetRow = _sheet1.getRow(row); + const cell = worksheetRow.getCell(`${this.convertToExcelColumn(index + 1)}`); + cell.dataValidation = { + type: 'list', + allowBlank: false, + formulae: formulaeList + }; + } + } + } + + // 导出表格 + _workbook.xlsx.writeBuffer().then((buffer) => { + let _file = new Blob([buffer], { + type: 'application/octet-stream' + }); + + new Promise((resolve, reject) => { + try { + FileSaver.saveAs(_file, `${this.formItem?.label || ''}_${this.$utils.getCurrenttime('yyyyMMddHHmmss')}.xlsx`); + resolve(this.$t('page.success')); + } catch (error) { + reject(this.$t('page.fail')); + } + }).finally((message) => { + this.isShowExportExcel = true; + }); + }); + }, + handleCellType(uuid) { + // 设置单元格类型 + let componentsList = ['formdate', 'formtime']; + const foundItem = this.extraList.find((item) => { + return item.uuid && item.uuid === uuid && componentsList.includes(item.handler); + }); + const formatObj = foundItem ? { numFmt: '@' } : {}; + return formatObj; + }, + convertToExcelColumn(number) { + // 将数字转化成A-Z的值 + let result = ''; + while (number > 0) { + const remainder = (number - 1) % 26; + result = String.fromCharCode(65 + remainder) + result; + number = Math.floor((number - 1) / 26); + } + return result; + }, + async handleFormulae(config) { + // 处理数据有效性下拉 + let {dataSource = '', matrixUuid = '', mapping = {}, dataList = [] } = config || {}; + if (dataSource === 'matrix') { + let param = { + matrixUuid: matrixUuid, + valueField: mapping.value, + textField: mapping.text + }; + return await this.$api.framework.matrix.getMatrixDataForSelect(param).then(res => { + if (res.Status == 'OK') { + return [`"${res.Return?.dataList?.filter((item) => this.handleSpecialValue(item.value)).map((item) => this.handleSpecialValue(item.value)).join(',')}"`]; + } + }); + } else { + const resultArray = [ + `"${dataList + .filter(item => item?.value) + .map(item => item.value) + .join(',')}"` + ]; + return resultArray; + } + }, + handleSpecialValue(value) { + let valueList = []; + if (typeof value == 'string') { + return value?.split('&=&')?.[0] || value; + } else if (Array.isArray(value)) { + valueList = value.map((item) => item?.split('&=&')?.[0] || item).filter(Boolean); + } + return valueList.join(','); + }, + handleFormatError(file) { + this.$Notice.warning({ + title: this.$t('message.incorrectformat'), + desc: this.$t('form.validate.fileformat', {target: file.name}) + }); + }, + handleMaxSize(file) { + this.$Notice.warning({ + title: this.$t('page.uploadfilelimit', {target: this.maxSize / 1024}), + desc: `${file.name}` + }); + }, + async handleBeforeUpload(file) { + const workbook = new ExcelJS.Workbook(); + workbook.xlsx.load(file).then((workbook) => { + workbook?.eachSheet((sheet, id) => { + sheet?.eachRow((row, rowIndex) => { + if (rowIndex != 1) { + let rowValue = {}; + let rowValuesList = this.$utils.deepClone(row.values); + rowValuesList.splice(0, 1); // 删除excel第一列的序号 + this.tableData.theadList.forEach((item, tIndex) => { + if (item.key != 'selection' && item.key != 'number') { + this.$set(rowValue, [item.key], this.byComponentTypeSetValue(item.key, rowValuesList[tIndex - 2])); + } + }); + let item = {...(this.tableData.tbodyList[rowIndex - 2] || {}), ...rowValue}; + if (!this.$utils.isEmpty(this.tableData.tbodyList[rowIndex - 2])) { + // 不为空时,修改数组对象里面的值 + this.tableData.tbodyList.splice(rowIndex - 2, 1, item); + } else { + // 空数组时,新增一条新的数据 + this.tableData.tbodyList.push(item); + } + } + }); + }); + this.$Message.success(this.$t('message.importsuccess')); + }); + }, + byComponentTypeSetValue(uuid, value) { + // 根据组件的类型,设置回显值 + let resultValue; + let selectedItem = this.extraList.find((extraItem) => extraItem.uuid == uuid); + let {config = {}, handler = ''} = selectedItem || {}; + if (value) { + let {dataSource = '', isMultiple = false} = config || {}; + if (dataSource === 'matrix' && isMultiple) { + // 矩阵 + resultValue = []; + let valueList = []; + if (typeof value == 'string') { + valueList = value.split(','); + valueList.forEach((valueItem) => { + if (valueItem) { + resultValue.push(`${valueItem}&=&${valueItem}`); + } + }); + } else { + resultValue.push(`${value}&=&${value}`); + } + } else if (dataSource == 'static' && (isMultiple || (handler == 'formcheckbox'))) { + resultValue = []; + resultValue.push(value); + } else { + resultValue = value; + } + } + return resultValue; } }, filter: {}, @@ -322,7 +652,6 @@ export default { 'tableData.tbodyList': { handler: function(val) { this.setValue(val); - //console.log(JSON.stringify(val, null, 2)); }, deep: true, immediate: true @@ -330,4 +659,11 @@ export default { } }; - +