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

250 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 游客模式教师列表完整修复方案
## 问题诊断
从控制台截图可以看到:
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` - 教师列表页面