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/mall/consumer/index.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\" 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 && 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 }\"\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\tcurrent_balance: number\r\n\tchange_type: string // 'recharge' | 'consume' | 'withdraw' | 'refund' | 'reward'\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// 计算属性\r\nconst canRecharge = computed(() => {\r\n\tconst amount = parseFloat(rechargeAmount.value)\r\n\treturn !isNaN(amount) && amount >= 10 && amount <= 5000\r\n})\r\n\r\n// 监听过滤器变化\r\nwatch(activeFilter, () => {\r\n\tresetTransactions()\r\n\tloadTransactions()\r\n})\r\n\r\n// 生命周期\r\nonShow(() => {\r\n\tloadWalletData()\r\n})\r\n\r\n// 重置交易记录\r\nconst resetTransactions = () => {\r\n\ttransactions.value = []\r\n\tcurrentPage.value = 1\r\n\thasMore.value = true\r\n}\r\n\r\n// 加载钱包数据\r\nconst loadWalletData = async () => {\r\n\tconst userId = getCurrentUserId()\r\n\tif (userId == '') {\r\n\t\t// uni.navigateTo({\r\n\t\t// \turl: '/pages/user/login'\r\n\t\t// })\r\n\t\treturn\r\n\t}\r\n\r\n\tawait Promise.all([\r\n\t\tloadBalance(),\r\n\t\tloadTransactions()\r\n\t])\r\n}\r\n\r\n// 加载余额信息\r\nconst loadBalance = async () => {\r\n try {\r\n // 调用 Supabase 服务获取真实余额\r\n const realBalance = await supabaseService.getUserBalance()\r\n balance.value = realBalance\r\n \r\n // 统计数据暂时保持 mock 或设为 0,因为后端还未实现具体统计接口\r\n stats.value = {\r\n totalRecharge: 0,\r\n totalConsume: 0,\r\n totalWithdraw: 0\r\n }\r\n } catch (err) {\r\n console.error('加载钱包异常:', err)\r\n }\r\n}\r\n\r\n// 加载交易记录\r\nconst loadTransactions = async (loadMore: boolean = false) => {\r\n\tif (isLoading.value || (!hasMore.value && 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 // 使用 Supabase 获取真实数据\r\n // 注意:目前后端接口暂不支持 activeFilter 筛选,会返回所有记录\r\n const data = await supabaseService.getTransactions(page, limit)\r\n \r\n const mappedData: TransactionType[] = []\r\n for (let i = 0; i < data.length; i++) {\r\n const item = data[i]\r\n let id = ''\r\n let amount = 0\r\n let balance = 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 balance = 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 id = (item['id'] as string) ?? ''\r\n amount = (item['amount'] as number) ?? 0\r\n balance = (item['balance_after'] as number) ?? 0\r\n type = (item['type'] as string) ?? 'consume'\r\n remark = (item['description'] as string) ?? ''\r\n createdAt = (item['created_at'] as string) ?? ''\r\n }\r\n \r\n mappedData.push({\r\n id: id,\r\n user_id: userId,\r\n change_amount: amount,\r\n current_balance: balance,\r\n change_type: type,\r\n related_id: null,\r\n remark: remark,\r\n created_at: createdAt\r\n })\r\n }\r\n\r\n\t\tif (loadMore) {\r\n\t\t\ttransactions.value.push(...mappedData)\r\n\t\t} else {\r\n\t\t\ttransactions.value = mappedData\r\n\t\t}\r\n\t\t\r\n\t\tif (mappedData.length < limit) {\r\n\t\t\thasMore.value = false\r\n\t\t} else {\r\n hasMore.value = true\r\n }\r\n\t\t\r\n\t\tcurrentPage.value = page\r\n\t} catch (err) {\r\n\t\tconsole.error('加载交易记录异常:', err)\r\n\t} finally {\r\n\t\tisLoading.value = false\r\n\t}\r\n}\r\n\r\n// 获取当前用户ID\r\nconst getCurrentUserId = (): string => {\r\n\tconst userStore = uni.getStorageSync('userInfo')\r\n\treturn userStore?.getString('id') ?? ''\r\n}\r\n\r\n// 获取交易图标\r\nconst getTransactionIcon = (type: string): string => {\r\n\tconst icons: Record<string, string> = {\r\n\t\trecharge: '💳',\r\n\t\tconsume: '🛒',\r\n\t\twithdraw: '🏦',\r\n\t\trefund: '🔄',\r\n\t\treward: '🎁',\r\n\t\tincome: '💰',\r\n\t\texpense: '📤'\r\n\t}\r\n\tconst icon = icons[type]\r\n\treturn icon != null ? icon : '💰'\r\n}\r\n\r\n// 获取交易标题\r\nconst getTransactionTitle = (type: string): string => {\r\n\tconst titles: Record<string, string> = {\r\n\t\trecharge: '账户充值',\r\n\t\tconsume: '商品消费',\r\n\t\twithdraw: '余额提现',\r\n\t\trefund: '订单退款',\r\n\t\treward: '活动奖励',\r\n\t\tincome: '收入',\r\n\t\texpense: '支出'\r\n\t}\r\n\tconst title = titles[type]\r\n\treturn title != null ? title : '交易'\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) {\r\n\t\tloadTransactions(true)\r\n\t}\r\n}\r\n\r\n// 选择快捷金额\r\nconst selectQuickAmount = (amount: number) => {\r\n\trechargeAmount.value = amount.toString()\r\n}\r\n\r\n// 确认充值\r\nconst confirmRecharge = async () => {\r\n\tif (!canRecharge.value) return\r\n\r\n\tconst amount = parseFloat(rechargeAmount.value)\r\n\tif (isNaN(amount)) 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 // 刷新数据\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 closeRechargePopup = () => {\r\n\tshowRechargePopup.value = false\r\n\trechargeAmount.value = ''\r\n}\r\n\r\n// 返回\r\nconst goBack = () => {\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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"} |