import axios from 'axios' import { ElMessage } from 'element-plus' import router from '../router' const api = axios.create({ baseURL: '/api', timeout: 30000, }) // 请求拦截:自动带 token api.interceptors.request.use(config => { const token = localStorage.getItem('token') if (token) { config.headers.Authorization = `Bearer ${token}` } return config }) // 响应拦截:统一错误处理 api.interceptors.response.use( res => res.data, err => { const msg = err.response?.data?.detail || '请求失败' if (err.response?.status === 401) { localStorage.removeItem('token') router.push('/login') ElMessage.error('登录已过期,请重新登录') } else { ElMessage.error(msg) } return Promise.reject(err) } ) export default api // ── 认证 ── export const authApi = { login: (data) => api.post('/auth/login', data), me: () => api.get('/auth/me'), } // ── 用户 ── export const userApi = { list: () => api.get('/users/'), create: (data) => api.post('/users/', data), update: (id, data) => api.put(`/users/${id}`, data), get: (id) => api.get(`/users/${id}`), } // ── 项目 ── export const projectApi = { list: (params) => api.get('/projects/', { params }), create: (data) => api.post('/projects/', data), update: (id, data) => api.put(`/projects/${id}`, data), get: (id) => api.get(`/projects/${id}`), complete: (id) => api.post(`/projects/${id}/complete`), settlement: (id) => api.get(`/projects/${id}/settlement`), efficiency: (id) => api.get(`/projects/${id}/efficiency`), } // ── 内容提交 ── export const submissionApi = { list: (params) => api.get('/submissions/', { params }), create: (data) => api.post('/submissions/', data), update: (id, data) => api.put(`/submissions/${id}`, data), history: (id) => api.get(`/submissions/${id}/history`), } // ── 成本 ── export const costApi = { listAITools: () => api.get('/costs/ai-tools'), createAITool: (data) => api.post('/costs/ai-tools', data), deleteAITool: (id) => api.delete(`/costs/ai-tools/${id}`), listOutsource: (params) => api.get('/costs/outsource', { params }), createOutsource: (data) => api.post('/costs/outsource', data), deleteOutsource: (id) => api.delete(`/costs/outsource/${id}`), createOverride: (data) => api.post('/costs/overrides', data), listOverrides: (params) => api.get('/costs/overrides', { params }), } // ── 仪表盘 ── export const dashboardApi = { get: () => api.get('/dashboard'), }