feat: add Flutter schema-driven form cards
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
# 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 自动填写”只更新草稿状态,点击“检查并确认”后才展示最终确认卡片。
|
||||
@@ -30,6 +30,8 @@
|
||||
- [x] 多任务流程的中间审批事件与最终流程结束判定
|
||||
- [x] 按请假时长路由的主管与 OA 条件串行审批
|
||||
- [x] 长期年假的 OA 与 HR 并行会签及任一驳回终止
|
||||
- [x] Flutter 工程、四栏导航和 Schema 驱动请假表单卡片
|
||||
- [ ] 后端表单定义 API、客户端远程加载与离线缓存
|
||||
- 附件、通知、弱网恢复和幂等处理
|
||||
|
||||
## M3:AI 最小闭环
|
||||
|
||||
Reference in New Issue
Block a user