From 38d36b38e6597e665c6935f17b9f07202c99ce1a Mon Sep 17 00:00:00 2001 From: memorylkf <312904636@qq.com> Date: Fri, 27 Mar 2026 18:01:07 +0800 Subject: [PATCH 1/9] =?UTF-8?q?feat:=20[=E6=A8=A1=E6=9D=BF=E7=AE=A1?= =?UTF-8?q?=E7=90=86]=20=E5=BF=85=E5=A1=AB=E9=A1=B9=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/business/template/list.vue | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/views/business/template/list.vue b/src/views/business/template/list.vue index c022f09..23316a8 100644 --- a/src/views/business/template/list.vue +++ b/src/views/business/template/list.vue @@ -191,7 +191,7 @@ + style="width:100%" @change="changeStepGroup" filterable> @@ -282,9 +282,9 @@ export default { // nameEn: [ // { required: true, message: '请输入', trigger: "blur" } // ], - deptId: [ - { required: true, message: '请选择', trigger: "change" } - ], + // deptId: [ + // { required: true, message: '请选择', trigger: "change" } + // ], status: [ { required: true, message: '请选择', trigger: "change" } ], From 5d21a168d53b6288236a7ae4ce37e32faa14ef2b Mon Sep 17 00:00:00 2001 From: luojie <125330818@qq.com> Date: Sat, 28 Mar 2026 12:40:55 +0800 Subject: [PATCH 2/9] =?UTF-8?q?feat:[=E6=A8=A1=E6=9D=BF=E7=AE=A1=E7=90=86]?= =?UTF-8?q?[=E5=A4=84=E7=90=86=E5=AF=86=E7=A0=81=E8=BE=93=E5=85=A5?= =?UTF-8?q?=E6=A1=86=E5=A4=8D=E5=88=B6=E5=89=AA=E5=88=87=E9=97=AE=E9=A2=98?= =?UTF-8?q?]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Template/DecimalInput.vue | 23 ++++++---- .../Template/StepComponents/ZLSubPackage.vue | 50 ++++++++++++++-------- .../Template/StepComponents/pcrfxyp/cdnsypfz.vue | 10 ++++- src/components/Template/StepFormPackage.vue | 1 - src/components/Template/mixins/stepMixins.js | 4 +- .../comps/template/dialog/SubPackageDialog.vue | 5 +-- src/views/business/form/nonTrial/comp/syff/Yd.vue | 2 +- src/views/business/resource/gsp/comps/ffjl/Gd.vue | 2 +- src/views/business/resource/gsp/comps/ffjl/Jy.vue | 2 +- src/views/business/resource/gsp/comps/ffjl/Sd.vue | 2 +- src/views/business/resource/gsp/comps/gsp/Bj.vue | 2 +- src/views/business/resource/gsp/comps/gsp/Cz.vue | 2 +- .../business/resource/gsp/comps/gsp/CzBatch.vue | 2 +- src/views/business/resource/gsp/comps/gsp/Ff.vue | 2 +- src/views/business/resource/gsp/comps/gsp/Gh.vue | 2 +- src/views/business/resource/gsp/comps/gsp/Js.vue | 2 +- src/views/business/resource/gsp/comps/gsp/Jy.vue | 2 +- src/views/business/resource/gsp/comps/gsp/Sd.vue | 2 +- src/views/business/resource/gsp/comps/gsp/Shbj.vue | 2 +- .../business/resource/gsp/comps/gsp/Shxgkc.vue | 2 +- src/views/business/resource/gsp/comps/gsp/Xgkc.vue | 2 +- src/views/business/resource/gsp/comps/gsp/Xz.vue | 2 +- src/views/business/resource/gsp/comps/rkjl/Gd.vue | 2 +- src/views/business/resource/gsp/comps/rkjl/Jy.vue | 2 +- src/views/business/resource/gsp/comps/rkjl/Sd.vue | 2 +- src/views/business/resource/gsp/comps/rkjl/Xz.vue | 2 +- src/views/business/resource/mjy/comps/ffjl/Gd.vue | 2 +- src/views/business/resource/mjy/comps/ffjl/Jd.vue | 2 +- src/views/business/resource/mjy/comps/ffjl/Jq.vue | 2 +- src/views/business/resource/mjy/comps/ffjl/Js.vue | 2 +- src/views/business/resource/mjy/comps/ffjl/Jy.vue | 2 +- src/views/business/resource/mjy/comps/ffjl/Sd.vue | 2 +- src/views/business/resource/mjy/comps/mjy/Bj.vue | 2 +- src/views/business/resource/mjy/comps/mjy/Cc.vue | 2 +- src/views/business/resource/mjy/comps/mjy/Czrq.vue | 2 +- src/views/business/resource/mjy/comps/mjy/Czyj.vue | 2 +- src/views/business/resource/mjy/comps/mjy/Gd.vue | 2 +- src/views/business/resource/mjy/comps/mjy/Jd.vue | 2 +- src/views/business/resource/mjy/comps/mjy/Js.vue | 2 +- src/views/business/resource/mjy/comps/mjy/Jy.vue | 2 +- src/views/business/resource/mjy/comps/mjy/Qc.vue | 2 +- src/views/business/resource/mjy/comps/mjy/Rk.vue | 2 +- src/views/business/resource/mjy/comps/mjy/Sd.vue | 2 +- src/views/business/resource/mjy/comps/mjy/Shbj.vue | 2 +- .../business/resource/mjy/comps/mjy/Shxgkc.vue | 2 +- src/views/business/resource/mjy/comps/mjy/Xgkc.vue | 2 +- src/views/business/resource/mjy/comps/mjy/Ysff.vue | 2 +- src/views/business/resource/zcg/comps/Ysff.vue | 2 +- src/views/business/resource/zcg/comps/Ysgh.vue | 2 +- src/views/business/study/comp/jhbd/Fh.vue | 2 +- src/views/business/study/comp/jhbd/Ghgsr.vue | 2 +- src/views/business/study/comp/jhbd/Sy.vue | 2 +- src/views/business/study/comp/syff/Xz.vue | 2 +- src/views/business/study/comp/syff/Yd.vue | 2 +- src/views/business/study/comp/syj/Bj.vue | 2 +- src/views/business/study/comp/syj/Xz.vue | 2 +- src/views/business/study/comp/tbbd/Blxjsh.vue | 2 +- src/views/business/study/comp/tbbd/Fh.vue | 2 +- src/views/business/study/comp/tbbd/Fz.vue | 2 +- src/views/business/study/comp/tbbd/Gc.vue | 2 +- src/views/business/study/comp/tbbd/Ghgsr.vue | 2 +- src/views/business/study/comp/tbbd/Qrfz.vue | 2 +- src/views/business/study/comp/tbbd/Sy.vue | 2 +- src/views/business/study/comp/ytbd/Gb.vue | 2 +- src/views/business/study/comp/ytbd/Qrgb.vue | 2 +- src/views/business/study/comp/ytbd/Sh.vue | 4 +- 66 files changed, 119 insertions(+), 96 deletions(-) diff --git a/src/components/Template/DecimalInput.vue b/src/components/Template/DecimalInput.vue index 4c17c67..fd5077b 100644 --- a/src/components/Template/DecimalInput.vue +++ b/src/components/Template/DecimalInput.vue @@ -135,8 +135,10 @@ export default { } } else { // 处理数字和小数点输入 + // 当 decimalDigits 为 0 时,不允许输入小数点 + const allowedPattern = this.decimalDigits === 0 ? /[^\d-]/g : /[^\d.-]/g; cleaned = val - .replace(/[^\d.-]/g, '') + .replace(allowedPattern, '') .replace(/^(-)\1+/, '$1'); // 确保只有一个小数点 @@ -148,18 +150,21 @@ export default { } // 处理小数点位数限制 - if (this.decimalDigits > 0 && cleaned.includes('.')) { + if (this.decimalDigits == 0) { + // 当 decimalDigits 为 0 时,直接移除所有小数点 + cleaned = cleaned.replace(/\./g, ''); + } else if (this.decimalDigits > 0 && cleaned.includes('.')) { const [intPart, decPart = ''] = cleaned.split('.'); cleaned = intPart + '.' + decPart.slice(0, this.decimalDigits); - } else if (this.decimalDigits === 0) { - cleaned = cleaned.split('.')[0]; } - // 处理以小数点开头的情况 - if (cleaned === '.') cleaned = '0.'; - else if (cleaned === '-.') cleaned = '-0.'; - else if (cleaned.startsWith('.')) cleaned = '0' + cleaned; - else if (cleaned.startsWith('-.')) cleaned = '-0.' + cleaned.slice(2); + // 处理以小数点开头的情况(仅当允许小数时) + if (this.decimalDigits > 0) { + if (cleaned === '.') cleaned = '0.'; + else if (cleaned === '-.') cleaned = '-0.'; + else if (cleaned.startsWith('.')) cleaned = '0' + cleaned; + else if (cleaned.startsWith('-.')) cleaned = '-0.' + cleaned.slice(2); + } // 处理整数部分的前导零 if (cleaned.includes('.')) { diff --git a/src/components/Template/StepComponents/ZLSubPackage.vue b/src/components/Template/StepComponents/ZLSubPackage.vue index 224bf68..bdd69ef 100644 --- a/src/components/Template/StepComponents/ZLSubPackage.vue +++ b/src/components/Template/StepComponents/ZLSubPackage.vue @@ -10,20 +10,27 @@ :type="item.type" @blur = "(e)=>onCommonBlur(e,item.key)" v-model="formData[item.key]" /> - - + +
+
预设每份容量
+
+ +
+ 平均分配 + 重置 + +
@@ -77,8 +84,6 @@ export default { integerInputNumberItem: { type: "inputNumber", fillType: "actFill", - precision: 0, - maxlength: 3 }, inputNumberItem: { type: "inputNumber", @@ -88,7 +93,6 @@ export default { preInputNumberItem: { type: "inputNumber", fillType: "preFill", - label:"预计称量" }, formData: { mybh: "",//母液编号 @@ -134,12 +138,19 @@ export default { } }, computed: { + unitItem() { + return { + type: "select", + fillType: "preFill", + options: this.dict.type.business_tjdw + } + }, subConfig(){ return[ { fieldKey:"clfz_mybh", key:"mybh", - label:"母编号", + label:"包装编号", type:"input", disabled: true, fillType: "actFill", @@ -150,14 +161,13 @@ export default { label:"分装数量", type:"inputNumber", fillType: "preFill", + precision: 0, + maxlength: 3, + unit:"份", }, - { - fieldKey:"clfz_dw", - key:"dw", - label:"单位", - type:"select", - options: this.dict.type.business_tjdw, - fillType: "preFill", + {//占位 + fieldKey:"clfz_dw1", + type:"span", }, ] }, @@ -397,7 +407,8 @@ export default { margin-left: 5px; } .unit-select { - width: 100px; + // width: 100px; + flex:1; } .content-item { @@ -448,4 +459,5 @@ export default { margin-right: 5px; // width: 200px; } + \ No newline at end of file diff --git a/src/components/Template/StepComponents/pcrfxyp/cdnsypfz.vue b/src/components/Template/StepComponents/pcrfxyp/cdnsypfz.vue index da48dff..ebc2d90 100644 --- a/src/components/Template/StepComponents/pcrfxyp/cdnsypfz.vue +++ b/src/components/Template/StepComponents/pcrfxyp/cdnsypfz.vue @@ -1,6 +1,6 @@ diff --git a/src/views/business/resource/gsp/comps/gspList.vue b/src/views/business/resource/gsp/comps/gspList.vue index 8417c4d..3e420f0 100644 --- a/src/views/business/resource/gsp/comps/gspList.vue +++ b/src/views/business/resource/gsp/comps/gspList.vue @@ -40,8 +40,8 @@ - - + + @@ -527,7 +527,7 @@ export default { }, //重置 resetQuery() { - this.dateRange = [] + this.daterange = [] this.resetForm("queryForm") this.handleQuery() }, diff --git a/src/views/business/resource/gsp/comps/rkjl/Jd.vue b/src/views/business/resource/gsp/comps/rkjl/Jd.vue index cbc2bbf..b973659 100644 --- a/src/views/business/resource/gsp/comps/rkjl/Jd.vue +++ b/src/views/business/resource/gsp/comps/rkjl/Jd.vue @@ -5,7 +5,7 @@ :close-on-click-modal="false">
- + diff --git a/src/views/business/resource/gsp/comps/rkjl/Js.vue b/src/views/business/resource/gsp/comps/rkjl/Js.vue index 37fdc4a..b195366 100644 --- a/src/views/business/resource/gsp/comps/rkjl/Js.vue +++ b/src/views/business/resource/gsp/comps/rkjl/Js.vue @@ -5,7 +5,7 @@ :close-on-click-modal="false">
- + diff --git a/src/views/business/resource/gsp/comps/rkjlList.vue b/src/views/business/resource/gsp/comps/rkjlList.vue index ae6feaf..3deaf3d 100644 --- a/src/views/business/resource/gsp/comps/rkjlList.vue +++ b/src/views/business/resource/gsp/comps/rkjlList.vue @@ -440,6 +440,7 @@ export default { }, //重置 resetQuery() { + this.daterange = [] this.resetForm("queryForm") this.handleQuery() }, diff --git a/src/views/business/resource/sj/comps/Cz.vue b/src/views/business/resource/sj/comps/Cz.vue index 800e6f0..e81c8c5 100644 --- a/src/views/business/resource/sj/comps/Cz.vue +++ b/src/views/business/resource/sj/comps/Cz.vue @@ -86,7 +86,7 @@ import { mapGetters } from 'vuex' import SelectList from "./SelectList"; import BusinessSelect from '@/views/business/comps/select/BusinessSelect'; export default { - name: "MjyBj", + name: "SjCz", components: { SelectList, BusinessSelect }, data() { return { @@ -151,6 +151,7 @@ export default { if (valid) { sj_cz(this.form).then(response => { this.open = false + this.$modal.msgSuccess(this.$t('form.operationSuccess')) this.$emit('callback') }) } diff --git a/src/views/business/resource/sj/comps/CzBatch.vue b/src/views/business/resource/sj/comps/CzBatch.vue index fadd074..95cddd8 100644 --- a/src/views/business/resource/sj/comps/CzBatch.vue +++ b/src/views/business/resource/sj/comps/CzBatch.vue @@ -77,7 +77,7 @@ import { mapGetters } from 'vuex' import SelectList from "./SelectList"; import BusinessSelect from '@/views/business/comps/select/BusinessSelect'; export default { - name: "CzBatch", + name: "SjCzBatch", components: { SelectList, BusinessSelect }, data() { return { @@ -171,6 +171,7 @@ export default { this.$modal.loading() sj_plcz(params).then(response => { this.open = false + this.$modal.msgSuccess(this.$t('form.operationSuccess')) this.$emit('callback') this.$modal.closeLoading() }).finally(() => { diff --git a/src/views/business/resource/sj/list.vue b/src/views/business/resource/sj/list.vue index f5044f2..2f94a12 100644 --- a/src/views/business/resource/sj/list.vue +++ b/src/views/business/resource/sj/list.vue @@ -195,7 +195,7 @@ - +
From 1fee36d3e81bb003fdabff7ab1fe006da3fd37ca Mon Sep 17 00:00:00 2001 From: luojie <125330818@qq.com> Date: Sun, 29 Mar 2026 15:41:04 +0800 Subject: [PATCH 6/9] =?UTF-8?q?feat:[=E6=A8=A1=E6=9D=BF=E7=AE=A1=E7=90=86]?= =?UTF-8?q?[update]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Template/HandleFormItem.vue | 103 +++++++------- .../Template/StepComponents/ZLSubPackage.vue | 155 +++++++++++++++------ src/components/Template/StepComponents/ry/zlfz.vue | 22 ++- src/components/Template/StepFormPackage.vue | 14 +- src/utils/formPackageCommon.js | 26 +++- 5 files changed, 215 insertions(+), 105 deletions(-) diff --git a/src/components/Template/HandleFormItem.vue b/src/components/Template/HandleFormItem.vue index 83c8450..d33f339 100644 --- a/src/components/Template/HandleFormItem.vue +++ b/src/components/Template/HandleFormItem.vue @@ -3,11 +3,10 @@
- + + :remote="item.selectRemote || false" :remote-method="remoteMethod" @visible-change="onSelectBlur" + @change="onInputChange" filterable> @@ -79,16 +77,10 @@ :format="type === 'dateTime' ? 'yyyy/MM/dd HH:mm:ss' : 'yyyy/MM/dd'" :placeholder="getPlaceholder()" @change="(val) => onDateChange(val, type === 'dateTime' ? 'yyyy/MM/DD HH:mm:ss' : 'yyyy/MM/DD')"> - + :disabled="getDisabled()" :on-success="handleSuccess" :on-change="handleChange" + :on-exceed="handleExceed" :file-list="fileList" :auto-upload="false"> 点击上传 请上传附件 @@ -215,7 +206,8 @@
- @@ -232,12 +224,12 @@ import Question from "./icons/Question.vue"; import DecimalInput from "./DecimalInput.vue"; import { EventBus } from "@/utils/eventBus"; import moment from "moment"; -import { getuuid, isEqual, deepClone, getDefaultValueByOptions, isValueEmpty,isRegent } from "@/utils/index.js"; +import { getuuid, isEqual, deepClone, getDefaultValueByOptions, isValueEmpty, isRegent } from "@/utils/index.js"; import { getToken } from "@/utils/auth"; import { isShowOtherByCheckboxTree } from "@/utils/formPackageCommon"; export default { - inject: ['templateData', 'templateFillType',"getSubmittedCodes","updateSubmittedCodes", "getZdxgjl", "getFhyjjl", "updateZdxgjl", "replaceFhyjjl", "updateFhyjjl", "getFieldCheckObj", "updateFieldCheckObj"], + inject: ['templateData', 'templateFillType', "getSubmittedCodes", "updateSubmittedCodes", "getZdxgjl", "getFhyjjl", "updateZdxgjl", "replaceFhyjjl", "updateFhyjjl", "getFieldCheckObj", "updateFieldCheckObj"], components: { Question, DecimalInput, @@ -307,7 +299,7 @@ export default { const defaultCheckedValue = getDefaultValueByOptions(this.item.options || []); initialValue = { checkedValues: defaultCheckedValue, otherValues: {} }; } - const {type} = this; + const { type } = this; return { inputValue: initialValue, oldValue: typeof initialValue === 'object' ? JSON.parse(JSON.stringify(initialValue)) : initialValue, // 记录上一次的值 @@ -343,7 +335,7 @@ export default { // disabledDate(time) { // return time.getTime() > Date.now(); // }, - shortcuts: type === 'dateTimeRange' ? undefined:[{ + shortcuts: type === 'dateTimeRange' ? undefined : [{ text: '今天', onClick(picker) { picker.$emit('pick', new Date()); @@ -354,7 +346,7 @@ export default { } }, watch: { - + value(newVal) { if (this.type === 'checkboxTag' && Array.isArray(newVal)) { // checkboxTag类型,value是数组格式 @@ -412,7 +404,7 @@ export default { return false; }, getFlexClass() { - const noFlexArr = ["radio", "checkboxTag", "fqyq"] + const noFlexArr = ["radio", "checkboxTag", "fqyq","button"] return noFlexArr.includes(this.type) ? '' : 'flex1' }, getDecimalDigits() { @@ -524,7 +516,7 @@ export default { // 所有删除操作都需要验证电子签名 // 保存待删除的文件信息 this.pendingRemoveFile = { file, fileList: this.fileList }; -console.log("fillll") + console.log("fillll") // 触发电子签名弹窗 EventBus.$emit('showEditSignDialog', { uuid: this.uuid }); @@ -611,8 +603,8 @@ console.log("fillll") this.inputValue = data.selectedId; const { filledCodes = [] } = this.item; console.log(filledCodes, "filledCodes") - const { selectInfo, row,checkType } = data; - if (filledCodes.length > 0 && checkType !=="checkbox") { + const { selectInfo, row, checkType } = data; + if (filledCodes.length > 0 && checkType !== "checkbox") { this.inputValue = row[filledCodes[0]] + "(" + row[filledCodes[1]] + ")"; } this.selectRegentInfo = data; @@ -621,7 +613,7 @@ console.log("fillll") }, //统一处理试剂/供试品等弹窗 onCommonHandleRegent(item, type) { - const {fillType = "actFill"} = item; + const { fillType = "actFill" } = item; if (this.templateFillType !== fillType) { return } @@ -651,10 +643,10 @@ console.log("fillll") }; if (type === "mix") { params.mixType = true; - } + } if (item.qxbdType) { params.qxbdType = item.qxbdType; - } + } if (item.checkType) { params.checkType = item.checkType; } @@ -670,7 +662,7 @@ console.log("fillll") onDateChange(val, format) { if (this.type === 'dateTimeRange') { this.inputValue = [moment(val[0]).format(format), moment(val[1]).format(format)]; - }else{ + } else { this.inputValue = moment(val).format(format); } this.onCommonHandleSaveRecord(this.inputValue); @@ -742,7 +734,7 @@ console.log("fillll") }, getFillTypeStyle(type) { const { fillType } = this.item; - const filterType = ["attachment", "checkboxTag", "fqyq", "checkboxTree","radio"] + const filterType = ["attachment", "checkboxTag", "fqyq", "checkboxTree", "radio"] const typeObj = { actFill: "orange-border",//实际填写的边框颜色 blxjsh: "orange-border",//实际填写的边框颜色 @@ -1098,10 +1090,10 @@ console.log("fillll") const { mainRadio: oldMainRadio, inputValue: oldInputValue, subRadio: oldSubRadio } = this.oldFqyqValue; const o = { "mainRadio": { oldValue: oldMainRadio, newValue: mainRadio, des: "" }, - "inputValue": { oldValue: oldInputValue, newValue: inputValue, des: "",key: this.fieldKey+"_inputValue" }, + "inputValue": { oldValue: oldInputValue, newValue: inputValue, des: "", key: this.fieldKey + "_inputValue" }, "subRadio": { oldValue: oldSubRadio, newValue: subRadio, des: "是否在规定时间完成:" } } - console.log(o, this.currentHandleType, this.fqyqValue,"fqyqValue") + console.log(o, this.currentHandleType, this.fqyqValue, "fqyqValue") return o[this.currentHandleType]; }, getCheckboxTreeInfo() { @@ -1112,7 +1104,7 @@ console.log("fillll") const oldItem = oldCheckedValues.find(item => item.label === currentCheckboxTreeValue); const o = { "checkboxTreeCheckbox": { oldValue: oldItem, newValue: newItem, des: "" }, - "checkboxTreeOther": { oldValue: oldOtherValues[currentCheckboxTreeValue], newValue: otherValues[currentCheckboxTreeValue], des: `${currentCheckboxTreeValue}:`,key: this.fieldKey+"_"+currentCheckboxTreeValue }, + "checkboxTreeOther": { oldValue: oldOtherValues[currentCheckboxTreeValue], newValue: otherValues[currentCheckboxTreeValue], des: `${currentCheckboxTreeValue}:`, key: this.fieldKey + "_" + currentCheckboxTreeValue }, } return o[currentHandleType]; }, @@ -1171,9 +1163,9 @@ console.log("fillll") } else if (this.type === "fqyq") { const current = this.getFqyqInfo(); isSame = isEqual(current.oldValue, current.newValue); - if(this.currentHandleType === "inputValue"){ - isOldValueEmpty =this.isUnSubmitted(current.key); - }else{ + if (this.currentHandleType === "inputValue") { + isOldValueEmpty = this.isUnSubmitted(current.key); + } else { isOldValueEmpty = isValueEmpty(current.oldValue); } } else if (this.type === "checkboxTree") { @@ -1188,10 +1180,10 @@ console.log("fillll") } - } else if(this.type === "checkbox"){ + } else if (this.type === "checkbox") { isSame = isEqual(this.oldValue, this.inputValue) - isOldValueEmpty =this.isUnSubmitted(); - }else { + isOldValueEmpty = this.isUnSubmitted(); + } else { isSame = isEqual(this.oldValue, this.inputValue) isOldValueEmpty = this.isUnSubmitted(); } @@ -1199,7 +1191,7 @@ console.log("fillll") if (isSame) { return; } - if (!isOldValueEmpty && !(isSame) && (this.templateFillType === "actFill" || this.templateFillType === "blxjsh")&&this.type !== "attachment") { + if (!isOldValueEmpty && !(isSame) && (this.templateFillType === "actFill" || this.templateFillType === "blxjsh") && this.type !== "attachment") { console.log("需要电子签名") // 通过EventBus触发电子签名弹窗 EventBus.$emit('showEditSignDialog', { uuid: this.uuid }); @@ -1209,9 +1201,9 @@ console.log("fillll") }, //是否提交过 - isUnSubmitted(key){ + isUnSubmitted(key) { const finallyKey = key || this.fieldKey; - const has = this.getSubmittedCodes().includes(finallyKey) + const has = this.getSubmittedCodes().includes(finallyKey) return !has; }, @@ -1265,7 +1257,7 @@ console.log("fillll") const current = this.getFqyqInfo(); recordOldVlaue = `${current.des + current.oldValue}`; recordValue = `${current.des + current.newValue}`; - if(this.currentHandleType === "inputValue"){ + if (this.currentHandleType === "inputValue") { finallyKey = current.key; } isModify = !!this.oldFqyqValue.mainRadio @@ -1283,11 +1275,11 @@ console.log("fillll") recordValue = `${current.des + (current.newValue || '')}`; isModify = !!current.oldValue; } - }else if(this.type === "checkbox"){ - recordOldVlaue = `${this.item.checkboxLabel || ""}:${this.oldValue?'勾选':'未勾选'}`; - recordValue = `${this.item.checkboxLabel||""}:${this.inputValue?'勾选':'未勾选'}`; + } else if (this.type === "checkbox") { + recordOldVlaue = `${this.item.checkboxLabel || ""}:${this.oldValue ? '勾选' : '未勾选'}`; + recordValue = `${this.item.checkboxLabel || ""}:${this.inputValue ? '勾选' : '未勾选'}`; isModify = this.oldValue !== ''; - }else if(this.type === "attachment"){ + } else if (this.type === "attachment") { const attList = JSON.parse(recordValue); const oldAttList = JSON.parse(recordOldVlaue || "[]"); recordValue = attList.map(item => item.name).join(";"); @@ -1423,7 +1415,7 @@ console.log("fillll") return this.templateFillType !== "preFill" } else if (fillType === "blxjsh") {//当模板状态是预填写时,只有当fillType是blxjsh才能填写 return this.templateFillType !== "blxjsh" - }else { + } else { return true } } @@ -1631,6 +1623,7 @@ console.log("fillll") .el-checkbox__inner { border-color: #f9c588 !important; } + &.is-checked { .el-checkbox__label { color: #606266; @@ -1859,6 +1852,7 @@ console.log("fillll") color: #606266; flex: 1; background-color: #fff; + &.disabled { cursor: not-allowed; color: #c0c4cc; @@ -2069,6 +2063,7 @@ console.log("fillll") border-radius: 4px; border: 1px solid #ff5d5d; } + .no-border { border: none; } diff --git a/src/components/Template/StepComponents/ZLSubPackage.vue b/src/components/Template/StepComponents/ZLSubPackage.vue index bdd69ef..a553d27 100644 --- a/src/components/Template/StepComponents/ZLSubPackage.vue +++ b/src/components/Template/StepComponents/ZLSubPackage.vue @@ -2,10 +2,10 @@
@@ -97,6 +99,10 @@ export default { prefixKey: { type: String, default: "" + }, + stepIndex: { + type: Number, + default: 0 } }, mounted() { @@ -115,6 +121,10 @@ export default { } }, methods: { + // 子组件提交处理方法 + onSubPackageSubmit(key){ + this.$emit("onSubPackageSubmit", {key,formData:this.formFields}); + }, // //试剂/仪器等弹窗提交 onRegentSubmit(data,key,item){ this.updateFormData(key,data.selectedId); @@ -123,7 +133,7 @@ export default { this.allFieldsConfig[key].sjSelectType = data.selectType; } this.formFields[`selectInfo_${key}`] = data.selectInfo; - // this.$emit("onRegentSubmit", {selectInfo:data,key,config:item}); + this.$emit("onRegentSubmit", {selectInfo:data,key,config:item}); }, getRegentItem(item,fieldCode="type"){ const type = item[fieldCode] ; diff --git a/src/utils/formPackageCommon.js b/src/utils/formPackageCommon.js index 9fb003e..cfb6814 100644 --- a/src/utils/formPackageCommon.js +++ b/src/utils/formPackageCommon.js @@ -5,7 +5,7 @@ export const isShowOther = (v = [], col) => { } // 确保v是数组类型,以避免类型错误 const arr = Array.isArray(v) ? v : [v] - const otherArr = ['其他', '遮光', 'CA-QC Dilution-', '拒绝', '部分接受',"污染"] + const otherArr = ['其他', '遮光', 'CA-QC Dilution-', '拒绝', '部分接受', "污染"] return arr.some((item) => otherArr.includes(item)) } @@ -19,7 +19,25 @@ export const isShowOtherByRadioAndOther = (v = '', col) => { } //checkboxTree判断是否显示其他输入框 -export const isShowOtherByCheckboxTree = (v = "")=>{ - const otherArr = ['其他', '样品信息', '样品','部分接受'] - return otherArr.includes(v) +export const isShowOtherByCheckboxTree = (v = "") => { + + const otherArr = ['其他', '样品信息', '样品', '部分接受', '给药 ', + '样本采集', + '日常观察 ', + '皮肤评分', + '眼刺激评分', + '麻醉 ', + '交配确认', + 'PND检测', + '神经行为功能评测', + '血糖测定', + '遥测数据采集', + '呼吸检测', + '血压测定', + '心电检测', + '体温测定', + '毒代 TK', + '药代 PK' + , '细胞因子'] + return otherArr.includes(v) } From 404f3a216206d75e7c3f43535c4dcf81e576b953 Mon Sep 17 00:00:00 2001 From: HanLong <404402223@qq.com> Date: Sun, 29 Mar 2026 17:05:52 +0800 Subject: [PATCH 7/9] =?UTF-8?q?feat:[=E7=B3=BB=E7=BB=9F=E7=AE=A1=E7=90=86]?= =?UTF-8?q?[=E5=AD=98=E5=82=A8=E4=BD=8D=E7=BD=AE]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/business/resource/gsp/comps/rkjl/Bj.vue | 6 +- .../resource/gsp/comps/rkjl/RkjlImport.vue | 16 +-- src/views/business/resource/gsp/comps/rkjl/Xq.vue | 2 +- .../comps/StorageLocationImport.vue | 158 +++++++++++++++++++++ src/views/business/storageLocation/list.vue | 16 ++- 5 files changed, 179 insertions(+), 19 deletions(-) create mode 100644 src/views/business/storageLocation/comps/StorageLocationImport.vue diff --git a/src/views/business/resource/gsp/comps/rkjl/Bj.vue b/src/views/business/resource/gsp/comps/rkjl/Bj.vue index 9be8d98..6aa3efc 100644 --- a/src/views/business/resource/gsp/comps/rkjl/Bj.vue +++ b/src/views/business/resource/gsp/comps/rkjl/Bj.vue @@ -32,7 +32,7 @@ - @@ -53,8 +53,8 @@ - + diff --git a/src/views/business/resource/gsp/comps/rkjl/RkjlImport.vue b/src/views/business/resource/gsp/comps/rkjl/RkjlImport.vue index e1ab2f8..e72b361 100644 --- a/src/views/business/resource/gsp/comps/rkjl/RkjlImport.vue +++ b/src/views/business/resource/gsp/comps/rkjl/RkjlImport.vue @@ -62,7 +62,6 @@ diff --git a/src/views/business/resource/gsp/comps/rkjl/Xq.vue b/src/views/business/resource/gsp/comps/rkjl/Xq.vue index c9f0c9b..38a256c 100644 --- a/src/views/business/resource/gsp/comps/rkjl/Xq.vue +++ b/src/views/business/resource/gsp/comps/rkjl/Xq.vue @@ -154,7 +154,7 @@ export default { }, show(row) { this.$modal.loading() - this.queryJcgjParams.ffjlId = row.id + this.queryJcgjParams.gspRkjlId = row.id info({ id: row.id }).then(response => { this.form = response.data this.open = true diff --git a/src/views/business/storageLocation/comps/StorageLocationImport.vue b/src/views/business/storageLocation/comps/StorageLocationImport.vue new file mode 100644 index 0000000..3e62f5a --- /dev/null +++ b/src/views/business/storageLocation/comps/StorageLocationImport.vue @@ -0,0 +1,158 @@ + + + + \ No newline at end of file diff --git a/src/views/business/storageLocation/list.vue b/src/views/business/storageLocation/list.vue index fdc0748..424dfb4 100644 --- a/src/views/business/storageLocation/list.vue +++ b/src/views/business/storageLocation/list.vue @@ -30,6 +30,11 @@ {{ $t('page.system.storageLocation.add') }} + + + {{ + $t('page.business.resource.gsp.dr') }} + @@ -59,8 +64,9 @@ - - + + +
@@ -73,9 +79,10 @@ import { mapGetters } from 'vuex' import StorageLocationDetail from './comps/detail' import Bj from "./comps/Bj"; import Xz from "./comps/Xz"; +import StorageLocationImport from "./comps/StorageLocationImport" export default { name: 'StorageLocation', - components: { BusinessSelect, SelectDept, StorageLocationDetail, Bj, Xz }, + components: { BusinessSelect, SelectDept, StorageLocationDetail, Bj, Xz, StorageLocationImport }, data() { return { @@ -109,6 +116,9 @@ export default { this.getList() }, methods: { + handleImport() { + this.$refs.StorageLocationImport.show() + }, /** 查询列表 */ getList() { this.loading = true From 4b95f0c984aa8182844ddb41f774a601a8d8b1a6 Mon Sep 17 00:00:00 2001 From: luojie <125330818@qq.com> Date: Sun, 29 Mar 2026 20:47:24 +0800 Subject: [PATCH 8/9] =?UTF-8?q?feat:[=E6=A8=A1=E6=9D=BF=E7=AE=A1=E7=90=86]?= =?UTF-8?q?[update]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Template/StepComponents/ZLSubPackage.vue | 114 +++++++-------------- src/components/Template/StepComponents/ry/zlfz.vue | 11 +- 2 files changed, 45 insertions(+), 80 deletions(-) diff --git a/src/components/Template/StepComponents/ZLSubPackage.vue b/src/components/Template/StepComponents/ZLSubPackage.vue index a553d27..78c6d8a 100644 --- a/src/components/Template/StepComponents/ZLSubPackage.vue +++ b/src/components/Template/StepComponents/ZLSubPackage.vue @@ -285,6 +285,9 @@ export default { } }); + // 清空之前的分装列表错误状态,重新验证 + this.fzListErrors = []; + // 验证分装列表中的数值 - 根据字段的fillType和当前templateFillType比较 if (this.fzList && this.fzList.length > 0) { for (let i = 0; i < this.fzList.length; i++) { @@ -299,7 +302,7 @@ export default { isValid = false; } } - + // 验证实际分装数量 if (this.inputNumberItem.fillType === this.templateFillType) { if (isValueEmpty(this.fzList[i].actnum)) { @@ -322,9 +325,7 @@ export default { }); // 重置分装列表错误状态 - this.fzListErrors.forEach((_, index) => { - this.fzListErrors = [] - }); + this.fzListErrors = []; }, // 分装数量失去焦点时,根据数量生成分装列表 async onBlurFzsl(e) { @@ -361,91 +362,46 @@ export default { }, onBlurFzNum(index, field) { if (this.fzList[index]) { - // 确保fzListErrors数组有足够的元素 - if (this.fzListErrors.length <= index) { - this.$set(this.fzListErrors, index, false); - } - if (this.fzList[index][field]) { - // 有值的话就清空对应的错误信息 - this.$set(this.fzListErrors, index, false); + // 有值的话就移除对应的错误信息 + this.removeFzListError(index, field); } else { - // 没有值的话就边框标红 - this.$set(this.fzListErrors, index, true); + // 没有值的话就添加错误信息,边框标红 + this.addFzListError(index, field); } } }, - verifyFzListError(index, field) { - // 如果index和field都为空,就全匹配 - if (index === undefined && field === undefined) { - if (this.fzList && this.fzList.length > 0) { - // 清空现有错误信息 - this.fzListErrors = []; - - // 遍历fzList,没有值的就放到fzListErrors里面 - for (let i = 0; i < this.fzList.length; i++) { - const item = this.fzList[i]; - if (isValueEmpty(item.prenum)) { - this.fzListErrors.push({ - rowIndex: i, - field: "prenum", - error: "请输入预填分装数量" - }); - } - if (isValueEmpty(item.actnum)) { - this.fzListErrors.push({ - rowIndex: i, - field: "actnum", - error: "请输入实际分装数量" - }); - } - } - } - } else if (index !== undefined) { - // 如果index不为空,检查指定索引的项 - if (this.fzList[index]) { - const item = this.fzList[index]; - - if (field === undefined) { - // 如果field为空,检查prenum和actnum - // 先移除该索引的所有错误信息 - this.fzListErrors = this.fzListErrors.filter(err => err.rowIndex !== index); - - // 没有值的就放到fzListErrors里面 - if (isValueEmpty(item.prenum)) { - this.fzListErrors.push({ - rowIndex: index, - field: "prenum", - error: "请输入预填分装数量" - }); - } - if (isValueEmpty(item.actnum)) { - this.fzListErrors.push({ - rowIndex: index, - field: "actnum", - error: "请输入实际分装数量" - }); - } - } else { - // 如果field不为空,检查指定字段 - // 先移除该索引和字段的错误信息 - this.fzListErrors = this.fzListErrors.filter(err => !(err.rowIndex === index && err.field === field)); - - // 没有值的就放到fzListErrors里面 - if (isValueEmpty(item[field])) { - this.fzListErrors.push({ - rowIndex: index, - field: field, - error: field === "prenum" ? "请输入预填分装数量" : "请输入实际分装数量" - }); - } - } - } + + // 添加分装列表错误信息 + addFzListError(index, field) { + const errorObj = { + rowIndex: index, + field: field, + error: field === 'prenum' ? '请输入预填分装数量' : '请输入实际分装数量' + }; + // 检查是否已经存在相同的错误 + const exists = this.fzListErrors.some(item => + item.rowIndex === index && item.field === field + ); + if (!exists) { + this.fzListErrors.push(errorObj); } }, + + // 移除分装列表错误信息 + removeFzListError(index, field) { + this.fzListErrors = this.fzListErrors.filter(item => + !(item.rowIndex === index && item.field === field) + ); + }, hasError(index, field) { const o = this.fzListErrors.find((item)=>{ + // 检查 item 是否存在且为对象类型 + if (!item || typeof item !== 'object') { + return false; // 忽略布尔值、null、undefined等无效值 + } + // 只有对象类型的 item 才进行匹配 return item.rowIndex === index && item.field === field; }) return o !== undefined; diff --git a/src/components/Template/StepComponents/ry/zlfz.vue b/src/components/Template/StepComponents/ry/zlfz.vue index f478ca1..bc9bb68 100644 --- a/src/components/Template/StepComponents/ry/zlfz.vue +++ b/src/components/Template/StepComponents/ry/zlfz.vue @@ -63,7 +63,16 @@ export default { const {key} = data; if(key === 'zlfz'){ const formData = await this.$refs.stepFormPackageRef.getFormData(); - console.log(formData,"formData") + if(formData){ + const {zlfz} = formData; + const fzInfo = { + ...zlfz.formData, + fzList:zlfz.fzList, + }; + this.$refs.stepFormPackageRef.updateFormData("fzInfo",fzInfo); + this.$message.success("质量分装成功"); + this.justUpdateFilledFormData(); + } } } From 57fa6d76e0f46068c3ddf7789f2633ebc13f3570 Mon Sep 17 00:00:00 2001 From: HanLong <404402223@qq.com> Date: Sun, 29 Mar 2026 21:27:41 +0800 Subject: [PATCH 9/9] =?UTF-8?q?fix:[=E8=B5=84=E6=BA=90=E5=BA=93=E7=AE=A1?= =?UTF-8?q?=E7=90=86][=E4=BE=9B=E8=AF=95=E5=93=81=E6=8E=92=E5=BA=8F]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/business/resource/gsp/comps/gspList.vue | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/views/business/resource/gsp/comps/gspList.vue b/src/views/business/resource/gsp/comps/gspList.vue index 3e420f0..6503a99 100644 --- a/src/views/business/resource/gsp/comps/gspList.vue +++ b/src/views/business/resource/gsp/comps/gspList.vue @@ -95,11 +95,12 @@
- + - - - - + + + @@ -290,6 +291,11 @@ export default { ]), }, methods: { + handleSortChange(sort) { + this.queryParams.sortProp = sort.prop + this.queryParams.order = sort.order + this.getList() + }, // 更新试剂库 handleGxwzk() { this.saveSimpleLog({jcmc:'更新物资库',jcmcEn:'Refresh'})