4.9 KiB
杜康好客 · v4.0.15 开发文档
2026-09-02 · ops / admin-web / domain / shared-types
主题:HQ 概览改为分指标折线图;全局筛选不变
1. 版本目标
| # | 任务 | 类型 | 交付 |
|---|---|---|---|
| 1 | 横轴 | 体验 | 粒度 = 时间分桶(日/周/月/季/年) |
| 2 | 纵轴 | 需求 | 总量 / 增量;订单与核销再拆笔数与金额 |
| 3 | 线条 | 需求 | 用户:推广码 / 关联合伙人 / 活动;门店:关联合伙人;订单:用户 / 关联合伙人 / 商品;核销:门店 / 关联合伙人;合伙人无维度单线 |
| 4 | 布局 | 体验 | 一图一行、宽度拉满;改全局筛选全部重绘 |
| 5 | 快链 | 体验 | 「查看」只带全局城市 + 日期,不带线条维度 |
不做:同比、板块筛、环比卡、Prisma 迁移、新权限键。
2. 规则
全局筛选:粒度 + 日期 + 城市;日期旁快捷「上周 / 上月 / 上季度」;查询左侧总量 / 增量单选(互斥,只渲染对应折线图);查询右侧「下载PDF」只导出当前指标下的折线图(不含 KPI / 待办 / 版本)。改粒度不改日期区间。
总量 = 该桶结束时的累计存量(含区间前基线)。增量 = 落入该桶的新增/发生额。订单笔数按 createdAt,订单金额按已付 payAmount(paidAt);核销按 RedeemRecord。
线条口径(与 v4.0.14 归因一致):
| 板块 | 维度 | 字段 |
|---|---|---|
| 用户 | 推广码 | user_promo_attribution;空=自然量 |
| 用户 | 关联合伙人 | assoc_partner_account_id;空=未关联 |
| 用户 | 活动 | 关联合伙人当前 activity_poster_id;空=无活动 |
| 门店 | 关联合伙人 | store.partner_account_id |
| 订单 | 用户 | order.user_id |
| 订单 | 关联合伙人 | 下单用户 assoc_partner_account_id |
| 订单 | 商品 | order.product_id |
| 核销 | 门店 | redeem.store_id |
| 核销 | 关联合伙人 | 核销用户 assoc_partner_account_id |
高基数维度:按期末存量 Top 10,长尾并入「其他」;none 有数据则始终保留。
无对应权限则不返回该图;无任何维度权限时用户/门店/核销退回单线。城市范围只统计负责城。时间北京日历。
3. API
GET /admin/dashboard/analytics?granularity&dateFrom&dateTo&cityId
响应:granularity、range、periods[]、charts[](key/title/unit/href/series)。不再返回 modules / byPeriod / byCity / byProduct / byPartner / 板块筛参数。
GET /admin/dashboard/stats、/version 不变。
4. 变更面
| 层 | 路径 |
|---|---|
| domain | dashboard-series.ts(累计 / TopN) |
| shared-types | ops.ts 折线 DTO |
| API | admin-dashboard-lines.ts、admin-dashboard.service.ts、admin-query.dto.ts |
| HQ | DashboardPage.tsx;订单/合伙人列表消费快链城市与日期 |
5. 验收
- 全局:粒度、日期、城市;日期快捷上周/上月/上季度;查询左侧总量/增量单选只出对应图
- 查询右侧下载 PDF:仅当前总量或增量折线图;不含 KPI / 待办 / 版本
- 改粒度不改日期区间;改全局筛选(除指标单选)全部折线重绘
- 每个指标×维度一张全宽折线图;合伙人仅单线
- 日粒度横轴为日期区间按日划分
- 「查看」只带
cityId+createdFrom/createdTo,不带推广码/合伙人/商品等 - 客服无合伙人/门店/核销图
- 待办卡与超管发版区不变
- domain 折线单测通过
6. 活动图上传压缩(DPT-20260902-849)
6.1 目标
HQ 上传活动底图时,后端用 Sharp 自动等比缩放至 v4.0.7 底图限制(最长边 ≤ 2500px、宽×高 ≤ 400 万),并在响应与表单中提示尺寸。
6.2 规则
- 入口:
POST /common/resources/upload,bizType=ACTIVITY_POSTER、mediaType=IMAGE - 尺寸合规:原样存 OSS,响应
image.compressed=false - 尺寸超限:Sharp 等比缩放后存 OSS,响应含
width/height/originalWidth/originalHeight/compressed - 有 alpha 通道保留 PNG;否则按原 mime 或 JPEG quality 85 输出
- 压缩后仍超过
OSS_MAX_UPLOAD_BYTES→ 4xx,文案含当前尺寸 - 手动粘贴 URL 仍不经上传压缩;合成时沿用 v4.0.7 校验
6.3 变更面
| 层 | 路径 |
|---|---|
| shared-types | activity-poster.ts:activityPosterResizeTarget、OssUploadImageMeta、ACTIVITY_POSTER_UPLOAD_HINT |
| API | common/image/activity-poster-upload.util.ts、resource.service.ts |
| HQ | OssUpload.tsx、ActivityPostersPage.tsx、lib/upload.ts |
无 Prisma 迁移。
6.4 验收
- 上传 1080×1920:成功,提示尺寸,未标记压缩
- 上传 4000×3000:成功,提示压缩后尺寸与原尺寸
- 保存后「为该合伙人下载」/ zip 导出不再报底图过大
- 非图片 / 损坏文件:明确 4xx
- AVATAR 等其他 bizType 行为不变