Some checks failed
Build docker and publish / linux (1.24.5) (push) Failing after 39s
feat(抽奖动态): 修复抽奖动态未渲染问题并优化文案展示 fix(用户概览): 修复用户概览无数据显示问题 feat(新用户列表): 在新用户列表显示称号明细 refactor(待办事项): 移除代办模块并全宽展示实时动态 feat(批量操作): 限制为单用户操作并在批量时提醒 fix(称号分配): 防重复分配称号的改造计划 perf(接口性能): 优化新用户和抽奖动态接口性能 feat(订单漏斗): 优化订单转化漏斗指标计算 docs(测试计划): 完善盲盒运营API核查与闭环测试计划
5.9 KiB
5.9 KiB
目标
- 补齐工作台 4 个模块的真实数据接口与前端对接:订单转化漏斗、活动中奖分析、用户概述、抽奖动态文案完善。
后端接口设计(统一前缀 /api/admin/dashboard)
1) 订单转化漏斗 GET /order_funnel
- 入参:
rangeType=today|7d|30d|custom,start/end(custom 时必填) - 出参:
FunnelData[](与web/admin/src/api/operations.ts定义一致) - 统计口径:
- 访问用户:优先取
log_request中path LIKE '/api/app/%'的唯一访问(去重tid或 IP/UA),范围时间内(internal/repository/mysql/model/log_request.gen.go:13-27) - 下单用户:
orders.created_at范围内下单的唯一用户数(orders.status任意)(internal/repository/mysql/model/orders.gen.go:13-33) - 支付用户:
orders.status=2(已支付)范围内唯一用户数 - 完成订单:订单完成的判定(二选一并取并集):
orders.status=2 AND is_consumed=1或存在shipping_records.status IN (2,3)(已发货/已签收)(internal/repository/mysql/model/shipping_records.gen.go:13-31)
- 访问用户:优先取
- 返回各阶段
count,并计算rate(相对上一阶段)与lostCount。
2) 活动中奖分析 GET /activity_prize_analysis
- 入参:
activity_id(必填),可选rangeType - 出参:
ActivityPrizeAnalysis(activity+prizes[]+summary,与前端类型一致) - 统计口径:
- 奖品模板:
activity_reward_settings(issue_id归属同活动的期)(internal/repository/mysql/model/activity_reward_settings.gen.go:13-27) - 中奖统计:
activity_draw_logs按reward_id分组统计winCount(is_winner=1),drawCount为期内抽奖总次数(internal/repository/mysql/model/activity_draw_logs.gen.go:13-24) - 概率(设置):
weight/Σweight*100(模板无显式概率字段,采用权重归一化) - 概率(实际):
winCount/drawCount*100 - 成本:若模板
product_id非空,关联products.price作为单件成本(internal/repository/mysql/model/products.gen.go:13-25);否则成本为 0 或采用等级默认表(可配置) - 活动信息:
activities+activity_issues组合(名称、时间范围、参与人数=distinctuser_id,总抽奖次数)
- 奖品模板:
3) 用户概述 GET /user_overview
- 入参:
rangeType - 出参:包含:
chart: 最近 N 个时间桶(默认 9 个月)用户注册量序列(来源users.created_at)metrics:totalUsers(系统总量)、totalVisits(log_request中/api/app/%请求计数)、dailyVisits(当天/api/app/%)、weeklyGrowth(近 7 天 vs 上 7 天访问增幅)
- 说明:若实际“访问”定义需更严格,可后续改为埋点表;当前采用请求日志近似。
4) 抽奖动态增强 GET /draw_stream(已有)
- 增加字段:
activityName、issueNumber、prizeName(中奖时) - 数据来源:
activity_issues、activities、activity_reward_settings.name - 现有实现位置:
internal/api/admin/dashboard_admin.go:270-317(将补充字段)
5) 通用
- 时间范围工具沿用:
parseRange/previousWindow/daysBetween(internal/api/admin/dashboard_admin.go:365-417),对custom做 30 天上限;趋势分桶工具已实现(normalizeGranularity/buildBuckets)。 - 路由注册:在
adminAuthApiRouter添加新端点(参考internal/router/router.go:63附近已有 dashboard 路由)。
前端改动
- 文件:
web/admin/src/api/operations.tsfetchOrderFunnel(range)→GET admin/dashboard/order_funnelfetchActivityList()→GET admin/dashboard/activities(返回id,name,type,start,end,status,totalDraws,totalParticipants;也可直接用现有GET /api/admin/activities的列表按需映射)fetchActivityPrizeAnalysis(activityId)→GET admin/dashboard/activity_prize_analysisfetchUserOverview(range)(新增) →GET admin/dashboard/user_overview
- 组件对接:
order-funnel.vue已调用fetchOrderFunnel(web/admin/src/views/dashboard/console/modules/order-funnel.vue:148-153),直接切换数据源即可。activity-prize-analysis.vue使用fetchActivityList/fetchActivityPrizeAnalysis(web/admin/src/views/dashboard/console/modules/activity-prize-analysis.vue:219-225、344-357、367-375),切换到真实 API。active-user.vue当前为静态数据(web/admin/src/views/dashboard/console/modules/active-user.vue:31-46),改为使用fetchUserOverview渲染条形图与 4 个指标。dynamic-stats.vue增强显示中奖文案:“用户在【活动-期】中奖【奖品名】”(使用新增字段),保留参与与中奖标签(web/admin/src/views/dashboard/console/modules/dynamic-stats.vue)。
返回示例
GET /api/admin/dashboard/order_funnel:[{"stage":"访问用户","count":12580,"rate":100,"lostCount":0}, ...]GET /api/admin/dashboard/activity_prize_analysis:结构与前端定义一致,概率为权重归一化。GET /api/admin/dashboard/user_overview:{"chart":[{"date":"2025-03","value":1200},...],"metrics":{"totalUsers":12345,"totalVisits":45678,"dailyVisits":1234,"weeklyGrowth":"+8%"}}GET /api/admin/dashboard/draw_stream:增加activityName/issueNumber/prizeName字段。
验收
- 工作台四模块均显示真实数据;各接口性能在默认范围(≤30 天)内响应合理。
- 环比与趋势计算准确;异常/空数据有合理降级。
后续可选优化
- 为
log_request.created_at、orders.created_at、shipping_records.status、activity_draw_logs.created_at增加索引。 - 活动奖品“成本”可从商品资料或运营配置独立维护,避免 0 值。
确认后我将:
- 补充 3 个新端点与
draw_stream字段;注册路由; - 替换
operations.ts的 Mock 为真实请求; - 调整前端 3 个模块的渲染逻辑;
- 进行构建与联调,提供验证指令与预览链接。