10.10综合交易所原始源码_移动端
1
2026-05-26 0dbc7465447164fef24327b5d494870832d798dd
src/views/personal/index.vue
@@ -1,390 +1,414 @@
<template>
   <section class="my-index">
      <div class="assets">
         <div class="top">
            <div class="title">{{ $t('my') }}{{ $t('资产') }}</div>
         </div>
         <div class="currentAssets">
            <div class="top">
               <div class="amount">
                  <div class="amountTop"><img class="nation"
                        src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAYAAAAehFoBAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAb7SURBVHgB1Zl7TFNXHMe/t70FSkUqc26gsEJ1OqOWpzp52Kk4XRQhm5sxQTHGOBOnGP3D7Y9RFv9YljlNliz+s6nbsvmYgqBzxsTWBzoRpY4hvkaLwyGicCmPAn3cnXOg0Dp5VNqJn+TknnvOue3vnvs739/vnsthGGi1uUqHA1pAnCs6oOI4xIZHhCkPHvpU2TNEIMXcczSScpYUA8dxAp4RHs+AyVSnLSwsyTvyy7lYctptHEfMJgenKLoPpX2xPXUtKbm0IopiITnsJ4YXwks4bwanpuZmhoWF7FIEB6rk8kDcuvU3aw8NVaC5uY3VXw0Pw+HDeUP9STMp+cTwfUO9YEgzTGZEdbz40t4DB85oa2oe4nFPe3BwEDSaGMxJnobjxRfJDdSy9tZqM4aIipS9QuWtzaYfjmbFff7xoBcOanDKm5s2nzhxWZc2V6Pcs6fYo6+9vQMTJ03AkiWzUFxUwtqstXXQpy+Hl1C3KS+KSczPqC7bPdDAAV0iZc6mPDJCp9GoIQiteNxoQWuLFQpFENraOtiY6OhwdHXZIJPxMJsfINTRifUPr+JZIQbpllaX5ffXL+2vg/hkXlVVja6hQUBdXSPz0a4uOyZPjkR29kIEBsrw4EEjGhqa0dLSzm6IEkTkIrGtDsNAu3JMBH5u+ufs0zolT2v8ZPu3eSEhct306TFwOJwefR0dXZi/IA7JKdPQ2WmDPyA6oyuOSXzqyv2PS1CfjVKN293W3gmiCLhzuxZkFWPUKDmbyZCQYEREvAQpL8GNyhp2zejRwbBY2ll93BgFvv96A3yBQhW5hfz37n4N1uvLVTu/PFxOHq9L+NmjT0qagrg4NQ4eOouH9U2946lKTJoUgZTUGThWWILa2gZvZW0waICJI0abXQ0eLjE2LLTA6RSV7m12uwML0uOx8O0kqm8ev0ZVYtbsqcjMTEaochT8ALVlr3tDr6wtWrQ9Z9/+U7H0sVOCgwOJQZ3Mh0/+epnI1iXiEt3KECQPQIe1i9Wvlt3GpYuVaGqywE9oSRzIdEXFXpdITd5sEiGqaF2tDsfGj7Kwf98pVFSYPBZeZOTLeP+Dt1B6uQrXrt3plTcXYxUy7EgbD1/S1SiY47/6LJrW2Qynpm7MFJ3dxlImRI5DfPwkZiwt7vC8FPPnxyGELMIyMrtPYrO0ovq7n+BjVMUTE7VL75YZmMGiKF0tk3VLss1mh9lUjzU5X0BOHj2dXalUwgIDlTRBaMOW3G9AcwmrtZNdQ/vodf6ELB+6kg0cTREDAwKaFixIAE+M1uuNaHzc548BATLExU9EbKwahQUlqHdTCXpDUVHjkJY2AydPlhKVeDTsSDcAgsNpj+YdDruW5+VYtHgmC7m/nbziMYpIMNLTE4jbTEdBQYlHHw0cVNKyVy1ESUklaXnE2hWvRcIPKGVhoVpeFCVaqgwHD+ghkXJkEVlZL51ZmiNQo+jsGfTX0WLxVBAigSgtvQkSwuFSF/mEcMw7vAd+QsuHhig0lpY2GAzG3lYazbZuW47du46wCHbVbXGRkI2MZXPI+OskiAio+KMa/yMqSbQ6QvlEPEBCwutECeKxYsU8mgt79I0fPxY5OYuwYUMGngMavsXSpqI1iYRjgYwaeO9ePdat28kevctgqiI2mwP37z/Cjh0/wknUw6UMQUEyoiD+SYSeQMmlJG8S6WJLmjkFoaMVOH36Kgu5Lqgv05SSKsXRI+fR2mrt7aPS9sorSpDknuUSNAVVijZsHfUI/oLpsJzM5Nq1ixEUGIALFyo8DKYavGp1OnkVmkiU4E+03u0zmOryu++lkVwihb6Y4vy5CohOJ1rumuAvpFFRs3KJEgRZyCovK7uFykqzxwCa/DjsTpRcrEDVjXvMLdyhLqM/YyTB5gFboD5I4AdC4NxzCF/gx8BBEnvOyH+4/h0jmSQVfESgaMfUzjnwB3arVeBXZi+swYvDdZrAG/DiYODIoqFZPV3WSox8xvB0Y06oqDIS/9BiBCPh+WNh8TMEpsPns7LzRSfbrBu5cJJ97OA6PxaTZOJ8KG++hTNnVF9hr0i9b80c59yCkQqH/L6qG0XqRD1RZy1GECT1Mi6rLotznXvsXr6cmrjmjW255ZxUMiIUQ3Q4BesdUxayFg8wSBRzxZFDLoZ0Z6KoE58/OniD+HyN1vVn14Ab2vXnL+kaL5f7bGdvKCiTNPnhc5N1/fUP+lGGbONTP6JG+3sh0p3K4X0ycFGgmq2SSOwFXN8nLN/CwUB2j9Ysvvm7efChXlCkTsqhW0a+i4hk35fjtmT8VTrk73VeGeyiSJ2QSS5dPSZ2eia8xG7tEDrrHxptzc35dHMPXvJMBrsQu1NTbU/RoNvPVejzdwF9n23pi4IBw/x0+y/fhWOmBxLDmgAAAABJRU5ErkJggg=="
                        alt=""><span>US {{ $t('总资产') }}(USDT)</span>
                     <div class="eyeBox"><img
                           src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMsSURBVHgB7VdNTttAFH7PTuJKLVVuUPcGYQnZxEJEMiwgJwBOUDhByAlKTwCcILCAVGmDsyHZFd+A9AaR2BAaz+s8E9OAZ5w4bIrkT7Jsz5ufz+/fABkyZMiQ4b8GwivQbHpFc8mqmEQlwzA+TcuEEL8DRD+4G3VrNWcICyI1QSZlfczvIppbQFSZaxFiV5A43Vwrn0BKpCL43et9AUGHBFiExTAQQI00ROci2Gp5NuWtJiKUYkKCLqE4xwfzzHVXBjzUbl+XApPnYl2+2ootB/AwclzXGcBrCba8/g4KcfRSawg0FAIbG+urR0nrLzu9fQOoHl8PQzJw33VWTmFRgpJcnU0aX0RDwwCn6pT9aCwKGH7O/xn509phjQoTPJVrEMDBxpr+Iw2d4PJnb1tFjsGamyYXQh6dR2jyBQXrttXpH7NrsKhaLfsCsKHaS2roK1sJNFBqkDfGQuFGEwwDd231s3Jdp3cLz33uma+1rvqeKvJDcz+MllU+qdZgwfJ0kcpRqBqfaMt+MWyD9e44eqEgOFetlWYukmU1VbIYwVbnehfUkfeIAPyIUGTCKMqV86XGmp4XfizmzDPdtkhQ4oCCWQQnqUGLzeqj741zOTv0tStpVnlXpqAJrMCs8F1G7CBpb0mmrhh7QQ8oXRKmBG2nhDR1rCTGCOqiLcJF51dYc8e5sQ9zAs18OPdCppukeSr/jhHknEQI2sNR3Nf4XnNkAyBrLMymdxKZ1jAhieBAVQKVUYyINU7GSpmJW/9eYI83hoRD5QlTWlH7d3iWgY5KpiTIX8wZXiXjqIyiLdSM3JgI4uVK1miWRdoLGw1NdhCEe7oASi51P64P5SF1xaJhEJATRXQ41+vbMB7b/Hyf++DXnOUnC7Tbnix1BXVuFdRw18uHoMHsZkHmRS5HqmIvABpJdZSha9HYrBTAgVtNbr3ma7dYO4I80LROYfTJBB5ptNnq21Yh2NY1tdIlfOnLtVl5cW6CT0TDKqPt8WYi1JqAb0kmja9ZACFRNHbmbvknTe3IeH8y7Zvz4HU/Td5N0QruKkSm8qcJMfBH5lI3LakMGTJkyPCG8BfKSG8/5e6oxAAAAABJRU5ErkJggg=="
                           alt=""></div>
                  </div>
                  <div class="money">${{assetsObj.totalAssets}}</div>
               </div>
            </div>
            <div class="bottom">
               <div class="text-left"><span>{{ $t('可用资产') }}(USDT)</span>
                  <span class="value">${{assetsObj.usdtBalance}}</span>
               </div>
            </div>
            <div class="btnGroup">
               <div class="recharge" @click="$router.push('/exchange/channel-in')">{{ $t('recharge') }}</div>
               <div class="withdraw" @click="$router.push('/exchange/channel-out')">{{ $t('withdraw') }}</div>
            </div>
         </div>
         <div class="otherAssets">
            <div class="amountTop">
               <div class="left">
                  <!-- <img class="nation"
                     src="data:image/png;base64,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"
                     alt=""> -->
                  <span> {{ $t('总资产') }}({{currency.currency}})</span></div>
               <div class="right">{{currency.currency_symbol}}</div>
            </div>
            <div class="assetsInfo">
               <div><span>
               {{ $t('总资产') }}(USDT)</span><span>≈
               {{
                 assetsObj.totalAssets
                 ? (assetsObj.totalAssets * (currency.rate ?? 0)).toFixed(2)
                 : "0"
               }}
               </span>
               </div>
            </div>
         </div>
   <!--       <div class="otherAssets">
            <div class="amountTop">
               <div class="left"><img class="nation"
                     src="data:image/png;base64,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"
                     alt=""><span>HK {{ $t('总资产') }}(HKD)</span></div>
               <div class="right">HK$0</div>
            </div>
            <div class="assetsInfo">
               <div><span>{{ $t('总资产') }}(USDT)</span><span>≈$0</span>
               </div>
            </div>
         </div> -->
         <!--             <div class="otherAssets">
            <div class="amountTop">
               <div class="left"><img class="nation"
                     src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAmCAYAAACoPemuAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAATbSURBVHgBzZhbTFxFGMf/M2e37NZWFnrBapXT1hJQLlsM9UoKsQ9eaoMPxpcSoCb6VGl9aQQNPGI09dIW1KjQF0pbI5qYCNUHePCJmqVpI9gCu4mk0suWhbKFsufM+M2BbZZFYGEX4ZdszsycMzP//eab+WaGYUkcLwJ4HiXoKdxb2JhrUFa72NTLAP18DMwHyA5A62QIdWORsNg/bXQBY4cpUUbV9Mg3aWwM12TVfI0pobUTMDudlEYM2BATx2uBYCUJcmFp6BKyKQncZwKnNIjahSosYLEGnTOzdXOa0z00ND7nVzFYLBqyoChm81iPz/Vi+/az5YDpSUl1ut9+5wlwxsC5QLq+DozNWS1WdAHukUAJFifsi/Jjx3Ibt25d5yosfATPPL2BygSqPshH9pPrKW0gXshaLgneKqGVISZhWn0JZ/bGmzfv4auv9yJ4N4jzbdfxWkk6PqzejUuXRiAlR1KSqioRL8r3pDZb3Ey3cHyq/9Ja4unr97vOtFzFoUNPYd++R+Fwcly5EkBNdRfZTaDiYBba2//GiRM9EEIuxceiCZDP7Yr0uRltMXbSm56+Xq+vL8S1f0bx1sGcaZvQZIeJ2/5JNHx5EcGggbq6P6jcTtZLiDBCdnPIXeHc/aHk/PPaLQ859fz8zWhq+hNvvpExLYhNd6ghJdUB/y2Joeuj2F2wBRqPT8pMmDsEXhMlrEF3pTjKDpRm4ejRbDz3QhrWPmCfXZVm5qZNa/BRXSHefS8HObkbqAwJg/7nYRohV4QwUXTbH9I//qQLzz7fip9/GkBf/zCVm9ZQhVHpGzdGUFDQiorS3+Hx3IKM3//vw6QSxSsjhGHKhAKoej8fp1tewrff9WNiIlKUQHPzZeTmpaL9/KtIe1hDImZlNIKh3BIJnHRTBx6VycxMQU52Mn79bRClBzKQnGpDcrITjiQNI6MGNqZyHKnsoiFMwY6d63Hu7CAMI5Qg5w8jYdq0YmWxPeGi3t4Azn0/gJGAgf0ljyM4KhEYvoedO9fi1Dc9eHHvY9B3OHHhgh+nmwdgmpNIPAw2Q+SpIF4UqVaN7sZNTpxp+YuGswcZGQ9iW3oy+r1jeOXlNmRlbkBvzx2rAZn4kZxWIYtImNQRpdjvH6clow9ScPRfvYsffhyAIBV9faPw+u7QTNQsn1s+mFtZTEeUXkF9CmFaOfVsbxucekMWMkISy+H0Ubhs+9nlhfdYyjjzeHaKLUiKGRI4ti5G24+4WwtxDo1E8QQ6nZqVAcSJXYiEiiICKtrFLSzxSB9XUR2rCElxiVxaCWMdWEWovYxhZx3cgLiIVYRUwqyzqJXhXjlrPVsZJINPk2JbeHfRhFUBncTk1Jlz2mLWicWL6U3aSqGcPuQQxc4Jy/ktdXQYwGdYYTSOJiUKiAo0gts8FBzdWAEMDt8aIbaF8zPOlUwYr2MFFlyTy4C5RhRHls0UNnWncAT/EyqI0VYakzZeER7ChSqUq+i3nD+TMTnJuJy0owyLQV14UAPDyyXMYGz4v64GYhVHtzLMm2hRtE3yjMOhI15oL1sjmRaXQNMSpA2b4aNiopDWrSDKTWb3CqbFLMagbye5RiGP18hFLOBLOgrSoc1NFwh7KOAWWTGWMR2qU6lCMAtIa8GW3YzTzkWIbuqkE4vkX9KFiLAUaj7HAAAAAElFTkSuQmCC"
                     alt=""><span>TWD {{ $t('总资产') }}(TWD)</span></div>
               <div class="right">NT$0</div>
            </div>
            <div class="assetsInfo">
               <div><span>{{ $t('总资产') }}(USDT)</span><span>≈$0</span>
               </div>
            </div>
         </div>
       -->
      </div>
   </section>
  <section class="personal-page">
    <!-- 头部:投资组合 + 右侧菜单图标 -->
    <div class="page-header">
      <h1 class="header-title">{{ $t('投资组合') }}</h1>
      <div class="header-menu" @click="onMenuClick">
        <div class="menu-icon">
          <span class="line"></span>
          <span class="line"></span>
          <span class="line"></span>
        </div>
      </div>
    </div>
    <!-- 资产卡片 -->
    <div class="asset-card">
      <div class="asset-label-row">
        <span class="asset-label">{{ $t('资产') }}</span>
        <div class="eye-wrap" @click="assetVisible = !assetVisible">
          <Icon :name="assetVisible ? 'eye-o' : 'closed-eye'" class="eye-icon" />
        </div>
      </div>
      <div class="asset-amount">
        {{ assetVisible ? (assetsObj.totalAssets + ' USD') : '******' }}
      </div>
      <div class="asset-label-row">
        <span class="asset-label">XAUT</span>
      </div>
      <div class="asset-amount">
        {{ assetVisible ? (assetsObj.xautProfit) : '******' }}
      </div>
      <!-- 三个圆形按钮:充值、提现、兑换(模拟账户隐藏充值/提现,显示重置资金) -->
      <div class="action-btns">
        <template v-if="!isSimulation">
          <div class="action-btn" @click="$router.push('/cryptos/recharge/rechargeList?isForeign=true')">
            <div class="btn-icon">
              <img src="@/assets/image/cz.png" alt="" class="btn-icon-img" />
            </div>
            <span class="btn-text">{{ $t('充值') }}</span>
          </div>
          <div class="action-btn" @click="$router.push('/cryptos/withdraw/withdrawPage?type=exchange')">
            <div class="btn-icon">
              <img src="@/assets/image/tx.png" alt="" class="btn-icon-img" />
            </div>
            <span class="btn-text">{{ $t('提现') }}</span>
          </div>
        </template>
        <div v-if="isSimulation" class="action-btn" @click="onResetSimFunds">
          <div class="btn-icon">
            <img src="@/assets/image/dk.png" alt="" class="btn-icon-img" />
          </div>
          <span class="btn-text">{{ $t('重置') }}{{ $t('资金') }}</span>
        </div>
        <div class="action-btn" @click="$router.push('/cryptos/exchangePage')">
          <div class="btn-icon">
            <img src="@/assets/image/dh.png" alt="" class="btn-icon-img" />
          </div>
          <span class="btn-text">{{ $t('兑换') }}</span>
        </div>
      </div>
    </div>
    <!-- Tab:期权交易 / 合约交易 -->
    <div class="tabs-wrap">
      <div class="tabs-bar">
        <div class="tab-item" :class="{ active: activeTab === 0 }" @click="activeTab = 0">
          {{ $t('期权交易') }}
        </div>
        <div class="tab-item" :class="{ active: activeTab === 1 }" @click="activeTab = 1">
          {{ $t('合约交易') }}
        </div>
      </div>
      <div class="tab-content">
        <!-- 期权交易:交割持仓列表 -->
        <template v-if="activeTab === 0">
          <delivery-hold-list v-if="optionsPositionList.length" :list-data="optionsPositionList" :price="0" />
          <div v-else class="empty-state">
            <img src="@/assets/image/kong.png" alt="" class="empty-icon" />
            <div class="empty-text">{{ $t('暂无数据') }}</div>
          </div>
        </template>
        <!-- 合约交易:永续持仓列表(平仓成功后刷新列表) -->
        <template v-else>
          <perpetual-position-list v-if="contractPositionList.length" :list-data="contractPositionList"
            @sell="fetchContractHold" />
          <div v-else class="empty-state">
            <img src="@/assets/image/kong.png" alt="" class="empty-icon" />
            <div class="empty-text">{{ $t('暂无数据') }}</div>
          </div>
        </template>
      </div>
    </div>
  </section>
