Files
ccdi/openspec/changes/add-project-management/specs/project-management/spec.md
2026-01-27 17:09:32 +08:00

215 lines
7.0 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.
# Spec: 项目管理能力
## 概述
本规范定义了项目管理模块的核心能力,包括项目的创建、查询、状态管理和归档功能。
---
## ADDED Requirements
### Requirement: 项目列表查询
系统 MUST 允许用户查询所有项目列表,支持按项目名称进行模糊搜索。
#### Scenario: 查询所有项目
**Given** 用户已登录系统并具有项目查看权限
**When** 用户进入项目管理页面
**Then** 系统显示所有项目列表,包括项目名称、描述、创建时间、状态、目标人数、预警人数
#### Scenario: 按名称搜索项目
**Given** 用户在项目管理页面
**When** 用户在搜索框输入"Q1初核"并点击搜索
**Then** 系统显示所有包含"Q1初核"的项目
#### Scenario: 项目状态标识
**Given** 项目列表中有多个不同状态的项目
**When** 用户查看项目列表
**Then** 进行中的项目显示蓝色标签,已完成的项目显示绿色标签,已归档的项目显示灰色标签
#### Scenario: 预警人数动态更新
**Given** 存在状态为"进行中"的项目
**When** 用户刷新项目列表
**Then** 预警人数显示最新的统计值
---
### Requirement: 创建新项目
系统 MUST 允许用户创建新的初核项目,填写项目基本信息并选择参与人员。
#### Scenario: 创建标准项目
**Given** 用户在项目管理页面
**When** 用户点击"新建项目"按钮
**Then** 系统打开新增项目弹窗,包含项目名称、项目描述、时间范围、人员选择字段
#### Scenario: 必填字段验证
**Given** 用户新增项目时未填写项目名称
**When** 用户点击"确定"按钮
**Then** 系统提示"项目名称不能为空"
#### Scenario: 至少选择一名人员
**Given** 用户新增项目时未选择任何人员
**When** 用户点击"确定"按钮
**Then** 系统提示"请至少选择一名参与人员"
#### Scenario: 创建成功
**Given** 用户填写了完整的项目信息
**When** 用户点击"确定"按钮
**Then** 系统创建项目并提示"新增成功",项目列表刷新显示新项目
---
### Requirement: 导入历史项目
系统 MUST 允许用户从已完成的历史项目导入配置,快速创建新项目。
#### Scenario: 查看历史项目列表
**Given** 用户点击"导入历史项目"按钮
**When** 系统打开导入历史项目弹窗
**Then** 系统显示所有已完成状态的历史项目列表
#### Scenario: 选择历史项目
**Given** 用户在导入历史项目弹窗中
**When** 用户选择一个历史项目
**Then** 系统显示该项目的详细信息(人员范围、配置等)
#### Scenario: 复制配置创建新项目
**Given** 用户选择了历史项目并填写了新项目名称
**When** 用户点击"确定"按钮
**Then** 系统创建新项目,复制原项目的人员和配置,状态为"进行中"
---
### Requirement: 项目状态管理
系统 MUST 支持项目状态的流转和管理。
#### Scenario: 进入进行中的项目
**Given** 存在状态为"进行中"的项目
**When** 用户点击"进入项目"按钮
**Then** 系统跳转到该项目的工作台页面
#### Scenario: 查看已完成项目结果
**Given** 存在状态为"已完成"的项目
**When** 用户点击"查看结果"按钮
**Then** 系统跳转到该项目的初核结果总览页面
#### Scenario: 重新分析已完成项目
**Given** 存在状态为"已完成"的项目
**When** 用户点击"重新分析"按钮
**Then** 系统基于原有数据重新运行风险模型,更新预警人数和结果
#### Scenario: 重新分析权限控制
**Given** 用户没有重新分析的权限
**When** 用户查看项目列表
**Then** 不显示"重新分析"按钮
---
### Requirement: 项目归档
系统 MUST 允许用户将已结束的项目归档并生成PDF归档文件。
#### Scenario: 归档已完成项目
**Given** 存在状态为"已完成"的项目
**When** 用户点击"归档"按钮
**Then** 系统生成PDF归档文件更新项目状态为"已归档"
#### Scenario: 归档状态校验
**Given** 存在状态为"进行中"的项目
**When** 用户尝试归档该项目
**Then** 系统提示"只能归档已完成的项目"
#### Scenario: 归档文件下载
**Given** 存在已归档的项目
**When** 用户点击"下载归档"按钮
**Then** 系统下载该项目的PDF归档文件
#### Scenario: 归档项目不显示在默认列表
**Given** 存在已归档的项目
**When** 用户查看项目列表
**Then** 默认不显示已归档的项目
#### Scenario: 查看归档项目
**Given** 用户想查看已归档的项目
**When** 用户勾选"显示已归档"选项
**Then** 系统在列表中显示已归档的项目
---
### Requirement: 项目数据模型
系统 MUST 使用正确的数据结构存储项目信息。
#### Scenario: 项目基础信息存储
**Given** 创建新项目
**When** 系统保存项目数据
**Then** 数据库存储项目ID、项目名称、项目描述、创建时间、状态、目标人数、预警人数
#### Scenario: 项目人员关联存储
**Given** 项目包含多名参与人员
**When** 系统保存项目数据
**Then** 人员在关联表中存储包含项目ID、人员ID、人员姓名冗余
#### Scenario: 状态枚举值
**Given** 项目状态字段
**When** 系统存储项目状态
**Then** 状态值为:'0'进行中、'1'已完成、'2'已归档
---
### Requirement: API接口规范
系统 MUST 提供符合RESTful规范的API接口。
#### Scenario: 查询项目列表API
**Given** 前端需要获取项目列表
**When** 调用 `GET /dpc/project/list?projectName=xxx&pageNum=1&pageSize=10`
**Then** 返回分页数据包含total、rows、code、msg
#### Scenario: 创建项目API
**Given** 前端需要创建新项目
**When** 调用 `POST /dpc/project` 并传递项目数据
**Then** 返回操作结果code为200表示成功
#### Scenario: 归档项目API
**Given** 前端需要归档项目
**When** 调用 `POST /dpc/project/archive/{projectId}`
**Then** 系统执行归档操作并返回结果
#### Scenario: 权限校验
**Given** 用户没有相应的权限
**When** 调用需要权限的API
**Then** 返回403错误提示无权限访问
---
### Requirement: 前端用户体验
系统 MUST 提供友好的用户交互体验。
#### Scenario: 响应式布局
**Given** 用户使用不同分辨率的设备
**When** 用户访问项目管理页面
**Then** 页面布局自适应,所有功能可用
#### Scenario: 操作反馈
**Given** 用户执行操作
**When** 操作成功或失败
**Then** 系统显示明确的成功或错误提示消息
#### Scenario: 加载状态
**Given** 数据加载需要时间
**When** 用户请求数据
**Then** 系统显示loading加载状态
---
## 相关能力
- **用户管理能力**:依赖用户系统获取人员信息
- **部门管理能力**:依赖部门系统进行部门范围选择
- **文件管理能力**依赖文件上传功能处理项目附件和归档PDF
- **项目工作台能力**:进入项目后跳转到工作台(后续实现)
- **初核结果能力**:查看结果跳转到结果页(后续实现)