# API 拦截器使用说明 ## 概述 本项目已集成完整的 API 请求拦截器系统,包括: - 统一的请求/响应拦截 - Token 自动管理 - 错误处理 - 接口代理配置 ## 文件结构 ``` src/ ├── utils/ │ ├── request.js # axios 拦截器配置 │ └── auth.js # Token 管理工具 ├── api/ │ └── index.js # API 接口封装 └── components/ └── ApiExample.vue # API 使用示例 ``` ## 配置说明 ### 1. 代理配置 (vite.config.js) ```javascript server: { proxy: { '/api': { target: 'https://sit-kelamayi.4dage.com', changeOrigin: true, rewrite: (path) => path.replace(/^\/api/, '/api') } } } ``` ### 2. 需要 Token 的接口配置 在 `src/utils/request.js` 中的 `needsTokenApis` 数组中配置需要携带 token 的接口: ```javascript const needsTokenApis = [ '/api/user', // 用户相关接口 '/api/booking', // 预约相关接口 '/api/activity/register', // 活动报名 '/api/collection', // 收藏相关接口 ] ``` ## API 使用方法 ### 方式一:直接导入使用 ```javascript import { museumApi, userApi } from '@/api' // 获取轮播图(不需要token) const carouselData = await museumApi.getCarouselList({ pageNum: 1, pageSize: 5, status: 1, }) // 获取用户信息(需要token) const userInfo = await userApi.getUserInfo() ``` ### 方式二:使用全局 API ```javascript // 在组件中 const { proxy } = getCurrentInstance() const data = await proxy.$api.museumApi.getExhibitionList(params) ``` ## Token 管理 ### 设置 Token ```javascript import { setToken, setUserInfo } from '@/utils/auth' // 登录成功后 setToken(token, remember) // remember: true=localStorage, false=sessionStorage setUserInfo(userInfo, remember) ``` ### 检查登录状态 ```javascript import { isLoggedIn, getToken } from '@/utils/auth' if (isLoggedIn()) { // 已登录 const token = getToken() } ``` ### 清除认证信息 ```javascript import { clearAuth } from '@/utils/auth' // 退出登录时 clearAuth() ``` ## 接口列表 ### 博物馆相关接口 - `getCarouselList(params)` - 获取轮播图列表 - `getExhibitionList(params)` - 获取展览列表 - `getExhibitionDetail(id)` - 获取展览详情 - `getActivityList(params)` - 获取活动列表 - `getActivityDetail(id)` - 获取活动详情 - `getNewsList(params)` - 获取新闻列表 - `getNewsDetail(id)` - 获取新闻详情 ### 预约相关接口(需要 Token) - `createBooking(data)` - 创建预约 - `getBookingList(params)` - 获取预约列表 - `getBookingDetail(id)` - 获取预约详情 - `cancelBooking(id)` - 取消预约 ### 用户相关接口(需要 Token) - `getUserInfo()` - 获取用户信息 - `updateUserInfo(data)` - 更新用户信息 - `changePassword(data)` - 修改密码 ### 活动报名接口(需要 Token) - `registerActivity(data)` - 报名活动 - `getRegistrationList(params)` - 获取报名列表 - `cancelRegistration(id)` - 取消报名 ### 收藏相关接口(需要 Token) - `addCollection(data)` - 添加收藏 - `removeCollection(id)` - 取消收藏 - `getCollectionList(params)` - 获取收藏列表 ## 错误处理 拦截器会自动处理以下错误: - **401/403**: 自动清除 token,提示重新登录 - **404**: 接口不存在 - **500**: 服务器错误 - **网络错误**: 网络连接失败 ## 示例组件 查看 `src/components/ApiExample.vue` 了解完整的使用示例。 ## 注意事项 1. **Token 自动管理**: 拦截器会自动在需要的接口中添加 Authorization 头 2. **错误统一处理**: 所有 API 错误都会被拦截器捕获并统一处理 3. **请求时间戳**: 自动为所有请求添加时间戳,防止缓存 4. **开发环境代理**: 开发时通过 Vite 代理转发到测试服务器 5. **生产环境**: 需要配置正确的 API 基础路径 ## 扩展接口 如需添加新接口,请在 `src/api/index.js` 中添加: ```javascript // 添加新的接口分类 export const newApi = { // 新接口方法 getNewData: (params) => request.get('/api/new/data', { params }), createNewData: (data) => request.post('/api/new/data', data), } // 如果需要 token,在 request.js 的 needsTokenApis 中添加路径 ```