diff --git a/nx/helper/calcAnalysisValue.js b/nx/helper/calcAnalysisValue.js index be31cf5..fc9145a 100644 --- a/nx/helper/calcAnalysisValue.js +++ b/nx/helper/calcAnalysisValue.js @@ -84,6 +84,14 @@ const FORMULA_FUNCTIONS = { Get_C_KNO3_bySValue, Get_C_KNO3 } + +function isEndsWithNumber(str) { + // 正则解释: + // ^[a-zA-Z]+ : 以一个或多个字母开头 + // \d+$ : 以一个或多个数字结尾 + const regex = /^[a-zA-Z]+\d+$/ + return regex.test(str) +} /* * 计算当前样品分析值*/ export function calcAnalysisValue(group, externalFormData, taskIngredientsWay) { @@ -102,12 +110,15 @@ export function calcAnalysisValue(group, externalFormData, taskIngredientsWay) { let formulaVal = '' formulas.forEach(f => { let value = '' - if (f.charAt(0) === 'p') { + if (f.charAt(0) === 'p' && isEndsWithNumber(f)) { let o = findFieldInGroup(f, group, 'p') value = o.value || 0 - } else if (f.charAt(0) === 'e') { + } else if (f.charAt(0) === 'e' && isEndsWithNumber(f)) { let o = findFieldInGroup(f, group, 'e') value = o.value || 0 + } else if (f.charAt(0) === 'a' && isEndsWithNumber(f)) { + let o = findFieldInGroup(f, group, 'a') + value = o.value || 0 } else if (f.charAt(0) === '<' || f.charAt(0) === '>') { value = "'" + f + "'" } else { @@ -119,8 +130,6 @@ export function calcAnalysisValue(group, externalFormData, taskIngredientsWay) { let v = '' if (formulaVal.startsWith('Get_')) { - console.log(111, formulaVal, ele.title) - //计算公式为Get开头的,都是执行方法,只有人工配料才执行 if (taskIngredientsWay !== 'manual') continue v = eval(formulaVal) @@ -155,7 +164,7 @@ export function evaluateGetFromFormula(formula, parse, externalFormData, current } } try { - console.log(relFormulaVal) + console.log('解析公式', relFormulaVal) let v = math.evaluate(relFormulaVal).toString() v = isFinite(v) ? v : 0 @@ -173,16 +182,22 @@ function parseFormula(formula, row, dynamicsColumns) { let formulas = formula.split('|') let formulaVal = '' formulas.forEach(f => { - if (f.charAt(0) === 'p') { + if (f.charAt(0) === 'p' && isEndsWithNumber(f)) { let o = dynamicsColumns.find(i => 'p' + i.paramNo === f && i.type !== 'project') const currentColumnData = row[o.fieldIndex] if (!currentColumnData) return formulaVal += currentColumnData.value ? currentColumnData.value : 0 - } else if (f.charAt(0) === 'e') { + } else if (f.charAt(0) === 'e' && isEndsWithNumber(f)) { let o = dynamicsColumns.find(i => 'e' + i.paramNo === f) const currentColumnData = row[o.fieldIndex] if (!currentColumnData) return formulaVal += currentColumnData.value ? currentColumnData.value : 0 + } else if (f.charAt(0) === 'a' && isEndsWithNumber(f)) { + //新增的分析任务属性 公式 + let o = dynamicsColumns.find(i => 'a' + i.paramNo === f) + const currentColumnData = row[o.fieldIndex] + if (!currentColumnData) return + formulaVal += currentColumnData.value ? currentColumnData.value : 0 } else { formulaVal += f } @@ -196,8 +211,15 @@ export function calcRowAnalysisValue(row, columnObj, dynamicsColumns, externalFo for (let i = 0; i < dynamicsColumns.length; i++) { let curItem = dynamicsColumns[i] if (curItem.fieldIndex === columnObj.fieldIndex) continue - - let param = columnObj.fieldIndex.charAt(0) === 'p' ? 'p' + columnObj.paramNo : 'e' + columnObj.paramNo + let param = '' + const fieldIndexBegin = columnObj.fieldIndex.charAt(0) + if (fieldIndexBegin === 'p') { + param = 'p' + columnObj.paramNo + } else if (fieldIndexBegin === 'e') { + param = 'e' + columnObj.paramNo + } else if (fieldIndexBegin === 'a') { + param = 'a' + columnObj.paramNo + } if (curItem.formula && curItem.formula.includes(param)) { let formula = curItem.formula let formulaVal = parseFormula(formula, row, dynamicsColumns)