Procházet zdrojové kódy

充值页面修改

pxb před 1 dnem
rodič
revize
3705b8d0c1

+ 180 - 296
src/components/PageContainer/index.vue

@@ -1,32 +1,17 @@
 <template>
 <template>
-  <view
-    class="global-page-container"
-    :class="[
-      isShowTabbarRoute
-        ? 'global-page-container-tabbar'
-        : 'global-page-container-children',
-    ]"
-  >
-    <u-navbar
-      v-if="showNavBar"
-      :background="background"
-      :border-bottom="false"
-      :custom-back="onClickLeft"
-      back-icon-name=""
-      back-text=""
-      title=""
-      @touchmove.stop.prevent
-    >
+  <view class="global-page-container" :class="[
+    isShowTabbarRoute
+      ? 'global-page-container-tabbar'
+      : 'global-page-container-children',
+  ]">
+    <u-navbar v-if="showNavBar" :background="background" :border-bottom="false" :custom-back="onClickLeft"
+      back-icon-name="" back-text="" title="" @touchmove.stop.prevent>
       <template v-if="hasLeftSlot" #left>
       <template v-if="hasLeftSlot" #left>
         <slot name="left"></slot>
         <slot name="left"></slot>
       </template>
       </template>
       <template #left>
       <template #left>
         <view class="logo-container" @click.stop="goToHome">
         <view class="logo-container" @click.stop="goToHome">
-          <image
-            src="@/static/images/logo.png"
-            mode="widthFix"
-            style="width: 100%; height: auto"
-          ></image>
+          <image src="@/static/images/logo.png" mode="widthFix" style="width: 100%; height: auto"></image>
         </view>
         </view>
       </template>
       </template>
 
 
@@ -38,17 +23,12 @@
       </template>
       </template>
       <template #right>
       <template #right>
         <view v-if="token" class="navbar-right">
         <view v-if="token" class="navbar-right">
-          <u-button
-            :customStyle="{
-              height: '32px',
-              padding: '0 4px',
-              marginRight: '10px',
-              fontSize: '14px',
-            }"
-            size="small"
-            type="primary"
-            @click="goTopUp"
-          >
+          <u-button :customStyle="{
+            height: '32px',
+            padding: '0 4px',
+            marginRight: '10px',
+            fontSize: '14px',
+          }" size="small" type="primary" @click="goTopUp">
             <text style="color: #000; margin: 0 4px; font-weight: bold">
             <text style="color: #000; margin: 0 4px; font-weight: bold">
               {{ formatMoney(userMoney) }} {{ $currency }}
               {{ formatMoney(userMoney) }} {{ $currency }}
             </text>
             </text>
@@ -59,24 +39,11 @@
           <view class="nav-btn">
           <view class="nav-btn">
             <selectLang :isBall="true" />
             <selectLang :isBall="true" />
           </view>
           </view>
-          <view
-            class="ml-2 avatar-wrapper"
-            @click="router.pushTab({ name: 'My' })"
-          >
-            <u-avatar
-              :src="userInfo.avatar || 'https://img.yzcdn.cn/vant/cat.jpeg'"
-              size="72"
-              shape="circle"
-              customStyle="border: 3px solid rgba(248, 185, 50, 0.2)"
-            ></u-avatar>
-            <view
-              class="avatar-wrapper-lv"
-              v-if="userInfo.level && userInfo.level != 0"
-            >
-              <image
-                :src="userInfo.level.img"
-                style="width: 100%; height: 100%"
-              />
+          <view class="ml-2 avatar-wrapper" @click="router.pushTab({ name: 'My' })">
+            <u-avatar :src="userInfo.avatar" size="72" shape="circle"
+              customStyle="border: 3px solid rgba(248, 185, 50, 0.2)"></u-avatar>
+            <view class="avatar-wrapper-lv" v-if="userInfo.level && userInfo.level != 0">
+              <image :src="userInfo.level.img" style="width: 100%; height: 100%" />
             </view>
             </view>
           </view>
           </view>
 
 
@@ -94,22 +61,15 @@
           <view class="nav-btn">
           <view class="nav-btn">
             <selectLang :isBall="true" />
             <selectLang :isBall="true" />
           </view>
           </view>
-          <view
-            style="color: #ccc; text-decoration: underline; margin-right: 6px"
-            @click="handleFreeTrial"
-          >
+          <view style="color: #ccc; text-decoration: underline; margin-right: 6px" @click="handleFreeTrial">
             {{ t("免费试玩") }}
             {{ t("免费试玩") }}
           </view>
           </view>
-          <view
-            style="color: #ccc; text-decoration: underline; margin-right: 6px"
-            @click="router.push({ name: 'register' })"
-          >
+          <view style="color: #ccc; text-decoration: underline; margin-right: 6px"
+            @click="router.push({ name: 'register' })">
             {{ t("注册") }}
             {{ t("注册") }}
           </view>
           </view>
-          <view
-            style="color: #ccc; text-decoration: underline; margin-right: 16px"
-            @click="router.push({ name: 'login' })"
-          >
+          <view style="color: #ccc; text-decoration: underline; margin-right: 16px"
+            @click="router.push({ name: 'login' })">
             {{ t("登录") }}
             {{ t("登录") }}
           </view>
           </view>
         </view>
         </view>
@@ -118,11 +78,7 @@
 
 
     <AppDownloadBanner v-if="isShowTabbarRoute" />
     <AppDownloadBanner v-if="isShowTabbarRoute" />
 
 
-    <view
-      v-if="showNavBar && !isShowTabbarRoute"
-      class="sub-navbar"
-      @touchmove.stop.prevent
-    >
+    <view v-if="showNavBar && !isShowTabbarRoute" class="sub-navbar" @touchmove.stop.prevent>
       <view class="sub-navbar-left">
       <view class="sub-navbar-left">
         <view class="sub-navbar-arrow-left nav-btn" @click="onClickLeft">
         <view class="sub-navbar-arrow-left nav-btn" @click="onClickLeft">
           <u-icon color="#f1f1f1" name="arrow-left" size="36"></u-icon>
           <u-icon color="#f1f1f1" name="arrow-left" size="36"></u-icon>
@@ -134,38 +90,22 @@
       </view>
       </view>
     </view>
     </view>
 
 
-    <view
-      v-if="!isShowTabbarRoute"
-      style="height: 50px"
-      @touchmove.stop.prevent
-    ></view>
-
-    <view
-      :class="[isShowTabbarRoute ? 'tabbar-content-box' : '']"
-      :style="{
-        paddingBottom: isShowTabbarRoute ? contentPaddingBottom : '',
-      }"
-      class="content-box"
-    >
+    <view v-if="!isShowTabbarRoute" style="height: 50px" @touchmove.stop.prevent></view>
+
+    <view :class="[isShowTabbarRoute ? 'tabbar-content-box' : '']" :style="{
+      paddingBottom: isShowTabbarRoute ? contentPaddingBottom : '',
+    }" class="content-box">
       <slot></slot>
       <slot></slot>
     </view>
     </view>
 
 
-    <view
-      @touchmove.stop.prevent
-      v-if="
-        $Route.path === '/pages/Tabbar/SportsBetting/index' ||
-        $Route.path === '/pages/common/sportDetail/index'
-      "
-    >
-      <view
-        v-if="!orderStore.isOpen"
-        class="sticky-header-bar sportDetail-cart-bar"
-        @click="openSheet"
-      >
+    <view @touchmove.stop.prevent v-if="
+      $Route.path === '/pages/Tabbar/SportsBetting/index' ||
+      $Route.path === '/pages/common/sportDetail/index'
+    ">
+      <view v-if="!orderStore.isOpen" class="sticky-header-bar sportDetail-cart-bar" @click="openSheet">
         <view class="betting-sheet-header">
         <view class="betting-sheet-header">
           <view class="betting-sheet-header-left">
           <view class="betting-sheet-header-left">
-            <view v-if="orderStore.selectedCount > 0" class="sheet-badge"
-              >{{ orderStore.selectedCount }}
+            <view v-if="orderStore.selectedCount > 0" class="sheet-badge">{{ orderStore.selectedCount }}
             </view>
             </view>
             <text class="header-text">{{ t("投注单") }}</text>
             <text class="header-text">{{ t("投注单") }}</text>
             <u-icon color="#666" name="arrow-up"></u-icon>
             <u-icon color="#666" name="arrow-up"></u-icon>
@@ -180,34 +120,20 @@
         </view>
         </view>
       </view>
       </view>
 
 
-      <u-popup
-        :mask="true"
-        :mask-close-able="true"
-        :modelValue="orderStore.isOpen"
-        :safe-area-inset-bottom="true"
-        :z-index="990"
-        border-radius="24"
-        height="70%"
-        mode="bottom"
-        @close="closeSheet"
-      >
+      <u-popup :mask="true" :mask-close-able="true" :modelValue="orderStore.isOpen" :safe-area-inset-bottom="true"
+        :z-index="990" border-radius="24" height="70%" mode="bottom" @close="closeSheet">
         <view class="popup-betting-sheet-header">
         <view class="popup-betting-sheet-header">
           <view class="betting-sheet-header border-bottom" @click="closeSheet">
           <view class="betting-sheet-header border-bottom" @click="closeSheet">
             <view class="betting-sheet-header-left">
             <view class="betting-sheet-header-left">
-              <view v-if="orderStore.selectedCount > 0" class="sheet-badge"
-                >{{ orderStore.selectedCount }}
+              <view v-if="orderStore.selectedCount > 0" class="sheet-badge">{{ orderStore.selectedCount }}
               </view>
               </view>
               <text class="header-text">{{ t("投注单") }}</text>
               <text class="header-text">{{ t("投注单") }}</text>
               <u-icon color="#666" name="arrow-down"></u-icon>
               <u-icon color="#666" name="arrow-down"></u-icon>
             </view>
             </view>
             <view class="betting-sheet-header-right">
             <view class="betting-sheet-header-right">
               <view class="settings-btn">
               <view class="settings-btn">
-                <text
-                  class="tmc"
-                  style="font-size: 14px; margin-right: 16px"
-                  @click.stop="orderStore.clearAllOrders"
-                  >{{ t("清空") }}</text
-                >
+                <text class="tmc" style="font-size: 14px; margin-right: 16px" @click.stop="orderStore.clearAllOrders">{{
+                  t("清空") }}</text>
               </view>
               </view>
             </view>
             </view>
           </view>
           </view>
@@ -215,20 +141,10 @@
           <view v-if="orderStore.selectedCount > 0" class="batch-stake-box">
           <view v-if="orderStore.selectedCount > 0" class="batch-stake-box">
             <text class="batch-label">{{ t("批量设置金额") }}</text>
             <text class="batch-label">{{ t("批量设置金额") }}</text>
             <view class="batch-input-wrapper">
             <view class="batch-input-wrapper">
-              <input
-                v-model="batchStakeValue"
-                class="batch-input"
-                :placeholder="t('请输入金额')"
-                type="number"
-              />
+              <input v-model="batchStakeValue" class="batch-input" :placeholder="t('请输入金额')" type="number" />
             </view>
             </view>
-            <u-button
-              size="mini"
-              type="primary"
-              style="margin-left: 10px"
-              @click="applyBatchStake"
-              >{{ t("确定") }}</u-button
-            >
+            <u-button size="mini" type="primary" style="margin-left: 10px" @click="applyBatchStake">{{ t("确定")
+            }}</u-button>
           </view>
           </view>
         </view>
         </view>
 
 
@@ -237,53 +153,34 @@
         </view>
         </view>
 
 
         <view v-else class="bet-list">
         <view v-else class="bet-list">
-          <view
-            v-for="(item, index) in orderStore.selectOrders"
-            :key="index"
-            :class="{ 'is-locked': checkIsLocked(item) }"
-            class="bet-item"
-          >
+          <view v-for="(item, index) in orderStore.selectOrders" :key="index"
+            :class="{ 'is-locked': checkIsLocked(item) }" class="bet-item">
             <view v-if="checkIsLocked(item)" class="lock-overlay">
             <view v-if="checkIsLocked(item)" class="lock-overlay">
               <u-icon color="#fff" name="lock-fill" size="32"></u-icon>
               <u-icon color="#fff" name="lock-fill" size="32"></u-icon>
               <text class="lock-text">{{ t("盘口已失效或关闭") }}</text>
               <text class="lock-text">{{ t("盘口已失效或关闭") }}</text>
             </view>
             </view>
 
 
             <view v-if="item.errorMsg" class="fail-msg-box">
             <view v-if="item.errorMsg" class="fail-msg-box">
-              <u-icon
-                color="#fa3534"
-                name="info-circle-fill"
-                size="28"
-              ></u-icon>
+              <u-icon color="#fa3534" name="info-circle-fill" size="28"></u-icon>
               <text class="fail-text">{{ t(item.errorMsg) }}</text>
               <text class="fail-text">{{ t(item.errorMsg) }}</text>
             </view>
             </view>
 
 
             <view class="item-header">
             <view class="item-header">
