hr-system/docs/01-design/ui-design.md

298 lines
23 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 一期批次1总体设计 —— UI/页面设计hr-webocai 口径)
- 版本v3.0批次1设计定稿v3.0 变更:对齐 SRS v3.1 —— 新增编制看板(F16)/项目式组织(F17)页面、工作台工资条/绩效桩位、入职登记链接与二维码交互扫码入职降级、证件手工录入交互D1、合同文本生成打印、离职交接钉钉占位项
- 状态:**设计定稿批次1评审修订版**
- 规范依据ocai 技能集 bricks-framework、bricks-layout-patterns、module-development-specindex.ui 强制、crud-definition-spec交互基线 `docs/01-design/architecture.md`
## 1. 界面体系与总体布局
1. **技术形态**:无 Vue/无手写 HTML。页面 = `wwwroot/*.ui`(纯 JSON bricks 组件树)+ `*.dspy`数据端点CRUD 列表/表单页由 json/*.json 经 xls2ui 自动生成 DataViewer/Form/Tree 页面。
2. **入口**`/index.ui`(应用门户,菜单聚合 6 模块入口);每模块强制 `/{module}/index.ui`ResponsableBox 功能卡片导航)。
3. **权限渲染**:菜单与按钮可见性由 rbac 角色控制Menu 只注册已授权路径;操作按钮 binds 前按角色渲染)。
4. **核心 widgets**VBox/HBox、ResponsableBox自适应员工自助移动端兼容、Menu、DataViewer列表data_filter 筛选/toolbar binds/子表 subtables、Tree组织树/项目树、Form、PopupWindow、Chart报表/编制看板、Text、FileUpload/FilePreview、UrlWidget。
5. **binds actiontype 仅 5 种**urlwidget / script / url / datawidget / event禁止 script 内 fetch弹窗走 PopupWindow + urlwidget
6. **URL 规则**.ui 内全部 url 使用 `{{entire_url('/module/xxx.ui')}}` 绝对路径json/ 内引用别名用 `{{entire_url('../alias')}}`
### 1.1 应用门户 /index.ui
```
index.ui (VBox, height:100%)
├── Header(HBox): Text「Web版人事系统」+ 用户信息 + [消息铃铛(message_unread_count.dspy 未读数)]
├── 内容区(HBox, flex:1)
│ ├── Menu(id:app.menu, width:220px)
│ │ ├── 工作台 → /hrsystem/workbench_*.ui按角色路由
│ │ ├── 组织管理 → /hrorg/index.ui
│ │ ├── 花名册 → /hrroster/index.ui
│ │ ├── 审批中心 → /hrflow/index.ui
│ │ ├── 合同管理 → /hrcontract/index.ui
│ │ ├── 编制管理 → /hrorg/headcount_board.uiF16
│ │ ├── 项目组织 → /hrorg/project_tree.uiF17
│ │ ├── 人事报表 → /hrreport/index.ui
│ │ ├── 员工服务 → /hrsystem/service.ui公告/政策)
│ │ └── 系统管理 → /hrsystem/index.ui角色/范围/管理员/日志)
│ └── VBox(id:app.content, flex:1) ← Menu items url 统一加载到此
└── 说明Menu 不加 binds内部处理点击内容区置于 sidebar 之前DOM 顺序)
```
## 2. 路由表wwwroot 自动路由)
| URL | 页面 | 说明 | 角色 |
|---|---|---|---|
| /index.ui | 应用门户 | 全局导航 | L |
| /hrorg/index.ui | 组织模块入口 | 卡片:组织树/架构图/时间轴/职位职级/入转调离工作台/编制/项目组织/黑名单 | L |
| /hrorg/org_tree.ui | 组织管理 | Tree + 详情表单 + 变更时间轴 | L |
| /hrorg/org_chart.ui | 组织架构图 | 层级展开/as_of 历史/导出 PNG/XMind | A,H |
| /hrorg/position_list.ui 等 | 职位/职务/职级/职等/序列 CRUD | xls2ui 生成 DataViewer | A,H |
| /hrorg/company_list.ui | 合同公司台账 | CRUDFEAT-B1-02 | A,H |
| /hrorg/entry_workbench.ui | 入职工作台 | 待入职/审批中/黑名单高亮/登记二维码 | A,H |
| /hrorg/entry_register.tmpl | 入职登记表(免登录) | 候选人扫码填表页(内网 token 鉴权,扫码入职降级) | 匿名(token) |
| /hrorg/transfer_list.ui | 调动查询 | 待确定/已确定/已取消筛选 | A,H,M |
| /hrorg/leave_workbench.ui | 离职工作台 | 待离职名单/交接/证明/黑名单 | A,H,M |
| /hrorg/headcount_board.ui | 编制看板F16 | 方案/细分/超缺编状态/历史回溯 | A,H,M |
| /hrorg/headcount_config.ui | 编制配置F16 | 方案+细分项+占编范围条件编辑 | A,H |
| /hrorg/project_tree.ui | 项目式组织F17 | 项目树+属性+任职维护 | L |
| /hrroster/index.ui | 花名册入口 | 卡片:花名册/字段配置/工号规则/导入导出 | A,H |
| /hrroster/roster_list.ui | 花名册列表 | DataViewer + data_filter + 自定义列 | A,H,M(团队) |
| /hrroster/employee_detail.ui | 员工档案 | Tabs 分组 + 时间轴(含证件信息分组,脱敏展示) | L(按范围) |
| /hrroster/field_config.ui | 字段/分组/类型规则配置 | 拖拽排序 | A,H |
| /hrflow/index.ui | 审批中心入口 | 待办/已办/我发起/我收到/流程配置 | L |
| /hrflow/todo_list.ui | 待办列表 | DataViewer行内审批 | L |
| /hrflow/inst_detail.ui | 审批单 | 表单渲染 + 流转记录 + 操作按钮 | 参与者 |
| /hrflow/flow_design.ui | 流程/表单/节点/审批角色配置 | 含考勤桩位表单、四类流程模板 | A,H |
| /hrcontract/index.ui | 合同入口 | 台账/类型/模板/提醒规则 | A,H |
| /hrcontract/contract_list.ui | 合同台账 | DataViewer + 到期高亮 + 文本生成 | A,H |
| /hrreport/index.ui | 报表看板 | 五类分析卡片 | A,H,M |
| /hrreport/report_board.ui | 看板页 | Chart 组件 + 导出 | A,H,M |
| /hrsystem/index.ui | 系统管理入口 | 角色/管理员/数据范围/日志/提醒配置 | A |
| /hrsystem/workbench_employee.ui | 员工工作台 | 个人档案/发起审批/待办;工资条/绩效桩位 | E |
| /hrsystem/workbench_manager.ui | 经理工作台 | 团队统计/入转调离审批/关怀;考勤/团队绩效桩位 | M |
| /hrsystem/workbench_admin.ui | 管理员工作台 | 人事统计/合同/提醒 | A,H |
| /hrsystem/audit_log_list.ui | 操作日志 | DataViewer + 详情对比弹窗 | A |
| /hrsystem/service.ui | 员工服务 | 公告/政策查询预览(下载按权限) | L |
| /hrsystem/message_list.ui | 站内消息 | 未读/已读 | L |
## 3. 关键页面结构与组件树
### 3.1 组织管理 /hrorg/org_tree.uiF01
```
org_tree.ui (HBox)
├── 左侧 VBox(width:320px)
│ ├── 搜索行(HBox): Input(keyword) + Button[搜索](binds script → 触发 Tree 刷新)
│ ├── Tree(id:org_tree, dataurl=/hrorg/api/org_tree.dspy, 点击节点→右侧详情)
│ └── 工具按钮行: [新增子组织][新增同级](PopupWindow → org_unit_form.dspy) [导入](FileUpload→org_import.dspy)
└── 右侧 VBox(flex:1)
├── 组织详情 Form(id:org_detail, dataurl=/hrorg/api/org_unit_detail.dspy?id=..)
│ 字段: org_code/org_name/org_type(codes:ORG_TYPE)/leader_id(dataurl:employee_options)/effective_date/自定义字段(动态渲染 org_field_def)
├── 操作按钮行: [编辑][移动(PopupWindow)][停用(二次确认)] ← A/H 角色可见
└── 变更时间轴 VBox(id:org_timeline, dataurl=/hrorg/api/org_change_timeline.dspy)
每条: Text(时间+操作人+类型 add/edit/disable/move/split/merge) + before/after 对比展开
```
交互Tree 节点点击 → urlwidget 刷新 org_detail 与 org_timelineparams_mapping 传 id停用前弹确认 PopupWindow停用后该组织在入职/调动表单 options 中不可选(服务端过滤 status=active组织移动后员工任职部门随组织联动服务端处理页面提示影响人数
### 3.2 组织架构图 /hrorg/org_chart.uiF01
```
org_chart.ui (VBox)
├── 工具行(HBox): DatePicker(as_of 历史日期) + TreeSelect(根节点) + 显示内容多选(姓名/职位/负责人) + Button[查看][导出PNG][导出XMind]
└── Chart/Tree 容器(id:chart_box, dataurl=/hrorg/api/org_tree.dspy?as_of=..&root_id=..)
```
交互as_of 变更后重查(按生效时间重建当时结构);导出经 PopupWindow 提示后浏览器下载org_chart_export.dspy 返回文件)。
### 3.3 花名册列表 /hrroster/roster_list.uiF03CRUD 生成)
```
roster_list.ui = DataViewer(json/roster_employee_list.json 生成)
├── data_filter: keyword(姓名/工号 LIKE) + org_id(TreeSelect:org_options) + employee_status(codes) + employee_type(codes) + 自定义字段筛选(动态追加≤3 项)
├── toolbar binds:
│ ├── [新增员工] → PopupWindow → roster_employee_create.dspy含证件信息分组证件类型/号码/有效期起止/签发机关,手工录入 D1
│ ├── [导入] → PopupWindow: 模板下载链接 + FileUpload(roster_import.dspy, mode=new/update) + 结果文件下载
│ ├── [导出] → PopupWindow: 字段多选(拖拽排序) + as_of 日期 → roster_export.dspy
│ └── [字段配置] → url 跳转 field_config.uiA/H
├── 列: 工号/姓名(点击→employee_detail.ui?id=)/组织/职位/员工类型/状态/入职日期 + 自定义显示列
└── 行操作: [详情][发起转正][发起调动][办理离职](按角色与员工状态显隐)
```
### 3.4 员工档案 /hrroster/employee_detail.uiF03
```
employee_detail.ui (VBox)
├── 头部卡片(HBox): 头像 + 姓名/工号/状态标签 + 快捷操作[编辑][发起审批](PopupWindow 选择 biz_type)
├── Tabs(id:profile_tabs)
│ ├── Tab 分组字段(按 roster_field_group 动态生成证件信息组展示脱敏证件号前3后3+有效期+签发机关): Form 只读/可编辑(按 editable_self+角色)
│ ├── Tab 时间轴(id:timeline, dataurl=timeline.dspy, 垂直时间线) + [添加记录](A/H)
│ ├── Tab 兼岗记录(DataViewer subtables: org_concurrent_post by employee_id)
│ ├── Tab 合同(DataViewer subtables: contract_info by employee_id)
│ ├── Tab 项目任职F17org_project_post by employee_id横向项目+横向职务)
│ └── Tab 审批记录(dataurl=inst_mine.dspy?about=..)
└── 附件: 字段类型=file → FileUpload + FilePreview(file_preview_url.dspy)
```
交互自助修改——employee 角色仅看到 editable_self=1 字段可编辑;提交时若字段 need_audit=1服务端走 roster_self_edit 审批流,页面提示"已提交审核";否则直接生效。复职员工档案头部显示"复职"标签并链接原档案prev_employee_id
### 3.5 入转调离工作台F04~F07
```
entry_workbench.ui (VBox)
├── 状态卡片行(ResponsableBox): 待入职数/审批中数/本月入职数dataurl=workbench_transfer.dspy
├── 待入职列表 DataViewer(org_entry by entry_status=pending_entry)
│ ├── 黑名单命中行: 高亮样式 + [拦截原因]BLACKLIST_HIT
│ ├── 登记表状态列: none/invited/filled + [复制链接][二维码(PopupWindow 展示二维码图片+有效期)]
│ └── 行操作: [邀请填登记表(entry_invite_register.dspy)][发送入职通知][直接入花名册][复职匹配提示(命中历史档案时高亮)]
└── 工具行: [手动入职(批量 PopupWindow)][发起入职审批(含证件信息手工录入分组)]
transfer_list.ui: DataViewer(org_transfer) + data_filter(status=pending/confirmed/cancelled, transfer_type, effective_date)
行操作: [查看明细(org_transfer_detail subtable批量逐人)][取消](pending 状态)
[发起调动] PopupWindow: 多人选择(批量) + 调动类型 + 生效日期 + 逐人目标组织/职位/职级
leave_workbench.ui (VBox)
├── 待离职名单 DataViewer(org_leave by status=pending_leave)
│ 行操作: [交接管理(PopupWindow: org_leave_handover 编辑,交接项类型含"钉钉资源交接(占位,手工登记内容)")][办理离职][开具证明][加入黑名单(确认弹窗)]
├── 交接完成率: 每个离职单展示交接项完成进度条done/total
└── 已离职列表 DataViewer(status=left) + [离职证明下载(PDF)] + [加入黑名单]
```
### 3.6 审批中心F10
```
todo_list.ui = DataViewer(dataurl=task_todo.dspy)
列: 审批编号/标题/发起人/发起时间/当前节点 行操作:[审批]→ inst_detail.ui?instance_id=
inst_detail.ui (VBox)
├── 表单渲染区(id:form_box, dataurl=inst_detail.dspy) —— 按 flow_form_def 动态渲染,节点字段权限控制可编辑性
├── 流转记录 VBox: 节点链(提交→各审批人意见/时间)
└── 操作行(binds urlwidget POST): [同意(task_approve.dspy)][驳回(task_reject.dspy)][转交(PopupWindow 选人)][撤回(发起人)][打印(inst_print.dspyA4 版式)]
操作完成后 script 刷新页面 → 列表刷新
flow_design.ui (A/H): 三区块
├── 表单定义 DataViewer(flow_form_def) + 字段引用器(勾选 roster_field_defbiz_type 含考勤桩位 attendance_* 分组提示"桩位,不联动考勤系统")
├── 流程定义 DataViewer(flow_def含初始化预置的人事四类模板入职/转正/异动/离职/离职交接) + 节点编辑 PopupWindow(审批人类型/通过规则 any-all/字段权限/抄送)
└── 审批角色 DataViewer(flow_role, 仅 admin三维配置流程范围/操作权限/数据查看)
```
### 3.7 编制管理F16新增
```
headcount_config.ui (A/H) (VBox)
├── 编制方案 DataViewer(org_headcount_scheme): 方案名/周期类型(年/季/月)/起止/状态 行操作:[编辑][停用]
└── [新增方案] PopupWindow + 方案展开行内编辑细分项:
细分项表格(headcount_item): 占编范围条件编辑器(scope_json: 员工类型/状态/职位/职级/自定义字段多条件) + 细分维度(seg_json) + 编制数量(head_limit)
headcount_board.ui (VBox)
├── 顶部: 方案选择器 + 快照日期 DatePicker(历史回溯)
├── 状态卡片区(ResponsableBox): 总编制/在编/超编/缺编
├── Chart(柱状: 各细分项 head_limit vs used_count超编红色标注) dataurl=headcount_status.dspy
└── 明细 DataViewer: 细分项/编制数/占编数/超编数/缺编数(超编行红色高亮 + 提醒消息入口)
交互:异动(入转调)生效后看板 ≤1 分钟刷新(事件触发重算);历史日期选择 → headcount_history.dspy 按快照取数。
```
### 3.8 项目式组织F17新增
```
project_tree.ui (HBox)
├── 左侧 VBox: Tree(org_project 多层级) + [新增项目][新增子项目]
└── 右侧 VBox
├── 项目详情 Form: 编码/名称/负责人/时间范围(到期自动标识 expired 状态)/属性(attrs_json)
└── 项目任职 DataViewer(org_project_post): 员工/横向职务(horizontal_job_options)/起止日期
行操作:[添加任职(PopupWindow 选人+选横向职务)][移除]
交互员工同时挂纵向部门roster_employee.org_id与横向项目横向职务数据可被花名册任职信息与薪酬模块引用options 端点)。
```
### 3.9 报表看板 /hrreport/report_board.uiF13
```
report_board.ui (VBox)
├── 顶部 Tab: 花名册分析 | 入职 | 转正 | 调岗 | 离职
├── 花名册分析 Tab: 维度选择器(codes: type/status/age/edu/location/gender + 自定义字段) + Chart(饼图/柱状, dataurl=roster_analysis.dspy) + 明细 DataViewer
├── 入职 Tab: 维度(部门/地区/岗位) + 周期选择 + Chart(趋势折线 + 分布柱)
├── 转正 Tab: Chart(趋势) + 近期待转正 DataViewer(regular_analysis.dspy)
├── 调岗 Tab: 日期范围 + Chart(按类型柱状)
├── 离职 Tab: 卡片(待离职人数/离职率/同比/环比) + Chart(离职原因饼图)
└── 各 Tab 右上 [导出] → report_export.dspy与页面数据一致
```
所有看板查询服务端叠加数据范围manager 仅见团队。
### 3.10 合同管理F09
```
contract_list.ui = DataViewer(contract_info)
├── data_filter: 员工/类型/合同公司/状态/到期日期前
├── toolbar: [新增合同][批量导入][类型管理][模板管理][提醒规则]
├── 行操作: [发起审批(新签/续签/变更/终止 PopupWindow 选类型)][生成合同文本(contract_text_gen.dspy按模板填充下载 docx/pdf 供打印——电子签二期)][到期高亮(end_date 临近橙色)]
└── 模板管理页: contract_template CRUD + 占位符映射编辑(field_marks_json)
```
### 3.11 系统管理F11/F12/F15
```
index.ui(hrsystem): 卡片导航 → role_admin.ui / data_scope.ui / audit_log_list.ui / remind_config.ui / service.ui
role_admin.ui: DataViewer(角色) + 权限树勾选 PopupWindow(rbac paths)
data_scope.ui: 管理员列表 + 范围编辑 PopupWindow(scope_type 切换: 组织 TreeSelect 多选(含子树) / 花名册字段多选;两类可叠加)
audit_log_list.ui: DataViewer(module/operation/date_range 筛选) + 行[详情] → PopupWindow 前后 JSON 对比(左右双栏 Text)
remind_config.ui: DataViewer(sys_remind_rule场景≥6 类 entry/regular/leave/retire/contract_expire/health_cert/social_insurance/custom) + DataViewer(sys_care_config 生日/周年文案)
service.ui: Tabs[公告 DataViewer(sys_announcement 在线预览)][政策 DataViewer(sys_policy, 行内预览/下载按 view_scope+downloadable 权限)]
message_list.ui: DataViewer(msg_type/is_read 筛选) 行点击标已读
```
### 3.12 工作台F14
```
workbench_employee.ui (ResponsableBox 移动端自适应)
├── 卡片: 个人档案(→employee_detail.ui?id=self) | 工资条(桩位卡片:显示"薪酬模块上线后可用"FEAT-B1-09) | 个人绩效(桩位:同上) | 发起审批(PopupWindow 选择流程类型→flow_start)
├── 待办/已办/我发起/我收到 四 Tab DataViewer(task_todo/done/inst_mine/received)
└── 企业政策/公告入口(service.ui)
workbench_manager.ui (VBox)
├── 统计卡片行(dataurl=team_stats.dspy): 团队人数/本月入离职/待审批数(考勤统计/团队绩效为桩位卡片"未接入"
├── 待审批 DataViewer(task_todo 范围=团队) | 团队入转调离 DataViewer(workbench_transfer.dspy scope=team)
└── 关怀提醒 VBox(生日/周年/合同到期 近期列表)
workbench_admin.ui (VBox)
├── 人事统计卡片(team_stats scope=all) + 合同即将到期 DataViewer(contract_expire_soon.dspy) + 编制超编提醒入口(headcount_board.ui)
└── 待审批 + 关怀提醒(同经理视图,范围=数据权限内全部)
```
## 4. 核心交互流程(页面级时序)
1. **入职(审批)**entry_workbench [发起入职审批] → PopupWindow 表单(含证件信息手工录入分组)→ entry_approval.dspy →BLACKLIST_HIT 则红色高亮提示)成功 → 待审批列表出现;审批人在 todo_list 处理 → inst_detail 同意 → 花名册新增记录 → message_list 收到入职通知。
2. **入职登记表(扫码降级)**:待入职行 [邀请填登记表] → 生成链接+二维码PopupWindow 展示,内网访问)→ 候选人扫码打开 entry_register.tmpl → 填写提交 → 列表登记表状态 filled → 继续审批/入职。
3. **复职**:发起入职审批输入证件号 → entry_rehire_match 命中历史档案 → 表单提示"复职:原部门/职位"并自动带出关联 → 入职后档案显示复职标签。
4. **员工自助修改**employee_detail → 编辑可改字段 → 保存 → 提示"直接生效"或"已提交审核"need_audit→ 审核通过后字段更新、时间轴留痕。
5. **调动批量**transfer_list [发起调动] → PopupWindow 多人选择 + 调动类型 + 逐人目标 → transfer_apply.dspy → 生成批量审批单 → 通过后逐人更新(明细可追溯)→ 编制联动校验提醒。
6. **离职全流程**leave_workbench 发起/手动 → 待离职名单 → [交接管理]逐项勾选(含钉钉资源占位项手工登记)→ 到期自动生效remind_scan→leave_effect→ [开具证明]下载 PDF → 可选[加入黑名单]。
7. **合同到期提醒**remind_scan后台→ message_list 消息 → workbench_admin 到期卡片 → contract_list 行内到期高亮 → [生成合同文本]续签打印。
8. **历史架构图**org_chart 选择 as_of 日期 → 查看 → 导出 PNG/XMind。
9. **编制看板**headcount_config 配置方案与细分(占编范围条件)→ headcount_board 实时查看超/缺编 → 异动后自动刷新并推送超编提醒 → 选择历史日期回溯快照。
## 5. 设计规范
1. **布局**:左侧 Menu 固定 220px内容区 VBox 滚动;卡片统一圆角 8px、间距 16px表单 label 右对齐;列表默认每页 50。
2. **状态色**active/在职=绿、probation/审批中=橙、inactive/离职/驳回=灰、黑名单/超编/到期=红。
3. **反馈**:操作成功 message 提示并刷新当前视图;不可逆操作(停用/加黑名单)一律 PopupWindow 二次确认;耗时操作(导入导出)返回 task_id 后轮询/消息通知结果。
4. **空态/加载**DataViewer 自带 loading 与空数据提示;桩位卡片(工资条/绩效/考勤)统一"未接入"样式与文案。
5. **权限感知**按钮与列按角色渲染load_path + CRUD confidential_fields敏感字段服务端脱敏后展示证件号前3后3、手机前3后4
6. **移动端兼容**:员工自助页面(工作台/档案/待办/服务/消息/登记表)使用 ResponsableBox 自适应,窄屏卡片化;管理类页面 PC 优先NFR-6
7. **打印**:审批单 inst_print.dspy 输出 A4 打印样式页面;合同文本 docx/pdf 直接打印。
## 6. 页面-接口追溯
| 页面 | 主要接口(见 api-design.md |
|---|---|
| org_tree.ui | org_tree / org_unit_create / org_unit_update / org_unit_move / org_unit_disable / org_change_timeline / org_import / org_field_def_save |
| org_chart.ui | org_tree(as_of) / org_chart_export |
| company_list.ui | company_saveCRUD |
| position_list.ui 等 | position/job/grade/rank/sequence CRUD + *_import/_export + *_options |
| roster_list.ui | roster_list / roster_employee_create / roster_import / roster_export / check_employee_no / roster_field_def_save |
| employee_detail.ui | employee_detail / roster_employee_update / timeline / timeline_add / file_preview_url |
| entry_workbench.ui | entry_approval / entry_manual / entry_invite_register / entry_qrcode / entry_blacklist_check / entry_notify / entry_rehire_match |
| entry_register.tmpl | entry_register_page / entry_register_submit |
| transfer_list.ui | transfer_apply / transfer_cancel |
| leave_workbench.ui | leave_apply / leave_manual / leave_handover_save / leave_certificate / blacklist_add |
| headcount_config.ui / headcount_board.ui | headcount_scheme_save / headcount_item_save / headcount_status / headcount_history |
| project_tree.ui | project_tree / project_save / project_post_save / horizontal_job_options |
| todo_list.ui / inst_detail.ui | task_todo / inst_detail / task_approve / task_reject / task_forward / inst_withdraw / inst_print |
| flow_design.ui | form_def_save / flow_def_save / flow_node_save / flow_role_save / flow_match |
| contract_list.ui | contract_list / contract_create / contract_import / contract_apply / contract_text_gen / contract_remind_rule_save / contract_template_save / esign_stub |
| report_board.ui | roster_analysis / entry_analysis / regular_analysis / transfer_analysis / leave_analysis / report_export |
| workbench_*.ui | workbench_employee / workbench_manager / workbench_admin / team_stats / contract_expire_soon |
| audit_log_list.ui | audit_log_list / audit_log_detail |
| remind_config.ui / service.ui | remind_rule_save / care_config_save / announcement_save / policy_save / policy_download |
| message_list.ui | message_list / message_read / message_unread_count |