feat: 累积功能变更 — 聊天集成、租户管理、小程序更新、ETL 增强、迁移脚本
包含多个会话的累积代码变更: - backend: AI 聊天服务、触发器调度、认证增强、WebSocket、调度器最小间隔 - admin-web: ETL 状态页、任务管理、调度配置、登录优化 - miniprogram: 看板页面、聊天集成、UI 组件、导航更新 - etl: DWS 新任务(finance_area_daily/board_cache)、连接器增强 - tenant-admin: 项目初始化 - db: 19 个迁移脚本(etl_feiqiu 11 + zqyy_app 8) - packages/shared: 枚举和工具函数更新 - tools: 数据库工具、报表生成、健康检查 - docs: PRD/架构/部署/合约文档更新 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
64
docs/prd/Neo_Specs/review-audit/P6-NS1-14.md
Normal file
64
docs/prd/Neo_Specs/review-audit/P6-NS1-14.md
Normal file
@@ -0,0 +1,64 @@
|
||||
# P6→NS1/RNS1 缺失项 #14:网络异常时的离线提示和重试机制
|
||||
|
||||
## 简要结论
|
||||
- 状态:⚠️ 部分解决
|
||||
- 风险等级:🟠 中
|
||||
- request.ts 有基础的错误抛出和 401 自动刷新机制,页面级有错误状态和重试按钮,但缺少统一的网络异常拦截、离线检测提示和全局重试机制。
|
||||
|
||||
## 详细审查
|
||||
|
||||
### 审查范围
|
||||
- `apps/miniprogram/miniprogram/utils/request.ts`
|
||||
- `apps/miniprogram/miniprogram/pages/task-list/task-list.wxml`
|
||||
- `apps/miniprogram/miniprogram/pages/task-list/task-list.ts`
|
||||
- `apps/miniprogram/miniprogram/pages/task-detail/task-detail.wxml`
|
||||
- `apps/miniprogram/miniprogram/pages/task-detail/task-detail.ts`
|
||||
|
||||
### 发现
|
||||
|
||||
#### 已实现的部分
|
||||
1. `request.ts` 中 `wxRequest` 的 `fail` 回调会 reject 错误(`statusCode: 0`),但未做网络类型判断
|
||||
2. `request.ts` 实现了 401 自动刷新 token + 排队重试机制
|
||||
3. task-list.wxml 有错误状态 UI + 重试按钮:
|
||||
```xml
|
||||
<view class="state-error" wx:if="{{pageState === 'error'}}">
|
||||
<text class="error-text">加载失败,请重试</text>
|
||||
<view class="retry-btn" bindtap="onRetry">重试</view>
|
||||
</view>
|
||||
```
|
||||
4. task-detail.wxml 同样有错误状态 + 重试按钮
|
||||
|
||||
#### 缺失的部分
|
||||
1. `request.ts` 中无 `wx.getNetworkType()` 离线检测
|
||||
2. 无全局网络状态监听(`wx.onNetworkStatusChange`)
|
||||
3. 无统一的网络异常 toast 提示(如"网络连接失败,请检查网络")
|
||||
4. 无请求超时配置(wx.request 默认 60s)
|
||||
5. 无自动重试机制(非 401 场景的网络错误不会自动重试)
|
||||
6. 无离线缓存策略(断网时无法展示上次加载的数据)
|
||||
|
||||
### 证据
|
||||
request.ts 中 fail 回调仅简单 reject:
|
||||
```typescript
|
||||
fail(err) {
|
||||
reject({ statusCode: 0, data: err })
|
||||
},
|
||||
```
|
||||
无网络类型判断、无离线提示、无重试逻辑。
|
||||
|
||||
task-list.ts 中 loadData 的 catch 仅设置错误状态:
|
||||
```typescript
|
||||
} catch {
|
||||
this.setData({ pageState: 'error' })
|
||||
}
|
||||
```
|
||||
无区分网络错误和服务端错误。
|
||||
|
||||
### 建议
|
||||
1. `request.ts` 增强:
|
||||
- 请求前调用 `wx.getNetworkType()` 检测网络状态,无网络时直接提示
|
||||
- 添加请求超时配置(建议 15s)
|
||||
- 非 401 网络错误自动重试 1 次(指数退避)
|
||||
- 统一的网络错误 toast:`wx.showToast({ title: '网络连接失败', icon: 'none' })`
|
||||
2. `app.ts` 中注册 `wx.onNetworkStatusChange` 全局监听,断网时显示顶部提示条
|
||||
3. 页面级错误状态区分"网络错误"和"服务端错误",显示不同的提示文案
|
||||
4. 可选:添加离线缓存(`wx.setStorageSync` 缓存上次成功的列表数据)
|
||||
Reference in New Issue
Block a user