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

附件上传模块改造 - 前端联调方案

概述

本次改造统一所有模块的文件上传:

  1. 后端:删除业务表中的 file_url 列,全部改用 system_storage_attachment 中间表关联
  2. 前端:FileUpload 组件统一使用 /system/storage-blob/upload,附件通过 attachment API 关联

后端变更

已删除 file_url 列的表

表名 模块
erp_purchase_order ERP 采购订单
erp_purchase_request ERP 采购申请
erp_sale_order ERP 销售订单
hrm_leave_application HRM 请假
hrm_resignation_application HRM 离职
hrm_transfer_application HRM 调动

已从 Java 类中删除 fileUrl 字段

  • 6 个 DO 类(ErpPurchaseOrderDO、ErpPurchaseRequestDO、ErpSaleOrderDO、HrmLeaveApplicationDO、HrmResignationApplicationDO、HrmTransferApplicationDO)
  • 6 个 SaveReqVO 类
  • 6 个 RespVO 类

文件关联方式

文件只能通过 system_storage_attachment 中间表关联:

API 说明
POST /system/storage-blob/upload 上传文件(files 参数,multipart)
POST /system/storage-attachment/bind 绑定附件到业务记录
GET /system/storage-attachment/list 查询附件(按 recordType + recordId)
DELETE /system/storage-attachment/delete 批量删除附件

涉及页面

一、核心上传组件改动

文件src/components/upload/use-upload.ts

改动项 旧值 新值
上传接口 POST /infra/file/upload / S3 直传 POST /system/storage-blob/upload
请求方式 自定义 createFile0() / PUT S3 FormData + requestClient.post()
uploadUrl ${apiURL}/infra/file/upload ${apiURL}/system/storage-blob/upload

二、上传限制放开

以下模块的 FileUpload / ImageUpload 组件已移除 maxNumbermaxSizeaccept 限制:

ERP 模块(13 个文件)

文件 字段
src/views/erp/purchase/order/data.ts fileUrl
src/views/erp/purchase/request/data.ts fileUrl
src/views/erp/purchase/return/data.ts fileUrl
src/views/erp/purchase/in/data.ts fileUrl
src/views/erp/sale/order/data.ts fileUrl
src/views/erp/sale/return/data.ts fileUrl
src/views/erp/sale/out/data.ts fileUrl
src/views/erp/stock/in/data.ts fileUrl
src/views/erp/stock/out/data.ts fileUrl
src/views/erp/stock/move/data.ts fileUrl
src/views/erp/stock/check/data.ts fileUrl
src/views/erp/finance/receipt/data.ts fileUrl
src/views/erp/finance/payment/data.ts fileUrl

ImageUpload 限制放开(5 处)

文件 字段
src/views/im/manager/face/pack/data.ts icon
src/views/im/manager/face/pack/data.ts url
src/views/im/manager/channel/material/data.ts coverUrl
src/views/im/manager/channel/list/data.ts avatar
src/views/mes/md/item/modules/product-media-list.vue url

MES 文档限制放开

文件 字段
src/views/mes/pd/project/modules/document-form.vue fileUrl

三、HRM 附件上传修复

3 个 HRM 模块的"附件"字段从 Input 改为 FileUpload

文件 字段 改动
src/views/hrm/leave/data.ts fileUrl component: 'Input'component: 'FileUpload'
src/views/hrm/resignation/data.ts fileUrl component: 'Input'component: 'FileUpload'
src/views/hrm/transfer/data.ts fileUrl component: 'Input'component: 'FileUpload'

API

方法 路径 说明
POST /system/storage-blob/upload 上传文件,files(multipart 数组)
POST /system/storage-attachment/bind 绑定附件到业务记录
GET /system/storage-attachment/list 查询业务记录的附件列表
DELETE /system/storage-attachment/delete 批量删除附件

上传响应

[
  {
    "id": 123,
    "url": "https://xxx.com/u_abc123.pdf",
    "previewURL": "https://xxx.com/preview/u_abc123.pdf",
    "name": "合同.pdf",
    "downloadURL": "https://xxx.com/download/u_abc123.pdf"
  }
]

绑定请求

{
  "application": "file",
  "recordType": "mes_purchase_order",
  "recordId": 1,
  "blobItems": [{ "blobId": 123 }]
}

标准上传流程

  1. 用户选择文件 → POST /system/storage-blob/upload 返回 [{ id, url, name }]
  2. 业务记录保存时 → POST /system/storage-attachment/bind 关联 blobId
  3. 详情/编辑页 → GET /system/storage-attachment/list 加载已有附件
  4. 用户删除附件 → DELETE /system/storage-attachment/delete

前端 API 封装

新 API 模块位于 src/api/system/storage/index.ts

import { uploadFile, listAttachments, bindAttachments, deleteAttachments } from '#/api/system/storage';

recordType 命名规范

格式:{模块前缀}_{业务表名}

模块 recordType 说明
MES 采购订单 mes_purchase_order 采购订单附件
MES 工单 mes_pro_work_order 生产工单附件
MES 设备 mes_dv_machinery 设备档案附件
MES 文档 mes_pd_document 项目文档附件
CRM 客户 crm_customer 客户附件
ERP 采购订单 erp_purchase_order ERP 采购订单附件

注意事项

  • FileUpload 组件使用 POST /system/storage-blob/upload 上传文件,FormData 字段名为 files
  • 文件上传后仅暂存,必须调用 bind 接口关联到业务记录
  • 文件预览使用响应中的 previewURLurl 字段
  • 禁止使用旧版 /infra/file/* 接口
  • HRM 请假/离职/调动页面的附件字段现在可以使用 FileUpload 组件上传附件