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:
Neo
2026-04-06 00:03:48 +08:00
parent 70324d8542
commit 6f8f12314f
515 changed files with 76604 additions and 7456 deletions

View File

@@ -0,0 +1,60 @@
# P9→NS1/RNS1 缺失项 #2助教详情页档位进度时间轴的视觉规范
## 简要结论
- 状态:⚠️ 部分解决
- 风险等级:🟠 中
- 已实现 `perf-progress-bar` 进度条组件(含渐变填充、刻度标记、高光/火花动画),但非 P9 定义的"时间轴"样式,缺少当前档位高亮节点和升档动画。
## 详细审查
### 审查范围
- `apps/backend/app/schemas/xcx_coaches.py``tier_nodes` 字段定义
- `apps/backend/app/services/coach_service.py``_build_tier_nodes()` 实现
- `apps/miniprogram/miniprogram/components/perf-progress-bar/` — 进度条组件
- `apps/miniprogram/miniprogram/pages/coach-detail/coach-detail.wxml` — 绩效概览区域
- `apps/miniprogram/miniprogram/pages/coach-detail/coach-detail.ts` — 进度条数据构建
### 发现
1. **后端tier_nodes 数据已返回**
- `CoachDetailResponse.tier_nodes: list[float]` 已定义
- `_build_tier_nodes()` 从配置表读取档位节点
2. **前端:进度条组件已实现,但非时间轴**
- `perf-progress-bar` 组件实现了水平进度条,含:
- 渐变填充条(`ppb-fill` + `ppb-gradient-bar`
- 刻度标记(`ppb-ticks`,由 `ticks` 数组动态渲染)
- 高光动画(`ppb-shine`)和火花动画(`ppb-spark`
- 当前档位高亮(`ppb-tick--done` class
- 但这是**水平进度条**,非 P9 定义的**垂直时间轴**样式
- 缺少 P9 定义的"档位节点"tierNodes的时间轴展示如里程碑节点、连接线、当前位置标记
3. **动画已实现但非"升档动画"**
- 高光shine和火花spark是循环播放的装饰动画
- 非 P9 定义的"升档时触发的庆祝动画"
4. **前端 tier_nodes 未使用 API 数据**
- `coach-detail.ts``tierNodes` 硬编码为 `[0, 100, 130, 160, 190, 220]`,注释标注 "Mock实际由接口返回"
- API 返回的 `tier_nodes` 未被前端消费
### 证据
前端硬编码 tierNodes
```typescript
const tierNodes = [0, 100, 130, 160, 190, 220] // Mock实际由接口返回
```
进度条组件刻度渲染(水平进度条,非时间轴):
```html
<view class="ppb-ticks">
<text wx:for="{{ticks}}" wx:key="value"
class="ppb-tick {{currentTier >= index ? 'ppb-tick--done' : ''}}">
{{item.label}}
</text>
</view>
```
### 建议(如未完全解决)
1. 将前端 `tierNodes` 改为使用 API 返回的 `detail.tierNodes` 数据
2. 如需时间轴样式,新建 `tier-timeline` 组件,展示垂直时间轴(里程碑节点 + 连接线 + 当前位置)
3. 添加升档动画:当 `currentTier` 变化时触发一次性庆祝效果