更新wz-app项目,新增2026-04-27的三端迁移完成度会议记录,完善相关文档和项目索引,确保文档内容的完整性与一致性,同时记录迁移进度和决议,提升团队协作效率。

This commit is contained in:
乘风
2026-04-28 14:30:16 +08:00
parent a48bccca85
commit c4da1a0c50
21 changed files with 198 additions and 21 deletions

View File

@@ -0,0 +1,10 @@
# 团队经验记录 - 2026-04-27 - 三端迁移完成度
## 来源
会议:`.cursor/meeting/2026-04-27_三端迁移完成度与文档同步.md`
## 要点
- **「三端是否迁移完成」** 在仓库内应区分:① **主迁移**(新三端承接契约与 P0、新功能只写 `new/`)— **是**;② **与 `old` 全量业务域/大屏 UI 1:1 无遗漏****否**,以 `开发文档/玩值/进度-看板.md``三端对齐项目清单.md` 为准持续勾项。
- 对外/对内表述建议用「**新三端主链已迁移并持续对齐**」,避免单独一句「已全部完成」产生验收歧义。

View File

@@ -2,4 +2,5 @@
| 日期 | 主题 |
|------|------|
| 2026-04-27 | [三端迁移完成度(主迁移 / 全量对齐)](2026-04-27-三端迁移完成度会议.md) |
| 2026-04-24 | [玩值全项目会议(跨端决策)](2026-04-24-玩值全项目会议.md) |

View File

@@ -0,0 +1,3 @@
# 开发助理 经验 - 2026-04-27
- 会议主题:三端迁移完成度;已更新 `开发文档/玩值/进度-看板.md``三端对齐项目清单.md``2026-04-27-日志.md`、项目索引玩值、meeting 索引、团队 evolution。

View File

@@ -4,6 +4,7 @@
| 日期 | 摘要 | 文件 |
|------|------|------|
| 2026-04-27 | 玩值三端迁移完成度会议:主迁移完成、全量对齐 ongoing看板/三端/纪要/索引 | 2026-04-27-三端迁移完成度会议.md |
| 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 |

View File

@@ -19,5 +19,6 @@
| 2026-04-24 | 收官计划实施 | 纪要好四问build-info+`GIT_COMMIT`wz-admin 点卡订单页与侧栏;对照表/看板/三端/MIGRATION 更新 |
| 2026-04-24 | 收官续作清单落地 | `old/app` 点卡列表接 wz-api`live.ts` 房间 game 回退主播字段wz-admin 旅程筛选页、内容详情路由、大屏 MockSparkline、主播详情 isLive`scripts/test/wz-playhub-p0.md`;文档与 sync-log 同步 |
| 2026-04-24 | **交付真源决议** | 玩值新功能 **仅在 `new/wz-api`、`new/wz-admin`、`new/wz-app`**`old/` 仅对照;已同步 boundary、wz-app-dev、change-checklist、看板、三端清单、对照表头、wz-app README |
| 2026-04-27 | 三端迁移完成度会议 | 纪要 `meeting/2026-04-27_三端迁移完成度与文档同步.md`;结论「主迁移完成、全量对齐 ongoing」看板/三端清单/日志/团队与玩值 evolution 已同步 |
最后更新2026-04-24
最后更新2026-04-27

View File

@@ -0,0 +1,3 @@
# 玩值 API 工程师 经验 - 2026-04-27
- 会议结论:`new/wz-api` 在**分组、P0 域、对照表登记**上属主迁移**已完成**;未实现/未登记行随域迭代,不等同于「迁移未开始」。

View File

@@ -2,6 +2,7 @@
| 日期 | 主题 |
|------|------|
| 2026-04-27 | [三端迁移完成度会议](2026-04-27-三端迁移完成度会议.md) |
| 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) |

View File

@@ -0,0 +1,3 @@
# 玩值移动端工程师 经验 - 2026-04-27
- 会议结论:`new/wz-app` 为 C 端真源、主能力已接;**路由映射 / build / 对照表硬验收** 为持续工作,与「新栈已承接迁移」并行表述。

View File

