72 lines
1.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import axios from 'axios'
import ENV_CONFIG from '@/config/env'
// 创建axios实例
const api = axios.create({
baseURL: ENV_CONFIG.API_BASE_URL,
timeout: ENV_CONFIG.REQUEST_TIMEOUT,
headers: {
'Content-Type': 'application/json'
}
})
// 请求拦截器 - 添加token
api.interceptors.request.use(
(config) => {
const token = localStorage.getItem(ENV_CONFIG.TOKEN_KEY)
if (token) {
config.headers.Authorization = `Bearer ${token}`
}
return config
},
(error) => {
return Promise.reject(error)
}
)
// 响应拦截器 - 处理错误
api.interceptors.response.use(
(response) => {
const data = response.data
// 检查后端返回的状态码
if (data.code === 0) {
// 成功返回data字段的内容
return data.data
} else {
// 失败,抛出错误
return Promise.reject(new Error(data.msg || '请求失败'))
}
},
(error) => {
if (error.response?.status === 401) {
// token过期清除本地存储
localStorage.removeItem(ENV_CONFIG.TOKEN_KEY)
localStorage.removeItem(ENV_CONFIG.USER_INFO_KEY)
window.location.href = '/#/login'
}
return Promise.reject(error)
}
)
// 用户登录接口
export const login = (data: { account: string; password: string }) => {
return api.post('/admin/login', data)
}
// 获取管理员信息接口
export const getUserInfo = () => {
return api.get('/admin/info')
}
// 管理员登出接口
export const logout = () => {
return api.post('/admin/logout')
}
// 修改密码接口
export const changePassword = (data: { oldPassword: string; newPassword: string }) => {
return api.post('/admin/change-password', data)
}
export default api