更新wz-app项目,新增2026-04-24的全项目会议记录,完善经验清单和项目索引文档,确保文档内容的完整性与一致性,同时记录P0/P1/P2的定义与项目进度,提升团队协作效率。

This commit is contained in:
乘风
2026-04-24 14:42:51 +08:00
parent 3f0add60a5
commit c55c0cc941
31 changed files with 457 additions and 9 deletions

View File

@@ -0,0 +1,13 @@
# 团队 - 2026-04-24 跨角色决策
> 玩值全项目会议(乘风主持),详见 [`.cursor/meeting/2026-04-24_玩值全项目进度与三端缺口.md`](../../meeting/2026-04-24_玩值全项目进度与三端缺口.md)。
## 架构与交付
- 玩值三端「打通」定义:对照表 + 看板 + 三端矩阵;单域在 wz-api 可追溯、C 可演示、Admin 对 P0 可运营,或文档 N/A。
- 主线 C 端为 `old/app``new/wz-app` 为次线/联调壳,新功能默认不单独在次线扩张。
- P0 锁定:点卡+订单、直播主链、认证/用户态P1 管理端 P0 域运营闭环P2 评论/大屏 view 等依立项。
## 后续
- 问题与作答区闭环由产品与 API/移动端按纪要分工填写。

View File

@@ -0,0 +1,5 @@
# 团队 - 经验索引
| 日期 | 主题 |
|------|------|
| 2026-04-24 | [玩值全项目会议(跨端决策)](2026-04-24-玩值全项目会议.md) |

View File

@@ -0,0 +1,14 @@
# 开发助理 - 2026-04-24 玩值全项目会议收尾
## 动作
- 生成纪要 [2026-04-24_玩值全项目进度与三端缺口.md](../../meeting/2026-04-24_玩值全项目进度与三端缺口.md)(含 P0/P1/P2、问题与作答区、待办表
- 更新 `.cursor/meeting/README.md` 索引;同步 `开发文档/玩值/进度-看板.md``三端对齐项目清单.md` 最后更新与会议注记;`项目索引/玩值.md`、产品/团队/测试进度表;`sync-log`;玩值/团队/各玩值角色 evolution 当日条目。
## 产品向摘要(无独立 product agent 时)
- 三端「打通」验收定义与 P0=订单/点卡/直播+认证已写入纪要,供《产品》索引进度引用。
## 待闭环
- 问题与作答区 4 项待产品/API 后续填写。

View File

@@ -4,6 +4,7 @@
| 日期 | 摘要 | 文件 |
|------|------|------|
| 2026-04-24 | 玩值全项目会议收尾:纪要、索引、看板/三端/玩值与 sync-log | 2026-04-24-玩值全项目会议收尾.md |
| 2026-04-24 | wz-app 经验吸收与文档同步(跨端摘要) | 2026-04-24-wz-app经验吸收与文档.md |
| 2026-04-22 | TS 原生编译跨平台Perry全员吸收与 Skill 沉淀 | 2026-04-22-TS原生编译跨平台全员吸收.md |
| 2026-03-21 | MBTI 头像小程序全链路兜底 + 匹配接口回填 | 2026-03-21-MBTI头像C端全链路兜底.md |

View File

@@ -22,6 +22,8 @@
| 日期 | 角色 | 类型 | 升级 Skill | 摘要 |
|------|------|------|------------|------|
| 2026-04-24 | 玩值三端、开发助理 | 收官实施 | wz-api-dev 可参考 | 纪要好四问build-info gitCommit点卡订单管理页与真源表同步 |
| 2026-04-24 | 玩值三端、产品、测试、团队、开发助理 | 团队会议 | — | 玩值全项目进度与三端缺口P0/P1/P2、纪要、看板/三端注记、evolution 与项目索引同步 |
| 2026-04-24 | 玩值移动端、开发助理 | 迁移/联调/文档 | wz-app-dev SKILL §5 | wz-app 占位清零:大屏只读、主播/观众 API、公会旅程埋点、动态评论本地态、删 Stub对照表/看板/MIGRATION 同步 |
| 2026-04-22 | 玩值API、玩值管理端、玩值移动端、开发助理 | 技术选型方法论 | ts-native-cross-platform SKILL | 基于 Perry 文章沉淀跨平台统一评估框架POC 先行、指标门禁、工具链前置、回退机制 |
| 2026-02-27 | 小程序、团队 | 最佳实践 | SKILL-小程序开发 §6、SKILL-管理端开发 §4.1 | 输入框 padding 用 view/div 包裹 |

View File

@@ -33,9 +33,10 @@ Soul 创业派对产品定位:面向创业者的社区/工具型小程序。
| 2026-04-07 | 开发文档与主需求交叉同步;闭环分析落盘(主路径成立、规则/风控与纪要问题区待闭环) | 已完成 |
| 2026-04-13 | 会议:按功能同步开发文档;功能完成=实现+文档/索引可追溯;待办见纪要问题区 | 进行中 |
| 2026-04-14 | 吸收沉淀:新建 `开发文档/1、需求/需求汇总.md``开发文档/10、项目管理/运营与变更.md`;需求清单 SYNC/LOOP/MAINT/BACKEND 行 | 进行中 |
| 2026-04-24 | 玩值全项目会议三端「打通」验收定义、P0 域锁定、评论/次线抬主线等待问题区作答;纪见 `.cursor/meeting/2026-04-24_玩值全项目进度与三端缺口.md` | 进行中 |
> **格式说明**:每次开发后在此追加一行,日期格式 YYYY-MM-DD状态用已完成 / 进行中 / 待续 / 搁置
---
**最后更新**2026-04-14
**最后更新**2026-04-24

View File

@@ -37,9 +37,10 @@ Soul 创业派对全项目架构与约定路由隔离miniprogram/admin/db
| 2026-04-13 | 会议:按功能同步开发文档;功能完成=实现+索引一行;跨端契约双写团队/纪要 | 进行中 |
| 2026-04-14 | 吸收沉淀:小程序逆推闭环方法论;`role-flow-control` §1.2;开发文档需求真源 | 进行中 |
| 2026-04-15 | 联网:垂直切片/追踪弹/验证优先/无责复盘 → `role-flow-control` §1.3、`团队/evolution/2026-04-15.md` | 已完成 |
| 2026-04-24 | 玩值全项目会议P0/P1/P2、主线/次线、三端打通定义;`agent/团队/evolution/2026-04-24-玩值全项目会议.md` | 已完成 |
> **格式说明**:每次架构级讨论后在此追加一行,日期格式 YYYY-MM-DD
---
**最后更新**2026-04-15
**最后更新**2026-04-24

View File

@@ -38,7 +38,8 @@
| 2026-04-02 | 会议工作进度与需求同步融合清单待联调后执行deploy PR 增加 compose/health/smoke | 待续 |
| 2026-04-13 | 会议:按功能同步开发文档;以文档与索引为真源更新回归;契约未入文档可阻塞 | 进行中 |
| 2026-04-14 | 吸收沉淀LOOP 需求与逆推清单纳入回归裁剪依据 | 进行中 |
| 2026-04-24 | 玩值全项目会议P0 联调+回归(点卡/订单/直播/认证、环境检查wz-api 端口与新构建);纪见 `.cursor/meeting/2026-04-24_玩值全项目进度与三端缺口.md` | 进行中 |
---
**最后更新**2026-04-14
**最后更新**2026-04-24

View File

@@ -15,5 +15,7 @@
| 2026-04-21 | wz-app | 完整迁移计划落地路由映射、TabBar+subPackages 占位、`src/`+Vite 工具链、token+登录注册+我的、首页 streamers文档/看板/日志 |
| 2026-04-23 | 玩值三端 | 直播+点卡wz-api C 端点卡与 admin 房间详情wz-app LivePage、mall 点卡、动态入口;对照表/看板已更新 |
| 2026-04-24 | wz-appVite | 占位补齐Screen 接 dashboard+健康+build-info主播工作台/观众洞察接 streamer APIGuild 创建意向接 journeyMoments 评论本地态;删 Stub`api/app`+`lib/journey`;对照表/看板/MIGRATION 同步build 通过 |
| 2026-04-24 | 玩值全员会议 | 纪要 `meeting/2026-04-24_玩值全项目进度与三端缺口.md`P0/P1/P2 与真源看板/三端/索引/sync-log 已同步evolution 玩值三角色+团队+开发助理 |
| 2026-04-24 | 收官计划实施 | 纪要好四问build-info+`GIT_COMMIT`wz-admin 点卡订单页与侧栏;对照表/看板/三端/MIGRATION 更新 |
最后更新2026-04-24

View File

@@ -0,0 +1,14 @@
# 玩值 API 工程师 - 2026-04-24 会议经验
## 会议
玩值全项目进度与三端缺口(纪要:`.cursor/meeting/2026-04-24_玩值全项目进度与三端缺口.md`)。
## 要点
- P0 须保证 wz-api **可执行体与当前仓库一致**;联调前健康检查 + 一条 P0 GET点卡/直播)避免「部分路由有、部分无」。
- `/api/app/*``/api/admin/wz/*` 成对;新 C 能力(如评论落库)先定模型与路由再开前端排期。
## 待跟进
- 问题区 #3 build-info / 版本是否写入公共响应(与运维协同)。

