Browse Source

feat:[模板管理][烦人的浓度计算和单位换算]

lkf
luojie 2 months ago
parent
commit
ad625bf3b1
8 changed files with 80 additions and 6 deletions
  1. +11
    -1
      src/components/Template/BaseInfoFormPackage.vue
  2. +7
    -0
      src/components/Template/CustomTable.vue
  3. +31
    -1
      src/components/Template/HandleFormItem.vue
  4. +4
    -0
      src/views/business/comps/template/TemplateTable.vue
  5. +5
    -3
      src/views/business/comps/template/comps/sp/SP003.vue
  6. +8
    -0
      src/views/business/comps/template/comps/sp/SP00456.vue
  7. +4
    -1
      src/views/business/comps/template/dialog/SelectMixReagentDialog.vue
  8. +10
    -0
      src/views/business/comps/template/mixins/templateMixin.js

+ 11
- 1
src/components/Template/BaseInfoFormPackage.vue View File

@ -103,7 +103,9 @@
:item="sItem" :value="formFields[key]" /> :item="sItem" :value="formFields[key]" />
</div> </div>
<div v-else-if="isRegent(sItem)" class="flex1"> <div v-else-if="isRegent(sItem)" class="flex1">
<HandleFormItem :field-item-label="fieldItemLabel" :field-key="prefixKey+'_'+key" :type="sItem.type"
<HandleFormItem
@beforeReagentSubmit="(data, callback)=>onBeforeReagentSubmit(data, callback,key)"
:field-item-label="fieldItemLabel" :field-key="prefixKey+'_'+key" :type="sItem.type"
sourceFrom = "baseInfoFormPackage" sourceFrom = "baseInfoFormPackage"
:error="errors[key]" @update:error="errors[key] = false" :error="errors[key]" @update:error="errors[key] = false"
@onRegentSubmit="(data)=>onRegentSubmit(data,key,sItem)" @onRegentSubmit="(data)=>onRegentSubmit(data,key,sItem)"
@ -158,6 +160,7 @@
<HandleFormItem :field-item-label="fieldItemLabel" :field-key="prefixKey+'_'+sItem.subKey" class="ml-10" v-else-if="isRegent(sItem,'subType')" :type="sItem.subType" <HandleFormItem :field-item-label="fieldItemLabel" :field-key="prefixKey+'_'+sItem.subKey" class="ml-10" v-else-if="isRegent(sItem,'subType')" :type="sItem.subType"
:item="getRegentItem(sItem,'subType')" :item="getRegentItem(sItem,'subType')"
sourceFrom = "baseInfoFormPackage" sourceFrom = "baseInfoFormPackage"
@beforeReagentSubmit="(data, callback)=>onBeforeReagentSubmit(data, callback,sItem.subKey)"
@onRegentSubmit="(data)=>onRegentSubmit(data,sItem.subKey,sItem)" @onRegentSubmit="(data)=>onRegentSubmit(data,sItem.subKey,sItem)"
:error="errors[sItem.subKey]" @update:error="errors[sItem.subKey] = false" :error="errors[sItem.subKey]" @update:error="errors[sItem.subKey] = false"
:value="formFields[sItem.subKey]" /> :value="formFields[sItem.subKey]" />
@ -194,6 +197,7 @@
<HandleFormItem :field-item-label="fieldItemLabel" :field-key="prefixKey+'_'+sItem.subKey" class="ml-10" v-else-if="isRegent(sItem,'subType')" <HandleFormItem :field-item-label="fieldItemLabel" :field-key="prefixKey+'_'+sItem.subKey" class="ml-10" v-else-if="isRegent(sItem,'subType')"
sourceFrom = "baseInfoFormPackage" sourceFrom = "baseInfoFormPackage"
:error="errors[sItem.subKey]" :type="sItem.subType" :error="errors[sItem.subKey]" :type="sItem.subType"
@beforeReagentSubmit="(data, callback)=>onBeforeReagentSubmit(data, callback,sItem.subKey)"
@onRegentSubmit="(data)=>onRegentSubmit(data,sItem.subKey,sItem)" @onRegentSubmit="(data)=>onRegentSubmit(data,sItem.subKey,sItem)"
:item="getRegentItem(sItem,'subType')" :value="formFields[sItem.subKey]" /> :item="getRegentItem(sItem,'subType')" :value="formFields[sItem.subKey]" />
</div> </div>
@ -208,6 +212,7 @@
class="flex flex1"> class="flex flex1">
<HandleFormItem :field-item-label="fieldItemLabel" <HandleFormItem :field-item-label="fieldItemLabel"
sourceFrom = "baseInfoFormPackage" sourceFrom = "baseInfoFormPackage"
@beforeReagentSubmit="(data, callback)=>onBeforeReagentSubmit(data, callback,key)"
@onRegentSubmit="(data)=>onRegentSubmit(data,key,sItem)" @onRegentSubmit="(data)=>onRegentSubmit(data,key,sItem)"
:field-key="prefixKey+'_'+key" :type="sItem.type" :field-key="prefixKey+'_'+key" :type="sItem.type"
:error="errors[key]" @update:error="errors[key] = false" :error="errors[key]" @update:error="errors[key] = false"
@ -270,6 +275,11 @@ export default {
isRegent isRegent
}; };
}, },
methods: {
onBeforeReagentSubmit(data, callback, key) {
this.$emit('beforeReagentSubmit',{selectData:data, callback, key,formFields:this.formFields})
},
}
} }
</script> </script>