</template>
<script setup>
   import {
      ref,
      onMounted,
      onBeforeUnmount,
      nextTick,
      computed
   } from "vue";
   import {
      useUserStore
   } from "@/store/user";
   import {
      useRoute,
      useRouter
   } from "vue-router";
   import {
      useI18n
   } from "vue-i18n";
   import ExNav from "@/components/trade/ex-nav/index.vue";
   import useClipboard from "vue-clipboard3";
   import {
      showToast
   } from "vant";
   import {
      watch
   } from "vue";
   import {
      contractOrder
   } from "@/service/trade.api";
   import TradeApi from "@/service/trading.js";
   import {
      _assetsTradeTop
   } from "@/service/user.api";
   import dayjs from "dayjs";
   import {
      themeStore
   } from "@/store/theme";
   import {
      useStore
   } from 'vuex';
import { ref, computed, onMounted, watch } from 'vue'
import { useRouter } from 'vue-router'
import { useStore } from 'vuex'
import { Icon } from 'vant'
import { showToast } from 'vant'
import { useI18n } from 'vue-i18n'
import { useUserStore } from '@/store/user'
import { _assetsTradeTop, _resetSimFunds } from '@/service/user.api'
import { contractOrder, _futrueOrderList } from '@/service/trade.api'
import PerpetualPositionList from '@/components/Transform/perpetual-position-list/index.vue'
import DeliveryHoldList from '@/components/Transform/deliveryContract/hold.vue'
   const thStore = themeStore();
   const store = useStore()
   const {
      t
   } = useI18n();
   const {
      toClipboard
   } = useClipboard();
   const router = useRouter();
   const route = useRoute();
