23 KiB
23 KiB
一期批次1总体设计 —— UI/页面设计(hr-web,ocai 口径)
- 版本:v3.0(批次1设计定稿;v3.0 变更:对齐 SRS v3.1 —— 新增编制看板(F16)/项目式组织(F17)页面、工作台工资条/绩效桩位、入职登记链接与二维码交互(扫码入职降级)、证件手工录入交互(D1)、合同文本生成打印、离职交接钉钉占位项)
- 状态:设计定稿(批次1评审修订版)
- 规范依据:ocai 技能集 bricks-framework、bricks-layout-patterns、module-development-spec(index.ui 强制)、crud-definition-spec;交互基线
docs/01-design/architecture.md
1. 界面体系与总体布局
- 技术形态:无 Vue/无手写 HTML。页面 =
wwwroot/*.ui(纯 JSON bricks 组件树)+*.dspy(数据端点);CRUD 列表/表单页由 json/*.json 经 xls2ui 自动生成 DataViewer/Form/Tree 页面。 - 入口:
/index.ui(应用门户,菜单聚合 6 模块入口);每模块强制/{module}/index.ui(ResponsableBox 功能卡片导航)。 - 权限渲染:菜单与按钮可见性由 rbac 角色控制(Menu 只注册已授权路径;操作按钮 binds 前按角色渲染)。
- 核心 widgets:VBox/HBox、ResponsableBox(自适应,员工自助移动端兼容)、Menu、DataViewer(列表:data_filter 筛选/toolbar binds/子表 subtables)、Tree(组织树/项目树)、Form、PopupWindow、Chart(报表/编制看板)、Text、FileUpload/FilePreview、UrlWidget。
- binds actiontype 仅 5 种:urlwidget / script / url / datawidget / event(禁止 script 内 fetch;弹窗走 PopupWindow + urlwidget)。
- 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.ui(F16)
│ │ ├── 项目组织 → /hrorg/project_tree.ui(F17)
│ │ ├── 人事报表 → /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 | 合同公司台账 | CRUD(FEAT-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.ui(F01)
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_timeline(params_mapping 传 id);停用前弹确认 PopupWindow;停用后该组织在入职/调动表单 options 中不可选(服务端过滤 status=active);组织移动后员工任职部门随组织联动(服务端处理,页面提示影响人数)。
3.2 组织架构图 /hrorg/org_chart.ui(F01)
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.ui(F03,CRUD 生成)
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.ui(A/H)
├── 列: 工号/姓名(点击→employee_detail.ui?id=)/组织/职位/员工类型/状态/入职日期 + 自定义显示列
└── 行操作: [详情][发起转正][发起调动][办理离职](按角色与员工状态显隐)
3.4 员工档案 /hrroster/employee_detail.ui(F03)
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 项目任职(F17:org_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.dspy,A4 版式)]
操作完成后 script 刷新页面 → 列表刷新
flow_design.ui (A/H): 三区块
├── 表单定义 DataViewer(flow_form_def) + 字段引用器(勾选 roster_field_def;biz_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.ui(F13)
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. 核心交互流程(页面级时序)
- 入职(审批):entry_workbench [发起入职审批] → PopupWindow 表单(含证件信息手工录入分组)→ entry_approval.dspy →(BLACKLIST_HIT 则红色高亮提示)成功 → 待审批列表出现;审批人在 todo_list 处理 → inst_detail 同意 → 花名册新增记录 → message_list 收到入职通知。
- 入职登记表(扫码降级):待入职行 [邀请填登记表] → 生成链接+二维码(PopupWindow 展示,内网访问)→ 候选人扫码打开 entry_register.tmpl → 填写提交 → 列表登记表状态 filled → 继续审批/入职。
- 复职:发起入职审批输入证件号 → entry_rehire_match 命中历史档案 → 表单提示"复职:原部门/职位"并自动带出关联 → 入职后档案显示复职标签。
- 员工自助修改:employee_detail → 编辑可改字段 → 保存 → 提示"直接生效"或"已提交审核"(need_audit)→ 审核通过后字段更新、时间轴留痕。
- 调动批量:transfer_list [发起调动] → PopupWindow 多人选择 + 调动类型 + 逐人目标 → transfer_apply.dspy → 生成批量审批单 → 通过后逐人更新(明细可追溯)→ 编制联动校验提醒。
- 离职全流程:leave_workbench 发起/手动 → 待离职名单 → [交接管理]逐项勾选(含钉钉资源占位项手工登记)→ 到期自动生效(remind_scan→leave_effect)→ [开具证明]下载 PDF → 可选[加入黑名单]。
- 合同到期提醒:remind_scan(后台)→ message_list 消息 → workbench_admin 到期卡片 → contract_list 行内到期高亮 → [生成合同文本]续签打印。
- 历史架构图:org_chart 选择 as_of 日期 → 查看 → 导出 PNG/XMind。
- 编制看板:headcount_config 配置方案与细分(占编范围条件)→ headcount_board 实时查看超/缺编 → 异动后自动刷新并推送超编提醒 → 选择历史日期回溯快照。
5. 设计规范
- 布局:左侧 Menu 固定 220px;内容区 VBox 滚动;卡片统一圆角 8px、间距 16px;表单 label 右对齐;列表默认每页 50。
- 状态色:active/在职=绿、probation/审批中=橙、inactive/离职/驳回=灰、黑名单/超编/到期=红。
- 反馈:操作成功 message 提示并刷新当前视图;不可逆操作(停用/加黑名单)一律 PopupWindow 二次确认;耗时操作(导入导出)返回 task_id 后轮询/消息通知结果。
- 空态/加载:DataViewer 自带 loading 与空数据提示;桩位卡片(工资条/绩效/考勤)统一"未接入"样式与文案。
- 权限感知:按钮与列按角色渲染(load_path + CRUD confidential_fields);敏感字段服务端脱敏后展示(证件号前3后3、手机前3后4)。
- 移动端兼容:员工自助页面(工作台/档案/待办/服务/消息/登记表)使用 ResponsableBox 自适应,窄屏卡片化;管理类页面 PC 优先(NFR-6)。
- 打印:审批单 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_save(CRUD) |
| 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 |