# 产业政策宣传 — 功能需求

## 1. 文档说明

| 项 | 说明 |
| --- | --- |
| 模块名称 | 产业政策宣传 |
| 目标 | 对产业政策宣传内容进行录入、查询、维护与发布管理，支撑面向使用方的政策查阅与展示 |
| 关联系统 | 业务后台 |
| 修订依据 | 同目录 `产业政策宣传功能需求-草稿` |

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

---

## 2. 术语与状态

### 2.1 政策层级（枚举，单选）

- **国家级**
- **省级**
- **市级**
- **县级**

### 2.2 发布状态（互斥，单值）

| 取值 | 含义概要 |
| --- | --- |
| **未发布** | 新建草稿或已下架回流；对外不可见（与产品「前台展示」定义一致）；在满足矩阵规则下可编辑、可删除、可发布 |
| **已发布** | 对外可见或可检索（与产品定义一致）；**不允许修改**；**不允许直接删除**，须先执行 **下架** |

**下架回流：** 对已发布内容执行「下架」后，发布状态回到 **未发布**，允许再次编辑并在校验通过后 **再次发布**，**无须新建**一条记录。

---

## 3. 功能范围

- 产业政策宣传的新增、修改、删除、分页列表查询、详情查看
- 政策文件（非结构化文档）与封面图的上传、替换、展示及删除时的存储联动清理
- 发布、下架及发布状态约束下的操作权限控制
- 面向使用方的业务错误与校验提示（见第 6 章）

---

## 4. 业务流程概览

下列顺序描述**典型闭环**；具体操作禁忌以 **第 5 节矩阵** 为准。

1. **新建**：录入必填项，按需上传政策文件与封面 → 初始为 **未发布**。
2. **维护**：在 **未发布** 下可反复修改字段与附件，直至内容定稿。
3. **发布**：在 **未发布** 且满足发布前置校验时执行「发布」→ **已发布**。
4. **对外展示**：**已发布** 内容按产品约定在前台或公开渠道展示；后台详情为只读维护视角。
5. **下架**：在 **已发布** 下执行「下架」→ 回到 **未发布**，结束对外展示。
6. **再编辑 / 再发布**：下架后可修改并再次发布（重复步骤 2～3）。
7. **删除**：仅在 **未发布** 下允许删除整条记录及关联文件；**已发布** 须先下架。

```mermaid
stateDiagram-v2
    [*] --> 未发布: 新建
    未发布 --> 已发布: 发布
    已发布 --> 未发布: 下架
    未发布 --> [*]: 删除
```

---

## 5. 详细功能需求

### 5.1 新增产业政策宣传

| 字段 | 规则 |
| --- | --- |
| 政策名称 | **必填**；长度 **1～20** 个字符（字符计数规则与项目全局一致） |
| 政策层级 | **必填**；单选，取值限定为第 **2.1** 节 |
| 政策简介 | **选填**；若有内容，长度不超过 **50 字** |
| 出台日期 | **必填**；格式 **YYYY-MM-DD**；不得为未来日期（若业务允许「待定」须单独评审，默认不允许未来日期） |
| 政策描述 | **必填**；长度不超过 **50 字** |
| 政策文件 | **选填**；通过**单个**附件上传；允许后缀：`pdf`、`md`、`doc`、`docx`、`xls`、`xlsx`、`ppt`、`pptx`；单文件 ≤ **30 MB** |
| 封面 | **选填**；通过**单个**图片上传；允许后缀：`jpg`、`jpeg`、`png`（若产品要求支持 `webp` 等可追加）；单文件 ≤ **10 MB** |

**必填字段汇总：** 政策名称、政策层级、出台日期、政策描述。

**校验：**

- 须校验文件类型（后缀与白名单 / 项目安全规范一致）与大小；超限或格式不符时给出**可区分**的错误提示。
- 若业务要求政策名称在适用范围（如租户 / 组织）内唯一，应在评审时单独约定并写入本节。

**初始状态：** 新建成功后，发布状态为 **未发布**。

---

### 5.2 查询产业政策宣传列表

- **关键字：** 对「政策名称」或「政策简介」进行**模糊**匹配（二者为 **OR** 关系）；关键字为空时不按关键字过滤。
- **政策层级：** **精确**匹配筛选；未选择时不按层级过滤。
- **发布状态（建议）：** 列表宜支持按 **未发布 / 已发布** 筛选，便于运营人员区分待发布与已上线内容。
- **分页：** 支持分页；默认 **每页 20 条**，默认首页为第一页；单页条数上限与项目列表通用规范一致（若有）。
- **排序：** 默认按 **创建时间倒序**（最新在前）；次要排序键与项目列表规范一致（若有）。

列表宜展示：政策名称、政策层级、政策简介（可截断）、出台日期、发布状态、封面缩略图（若有），以及当前状态下可执行的操作入口。

---

### 5.3 修改产业政策宣传