const router = useRouter()
const store = useStore()
const userStore = useUserStore()
const { t } = useI18n()
   const isLoading = ref(false);
   const assetsObj = ref({})
   const assets = ref({})
   const symbolType = ref("indices"); //默认etf
   const currency = ref({});
   const getCurrency = async () => {
      _getExchangeRate().then((res) => {
            currency.value = res;
         }).catch((err) => Promise.reject(err));
   };
const isSimulation = computed(() => userStore.userInfo?.accountType === 1)
   onMounted(async () => {
      await store.dispatch('home/SET_CURRENCY')
      currency.value = store.state.home.currency
      assetsTradeTopFn();
   });
const assetVisible = ref(true)
const activeTab = ref(0) // 0 期权交易(交割持仓) 1 合约交易(永续持仓)
const assetsObj = ref({})
const symbolType = ref('indices')
/** 期权交易(交割)持仓、合约交易(永续)持仓分开存,避免 tab 切换时互相覆盖 */
const optionsPositionList = ref([])
const contractPositionList = ref([])
const positionLoading = ref(false)
function formatAmount(v) {
  if (v == null || v === '') return '0.0000'
  const n = Number(v)
  return isNaN(n) ? '0.0000' : n.toFixed(4)
}
function onMenuClick() {
  router.push('/my/index')
}
   watch(symbolType, (newVal, oldVal) => {
      assetsTradeTopFn()
   });
