10.10综合交易所原始源码_移动端
1
2026-05-26 0dbc7465447164fef24327b5d494870832d798dd
src/views/personal/index.vue
@@ -1,376 +1,414 @@
<template>
   <section class="my-index">
      <div class="assets">
         <div class="top flex between">
            <div class="title">{{ $t('my') }}{{ $t('资产') }}</div>
            <van-icon name="service-o" size="26" @click="$router.push('/customerService')" />
         </div>
         <div class="currentAssets">
            <div class="top">
               <div class="amount">
                  <div class="amountTop"><img class="nation"
                        src="data:image/png;base64,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"
                        alt=""><span>US {{ $t('总资产') }}(USD)</span>
                     <div class="eyeBox" @click="showAssets = !showAssets">
                        <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">${{ showAssets ? formatNumberWithComma(assetsObj.totalAssets) : '******' }}
                  </div>
               </div>
            </div>
            <div class="bottom">
               <div class="text-left"><span>{{ $t('可用资产') }}(USD)</span>
                  <span class="value">${{ showAssets ? formatNumberWithComma(assetsObj.usdtBalance) : '******'
                  }}</span>
               </div>
            </div>
            <div class="btnGroup">
               <div class="recharge" @click="$router.push('/exchange/channel-in')">{{ $t('recharge') }}</div>
               <!-- <div class="recharge" @click="$router.push('/customerService')">{{ $t('recharge') }}</div> -->
               <div class="withdraw" @click="$router.push('/exchange/channel-out')">{{ $t('withdraw') }}</div>
            </div>
         </div>
  <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="otherAssets" v-if="false">
            <div class="amountTop">
               <div class="left">
                  <!-- <img class="nation"
                     src="data:image/png;base64,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"
                     alt=""> -->
                  <span>{{ $t(currency.name || '') }} {{ $t('总资产') }}({{ formatNumberWithComma(currency.currency)
                  }})</span>
               </div>
               <div class="right">{{ currency.currency_symbol }}</div>
            </div>
            <div class="assetsInfo">
               <div><span>
                     {{ $t('总资产') }}</span><span>≈
                     {{
                        showAssets ?
                           (assetsObj.totalAssets
                              ? formatNumberWithComma(assetsObj.totalAssets * (currency.rate ?? 0))
                              : "0") : '******'
                     }}
                  </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="otherAssets" v-for="(item,index) in currencyList" :key="index">
            <div class="amountTop">
               <div class="left">
                  <span>{{ $t(item.name || '') }} {{ $t('总资产') }}({{ formatNumberWithComma(item.currency)
                  }})</span>
               </div>
               <div class="right">{{ item.currency_symbol }}</div>
            </div>
            <div class="assetsInfo">
               <div><span>
                     {{ $t('总资产') }}</span><span>≈
                     {{
                        showAssets ?
                           (assetsObj.totalAssets
                              ? formatNumberWithComma(assetsObj.totalAssets * (item.rate ?? 0))
                              : "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>
      <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, _exchangerateuserconfiglist
} from "@/service/user.api";
import dayjs from "dayjs";
import {
   themeStore
} from "@/store/theme";
import {
   useStore
} from 'vuex';
import { formatNumberWithComma } from '@/utils/utis';
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 showAssets = ref(true) // 是否显示资产
const thStore = themeStore();
const router = useRouter()
const store = useStore()
const {
   t
} = useI18n();
const {
   toClipboard
} = useClipboard();
const router = useRouter();
const route = useRoute();
const userStore = useUserStore()
const { t } = useI18n()
const isLoading = ref(false);
const isSimulation = computed(() => userStore.userInfo?.accountType === 1)
const assetVisible = ref(true)
const activeTab = ref(0) // 0 期权交易(交割持仓) 1 合约交易(永续持仓)
const assetsObj = ref({})
const assets = ref({})
const symbolType = ref("indices"); //默认etf
const currency = ref({});
const currencyList = ref([]);
const getCurrency = async () => {
   _exchangerateuserconfiglist().then((res) => {
      currencyList.value = res;
   }).catch((err) => Promise.reject(err));
};
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')
}
/** 刷新资产与持仓数据 */
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(() => { })
}
/** 期权交易:交割持仓(与 /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')
   // currency.value = store.state.home.currency
   assetsTradeTopFn();
   getCurrency()
});
  await store.dispatch('home/SET_CURRENCY')
  assetsTradeTopFn()
  fetchPositionList()
})
watch(symbolType, (newVal, oldVal) => {
   assetsTradeTopFn()
});
watch(symbolType, () => {
  assetsTradeTopFn()
})
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) => { });
}
watch(activeTab, () => {
  fetchPositionList()
})
</script>
<style>
.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
<style lang="scss" scoped>
@import '@/assets/css/variable.scss';
.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 {
   padding: 10px;
   margin-top: 10px
.page-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 8.8rem;
  padding: 0 2.4rem;
  background: #fff;
  box-sizing: border-box;
  .header-title {
    font-size: 3.4rem;
    font-weight: 700;
    color: $text_color;
    margin: 0;
  }
  .header-menu {
    width: 4.4rem;
    height: 4.4rem;
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
  }
  .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;
    .line {
      display: block;
      width: 1.6rem;
      height: 0.12rem;
      background: $text_color1;
      border-radius: 0.06rem;
    }
  }
}
.my-index .assets .top {
   display: flex;
   justify-content: space-between;
   align-items: center
.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 .assets .top .title {
   font-size: 18px;
   font-weight: 600
.asset-label-row {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.6rem;
  margin-bottom: 1.2rem;
  .asset-label {
    font-size: 2.5rem;
    color: $text_color1;
  }
  .eye-wrap {
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
  }
  .eye-icon {
    font-size: 3.2rem;
    color: $text_color1;
  }
}
.my-index .currentAssets {
   background-color: var(--inverse);
   border-radius: 4px;
   margin-top: 5px;
   box-shadow: rgba(0, 0, 0, .06) 0 8px 24px;
   padding: 10px;
   display: flex;
   flex-direction: column
.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 .top {
   display: flex;
   justify-content: space-between;
   align-items: center
.action-btns {
  display: flex;
  justify-content: space-around;
  align-items: center;
  padding-top: 1rem;
}
.my-index .currentAssets .top .amount {
   display: flex;
   flex-direction: column
.action-btn {
  display: flex;
  flex-direction: column;
  align-items: center;
  cursor: pointer;
  .btn-icon {
    width: 5rem;
    height: 5rem;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    margin-bottom: 0.8rem;
    overflow: hidden;
  }
  .btn-icon-img {
    width: 100%;
    height: 100%;
    object-fit: contain;
  }
  .btn-text {
    font-size: 2.6rem;
    color: $text_color;
  }
}
.my-index .currentAssets .top .amount .amountTop {
   display: flex;
   align-items: center;
   gap: 5px;
   font-size: 16px;
   font-weight: 600
.tabs-wrap {
  margin: 0 2.4rem;
  background: #fff;
  border-radius: 1.2rem;
  overflow: hidden;
}
.my-index .currentAssets .top .amount .amountTop .nation {
   width: 19px;
   height: 19px;
   border-radius: 50%
.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;
  .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;
    &.active {
      background: linear-gradient(135deg, #92D1FF 0%, #7BB8FF 100%);
      color: #fff;
      font-weight: 500;
    }
  }
}
.my-index .currentAssets .top .amount .amountTop .eye {
   width: 19px
.tab-content {
  min-height: 24rem;
  padding: 2rem 0;
}
.my-index .currentAssets .top .amount .money {
   font-size: 28px;
   font-weight: 600;
   line-height: 42px
}
.empty-state {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 4rem 2rem;
.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)
}
  .empty-icon {
    width: 12rem;
    margin-bottom: 1.6rem;
    opacity: 0.5;
  }
.my-index .currentAssets .bottom>div {
   display: flex;
   flex-direction: column;
   font-size: 12px;
   color: var(--tips-color);
   line-height: 18px
  .empty-text {
    font-size: 2.8rem;
    color: $text_color1;
  }
}
.my-index .currentAssets .bottom>div .value {
   font-size: 15px;
   line-height: 22px
}
.my-index .currentAssets .btnGroup {
   display: grid;
   grid-template-columns: repeat(2, minmax(0, 1fr));
   gap: 15px;
   margin: 10px 0
}
.my-index .currentAssets .btnGroup div {
   display: flex;
   align-items: center;
   justify-content: center;
   color: #fff;
   box-shadow: 0 min(.8vw, 3.4px) min(.266667vw, 1.133333px) max(-.533333vw, -2.266667px) rgba(0, 0, 0, .2), 0 min(.533333vw, 2.266667px) min(.533333vw, 2.266667px) 0 rgba(0, 0, 0, .14), 0 min(.266667vw, 1.133333px) min(1.333333vw, 5.666667px) 0 rgba(0, 0, 0, .12);
   font-size: 16px;
   font-weight: 600;
   border-radius: 4px;
   height: 44px
}
.my-index .currentAssets .btnGroup div.recharge {
   background-color: #00ae8c
}
.my-index .currentAssets .btnGroup div.withdraw {
   background-color: #f2495e
}
.my-index .otherAssets {
   padding: 10px;
   border-bottom: 1px solid var(--sec-border);
   display: flex;
   flex-direction: column
}
.my-index .otherAssets .amountTop {
   display: flex;
   justify-content: space-between;
   align-items: center
}
.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>
</style>