View File

@@ -0,0 +1,10 @@
# 玩值 API - 2026-04-24 收官build-info 与 GIT_COMMIT
## 实施
- `Config` 增加 **`GitCommit`**,从环境变量 **`GIT_COMMIT`** 读取,超过 12 字符截断。
- `GET /api/public/build-info` 在原有 `buildTime`/`message` 上增加 **`gitCommit`** 字段(未设为空串)。
## 运维
发版时注入 `GIT_COMMIT`(如 CI `$(git rev-parse --short HEAD)`)便于与终端联调时核对二进制与文档是否一致。

View File

@@ -2,6 +2,8 @@
| 日期 | 主题 |
|------|------|
| 2026-04-24 | [收官计划 build-info 与 GIT_COMMIT](2026-04-24-收官计划-build-info与GIT_COMMIT.md) |
| 2026-04-24 | [全项目会议与 P0 接口](2026-04-24-全项目会议与P0接口.md) |
| 2026-04-23 | [App 点卡与直播管理端房间详情](2026-04-23-App点卡与直播管理端房间详情.md) |
| 2026-04-22 | [TS原生编译跨平台吸收Perry](2026-04-22-TS原生编译跨平台吸收.md) |
| 2026-04-20 | [玩值迁移-吸收(方法论)](2026-04-20-玩值迁移-吸收.md) |

View File

@@ -0,0 +1,14 @@
# 玩值移动端工程师 - 2026-04-24 会议经验
## 会议
玩值全项目进度与三端缺口(纪要:`.cursor/meeting/2026-04-24_玩值全项目进度与三端缺口.md`)。
## 要点
- **主线** `old/app` 与 wz-api `/api/app/*` 为交付主路径;**次线** `new/wz-app` 不静默堆与主线重复能力,改路由/接口须同步 MIGRATION、对照表、看板。
- 次线 `Moments` 评论仍本地态;全站评论待接口与产品拍板问题区 #1
## 待跟进
- 问题区 #2:次线能力是否抬主线由产品+乘风定。

View File

@@ -2,6 +2,7 @@
| 日期 | 主题 |
|------|------|
| 2026-04-24 | [全项目会议与主次线](2026-04-24-全项目会议与主次线.md) |
| 2026-04-24 | [wz-app 占位补齐与 wz-api 对接](2026-04-24-wz-app占位补齐与wz-api对接.md) |
| 2026-04-23 | [全屏直播与点卡商城](2026-04-23-全屏直播与点卡商城.md) |
| 2026-04-22 | [wz-app Uno 与 custom-tabbar](2026-04-22-wz-app-Uno与custom-tabbar.md) |