-              <view
-                class="team-names"
-                style="display: flex; align-items: center"
-              >
+              <view class="team-names" style="display: flex; align-items: center">
                 <u-tag size="mini" type="success" style="margin-right: 4px">{{
                 <u-tag size="mini" type="success" style="margin-right: 4px">{{
                   t("主")
                   t("主")
-                }}</u-tag
-                >{{ locale === "zh" ? item.homeTeam : item.home_team_en }}
+                }}</u-tag>{{ locale === "zh" ? item.homeTeam : item.home_team_en }}
                 -
                 -
                 {{ locale === "zh" ? item.guestTeam : item.guest_team_en
                 {{ locale === "zh" ? item.guestTeam : item.guest_team_en
                 }}<u-tag size="mini" type="error" style="margin-left: 4px">{{
                 }}<u-tag size="mini" type="error" style="margin-left: 4px">{{
                   t("客")
                   t("客")
                 }}</u-tag>
                 }}</u-tag>
               </view>
               </view>
-              <view
-                class="close-btn"
-                v-if="checkIsLocked(item)"
-                @click.stop="orderStore.removeOrderItem(item.uniqueKey)"
-              >
+              <view class="close-btn" v-if="checkIsLocked(item)"
+                @click.stop="orderStore.removeOrderItem(item.uniqueKey)">
                 <u-icon color="#666" name="close" size="16"></u-icon>
                 <u-icon color="#666" name="close" size="16"></u-icon>
               </view>
               </view>
-              <view
-                v-else
-                style="margin-right: 8px"
-                @click.stop="orderStore.removeOrderItem(item.uniqueKey)"
-              >
+              <view v-else style="margin-right: 8px" @click.stop="orderStore.removeOrderItem(item.uniqueKey)">
                 <u-icon color="#666" name="close" size="16"></u-icon>
                 <u-icon color="#666" name="close" size="16"></u-icon>
               </view>
               </view>
             </view>
             </view>
@@ -293,11 +190,8 @@
                 <text class="type-name">
                 <text class="type-name">
                   {{ locale === "zh" ? item.betType : item.betTypeEn }}:
                   {{ locale === "zh" ? item.betType : item.betTypeEn }}:
                   {{ locale === "zh" ? item.betTypeName : item.betTypeNameEn }}
                   {{ locale === "zh" ? item.betTypeName : item.betTypeNameEn }}
-                  <text
-                    v-if="item.handicap_text"
-                    style="margin-left: 4px; color: #f8b932"
-                    >[{{ item.handicap_text }}]</text
-                  >
+                  <text v-if="item.handicap_text" style="margin-left: 4px; color: #f8b932">[{{ item.handicap_text
+                  }}]</text>
                 </text>
                 </text>
               </view>
               </view>
               <view class="odds-box">
               <view class="odds-box">
@@ -306,102 +200,76 @@
             </view>
             </view>
             <view class="league-info">
             <view class="league-info">
               <text>{{ locale === "zh" ? item.league : item.league_en }}</text>
               <text>{{ locale === "zh" ? item.league : item.league_en }}</text>
-              <text v-if="item.score && item.score !== '-'" class="live-score"
-                >{{ t("当前比分") }}: {{ item.score }}</text
-              >
+              <text v-if="item.score && item.score !== '-'" class="live-score">{{ t("当前比分") }}: {{ item.score }}</text>
             </view>
             </view>
 
 
-            <view
-              :class="{
-                'error-border':
-                  item.errorMsg ||
-                  (!checkIsLocked(item) &&
-                    item.stake !== '' &&
-                    item.stake !== undefined &&
-                    Number(item.stake) <= 0) ||
-                  (!checkIsLocked(item) &&
-                    Number(item.stake) > Number(userMoney)) ||
-                  (!checkIsLocked(item) &&
-                    item.mininum !== undefined &&
-                    item.stake !== '' &&
-                    item.stake !== undefined &&
-                    Number(item.stake) < Number(item.mininum)) ||
-                  (!checkIsLocked(item) &&
-                    item.maxinum !== undefined &&
-                    Number(item.stake) > Number(item.maxinum)),
-              }"
-              class="stake-input-box"
-            >
+            <view :class="{
+              'error-border':
+                item.errorMsg ||
+                (!checkIsLocked(item) &&
+                  item.stake !== '' &&
+                  item.stake !== undefined &&
+                  Number(item.stake) <= 0) ||
+                (!checkIsLocked(item) &&
+                  Number(item.stake) > Number(userMoney)) ||
+                (!checkIsLocked(item) &&
+                  item.mininum !== undefined &&
+                  item.stake !== '' &&
+                  item.stake !== undefined &&
+                  Number(item.stake) < Number(item.mininum)) ||
+                (!checkIsLocked(item) &&
+                  item.maxinum !== undefined &&
+                  Number(item.stake) > Number(item.maxinum)),
+            }" class="stake-input-box">
               <view class="stepper-btn" @click.stop="changeStake(item, -10)">
               <view class="stepper-btn" @click.stop="changeStake(item, -10)">
                 <u-icon name="minus" size="24"></u-icon>
                 <u-icon name="minus" size="24"></u-icon>
               </view>
               </view>
-              <input
-                v-model="item.stake"
-                :disabled="checkIsLocked(item)"
-                class="stake-input"
-                :placeholder="t('本金')"
-                type="number"
-                @input="(e) => onInputStake(e, item)"
-              />
+              <input v-model="item.stake" :disabled="checkIsLocked(item)" class="stake-input" :placeholder="t('本金')"
+                type="number" @input="(e) => onInputStake(e, item)" />
               <view class="stepper-btn" @click.stop="changeStake(item, 10)">
               <view class="stepper-btn" @click.stop="changeStake(item, 10)">
                 <u-icon name="plus" size="24"></u-icon>
                 <u-icon name="plus" size="24"></u-icon>
               </view>
               </view>
             </view>
             </view>
 
 
             <view class="item-footer">
             <view class="item-footer">
-              <view
-                style="font-size: 12px; color: #999"
-                v-if="item.mininum !== undefined && item.maxinum !== undefined"
-              >
+              <view style="font-size: 12px; color: #999"
+                v-if="item.mininum !== undefined && item.maxinum !== undefined">
                 <text>{{ t("单注限额") }}</text>
                 <text>{{ t("单注限额") }}</text>
                 <text>{{ item.mininum }} ~ {{ item.maxinum }}</text>
                 <text>{{ item.mininum }} ~ {{ item.maxinum }}</text>
               </view>
               </view>
 
 
-              <view
-                v-if="
-                  !checkIsLocked(item) &&
-                  item.stake !== '' &&
-                  item.stake !== undefined &&
-                  Number(item.stake) <= 0
-                "
-                class="err-msg"
-              >
+              <view v-if="
+                !checkIsLocked(item) &&
+                item.stake !== '' &&
+                item.stake !== undefined &&
+                Number(item.stake) <= 0
+              " class="err-msg">
                 {{ t("金额不能小于等于0") }}
                 {{ t("金额不能小于等于0") }}
               </view>
               </view>
-              <view
-                v-else-if="
-                  !checkIsLocked(item) &&
-                  item.mininum !== undefined &&
-                  item.stake !== '' &&
-                  item.stake !== undefined &&
-                  Number(item.stake) < Number(item.mininum)
-                "
-                class="err-msg"
-              >
+              <view v-else-if="
+                !checkIsLocked(item) &&
+                item.mininum !== undefined &&
+                item.stake !== '' &&
+                item.stake !== undefined &&
+                Number(item.stake) < Number(item.mininum)
+              " class="err-msg">
                 {{ t("单注最低限制为") }} {{ item.mininum }}
                 {{ t("单注最低限制为") }} {{ item.mininum }}
               </view>
               </view>
-              <view
-                v-else-if="
-                  !checkIsLocked(item) &&
-                  item.maxinum !== undefined &&
-                  Number(item.stake) > Number(item.maxinum)
-                "
-                class="err-msg"
-              >
+              <view v-else-if="
+                !checkIsLocked(item) &&
+                item.maxinum !== undefined &&
+                Number(item.stake) > Number(item.maxinum)
+              " class="err-msg">
                 {{ t("单注最高限制为") }} {{ item.maxinum }}
                 {{ t("单注最高限制为") }} {{ item.maxinum }}
               </view>
               </view>
-              <view
-                v-else-if="
-                  !checkIsLocked(item) && Number(item.stake) > Number(userMoney)
-                "
-                class="err-msg"
-              >
+              <view v-else-if="
+                !checkIsLocked(item) && Number(item.stake) > Number(userMoney)
+              " class="err-msg">
                 {{ t("投注额超过您的余额") }}
                 {{ t("投注额超过您的余额") }}
               </view>
               </view>
               <view v-else class="potential-win">
               <view v-else class="potential-win">
                 {{ t("潜在赢利") }}
                 {{ t("潜在赢利") }}
-                <text class="win-amount"
-                  >{{ (Number(item.stake) * Number(item.odds)).toFixed(2) }}
+                <text class="win-amount">{{ (Number(item.stake) * Number(item.odds)).toFixed(2) }}
                   {{ $currency }}
                   {{ $currency }}
                 </text>
                 </text>
               </view>
               </view>
@@ -409,33 +277,21 @@
           </view>
           </view>
         </view>
         </view>
 
 
-        <view
-          class="sheet-action-bar"
-          :class="[
-            $Route.path === '/pages/common/sportDetail/index' ? 'isDetail' : '',
-          ]"
-        >
+        <view class="sheet-action-bar" :class="[
+          $Route.path === '/pages/common/sportDetail/index' ? 'isDetail' : '',
+        ]">
           <view v-if="orderStore.selectedCount > 0" class="total-odds-row">
           <view v-if="orderStore.selectedCount > 0" class="total-odds-row">
             <text class="label">{{ t("总金额") }}</text>
             <text class="label">{{ t("总金额") }}</text>
             <text class="val">{{ validTotalAmount.toFixed(2) }}</text>
             <text class="val">{{ validTotalAmount.toFixed(2) }}</text>
           </view>
           </view>
 
 
           <view class="auto-accept-box" @click="toggleAutoAccept">
           <view class="auto-accept-box" @click="toggleAutoAccept">
-            <u-icon
-              :name="
-                isAutoAccept ? 'checkmark-circle-fill' : 'checkmark-circle'
-              "
-              :color="isAutoAccept ? '#ffbc00' : '#c0c4cc'"
-              size="36"
-            ></u-icon>
+            <u-icon :name="isAutoAccept ? 'checkmark-circle-fill' : 'checkmark-circle'
+              " :color="isAutoAccept ? '#ffbc00' : '#c0c4cc'" size="36"></u-icon>
             <text class="auto-accept-text">{{ t("自动接受更好的赔率") }}</text>
             <text class="auto-accept-text">{{ t("自动接受更好的赔率") }}</text>
           </view>
           </view>
 
 
-          <u-button
-            v-if="validTotalStake > userMoney"
-            type="primary"
-            @click="topUp"
-          >
+          <u-button v-if="validTotalStake > userMoney" type="primary" @click="topUp">
             {{ t("存款") }}
             {{ t("存款") }}
           </u-button>
           </u-button>
 
 
@@ -447,53 +303,27 @@
         <view style="height: 120px"></view>
         <view style="height: 120px"></view>
       </u-popup>
       </u-popup>
 
 
-      <u-modal
-        ref="safeModalRef"
-        v-model="showSafeModal"
-        :async-close="true"
-        :cancel-text="t('取消')"
-        :confirm-text="t('确定投注')"
-        :show-cancel-button="true"
-        :title="t('安全验证')"
-        confirm-color="#f8b932"
-        @confirm="confirmSubmitBet"
-      >
+      <u-modal ref="safeModalRef" v-model="showSafeModal" :async-close="true" :cancel-text="t('取消')"
+        :confirm-text="t('确定投注')" :show-cancel-button="true" :title="t('安全验证')" confirm-color="#f8b932"
+        @confirm="confirmSubmitBet">
         <view class="safe-modal-content">
         <view class="safe-modal-content">
           <text class="safe-tips">{{
           <text class="safe-tips">{{
             t("为保障您的资金安全,请输入资金密码")
             t("为保障您的资金安全,请输入资金密码")
           }}</text>
           }}</text>
-          <u-input
-            v-model="safeWord"
-            :border="true"
-            :clearable="true"
-            :placeholder="t('请输入资金密码')"
-            border-color="#e4e7ed"
-            type="password"
-          ></u-input>
+          <u-input v-model="safeWord" :border="true" :clearable="true" :placeholder="t('请输入资金密码')"
+            border-color="#e4e7ed" type="password"></u-input>
         </view>
         </view>
       </u-modal>
       </u-modal>
 
 
-      <u-modal
-        ref="retryModalRef"
-        v-model="showRetryModal"
-        :async-close="true"
-        :title="t('提示')"
-        :show-cancel-button="true"
-        :confirm-text="t('确定')"
-        :cancel-text="t('取消')"
-        confirm-color="#f8b932"
-        @confirm="confirmRetryBet"
-      >
+      <u-modal ref="retryModalRef" v-model="showRetryModal" :async-close="true" :title="t('提示')"
+        :show-cancel-button="true" :confirm-text="t('确定')" :cancel-text="t('取消')" confirm-color="#f8b932"
+        @confirm="confirmRetryBet">
         <view class="retry-modal-content">
         <view class="retry-modal-content">
           <text class="retry-tips">{{
           <text class="retry-tips">{{
             t("以下注单提交失败,是否重新提交?")
             t("以下注单提交失败,是否重新提交?")
           }}</text>
           }}</text>
           <scroll-view scroll-y class="retry-list">
           <scroll-view scroll-y class="retry-list">
