Files
Neo-ZQYY/docs/prd/Neo_Specs/review-audit/P9-NS1-05.md
Neo 6f8f12314f 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>
2026-04-06 00:03:48 +08:00

62 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# P9→NS1/RNS1 缺失项 #5客户详情页 Banner 区域的视觉设计
## 简要结论
- 状态:✅ 已解决
- 风险等级:🟡 低
- Banner 区域已实现完整的 4 字段布局(储值余额/60天消费/理想间隔/距今到店),含渐变背景、毛玻璃统计栏、颜色区分。
## 详细审查
### 审查范围
- `apps/backend/app/schemas/xcx_customers.py` — Banner 字段定义
- `apps/backend/app/services/customer_service.py` — Banner 字段查询
- `apps/miniprogram/miniprogram/pages/customer-detail/customer-detail.wxml` — Banner 区域模板
- `apps/miniprogram/miniprogram/pages/customer-detail/customer-detail.wxss` — Banner 区域样式
### 发现
1. **后端4 个 Banner 字段已定义并实现**
- `balance: float | None` — 储值余额
- `consumption_60d: float | None` — 60 天消费
- `ideal_interval: int | None` — 理想间隔
- `days_since_visit: int | None` — 距今到店
- 各字段独立 try/except查询失败降级为 `null`
2. **前端Banner 布局已完整实现**
- SVG 渐变背景图(`banner-bg-dark-gold-aurora.svg`
- 客户头部信息(头像 + 姓名 + 手机号查看/复制)
- 4 格统计栏(`banner-stats`),毛玻璃效果(`backdrop-filter: blur(8px)`
- 颜色区分:余额绿色(`stat-green #6ee7b7`)、距今到店琥珀色(`stat-amber #fcd34d`
3. **布局与 RNS1 T2-1 定义一致**
- 4 个字段均已展示,布局为水平等分 + 分隔线
### 证据
前端 Banner 统计区域:
```html
<view class="banner-stats">
<view class="stat-item stat-border">
<text class="stat-value stat-green">¥{{fmt.safe(detail.balance)}}</text>
<text class="stat-label">储值余额</text>
</view>
<view class="stat-item stat-border">
<text class="stat-value">¥{{fmt.safe(detail.consumption60d)}}</text>
<text class="stat-label">60天消费</text>
</view>
<view class="stat-item stat-border">
<text class="stat-value">{{fmt.safe(detail.idealInterval)}}</text>
<text class="stat-label">理想间隔</text>
</view>
<view class="stat-item">
<text class="stat-value stat-amber">{{fmt.safe(detail.daysSinceVisit)}}</text>
<text class="stat-label">距今到店</text>
</view>
</view>
```
### 建议(如未完全解决)
无重大缺失。可考虑的微调:
- `ideal_interval` 后端当前返回 `None`,需确认数据源是否已接入
- 可添加单位后缀(如"天"、"元")提升可读性