Files
marco c699ad0b8e docs: README 更新功能模块与部署说明
- 功能从 P0 概述扩写为 12 个模块详述(数据大盘/用户/设备/提现/上报审核/比价记录/反馈/广告/CPS分发/系统配置/管理员/审计)
- 补充按角色(finance/operator/super)操作权限说明
- 部署注意:NEXT_PUBLIC_MEDIA_BASE 必须指向 App 后端域名,否则 /media 图片 404

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 04:08:08 +08:00

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.tscanDo() 为准(super_admin 恒可全部),各 page.tsxcanDo([...]) 控制按钮:

  • 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 的 .envADMIN_JWT_SECRET 改成 ≥32 字节强随机串(默认 change-me-admin 可伪造 token)
  • nginx 打开 IP 白名单(运营出口 IP)+ HTTPS 证书就位
  • .env.productionNEXT_PUBLIC_API_BASE 留空(同域,nginx 反代 /admin/api)
  • .env.productionNEXT_PUBLIC_MEDIA_BASE 必须指向 App 后端 https://app-api.shaguabijia.com(/media 的真正的家),否则后台所有 /media 图片(上报/反馈截图、二维码、头像)被拼到 admin 域而 404。NEXT_PUBLIC_* 是编译期常量,改完必须重新 npm run build 才生效(详见 src/lib/media.ts)
  • 首个 super_admin 已建、能登录