@@ -2,6 +2,7 @@
| 日期 | 主题 |
|------|------|
| 2026-04-27 | [三端迁移完成度会议](2026-04-27-三端迁移完成度会议.md) |
| 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) |

View File

@@ -0,0 +1,3 @@
# 玩值管理端工程师 经验 - 2026-04-27
- 会议结论wz-admin **骨架与主域**已迁;**大屏 view**(地图、实时区、投资卡等)及与 playhub 字段对齐为 **ongoing**,不属「主迁移未完成」的否定项。

View File

@@ -2,6 +2,7 @@
| 日期 | 主题 |
|------|------|
| 2026-04-27 | [三端迁移完成度会议](2026-04-27-三端迁移完成度会议.md) |
| 2026-04-24 | [收官计划-点卡订单管理页](2026-04-24-收官计划-点卡订单管理页.md) |
| 2026-04-24 | [全项目会议与运营可管](2026-04-24-全项目会议与运营可管.md) |
| 2026-04-23 | [直播房间详情联调](2026-04-23-直播房间详情联调.md) |

View File

@@ -0,0 +1,92 @@
# 会议纪要 - 2026-04-27 | 三端迁移完成度与开发文档同步
> 本文件由**助理橙子**在会议结束后生成。主持人:乘风(老板分身)。
---
## 基本信息
- **时间**2026-04-27 15:30
- **议题**:玩值 wz-api / wz-admin / new/wz-app 三端相对 `old/` 的迁移是否算「完成」;与开发文档真源(进度看板、三端对齐清单)同步结论
- **触发方式**:开个会议,并更新开发文档
- **参与角色**:产品经理、玩值 API 工程师、玩值管理端工程师、玩值移动端工程师、测试人员、助理橙子
---
## 各角色发言
### 【产品经理】
迁移的验收口径应是「P0 主链可演示、管理端对 P0 域可运营、接口在对照表可追溯」,而非与 old 逐像素/逐接口 100% 复刻。当前真源为 `new/wz-*` + `new/wz-app``old` 仅对照漏项。结论:**主线交付已在新三端****全量业务域等清单矩阵逐项勾齐**仍属持续迭代,不宜宣称「已 100% 迁完所有域」。
### 【玩值 API 工程师】
`new/wz-api` 已落地文档约定分组:`/api/admin/wz/*``/api/app/*``/api/screen/*`P0 相关健康、点卡、订单、直播房间等已在对照表登记。Soul 历史路由与 stub 仍并存。结论:**核心迁移与契约已建立****非 P0/遗留路径** 仍可能随产品迭代补登记。
### 【玩值管理端工程师】
`new/wz-admin` 侧栏、各业务域页、默认联调 wz-api 已通;大屏 `view` 仍有大屏地图、实时区、投资卡等可继续从 `old/app/admin/screen` 对照迁入的项;资源列表与详情链与 playhub 字段对齐是持续工作。结论:**管理端「骨架 + 主域」已迁****大屏完整度与域内精细对齐** 为进行中。
### 【玩值移动端工程师】
`new/wz-app` 为玩值 C 端唯一新功能真源;路由、`mall`/直播等主能力已接 wz-api。与 [迁移-wz-app路由映射.md]、`npm run build`、JWT/空错态与对照表验收仍在迭代。结论:**C 端主线已在新栈****与 old 的逐项对齐 + 构建与契约硬验收** 未宣称完结。
### 【测试人员】
回归应以「三端清单矩阵 + 对照表已实现行」为范围;未登记或未实现的接口不作「已迁移」认定。缺自动化全覆盖时,以联调记录与 P0 脚本(如 `scripts/test/wz-playhub-p0.md`)为主。
---
## 讨论过程
- **【乘风】定调**用户问「三端是否迁移完成」在工程上应拆成两问1**是否已从 old 迁出新三端并承接新需求**——是2**是否已无遗漏、与 old 全量一致**——否,以看板/清单「进行中」与会议 P1/P2 为准。
- **【产品经理】回复【技术】**:对外表述建议用「**新三端主链已迁移并持续对齐**」,避免「已全部完成」引发验收误解。
---
## 会议决议
1. **迁移状态表述(对外/对内真源)**:玩值 **wz-api、wz-admin、new/wz-app 三端已完成从 old 到新栈的「主迁移」**——新功能**仅**在 `new/` 交付;**不等同于**所有业务域、所有 old 管理端子页与大屏细节均已 1:1 复刻完成。
2. **文档同步**`开发文档/玩值/进度-看板.md``三端对齐项目清单.md` 的「最后更新」与会议注同步至 2026-04-27本纪要索引入 `.cursor/meeting/README.md`
3. **待持续项**(不阻塞「主迁移」认定):大屏 view 增量、各页字段与 playhub 对齐、C 端路由映射与 build 硬验收、对照表未实现行——按 2026-04-24 纪要 P1/P2 与清单迭代。
---
## 待办事项
| 责任角色 | 任务 | 优先级 | 截止建议 |
|---------|------|--------|----------|
| 玩值管理端工程师 | 大屏 view 可选项Leaflet、real-time、investor-card按 old 对照增量 | 中 | 随 P1 排期 |
| 玩值移动端工程师 | 路由映射 + `npm run build` + 对照表闭环验收 | 中 | 持续 |
| 玩值 API 工程师 | 对照表未实现行随域关闭 | 中 | 持续 |
| 测试人员 | P0 回归与清单矩阵抽检 | 中 | 发版前 |
| 开发助理 | 看板/清单/本纪要/项目索引玩值 同步 | 高 | 2026-04-27 |
---
## 问题与作答区
| # | 问题 | 责任角色 | 作答 |
|---|------|---------|------|
| 1 | 「迁移完成」是否需要在对外文案中显式区分「主链可上线」与「全域 1:1」 | 产品经理 | (可补充定稿句) |
| 2 | 大屏若长期与 old 并存双部署,是否单独写清部署说明? | 玩值管理端工程师 | (待补充) |
---
## 各角色经验与业务理解更新
### 产品经理
- 「三端迁移完成」宜拆为架构迁移完成 vs 全量域对齐完成,避免一次词两种理解。
### 玩值 API / 管理端 / 移动端
- 见各自 `agent/玩值*工程师/evolution/2026-04-27-三端迁移完成度会议.md` 及团队 evolution。
### 团队共享
- 已写入 `.cursor/agent/团队/evolution/2026-04-27-三端迁移完成度会议.md`
---
*会议纪要由助理橙子生成 | 索引与开发文档已按决议更新。*

