refactor: 全面迁移 vue-class-component 至 Vue 3 Composition API
- 将所有页面组件从 class 语法重写为 <script setup> 风格 - App.vue / Login.vue / Home.vue / Welcome.vue - api: Hitokoto.vue / HitokotoAdd.vue / Music.vue / PhotoWall.vue / SourceImage.vue - system: Article.vue / Statistics.vue / SystemConfig.vue / SystemConfigAdd.vue / SystemRole.vue / SystemUser.vue - 新增 src/utils/http.ts:独立 axios 实例,含请求/响应拦截器,替代 vue-axios 插件 - baselist.ts:abstract class BaseList<T> → useBaseList<T>() 组合式函数 - types.ts:VForm 类型改用 Element Plus 原生 FormInstance - main.ts:移除 vue-axios 及内联 axios 配置,路由守卫直接引用 store - 依赖清理:移除 vue-class-component、vue-axios
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
import axios from 'axios'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import store from '@/store'
|
||||
import { router } from '@/router'
|
||||
|
||||
const http = axios.create({
|
||||
timeout: 10000
|
||||
})
|
||||
|
||||
// 添加请求拦截器
|
||||
http.interceptors.request.use(config => {
|
||||
const token = store.state.loginInfo.token
|
||||
if (token !== null && config.headers) {
|
||||
config.headers.token = token
|
||||
}
|
||||
return config
|
||||
}, err => {
|
||||
ElMessage.error('请求超时,请稍后再试')
|
||||
return Promise.reject(err)
|
||||
})
|
||||
|
||||
http.interceptors.response.use(res => {
|
||||
return res.data
|
||||
}, err => {
|
||||
if (err.response.status >= 500) {
|
||||
ElMessage.error('服务器内部错误')
|
||||
} else if (err.response.status >= 400) {
|
||||
if (typeof err.response.data.message === 'string') {
|
||||
ElMessage.warning(err.response.data.message)
|
||||
} else if (Array.isArray(err.response.data.message)) {
|
||||
let message = err.response.data.message.join('<br/>')
|
||||
ElMessage.warning(message)
|
||||
}
|
||||
if (err.response.status === 403) {
|
||||
router.push('/login')
|
||||
}
|
||||
}
|
||||
return Promise.reject(err)
|
||||
})
|
||||
|
||||
export default http
|
||||
Reference in New Issue
Block a user