diff --git a/src/components/Template/CustomTable.vue b/src/components/Template/CustomTable.vue index 818b7b4..0b99cef 100644 --- a/src/components/Template/CustomTable.vue +++ b/src/components/Template/CustomTable.vue @@ -160,8 +160,12 @@ import HandleFormItem from "./HandleFormItem.vue"; import { isEqual } from "@/utils/index.js"; import { isShowOther } from "@/utils/formPackageCommon.js"; +import { EventBus } from "@/utils/eventBus"; +import { getuuid } from "@/utils/index.js"; +import moment from "moment"; +import _ from "lodash"; export default { - inject: ['templateFillType'], + inject: ['templateFillType', 'getZdxgjl'], name: 'CustomTable', components: { HandleFormItem @@ -217,6 +221,7 @@ export default { orangeBgCells: {}, // 存储需要橙色背景的单元格 {rowIndex-colIndex: true/false} isShowOther, oldLocalDataSource: [], + uuid: getuuid(), } }, watch: { @@ -226,7 +231,6 @@ export default { const { stepTableFormData = [], headerSelectFields = {} } = newData; this.updateDataSource(stepTableFormData); this.headerSelectFields = JSON.parse(JSON.stringify(headerSelectFields)); - console.log(stepTableFormData,"stepTableFormData") // 在数据加载后检查 compareTo 逻辑 this.checkCompareToOnDataLoad(); } @@ -242,10 +246,123 @@ export default { } } }, - mounted() { - // this.initHeaderSelectValues(); - }, + mounted() { + EventBus.$on('onEditSignCallback', this.handleEditSignCallback); + EventBus.$on('onFormEditSignCancel', this.handleEditSignCancel); + }, + unmounted() { + this.oldLocalDataSource = []; + EventBus.$off('onEditSignCallback', this.handleEditSignCallback); + EventBus.$off('onFormEditSignCancel', this.handleEditSignCancel); + }, methods: { + handleEditSignCancel(data) { + if (data.uuid === this.uuid) { + this.resetRecord(); + } + }, + handleEditSignCallback(data) { + if (data.uuid === this.uuid) { + this.updateRecord(); + } + }, + getRecords() { + const records = []; + const { nickName, name } = this.$store.getters; + const { oldLocalDataSource, localDataSource, columns, prefixKey, fieldItemLabel } = this; + + localDataSource.forEach((row, rowIndex) => { + const oldRow = oldLocalDataSource[rowIndex]; + if (!oldRow) { + return; + } + + columns.forEach((col, colIndex) => { + const oldValue = oldRow[col.prop]; + const newValue = row[col.prop]; + + if (!isEqual(oldValue, newValue)) { + const fieldLabelCn = this.$i18n.t(col.label, "zh_CN"); + const fieldLabelEn = this.$i18n.t(col.label, "en_US"); + const record = { + userNameCn: nickName, + userNameEn: name, + key: prefixKey + '_' + col.prop + '_' + rowIndex, + fieldCn: `${this.$i18n.t(fieldItemLabel, "zh_CN")}-${fieldLabelCn}`, + fieldEn: `${this.$i18n.t(fieldItemLabel, "en_US")}-${fieldLabelEn}`, + oldValue: oldValue, + value: newValue, + title: oldValue ? "修改" : "提交", + time: moment().format("YYYY-MM-DD HH:mm:ss"), + }; + this.getZdxgjl().unshift(record); + records.push(record); + } + + if (col.bodySubKey) { + const oldSubValue = oldRow[col.bodySubKey]; + const newSubValue = row[col.bodySubKey]; + + if (!isEqual(oldSubValue, newSubValue)) { + const fieldLabelCn = this.$i18n.t(col.label, "zh_CN"); + const fieldLabelEn = this.$i18n.t(col.label, "en_US"); + const record = { + userNameCn: nickName, + userNameEn: name, + key: prefixKey + '_' + col.bodySubKey + '_' + rowIndex, + fieldCn: `${this.$i18n.t(fieldItemLabel, "zh_CN")}-${fieldLabelCn}单位`, + fieldEn: `${this.$i18n.t(fieldItemLabel, "en_US")}-${fieldLabelEn}单位`, + oldValue: oldSubValue, + value: newSubValue, + title: oldSubValue ? "修改" : "提交", + time: moment().format("YYYY-MM-DD HH:mm:ss"), + }; + this.getZdxgjl().unshift(record); + records.push(record); + } + } + + if (col.otherCode) { + const oldOtherValue = oldRow[col.otherCode]; + const newOtherValue = row[col.otherCode]; + + if (!isEqual(oldOtherValue, newOtherValue)) { + const fieldLabelCn = this.$i18n.t(col.label, "zh_CN"); + const fieldLabelEn = this.$i18n.t(col.label, "en_US"); + const otherLabelCn = col.otherLabel ? this.$i18n.t(col.otherLabel, "zh_CN") : this.$i18n.t("template.common.other", "zh_CN"); + const otherLabelEn = col.otherLabel ? this.$i18n.t(col.otherLabel, "en_US") : this.$i18n.t("template.common.other", "en_US"); + const record = { + userNameCn: nickName, + userNameEn: name, + key: prefixKey + '_' + col.otherCode + '_' + rowIndex, + fieldCn: `${this.$i18n.t(fieldItemLabel, "zh_CN")}-${fieldLabelCn}${otherLabelCn}`, + fieldEn: `${this.$i18n.t(fieldItemLabel, "en_US")}-${fieldLabelEn}${otherLabelEn}`, + oldValue: oldOtherValue, + value: newOtherValue, + title: oldOtherValue ? "修改" : "提交", + time: moment().format("YYYY-MM-DD HH:mm:ss"), + }; + this.getZdxgjl().unshift(record); + records.push(record); + } + } + }); + }); + + return records; + }, + updateRecord() { + const records = this.getRecords(); + const params = { + type: "fieldChanged", + newRecord: records, + resourceList: this.getZdxgjl(), + } + setTimeout(() => { + EventBus.$emit('onModifyRecord', params); + }, 0); + this.oldLocalDataSource = JSON.parse(JSON.stringify(this.localDataSource)); + }, //取消按钮 重置记录 resetRecord(rowIndex, colIndex,) { if(this.localDataSource.length){ @@ -596,12 +713,27 @@ export default { this.$emit('row-delete', rowIndex); }, // 更新数据方法,可在formData变更时调用,也可由父组件调用 - updateDataSource(dataSource = []) { + updateDataSource(dataSource = [],autoUpdateRecord = true) { this.oldLocalDataSource = JSON.parse(JSON.stringify(this.localDataSource)); + if(autoUpdateRecord){ + this.showEditSignDialog(); + } console.log(this.oldLocalDataSource, "oldLocalDataSource") // 深拷贝数据以避免直接修改原始数据 this.localDataSource = JSON.parse(JSON.stringify(dataSource || [])); }, + // 根据行索引更新数据 autoUpdateRecord 是否自动更新记录 + updateDataSourceByRowIndex(rowIndex, data,autoUpdateRecord = true) { + this.oldLocalDataSource = JSON.parse(JSON.stringify(this.localDataSource)); + if(autoUpdateRecord){ + this.showEditSignDialog(); + } + this.localDataSource[rowIndex] = { ...this.localDataSource[rowIndex], ...data }; + this.localDataSource = [...this.localDataSource]; + }, + showEditSignDialog: _.debounce(()=>{ + + }, 100), onAddRow() { this.addRow({ actSolutionVolumePrecision: 3,//小数点精度默认为3 @@ -617,12 +749,7 @@ export default { getDataSource() { return this.localDataSource; }, - // 根据行索引更新数据 - updateDataSourceByRowIndex(rowIndex, data) { - this.oldLocalDataSource = JSON.parse(JSON.stringify(this.localDataSource)); - this.localDataSource[rowIndex] = { ...this.localDataSource[rowIndex], ...data }; - this.localDataSource = [...this.localDataSource]; - }, + // 判断表单项是否有错误 hasError(rowIndex, colIndex, field) { return this.formErrors.some(error => diff --git a/src/components/Template/Step.vue b/src/components/Template/Step.vue index d8e7d49..8543642 100644 --- a/src/components/Template/Step.vue +++ b/src/components/Template/Step.vue @@ -341,6 +341,16 @@ export default { } }) }, + getSjResource(){ + const stepData = this.steps.map((step, index) => { + const stepComponentRef = this.$refs[`stepCompRef_${index}`]; + if(stepComponentRef && stepComponentRef.length > 0){ + const {sjResource,yqResource} = this.$refs[`stepCompRef_${index}`][0]?.getSjResource(); + return { type: step.type, sjResource, yqResource } + } + }) + console.log(stepData,"steps") + }, // 直接获取表单数据,不做校验 getFilledFormData() { diff --git a/src/components/Template/StepComponents/ry/clcz.vue b/src/components/Template/StepComponents/ry/clcz.vue index 74ba360..63247f5 100644 --- a/src/components/Template/StepComponents/ry/clcz.vue +++ b/src/components/Template/StepComponents/ry/clcz.vue @@ -32,6 +32,8 @@ export default { wzmc: { type: "mix", fillType: "actFill", + ylCode: "sjcz", + dwCode: "wzsuldw", }, text3: { label: "物质,称取预计质量为", diff --git a/src/components/Template/StepComponents/ry/clfcz.vue b/src/components/Template/StepComponents/ry/clfcz.vue index 5941c90..f3ce6af 100644 --- a/src/components/Template/StepComponents/ry/clfcz.vue +++ b/src/components/Template/StepComponents/ry/clfcz.vue @@ -32,6 +32,8 @@ export default { wzmc: { type: "mix", fillType: "actFill", + ylCode: "sjcz", + dwCode: "wzsuldw1", }, text3: { label: "物质,称取预计质量为", diff --git a/src/components/Template/StepComponents/ry/fr.vue b/src/components/Template/StepComponents/ry/fr.vue index 1fb2586..ab446c9 100644 --- a/src/components/Template/StepComponents/ry/fr.vue +++ b/src/components/Template/StepComponents/ry/fr.vue @@ -39,6 +39,8 @@ import stepMixins from '@/components/Template/mixins/stepMixins.js'; sj:{ type:"regent", fillType:"actFill", + ylCode: "sjtj", + dwCode: "sjtjdw", }, text3:{ label:"溶液,各预计加入休积为", diff --git a/src/components/Template/StepComponents/ry/frdrq.vue b/src/components/Template/StepComponents/ry/frdrq.vue index e988e0c..76a1555 100644 --- a/src/components/Template/StepComponents/ry/frdrq.vue +++ b/src/components/Template/StepComponents/ry/frdrq.vue @@ -39,6 +39,8 @@ import stepMixins from '@/components/Template/mixins/stepMixins.js'; sj:{ type:"regent", fillType:"actFill", + ylCode: "sjtj", + dwCode: "sjtjdw", }, text3:{ label:"溶液,分别各预计加入休积为", diff --git a/src/components/Template/StepComponents/ry/jrry.vue b/src/components/Template/StepComponents/ry/jrry.vue index 57136e1..6cd0680 100644 --- a/src/components/Template/StepComponents/ry/jrry.vue +++ b/src/components/Template/StepComponents/ry/jrry.vue @@ -39,6 +39,8 @@ export default { sjrq:{ fillType: "actFill", type: "regent", + ylCode: "sjsr2", + dwCode: "sjsrdw2", }, text3:{ label: "溶液,加入预计体积为", diff --git a/src/components/Template/StepComponents/ry/qcyy.vue b/src/components/Template/StepComponents/ry/qcyy.vue index 9d79639..b414192 100644 --- a/src/components/Template/StepComponents/ry/qcyy.vue +++ b/src/components/Template/StepComponents/ry/qcyy.vue @@ -27,6 +27,8 @@ import stepMixins from '@/components/Template/mixins/stepMixins.js'; yq:{ type:"mix", fillType:"actFill", + ylCode: "sjqc", + dwCode: "sjqcdw", }, text2:{ label:"预计取出", diff --git a/src/components/Template/StepComponents/ry/rs.vue b/src/components/Template/StepComponents/ry/rs.vue index 74fbbee..274cf57 100644 --- a/src/components/Template/StepComponents/ry/rs.vue +++ b/src/components/Template/StepComponents/ry/rs.vue @@ -80,6 +80,8 @@ import stepMixins from '@/components/Template/mixins/stepMixins.js'; yjsj:{ type:"regent", fillType:"actFill", + ylCode: "sjtj2", + dwCode: "sjtjdw1", }, text6:{ label:"溶液,加入预计体积为", diff --git a/src/components/Template/StepComponents/ry/tjphcz.vue b/src/components/Template/StepComponents/ry/tjphcz.vue index 19404e3..2fe3d0c 100644 --- a/src/components/Template/StepComponents/ry/tjphcz.vue +++ b/src/components/Template/StepComponents/ry/tjphcz.vue @@ -43,6 +43,8 @@ export default { sj1: { type: "regent", fillType: "actFill", + ylCode: "sjjrl", + dwCode: "sjjrldw", }, text4: { label: "进行调节,实际加入量为", @@ -70,6 +72,8 @@ export default { sj2: { type: "regent", fillType: "actFill", + ylCode: "sjjrl1", + dwCode: "sjjrldw1", }, text6: { label: "进行调节,实际加入量为", diff --git a/src/components/Template/StepComponents/ry/tjphfcz.vue b/src/components/Template/StepComponents/ry/tjphfcz.vue index 464ef72..4acaa84 100644 --- a/src/components/Template/StepComponents/ry/tjphfcz.vue +++ b/src/components/Template/StepComponents/ry/tjphfcz.vue @@ -43,6 +43,8 @@ export default { sj1: { type: "regent", fillType: "actFill", + ylCode: "sjjrl", + dwCode: "sjjrldw", }, text4: { label: "进行调节,实际加入量为", @@ -70,6 +72,8 @@ export default { sj2: { type: "regent", fillType: "actFill", + ylCode: "sjjrl1", + dwCode: "sjjrldw1", }, text6: { label: "进行调节,实际加入量为", diff --git a/src/components/Template/StepComponents/ry/ym.vue b/src/components/Template/StepComponents/ry/ym.vue index 746f0ad..ddc3948 100644 --- a/src/components/Template/StepComponents/ry/ym.vue +++ b/src/components/Template/StepComponents/ry/ym.vue @@ -47,6 +47,8 @@ import stepMixins from '@/components/Template/mixins/stepMixins.js'; sj:{ type:"regent", fillType:"actFill", + ylCode: "ry3", + dwCode: "sjrytjdw", }, text4:{ label:"溶媒,加入预计体积为", @@ -75,7 +77,7 @@ import stepMixins from '@/components/Template/mixins/stepMixins.js'; sjrytjdw:{ type:"select", options: this.getDictOptions("business_tjdw"), - fillType: "preFill", + fillType: "actFill", }, text6:{ label:"至研钵中,研磨至", diff --git a/src/components/Template/StepFormPackage.vue b/src/components/Template/StepFormPackage.vue index 349746f..015bae3 100644 --- a/src/components/Template/StepFormPackage.vue +++ b/src/components/Template/StepFormPackage.vue @@ -115,6 +115,30 @@ export default { } }, methods: { + getSjResource(){ + const {allFieldsConfig,formFields} = this; + const sjResource = [],yqResource = []; + for(const key in allFieldsConfig){ + const item = allFieldsConfig[key]; + if(item.type === "xb" || item.type === "regent" || item.type === "gsp" || item.type === "mix"){ + sjResource.push({ + type:item.selectType, + value:formFields[key], + yl:formFields[item.ylCode],//用量 + dw:formFields[item.dwCode],//单位 + }); + }else if(item.type === "instrument"){ + yqResource.push({ + type:item.type, + value:formFields[key], + }); + } + } + return { + sjResource, + yqResource, + } + }, // 点击按钮 handleClickButton(e,item){ const {buttonName = ""} = e; @@ -137,6 +161,9 @@ export default { onMixReagentSubmit(data){ if(data.uuid !== this.uuid) return; this.formFields[this.currentClickKey] = data.selectedId; + if(data.selectType){ + this.allFieldsConfig[this.currentClickKey].sjSelectType = data.selectType; + } this.$emit("onDialogSubmit",data) }, // 处理选择试剂提交 diff --git a/src/components/Template/mixins/formPackageMixins.js b/src/components/Template/mixins/formPackageMixins.js index 7fb210d..c8a8635 100644 --- a/src/components/Template/mixins/formPackageMixins.js +++ b/src/components/Template/mixins/formPackageMixins.js @@ -144,16 +144,21 @@ export default { //更新记录 showEditSignDialog: _.debounce(function () { //如果oldFormFields中存在空值,说明是第一次填写,直接更新记录 - const flag = Object.values(this.oldFormFields).some(item => !item); - if (flag) { - this.updateRecord(); + const flag = Object.values(this.oldFormFields).every((val)=>{ + // 0 算有值 + if (val === 0) return true; + if (val === "0") return true; + // 其他情况:非 null、非 undefined、非空字符串 + return val != null && val != undefined && val != ""; + }); + + const diff = this.compareOldAndCurrentFormFields(); + if (!diff && this.templateFillType === "actFill" && flag) { + setTimeout(() => {//延迟200ms打开弹窗,避免弹窗打开时,会有闪烁 + EventBus.$emit('showEditSignDialog', { uuid: this.uuid }); + }, 200); }else{ - const diff = this.compareOldAndCurrentFormFields(); - if (!diff) { - setTimeout(() => {//延迟200ms打开弹窗,避免弹窗打开时,会有闪烁 - EventBus.$emit('showEditSignDialog', { uuid: this.uuid }); - }, 200); - } + this.updateRecord(); } }, 100), diff --git a/src/components/Template/mixins/stepMixins.js b/src/components/Template/mixins/stepMixins.js index 2fce4cc..dca100c 100644 --- a/src/components/Template/mixins/stepMixins.js +++ b/src/components/Template/mixins/stepMixins.js @@ -17,6 +17,9 @@ export default { getFilledFormData() { return this.$refs.stepFormPackageRef?.getFilledFormData(); }, + getSjResource() { + return this.$refs.stepFormPackageRef?.getSjResource(); + }, //试验配制条件options getDictOptions(dictType) { return this.dict.type[dictType] || [] diff --git a/src/views/business/comps/template/comps/sp/SWYPFXRYPZB.vue b/src/views/business/comps/template/comps/sp/SWYPFXRYPZB.vue index 46edb2a..5303246 100644 --- a/src/views/business/comps/template/comps/sp/SWYPFXRYPZB.vue +++ b/src/views/business/comps/template/comps/sp/SWYPFXRYPZB.vue @@ -25,6 +25,7 @@ ref="remarkRef" :formConfig="remarkConig" :formData="formData" /> + @@ -308,6 +309,9 @@ export default { this.resourceTmp = tmpResource return content; }, + onSave(){ + this.$refs.stepRef.getSjResource() + } } }; diff --git a/src/views/business/comps/template/dialog/SelectMixReagentDialog.vue b/src/views/business/comps/template/dialog/SelectMixReagentDialog.vue index 06542e5..369bb3c 100644 --- a/src/views/business/comps/template/dialog/SelectMixReagentDialog.vue +++ b/src/views/business/comps/template/dialog/SelectMixReagentDialog.vue @@ -142,7 +142,7 @@ export default { const selectedValue = this.otherChecked ? this.otherReagent : this.selectedId; this.$emit('submit', selectedValue, row); // 触发eventBus事件 - EventBus.$emit("onMixReagentSubmit", { uuid: this.uuid, selectedId: selectedValue, row }); + EventBus.$emit("onMixReagentSubmit", { uuid: this.uuid, selectedId: selectedValue, row,selectType:this.selectType }); this.visible = false; }, // 选择试剂时处理