本项目已集成完整的 API 请求拦截器系统,包括:
src/
├── utils/
│ ├── request.js # axios 拦截器配置
│ └── auth.js # Token 管理工具
├── api/
│ └── index.js # API 接口封装
└── components/
└── ApiExample.vue # API 使用示例
server: {
proxy: {
'/api': {
target: 'https://sit-kelamayi.4dage.com',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, '/api')
}
}
}
在 src/utils/request.js 中的 needsTokenApis 数组中配置需要携带 token 的接口:
const needsTokenApis = [
'/api/user', // 用户相关接口
'/api/booking', // 预约相关接口
'/api/activity/register', // 活动报名
'/api/collection', // 收藏相关接口
]
import { museumApi, userApi } from '@/api'
// 获取轮播图(不需要token)
const carouselData = await museumApi.getCarouselList({
pageNum: 1,
pageSize: 5,
status: 1,
})
// 获取用户信息(需要token)
const userInfo = await userApi.getUserInfo()
// 在组件中
const { proxy } = getCurrentInstance()
const data = await proxy.$api.museumApi.getExhibitionList(params)
import { setToken, setUserInfo } from '@/utils/auth'
// 登录成功后
setToken(token, remember) // remember: true=localStorage, false=sessionStorage
setUserInfo(userInfo, remember)
import { isLoggedIn, getToken } from '@/utils/auth'
if (isLoggedIn()) {
// 已登录
const token = getToken()
}
import { clearAuth } from '@/utils/auth'
// 退出登录时
clearAuth()
getCarouselList(params) - 获取轮播图列表getExhibitionList(params) - 获取展览列表getExhibitionDetail(id) - 获取展览详情getActivityList(params) - 获取活动列表getActivityDetail(id) - 获取活动详情getNewsList(params) - 获取新闻列表getNewsDetail(id) - 获取新闻详情createBooking(data) - 创建预约getBookingList(params) - 获取预约列表getBookingDetail(id) - 获取预约详情cancelBooking(id) - 取消预约getUserInfo() - 获取用户信息updateUserInfo(data) - 更新用户信息changePassword(data) - 修改密码registerActivity(data) - 报名活动getRegistrationList(params) - 获取报名列表cancelRegistration(id) - 取消报名addCollection(data) - 添加收藏removeCollection(id) - 取消收藏getCollectionList(params) - 获取收藏列表拦截器会自动处理以下错误:
查看 src/components/ApiExample.vue 了解完整的使用示例。
如需添加新接口,请在 src/api/index.js 中添加:
// 添加新的接口分类
export const newApi = {
// 新接口方法
getNewData: (params) => request.get('/api/new/data', { params }),
createNewData: (data) => request.post('/api/new/data', data),
}
// 如果需要 token,在 request.js 的 needsTokenApis 中添加路径