+ 7
- 0
src/components/Template/CustomTable.vue View File

@ -98,6 +98,7 @@
:item="getBodyItem(col, rowIndex)" :value="row[col.prop]" :item="getBodyItem(col, rowIndex)" :value="row[col.prop]"
:error="hasError(rowIndex, colIndex, col.prop)" :error="hasError(rowIndex, colIndex, col.prop)"
@onRegentSubmit="(data)=>onRegentSubmit(data,col, rowIndex, colIndex, row)" @onRegentSubmit="(data)=>onRegentSubmit(data,col, rowIndex, colIndex, row)"
@beforeReagentSubmit="(data, callback)=>onBeforeReagentSubmit(data, callback,col,row)"
@update:error="onErrorUpdate(rowIndex, colIndex, col.prop, $event)" @update:error="onErrorUpdate(rowIndex, colIndex, col.prop, $event)"
:orange-bg="hasOrangeBg(rowIndex, colIndex, col.prop)" /> :orange-bg="hasOrangeBg(rowIndex, colIndex, col.prop)" />
</div> </div>
@ -331,6 +332,12 @@ export default {
} }
this.$emit("clickable", col, rowIndex, row) 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){ onRegentSubmit(data, col, rowIndex, colIndex, row){
if (this.templateFillType !== 'actFill') { if (this.templateFillType !== 'actFill') {
return return

+ 31
- 1
src/components/Template/HandleFormItem.vue View File

@ -360,10 +360,40 @@ export default {
// //
onMixReagentSubmit(data) { onMixReagentSubmit(data) {
if (data.uuid !== this.uuid) return; 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.inputValue = data.selectedId;
this.selectRegentInfo = data; this.selectRegentInfo = data;
EventBus.$emit("hideSelectMixReagentDialog");
this.onCommonHandleSaveRecord(this.inputValue); this.onCommonHandleSaveRecord(this.inputValue);
// this.inputValue = this.item.label;
}, },
/// ///
onCommonHandleRegent(item, type) { onCommonHandleRegent(item, type) {

+ 4
- 0
src/views/business/comps/template/TemplateTable.vue View File

@ -240,6 +240,9 @@ export default {
EventBus.$on("showSelectMixReagentDialog", (data) => { EventBus.$on("showSelectMixReagentDialog", (data) => {
this.$refs.selectMixReagentDialogRef.show(data.studyFormId, data) this.$refs.selectMixReagentDialogRef.show(data.studyFormId, data)
}) })
EventBus.$on("hideSelectMixReagentDialog", (data) => {
this.$refs.selectMixReagentDialogRef.hide()
})
// //
EventBus.$on("showEditSignDialog", (data) => { EventBus.$on("showEditSignDialog", (data) => {
this.currentEditSignUuid = data.uuid; this.currentEditSignUuid = data.uuid;
@ -255,6 +258,7 @@ export default {
EventBus.$off("showSelectInstrumentDialog"); EventBus.$off("showSelectInstrumentDialog");
EventBus.$off("showSelectMixReagentDialog"); EventBus.$off("showSelectMixReagentDialog");
EventBus.$off("showEditSignDialog"); EventBus.$off("showEditSignDialog");
EventBus.$off("hideSelectMixReagentDialog");
this.debouncedEmit.cancel() this.debouncedEmit.cancel()
}, },
methods: { methods: {

+ 5
- 3
src/views/business/comps/template/comps/sp/SP003.vue View File

@ -16,7 +16,9 @@
<LineLabel label="template.common.operationSteps" /> <LineLabel label="template.common.operationSteps" />
<div class="template-form-item"> <div class="template-form-item">
<BaseInfoFormPackage ref="stepFormPackageRef" fieldItemLabel="template.common.operationSteps" <BaseInfoFormPackage ref="stepFormPackageRef" fieldItemLabel="template.common.operationSteps"
@onRegentSubmit="onRegentSubmit" :formConfig="stepFormConfig" @blur="onHandleBlur"
@onRegentSubmit="onRegentSubmit"
@beforeReagentSubmit="onBeforeReagentSubmit"
:formConfig="stepFormConfig" @blur="onHandleBlur"
:formData="formData" /> :formData="formData" />
<CustomTable fieldItemLabel="template.common.operationSteps" @blur="onHandleTableBlur" <CustomTable fieldItemLabel="template.common.operationSteps" @blur="onHandleTableBlur"
:showAddRow="fillType === 'preFill' ? true : false" :showOperation="fillType === 'actFill'" :showAddRow="fillType === 'preFill' ? true : false" :showOperation="fillType === 'actFill'"
@ -430,10 +432,10 @@ export default {
if (this.fillType === "actFill") { if (this.fillType === "actFill") {
this.handleUpdateCode(formData); this.handleUpdateCode(formData);
} }
const re = convertConcentration.convert('100mg/mL',"ng/mL")
console.log(re,"res")
// const re = convertConcentration.convert('100mg/mL',"ng/mL")
}, },
methods: { methods: {
// //
onRegentSubmit(data) { onRegentSubmit(data) {
const { selectInfo, key } = data; const { selectInfo, key } = data;

+ 8
- 0
src/views/business/comps/template/comps/sp/SP00456.vue View File

@ -33,6 +33,7 @@
}}</el-button> }}</el-button>
</div> </div>
<BaseInfoFormPackage @onRegentSubmit="(e) => onRegentSubmit('ladder', ladderIndex, e)" <BaseInfoFormPackage @onRegentSubmit="(e) => onRegentSubmit('ladder', ladderIndex, e)"
@beforeReagentSubmit="(data) => onBeforeReagentSubmit(data,ladderIndex, ladderConfig)"
:ref="`ladderStepFormPackageRef_${ladderIndex}`" :formConfig="ladderStepFormConfig" :ref="`ladderStepFormPackageRef_${ladderIndex}`" :formConfig="ladderStepFormConfig"
:formData="ladderConfig" :fieldItemLabel="$t('template.common.jtpz')" :formData="ladderConfig" :fieldItemLabel="$t('template.common.jtpz')"
:prefixKey="'ladder_' + ladderIndex" /> :prefixKey="'ladder_' + ladderIndex" />
@ -76,6 +77,7 @@
<CustomTable @blur="(e) => onHandleTableBlur('paralle', paralleIndex, e)" <CustomTable @blur="(e) => onHandleTableBlur('paralle', paralleIndex, e)"
:ref="`paralleStepTableRef_${paralleIndex}`" :showOperation="fillType === 'actFill' || fillType === 'preFill'" :ref="`paralleStepTableRef_${paralleIndex}`" :showOperation="fillType === 'actFill' || fillType === 'preFill'"
:columns="paralleStepColumns" :columns="paralleStepColumns"
@beforeReagentSubmit="(data) => onTableBeforeReagentSubmit(data, paralleIndex, paralleConfig)"
@onRegentSubmit="(data) => onTableRegentSubmit('paralle', paralleIndex, data)" @onRegentSubmit="(data) => onTableRegentSubmit('paralle', paralleIndex, data)"
:formData="paralleConfig" :prefixKey="'paralle' + paralleIndex" :formData="paralleConfig" :prefixKey="'paralle' + paralleIndex"
:fieldItemLabel="$t('template.common.pxpz')"> :fieldItemLabel="$t('template.common.pxpz')">
@ -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 // table
onTableRegentSubmit(type, configIndex, data) { onTableRegentSubmit(type, configIndex, data) {
const { selectInfo, rowIndex, key, rowData } = data; const { selectInfo, rowIndex, key, rowData } = data;

+ 4
- 1
src/views/business/comps/template/dialog/SelectMixReagentDialog.vue View File

@ -119,6 +119,9 @@ export default {
this.handleShowTableInfo(type); this.handleShowTableInfo(type);
}, },
hide() {
this.visible = false;
},
handleOtherChange(val) { handleOtherChange(val) {
this.otherChecked = val; this.otherChecked = val;
if (val) {//id if (val) {//id
@ -159,7 +162,7 @@ export default {
this.$emit('submit', selectedValue, row); this.$emit('submit', selectedValue, row);
// eventBus // eventBus
EventBus.$emit("onMixReagentSubmit", { selectInfo, uuid: this.uuid, selectedId: selectedValue, row,selectType:this.selectType }); EventBus.$emit("onMixReagentSubmit", { selectInfo, uuid: this.uuid, selectedId: selectedValue, row,selectType:this.selectType });
this.visible = false;
// this.visible = false;
}, },
// //
handleSelect(code, row) { handleSelect(code, row) {

+ 10
- 0
src/views/business/comps/template/mixins/templateMixin.js View File

@ -1,6 +1,7 @@
import moment from 'moment' import moment from 'moment'
import { getLatestSn, getLatestSnArr } from '@/api/template'; import { getLatestSn, getLatestSnArr } from '@/api/template';
import { isValueEmpty } from '@/utils/index'; import { isValueEmpty } from '@/utils/index';
import { isCommonUnit } from "@/utils/conTools";
import { sj_subpackage, sj_startConfiguration, sj_configurationCompleted } from '@/api/business/sj/sj'; import { sj_subpackage, sj_startConfiguration, sj_configurationCompleted } from '@/api/business/sj/sj';
export default { export default {
dicts: [ dicts: [
@ -162,6 +163,15 @@ export default {
this.setTemplateData({}) this.setTemplateData({})
}, },
methods: { methods: {
//试剂弹窗确认前
onBeforeReagentSubmit(data){
const {selectData, callback, key, formFields} = data;
const {subTargetStartSolution} = formFields;
//判断选择的浓度单位和预制的浓度单位是否一致
if(key === "subStartSolution" && !isCommonUnit(selectData.row.nddw,[subTargetStartSolution])){//选择起始源溶液需要同步更新table的变更记录。
callback.prevent('浓度单位与预制不符,请重新选择或申请废止并重新预制。');
}
},
getFormDataByTemplateData() { getFormDataByTemplateData() {
let o = {}; let o = {};
const { bdnr } = this.templateData const { bdnr } = this.templateData

Loading…
Cancel
Save