/** 刷新资产与持仓数据 */
function refreshAssetData() {
  assetsTradeTopFn()
  fetchPositionList()
}
/** 模拟账户:重置资金,成功后刷新资产 */
function onResetSimFunds() {
  _resetSimFunds()
    .then(() => {
      showToast(t('操作成功') || '操作成功')
      refreshAssetData()
    })
    .catch(() => { })
}
const assetsTradeTopFn = () => {
  _assetsTradeTop({
    symbolType: symbolType.value,
    tradeType: symbolType.value === 'cryptos' ? 'contract' : 'exchange'
  }).then((res) => {
    assetsObj.value = res || {}
  }).catch(() => { })
}
   const assetsTradeTopFn = (tradeType) => {
      console.log(symbolType.value)
      isLoading.value = true;
      _assetsTradeTop({
         symbolType: symbolType.value,
         tradeType: symbolType.value == 'cryptos' ? 'contract' : 'exchange'
      }).then(res => {
         assetsObj.value = res
      }).catch((e) => {});
   }
/** 期权交易:交割持仓(与 /trade/options 交割一致) */
function fetchOptionsHold() {
  positionLoading.value = true
  _futrueOrderList('', 'orders', 1, '')
    .then((data) => {
      optionsPositionList.value = Array.isArray(data) ? data : []
    })
    .catch(() => {
      optionsPositionList.value = []
    })
    .finally(() => {
      positionLoading.value = false
    })
}
/** 合约交易:永续持仓(与 /trade/options 永续一致) */
function fetchContractHold() {
  positionLoading.value = true
  contractOrder({
    // symbol: '',
    type: 'orders',
    page_no: 1,
    // symbolType: 'cryptos'
  })
    .then((data) => {
      contractPositionList.value = Array.isArray(data) ? data : []
    })
    .catch(() => {
      contractPositionList.value = []
    })
    .finally(() => {
      positionLoading.value = false
    })
}
function fetchPositionList() {
  if (activeTab.value === 0) {
    fetchOptionsHold()
  } else {
    fetchContractHold()
  }
}
onMounted(async () => {
  await store.dispatch('home/SET_CURRENCY')
  assetsTradeTopFn()
  fetchPositionList()
})
watch(symbolType, () => {
  assetsTradeTopFn()
})
watch(activeTab, () => {
  fetchPositionList()
})
</script>
<style lang="scss">
   .my-index {
      background-color: var(--main3_background);
      padding-bottom: calc(80px + constant(safe-area-inset-bottom)) !important;
      padding-bottom: calc(80px + env(safe-area-inset-bottom)) !important
   }
   .my-index .assets {
      padding: 10px;
      margin-top: 10px
   }
