# 项目与补贴 — 项目 — 前端技术方案 > 依据:`项目与补贴-项目技术方案.md`;作为 `policy/projectSubsidy/index.vue` 中 **项目列表** Tab 实现。 --- ## 1. 页面与路由 | 项 | 说明 | | --- | --- | | **组件文件** | `ruoyi-ui/src/views/policy/projectSubsidy/ProjectTab.vue` | | **父页面** | `policy/projectSubsidy/index`(`el-tabs` 第一个 Tab) | | **权限前缀** | `industryPolicy:subsidyProject:` | --- ## 2. API | 文件 | Base Path | | --- | --- | | `ruoyi-ui/src/api/policy/subsidyProject.js` | `/industryPolicy/subsidyProject` | 方法:`listSubsidyProject`、`getSubsidyProject`、`addSubsidyProject`、`updateSubsidyProject`、`delSubsidyProject`、`publishSubsidyProject`、`offlineSubsidyProject`。 --- ## 3. 列表与查询 - **筛选**:`keyword`、`execStatus`(1~3)、`publishStatus`(0/1)、`startDate`/`endDate`(项目开始日闭区间,前端校验 start ≤ end)。 - **表格**:项目名称、简介、投资金额、开始/预计完成日、执行状态、发布状态、发布时间、封面、创建时间。 - **操作**:未发布 → 查看/编辑/删除/发布;已发布 → 查看/下架(与产业政策宣传矩阵一致)。 - **批量删除 / 导出**:`industryPolicy/subsidyProject/export`。 --- ## 4. 表单与校验 | 字段 | 规则 | | --- | --- | | `projectName` | 必填,1~20 字 | | `introduction` | 选填,≤50 字 | | `investmentAmount` | 必填,>0,2 位小数 | | `projectStartDate` / `plannedEndDate` | 必填;预计 ≥ 开始 | | `execStatus` | 必填,1 未开始 / 2 进行中 / 3 已完成 | | `actualEndDate` | `execStatus=3` 时必填,≤ 今天 | | `coverFileUrl` / `coverFilePath` | 选填,jpg/jpeg/png ≤10MB | 执行状态自动推算由**后端**在保存/列表时处理;前端在选「已完成」时强制填写实际完成日。 --- ## 5. 国际化 `policy.js` 中 `subsidyProject` 节点;`pubNs: 'subsidyProject'` + `policyPublicityLocaleMixin`。 --- ## 6. 修订记录 | 版本 | 说明 | | --- | --- | | 1.0 | 初版:嵌入项目与补贴 Tab;CRUD + 封面上传 | | 1.1 | 草稿 §6:发布/下架、列表发布状态筛选、已发布禁改删 |