1 line
38 KiB
Plaintext
1 line
38 KiB
Plaintext
{"version":3,"sources":["pages/mall/consumer/wallet.uvue","uni_modules/ak-req/ak-req.uts","pages/user/change-password.uvue","pages/user/login.uvue","pages/user/center.uvue"],"sourcesContent":["<!-- 钱包页面 -->\r\n<template>\r\n\t<view class=\"wallet-page\">\r\n\t\t<!-- 顶部栏 -->\r\n\t\t<!--<view class=\"wallet-header\">\r\n\t\t\t<text class=\"back-btn\" @click=\"goBack\">‹</text>\r\n\t\t</view>-->\r\n\r\n\t\t<scroll-view class=\"wallet-content\" scroll-y>\r\n\t\t\t<view class=\"dashboard-container\">\r\n\t\t\t\t<!-- 左侧/顶部区域:资产信息 -->\r\n\t\t\t\t<view class=\"dashboard-main\">\r\n\t\t\t\t\t<!-- 余额概览 -->\r\n\t\t\t\t\t<view class=\"balance-overview\">\r\n\t\t\t\t\t\t<text class=\"balance-label\">账户余额</text>\r\n\t\t\t\t\t\t<text class=\"balance-value\">¥{{ balance.toFixed(2) }}</text>\r\n\t\t\t\t\t\t<view class=\"balance-actions\">\r\n\t\t\t\t\t\t\t<button class=\"action-btn recharge\" @click=\"recharge\">充值</button>\r\n\t\t\t\t\t\t\t<button class=\"action-btn withdraw\" @click=\"withdraw\">提现</button>\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t</view>\r\n\t\t\r\n\t\t\t\t\t<!-- 资产统计 -->\r\n\t\t\t\t\t<view class=\"assets-stats\">\r\n\t\t\t\t\t\t<view class=\"stat-item\">\r\n\t\t\t\t\t\t\t<text class=\"stat-label\">累计充值</text>\r\n\t\t\t\t\t\t\t<text class=\"stat-value\">¥{{ stats.totalRecharge.toFixed(2) }}</text>\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t<view class=\"stat-item\">\r\n\t\t\t\t\t\t\t<text class=\"stat-label\">累计消费</text>\r\n\t\t\t\t\t\t\t<text class=\"stat-value\">¥{{ stats.totalConsume.toFixed(2) }}</text>\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t<view class=\"stat-item\">\r\n\t\t\t\t\t\t\t<text class=\"stat-label\">累计提现</text>\r\n\t\t\t\t\t\t\t<text class=\"stat-value\">¥{{ stats.totalWithdraw.toFixed(2) }}</text>\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t</view>\r\n\t\t\r\n\t\t\t\t\t<!-- 快捷功能 -->\r\n\t\t\t\t\t<view class=\"quick-actions\">\r\n\t\t\t\t\t\t<view class=\"action-grid\">\r\n\t\t\t\t\t\t\t<view class=\"action-item\" @click=\"goToCoupons\">\r\n\t\t\t\t\t\t\t\t<text class=\"action-icon\">🎫</text>\r\n\t\t\t\t\t\t\t\t<text class=\"action-text\">优惠券</text>\r\n\t\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t\t<view class=\"action-item\" @click=\"goToRedPackets\">\r\n\t\t\t\t\t\t\t\t<text class=\"action-icon\">🧧</text>\r\n\t\t\t\t\t\t\t\t<text class=\"action-text\">红包</text>\r\n\t\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t\t<view class=\"action-item\" @click=\"goToPoints\">\r\n\t\t\t\t\t\t\t\t<text class=\"action-icon\">⭐</text>\r\n\t\t\t\t\t\t\t\t<text class=\"action-text\">积分</text>\r\n\t\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t\t<view class=\"action-item\" @click=\"goToBankCards\">\r\n\t\t\t\t\t\t\t\t<text class=\"action-icon\">💳</text>\r\n\t\t\t\t\t\t\t\t<text class=\"action-text\">银行卡</text>\r\n\t\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t\t\r\n\t\t\t\t\t<!-- 安全提示 (移动端在底部,PC端在左侧底部) -->\r\n\t\t\t\t\t<view class=\"security-tips\">\r\n\t\t\t\t\t\t<text class=\"tip-title\">安全提示</text>\r\n\t\t\t\t\t\t<text class=\"tip-item\">1. 请妥善保管您的支付密码</text>\r\n\t\t\t\t\t\t<text class=\"tip-item\">2. 不要向他人透露您的账户信息</text>\r\n\t\t\t\t\t\t<text class=\"tip-item\">3. 定期修改密码以确保账户安全</text>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t</view>\r\n\t\r\n\t\t\t\t<!-- 右侧/底部区域:交易记录 -->\r\n\t\t\t\t<view class=\"dashboard-side\">\r\n\t\t\t\t\t<!-- 交易记录 -->\r\n\t\t\t\t\t<view class=\"transactions-section\">\r\n\t\t\t\t\t\t<view class=\"section-header\">\r\n\t\t\t\t\t\t\t<text class=\"section-title\">交易记录</text>\r\n\t\t\t\t\t\t\t<view class=\"filter-tabs\">\r\n\t\t\t\t\t\t\t\t<text :class=\"['filter-tab', { active: activeFilter === 'all' }]\" \r\n\t\t\t\t\t\t\t\t\t\t\t@click=\"changeFilter('all')\">全部</text>\r\n\t\t\t\t\t\t\t\t<text :class=\"['filter-tab', { active: activeFilter === 'income' }]\" \r\n\t\t\t\t\t\t\t\t\t\t\t@click=\"changeFilter('income')\">收入</text>\r\n\t\t\t\t\t\t\t\t<text :class=\"['filter-tab', { active: activeFilter === 'expense' }]\" \r\n\t\t\t\t\t\t\t\t\t\t\t@click=\"changeFilter('expense')\">支出</text>\r\n\t\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t</view>\r\n\t\t\r\n\t\t\t\t\t\t<!-- 空状态 -->\r\n\t\t\t\t\t\t<view v-if=\"transactions.length === 0 && isLoading === false\" class=\"empty-transactions\">\r\n\t\t\t\t\t\t\t<text class=\"empty-icon\">💰</text>\r\n\t\t\t\t\t\t\t<text class=\"empty-text\">暂无交易记录</text>\r\n\t\t\t\t\t\t\t<text class=\"empty-subtext\">快去使用钱包功能吧</text>\r\n\t\t\t\t\t\t</view>\r\n\t\t\r\n\t\t\t\t\t\t<!-- 交易列表 -->\r\n\t\t\t\t\t\t<view class=\"transactions-list\">\r\n\t\t\t\t\t\t\t<view v-for=\"transaction in transactions\" \r\n\t\t\t\t\t\t\t\t\t\t:key=\"transaction.id\" \r\n\t\t\t\t\t\t\t\t\t\tclass=\"transaction-item\">\r\n\t\t\t\t\t\t\t\t<view class=\"transaction-left\">\r\n\t\t\t\t\t\t\t\t\t<text class=\"transaction-icon\">{{ getTransactionIcon(transaction.type) }}</text>\r\n\t\t\t\t\t\t\t\t\t<view class=\"transaction-info\">\r\n\t\t\t\t\t\t\t\t\t\t<text class=\"transaction-title\">{{ getTransactionTitle(transaction.type) }}</text>\r\n\t\t\t\t\t\t\t\t\t\t<text class=\"transaction-time\">{{ formatTime(transaction.created_at) }}</text>\r\n\t\t\t\t\t\t\t\t\t\t<text v-if=\"transaction.remark\" class=\"transaction-remark\">{{ transaction.remark }}</text>\r\n\t\t\t\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t\t\t<view class=\"transaction-right\">\r\n\t\t\t\t\t\t\t\t\t<text :class=\"['transaction-amount', \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t { income: transaction.amount > 0, expense: transaction.amount < 0 }]\">\r\n\t\t\t\t\t\t\t\t\t\t{{ transaction.amount > 0 ? '+' : '' }}¥{{ Math.abs(transaction.amount).toFixed(2) }}\r\n\t\t\t\t\t\t\t\t\t</text>\r\n\t\t\t\t\t\t\t\t\t<text class=\"transaction-balance\">余额: ¥{{ transaction.current_balance.toFixed(2) }}</text>\r\n\t\t\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t</view>\r\n\t\t\r\n\t\t\t\t\t\t<!-- 加载更多 -->\r\n\t\t\t\t\t\t<view v-if=\"isLoading\" class=\"loading-more\">\r\n\t\t\t\t\t\t\t<text class=\"loading-text\">加载中...</text>\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t<view v-if=\"hasMore === false && transactions.length > 0\" class=\"no-more\">\r\n\t\t\t\t\t\t\t<text class=\"no-more-text\">没有更多记录了</text>\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\t\t</scroll-view>\r\n\r\n\t\t<!-- 充值弹窗 -->\r\n\t\t<view v-if=\"showRechargePopup\" class=\"recharge-popup\">\r\n\t\t\t<view class=\"popup-mask\" @click=\"closeRechargePopup\"></view>\r\n\t\t\t<view class=\"popup-content\">\r\n\t\t\t\t<view class=\"popup-header\">\r\n\t\t\t\t\t<text class=\"popup-title\">充值</text>\r\n\t\t\t\t\t<text class=\"popup-close\" @click=\"closeRechargePopup\">×</text>\r\n\t\t\t\t</view>\r\n\t\t\t\t<view class=\"popup-body\">\r\n\t\t\t\t\t<text class=\"amount-label\">充值金额</text>\r\n\t\t\t\t\t<view class=\"amount-input\">\r\n\t\t\t\t\t\t<text class=\"currency-symbol\">¥</text>\r\n\t\t\t\t\t\t<input class=\"amount-field\" \r\n\t\t\t\t\t\t\t\t\t v-model=\"rechargeAmount\" \r\n\t\t\t\t\t\t\t\t\t type=\"number\" \r\n\t\t\t\t\t\t\t\t\t placeholder=\"请输入充值金额\"\r\n\t\t\t\t\t\t\t\t\t focus />\r\n\t\t\t\t\t</view>\r\n\t\t\t\t\t<view class=\"quick-amounts\">\r\n\t\t\t\t\t\t<text v-for=\"amount in quickAmounts\" \r\n\t\t\t\t\t\t\t\t\t:key=\"amount\" \r\n\t\t\t\t\t\t\t\t\t:class=\"['quick-amount', { active: rechargeAmount === amount.toString() }]\"\r\n\t\t\t\t\t\t\t\t\t@click=\"selectQuickAmount(amount)\">\r\n\t\t\t\t\t\t\t¥{{ amount }}\r\n\t\t\t\t\t\t</text>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t\t<text class=\"recharge-tip\">单笔充值最低10元,最高5000元</text>\r\n\t\t\t\t</view>\r\n\t\t\t\t<view class=\"popup-footer\">\r\n\t\t\t\t\t<button class=\"cancel-btn\" @click=\"closeRechargePopup\">取消</button>\r\n\t\t\t\t\t<button class=\"confirm-btn\" \r\n\t\t\t\t\t\t\t\t\t:class=\"{ disabled: canRecharge === false }\"\r\n\t\t\t\t\t\t\t\t\t@click=\"confirmRecharge\">\r\n\t\t\t\t\t\t确认充值\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\t\t</view>\r\n\t</view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\nimport { ref, computed, watch } from 'vue'\r\nimport { onShow } from '@dcloudio/uni-app'\r\nimport { supabaseService } from '@/utils/supabaseService.uts'\r\n\r\ntype WalletType = {\r\n\tid: string\r\n\tuser_id: string\r\n\tbalance: number\r\n\ttotal_recharge: number\r\n\ttotal_consume: number\r\n\ttotal_withdraw: number\r\n\tupdated_at: string\r\n}\r\n\r\ntype TransactionType = {\r\n\tid: string\r\n\tuser_id: string\r\n\tchange_amount: number\r\n\tamount: number\r\n\tcurrent_balance: number\r\n\tchange_type: string\r\n\ttype: string\r\n\trelated_id: string | null\r\n\tremark: string | null\r\n\tcreated_at: string\r\n}\r\n\r\ntype StatsType = {\r\n\ttotalRecharge: number\r\n\ttotalConsume: number\r\n\ttotalWithdraw: number\r\n}\r\n\r\nconst balance = ref<number>(0)\r\nconst stats = ref<StatsType>({\r\n\ttotalRecharge: 0,\r\n\ttotalConsume: 0,\r\n\ttotalWithdraw: 0\r\n})\r\nconst transactions = ref<Array<TransactionType>>([])\r\nconst activeFilter = ref<string>('all')\r\nconst isLoading = ref<boolean>(false)\r\nconst currentPage = ref<number>(1)\r\nconst pageSize = ref<number>(20)\r\nconst hasMore = ref<boolean>(true)\r\nconst showRechargePopup = ref<boolean>(false)\r\nconst rechargeAmount = ref<string>('')\r\nconst quickAmounts = [50, 100, 200, 500, 1000]\r\n\r\n// 获取当前用户ID\r\nconst getCurrentUserId = (): string => {\r\n\tconst userStore = uni.getStorageSync('userInfo')\r\n\tif (userStore == null) return ''\r\n\tconst userInfo = userStore as UTSJSONObject\r\n\treturn userInfo.getString('id') ?? ''\r\n}\r\n\r\n// 重置交易记录\r\nconst resetTransactions = (): void => {\r\n\ttransactions.value = []\r\n\tcurrentPage.value = 1\r\n\thasMore.value = true\r\n}\r\n\r\n// 加载余额信息\r\nconst loadBalance = async (): Promise<void> => {\r\n try {\r\n const realBalance = await supabaseService.getUserBalance()\r\n balance.value = realBalance\r\n \r\n const statsData: StatsType = {\r\n totalRecharge: 0,\r\n totalConsume: 0,\r\n totalWithdraw: 0\r\n } as StatsType\r\n stats.value = statsData\r\n } catch (err) {\r\n console.error('加载钱包异常:', err)\r\n }\r\n}\r\n\r\n// 加载交易记录\r\nconst loadTransactions = async (loadMore: boolean): Promise<void> => {\r\n\tif (isLoading.value || (hasMore.value === false && loadMore)) {\r\n\t\treturn\r\n\t}\r\n\r\n\tisLoading.value = true\r\n\r\n\ttry {\r\n const userId = getCurrentUserId()\r\n if (userId == '') {\r\n isLoading.value = false\r\n return\r\n }\r\n\r\n const page = loadMore ? currentPage.value + 1 : 1\r\n const limit = 20\r\n \r\n const data = await supabaseService.getTransactions(page, limit)\r\n \r\n const mappedData: Array<TransactionType> = []\r\n for (let i: number = 0; i < data.length; i++) {\r\n const item = data[i]\r\n let id = ''\r\n let amount = 0\r\n let balanceAfter = 0\r\n let type = ''\r\n let remark = ''\r\n let createdAt = ''\r\n \r\n if (item instanceof UTSJSONObject) {\r\n id = item.getString('id') ?? ''\r\n amount = item.getNumber('amount') ?? 0\r\n balanceAfter = item.getNumber('balance_after') ?? 0\r\n type = item.getString('type') ?? 'consume'\r\n remark = item.getString('description') ?? ''\r\n createdAt = item.getString('created_at') ?? ''\r\n } else {\r\n const itemObj = item as UTSJSONObject\r\n id = itemObj.getString('id') ?? ''\r\n amount = itemObj.getNumber('amount') ?? 0\r\n balanceAfter = itemObj.getNumber('balance_after') ?? 0\r\n type = itemObj.getString('type') ?? 'consume'\r\n remark = itemObj.getString('description') ?? ''\r\n createdAt = itemObj.getString('created_at') ?? ''\r\n }\r\n \r\n const transaction: TransactionType = {\r\n id: id,\r\n user_id: userId,\r\n change_amount: amount,\r\n amount: amount,\r\n current_balance: balanceAfter,\r\n change_type: type,\r\n type: type,\r\n related_id: null,\r\n remark: remark,\r\n created_at: createdAt\r\n } as TransactionType\r\n mappedData.push(transaction)\r\n }\r\n \r\n if (loadMore) {\r\n for (let i: number = 0; i < mappedData.length; i++) {\r\n transactions.value.push(mappedData[i])\r\n }\r\n currentPage.value = page\r\n } else {\r\n transactions.value = mappedData\r\n currentPage.value = 1\r\n }\r\n \r\n hasMore.value = mappedData.length >= limit\r\n } catch (err) {\r\n console.error('加载交易记录失败:', err)\r\n } finally {\r\n isLoading.value = false\r\n }\r\n}\r\n\r\n// 加载钱包数据\r\nconst loadWalletData = async (): Promise<void> => {\r\n\tconst userId = getCurrentUserId()\r\n\tif (userId == '') {\r\n\t\treturn\r\n\t}\r\n\r\n\tloadBalance()\r\n\tloadTransactions(false)\r\n}\r\n\r\n// 计算属性\r\nconst canRecharge = computed((): boolean => {\r\n\tconst amount = parseFloat(rechargeAmount.value)\r\n\tif (amount == null || amount < 10 || amount > 5000) {\r\n\t\treturn false\r\n\t}\r\n\treturn true\r\n})\r\n\r\n// 监听过滤器变化\r\nwatch(activeFilter, () => {\r\n\tresetTransactions()\r\n\tloadTransactions(false)\r\n})\r\n\r\n// 生命周期\r\nonShow(() => {\r\n\tloadWalletData()\r\n})\r\n\r\n// 获取交易图标\r\nconst getTransactionIcon = (type: string): string => {\r\n\tif (type === 'recharge') return '💳'\r\n\tif (type === 'consume') return '🛒'\r\n\tif (type === 'withdraw') return '🏦'\r\n\tif (type === 'refund') return '🔄'\r\n\tif (type === 'reward') return '🎁'\r\n\tif (type === 'income') return '💰'\r\n\tif (type === 'expense') return '📤'\r\n\treturn '💰'\r\n}\r\n\r\n// 获取交易标题\r\nconst getTransactionTitle = (type: string): string => {\r\n\tif (type === 'recharge') return '账户充值'\r\n\tif (type === 'consume') return '商品消费'\r\n\tif (type === 'withdraw') return '余额提现'\r\n\tif (type === 'refund') return '订单退款'\r\n\tif (type === 'reward') return '活动奖励'\r\n\tif (type === 'income') return '收入'\r\n\tif (type === 'expense') return '支出'\r\n\treturn '交易'\r\n}\r\n\r\n// 格式化时间\r\nconst formatTime = (timeStr: string): string => {\r\n\tconst date = new Date(timeStr)\r\n\tconst month = (date.getMonth() + 1).toString().padStart(2, '0')\r\n\tconst day = date.getDate().toString().padStart(2, '0')\r\n\tconst hours = date.getHours().toString().padStart(2, '0')\r\n\tconst minutes = date.getMinutes().toString().padStart(2, '0')\r\n\treturn `${month}-${day} ${hours}:${minutes}`\r\n}\r\n\r\n// 显示更多操作\r\nconst showMoreActions = () => {\r\n\tuni.showActionSheet({\r\n\t\titemList: ['交易记录', '安全设置', '帮助中心'],\r\n\t\tsuccess: (res) => {\r\n\t\t\tswitch (res.tapIndex) {\r\n\t\t\t\tcase 0:\r\n\t\t\t\t\t// 交易记录已经在当前页\r\n\t\t\t\t\tbreak\r\n\t\t\t\tcase 1:\r\n\t\t\t\t\tuni.navigateTo({\r\n\t\t\t\t\t\turl: '/pages/mall/consumer/settings'\r\n\t\t\t\t\t})\r\n\t\t\t\t\tbreak\r\n\t\t\t\tcase 2:\r\n\t\t\t\t\tuni.navigateTo({\r\n\t\t\t\t\t\turl: '/pages/info/help'\r\n\t\t\t\t\t})\r\n\t\t\t\t\tbreak\r\n\t\t\t}\r\n\t\t}\r\n\t})\r\n}\r\n\r\n// 充值\r\nconst recharge = () => {\r\n\tshowRechargePopup.value = true\r\n\trechargeAmount.value = ''\r\n}\r\n\r\n// 提现\r\nconst withdraw = () => {\r\n\tuni.navigateTo({\r\n\t\turl: '/pages/mall/consumer/withdraw'\r\n\t})\r\n}\r\n\r\n// 跳转到优惠券\r\nconst goToCoupons = () => {\r\n\tuni.navigateTo({\r\n\t\turl: '/pages/mall/consumer/coupons'\r\n\t})\r\n}\r\n\r\n// 跳转到红包\r\nconst goToRedPackets = () => {\r\n\tuni.navigateTo({\r\n\t\turl: '/pages/mall/consumer/red-packets/index'\r\n\t})\r\n}\r\n\r\n// 跳转到积分\r\nconst goToPoints = () => {\r\n // 使用统一的积分页面\r\n\tuni.navigateTo({\r\n\t\turl: '/pages/mall/consumer/points/index'\r\n\t})\r\n}\r\n\r\n// 跳转到银行卡\r\nconst goToBankCards = () => {\r\n\tuni.navigateTo({\r\n\t\turl: '/pages/mall/consumer/bank-cards/index'\r\n\t})\r\n}\r\n\r\n// 切换过滤器\r\nconst changeFilter = (filter: string) => {\r\n\tactiveFilter.value = filter\r\n}\r\n\r\n// 加载更多\r\nconst loadMore = () => {\r\n\tif (hasMore.value && isLoading.value === false) {\r\n\t\tloadTransactions(true)\r\n\t}\r\n}\r\n\r\n// 选择快捷金额\r\nconst selectQuickAmount = (amount: number): void => {\r\n\trechargeAmount.value = amount.toString()\r\n}\r\n\r\n// 关闭充值弹窗\r\nconst closeRechargePopup = (): void => {\r\n\tshowRechargePopup.value = false\r\n\trechargeAmount.value = ''\r\n}\r\n\r\n// 确认充值\r\nconst confirmRecharge = async (): Promise<void> => {\r\n\tif (canRecharge.value === false) return\r\n\r\n\tconst amount = parseFloat(rechargeAmount.value)\r\n\tif (amount == null || amount < 10 || amount > 5000) return\r\n\r\n uni.showLoading({ title: '处理中...' })\r\n try {\r\n const success = await supabaseService.rechargeBalance(amount)\r\n if (success) {\r\n uni.showToast({\r\n title: '充值成功',\r\n icon: 'success'\r\n })\r\n closeRechargePopup()\r\n loadWalletData()\r\n } else {\r\n uni.showToast({\r\n title: '充值失败',\r\n icon: 'none'\r\n })\r\n }\r\n } catch (e) {\r\n console.error('充值异常:', e)\r\n uni.showToast({\r\n title: '系统异常,请稍后重试',\r\n icon: 'none'\r\n })\r\n } finally {\r\n uni.hideLoading()\r\n }\r\n}\r\n\r\n// 返回\r\nconst goBack = (): void => {\r\n\tuni.navigateBack()\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n/* 基础样式 */\r\n.wallet-page {\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tflex: 1; /* Fixed 100vh */\r\n\tbackground-color: #f5f5f5;\r\n}\r\n\r\n.wallet-content {\r\n\tflex: 1;\r\n}\r\n\r\n.dashboard-container {\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tpadding-bottom: 20px;\r\n}\r\n\r\n.dashboard-main {\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n}\r\n\r\n.dashboard-side {\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n}\r\n\r\n/* 响应式布局优化 */\r\n@media screen and (min-width: 768px) {\r\n\t.wallet-content {\r\n\t\tpadding: 20px;\r\n\t\tbackground-color: #f5f5f5;\r\n\t}\r\n\r\n\t.dashboard-container {\r\n\t\tmax-width: 800px;\r\n\t\tmargin: 0 auto;\r\n\t\twidth: 100%;\r\n\t}\r\n\t\r\n\t.balance-overview, .assets-stats, .quick-actions, .transactions-section, .security-tips {\r\n\t\tborder-radius: 12px;\r\n\t}\r\n\t\r\n\t.popup-content {\r\n\t\twidth: 400px;\r\n\t\tleft: 50%;\r\n\t\tbottom: 50%;\r\n\t\ttransform: translate(-50%, 50%);\r\n\t\tborder-radius: 15px;\r\n\t}\r\n}\r\n\r\n@media screen and (min-width: 1024px) {\r\n\t.wallet-page {\r\n\t\tflex-direction: column; /* 保持纵向,内容区内部处理横向 */\r\n\t}\r\n\t\r\n\t.wallet-content {\r\n\t\twidth: 100%;\r\n\t\tmax-width: 1200px;\r\n\t\tmargin: 0 auto;\r\n\t}\r\n\t\r\n\t.dashboard-container {\r\n\t\tflex-direction: row; /* 横向排列 */\r\n\t\talign-items: flex-start;\r\n\t\t/* gap: 20px; REMOVED */\r\n\t\t/* max-width: 100%; REMOVED */\r\n\t}\r\n\t\r\n\t.dashboard-main {\r\n\t\twidth: 400px; /* 左侧固定宽度 */\r\n\t\tflex-shrink: 0;\r\n margin-right: 20px; /* REPLACED gap */\r\n\t}\r\n\t\r\n\t.dashboard-side {\r\n\t\tflex: 1; /* 右侧自适应 */\r\n\t\tmin-width: 0;\r\n\t}\r\n\t\r\n\t/* 调整各模块间距 */\r\n\t.balance-overview, \r\n\t.assets-stats, \r\n\t.quick-actions, \r\n\t.security-tips {\r\n\t\tmargin-bottom: 20px;\r\n\t}\r\n\t\r\n\t.transactions-section {\r\n\t\tmargin-top: 0; /* 移除顶部间距,与左侧对齐 */\r\n\t\theight: 100%;\r\n\t\tmin-height: 600px; /* 保证右侧高度 */\r\n\t}\r\n}\r\n\r\n/* 模块样式 */\r\n.balance-overview {\r\n\tbackground: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\r\n\tpadding: 30px 20px;\r\n\tcolor: #ffffff;\r\n}\r\n\r\n.balance-label {\r\n\t/* display: block; REMOVED */\r\n\tfont-size: 14px;\r\n\topacity: 0.9;\r\n\tmargin-bottom: 10px;\r\n\ttext-align: center;\r\n}\r\n\r\n.balance-value {\r\n\t/* display: block; REMOVED */\r\n\tfont-size: 36px;\r\n\tfont-weight: bold;\r\n\tmargin-bottom: 20px;\r\n\ttext-align: center;\r\n}\r\n\r\n.balance-actions {\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\t/* gap: 20px; REMOVED */\r\n}\r\n\r\n.action-btn {\r\n\tflex: 1;\r\n\theight: 40px;\r\n\tborder-radius: 20px;\r\n\tfont-size: 14px;\r\n\tfont-weight: bold;\r\n\tborder: none;\r\n}\r\n\r\n.action-btn.recharge {\r\n\tbackground-color: #ffffff;\r\n\tcolor: #667eea;\r\n margin-right: 20px; /* REPLACED gap */\r\n}\r\n\r\n.action-btn.withdraw {\r\n\tbackground-color: rgba(255, 255, 255, 0.2);\r\n\tcolor: #ffffff;\r\n\tborder: 1px solid rgba(255, 255, 255, 0.5);\r\n}\r\n\r\n.assets-stats {\r\n\tbackground-color: #ffffff;\r\n\tpadding: 20px;\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\tjustify-content: space-between;\r\n\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.stat-item {\r\n\tflex: 1;\r\n\ttext-align: center;\r\n}\r\n\r\n.stat-label {\r\n\t/* display: block; REMOVED */\r\n\tfont-size: 12px;\r\n\tcolor: #666666;\r\n\tmargin-bottom: 8px;\r\n}\r\n\r\n.stat-value {\r\n\t/* display: block; REMOVED */\r\n\tfont-size: 16px;\r\n\tfont-weight: bold;\r\n\tcolor: #333333;\r\n}\r\n\r\n.quick-actions {\r\n\tbackground-color: #ffffff;\r\n\tmargin-top: 10px;\r\n\tpadding: 20px;\r\n}\r\n\r\n.action-grid {\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\tjustify-content: space-between;\r\n\talign-items: center;\r\n}\r\n\r\n.action-item {\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\talign-items: center;\r\n\tflex: 1;\r\n}\r\n\r\n.action-icon {\r\n\tfont-size: 28px;\r\n\tmargin-bottom: 8px;\r\n}\r\n\r\n.action-text {\r\n\tfont-size: 12px;\r\n\tcolor: #666666;\r\n}\r\n\r\n.transactions-section {\r\n\tbackground-color: #ffffff;\r\n\tmargin-top: 10px;\r\n\tpadding: 15px;\r\n}\r\n\r\n.section-header {\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\tjustify-content: space-between;\r\n\talign-items: center;\r\n\tmargin-bottom: 15px;\r\n}\r\n\r\n.section-title {\r\n\tfont-size: 16px;\r\n\tfont-weight: bold;\r\n\tcolor: #333333;\r\n}\r\n\r\n.filter-tabs {\r\n\t/* gap: 15px; REMOVED */\r\n}\r\n\r\n.filter-tab {\r\n\tfont-size: 14px;\r\n\tcolor: #666666;\r\n\tpadding: 5px 0;\r\n\tposition: relative;\r\n margin-right: 15px; /* REPLACED gap */\r\n border-bottom: 2px solid transparent; /* Prepare for active state */\r\n}\r\n\r\n.filter-tab.active {\r\n\tcolor: #007aff;\r\n\tfont-weight: bold;\r\n border-bottom: 2px solid #007aff; /* REPLACED ::after */\r\n}\r\n\r\n/* ::after removed */\r\n\r\n.empty-transactions {\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\tpadding: 40px 20px;\r\n}\r\n\r\n.empty-icon {\r\n\tfont-size: 60px;\r\n\tmargin-bottom: 20px;\r\n}\r\n\r\n.empty-text {\r\n\tfont-size: 16px;\r\n\tcolor: #666666;\r\n\tmargin-bottom: 10px;\r\n}\r\n\r\n.empty-subtext {\r\n\tfont-size: 14px;\r\n\tcolor: #999999;\r\n}\r\n\r\n.transactions-list {\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n}\r\n\r\n.transaction-item {\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\tjustify-content: space-between;\r\n\talign-items: flex-start;\r\n\tpadding: 15px 0;\r\n\tborder-bottom: 1px solid #f5f5f5;\r\n}\r\n\r\n.transaction-item:last-child {\r\n\tborder-bottom: none;\r\n}\r\n\r\n.transaction-left {\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\talign-items: flex-start;\r\n}\r\n\r\n.transaction-icon {\r\n\tfont-size: 24px;\r\n\tmargin-right: 15px;\r\n}\r\n\r\n.transaction-info {\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n}\r\n\r\n.transaction-title {\r\n\tfont-size: 14px;\r\n\tcolor: #333333;\r\n\tfont-weight: bold;\r\n\tmargin-bottom: 5px;\r\n}\r\n\r\n.transaction-time {\r\n\tfont-size: 12px;\r\n\tcolor: #999999;\r\n\tmargin-bottom: 3px;\r\n}\r\n\r\n.transaction-remark {\r\n\tfont-size: 12px;\r\n\tcolor: #666666;\r\n}\r\n\r\n.transaction-right {\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\talign-items: flex-end;\r\n}\r\n\r\n.transaction-amount {\r\n\tfont-size: 16px;\r\n\tfont-weight: bold;\r\n\tmargin-bottom: 5px;\r\n}\r\n\r\n.transaction-amount.income {\r\n\tcolor: #4caf50;\r\n}\r\n\r\n.transaction-amount.expense {\r\n\tcolor: #333333;\r\n}\r\n\r\n.transaction-balance {\r\n\tfont-size: 12px;\r\n\tcolor: #999999;\r\n}\r\n\r\n.loading-more,\r\n.no-more {\r\n\tpadding: 20px;\r\n\ttext-align: center;\r\n}\r\n\r\n.loading-text,\r\n.no-more-text {\r\n\tcolor: #999999;\r\n\tfont-size: 14px;\r\n}\r\n\r\n.security-tips {\r\n\tbackground-color: #ffffff;\r\n\tmargin-top: 10px;\r\n\tpadding: 20px;\r\n}\r\n\r\n.tip-title {\r\n\t/* display: block; REMOVED */\r\n\tfont-size: 16px;\r\n\tfont-weight: bold;\r\n\t/* display: block; REMOVED */\r\n\tfont-size: 16px;\r\n\tfont-weight: bold;\r\n\tcolor: #333333;\r\n\tmargin-bottom: 15px;\r\n}\r\n\r\n.tip-item {\r\n\t/* display: block; REMOVED */\r\n\tmargin-bottom: 8px;\r\n\tfont-size: 12px;\r\n\tcolor: #666666;\r\n line-height: 1.6;\r\n}\r\n\r\n.tip-item:last-child {\r\n\tmargin-bottom: 0;\r\n}\r\n\r\n.recharge-popup {\r\n\tposition: fixed;\r\n\ttop: 0;\r\n\tleft: 0;\r\n\tright: 0;\r\n\tbottom: 0;\r\n\tz-index: 999;\r\n}\r\n\r\n.popup-mask {\r\n\tposition: absolute;\r\n\ttop: 0;\r\n\tleft: 0;\r\n\tright: 0;\r\n\tbottom: 0;\r\n\tbackground-color: rgba(0, 0, 0, 0.5);\r\n}\r\n\r\n.popup-content {\r\n\tposition: absolute;\r\n\tbottom: 0;\r\n\tleft: 0;\r\n\tright: 0;\r\n\tbackground-color: #ffffff;\r\n\tborder-top-left-radius: 15px;\r\n\tborder-top-right-radius: 15px;\r\n\tpadding: 20px;\r\n}\r\n\r\n.popup-header {\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\tjustify-content: space-between;\r\n\talign-items: center;\r\n\tmargin-bottom: 20px;\r\n\tpadding-bottom: 15px;\r\n\tborder-bottom: 1px solid #e5e5e5;\r\n}\r\n\r\n.popup-title {\r\n\tfont-size: 18px;\r\n\tfont-weight: bold;\r\n\tcolor: #333333;\r\n}\r\n\r\n.popup-close {\r\n\tfont-size: 24px;\r\n\tcolor: #999999;\r\n\tpadding: 5px;\r\n}\r\n\r\n.popup-body {\r\n\tmargin-bottom: 20px;\r\n}\r\n\r\n.amount-label {\r\n\t/* display: block; REMOVED */\r\n\tfont-size: 14px;\r\n\tcolor: #333333;\r\n\tmargin-bottom: 10px;\r\n}\r\n\r\n.amount-input {\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\talign-items: center;\r\n\tmargin-bottom: 20px;\r\n\tpadding: 10px;\r\n\tborder: 1px solid #e5e5e5;\r\n\tborder-radius: 8px;\r\n}\r\n\r\n.currency-symbol {\r\n\tfont-size: 20px;\r\n\tcolor: #333333;\r\n\tmargin-right: 10px;\r\n}\r\n\r\n.amount-field {\r\n\tflex: 1;\r\n\tfont-size: 24px;\r\n\tfont-weight: bold;\r\n\tcolor: #333333;\r\n}\r\n\r\n.quick-amounts {\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\tflex-wrap: wrap;\r\n\t/* gap: 10px; REMOVED */\r\n\tmargin-bottom: 15px;\r\n}\r\n\r\n.quick-amount {\r\n\tpadding: 8px 15px;\r\n\tborder: 1px solid #e5e5e5;\r\n\tborder-radius: 15px;\r\n\tfont-size: 14px;\r\n\tcolor: #333333;\r\n margin-right: 10px; /* REPLACED gap */\r\n margin-bottom: 10px; /* REPLACED gap */\r\n}\r\n\r\n.quick-amount.active {\r\n\tbackground-color: #007aff;\r\n\tcolor: #ffffff;\r\n\tborder-color: #007aff;\r\n}\r\n\r\n.recharge-tip {\r\n\t/* display: block; REMOVED */\r\n\tfont-size: 12px;\r\n\tcolor: #999999;\r\n}\r\n\r\n.popup-footer {\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\t/* gap: 15px; REMOVED */\r\n}\r\n\r\n.cancel-btn,\r\n.confirm-btn {\r\n\tflex: 1;\r\n\theight: 45px;\r\n\tborder-radius: 22.5px;\r\n\tfont-size: 16px;\r\n\tfont-weight: bold;\r\n\tborder: none;\r\n}\r\n\r\n.cancel-btn {\r\n\tbackground-color: #f5f5f5;\r\n\tcolor: #666666;\r\n margin-right: 15px; /* REPLACED gap */\r\n}\r\n\r\n.confirm-btn {\r\n\tbackground-color: #007aff;\r\n\tcolor: #ffffff;\r\n}\r\n\r\n.confirm-btn.disabled {\r\n\tbackground-color: #cccccc;\r\n\topacity: 0.6;\r\n}\r\n</style>",null,null,null,null],"names":[],"mappings":"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"} |