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

@@ -0,0 +1,111 @@
<script setup lang="ts">
import { ref, watch } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import { useAdminLocale } from '../composables/useAdminLocale';
import DepositOrders from './DepositOrders.vue';
import PaymentMethods from './PaymentMethods.vue';
const { t } = useAdminLocale();
const route = useRoute();
const router = useRouter();
const tabs = [
{ key: 'orders', label: () => t('deposit.deposit_orders_title') },
{ key: 'methods', label: () => t('deposit.payment_methods_title') },
] as const;
function getTabFromQuery(): string {
return route.query.tab === 'methods' ? 'methods' : 'orders';
}
const activeTab = ref(getTabFromQuery());
watch(() => route.query.tab, (val) => {
activeTab.value = val === 'methods' ? 'methods' : 'orders';
});
function switchTab(key: string) {
activeTab.value = key;
router.replace({ query: { ...route.query, tab: key } });
}
</script>
<template>
<div class="page-deposit-manage">
<div class="tab-bar">
<button
v-for="tab in tabs"
:key="tab.key"
class="tab-btn"
:class="{ active: activeTab === tab.key }"
@click="switchTab(tab.key)"
>
{{ tab.label() }}
</button>
</div>
<DepositOrders v-if="activeTab === 'orders'" />
<PaymentMethods v-if="activeTab === 'methods'" />
</div>
</template>
<style scoped>
.page-deposit-manage {
display: flex;
flex-direction: column;
height: 100%;
min-height: 0;
}
.tab-bar {
display: flex;
gap: 0;
border-bottom: 1px solid #2a2a2a;
margin-bottom: 0;
flex-shrink: 0;
}
.tab-btn {
position: relative;
padding: 10px 20px;
background: none;
border: none;
color: #888;
font-size: 14px;
font-weight: 600;
cursor: pointer;
transition: color 0.15s;
letter-spacing: 0.02em;
}
.tab-btn:hover {
color: #ccc;
}
.tab-btn.active {
color: #fff;
}
.tab-btn.active::after {
content: '';
position: absolute;
bottom: -1px;
left: 0;
right: 0;
height: 2px;
background: var(--primary, #409eff);
border-radius: 2px 2px 0 0;
}
.page-deposit-manage :deep(.page-deposit-orders),
.page-deposit-manage :deep(.page-payment-methods) {
flex: 1;
min-height: 0;
overflow-y: auto;
}
.page-deposit-manage :deep(.page-deposit-orders .toolbar h2),
.page-deposit-manage :deep(.page-payment-methods .toolbar h2) {
display: none;
}
</style>