# 资料审核列表显示对应文件(前端联调方案) ## 涉及页面 | 页面 | 路由 | 说明 | |------|------|------| | 项目详情 - 资料审核 Tab | `/mes/pd/project/detail/{id}?tab=audit` | 需新增「文件」列 | ## 需求 审核人在「资料审核」列表中需要直接看到并打开被审核资料对应的文件,用于审核前查阅。当前列表只有审核单号、资料名称、版本、审核状态等,没有文件入口。 ## 数据来源与关联关系 审核记录(`mes_pd_document_audit`)本身不存文件,文件挂在「设计资料」上,关联链路如下: ``` mes_pd_document_audit.document_id └──> mes_pd_document.id (设计资料) └──> system_storage_attachment(recordType = mes_pd_document, recordId = 设计资料 ID) └──> 文件地址 / 文件名 ``` 文件仍然走 system 模块的 Storage Attachment 机制,未在业务表新增任何文件地址列。 ## API | 方法 | 路径 | 说明 | |------|------|------| | GET | `/mes/pd/document-audit/page` | 资料审核分页(响应新增字段) | | GET | `/mes/pd/document-audit/get` | 资料审核详情(响应新增字段) | **请求参数:** 无变更。 **响应字段新增:** | 字段 | 类型 | 说明 | |------|------|------| | fileName | String | 资料文件名,取该资料第一个附件的名称;无附件时为 null | | fileUrl | String | 资料文件地址,取该资料第一个附件的可访问 URL;无附件时为 null | **响应示例:** ```json { "code": 0, "data": { "list": [ { "id": 3023, "auditNo": "AUD2024001", "documentId": 1017, "documentName": "产品设计图", "documentVersion": "V1.0", "fileName": "design_v1.pdf", "fileUrl": "https://xxx/design_v1.pdf", "auditStatus": 0, "remark": null, "createTime": "2026-10-15 02:26:28" } ], "total": 1 } } ``` ## 前端修改点 需要改动的文件: | 文件 | 改动 | |------|------| | `src/api/mes/pd/document-audit/index.ts` | `MesPdDocumentAuditApi.DocumentAudit` 接口补 `fileName`、`fileUrl` 两个可选字段 | | `src/views/mes/pd/project/modules/document-audit-list.vue` | grid 列增加「文件」列(`slots.default = 'file'`),并在模板中增加对应具名插槽 | 「文件」列的渲染规则与「设计资料」列表(`document-list.vue` 的 `#file` 插槽)保持完全一致,可直接复用同一写法。 ## 字段展示规则 | 字段 | 展示位置 | 说明 | |------|----------|------| | fileUrl | 列表「文件」列 | 有值时渲染为可点击链接,新窗口打开 | | fileName | 列表「文件」列 | 作为链接文案;为空时回退为「查看文件」 | 建议列宽 `minWidth: 140`,位置放在「资料版本」之后。 ## 业务规则说明 | 场景 | 规则 | |------|------| | 资料有多个附件 | 只取第一个附件的地址与名称(与设计资料列表口径一致) | | 资料无附件 | `fileUrl` / `fileName` 均为 null,列内显示 `-`,不渲染链接 | | 审核记录已删除资料 | `documentId` 查不到附件,同样显示 `-` | | 未配置存储 / 附件读取失败 | 后端不抛异常,字段留空,列表照常返回 | ## 注意事项 - 本次为**纯新增字段**,老前端不升级也不会报错。 - `fileUrl` 由后端拼接,前端**不要**再单独调用 `/system/storage-attachment/list`,避免每行一次额外请求。 - 导出 Excel `/mes/pd/document-audit/export-excel` 同步新增了「文件」列(内容为文件名),无需前端改动。 ## 相关但独立的问题:审核结果字段被隐藏 **问题**:**自动审批模式**下,`document-audit-form.vue` 中「审核结果」字段(原 `fieldName = 'auditStatus'`)被 `src/adapter/form.ts` 的自动审批字段过滤逻辑(`isAuditField` 命中 `auditStatus` 正则)整条从表单 schema 中移除,导致: 1. 审核人看不到、也无法选择「审核通过/审核不通过」; 2. 提交时 `auditStatus` 缺省,后端拆箱产生 NPE。 **已修复**(前端 + 后端两侧): | 侧 | 改动 | |----|------| | 前端 `document-audit-form.vue` | 字段名 `auditStatus` → `auditResult`(避开 `isAuditField` 正则),提交时映射回 `auditStatus`;表单打开时显式清空 `auditResult` | | 后端 `MesPdDocumentAuditServiceImpl#updateDocumentAudit` | `auditStatus` 为空时抛 `PD_DOCUMENT_AUDIT_STATUS_REQUIRED`(「审核结果不能为空:请选择「审核通过」或「审核不通过」后重新提交」);非 1/2 抛 `PD_DOCUMENT_AUDIT_STATUS_INVALID`;审核人、审核时间统一由后端记录 | **注意**:其他表单若出现同名 `auditStatus` / `auditTime` / `approvalStatus` 等字段,同样会被自动审批模式过滤,需逐一核查。