From f5789503eb918661b8e95b45c3adef667556e24a Mon Sep 17 00:00:00 2001 From: Codewoc <947380458@qq.com> Date: Thu, 2 Apr 2026 10:41:08 +0800 Subject: [PATCH] =?UTF-8?q?feat(review-meeting):=20=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E5=89=8D=E7=94=9F=E6=88=90=E6=A0=87=E5=87=86=E8=B5=84=E6=96=99?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/review/project.ts | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/api/review/project.ts b/src/api/review/project.ts index e2bbb13a5..92e970aa8 100644 --- a/src/api/review/project.ts +++ b/src/api/review/project.ts @@ -130,6 +130,12 @@ export interface ReviewMeetingMaterialUploadReqVO { fileType?: string } +export interface ReviewMeetingMaterialUploadFileNameReqVO { + reviewMeetingProjectId: number + materialCode: string + originalFileName: string +} + // ============================================================ // API 调用 // ============================================================ @@ -208,6 +214,13 @@ export const getProjectMaterialHistory = (reviewMeetingProjectId: number, materi params: { reviewMeetingProjectId, materialCode } }) +/** 获取结构化材料上传文件名 */ +export const getProjectMaterialUploadFileName = (params: ReviewMeetingMaterialUploadFileNameReqVO) => + request.get({ + url: '/project/review-project/material-upload-file-name', + params + }) + /** 下载当前议程分类模板包 */ export const downloadProjectTemplateBundle = (agendaType: string) => request.download({ @@ -222,7 +235,12 @@ export const uploadProjectMaterial = async ( materialCode: string, file: File ) => { - const presignedInfo = await FileApi.getFilePresignedUrl(file.name, 'review-meeting') + const targetFileName = await getProjectMaterialUploadFileName({ + reviewMeetingProjectId, + materialCode, + originalFileName: file.name + }) + const presignedInfo = await FileApi.getFilePresignedUrl(targetFileName, 'review-meeting') await axios.put(presignedInfo.uploadUrl, file, { headers: { 'Content-Type': file.type || 'application/octet-stream' @@ -233,7 +251,7 @@ export const uploadProjectMaterial = async ( configId: presignedInfo.configId, url: presignedInfo.url, path: presignedInfo.path, - name: file.name, + name: targetFileName, type: file.type || 'application/octet-stream', size: file.size }) @@ -244,10 +262,10 @@ export const uploadProjectMaterial = async ( reviewMeetingId, reviewMeetingProjectId, materialCode, - fileName: file.name, + fileName: targetFileName, fileUrl: presignedInfo.url, fileSize: file.size, - fileType: file.name.includes('.') ? file.name.split('.').pop()?.toLowerCase() : '' + fileType: targetFileName.includes('.') ? targetFileName.split('.').pop()?.toLowerCase() : '' } satisfies ReviewMeetingMaterialUploadReqVO }) }