View File

@@ -58,6 +58,7 @@ YYYY-MM-DD_会议主题.md
| 日期 | 主题 | 参与角色 | 文件 |
|------|------|---------|------|
| 2026-04-27 | 玩值三端迁移完成度与开发文档同步(主迁移完成 / 全量对齐 ongoing | 产品、玩值 API、管理端、移动端、测试、橙子 | [2026-04-27_三端迁移完成度与文档同步.md](2026-04-27_三端迁移完成度与文档同步.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) |

View File

@@ -6,6 +6,10 @@
---
## 2026-04-27
- 玩值三端迁移完成度会议:纪要 `meeting/2026-04-27_三端迁移完成度与文档同步.md``开发文档/玩值/进度-看板.md``三端对齐项目清单.md``2026-04-27-日志.md`项目索引玩值、meeting README、团队+玩值三角色+开发助理 evolution**结论**:新三端主迁移完成,与 old 全矩阵 1:1 为持续对齐
## 2026-04-24
- **玩值交付真源**:用户决议「以后只在 `new/` 完成功能,`old` 仅对照」;已更新 `wanzhi-project-boundary``soul-project-boundary``wz-app-dev``change-checklist`、老板分身经验规则、`智能体-技能-经验总索引`、看板/三端清单/对照表头、`new/wz-app/README`、项目索引玩值;本行

View File

@@ -11,8 +11,8 @@
rel="stylesheet"
/>
<title>玩值电竞 - WanZhi Esports</title>
<script type="module" crossorigin src="/assets/index-B5jLSR3t.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-C8iBjH8A.css">
<script type="module" crossorigin src="/assets/index-D1GAZDwg.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-CeISOfIA.css">
</head>
<body class="min-h-screen antialiased">
<div id="root"></div>

View File

@@ -5,6 +5,7 @@ export type LiveRoomDTO = {
title?: string
status?: string
pullPlaybackUrl?: string
/** wz-api playhub 返回;无 room 时前端显示 — */
viewerCount?: number
} | null

View File

@@ -1,6 +1,6 @@
import { useCallback, useEffect, useState } from "react"
import { Link, useParams } from "react-router-dom"
import { ArrowLeft, Gift, Loader2, Send } from "lucide-react"
import { ArrowLeft, Gift, Loader2, Send, Users, Share2 } from "lucide-react"
import { toast } from "@/hooks/use-toast"
import {
getLiveContext,
@@ -18,6 +18,12 @@ function pickStr(v: unknown): string {
return typeof v === "string" ? v : ""
}
function formatViewerCount(n: number): string {
if (!Number.isFinite(n) || n < 0) return "0"
if (n >= 10000) return `${(n / 10000).toFixed(1)}w`
return String(Math.floor(n))
}
export function LivePage() {
const { streamerId = "" } = useParams<{ streamerId: string }>()
const valid = HEX24.test(streamerId)
@@ -100,10 +106,22 @@ export function LivePage() {
}
}
const onShare = () => {
const url = typeof window !== "undefined" ? window.location.href : ""
if (navigator.share && url) {
void navigator.share({ title: "直播间", url }).catch(() => {})
} else if (url) {
void navigator.clipboard.writeText(url).then(
() => toast({ title: "链接已复制" }),
() => toast({ title: "复制失败", variant: "destructive" }),
)
}
}
if (!valid) {
return (
<div className="min-h-screen bg-black text-white p-4 pt-safe">
<Link to="/moments" className="mb-4 inline-flex items-center gap-2 text-white/80">
<Link to="/live" className="mb-4 inline-flex items-center gap-2 text-white/80">
<ArrowLeft className="h-5 w-5" />
</Link>
@@ -115,25 +133,41 @@ export function LivePage() {
const streamer = ctx?.streamer
const name = pickStr(streamer?.name) || "主播"
const title = pickStr(streamer?.title) || pickStr((ctx?.room as { title?: string } | null)?.title) || "直播间"
const pull = pickStr((ctx?.room as { pullPlaybackUrl?: string } | null)?.pullPlaybackUrl)
const room = ctx?.room as { pullPlaybackUrl?: string; status?: string; viewerCount?: number } | null | undefined
const pull = pickStr(room?.pullPlaybackUrl)
const cover = pickStr(streamer?.coverImage) || pickStr(streamer?.avatar) || "/placeholder.svg"
const isLive = Boolean(streamer?.isLive) || pickStr((ctx?.room as { status?: string } | null)?.status) === "live"
const isLive = Boolean(streamer?.isLive) || pickStr(room?.status) === "live"
const rawViewer = room && typeof room.viewerCount === "number" ? room.viewerCount : null
return (
<div className="min-h-screen flex flex-col bg-black text-white pb-28">
<header className="sticky top-0 z-20 flex items-center gap-3 border-b border-white/10 bg-black/80 px-3 py-2 backdrop-blur">
<Link to="/moments" className="text-white/90">
<header className="sticky top-0 z-20 flex items-center gap-2 border-b border-white/10 bg-black/80 px-2 py-2 backdrop-blur sm:gap-3 sm:px-3">
<Link to="/live" className="shrink-0 text-white/90" aria-label="返回直播列表">
<ArrowLeft className="h-5 w-5" />
</Link>
<div className="min-w-0 flex-1">
<p className="truncate text-sm font-bold">{name}</p>
<p className="truncate text-xs text-white/50">{title}</p>
</div>
<div className="flex shrink-0 items-center gap-1.5 text-white/70" title="在线观众(服务端)">
<Users className="h-4 w-4" aria-hidden />
<span className="text-[11px] tabular-nums">
{rawViewer === null ? "—" : formatViewerCount(rawViewer)}
</span>
</div>
{isLive ? (
<span className="shrink-0 rounded bg-red-600 px-2 py-0.5 text-[10px] font-bold">LIVE</span>
) : (
<span className="text-xs text-white/50"></span>
)}
<button
type="button"
onClick={() => onShare()}
className="shrink-0 rounded-lg p-2 text-white/80 hover:bg-white/10"
aria-label="分享或复制链接"
>
<Share2 className="h-5 w-5" />
</button>
</header>
<div className="relative aspect-[9/16] max-h-[48vh] w-full bg-zinc-900">
@@ -158,13 +192,24 @@ export function LivePage() {
<div className="flex-1 space-y-2 overflow-y-auto px-3 py-2">
<p className="text-xs text-white/50"></p>
{comments.length === 0 ? <p className="text-sm text-white/40"></p> : null}
{comments.map((c) => (
<div key={c.id} className="text-sm">
<span className="text-primary font-medium">{c.userName || "用户"}</span>
<span className="text-white/50"> Lv.{c.level}</span>
<span className="text-white/80"> {c.content}</span>
</div>
))}
{comments.map((c) => {
const isGift = c.type === "gift"
const isEnter = c.type === "enter"
return (
<div
key={c.id}
className={`text-sm rounded-lg px-2 py-1 ${
isGift ? "bg-amber-500/15 text-amber-100" : isEnter ? "bg-emerald-500/10 text-emerald-100" : ""
}`}
>
{isGift ? <span className="mr-1 text-xs">🎁</span> : null}
{isEnter ? <span className="mr-1 text-xs"></span> : null}
<span className="text-primary font-medium">{c.userName || "用户"}</span>
<span className="text-white/50"> Lv.{c.level}</span>
<span className="text-white/80"> {c.content}</span>
</div>
)
})}
</div>
<div className="safe-bottom fixed bottom-0 left-0 right-0 z-20 border-t border-white/10 bg-black/90 p-2 pb-6 backdrop-blur">

View File

@@ -0,0 +1,4 @@
# 2026-04-27
- **三端迁移完成度会议**:纪要 `.cursor/meeting/2026-04-27_三端迁移完成度与文档同步.md`;结论——新三端 **主迁移完成**,全域矩阵与大屏细项 **持续对齐**;已同步 `进度-看板.md``三端对齐项目清单.md`、项目索引玩值、团队/玩值 evolution。
- **C 端直播详情补齐**`new/wz-app` `LivePage` 增加观众数(`room.viewerCount`)、礼物/进场评论样式、分享或复制链接、返回改为 `/live``迁移-wz-app路由映射.md` 更新 `/live/[id]` 行;`npm run build` 通过。

View File

@@ -1,6 +1,6 @@
# 玩值三端对齐项目清单
最后更新2026-04-24
最后更新2026-04-27
本文档与 [迁移-API对照表.md](迁移-API对照表.md)(接口级)、[进度-看板.md](进度-看板.md)(状态级)配套:**按业务域**列出 **wz-api / wz-admin / 玩值 C 端(`new/wz-app`Vite+React** 是否交付。**`old/app`Next仅作对照**,用于核对是否漏页/漏接口,**不**作为新功能真源。勾选与备注在联调时更新。
@@ -75,5 +75,6 @@
## 会议与排期(真源外注)
- **2026-04-27**:三端「是否迁移完成」结论(纪要:`.cursor/meeting/2026-04-27_三端迁移完成度与文档同步.md`)——**新三端主迁移完成****全矩阵逐项「对齐」** 仍本清单 + 对照表 + 看板 **ongoing**,不以单次会议宣称全部打勾。
- **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

@@ -1,6 +1,6 @@
# 玩值 C 端路由映射(`old` 为真源uni 为历史对照)
最后更新2026-04-22
最后更新2026-04-27
**真源(主线)****`old/app/`** 下 Next `app/**/page.tsx` 路由H5/SSR 主交付;玩值业务对接 **`new/wz-api`** 的 `/api/app/*`)。在 **`old/.env.local`** 中配置 `NEXT_PUBLIC_WZ_API_BASE` 后,`AppProvider` 与登录流可走 wz-api JWT未配置时仍可走 Next 本地 `/api/*`Mongo BFF双轨期
@@ -31,7 +31,7 @@
| `/pitch-deck` | `subpkgs/stack/pitch-deck/index` | — | **已实现**(路演骨架 + 客服) |
| `/events/today` | `subpkgs/stack/events-today/index` | — | **已实现**(卡片布局对齐 old + 横幅 `/static/events-today.jpg` + 跳转公会详情) |
| `/live` | `subpkgs/stack/live/index` | 56+ | **已实现**(暗色列表 + `getStreamers` |
| `/live/[id]` | `subpkgs/stack/live-detail/index` | 56+ | 占位 / 迭代中;`onLoad``id` |
| `/live/[id]` | `subpkgs/stack/live-detail/index` | 56+ | **Vite `LivePage`**`/live/:streamerId`wz-api context + 评论轮询 + 礼物;顶栏含观众数 / 分享 / 返回 `/live` |
| `/cp` | `subpkgs/stack/cp/index` | — | **已实现**(列表示例 → 详情) |
| `/cp/[id]` | `subpkgs/stack/cp-detail/index` | — | **已实现**`onLoad``id` |
| `/coupons` | `subpkgs/stack/coupons/index` | — | **已实现**(示例券 + 去商城) |

View File

@@ -1,6 +1,6 @@
# 玩值迁移进度看板
最后更新2026-04-24**决议**玩值新功能 **仅在 `new/`** 交付;`old/` 对照漏项
最后更新2026-04-27**决议**新三端 **主迁移已完成**新功能 **仅在 `new/`** 交付;**全量域/大屏细节** 与 old 1:1 为持续对齐,见 [三端对齐项目清单](三端对齐项目清单.md) 与 `meeting/2026-04-27_三端迁移完成度与文档同步.md`
## wz-api`new/wz-api`
@@ -22,7 +22,7 @@
| 状态 | 项 |
|------|-----|
| 已完成 | 路由见 **`new/wz-app/src/App.tsx`**;点卡 `src/api/mall.ts` + `MallPointsPage` 等;直播 `src/api/live.ts` + `LivePage``/screen` 只读 dashboard主播工作台/观众洞察、旅程埋点等见代码与 `README.md` |
| 进行中 | 与 [迁移-wz-app路由映射.md](迁移-wz-app路由映射.md) 对齐并 **`npm run build`**;与 wz-api 契约、空错态、JWT 按 [迁移-API对照表](迁移-API对照表.md) 验收 |
| 进行中 | 与 [迁移-wz-app路由映射.md](迁移-wz-app路由映射.md) 对齐并 **`npm run build`**;与 wz-api 契约、空错态、JWT 按 [迁移-API对照表](迁移-API对照表.md) 验收**直播详情** 持续与 old 体验对齐2026-04-27观众数、礼物/进场样式、分享) |
| 环境 | **`VITE_WZ_API_BASE`**(无尾 `/`+ Vite 代理;请求 **`src/lib/request.ts`** |
## `old/app`Next**仅对照,不扩新功能**
@@ -34,6 +34,7 @@
## 会议与冲刺(真源外注)
- **2026-04-27**:三端迁移完成度会议(纪见 `.cursor/meeting/2026-04-27_三端迁移完成度与文档同步.md`**结论****wz-api / wz-admin / new/wz-app 主链与契约层面的迁移可视为完成**;大屏 view 细项、全业务域与 old 逐域对齐、C 端硬验收为**进行中**——不宜对外简称「与 old 100% 无差别迁完」。
- **2026-04-24**:全项目会议(纪见 `.cursor/meeting/2026-04-24_玩值全项目进度与三端缺口.md`)定义 **P0**=点卡+订单+直播主链+认证/用户态;**P1**=管理端 P0 域「运营可管」、旅程/事件与字段对齐等;**P2**=评论/大屏 view 等依立项。**后续决议**:玩值 **新功能仅在 `new/wz-*` + `new/wz-app`**`old` 仅对照。
## 阻塞项