文件
hyb-oa/.trellis/tasks/08-05-interaction-pattern-unification/prd.md
T

77 行
7.5 KiB
Markdown
原始文件 Blame 文件历史

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
# 低风险页面操作规范统一
## Goal
在不改变业务 URL、API、数据库、权限模型和状态机的前提下,统一高频页面的状态文案、首页信息优先级、权限可见性、审批动作解释、表单反馈和移动主动作,使用户在 PC 与移动端形成稳定预期。
## Confirmed Facts
- `StatusBadge` 未命中映射时直接显示原始 `status`,员工档案仍把 `employmentStatus` 直接传入,可能展示 `onboarding/probation/offboarding/inactive`。
- PC 工作台仍渲染常用入口和今日待处理,需按首屏任务优先原则复核顺序;移动首页仍无条件展示考勤说明卡,财务第三个指标值仍为静态 `OA`。
- `WelcomeDialog` 仍对所有用户硬编码“处理待办”等入口,未按审批权限过滤。
- `/todos` 状态筛选仍直接展示 `todo/doing/done/cancelled`,且“待办”与审批“待我处理”的产品命名容易混淆。
- 审批详情并列提供“退回/驳回”,但未解释后果差异;转审理由至少 10 字的门槛没有邻近说明。
- 费用标准仍向审批人显示“管控模式:阻断/预警”内部配置词。
- 页面提交失败既有 toast、页级红条和字段内联等多种方式,缺少按可恢复性划分的统一合同。
- 移动报销、移动审批、付款响应式页面分别复制了固定底部动作容器;`BusinessEditTemplate` 已提供可复用实现线索。
- 完整差旅已冻结,但 `TravelRequestsPage` 仍会在无创建权限且未选择记录时自动把第一条写入 `?id=`;修复该缺陷不恢复差旅能力。
- 当前有 58 个前端文件在普通用户路径拼接 `CODE: 中文消息`;共享 `resolveErrorMessage` 也直接返回带 code 的文本,必须成为本轮统一收敛入口。
## Scope
- 仅修改前端共享错误/状态/动作组件、PC/移动高频页面文案与布局、WelcomeDialog 权限过滤、Todo 状态显示和差旅页面自动选中 effect。
- 不改业务 URL、API、数据库、权限模型、审批/付款状态机或生产配置。
- 差旅只删除自动选择第一条记录的缺陷,不恢复冻结能力;合同、采购/资产路由迁移由其他子任务负责。
## Requirements
- R1:状态展示必须使用业务域映射;公共 `StatusBadge` 未知值显示“未知状态”,不得把技术枚举原样呈现给普通用户。
- R2:PC 工作台首屏把真实“今日待处理”置于常用入口之前;无待办时仍保持自然空态,不制造说明卡。
- R3:移动首页删除无真实数据的常驻考勤说明卡;财务指标只展示真实可比较数据,不能用 `OA` 占据数值位。
- R4:首次欢迎入口按当前用户权限与已启用能力生成;不得引导用户进入无权访问的审批页。
- R5:命名统一为“待我审批”(审批任务)、“我的事项”(个人 todo)和“今日待处理”(聚合面板);路由可保持兼容,不因文案治理改 URL。
- R6:`todo/doing/done/cancelled` 等用户可见状态统一为自然中文。
- R7:审批详情明确说明“退回”和“驳回”的业务后果;转审理由在输入区邻近显示至少 10 字要求及未满足原因。
- R8:把“阻断/预警”等配置词转为审批人可执行的业务表达,不暴露内部控制字段名。
- R9:反馈合同固定为:短暂成功使用 toast;字段/材料问题就近内联;页面或区域加载失败在对应区域内持久显示并提供重试;不可恢复的提交失败不得只依赖会消失的 toast。
- R10:抽取或扩展共享移动底部动作容器,统一安全区、内容留白、主次动作层级和 pending/disabled 表达;页面业务动作仍由各自状态矩阵决定。
- R11:关键表单控件具有可关联 label、键盘可达性和清晰焦点;为登录、首页、审批详情、报销详情和移动报销详情中的本任务触点增加聚焦可访问性断言。
- R12:保留当前中文错误映射并收敛唯一解析入口;普通用户路径只返回自然中文,不显示错误 code、接口名、路由栈、完整路径或原始 payload。管理员、审计和排障页如确需 code,只在明确技术明细区域最小展示,不复用普通消息字符串。
- R13:优先复用现有 `ListWorkspace`、`BusinessListTemplate`、详情动作组件、错误映射和移动安全区样式,不新增第四套页面/反馈系统。
- R14:删除差旅首屏自动选择第一条记录的 effect;用户未显式选择时保持纯列表/空详情状态,不改差旅路由、功能入口或业务能力。
## Acceptance Criteria
- [ ] 员工档案和本任务触及页面不显示未映射英文状态;未知状态显示“未知状态”。
- [ ] PC 工作台首个业务内容区为“今日待处理”,常用入口后置;移动首页不再显示静态考勤说明卡或值为 `OA` 的指标。
- [ ] 无审批权限用户的 WelcomeDialog 不出现“处理待办”入口,其他入口同样按权限/能力过滤。
- [ ] PC/移动审批入口使用“待我审批”,个人 todo 使用“我的事项”,聚合区使用“今日待处理”;Todo 状态选项全部为中文。
- [ ] 审批人无需猜测即可区分退回/驳回后果;转审理由不足 10 字时在输入区看到明确原因。
- [ ] 费用控制提示说明超标事实、影响和下一步,不出现“管控模式”字段式表达。
- [ ] 成功、字段错误、区域加载失败和提交失败分别遵循统一反馈合同;聚焦回归证明错误可恢复且输入不丢失。
- [ ] 至少两个现有移动详情页复用共享底部动作容器,安全区和页面底部留白没有回退。
- [ ] 本任务触及的 A 类页面具有 label/键盘/焦点回归;若引入 axe,仅限聚焦页面,不把全站历史债务变成本任务阻断。
- [ ] 当前 58 个文件范围内的普通用户错误提示不再拼接内部 code;范围显式包含唯一收敛入口 `client/src/lib/resolveErrorMessage.ts`。代码搜索和聚焦页面回归证明没有同类前缀残留;`client/src/pages/AuditLogsPage.tsx` 作为 R12 允许的技术明细例外单独列出,不计入“无残留”判定。
- [ ] 直接进入 `/travel-requests` 且未带 `id` 时不自动写入第一条记录;用户显式选择后既有 `?id=` 详情仍可用。
- [ ] `cd client && npm run typecheck && npm run build`、聚焦 Playwright 与 Trellis 门禁通过。
## Out of Scope
- 详情路由、新建页路由、后端 API、数据库或状态机修改。
- 全站一次性迁移所有 toast、所有表单和所有页面骨架。
- 付款、报销、审批等业务动作权限或服务端规则调整。
- 冻结差旅的功能恢复、详情路由化、导航调整或能力扩展。
- 模块冻结/下线、导航产品组合调整和暗色模式。
## Test Plan
- `cd client && npm run typecheck`
- `cd client && npm run build`
- 聚焦 Playwright:工作台首屏与 WelcomeDialog 权限、审批动作解释、移动首页/底部动作、Todo 中文状态、差旅未自动选中。
- 运行普通用户错误前缀扫描;按当前 58 个文件范围核对残留,显式包含 `client/src/lib/resolveErrorMessage.ts`,并将 `client/src/pages/AuditLogsPage.tsx` 作为允许的技术明细例外单独检查、不计入“无残留”判定。
- 运行 `python3 ./.trellis/scripts/task.py validate 08-05-interaction-pattern-unification`、process contract、docs registry、Trellis governance 和 `git diff --check`。
## Open Questions
- 无;本子任务可在父任务范围确认后进入设计。