159 lines
3.9 KiB
Markdown
159 lines
3.9 KiB
Markdown
|
|
# 教师筛选401错误修复说明
|
|||
|
|
|
|||
|
|
## 问题描述
|
|||
|
|
|
|||
|
|
游客访问教师列表页面时,控制台显示错误:
|
|||
|
|
```
|
|||
|
|
加载筛选选项失败: {code: 401, message: "未登录", data: {…}, silent: true}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
错误发生在 `pages/teacher/list.vue:214`,调用 `api.teacherApi.getFilterOptions()` 时返回401。
|
|||
|
|
|
|||
|
|
## 根本原因
|
|||
|
|
|
|||
|
|
`/api/teacher/filter-options` 接口没有添加到游客白名单,导致游客访问时返回401错误。
|
|||
|
|
|
|||
|
|
虽然前端已经配置了静默失败(`silent: true`),但页面会使用默认的筛选选项,这不是最佳体验。
|
|||
|
|
|
|||
|
|
## 修复方案
|
|||
|
|
|
|||
|
|
### 1. 前端修复(request.js)
|
|||
|
|
|
|||
|
|
在 `GUEST_ALLOWED_URLS` 中添加 `/api/teacher/filter-options`:
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
const GUEST_ALLOWED_URLS = [
|
|||
|
|
'/api/notification/unread-count',
|
|||
|
|
'/api/timecard/list',
|
|||
|
|
'/api/home/courses',
|
|||
|
|
'/api/banner/list',
|
|||
|
|
'/api/service/list',
|
|||
|
|
'/api/service/search',
|
|||
|
|
'/api/category/all',
|
|||
|
|
'/api/special-course/list',
|
|||
|
|
'/api/special-course/detail',
|
|||
|
|
'/api/teacher/list',
|
|||
|
|
'/api/teacher/filter-options', // ✅ 新增
|
|||
|
|
'/api/course/list',
|
|||
|
|
'/api/course/detail',
|
|||
|
|
'/api/order/list',
|
|||
|
|
'/api/order/list-full'
|
|||
|
|
]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 后端修复(WebMvcConfig.java)
|
|||
|
|
|
|||
|
|
在 JWT 拦截器的排除路径中添加 `/api/teacher/filter-options`:
|
|||
|
|
|
|||
|
|
```java
|
|||
|
|
registry.addInterceptor(jwtInterceptor)
|
|||
|
|
.addPathPatterns("/api/**")
|
|||
|
|
.excludePathPatterns(
|
|||
|
|
"/api/auth/**",
|
|||
|
|
"/api/teacher/list",
|
|||
|
|
"/api/teacher/detail/**",
|
|||
|
|
"/api/teacher/filter-options", // ✅ 新增
|
|||
|
|
"/api/service/**",
|
|||
|
|
// ... 其他路径
|
|||
|
|
);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 执行步骤
|
|||
|
|
|
|||
|
|
### 方式1:使用脚本(推荐)
|
|||
|
|
|
|||
|
|
运行 `[一次性]清除缓存重新编译-教师筛选修复-2026-02-01.bat`
|
|||
|
|
|
|||
|
|
### 方式2:手动执行
|
|||
|
|
|
|||
|
|
1. **清除小程序缓存**
|
|||
|
|
```bash
|
|||
|
|
cd peidu/uniapp
|
|||
|
|
rmdir /s /q unpackage\dist
|
|||
|
|
rmdir /s /q node_modules\.cache
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **重新编译小程序**
|
|||
|
|
```bash
|
|||
|
|
npm run build:mp-weixin
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **停止后端服务**
|
|||
|
|
|
|||
|
|
4. **重新编译后端**
|
|||
|
|
```bash
|
|||
|
|
cd peidu/backend
|
|||
|
|
mvn clean package -DskipTests
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
5. **启动后端服务**
|
|||
|
|
|
|||
|
|
6. **清除微信开发者工具缓存**
|
|||
|
|
- 工具 → 清除缓存 → 全部清除
|
|||
|
|
|
|||
|
|
7. **重新编译小程序**
|
|||
|
|
|
|||
|
|
## 验证步骤
|
|||
|
|
|
|||
|
|
1. 以游客身份访问教师列表页面
|
|||
|
|
2. 点击"科目"、"区域"、"年级"筛选按钮
|
|||
|
|
3. 检查控制台是否还有401错误
|
|||
|
|
4. 确认筛选选项是否正常显示(不是默认选项)
|
|||
|
|
|
|||
|
|
## 预期结果
|
|||
|
|
|
|||
|
|
- ✅ 控制台不再显示 `/api/teacher/filter-options` 的401错误
|
|||
|
|
- ✅ 筛选选项正常加载(从后端获取真实数据)
|
|||
|
|
- ✅ 游客可以正常使用筛选功能
|
|||
|
|
- ✅ 不影响已登录用户的使用
|
|||
|
|
|
|||
|
|
## 技术细节
|
|||
|
|
|
|||
|
|
### 接口说明
|
|||
|
|
|
|||
|
|
- **接口路径**: `/api/teacher/filter-options`
|
|||
|
|
- **请求方法**: GET
|
|||
|
|
- **是否需要登录**: 否(游客可访问)
|
|||
|
|
- **返回数据**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"subjects": ["语文", "数学", "英语", ...],
|
|||
|
|
"areas": ["朝阳区", "海淀区", ...],
|
|||
|
|
"grades": ["1-3年级", "4-6年级", ...]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 页面逻辑
|
|||
|
|
|
|||
|
|
1. 页面加载时调用 `loadFilterOptions()` 获取筛选选项
|
|||
|
|
2. 如果接口失败(401),使用 `setDefaultFilterOptions()` 设置默认选项
|
|||
|
|
3. 用户点击筛选按钮时显示筛选弹窗
|
|||
|
|
4. 选择筛选条件后重新加载教师列表
|
|||
|
|
|
|||
|
|
### 错误处理
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
try {
|
|||
|
|
const res = await api.teacherApi.getFilterOptions()
|
|||
|
|
// 处理数据...
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('加载筛选选项失败:', error)
|
|||
|
|
// 使用默认选项
|
|||
|
|
this.setDefaultFilterOptions()
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 相关文件
|
|||
|
|
|
|||
|
|
- `peidu/uniapp/src/utils/request.js` - 前端请求配置
|
|||
|
|
- `peidu/backend/src/main/java/com/peidu/config/WebMvcConfig.java` - 后端拦截器配置
|
|||
|
|
- `peidu/uniapp/src/pages/teacher/list.vue` - 教师列表页面
|
|||
|
|
- `peidu/uniapp/src/api/index.js` - API定义
|
|||
|
|
|
|||
|
|
## 注意事项
|
|||
|
|
|
|||
|
|
1. 修改后必须重新编译前端和后端
|
|||
|
|
2. 必须清除微信开发者工具缓存
|
|||
|
|
3. 确保后端服务已重启
|
|||
|
|
4. 这个修复不影响已登录用户的功能
|