Files
medical-mall/unpackage/cache/.app-android/sourcemap/pages/mall/consumer/withdraw.kt.map

1 line
14 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"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.getUserBalance()\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>",null,null,null],"names":[],"mappings":"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"}