feat:分析计算bug

This commit is contained in:
houjunxiang
2026-02-25 15:50:21 +08:00
parent 46edadbd43
commit 749ac7f507

View File

@@ -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)