From 2e3eab5fed765099f9e9897abb20c5a1985f6ace Mon Sep 17 00:00:00 2001 From: Leo <98382335+gaoziman@users.noreply.github.com> Date: Mon, 20 Oct 2025 14:05:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0API=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 实现后端接口调用封装 --- src/services/api.js | 106 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 src/services/api.js diff --git a/src/services/api.js b/src/services/api.js new file mode 100644 index 0000000..62384ed --- /dev/null +++ b/src/services/api.js @@ -0,0 +1,106 @@ +/** + * API服务类 + * 处理与后端的所有HTTP通信 + */ +import axios from 'axios'; + +// 创建axios实例 +const api = axios.create({ + baseURL: 'http://localhost:5177/api', + timeout: 300000, // 5分钟超时 + headers: { + 'Content-Type': 'application/json', + }, +}); + +// 请求拦截器 +api.interceptors.request.use( + (config) => { + console.log('发送请求:', config.method.toUpperCase(), config.url); + return config; + }, + (error) => { + console.error('请求错误:', error); + return Promise.reject(error); + } +); + +// 响应拦截器 +api.interceptors.response.use( + (response) => { + console.log('收到响应:', response.status, response.config.url); + return response; + }, + (error) => { + console.error('响应错误:', error); + const message = error.response?.data?.message || '网络请求失败'; + return Promise.reject(new Error(message)); + } +); + +/** + * API接口定义 + */ +export const apiService = { + /** + * 健康检查 + */ + healthCheck: () => { + return api.get('/health'); + }, + + /** + * 上传SQL文件并转换 + * @param {File} file SQL文件 + * @param {Function} onProgress 上传进度回调 + */ + uploadFile: (file, onProgress) => { + const formData = new FormData(); + formData.append('file', file); + + return api.post('/upload', formData, { + headers: { + 'Content-Type': 'multipart/form-data', + }, + onUploadProgress: (progressEvent) => { + if (onProgress) { + const percentCompleted = Math.round( + (progressEvent.loaded * 100) / progressEvent.total + ); + onProgress(percentCompleted); + } + }, + }); + }, + + /** + * 下载转换后的文件 + * @param {number} recordId 转换记录ID + */ + downloadFile: (recordId) => { + return api.get(`/download/${recordId}`, { + responseType: 'blob', + }); + }, + + /** + * 获取转换历史记录 + * @param {number} page 页码 + * @param {number} pageSize 每页数量 + */ + getHistory: (page = 1, pageSize = 20) => { + return api.get('/history', { + params: { page, page_size: pageSize }, + }); + }, + + /** + * 获取单个转换记录详情 + * @param {number} recordId 记录ID + */ + getRecord: (recordId) => { + return api.get(`/record/${recordId}`); + }, +}; + +export default apiService; \ No newline at end of file