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` - 教师列表页面
|