包含多个会话的累积代码变更: - 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>
74 lines
3.3 KiB
Markdown
74 lines
3.3 KiB
Markdown
# P7→NS1/RNS1 缺失项 #8:本月/上月切换的交互细节
|
||
|
||
## 简要结论
|
||
- 状态:⚠️ 部分解决
|
||
- 风险等级:🟠 中
|
||
- performance-records 页面已实现月份切换(含 loading 状态和数据刷新),但 performance 主页面尚未实现月份切换功能(仅展示当月数据,使用 mock 骨架数据)。两个页面均无切换动画。
|
||
|
||
## 详细审查
|
||
|
||
### 审查范围
|
||
- `apps/miniprogram/miniprogram/pages/performance/performance.ts` — 绩效主页面逻辑
|
||
- `apps/miniprogram/miniprogram/pages/performance/performance.wxml` — 绩效主页面模板
|
||
- `apps/miniprogram/miniprogram/pages/performance-records/performance-records.ts` — 业绩明细页逻辑
|
||
- `apps/miniprogram/miniprogram/pages/performance-records/performance-records.wxml` — 业绩明细页模板
|
||
- `apps/backend/app/routers/xcx_performance.py` — 后端路由参数
|
||
|
||
### 发现
|
||
|
||
1. **performance-records 页面月份切换已实现**:
|
||
- 有 `switchMonth()` 方法,支持 prev/next 方向切换
|
||
- 有 `canGoPrev`/`canGoNext` 状态控制按钮可用性
|
||
- 切换后调用 `loadData()` 重新请求数据
|
||
- 有 `pageState: 'loading'` 状态展示 loading 浮层
|
||
- 不能超过当前月(`canGoNext` 逻辑正确)
|
||
|
||
2. **performance 主页面未实现月份切换**:
|
||
- `loadData()` 中硬编码 `year = nowYear, month = nowMonth`,仅展示当月
|
||
- WXML 中无月份切换 UI 组件
|
||
- 数据仍使用 `setTimeout` + mock 骨架数据,未接入真实 API
|
||
- 有 `TODO: 联调时从接口参数或页面参数获取 year/month` 注释
|
||
|
||
3. **后端 API 已支持月份参数**:PERF-1 和 PERF-2 均接受 `year`/`month` 查询参数。
|
||
|
||
4. **无切换动画**:两个页面的月份切换均为即时替换,无过渡动画效果。
|
||
|
||
### 证据
|
||
|
||
performance.ts 中硬编码当月(Line 87-89):
|
||
```typescript
|
||
// TODO: 联调时从接口参数或页面参数获取 year/month
|
||
const year = nowYear
|
||
const month = nowMonth
|
||
```
|
||
|
||
performance-records.ts 中月份切换实现(switchMonth 方法):
|
||
```typescript
|
||
switchMonth(e: WechatMiniprogram.TouchEvent) {
|
||
const direction = e.currentTarget.dataset.direction as 'prev' | 'next'
|
||
let { currentYear, currentMonth } = this.data
|
||
// ... 月份加减逻辑 ...
|
||
this.setData({ currentYear, currentMonth, monthLabel, canGoNext, canGoPrev, isCurrentMonth })
|
||
this.loadData()
|
||
}
|
||
```
|
||
|
||
performance-records.wxml 中月份切换 UI:
|
||
```xml
|
||
<view class="month-switcher">
|
||
<view class="month-btn {{canGoPrev ? '' : 'month-btn-disabled'}}" data-direction="prev" bindtap="switchMonth">
|
||
<t-icon name="chevron-left" size="32rpx" />
|
||
</view>
|
||
<text class="month-label">{{monthLabel}}</text>
|
||
<view class="month-btn {{canGoNext ? '' : 'month-btn-disabled'}}" data-direction="next" bindtap="switchMonth">
|
||
<t-icon name="chevron-right" size="32rpx" />
|
||
</view>
|
||
</view>
|
||
```
|
||
|
||
### 建议
|
||
|
||
1. **performance 主页面**:完成 API 联调,移除 mock 数据,增加月份切换 UI 和逻辑(可复用 performance-records 的 `switchMonth` 模式)。
|
||
2. **切换动画**:P7 AC2 提到的切换动画可作为低优先级优化,当前 loading 浮层已提供基本的状态反馈。
|
||
3. **数据刷新策略**:切换月份时已有 loading → 请求 → 渲染的完整流程,满足基本需求。可考虑增加本地缓存避免重复请求已加载过的月份。
|