# 科技项目与活动 — 功能需求

## 1. 文档说明

| 项 | 说明 |
| --- | --- |
| 模块名称 | 科技项目与活动（科技项目指南） |
| 目标 | 在业务后台维护科技项目申报指南，支持录入、查询、发布与下架，为申报方提供规范、可检索的项目信息 |
| 关联系统 | 业务后台；面向公众或申报端的展示入口由产品统一规划，**本模块**侧重指南内容的**后台维护与发布控制** |
| 修订依据 | 同目录 `科技项目与活动-草稿.md`、原型图 `科技项目与活动.png` |

本文档仅描述**功能需求与业务规则**，不涉及库表结构、接口路径、请求体字段命名、HTTP 报文及技术栈选型。

---

## 2. 术语与枚举

### 2.1 项目类型（资讯类别编码，单选）

项目类型持久化与接口传参均为 **资讯类别编码**（`varchar`）。可选范围由资讯类别 **`parentCode=002`**（科技项目指南）的直接下级维护：

| 编码 | 名称（示例） |
| --- | --- |
| `002001` | 高新技术 |
| `002002` | 农业科技 |
| `002003` | 社会发展 |
| `002004` | 基础研究 |

新增/修改时编码须在上述接口返回的有效集合内；列表筛选为 **编码精确匹配**。

### 2.2 发布状态

每条指南独立维护**发布状态**，与业务字段内容无关：

| 取值 | 含义概要 |
| --- | --- |
| **未发布** | 新建保存、或下架回流后的状态；仅后台可见（或按产品约定对内部角色可见）；可编辑、可删除、可执行发布 |
| **已发布** | 已对外生效的指南；**不可修改**、**不可删除**，须先下架后再维护 |

**下架**后回到 **未发布**，可再次编辑、删除或发布，**无须新建**一条记录。

### 2.3 申报时间

- 由 **申报开始日期**、**申报截止日期** 两个自然日组成，格式均为 **YYYY-MM-DD**。  
- **业务含义：** 仅在该闭区间内（含起止日，除非产品另行约定「截止日不含当日」）受理申报；区间外指南仍可展示为「已结束申报」或隐藏申报入口，由对外展示规则单独定义。  
- **校验：** 申报截止日期 **≥** 申报开始日期。

### 2.4 记录说明

本模块管理对象为**一条科技项目指南**，包含项目基本信息、申报说明、负责人与联系方式，以及可选的附件与封面。指南通过 **§2.2 发布状态** 控制是否对外展示及后台改删权限。

---

## 3. 功能范围

- 科技项目指南的**新增、修改、删除、分页列表查询、详情查看**  
- 项目类型、申报时间、文本与附件/封面等字段的录入与校验  
- **发布、下架**及发布状态约束下的操作权限  
- 按**项目名称**模糊、**项目类型**精确匹配的列表筛选  
- 面向使用方的业务错误与校验提示（见第 **8** 章）  

**不在本模块范围（除非后续单独立项）：** 在线申报表单、审批流、申报人数统计、消息推送、与补贴发放等业务单据的自动关联等。

---

## 4. 业务流程概览

```mermaid
flowchart TD
    A[新增指南] --> B{保存方式}
    B -->|仅保存| C[未发布]
    B -->|保存并发布| D[已发布]
    C --> E[列表查询/筛选]
    D --> E
    E --> F[查看详情]
    E --> G[修改]
    E --> H[删除]
    E --> I[发布]
    E --> J[下架]
    G --> C
    H --> E
    I --> D
    J --> C
    C --> I
    D --> J
    F --> E
```

1. **新建：** 填写指南信息 → **仅保存**则处于 **未发布**；若在表单选择 **保存并发布** 且校验通过，则直接进入 **已发布** 并记录发布日期。  
2. **维护：** 仅 **未发布** 指南可修改全部可编辑字段；保存后仍为未发布（除非再次执行发布）。  
3. **发布：** **未发布** 且数据完整合法 → **已发布**，记录**发布日期**（见 **§5.6**）。  
4. **下架：** **已发布** → **未发布**，结束对外展示，可再编辑、再发布。  
5. **查询：** 按项目名称、项目类型筛选，分页浏览。  
6. **删除：** 仅 **未发布** 可删；**已发布** 须先下架。