View File

@@ -0,0 +1,15 @@
# 玩值管理端工程师 - 2026-04-24 会议经验
## 会议
玩值全项目进度与三端缺口(纪要:`.cursor/meeting/2026-04-24_玩值全项目进度与三端缺口.md`)。
## 要点
- P0 域从「有路由+列表」提升为**列表+详情+关键状态/备注**,与 playhub 字段对齐ResourceListPage 仅作起步。
- 继续按《三端对齐项目清单》剔除管理页手机预览内嵌。
- 验收引用:`开发文档/玩值/三端对齐项目清单.md` 矩阵、旧 `old/app/admin/**` 结构对照。
## 待跟进
- P1大屏 `view` 全量迁旧、非 P0 域可后置。

View File

@@ -0,0 +1,11 @@
# 玩值管理端 - 2026-04-24 收官计划落地
## 实施
- 新增 **点卡订单** 列表页 `PointOrdersPage`:联调 `GET /api/admin/wz/points/orders`,详情链 ` /orders/:id?sourceTable=pointCardOrders`
- 侧栏「业务与订单」在 **游戏点卡** 前增加 **点卡订单**`/points/orders``App` 路由 `points/orders` 须置于 `points/:cardId` 之前。
- 点卡 SKU 页增加入口链到订单列表。
## 文档
见《迁移-API对照表》管理端点卡订单行、进度看板 wz-admin 进行中、三端清单 2026-04-24 实施注记。

View File

@@ -2,6 +2,8 @@
| 日期 | 主题 |
|------|------|
| 2026-04-24 | [收官计划-点卡订单管理页](2026-04-24-收官计划-点卡订单管理页.md) |
| 2026-04-24 | [全项目会议与运营可管](2026-04-24-全项目会议与运营可管.md) |
| 2026-04-23 | [直播房间详情联调](2026-04-23-直播房间详情联调.md) |
| 2026-04-22 | [TS原生编译跨平台吸收Perry](2026-04-22-TS原生编译跨平台吸收.md) |
| 2026-04-20 | [玩值迁移-吸收](2026-04-20-玩值迁移-吸收.md) |

View File

