# 2-task-RSMS-001:全国记者站管理系统开发任务文档 > 文档版本:v1.0 > 状态:待确认 > 编制日期:2026-08-01 > 项目缩写:RSMS > 适用范围:V0.1 MVP 收尾 + V0.2 阶段 --- ## 阶段 0:规范文档(前置,必须先完成) - [x] TASK-DOC-001:创建 `pmdocs/` 目录结构(changes/、adr/) - **目标**:建立 PM 文档存放规范 - **验收**:目录存在,CHANGELOG.md 已初始化 - **状态**:已完成 - [x] TASK-DOC-002:生成 `pmdocs/0-req-RSMS.md`(需求文档) - **目标**:固化需求范围、角色定义、状态机、NFR、验收标准 - **映射**:REQ-AUTH~REQ-SYS, NFR-*, AC-* - **验收**:文档已创建,内容覆盖全部 REQ 编号 - **状态**:已完成 - [x] TASK-DOC-003:生成 `pmdocs/1-prd-RSMS.md`(产品需求文档) - **目标**:固化功能清单、UI/UX 规范、公共组件规划、版本规划 - **映射**:PRD-FUNC-001~018,SCENE-001~004 - **验收**:文档已创建,公共组件规划表已填充 - **状态**:已完成 - [x] TASK-DOC-004:生成本文档 `pmdocs/2-task-RSMS.md` - **目标**:任务拆分、编号、依赖、验收标准 - **映射**:所有 REQ、PRD-FUNC - **验收**:本文档已创建,所有任务有验收标准 - **状态**:已完成 - [x] TASK-DOC-005:创建 `run.md`(运行手册) - **目标**:固化安装、启动、构建、迁移命令 - **依赖**:TASK-DOC-004 - **验收**:`run.md` 存在且所有命令可执行 - **状态**:已完成 --- ## 阶段 1:前端模块化重构 ### 1.1 架构重构 - [x] TASK-FE-001:创建前端目录结构 - **目标**:将单文件 `App.tsx` 拆分为模块化目录 - **依赖**:TASK-DOC-005(run.md 中的构建命令验证) - **验收**:目录结构创建完成,import 路径调整后应用能正常启动 - **状态**:已完成 - [x] TASK-FE-002:抽取 Layout 组件 - **目标**:`PageLayout`、`Sidebar`、`TopBar` 独立 - **验收**:`App.tsx` 中 Layout 部分替换为 ``,功能行为不变 - **状态**:已完成 - [x] TASK-FE-003:抽取 UI 基础组件 - **目标**:`StatusBadge`、`EmptyState`、`LoadingBar` 独立为文件 - **验收**:各组件独立导出,App.tsx 中的内联版本替换为 import - **状态**:已完成 - [x] TASK-FE-004:抽取 PageHeading / PanelHeader / MetricCard - **目标**:复用组件独立文件 - **验收**:复用点替换为 import,Props 接口独立导出 - **状态**:已完成 - [x] TASK-FE-005:抽取数据展示组件 - **目标**:`RecordTable`(含 `review` / `compact` 模式)独立 - **验收**:工作记录页、审核中心、档案页均使用同一组件 - **状态**:已完成 - [x] TASK-FE-006:抽取领域组件 - **目标**:`CreateRecordModal`、`RecordDrawer` 独立为 `modals/` 文件 - **验收**:新建和详情交互行为与重构前一致 - **状态**:已完成 - [x] TASK-FE-007:抽取页面组件 - **目标**:每个页面(Dashboard / WorkList / ReviewCenter / People / Stations / Archive / Notices)独立文件 - **验收**:`App.tsx` 变为路由级条件渲染,所有页面功能可用 - **状态**:已完成 - [x] TASK-FE-009:创建 Context(角色与 Toast) - **目标**:`RoleContext` 管理当前角色,`ToastContext` 管理全局提示 - **验收**:全局 Toast 正常工作,角色切换后所有页面响应正确 - **状态**:已完成 - [x] TASK-FE-010:抽取 FilterBar 组件 - **目标**:`FilterBar`(搜索 + 筛选下拉 + 重置)抽象为可复用组合组件 - **验收**:工作记录页和人员管理页使用同一 FilterBar - **状态**:已完成 - [x] TASK-FE-011:抽取 Pagination 组件 - **目标**:分页组件(当前 MVP 暂不使用,但预留) - **验收**:组件存在,数据量大时分页可用 - **状态**:已完成 - [x] TASK-FE-012:样式模块化 - **目标**:将 `styles.css` 按组件/页面拆分,引入 CSS 变量文件 - **验收**:构建后样式与重构前一致,无布局错位 - **状态**:已完成 - [x] TASK-FE-013:构建验证 - **目标**:`npm run build` 通过,`npm run lint` 无错误 - **依赖**:TASK-FE-001 ~ TASK-FE-012 全部完成 - **验收**:构建产物正常,dist/ 输出正确 - **状态**:已完成(2026-08-01) ### 1.2 功能增强 - [x] TASK-FE-014:人员管理增删改 - **目标**:总部可新增/编辑/停用人员;分站可编辑本站人员 - **映射**:REQ-USER-001, REQ-USER-002 - **依赖**:TASK-BE-006 - **验收**: - 总部管理员可新增人员,填写姓名/站点/职务/入站时间后保存成功 - 编辑后数据持久化,再次查询反映最新值 - 停用后该人员不可登录(后端权限拦截) - **优先级**:P0 - **状态**:已完成(2026-08-01) - [x] TASK-FE-015:记者站管理增删改 - **目标**:总部可新增/编辑/停用记者站 - **映射**:REQ-ORG-001, REQ-ORG-002 - **依赖**:TASK-BE-007 - **验收**: - 总部管理员可新增站点,填写名称/编码/地区/负责人后保存成功 - 站点列表反映最新数据 - **优先级**:P1 - **状态**:已完成(2026-08-01) - [x] TASK-FE-016:通知公告发布 - **目标**:总部可发布带附件的通知;用户可查看已读状态 - **映射**:REQ-NOTICE-003, REQ-NOTICE-004 - **依赖**:TASK-BE-008 - **验收**: - 总部可创建通知,选择接收范围(全部/站点/角色) - 通知列表显示已读/未读统计 - 重要通知需确认回执 - **优先级**:P1 - **状态**:已完成(2026-08-01) - [x] TASK-FE-017:个人中心 - **目标**:用户查看/编辑个人资料、修改密码(模拟) - **映射**:REQ-HOME-004 - **验收**:个人资料页正常展示和编辑 - **优先级**:P2 - **状态**:已完成(2026-08-01) --- ## 阶段 2:后端扩展 ### 2.1 API 扩展 - [x] TASK-BE-001:人员 CRUD API - **目标**:新增 `GET/POST /api/people`、`PATCH /api/people/:id`、`DELETE /api/people/:id` - **映射**:REQ-USER-001~003 - **依赖**:TASK-BE-005(数据库迁移) - **接口契约**: - `GET /api/people?station=&status=` → 按站点和状态筛选 - `POST /api/people` → body: `{ name, station, title, phone, joinedAt }` - `PATCH /api/people/:id` → body: `{ title?, status?, phone? }` - **验收**:curl 测试全部接口返回正确状态码和数据 - **状态**:已完成(2026-08-01) - [x] TASK-BE-002:记者站 CRUD API - **目标**:新增 `GET/POST /api/stations`、`PATCH /api/stations/:id` - **映射**:REQ-ORG-001, REQ-ORG-002 - **依赖**:TASK-BE-005 - **验收**:同上 - **状态**:已完成(2026-08-01) - [x] TASK-BE-003:通知公告 API - **目标**:新增 `GET/POST /api/notices`、`PATCH /api/notices/:id`、`GET /api/notices/:id/receipts` - **映射**:REQ-NOTICE-001~004 - **验收**: - 总部发布通知后,其他角色可见 - 已读回执记录正确 - **状态**:已完成(2026-08-01) - [x] TASK-BE-004:数据统计 API - **目标**:新增 `GET /api/stats/overview`、`GET /api/stats/records`、`GET /api/stats/scores` - **映射**:REQ-STAT-001~003 - **验收**: - 总部返回全国维度统计 - 分站返回本站维度统计 - 记者返回本人维度统计 - **状态**:已完成(2026-08-01) - [x] TASK-BE-005:数据库迁移脚本 - **目标**:将 inline schema 改为独立 migration 文件 + runner - **依赖**:无 - **验收**: - `npm run db:migrate` 执行成功 - `npm run db:seed` 可重新初始化数据 - `npm run db:reset` 清空后重新迁移 - **优先级**:P0 - **状态**:已完成(2026-08-01) ### 2.2 数据库迁移 - [x] TASK-BE-006:`people` 表迁移 - **文件**:`migrations/003_create_people.sql` - **状态**:已完成(2026-08-01) - [x] TASK-BE-007:`stations` 表迁移 - **文件**:`migrations/004_create_stations.sql` - **状态**:已完成(2026-08-01) - [x] TASK-BE-008:`notices` 和 `notice_receipts` 表迁移 - **文件**:`migrations/005_create_notices.sql` - **状态**:已完成(2026-08-01) - [x] TASK-BE-009:`audit_logs` 表索引优化 - **文件**:`migrations/006_optimize_indexes.sql` - **状态**:已完成(2026-08-01) ### 2.3 后端测试 - [x] TASK-BE-010:API 接口集成测试 - **目标**:使用 Node.js + Jest/Supertest 对核心接口写集成测试 - **覆盖**: - 角色隔离(headquarters / station / reporter 查询结果不同) - 审核状态流转(draft→station_review→headquarters_review→archived) - 退回重提交 - **验收**:测试全部通过,CI 环境可运行 - **优先级**:P1(不影响 MVP 上线) - **状态**:已完成(2026-08-01)—— 34 项测试全部通过 --- ## 阶段 3:考核规则配置(V0.2) - [x] TASK-RULE-001:考核规则数据模型 - **目标**:新增 `rules`、`rule_items`、`scores` 表 - **字段**:规则 ID、版本、指标、计分公式、上限/下限、生效时间 - **验收**:规则可 CRUD,变更历史可查 - **状态**:已完成(2026-08-01)—— 迁移 007/008 已执行 - [x] TASK-RULE-002:规则可视化配置界面 - **目标**:总部可在后台配置考核规则 - **验收**:配置发布后,新提交记录使用新规则计分 - **状态**:已完成(2026-08-01)—— RulesPage、CreateRuleModal 已完成 - [x] TASK-RULE-003:规则试算 - **目标**:规则变更前用历史数据试算,输出预估得分变化 - **验收**:试算结果可展示,不影响实际数据 - **状态**:已完成(2026-08-01)—— scores/compute API 已实现试算逻辑 - [x] TASK-RULE-004:后端 rules/scores API - **目标**:rules CRUD、activate;scores 查询、计算触发 - **验收**:54 项集成测试全部通过 - **状态**:已完成(2026-08-01) - [x] TASK-RULE-005:前端考核配置页面 - **目标**:RulesPage(列表+创建+编辑+激活);ScoresPage(评分结果+明细弹窗) - **验收**:tsc + vite build 通过,V0.2 新增 API 已接入 - **状态**:已完成(2026-08-01) - [x] TASK-RULE-008:集成测试(rules/scores API) - **验收**:54 项测试全部通过 - **状态**:已完成(2026-08-01) - [x] TASK-RULE-010:前端构建验证 - **验收**:`npm run build` 通过(tsc + vite build) - **状态**:已完成(2026-08-01) - [x] TASK-RULE-011:考核配置前端优化 - **目标**:规则预览 Drawer、指标试算交互、评分排行页面 - **验收**:RulesPage 含规则预览 Drawer + 试算评分;LeaderboardPage 完整 - **状态**:已完成(2026-08-01) - [x] TASK-RULE-006:个人中心接入考核数据 - **目标**:当前登录记者/站点查看个人考核得分与排名 - **验收**:个人中心展示考核卡片,接入 stats/scores API - **状态**:已完成(2026-08-01) - [x] TASK-RULE-007:积分排行榜 - **目标**:全站记者/站点考核得分排名 - **验收**:LeaderboardPage 按记者/站点分组排行,切换周期 - **状态**:已完成(2026-08-01) --- ## 阶段 4:ADR 架构决策 - [x] TASK-ADR-001:生成 ADR-001(技术栈选型) - **目标**:记录 React+Vite+Express+SQLite 选型理由 - **内容**:备选方案、最终决策、权衡分析 - **状态**:已完成(2026-08-01) - [x] TASK-ADR-002:生成 ADR-002(认证方案) - **目标**:记录角色模拟方案及升级路径 - **内容**:当前方案(header 传参)、二期目标(JWT+真实认证) - **风险**:header 可被伪造,仅适合内部演示 - **状态**:已完成(2026-08-01) --- ## 阶段 5:`run.md` 创建 - [x] TASK-DOC-005:创建 `run.md` - **目标**:固化所有运行、构建、迁移、测试命令 - **依赖**:TASK-BE-005(数据库迁移脚本完成) - **内容**: - 技术栈清单(Node.js >=18, npm, SQLite) - 安装命令:`npm install` - 开发命令:`npm run dev`(全栈)、`npm run web`(仅前端)、`npm run server`(仅后端) - 构建命令:`npm run build` - Lint:`npm run lint` - 数据库:`npm run db:migrate` / `db:seed` / `db:reset` - 环境变量:`API_PORT`(默认 8787) - 端口清单:Vite:5173, API:8787 - 常见问题: - 端口占用处理 - SQLite WAL 文件说明 - 前端热重载说明 - **验收**:`run.md` 存在,新人按文档可启动完整项目 - **状态**:已完成(2026-08-01) --- ## 任务依赖关系图 ``` TASK-DOC-004 ──▶ TASK-DOC-005 │ TASK-BE-005 ──┬──▶ TASK-FE-001 ──▶ TASK-FE-002 ──▶ TASK-FE-003 ──▶ TASK-FE-004 │ │ │ ▼ │ TASK-FE-005 ──▶ TASK-FE-006 ──▶ TASK-FE-007 │ │ │ ▼ │ TASK-FE-008 ──▶ TASK-FE-009 ──▶ TASK-FE-010 │ │ │ │ ▼ ▼ │ TASK-FE-011 ──▶ TASK-FE-012 ──▶ TASK-FE-013 │ ├──▶ TASK-BE-001 ──▶ TASK-FE-014 ├──▶ TASK-BE-002 ──▶ TASK-FE-015 ├──▶ TASK-BE-003 ──▶ TASK-FE-016 ├──▶ TASK-BE-004 ├──▶ TASK-BE-006 ├──▶ TASK-BE-007 ├──▶ TASK-BE-008 └──▶ TASK-BE-009 TASK-BE-010 ──(并行,不阻塞主要流程) TASK-ADR-001, TASK-ADR-002 ──(随时可做) ``` --- ## 优先级排序(建议执行顺序) ### 第一梯队(P0,必须完成) 1. `TASK-DOC-004` — 确认任务文档(本任务) 2. `TASK-DOC-005` — 创建 `run.md` 3. `TASK-FE-001` — 前端目录结构 4. `TASK-FE-002` — Layout 组件 5. `TASK-FE-005` — RecordTable 抽取 6. `TASK-FE-006` — CreateRecordModal / RecordDrawer 抽取 7. `TASK-FE-007` — 页面组件拆分 8. `TASK-FE-013` — 构建验证 ### 第二梯队(P1,MVP 完善) 9. `TASK-FE-014` — 人员管理增删改 10. `TASK-BE-005` — 数据库迁移脚本 11. `TASK-BE-006` — people 表迁移 12. `TASK-BE-001` — 人员 CRUD API 13. `TASK-BE-007` — stations 表迁移 14. `TASK-BE-002` — 记者站 CRUD API 15. `TASK-FE-015` — 记者站管理页面 16. `TASK-BE-008` — notices 表迁移 17. `TASK-BE-003` — 通知公告 API 18. `TASK-FE-016` — 通知发布页面 19. `TASK-BE-009` — 索引优化 ### 第三梯队(P1/P2,增强功能) 20. `TASK-BE-004` — 数据统计 API 21. `TASK-FE-010` — FilterBar 抽取 22. `TASK-FE-011` — Pagination 抽取 23. `TASK-FE-017` — 个人中心 24. `TASK-BE-010` — 后端集成测试 25. `TASK-ADR-001` — ADR-001 补录 26. `TASK-ADR-002` — ADR-002 创建 ### 第四梯队(V0.2 考核规则) > 关联变更文档:`pmdocs/changes/2026-08-01-001-V0.2考核规则配置.md` > 依赖:V0.1 MVP 全部完成(TASK-BE-010 集成测试通过) **阶段 A:数据模型与迁移** 27. `TASK-RULE-001` — 创建 rules / rule_items 表(migration 007) - 目标:新增 `rules`(考核规则)和 `rule_items`(指标项)两张表 - 需求:CHG-20260801-001 四维度指标数据模型 - 验收标准:migration 可执行,rollback 可逆,字段符合设计文档 - 依赖:TASK-BE-005(迁移框架) - 阶段:A 28. `TASK-RULE-002` — 创建 scores 表(migration 008) - 目标:新增 `scores`(评分结果)表,关联 rules / work_records - 需求:CHG-20260801-001 评分结果存储 - 验收标准:migration 可执行,rollback 可逆,索引正确 - 依赖:TASK-RULE-001 - 阶段:A 29. `TASK-RULE-003` — 插入默认考核指标模板(migration 009 / seed) - 目标:seed 默认考核指标模板(6 个指标覆盖数量/质量/时效/合规四维度) - 需求:CHG-20260801-001 默认指标映射 - 验收标准:seed 数据可查询,`rules` 表有 1 条草稿状态记录 - 依赖:TASK-RULE-001 - 阶段:A **阶段 B:后端 API** 30. `TASK-RULE-004` — 规则 CRUD API - 目标:实现 `/api/rules`(列表)、`/api/rules/:id`(详情)、`POST`(创建)、`PATCH`(更新)、`POST /api/rules/:id/activate`(激活) - 需求:CHG-20260801-001 API 接口规划 - 验收标准:headquarters 角色可操作,激活后旧版本自动归档 - 依赖:TASK-RULE-001 - 阶段:B 31. `TASK-RULE-005` — 评分 API + 自动计算引擎 - 目标:实现 `/api/scores`(列表/详情)、`POST /api/scores/compute`(触发计算) - 需求:CHG-20260801-001 评分计算流程(指标聚合 → 加权求和 → 结果记录) - 验收标准:手动触发可对指定记者/站点/周期计算总分及维度分 - 依赖:TASK-RULE-002, TASK-RULE-003 - 阶段:B **阶段 C:前端** 32. `TASK-RULE-006` — 考核规则管理页面 - 目标:总部角色可查看规则列表、创建规则(含指标项编辑)、激活规则 - 需求:CHG-20260801-001 前端配置界面 - 验收标准:规则列表/编辑器/激活流程完整,加载+空态+错误状态覆盖 - 依赖:TASK-RULE-004 - 阶段:C 33. `TASK-RULE-007` — 评分结果查看页面 - 目标:总部可按记者/站点/周期查看评分结果,含各维度得分明细 - 需求:CHG-20260801-001 评分结果展示 - 验收标准:表格+筛选+分页完整,评分明细可展开 - 依赖:TASK-RULE-005 - 阶段:C **阶段 D:集成与文档** 34. `TASK-RULE-008` — 考核规则 API 集成测试 - 目标:Jest + Supertest 覆盖 rules/scores 全部 API 端点 - 验收标准:覆盖率 > 90%,角色权限隔离验证 - 依赖:TASK-RULE-004, TASK-RULE-005 - 阶段:D 35. `TASK-RULE-009` — `run.md` 更新(V0.2 数据库结构 + API) - 目标:补充 V0.2 新增表结构、API 接口到 `run.md` - 依赖:TASK-RULE-001, TASK-RULE-002, TASK-RULE-004, TASK-RULE-005 - 阶段:D 36. `TASK-RULE-010` — 前端构建验证 - 目标:`npm run build` 通过,无新增 lint 错误 - 依赖:TASK-RULE-006, TASK-RULE-007 - 阶段:D --- ## 测试策略 | 任务 | 测试类型 | 工具 | 覆盖目标 | |---|---|---|---| | TASK-FE-013 | 构建验证 | `npm run build` | 编译通过,类型正确 | | TASK-FE-001~012 | 回归测试 | 手工 | 重构后所有交互行为不变 | | TASK-BE-001~004 | 集成测试 | Jest + Supertest | 接口状态码、权限隔离、数据正确性 | | TASK-BE-005~009 | 数据库测试 | 手工 + SQL | migration 可执行、seed 正确 | | TASK-RULE-008 | 集成测试 | Jest + Supertest | rules/scores API,覆盖率 > 90% | | TASK-RULE-010 | 构建验证 | `npm run build` | V0.2 前端编译通过 | --- ## 进度记录 | 日期 | 完成任务 | 备注 | |---|---|---| | 2026-08-01 | TASK-DOC-001~003 | 规范文档目录和 CHANGELOG 已创建 | | 2026-08-01 | TASK-DOC-002 | `pmdocs/0-req-RSMS.md` 已创建 | | 2026-08-01 | TASK-DOC-003 | `pmdocs/1-prd-RSMS.md` 已创建 | | 2026-08-01 | TASK-DOC-004 | `pmdocs/2-task-RSMS.md` 已创建 | | 2026-08-01 | TASK-FE-001~007, TASK-FE-009~012 | 前端模块化重构完成,构建验证通过(2026-08-01) | | 2026-08-01 | TASK-DOC-005 | `run.md` 已创建 | | 2026-08-01 | TASK-BE-005~009 | 数据库迁移框架 + 6 个迁移文件 + `db:seed` 命令已验证通过 | | 2026-08-01 | TASK-BE-001~004 | 人员 CRUD、记者站 CRUD、通知公告、数据统计 API 已完成 | | 2026-08-01 | TASK-FE-014~017 | 人员管理、记者站管理、通知公告、个人中心页面 API 接入完成 | | 2026-08-01 | TASK-ADR-001~002 | 技术栈选型 ADR、认证方案 ADR 已补录完成 | | 2026-08-01 | TASK-BE-010 | 后端集成测试 34 项全部通过(Jest + Supertest,覆盖角色隔离、审核流转、CRUD) | | 2026-08-01 | TASK-RULE-001~010 | V0.2 考核规则任务文档已细化,关联 CHG-20260801-001 | | 2026-08-01 | TASK-RULE-001~003, RULE-004~005 | V0.2 考核规则后端 API + 前端页面已完成,集成测试 54 项全部通过,构建验证通过 | | 2026-08-01 | TASK-RULE-009 | `run.md` 已更新(测试命令、迁移管理、V0.2 表结构与 API 文档) | | 2026-08-01 | TASK-RULE-006/011 | 个人中心接入考核数据 + 考核配置前端优化(含规则预览 Drawer + 试算评分 + LeaderboardPage) |