feat:分析计算bug
This commit is contained in:
@@ -84,6 +84,14 @@ const FORMULA_FUNCTIONS = {
|
|||||||
Get_C_KNO3_bySValue,
|
Get_C_KNO3_bySValue,
|
||||||
Get_C_KNO3
|
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) {
|
export function calcAnalysisValue(group, externalFormData, taskIngredientsWay) {
|
||||||
@@ -102,12 +110,15 @@ export function calcAnalysisValue(group, externalFormData, taskIngredientsWay) {
|
|||||||
let formulaVal = ''
|
let formulaVal = ''
|
||||||
formulas.forEach(f => {
|
formulas.forEach(f => {
|
||||||
let value = ''
|
let value = ''
|
||||||
if (f.charAt(0) === 'p') {
|
if (f.charAt(0) === 'p' && isEndsWithNumber(f)) {
|
||||||
let o = findFieldInGroup(f, group, 'p')
|
let o = findFieldInGroup(f, group, 'p')
|
||||||
value = o.value || 0
|
value = o.value || 0
|
||||||
} else if (f.charAt(0) === 'e') {
|
} else if (f.charAt(0) === 'e' && isEndsWithNumber(f)) {
|
||||||
let o = findFieldInGroup(f, group, 'e')
|
let o = findFieldInGroup(f, group, 'e')
|
||||||
value = o.value || 0
|
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) === '>') {
|
} else if (f.charAt(0) === '<' || f.charAt(0) === '>') {
|
||||||
value = "'" + f + "'"
|
value = "'" + f + "'"
|
||||||
} else {
|
} else {
|
||||||
@@ -119,8 +130,6 @@ export function calcAnalysisValue(group, externalFormData, taskIngredientsWay) {
|
|||||||
|
|
||||||
let v = ''
|
let v = ''
|
||||||
if (formulaVal.startsWith('Get_')) {
|
if (formulaVal.startsWith('Get_')) {
|
||||||
console.log(111, formulaVal, ele.title)
|
|
||||||
|
|
||||||
//计算公式为Get开头的,都是执行方法,只有人工配料才执行
|
//计算公式为Get开头的,都是执行方法,只有人工配料才执行
|
||||||
if (taskIngredientsWay !== 'manual') continue
|
if (taskIngredientsWay !== 'manual') continue
|
||||||
v = eval(formulaVal)
|
v = eval(formulaVal)
|
||||||
@@ -155,7 +164,7 @@ export function evaluateGetFromFormula(formula, parse, externalFormData, current
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
console.log(relFormulaVal)
|
console.log('解析公式', relFormulaVal)
|
||||||
|
|
||||||
let v = math.evaluate(relFormulaVal).toString()
|
let v = math.evaluate(relFormulaVal).toString()
|
||||||
v = isFinite(v) ? v : 0
|
v = isFinite(v) ? v : 0
|
||||||
@@ -173,16 +182,22 @@ function parseFormula(formula, row, dynamicsColumns) {
|
|||||||
let formulas = formula.split('|')
|
let formulas = formula.split('|')
|
||||||
let formulaVal = ''
|
let formulaVal = ''
|
||||||
formulas.forEach(f => {
|
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')
|
let o = dynamicsColumns.find(i => 'p' + i.paramNo === f && i.type !== 'project')
|
||||||
const currentColumnData = row[o.fieldIndex]
|
const currentColumnData = row[o.fieldIndex]
|
||||||
if (!currentColumnData) return
|
if (!currentColumnData) return
|
||||||
formulaVal += currentColumnData.value ? currentColumnData.value : 0
|
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)
|
let o = dynamicsColumns.find(i => 'e' + i.paramNo === f)
|
||||||
const currentColumnData = row[o.fieldIndex]
|
const currentColumnData = row[o.fieldIndex]
|
||||||
if (!currentColumnData) return
|
if (!currentColumnData) return
|
||||||
formulaVal += currentColumnData.value ? currentColumnData.value : 0
|
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 {
|
} else {
|
||||||
formulaVal += f
|
formulaVal += f
|
||||||
}
|
}
|
||||||
@@ -196,8 +211,15 @@ export function calcRowAnalysisValue(row, columnObj, dynamicsColumns, externalFo
|
|||||||
for (let i = 0; i < dynamicsColumns.length; i++) {
|
for (let i = 0; i < dynamicsColumns.length; i++) {
|
||||||
let curItem = dynamicsColumns[i]
|
let curItem = dynamicsColumns[i]
|
||||||
if (curItem.fieldIndex === columnObj.fieldIndex) continue
|
if (curItem.fieldIndex === columnObj.fieldIndex) continue
|
||||||
|
let param = ''
|
||||||
let param = columnObj.fieldIndex.charAt(0) === 'p' ? 'p' + columnObj.paramNo : 'e' + columnObj.paramNo
|
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)) {
|
if (curItem.formula && curItem.formula.includes(param)) {
|
||||||
let formula = curItem.formula
|
let formula = curItem.formula
|
||||||
let formulaVal = parseFormula(formula, row, dynamicsColumns)
|
let formulaVal = parseFormula(formula, row, dynamicsColumns)
|
||||||
|
|||||||
Reference in New Issue
Block a user