2 Commits

7 changed files with 139 additions and 30 deletions
Split View
  1. +11
    -7
      src/components/Template/HandleFormItem.vue
  2. +19
    -3
      src/components/Template/StepComponents/ry/tpjydd.vue
  3. +56
    -15
      src/components/Template/StepComponents/ry/tpjysd.vue
  4. +2
    -2
      src/components/Template/StepFormPackage.vue
  5. +8
    -2
      src/components/Template/mixins/formPackageMixins.js
  6. +1
    -1
      src/components/Template/mixins/stepMixins.js
  7. +42
    -0
      src/utils/massTool.js

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

@ -1238,7 +1238,7 @@ export default {
},
//
handleUpdateRecord(data, recordData) {
handleUpdateRecord(data, recordData, isUpdateInputValue = true) {
const baseInfo = this.getCommonRecordInfo();
//recordData
if (!this.oldValue && !this.inputValue && !recordData) {
@ -1246,8 +1246,10 @@ export default {
}
let finallyKey = this.fieldKey;
if (recordData) {
this.oldValue = recordData.oldValue;
this.inputValue = recordData.inputValue;
if(isUpdateInputValue){
this.oldValue = recordData.oldValue;
this.inputValue = recordData.inputValue;
}
}
let recordOldVlaue = this.oldValue, recordValue = this.inputValue, isModify = !!this.oldValue,oldUrl = "",url="";
if (this.type === "checkboxTag") {
@ -1291,10 +1293,12 @@ export default {
oldUrl = oldAttList.map(item => item.url).join("|");
url = attList.map(item => item.url).join("|");
}
// if (recordData) {
// recordOldVlaue = recordData.oldValue;
// recordValue = recordData.inputValue;
// }
if (recordData) {
if(!isUpdateInputValue){//
recordOldVlaue = recordData.oldValue;
recordValue = recordData.inputValue;
}
}
const record = {
...baseInfo,
oldValue: recordOldVlaue,

+ 19
- 3
src/components/Template/StepComponents/ry/tpjydd.vue View File

@ -11,7 +11,7 @@
<script>
import StepFormPackage from '@/components/Template/StepFormPackage.vue';
import stepMixins from '@/components/Template/mixins/stepMixins.js';
import {convertMass} from "@/utils/massTool";
export default {
mixins: [stepMixins],
components: {
@ -116,6 +116,7 @@ import stepMixins from '@/components/Template/mixins/stepMixins.js';
type:"input",
fillType:"actFill",
disabled:true,
compareText:"不通过",
},
text9:{
label:"。",
@ -126,8 +127,23 @@ import stepMixins from '@/components/Template/mixins/stepMixins.js';
}
},
methods: {
onBlur(key) {
console.log(key,"key blur")
onBlur(values) {
const {fmz,sjsr2,sjsr3,sjsrdw2,sjsrdw3,sjsr4,sjsrdw4} = values;
if(!fmz || !sjsr2 || !sjsr3 || !sjsrdw2 || !sjsrdw3 || !sjsr4 || !sjsrdw4){
return;
}
const result = fmz.match(/(\d+)([a-zA-Z]+)/);
if(!result){
return;
}
const fmzValue = Number(result[1]);
const fmzUnit = result[2];
const sjsr2Value = convertMass(sjsr2+sjsrdw2, fmzUnit);
const sjsr3Value = convertMass(sjsr3+sjsrdw3, fmzUnit);
const sjsr4Value = convertMass(sjsr4+sjsrdw4, fmzUnit);
const deviationValue = fmzValue-(sjsr2Value + sjsr3Value );
const des = deviationValue<=sjsr4Value?"通过":"不通过";
this.$refs.stepFormPackageRef.updateFormData("jgpd", des);
}
}
}

+ 56
- 15
src/components/Template/StepComponents/ry/tpjysd.vue View File

@ -1,13 +1,14 @@
<!-- 天平校验(双点) -->
<template>
<StepFormPackage :fieldItemLabel="fieldItemLabel" ref="stepFormPackageRef" :prefixKey="stepIndex + '_' + 'ry_tpjysd'"
@resetRecord="resetRecord" @clickButton="onHandleClickButton" @beforeSaveRecord="onBeforeSaveRecord" :form-config="formConfig" :formData="formData" />
<StepFormPackage :fieldItemLabel="fieldItemLabel" ref="stepFormPackageRef"
:prefixKey="stepIndex + '_' + 'ry_tpjysd'" @resetRecord="resetRecord" @clickButton="onHandleClickButton"
@beforeSaveRecord="onBeforeSaveRecord" :form-config="formConfig" @blur="onBlur" :formData="formData" />
</template>
<script>
import StepFormPackage from '@/components/Template/StepFormPackage.vue';
import stepMixins from '@/components/Template/mixins/stepMixins.js';
import { convertMass } from "@/utils/massTool";
export default {
mixins: [stepMixins],
components: {
@ -45,9 +46,9 @@ export default {
},
dfmbutton1: {
type: "button",
dataSource:"tp",//
yqCode:"ddsys",//
fillField:"dfmpz",//
dataSource: "tp",//
yqCode: "ddsys",//
fillField: "dfmpz",//
buttonName: "获取值",
},
dfmtext3: {
@ -95,9 +96,9 @@ export default {
},
dfmbutton2: {
type: "button",
dataSource:"tp",//
yqCode:"ddsys",//
fillField:"dfmfmz",//
dataSource: "tp",//
yqCode: "ddsys",//
fillField: "dfmfmz",//
buttonName: "获取值",
},
dfmtext7: {
@ -121,6 +122,7 @@ export default {
type: "input",
fillType: "actFill",
disabled: true,
compareText: "不通过",
}
}
},
@ -142,9 +144,9 @@ export default {
},
button1: {
type: "button",
dataSource:"tp",//
yqCode:"ddsys",//
fillField:"pz",//
dataSource: "tp",//
yqCode: "ddsys",//
fillField: "pz",//
buttonName: "获取值",
},
text3: {
@ -192,9 +194,9 @@ export default {
},
button2: {
type: "button",
dataSource:"tp",//
yqCode:"ddsys",//
fillField:"fmz",//
dataSource: "tp",//
yqCode: "ddsys",//
fillField: "fmz",//
buttonName: "获取值",
},
text7: {
@ -218,6 +220,7 @@ export default {
type: "input",
fillType: "actFill",
disabled: true,
compareText: "不通过",
},
text9: {
label: "。",
@ -229,6 +232,44 @@ export default {
]
}
},
methods: {
onBlur(values) {
console.log(values, "values");
const { dfmpz, dfmsjsr2, dfmsjsr3, dfmsjsrdw2, dfmsjsrdw3, dfmsjsr4, dfmsjsrdw4,fmz, sjsr2, sjsr3, sjsrdw2, sjsrdw3, sjsr4, sjsrdw4 } = values;
if (dfmpz && dfmsjsr2 && dfmsjsr3 && dfmsjsrdw2 && dfmsjsrdw3 && dfmsjsr4 && dfmsjsrdw4) {
const result = dfmpz.match(/(\d+)([a-zA-Z]+)/);
if (!result) {
return;
}
const dfmpzValue = Number(result[1]);
const dfmpzUnit = result[2];
const sjsr2Value = convertMass(dfmsjsr2 + dfmsjsrdw2, dfmpzUnit);
const sjsr3Value = convertMass(dfmsjsr3 + dfmsjsrdw3, dfmpzUnit);
const sjsr4Value = convertMass(dfmsjsr4 + dfmsjsrdw4, dfmpzUnit);
const deviationValue = dfmpzValue - (sjsr2Value + sjsr3Value);
const des = Math.abs(deviationValue) <= Math.abs(sjsr4Value) ? "通过" : "不通过";
this.$refs.stepFormPackageRef.updateFormData("dfmjgpd", des);
}
if (fmz && sjsr2 && sjsr3 && sjsrdw2 && sjsrdw3 && sjsr4 && sjsrdw4) {
if (!fmz || !sjsr2 || !sjsr3 || !sjsrdw2 || !sjsrdw3 || !sjsr4 || !sjsrdw4) {
return;
}
const result = fmz.match(/(\d+)([a-zA-Z]+)/);
if (!result) {
return;
}
const fmzValue = Number(result[1]);
const fmzUnit = result[2];
const sjsr2Value = convertMass(sjsr2 + sjsrdw2, fmzUnit);
const sjsr3Value = convertMass(sjsr3 + sjsrdw3, fmzUnit);
const sjsr4Value = convertMass(sjsr4 + sjsrdw4, fmzUnit);
const deviationValue = fmzValue - (sjsr2Value + sjsr3Value);
const des = Math.abs(deviationValue) <= Math.abs(sjsr4Value) ? "通过" : "不通过";
this.$refs.stepFormPackageRef.updateFormData("jgpd", des);
}
}
}
}
</script>

+ 2
- 2
src/components/Template/StepFormPackage.vue View File

@ -7,13 +7,13 @@
:item="sItem" v-model="formFields[key]" :field-key="prefixKey+'_' + key"
:ref="key"
@copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false"
:orange-bg="orangeBgFields[key]" />
:orange-bg="getOrangeBg(key,sItem)" />
</template>
<template v-else-if="sItem.type === 'inputNumber'">
<HandleFormItem class="step-row" :field-item-label="fieldItemLabel" :field-key="prefixKey+'_' + key"
type="inputNumber" @blur="onBlur(key, $event)" :item="sItem" :ref="key"
@input="onInputNumberChange(key, $event)" v-model="formFields[key]" @copy="onCopy(sItem, key)"
:error="errors[key]" @update:error="errors[key] = false" :orange-bg="orangeBgFields[key]" />
:error="errors[key]" @update:error="errors[key] = false" :orange-bg="getOrangeBg(key,sItem)" />
</template>
<template v-else-if="sItem.type === 'select'">
<HandleFormItem class="step-row" :field-item-label="fieldItemLabel" :field-key="prefixKey+'_' + key"

+ 8
- 2
src/components/Template/mixins/formPackageMixins.js View File

@ -63,6 +63,12 @@ export default {
this.$set(this.errors, key, false)
}
},
getOrangeBg(key,sItem) {
if(sItem.compareText){
return sItem.compareText == this.formFields[key]
}
return this.orangeBgFields[key]
},
//是否过期
regentIsExpired(key) {
const { yxq, sxrq } = this.formFields[`selectInfo_${key}`] || {};
@ -139,7 +145,7 @@ export default {
},
//更新表单数据
updateFormData(key, value, data) {
const { isUpdateRecord, signData, record } = data || {}
const { isUpdateRecord, signData, record, isUpdateInputValue = true } = data || {}
// 深拷贝当前表单数据,避免直接修改原数据
const cloneFormFields = JSON.parse(JSON.stringify(this.formFields))
@ -155,7 +161,7 @@ export default {
}
if (isUpdateRecord) {
setTimeout(() => {
this.$refs[key][0].handleUpdateRecord(signData, re)
this.$refs[key][0].handleUpdateRecord(signData, re, isUpdateInputValue)
}, 10)
}
},

+ 1
- 1
src/components/Template/mixins/stepMixins.js View File

@ -233,7 +233,7 @@ export default {
const value = dw?result.value:`${result.value}${result.unit}`
if(fillDwField){//需要回填的单位字段
this.$refs.stepFormPackageRef.updateFormData(fillField, value)
this.$refs.stepFormPackageRef.updateFormData(fillDwField, result.unit,{isUpdateRecord:true,signData,record:{
this.$refs.stepFormPackageRef.updateFormData(fillDwField, result.unit,{isUpdateRecord:true,signData,isUpdateInputValue:false,record:{
oldValue,
inputValue:result.value+result.unit
}})

+ 42
- 0
src/utils/massTool.js View File

@ -33,4 +33,46 @@ export function compareMass(value1, unit1, value2, unit2) {
if (grams1 > grams2) return 1;
if (Math.abs(grams1 - grams2) < 1e-12) return 0;
return -1;
}
/**
* 质量单位转换
* @param {string} massStr - 质量字符串 "3kg"
* @param {string} targetUnit - 目标单位 "g"
* @returns {number} 转换后的数值
* @example
* convertMass('3kg', 'g') // 返回 3000
* convertMass('500mg', 'g') // 返回 0.5
*/
export function convertMass(massStr, targetUnit) {
if (typeof massStr !== 'string' || massStr.length === 0) {
throw new Error('质量字符串不能为空');
}
if (typeof targetUnit !== 'string' || targetUnit.length === 0) {
throw new Error('目标单位不能为空');
}
// 解析质量字符串,提取数值和单位
const match = massStr.trim().match(/^([\d.]+)\s*([a-zA-Z]+)$/);
if (!match) {
throw new Error(`无效的质量字符串格式: ${massStr}`);
}
const value = parseFloat(match[1]);
const sourceUnit = match[2].toLowerCase();
const lowerTargetUnit = targetUnit.toLowerCase();
if (isNaN(value)) {
throw new Error('无法解析数值');
}
if (!isMassUnit(sourceUnit)) {
throw new Error(`无效的源单位: ${sourceUnit}`);
}
if (!isMassUnit(lowerTargetUnit)) {
throw new Error(`无效的目标单位: ${targetUnit}`);
}
// 先转换为克,再转换为目标单位
const grams = value * toGramFactor[sourceUnit];
return grams / toGramFactor[lowerTargetUnit];
}

Loading…
Cancel
Save