feat: 手动充值、邀请码注册与后台管理增强

新增玩家手动充值全流程(收款方式配置、充值下单/审核、钱包上分),
支持邀请码注册、邀请历史与专属返水率;完善后台代理/玩家管理与响应式操作栏,
并补充前台注册、充值页及多语言错误码。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-11 12:20:11 +08:00
parent 618fb49511
commit 10485ecfaf
98 changed files with 7908 additions and 856 deletions

View File

@@ -38,7 +38,7 @@ const mainTrendOption = computed(() =>
[
{
name: t('dash.chart_stake'),
color: '#248f54',
color: '#d4d4d4',
values: s.value?.trend7d?.map((d) => toNum(d.stake)) ?? [],
},
{
@@ -62,7 +62,7 @@ const distributionOption = computed(() => {
const raw = s.value?.bets.todayByStatus ?? {};
const betColors: Record<string, string> = {
PENDING: '#fb923c',
WON: '#248f54',
WON: '#d4d4d4',
LOST: '#f87171',
VOID: '#6b7280',
REFUNDED: '#60a5fa',
@@ -71,7 +71,7 @@ const distributionOption = computed(() => {
const matchSegs = m
? [
{ label: t('dash.match_draft'), value: m.draft, color: '#6b7280' },
{ label: t('dash.match_published'), value: m.published, color: '#248f54' },
{ label: t('dash.match_published'), value: m.published, color: '#d4d4d4' },
{ label: t('dash.match_closed'), value: m.closed, color: '#60a5fa' },
{ label: t('dash.match_pending_settle'), value: m.pendingSettlement, color: '#fb923c' },
{ label: t('dash.match_settled'), value: m.settled ?? 0, color: '#5eead4' },

View File

@@ -54,7 +54,7 @@ const userDistributionOption = computed(() => {
const u = s.value?.users;
const userSegs = u
? [
{ label: t('dash.user_active'), value: u.playersActive, color: '#248f54' },
{ label: t('dash.user_active'), value: u.playersActive, color: '#d4d4d4' },
{ label: t('dash.user_suspended'), value: u.playersSuspended, color: '#f87171' },
{ label: t('dash.user_direct'), value: u.playersDirect, color: '#60a5fa' },
{ label: t('dash.user_agents'), value: u.agentsTotal, color: '#a78bfa' },

View File

@@ -3,30 +3,30 @@
}
.state-card {
border-radius: 14px;
border: 1px solid #2a2220;
background: rgba(255, 69, 58, 0.06);
border-radius: 8px;
border: 1px solid rgba(255, 255, 255, 0.08);
background: rgba(255, 69, 58, 0.04);
text-align: center;
padding: 8px 0 4px;
}
.state-title {
font-size: 15px;
font-weight: 700;
color: #ff8a80;
font-size: 14px;
font-weight: 500;
color: #fca5a5;
margin-bottom: 6px;
}
.state-hint {
font-size: 13px;
color: #888;
color: #737373;
margin-bottom: 14px;
}
.overview-board {
border-radius: 14px;
border: 1px solid #1e1e1e;
background: linear-gradient(180deg, rgba(36, 143, 84, 0.06) 0%, rgba(0, 0, 0, 0) 120px);
border-radius: 8px;
border: 1px solid rgba(255, 255, 255, 0.08);
background: #111111;
margin-bottom: 28px;
}
@@ -45,13 +45,12 @@
.board-hint {
font-size: 12px;
color: #666;
color: #737373;
}
.dash-updated {
font-size: 11px;
color: #555;
letter-spacing: 0.02em;
color: #525252;
}
.kpi-grid {
@@ -71,9 +70,9 @@
.kpi-cell {
padding: 12px 14px;
border-radius: 10px;
border: 1px solid #222;
background: rgba(255, 255, 255, 0.03);
border-radius: 8px;
border: 1px solid rgba(255, 255, 255, 0.06);
background: rgba(255, 255, 255, 0.02);
}
.kpi-cell.compact {
@@ -87,25 +86,25 @@
.kpi-cell--link:hover,
.kpi-cell--link:focus-visible {
border-color: rgba(77, 214, 138, 0.35);
background: rgba(36, 143, 84, 0.1);
border-color: rgba(255, 255, 255, 0.12);
background: rgba(255, 255, 255, 0.04);
outline: none;
}
.kpi-label {
display: block;
font-size: 11px;
color: #666;
font-size: 12px;
color: #737373;
margin-bottom: 6px;
}
.kpi-value {
display: block;
font-size: 22px;
font-weight: 800;
color: var(--green-text);
font-weight: 500;
color: #f5f5f5;
line-height: 1.15;
letter-spacing: -0.5px;
letter-spacing: -0.02em;
}
.kpi-value.sm {
@@ -115,7 +114,7 @@
.kpi-sub {
display: block;
font-size: 11px;
color: #555;
color: #525252;
margin-top: 4px;
}
@@ -123,15 +122,15 @@
display: inline-block;
margin-top: 6px;
font-size: 10px;
font-weight: 600;
color: #888;
font-weight: 500;
color: #737373;
padding: 2px 6px;
border-radius: 4px;
background: rgba(255, 255, 255, 0.04);
}
.kpi-delta.up {
color: #4ade80;
color: #a3a3a3;
}
.kpi-delta.down {
@@ -139,13 +138,13 @@
}
.charts-stack {
border-top: 1px solid #1a1a1a;
border-top: 1px solid rgba(255, 255, 255, 0.06);
padding-top: 12px;
}
.chart-main-caption {
font-size: 11px;
color: #555;
color: #525252;
text-align: center;
margin: -8px 0 8px;
}