307 lines
12 KiB
Markdown
307 lines
12 KiB
Markdown
# 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 SC,Songti 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
|
||
- **图表**:Recharts(AreaChart)
|
||
- **图标**:Lucide React
|
||
- **样式**:纯 CSS(含响应式)
|
||
- **状态**:React useState / useEffect(当前),Redux Toolkit(预留)
|
||
- **路由**:条件渲染(当前),React Router(后续)
|
||
|
||
### 9.2 后端
|
||
|
||
- **运行时**:Node.js
|
||
- **框架**:Express.js
|
||
- **数据库**:SQLite(WAL 模式)
|
||
- **进程**:`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 | 已决策 | |