@@ -0,0 +1,126 @@
# 会议纪要 - 2026-04-24 | 玩值全项目进度、三端缺口与收官排期
> 本文件由**助理橙子**在会议结束后整理;主持人**乘风**(老板分身),议题来自计划「玩值团队会议与收官排期」。
---
## 基本信息
- **时间**2026-04-24 15:00
- **议题**各成员汇报玩值线进度橙子承接开发文档更新从业务视角梳理「C 端/移动端已开发、管理端或接口未配套」的缺口;乘风安排 P0/P1/P2 以推动项目闭环交付。
- **触发方式**:团队会议 + 已批准的收官排期计划
- **参与角色**:产品经理、玩值 API 工程师、玩值管理端工程师、玩值移动端工程师、测试/验收、开发助理(橙子);**主持人**:乘风
---
## 各角色发言
### 【乘风|会议主持】
会序:先业务优先级与「未打通」定义,再技术事实(接口、表、管理页),再次线 wz-app 与主线 `old/app` 分工,最后落到可测、可验的排期。原则:**C 与 Admin 的缺口不得停留在口头**,每条要么进 P0/P1 待办、要么在真源文档标 N/A 与原因。
### 【产品经理】
玩值三端的「打通」在验收上可定义为:**对同一业务域wz-api 契约在《迁移-API对照表》可追溯用户路径在 `old/app``/api/app/*` 可跑通,运营侧在 `new/wz-admin` 有与其职责匹配的列表/配置/审核,而非仅 `ResourceListPage` 壳子**。当前风险集中三类1**次线** `new/wz-app` 已做 journey、直播、社区域体验**主线**与文档是否跟进的决策2**全站评论**在次线为本地态,若产品上要求运营可见,需新 C 口 + 可能的管理端审核3**P0 域**建议锁定:订单/点卡/直播关键链,避免运营域在 Admin 上「看得见数据、改不了状态」。下一版必交付的域以本纪要的 P0 表为准。
### 【玩值 API 工程师】
`/api/app/*``/api/admin/wz/*` 在 playhub 已大量落地点卡、直播、streamer、旅程等路径以《迁移-API对照表》为准。缺口侧重**C 口提出新能力**(如评论落库、动态持久化)时,先补**数据模型**与**路由**再让前端并行;**环境一致性**:可执行体须与当前仓库 `go build` 一致避免「health/streamers 有、mall 无」的错位。建议联调前增加**固定检查**`GET /api/app/health` + 一条 P0 业务 GET如点卡或 streamers与 git 版本或构建时间(若有)输出。
### 【玩值管理端工程师】
`new/wz-admin` 已侧栏+多数路由;数据侧默认走 `VITE_ADMIN_USE_API``/api/admin/wz/*`。**差距**:多域仍属 **ResourceListPage + 直连接口** 与 mock 混合,与 `old/app/admin/**` 的**完整操作密度**未完全对齐。会议共识:对 **P0 域**(订单、点卡、直播房间)在冲刺阶段优先补 **列表 + 详情 + 必要状态/备注**,大屏 view 的组件全量迁旧可在 P2。须彻底剔除的仍是策略已定项**管理页内手机预览内嵌**(已禁止迁入,未净页面继续按《三端对齐项目清单》清理)。
### 【玩值移动端工程师】
**主线**为 `old/app`:与 wz-api 双轨期,以 `NEXT_PUBLIC_WZ_API_BASE` 与 `old/lib/wz-api.ts` 逐域闭环。**次线** `new/wz-app`:大屏/主播/公会旅程/Moments 等已接部分 `/api/app/*` 与只读 `screen`/`public``Moments` 评论**本地态**,全站需要则依赖新接口后两端再改。策略:**不**在次线无节制堆功能;与主线重复的能力以产品决策为准,要么抬进 `old/app`,要么在次线只留联调壳并文档写明。
### 【测试/验收】
三端玩值联调以 **真源**《迁移-API对照表》+ [进度-看板](../../开发文档/玩值/进度-看板.md) 为基线。回归需覆盖:**P0 用户路径**(点卡展示与下单、直播进房与礼物/评论、登录 JWT**管理端**对 P0 的查看与状态。纳入**环境类**wz-api 端口与 Vite `WZ_API_PROXY_TARGET` 一致、后端为**新构建**;避免将后端 404 误判为前端路由问题。
### 【开发助理·橙子】
会后将更新:**会议纪要**、`.cursor/meeting/README.md` 索引、各 `agent/*/evolution/2026-04-24*.md`、**开发文档/玩值**真源(看板/三端清单最后更新行与会议引述)、[项目索引/玩值](.cursor/agent/开发助理/项目索引/玩值.md) 与产品/团队/测试索引一行;`assistant-doc-sync/sync-log` 追加摘要。若排期有 Skill 级变更,再单独立项。
---
## 讨论过程
- **产品 ↔ API**:评论若上生产,需明确「仅用户可见 / 要审计」以决定 admin 工作流;未拍板前保持次线本地态、对照表不登记伪接口。
- **管理端 ↔ 产品**P0 域运营「最小可管」= 见单、见状态、能标注/改状态;复杂分账/财务仍归财务域与 P1。
- **移动端 ↔ 管理端**:次线 wz-app 的 journey/公会**意向**不强制新增 admin 页面,**已有** `journey-events` 等 admin 查询可支撑排障,是否做可视化筛选由 P1 排期。
- **测试 ↔ 全体**:发版前检查表增加 wz-api 构建与 commit 与文档版本对齐(可选手动记录)。
---
## 会议决议
1. **打通定义**(本玩值线):以《迁移-API对照表》+《三端对齐项目清单》矩阵 + 看板为真源;单域同时满足 wz-api 行为可追溯、C 端(若有)可演示、管理端对 P0 可运营,或文档化 **N/A**
2. **主线/次线策略**`old/app` 为交付主线;`new/wz-app` 为次线/联调壳,新功能默认不进次线,除非经产品与乘风列入排期并同步路由映射与对照表。
3. **P0 锁定**(本阶段必闭环):**点卡+订单(含可演示下单)**、**直播主链(进房+核心互动+管理端房间可查)**、**认证与用户态** 与 wz-api 一致;已登记接口须以**当前源码编译**的 wz-api 联调通过为准。
4. **P1**:管理端 P0 域的详情与状态操作闭环;旅程/订单等运营看板与字段对齐;大屏 view 与 old 管理端展示组件的增量迁移。
5. **P2**:全站评论与审核(若做则 API+C+Admin 打包);次线能力抬主线;非核心 `admin/doc` 等;环境与构建检查自动化(可选)。
6. **待持续确认项**:评论是否落库+审核;次线 wz-app 中哪些页面保留为长期壳,见**问题与作答区**。
---
## 乘风P0 / P1 / P2 排期与验收引用
| 级别 | 目标 | 主要责任 | 依赖 | 验收/引用 |
|------|------|----------|------|-----------|
| P0 | 点卡C 可浏览 SKU、`POST` 下单为 pending管理端能查 SKU/点卡/订单与直播房间单条;后端与**当前**可执行体一致 | 玩值 API、管理端、移动端 | wz-api 重编与进程一致 | [迁移-API对照表](../../开发文档/玩值/迁移-API对照表.md) 点卡/订单行;[看板](../../开发文档/玩值/进度-看板.md) wz-api/wz-admin |
| P0 | 直播主链与 `/api/app/live/*`、streamer 等已登记路径联调无 404/陈旧二进制问题 | 玩值 API、移动端 | 环境检查表 | 对照表 + 看板 wz-app / old |
| P1 | wz-adminP0 域列表+详情+关键状态/备注与 playhub 字段对齐;剔除手机内嵌壳残留 | 玩值管理端 | API 已存在字段 | [三端对齐项目清单](../../开发文档/玩值/三端对齐项目清单.md) 矩阵 + old 管理端参考路径 |
| P1 | wz-app次线与文档同步不再静默扩展与主线重复需求 | 玩值移动端、产品 | 产品剪枝 | 路由映射、MIGRATION、看板 new/wz-app 节 |
| P2 | 评论/动态持久化;大屏 view 全量;对内文档与自动化检查 | 依立项 | P0 稳定后 | 对照表新行、看板「阻塞项」保持为空或写明 |
---
## 待办事项(执行表)
| 责任角色 | 任务 | 优先级 | 截止建议 |
|----------|------|--------|----------|
| 玩值 API 工程师 | P0 接口与 wzstore 行在对照表与行为一致;发版/本地联调文档注明须 `go build` 后重启 | P0 | 随迭代日 |
| 玩值管理端工程师 | P0 域(点卡/订单/直播)管理端列表+详情+可操作项与 wz-api 对齐;禁止手机预览内嵌 | P0 / P1 | 跟 P0 冲刺 |
| 玩值移动端工程师 | 主线 `old/app` 按对照表推 wz-api次线改动的路由映射+对照表+看板 | P0 / P1 | 持续 |
| 产品经理 | 确认评论/动态是否进下一版本;向 P0 外需求发「N/A/后置」 | P0 决策 | 1 个迭代内 |
| 测试/验收 | 按 P0 清单写联调+回归用例;环境检查(端口、新二进制) | P0 | 发版前 |
| 开发助理·橙子 | 真源开发文档、索引、纪要、经验库与本表闭环 | 高 | 会议后 1 工作日内 |
---
## 问题与作答区
| # | 问题 | 责任角色 | 作答 |
|---|------|----------|------|
| 1 | 全站评论/动态持久化是否纳入下一里程碑?若纳入,管理端是否需「审核/举报」工作流? | 产品经理、玩值 API | **下一里程碑不纳入**;次线 `Moments` 保持本地态。若再上生产需单独立项C 口 + 可选 admin 审核),本阶段在《迁移-API对照表》标 **N/A/待接口**。 |
| 2 | `new/wz-app` 中哪些能力固定为次线联调壳、哪些必须合并入 `old/app` | 产品经理、玩值移动端 | **长期定位**Vite 壳用于联调 `/api/app/*`、只读 `screen`/`public`、路由映射对照;**抬主线**以商城/点卡/直播/账户等**收费与正式运营路径**为优先,由迭代需求驱动合并 `old/app`,不一次性全量搬迁。 |
| 3 | wz-api 发版时是否将 git 短 hash 或版本写入 `/api/public/build-info`(或仅运维记录)? | 玩值 API、运维/乘风 | **是**:在 `GET /api/public/build-info` 中增加**可选** `gitCommit`(或短 hash字段由环境变量 `GIT_COMMIT` 注入;无则只保留现有 `buildTime`。运维可同时保留发布台账。 |
| 4 | 点卡/订单的「pending」后续支付对接节奏 | 产品经理 | **P0 不接入真实支付**`pending` 仅演示下单闭环。正式支付、回调与对账进 **P2+ 单独立项**(在《迁移-API对照表》点卡订单行已注明未接支付。 |
---
## 各角色经验与业务理解更新
- **产品经理**:玩值三端「打通」= 契约 + 用户态 + 运营最小可管 或 文档 N/AP0 优先订单/点卡/直播链。
- **玩值 API 工程师**:成对维护 `/api/app` 与 admin/wz可执行体与仓库一致是排障首项。
- **玩值管理端工程师**P0 从「有路由」到「能运营」需详情与状态ResourceList 不足处按域补齐。
- **玩值移动端工程师**:主线/次线分工写进看板与路由映射,避免无文档分叉。
- **测试/验收**P0 联调+环境(端口/新构建)为前置条件。
### 团队共享
玩值全项目完成定义 = P0 三端在真源文档可验 + P1 运营可管 + P2/待确认项有清单与问题区;详见上表与《三端对齐项目清单》。
---
## 阶段复盘2026-04-24 收官计划首批落地)
- **问题与作答区** 四问已填写(评论/支付下版、次线策略、build-info+`GIT_COMMIT`、pending 不接支付)。
- **代码**wz-api `PublicBuildInfo` 增加 `gitCommit`wz-admin 点卡订单列表 + 侧栏 + 与统一订单详情联动。
- **文档**:《迁移-API对照表》《进度-看板》《三端对齐项目清单》《wz-api/MIGRATION.md》、项目索引与 sync-log 已同步。其余 P0`old/app` 全域逐页、直播主链联调)与 P1多域 ResourceList 抬升)仍按迭代推进。
---
*会议纪要由助理橙子生成 | 各角色经验同步至 `agent/{玩值*}/evolution/2026-04-24-*.md` 与 `agent/团队` / `开发助理` 等*

