peixue-dev/Archive/[一次性]游客模式教师列表完整修复-2026-02-01.md

250 lines
5.6 KiB
Markdown
Raw Permalink Normal View History

2026-02-28 17:26:03 +08:00
# 游客模式教师列表完整修复方案
## 问题诊断
从控制台截图可以看到:
1.`/api/teacher/list` 返回 **200 成功**
2.`/api/teacher/filter-options` 返回 **401 未登录**
3. ⚠️ 教师列表页面显示的是默认数据(孙全能、周博学等)
## 根本原因
### 原因1后端配置未生效
虽然已经在 `WebMvcConfig.java` 中添加了 `/api/teacher/filter-options` 的排除配置,但**后端没有重新编译**,旧的配置仍在运行。
### 原因2数据库可能没有教师数据
即使接口返回成功,如果数据库中没有教师数据,`getFilterOptions()` 也会返回空的筛选选项。
## 完整修复步骤
### 步骤1检查数据库中是否有教师数据
运行SQL检查
```sql
-- 查看教师总数
SELECT COUNT(*) as teacher_count FROM teacher;
-- 查看已审核的教师数量status=1
SELECT COUNT(*) as approved_teacher_count
FROM teacher
WHERE status = 1;
-- 查看教师列表前10条
SELECT
id,
name,
real_name,
teacher_name,
phone,
status,
subjects,
service_area,
grades,
create_time
FROM teacher
WHERE status = 1
ORDER BY create_time DESC
LIMIT 10;
```
**如果没有数据**需要先创建测试教师数据见步骤5
### 步骤2停止后端服务
在运行后端的终端按 `Ctrl+C` 停止服务。
### 步骤3重新编译后端
```bash
cd peidu/backend
mvn clean package -DskipTests
```
### 步骤4启动后端服务
```bash
java -jar target/peidu-backend-1.0.0.jar
```
或者使用IDE启动。
### 步骤5创建测试教师数据如果数据库为空
```sql
-- 插入测试教师数据
INSERT INTO teacher (
name,
real_name,
teacher_name,
phone,
status,
subjects,
service_area,
grades,
introduction,
teaching_years,
hourly_rate,
user_id,
create_time,
update_time
) VALUES
(
'孙全能',
'孙全能',
'孙全能',
'13800138001',
1,
'语文,数学,英语',
'朝阳区',
'1-3年级,4-6年级',
'全科辅导专家8年教学经验擅长综合提升学生成绩',
8,
160,
-1001,
NOW(),
NOW()
),
(
'周博学',
'周博学',
'周博学',
'13800138002',
1,
'数学,物理',
'海淀区',
'初中,高中',
'理科专家12年教学经验擅长数理化综合辅导',
12,
170,
-1002,
NOW(),
NOW()
),
(
'吴艺术',
'吴艺术',
'吴艺术',
'13800138003',
1,
'美术,音乐',
'西城区',
'1-3年级,4-6年级,初中',
'艺术专业6年教学经验培养学生艺术素养',
6,
180,
-1003,
NOW(),
NOW()
),
(
'郑音乐',
'郑音乐',
'郑音乐',
'13800138004',
1,
'音乐,钢琴',
'东城区',
'1-3年级,4-6年级',
'音乐教育专业10年教学经验多名学生考级通过',
10,
190,
-1004,
NOW(),
NOW()
);
```
### 步骤6清除前端缓存并重新编译
```bash
cd peidu/uniapp
rmdir /s /q unpackage\dist
rmdir /s /q node_modules\.cache
npm run build:mp-weixin
```
### 步骤7清除微信开发者工具缓存
1. 打开微信开发者工具
2. 点击菜单:**工具 → 清除缓存 → 全部清除**
3. 重新编译小程序
### 步骤8验证修复
1. 以游客身份访问教师列表页面
2. 检查控制台:
-`/api/teacher/list` 应该返回 200
-`/api/teacher/filter-options` 应该返回 200不再是401
3. 点击"科目"、"区域"、"年级"筛选按钮
4. 确认筛选选项是从后端获取的真实数据(不是默认选项)
## 预期结果
修复后应该看到:
1. ✅ 控制台不再有401错误
2. ✅ 教师列表显示真实的教师数据
3. ✅ 筛选选项显示真实的科目、区域、年级数据
4. ✅ 游客可以正常浏览和筛选教师
## 技术细节
### 后端配置WebMvcConfig.java
```java
registry.addInterceptor(jwtInterceptor)
.addPathPatterns("/api/**")
.excludePathPatterns(
"/api/teacher/list", // ✅ 教师列表
"/api/teacher/detail/**", // ✅ 教师详情
"/api/teacher/filter-options", // ✅ 筛选选项
// ... 其他路径
);
```
### 前端配置request.js
```javascript
const GUEST_ALLOWED_URLS = [
'/api/teacher/list', // ✅ 教师列表
'/api/teacher/filter-options', // ✅ 筛选选项
// ... 其他路径
]
```
### 数据库表结构
```sql
teacher 表关键字段:
- status: 1=已认证0=未认证
- subjects: 科目(逗号分隔)
- service_area: 服务区域
- grades: 年级(逗号分隔)
```
## 常见问题
### Q1: 为什么 `/api/teacher/list` 返回200但 `/api/teacher/filter-options` 返回401
A: 因为后端没有重新编译,`WebMvcConfig.java` 的修改没有生效。
### Q2: 为什么教师列表显示的是默认数据?
A: 因为 `/api/teacher/filter-options` 返回401失败前端使用了 `setDefaultFilterOptions()` 中的默认数据。
### Q3: 如何确认后端配置已生效?
A: 重新编译后端,查看控制台日志,应该看到 `/api/teacher/filter-options` 不再经过JWT拦截器。
## 相关文件
- `peidu/backend/src/main/java/com/peidu/config/WebMvcConfig.java` - 后端拦截器配置
- `peidu/backend/src/main/java/com/peidu/controller/TeacherController.java` - 教师控制器
- `peidu/backend/src/main/java/com/peidu/service/impl/TeacherServiceImpl.java` - 教师服务实现
- `peidu/uniapp/src/utils/request.js` - 前端请求配置
- `peidu/uniapp/src/pages/teacher/list.vue` - 教师列表页面