---

## 5. 详细功能需求

### 5.1 新增科技项目指南

| 字段 | 规则 |
| --- | --- |
| 项目名称 | **必填**；长度 **1～20** 个字符（按字符计，与项目全局一致） |
| 项目类型 | **必填**；单选，取值限定为 **§2.1** |
| 项目简介 | **必填**；长度 **1～50** 个字符 |
| 申报对象 | **必填**；说明面向的申报主体（如企业、合作社、科研院所等）；长度建议 **1～200** 个字符（若产品需更长，单独评审后调整上限） |
| 申报开始日期 | **必填**；格式 **YYYY-MM-DD** |
| 申报截止日期 | **必填**；格式 **YYYY-MM-DD**；须 **≥ 申报开始日期**（**§2.3**） |
| 项目周期 | **必填**；说明项目实施或执行周期（如「12 个月」「2026-01 至 2026-12」）；长度建议 **1～50** 个字符 |
| 申报条件 | **必填**；多行文本；**无字数上限**（界面宜提示过长内容的影响） |
| 申报流程 | **必填**；多行文本；**无字数上限** |
| 负责人 | **必填**；长度 **1～10** 个字符 |
| 联系方式 | **必填**；须为合法**中国大陆手机号**（11 位、1 开头等，与项目全局手机号规则一致） |
| 附件材料 | **选填**；**单个**文件上传；允许后缀：`pdf`、`md`、`doc`、`docx`、`xls`、`xlsx`、`ppt`、`pptx`；单文件 ≤ **30 MB** |
| 封面 | **选填**；**单个**图片上传；允许后缀：`jpg`、`jpeg`、`png`（可扩展 `webp`）；单文件 ≤ **10 MB** |

**保存方式（与原型一致）：**

| 操作 | 行为 |
| --- | --- |
| **确定 / 保存** | 校验通过后保存，**发布状态为未发布**；不写入对外发布日期（或发布日期为空） |
| **发布**（表单内，如橙色按钮） | 校验通过后保存，**发布状态为已发布**，并记录**发布日期**为操作当日（**§5.6**） |
| **取消** | 关闭表单，不保存 |

**必填字段汇总：** 项目名称、项目类型、项目简介、申报对象、申报开始日期、申报截止日期、项目周期、申报条件、申报流程、负责人、联系方式。

**校验摘要：**

| 规则 | 说明 |
| --- | --- |
| 长度 | 各字段超出上限时拒绝保存并提示 |
| 枚举 | 项目类型须为 **§2.1** 有效资讯类别编码之一 |
| 申报时间 | 开始、截止日期格式合法；截止 **≥** 开始 |
| 手机号 | 不符合规则时拒绝保存 |
| 附件/封面 | 后缀、大小不符时拒绝上传或拒绝保存；未上传附件/封面时允许保存（选填） |

**保存结果：** 生成一条指南记录，初始为 **未发布**（仅保存）或 **已发布**（保存并发布），可被列表查询、查看；未发布记录可继续修改、删除或发布。

---

### 5.2 查询科技项目指南列表

- **项目名称：** **模糊**匹配；未输入则不过滤。  
- **项目类型：** **精确**匹配；未选择则不过滤。  
- **发布状态（建议）：** **精确**匹配（未发布 / 已发布）；未选择则不过滤；便于运营区分待发布与已上线指南。  
- **分页：** 默认 **每页 20 条**，首页为第一页；单页条数上限与项目列表通用规范一致。  
- **排序：** 默认按 **发布日期倒序**（已发布且日期较新者靠前）；未发布记录可按 **创建时间倒序** 排在已发布之后，或统一按 **创建时间倒序**（产品择一，全文一致）。  

