- 角色模型改为 permissions 字段,移除 methods/includeUri/excludeUri - 角色管理页面支持权限树选择,保存时只传最上级权限 - /common/verifyToken 返回 permissions,存入 vuex - 新增 v-permission 指令,所有操作按钮和菜单均按权限控制显示 - 菜单按 list 权限过滤 - 各业务页面按钮加权限指令 - 角色管理列表只显示名称/描述/时间,不显示权限列,权限必选
55 lines
1.4 KiB
TypeScript
55 lines
1.4 KiB
TypeScript
import axios from 'axios'
|
|
import { ElMessage } from 'element-plus'
|
|
import store from '@/store'
|
|
import { router } from '@/router'
|
|
|
|
const http = axios.create({
|
|
baseURL: process.env.VUE_APP_API_BASE,
|
|
timeout: 10000,
|
|
paramsSerializer: {
|
|
indexes: null
|
|
}
|
|
})
|
|
|
|
// 添加请求拦截器
|
|
http.interceptors.request.use(config => {
|
|
const token = store.state.loginInfo.token
|
|
if (token !== null) {
|
|
config.headers.set('token', token)
|
|
}
|
|
return config
|
|
}, err => {
|
|
ElMessage.error('请求超时,请稍后再试')
|
|
return Promise.reject(err)
|
|
})
|
|
|
|
http.interceptors.response.use(res => {
|
|
const responseBody = res.data
|
|
// 统一响应格式处理
|
|
switch (responseBody.code) {
|
|
case 0:
|
|
// 成功,直接返回数据
|
|
return responseBody.data
|
|
case -1:
|
|
// 失败,显示错误信息
|
|
ElMessage.error(responseBody.message || '请求失败')
|
|
return Promise.reject(new Error(responseBody.message || '请求失败'))
|
|
default:
|
|
// 其他情况,兼容没有包装格式的响应
|
|
return res.data
|
|
}
|
|
}, err => {
|
|
if (err.response?.status >= 500) {
|
|
ElMessage.error('服务器内部错误')
|
|
} else if (err.response?.status >= 400) {
|
|
const message = err.response.data?.message
|
|
message && ElMessage.error(message)
|
|
if (err.response.status === 403) {
|
|
router.push('/login')
|
|
}
|
|
}
|
|
return Promise.reject(err)
|
|
})
|
|
|
|
export default http
|