3.3 KiB
3.3 KiB
OA 表单设计 · 归属人 / 归属部门 设计文档
日期: 2026-07-30
状态: 已实现(计划见 docs/superpowers/plans/2026-07-30-oa-owner-fields.md)
范围: web-admin 审批设计器「2 表单设计」组件 Tab;发起页默认值;backend 发布白名单与提交时只读强制回填
界面模式: 对齐现有「人员」「部门」控件;视觉 Fresh Mint
1. 背景与目标
表单设计「组件」Tab 已有 人员、部门。业务需要两个带默认值的同类控件:
- 归属人:默认当前登录人
- 归属部门:默认当前登录人主部门
1.1 目标
- 左侧「组件」新增「归属人」「归属部门」,与人员/部门并列。
- 发起时自动填入当前登录人 / 主部门。
- 设计器属性「允许修改」:默认 关(只读);开则可改选。
- 值结构与人员/部门一致,便于打印、详情、条件(归属人)复用。
1.2 非目标
- 不改现有「人员」「部门」行为。
- 不放入「套件」Tab。
- 不支持多选。
2. 产品决策(已确认)
| 项 | 决策 |
|---|---|
| 控件类型 | ownerPerson / ownerDept |
| 默认值时机 | 发起审批表单加载时写入;设计器画布不依赖设计者登录身份作为业务默认 |
| 默认来源 | 归属人 = 当前用户 id + 姓名;归属部门 = 主部门 id + 名称(全路径优先) |
| 允许修改 | 属性开关 allowModify,默认 false |
| 选型 | 固定单选 |
| 值格式 | { id, name }(与 person / dept 一致) |
| 只读防篡改 | allowModify === false 时,后端发起提交强制回填为当前用户 / 主部门 |
3. Schema
{
"type": "ownerPerson",
"field": "Fxxxx",
"title": "归属人",
"props": {
"allowModify": false
}
}
{
"type": "ownerDept",
"field": "Fyyyy",
"title": "归属部门",
"props": {
"allowModify": false
}
}
4. 运行时
4.1 前端(发起页)
- 加载 schema 后:对空字段写入默认值。
allowModify === false:控件disabled(只读展示)。allowModify === true:复用人员/部门选择器,可改选。- 详情页:展示已存
formData,不再按当前查看者覆盖。
4.2 后端(发起)
- 发布白名单纳入
ownerPerson/ownerDept。 - 校验值格式同单选 person / dept。
allowModify为假时:提交前强制写入发起人 id/姓名、主部门 id/名称。- 条件分支:
ownerPerson与person同属人员类(contains);ownerDept暂不进条件候选(与现有dept一致)。
4.3 打印 / 关联展示
- 打印与关联审批摘要:按 person / dept 同路径格式化展示。
5. 登录用户字段约定
web-admin userInfo(见 backend/app/api/public.py _build_user_info_payload):
| 用途 | 字段 |
|---|---|
| 用户 id | id(兼容 userId) |
| 姓名 | realName(兼容 username) |
| 部门 id | regionId(即 sys_user.dept_id) |
| 部门名称 | 登录态常无 regionName;前端用部门树解析全路径,后端用库表 dept_name |
6. 自检
- 无未决占位符
- 与「人员/部门」值格式一致
- 默认不允许修改 + 后端强制回填
- 范围不含套件、不多选