diff --git a/src/api/common/fts.ts b/src/api/common/fts.ts deleted file mode 100644 index 5c3ce0c..0000000 --- a/src/api/common/fts.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { AxiosProgressEvent } from 'axios' -import { request } from '@/api/request' - -/** 上传文件 */ -const FtsUpload = (data: FormData, onUploadProgress?: (progress: number) => void) => { - data.append('provider', 'local') - data.append('bucket', 'visual') - - return request.post(`/Assets/v1/fts/uploader`, data, { - headers: { - 'Content-Type': 'multipart/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/ops/floor.ts b/src/api/ops/floor.ts index 3d5f8d3..3401e1b 100644 --- a/src/api/ops/floor.ts +++ b/src/api/ops/floor.ts @@ -1,5 +1,28 @@ import { request } from '@/api/request' +export interface Floor { + id?: number + name?: string + datacenter_id?: number + floor_number?: number + status?: string + area?: number + height?: number + load_bearing?: number + enabled?: boolean + layout_plan?: string + layout_plan_file_id?: string + description?: string +} + +export type SaveFloorPayload = Omit + +interface ApiResponse { + code: number + message: string + details: T +} + /** 获取楼层列表(分页) */ export const fetchFloorList = (data?: { page?: number; page_size?: number; keyword?: string; datacenter_id?: number; status?: string }) => { return request.post('/Assets/v1/floor/list', data || {}) @@ -16,13 +39,13 @@ export const fetchFloorListByDatacenter = (datacenterId: number, params?: { name } /** 创建楼层 */ -export const createFloor = (data: any) => { - return request.post('/Assets/v1/floor/create', data) +export const createFloor = (data: SaveFloorPayload) => { + return request.post>('/Assets/v1/floor/create', data) } /** 更新楼层 */ -export const updateFloor = (data: any) => { - return request.put('/Assets/v1/floor/update', data) +export const updateFloor = (data: SaveFloorPayload) => { + return request.put>('/Assets/v1/floor/update', data) } /** 删除楼层 */ diff --git a/src/api/ops/floorFile.ts b/src/api/ops/floorFile.ts new file mode 100644 index 0000000..97e8392 --- /dev/null +++ b/src/api/ops/floorFile.ts @@ -0,0 +1,48 @@ +import { request } from '@/api/request' + +export interface PendingUpload { + file_id: string + object_key: string + upload: { + method: string + url: string + headers: Record + expires_at: string + } +} + +interface ApiResponse { + code: number + message: string + details: T +} + +/** 初始化楼层布局文件并直传 OSS。 */ +export async function uploadFloorLayout(file: File): Promise { + const response = await request.post>('/Assets/v1/floor/layout/init', { + filename: file.name, + size: file.size, + content_type: file.type || 'application/octet-stream', + }) + + if (response.code !== 0) { + throw new Error(response.message || '初始化楼层布局文件上传失败') + } + + const pendingUpload = response.details + if (!pendingUpload?.file_id || !pendingUpload.upload?.method || !pendingUpload.upload?.url) { + throw new Error('楼层布局文件上传参数不完整') + } + + 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}`) + } + + return pendingUpload +} diff --git a/src/api/ops/goview.ts b/src/api/ops/goview.ts index a4f7ccc..5956f00 100644 --- a/src/api/ops/goview.ts +++ b/src/api/ops/goview.ts @@ -23,17 +23,6 @@ export interface GoViewProjectData { createUserId: string } -export interface GoViewFile { - id: string - fileName: string - fileSize: number - fileSuffix: string - virtualKey: string - relativePath: string - absolutePath: string - createTime: string -} - export interface OssInfo { BucketName: string bucketURL: string @@ -106,15 +95,6 @@ export const publishProject = (data: { identity: string; state: -1 | 1 }) => { return request.put>('/Visual/v1/project/publish', data) } -/** 上传文件 */ -export const uploadFile = (file: File) => { - const formData = new FormData() - formData.append('object', file) - return request.post>('/Visual/v1/project/upload', formData, { - headers: { 'Content-Type': 'multipart/form-data' }, - }) -} - /** 保存项目数据 */ export const saveProjectData = (projectId: string, content: string) => { const formData = new URLSearchParams() diff --git a/src/views/ops/pages/datacenter/floor/components/FloorFormDialog.vue b/src/views/ops/pages/datacenter/floor/components/FloorFormDialog.vue index c946185..a936d0d 100644 --- a/src/views/ops/pages/datacenter/floor/components/FloorFormDialog.vue +++ b/src/views/ops/pages/datacenter/floor/components/FloorFormDialog.vue @@ -60,12 +60,6 @@ list-type="picture-card" accept="image/*" > - @@ -77,27 +71,11 @@ - -