<style lang="scss" scoped>
@import '@/assets/css/variable.scss';
   .my-index .assets .top {
      display: flex;
      justify-content: space-between;
      align-items: center
   }
.personal-page {
  min-height: 100vh;
  background: $main_background;
  padding-bottom: calc(80px + constant(safe-area-inset-bottom));
  padding-bottom: calc(80px + env(safe-area-inset-bottom));
  box-sizing: border-box;
}
   .my-index .assets .top .title {
      font-size: 20px;
      font-weight: 700;
      color: var(--text_color);
      letter-spacing: -0.3px;
   }
.page-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 8.8rem;
  padding: 0 2.4rem;
  background: #fff;
  box-sizing: border-box;
   .my-index .currentAssets {
      background-color: var(--inverse);
      border-radius: 16px;
      margin-top: 16px;
      box-shadow: 0 2px 12px rgba(146, 209, 255, 0.08);
      border: 1px solid rgba(118, 128, 143, 0.1);
      padding: 24px;
      display: flex;
      flex-direction: column;
      transition: all 0.3s ease;
   }
  .header-title {
    font-size: 3.4rem;
    font-weight: 700;
    color: $text_color;
    margin: 0;
  }
   .my-index .currentAssets:hover {
      box-shadow: 0 4px 20px rgba(146, 209, 255, 0.12);
   }
  .header-menu {
    width: 4.4rem;
    height: 4.4rem;
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
  }
   .my-index .currentAssets .top {
      display: flex;
      justify-content: space-between;
      align-items: center
   }
  .menu-icon {
    width: 4rem;
    height: 4rem;
    border: 0.15rem solid $text_color1;
    border-radius: 50%;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 0.4rem;
   .my-index .currentAssets .top .amount {
      display: flex;
      flex-direction: column
   }
    .line {
      display: block;
      width: 1.6rem;
      height: 0.12rem;
      background: $text_color1;
      border-radius: 0.06rem;
    }
  }
}
   .my-index .currentAssets .top .amount .amountTop {
      display: flex;
      align-items: center;
      gap: 8px;
      font-size: 16px;
      font-weight: 600;
      color: var(--text_color);
   }
