# ModelValue prop type check issue
_Exported on 2026/4/1 at GMT+8 15:24:02 from Cursor (2.6.22)_

---

**User**

排查问题

MasterFormSwitch.vue?t=1775015461216:215 Invalid prop: type check failed for prop "modelValue". Expected Number | Null, got String with value "12". 
Proxy(Object) {…}
 at <ElInputNumber>
at <FlmInputNumber>
at <ElFormItem>
at <ElForm>
at <Anonymous>
at <BaseTransition>
at <Transition>
at <ElCollapseTransition>
at <ElCollapseItem>
at <ElCollapse>
at <FlmCollapse>
at <FlmDynamicForm>
at <ElFocusTrap>
at <ElOverlay>
at <BaseTransition>
at <Transition>
at <Teleport>
at <ElDrawer>
at <MasterFormSwitch>
at <KeepAlive>
at <RouterView>
at <AppView>
at <ElScrollbar>
at <Layout>
at <RouterView>
at <ElConfigProvider>
at <ConfigGlobal>
at <App> 
(28) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
﻿


---

**Cursor**


正在排查：`ElInputNumber` 的 `modelValue` 需要 `number | null`，但收到了字符串 `"12"`。正在查看 `MasterFormSwitch.vue` 与 `FlmInputNumber` 的数据流。




## 结论

这是 **Element Plus `el-input-number` 的类型校验**：`modelValue` 只能是 `number | null | undefined`，但当前收到的是字符串 **`"12"`**。  
组件链是：`MasterFormSwitch` → `flm-dynamic-form` → `FlmInputNumber` → `ElInputNumber`。问题出在 **喂给动态表单的 model 里数字字段是字符串**，不是 `MasterFormSwitch` 模板里某一行写错类型。

控制台里 `MasterFormSwitch.vue:215` 多半是 **Vite 带 query 的编译映射**，和源码行号不一定一致；真正相关的逻辑在下面这段。

## 数据从哪来

编辑时 `dynamicFormModel` 来自详情接口解析结果，或退化为表格行：

```353:356:/Users/albert/Workspaces/gmp/gmp-frontend/gmp-platform/src/views/SPARKFORM/MasterFormSwitch/MasterFormSwitch.vue
      dynamicFormModel.value =
        Object.keys(fromApi).length > 0
          ? { ...fromApi }
          : { ...(data && typeof data === 'object' ? data : {}) }
```

`fromApi` 由 `parseDynamicFormGetDtlItems` 从 `dynamicFormGetDtl` 响应里拆出来，**不会做数字类型转换**，后端/JSON 里经常是 `"12"` 这种字符串：

```289:317:/Users/albert/Workspaces/gmp/gmp-frontend/gmp-platform/src/views/SPARKFORM/MasterFormSwitch/MasterFormSwitch.vue
const parseDynamicFormGetDtlItems = (res: any): Record<string, any> => {
  // ...
  if (typeof items === 'object') {
    const row = (items as any).record ?? (items as any).row ?? items
    if (row && typeof row === 'object' && !Array.isArray(row)) {
      return { ...row }
    }
  }
  return {}
}
```

新增时 `dynamicFormModel` 先是 `{}`，一般 **不会** 立刻报这个错；**编辑**（或详情为空、走了表格行 `data` 回显）最容易复现。

## 与 flame-plus 的关系

你们仓库里的说明已经对齐根因：`flm-dynamic-form` / grid 把 model 里的值原样塞给控件，`FlmInputNumber` 又原样传给 `ElInputNumber`，**没有**把字符串数字转成 `number`。见 `docs/flame-plus-fix-input-number-string-modelValue.md`。

## 处理思路（择一即可）

1. **业务侧（本页）**：在赋给 `dynamicFormModel` 之前，按表单配置或字段元数据，对 `flmInputNumber` 对应字段做归一（空串/`null` 与 `Number()` 的规则见该文档表格）。  
2. **组件库侧**：在 flame-plus 的 `FlmInputNumber`（或 grid 赋值处）统一归一 `modelValue`，升级依赖或用 `pnpm patch`。  
3. **后端**：保证动态详情/列表里数值字段以 JSON number 返回（改动面取决于接口约定）。

若只想先确认，可在 `editData` 里 `console.log(fromApi)` 或打断点，看对应数字字段是否为字符串 `"12"`。

（当前为 Ask 模式，我无法直接改代码；若要我在项目里加归一或 patch，需要切换到 Agent 模式。）

