R36-6 回填合同验收状态
ci-e2e / e2e (push) Has been cancelled
ci-minimal / check-minimal (push) Has been cancelled

这个提交包含在:
2026-03-25 15:34:05 +08:00
父节点 87b52f0509
当前提交 1351099730
@@ -0,0 +1,8 @@
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
R36-0,新执行合同建档与范围锁定,基于产品口径文档建立 R36 合同并锁定本轮承接范围,新 CSV 校验通过 且 Notes 明确本轮不承接金额分层审批规则与并行会签,python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-25_12-09-13-r36-permission-model-and-workflow-hardening.csv,none,DONE,DONE,DONE,issues/2026-03-25_12-09-13-r36-permission-model-and-workflow-hardening.csv,[],"本轮覆盖:Bug-1 permissions 冗余清理(已完成)、L-1 日历分层可见、L-2 请假草稿/驳回编辑、P-1 经理视图判断修正、W-2 转审通用化、W-3 转审超限行为收口、R-1 view_all/manage 语义文档化。不承接:W-4 并行会签、R-2 金额分层审批(工作流配置层)、W-1 无经理升级(需 workflow definition 改造)。"
R36-1,请假草稿与驳回状态支持原单编辑,为 draft 和 rejected 状态的请假单补编辑后再提交能力,不要求撤回再新建,"draft 和 rejected 状态下请假表单字段可编辑并可 submit;submit 后走与首次提交相同的校验与审批流;原单 id 保持不变;employee 视角与 manager 视角均测试覆盖",cd client && npm run typecheck && cd server && npm test -- tests/unit/routes/leave.edit.test.js && cd client && npm run test:e2e -- tests/e2e/leave-flow.spec.ts,manual,DONE,DONE,DONE,server/src/routes/leave.js|client/src/pages/LeaveRequestPage.tsx|server/tests/unit/routes/leave.edit.test.js,"[""R36-0""]","需在 leave.js submit 路由允许 draft/rejected 两种状态进入;前端 draft 和 rejected 状态下需显示可编辑表单而非只读摘要。如果当前前端只有只读详情视图,需新增编辑入口或切换到草稿编辑模式。"
R36-2,团队日历按角色分层可见,HR 看全员日历经理看本部门日历普通员工不可见 Tab,HR 账号可见全员日历;具备 leave.view_all 的经理账号可见 Tab 但只返回本部门数据;普通 employee 账号不可见 Tab;截断提示逻辑保持不变,cd client && npm run typecheck && npm run test:e2e -- tests/e2e/leave-team-calendar.spec.ts,manual,DONE,DONE,DONE,server/src/routes/leave.js|client/src/pages/LeaveRequestPage.tsx|client/tests/e2e/leave-team-calendar.spec.ts,"[""R36-0""]","后端需在 scope=all + departmentId 参数组合下做经理视图过滤;前端 canViewAll 判断需区分 HR 全员视图与经理部门视图;日历 Tab 可见性条件改为 hasLeaveViewAll 即可,过滤在查询层做。需先确认 manager seed 是否有 leave.view_all 权限——如无,需先给 manager 角色补此权限。"
R36-3,Portal 经理视图判断修正,用审批权限或域管理权限判断经理视图替代现有 system.users 判断,"有任一 *.approve 或 *.manage(排除 view_all)权限的用户进入经理视图;纯 employee 不进入经理视图;admin/system.users 用户仍进入经理视图",cd client && npm run typecheck && npm run test:e2e -- tests/e2e/main-flow.spec.ts,manual,DONE,DONE,DONE,client/src/pages/PortalHomePage.tsx|client/src/lib/permissions.ts,"[""R36-0""]","建议提取 isManagerRole(permissions: string[]) 工具函数,逻辑:permissions.some(p => p.endsWith('.approve') || (p.endsWith('.manage') && !p.endsWith('.view_all')))。注意 *.view_all 不触发经理视图。"
R36-4,转审通用化并收口超限行为,移除转审只限报销的硬限制并明确超限后拒绝提示,"报销/请假/采购/差旅均可发起转审;转审目标需具备对应单据审批权限(缺权限时返回明确错误);超过 3 次后返回'已达转审上限'错误而非通用 500;超限后不自动转给固定角色",cd server && npm test -- tests/unit/routes/workflow.transfer.test.js,manual,DONE,DONE,DONE,server/src/routes/workflow.js|server/tests/unit/routes/workflow.transfer.test.js,"[""R36-0""]","主要改动:1) 删除 if (workflowInstance.entity_type !== 'reimbursement') 限制;2) 补被转人权限校验逻辑(按 entity_type 映射所需审批权限);3) 超限时错误码改为 WORKFLOW_003 或类似业务码;需补单元测试覆盖非报销转审与超限两个路径。"
R36-5,日历导航与回到今天,为团队日历补前后周月导航按钮和回到今天入口,可点击上一周/下一月/下一周/上一月切换窗口;点击"今天"回到当前窗口;切换后触发新查询并显示新窗口数据;E2E 补导航后 URL 参数或窗口变化断言,cd client && npm run typecheck && npm run test:e2e -- tests/e2e/leave-team-calendar.spec.ts,manual,DONE,DONE,DONE,client/src/pages/LeaveRequestPage.tsx|client/tests/e2e/leave-team-calendar.spec.ts,"[""R36-2""]","calendarAnchorDate 改为有 setter 的 state;Prev/Next 按钮调用 setCalendarAnchorDate 移动一个 week 或 month;Today 按钮重置为 new Date();建议加 data-testid='leave-calendar-prev' / 'leave-calendar-next' / 'leave-calendar-today' 供 E2E 定位。"
R36-6,本地回归与收口,R36 全部项完成后执行本地门禁并更新合同状态,"build + typecheck 通过;full-local 绿灯(passed ≥ 之前基线,0 failed);CSV 各项状态回填 DONE",cd client && npm run build && npm run typecheck && bash scripts/qa/run-web-gates.sh full-local,manual,DONE,DONE,DONE,issues/2026-03-25_12-09-13-r36-permission-model-and-workflow-hardening.csv|scripts/qa/*,"[""R36-1"",""R36-2"",""R36-3"",""R36-4"",""R36-5""]",本轮不做 push 与 smoke-live;门禁通过后合同即可关闭。
无法渲染此文件,因为它包含了意外字符,其位于第 7 行和第 168 列。