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