-            <view
-              class="retry-item"
-              v-for="(err, idx) in retryFailures"
-              :key="idx"
-            >
+            <view class="retry-item" v-for="(err, idx) in retryFailures" :key="idx">
               <view v-if="err.is_submit !== 1" class="retry-lock-overlay">
               <view v-if="err.is_submit !== 1" class="retry-lock-overlay">
                 <text class="retry-lock-text">{{ t("不可重新提交") }}</text>
                 <text class="retry-lock-text">{{ t("不可重新提交") }}</text>
               </view>
               </view>
@@ -605,7 +435,7 @@ const retryFailures = ref([]);
 // 自动接受更好的赔率状态控制
 // 自动接受更好的赔率状态控制
 const isAutoAccept = ref(
 const isAutoAccept = ref(
   uni.getStorageSync("autoAcceptOdds") !== false &&
   uni.getStorageSync("autoAcceptOdds") !== false &&
-    uni.getStorageSync("autoAcceptOdds") !== "false"
+  uni.getStorageSync("autoAcceptOdds") !== "false"
 );
 );
 
 
 const toggleAutoAccept = () => {
 const toggleAutoAccept = () => {
@@ -734,6 +564,14 @@ const topUp = () => {
     });
     });
     return;
     return;
   }
   }
+  if (localStorage.getItem("youke_token")) {
+    // 试玩账户不可进入
+    uni.showToast({
+      title: t("试玩账户不可使用"),
+      icon: "none",
+    });
+    return;
+  }
   router.push({ name: "topUp" });
   router.push({ name: "topUp" });
 };
 };
 
 
@@ -922,6 +760,14 @@ const onClickLeft = () => {
 };
 };
 
 
 function goTopUp() {
 function goTopUp() {
+   if (localStorage.getItem("youke_token")) {
+    // 试玩账户不可进入
+    uni.showToast({
+      title: t("试玩账户不可使用"),
+      icon: "none",
+    });
+    return;
+  }
   router.push({ name: "topUp" });
   router.push({ name: "topUp" });
 }
 }
 
 
