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 @@