Browse Source

feat:[模板管理][公告组件细节处理]

master
luojie 1 day ago
parent
commit
c845b8b195
6 changed files with 136 additions and 202 deletions
  1. +35
    -16
      src/components/Template/BaseInfoFormPcakge.vue
  2. +16
    -1
      src/components/Template/CustomTable.vue
  3. +9
    -34
      src/components/Template/HandleFormItem.vue
  4. +9
    -1
      src/components/Template/Step.vue
  5. +47
    -135
      src/views/business/comps/template/comps/sp/SWYPNBGZYZBB.vue
  6. +20
    -15
      src/views/business/comps/template/mixins/templateMixin.js

+ 35
- 16
src/components/Template/BaseInfoFormPcakge.vue View File

@ -118,13 +118,13 @@
<HandleFormItem @blur="onBlur(key, $event)" class="flex1" :item="sItem" <HandleFormItem @blur="onBlur(key, $event)" class="flex1" :item="sItem"
v-model="formFields[key]" @copy="onCopy(sItem, key)" :error="errors[key]" v-model="formFields[key]" @copy="onCopy(sItem, key)" :error="errors[key]"
@update:error="errors[key] = false" :orange-bg="orangeBgFields[key]" /> @update:error="errors[key] = false" :orange-bg="orangeBgFields[key]" />
<HandleFormItem v-if="sItem.subType === 'select'" type="select" :item="getSubItem(sItem)"
v-model="formFields[sItem.subKey]" @copy="onCopy(sItem, key)"
<HandleFormItem class="ml-10" v-if="sItem.subType === 'select'" type="select"
:item="getSubItem(sItem)" v-model="formFields[sItem.subKey]" @copy="onCopy(sItem, key)"
@change="onSelectChange(sItem.subKey, $event)" :error="errors[sItem.subKey]" @change="onSelectChange(sItem.subKey, $event)" :error="errors[sItem.subKey]"
@update:error="errors[sItem.subKey] = false" @update:error="errors[sItem.subKey] = false"
:orange-bg="orangeBgFields[sItem.subKey]" /> :orange-bg="orangeBgFields[sItem.subKey]" />
<div v-else-if="sItem.subType === 'span'">{{ formFields[sItem.subKey] }}</div>
<HandleFormItem v-else-if="sItem.subType === 'clickable'" type="clickable"
<div class="ml-10" v-else-if="sItem.subType === 'span'">{{ formFields[sItem.subKey] }}</div>
<HandleFormItem class="ml-10" v-else-if="sItem.subType === 'clickable'" type="clickable"
@clickable="handleClickable(sItem, $event)" :item="getClickableItem(sItem)" @clickable="handleClickable(sItem, $event)" :item="getClickableItem(sItem)"
:value="formFields[sItem.subKey]" /> :value="formFields[sItem.subKey]" />
<div v-show="isShowOther(formFields[sItem.subKey])" class="flex flex1"> <div v-show="isShowOther(formFields[sItem.subKey])" class="flex flex1">
@ -146,13 +146,13 @@
@input="onInputNumberChange(key, $event)" :value="formFields[key]" @input="onInputNumberChange(key, $event)" :value="formFields[key]"
@copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false" @copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false"
:orange-bg="orangeBgFields[key]" /> :orange-bg="orangeBgFields[key]" />
<HandleFormItem v-if="sItem.subType === 'select'" type="select" :item="getSubItem(sItem)"
v-model="formFields[sItem.subKey]" @copy="onCopy(sItem, key)"
<HandleFormItem class="ml-10" v-if="sItem.subType === 'select'" type="select"
:item="getSubItem(sItem)" v-model="formFields[sItem.subKey]" @copy="onCopy(sItem, key)"
@change="onSelectChange(sItem.subKey, $event)" :error="errors[sItem.subKey]" @change="onSelectChange(sItem.subKey, $event)" :error="errors[sItem.subKey]"
@update:error="errors[sItem.subKey] = false" @update:error="errors[sItem.subKey] = false"
:orange-bg="orangeBgFields[sItem.subKey]" /> :orange-bg="orangeBgFields[sItem.subKey]" />
<div v-else-if="sItem.subType === 'span'">{{ formFields[sItem.subKey] }}</div>
<HandleFormItem v-else-if="sItem.subType === 'clickable'"
<div class="ml-10" v-else-if="sItem.subType === 'span'">{{ formFields[sItem.subKey] }}</div>
<HandleFormItem class="ml-10" v-else-if="sItem.subType === 'clickable'"
@clickable="handleClickable(sItem, $event)" type="clickable" @clickable="handleClickable(sItem, $event)" type="clickable"
:item="getClickableItem(sItem)" :value="formFields[sItem.subKey]" /> :item="getClickableItem(sItem)" :value="formFields[sItem.subKey]" />
<!-- <div class="clickable" :class="getFillType(sItem.subFillType)" v-else-if = "sItem.subType ==='clickable'" @click="handleClickable(sItem,$event)"> <!-- <div class="clickable" :class="getFillType(sItem.subFillType)" v-else-if = "sItem.subType ==='clickable'" @click="handleClickable(sItem,$event)">
@ -207,7 +207,7 @@ export default {
deep: true, // 便 deep: true, // 便
handler(v) { handler(v) {
if (v) { if (v) {
this.handleFormField();
this.handleFormField(true);
} }
} }
}, },
@ -303,7 +303,7 @@ export default {
return arr.some(item => item < 0); return arr.some(item => item < 0);
}, },
// formConfigform // formConfigform
handleFormField() {
handleFormField(update = false) {
const result = {}; const result = {};
let config = {}; let config = {};
const { formConfig, formData, formFields } = this; const { formConfig, formData, formFields } = this;
@ -321,11 +321,13 @@ export default {
// formFields // formFields
if (formFields[key] !== null && if (formFields[key] !== null &&
formFields[key] !== undefined && formFields[key] !== undefined &&
formFields[key] !== '' &&
typeof formFields[key] !== 'object'
formFields[key] !== ''
// typeof formFields[key] !== 'object'
) { ) {
// 使formData // 使formData
result[key] = formFields[key]; result[key] = formFields[key];
} else { } else {
// 使formData // 使formData
result[key] = value; result[key] = value;
@ -334,12 +336,21 @@ export default {
// - "" // - ""
if (currentConfig.otherCode) { if (currentConfig.otherCode) {
const { otherCode } = currentConfig; const { otherCode } = currentConfig;
result[otherCode] = formData[otherCode] || '';
//使formFields
if (update) {
result[otherCode] = formFields[otherCode] || formData[otherCode] || '';
} else {
result[otherCode] = formData[otherCode] || formFields[otherCode] || '';
}
config[otherCode] = { label: "其他", parentKey: key, type: "input", fillType: currentConfig.fillType } config[otherCode] = { label: "其他", parentKey: key, type: "input", fillType: currentConfig.fillType }
} }
if (currentConfig.subKey) { if (currentConfig.subKey) {
const { subKey } = currentConfig; const { subKey } = currentConfig;
result[subKey] = formData[subKey] || '';
if (update) {
result[subKey] = formFields[subKey] || formData[subKey] || '';
} else {
result[subKey] = formData[subKey] || formFields[subKey] || '';
}
config[subKey] = { label: currentConfig.label, subKey, type: currentConfig.subType, fillType: currentConfig.subFillType || currentConfig.fillType } config[subKey] = { label: currentConfig.label, subKey, type: currentConfig.subType, fillType: currentConfig.subFillType || currentConfig.fillType }
} }
}); });
@ -388,8 +399,8 @@ export default {
if (!isSelectedOther) {// if (!isSelectedOther) {//
formFields[o.otherCode] = ""; formFields[o.otherCode] = "";
} }
}else if(o.subType === "select"){
const isSelectedOther = this.isShowOther(formFields[o.subKey]);
} else if (o.subType === "select") {
const isSelectedOther = this.isShowOther(formFields[o.subKey]);
if (!isSelectedOther) {// if (!isSelectedOther) {//
formFields[o.otherCode] = ""; formFields[o.otherCode] = "";
} }
@ -455,6 +466,10 @@ export default {
} }
}); });
}, },
//
getDirectFormData() {
return this.formFields;
},
getFormDataByKey(key) { getFormDataByKey(key) {
return this.formFields[key]; return this.formFields[key];
}, },
@ -629,4 +644,8 @@ export default {
.blue-border { .blue-border {
border-color: #4ea2ff; border-color: #4ea2ff;
} }
.ml-10 {
margin-left: 10px;
}
</style> </style>

+ 16
- 1
src/components/Template/CustomTable.vue View File

@ -94,7 +94,7 @@
</div> </div>
<div class="add-row" v-if="isShowAddRos()"> <div class="add-row" v-if="isShowAddRos()">
<el-button type="primary" plain @click="addRow">添加行</el-button>
<el-button type="primary" plain @click="onAddRow">添加行</el-button>
</div> </div>
</div> </div>
</template> </template>
@ -190,6 +190,13 @@ export default {
}); });
this.headerSelectFields = headerSelectObj; this.headerSelectFields = headerSelectObj;
}, },
//
getDirectFormData() {
return {
stepTableFormData: [...this.localDataSource],
headerSelectFields: this.headerSelectFields,
};
},
// //
getFormData() { getFormData() {
// columns // columns
@ -375,6 +382,14 @@ export default {
// //
this.localDataSource = JSON.parse(JSON.stringify(dataSource || [])); this.localDataSource = JSON.parse(JSON.stringify(dataSource || []));
}, },
onAddRow() {
this.addRow({
actSolutionVolumePrecision: 3,//3
actSolutionConcentrationPrecision: 3,//3
targetDiluentVolumePrecision: 3,//3
targetStartSolutionVolumePrecision: 3,//3
});
},
// //
addRow(row = {}) { addRow(row = {}) {
this.localDataSource.push(row); this.localDataSource.push(row);

+ 9
- 34
src/components/Template/HandleFormItem.vue View File

@ -2,11 +2,11 @@
<div class="flex flex1"> <div class="flex flex1">
<div class="flex1 flex"> <div class="flex1 flex">
<el-input v-if="type === 'input'" :maxlength="item.maxlength || 50" :disabled="getDisabled()" <el-input v-if="type === 'input'" :maxlength="item.maxlength || 50" :disabled="getDisabled()"
:class="getFillTypeStyle() + (orangeBg ? ' orange-bg' : '')" @blur="onCommonHandleSaveRecord"
:class="getFillTypeStyle() + (orangeBg ? ' orange-bg' : '')" @blur="onBlur"
:placeholder="getPlaceholder()" v-model="inputValue" :placeholder="getPlaceholder()" v-model="inputValue"
@input="onInputChange" @change="onInputChange" /> @input="onInputChange" @change="onInputChange" />
<el-input v-else-if="type === 'textarea'" :maxlength="item.maxlength || 50" :disabled="getDisabled()" <el-input v-else-if="type === 'textarea'" :maxlength="item.maxlength || 50" :disabled="getDisabled()"
:class="getFillTypeStyle() + (orangeBg ? ' orange-bg' : '')" type="textarea" show-word-limit resize="none" @blur="onCommonHandleSaveRecord"
:class="getFillTypeStyle() + (orangeBg ? ' orange-bg' : '')" type="textarea" show-word-limit resize="none" @blur="onBlur"
:rows="item.rows || 3" :placeholder="getPlaceholder()" :rows="item.rows || 3" :placeholder="getPlaceholder()"
v-model="inputValue" @input="onInputChange" @change="onInputChange" /> v-model="inputValue" @input="onInputChange" @change="onInputChange" />
<DecimalInput v-else-if="type === 'inputNumber'" @blur="onCommonHandleSaveRecord" :maxlength="item.maxlength || 10" <DecimalInput v-else-if="type === 'inputNumber'" @blur="onCommonHandleSaveRecord" :maxlength="item.maxlength || 10"
@ -17,7 +17,7 @@
@input="onInputChange" @change="onInputChange" /> @input="onInputChange" @change="onInputChange" />
<el-select v-else-if="type === 'select'" class="flex1" :multiple="item.multiple" <el-select v-else-if="type === 'select'" class="flex1" :multiple="item.multiple"
:class="getFillTypeStyle() + (orangeBg ? ' orange-bg' : '')" v-model="inputValue" :disabled="getDisabled()" :class="getFillTypeStyle() + (orangeBg ? ' orange-bg' : '')" v-model="inputValue" :disabled="getDisabled()"
:placeholder="getPlaceholder()" @change="onInputChange">
:placeholder="getPlaceholder()" @change="onCommonHandleSaveRecord">
<el-option v-for="op in item.options" :key="op.value" :label="op.label" :value="op.value"> <el-option v-for="op in item.options" :key="op.value" :label="op.label" :value="op.value">
</el-option> </el-option>
</el-select> </el-select>
@ -127,7 +127,6 @@ export default {
watch: { watch: {
value(newVal) { value(newVal) {
this.inputValue = newVal; this.inputValue = newVal;
console.log(newVal,"newVal")
} }
}, },
filters: { filters: {
@ -167,6 +166,11 @@ export default {
this.$emit('update:error', true); this.$emit('update:error', true);
} }
}, },
//
onBlur(e) {
this.onCommonHandleSaveRecord(e.target.value);
},
async onCommonHandleSaveRecord(val){ async onCommonHandleSaveRecord(val){
const isEmpty = this.isValueEmpty(this.inputValue); const isEmpty = this.isValueEmpty(this.inputValue);
if (this.error && !isEmpty) { if (this.error && !isEmpty) {
@ -204,39 +208,10 @@ export default {
} else { } else {
// blurchange // blurchange
this.$emit("blur", val) this.$emit("blur", val)
// this.$emit('input', val);
this.$emit('input', val);
this.$emit("change", val) this.$emit("change", val)
} }
}, },
//
async handleValueChange(val, componentType = '') {
const oldValue = this.oldValue; //
this.$emit('input', val);
this.$emit('change', val);
//
const isEmpty = this.isValueEmpty(val);
if (this.error && !isEmpty) {
this.$emit('update:error', false);
} else if (!this.error && isEmpty) {
this.$emit('update:error', true);
}
//
const { templateStatus } = this.$store.state.template;
if (val !== oldValue && templateStatus === "actFill") {
//
try {
this.oldValue = val; //
//
await this.saveModificationRecord();
} catch (error) {
const componentName = componentType || '组件';
console.error(`记录${componentName}修改失败:`, error);
}
}
},
// //
isValueEmpty(value) { isValueEmpty(value) {

+ 9
- 1
src/components/Template/Step.vue View File

@ -10,7 +10,7 @@
<div class="step-content"> <div class="step-content">
<span class="step-title">步骤{{ index + 1 }}</span>
<span class="step-title">{{ index + 1 }}</span>
<HandleFormItem <HandleFormItem
type = "select" type = "select"
placeholder="请选择" placeholder="请选择"
@ -252,6 +252,14 @@ export default {
resolve({stepData}) resolve({stepData})
}) })
}, },
//
getDirectFormData() {
return this.steps.map(step => ({
type: step.type,
...step.formData
}))
},
// //
setStepData(data) { setStepData(data) {

+ 47
- 135
src/views/business/comps/template/comps/sp/SWYPNBGZYZBB.vue View File

@ -13,7 +13,7 @@
<BaseInfoFormPcakge label="存储条件" ref="storageConditionRef" :formConfig="storageFormConfig" <BaseInfoFormPcakge label="存储条件" ref="storageConditionRef" :formConfig="storageFormConfig"
:formData="formData" /> :formData="formData" />
<LineLabel label="操作步骤" /> <LineLabel label="操作步骤" />
<div class = "mt-20">
<div v-if = "fillType === 'preFill'" class = "mt-20">
<el-button type="primary" @click="handleAddParalle">新增平行配制</el-button> <el-button type="primary" @click="handleAddParalle">新增平行配制</el-button>
<el-button type="primary" @click="handleAddLadder">新增阶梯配制</el-button> <el-button type="primary" @click="handleAddLadder">新增阶梯配制</el-button>
</div> </div>
@ -29,6 +29,7 @@
<div class="config-header"> <div class="config-header">
<div>阶梯配制</div> <div>阶梯配制</div>
<el-button <el-button
v-if = "fillType === 'preFill'"
type="text" type="text"
icon="el-icon-delete" icon="el-icon-delete"
@click="deleteLadderConfig(ladderIndex)" @click="deleteLadderConfig(ladderIndex)"
@ -43,7 +44,6 @@
/> />
<CustomTable <CustomTable
@blur="onHandleTableBlur" @blur="onHandleTableBlur"
:showOperation="fillType === 'actFill'"
:ref="`ladderStepTableRef_${ladderIndex}`" :ref="`ladderStepTableRef_${ladderIndex}`"
:columns="ladderStepColumns" :columns="ladderStepColumns"
:formData="ladderConfig" :formData="ladderConfig"
@ -57,9 +57,7 @@
></TableOpertaion> ></TableOpertaion>
</template> </template>
</CustomTable> </CustomTable>
<div class="add-row">
<el-button @click="handleAddRow('ladder', undefined, ladderIndex)">添加行</el-button>
</div>
<Step <Step
class="mt-0" class="mt-0"
:ref="`ladderStepRef_${ladderIndex}`" :ref="`ladderStepRef_${ladderIndex}`"
@ -79,6 +77,7 @@
<div class="config-header"> <div class="config-header">
<div>平行配制</div> <div>平行配制</div>
<el-button <el-button
v-if = "fillType === 'preFill'"
type="text" type="text"
icon="el-icon-delete" icon="el-icon-delete"
@click="deleteParalleConfig(paralleIndex)" @click="deleteParalleConfig(paralleIndex)"
@ -93,7 +92,6 @@
/> />
<CustomTable <CustomTable
@blur="onHandleTableBlur" @blur="onHandleTableBlur"
:showOperation="fillType === 'actFill'"
:ref="`paralleStepTableRef_${paralleIndex}`" :ref="`paralleStepTableRef_${paralleIndex}`"
:columns="paralleStepColumns" :columns="paralleStepColumns"
:formData="paralleConfig" :formData="paralleConfig"
@ -107,9 +105,7 @@
></TableOpertaion> ></TableOpertaion>
</template> </template>
</CustomTable> </CustomTable>
<div class="add-row">
<el-button @click="handleAddRow('paralle', undefined, paralleIndex)">添加行</el-button>
</div>
<Step <Step
class="mt-0" class="mt-0"
:ref="`paralleStepRef_${paralleIndex}`" :ref="`paralleStepRef_${paralleIndex}`"
@ -150,102 +146,6 @@ export default {
}, },
}, },
watch: { watch: {
value: {
immediate: true,
handler(v) {
//
if (v && Object.keys(v).length > 0) {
this.formData = { ...this.formData, ...v };
//
if (v.ladderConfigs && Array.isArray(v.ladderConfigs) && v.ladderConfigs.length > 0) {
// ladderConfigs
if (!this.formData.ladderConfigs || !Array.isArray(this.formData.ladderConfigs)) {
this.$set(this.formData, 'ladderConfigs', []);
}
//
v.ladderConfigs.forEach((ladderConfig, index) => {
//
if (!this.formData.ladderConfigs[index]) {
this.formData.ladderConfigs[index] = {
ladderStepData: [],
ladderTableFormData: [],
showLadderConfig: true
};
}
//
if (ladderConfig.ladderTableFormData && ladderConfig.ladderTableFormData.length > 0 && this.$refs[`ladderStepTableRef_${index}`]) {
this.$refs[`ladderStepTableRef_${index}`].updateDataSource(ladderConfig.ladderTableFormData);
}
//
if (!ladderConfig.ladderStepData) {
this.$set(this.formData.ladderConfigs[index], 'ladderStepData', []);
}
//
if (ladderConfig.showLadderConfig === undefined) {
this.$set(this.formData.ladderConfigs[index], 'showLadderConfig', !!ladderConfig.ladderStepData && ladderConfig.ladderStepData.length > 0);
}
});
}
//
if (v.paralleConfigs && Array.isArray(v.paralleConfigs) && v.paralleConfigs.length > 0) {
// paralleConfigs
if (!this.formData.paralleConfigs || !Array.isArray(this.formData.paralleConfigs)) {
this.$set(this.formData, 'paralleConfigs', []);
}
//
v.paralleConfigs.forEach((paralleConfig, index) => {
//
if (!this.formData.paralleConfigs[index]) {
this.formData.paralleConfigs[index] = {
paralleStepData: [],
paralleTableFormData: [],
showParalleConfig: true
};
}
//
if (paralleConfig.paralleTableFormData && paralleConfig.paralleTableFormData.length > 0 && this.$refs[`paralleStepTableRef_${index}`]) {
this.$refs[`paralleStepTableRef_${index}`].updateDataSource(paralleConfig.paralleTableFormData);
}
//
if (!paralleConfig.paralleStepData) {
this.$set(this.formData.paralleConfigs[index], 'paralleStepData', []);
}
//
if (paralleConfig.showParalleConfig === undefined) {
this.$set(this.formData.paralleConfigs[index], 'showParalleConfig', !!paralleConfig.paralleStepData && paralleConfig.paralleStepData.length > 0);
}
});
}
//
if (v.ladderTableFormData && v.ladderTableFormData.length > 0 && (!v.ladderConfigs || v.ladderConfigs.length === 0)) {
this.formData.ladderConfigs = [{
ladderStepData: v.ladderStepData || [],
ladderTableFormData: v.ladderTableFormData,
showLadderConfig: v.showLadderConfig !== undefined ? v.showLadderConfig : true
}];
}
if (v.paralleTableFormData && v.paralleTableFormData.length > 0 && (!v.paralleConfigs || v.paralleConfigs.length === 0)) {
this.formData.paralleConfigs = [{
paralleStepData: v.paralleStepData || [],
paralleTableFormData: v.paralleTableFormData,
showParalleConfig: v.showParalleConfig !== undefined ? v.showParalleConfig : true
}];
}
}
}
},
fillType: { fillType: {
immediate: true, immediate: true,
handler(v) { handler(v) {
@ -785,26 +685,6 @@ export default {
}; };
}, },
mounted() { mounted() {
if (this.fillType === "preFill") {
this.formData = {
effectivePeriodUnit: "days",//
createTime: "2026-01-02 18:05:36",//
versionNum: 1,
stepTableFormData: [],
ladderConfigs: [], //
paralleConfigs: [], //
headerSelectFields: {
targetStartSolutionVolumeUnit: "mg",
actStartSolutionVolumeUnit: "mg",
targetDiluentVolumeUnit: "mg",
actDiluentVolumeUnit: "mg",
targetSolutionConcentrationUnit: "mg",
actSolutionConcentrationUnit: "mg",
targetSolutionVolumeUnit: "mg",
actSolutionVolumeUnit: "mg",
}
}
}
}, },
methods: { methods: {
// //
@ -883,17 +763,41 @@ export default {
this.$refs.stepFormPackageRef.updateFormData(this.currentSubKey, code); this.$refs.stepFormPackageRef.updateFormData(this.currentSubKey, code);
this.selectReagentVisible = false; this.selectReagentVisible = false;
}, },
async getFormData() {
const baseData = await this.$refs.baseInfoRef.getFormData();
const conditionData = await this.$refs.storageConditionRef.getFormData();
//
async validFields(){
//
let refsToValidate = ["baseInfoRef", "storageConditionRef", "remarkRef"];
//
if (this.formData.ladderConfigs && this.formData.ladderConfigs.length > 0) {
for (let i = 0; i < this.formData.ladderConfigs.length; i++) {
refsToValidate.push(`ladderStepFormPackageRef_${i}`);
refsToValidate.push(`ladderStepTableRef_${i}`);
refsToValidate.push(`ladderStepRef_${i}`);
}
}
//
if (this.formData.paralleConfigs && this.formData.paralleConfigs.length > 0) {
for (let i = 0; i < this.formData.paralleConfigs.length; i++) {
refsToValidate.push(`paralleStepFormPackageRef_${i}`);
refsToValidate.push(`paralleStepTableRef_${i}`);
refsToValidate.push(`paralleStepRef_${i}`);
}
}
return await this.validFormFields(refsToValidate);
},
getRealFormData(){
const baseData = this.$refs.baseInfoRef.getDirectFormData();
const conditionData = this.$refs.storageConditionRef.getDirectFormData();
// //
const ladderConfigsData = []; const ladderConfigsData = [];
if (this.formData.ladderConfigs && this.formData.ladderConfigs.length > 0) { if (this.formData.ladderConfigs && this.formData.ladderConfigs.length > 0) {
for (let i = 0; i < this.formData.ladderConfigs.length; i++) { for (let i = 0; i < this.formData.ladderConfigs.length; i++) {
const ladderFormData = await this.$refs[`ladderStepFormPackageRef_${i}`][0].getFormData();
const ladderTableFormData = await this.$refs[`ladderStepTableRef_${i}`][0].getFormData();
const ladderStepData = await this.$refs[`ladderStepRef_${i}`][0].getFormData();
const ladderFormData = this.$refs[`ladderStepFormPackageRef_${i}`][0].getDirectFormData();
const ladderTableFormData = this.$refs[`ladderStepTableRef_${i}`][0].getDirectFormData();
const ladderStepData = this.$refs[`ladderStepRef_${i}`][0].getDirectFormData();
ladderConfigsData.push({ ladderConfigsData.push({
...ladderFormData, ...ladderFormData,
@ -908,9 +812,9 @@ export default {
const paralleConfigsData = []; const paralleConfigsData = [];
if (this.formData.paralleConfigs && this.formData.paralleConfigs.length > 0) { if (this.formData.paralleConfigs && this.formData.paralleConfigs.length > 0) {
for (let i = 0; i < this.formData.paralleConfigs.length; i++) { for (let i = 0; i < this.formData.paralleConfigs.length; i++) {
const paralleFormData = await this.$refs[`paralleStepFormPackageRef_${i}`][0].getFormData();
const paralleTableFormData = await this.$refs[`paralleStepTableRef_${i}`][0].getFormData();
const paralleStepData = await this.$refs[`paralleStepRef_${i}`][0].getFormData();
const paralleFormData = this.$refs[`paralleStepFormPackageRef_${i}`][0].getDirectFormData();
const paralleTableFormData = this.$refs[`paralleStepTableRef_${i}`][0].getDirectFormData();
const paralleStepData = this.$refs[`paralleStepRef_${i}`][0].getDirectFormData();
paralleConfigsData.push({ paralleConfigsData.push({
...paralleFormData, ...paralleFormData,
@ -921,7 +825,7 @@ export default {
} }
} }
const remarkData = await this.$refs.remarkRef.getFormData();
const remarkData = this.$refs.remarkRef.getDirectFormData();
return { return {
...baseData, ...baseData,
@ -931,6 +835,14 @@ export default {
...remarkData ...remarkData
} }
}, },
async getFormData() {
//
const validFlag = this.validFields();
if(!validFlag){
return false;
}
return this.getRealFormData();
},
async onSave() { async onSave() {
const formData = await this.getFormData(); const formData = await this.getFormData();
console.log(formData, "formData") console.log(formData, "formData")

+ 20
- 15
src/views/business/comps/template/mixins/templateMixin.js View File

@ -1,6 +1,6 @@
import moment from "moment"; import moment from "moment";
export default { export default {
dicts: ['business_pztj','business_cctj','business_nddw','business_tjdw','business_yxqdw','business_rqcz'],
dicts: ['business_pztj', 'business_cctj', 'business_nddw', 'business_tjdw', 'business_yxqdw', 'business_rqcz'],
props: { props: {
templateData: { templateData: {
type: Object, type: Object,
@ -14,14 +14,14 @@ export default {
handler(v) { handler(v) {
if (v) { if (v) {
let n = { ...v }; let n = { ...v };
this.formData =n;
if(v.resource){//试验试剂信息
this.resource = v.resource;
this.formData = n;
if (v.resource) {//试验试剂信息
this.resource = v.resource;
} }
if (v.bdnr) { if (v.bdnr) {
this.formData = { ...n, ...JSON.parse(v.bdnr) }; this.formData = { ...n, ...JSON.parse(v.bdnr) };
} }
console.log(v,"formData from templateData")
console.log(v, "formData from templateData")
this.setTemplateData(n); this.setTemplateData(n);
} }
} }
@ -35,36 +35,41 @@ export default {
} }
}, },
mounted() { mounted() {
this.setTemplateStatus("actFill");
// this.setTemplateStatus(this.fillType);
// this.setTemplateStatus("actFill");
this.setTemplateStatus(this.fillType);
}, },
unmounted() { unmounted() {
this.setTemplateStatus(""); this.setTemplateStatus("");
this.setTemplateData({}); this.setTemplateData({});
}, },
methods: { methods: {
getResource(){
getResource() {
return this.resource; return this.resource;
}, },
//统一校验form表单是否填写 //统一校验form表单是否填写
async validFormFields(refArr = []) { async validFormFields(refArr = []) {
let result = {}; let result = {};
const refs = refArr.map(ref => { const refs = refArr.map(ref => {
const refData = this.$refs[ref].getFormData();
let refData = {};
if (this.$refs[ref][0]) {
refData = this.$refs[ref][0]?.getFormData() || {};
} else {
refData = this.$refs[ref]?.getFormData() || {};
}
return refData; return refData;
}); });
const validFormData = await Promise.all(refs).catch(err => { const validFormData = await Promise.all(refs).catch(err => {
// this.$message.error(err); // this.$message.error(err);
if(err.errorType && err.errorType === "step"){
if (err.errorType && err.errorType === "step") {
this.$message.error("请添加步骤"); this.$message.error("请添加步骤");
return return
} }
console.log(err,"err")
console.log(err, "err")
this.$message.error("表单内容未填完,请填写后再提交"); this.$message.error("表单内容未填完,请填写后再提交");
}); });
if(validFormData){
if (validFormData) {
validFormData.forEach(item => { validFormData.forEach(item => {
result = {...result,...item}
result = { ...result, ...item }
}) })
return result; return result;
} }
@ -109,7 +114,7 @@ export default {
})); }));
this.$refs.stepTableRef.updateDataSource(arr); this.$refs.stepTableRef.updateDataSource(arr);
} else if (key === "targetStartSolution") {//起始溶液体积失焦时,更新目标溶液预计浓度 } else if (key === "targetStartSolution") {//起始溶液体积失焦时,更新目标溶液预计浓度
const arr = this.$refs.stepTableRef.getDataSource();
const arr = this.$refs.stepTableRef?.getDataSource();
arr.forEach((item, rowIndex) => { arr.forEach((item, rowIndex) => {
this.updateTargetStartSolutionVolume(rowIndex, item, targetStartSolution); this.updateTargetStartSolutionVolume(rowIndex, item, targetStartSolution);
}) })
@ -120,7 +125,7 @@ export default {
const { rowIndex, colKey, value, item } = params; const { rowIndex, colKey, value, item } = params;
console.log(rowIndex, colKey, value, item, "params") console.log(rowIndex, colKey, value, item, "params")
if (colKey === "targetSolutionVolume" || colKey === "targetSolutionConcentration" || colKey === "targetStartSolutionVolumePrecision" || colKey === "targetDiluentVolumePrecision") { if (colKey === "targetSolutionVolume" || colKey === "targetSolutionConcentration" || colKey === "targetStartSolutionVolumePrecision" || colKey === "targetDiluentVolumePrecision") {
const volume = this.$refs.stepFormPackageRef.getFormDataByKey("targetStartSolution") || 0;
const volume = this.$refs.stepFormPackageRef?.getFormDataByKey("targetStartSolution") || 0;
if (volume) { if (volume) {
this.updateTargetStartSolutionVolume(rowIndex, item, volume); this.updateTargetStartSolutionVolume(rowIndex, item, volume);
} }

Loading…
Cancel
Save