- **状态约束：** **仅未发布**（含新建后未发布、**已从已发布下架回流**）允许修改。**已发布**状态下**不允许修改**（列表 / 详情不提供可提交的编辑入口，或仅为只读；任何保存类修改须被拒绝并给出明确业务原因，如「已发布内容请先下架后再编辑」）。
- **可修改项：** 政策名称、政策层级、政策简介、出台日期、政策描述、政策文件、封面。
- **保存约束：** **政策名称、政策层级、出台日期、政策描述** 始终保持必填；**政策简介、政策文件、封面** 仍为选填，但若用户上传或替换附件，仍须满足 **5.1** 中的格式与大小规则。
- **附件替换：** 替换政策文件或封面时，旧文件在保存成功后应从存储中清理，避免孤儿文件（与删除整条的清理策略一致）。

---

### 5.4 删除产业政策宣传

- **允许删除：** 发布状态为 **未发布** 的记录。
- **不允许删除：** 发布状态为 **已发布** 的记录；须先执行「下架」（见 **5.6**）回到 **未发布** 后再删除。
- **删除后果：** 删除本条业务记录时，须**同步删除**关联存储中的政策文件与封面文件，避免存储残留。

---

### 5.5 查看产业政策宣传详情

- **展示内容：** 政策名称、政策层级、政策简介、出台日期、政策描述、政策文件（下载或预览入口）、政策文件原始名称（与上传文件名一致，便于识别）、封面、当前 **发布状态**。
- **权限与交互：**
  - **未发布：** 具备权限的用户可进入编辑流程（见 **5.3**）。
  - **已发布：** 详情为 **只读**（无保存类编辑）；可提供「下架」操作入口。
- **在线预览：** 政策文件（如 PDF）、封面图片的在线预览若需要，可作为迭代项单列，不作为本期必选。

---

### 5.6 发布与下架

#### 发布

- **前置条件：**
  - 当前发布状态为 **未发布**；
  - 必填字段均已满足 **5.1** 规则（含政策名称、政策层级、出台日期、政策描述）。
- **操作结果：** 发布状态变为 **已发布**；内容按产品约定对外可见或可检索。
- **失败处理：** 校验不通过时须给出明确原因（如必填项缺失、日期非法等），不变更发布状态。

#### 下架

- **前置条件：** 当前发布状态为 **已发布**。
- **操作结果：**
  - 发布状态变为 **未发布**；
  - 对外展示 / 检索可见性结束（与产品「前台是否展示」定义一致）；
  - 允许用户再次修改（**5.3**）并在满足条件后 **再次发布**，**无须新建**记录。
- **说明：** 下架**不删除**业务记录与已上传文件，仅变更发布状态与对外可见性。

---

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

便于评审与测试用例编写。

| 当前发布状态 | 查看 | 修改 | 发布 | 下架 | 删除 |
| --- | --- | --- | --- | --- | --- |
| 未发布 | ✓ | ✓ | ✓ | — | ✓ |
| 已发布 | ✓ | ✗ | — | ✓ | ✗ |

**补充：** 从「已发布」下架后，记录回到 **未发布**，操作权限按上表第一行执行。

---

## 7. 错误与提示约定

- 业务与校验错误宜采用项目统一的 **`code`、`msg`、`data`** 结构呈现，便于前端统一处理（不涉及具体协议与路径设计）。
- 常见提示宜可区分，例如：
  - 必填项缺失、字段超长、日期格式或业务规则不符；
  - 文件格式不支持、文件大小超限、上传失败；
  - 已发布不可编辑、已发布不可删除须先下架；
  - 发布 / 下架操作失败原因。

---

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

| 类别 | 建议 |
| --- | --- |
| 权限 | 菜单与按钮级权限：新增、编辑、删除、发布、下架、查看等是否分角色 |
| 审计 | 关键操作记操作日志（新增、修改、发布、下架、删除） |
| 安全 | 上传文件类型校验、存储路径不可预测、下载与预览鉴权 |
| 性能 | 列表查询响应时间满足后台通用体验；大附件若后续需直传或分片再扩展 |
| 双语 | 若前台面向藏汉双语用户，展示文案与后台字段标签须与项目 i18n 规范一致（具体范围在 UI 设计阶段确认） |

---

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

| 草稿问题 | 优化处理 |
| --- | --- |
| 查询条件写为「标准类型」 | 更正为 **政策层级**，与本模块字段一致 |
| 第 6 条「产互」 | 更正为 **删除**，并与发布状态矩阵对齐 |
| 发布 / 下架规则分散且不完整 | 增补 **§4 流程概览**、**§5.6 发布与下架**、**§6 操作矩阵**；明确已发布不可改、不可删 |
| 政策简介、政策文件、封面是否必填未写清 | 与同类模块对齐：**简介、文件、封面选填**；**政策描述必填** |
| 政策名称长度仅写「不超过 20 字」 | 明确为 **1～20** 字符 |
| 第 6、7 条接口与技术栈 | 接口细节删除；错误结构仅保留 **§7** 中的呈现约定；技术栈移至技术方案文档 |
| 删除时文件处理仅一句话 | 在 **§5.4** 明确须联动清理政策文件与封面；修改替换附件时亦须清理旧文件 |
