fix(business): e2e 链路验证与两处修复
- wait_toast 超时返回最后见到的非空提示(错误 toast 一闪而过时诊断信息全丢) - 业务/发货明细行单价类字段放行 4 位小数(与后端 DECIMAL(14,4) 对齐) - 清理步骤适配删除保护(被终态业务/引用拦截时留档而非失败) Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
1 parent
fba8cfc215
commit
8c4acb82fe
5 files changed
+67
-41
No files matched your search
@@ -103,6 +103,10 @@ function personnelLabel(option: PersonnelOption): string {
|
||||
|
||||
/** 金额/数量形态:非负数字、最多两位小数(纯形态校验,不涉及 float 运算) */
|
||||
const AMOUNT_PATTERN = /^(\d+)(\.\d{1,2})?$/
|
||||
// 单价类列(sale_price/guided_price)建表为 Numeric(14,4):后端 str 直出
|
||||
// 会带最多 4 位小数(如 "5000.0000"),前端必须放行到 4 位——否则任何
|
||||
// 带小数精度的历史记录在编辑时都会被前端永远拦下
|
||||
const PRICE_PATTERN = /^(\d+)(\.\d{1,4})?$/
|
||||
/** 全零形态:数量用它排除「>0」语义,不走 float 比较 */
|
||||
const ZERO_PATTERN = /^0+(\.0+)?$/
|
||||
|
||||
@@ -234,13 +238,13 @@ function validateItemRows(rows: ItemDraft[]): string | null {
|
||||
return `${no}的数量须为大于 0 的数字,最多两位小数`
|
||||
}
|
||||
const prices = [
|
||||
['销售单价', row.sale_price],
|
||||
['成本额', row.cost_amount],
|
||||
['指导价', row.guided_price],
|
||||
['销售单价', row.sale_price, PRICE_PATTERN, '最多四位小数'],
|
||||
['成本额', row.cost_amount, AMOUNT_PATTERN, '最多两位小数'],
|
||||
['指导价', row.guided_price, PRICE_PATTERN, '最多四位小数'],
|
||||
] as const
|
||||
for (const [label, value] of prices) {
|
||||
if (value.trim() && !AMOUNT_PATTERN.test(value.trim())) {
|
||||
return `${no}的${label}须为非负数字,最多两位小数`
|
||||
for (const [label, value, pattern, hint] of prices) {
|
||||
if (value.trim() && !pattern.test(value.trim())) {
|
||||
return `${no}的${label}须为非负数字,${hint}`
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,6 +82,8 @@ function businessLabel(option: BusinessOption): string {
|
||||
|
||||
/** 金额/数量形态:非负数字、最多两位小数(与后端 `_check_amount` 同口径) */
|
||||
const AMOUNT_PATTERN = /^(\d+)(\.\d{1,2})?$/
|
||||
// 发货单价列建表为 Numeric(14,4):后端 str 直出带最多 4 位小数,前端放行到 4 位
|
||||
const PRICE_PATTERN = /^(\d+)(\.\d{1,4})?$/
|
||||
/** 全零形态:数量排除「>0」语义,不走 float 比较 */
|
||||
const ZERO_PATTERN = /^0+(\.0+)?$/
|
||||
|
||||
@@ -183,8 +185,8 @@ function validateItemRows(rows: ItemDraft[]): string | null {
|
||||
if (!AMOUNT_PATTERN.test(row.quantity) || ZERO_PATTERN.test(row.quantity)) {
|
||||
return `${no}的数量须为大于 0 的数字,最多两位小数`
|
||||
}
|
||||
if (row.sale_price.trim() && !AMOUNT_PATTERN.test(row.sale_price.trim())) {
|
||||
return `${no}的发货单价须为非负数字,最多两位小数`
|
||||
if (row.sale_price.trim() && !PRICE_PATTERN.test(row.sale_price.trim())) {
|
||||
return `${no}的发货单价须为非负数字,最多四位小数`
|
||||
}
|
||||
}
|
||||
return null
|
||||
|
||||
Reference in new issue
Block a user