View File

@@ -58,6 +58,7 @@ YYYY-MM-DD_会议主题.md
| 日期 | 主题 | 参与角色 | 文件 |
|------|------|---------|------|
| 2026-04-24 | 玩值全项目进度、三端缺口与收官排期乘风主持P0/P1/P2 | 产品、玩值 API、管理端、移动端、测试、橙子 | [2026-04-24_玩值全项目进度与三端缺口.md](2026-04-24_玩值全项目进度与三端缺口.md) |
| 2026-04-23 | 玩值三端:直播 + 点卡 接口与功能打通 | 玩值 API、管理端、移动端、产品 | [2026-04-23_玩值三端直播点卡打通.md](2026-04-23_玩值三端直播点卡打通.md) |
| 2026-02-27 | 开发进度同步会议 | 产品、后端、管理端、小程序 | [2026-02-27_开发进度同步会议.md](2026-02-27_开发进度同步会议.md) |
| 2026-02-28 | 临时需求池 stitch_soul 需求评审含页面重构专项·10 张图全覆盖) | 产品、后端、管理端、小程序、测试 | [2026-02-28_临时需求池stitch_soul需求评审.md](2026-02-28_临时需求池stitch_soul需求评审.md) |

View File

@@ -8,6 +8,8 @@
## 2026-04-24
- 玩值「收官与文档」实施纪要好四问wz-api `PublicBuildInfo`+`GIT_COMMIT`wz-admin `PointOrdersPage`、菜单、路由;对照表/看板/三端/`wz-api/MIGRATION.md`;项目索引玩值;本行
- 玩值全项目会议:纪要 `meeting/2026-04-24_玩值全项目进度与三端缺口.md`meeting README玩值 API/管理端/移动端/开发助理/团队 evolution项目索引玩值·产品·团队·测试`开发文档/玩值/进度-看板.md``三端对齐项目清单.md` 会议注;经验清单与 sync-log本行
- 吸收经验:玩值移动端 + 开发助理 — wz-app 占位补齐与 wz-api 对接(`evolution/2026-04-24-*.md`、经验清单、项目索引玩值、wz-app-dev §5 补充)
## 2026-04-23

View File

