# 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
- **项目工作台能力**：进入项目后跳转到工作台（后续实现）
- **初核结果能力**：查看结果跳转到结果页（后续实现）
