feat: 统计分析(卡片/漏斗/趋势/分布/推送健康,ECharts)
- admin 统计分析页(views/stats/overview): 指标卡四张(口径文案沿用 仪表盘)/ 漏斗横向条形(有序单色明度阶梯,标注 数量·占上一级%)/ 按日趋势双线(窗口内无数据日期前端补零)/ 意向环形(分类三槽固定 指派,色随实体不随筛选)/ 来源·站点·国家 Top10 横向条形(名义类目 统一单色)/ 推送健康表(四状态计数 + duplicated 子集行) - 筛选一行作用全部图表: 时间档(今天/近7天/近30天/自定义区间,自定义 不完整不发请求并提示)+ 租户切换(超管含"全部"合并选项,停用租户 标注;租户管理员固定自己) - charts.ts 纯函数层(选项构建 + 双模式主题档),配色经 validate_palette.js 明暗双模式校验(分类/漏斗 ordinal 全过; 意向饼语义红绿组 CVD 硬伤弃用改分类槽) - statsRange.ts 扩展自定义区间解析(既有仪表盘导出不动); 新增 charts/resolveStatsRange 单测 19 例(vitest 120→139) - 修复 merge_stats distributions 尾随逗号 1 元组 bug(合并端点曾把 distributions 序列化成 JSON 数组,单租户路径不受累)+ 回归钉子; 后端 595 测试全过 Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -374,6 +374,10 @@ def test_cross_tenant_super_view(super_client, tmp_path):
|
||||
{"date": "2026-01-05", "conversations": 1, "leads": 1},
|
||||
{"date": "2026-01-06", "conversations": 2, "leads": 1},
|
||||
]
|
||||
# 回归钉子: merge_stats 的 distributions 必须是对象(曾因赋值行尾随逗号
|
||||
# 变 1 元组序列化成 JSON 数组,单租户路径不受累——Phase 3 Task 8 冒烟发现)
|
||||
assert body["distributions"]["intent"] == {
|
||||
"interested": 1, "not_interested": 1, "pending": 0}
|
||||
assert body["push_health"]["success"] == 1
|
||||
assert not (tmp_path / "tenants" / "jcc.db").exists() # 未为统计建空库
|
||||
|
||||
|
||||
Reference in New Issue
Block a user