144 lines
3.8 KiB
Markdown
144 lines
3.8 KiB
Markdown
|
|
# 审核状态页面"未找到申请信息"问题修复
|
||
|
|
|
||
|
|
## 问题现象
|
||
|
|
- 提交陪伴员申请后,弹窗显示"审核中" ✅
|
||
|
|
- 点击"查看审核状态"进入审核状态页面,显示"未找到申请信息" ❌
|
||
|
|
|
||
|
|
## 问题原因
|
||
|
|
|
||
|
|
### 根本原因
|
||
|
|
**数据读取顺序错误**
|
||
|
|
|
||
|
|
原来的逻辑:
|
||
|
|
```
|
||
|
|
1. 先尝试从后端API获取数据
|
||
|
|
2. API失败后,才从本地存储读取
|
||
|
|
```
|
||
|
|
|
||
|
|
但实际情况:
|
||
|
|
```
|
||
|
|
1. 提交申请时,只保存到本地存储(模拟提交,没有调用后端API)
|
||
|
|
2. 查询时,先调用后端API → 失败(API不存在或返回空)
|
||
|
|
3. 降级到本地存储 → 但可能已被清除或丢失
|
||
|
|
4. 最终显示"未找到申请信息"
|
||
|
|
```
|
||
|
|
|
||
|
|
### 代码分析
|
||
|
|
|
||
|
|
**提交申请** (`teacher/apply.vue`):
|
||
|
|
```javascript
|
||
|
|
// 模拟提交,只保存到本地
|
||
|
|
const application = {
|
||
|
|
...this.form,
|
||
|
|
role: 'teacher',
|
||
|
|
status: 'pending',
|
||
|
|
applyTime: new Date().toISOString()
|
||
|
|
}
|
||
|
|
uni.setStorageSync('teacherApplication', application)
|
||
|
|
```
|
||
|
|
|
||
|
|
**查询状态** (`application-status.vue`):
|
||
|
|
```javascript
|
||
|
|
// 原来的逻辑:先调用API,失败后才读本地
|
||
|
|
const res = await this.$http.get('/api/teacher/application/status')
|
||
|
|
if (res && res.code === 200) {
|
||
|
|
// 使用API数据
|
||
|
|
} else {
|
||
|
|
// 降级到本地存储
|
||
|
|
const localData = uni.getStorageSync('teacherApplication')
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## 解决方案
|
||
|
|
|
||
|
|
### 修改文件
|
||
|
|
`peidu/uniapp/src/common-package/pages/auth/application-status.vue`
|
||
|
|
|
||
|
|
### 修改内容
|
||
|
|
**调整数据读取顺序**:优先从本地存储读取,如果本地没有再调用API
|
||
|
|
|
||
|
|
```javascript
|
||
|
|
async loadApplication() {
|
||
|
|
// 🔥 修复:优先从本地存储读取
|
||
|
|
const storageKey = `${this.role}Application`
|
||
|
|
const localData = uni.getStorageSync(storageKey)
|
||
|
|
|
||
|
|
if (localData) {
|
||
|
|
console.log('从本地存储读取申请信息:', localData)
|
||
|
|
this.application = localData
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
// 如果本地没有,尝试从后端API获取
|
||
|
|
const res = await this.$http.get(apiUrl)
|
||
|
|
// ...
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### 修改理由
|
||
|
|
1. **提交申请时只保存到本地** - 所以本地存储是主要数据源
|
||
|
|
2. **后端API可能不存在** - 因为是模拟提交,没有真正调用后端
|
||
|
|
3. **本地存储更可靠** - 在当前实现下,本地存储是唯一的数据来源
|
||
|
|
|
||
|
|
## 测试步骤
|
||
|
|
|
||
|
|
### 1. 清除缓存
|
||
|
|
- 微信开发者工具 → 工具 → 清缓存 → 清除全部缓存
|
||
|
|
|
||
|
|
### 2. 重新编译
|
||
|
|
- 保存文件后会自动编译
|
||
|
|
|
||
|
|
### 3. 测试流程
|
||
|
|
1. 填写陪伴员申请表单
|
||
|
|
2. 点击"提交申请"
|
||
|
|
3. 看到"提交成功"弹窗
|
||
|
|
4. 点击"查看审核状态"
|
||
|
|
5. **应该能看到申请信息**,不再显示"未找到申请信息"
|
||
|
|
|
||
|
|
### 4. 验证内容
|
||
|
|
- 申请角色: 陪伴员 ✅
|
||
|
|
- 申请时间: 显示提交时间 ✅
|
||
|
|
- 联系电话: 显示填写的手机号 ✅
|
||
|
|
- 状态: 审核中 ✅
|
||
|
|
|
||
|
|
## 后续优化建议
|
||
|
|
|
||
|
|
### 1. 实现真实的后端API
|
||
|
|
目前是模拟提交,建议实现真实的后端接口:
|
||
|
|
```java
|
||
|
|
@PostMapping("/api/teacher/application/submit")
|
||
|
|
public Result<Long> submitApplication(@RequestBody TeacherApplicationDTO dto) {
|
||
|
|
// 保存到数据库
|
||
|
|
// 返回申请ID
|
||
|
|
}
|
||
|
|
|
||
|
|
@GetMapping("/api/teacher/application/status")
|
||
|
|
public Result<TeacherApplicationVO> getApplicationStatus(@CurrentUser Long userId) {
|
||
|
|
// 从数据库查询
|
||
|
|
// 返回申请状态
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. 数据同步
|
||
|
|
- 提交时同时保存到本地和后端
|
||
|
|
- 查询时优先从后端获取最新状态
|
||
|
|
- 本地存储作为缓存和降级方案
|
||
|
|
|
||
|
|
### 3. 状态更新
|
||
|
|
- 管理员审核通过/拒绝后,通过推送通知用户
|
||
|
|
- 用户打开页面时,自动刷新最新状态
|
||
|
|
|
||
|
|
## 注意事项
|
||
|
|
|
||
|
|
1. **本地存储可能丢失** - 用户清除缓存或卸载小程序后会丢失
|
||
|
|
2. **无法跨设备同步** - 换设备后看不到申请状态
|
||
|
|
3. **管理员无法审核** - 因为数据只在本地,管理员看不到申请
|
||
|
|
|
||
|
|
这些问题都需要通过实现真实的后端API来解决。
|
||
|
|
|
||
|
|
## 创建时间
|
||
|
|
2026-01-28
|
||
|
|
|
||
|
|
## 修复人员
|
||
|
|
Kiro AI Assistant
|