@@ -20,6 +20,7 @@ import MallPage from '@/pages/wz/MallPage'
import PointsPage from '@/pages/wz/PointsPage'
import PointsChannelsPage from '@/pages/wz/PointsChannelsPage'
import PointCardDetailPage from '@/pages/wz/PointCardDetailPage'
import PointOrdersPage from '@/pages/wz/PointOrdersPage'
import PawnPage from '@/pages/wz/PawnPage'
import PawnDetailPage from '@/pages/wz/PawnDetailPage'
import GuildDetailPage from '@/pages/wz/GuildDetailPage'
@@ -153,6 +154,7 @@ export default function App() {
<Route path="points" element={<OutletLayout />}>
<Route index element={<PointsPage />} />
<Route path="orders" element={<PointOrdersPage />} />
<Route path="channels" element={<PointsChannelsPage />} />
<Route path=":cardId" element={<PointCardDetailPage />} />
</Route>

View File

@@ -80,6 +80,12 @@ export async function fetchOrders(): Promise<UnifiedOrder[]> {
return r.success && Array.isArray(r.data) ? r.data : []
}
/** GET /api/admin/wz/points/orders — 点卡 C 口下单落库后在此可查 */
export async function fetchPointCardOrders(): Promise<Record<string, unknown>[]> {
const r = await get<WanzhiEnvelope<Record<string, unknown>[]>>(`${WZ}/points/orders`)
return r.success && Array.isArray(r.data) ? r.data : []
}
export async function fetchOrderDetail(id: string, sourceTable: string): Promise<Record<string, unknown> | null> {
const q = `?id=${encodeURIComponent(id)}&sourceTable=${encodeURIComponent(sourceTable)}`
const r = await get<WanzhiEnvelope<Record<string, unknown>>>(`${WZ}/orders/detail${q}`)

View File

@@ -9,6 +9,7 @@ import {
History,
Hotel,
LayoutDashboard,
ListOrdered,
MessageSquare,
Monitor,
PieChart,
@@ -52,6 +53,7 @@ export const adminMenuGroups: MenuGroup[] = [
title: '业务与订单',
items: [
{ id: 'mall', label: '商城管理', icon: ShoppingBag, to: '/mall' },
{ id: 'point-orders', label: '点卡订单', icon: ListOrdered, to: '/points/orders' },
{ id: 'points', label: '游戏点卡', icon: CreditCard, to: '/points' },
{ id: 'orders', label: '订单管理', icon: FileText, to: '/orders' },
{ id: 'leveling', label: '代练管理', icon: Activity, to: '/leveling' },

View File

@@ -0,0 +1,172 @@
import { useCallback, useEffect, useMemo, useState } from 'react'
import { Link } from 'react-router-dom'
import { Search, RefreshCw, Loader2, FileText, ChevronRight } from 'lucide-react'
import { ApiError } from '@/api/client'
import { fetchPointCardOrders } from '@/api/wanzhiAdmin'
import { adminUseApi } from '@/config/adminUseApi'
const SOURCE = 'pointCardOrders'
function rowId(r: unknown, idx: number): string {
if (r && typeof r === 'object' && !Array.isArray(r)) {
const o = r as Record<string, unknown>
if (typeof o.id === 'string' && o.id) return o.id
if (typeof o._id === 'string' && o._id) return o._id
}
return `row-${idx}`
}
export default function PointOrdersPage() {
const [rows, setRows] = useState<Record<string, unknown>[]>([])
const [loading, setLoading] = useState(adminUseApi())
const [err, setErr] = useState<string | null>(null)
const [searchTerm, setSearchTerm] = useState('')
const load = useCallback(async () => {
if (!adminUseApi()) {
setRows([])
setLoading(false)
return
}
setLoading(true)
setErr(null)
try {
const list = await fetchPointCardOrders()
setRows(
(Array.isArray(list) ? list : []).map((x) => (typeof x === 'object' && x && !Array.isArray(x) ? x : {})) as Record<
string,
unknown
>[],
)
} catch (e) {
setErr(e instanceof ApiError ? e.message : '加载失败')
setRows([])
} finally {
setLoading(false)
}
}, [])
useEffect(() => {
void load()
}, [load])
const filtered = useMemo(() => {
const q = searchTerm.trim().toLowerCase()
if (!q) return rows
return rows.filter((o) => {
const on = String(o.orderNo ?? '')
const uid = String(o.userId ?? '')
const gid = String(o.game ?? o.skuName ?? '')
return on.toLowerCase().includes(q) || uid.toLowerCase().includes(q) || gid.toLowerCase().includes(q)
})
}, [rows, searchTerm])
return (
<div className="mx-auto max-w-[1600px] space-y-6">
<div>
<div className="flex flex-wrap items-end justify-between gap-3">
<div>
<h1 className="text-2xl font-bold text-slate-800"></h1>
<p className="mt-1 text-sm text-slate-500">
{adminUseApi() ? 'GET /api/admin/wz/points/orders · 详情共用订单页sourceTable=pointCardOrders' : '请开启联调以拉取 wz-api'}
</p>
{err ? <p className="mt-2 text-sm text-red-600">{err}</p> : null}
</div>
<div className="flex flex-wrap items-center gap-2">
<button
type="button"
onClick={() => void load()}
className="inline-flex items-center gap-2 rounded-xl border border-slate-200 bg-white px-3 py-2 text-sm text-slate-700 hover:bg-slate-50"
>
<RefreshCw className="h-4 w-4" />
</button>
<Link
to="/points"
className="text-sm text-violet-600 hover:underline"
>
SKU
</Link>
</div>
</div>
</div>
<div className="rounded-2xl border border-slate-200/80 bg-white p-4 shadow-sm">
<div className="relative mb-4 min-w-[200px] max-w-md">
<Search className="absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-slate-500" />
<input
className="w-full rounded-xl border border-slate-200 py-2 pl-10 pr-3 text-sm"
placeholder="搜订单号 / 用户 / 游戏…"
value={searchTerm}
onChange={(e) => setSearchTerm(e.target.value)}
/>
</div>
{loading ? (
<div className="flex items-center gap-2 py-8 text-slate-500">
<Loader2 className="h-5 w-5 animate-spin" />
</div>
) : (
<div className="overflow-x-auto">
<table className="w-full min-w-[720px] text-left text-sm">
<thead>
<tr className="border-b border-slate-200 text-slate-500">
<th className="py-2 pr-3"></th>
<th className="py-2 pr-3"></th>
<th className="py-2 pr-3"></th>
<th className="py-2 pr-3">/</th>
<th className="py-2 pr-3"></th>
<th className="py-2 text-right"></th>
</tr>
</thead>
<tbody>
{filtered.length === 0 ? (
<tr>
<td colSpan={6} className="py-8 text-center text-slate-500">
{adminUseApi() ? '暂无点卡订单(或 C 端未下单)' : '联调后显示'}
</td>
</tr>
) : (
filtered.map((o, i) => {
const id = rowId(o, i)
const on = String(o.orderNo ?? '—')
const st = String(o.status ?? '—')
const uid = String(o.userId ?? '—')
const amt = typeof o.totalAmount === 'number' ? o.totalAmount : Number(o.totalAmount) || 0
const qty = typeof o.quantity === 'number' ? o.quantity : Number(o.quantity) || 0
const t = String(o.createdAt ?? '—')
return (
<tr key={id} className="border-b border-slate-100 last:border-0">
<td className="py-3 pr-3 font-mono text-xs text-slate-800">{on}</td>
<td className="py-3 pr-3">
<span className="rounded-md bg-amber-50 px-2 py-0.5 text-amber-800">{st}</span>
</td>
<td className="max-w-[120px] truncate py-3 pr-3 text-slate-600">{uid}</td>
<td className="py-3 pr-3 text-slate-700">
¥{amt.toFixed(2)}
{qty > 0 ? ` ×${qty}` : ''}
</td>
<td className="py-3 pr-3 text-xs text-slate-500">{t}</td>
<td className="py-3 text-right">
<Link
to={`/orders/${encodeURIComponent(id)}?sourceTable=${encodeURIComponent(SOURCE)}`}
className="inline-flex items-center gap-1 text-violet-600 hover:underline"
>
<FileText className="h-4 w-4" />
<ChevronRight className="h-4 w-4" />
</Link>
</td>
</tr>
)
})
)}
</tbody>
</table>
</div>
)}
</div>
</div>
)
}

View File

@@ -117,6 +117,12 @@ export default function PointsPage() {
>
</button>
<Link
to="/points/orders"
className="inline-flex items-center gap-2 rounded-xl border border-slate-200 bg-slate-50 px-3 py-2 text-sm text-slate-800"
>
</Link>
<Link
to="/points/channels"
className="inline-flex items-center gap-2 rounded-xl border border-indigo-200 bg-indigo-50 px-3 py-2 text-sm text-indigo-700"

View File

@@ -3,4 +3,5 @@
- **Go module** 已更名为 `wz-api`import 路径为 `wz-api/internal/...`
- **业务来源**:以仓库根 `old/app/api` 与《开发文档/玩值/迁移-API对照表.md》为真源当前代码体仍含 Soul 派对时期路由与模型,属**过渡态**。
- **新 C 端前缀**`/api/app/*` 已在 `router.Setup` 注册(现含 `GET /api/app/health`)。历史小程序路径 `/api/miniprogram/*` 保留至 wz-app 全量切换后再删。
- **发版可观测**`GET /api/public/build-info` 返回 `buildTime``BUILD_TIME`)与可选 `gitCommit`(环境变量 **`GIT_COMMIT`**,服务端截为 ≤12 字符,未设则为空串),便于与前端/终端对照运行二进制。
- **剥离步骤**:按域删除或停用 Soul 专有 handler → 按对照表实现玩值接口 → 更新 AutoMigrate 与 scripts。

View File

@@ -20,6 +20,7 @@ type Config struct {
CORSOrigins []string
Version string // APP_VERSION打包/部署前写在 .env/health 返回
BuildTime string // BUILD_TIME / NEXT_PUBLIC_BUILD_TIME/api/public/build-info 返回
GitCommit string // GIT_COMMIT 可选,短 hash/api/public/build-info 返回
// 玩值 App JWT/api/app/* 手机号账密登录);未配置时与 ADMIN_SESSION_SECRET 相同(仅建议开发环境)
AppSessionSecret string
@@ -285,6 +286,10 @@ func Load() (*Config, error) {
if buildTime == "" {
buildTime = strings.TrimSpace(os.Getenv("NEXT_PUBLIC_BUILD_TIME"))
}
gitCommit := strings.TrimSpace(os.Getenv("GIT_COMMIT"))
if len(gitCommit) > 12 {
gitCommit = gitCommit[:12]
}
ckbLeadAPIKey := os.Getenv("CKB_LEAD_API_KEY")
ckbScenarioAPIURL := strings.TrimSpace(os.Getenv("CKB_SCENARIO_API_URL"))
if ckbScenarioAPIURL == "" {
@@ -329,6 +334,7 @@ func Load() (*Config, error) {
CORSOrigins: parseCORSOrigins(),
Version: version,
BuildTime: buildTime,
GitCommit: gitCommit,
AppSessionSecret: appSessionSecret,
BaseURL: baseURL,
H5ReadPublicBaseURL: h5ReadPublic,

View File

@@ -264,15 +264,18 @@ func WanzhiAppUserMe(c *gin.Context) {
func PublicBuildInfo(c *gin.Context) {
cfg := config.Get()
bt := ""
gc := ""
if cfg != nil {
bt = cfg.BuildTime
gc = cfg.GitCommit
}
msg := "未注入构建时间(本地 dev 或未传 BUILD_TIME"
if bt != "" {
msg = "当前部署版本:" + bt
}
c.JSON(http.StatusOK, gin.H{
"buildTime": bt,
"message": msg,
"buildTime": bt,
"gitCommit": gc,
"message": msg,
})
}

View File

@@ -70,3 +70,10 @@
1. **wz-api**:该域涉及路径已在对照表登记且行为与 `old` 一致或可文档化差异。
2. **wz-admin**:该域管理页面已在 React 中可用,且无计划内剔除项(含已移除移动内嵌壳)。
3. **玩值 C 端 `old/app`**(若该域有用户侧):经 `NEXT_PUBLIC_WZ_API_BASE` 调 wz-api `/api/app/*` 闭环,或与 Next BFF 双轨差异已写明;若无 C 端,表格中注明 **N/A** 即可。
---
## 会议与排期(真源外注)
- **2026-04-24**:玩值全项目会议(纪要:仓库根 `.cursor/meeting/2026-04-24_玩值全项目进度与三端缺口.md`)明确 **P0** 须达到「C 能演示、Admin 对 P0 可运营、接口在对照表可追溯」;**主线 C** 为 `old/app`**次线** `new/wz-app` 不单独扩张与主线重复能力P1/P2 与「问题与作答区」以纪要为准。
- **2026-04-24 实施**纪要好四问已作答wz-api `GET /api/public/build-info` 增加可选 **`gitCommit`**`GIT_COMMIT`wz-admin 增加 **点卡订单** 路由与侧栏;评论持久化/支付本阶段 **不纳入**(见纪要)。

View File

@@ -75,11 +75,12 @@
| 66 | C 端点卡详情) | wz-app | `/api/app/mall/point-cards/:cardId` | GET | 已实现 |
| 67 | C 端点卡下单) | wz-app | `/api/app/orders/point-card` | POST | 已实现pending未接支付 |
| 68 | (管理端直播房间详情) | 管理端 | `/api/admin/wz/live/rooms/:roomId` | GET | 已实现 |
| 69 | `/api/build-info` | 运维/CI | `/api/public/build-info` | GET | 已实现 |
| 69 | `/api/build-info` | 运维/CI | `/api/public/build-info` | GET | 已实现;响应含 `buildTime`;可选 `gitCommit`(环境变量 **`GIT_COMMIT`**,服务端截断为短 hash未设为空串 |
| — | 管理端点卡订单 | wz-admin | `GET /api/admin/wz/points/orders` | GET | 已实现;与统一订单详情 `GET /api/admin/wz/orders/detail?id=&sourceTable=pointCardOrders` 联用 |
| — | wz-api 占位) | wz-app 自检 | `GET /api/app/health` | GET | 已实现 |
| — | wz-app `/screen` 只读总览 | `ScreenPage` | `GET /api/screen/data/dashboard`(可匿名经网关) | GET | 已实现;与 `GET /api/app/health``GET /api/public/build-info` 同页展示 |
| — | 公会「创建」意向(旅程埋点) | `GuildListPage` | `POST /api/app/analytics/journey-events``eventName: guild_create_intent` | POST | 已实现;运营在 **`GET /api/admin/wz/journey-events`** 查看 |
| — | 动态评论(本地态) | `MomentsPage` | (待 C 口)评论落库/列表 | — | 前端本地列表;**持久化待新接口** |
| — | 动态评论(本地态) | `MomentsPage` | (待 C 口)评论落库/列表 | — | 前端本地列表;**下一里程碑不纳入**(见 2026-04-24 纪要问题区已答);上生产需单独立项 |
**说明**`RegisterWanzhiAdminRoutes` 仍保留 **stub**,用于无鉴权文档/旧路径兼容;**真实数据**请调用 **`/api/admin/wz/*`**`handler.RegisterPlayhubWzAdminRoutes`)。数据表 **`wz_documents`**`coll` = Mongo 集合名);迁移脚本见 `new/wz-api/scripts/mongo_to_wz_documents.py`**`mongo_to_wz_documents.md`**。

View File

@@ -1,6 +1,6 @@
# 玩值迁移进度看板
最后更新2026-04-22
最后更新2026-04-24
## wz-api`new/wz-api`
@@ -15,7 +15,7 @@
|------|-----|
| **页面迁移** | 侧栏一级+常用子路由已齐:**大屏**`/screen``/screen/config``/screen/view` 轻量壳)、**用户估值/财务/系统设置**、**订单/主播/商城/点卡/典当**独立页+**mock****公会/直播/派对/酒店**等为 `ResourceListPage`+详情链;嵌套路由见 `App.tsx` + `OutletLayout` |
| **API 对接** | **默认联调 wz-api**`VITE_ADMIN_USE_API``false` 即走 **`/api/admin/wz/*`**);纯 MOCK 时设 `VITE_ADMIN_USE_API=false`。大屏配置 **GET/POST `/api/screen/config`**(失败降级 localStorage`npm run dev:api` 显式开启联调。详见 `new/wz-admin/.env.example` |
| 进行中 | 大屏 `view` 全量组件可从 `old/app/admin/screen/_components` 迁入;各页与 playhub 真实字段持续对齐;**直播房间详情**已支持单条 GET列表+详情与 wz-api 通 |
| 进行中 | 大屏 `view` 全量组件可从 `old/app/admin/screen/_components` 迁入;各页与 playhub 真实字段持续对齐;**直播房间详情**已支持单条 GET列表+详情与 wz-api 通**点卡订单** 独立页 `GET /api/admin/wz/points/orders` + 跳转统一订单详情(`sourceTable=pointCardOrders` |
## 玩值 C 端(`old/app`Next + React主线
@@ -39,6 +39,10 @@
| 进展 | `/screen` 只读 `GET /api/screen/data/dashboard``StreamerStudioPage` / `StreamerAudiencePage``streamer/me``streamer/live``live/cloud``audience-insights``GuildList` 创建意向 → `POST /api/app/analytics/journey-events``Moments` 评论为本地态(持久化待新接口) |
| 管理端 | 旅程、公会、主播等运营能力以既有 **`/api/admin/wz/*`** 为准,无需为本次 C 端只读增改 |
## 会议与冲刺(真源外注)
- **2026-04-24**:全项目会议(纪见 `.cursor/meeting/2026-04-24_玩值全项目进度与三端缺口.md`)定义 **P0**=点卡+订单+直播主链+认证/用户态;**P1**=管理端 P0 域「运营可管」、旅程/事件与字段对齐等;**P2**=评论/大屏 view 等依立项。次线 wz-app 以文档同步为主,不默认可进新需求。
## 阻塞项
(无)