1 line
13 KiB
Plaintext
1 line
13 KiB
Plaintext
{"version":3,"sources":["pages/mall/consumer/balance/index.uvue","pages/main/cart.uvue"],"sourcesContent":["<template>\n <scroll-view class=\"balance-page\" scroll-y>\n <view class=\"balance-header\">\n <view class=\"balance-info\">\n <text class=\"balance-label\">账户余额(元)</text>\n <text class=\"balance-value\">{{ balance }}</text>\n </view>\n <view class=\"balance-tips\">\n <text class=\"tips-text\">余额来源于免单奖励,请联系商家微信提现</text>\n </view>\n </view>\n\n <view class=\"stats-section\">\n <view class=\"stat-item\">\n <text class=\"stat-value\">{{ totalEarned }}</text>\n <text class=\"stat-label\">累计获得</text>\n </view>\n <view class=\"stat-divider\"></view>\n <view class=\"stat-item\">\n <text class=\"stat-value\">{{ totalWithdrawn }}</text>\n <text class=\"stat-label\">已提现</text>\n </view>\n </view>\n\n <view class=\"records-section\">\n <view class=\"section-header\">\n <text class=\"section-title\">余额明细</text>\n </view>\n\n <view v-if=\"loading\" class=\"loading-state\">\n <text class=\"loading-text\">加载中...</text>\n </view>\n\n <view v-else-if=\"records.length === 0\" class=\"empty-state\">\n <text class=\"empty-text\">暂无余额记录</text>\n </view>\n\n <view v-else class=\"record-list\">\n <view class=\"record-item\" v-for=\"record in records\" :key=\"record.id\">\n <view class=\"record-left\">\n <text class=\"record-type\">{{ getTypeText(record.type) }}</text>\n <text class=\"record-time\">{{ formatTime(record.created_at) }}</text>\n </view>\n <view class=\"record-right\">\n <text class=\"record-amount\" :class=\"record.amount > 0 ? 'positive' : 'negative'\">\n {{ record.amount > 0 ? '+' : '' }}{{ record.amount }}\n </text>\n <text class=\"record-balance\">余额: {{ record.balance_after }}</text>\n </view>\n </view>\n </view>\n </view>\n\n <view class=\"withdraw-section\">\n <button class=\"withdraw-btn\" @click=\"showWithdrawTips\">\n <text class=\"btn-text\">申请提现</text>\n </button>\n <text class=\"withdraw-tip\">提现请联系商家微信处理</text>\n </view>\n </scroll-view>\n</template>\n\n<script setup lang=\"uts\">\nimport { ref, onMounted } from 'vue'\nimport { supabaseService } from '@/utils/supabaseService.uts'\n\ntype BalanceRecord = {\n id: string\n type: string\n amount: number\n balance_before: number\n balance_after: number\n description: string | null\n created_at: string\n}\n\nconst balance = ref<number>(0)\nconst totalEarned = ref<number>(0)\nconst totalWithdrawn = ref<number>(0)\nconst records = ref<BalanceRecord[]>([])\nconst loading = ref<boolean>(true)\n\nconst loadBalance = async (): Promise<void> => {\n try {\n const result = await supabaseService.getUserBalance()\n balance.value = result.getNumber('balance') ?? 0\n totalEarned.value = result.getNumber('total_earned') ?? 0\n totalWithdrawn.value = result.getNumber('total_withdrawn') ?? 0\n } catch (e) {\n console.error('加载余额失败:', e)\n }\n}\n\nconst loadRecords = async (): Promise<void> => {\n loading.value = true\n try {\n const result = await supabaseService.getBalanceRecords(1, 50)\n const parsed: BalanceRecord[] = []\n \n for (let i = 0; i < result.length; i++) {\n const item = result[i]\n \n let id = ''\n let type = ''\n let amount = 0\n let balanceBefore = 0\n let balanceAfter = 0\n let description: string | null = null\n let createdAt = ''\n \n let itemObj: UTSJSONObject | null = null\n if (item instanceof UTSJSONObject) {\n itemObj = item\n } else {\n itemObj = JSON.parse(JSON.stringify(item)) as UTSJSONObject\n }\n \n id = itemObj.getString('id') ?? ''\n type = itemObj.getString('type') ?? ''\n amount = itemObj.getNumber('amount') ?? 0\n balanceBefore = itemObj.getNumber('balance_before') ?? 0\n balanceAfter = itemObj.getNumber('balance_after') ?? 0\n description = itemObj.getString('description')\n createdAt = itemObj.getString('created_at') ?? ''\n \n parsed.push({\n id,\n type,\n amount,\n balance_before: balanceBefore,\n balance_after: balanceAfter,\n description,\n created_at: createdAt\n })\n }\n \n records.value = parsed\n } catch (e) {\n console.error('加载余额记录失败:', e)\n } finally {\n loading.value = false\n }\n}\n\nconst loadData = async (): Promise<void> => {\n await Promise.all([\n loadBalance(),\n loadRecords()\n ])\n}\n\nconst getTypeText = (type: string): string => {\n if (type === 'free_order') return '免单奖励'\n if (type === 'rebate') return '返利'\n if (type === 'withdraw') return '提现'\n if (type === 'clear') return '余额清零'\n if (type === 'manual') return '手动调整'\n return '余额变动'\n}\n\nconst formatTime = (timeStr: string): string => {\n if (timeStr === '') return ''\n const date = new Date(timeStr)\n const y = date.getFullYear()\n const m = (date.getMonth() + 1).toString().padStart(2, '0')\n const d = date.getDate().toString().padStart(2, '0')\n const hh = date.getHours().toString().padStart(2, '0')\n const mm = date.getMinutes().toString().padStart(2, '0')\n return `${y}-${m}-${d} ${hh}:${mm}`\n}\n\nconst showWithdrawTips = (): void => {\n uni.showModal({\n title: '提现说明',\n content: '请添加商家微信进行提现处理,商家确认后将通过微信转账给您。',\n showCancel: false,\n confirmText: '我知道了'\n })\n}\n\nonMounted(() => {\n loadData()\n})\n</script>\n\n<style>\n.balance-page {\n flex: 1;\n height: 100%;\n background-color: #f5f5f5;\n}\n\n.balance-header {\n background: linear-gradient(135deg, #ff6b35 0%, #ff8c42 100%);\n padding: 30px 20px;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.balance-info {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.balance-label {\n font-size: 14px;\n color: rgba(255, 255, 255, 0.8);\n margin-bottom: 8px;\n}\n\n.balance-value {\n font-size: 42px;\n font-weight: bold;\n color: white;\n}\n\n.balance-tips {\n margin-top: 16px;\n padding: 8px 16px;\n background-color: rgba(255, 255, 255, 0.2);\n border-radius: 16px;\n}\n\n.tips-text {\n font-size: 12px;\n color: rgba(255, 255, 255, 0.9);\n}\n\n.stats-section {\n display: flex;\n flex-direction: row;\n background-color: white;\n padding: 20px 0;\n margin-bottom: 8px;\n}\n\n.stat-item {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.stat-value {\n font-size: 24px;\n font-weight: bold;\n color: #333;\n}\n\n.stat-label {\n font-size: 12px;\n color: #999;\n margin-top: 4px;\n}\n\n.stat-divider {\n width: 1px;\n height: 40px;\n background-color: #f0f0f0;\n}\n\n.records-section {\n background-color: white;\n padding: 0 16px;\n min-height: 200px;\n}\n\n.section-header {\n padding: 16px 0;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.section-title {\n font-size: 16px;\n font-weight: bold;\n color: #333;\n}\n\n.loading-state {\n padding: 40px 0;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.loading-text {\n font-size: 14px;\n color: #999;\n}\n\n.empty-state {\n padding: 40px 0;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.empty-text {\n font-size: 14px;\n color: #999;\n}\n\n.record-list {\n display: flex;\n flex-direction: column;\n}\n\n.record-item {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n padding: 16px 0;\n border-bottom: 1px solid #f9f9f9;\n}\n\n.record-left {\n display: flex;\n flex-direction: column;\n}\n\n.record-type {\n font-size: 15px;\n color: #333;\n margin-bottom: 4px;\n}\n\n.record-time {\n font-size: 12px;\n color: #999;\n}\n\n.record-right {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n}\n\n.record-amount {\n font-size: 18px;\n font-weight: bold;\n margin-bottom: 4px;\n}\n\n.record-amount.positive {\n color: #ff6b35;\n}\n\n.record-amount.negative {\n color: #333;\n}\n\n.record-balance {\n font-size: 12px;\n color: #999;\n}\n\n.withdraw-section {\n padding: 20px 16px;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.withdraw-btn {\n width: 100%;\n height: 44px;\n background: linear-gradient(135deg, #ff6b35 0%, #ff8c42 100%);\n border-radius: 22px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.btn-text {\n font-size: 16px;\n font-weight: bold;\n color: white;\n}\n\n.withdraw-tip {\n font-size: 12px;\n color: #999;\n margin-top: 12px;\n}\n</style>\n",null],"names":[],"mappings":"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"} |