From 100c652f2ded6e34ad5d7612648afb2e2614e745 Mon Sep 17 00:00:00 2001 From: zxr <271055687@qq.com> Date: Tue, 4 Aug 2026 01:02:40 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=8E=A5=E5=85=A5=E5=A4=A7=E5=B1=8F?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0=E6=9C=8D=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/axios.config.ts | 5 -- src/api/axios.ts | 8 --- src/api/fts.ts | 29 ---------- src/api/path/project.api.ts | 16 ------ src/api/path/project.d.ts | 14 ++++- src/api/projectFiles.ts | 57 +++++++++++++++++++ .../components/CanvasPage/index.vue | 56 +++++++----------- src/views/chart/hooks/useSync.hook.ts | 25 ++------ 8 files changed, 94 insertions(+), 116 deletions(-) delete mode 100644 src/api/fts.ts create mode 100644 src/api/projectFiles.ts diff --git a/src/api/axios.config.ts b/src/api/axios.config.ts index 8b95c27..ee19b65 100644 --- a/src/api/axios.config.ts +++ b/src/api/axios.config.ts @@ -14,8 +14,3 @@ export const fetchAllowList = [ // 接口黑名单 export const fetchBlockList = [] - -// fts 接口列表(不添加 /Visual/v1 前缀) -export const ftsList = [ - '/Assets/v1/fts/uploader' -] diff --git a/src/api/axios.ts b/src/api/axios.ts index b3a7166..e868d15 100644 --- a/src/api/axios.ts +++ b/src/api/axios.ts @@ -5,8 +5,6 @@ import { StorageEnum } from '@/enums/storageEnum' import { axiosPre } from '@/settings/httpSetting' import { SystemStoreEnum, SystemStoreUserInfoEnum } from '@/store/modules/systemStore/systemStore.d' import { redirectErrorPage, getLocalStorage, routerTurnByName, isPreview } from '@/utils' -import { fetchAllowList, ftsList } from './axios.config' -import includes from 'lodash/includes' export interface MyResponseType { code: ResultEnum @@ -28,12 +26,6 @@ const axiosInstance = axios.create({ axiosInstance.interceptors.request.use( (config: InternalAxiosRequestConfig) => { - // fts 接口特殊处理:使用完整路径,不添加 /Visual/v1 前缀 - if (config.url && includes(ftsList, config.url)) { - const baseUrl = import.meta.env.PROD ? import.meta.env.VITE_PRO_PATH : import.meta.env.VITE_DEV_PATH - config.baseURL = baseUrl - } - // 获取 token 并添加到所有请求 const info = getLocalStorage(StorageEnum.GO_SYSTEM_STORE) if (info) { diff --git a/src/api/fts.ts b/src/api/fts.ts deleted file mode 100644 index 4852ff6..0000000 --- a/src/api/fts.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { AxiosProgressEvent } from "axios"; -import axiosInstance from '@/api/axios' -import { ContentTypeEnum } from '@/enums/httpEnum' - -/** 上传文件 */ -const FtsUpload = (data: any, onUploadProgress?: (progress: number) => void) => { - data.append('provider', 'local') - data.append('bucket', 'visual') - - // 使用完整URL,绕过 /Visual/v1 前缀 - const baseUrl = import.meta.env.PROD ? import.meta.env.VITE_PRO_PATH : import.meta.env.VITE_DEV_PATH - - return axiosInstance({ - url: `${baseUrl}/Assets/v1/fts/uploader`, - method: 'POST', - data, - headers: { - 'Content-Type': ContentTypeEnum.FORM_DATA - }, - onUploadProgress: onUploadProgress ? (progressEvent: AxiosProgressEvent) => { - if (progressEvent.total) { - const percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total); - onUploadProgress(percentCompleted); - } - } : undefined - }) -} - -export default FtsUpload diff --git a/src/api/path/project.api.ts b/src/api/path/project.api.ts index e903bff..d348ace 100644 --- a/src/api/path/project.api.ts +++ b/src/api/path/project.api.ts @@ -81,19 +81,3 @@ export const changeProjectReleaseApi = async (data: object) => { httpErrorHandle() } } - -// * 上传文件 -export const uploadFile = async (data: object) => { - try { - const res = await http(RequestHttpEnum.POST)<{ - /** - * 文件地址 - */ - fileName: string, - fileurl: string, - }>(`${ModuleTypeEnum.PROJECT}/upload`, data, ContentTypeEnum.FORM_DATA) - return res - } catch { - httpErrorHandle() - } -} diff --git a/src/api/path/project.d.ts b/src/api/path/project.d.ts index 8dbcfe9..6f64f0d 100644 --- a/src/api/path/project.d.ts +++ b/src/api/path/project.d.ts @@ -21,6 +21,18 @@ export type ProjectItem = { * 预览图片url */ indexImage: string + /** + * 预览图片 Files 标识 + */ + indexImageFileId: string + /** + * 背景图片url + */ + backgroundImage: string + /** + * 背景图片 Files 标识 + */ + backgroundImageFileId: string /** * 创建者 identity */ @@ -36,4 +48,4 @@ export interface ProjectDetail extends ProjectItem { * 项目参数 */ content: string -} \ No newline at end of file +} diff --git a/src/api/projectFiles.ts b/src/api/projectFiles.ts new file mode 100644 index 0000000..1ac9dd5 --- /dev/null +++ b/src/api/projectFiles.ts @@ -0,0 +1,57 @@ +import { http } from '@/api/http' +import { RequestHttpEnum, ResultEnum } from '@/enums/httpEnum' + +export type ProjectImageKind = 'index' | 'background' + +interface PendingUpload { + file_id: string + object_key: string + upload: { + method: string + url: string + headers: Record + expires_at: string + } +} + +interface CompletedUpload { + file_id: string + url: string +} + +/** 上传项目图片并由 Visual 完成文件绑定。 */ +export async function uploadProjectImage( + projectIdentity: string, + kind: ProjectImageKind, + file: File +): Promise { + const projectPath = `project/${encodeURIComponent(projectIdentity)}/images/${kind}` + const initResponse = await http(RequestHttpEnum.POST)(`${projectPath}/init`, { + filename: file.name, + size: file.size, + content_type: file.type || 'application/octet-stream' + }) + const pendingUpload = initResponse.data + if (initResponse.code !== ResultEnum.SUCCESS || !pendingUpload?.file_id || !pendingUpload.upload?.url) { + throw new Error(initResponse.message || '初始化项目图片上传失败') + } + + const uploadResponse = await fetch(pendingUpload.upload.url, { + method: pendingUpload.upload.method, + headers: pendingUpload.upload.headers, + body: file, + credentials: 'omit' + }) + if (!uploadResponse.ok) { + throw new Error(`上传项目图片失败: HTTP ${uploadResponse.status}`) + } + + const completeResponse = await http(RequestHttpEnum.POST)(`${projectPath}/complete`, { + file_id: pendingUpload.file_id + }) + const completedUpload = completeResponse.data + if (completeResponse.code !== ResultEnum.SUCCESS || !completedUpload?.file_id || !completedUpload.url) { + throw new Error(completeResponse.message || '完成项目图片上传失败') + } + return completedUpload +} diff --git a/src/views/chart/ContentConfigurations/components/CanvasPage/index.vue b/src/views/chart/ContentConfigurations/components/CanvasPage/index.vue index 1748cf3..79afcf6 100644 --- a/src/views/chart/ContentConfigurations/components/CanvasPage/index.vue +++ b/src/views/chart/ContentConfigurations/components/CanvasPage/index.vue @@ -126,27 +126,23 @@