1 line
14 KiB
Plaintext
1 line
14 KiB
Plaintext
{"version":3,"sources":["pages/mall/consumer/withdraw.uvue","pages/user/terms.uvue","pages/user/login.uvue","uni_modules/ak-req/ak-req.uts"],"sourcesContent":["<template>\r\n <view class=\"page-container\">\r\n <view class=\"card\">\r\n <view class=\"section-title\">提现至</view>\r\n \r\n <view class=\"bank-selector\" @click=\"openBankSelector\">\r\n <view class=\"bank-info\" v-if=\"selectedBank != null\">\r\n <text class=\"bank-name\">{{ selectedBank.bank_name }}</text>\r\n <text class=\"card-type\">储蓄卡</text>\r\n <text class=\"card-no\">尾号 {{ getTailNumber(selectedBank.card_number) }}</text>\r\n </view>\r\n <view class=\"bank-info placeholder\" v-else>\r\n <text>请选择到账银行卡</text>\r\n </view>\r\n <text class=\"arrow\">></text>\r\n </view>\r\n\r\n <view class=\"amount-section\">\r\n <text class=\"label\">提现金额</text>\r\n <view class=\"input-wrapper\">\r\n <text class=\"currency\">¥</text>\r\n <input \r\n class=\"amount-input\"\r\n type=\"digit\"\r\n v-model=\"amount\"\r\n placeholder=\"请输入提现金额\"\r\n />\r\n </view>\r\n <view class=\"balance-line\">\r\n <text class=\"balance-text\">当前可提现余额 ¥{{ balance }}</text>\r\n <text class=\"all-btn\" @click=\"setAll\">全部提现</text>\r\n </view>\r\n </view>\r\n\r\n <button \r\n class=\"submit-btn\" \r\n :disabled=\"isValid === false\" \r\n :loading=\"loading\"\r\n @click=\"submitWithdraw\"\r\n >\r\n {{ loading ? '处理中...' : '确认提现' }}\r\n </button>\r\n </view>\r\n\r\n <!-- 简单弹窗选择银行卡 -->\r\n <view v-if=\"showBankPopup\" class=\"popup-mask\" @click=\"showBankPopup = false\">\r\n <view class=\"popup-content\" @click.stop>\r\n <view class=\"popup-header\">\r\n <text class=\"popup-title\">选择到账银行卡</text>\r\n <text class=\"close-btn\" @click=\"showBankPopup = false\">×</text>\r\n </view>\r\n <scroll-view scroll-y=\"true\" class=\"bank-list\">\r\n <view \r\n v-for=\"(item, index) in bankCards\" \r\n :key=\"index\"\r\n class=\"bank-item\"\r\n @click=\"selectBank(item)\"\r\n >\r\n <view class=\"bank-row\">\r\n <text class=\"bank-name-popup\">{{ item.bank_name }}</text>\r\n <text class=\"card-no-popup\">({{ getTailNumber(item.card_number) }})</text>\r\n </view>\r\n <text v-if=\"selectedBank != null && selectedBank.id == item.id\" class=\"check\">✓</text>\r\n </view>\r\n <view class=\"add-card-btn\" @click=\"navigateToAddCard\">\r\n <text>+ 添加银行卡</text>\r\n </view>\r\n </scroll-view>\r\n </view>\r\n </view>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\nimport { ref, computed, onMounted } from 'vue'\r\nimport { supabaseService } from '@/utils/supabaseService.uts'\r\n\r\ntype BankCard = {\r\n id: string\r\n bank_name: string\r\n card_number: string\r\n}\r\n\r\nconst amount = ref('')\r\nconst balance = ref(0.00)\r\nconst loading = ref(false)\r\nconst bankCards = ref<BankCard[]>([])\r\nconst selectedBank = ref<BankCard | null>(null)\r\nconst showBankPopup = ref(false)\r\n\r\nconst isValid = computed((): boolean => {\r\n const val = parseFloat(amount.value)\r\n // 检查 val 是否有效(替代 isNaN)\r\n if (val == null || val <= 0) return false\r\n if (val > balance.value) return false\r\n if (selectedBank.value == null) return false\r\n return true\r\n})\r\n\r\nconst loadData = async (): Promise<void> => {\r\n try {\r\n const bal = await supabaseService.getUserBalanceNumber()\r\n balance.value = bal\r\n \r\n const res = await supabaseService.getUserBankCards()\r\n const list: Array<BankCard> = []\r\n for(let i: number = 0; i < res.length; i++) {\r\n const item = res[i]\r\n \r\n let id = ''\r\n let bankName = ''\r\n let cardNum = ''\r\n \r\n if (item instanceof UTSJSONObject) {\r\n id = item.getString('id') ?? ''\r\n bankName = item.getString('bank_name') ?? ''\r\n cardNum = item.getString('card_number') ?? ''\r\n } else {\r\n const itemObj = item as UTSJSONObject\r\n id = itemObj.getString('id') ?? ''\r\n bankName = itemObj.getString('bank_name') ?? ''\r\n cardNum = itemObj.getString('card_number') ?? ''\r\n }\r\n\r\n if (id != '') {\r\n const card: BankCard = {\r\n id: id,\r\n bank_name: bankName,\r\n card_number: cardNum\r\n } as BankCard\r\n list.push(card)\r\n }\r\n }\r\n \r\n bankCards.value = list\r\n if (bankCards.value.length > 0) {\r\n selectedBank.value = bankCards.value[0]\r\n }\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n}\r\n\r\nonMounted(() => {\r\n loadData()\r\n})\r\n\r\nconst getTailNumber = (cardNo: string | null): string => {\r\n if (cardNo == null) return ''\r\n if (cardNo.length <= 4) return cardNo\r\n return cardNo.substring(cardNo.length - 4)\r\n}\r\n\r\nconst setAll = () => {\r\n amount.value = balance.value.toString()\r\n}\r\n\r\nconst openBankSelector = () => {\r\n showBankPopup.value = true\r\n}\r\n\r\nconst selectBank = (bank: BankCard) => {\r\n selectedBank.value = bank\r\n showBankPopup.value = false\r\n}\r\n\r\nconst navigateToAddCard = () => {\r\n uni.navigateTo({\r\n url: '/pages/mall/consumer/bank-cards/add'\r\n })\r\n showBankPopup.value = false\r\n}\r\n\r\nconst submitWithdraw = async () => {\r\n if (isValid.value === false) return\r\n loading.value = true\r\n \r\n try {\r\n const val = parseFloat(amount.value)\r\n const success = await supabaseService.withdrawBalance(val)\r\n \r\n if (success) {\r\n uni.showToast({\r\n title: '提现申请已提交',\r\n icon: 'success'\r\n })\r\n setTimeout(() => {\r\n uni.navigateBack()\r\n }, 1500)\r\n } else {\r\n uni.showToast({\r\n title: '提现失败, ' + (val > balance.value ? '余额不足' : '请重试'),\r\n icon: 'none'\r\n })\r\n }\r\n } catch (e) {\r\n uni.showToast({\r\n title: '系统异常',\r\n icon: 'none'\r\n })\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.page-container {\r\n background-color: #f5f5f5;\r\n flex: 1; /* Fixed 100vh issue */\r\n padding: 20px;\r\n}\r\n.card {\r\n background-color: #fff;\r\n border-radius: 12px;\r\n padding: 20px;\r\n}\r\n.section-title {\r\n font-size: 16px;\r\n color: #333;\r\n margin-bottom: 15px;\r\n}\r\n.bank-selector {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n padding: 15px 0;\r\n border-bottom: 1px solid #eee;\r\n}\r\n.bank-info {\r\n display: flex;\r\n align-items: center;\r\n /* gap removed */\r\n}\r\n.bank-name {\r\n margin-right: 10px;\r\n font-weight: bold;\r\n}\r\n.card-type {\r\n margin-right: 10px;\r\n}\r\n.placeholder {\r\n color: #999;\r\n}\r\n.amount-section {\r\n margin-top: 20px;\r\n}\r\n.label {\r\n font-size: 14px;\r\n color: #666;\r\n margin-bottom: 10px;\r\n /* display: block removed */\r\n}\r\n.input-wrapper {\r\n display: flex;\r\n align-items: center;\r\n border-bottom: 1px solid #eee;\r\n padding-bottom: 10px;\r\n margin-bottom: 10px;\r\n}\r\n.currency {\r\n font-size: 30px;\r\n font-weight: bold;\r\n margin-right: 10px;\r\n}\r\n.amount-input {\r\n flex: 1;\r\n font-size: 30px;\r\n font-weight: bold;\r\n height: 40px;\r\n}\r\n.balance-line {\r\n display: flex;\r\n justify-content: space-between;\r\n font-size: 12px;\r\n}\r\n.balance-text {\r\n color: #999;\r\n}\r\n.all-btn {\r\n color: #5785e5;\r\n}\r\n.submit-btn {\r\n margin-top: 40px;\r\n background-color: #5785e5;\r\n color: #fff;\r\n border-radius: 25px;\r\n}\r\n.submit-btn:disabled {\r\n background-color: #ccc;\r\n}\r\n\r\n.popup-mask {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n background-color: rgba(0,0,0,0.5);\r\n z-index: 999;\r\n display: flex;\r\n justify-content: center;\r\n align-items: flex-end;\r\n}\r\n.popup-content {\r\n background-color: #fff;\r\n width: 100%;\r\n border-top-left-radius: 16px;\r\n border-top-right-radius: 16px;\r\n padding: 20px;\r\n min-height: 300px;\r\n}\r\n.popup-header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n margin-bottom: 20px;\r\n}\r\n.popup-title {\r\n font-size: 16px;\r\n font-weight: bold;\r\n}\r\n.close-btn {\r\n font-size: 20px;\r\n color: #999;\r\n padding: 5px;\r\n}\r\n.bank-item {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n padding: 15px 0;\r\n border-bottom: 1px solid #f5f5f5;\r\n}\r\n.add-card-btn {\r\n padding: 15px 0;\r\n text-align: center;\r\n color: #5785e5;\r\n font-weight: bold;\r\n}\r\n</style>\r\n",null,null,null],"names":[],"mappings":"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"} |