Files
ReporterStationManagementSy…/pmdocs/1-prd-RSMS.md
T
2026-08-01 23:09:49 +08:00

307 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PRD-RSMS-001:全国记者站管理系统产品需求文档
> 文档版本:v1.0
> 状态:待确认
> 编制日期:2026-08-01
> 项目缩写:RSMS
## 1. 产品概述与定位
全国记者站管理系统(RSMS)是一个面向全国 37 个记者站的管理平台,服务于总部管理员、分站负责人和记者三类角色。系统以工作记录填报和分级审核为业务核心,构建统一的人员、考核、档案和通知管理体系。
### 1.1 产品定位
- **目标**:替代线下/Excel 管理方式,实现业务线上化、考核标准化、数据可追溯。
- **用户**:总部约 5-10 名管理员;37 个分站各 1-2 名负责人;约 500 名记者。
- **核心价值**:减少重复填报、统一审核标准、提升考核透明度、积累可分析数据。
### 1.2 成功指标
| 指标 | 目标值 |
|---|---|
| 工作记录线上填报率 | >= 95% |
| 审核平均处理时长 | <= 24 小时 |
| 考核数据可追溯覆盖率 | 100% |
| 系统可用性 | >= 99.5% |
---
## 2. 用户画像与核心场景
### 场景 1:记者填报工作记录(SCENE-001)
**人物**:林晓,北京记者站记者,2021 年入站。
**痛点**:此前通过微信群或邮件提交,格式不统一,审核进度靠追问,档案整理靠人工。
**解法**:移动/PC 端随时填报,自动进入审核流,实时看到审核状态,归档记录自动进入个人档案。
### 场景 2:分站负责人初审(SCENE-002
**人物**:苏明远,北京记者站负责人。
**痛点**:接收材料格式混乱,退回修改反复沟通,统计靠人工汇总。
**解法**:统一格式接收,核验后一键通过或退回,退回时填写意见,作者修改后自动推送,全站数据自动汇总。
### 场景 3:总部管理员复核与监管(SCENE-003)
**人物**:林致远,总部考核管理员。
**痛点**:37 个站数据分散,统计口径不一致,复核工作量大,考核结果解释成本高。
**解法**:分类复核(高价值逐条 + 普通抽查),自动计分和排名,审核轨迹可查,报表一键导出。
### 场景 4:记者查询个人档案(SCENE-004)
**人物**:林晓,想查看自己本季度的考核得分和全年排名。
**痛点**:历史记录分散在各个群聊和文件中,不知道自己排名。
**解法**:个人档案聚合全部归档记录,支持按类型/时间筛选,显示年度汇总和趋势。
---
## 3. 功能清单与优先级
使用 MoSCoW 标注:`Must` = P0`Should` = P1`Could` = P2。
| 编号 | 功能 | 优先级 | 映射需求 |
|---|---|---|---|
| PRD-FUNC-001 | 三角色模拟登录与权限隔离 | Must | REQ-AUTH-001~003 |
| PRD-FUNC-002 | 工作记录新建(7 种类型) | Must | REQ-WORK-001~005 |
| PRD-FUNC-003 | 工作记录列表(搜索/筛选/分页) | Must | REQ-WORK-002 |
| PRD-FUNC-004 | 分站初审(通过/退回/评分) | Must | REQ-ASSESS-001~002 |
| PRD-FUNC-005 | 总部复核(确认/调整/退回) | Must | REQ-ASSESS-003~005 |
| PRD-FUNC-006 | 审核流程留痕(audit_log | Must | REQ-ASSESS-004 |
| PRD-FUNC-007 | 个人电子档案 | Must | REQ-PROFILE-001~003 |
| PRD-FUNC-008 | 工作台仪表盘(指标卡+趋势图+排名) | Must | REQ-STAT-001~003 |
| PRD-FUNC-009 | 通知公告(只读) | Must | REQ-NOTICE-001~002 |
| PRD-FUNC-010 | 审核中心(待办聚合) | Must | REQ-NOTICE-002 |
| PRD-FUNC-011 | 人员管理(增删改查) | Must | REQ-USER-001~003 |
| PRD-FUNC-012 | 记者站管理(增删改查) | Must | REQ-ORG-001 |
| PRD-FUNC-013 | 通知公告发布(富文本/附件/回执) | Should | REQ-NOTICE-003~004 |
| PRD-FUNC-014 | 考核规则可视化配置 | Should | REQ-ASSESS-006 |
| PRD-FUNC-015 | 数据统计报表(导出) | Should | REQ-STAT-001~003 |
| PRD-FUNC-016 | 申诉与复议 | Could | — |
| PRD-FUNC-017 | 全国地图分布 | Could | REQ-ORG-003 |
| PRD-FUNC-018 | 个人能力画像 | Could | — |
---
## 4. 关键流程
### 4.1 工作记录全生命周期
```
记者新建 → 保存草稿 / 直接提交
↓提交
待分站审核 ← 分站负责人处理
│通过 │退回
↓ ↓
待总部复核 已退回 → 记者修改 → 重新提交
│通过
已归档 → 自动进入个人档案 + 统计汇总
```
### 4.2 数据权限控制流
```
请求进入 → 后端读取 x-user-role header
headquarters: 返回全国全部数据
station: WHERE station = '所属站'
reporter: WHERE reporter = '本人姓名'
```
---
## 5. 角色权限矩阵
| 功能 | 总部管理员 | 分站负责人 | 记者 |
|---|---|---|---|
| 站点管理(查) | 全部 | 本站 | 本站 |
| 站点管理(增删改) | 是 | 否 | 否 |
| 人员管理(查) | 全部 | 本站 | 本人 |
| 人员管理(增删改) | 全部 | 本站 | 否 |
| 工作记录(填报) | 否 | 否(可代填) | 是 |
| 工作记录(查看) | 全部 | 本站 | 本人 |
| 分站初审 | 否 | 是(本站) | 否 |
| 总部复核 | 是 | 否 | 否 |
| 电子档案(查看) | 全部 | 本站 | 本人 |
| 通知公告(发布) | 是 | 否 | 否 |
| 通知公告(查看) | 全部 | 本站 | 本人 |
| 统计报表(全局) | 是 | 否 | 否 |
| 统计报表(本站) | 是 | 是 | 否 |
| 统计成绩(本人) | 是 | 是 | 是 |
| 系统设置 | 是 | 否 | 否 |
---
## 6. UI/UX 设计原则
### 6.1 整体风格
- **配色**:主色 #b42318(红),强调色 #4ba66a(绿/成功),背景 #f5f4f1(米白)
- **字体**Noto Sans SCSongti SC(标题)
- **图标**Lucide Icons
- **布局**:侧边栏固定 238px + 顶部栏 + 内容区
- **交互**Toast 反馈、Drawer 侧滑详情、Modal 弹窗表单
### 6.2 页面导航结构
```
工作台(dashboard
├─ 指标卡(本月记录 / 待处理 / 归档 / 得分)
├─ 趋势图(近6月工作量 AreaChart
├─ 排名(站点/类型)
└─ 待办(待审核 / 被退回 / 截止提醒)
工作记录(work
├─ 搜索 + 状态筛选 + 类型筛选
└─ 记录列表(点击打开详情抽屉)
审核中心(review)[总部/分站]
├─ 审核摘要(待办数 / 已处理 / 平均时长)
└─ 待审列表(通过 / 退回)
人员管理(people)[总部/分站]
└─ 人员列表 + 筛选 + 新增
记者站管理(stations[总部]
└─ 站点卡片网格
电子档案(archive
└─ 个人档案聚合页 + 历史归档列表
通知公告(notices
└─ 公告列表 + 详情侧边
```
### 6.3 统一交互模式
| 场景 | 组件 | 说明 |
|---|---|---|
| 列表加载中 | 顶部进度条动画 | 红色 2px 细条 |
| 列表为空 | EmptyState + 对应图标 | 居中文字提示 |
| 操作失败 | Toast 弹窗 | 2.4s 自动消失 |
| 操作成功 | Toast 弹窗 + 图标 | 绿色勾选图标 |
| 表单校验错误 | 输入框红框 + 错误提示 | 实时校验 |
| 危险操作(删除/退回) | ConfirmDialog 或二次确认 | 明确后果 |
| 分页 | 无(当前为全量加载) | 列表数据量小 |
| 搜索防抖 | 300ms debounce | 工作记录搜索 |
### 6.4 响应式断点
| 断点 | 布局变化 |
|---|---|
| > 1100px | 标准布局(指标4列、站点3列) |
| 761-1100px | 指标2列、站点2列、侧栏不变 |
| <= 760px | 侧栏变为抽屉,汉堡菜单触发,指标2列,站点1列,表单全宽 |
| <= 430px | 指标2列,保持最小可读性 |
---
## 7. 公共组件抽取规划
| 组件 | 类型 | 适用场景 | 输入状态 | 输出事件 | 使用页面 | 优先级 |
|---|---|---|---|---|---|---|
| `StatusBadge` | 基础组件 | 工作记录状态展示 | `status: WorkStatus` | — | 全局 | Must(已存在于代码) |
| `MetricCard` | 基础组件 | 指标数据展示 | `icon / label / value / delta / color` | — | 工作台 | Must(已存在) |
| `PanelHeader` | 组合组件 | 面板标题栏 | `title / subtitle / action / onAction` | `onAction` | 工作台/审核/档案 | Must(已存在) |
| `RecordTable` | 领域组件 | 工作记录列表 | `records / onSelect / compact / review` | `onSelect` | 工作/审核/档案 | Must(已存在) |
| `RecordDrawer` | 领域组件 | 记录详情+审核 | `record / role / onUpdate` | `onUpdate` | 工作/审核 | Must(已存在) |
| `CreateModal` | 领域组件 | 新建工作记录 | `onClose / onSubmit` | `onSubmit` | 工作台/工作记录 | Must(已存在) |
| `FilterBar` | 组合组件 | 列表筛选栏 | `searchPlaceholder / filters / onFilter` | `onFilter / onReset` | 工作记录/人员 | Should |
| `Pagination` | 基础组件 | 列表分页 | `page / pageSize / total` | `onChange` | 列表页面 | Could(当前 MVP 未分页) |
| `NotificationBadge` | 基础组件 | 导航待办角标 | `count` | — | 侧边栏导航 | Must(已存在) |
| `EmptyState` | 基础组件 | 空状态展示 | `icon / text` | — | 列表空时 | Must(已存在) |
| `Toast` | 基础组件 | 操作反馈 | `message`(自动消失) | — | 全局 | Must(已存在) |
| `PageHeading` | 组合组件 | 页面标题区 | `title / description / action / onAction` | `onAction` | 所有内容页 | Should(已存在但未抽取) |
| `RoleSwitcher` | 领域组件 | 角色模拟切换 | `role / onChange` | `onChange` | 顶部栏 | Must(已存在) |
---
## 8. 版本规划
### 8.1 MVP(当前版本 V0.1
已实现(代码层面):
- 角色模拟登录(header 传参)
- 工作记录 CRUD(前端 + 后端 API)
- 分站初审 / 总部复核流程
- 审核留痕(audit_log
- 7 个页面/组件
- SQLite 数据库
- Express API 服务
待补齐(文档层面):
- [ ] `pmdocs/0-req-RSMS.md`(本文档)
- [ ] `pmdocs/1-prd-RSMS.md`(本文档)
- [ ] `pmdocs/2-task-RSMS.md`
- [ ] `run.md`
- [ ] 前端模块化重构
### 8.2 二期
- 通知公告发布(富文本 + 附件 + 回执)
- 人员管理增删改(当前仅展示)
- 记者站管理增删改(当前仅展示)
- 考核规则配置界面
- 数据统计专项页面
- 个人中心功能完善
### 8.3 三期
- 申诉与复议流程
- 全国地图记者站分布
- 个人能力画像
- 外部系统集成
- 自动化测试
---
## 9. 技术架构概览
### 9.1 前端
- **框架**React 18 + TypeScript
- **构建**Vite
- **图表**RechartsAreaChart
- **图标**Lucide React
- **样式**:纯 CSS(含响应式)
- **状态**React useState / useEffect(当前),Redux Toolkit(预留)
- **路由**:条件渲染(当前),React Router(后续)
### 9.2 后端
- **运行时**Node.js
- **框架**Express.js
- **数据库**SQLiteWAL 模式)
- **进程**`node --watch` 开发热重载
### 9.3 API 概览
| 方法 | 路径 | 权限 | 说明 |
|---|---|---|---|
| GET | `/api/health` | 公开 | 健康检查 |
| GET | `/api/records` | 角色隔离 | 查询工作记录 |
| POST | `/api/records` | reporter/station | 新建记录 |
| PATCH | `/api/records/:id/review` | station/hq | 审核操作 |
| GET | `/api/records/:id/audit` | 角色隔离 | 流转记录 |
---
## 10. 风险与依赖
| 风险 | 影响 | 缓解措施 |
|---|---|---|
| SQLite 并发写入冲突 | 高 | WAL 模式已启用;高并发时考虑迁移 PostgreSQL |
| 前端单文件维护性差 | 中 | 二期重构为模块化结构 |
| 无自动化测试 | 中 | 二期引入 Vitest + Playwright |
| 角色模拟安全性不足 | 高 | 二期接入真实认证体系 |
| 考核规则硬编码 | 中 | 二期实现规则可视化配置 |
---
## 11. 关键决策记录索引
| 决策 | ADR 编号 | 状态 |
|---|---|---|
| 前端技术栈(React+Vite | ADR-001 | 已决策 |
| 后端技术栈(Express+SQLite | ADR-001 | 已决策 |
| 认证方案(角色模拟) | ADR-002 | 待确认 |
| 数据库选型(SQLite | ADR-001 | 已决策 |