123 lines
5.3 KiB
Markdown
123 lines
5.3 KiB
Markdown
<!-- 8f4c095a-8532-442e-9af9-213dc997b6aa -->
|
||
# 新增平台后,游戏列表在哪里?
|
||
|
||
## 直接回答
|
||
|
||
**新增一个平台后,这个平台自己的游戏列表在 `g_game_platform_mapping`(管理端「映射列表」Tab),不在 `g_platform` 或 `g_game` 里。**
|
||
|
||
刚建完平台时,这个列表是**空的**——`g_platform` 只存平台元数据(code / name / config),**不会自动带出上游游戏**。需要后续:
|
||
|
||
1. **手动新增映射**(映射列表 → 新增映射 → 选该平台)
|
||
2. 或 **跑平台游戏导入/同步**(slot-pwa 有 POP 导入命令,saas6.x 尚未接入)
|
||
|
||
所以不是缺 `g_game_platform` 表,而是:**平台实体与平台游戏池是两张逻辑表,且 UI 没有把两者串起来。**
|
||
|
||
---
|
||
|
||
## 三张表各自管什么
|
||
|
||
```mermaid
|
||
flowchart LR
|
||
subgraph platformMeta [平台主数据]
|
||
g_platform["g_platform\n平台代码/配置"]
|
||
end
|
||
subgraph platformGames [平台游戏池]
|
||
mapping["g_game_platform_mapping\n该平台上的上游游戏\n含 game_id=0 待关联"]
|
||
end
|
||
subgraph lobbyGames [大厅游戏]
|
||
g_game["g_game\n大厅展示游戏\nactive_platform_id"]
|
||
end
|
||
|
||
g_platform -->|"platform_id"| mapping
|
||
g_game -->|"game_id 绑定后"| mapping
|
||
g_platform -->|"active_platform_id"| g_game
|
||
```
|
||
|
||
| 你想看的 | 存在哪 | 管理端入口 | 新建平台后 |
|
||
|---|---|---|---|
|
||
| **这个平台有哪些上游游戏**(含待绑定) | `g_game_platform_mapping` where `platform_id = X` | 游戏库 → **映射列表** → 筛「平台」 | **空**,需导入或手建 |
|
||
| **大厅里哪些游戏走这个平台** | `g_game` where `active_platform_id = X` | 游戏库 → **游戏列表** → 筛「当前生效平台」 | **空**,需先有大厅游戏并指定平台 |
|
||
| **平台本身配置** | `g_platform` | 游戏库 → **平台列表** | 只有这一条平台记录 |
|
||
|
||
### `game_id = 0` 就是「平台游戏池」
|
||
|
||
`g_game_platform_mapping` 里 `game_id = 0` 的记录,表示**上游已导入、尚未绑定大厅游戏**的条目(POP 导入后的默认状态)。
|
||
因此 **`g_game_platform_mapping` 同时承担「平台游戏目录 + 绑定关系」**,不需要再建 `g_game_platform`。
|
||
|
||
slot-pwa 导入逻辑见 [`PopGameImportService`](../../ray/slot-pwa/app/service/game/PopGameImportService.php):
|
||
|
||
> 从 pop_provider.php 导入 POP 游戏至 **g_game_platform_mapping**(不自动新建 g_game)
|
||
|
||
---
|
||
|
||
## 为什么你会觉得「没地方看」
|
||
|
||
当前 saas6.x 游戏库是 4 个平级 Tab([`gameLibrary/index.vue`](admin-vue/src/views/admin/gameAccess/gameLibrary/index.vue)):
|
||
|
||
- 游戏列表
|
||
- 分类列表
|
||
- **映射列表** ← 平台游戏实际在这里
|
||
- **平台列表** ← 只有平台配置,无游戏子列表、无跳转
|
||
|
||
缺口是 **UX / 流程**,不是表结构:
|
||
|
||
1. 平台 Tab 没有「查看该平台游戏」入口
|
||
2. 平台 Tab 没有显示映射数量
|
||
3. saas6.x **没有**平台游戏导入/同步能力(老项目靠 slot-pwa 命令写入 mapping)
|
||
4. 「映射列表」命名不直观,不像「平台游戏池」
|
||
|
||
---
|
||
|
||
## 推荐改进(若要做)
|
||
|
||
### 方案 A:最小改动(只改 UI,不动表)
|
||
|
||
在 [`platform-tab.vue`](admin-vue/src/views/admin/gameAccess/gameLibrary/modules/platform-tab.vue):
|
||
|
||
- 增加列:`映射总数` / `待关联数` / `已绑定数`(聚合 `g_game_platform_mapping`)
|
||
- 操作列增加 **「查看游戏」**:切到映射 Tab 并带上 `platform_id` 筛选(可用 `usePageTabs` 跨 Tab 传参或 query)
|
||
|
||
后端:在 [`GPlatformController::index`](server/app/controller/game/GPlatformController.php) 列表响应里批量附加统计字段(一次 `GROUP BY platform_id` 查询,避免 N+1)。
|
||
|
||
### 方案 B:补导入流程(与老项目对齐)
|
||
|
||
- 移植或封装 slot-pwa 的 `PopGameImportService` / `PopGameCatalogSyncService`
|
||
- 管理端平台行增加 **「同步上游游戏」** 按钮(或独立命令行入口)
|
||
- 同步结果写入 `g_game_platform_mapping`,`game_id` 先为 0,运营再在映射里绑定 `g_game`
|
||
|
||
### 方案 C:不推荐 — 新建 `g_game_platform` 表
|
||
|
||
会把「平台游戏目录」与「绑定关系」拆成两张表,与 slot 全链路(admin / pwa / console)不一致,且 `g_game_platform_mapping` 已覆盖该职责。除非有**租户级平台开通实例**等新需求,否则不建议。
|
||
|
||
---
|
||
|
||
## 运营侧标准流程(现有模型下)
|
||
|
||
```mermaid
|
||
sequenceDiagram
|
||
participant Op as 运营
|
||
participant Platform as g_platform
|
||
participant Mapping as g_game_platform_mapping
|
||
participant Game as g_game
|
||
|
||
Op->>Platform: 1. 新增平台 code/config
|
||
Note over Mapping: 此时为空
|
||
Op->>Mapping: 2a. 手动新增映射 或 2b. 跑导入同步
|
||
Note over Mapping: game_id=0 待关联
|
||
Op->>Game: 3. 新建/选择大厅游戏
|
||
Op->>Mapping: 4. 编辑映射绑定 game_id
|
||
Op->>Game: 5. 设置 active_platform_id
|
||
Note over Game: 大厅可走该平台启动
|
||
```
|
||
|
||
---
|
||
|
||
## 结论
|
||
|
||
| 问题 | 答案 |
|
||
|---|---|
|
||
| 新平台的游戏列表在哪? | **`g_game_platform_mapping`**,管理端 **映射列表** 按平台筛选 |
|
||
| 为什么新建后是空的? | 平台创建 ≠ 游戏导入;需映射或同步 |
|
||
| 需要 `g_game_platform` 吗? | **不需要**;mapping 表就是平台游戏池 |
|
||
| 真正缺什么? | **平台页与映射页的串联** + **(可选)上游游戏导入** |
|