From 349c48e168b9f2580334422228acde7d1b21bede Mon Sep 17 00:00:00 2001
From: 李凌 <344137771@qq.com>
Date: Fri, 05 Jun 2026 11:19:15 +0800
Subject: [PATCH] 1
---
src/views/my/assets.vue | 172 ++++++++++++++++++++++++++++++++++++++++++---------------
1 files changed, 127 insertions(+), 45 deletions(-)
diff --git a/src/views/my/assets.vue b/src/views/my/assets.vue
index 7671cd7..a755d01 100644
--- a/src/views/my/assets.vue
+++ b/src/views/my/assets.vue
@@ -2,8 +2,7 @@
<div class="assets">
<div class="assets_title">{{ $t('总资产估值') }}</div>
<div class="assets_money font-bold mt-5 flex justify-start items-end">
- {{ currency.currency_symbol }}{{ forexAssets?.money_contract ?
- (forexAssets?.money_contract * (currency.rate ?? 0)).toFixed(2) : '0.00' }}
+ {{ currency.currency_symbol }}{{ formatWithCommas(totalAssetsFiat) }}
<div class="pricing_jj ml-5">
{{ pricing }}
@@ -14,12 +13,16 @@
</van-dropdown-item>
</van-dropdown-menu>
</div>
- <div class="assets_revenue mt-5">
- <span>{{ $t('ProfitDay') }}</span>
- {{ currency.currency_symbol }}{{ forexAssets?.money_contract_profit_today ?
- (forexAssets?.money_contract_profit_today * (currency.rate ?? 0)).toFixed(2) :
- '--' }}
- </div>
+ <!-- <div class="assets_revenue mt-5">
+ <span>{{ $t('当日') }}</span>
+ {{ currency.currency_symbol }}
+ <span
+ :style="forexAssets?.money_contract_profit_today > 0 ? 'color:green' : forexAssets?.money_contract_profit_today < 0 ? 'color:red' : ''">
+ {{ forexAssets?.money_contract_profit_today ?
+ (forexAssets?.money_contract_profit_today * (currency.rate ?? 0)).toFixed(2) :
+ '--' }}
+ </span>
+ </div> -->
<div class="tabbers flex justify-between mt-20 pl-1 pr-1">
<div class="item" v-for="item in tabList" :key="item.key" @click="toPage(item.path)">
@@ -30,23 +33,22 @@
<van-collapse v-model="activeNames" class="mt-10">
<van-collapse-item :title="$t('分布')" name="1">
- <!-- <div class="divider"></div> -->
- <div class="percentage flex just-between items-center">
- <div :style="`width:${assetObj.capital / (assetObj.capital + assetObj.contract) * 100}%`">
- </div>
- <div class="flex-1">
- </div>
+ <div class="distribution-bar">
+ <div class="bar-segment bar-capital" :style="{ width: capitalPercent + '%' }"></div>
+ <div class="bar-segment bar-contract" :style="{ width: contractPercent + '%' }"></div>
</div>
- <div class="assets_item flex justify-start items-center mt-14 font-bold">
+ <div class="assets_item flex justify-start items-center mt-14 font-bold" @click="toPage('/cryptos/funds?tab=1')">
<div class="icon" style="background-color: #8A90FE;"></div>
<span class="ml-5 flex-1">{{ $t('资金账户') }}</span>
- <span class="mr-5">{{ assetObj.capital }}</span>
+ <span class="distribution-percent">{{ capitalPercentText }}</span>
+ <span class="mr-5">{{ formatAssetAmount(assetObj.capital) }}</span>
<van-icon name="arrow" />
</div>
- <div class="assets_item flex justify-start items-center mt-14 font-bold">
+ <div class="assets_item flex justify-start items-center mt-14 font-bold" @click="toPage('/cryptos/funds?tab=2')">
<div class="icon" style="background-color: #f7b600;"></div>
<span class="ml-5 flex-1">{{ $t('交易账户') }}</span>
- <span class="mr-5">{{ assetObj.contract }}</span>
+ <span class="distribution-percent">{{ contractPercentText }}</span>
+ <span class="mr-5">{{ formatAssetAmount(assetObj.contract) }}</span>
<van-icon name="arrow" />
</div>
</van-collapse-item>
@@ -61,26 +63,15 @@
:key="item.id">
<img :src="`${HOST_URL}/symbol/${item.symbol_data}.png`" />
- <span class="ml-5 flex-1">{{ item.symbol_data.toUpperCase() }}/USDT</span>
+ <span class="ml-5 flex-1">{{ arrGk((item.name || '').toUpperCase())[0] }}</span>
<div class="mr-3">
- <!-- <div class="text-right">0</div>
- <div class="assets_item_light text-right">0.00</div> -->
- <div class="text-right" v-if="item.symbol == 'btc'">
- {{ item.volume ? Number(item.volume).toFixed(8) : '0.0' }}
- </div>
- <div class="text-right" v-else-if="item.symbol == 'eth'">
- {{ item.volume ? Number(item.volume).toFixed(8) : '0.0' }}
- </div>
- <div class="text-right" v-else-if="item.symbol == 'usdt'">
- {{ item.volume ? Number(item.volume).toFixed(2) : '0.0' }}
- </div>
- <div class="text-right" v-else>
- {{ item.volume ? Number(item.volume).toFixed(8) : '0.0' }}
+ <div class="text-right">
+ {{ item.volume ? formatWithCommas(Number(item.volume).toFixed(2)) : '0.0' }}
</div>
<div class="assets_item_light text-right">
≈{{ currency.currency_symbol }}
- {{ item.usdt ? Number(item.usdt).toFixed(2) : '0.0' }}
+ {{ item.usdt ? formatWithCommas(Number(item.usdt).toFixed(2)) : '0.0' }}
</div>
</div>
</div>
@@ -88,7 +79,7 @@
</template>
<script setup>
-import { ref } from "vue";
+import { ref, computed } from "vue";
import { useI18n } from "vue-i18n";
import { useRouter } from 'vue-router';
import { _getExchangeRate } from '@/service/cryptos.api'
@@ -102,6 +93,7 @@
import { _getassets } from "@/service/user.api.js";
import { _getAllWallet } from '@/service/fund.api';
import { HOST_URL } from '@/config';
+import { formatWithCommas } from '@/utils';
const router = useRouter()
const { t } = useI18n()
@@ -110,10 +102,18 @@
const tabList = [
{ key: 1, name: t('充值'), icon: new URL('@/assets/imgs/assets/chonbi.png', import.meta.url), path: '/cryptos/recharge/rechargeList?isForeign=true' },
- { key: 2, name: t('提现'), icon: new URL('@/assets/imgs/assets/tibi.png', import.meta.url), path: '/exchange/withdraw-usdt' },
+ { key: 2, name: t('提现'), icon: new URL('@/assets/imgs/assets/tibi.png', import.meta.url), path: '/cryptos/Withdraw/withdrawPage' },
{ key: 3, name: t('划转'), icon: new URL('@/assets/imgs/assets/huazhuan.png', import.meta.url), path: '/my/transfer' },
+ { key: 5, name: t('闪兑'), icon: new URL('@/assets/imgs/assets/sd.png', import.meta.url), path: '/cryptos/exchangePage' },
{ key: 4, name: t('账单'), icon: new URL('@/assets/imgs/assets/zd.png', import.meta.url), path: '/cryptos/accountChange' },
]
+
+// 处理分隔符
+const arrGk = (str) => {
+ if (!str) return ['--'];
+ let arr = str.split('/');
+ return arr;
+}
// 计价切换
const pricing = ref('')
@@ -157,10 +157,37 @@
})
}
const assetObj = ref({})
-const getassets = () => { // 获取资产
+const getassets = () => {
_getassets().then(res => {
- assetObj.value = res
+ assetObj.value = res || {}
})
+}
+
+const capitalAmount = computed(() => Number(assetObj.value.capital) || 0)
+const contractAmount = computed(() => Number(assetObj.value.contract) || 0)
+const totalAssetsUsdt = computed(() => capitalAmount.value + contractAmount.value)
+
+const capitalPercent = computed(() => {
+ if (totalAssetsUsdt.value <= 0) return 0
+ return Math.round((capitalAmount.value / totalAssetsUsdt.value) * 1000) / 10
+})
+
+const contractPercent = computed(() => {
+ if (totalAssetsUsdt.value <= 0) return 0
+ return Math.round((contractAmount.value / totalAssetsUsdt.value) * 1000) / 10
+})
+
+const capitalPercentText = computed(() => `${capitalPercent.value.toFixed(1)}%`)
+const contractPercentText = computed(() => `${contractPercent.value.toFixed(1)}%`)
+
+const totalAssetsFiat = computed(() => {
+ const rate = Number(currency.value.rate) || 0
+ return (totalAssetsUsdt.value * rate).toFixed(2)
+})
+
+const formatAssetAmount = (val) => {
+ const num = Number(val) || 0
+ return formatWithCommas(num.toFixed(2))
}
// 获取资产列表
@@ -183,12 +210,16 @@
<style lang="scss" scoped>
+@import '@/assets/theme/index.scss';
+
.assets {
min-height: 100vh;
background: $mainbgWhiteColor;
padding: 2.8rem 2rem 10rem 2rem;
- $assets_title_color: #9a9a9a;
- color: $assets_title_color;
+
+ @include themify() {
+ color: themed("text_color2");
+ }
:deep(.van-cell) {
padding-left: 0;
@@ -214,8 +245,11 @@
}
.assets_money {
- color: $text_color4;
font-size: 3.4rem;
+
+ @include themify() {
+ color: themed("text_color");
+ }
.pricing_jj {
font-size: 1.6rem;
@@ -247,13 +281,19 @@
.assets_revenue {
font-size: 2rem;
- color: #646464;
font-weight: 600;
+ @include themify() {
+ color: themed("text_color1");
+ }
+
span {
- color: #6e6e6e;
text-decoration: underline dotted;
font-weight: 400;
+
+ @include themify() {
+ color: themed("text_color1");
+ }
}
}
@@ -262,7 +302,10 @@
$item_width: 8.3rem;
width: $item_width;
font-size: 1.8rem;
- color: $text_color4;
+
+ @include themify() {
+ color: themed("text_color2");
+ }
img {
height: $item_width;
@@ -276,6 +319,39 @@
// border-radius: 0.5rem;
// background: $bg_yellow;
// }
+
+ .distribution-bar {
+ display: flex;
+ width: 100%;
+ height: 1rem;
+ border-radius: 0.5rem;
+ overflow: hidden;
+ gap: 0.2rem;
+ }
+
+ .bar-segment {
+ height: 100%;
+ min-width: 0;
+ transition: width 0.25s ease;
+ }
+
+ .bar-capital {
+ background: #8A90FE;
+ }
+
+ .bar-contract {
+ background: $bg_yellow;
+ }
+
+ .distribution-percent {
+ margin-right: 1.2rem;
+ font-size: 1.8rem;
+ font-weight: 400;
+
+ @include themify() {
+ color: themed("text_color1");
+ }
+ }
.percentage {
div {
@@ -294,8 +370,11 @@
}
.assets_item {
- color: $text_color4;
font-size: 2.1rem;
+
+ @include themify() {
+ color: themed("text_color2");
+ }
.icon {
width: 1.8rem;
@@ -311,8 +390,11 @@
}
.assets_item_light {
- color: #9b9b9b;
font-weight: 300;
+
+ @include themify() {
+ color: themed("text_color2");
+ }
}
}
}
--
Gitblit v1.9.3