Browse Source

feat:[模板管理][update]

lkf
luojie 2 months ago
parent
commit
604e239ae6
5 changed files with 95 additions and 93 deletions
  1. +14
    -7
      src/components/Template/HandleFormItem.vue
  2. +41
    -82
      src/components/Template/StepComponents/ZLSubPackage.vue
  3. +25
    -1
      src/components/Template/StepFormPackage.vue
  4. +14
    -3
      src/components/Template/mixins/formPackageMixins.js
  5. +1
    -0
      src/views/business/comps/template/dialog/SubPackageDialog.vue

+ 14
- 7
src/components/Template/HandleFormItem.vue View File

@ -870,33 +870,39 @@ export default {
.el-select,
.clickable,
.el-date-editor {
border-color: #f56c6c;
border-color: #ff5d5d;
box-shadow: 0 0 6px #ffc3c3!important;
&:focus {
border-color: #f56c6c;
border-color: #ff5d5d;
box-shadow: 0 0 6px #ffc3c3!important;
}
&:hover {
border-color: #f56c6c;
border-color: #ff5d5d;
box-shadow: 0 0 6px #ffc3c3!important;
}
}
// el-select el-date-picker
.el-select .el-input__inner,
.el-date-editor .el-input__inner .el-checkbox__inner {
border-color: #f56c6c;
border-color: #ff5d5d;
box-shadow: 0 0 6px #ffc3c3!important;
}
// DecimalInput
:deep(.el-input-number) {
.el-input__inner {
border-color: #f56c6c;
border-color: #ff5d5d;
box-shadow: 0 0 6px #ffc3c3!important;
}
}
//
.clickable {
border-color: #f56c6c;
border-color: #ff5d5d;
box-shadow: 0 0 6px #ffc3c3!important;
}
}
@ -989,7 +995,8 @@ export default {
}
&.error-border {
border-color: #f56c6c !important;
border-color: #ff5d5d !important;
box-shadow: 0 0 6px #ffc3c3!important;
}
}

+ 41
- 82
src/components/Template/StepComponents/ZLSubPackage.vue View File

