c699ad0b8e
- 功能从 P0 概述扩写为 12 个模块详述(数据大盘/用户/设备/提现/上报审核/比价记录/反馈/广告/CPS分发/系统配置/管理员/审计) - 补充按角色(finance/operator/super)操作权限说明 - 部署注意:NEXT_PUBLIC_MEDIA_BASE 必须指向 App 后端域名,否则 /media 图片 404 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4.7 KiB
4.7 KiB
傻瓜比价 · 运营后台(前端)
Next.js 15 + Ant Design 5,对接 shaguabijia-app-server 的 admin API(app/admin/)。
后端是独立 FastAPI app(端口 8771,复用 app-server 的 models/repositories + 同一 PostgreSQL,
鉴权用独立 JWT)。本仓只是前端。
功能模块
侧边栏 MENU(src/app/(main)/layout.tsx)共 12 个模块,均已上线:
- 数据大盘(
/dashboard)— 核心经营指标概览。 - 用户管理(
/users)— 列表(多条件筛选+服务端排序)+ 360 详情;封禁/解封、调金币、调现金;运营开关:开启新手引导(标记用户重看一次,看完自动恢复)、开/关调试链接(trace 排障)、以及上述操作的批量勾选执行。 - 设备管理(
/devices)— 按硬件 ANDROID_ID 聚合走过新手引导的设备;可单设备或全量「重设新手引导」。 - 提现管理(
/withdraws)— 提现单审核(通过即发起微信打款 / 拒绝退回余额)、查单刷新、批量通过/拒绝/刷新、批量对账,含微信配置健康检查 + 现金账本校验。 - 上报审核(
/price-reports)— 用户上报「某平台更低价」+ 截图,人工核实;通过发放 1000 金币、拒绝需填理由(用户端轮询看到结果)。 - 比价记录(
/comparison-records)— 比价过程明细(逐平台结局/卡在哪一步、LLM 调用明细、trace);支持按页面输入的 LLM 单价做 token / 成本估算(纯前端,见calcCost/pricePerMTok)。 - 反馈工单(
/feedbacks)— 用户反馈审核闭环:采纳发金币 / 拒绝填用户可见原因(FeedbackHandleDrawer),并含反馈二维码配置。 - 广告管理(
/ad-revenue)— 穿山甲广告配置(应用ID/各场景广告位ID/验签密钥/开关)+ 收益报表(展示/预估收益 与 应发/实发金币逐组对账)。 - CPS 分发(
/cps)— 优惠券分发与对账(美团/淘宝/京东);单页 Tabs:对账统计 / 群管理 / 活动管理 / 订单明细。含群对账详情子页(/cps/groups/[id]):点击/复制趋势折线 + 按天明细 + 群内微信用户画像。 - 系统配置(
/config)— 业务运行参数(金额/上限等)在线读写,改完即时生效、每次进审计。 - 管理员(
/admins)— 管理员账号管理(仅super_admin可见)。 - 审计日志(
/audit-logs)— 所有写操作的审计流水。
按角色显示操作
权限以 src/lib/auth.ts 的 canDo() 为准(super_admin 恒可全部),各 page.tsx 用 canDo([...]) 控制按钮:
- finance(钱):提现审核、用户调金币/调现金、CPS 对账(刷新拉美团订单)。
- operator(用户+内容):用户封禁/调试链接/新手引导、反馈审核、上报审核、设备重设引导、CPS 群/活动管理。
- super(super_admin):以上全部 + 管理员账号管理。
- 数据大盘 / 比价记录 / 广告管理 / 系统配置 / 审计日志:无
canDo门,登录即可查看。
本地开发
# 1. 起 admin 后端(在 shaguabijia-app-server 目录)
conda activate price && uvicorn app.admin.main:admin_app --port 8771
# 2. 建首个超管(打印密码)
python scripts/create_admin.py --username admin --role super_admin
# 3. 起前端
npm install && npm run dev # → http://localhost:3001
.env.local 已指向 http://localhost:8771。
生产部署(阿里云,域名 admin.shaguabijia.com)
① 后端 admin(在 app-server 机器,复用同一 codebase)
scp deploy/shaguabijia-admin.service server:/etc/systemd/system/ # 文件在 app-server/deploy/
ssh server "systemctl daemon-reload && systemctl enable --now shaguabijia-admin"
ssh server "cd /opt/shaguabijia-app-server && .venv/bin/python scripts/create_admin.py --username admin --role super_admin"
② 前端
npm run build
rsync -avz --exclude node_modules --exclude .next/cache ./ server:/opt/shaguabijia-admin-web/
ssh server "cd /opt/shaguabijia-admin-web && npm install --omit=dev && npm run build && pm2 start ecosystem.config.js"
③ nginx
scp deploy/nginx/admin.shaguabijia.com.conf server:/etc/nginx/conf.d/
ssh server "nginx -t && systemctl reload nginx"
⚠️ 上线必查
- app-server 的
.env里ADMIN_JWT_SECRET改成 ≥32 字节强随机串(默认change-me-admin可伪造 token) - nginx 打开 IP 白名单(运营出口 IP)+ HTTPS 证书就位
.env.production的NEXT_PUBLIC_API_BASE留空(同域,nginx 反代 /admin/api).env.production的NEXT_PUBLIC_MEDIA_BASE必须指向 App 后端https://app-api.shaguabijia.com(/media 的真正的家),否则后台所有 /media 图片(上报/反馈截图、二维码、头像)被拼到 admin 域而 404。NEXT_PUBLIC_*是编译期常量,改完必须重新npm run build才生效(详见src/lib/media.ts)- 首个 super_admin 已建、能登录