fix(admin): 组别填了年龄后「保存全部」无反应(number 字段被当字符串处理)

Vue 3 对 <input type="number"> 的 v-model 会自动 parseFloat(空值仍为 ''),
所以填了年龄后 row.ageMin/ageMax 是 number,而校验里写的是 row.ageMin.trim(),
点击处理器抛 TypeError 直接中断 —— 界面毫无反应;留空时是 '',.trim() 正常,所以能保存。

- CategoriesSection:新增 toAge() 统一取值(String() 包一层,非法值返回 NaN 交给校验标红),
  validate 与 buildInputs 都改用它;CategoryRow 的数值字段类型如实标注为 string | number
- AdjustmentsPage:调整分值的 formDelta.value.trim() 同样会崩,改为 String(...).trim()

自检:vue-tsc + pnpm build 通过,前端 node --test 26/26。
This commit is contained in:
AskaEth committed 2026-09-10 01:58:04 +08:00
1 parent c2696e768e
commit 7531ea29e1
2 files changed
+24 -9

No files matched your search

+1 -1
View File
@@ -181,7 +181,7 @@ function openCreate(): void {
function validate(): string | null {
if (formTeamId.value === null) return '请选择单位'
const delta = Number(formDelta.value)
if (formDelta.value.trim() === '' || !Number.isFinite(delta)) return '请填写分值'
if (String(formDelta.value).trim() === '' || !Number.isFinite(delta)) return '请填写分值'
if (delta === 0) return '分值不能为 0'
if (formReason.value.trim() === '') return '理由必填'
return null