.asset-card {
  margin: 2rem 2.4rem;
  padding: 4rem 2rem;
  background: #fff;
  border-radius: 1.2rem;
  box-shadow: 0rem 0.8rem 3.2rem 0rem rgba(0, 0, 0, 0.13);
  border: 1 solid $border_color;
  box-sizing: border-box;
}
   .my-index .currentAssets .top .amount .amountTop .nation {
      width: 19px;
      height: 19px;
      border-radius: 50%
   }
.asset-label-row {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.6rem;
  margin-bottom: 1.2rem;
   .my-index .currentAssets .top .amount .amountTop .eye {
      width: 19px
   }
  .asset-label {
    font-size: 2.5rem;
    color: $text_color1;
  }
   .my-index .currentAssets .top .amount .money {
      font-size: 32px;
      font-weight: 700;
      line-height: 48px;
      color: var(--text_color);
      letter-spacing: -0.5px;
      margin-top: 8px;
   }
  .eye-wrap {
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
  }
   .my-index .currentAssets .bottom {
      display: grid;
      grid-template-columns: repeat(2, minmax(0, 1fr));
      margin-top: 10px;
      padding-bottom: 10px;
      border-bottom: 1px solid var(--sec-border)
   }
  .eye-icon {
    font-size: 3.2rem;
    color: $text_color1;
  }
}
   .my-index .currentAssets .bottom>div {
      display: flex;
      flex-direction: column;
      font-size: 12px;
      color: var(--tips-color);
      line-height: 18px
   }
