# Flutter Schema 驱动表单卡片 ## 目标 Flutter 页面不为每种 OA 表单重复编写固定控件。服务端返回版本化的 JSON Schema 和 UI Schema,客户端从受控组件目录中自动生成移动表单卡片。 ```text 表单定义 API ├─ JSON Schema:字段、类型、必填、枚举和数据约束 └─ UI Schema:分组、顺序、标签、控件和移动端提示 ↓ Flutter Schema 解析 ↓ 白名单控件渲染器 ↓ Riverpod 草稿状态与本地校验 ↓ 用户确认卡片 ↓ 后端再次校验并执行写操作 ``` ## 已实现控件 - `text`:单行文本 - `textArea`:多行文本 - `select`:受控枚举选择 - `dateTime`:日期和时间选择 未知字段或未知控件不能执行动态代码,只显示安全错误提示。后续控件必须通过客户端版本发布进入白名单,例如人员选择、部门选择、附件、金额、定位和明细表格。 ## AI 边界 AI 可以根据自然语言生成表单字段建议值,但不能: - 生成或执行 Dart、JavaScript 等客户端代码。 - 绕过 Schema 枚举和校验规则。 - 绕过用户确认直接提交。 - 自行增加后端未定义的字段。 - 修改隐藏的租户、申请人、审批人或权限字段。 客户端校验用于交互体验,Kotlin 后端仍必须重新执行权限、数据、状态、幂等和业务规则校验。 ## 当前演示 工作台点击“发起请假”后,请假类型、开始时间、结束时间和原因均由 Schema 渲染。点击“AI 自动填写”只更新草稿状态,点击“检查并确认”后才展示最终确认卡片。