4.4 KiB
4.4 KiB
| 1 | ID | Title | Description | Acceptance | Test_Method | Tools | Dev_Status | Review1_Status | Regression_Status | Files | Dependencies | Notes |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | R40-0 | R40执行合同建档与范围冻结 | 为档案编辑扩展与员工列表导出创建独立合同并锁定本轮不承接批量导入 考勤增强与批量操作 | CSV 校验通过 且明确本轮只做 profile patch 小改动 管理员编辑态与员工导出链路 | python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-28_17-12-07-r40-profile-edit-and-people-export.csv | none | DONE | DONE | DONE | issues/2026-03-28_17-12-07-r40-profile-edit-and-people-export.csv | [] | 本轮沿用现有 /employees/:id/profile 与 /exports 基础设施 reviewer 不默认启用 |
| 3 | R40-1 | 档案编辑扩展 | 让 system.users 管理员在员工档案页直接编辑 title hireDate probationEndDate lastWorkingDate 并保持普通员工仅能编辑原 4 个字段 | 管理员保存 title hireDate probationEndDate lastWorkingDate 后刷新值保持 普通员工打开自己档案时这些字段仍为只读 且 department directManager employeeNo name phone email 维护边界不变 | 业务流程: 管理员打开员工档案 修改职位 入职日期 试用期截止和离职日期后保存成功 刷新后值保持。普通员工打开自己档案时 仅 workLocation emergencyContactName emergencyContactPhone notes 可编辑。验证命令: cd server && node --check src/routes/employees.js && cd ../client && npm run typecheck && npm run build | manual | DONE | DONE | DONE | server/src/routes/employees.js|client/src/api/employees.ts|client/src/pages/EmployeeProfilePage.tsx | ["R40-0"] | 已在 PROFILE_PATCH_SCHEMA 与 employee.update 中补写 hireDate,并把 report.dashboard.view 对他人档案的 patch 显式收紧为只读。已验证: cd server && node --check src/routes/employees.js 通过;cd server && npm test -- tests/unit/routes/employees.profile.test.js tests/unit/routes/employees.patch.test.js 通过;cd client && npm run typecheck && npm run build 通过。 |
| 4 | R40-2 | 员工列表导出 | 在人员管理页按当前筛选条件导出员工列表并复用现有 exports.js 与 blob 下载基础设施 | PeoplePage 仅对 system.users 显示导出按钮 导出支持 csv xlsx 并复用 q status departmentId 筛选 产出列为工号 姓名 部门 职位 手机 邮箱 账号状态 入职日期 | 业务流程: system.users 用户进入人员管理页 设置 q status departmentId 后导出 CSV 和 Excel 文件内容与筛选一致。仅 report.dashboard.view 用户进入人员管理页时看不到导出按钮。验证命令: cd server && node --check src/routes/exports.js && cd ../client && npm run typecheck && npm run build | manual | DONE | DONE | DONE | server/src/routes/exports.js|client/src/api/exports.ts|client/src/pages/PeoplePage.tsx | ["R40-0"] | 已新增 /api/exports/employees 与 exportEmployees,并在 PeoplePage 复用现有 dropdown + blob 下载模式。已验证: cd server && node --check src/routes/exports.js 通过;cd server && npm test -- tests/unit/routes/exports.employees.test.js 通过;cd client && npm run typecheck && npm run build 通过。 |
| 5 | R40-3 | QA回归与R37-3继续复盘 | 按 agent modes 完成 R40 单项验证 状态回填 并记录 hireDate 误判与导出模式复用的后续观察 | R40 各状态正确回填 且 Notes 记录 hireDate 需补后端 system.users 与 report.dashboard.view 能力差异 员工导出是否证明 exports.js 模式可继续复用 | 业务流程: 验证管理员档案编辑扩展 普通员工只读约束 PeoplePage 按组合筛选导出和非 system.users 无导出入口 并确认 R39 汇报链卡片不回归。验证命令: cd server && node --check src/routes/employees.js && node --check src/routes/exports.js && cd ../client && npm run typecheck && npm run build | manual | DONE | DONE | DONE | issues/2026-03-28_17-12-07-r40-profile-edit-and-people-export.csv|issues/2026-03-28_12-36-28-r37-agent-modes-governance.csv|server/src/routes/employees.js|server/src/routes/exports.js|client/src/pages/EmployeeProfilePage.tsx|client/src/pages/PeoplePage.tsx | ["R40-1","R40-2"] | 试跑结论: hireDate 从以为前端可接到确认需补后端 是一次有效纠偏;system.users 与 report.dashboard.view 的能力边界已同时在前端和后端收敛,避免只隐藏按钮但 API 仍可写;员工导出证明 exports.js 模式可继续平移复用。已验证: node --check employees.js/exports.js 通过;server 单测 3 文件 7 测试全部通过;client typecheck/build 通过。 |