提交 436c3f26 authored 作者: kxjia's avatar kxjia

修改校验方法

上级 c9c33644
......@@ -41,8 +41,7 @@
:class="{ success: result.isValid, error: !result.isValid }"
@click="handleValidationResultClick(result)"
>
<div class="result-field">{{ result.field }}</div>
<div class="result-desc">{{ result.description }}</div>
<div class="result-field">{{ result.description }}{{ result.field }}</div>
<div class="result-formula">公式:{{ result.formula }}</div>
<div class="result-value">值:{{ formatFieldValue(result.fieldValue) }}</div>
<div v-if="!result.isValid" class="result-error">失败原因:{{ result.description }}</div>
......@@ -200,12 +199,27 @@ const evaluateFormula = (formula: string, description: string): ValidationResult
}
// 构建表达式 - 修复变量引用问题
const expression = formula.replace(/\$\$(\w+)\$\$/g, (_, field) => {
const key = `${row.code}_${field}`
const value = formData.value[key]
return value !== undefined && value !== '' ? `Number(${value})` : '0'
})
const fieldNames = formula.match(/\b[A-Za-z][A-Za-z0-9_]*\b/g) || [];
const uniqueFields = [...new Set(fieldNames.filter(f =>
!['and', 'or', 'not', 'equal', 'less', 'greater', 'if', 'else', 'true', 'false']
.includes(f.toLowerCase())
))];
uniqueFields.sort((a, b) => b.length - a.length);
let expression = formula;
for (const fieldName of uniqueFields) {
const key = `${row.code}_${fieldName}`;
const value = formData.value[key];
if (value !== undefined && value !== '') {
expression = expression.replace(
new RegExp(`\\b${fieldName}\\b`, 'g'),
`Number(${value})`
);
}
}
console.log("构建的表达式:", expression)
validationProcess.value.push(`执行公式: ${expression}`)
// 安全地执行表达式
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论