diff --git a/databi/src/components/DatabiHeader.jsx b/databi/src/components/DatabiHeader.jsx index 553abc4..6e7b26b 100644 --- a/databi/src/components/DatabiHeader.jsx +++ b/databi/src/components/DatabiHeader.jsx @@ -24,7 +24,9 @@ export function DatabiHeader({ appOptions = [], countryId, countryOptions = defaultCountryOptions, + error = "", filtersLoading = false, + loading = false, onScreenChange, onAppChange, onCountryChange, @@ -143,7 +145,10 @@ export function DatabiHeader({ value={countryId} valueLabel={countryLabel} /> - 实时 + + {error ? "异常" : loading ? "刷新中" : "实时"} + + {error ? {error} : null} ); diff --git a/databi/src/components/SelfGameScreen.jsx b/databi/src/components/SelfGameScreen.jsx index 4f8f86b..68406d4 100644 --- a/databi/src/components/SelfGameScreen.jsx +++ b/databi/src/components/SelfGameScreen.jsx @@ -13,11 +13,19 @@ const eventLabels = { page_open: "页面打开", config_load_success: "配置成功", config_load_failed: "配置失败", + gesture_select: "选择手势", + match_api: "匹配接口", + match_cancel: "取消匹配", stake_selected: "选择档位", + stake_select: "选择档位", match_click: "点击匹配", match_success: "匹配成功", animation_start: "进入开奖", + preload_complete: "预加载完成", + reveal_enter: "进入开奖", + roll_api: "开奖接口", settlement_show: "结算展示", + play_again: "再来一局", play_again_click: "再来一局", exit_click: "退出" }; diff --git a/databi/src/styles/layout.css b/databi/src/styles/layout.css index 89c46af..b369d34 100644 --- a/databi/src/styles/layout.css +++ b/databi/src/styles/layout.css @@ -688,6 +688,15 @@ box-shadow: 0 0 14px rgba(247, 163, 58, 0.72); } +.header-error { + max-width: 220px; + overflow: hidden; + color: #f7a33a; + font-size: 12px; + text-overflow: ellipsis; + white-space: nowrap; +} + .metric-grid { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); diff --git a/src/features/games/pages/SelfGamePage.jsx b/src/features/games/pages/SelfGamePage.jsx index 59030ee..90a7b61 100644 --- a/src/features/games/pages/SelfGamePage.jsx +++ b/src/features/games/pages/SelfGamePage.jsx @@ -1,4 +1,5 @@ import AddCircleOutlineOutlined from "@mui/icons-material/AddCircleOutlineOutlined"; +import RemoveCircleOutlineOutlined from "@mui/icons-material/RemoveCircleOutlineOutlined"; import RefreshOutlined from "@mui/icons-material/RefreshOutlined"; import SettingsOutlined from "@mui/icons-material/SettingsOutlined"; import MenuItem from "@mui/material/MenuItem"; @@ -108,7 +109,7 @@ export function SelfGamePage() { label: "机器人", width: "minmax(190px, .9fr)", render: (game) => - `${game.robotEnabled ? "启用" : "关闭"} · ${game.robotMatchWaitMs}ms · 胜率 ${game.robotUserWinRatePercent ?? 50}%`, + `${game.robotEnabled ? "启用" : "关闭"} · ${game.robotMatchWaitMs}ms · 玩家胜率 ${game.robotUserWinRatePercent ?? 50}%`, }, { key: "updated", @@ -119,15 +120,26 @@ export function SelfGamePage() { { key: "actions", label: "操作", - width: "128px", + width: "176px", render: (game) => ( openConfig(game)}> - openPool(game)}> + openPool(game, "in")} + > + openPool(game, "out")} + > + + ), }, @@ -141,9 +153,13 @@ export function SelfGamePage() { setActiveAction("config"); }; - const openPool = (game) => { + const openPool = (game, direction) => { setActiveGame(game); - setPoolForm(defaultPoolForm); + setPoolForm({ + ...defaultPoolForm, + direction, + reason: direction === "out" ? "admin_deduct" : "admin_adjust", + }); setActiveAction("pool"); }; @@ -179,7 +195,7 @@ export function SelfGamePage() { reason: poolForm.reason, }); await load(); - showToast("奖池已调整", "success"); + showToast(poolForm.direction === "out" ? "奖池已扣除" : "奖池已增加", "success"); closeDialog(); } catch (err) { showToast(err.message || "调整奖池失败", "error"); @@ -285,8 +301,8 @@ function ConfigDialog({ form, loading, open, setForm, onClose, onSubmit }) { onChange={(event) => setForm({ ...form, robotMatchWaitMs: event.target.value })} /> + setForm({ ...form, direction: event.target.value })} - > - 增加 - 减少 - - setForm({ ...form, amountCoin: event.target.value })} />