编辑 | blame | 历史 | 原始文档

产品设计

涉及页面

  • 设计项目列表页(mes/pd/project/index
  • 设计项目详情/新增/编辑弹窗
  • 资料子表管理弹窗
  • 资料审核弹窗
  • 归档台账列表页(mes/pd/archive/index
  • 归档台账详情/新增/编辑弹窗

状态流转

待发布(0) → 待上传(1) → 待审核(2) → 待归档(3) → 已归档(4)

状态值 状态名 允许操作
0 待发布 修改、删除、发布
1 待上传 上传资料
2 待审核 审核
3 待归档 归档
4 已归档

API

设计项目

方法 路径 说明
POST /mes/pd/project/create 创建设计项目
PUT /mes/pd/project/update 更新设计项目
DELETE /mes/pd/project/delete 删除设计项目
GET /mes/pd/project/get 获取设计项目详情
GET /mes/pd/project/page 获取设计项目分页
GET /mes/pd/project/export-excel 导出设计项目Excel
PUT /mes/pd/project/publish 发布(待发布→待上传)
PUT /mes/pd/project/upload 上传资料(待上传→待审核),**自动创建资料审核记录**
PUT /mes/pd/project/audit 审核(待审核→待归档)
PUT /mes/pd/project/archive 归档(待归档→已归档),**自动创建归档台账记录**

创建/更新请求参数:

参数 类型 必填 说明
id Long 否(更新时必填) 编号
taskCode String 任务编码
taskName String 任务名称
productCode String 产品编码
productName String 产品名称
version String 版本号
chiefDesigner Long 主设计师(用户ID)
reviewer Long 审核人(用户ID)
planFinishTime LocalDateTime 计划完成时间
remark String 备注

分页请求参数:

参数 类型 必填 说明
taskCode String 任务编码(模糊)
taskName String 任务名称(模糊)
productCode String 产品编码(模糊)
productName String 产品名称(模糊)
status Integer 状态
planFinishTime LocalDateTime[] 计划完成时间范围

响应: 在基础字段上额外包含 chiefDesignerNickname(主设计师名称)、reviewerNickname(审核人名称)

设计资料

方法 路径 说明
POST /mes/pd/document/create 创建设计资料
PUT /mes/pd/document/update 更新设计资料
DELETE /mes/pd/document/delete 删除设计资料
GET /mes/pd/document/get 获取设计资料详情
GET /mes/pd/document/page 获取设计资料分页
GET /mes/pd/document/export-excel 导出设计资料Excel

创建/更新请求参数:

参数 类型 必填 说明
id Long 否(更新时必填) 编号
projectId Long 设计项目ID
documentType String 资料类型(字典 mes_pd_document_type)
documentName String 资料名称
documentVersion String 版本
fileName String 文件名
uploadUserId Long 上传人(用户ID)
uploadTime LocalDateTime 上传时间
fileUrl String 文件URL(通过 /infra/file/upload 上传后获取)
remark String 备注

响应: 在基础字段上额外包含 uploadUserNickname(上传人名称)、fileUrl(文件URL)

资料审核

方法 路径 说明
POST /mes/pd/document-audit/create 创建资料审核(**上传资料时后端自动调用,前端无需单独调用**)
PUT /mes/pd/document-audit/update 更新资料审核
DELETE /mes/pd/document-audit/delete 删除资料审核
GET /mes/pd/document-audit/get 获取资料审核详情
GET /mes/pd/document-audit/page 获取资料审核分页
GET /mes/pd/document-audit/export-excel 导出资料审核Excel

创建/更新请求参数:

参数 类型 必填 说明
id Long 否(更新时必填) 编号
auditNo String 审核单号(编码规则 PD_DOCUMENT_AUDIT_CODE 自动生成)
documentId Long 资料ID
documentName String 资料名称(冗余)
documentVersion String 资料版本(冗余)
reviewer Long 审核人(用户ID,自动取项目的审核人)
auditStatus Integer 审核状态(字典 mes_pd_document_audit_status)
auditTime LocalDateTime 审核时间
remark String 备注

响应: 在基础字段上额外包含 reviewerNickname(审核人名称)

归档台账

方法 路径 说明
POST /mes/pd/archive/create 创建归档台账(**归档时后端自动调用,前端无需单独调用**)
PUT /mes/pd/archive/update 更新归档台账
DELETE /mes/pd/archive/delete 删除归档台账
GET /mes/pd/archive/get 获取归档台账详情
GET /mes/pd/archive/page 获取归档台账分页
GET /mes/pd/archive/export-excel 导出归档台账Excel

创建/更新请求参数:

参数 类型 必填 说明
id Long 否(更新时必填) 编号
archiveCode String 归档编号(编码规则 PD_ARCHIVE_CODE 自动生成)
projectId Long 设计项目ID
archiver Long 归档人(用户ID,自动取当前登录用户)
archiveStatus Integer 归档状态(字典 mes_pd_archive_status)
archiveTime LocalDateTime 归档时间(自动取当前时间)
remark String 备注

响应: 在基础字段上额外包含 archiverNickname(归档人名称)、taskCode(任务编码)、taskName(任务名称)

前端修改点

1. 设计项目列表页

<!-- 状态标签 -->
<el-tag :type="getStatusTagType(row.status)">
  {{ getStatusLabel(row.status) }}
</el-tag>

<!-- 状态流转按钮 -->
<el-button v-if="row.status === 0" @click="handlePublish(row.id)" type="primary">发布</el-button>
<el-button v-if="row.status === 1" @click="handleUpload(row.id)" type="warning">上传资料</el-button>
<el-button v-if="row.status === 2" @click="handleAudit(row.id)" type="success">审核</el-button>
<el-button v-if="row.status === 3" @click="handleArchive(row.id)" type="danger">归档</el-button>

2. data 数据

data() {
  return {
    // 状态流转API映射
    statusFlowApi: {
      0: publishProject,
      1: uploadProject,
      2: auditProject,
      3: archiveProject,
    },
  }
}

3. 方法

// 状态流转
handlePublish(id) {
  publishProject(id).then(() => { this.getList() })
},
handleUpload(id) {
  uploadProject(id).then(() => { this.getList() })
},
handleAudit(id) {
  auditProject(id).then(() => { this.getList() })
},
handleArchive(id) {
  archiveProject(id).then(() => { this.getList() })
},

// 资料子表 - 打开弹窗
handleDocument(projectId) {
  this.documentOpen = true
  this.documentProjectId = projectId
  this.getDocumentList()
},

4. API 定义

// 设计项目
export function createProject(data) { return request({ url: '/mes/pd/project/create', method: 'post', data }) }
export function updateProject(data) { return request({ url: '/mes/pd/project/update', method: 'put', data }) }
export function deleteProject(id) { return request({ url: '/mes/pd/project/delete', method: 'delete', params: { id } }) }
export function getProject(id) { return request({ url: '/mes/pd/project/get', method: 'get', params: { id } }) }
export function getProjectPage(params) { return request({ url: '/mes/pd/project/page', method: 'get', params }) }
export function exportProjectExcel(params) { return request({ url: '/mes/pd/project/export-excel', method: 'get', params, responseType: 'blob' }) }
export function publishProject(id) { return request({ url: '/mes/pd/project/publish', method: 'put', params: { id } }) }
export function uploadProject(id) { return request({ url: '/mes/pd/project/upload', method: 'put', params: { id } }) }
export function auditProject(id) { return request({ url: '/mes/pd/project/audit', method: 'put', params: { id } }) }
export function archiveProject(id) { return request({ url: '/mes/pd/project/archive', method: 'put', params: { id } }) }

// 设计资料
export function createDocument(data) { return request({ url: '/mes/pd/document/create', method: 'post', data }) }
export function updateDocument(data) { return request({ url: '/mes/pd/document/update', method: 'put', data }) }
export function deleteDocument(id) { return request({ url: '/mes/pd/document/delete', method: 'delete', params: { id } }) }
export function getDocument(id) { return request({ url: '/mes/pd/document/get', method: 'get', params: { id } }) }
export function getDocumentPage(params) { return request({ url: '/mes/pd/document/page', method: 'get', params }) }

// 文件上传(通用接口,上传后返回URL,存入资料表 fileUrl 字段)
export function uploadFile(file, directory) { return request({ url: '/infra/file/upload', method: 'post', data: { file, directory }, headers: { 'Content-Type': 'multipart/form-data' } }) }

// 资料审核(前端无需调用 create,上传资料时后端自动创建)
export function updateDocumentAudit(data) { return request({ url: '/mes/pd/document-audit/update', method: 'put', data }) }
export function deleteDocumentAudit(id) { return request({ url: '/mes/pd/document-audit/delete', method: 'delete', params: { id } }) }
export function getDocumentAuditPage(params) { return request({ url: '/mes/pd/document-audit/page', method: 'get', params }) }

// 归档台账(前端无需调用 create,归档时后端自动创建)
export function updateArchive(data) { return request({ url: '/mes/pd/archive/update', method: 'put', data }) }
export function deleteArchive(id) { return request({ url: '/mes/pd/archive/delete', method: 'delete', params: { id } }) }
export function getArchive(id) { return request({ url: '/mes/pd/archive/get', method: 'get', params: { id } }) }
export function getArchivePage(params) { return request({ url: '/mes/pd/archive/page', method: 'get', params }) }
export function exportArchiveExcel(params) { return request({ url: '/mes/pd/archive/export-excel', method: 'get', params, responseType: 'blob' }) }

5. 资料子表 - 文件上传组件

<!-- 设计资料新增/编辑弹窗中添加文件上传 -->
<el-form-item label="文件" prop="fileUrl">
  <UploadFile v-model="formData.fileUrl" :limit="1" />
</el-form-item>

<!-- 资料列表中显示文件链接 -->
<el-table-column label="文件" prop="fileUrl">
  <template #default="{ row }">
    <el-link v-if="row.fileUrl" :href="row.fileUrl" target="_blank" type="primary">
      {{ row.fileName || '查看文件' }}
    </el-link>
    <span v-else>-</span>
  </template>
</el-table-column>
// 文件上传回调
handleFileUploadSuccess(url) {
  this.formData.fileUrl = url
},

6. 字典数据更新 SQL

UPDATE system_dict_data SET label = '待发布' WHERE dict_type = 'mes_pd_project_status' AND value = '0';
UPDATE system_dict_data SET label = '待上传' WHERE dict_type = 'mes_pd_project_status' AND value = '1';
UPDATE system_dict_data SET label = '待审核' WHERE dict_type = 'mes_pd_project_status' AND value = '2';
UPDATE system_dict_data SET label = '待归档' WHERE dict_type = 'mes_pd_project_status' AND value = '3';
UPDATE system_dict_data SET label = '已归档' WHERE dict_type = 'mes_pd_project_status' AND value = '4';

编码规则配置

需要在编码规则管理中新增以下两条规则:

规则代码 规则名称 说明
PD_DOCUMENT_AUDIT_CODE 资料审核单编码 上传资料时自动生成审核单号
PD_ARCHIVE_CODE 归档台账编码 归档时自动生成归档编号

注意事项

  • 设计项目状态流转为线性5状态(0→1→2→3→4),不支持回退或取消
  • 只有待发布(0)状态才允许修改和删除设计项目
  • 删除设计项目会级联删除其下的所有资料记录
  • 资料子表的 fileUrl 字段存储文件URL,前端通过 /infra/file/upload 通用接口上传文件后获取URL
  • 资料审核表与资料子表为一对多关系,一条资料可以有多条审核记录
  • 字典类型需要在系统管理中配置:mes_pd_project_statusmes_pd_document_typemes_pd_document_audit_statusmes_pd_archive_status
  • mes_pd_document_type(资料类型)的字典数据需要根据实际业务补充
  • 上传资料时后端自动为项目下所有资料创建审核记录(审核人=项目 reviewer,审核状态=待审核),前端无需单独调用 POST /mes/pd/document-audit/create
  • 归档时后端自动创建归档台账记录(归档人=当前登录用户,归档时间=当前时间),前端无需单独调用 POST /mes/pd/archive/create
  • 上传资料和归档操作是事务性的,状态更新和子表创建在同一个事务中,要么全部成功要么全部回滚