import { httpClient } from '../core/request' import { fileUploader } from '../core/upload' import { fileDownloader } from '../core/download' import { ApiResponse, PaginationParams, PaginationResponse } from '../types' import { API_ENDPOINTS } from '../config' /** * 项目数据类型 */ export interface ProjectData { id: string name: string description?: string thumbnail?: string sceneData: any createdAt: string updatedAt: string userId: string } /** * 订单数据类型 */ export interface OrderData { id: string projectId: string status: 'pending' | 'processing' | 'completed' | 'failed' result?: any createdAt: string updatedAt: string } /** * 编辑器API类 */ export class EditorApi { /** * 创建订单 */ public async createOrder(params: any): Promise> { return httpClient.post(API_ENDPOINTS.EDITOR.CREATE_ORDER, params) } /** * 保存项目 */ public async saveProject(projectData: Partial): Promise> { return httpClient.post(API_ENDPOINTS.EDITOR.SAVE_PROJECT, projectData) } /** * 加载项目 */ public async loadProject(projectId: string): Promise> { return httpClient.get(`${API_ENDPOINTS.EDITOR.LOAD_PROJECT}/${projectId}`) } /** * 删除项目 */ public async deleteProject(projectId: string): Promise> { return httpClient.delete(`${API_ENDPOINTS.EDITOR.DELETE_PROJECT}/${projectId}`) } /** * 获取项目列表 */ public async getProjectList(params: PaginationParams): Promise>> { return httpClient.get>(API_ENDPOINTS.EDITOR.LOAD_PROJECT, params) } /** * 上传项目缩略图 */ public async uploadThumbnail(file: File, projectId: string): Promise> { return fileUploader.uploadImage(file, { compress: true, quality: 0.8, maxWidth: 400, maxHeight: 300, onProgress: (progress) => { console.log(`缩略图上传进度: ${progress}%`) } }) } /** * 导出项目 */ public async exportProject(projectId: string, format: 'json' | 'glb' | 'fbx' = 'json'): Promise { await fileDownloader.downloadAndSave({ url: `/editor/project/export/${projectId}`, filename: `project_${projectId}.${format}`, params: { format } }) } /** * 导入项目 */ public async importProject(file: File): Promise> { const uploadResponse = await fileUploader.uploadFile({ file, fieldName: 'projectFile', data: { action: 'import' } }) if (!uploadResponse.success) { throw new Error(uploadResponse.message) } // 上传成功后,调用导入API return httpClient.post('/editor/project/import', { fileUrl: uploadResponse.data.url }) } /** * 批量导出项目 */ public async exportMultipleProjects(projectIds: string[], format: 'json' | 'glb' | 'fbx' = 'json'): Promise { const downloadUrls = projectIds.map(id => `/editor/project/export/${id}?format=${format}`) await fileDownloader.downloadBatch(downloadUrls, { concurrent: 2, onProgress: (progress) => { console.log(`批量导出进度: ${progress}%`) }, onFileComplete: (url, result) => { if (result instanceof Error) { console.error(`导出失败: ${url}`, result) } else { console.log(`导出完成: ${url}`) } } }) } } // 创建默认实例 export const editorApi = new EditorApi()