@ -26,10 +26,12 @@
<div class="header-container">
<div v-for="(item, index) in fzList" class="list-item" :key="index">
<div class="list-label">{{ formData.mybh }}-set{{ item.subCode }}</div>
<HandleFormItem :fieldKey = "'clfz_set'+index+'_prenum'" :item="preInputNumberItem" :error="fzListErrors[index]"
type="inputNumber" @blur="onBlurFzNum(index)" v-model="item.prenum" />
<HandleFormItem :fieldKey = "'clfz_set'+index+'_actnum'" class="ml-5" :item="inputNumberItem" :error="fzListErrors[index]"
type="inputNumber" @blur="onBlurFzNum(index)" v-model="item.actnum" />
<HandleFormItem :fieldKey = "'clfz_set'+index+'_prenum'" :item="preInputNumberItem"
:error="hasError(index, 'prenum')"
type="inputNumber" @blur="onBlurFzNum(index,'prenum')" v-model="item.prenum" />
<HandleFormItem :fieldKey = "'clfz_set'+index+'_actnum'" class="ml-5" :item="inputNumberItem"
:error="hasError(index, 'actnum')"
type="inputNumber" @blur="onBlurFzNum(index,'actnum')" v-model="item.actnum" />
<HandleFormItem
class="ml-5"
type="button"
@ -47,7 +49,9 @@ import HandleFormItem from '@/components/Template/HandleFormItem.vue';
import { compareVolume } from '@/utils/volumeTools.js';
import { EventBus } from '@/utils/eventBus';
import { getLatestSn } from '@/api/template';
import { isValueEmpty } from '@/utils/index.js';
export default {
inject: ['templateFillType'],
dicts: [
'business_tjdw',
],
@ -150,58 +154,6 @@ export default {
this.formData = {};
this.resetErrors();
},
show(data) {
const cloneData = JSON.parse(JSON.stringify(data));
if(data && data.uuid) {//eventBusid
this.uuid = data.uuid
}
if (data.fzList) {
this.fzList = JSON.parse(JSON.stringify(cloneData.fzList));
//
this.fzListErrors = new Array(this.fzList.length).fill(false);
delete cloneData.fzList;
}
this.formData = cloneData;
//
this.resetErrors();
this.visible = true;
},
onSubmit() {
//
if (!this.validateFormData()) {
this.$message.error('表单内容未填完,请填写后再提交')
return;
} else {
const errMsg = "分装后小份容量之和大于母液容量,是否确认分装?"
const {maxVolume,maxVolumeUnit,dw} = this.formData;
const totalVolume = this.fzList.reduce((acc, cur) => acc + Number(cur.num), 0);
const compareResult = compareVolume(totalVolume,dw,maxVolume, maxVolumeUnit);
console.log(compareResult,totalVolume,dw,maxVolume, maxVolumeUnit,"比较结果");
if(compareResult > 0||!maxVolume){//
this.$modal.confirm(errMsg, '提示', {
confirmButtonText: this.$t('form.saveConfirm'),
cancelButtonText: this.$t('form.cancel'),
type: 'warning'
}).then(() => {
this.submitEmit();
}).catch(() => {
//
});
return;
}
this.submitEmit();
}
},
submitEmit(){
EventBus.$emit('dialogSubPackageSubmit', {...this.formData, fzList: this.fzList,uuid:this.uuid});
setTimeout(() => {
this.close();
}, 500);
},
validateFormData() {
let isValid = true;
@ -226,18 +178,24 @@ export default {
//
if (this.fzList && this.fzList.length > 0) {
for (let i = 0; i < this.fzList.length; i++) {
if (!this.fzList[i].num) {
// fzListErrors
if (this.fzListErrors.length <= i) {
this.$set(this.fzListErrors, i, true);
} else {
this.fzListErrors[i] = true;
}
if (isValueEmpty(this.fzList[i].prenum)) {
this.fzListErrors.push({
rowIndex: i,
field: "prenum",
error: "请输入预填分装数量",
})
isValid = false;
}
if (isValueEmpty(this.fzList[i].actnum)) {
this.fzListErrors.push({
rowIndex: i,
field: "actnum",
error: "请输入实际分装数量",
})
isValid = false;
}
}
}
return isValid;
},
resetErrors() {
@ -248,7 +206,7 @@ export default {
//
this.fzListErrors.forEach((_, index) => {
this.$set(this.fzListErrors, index, false);
this.fzListErrors = []
});
},
//
@ -275,24 +233,10 @@ export default {
actnum: "",
subCode: codes[i],
});
//
this.fzListErrors.push(false);
}
}
},
onAverage() {
const { mfbzl } = this.formData;
this.fzList.forEach((item, index) => {
item.num = mfbzl;
//
if (this.fzListErrors[index] !== undefined) {
this.$set(this.fzListErrors, index, false);
}
})
//
this.formErrors.mfbzl = false;
},
onGetValue(item) {
item.actnum = 123;
console.log(item,"获取值")
@ -303,13 +247,28 @@ export default {
this.formErrors[field] = false;
}
},
onBlurFzNum(index) {
if (this.fzList[index] && this.fzList[index].num) {
if (this.fzListErrors[index] !== undefined) {
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);
} else {
//
this.$set(this.fzListErrors, index, true);
}
}
},
hasError(index, field) {
const o = this.fzListErrors.find((item)=>{
return item.rowIndex === index && item.field === field;
})
return o !== undefined;
},
//
onDataChange() {
//

+ 25
- 1
src/components/Template/StepFormPackage.vue View File

@ -48,7 +48,7 @@
<span>{{ formFields[key] }}</span>
</template>
<template v-else-if="sItem.type === 'zlfz'">
<ZLSubPackage @update="(data)=>onSubPackageUpdate(data,key)" :subData = "formFields[key]" ref="zlSubPackageRef" />
<ZLSubPackage @update="(data)=>onSubPackageUpdate(data,key)" :subData = "formFields[key]" :ref="'zlSubPackageRef_'+key" />
</template>
<div v-show="isShowOther(formFields[key])" class="flex flex1">
@ -124,6 +124,30 @@ export default {
onSubPackageUpdate(data,key){
this.formFields[key] = data;
},
// ZLSubPackage
async validateSubComponents() {
const refs = [];
// formConfigtypezlfz
for (const item of this.formConfig) {
if (item.config) {
for (const key in item.config) {
const sItem = item.config[key];
if (sItem.type === 'zlfz') {
// keyref
const refName = `zlSubPackageRef_${key}`;
const zlSubPackageRef = this.$refs[refName];
// ZLSubPackage
if (zlSubPackageRef) {
refs.push(zlSubPackageRef);
}
}
}
}
}
const result = await Promise.all(refs.map(ref => ref[0].validateFormData()));
return result[0]
},
getSjResource(){
const {allFieldsConfig,formFields} = this;
const sjResource = [],yqResource = [];

+ 14
- 3
src/components/Template/mixins/formPackageMixins.js View File

@ -409,17 +409,28 @@ export default {
return false;
},
getFormData() {
// 数据校验
// 同时执行数据校验和子组件校验
const validateResult = this.validateFormData();
const subComponentValidateResult = this.validateSubComponents();
console.log(subComponentValidateResult,"subComponentValidateResult")
return new Promise((resolve, reject) => {
if (validateResult.valid) {
if (validateResult.valid && subComponentValidateResult.valid) {
resolve(this.formFields);
} else {
} else if (!validateResult.valid) {
// this.$message.error("表单内容未填完,请填写后再提交");
reject(validateResult.errors[0].error);
} else {
reject(subComponentValidateResult.error);
}
});
},
// 子组件校验钩子方法,子组件可以重写此方法来添加额外的校验逻辑
validateSubComponents() {
return {
valid: true,
error: ''
};
},
//直接获取表单数据,不做校验
getFilledFormData() {
return this.formFields;

+ 1
- 0
src/views/business/comps/template/dialog/SubPackageDialog.vue View File

@ -232,6 +232,7 @@ export default {
this.fzList.push({
num: "",
subCode: codes[i],
preCode:`-set${codes[i]}`
});
//
this.fzListErrors.push(false);

Loading…
Cancel
Save