2026-02-12 14:24:05 +08:00

86 lines
2.5 KiB
JavaScript

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'),
}