@@ -934,7 +780,7 @@ function getData() {
     .then((res) => {
     .then((res) => {
       userMoney.value = res.data.money;
       userMoney.value = res.data.money;
     })
     })
-    .catch((err) => {});
+    .catch((err) => { });
 }
 }
 
 
 function SocketHandler(data) {
 function SocketHandler(data) {
@@ -956,11 +802,10 @@ function SocketHandler(data) {
           : failData.sport_info.guest_team_en;
           : failData.sport_info.guest_team_en;
       const handicapStr = failData.handicap ? ` [${failData.handicap}]` : "";
       const handicapStr = failData.handicap ? ` [${failData.handicap}]` : "";
       // 使用 \n 进行换行排版
       // 使用 \n 进行换行排版
-      contentStr = `${home} vs ${guest}\n${
-        locale.value === "zh"
-          ? failData.value_text || failData.value
-          : failData.value
-      }${handicapStr} @${failData.odd}\n${t("原因")}: ${t(failData.msg)}`;
+      contentStr = `${home} vs ${guest}\n${locale.value === "zh"
+        ? failData.value_text || failData.value
+        : failData.value
+        }${handicapStr} @${failData.odd}\n${t("原因")}: ${t(failData.msg)}`;
     }
     }
 
 
     uni.showModal({
     uni.showModal({
@@ -974,8 +819,8 @@ function SocketHandler(data) {
 
 
     let hdp =
     let hdp =
       failData.handicap !== null &&
       failData.handicap !== null &&
-      failData.handicap !== undefined &&
-      failData.handicap !== ""
+        failData.handicap !== undefined &&
+        failData.handicap !== ""
         ? `_${failData.handicap}`
         ? `_${failData.handicap}`
         : "";
         : "";
     const uniqueKey = `${failData.data_id}_${failData.id}_${failData.value}${hdp}`;
     const uniqueKey = `${failData.data_id}_${failData.id}_${failData.value}${hdp}`;
@@ -1085,8 +930,8 @@ function cartSocketHandler(data) {
                     String(opt.value) === String(cartItem.optionValue);
                     String(opt.value) === String(cartItem.optionValue);
                   const isHandicapMatch =
                   const isHandicapMatch =
                     cartItem.handicap !== null &&
                     cartItem.handicap !== null &&
-                    cartItem.handicap !== undefined &&
-                    cartItem.handicap !== ""
+                      cartItem.handicap !== undefined &&
+                      cartItem.handicap !== ""
                       ? String(opt.handicap) === String(cartItem.handicap)
                       ? String(opt.handicap) === String(cartItem.handicap)
                       : true;
                       : true;
                   return isValueMatch && isHandicapMatch;
                   return isValueMatch && isHandicapMatch;
@@ -1196,6 +1041,7 @@ defineExpose({
   height: 100vh;
   height: 100vh;
   overflow-y: hidden;
   overflow-y: hidden;
 }
 }
+
 .global-page-container {
 .global-page-container {
   width: 100vw;
   width: 100vw;
   background-color: #f9f9f9;
   background-color: #f9f9f9;
@@ -1213,6 +1059,7 @@ defineExpose({
   display: flex;
   display: flex;
   align-items: center;
   align-items: center;
   overflow: hidden;
   overflow: hidden;
+
   svg {
   svg {
     width: 100%;
     width: 100%;
     height: 100%;
     height: 100%;
@@ -1242,6 +1089,7 @@ defineExpose({
   /* #endif */
   /* #endif */
   /* #ifdef APP-PLUS */
   /* #ifdef APP-PLUS */
   top: calc(var(--status-bar-height) + 44px);
   top: calc(var(--status-bar-height) + 44px);
+
   /* #endif */
   /* #endif */
   &-left {
   &-left {
     display: flex;
     display: flex;
@@ -1281,7 +1129,8 @@ defineExpose({
 }
 }
 
 
 .bet-list {
 .bet-list {
-  padding: 130px 10px 60px; /* increased to accommodate new fixed header */
+  padding: 130px 10px 60px;
+  /* increased to accommodate new fixed header */
 }
 }
 
 
 .popup-betting-sheet-header {
 .popup-betting-sheet-header {
@@ -1302,13 +1151,16 @@ defineExpose({
   padding: 0 16px;
   padding: 0 16px;
   box-sizing: border-box;
   box-sizing: border-box;
   box-shadow: 0 -10px 10px rgba(0, 0, 0, 0.05);
   box-shadow: 0 -10px 10px rgba(0, 0, 0, 0.05);
+
   &.border-bottom {
   &.border-bottom {
     border-bottom: 1px solid #eee;
     border-bottom: 1px solid #eee;
   }
   }
+
   &-left {
   &-left {
     display: flex;
     display: flex;
     align-items: center;
     align-items: center;
     gap: 8px;
     gap: 8px;
+
     .header-text {
     .header-text {
       font-size: 14px;
       font-size: 14px;
       color: #333;
       color: #333;
@@ -1316,6 +1168,7 @@ defineExpose({
       font-weight: bold;
       font-weight: bold;
     }
     }
   }
   }
+
   .sheet-badge {
   .sheet-badge {
     background-color: #ffbc00;
     background-color: #ffbc00;
     color: #000;
     color: #000;
@@ -1329,6 +1182,7 @@ defineExpose({
     padding: 0 4px;
     padding: 0 4px;
     font-weight: bold;
     font-weight: bold;
   }
   }
+
   &-right {
   &-right {
     .settings-btn {
     .settings-btn {
       display: flex;
       display: flex;
@@ -1346,9 +1200,11 @@ defineExpose({
   color: #999;
   color: #999;
   font-size: 14px;
   font-size: 14px;
 }
 }
+
 .isDetail {
 .isDetail {
   bottom: env(safe-area-inset-bottom) !important;
   bottom: env(safe-area-inset-bottom) !important;
 }
 }
+
 .sheet-action-bar {
 .sheet-action-bar {
   background-color: #faf9f9;
   background-color: #faf9f9;
   padding: 10px 16px;
   padding: 10px 16px;
@@ -1364,16 +1220,19 @@ defineExpose({
   bottom: 50px;
   bottom: 50px;
   // #endif
   // #endif
   width: 100%;
   width: 100%;
+
   .total-odds-row {
   .total-odds-row {
     display: flex;
     display: flex;
     justify-content: space-between;
     justify-content: space-between;
     margin-bottom: 10px;
     margin-bottom: 10px;
     padding: 0 4px;
     padding: 0 4px;
     font-size: 14px;
     font-size: 14px;
+
     .label {
     .label {
       color: #333;
       color: #333;
       font-weight: bold;
       font-weight: bold;
     }
     }
+
     .val {
     .val {
       color: #ffbc00;
       color: #ffbc00;
       font-weight: bold;
       font-weight: bold;
@@ -1387,6 +1246,7 @@ defineExpose({
   align-items: center;
   align-items: center;
   margin-bottom: 12px;
   margin-bottom: 12px;
   padding: 0 4px;
   padding: 0 4px;
+
   .auto-accept-text {
   .auto-accept-text {
     font-size: 13px;
     font-size: 13px;
     color: #666;
     color: #666;
@@ -1450,6 +1310,7 @@ defineExpose({
     flex-direction: column;
     flex-direction: column;
     justify-content: center;
     justify-content: center;
     align-items: center;
     align-items: center;
+
     .lock-text {
     .lock-text {
       color: #fff;
       color: #fff;
       font-size: 13px;
       font-size: 13px;
@@ -1468,6 +1329,7 @@ defineExpose({
     margin-bottom: 12px;
     margin-bottom: 12px;
     gap: 8px;
     gap: 8px;
     border: 1px dashed #f56c6c;
     border: 1px dashed #f56c6c;
+
     .fail-text {
     .fail-text {
       color: #fa3534;
       color: #fa3534;
       font-size: 13px;
       font-size: 13px;
@@ -1480,11 +1342,13 @@ defineExpose({
     justify-content: space-between;
     justify-content: space-between;
     align-items: center;
     align-items: center;
     margin-bottom: 8px;
     margin-bottom: 8px;
+
     .team-names {
     .team-names {
       font-weight: 600;
       font-weight: 600;
       font-size: 14px;
       font-size: 14px;
       color: #333;
       color: #333;
     }
     }
+
     .close-btn {
     .close-btn {
       position: relative;
       position: relative;
       z-index: 12;
       z-index: 12;
@@ -1504,9 +1368,11 @@ defineExpose({
     justify-content: space-between;
     justify-content: space-between;
     margin-bottom: 6px;
     margin-bottom: 6px;
     font-size: 13px;
     font-size: 13px;
+
     .type-name {
     .type-name {
       color: #666;
       color: #666;
     }
     }
+
     .odds-val {
     .odds-val {
       font-weight: bold;
       font-weight: bold;
       color: #ffbc00;
       color: #ffbc00;
@@ -1530,10 +1396,12 @@ defineExpose({
     height: 40px;
     height: 40px;
     background-color: #f8fafc;
     background-color: #f8fafc;
     overflow: hidden;
     overflow: hidden;
+
     &.error-border {
     &.error-border {
       border-color: #fa3534;
       border-color: #fa3534;
       background-color: #fef0f0;
       background-color: #fef0f0;
     }
     }
+
     .stepper-btn {
     .stepper-btn {
       width: 44px;
       width: 44px;
       height: 100%;
       height: 100%;
@@ -1543,6 +1411,7 @@ defineExpose({
       background-color: #f1f5f9;
       background-color: #f1f5f9;
       transition: background-color 0.2s;
       transition: background-color 0.2s;
     }
     }
+
     .stake-input {
     .stake-input {
       flex: 1;
       flex: 1;
       height: 100%;
       height: 100%;
@@ -1562,11 +1431,14 @@ defineExpose({
     justify-content: space-between;
     justify-content: space-between;
     align-items: center;
     align-items: center;
     font-size: 12px;
     font-size: 12px;
+
     .err-msg {
     .err-msg {
       color: #fa3534;
       color: #fa3534;
     }
     }
+
     .potential-win {
     .potential-win {
       color: #606266;
       color: #606266;
+
       .win-amount {
       .win-amount {
         color: #19be6b;
         color: #19be6b;
         font-weight: bold;
         font-weight: bold;
@@ -1582,6 +1454,7 @@ defineExpose({
   padding: 20px 14px;
   padding: 20px 14px;
   display: flex;
   display: flex;
   flex-direction: column;
   flex-direction: column;
+
   .safe-tips {
   .safe-tips {
     font-size: 14px;
     font-size: 14px;
     color: #666;
     color: #666;
@@ -1596,6 +1469,7 @@ defineExpose({
   display: flex;
   display: flex;
   flex-direction: column;
   flex-direction: column;
 }
 }
+
 .retry-tips {
 .retry-tips {
   font-size: 14px;
   font-size: 14px;
   color: #fa3534;
   color: #fa3534;
@@ -1603,9 +1477,11 @@ defineExpose({
   text-align: center;
   text-align: center;
   font-weight: bold;
   font-weight: bold;
 }
 }
+
 .retry-list {
 .retry-list {
   max-height: 200px;
   max-height: 200px;
 }
 }
+
 .retry-item {
 .retry-item {
   background: #f8fafc;
   background: #f8fafc;
   padding: 10px;
   padding: 10px;
@@ -1617,6 +1493,7 @@ defineExpose({
   position: relative;
   position: relative;
   overflow: hidden;
   overflow: hidden;
 }
 }
+
 .retry-lock-overlay {
 .retry-lock-overlay {
   position: absolute;
   position: absolute;
   top: 0;
   top: 0;
@@ -1629,18 +1506,21 @@ defineExpose({
   justify-content: center;
   justify-content: center;
   align-items: center;
   align-items: center;
 }
 }
+
 .retry-lock-text {
 .retry-lock-text {
   color: #ffffff;
   color: #ffffff;
   font-size: 13px;
   font-size: 13px;
   font-weight: bold;
   font-weight: bold;
   letter-spacing: 1px;
   letter-spacing: 1px;
 }
 }
+
 .retry-item .err-val {
 .retry-item .err-val {
   font-size: 14px;
   font-size: 14px;
   font-weight: bold;
   font-weight: bold;
   color: #333;
   color: #333;
   margin-bottom: 4px;
   margin-bottom: 4px;
 }
 }
+
 .retry-item .err-msg {
 .retry-item .err-msg {
   font-size: 12px;
   font-size: 12px;
   color: #fa3534;
   color: #fa3534;
@@ -1649,15 +1529,19 @@ defineExpose({
 :deep(.uni-scroll-view-content) {
 :deep(.uni-scroll-view-content) {
   position: relative;
   position: relative;
 }
 }
+
 :deep(.u-drawer-bottom) {
 :deep(.u-drawer-bottom) {
   background-color: #f9f9f9;
   background-color: #f9f9f9;
 }
 }
+
 .sportDetail-cart-bar {
 .sportDetail-cart-bar {
   bottom: 0;
   bottom: 0;
   padding-bottom: env(safe-area-inset-bottom);
   padding-bottom: env(safe-area-inset-bottom);
 }
 }
+
 .avatar-wrapper {
 .avatar-wrapper {
   position: relative;
   position: relative;
+
   .avatar-wrapper-lv {
   .avatar-wrapper-lv {
     width: 2.2rem;
     width: 2.2rem;
     aspect-ratio: 82 / 32;
     aspect-ratio: 82 / 32;

+ 8 - 0
src/pages/Tabbar/Entertainment/view/ExtremeSpeed28/index.vue

@@ -460,6 +460,14 @@ const goTopUp = () => {
   if (!uni.getStorageSync('token')) {
   if (!uni.getStorageSync('token')) {
     uni.showToast({ title: t('请先登录'), icon: 'none' });
     uni.showToast({ title: t('请先登录'), icon: 'none' });
     return;
     return;
+  }
+   if (localStorage.getItem("youke_token")) {
+    // 试玩账户不可进入
+    uni.showToast({
+      title: t("试玩账户不可使用"),
+      icon: "none",
+    });
+    return;
   }
   }
   router.push({ name: 'topUp' });
   router.push({ name: 'topUp' });
 };
 };

+ 8 - 0
src/pages/Tabbar/Entertainment/view/PC28/index.vue

@@ -461,6 +461,14 @@ const goTopUp = () => {
       url: '/pages/login/index?redirect=/pages/Tabbar/Entertainment/view/PC28/index'
       url: '/pages/login/index?redirect=/pages/Tabbar/Entertainment/view/PC28/index'
     });
     });
     return;
     return;
+  }
+   if (localStorage.getItem("youke_token")) {
+    // 试玩账户不可进入
+    uni.showToast({
+      title: t("试玩账户不可使用"),
+      icon: "none",
+    });
+    return;
   }
   }
   router.push({ name: 'topUp' });
   router.push({ name: 'topUp' });
 };
 };

+ 8 - 0
src/pages/Tabbar/Home/index2.vue

@@ -176,6 +176,14 @@ function handleSwiper(item) {
 
 
 // 快捷操作栏点击事件
 // 快捷操作栏点击事件
 const goToTopUp = () => {
 const goToTopUp = () => {
+   if (localStorage.getItem("youke_token")) {
+    // 试玩账户不可进入
+    uni.showToast({
+      title: t("试玩账户不可使用"),
+      icon: "none",
+    });
+    return;
+  }
   uni.navigateTo({
   uni.navigateTo({
     url: '/pages/WorkModule/my/topUp/index'
     url: '/pages/WorkModule/my/topUp/index'
   });
   });

+ 123 - 188
src/pages/Tabbar/My/index.vue

@@ -7,21 +7,11 @@
         <view class="user-card">
         <view class="user-card">
           <view class="avatar-section">
           <view class="avatar-section">
             <view class="avatar-wrapper">
             <view class="avatar-wrapper">
-              <view
-                class="avatar-wrapper-lv"
-                v-if="userInfo.level && userInfo.level != 0"
-              >
-                <image
-                  :src="userInfo.level.img"
-                  style="width: 100%; height: 100%"
-                />
+              <view class="avatar-wrapper-lv" v-if="userInfo.level && userInfo.level != 0">
+                <image :src="userInfo.level.img" style="width: 100%; height: 100%" />
               </view>
               </view>
-              <u-avatar
-                :src="userInfo.avatar || 'https://img.yzcdn.cn/vant/cat.jpeg'"
-                size="120"
-                shape="circle"
-                customStyle="border: 3px solid rgba(248, 185, 50, 0.2)"
-              ></u-avatar>
+              <u-avatar :src="userInfo.avatar" size="120" shape="circle"
+                customStyle="border: 3px solid rgba(248, 185, 50, 0.2)"></u-avatar>
               <view class="upload-btn" @click="showUpload = true">
               <view class="upload-btn" @click="showUpload = true">
                 <u-icon name="camera-fill" color="#fff" size="20"></u-icon>
                 <u-icon name="camera-fill" color="#fff" size="20"></u-icon>
               </view>
               </view>
@@ -30,12 +20,7 @@
             <view class="user-info">
             <view class="user-info">
               <text class="username">
               <text class="username">
                 {{ userInfo.first_name || $t("未设置用户名") }}
                 {{ userInfo.first_name || $t("未设置用户名") }}
-                <u-icon
-                  name="edit-pen"
-                  color="#999"
-                  size="32"
-                  @click="router.push({ name: 'userInfo' })"
-                ></u-icon>
+                <u-icon name="edit-pen" color="#999" size="32" @click="router.push({ name: 'userInfo' })"></u-icon>
               </text>
               </text>
 
 
               <view class="invite-code-container">
               <view class="invite-code-container">
@@ -43,25 +28,16 @@
                   {{ $t("邀请码") }}: {{ userInfo.user_code || "--" }}
                   {{ $t("邀请码") }}: {{ userInfo.user_code || "--" }}
                 </text>
                 </text>
 
 
-                <view
-                  v-if="userInfo.user_id"
-                  class="copy-btn"
-                  @click="handleCopy"
-                >
+                <view v-if="userInfo.user_id" class="copy-btn" @click="handleCopy">
                   <u-icon name="file-text" size="30"></u-icon>
                   <u-icon name="file-text" size="30"></u-icon>
                 </view>
                 </view>
               </view>
               </view>
 
 
-              <text class="user-id" style="font-size: 12px"
-                >ID: {{ userInfo.user_id || "--" }}</text
-              >
+              <text class="user-id" style="font-size: 12px">ID: {{ userInfo.user_id || "--" }}</text>
             </view>
             </view>
           </view>
           </view>
 
 
-          <view
-            class="level-progress-section"
-            v-if="userInfo.level && userInfo.level.level != 0"
-          >
+          <view class="level-progress-section" v-if="userInfo.level && userInfo.level.level != 0">
             <view class="level-info-text">
             <view class="level-info-text">
               <text class="current-level-name">{{
               <text class="current-level-name">{{
                 userInfo.level.level_name
                 userInfo.level.level_name
@@ -73,7 +49,7 @@
                   Math.max(
                   Math.max(
                     0,
                     0,
                     Number(userInfo.next_level.recharge) -
                     Number(userInfo.next_level.recharge) -
-                      Number(userInfo.total_recharge || 0)
+                    Number(userInfo.total_recharge || 0)
                   ).toFixed(2)
                   ).toFixed(2)
                 }}</text>
                 }}</text>
                 {{ $t("成长值") }}
                 {{ $t("成长值") }}
@@ -84,29 +60,22 @@
             </view>
             </view>
             <view class="progress-bar-container">
             <view class="progress-bar-container">
               <view class="progress-track">
               <view class="progress-track">
-                <view
-                  class="progress-fill"
-                  :style="{
-                    width: userInfo.next_level
-                      ? Math.min(
-                          (Number(userInfo.total_recharge || 0) /
-                            Number(userInfo.next_level.recharge)) *
-                            100,
-                          100
-                        ) + '%'
-                      : '100%',
-                  }"
-                ></view>
+                <view class="progress-fill" :style="{
+                  width: userInfo.next_level
+                    ? Math.min(
+                      (Number(userInfo.total_recharge || 0) /
+                        Number(userInfo.next_level.recharge)) *
+                      100,
+                      100
+                    ) + '%'
+                    : '100%',
+                }"></view>
               </view>
               </view>
               <view class="progress-value">
               <view class="progress-value">
-                <text v-if="userInfo.next_level"
-                  >{{ Number(userInfo.total_recharge || 0).toFixed(2) }} /
-                  {{ Number(userInfo.next_level.recharge).toFixed(2) }}</text
-                >
-                <text v-else
-                  >{{ Number(userInfo.total_recharge || 0).toFixed(2) }} /
-                  MAX</text
-                >
+                <text v-if="userInfo.next_level">{{ Number(userInfo.total_recharge || 0).toFixed(2) }} /
+                  {{ Number(userInfo.next_level.recharge).toFixed(2) }}</text>
+                <text v-else>{{ Number(userInfo.total_recharge || 0).toFixed(2) }} /
+                  MAX</text>
               </view>
               </view>
             </view>
             </view>
           </view>
           </view>
@@ -114,129 +83,61 @@
           <view class="asset-section">
           <view class="asset-section">
             <view class="asset-item">
             <view class="asset-item">
               <text class="asset-label">{{ $t("账户总余额") }}</text>
               <text class="asset-label">{{ $t("账户总余额") }}</text>
-              <view class="asset-value"
-                >¥{{ formatMoney(userInfo.money) || 0 }}</view
-              >
+              <view class="asset-value">¥{{ formatMoney(userInfo.money) || 0 }}</view>
             </view>
             </view>
             <view class="asset-item">
             <view class="asset-item">
               <view class="asset-label">
               <view class="asset-label">
                 <view class="asset-label-t">{{ $t("平台金额") }}</view>
                 <view class="asset-label-t">{{ $t("平台金额") }}</view>
-                <button
-                  @click="goPage('platform')"
-                  style="background: transparent"
-                >
-                  <u-icon
-                    name="question-circle-fill"
-                    color="#999"
-                    size="30"
-                  ></u-icon>
+                <button @click="goPage('platform')" style="background: transparent">
+                  <u-icon name="question-circle-fill" color="#999" size="30"></u-icon>
                 </button>
                 </button>
               </view>
               </view>
-              <view class="asset-value muted"
-                >¥{{ formatMoney(sfMoney) || 0 }}</view
-              >
+              <view class="asset-value muted">¥{{ formatMoney(sfMoney) || 0 }}</view>
             </view>
             </view>
             <view class="asset-item">
             <view class="asset-item">
               <text class="asset-label">{{ $t("冻结金额") }}</text>
               <text class="asset-label">{{ $t("冻结金额") }}</text>
-              <view class="asset-value muted"
-                >¥{{ formatMoney(userInfo.frozen_money) || 0 }}</view
-              >
+              <view class="asset-value muted">¥{{ formatMoney(userInfo.frozen_money) || 0 }}</view>
             </view>
             </view>
           </view>
           </view>
         </view>
         </view>
 
 
         <view class="quick-actions">
         <view class="quick-actions">
-          <u-button
-            type="primary"
-            icon="plus-circle"
+          <u-button type="primary" icon="plus-circle"
             customStyle="flex: 1; height: 46px; border-radius: 12px; background: #f8b932; border: none; font-weight: bold;"
             customStyle="flex: 1; height: 46px; border-radius: 12px; background: #f8b932; border: none; font-weight: bold;"
-            @click="goPage('topUp')"
-            >{{ $t("充值") }}</u-button
-          >
-          <u-button
-            type="primary"
-            icon="red-packet"
+            @click="goPage('topUp')">{{ $t("充值") }}</u-button>
+          <u-button type="primary" icon="red-packet"
             customStyle="flex: 1; height: 46px; border-radius: 12px; background: #f8b932; border: none; font-weight: bold;"
             customStyle="flex: 1; height: 46px; border-radius: 12px; background: #f8b932; border: none; font-weight: bold;"
-            @click="goPage('withdraw')"
-            >{{ $t("提现") }}</u-button
-          >
-          <u-button
-            type="primary"
-            icon="red-packet"
+            @click="goPage('withdraw')">{{ $t("提现") }}</u-button>
+          <u-button type="primary" icon="red-packet"
             customStyle="flex: 1; height: 46px; border-radius: 12px; background: #f8b932; border: none; font-weight: bold;"
             customStyle="flex: 1; height: 46px; border-radius: 12px; background: #f8b932; border: none; font-weight: bold;"
-            @click="getBack('withdraw')"
-            >{{ $t("一键回收") }}</u-button
-          >
+            @click="getBack('withdraw')">{{ $t("一键回收") }}</u-button>
         </view>
         </view>
 
 
         <view class="function-list">
         <view class="function-list">
           <u-cell-group :border="false">
           <u-cell-group :border="false">
-            <u-cell-item
-              :title="$t('余额宝')"
-              isLink
-              icon="rmb-circle"
-              customStyle="padding: 12px 20px"
-              @click="goPage('Yuebao')"
-            ></u-cell-item>
-            <u-cell-item
-              :title="$t('钱包管理')"
-              isLink
-              icon="bag"
-              customStyle="padding: 12px 20px"
-              @click="goPage('WalletManagement')"
-            ></u-cell-item>
-            <u-cell-item
-              :title="$t('优惠活动')"
-              isLink
-              icon="gift"
-              customStyle="padding: 12px 20px"
-              @click="goPage('promotion')"
-            ></u-cell-item>
-            <u-cell-item
-              :title="$t('资金记录')"
-              isLink
-              icon="order"
-              customStyle="padding: 12px 20px"
-              @click="goPage('fundRecord')"
-            ></u-cell-item>
-            <u-cell-item
-              :title="$t('充值记录')"
-              isLink
-              icon="coupon"
-              customStyle="padding: 12px 20px"
-              @click="goPage('rechargeRecord')"
-            ></u-cell-item>
-            <u-cell-item
-              :title="$t('提现记录')"
-              isLink
-              icon="tags"
-              customStyle="padding: 12px 20px"
-              @click="goPage('withdrawalHistory')"
-            ></u-cell-item>
-            <u-cell-item
-              :title="$t('投注历史')"
-              isLink
-              icon="clock"
-              customStyle="padding: 12px 20px"
-              @click="goPage('AllHistory')"
-            ></u-cell-item>
-            <u-cell-item
-              :title="$t('账户安全')"
-              isLink
-              icon="integral"
-              customStyle="padding: 12px 20px"
-              @click="goPage('safety')"
-            ></u-cell-item>
+            <u-cell-item :title="$t('余额宝')" isLink icon="rmb-circle" customStyle="padding: 12px 20px"
+              @click="goPage('Yuebao')"></u-cell-item>
+            <u-cell-item :title="$t('钱包管理')" isLink icon="bag" customStyle="padding: 12px 20px"
+              @click="goPage('WalletManagement')"></u-cell-item>
+            <u-cell-item :title="$t('优惠活动')" isLink icon="gift" customStyle="padding: 12px 20px"
+              @click="goPage('promotion')"></u-cell-item>
+            <u-cell-item :title="$t('资金记录')" isLink icon="order" customStyle="padding: 12px 20px"
+              @click="goPage('fundRecord')"></u-cell-item>
+            <u-cell-item :title="$t('充值记录')" isLink icon="coupon" customStyle="padding: 12px 20px"
+              @click="goPage('rechargeRecord')"></u-cell-item>
+            <u-cell-item :title="$t('提现记录')" isLink icon="tags" customStyle="padding: 12px 20px"
+              @click="goPage('withdrawalHistory')"></u-cell-item>
+            <u-cell-item :title="$t('投注历史')" isLink icon="clock" customStyle="padding: 12px 20px"
+              @click="goPage('AllHistory')"></u-cell-item>
+            <u-cell-item :title="$t('账户安全')" isLink icon="integral" customStyle="padding: 12px 20px"
+              @click="goPage('safety')"></u-cell-item>
           </u-cell-group>
           </u-cell-group>
         </view>
         </view>
 
 
         <view class="logout-section">
         <view class="logout-section">
-          <u-button
-            plain
+          <u-button plain
             customStyle="height: 46px; border-radius: 12px; color: #ff6b6b; border-color: #ff6b6b; font-weight: 500;"
             customStyle="height: 46px; border-radius: 12px; color: #ff6b6b; border-color: #ff6b6b; font-weight: 500;"
-            @click="goLogout"
-            >{{ $t("退出登录") }}</u-button
-          >
+            @click="goLogout">{{ $t("退出登录") }}</u-button>
         </view>
         </view>
 
 
         <view class="my-bottom"></view>
         <view class="my-bottom"></view>
@@ -245,30 +146,19 @@
         <!-- #endif -->
         <!-- #endif -->
       </view>
       </view>
 
 
-      <u-popup
-        v-model="showUpload"
-        mode="bottom"
-        border-radius="24"
-        :safe-area-inset-bottom="true"
-        @close="showUpload = false"
-      >
+      <u-popup v-model="showUpload" mode="bottom" border-radius="24" :safe-area-inset-bottom="true"
+        @close="showUpload = false">
         <view class="popup-inner">
         <view class="popup-inner">
           <view class="popup-title">{{ $t("更换头像") }}</view>
           <view class="popup-title">{{ $t("更换头像") }}</view>
           <view class="uploader-box">
           <view class="uploader-box">
             <CUploadImage @change="changeImg" :maxCount="1" />
             <CUploadImage @change="changeImg" :maxCount="1" />
           </view>
           </view>
           <view class="popup-btns">
           <view class="popup-btns">
-            <u-button
-              customStyle="flex: 1; height: 48px; border-radius: 12px; margin-right: 12px"
-              @click="showUpload = false"
-              >{{ $t("取消") }}</u-button
-            >
-            <u-button
-              type="primary"
+            <u-button customStyle="flex: 1; height: 48px; border-radius: 12px; margin-right: 12px"
+              @click="showUpload = false">{{ $t("取消") }}</u-button>
+            <u-button type="primary"
               customStyle="flex: 1; height: 48px; border-radius: 12px; background: #f8b932; border: none;"
               customStyle="flex: 1; height: 48px; border-radius: 12px; background: #f8b932; border: none;"
-              @click="saveAvatar"
-              >{{ $t("保存") }}</u-button
-            >
+              @click="saveAvatar">{{ $t("保存") }}</u-button>
           </view>
           </view>
         </view>
         </view>
       </u-popup>
       </u-popup>
@@ -317,11 +207,19 @@ function getData() {
 
 
 //回收三方游戏的余额
 //回收三方游戏的余额
 const getBack = () => {
 const getBack = () => {
-  recycle().then((res) => {
-    if (res.code == 1) {
-      location.reload();
-    }
-  });
+  if (localStorage.getItem("youke_token")) {
+    // 试玩账户不可进入
+    uni.showToast({
+      title: t("试玩账户不可使用"),
+      icon: "none",
+    });
+  } else {
+    recycle().then((res) => {
+      if (res.code == 1) {
+        location.reload();
+      }
+    });
+  }
 };
 };
 
 
 // 获取三方余额明细
 // 获取三方余额明细
@@ -353,7 +251,15 @@ function changeImg(e) {
 
 
 // 跳转指定页面
 // 跳转指定页面
 function goPage(name) {
 function goPage(name) {
-  router.push({ name });
+  if (localStorage.getItem("youke_token") && (name == 'topUp' || name == 'withdraw')) {
+    // 试玩账户不可进入
+    uni.showToast({
+      title: t("试玩账户不可使用"),
+      icon: "none",
+    });
+  } else {
+    router.push({ name });
+  }
 }
 }
 
 
 // 退出登录
 // 退出登录
@@ -433,7 +339,8 @@ onShow(() => {
     left: 0;
     left: 0;
     right: 0;
     right: 0;
     top: 0;
     top: 0;
-    height: 320rpx; /* 缩小顶部背景高度 */
+    height: 320rpx;
+    /* 缩小顶部背景高度 */
     background: linear-gradient(0deg, #f8b932 0%, #212121 80%, #212121 100%);
     background: linear-gradient(0deg, #f8b932 0%, #212121 80%, #212121 100%);
     border-radius: 0 0 60rpx 60rpx;
     border-radius: 0 0 60rpx 60rpx;
     z-index: 1;
     z-index: 1;
@@ -442,7 +349,8 @@ onShow(() => {
   .main-content {
   .main-content {
     position: relative;
     position: relative;
     z-index: 2;
     z-index: 2;
-    padding: 24rpx 32rpx; /* 减小顶部 padding */
+    padding: 24rpx 32rpx;
+    /* 减小顶部 padding */
     overflow-y: auto;
     overflow-y: auto;
     height: calc(100vh - 90px);
     height: calc(100vh - 90px);
   }
   }
@@ -450,18 +358,22 @@ onShow(() => {
   .user-card {
   .user-card {
     background: #fff;
     background: #fff;
     border-radius: 32rpx;
     border-radius: 32rpx;
-    padding: 32rpx 32rpx; /* 减小内部上下边距 */
+    padding: 32rpx 32rpx;
+    /* 减小内部上下边距 */
     box-shadow: 0 8rpx 30rpx rgba(0, 0, 0, 0.05);
     box-shadow: 0 8rpx 30rpx rgba(0, 0, 0, 0.05);
-    margin-bottom: 24rpx; /* 减小模块间距 */
+    margin-bottom: 24rpx;
+    /* 减小模块间距 */
 
 
     .avatar-section {
     .avatar-section {
       display: flex;
       display: flex;
       align-items: center;
       align-items: center;
-      margin-bottom: 24rpx; /* 修改:稍微减小头像区与进度条区距离 */
+      margin-bottom: 24rpx;
+      /* 修改:稍微减小头像区与进度条区距离 */
 
 
       .avatar-wrapper {
       .avatar-wrapper {
         position: relative;
         position: relative;
         margin-right: 28rpx;
         margin-right: 28rpx;
+
         .avatar-wrapper-lv {
         .avatar-wrapper-lv {
           width: 3rem;
           width: 3rem;
           aspect-ratio: 82 / 32;
           aspect-ratio: 82 / 32;
@@ -476,7 +388,8 @@ onShow(() => {
           bottom: -4rpx;
           bottom: -4rpx;
           right: -4rpx;
           right: -4rpx;
           border-radius: 50%;
           border-radius: 50%;
-          padding: 6px; /* 缩小按钮 */
+          padding: 6px;
+          /* 缩小按钮 */
           background: #f8b932;
           background: #f8b932;
           display: flex;
           display: flex;
           align-items: center;
           align-items: center;
@@ -489,12 +402,15 @@ onShow(() => {
       .user-info {
       .user-info {
         display: flex;
         display: flex;
         flex-direction: column;
         flex-direction: column;
+
         .username {
         .username {
-          font-size: 36rpx; /* 略微缩小字体 */
+          font-size: 36rpx;
+          /* 略微缩小字体 */
           font-weight: 600;
           font-weight: 600;
           color: #333;
           color: #333;
           margin-bottom: 4rpx;
           margin-bottom: 4rpx;
         }
         }
+
         .user-id {
         .user-id {
           font-size: 26rpx;
           font-size: 26rpx;
           color: #999;
           color: #999;
@@ -567,33 +483,40 @@ onShow(() => {
     .asset-section {
     .asset-section {
       display: flex;
       display: flex;
       justify-content: space-between;
       justify-content: space-between;
-      padding-top: 30rpx; /* 减小分割线上方内边距 */
+      padding-top: 30rpx;
+      /* 减小分割线上方内边距 */
       border-top: 2rpx solid #f8f8f8;
       border-top: 2rpx solid #f8f8f8;
+
       .asset-item {
       .asset-item {
         width: 33.33%;
         width: 33.33%;
         display: flex;
         display: flex;
         flex-direction: column;
         flex-direction: column;
         align-items: center;
         align-items: center;
         flex: 1;
         flex: 1;
+
         .asset-label {
         .asset-label {
           display: flex;
           display: flex;
           align-items: center;
           align-items: center;
           font-size: 26rpx;
           font-size: 26rpx;
           color: #666;
           color: #666;
           margin-bottom: 8rpx;
           margin-bottom: 8rpx;
+
           .asset-label-t {
           .asset-label-t {
             padding-right: 4px;
             padding-right: 4px;
           }
           }
         }
         }
+
         .asset-value {
         .asset-value {
           width: 100%;
           width: 100%;
-          font-size: 40rpx; /* 调整字体 */
+          font-size: 40rpx;
+          /* 调整字体 */
           font-weight: 600;
           font-weight: 600;
           color: #333;
           color: #333;
           text-align: center;
           text-align: center;
           overflow: hidden;
           overflow: hidden;
           /* 允许长单词/长数字自动拆分换行 */
           /* 允许长单词/长数字自动拆分换行 */
           word-break: break-all;
           word-break: break-all;
+
           &.muted {
           &.muted {
             font-size: 32rpx;
             font-size: 32rpx;
             color: #999;
             color: #999;
@@ -607,22 +530,28 @@ onShow(() => {
       display: flex;
       display: flex;
       flex-wrap: wrap;
       flex-wrap: wrap;
       gap: 10px;
       gap: 10px;
-      padding-top: 30rpx; /* 减小分割线上方内边距 */
+      padding-top: 30rpx;
+      /* 减小分割线上方内边距 */
       border-top: 2rpx solid #f8f8f8;
       border-top: 2rpx solid #f8f8f8;
+
       .sf-item {
       .sf-item {
         display: flex;
         display: flex;
         flex-direction: column;
         flex-direction: column;
         flex: 1;
         flex: 1;
         text-align: center;
         text-align: center;
+
         .sf-label {
         .sf-label {
           font-size: 26rpx;
           font-size: 26rpx;
           color: #666;
           color: #666;
           margin-bottom: 8rpx;
           margin-bottom: 8rpx;
         }
         }
+
         .sf-value {
         .sf-value {
-          font-size: 40rpx; /* 调整字体 */
+          font-size: 40rpx;
+          /* 调整字体 */
           font-weight: 600;
           font-weight: 600;
           color: #333;
           color: #333;
+
           &.muted {
           &.muted {
             font-size: 32rpx;
             font-size: 32rpx;
             color: #999;
             color: #999;
@@ -636,7 +565,8 @@ onShow(() => {
   .quick-actions {
   .quick-actions {
     display: flex;
     display: flex;
     gap: 20rpx;
     gap: 20rpx;
-    margin-bottom: 24rpx; /* 减小模块间距 */
+    margin-bottom: 24rpx;
+    /* 减小模块间距 */
   }
   }
 
 
   .function-list {
   .function-list {
@@ -644,17 +574,20 @@ onShow(() => {
     border-radius: 32rpx;
     border-radius: 32rpx;
     overflow: hidden;
     overflow: hidden;
     box-shadow: 0 8rpx 30rpx rgba(0, 0, 0, 0.05);
     box-shadow: 0 8rpx 30rpx rgba(0, 0, 0, 0.05);
-    margin-bottom: 24rpx; /* 减小模块间距 */
+    margin-bottom: 24rpx;
+    /* 减小模块间距 */
   }
   }
 
 
   .logout-section {
   .logout-section {
-    padding-bottom: 40rpx; /* 减小底部留白 */
+    padding-bottom: 40rpx;
+    /* 减小底部留白 */
   }
   }
 }
 }
 
 
 .popup-inner {
 .popup-inner {
   padding: 32rpx;
   padding: 32rpx;
   background-color: #fff;
   background-color: #fff;
+
   .popup-title {
   .popup-title {
     font-size: 32rpx;
     font-size: 32rpx;
     font-weight: 600;
     font-weight: 600;
@@ -662,11 +595,13 @@ onShow(() => {
     text-align: center;
     text-align: center;
     margin-bottom: 40rpx;
     margin-bottom: 40rpx;
   }
   }
+
   .uploader-box {
   .uploader-box {
     display: flex;
     display: flex;
     justify-content: center;
     justify-content: center;
     margin-bottom: 40rpx;
     margin-bottom: 40rpx;
   }
   }
+
   .popup-btns {
   .popup-btns {
     display: flex;
     display: flex;
     padding-bottom: env(safe-area-inset-bottom);
     padding-bottom: env(safe-area-inset-bottom);

+ 525 - 305
src/pages/WorkModule/my/topUp/index copy.vue

@@ -7,135 +7,147 @@
     </template>
     </template>
 
 
     <view class="page-body">
     <view class="page-body">
-      <scroll-view scroll-y class="main-scroll">
-        <view class="top-up-page-container">
-          <view class="recharge-container">
-            <view class="qr-code-section">
-              <view class="qr-code-box">
-                <view class="qr-code-bg">
-                  <u-image
-                    v-if="qrCodeUrl"
-                    :src="qrCodeUrl"
-                    width="180rpx"
-                    height="180rpx"
-                    mode="aspectFit"
-                    class="qr-code-img"
-                    ref="qrCodeImage"
-                  ></u-image>
-                  <view v-else class="empty-qr-code">
-                    <u-icon name="photo" size="48rpx" color="#9ca3af"></u-icon>
-                    <text class="empty-text">{{ $t('暂无二维码') }}</text>
-                  </view>
-                </view>
+      <scroll-view scroll-y class="main-scroll" style="height: 100%;">
+        
+        <template v-if="!payResult">
+          <view class="section">
+            <view class="section-title">{{ $t('选择支付方式') }}</view>
+            <view class="channel-list">
+              <view
+                v-for="(item, index) in channelList"
+                :key="index"
+                class="channel-item"
+                :class="{ active: currentChannel?.value === item.value }"
+                @click="selectChannel(item)"
+              >
+                {{ item.label }}
               </view>
               </view>
             </view>
             </view>
+          </view>
 
 
-            <view class="selection-section">
-              <text class="section-title">{{ $t('选择币种') }}</text>
-              <view class="currency-options">
-                <view
-                  v-for="currency in allCurrencies"
-                  :key="currency.value"
-                  class="currency-card"
-                  :class="{ 'selected': selectedCurrency === currency.value }"
-                  @click="() => {
-                    selectedCurrency = currency.value
-                    getBlockChainFee()
-                  }"
-                >
-                  <view class="currency-info">
-                    <text class="currency-name">{{ currency.label }}</text>
-                  </view>
-                  <u-icon
-                    v-if="selectedCurrency === currency.value"
-                    name="checkmark"
-                    class="check-icon"
-                    color="#f8b932"
-                    size="24rpx"
-                  ></u-icon>
-                </view>
+          <view class="section" v-if="currentChannel && currentChannel.isUsdt">
+            <template v-if="receivingType !== '1'">
+              <view class="section-title">{{ $t('充值金额') }}</view>
+              
+              <view class="amount-input-box" style="margin-bottom: 20rpx;">
+                <text class="currency">$</text>
+                <input
+                  type="digit"
+                  v-model="amount"
+                  class="amount-input"
+                  :placeholder="$t('请输入充值数量')"
+                />
               </view>
               </view>
+            </template>
+
+            <view class="rate-tip" v-if="usdtRate">
+              {{ $t('当前汇率 (USDT/RMB)') }}: {{ usdtRate }}
             </view>
             </view>
 
 
-            <view class="selection-section">
-              <text class="section-title">{{ $t('选择区块链网络') }}</text>
-              <view class="network-options">
+            <view class="network-section">
+              <view class="network-title">{{ $t('网络类型') }}</view>
+              <view class="network-list">
+                <view
+                  v-if="trc20Address"
+                  class="network-item"
+                  :class="{ active: selectedNetwork === 'trc20' }"
+                  @click="selectNetwork('trc20')"
+                >
+                  TRC20
+                </view>
                 <view
                 <view
-                  v-for="(network, n) in networkOptions"
-                  :key="network.value"
-                  class="network-card"
-                  :class="{ 'selected': selectedNetwork === network.value }"
-                  @click="() => {
-                    selectedNetwork = network.value
-                    rechargeAddress = addressOptions[n]
-                  }"
+                  v-if="erc20Address"
+                  class="network-item"
+                  :class="{ active: selectedNetwork === 'erc20' }"
+                  @click="selectNetwork('erc20')"
                 >
                 >
-                  <text class="network-name">{{ network.label }}</text>
-                  <u-icon
-                    v-if="selectedNetwork === network.value"
-                    name="checkmark"
-                    class="check-icon"
-                    color="#f8b932"
-                    size="20rpx"
-                  ></u-icon>
+                  ERC20
                 </view>
                 </view>
               </view>
               </view>
             </view>
             </view>
 
 
-            <view class="address-section">
-              <text class="section-title">{{ $t('充值地址') }}</text>
-              <view class="address-container">
-                <u-input
-                  v-model="rechargeAddress"
-                  :placeholder="$t('充值地址')"
-                  disabled
-                  class="address-input input-border"
-                ></u-input>
+            <template v-if="usdtQrcode">
+              <view class="qrcode-box">
+                <image :src="usdtQrcode" mode="aspectFit" class="qrcode-img"></image>
               </view>
               </view>
-              <text class="address-tip">{{ $t('请确认充值地址正确无误,错误地址将导致资产丢失且无法找回') }}</text>
+              <view class="address-box" v-if="usdtAddress">
+                <text class="address-text">{{ usdtAddress }}</text>
+                <view class="copy-btn" @click="copyAddress">{{ $t('复制') }}</view>
+              </view>
+            </template>
+
+            <view class="network-section" style="margin-top: 40rpx;" v-if="receivingType !== '1'">
+              <view class="network-title">{{ $t('上传支付凭证') }}</view>
+              <CUploadImage ref="CUploadImageRef" @change="changeImg" />
             </view>
             </view>
+          </view>
 
 
-            <view class="amount-section">
-              <text class="section-title">{{ $t('充值数量') }}</text>
-              <u-input
-                v-model="amount"
-                :placeholder="$t('请输入充值数量')"
-                class="amount-input input-border"
-                type="digit"
-                @blur="amountTouched = true"
-              ></u-input>
-              <text class="error-tip" v-if="!amount && amountTouched">{{ $t('请输入充值数量') }}</text>
+          <view class="section" v-if="currentChannel && !currentChannel.isUsdt">
+            <view class="section-title">{{ $t('充值金额') }}</view>
+            
+            <view v-if="currentChannel.config.fixed" class="amount-list">
+              <view
+                v-for="(val, index) in currentChannel.config.fixed"
+                :key="index"
+                class="amount-item"
+                :class="{ active: amount === val }"
+                @click="selectFixedAmount(val)"
+              >
+                ¥{{ val }}
+              </view>
             </view>
             </view>
 
 
-            <view class="estimated-section">
-              <text class="section-title">{{ $t('预计到账') }}</text>
-              <u-input
-                v-model="estimatedAmount"
-                disabled
-                class="estimated-input input-border"
-              ></u-input>
-              <text class="exchange-rate">{{ $t('当前汇率') }}: 1 {{ selectedCurrency }} = {{ (1 / exchangeRate).toFixed(2) }} {{ $currency }}</text>
+            <view v-else class="amount-input-box">
+              <text class="currency">¥</text>
+              <input
+                type="digit"
+                v-model="amount"
+                class="amount-input"
+                :placeholder="$t('限额') + ` ${currentChannel.config.min} - ${currentChannel.config.max}`"
+              />
             </view>
             </view>
 
 
-            <view class="upload-section">
-              <text class="section-title">{{ $t('上传支付凭证') }}</text>
-              <view class="upload-container">
-                <CUploadImage
-                  @change="changeImg"
-                  :maxCount="1"
-                  :imgCenter="false"
-                  ref="CUploadImageRef"
-                />
-                <text v-if="uploadFileUrl" class="upload-tip">{{ $t('已上传支付凭证') }}</text>
+            <view class="network-section" v-if="currentChannel.value === 'rgcz'">
+              <view class="network-title">{{ $t('支付方式') }}</view>
+              <view class="network-list">
+                <view
+                  v-for="method in rgczMethods"
+                  :key="method.value"
+                  class="network-item"
+                  :class="{ active: selectedRgczMethod === method.value }"
+                  @click="selectedRgczMethod = method.value"
+                >
+                  {{ method.label }}
+                </view>
               </view>
               </view>
             </view>
             </view>
+            
+            </view>
+        </template>
 
 
-            <view class="bottom-placeholder"></view>
+        <view class="section result-section" v-if="payResult">
+          <view class="qrcode-box" style="margin-top: 0; margin-bottom: 40rpx;">
+            <image :src="payResult.image" mode="aspectFit" class="qrcode-img"></image>
+          </view>
+          <view class="result-text-box">
+            <view class="result-line">{{ currentChannel.label }}扫码充值确认</view>
+            <view class="result-line">请使用浏览器扫码或者复制支付地址到浏览器打开</view>
+            <view class="result-line" style="display: flex; align-items: center; justify-content: space-between;">
+              <view style="flex: 1;">
+                支付地址:<text class="link-text" @click="openPayUrl(payResult.url)">{{ payResult.url }}</text>
+              </view>
+              <view class="copy-btn" style="margin-left: 20rpx; flex-shrink: 0;" @click="copyPayUrl(payResult.url)">{{ $t('复制') }}</view>
+            </view>
+            <view class="result-line">支付金额:{{ amount }} RMB</view>
+            <view class="result-line">请按实际支付金额进行付款,否则影响到账</view>
+            <view class="result-line">支付完成后请耐心等待,支付到账会第一时间通知您!</view>
           </view>
           </view>
         </view>
         </view>
+
+        <view class="bottom-placeholder"></view>
       </scroll-view>
       </scroll-view>
 
 
-      <view class="fixed-submit-section">
+      <view class="fixed-submit-section" v-if="!payResult && !(currentChannel?.isUsdt && receivingType === '1')">
         <u-button
         <u-button
           type="primary"
           type="primary"
           @click="submitRecharge"
           @click="submitRecharge"
@@ -151,127 +163,297 @@
 import { ref, watch, reactive } from "vue";
 import { ref, watch, reactive } from "vue";
 import { useI18n } from "vue-i18n";
 import { useI18n } from "vue-i18n";
 import { onLoad } from "@dcloudio/uni-app";
 import { onLoad } from "@dcloudio/uni-app";
-import { getExchangeRate, getRechargeAddressAndWithdrawCurrencyList, recharge } from "@/request/api";
+import { recharge, getConfigIndex } from "@/request/api";
 import CUploadImage from "@/components/CUploadImage/index.vue";
 import CUploadImage from "@/components/CUploadImage/index.vue";
+import { apiUrl } from "@/request";
 
 
-const { t } = useI18n()
+const { t, locale } = useI18n()
 const router = useRouter()
 const router = useRouter()
 const CUploadImageRef = ref()
 const CUploadImageRef = ref()
 
 
-const allCurrencies = ref([]);
-const selectedCurrency = ref('USDT');
-const networkOptions = ref([]);
-const addressOptions = ref([]);
+const channelList = ref([]); 
+const currentChannel = ref(null); 
+const amount = ref(''); 
+const uploadFileUrl = ref(''); // 补充定义了图片上传变量
+const payResult = ref(null);   // 保存第三方充值结果
+
+const usdtRate = ref('');
+const trc20Address = ref('');
+const erc20Address = ref('');
+const showThirdPayment = ref('0');
 const selectedNetwork = ref('');
 const selectedNetwork = ref('');
-const rechargeAddress = ref('');
-const amount = ref('');
-const amountTouched = ref(false);
-const estimatedAmount = ref('0');
-const qrCodeUrl = ref('');
-const exchangeRate = ref(0);
-const uploadFileUrl = ref('');
+const usdtQrcode = ref('');
+const usdtAddress = ref(''); // 新增:保存充值地址
+const receivingType = ref(''); // 新增:保存接收类型
+
+const rgczMethods = [
+  { label: '微信', value: 1 },
+  { label: '支付宝', value: 2 },
+  { label: '银行卡', value: 3 }
+];
+const selectedRgczMethod = ref('');
 
 
 const changeImg = (e) => {
 const changeImg = (e) => {
   uploadFileUrl.value = Array.isArray(e) ? e[0] : e;
   uploadFileUrl.value = Array.isArray(e) ? e[0] : e;
 };
 };
 
 
-const updateCurrencyInfo = (currencyValue) => {
-  const currency = allCurrencies.value.find(item => item.value === currencyValue);
-  if (currency) {
-    qrCodeUrl.value = currency.qrCodeUrl;
-    networkOptions.value = currency.networks;
-    addressOptions.value = currency.address;
-    selectedNetwork.value = currency.networks.length > 0 ? currency.networks[0].value : '';
-    rechargeAddress.value = currency.address[0] || '';
+const selectChannel = (item) => {
+  currentChannel.value = item;
+  amount.value = ''; 
+  selectedNetwork.value = '';
+  usdtQrcode.value = '';
+  usdtAddress.value = ''; // 切换通道时清空地址
+  uploadFileUrl.value = ''; // 切换通道时清空凭证
+  payResult.value = null;   // 切换通道时清空结果
+  selectedRgczMethod.value = ''; // 切换通道时清空人工充值方式
+
+  // USDT默认选择网络类型
+  if (item.isUsdt) {
+    if (trc20Address.value) {
+      selectNetwork('trc20');
+    } else if (erc20Address.value) {
+      selectNetwork('erc20');
+    }
   }
   }
 };
 };
 
 
-watch(selectedCurrency, (newVal) => {
-  updateCurrencyInfo(newVal);
-  amount.value = '';
-  amountTouched.value = false;
-  estimatedAmount.value = '0';
-});
+const selectFixedAmount = (val) => {
+  amount.value = val;
+};
 
 
-watch(amount, (newAmount) => {
-  if (newAmount === '') {
-    estimatedAmount.value = '0';
-    return;
-  }
-  amountTouched.value = true;
-  // estimatedAmount.value = (Number(newAmount) * Number(exchangeRate.value)).toFixed(6);
-  estimatedAmount.value = (Number(newAmount) / Number(exchangeRate.value)).toFixed(2);
-});
+const selectNetwork = (network) => {
+  selectedNetwork.value = network;
+  getScanQrcode();
+};
+
+const copyAddress = () => {
+  if (!usdtAddress.value) return;
+  uni.setClipboardData({
+    data: usdtAddress.value,
+    success: () => {
+      uni.showToast({ title: t('复制成功'), icon: 'none' });
+    }
+  });
+};
+
+// 新增:复制第三方支付地址
+const copyPayUrl = (url) => {
+  if (!url) return;
+  uni.setClipboardData({
+    data: url,
+    success: () => {
+      uni.showToast({ title: t('复制成功'), icon: 'none' });
+    }
+  });
+};
+
+// 新增:判断环境打开支付地址
+const openPayUrl = (url) => {
+  if (!url) return;
+  // #ifdef H5
+  window.open(url, '_blank');
+  // #endif
+  // #ifndef H5
+  router.push({ name: 'web-view', query: { src: url }});
+  // #endif
+};
 
 
 const submitRecharge = async () => {
 const submitRecharge = async () => {
-  if (!amount.value || Number(amount.value) <= 0) {
-    amountTouched.value = true;
-    uni.showToast({ title: t('请输入充值数量'), icon: 'none' });
+  if (!currentChannel.value) return uni.showToast({ title: t('请选择支付方式'), icon: 'none' });
+  
+  // ================= USDT充值提交 =================
+  if (currentChannel.value.isUsdt) {
+    if (!amount.value) return uni.showToast({ title: t('请输入充值数量'), icon: 'none' });
+    if (!selectedNetwork.value) return uni.showToast({ title: t('请选择网络类型'), icon: 'none' });
+    if (!uploadFileUrl.value) return uni.showToast({ title: t('请上传支付凭证'), icon: 'none' });
+
+    uni.showLoading({ title: t('提交中...') });
+    uni.request({
+      url: apiUrl + 'wallet/recharge',
+      method: 'POST',
+      data: {
+        amount: amount.value,
+        image: uploadFileUrl.value,
+        net: selectedNetwork.value,
+        toAddress: selectedNetwork.value === 'trc20' ? trc20Address.value : erc20Address.value
+      },
+      header: {
+        Authorization: uni.getStorageSync('token'),
+        lang: locale.value
+      },
+      success: (res) => {
+        uni.hideLoading();
+        if (res.data.code === 0) {
+          uni.showToast({ title:res.data.msg || t('提交成功'), icon: 'success' });
+          // 清空表单
+          amount.value = '';
+          selectedNetwork.value = '';
+          uploadFileUrl.value = '';
+          usdtQrcode.value = '';
+          usdtAddress.value = '';
+          CUploadImageRef.value.clear(); // 调用子组件方法清除图片
+        } else {
+          uni.showToast({ title: res.data.msg || t('提交失败'), icon: 'none' });
+        }
+      },
+      fail: (err) => {
+        uni.hideLoading();
+        uni.showToast({ title: t('网络错误'), icon: 'none' });
+      }
+    });
     return;
     return;
   }
   }
-  if (!uploadFileUrl.value) {
-    uni.showToast({ title: t('请上传支付凭证'), icon: 'none' });
+
+  // ================= 人工充值提交 =================
+  if (currentChannel.value.value === 'rgcz') {
+    if (!amount.value) return uni.showToast({ title: t('请输入或选择充值金额'), icon: 'none' });
+    if (!selectedRgczMethod.value) return uni.showToast({ title: t('请选择支付方式'), icon: 'none' });
+
+    uni.showLoading({ title: t('提交中...') });
+    uni.request({
+      url: apiUrl + 'wallet/paymentOrder',
+      method: 'POST',
+      data: {
+        payment_type: selectedRgczMethod.value,
+        amount: amount.value
+      },
+      header: {
+        Authorization: uni.getStorageSync('token'),
+        lang: locale.value
+      },
+      success: (res) => {
+        uni.hideLoading();
+        if (res.data.code === 0) {
+          uni.showToast({ title: res.data.msg || t('提交成功'), icon: 'success' });
+          amount.value = '';
+          selectedRgczMethod.value = '';
+        } else {
+          uni.showToast({ title: res.data.msg || t('提交失败'), icon: 'none' });
+        }
+      },
+      fail: (err) => {
+        uni.hideLoading();
+        uni.showToast({ title: t('网络错误'), icon: 'none' });
+      }
+    });
     return;
     return;
   }
   }
 
 
-  const params = {
-    currency: selectedCurrency.value,
-    network_type: selectedNetwork.value,
-    address: rechargeAddress.value,
-    amount: amount.value,
-    payment_receipt: uploadFileUrl.value
-  };
-
-  await recharge(params);
-
-  amount.value = '';
-  estimatedAmount.value = '0'
-  uploadFileUrl.value = '';
-  if (CUploadImageRef.value) CUploadImageRef.value.handleDelete(0);
-};
-
-const getBlockChainFee = async () => {
-  const res = await getExchangeRate({ symbol: selectedCurrency.value });
-  exchangeRate.value = res.data.price || 0;
+  // ================= 第三方充值提交 =================
+  if (!amount.value) return uni.showToast({ title: t('请输入或选择充值金额'), icon: 'none' });
+  
+  uni.showLoading({ title: t('提交中...') });
+  uni.request({
+    url: apiUrl + 'wallet/createPay',
+    method: 'POST',
+    data: {
+      payment_type: currentChannel.value.config.type,
+      amount: amount.value
+    },
+    header: {
+      Authorization: uni.getStorageSync('token'),
+      lang: locale.value
+    },
+    success: (res) => {
+      uni.hideLoading();
+      if (res.data.code === 0) {
+        uni.showToast({ title: res.data.msg || t('提交成功'), icon: 'success' });
+        payResult.value = res.data.data; // 赋值展示结果页
+      } else {
+        uni.showToast({ title: res.data.msg || t('提交失败'), icon: 'none' });
+      }
+    },
+    fail: (err) => {
+      uni.hideLoading();
+      uni.showToast({ title: t('网络错误'), icon: 'none' });
+    }
+  });
 };
 };
 
 
 const getData = async () => {
 const getData = async () => {
-  const res = await getRechargeAddressAndWithdrawCurrencyList({ type: 1 });
-  const mergedData = res.data.list.reduce((acc, item) => {
-    const existing = acc.find(entry => entry.currency === item.currency);
-    if (existing) {
-      existing.network_type.push(item.network_type);
-      existing.address.push(item.address);
-    } else {
-      acc.push({
-        currency: item.currency,
-        network_type: [item.network_type],
-        address: [item.address],
-        qrCodeUrl: item.qrcode,
+  try {
+    const configData = await getConfigIndex();
+    if (configData && configData.data) {
+      console.log(configData, 266);
+      
+      configData.data.forEach(item => {
+        if (item.field === 'exchange_rate_rmb') usdtRate.value = item.val;
+        if (item.field === 'receiving_address') trc20Address.value = item.val;
+        if (item.field === 'receiving_address_erc20') erc20Address.value = item.val;
+        if (item.field === 'three_payment_switch') showThirdPayment.value = item.val;
+        if (item.field === 'receiving_type') receivingType.value = item.val; // 获取隐藏配置
+      });
+    }
+
+    channelList.value = [];
+
+    const res = await getChannel();
+    if (res && res.data && res.data.list) {
+      // 遍历后端返回的通道,如果是 USDT 则标记 isUsdt,以兼容已有的页面和提交逻辑
+      channelList.value = res.data.list.map(item => {
+        if (item.value === 'usdt' || item.type === 'usdt' || item.isUsdt) {
+          item.isUsdt = true;
+        }
+        return item;
       });
       });
     }
     }
-    return acc;
-  }, []);
-
-  allCurrencies.value = mergedData.map(item => ({
-    label: item.currency,
-    value: item.currency,
-    address: item.address,
-    qrCodeUrl: item.qrCodeUrl,
-    networks: item.network_type.map(trim => ({
-      label: trim,
-      value: trim,
-    })),
-  }));
-
-  if (allCurrencies.value.length > 0) {
-    selectedCurrency.value = allCurrencies.value[0].value;
-    await getBlockChainFee();
-    updateCurrencyInfo(allCurrencies.value[0].value);
+
+    if (channelList.value.length > 0) {
+      selectChannel(channelList.value[0]); // 初始化调用以触发默认网络选择
+    }
+  } catch (error) {
+    console.error(error);
   }
   }
 };
 };
 
 
+function getChannel() {
+  return new Promise((resolve, reject) => {
+    uni.request({
+      url: apiUrl + 'wallet/channel',
+      method: 'GET',
+      success: (res) => resolve(res.data),
+      fail: (err) => reject(err),
+      header: {
+        Authorization: uni.getStorageSync('token'),
+        lang: locale.value
+      }
+    });
+  });
+}
+
+function getScanQrcode() {
+  uni.showLoading({ title: t('获取中...') });
+  uni.request({
+    url: apiUrl + 'wallet/scan',
+    method: 'GET',
+    data: {
+      type: selectedNetwork.value
+    },
+    header: {
+      Authorization: uni.getStorageSync('token'),
+      lang: locale.value
+    },
+    success: (res) => {
+      uni.hideLoading();
+      if (res.data && res.data.code === 0 && res.data.data) {
+        usdtQrcode.value = res.data.data.qrcode;
+        usdtAddress.value = res.data.data.address; // 保存地址
+      } else {
+        uni.showToast({ title: res.data.msg || t('获取二维码失败'), icon: 'none' });
+      }
+    },
+    fail: (err) => {
+      uni.hideLoading();
+      uni.showToast({ title: err.data?.msg || t('网络错误'), icon: 'none' });
+    }
+  });
+}
+
 onLoad(() => {
 onLoad(() => {
+  if(uni.getStorageSync('youke_token')) {
+    uni.navigateBack()
+    return
+  }
   getData();
   getData();
 });
 });
 </script>
 </script>
@@ -282,175 +464,213 @@ onLoad(() => {
   display: flex;
   display: flex;
   flex-direction: column;
   flex-direction: column;
   position: relative;
   position: relative;
+  
 }
 }
 
 
-.main-scroll {
-  flex: 1;
-  overflow: hidden;
-}
-
-.top-up-page-container {
+.section {
   padding: 30rpx;
   padding: 30rpx;
-  box-sizing: border-box;
+  background-color: #fff;
+  margin-top: 20rpx;
 }
 }
 
 
-.recharge-container {
-  width: 100%;
+.section-title {
+  font-size: 32rpx;
+  font-weight: bold;
+  margin-bottom: 30rpx;
+  color: #333;
 }
 }
 
 
-.qr-code-section {
-  margin-bottom: 40rpx;
+.channel-list {
   display: flex;
   display: flex;
-  justify-content: center;
-  .qr-code-bg {
-    background-color: #fff;
-    padding: 20rpx;
-    border-radius: 12rpx;
-    box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.08);
-  }
-  .empty-qr-code {
-    width: 180rpx;
-    height: 180rpx;
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-    justify-content: center;
-    border: 1px dashed #e5e7eb;
-    background: #f9fafb;
-    .empty-text { font-size: 24rpx; margin-top: 8rpx; color: #9ca3af; }
-  }
+  flex-wrap: wrap;
+  gap: 20rpx;
 }
 }
 
 
-.selection-section {
-  margin-bottom: 32rpx;
-  .section-title {
-    font-size: 30rpx;
-    font-weight: bold;
-    color: #1f2329;
-    margin-bottom: 20rpx;
-    display: block;
+.channel-item {
+  padding: 16rpx 24rpx;
+  border: 2rpx solid #eee;
+  border-radius: 12rpx;
+  font-size: 28rpx;
+  color: #333;
+  background-color: #f9f9f9;
+  transition: all 0.2s;
+  
+  &.active {
+    border-color: #f8b932;
+    background-color: rgba(248, 185, 50, 0.1);
+    color: #f8b932;
   }
   }
 }
 }
 
 
-.currency-options {
+.amount-list {
   display: flex;
   display: flex;
+  flex-wrap: wrap;
   gap: 20rpx;
   gap: 20rpx;
-  overflow-x: auto;
-  padding-bottom: 10rpx;
-  /* 隐藏滚动条 */
-  &::-webkit-scrollbar {
-    display: none;
-    width: 0 !important;
-    height: 0 !important;
-    -webkit-appearance: none;
-    background: transparent;
-  }
-  -ms-overflow-style: none;
-  scrollbar-width: none;
 }
 }
 
 
-.currency-card {
-  flex: 0 0 auto;
-  width: 220rpx;
-  padding: 26rpx 16rpx;
-  min-height: 100rpx;
-  border: 1px solid #e5e7eb;
-  border-radius: 16rpx;
-  display: flex;
-  flex-direction: column;
-  justify-content: center;
-  align-items: center;
-  position: relative;
-  background-color: #fff;
+.amount-item {
+  width: calc(33.33% - 14rpx);
+  text-align: center;
+  padding: 24rpx 0;
+  border: 2rpx solid #eee;
+  border-radius: 12rpx;
+  font-size: 32rpx;
+  color: #333;
+  background-color: #f9f9f9;
+  box-sizing: border-box;
   transition: all 0.2s;
   transition: all 0.2s;
 
 
-  &:active {
-    transform: scale(0.96);
-  }
-
-  &.selected {
+  &.active {
     border-color: #f8b932;
     border-color: #f8b932;
-    background-color: rgba(248, 185, 50, 0.04);
-    .currency-name { color: #f8b932; }
+    background-color: rgba(248, 185, 50, 0.1);
+    color: #f8b932;
+    font-weight: bold;
   }
   }
+}
 
 
-  .currency-name {
+.amount-input-box {
+  display: flex;
+  align-items: center;
+  border-bottom: 2rpx solid #eee;
+  padding: 10rpx 0 20rpx 0;
+  
+  .currency {
+    font-size: 48rpx;
     font-weight: bold;
     font-weight: bold;
-    font-size: 32rpx;
+    margin-right: 16rpx;
     color: #333;
     color: #333;
   }
   }
-
-  .check-icon {
-    position: absolute;
-    top: 12rpx;
-    right: 12rpx;
+  
+  .amount-input {
+    flex: 1;
+    font-size: 40rpx;
+    height: 70rpx;
   }
   }
 }
 }
 
 
-.network-options {
+.rate-tip {
+  font-size: 26rpx;
+  color: #f56c6c;
+  margin-top: 20rpx;
+  margin-bottom: 20rpx;
+}
+
+.network-section {
+  margin-top: 30rpx;
+}
+
+.network-title {
+  font-size: 28rpx;
+  color: #666;
+  margin-bottom: 20rpx;
+}
+
+.network-list {
   display: flex;
   display: flex;
   flex-wrap: wrap;
   flex-wrap: wrap;
-  gap: 16rpx;
+  gap: 20rpx;
 }
 }
 
 
-.network-card {
-  padding: 12rpx 28rpx;
-  border: 1px solid #e5e7eb;
-  border-radius: 40rpx;
-  background: #fff;
-  display: flex;
-  align-items: center;
-  gap: 8rpx;
-  &.selected {
+.network-item {
+  padding: 16rpx 40rpx;
+  border: 2rpx solid #eee;
+  border-radius: 12rpx;
+  font-size: 28rpx;
+  color: #333;
+  background-color: #f9f9f9;
+  transition: all 0.2s;
+  
+  &.active {
     border-color: #f8b932;
     border-color: #f8b932;
-    background-color: rgba(248, 185, 50, 0.04);
+    background-color: rgba(248, 185, 50, 0.1);
     color: #f8b932;
     color: #f8b932;
   }
   }
-  .network-name { font-size: 26rpx; }
 }
 }
 
 
-.address-section {
-  margin-bottom: 32rpx;
-  .address-tip {
-    margin-top: 12rpx;
-    font-size: 22rpx;
-    color: #ef4444;
-    line-height: 1.4;
+.qrcode-box {
+  margin-top: 40rpx;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  
+  .qrcode-img {
+    width: 400rpx;
+    height: 400rpx;
+    background-color: #f9f9f9;
+    border-radius: 16rpx;
+    padding: 20rpx;
   }
   }
 }
 }
 
 
-.amount-section, .estimated-section {
-  margin-bottom: 32rpx;
-  .error-tip { color: #ef4444; font-size: 22rpx; margin-top: 8rpx; }
-  .exchange-rate { font-size: 24rpx; color: #94a3b8; margin-top: 8rpx; }
+/* 充值地址展示样式 */
+.address-box {
+  margin-top: 30rpx;
+  padding: 20rpx;
+  background-color: #f9f9f9;
+  border-radius: 12rpx;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  border: 2rpx solid #eee;
+}
+
+.address-text {
+  flex: 1;
+  font-size: 26rpx;
+  color: #333;
+  margin-right: 20rpx;
+  word-break: break-all;
+}
+
+.copy-btn {
+  padding: 10rpx 30rpx;
+  background-color: #f8b932;
+  color: #000;
+  font-size: 24rpx;
+  border-radius: 8rpx;
+  font-weight: bold;
+  white-space: nowrap;
+}
+
+/* 结果页展示样式 */
+.result-section {
+  text-align: center;
+}
+
+.result-text-box {
+  text-align: left;
+  background-color: #f9f9f9;
+  padding: 30rpx;
+  border-radius: 12rpx;
 }
 }
 
 
-.upload-section {
-  margin-bottom: 40rpx;
+.result-line {
+  font-size: 28rpx;
+  color: #333;
+  line-height: 1.8;
+  margin-bottom: 10rpx;
+  word-break: break-all;
 }
 }
 
 
-.input-border {
-  border-bottom: 1px solid #e5e7eb;
-  background: transparent;
-  padding: 10rpx 0;
+.link-text {
+  color: #007aff;
+  text-decoration: underline;
 }
 }
 
 
-/* 固定底部按钮样式 */
 .fixed-submit-section {
 .fixed-submit-section {
   position: fixed;
   position: fixed;
   bottom: 0;
   bottom: 0;
   left: 0;
   left: 0;
   width: 100%;
   width: 100%;
   padding: 20rpx 30rpx;
   padding: 20rpx 30rpx;
-  padding-bottom: calc(20rpx + env(safe-area-inset-bottom)); // 适配全面屏底部
+  padding-bottom: calc(20rpx + env(safe-area-inset-bottom)); 
   box-sizing: border-box;
   box-sizing: border-box;
-  // box-shadow: 0 -4rpx 16rpx rgba(0, 0, 0, 0.05);
   z-index: 99;
   z-index: 99;
+  background-color: #fff; 
 }
 }
 
 
-/* 占位符,高度略大于底部按钮区域高度 */
 .bottom-placeholder {
 .bottom-placeholder {
   height: 300rpx;
   height: 300rpx;
   width: 100%;
   width: 100%;
 }
 }
-</style>
+</style>

+ 41 - 2
src/pages/WorkModule/my/topUp/index.vue

@@ -8,7 +8,20 @@
 
 
     <view class="page-body">
     <view class="page-body">
       <scroll-view scroll-y class="main-scroll" style="height: 100%;">
       <scroll-view scroll-y class="main-scroll" style="height: 100%;">
-        <view class="section">
+        <view class="user">
+          <view>
+            <u-avatar :src="userInfo.avatar" size="90" shape="circle"
+              customStyle="border: 3px solid rgba(248, 185, 50, 0.2)"></u-avatar>
+          </view>
+          <view class="user-view">
+            <view>
+              {{ $t('用户名') }}:{{ userInfo.first_name }}
+            </view>
+            <view>{{ $t('余额') }}:{{ userMoney }} {{ $currency }}</view>
+          </view>
+        </view>
+        <view class="section-text">{{ $t('请选择充值方式') }}</view>
+        <view>
           <view v-for="(item, index) in channelList" :key="index" class="channel" @click="selectChannel(item)">
           <view v-for="(item, index) in channelList" :key="index" class="channel" @click="selectChannel(item)">
             <view>{{ item.label }}</view>
             <view>{{ item.label }}</view>
             <u-icon name="arrow-right" color="#999"></u-icon>
             <u-icon name="arrow-right" color="#999"></u-icon>
@@ -23,7 +36,7 @@
 import { ref } from "vue";
 import { ref } from "vue";
 import { useI18n } from "vue-i18n";
 import { useI18n } from "vue-i18n";
 import { onLoad } from "@dcloudio/uni-app";
 import { onLoad } from "@dcloudio/uni-app";
-import { getConfigIndex } from "@/request/api";
+import { getConfigIndex, getBalance, getUserInfo } from "@/request/api";
 import { apiUrl } from "@/request";
 import { apiUrl } from "@/request";
 
 
 const { t, locale } = useI18n()
 const { t, locale } = useI18n()
@@ -36,6 +49,8 @@ const trc20Address = ref('');
 const erc20Address = ref('');
 const erc20Address = ref('');
 const showThirdPayment = ref('0');
 const showThirdPayment = ref('0');
 const receivingType = ref(''); // 新增:保存接收类型
 const receivingType = ref(''); // 新增:保存接收类型
+const userMoney = ref(0);
+const userInfo = ref({});
 
 
 const selectChannel = (item) => {
 const selectChannel = (item) => {
   uni.setStorageSync('recharge_channel', item);
   uni.setStorageSync('recharge_channel', item);
@@ -46,6 +61,14 @@ const selectChannel = (item) => {
 const getData = async () => {
 const getData = async () => {
   try {
   try {
     const configData = await getConfigIndex();
     const configData = await getConfigIndex();
+    getBalance()
+      .then((res) => {
+        userMoney.value = res.data.money;
+      })
+      .catch((err) => { });
+    getUserInfo().then((res) => {
+      userInfo.value = res.data;
+    });
     if (configData && configData.data) {
     if (configData && configData.data) {
       console.log(configData, 266);
       console.log(configData, 266);
 
 
@@ -108,6 +131,22 @@ onLoad(() => {
 
 
 }
 }
 
 
+.user {
+  display: flex;
+  align-items: center;
+  padding: 20px;
+}
+
+.user-view {
+  padding-left: 10px;
+}
+
+.section-text {
+  padding: 10px 20px;
+  font-size: 18px;
+  background-color: #e5e5e5;
+}
+
 .channel {
 .channel {
   padding: 0 20px;
   padding: 0 20px;
   height: 60px;
   height: 60px;

+ 11 - 1
src/pages/common/betSlip/index.vue

@@ -209,7 +209,17 @@ function getData() {
 }
 }
 
 
 const goBack = () => { uni.navigateBack(); }
 const goBack = () => { uni.navigateBack(); }
-const topUp = () => { router.push({ name: 'topUp' }) }
+const topUp = () => {
+   if (localStorage.getItem("youke_token")) {
+    // 试玩账户不可进入
+    uni.showToast({
+      title: t("试玩账户不可使用"),
+      icon: "none",
+    });
+    return;
+  }
+  router.push({ name: 'topUp' })
+}
 
 
 const changeStake = (item, delta) => {
 const changeStake = (item, delta) => {
   if (checkIsLocked(item)) return;
   if (checkIsLocked(item)) return;