# 归档台账(按产品聚合)前端对接文档 ## 涉及页面 - 归档台账列表页(修改) - 归档台账详情弹窗/页面(新增) ## API ### 1. 分页查询(按项目/产品聚合) | 方法 | 路径 | 说明 | |------|------|------| | GET | /mes/pd/archive/page | 归档台账分页(按项目/产品聚合) | **请求参数:** | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | pageNo | Integer | 是 | 页码(从1开始) | | pageSize | Integer | 是 | 每页条数 | | archiveCode | String | 否 | 归档编号(模糊搜索) | | projectId | Long | 否 | 设计项目ID | | archiveStatus | Integer | 否 | 归档状态(0=待归档 1=已归档) | | productCode | String | 否 | 产品编码(模糊搜索) | | productName | String | 否 | 产品名称(模糊搜索) | **响应结构:** ```json { "code": 200, "data": { "list": [ { "id": 3, "archiveCode": "ARC20240003", "projectId": 1, "taskCode": "PD20240001", "taskName": "新产品设计任务", "productCode": "P001", "productName": "注塑产品A", "archiveCount": 3, "archiver": 1, "archiverNickname": "王五", "archiveStatus": 1, "archiveTime": "2024-01-03 10:00:00", "remark": "", "createTime": "2024-01-01 00:00:00", "updater": "1", "updaterNickname": "张三", "updateTime": "2024-01-03 15:30:00" } ], "total": 5 } } ``` **字段说明:** | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 最新归档记录ID | | archiveCode | String | 最新归档编号 | | projectId | Long | 设计项目ID | | taskCode | String | 任务编码 | | taskName | String | 任务名称 | | productCode | String | 产品编码 | | productName | String | 产品名称 | | archiveCount | Integer | 该项目下归档记录总数 | | archiver | Long | 归档人ID | | archiverNickname | String | 归档人名称 | | archiveStatus | Integer | 归档状态(字典 mes_pd_archive_status) | | archiveTime | LocalDateTime | 归档时间 | | remark | String | 备注 | | createTime | LocalDateTime | 创建时间 | | updater | String | 更新人ID | | updaterNickname | String | 更新人名称 | | updateTime | LocalDateTime | 更新时间 | --- ### 2. 详情查询(按产品编码) | 方法 | 路径 | 说明 | |------|------|------| | GET | /mes/pd/archive/detail-by-product | 归档台账详情(按产品编码查询) | **请求参数:** | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | productCode | String | 是 | 产品编码 | **响应结构:** 返回 `List`,同一产品编码可能关联多个设计项目,每个项目一条详情。 ```json { "code": 200, "data": [ { "project": { "id": 1, "taskCode": "PD20240001", "taskName": "新产品设计任务", "productCode": "P001", "productName": "注塑产品A", "version": "V1.0", "status": 4, "chiefDesigner": 1, "chiefDesignerNickname": "张三", "reviewer": 2, "reviewerNickname": "李四", "planFinishTime": "2024-12-31 00:00:00", "remark": "", "createTime": "2024-01-01 00:00:00" }, "archives": [ { "id": 1, "archiveCode": "ARC20240001", "archiver": 1, "archiverNickname": "王五", "archiveStatus": 1, "archiveTime": "2024-01-01 10:00:00", "remark": "", "createTime": "2024-01-01 10:00:00" }, { "id": 2, "archiveCode": "ARC20240002", "archiver": 1, "archiverNickname": "王五", "archiveStatus": 1, "archiveTime": "2024-01-02 10:00:00", "remark": "", "createTime": "2024-01-02 10:00:00" } ], "documents": [ { "id": 1, "documentType": "1", "documentName": "产品设计图", "documentVersion": "V1.0", "fileName": "design.pdf", "fileUrl": "/files/design.pdf", "uploadUserId": 1, "uploadUserNickname": "赵六", "uploadTime": "2024-01-01 09:00:00", "remark": "", "createTime": "2024-01-01 09:00:00" } ] } ] } ``` **ProjectInfo 字段说明:** | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 项目ID | | taskCode | String | 任务编码 | | taskName | String | 任务名称 | | productCode | String | 产品编码 | | productName | String | 产品名称 | | version | String | 版本号 | | status | Integer | 项目状态(字典 mes_pd_project_status:0=待发布 1=待上传 2=待审核 3=待归档 4=已归档) | | chiefDesigner | Long | 主设计师ID | | chiefDesignerNickname | String | 主设计师名称 | | reviewer | Long | 审核人ID | | reviewerNickname | String | 审核人名称 | | planFinishTime | LocalDateTime | 计划完成时间 | | remark | String | 备注 | | createTime | LocalDateTime | 创建时间 | **ArchiveInfo 字段说明:** | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 归档ID | | archiveCode | String | 归档编号 | | archiver | Long | 归档人ID | | archiverNickname | String | 归档人名称 | | archiveStatus | Integer | 归档状态(字典 mes_pd_archive_status) | | archiveTime | LocalDateTime | 归档时间 | | remark | String | 备注 | | createTime | LocalDateTime | 创建时间 | **DocumentInfo 字段说明:** | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 资料ID | | documentType | String | 资料类型(字典 mes_pd_document_type) | | documentName | String | 资料名称 | | documentVersion | String | 资料版本 | | fileName | String | 文件名 | | fileUrl | String | 文件URL | | uploadUserId | Long | 上传人ID | | uploadUserNickname | String | 上传人名称 | | uploadTime | LocalDateTime | 上传时间 | | remark | String | 备注 | | createTime | LocalDateTime | 创建时间 | --- ## 前端修改点 ### 1. 列表页 - 搜索栏新增 ```html 搜索 重置 ``` ### 2. 列表页 - 表格新增列 ```html ``` ### 3. 详情弹窗/页面 - 新增 ```html {{ detail.project.taskCode }} {{ detail.project.taskName }} {{ detail.project.productCode }} {{ detail.project.productName }} {{ detail.project.version }} {{ detail.project.chiefDesignerNickname }} {{ detail.project.reviewerNickname }} {{ detail.project.planFinishTime }} ``` ### 4. API 接口定义 文件路径:`src/api/mes/pd/archive/index.ts` ```ts import request from '@/config/axios' // 获得归档台账分页(按项目/产品聚合) export const getArchivePage = (params) => { return request.get({ url: '/mes/pd/archive/page', params }) } // 获得归档台账详情(按产品编码) export const getArchiveDetailByProduct = (productCode: string) => { return request.get({ url: '/mes/pd/archive/detail-by-product', params: { productCode } }) } // 创建归档台账 export const createArchive = (data) => { return request.post({ url: '/mes/pd/archive/create', data }) } // 更新归档台账 export const updateArchive = (data) => { return request.put({ url: '/mes/pd/archive/update', data }) } // 删除归档台账 export const deleteArchive = (id: number) => { return request.delete({ url: '/mes/pd/archive/delete?id=' + id }) } // 获得归档台账 export const getArchive = (id: number) => { return request.get({ url: '/mes/pd/archive/get?id=' + id }) } // 导出归档台账 Excel export const exportArchiveExcel = (params) => { return request.download({ url: '/mes/pd/archive/export-excel', params }) } ``` ### 5. data 数据 ```js const queryParams = reactive({ pageNo: 1, pageSize: 10, archiveCode: undefined, projectId: undefined, archiveStatus: undefined, productCode: undefined, productName: undefined, }) const detailList = ref([]) const detailVisible = ref(false) const activeProject = ref('0') ``` ### 6. 方法 ```js // 查看详情(按产品编码) const handleDetail = async (productCode) => { const res = await ArchiveApi.getArchiveDetailByProduct(productCode) detailList.value = res activeProject.value = '0' detailVisible.value = true } ``` ## 注意事项 - **分页聚合逻辑**:`/page` 接口按 `project_id` 分组,每组取最新一条归档记录(`MAX(id)`),所以 `updater` 和 `updateTime` 是该组最新归档的更新信息 - **详情接口参数变化**:从 `projectId` 改为 `productCode`,因为前端列表展示的是产品维度,点击详情时传产品编码更自然 - **详情返回列表**:`detail-by-product` 返回 `List`,因为同一产品编码可能关联多个设计项目(如不同版本),前端用 tab 切换展示 - **字典类型**: - 归档状态:`mes_pd_archive_status`(0=待归档 1=已归档) - 项目状态:`mes_pd_project_status`(0=待发布 1=待上传 2=待审核 3=待归档 4=已归档) - 资料类型:`mes_pd_document_type`