**列表宜展示：** 项目名称、项目类型、申报对象、申报开始日期、申报截止日期、项目周期、负责人、联系方式、**发布日期**（未发布可为「—」或空）、**发布状态**，以及操作列。

**操作列与 §6 矩阵一致：**

| 发布状态 | 行内操作 |
| --- | --- |
| 未发布 | 查看、发布、编辑、删除 |
| 已发布 | 查看、下架 |

---

### 5.3 修改科技项目指南

- **状态约束：** 仅 **未发布** 指南允许进入编辑并保存。  
- **已发布：** **不可修改**任何业务字段；须先 **下架**（**§5.6**）。  
- **可修改项：** 与 **§5.1** 相同（含替换附件、封面）。  
- **保存约束：** 提交时须重新满足 **§5.1** 全部校验；必填项不得为空。  
- **附件/封面替换：** 更换并保存成功后，宜删除被替换的旧文件，避免存储残留（实现阶段约定）。  
- **编辑表单按钮：** 未发布状态下通常仅提供 **保存**、**取消**；若产品允许在编辑页直接 **发布**，行为同 **§5.6**，发布后变为已发布。

---

### 5.4 删除科技项目指南

- **允许删除：** **未发布** 且具备删除权限的记录。  
- **不允许删除：** **已发布** 记录；须先 **下架**。  
- **删除后果：** 记录从列表移除；关联附件、封面文件一并清理（若有）。  
- **确认：** 删除前宜二次确认；支持批量删除时须提示选中条数。

---

### 5.5 查看科技项目指南详情

- **展示内容：** **§5.1** 全部业务字段（含附件下载/预览入口、封面预览）、**发布状态**、**发布日期**；宜含创建人/创建时间、修改人/修改时间（若系统有审计字段）。  
- **交互：**  
  - **未发布：** 只读详情，可提供 **编辑**、**发布**、**删除** 入口（与列表操作等价）。  
  - **已发布：** 只读详情，可提供 **下架** 入口；**不提供编辑、删除**。  
- **附件：** 已上传时展示文件名与下载/打开能力；未上传时展示「无」或「—」。

---

### 5.6 发布与下架

#### 发布

| 项 | 说明 |
| --- | --- |
| **入口** | 列表行内「发布」、详情页「发布」、新增表单「发布」按钮（与「仅保存」区分） |
| **前置** | 当前为 **未发布**；**§5.1** 必填项与校验均已满足 |
| **结果** | 发布状态变为 **已发布**；记录 **发布日期** 为操作当日（自然日 **YYYY-MM-DD**） |
| **重复发布** | 已发布记录不可再次发布 |

#### 下架

| 项 | 说明 |
| --- | --- |
| **入口** | 列表行内「下架」、详情页「下架」 |
| **前置** | 当前为 **已发布** |
| **结果** | 发布状态变为 **未发布**；对外展示结束；**不删除**记录与附件、封面；可再编辑、再发布 |
| **发布日期** | 下架后是否保留历史上次发布日期用于审计，或清空，由产品确认（**建议保留**上次发布日期只读展示，并记录下架操作时间若系统支持） |

---

## 6. 状态与操作矩阵（汇总）

在**已授权**前提下（菜单与按钮级权限按项目角色配置）：

| 当前发布状态 | 查看 | 新增 | 修改 | 发布 | 下架 | 删除 |
| --- | --- | --- | --- | --- | --- | --- |
| 未发布 | ✓ | — | ✓ | ✓ | — | ✓ |
| 已发布 | ✓ | — | ✗ | — | ✓ | ✗ |
| 列表/global | — | ✓ | — | — | — | — |

- 「新增」为列表工具栏入口，新建记录初始为 **未发布**（除非表单选择保存并发布）。  
- 下架后按 **未发布** 行权限执行。

---

## 7. 列表筛选与业务约束补充

