feat(player): PC 端投注/资金/充值/返水列表改为弹窗详情

列表点击与深链统一打开桌面弹窗,并补齐冻结余额文案与审核日志补全。
This commit is contained in:
mars
2026-07-10 16:12:57 +08:00
parent ea4764934a
commit 4cbc846d05
19 changed files with 1776 additions and 347 deletions

View File

@@ -1,16 +1,38 @@
<script setup lang="ts">
import { ref, onMounted, onActivated } from 'vue';
import { ref, onMounted, onActivated, watch } from 'vue';
import { useI18n } from 'vue-i18n';
import { RouterLink } from 'vue-router';
import { useRoute, useRouter } from 'vue-router';
import api from '../../api';
import GoldSpinner from '../../components/GoldSpinner.vue';
import Pagination from '../../components/desktop/Pagination.vue';
import DesktopBetDetailModal from '../../components/desktop/DesktopBetDetailModal.vue';
import { type BetHistoryItem } from '../../components/BetHistoryCard.vue';
import { useOnLocaleChange } from '../../composables/useOnLocaleChange';
const COL_COUNT = 8;
const { t } = useI18n();
const route = useRoute();
const router = useRouter();
const detailModalVisible = ref(false);
const detailBetNo = ref<string | null>(null);
function openDetail(betNo: string) {
detailBetNo.value = betNo;
detailModalVisible.value = true;
}
function openDetailFromQuery() {
const betNo = route.query.betNo;
if (typeof betNo === 'string' && betNo) {
openDetail(betNo);
const { betNo: _removed, ...rest } = route.query;
void router.replace({ path: route.path, query: rest });
}
}
watch(() => route.query.betNo, openDetailFromQuery);
const items = ref<BetHistoryItem[]>([]);
const total = ref(0);
@@ -60,8 +82,14 @@ useOnLocaleChange(() => {
void loadPage(1);
});
onActivated(() => { void loadPage(page.value); });
onMounted(() => { void loadPage(1); });
onActivated(() => {
void loadPage(page.value);
openDetailFromQuery();
});
onMounted(() => {
void loadPage(1);
openDetailFromQuery();
});
function statusClass(status: string) {
const map: Record<string, string> = {
@@ -149,10 +177,13 @@ function statusLabel(status: string) {
</td>
</tr>
<template v-else-if="items.length">
<tr v-for="bet in items" :key="bet.betNo" class="hover-row">
<td>
<RouterLink :to="`/bets/${bet.betNo}`" class="link-cell">{{ bet.betNo }}</RouterLink>
</td>
<tr
v-for="bet in items"
:key="bet.betNo"
class="hover-row clickable-row"
@click="openDetail(bet.betNo)"
>
<td class="id-cell">{{ bet.betNo }}</td>
<td>{{ bet.matchTitle || '-' }}</td>
<td class="muted-cell">{{ bet.pickLabel || '-' }}</td>
<td class="num-cell">{{ bet.totalOdds ?? '-' }}</td>
@@ -183,6 +214,8 @@ function statusLabel(status: string) {
/>
</div>
</section>
<DesktopBetDetailModal v-model:visible="detailModalVisible" :bet-no="detailBetNo" />
</div>
</template>