From 0dbc7465447164fef24327b5d494870832d798dd Mon Sep 17 00:00:00 2001
From: 李 <344137771@qq.com>
Date: Tue, 26 May 2026 11:15:18 +0800
Subject: [PATCH] 1
---
src/views/personal/index.vue | 726 ++++++++++++++++++++++++++++---------------------------
1 files changed, 375 insertions(+), 351 deletions(-)
diff --git a/src/views/personal/index.vue b/src/views/personal/index.vue
index 66bb85e..60f7376 100644
--- a/src/views/personal/index.vue
+++ b/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,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"
- 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>
\ No newline at end of file
+ .empty-text {
+ font-size: 2.8rem;
+ color: $text_color1;
+ }
+}
+</style>
--
Gitblit v1.9.3