Files
thebet365/docs/主题分支功能同步任务.md
Mars 633ff7b559 docs: 添加 theme-2/3/4 功能同步任务说明
记录 main 相对各主题分支的缺口、可原样同步范围、Player 端合并策略与验证清单。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-17 18:00:25 +08:00

222 lines
9.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 主题分支功能同步任务
> 基于 main 分支 commit `f9343b0`(站内邮箱、在线状态、员工菜单权限与内容管理增强)及前后关联提交的分析。
> **原则**API / Admin / Shared 可原样同步Player 端只做逻辑合并 + 各主题样式适配,**禁止**整文件从 main checkout 覆盖已有 player 页面。
---
## 分支现状
| 分支 | 相对 main 缺失 | 已有等价功能 | 主题特征 |
|------|----------------|--------------|----------|
| **theme-2** | `f9343b0` 全部 + `f34fe54`(赛事搜索) | `9f1d263``e9a23de` 的 admin/API/投注逻辑 | Pinnacle 蓝白浅色 |
| **theme-3** | 同 theme-2 | `7832257``e9a23de` | 统一移动端视觉 |
| **theme-4** | 仅 `f9343b0` | `d3ca849` 已含 `e9a23de` 的 admin/API + 单串关 | 海军蓝暗色极简 |
**结论**:三个 theme 分支都需要同步 **f9343b0**theme-2/3 额外需要 **f34fe54** 的赛事搜索。`e9a23de` 在 theme 分支已通过 cherry-pick 或 `d3ca849` 覆盖admin/API 侧无缺口。
---
## 任务清单
- [ ] **sync-api-admin**:三个 theme 分支从 main checkout `apps/api``apps/admin``packages/shared/src/api-errors.ts`、相关 docs
- [ ] **player-new-files**:复制 player 新文件composables / views / components按各 theme CSS 变量改样式
- [ ] **player-merge-existing**:手工合并 MainLayout、BetSlipDrawer、HomeView、router、i18n 增量
- [ ] **theme23-football-search**theme-2/3 额外合并 `f34fe54` FootballView 赛事搜索逻辑
- [ ] **verify-per-theme**:按分支跑 build + 邮箱 / 充值 / 菜单 / 在线 / 搜索功能验证
---
## 一、可直接整目录同步(三个分支相同)
与玩家主题无关,**建议从 main 原样 checkout**
### API 全量(含迁移)
- `apps/api/prisma/schema.prisma` + 迁移:
- `20260617083520_add_visible_menus`
- `20260617120000_player_messages`
- 新域:
- `apps/api/src/domains/player-messages/`
- `apps/api/src/domains/presence/`
- 主要改动:`admin.controller.ts``player.controller.ts``deposit.service.ts``admin-staff.service.ts``users.service.ts``system-config.service.ts``matches.service.ts`(含 `listUpcomingPublished``getSelectionsOdds`)、`content.service.ts` 及对应 spec
**功能清单**
- 玩家站内消息 CRUD + 充值审核自动通知
- Redis 在线心跳 + 管理端在线人数
- 员工 `visibleMenus` + 删除保护
- Inbox 系统配置(开关、充值 / Banner / 公告通知)
- 待审充值 count API、home 返回 `inboxEnabled` / `upcomingMatches`
### Admin 全量
Admin 在 repo 内**不随 theme 分支分化**,以下全部同步:
- 新组件:`AdminPlayerStatusCell.vue``ContentImageField.vue``ContentRichEditor.vue`
- 新 composable`useDepositPendingCount.ts`
- 核心页面:`StaffManage.vue`(可见菜单勾选)、`Contents.vue`(富文本 + INBOX_NOTIFY 配置)、`ManageLayout.vue`(菜单过滤 + 充值角标)
- 其它:`DashboardPlayers.vue``Users.vue``auth.ts`、全套 i18n
- `App.vue` 中 Element Plus 链接按钮 hover 修复(管理端 UI 修复,非玩家主题)
### Shared + 文档
- `packages/shared/src/api-errors.ts`(及 `.js``CANNOT_DELETE_SELF``STAFF_NOT_FOUND``MESSAGE_NOT_FOUND`
- `docs/玩家端缺失功能分析.md`
### 可选
- 删除 `.agents/skills/**` — 与功能无关,可随 main 清理或保留
---
## 二、明确不同步(主题专属)
| 路径 | 原因 |
|------|------|
| `apps/player/src/styles.css` | 各 theme CSS 变量不同main 暗金 / theme-2 蓝白 / theme-4 海军白强调) |
| `apps/player/index.html` | theme-color、meta 随主题 |
| `apps/player/src/assets/**` | banner、empty 图、vs.png 等 |
| 各 theme 已有 player 组件/页面样式 diff | BetSlipDrawer、ProfileView、WalletView 等布局与配色 |
| theme-4 独有:`VsBadge.vue``WalletBalanceCard.vue``walletStats.ts` | theme-4 钱包 UX**不要**同步 main 对这些文件的删除 |
| theme-2/3 独有:`ec51b67` / `0d43085` 赛事详情 8px 间距 | 保留 |
| `packages/shared/public/favicon.svg``site.webmanifest` | 品牌 / 主题资源,按分支保留 |
---
## 三、Player 端:逻辑合并 + 样式适配
**禁止**对已有 player 文件执行 `git checkout main -- <file>` 整文件覆盖。
### 3.1 新增文件(复制后做样式 pass
| 文件 | 说明 | 样式注意 |
|------|------|----------|
| `ConfirmDialog.vue` | 通用确认弹窗 | main 写死暗金渐变theme-2 用 `--primary`/`--bg-card`theme-4 用白色强调变量 |
| `CustomerServicePanel.vue` | 客服面板 | 依赖 theme panel 样式 |
| `MessageListPanel.vue` | 消息列表 | 含 `#141414``var(--gold)`theme-2 无 `--gold` |
| `InboxHubView.vue` | 邮箱中心 | 同上 |
| `MessageDetailView.vue` | 消息详情 | 配合 `utils/html.ts` |
| `AnnouncementListView.vue` | 公告列表 | 按 theme 变量写 scoped CSS |
| `AnnouncementDetailView.vue` | 公告详情 | 同上 |
| `useDepositNotifications.ts` | 充值结果轮询 | 纯逻辑,可直接复制 |
| `useInboxFeature.ts` | 邮箱开关路由 | 纯逻辑 |
| `usePlayerMessages.ts` | 消息 API | 纯逻辑 |
| `usePresencePing.ts` | 在线心跳 | 纯逻辑 |
| `utils/html.ts` | HTML sanitize | 纯逻辑 |
**删除**`CustomerServiceModal.vue`(三个 theme 均需删)
### 3.2 已有文件 — 只合并 script / 路由 / 模板结构
| 文件 | 需合并的功能 |
|------|-------------|
| `router/index.ts` | 新增 `announcements``announcements/:id``messages``messages/:id` |
| `usePlayerHome.ts` | `homeRaw``upcomingMatches``announcementItems`、inbox 字段 |
| `MainLayout.vue` | inbox/deposit/presence composablesHub 替代客服 Modal路由可见性规则**保留 theme CSS** |
| `BetSlipDrawer.vue` | 赔率轮询、`ConfirmDialog` 清空确认、`oddsDeltas` 变更提示 |
| `betSlip.ts` | `updateSelectionOdds()`theme-4 已有theme-2/3 需补) |
| `AnnouncementMarquee.vue` | 点击跳转 `/announcements/:id` |
| `BannerCarousel.vue` | 推广链接行为 |
| `HomeView.vue` | 近期赛事 Tab`upcoming` / `upcomingMatches` |
| `FootballView.vue` | theme-2/3`f34fe54` 搜索、`?search=`、双视图 |
| `ProfileView.vue` | 邮箱 / 消息入口 |
| `RechargeHistoryView.vue` / `RechargeView.vue` | minor 逻辑 |
| `constants/defaultBanner.ts` | 删除硬编码 fallback |
| i18n 三语文件 | **只合并新增 key**,勿覆盖 theme 已有文案 |
### 3.3 功能数据流
```mermaid
flowchart LR
subgraph admin [Admin]
StaffManage[StaffManage visibleMenus]
Contents[Contents INBOX_NOTIFY]
DepositReview[Deposit approve/reject]
end
subgraph api [API]
PlayerMessages[player-messages]
Presence[presence Redis]
SystemConfig[inbox settings]
end
subgraph player [Player per theme]
MainLayout[MainLayout Hub]
InboxHub[InboxHubView]
PresencePing[presence ping]
end
StaffManage --> api
Contents --> SystemConfig
DepositReview --> PlayerMessages
SystemConfig --> MainLayout
PlayerMessages --> InboxHub
Presence --> PresencePing
```
---
## 四、各分支差异要点
### theme-2 / theme-3
- **必做**:第一节 API/Admin/Shared + 第三节 Player 合并
- **额外**`f34fe54``FootballView.vue` 赛事搜索
- **已有**:单串关 / 盘口状态 cherry-pickadmin `match-form.ts` 与 main 无 diff
- **保留**8px 间距 commit、各自 Pinnacle / 移动端样式
### theme-4
- **必做**:第一节 + 第三节(以 theme-4 组件结构为基准,如 WalletView、VsBadge
- **跳过或按需**`f34fe54`(对比 FootballView 是否已有搜索)
- **已有**`d3ca849` 含 e9a23de + `updateSelectionOdds`
- **注意**:不要同步 main 对 `WalletBalanceCard` / `VsBadge` 的删除
---
## 五、推荐操作顺序(每个 theme 分支)
```bash
git checkout theme-X
git checkout main -- apps/api apps/admin packages/shared/src/api-errors.ts docs/玩家端缺失功能分析.md
pnpm db:migrate
pnpm --filter @thebet365/api test
pnpm --filter @thebet365/admin build
```
随后按顺序:
1. Player 纯逻辑文件composables、utils、router、i18n 增量、删 Modal
2. Player 新 UI 文件(复制 + 按 `styles.css` 变量改 scoped CSS
3. Player 已有文件手工 mergeMainLayout → BetSlipDrawer → HomeView → FootballView
### 验证清单
- [ ] 员工登录后侧栏按 `visibleMenus` 过滤
- [ ] 充值审核后玩家收到站内信(开关打开时)
- [ ] Hub 未读角标、公告详情、inbox 关闭时客服 fallback
- [ ] 管理端在线人数、充值待审角标
- [ ] theme-2/3首页「近期」Tab、赛事页搜索
- [ ] 投注单:清空确认、赔率变更提示
---
## 六、工作量与风险
| 类别 | 文件约数 | 方式 | 风险 |
|------|----------|------|------|
| API + Admin + Shared | ~62 | 原样 checkout | 低 |
| Player 新文件 + composables | ~15 | 复制 + 样式 pass | 中 |
| Player 已有文件 merge | ~12 | 手工 | 高 |
| **每个 theme 分支** | | | **约 24h**theme-4 略少) |
**不建议**对 theme 分支使用 `git merge main``git cherry-pick f9343b0` 整 commit — 会把 main 暗金 player 样式大量带入,冲突面超过 50 个 player 文件。
---
## 参考 commit
| Commit | 说明 |
|--------|------|
| `f9343b0` | 站内邮箱、在线状态、员工菜单、内容管理增强(**三 theme 必同步** |
| `f34fe54` | FootballView 赛事搜索(**theme-2/3 额外** |
| `e9a23de` | 单串关持久化、盘口状态theme 分支已 cherry-pick 或含于 d3ca849 |