.asset-amount {
  font-size: 3.4rem;
  font-weight: 700;
  color: $text_color;
  text-align: center;
  margin-bottom: 2.4rem;
  letter-spacing: -0.02em;
}
   .my-index .currentAssets .bottom>div .value {
      font-size: 16px;
      line-height: 24px;
      font-weight: 600;
      color: var(--text_color);
      margin-top: 4px;
   }
.action-btns {
  display: flex;
  justify-content: space-around;
  align-items: center;
  padding-top: 1rem;
}
   .my-index .currentAssets .btnGroup {
      display: grid;
      grid-template-columns: repeat(2, minmax(0, 1fr));
      gap: 12px;
      margin: 20px 0 0
   }
.action-btn {
  display: flex;
  flex-direction: column;
  align-items: center;
  cursor: pointer;
   .my-index .currentAssets .btnGroup div {
      display: flex;
      align-items: center;
      justify-content: center;
      color: #fff;
      font-size: 16px;
      font-weight: 600;
      border-radius: 12px;
      height: 48px;
      cursor: pointer;
      transition: all 0.3s ease;
      border: none;
   }
  .btn-icon {
    width: 5rem;
    height: 5rem;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    margin-bottom: 0.8rem;
    overflow: hidden;
  }
   .my-index .currentAssets .btnGroup div.recharge {
      background: linear-gradient(135deg, #92D1FF 0%, #7BB8FF 100%);
      box-shadow: 0 4px 12px rgba(146, 209, 255, 0.3);
   }
  .btn-icon-img {
    width: 100%;
    height: 100%;
    object-fit: contain;
  }
   .my-index .currentAssets .btnGroup div.recharge:hover {
      background: linear-gradient(135deg, #7BB8FF 0%, #6BA8FF 100%);
      box-shadow: 0 6px 16px rgba(146, 209, 255, 0.4);
      transform: translateY(-1px);
   }
  .btn-text {
    font-size: 2.6rem;
    color: $text_color;
  }
}
   .my-index .currentAssets .btnGroup div.recharge:active {
      transform: translateY(0);
   }
.tabs-wrap {
  margin: 0 2.4rem;
  background: #fff;
  border-radius: 1.2rem;
  overflow: hidden;
}
   .my-index .currentAssets .btnGroup div.withdraw {
      background: linear-gradient(135deg, #F2495E 0%, #FF6B7A 100%);
      box-shadow: 0 4px 12px rgba(242, 73, 94, 0.3);
   }
.tabs-bar {
  display: flex;
  padding: 0.6rem;
  gap: 0.6rem;
  background: #fff;
  box-shadow: 0 0.2rem 0.8rem rgba(0, 0, 0, 0.06);
  border: 0.1rem solid $border_color;
  border-radius: 1rem;
   .my-index .currentAssets .btnGroup div.withdraw:hover {
      background: linear-gradient(135deg, #FF6B7A 0%, #FF8A95 100%);
      box-shadow: 0 6px 16px rgba(242, 73, 94, 0.4);
      transform: translateY(-1px);
   }
  .tab-item {
    flex: 1;
    text-align: center;
    padding: 1.4rem 0.8rem;
    font-size: 2.8rem;
    color: $text_color1;
    border-radius: 0.8rem;
    transition: all 0.2s ease;
    cursor: pointer;
   .my-index .currentAssets .btnGroup div.withdraw:active {
      transform: translateY(0);
   }
    &.active {
      background: linear-gradient(135deg, #92D1FF 0%, #7BB8FF 100%);
      color: #fff;
      font-weight: 500;
    }
  }
}
   .my-index .otherAssets {
      padding: 20px;
      margin-top: 16px;
      border-radius: 16px;
      background: var(--inverse);
      border: 1px solid rgba(118, 128, 143, 0.1);
      box-shadow: 0 2px 12px rgba(146, 209, 255, 0.08);
      display: flex;
      flex-direction: column;
      transition: all 0.3s ease;
   }
.tab-content {
  min-height: 24rem;
  padding: 2rem 0;
}
   .my-index .otherAssets:hover {
      box-shadow: 0 4px 20px rgba(146, 209, 255, 0.12);
   }
.empty-state {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 4rem 2rem;
   .my-index .otherAssets .amountTop {
      display: flex;
      justify-content: space-between;
      align-items: center
   }
  .empty-icon {
    width: 12rem;
    margin-bottom: 1.6rem;
    opacity: 0.5;
  }
   .my-index .otherAssets .amountTop .left {
      display: flex;
      align-items: center;
      gap: 5px;
      font-size: 13px;
      font-weight: 600
   }
   .my-index .otherAssets .amountTop .left .nation {
      width: 19px;
      height: 19px;
      border-radius: 50%
   }
   .my-index .otherAssets .amountTop .right {
      font-size: 16px;
      font-weight: 600
   }
   .my-index .otherAssets .assetsInfo {
      display: flex;
      flex-direction: column;
      padding: 10px 0
   }
   .my-index .otherAssets .assetsInfo div {
      display: flex;
      justify-content: space-between;
      align-items: center;
      font-size: 12px;
      color: var(--tips-color)
   }
   .my-index .otherAssets .assetsInfo div span:last-child {
      font-size: 13px
   }
   .eyeBox {
      width: 17px;
      height: 17px
   }
   .eyeBox img {
      width: 100%;
      height: 100%
   }
</style>
  .empty-text {
    font-size: 2.8rem;
    color: $text_color1;
  }
}
</style>