| 约束 | 说明 |
| --- | --- |
| 枚举展示 | 项目类型、发布状态在列表/详情中展示为中文标签，与 **§2.1、§2.2** 一致 |
| 申报期展示 | 列表可同时展示「申报开始」「申报截止」两列；详情可合并展示为「YYYY-MM-DD ～ YYYY-MM-DD」 |
| 同名项目 | 不强制项目名称全局唯一；若运营需要唯一性，另文约定并在保存时校验 |
| 已发布内容一致性 | 已发布指南对外展示内容应与发布时保存内容一致；下架后修改再发布，以外部可见最新发布版本为准 |
| 并发 | 同一条指南连续保存时，以后一次提交为准；发布、下架宜防重复点击（前端禁用或二次确认） |

---

## 8. 错误与提示约定

面向使用方的提示宜**语义明确、可区分**，例如：

| 场景 | 提示方向（示例） |
| --- | --- |
| 必填项缺失 | 标明缺失项（如「请填写项目名称」） |
| 字数超限 | 「项目名称不能超过 20 字」「项目简介不能超过 50 字」 |
| 申报截止日期早于开始日期 | 「申报截止日期不能早于开始日期」 |
| 手机号不合法 | 「请输入正确的手机号码」 |
| 项目类型非法 | 「项目类型不在可选范围内」 |
| 附件类型或大小不符 | 「仅支持 pdf、doc… 格式」「附件不能超过 30MB」 |
| 封面类型或大小不符 | 「仅支持 jpg、png 格式」「封面不能超过 10MB」 |
| 已发布不可编辑/删除 | 「已发布指南须先下架后再修改/删除」 |
| 删除确认取消 | 不执行删除，无成功提示 |

本文档**不约定** HTTP 状态码、错误码字段名及接口报文结构（如 `code`、`msg`、`data`）。

---

## 9. 非功能需求（建议）

| 类别 | 建议 |
| --- | --- |
| 权限 | 查询、新增、修改、删除、发布、下架是否分角色（如仅科技管理员可发布） |
| 审计 | 新增、修改、删除、发布、下架记操作日志 |
| 附件安全 | 上传文件病毒扫描、访问鉴权（若附件含敏感说明） |
| 双语 | 后台字段标签与提示与项目 i18n 规范一致（汉语 + 藏文，若适用） |

---

## 10. 修订说明（相对草稿）

| 草稿条目 | 优化处理 |
| --- | --- |
| 第 6、7 条：未发布/已发布操作 | 固化为 **§2.2**、**§5.6**、**§6 矩阵**；明确已发布不可改删 |
| 第 7 条：异常返回 `code/msg/data` | **移出**本文档 |
| 第 8 条：技术栈 | **移出**本文档 |
| 检出率、疫情等无关表述 | 无；本模块不涉及 |
| 附件 `ppt` 笔误 | 统一为 `ppt`、`pptx` |
| 项目简介 50 字、项目名称 20 字 | 写入 **§5.1** 并补充下限 1 字 |
| 申报时间「开始～结束」 | 拆为两字段并增加 **§2.3** 日期关系校验 |
| 附件、封面 | 明确为**选填**及格式、大小上限 |
| 表单「发布」与「确定」 | 区分 **仅保存（未发布）** 与 **保存并发布（已发布）** |
| 列表「发布日期」 | 与发布操作绑定，未发布展示为空或「—」 |
| 无流程图与矩阵 | 增补 **§4**、**§6** |

---

## 11. 与相关文档关系

| 文档 | 关系 |
| --- | --- |
| `科技项目与活动-草稿.md` | 初稿功能列表 |
| `科技项目与活动.png` | 列表与新增表单原型参考 |
| 《科技项目与活动技术方案》（待编） | 库表、接口、权限标识 |
| 《科技项目与活动管理测试用例》（待编） | 用例与本文档章节对应 |
| 《科技项目与活动前端技术方案》（待编） | 前端页面、路由、i18n |
