diff --git a/package.json b/package.json index d5b9ffe..2bfb695 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "@elysiajs/eden": "^1.4.5", "@ionic/vue": "^8.7.11", "@ionic/vue-router": "^8.7.11", - "@riwa/api-types": "http://192.168.1.27:9527/api/riwa-api-types-0.0.61.tgz", + "@riwa/api-types": "http://192.168.1.27:9527/api/riwa-api-types-0.0.63.tgz", "@tailwindcss/vite": "^4.1.18", "@vee-validate/yup": "^4.15.1", "@vueuse/core": "^14.1.0", @@ -60,6 +60,7 @@ "@iconify-json/icon-park-outline": "^1.2.4", "@iconify-json/material-icon-theme": "^1.2.44", "@iconify-json/material-symbols": "^1.2.50", + "@iconify-json/solar": "^1.2.5", "@iconify-json/tdesign": "^1.2.11", "@iconify/vue": "^5.0.0", "@ionic/cli": "^7.2.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 90b2429..02479f3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -57,8 +57,8 @@ importers: specifier: ^8.7.11 version: 8.7.11(@stencil/core@4.39.0)(vue-router@4.6.3(vue@3.5.25(typescript@5.9.3)))(vue@3.5.25(typescript@5.9.3)) '@riwa/api-types': - specifier: http://192.168.1.27:9527/api/riwa-api-types-0.0.61.tgz - version: http://192.168.1.27:9527/api/riwa-api-types-0.0.61.tgz(@elysiajs/eden@1.4.5(elysia@1.4.18(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3))) + specifier: http://192.168.1.27:9527/api/riwa-api-types-0.0.63.tgz + version: http://192.168.1.27:9527/api/riwa-api-types-0.0.63.tgz(@elysiajs/eden@1.4.5(elysia@1.4.18(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3))) '@tailwindcss/vite': specifier: ^4.1.18 version: 4.1.18(vite@7.2.7(@types/node@24.10.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2)) @@ -132,6 +132,9 @@ importers: '@iconify-json/material-symbols': specifier: ^1.2.50 version: 1.2.50 + '@iconify-json/solar': + specifier: ^1.2.5 + version: 1.2.5 '@iconify-json/tdesign': specifier: ^1.2.11 version: 1.2.11 @@ -1210,6 +1213,9 @@ packages: '@iconify-json/material-symbols@1.2.50': resolution: {integrity: sha512-71tjHR70h46LHtBFab3fAd2V/wPTO7JMV5lKnRn3IcF303LaFgAlO0BZeTJDcmCv9d0snRZmnoLZAJVD7/eisw==} + '@iconify-json/solar@1.2.5': + resolution: {integrity: sha512-WMAiNwchU8zhfrySww6KQBRIBbsQ6SvgIu2yA+CHGyMima/0KQwT5MXogrZPJGoQF+1Ye3Qj6K+1CiyNn3YkoA==} + '@iconify-json/tdesign@1.2.11': resolution: {integrity: sha512-bhIDvRGFve+n8Q06PHeviW5X9pRpXzc/STus+Eq7A6HusaAYPzoti/Bp92Wzq/y6ZLe3Z5LC+6YbUMR1Jerg6Q==} @@ -1374,9 +1380,9 @@ packages: resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@riwa/api-types@http://192.168.1.27:9527/api/riwa-api-types-0.0.61.tgz': - resolution: {tarball: http://192.168.1.27:9527/api/riwa-api-types-0.0.61.tgz} - version: 0.0.61 + '@riwa/api-types@http://192.168.1.27:9527/api/riwa-api-types-0.0.63.tgz': + resolution: {tarball: http://192.168.1.27:9527/api/riwa-api-types-0.0.63.tgz} + version: 0.0.63 peerDependencies: '@elysiajs/eden': ^1.4.5 @@ -6193,6 +6199,10 @@ snapshots: dependencies: '@iconify/types': 2.0.0 + '@iconify-json/solar@1.2.5': + dependencies: + '@iconify/types': 2.0.0 + '@iconify-json/tdesign@1.2.11': dependencies: '@iconify/types': 2.0.0 @@ -6489,7 +6499,7 @@ snapshots: '@pkgr/core@0.2.9': {} - '@riwa/api-types@http://192.168.1.27:9527/api/riwa-api-types-0.0.61.tgz(@elysiajs/eden@1.4.5(elysia@1.4.18(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3)))': + '@riwa/api-types@http://192.168.1.27:9527/api/riwa-api-types-0.0.63.tgz(@elysiajs/eden@1.4.5(elysia@1.4.18(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3)))': dependencies: '@elysiajs/eden': 1.4.5(elysia@1.4.18(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3)) diff --git a/src/api/types.ts b/src/api/types.ts index ddae3b8..8654062 100644 --- a/src/api/types.ts +++ b/src/api/types.ts @@ -13,7 +13,9 @@ export type TreatyBody = T extends (...args: any[]) => any export type DepositFiatData = Treaty.Data; -export type BalancesData = Treaty.Data; +export type BalancesData = Treaty.Data; + +export type TotalAssetValue = Treaty.Data; export type WithdrawBody = Omit[0], "assetCode" | "withdrawMethod"> & { assetCode: AssetCodeEnum; diff --git a/src/components/subscribe-rwa/index.vue b/src/components/subscribe-rwa/index.vue index 9bfd4da..1648df3 100644 --- a/src/components/subscribe-rwa/index.vue +++ b/src/components/subscribe-rwa/index.vue @@ -13,8 +13,8 @@ const emit = defineEmits<{ const { t } = useI18n(); const walletStore = useWalletStore(); -const { balances } = storeToRefs(walletStore); -const currentUSDTBalance = computed(() => balances.value[0].available); +const { fundingBalances } = storeToRefs(walletStore); +const currentUSDTBalance = computed(() => fundingBalances.value[0].available); const num = ref(null); diff --git a/src/store/wallet.ts b/src/store/wallet.ts index 693e910..c0764c3 100644 --- a/src/store/wallet.ts +++ b/src/store/wallet.ts @@ -1,36 +1,55 @@ -import type { BalancesData, BankAccountsData, SupportBanksData } from "@/api/types"; +import type { BalancesData, BankAccountsData, SupportBanksData, TotalAssetValue } from "@/api/types"; import { defineStore } from "pinia"; import { client, safeClient } from "@/api"; interface State { - balances: BalancesData; + totalAssetValue: TotalAssetValue; + fundingBalances: BalancesData; + tradingBalances: BalancesData; bankAccounts: BankAccountsData["data"]; supportBanks: SupportBanksData["data"]; } export const useWalletStore = defineStore("wallet", () => { const state = reactive({ - balances: [], + totalAssetValue: { + fundingValueUsd: "0", + tradingValueUsd: "0", + totalValueUsd: "0", + }, + fundingBalances: [], + tradingBalances: [], bankAccounts: [], supportBanks: [], }); async function initializeWallet() { - updateBalances(); - updateBankAccounts(); - updateSupportBanks(); + syncTotalAssetValue(); + syncFundingBalances(); + syncTradingBalances(); + syncBankAccounts(); } - async function updateBalances(data?: BalancesData) { - if (data) { - state.balances = data; - return; - } - const { data: balances } = await safeClient(() => client.api.wallet.balances.get(), { silent: true }); - state.balances = balances.value || []; + async function syncTotalAssetValue() { + const { data } = await safeClient(() => client.api.wallet.total_value.get(), { silent: true }); + if (data.value) + state.totalAssetValue = data.value; + } + async function syncFundingBalances() { + const { data: balances } = await safeClient(() => client.api.wallet.balances.get({ + query: { accountType: "funding" }, + }), { silent: true }); + state.fundingBalances = balances.value || []; } - async function updateBankAccounts(data?: BankAccountsData["data"]) { + async function syncTradingBalances() { + const { data: balances } = await safeClient(() => client.api.wallet.balances.get({ + query: { accountType: "trading" }, + }), { silent: true }); + state.tradingBalances = balances.value || []; + } + + async function syncBankAccounts(data?: BankAccountsData["data"]) { if (data) { state.bankAccounts = data; return; @@ -39,7 +58,7 @@ export const useWalletStore = defineStore("wallet", () => { state.bankAccounts = bankAccounts.value?.data || []; } - async function updateSupportBanks() { + async function syncSupportBanks() { const { data: banks } = await safeClient(() => client.api.bank_account.banks.get(), { silent: true }); state.supportBanks = banks.value?.data || []; } @@ -47,8 +66,9 @@ export const useWalletStore = defineStore("wallet", () => { return { ...toRefs(state), initializeWallet, - updateBalances, - updateBankAccounts, - updateSupportBanks, + syncFundingBalances, + syncTradingBalances, + syncBankAccounts, + syncSupportBanks, }; }); diff --git a/src/views/trade-settings/bank-management/index.vue b/src/views/trade-settings/bank-management/index.vue index d3c96e7..d1ee93e 100644 --- a/src/views/trade-settings/bank-management/index.vue +++ b/src/views/trade-settings/bank-management/index.vue @@ -11,13 +11,13 @@ import { client, safeClient } from "@/api"; const { t } = useI18n(); const router = useRouter(); -const { updateBankAccounts } = useWalletStore(); +const { syncBankAccounts } = useWalletStore(); const { data, execute, onFetchResponse } = await safeClient(() => client.api.bank_account.get()); const bankCards = computed(() => data.value?.data || []); onFetchResponse((data) => { - data?.data && updateBankAccounts(data.data); + data?.data && syncBankAccounts(data.data); }); function handleAddCard() { diff --git a/src/views/user/components/asset.vue b/src/views/user/components/asset.vue index 34c9f5a..0c3d28d 100644 --- a/src/views/user/components/asset.vue +++ b/src/views/user/components/asset.vue @@ -1,17 +1,44 @@ diff --git a/src/views/user/components/wallet-card.vue b/src/views/user/components/wallet-card.vue index 377b016..58309c7 100644 --- a/src/views/user/components/wallet-card.vue +++ b/src/views/user/components/wallet-card.vue @@ -8,12 +8,10 @@ import RechargeChannel from "./recharge-channel.vue"; const { t } = useI18n(); const router = useRouter(); const walletStore = useWalletStore(); -const { balances } = storeToRefs(walletStore); +const { totalAssetValue } = storeToRefs(walletStore); const rechargeInstance = ref(); const totalBalanceVisible = useStorage("total-balances-visible", true); -const totalBalance = computed(() => { - return balances.value.reduce((acc, item) => acc + Number(item.available), 0); -}); +const totalAsset = computed(() => Number(totalAssetValue.value.totalValueUsd).toFixed(2)); function onCloseModal() { rechargeInstance.value?.$el.dismiss(null, "confirm"); @@ -26,7 +24,8 @@ function handleBill() { } onMounted(() => { - walletStore.updateBalances(); + walletStore.syncFundingBalances(); + walletStore.syncTradingBalances(); }); @@ -38,7 +37,7 @@ onMounted(() => {
- {{ totalBalanceVisible ? totalBalance : Array(totalBalance.toString().length).fill("*").join("") }} + {{ totalBalanceVisible ? totalAsset : Array(totalAsset.toString().length).fill("*").join("") }}
USDT diff --git a/src/views/withdraw/index.vue b/src/views/withdraw/index.vue index 72ac082..31851e7 100644 --- a/src/views/withdraw/index.vue +++ b/src/views/withdraw/index.vue @@ -10,7 +10,7 @@ import { createWithdrawSchema } from "./rules"; const { t } = useI18n(); const router = useRouter(); const walletStore = useWalletStore(); -const { balances, bankAccounts } = storeToRefs(walletStore); +const { fundingBalances, bankAccounts } = storeToRefs(walletStore); const initialValues: WithdrawBody = { assetCode: AssetCodeEnum.USDT, @@ -22,7 +22,7 @@ const initialValues: WithdrawBody = { }; const maxAmount = computed(() => { - const balance = balances.value?.find(item => item.assetCode === initialValues.assetCode); + const balance = fundingBalances.value?.find(item => item.assetCode === initialValues.assetCode); return balance ? balance.available : "0"; }); diff --git a/tsconfig.json b/tsconfig.json index b499f61..f55e7ae 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,6 +12,7 @@ "resolveJsonModule": true, "types": ["./components"], "strict": true, + "noImplicitAny": false, "noEmit": true, "esModuleInterop": true, "isolatedModules": true,