86 lines
2.5 KiB
JavaScript
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'),
|
|
}
|