diff --git a/src/components/Template/BaseInfoFormPackage.vue b/src/components/Template/BaseInfoFormPackage.vue index 5773b94..a22e75d 100644 --- a/src/components/Template/BaseInfoFormPackage.vue +++ b/src/components/Template/BaseInfoFormPackage.vue @@ -103,7 +103,9 @@ :item="sItem" :value="formFields[key]" />
- @@ -194,6 +197,7 @@
@@ -208,6 +212,7 @@ class="flex flex1"> diff --git a/src/components/Template/CustomTable.vue b/src/components/Template/CustomTable.vue index 3364b46..bd63a94 100644 --- a/src/components/Template/CustomTable.vue +++ b/src/components/Template/CustomTable.vue @@ -98,6 +98,7 @@ :item="getBodyItem(col, rowIndex)" :value="row[col.prop]" :error="hasError(rowIndex, colIndex, col.prop)" @onRegentSubmit="(data)=>onRegentSubmit(data,col, rowIndex, colIndex, row)" + @beforeReagentSubmit="(data, callback)=>onBeforeReagentSubmit(data, callback,col,row)" @update:error="onErrorUpdate(rowIndex, colIndex, col.prop, $event)" :orange-bg="hasOrangeBg(rowIndex, colIndex, col.prop)" /> @@ -331,6 +332,12 @@ export default { } this.$emit("clickable", col, rowIndex, row) }, + onBeforeReagentSubmit(data, callback, col, row){ + if (this.templateFillType !== 'actFill') { + return + } + this.$emit("beforeReagentSubmit", {selectData:data, callback, key:col.prop, rowData:row}) + }, onRegentSubmit(data, col, rowIndex, colIndex, row){ if (this.templateFillType !== 'actFill') { return diff --git a/src/components/Template/HandleFormItem.vue b/src/components/Template/HandleFormItem.vue index d9c0c20..906307f 100644 --- a/src/components/Template/HandleFormItem.vue +++ b/src/components/Template/HandleFormItem.vue @@ -360,10 +360,40 @@ export default { //试剂弹窗提交 onMixReagentSubmit(data) { if (data.uuid !== this.uuid) return; + + // 创建一个验证控制器,用于收集各级验证结果 + const validationController = { + isPrevented: false, + errorMsg: '', + prevent(msg) { + this.isPrevented = true; + if (msg) this.errorMsg = msg; + } + }; + + // 触发自定义验证事件,让父组件判断是否满足需求 + // 父组件可以通过validationController.prevent(msg)来阻止提交 + this.$emit('beforeReagentSubmit', data, validationController); + + // 检查是否被阻止 + if (validationController.isPrevented) { + // 验证不通过,显示错误信息 + if (validationController.errorMsg) { + this.$message.error(validationController.errorMsg); + } + return; + } + + // 验证通过,继续执行 + this.executeReagentSubmit(data); + }, + + // 执行试剂提交的共同逻辑 + executeReagentSubmit(data) { this.inputValue = data.selectedId; this.selectRegentInfo = data; + EventBus.$emit("hideSelectMixReagentDialog"); this.onCommonHandleSaveRecord(this.inputValue); - // this.inputValue = this.item.label; }, //统一处理试剂/供试品等弹窗 onCommonHandleRegent(item, type) { diff --git a/src/views/business/comps/template/TemplateTable.vue b/src/views/business/comps/template/TemplateTable.vue index 7d696ed..8dd42d9 100644 --- a/src/views/business/comps/template/TemplateTable.vue +++ b/src/views/business/comps/template/TemplateTable.vue @@ -240,6 +240,9 @@ export default { EventBus.$on("showSelectMixReagentDialog", (data) => { this.$refs.selectMixReagentDialogRef.show(data.studyFormId, data) }) + EventBus.$on("hideSelectMixReagentDialog", (data) => { + this.$refs.selectMixReagentDialogRef.hide() + }) //显示电子签名弹窗 EventBus.$on("showEditSignDialog", (data) => { this.currentEditSignUuid = data.uuid; @@ -255,6 +258,7 @@ export default { EventBus.$off("showSelectInstrumentDialog"); EventBus.$off("showSelectMixReagentDialog"); EventBus.$off("showEditSignDialog"); + EventBus.$off("hideSelectMixReagentDialog"); this.debouncedEmit.cancel() }, methods: { diff --git a/src/views/business/comps/template/comps/sp/SP003.vue b/src/views/business/comps/template/comps/sp/SP003.vue index 227ee77..e449508 100644 --- a/src/views/business/comps/template/comps/sp/SP003.vue +++ b/src/views/business/comps/template/comps/sp/SP003.vue @@ -16,7 +16,9 @@
@@ -76,6 +77,7 @@ @@ -432,6 +434,12 @@ export default { } }, + onTableBeforeReagentSubmit(data){ + const {selectData, callback, key, rowData} = data; + if(key === "actStartSolutionCode" && !isCommonUnit(selectData.row.nddw,[rowData.targetStartSolutionConcentrationPrecision])){//选择起始源溶液需要同步更新table的变更记录。 + callback.prevent('浓度单位与预制不符,请重新选择或申请废止并重新预制。'); + } + }, //平行配置 table选择试剂确定弹窗 onTableRegentSubmit(type, configIndex, data) { const { selectInfo, rowIndex, key, rowData } = data; diff --git a/src/views/business/comps/template/dialog/SelectMixReagentDialog.vue b/src/views/business/comps/template/dialog/SelectMixReagentDialog.vue index 5791b1c..595c6d3 100644 --- a/src/views/business/comps/template/dialog/SelectMixReagentDialog.vue +++ b/src/views/business/comps/template/dialog/SelectMixReagentDialog.vue @@ -119,6 +119,9 @@ export default { this.handleShowTableInfo(type); }, + hide() { + this.visible = false; + }, handleOtherChange(val) { this.otherChecked = val; if (val) {//如果选中了其他,那么就清空选中的id @@ -159,7 +162,7 @@ export default { this.$emit('submit', selectedValue, row); // 触发eventBus事件 EventBus.$emit("onMixReagentSubmit", { selectInfo, uuid: this.uuid, selectedId: selectedValue, row,selectType:this.selectType }); - this.visible = false; + // this.visible = false; }, // 选择试剂时处理 handleSelect(code, row) { diff --git a/src/views/business/comps/template/mixins/templateMixin.js b/src/views/business/comps/template/mixins/templateMixin.js index ee7e696..87ba982 100644 --- a/src/views/business/comps/template/mixins/templateMixin.js +++ b/src/views/business/comps/template/mixins/templateMixin.js @@ -1,6 +1,7 @@ import moment from 'moment' import { getLatestSn, getLatestSnArr } from '@/api/template'; import { isValueEmpty } from '@/utils/index'; +import { isCommonUnit } from "@/utils/conTools"; import { sj_subpackage, sj_startConfiguration, sj_configurationCompleted } from '@/api/business/sj/sj'; export default { dicts: [ @@ -162,6 +163,15 @@ export default { this.setTemplateData({}) }, methods: { + //试剂弹窗确认前 + onBeforeReagentSubmit(data){ + const {selectData, callback, key, formFields} = data; + const {subTargetStartSolution} = formFields; + //判断选择的浓度单位和预制的浓度单位是否一致 + if(key === "subStartSolution" && !isCommonUnit(selectData.row.nddw,[subTargetStartSolution])){//选择起始源溶液需要同步更新table的变更记录。 + callback.prevent('浓度单位与预制不符,请重新选择或申请废止并重新预制。'); + } + }, getFormDataByTemplateData() { let o = {}; const { bdnr } = this.templateData