1 line
37 KiB
Plaintext
1 line
37 KiB
Plaintext
{"version":3,"sources":["pages/mall/consumer/payment.uvue","pages/mall/consumer/address-list.uvue","uni_modules/ak-req/ak-req.uts","pages/user/change-password.uvue","pages/user/terms.uvue","pages/user/login.uvue","pages/user/register.uvue","pages/user/center.uvue"],"sourcesContent":["<!-- 支付页面 -->\r\n<template>\r\n\t<view class=\"payment-page\">\r\n\t\t<view class=\"payment-content\">\r\n\t\t\t<!-- 价格明细 -->\r\n\t\t\t<view class=\"price-detail-section\">\r\n\t\t\t\t<text class=\"section-title\">价格明细</text>\r\n\t\t\t\t<view class=\"price-detail\">\r\n\t\t\t\t\t<view class=\"price-row\">\r\n\t\t\t\t\t\t<text class=\"price-label\">商品总价</text>\r\n\t\t\t\t\t\t<text class=\"price-value\">¥{{ productAmount.toFixed(2) }}</text>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t\t<view class=\"price-row\">\r\n\t\t\t\t\t\t<text class=\"price-label\">运费</text>\r\n\t\t\t\t\t\t<text class=\"price-value\">+¥{{ deliveryFee.toFixed(2) }}</text>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t\t<view v-if=\"discountAmount > 0\" class=\"price-row\">\r\n\t\t\t\t\t\t<text class=\"price-label\">优惠减免</text>\r\n\t\t\t\t\t\t<text class=\"price-value discount\">-¥{{ discountAmount.toFixed(2) }}</text>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t\t<view class=\"price-row total\">\r\n\t\t\t\t\t\t<text class=\"price-label\">应付金额</text>\r\n\t\t\t\t\t\t<text class=\"price-value total-price\">¥{{ amount.toFixed(2) }}</text>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t</view>\r\n\t\t\t\t<text class=\"order-no\">订单号: {{ orderNo }}</text>\r\n\t\t\t</view>\r\n\r\n\t\t\t<!-- 支付方式 -->\r\n\t\t\t<view class=\"methods-section\">\r\n\t\t\t\t<text class=\"section-title\">选择支付方式</text>\r\n\t\t\t\t<view class=\"method-list\">\r\n\t\t\t\t\t<view v-for=\"method in paymentMethods\" \r\n\t\t\t\t\t\t\t\t:key=\"method.id\" \r\n\t\t\t\t\t\t\t\t:class=\"['method-item', { selected: selectedMethod === method.id }]\"\r\n\t\t\t\t\t\t\t\t@click=\"selectMethod(method)\">\r\n\t\t\t\t\t\t<view class=\"method-left\">\r\n\t\t\t\t\t\t\t<text class=\"method-icon\">{{ getMethodIcon(method.id) }}</text>\r\n\t\t\t\t\t\t\t<view class=\"method-info\">\r\n\t\t\t\t\t\t\t\t<text class=\"method-name\">{{ method.name }}</text>\r\n\t\t\t\t\t\t\t\t<text class=\"method-desc\">{{ method.description }}</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\t<view v-if=\"selectedMethod === method.id\" class=\"method-selected\">\r\n\t\t\t\t\t\t\t<text class=\"selected-icon\">✓</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\r\n\t\t\t<!-- 余额支付 -->\r\n\t\t\t<view v-if=\"selectedMethod === 'balance' && userBalance > 0\" class=\"balance-section\">\r\n\t\t\t\t<view class=\"balance-info\">\r\n\t\t\t\t\t<text class=\"balance-label\">账户余额</text>\r\n\t\t\t\t\t<text class=\"balance-value\">¥{{ userBalance.toFixed(2) }}</text>\r\n\t\t\t\t</view>\r\n\t\t\t\t<view v-if=\"userBalance < amount\" class=\"balance-tip\">\r\n\t\t\t\t\t<text class=\"tip-text\">余额不足,请选择其他支付方式</text>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\r\n\t\t\t<!-- 密码输入 -->\r\n\t\t\t<view v-if=\"showPassword\" class=\"password-section\">\r\n\t\t\t\t<text class=\"password-title\">请输入支付密码</text>\r\n\t\t\t\t<view class=\"password-input\">\r\n\t\t\t\t\t<view v-for=\"(_, index) in 6\" \r\n\t\t\t\t\t\t\t\t:key=\"index\" \r\n\t\t\t\t\t\t\t\tclass=\"password-dot\">\r\n\t\t\t\t\t\t<text v-if=\"password.length > index\" class=\"password-dot-text\">●</text>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t</view>\r\n\t\t\t\t<text class=\"forgot-password\" @click=\"forgotPassword\">忘记密码?</text>\r\n\t\t\t</view>\r\n\t\t</view>\r\n\r\n\t\t<!-- 底部支付按钮 -->\r\n\t\t<view class=\"payment-bottom\">\r\n\t\t\t<view class=\"price-summary\">\r\n\t\t\t\t<text class=\"summary-label\">需支付:</text>\r\n\t\t\t\t<text class=\"summary-price\">¥{{ amount.toFixed(2) }}</text>\r\n\t\t\t</view>\r\n\t\t\t<button class=\"pay-btn\" \r\n\t\t\t\t\t\t\t:class=\"{ disabled: isPaying || (selectedMethod === 'balance' && userBalance < amount) }\"\r\n\t\t\t\t\t\t\t@click=\"confirmPayment\">\r\n\t\t\t\t<text v-if=\"!isPaying\" class=\"pay-text\">{{ getPayButtonText() }}</text>\r\n\t\t\t\t<text v-else class=\"pay-text\">支付中...</text>\r\n\t\t\t</button>\r\n\t\t</view>\r\n\r\n\t\t<!-- 密码键盘 -->\r\n\t\t<view v-if=\"showPassword\" class=\"password-keyboard\">\r\n\t\t\t<view class=\"keyboard-grid\">\r\n\t\t\t\t<view v-for=\"num in 9\" \r\n\t\t\t\t\t\t\t:key=\"num\" \r\n\t\t\t\t\t\t\tclass=\"keyboard-key\"\r\n\t\t\t\t\t\t\t@click=\"inputPassword(num.toString())\">\r\n\t\t\t\t\t<text class=\"key-text\">{{ num }}</text>\r\n\t\t\t\t</view>\r\n\t\t\t\t<view class=\"keyboard-key\"></view>\r\n\t\t\t\t<view class=\"keyboard-key\" @click=\"inputPassword('0')\">\r\n\t\t\t\t\t<text class=\"key-text\">0</text>\r\n\t\t\t\t</view>\r\n\t\t\t\t<view class=\"keyboard-key\" @click=\"deletePassword\">\r\n\t\t\t\t\t<text class=\"key-text\">⌫</text>\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, onMounted, watch, computed, onUnmounted } from 'vue'\r\nimport { supabaseService } from '@/utils/supabaseService.uts'\r\n\r\ntype PaymentMethodType = {\r\n\tid: string\r\n\tname: string\r\n\tdescription: string\r\n\ticon: string\r\n\tenabled: boolean\r\n}\r\n\r\nconst orderId = ref<string>('')\r\nconst orderNo = ref<string>('')\r\nconst amount = ref<number>(0)\r\nconst paymentMethods = ref<Array<PaymentMethodType>>([])\r\nconst selectedMethod = ref<string>('wechat')\r\nconst userBalance = ref<number>(0)\r\nconst isPaying = ref<boolean>(false)\r\nconst showPassword = ref<boolean>(false)\r\nconst password = ref<string>('')\r\n\r\n// 价格相关变量\r\nconst productAmount = ref<number>(0) // 商品总价\r\nconst deliveryFee = ref<number>(0) // 运费\r\nconst discountAmount = ref<number>(0) // 优惠减免\r\n\r\n// 加载支付方式(必须在 onMounted 之前定义)\r\nconst loadPaymentMethods = () => {\r\n\tconst methods: PaymentMethodType[] = [\r\n\t\t{\r\n\t\t\tid: 'wechat',\r\n\t\t\tname: '微信支付',\r\n\t\t\tdescription: '推荐安装微信5.0及以上版本使用',\r\n\t\t\ticon: '💳',\r\n\t\t\tenabled: true\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 'alipay',\r\n\t\t\tname: '支付宝',\r\n\t\t\tdescription: '推荐安装支付宝10.0及以上版本使用',\r\n\t\t\ticon: '💳',\r\n\t\t\tenabled: true\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 'balance',\r\n\t\t\tname: '余额支付',\r\n\t\t\tdescription: '使用账户余额支付',\r\n\t\t\ticon: '💰',\r\n\t\t\tenabled: true\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 'bankcard',\r\n\t\t\tname: '银行卡支付',\r\n\t\t\tdescription: '支持储蓄卡、信用卡',\r\n\t\t\ticon: '💳',\r\n\t\t\tenabled: true\r\n\t\t}\r\n\t]\r\n\tpaymentMethods.value = methods\r\n}\r\n\r\n// 加载用户余额(必须在 onMounted 之前定义)\r\nconst loadUserBalance = async () => {\r\n\ttry {\r\n const balance = await supabaseService.getUserBalance()\r\n userBalance.value = balance\r\n\t} catch (err) {\r\n\t\tconsole.error('加载用户余额异常:', err)\r\n userBalance.value = 0\r\n\t}\r\n}\r\n\r\n// 计算价格明细(必须在 onMounted 之前定义)\r\nconst calculatePriceDetails = (totalAmount: number) => {\r\n\t// 模拟计算各项费用\r\n\t// 假设商品总价占总金额的80%,运费占10%,优惠减免占10%\r\n\tproductAmount.value = totalAmount * 0.8\r\n\tdeliveryFee.value = totalAmount * 0.1\r\n\tdiscountAmount.value = totalAmount * 0.1\r\n\t\r\n\t// 确保总和等于应付金额\r\n\tconst calculatedTotal = productAmount.value + deliveryFee.value - discountAmount.value\r\n\tif (Math.abs(calculatedTotal - totalAmount) > 0.01) {\r\n\t\t// 调整商品总价以匹配应付金额\r\n\t\tproductAmount.value = totalAmount + discountAmount.value - deliveryFee.value\r\n\t}\r\n}\r\n\r\n// 更新本地存储中的订单状态(必须在 onMounted 之前定义)\r\nconst updateOrderInStorage = (targetOrderId: string, status: number) => {\r\n\ttry {\r\n // 尝试从 'orders' 读取 (checkout页面写入的key)\r\n\t\tconst ordersStr = uni.getStorageSync('orders')\r\n\t\tlet orders: Record<string, any>[] = []\r\n\t\tif (ordersStr != null && ordersStr !== '') {\r\n\t\t\tconst parsed = JSON.parse(ordersStr as string)\r\n\t\t\tif (Array.isArray(parsed)) {\r\n\t\t\t\tfor (let i = 0; i < parsed.length; i++) {\r\n // 使用 JSON 序列化转换\r\n const itemStr = JSON.stringify(parsed[i])\r\n const itemParsed = JSON.parse(itemStr)\r\n if (itemParsed != null) {\r\n orders.push(itemParsed as Record<string, any>)\r\n }\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tlet foundIndex = -1\r\n\t\tfor (let i = 0; i < orders.length; i++) {\r\n\t\t\tconst o = orders[i]\r\n\t\t\tif (o['id'] === targetOrderId) {\r\n\t\t\t\tfoundIndex = i\r\n\t\t\t\tbreak\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif (foundIndex !== -1) {\r\n\t\t\torders[foundIndex]['status'] = status\r\n\t\t\torders[foundIndex]['payment_status'] = status === 2 ? 1 : 0 // 2=待发货(已支付), 1=待支付(未支付)\r\n\t\t\torders[foundIndex]['updated_at'] = new Date().toISOString()\r\n // 确保更新的是 'orders' key\r\n\t\t\tuni.setStorageSync('orders', JSON.stringify(orders))\r\n console.log('订单状态已更新到Storage (orders):', targetOrderId, status)\r\n\t\t} else {\r\n // 本地缓存中没有订单数据是正常的,数据在数据库中\r\n console.log('本地缓存中无订单数据,已忽略:', targetOrderId)\r\n }\r\n\t} catch (e) {\r\n\t\tconsole.error('更新订单状态失败', e)\r\n\t}\r\n}\r\n\r\n// 取消支付,更新订单状态(必须在 goBack 之前定义)\r\nconst cancelPayment = async () => {\r\n\ttry {\r\n\t\t// 这里应该调用API更新订单状态为待支付(status: 1)\r\n\t\t// 模拟更新订单状态\r\n \r\n // 更新本地存储\r\n updateOrderInStorage(orderId.value, 1) // 1: 待支付\r\n\t\t\r\n\t\t// 发布订单更新事件,让profile页面可以刷新数据\r\n\t\tuni.$emit('orderUpdated', { orderId: orderId.value, status: 1 })\r\n\t\t\r\n\t\tuni.showToast({\r\n\t\t\ttitle: '已保存到待支付订单',\r\n\t\t\ticon: 'success'\r\n\t\t})\r\n\t\t\r\n\t\t// 延迟返回,让用户看到提示\r\n\t\tsetTimeout(() => {\r\n\t\t\tuni.navigateBack()\r\n\t\t}, 1500)\r\n\t\t\r\n\t} catch (err) {\r\n\t\tconsole.error('取消支付异常:', err)\r\n\t\tuni.showToast({\r\n\t\t\ttitle: '操作失败',\r\n\t\t\ticon: 'none'\r\n\t\t})\r\n\t}\r\n}\r\n\r\n// 返回(必须在 onBackPress 之前定义)\r\nconst goBack = () => {\r\n\tuni.showModal({\r\n\t\ttitle: '取消支付',\r\n\t\tcontent: '确定要取消支付吗?取消后订单将保存到待支付订单中',\r\n\t\tconfirmText: '取消支付',\r\n\t\tcancelText: '继续支付',\r\n\t\tsuccess: (res) => {\r\n\t\t\tif (res.confirm) {\r\n\t\t\t\t// 用户确认取消支付,更新订单状态为待支付\r\n\t\t\t\tcancelPayment()\r\n\t\t\t}\r\n\t\t}\r\n\t})\r\n}\r\n\r\n// 加载订单信息(必须在 onMounted 之前定义)\r\nconst loadOrderInfo = async () => {\r\n\ttry {\r\n if (orderId.value == '') return\r\n\r\n const order = await supabaseService.getOrderDetail(orderId.value)\r\n if (order != null) {\r\n // 使用 JSON 序列化转换对象\r\n const orderStr = JSON.stringify(order)\r\n const orderParsed = JSON.parse(orderStr)\r\n if (orderParsed == null) {\r\n console.error('订单数据解析失败')\r\n return\r\n }\r\n const orderObj = orderParsed as UTSJSONObject\r\n \r\n const orderNoVal = orderObj.getString('order_no')\r\n if (orderNoVal != null) {\r\n orderNo.value = orderNoVal\r\n }\r\n \r\n const totalAmount = orderObj.getNumber('total_amount')\r\n const dbAmount = totalAmount ?? 0\r\n if (dbAmount > 0) {\r\n amount.value = dbAmount\r\n }\r\n const items = orderObj.get('items')\r\n if (items != null && Array.isArray(items) && items.length > 0) {\r\n // Could update product name etc if displayed\r\n }\r\n } else {\r\n // Fallback or error\r\n console.warn('Order not found in DB', orderId.value)\r\n if (orderNo.value == '') orderNo.value = 'ORD_PENDING_' + Date.now()\r\n }\r\n\t} catch (err) {\r\n\t\tconsole.error('加载订单信息异常:', err)\r\n\t}\r\n}\r\n\r\n// 生命周期\r\nonLoad((options) => {\r\n if (options != null) {\r\n const orderIdValue = options['orderId']\r\n if (orderIdValue != null) {\r\n orderId.value = orderIdValue as string\r\n loadOrderInfo()\r\n }\r\n \r\n const amountValue = options['amount']\r\n if (amountValue != null) {\r\n amount.value = parseFloat(amountValue.toString())\r\n }\r\n \r\n // 获取传递的价格详情\r\n const productAmountValue = options['productAmount']\r\n if (productAmountValue != null) {\r\n productAmount.value = parseFloat(productAmountValue.toString())\r\n }\r\n const deliveryFeeValue = options['deliveryFee']\r\n if (deliveryFeeValue != null) {\r\n deliveryFee.value = parseFloat(deliveryFeeValue.toString())\r\n }\r\n const discountAmountValue = options['discountAmount']\r\n if (discountAmountValue != null) {\r\n discountAmount.value = parseFloat(discountAmountValue.toString())\r\n }\r\n \r\n // 如果没有传详情,尝试根据总价估算(兼容旧逻辑,但优先使用传参)\r\n if (productAmountValue == null && amount.value > 0) {\r\n calculatePriceDetails(amount.value)\r\n }\r\n \r\n loadPaymentMethods()\r\n loadUserBalance()\r\n }\r\n})\r\n\r\nonMounted(() => {\r\n // onMounted 中的逻辑已移到 onLoad 中\r\n})\r\n\r\n// 监听返回操作(包含系统返回键和导航栏返回按钮)\r\nonBackPress((options) => {\r\n\t// 如果是通过代码主动调用 navigateBack 返回,则允许\r\n\tif (options.from === 'navigateBack') {\r\n\t\treturn false\r\n\t}\r\n\t\r\n\t// 否则拦截返回,显示确认弹窗\r\n\tgoBack()\r\n\treturn true\r\n})\r\n\r\n// 获取当前用户ID\r\nconst getCurrentUserId = (): string => {\r\n\tconst userStore = uni.getStorageSync('userInfo')\r\n\tif (userStore != null) {\r\n // 使用 JSON 序列化转换\r\n const userStr = JSON.stringify(userStore)\r\n const userParsed = JSON.parse(userStr)\r\n if (userParsed != null) {\r\n const userObj = userParsed as UTSJSONObject\r\n const id = userObj.getString('id')\r\n if (id != null) {\r\n return id\r\n }\r\n }\r\n\t}\r\n\treturn ''\r\n}\r\n\r\n// 获取支付方式图标\r\nconst getMethodIcon = (methodId: string): string => {\r\n\tif (methodId === 'wechat') {\r\n\t\treturn '💳'\r\n\t} else if (methodId === 'alipay') {\r\n\t\treturn '💳'\r\n\t} else if (methodId === 'balance') {\r\n\t\treturn '💰'\r\n\t} else if (methodId === 'bankcard') {\r\n\t\treturn '💳'\r\n\t}\r\n\treturn '💳'\r\n}\r\n\r\n// 选择支付方式\r\nconst selectMethod = (method: PaymentMethodType) => {\r\n\tif (!method.enabled) {\r\n\t\tuni.showToast({\r\n\t\t\ttitle: '该支付方式暂不可用',\r\n\t\t\ticon: 'none'\r\n\t\t})\r\n\t\treturn\r\n\t}\r\n\t\r\n\tselectedMethod.value = method.id\r\n\tshowPassword.value = method.id === 'balance' || method.id === 'bankcard'\r\n\tpassword.value = '' // 清空密码\r\n}\r\n\r\n// 获取支付按钮文本\r\nconst getPayButtonText = (): string => {\r\n\tif (selectedMethod.value === 'balance' && userBalance.value < amount.value) {\r\n\t\treturn '余额不足'\r\n\t}\r\n\t\r\n\tif (selectedMethod.value === 'wechat') {\r\n\t\treturn '微信支付'\r\n\t} else if (selectedMethod.value === 'alipay') {\r\n\t\treturn '支付宝支付'\r\n\t} else if (selectedMethod.value === 'balance') {\r\n\t\treturn '余额支付'\r\n\t} else if (selectedMethod.value === 'bankcard') {\r\n\t\treturn '银行卡支付'\r\n\t}\r\n\treturn '确认支付'\r\n}\r\n\r\n// 减少商品库存\r\n// const reduceStock = (orderId: string) => {\r\n // Update should happen on server side during payment processing\r\n// }\r\n\r\n// 确认支付\r\nconst confirmPayment = async () => {\r\n\tif (isPaying.value) return\r\n\t\r\n\t// 余额支付检查\r\n\tif (selectedMethod.value === 'balance') {\r\n\t\tif (userBalance.value < amount.value) {\r\n\t\t\tuni.showToast({\r\n\t\t\t\ttitle: '余额不足',\r\n\t\t\t\ticon: 'none'\r\n\t\t\t})\r\n\t\t\treturn\r\n\t\t}\r\n\t\t\r\n\t\tif (!showPassword.value) {\r\n\t\t\tshowPassword.value = true\r\n\t\t\treturn\r\n\t\t}\r\n\t\t\r\n\t\tif (password.value.length !== 6) {\r\n\t\t\tuni.showToast({\r\n\t\t\t\ttitle: '请输入6位支付密码',\r\n\t\t\t\ticon: 'none'\r\n\t\t\t})\r\n\t\t\treturn\r\n\t\t}\r\n\t}\r\n\t\r\n\tisPaying.value = true\r\n\tuni.showLoading({ title: '支付中...' })\r\n\t\r\n\ttry {\r\n console.log('[confirmPayment] 开始支付, orderId:', orderId.value, 'method:', selectedMethod.value)\r\n \r\n const success = await supabaseService.payOrder(orderId.value, selectedMethod.value, amount.value)\r\n console.log('[confirmPayment] 支付结果:', success)\r\n\r\n if (!success) {\r\n console.error('[confirmPayment] payOrder 返回 false')\r\n uni.hideLoading()\r\n uni.showToast({\r\n title: '支付处理失败',\r\n icon: 'none'\r\n })\r\n isPaying.value = false\r\n return\r\n }\r\n\t\t\r\n\t\tuni.hideLoading()\r\n\t\t\r\n\t\tupdateOrderInStorage(orderId.value, 2)\r\n\t\t\r\n\t\tuni.showToast({\r\n\t\t\ttitle: '支付成功',\r\n\t\t\ticon: 'success',\r\n\t\t\tduration: 2000\r\n\t\t})\r\n\t\t\r\n\t\tuni.$emit('orderUpdated', { orderId: orderId.value, status: 2 })\r\n\t\t\r\n\t\tsetTimeout(() => {\r\n\t\t\tuni.redirectTo({\r\n\t\t\t\turl: `/pages/mall/consumer/payment-success?orderId=${orderId.value}`\r\n\t\t\t})\r\n\t\t}, 1500)\r\n\t\t\r\n\t} catch (err) {\r\n\t\tconsole.error('[confirmPayment] 支付异常:', err)\r\n\t\tuni.hideLoading()\r\n\t\tuni.showToast({\r\n\t\t\ttitle: '支付失败',\r\n\t\t\ticon: 'none'\r\n\t\t})\r\n\t\tisPaying.value = false\r\n\t}\r\n}\r\n\r\n// 获取支付方式代码\r\nconst getPaymentMethodCode = (methodId: string): number => {\r\n\tif (methodId === 'wechat') {\r\n\t\treturn 1\r\n\t} else if (methodId === 'alipay') {\r\n\t\treturn 2\r\n\t} else if (methodId === 'balance') {\r\n\t\treturn 3\r\n\t} else if (methodId === 'bankcard') {\r\n\t\treturn 4\r\n\t}\r\n\treturn 0\r\n}\r\n\r\n// 验证密码(必须在 watch 之前定义)\r\nconst verifyPassword = async () => {\r\n\t// 这里应该验证支付密码,这里简单模拟\r\n\tconst userId = getCurrentUserId()\r\n\t\r\n\ttry {\r\n\t\t// 模拟验证\r\n\t\tawait new Promise<void>((resolve: (value: void) => void) => {\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tresolve()\r\n\t\t\t}, 500)\r\n\t\t})\r\n\t\t\r\n\t\t// 假设密码正确\r\n\t\tconst isCorrect = true\r\n\t\t\r\n\t\tif (isCorrect) {\r\n\t\t\t// 密码正确,继续支付\r\n\t\t\tconfirmPayment()\r\n\t\t} else {\r\n\t\t\tpassword.value = ''\r\n\t\t\tuni.showToast({\r\n\t\t\t\ttitle: '密码错误',\r\n\t\t\t\ticon: 'none'\r\n\t\t\t})\r\n\t\t}\r\n\t\t\r\n\t} catch (err) {\r\n\t\tconsole.error('验证密码异常:', err)\r\n\t}\r\n}\r\n\r\n// 输入密码\r\nconst inputPassword = (num: string) => {\r\n\tif (password.value.length >= 6) return\r\n\tpassword.value += num\r\n}\r\n\r\n// 删除密码\r\nconst deletePassword = () => {\r\n\tif (password.value.length > 0) {\r\n\t\tpassword.value = password.value.slice(0, -1)\r\n\t}\r\n}\r\n\r\n// 监听密码输入\r\nwatch(password, (newPassword: string) => {\r\n\tif (newPassword.length === 6) {\r\n\t\t// 自动验证密码\r\n\t\tverifyPassword()\r\n\t}\r\n})\r\n\r\n// 忘记密码\r\nconst forgotPassword = () => {\r\n\tuni.navigateTo({\r\n\t\turl: '/pages/user/forgot-password'\r\n\t})\r\n}\r\n\r\n// 在组件卸载时移除返回键监听\r\nonUnmounted(() => {\r\n\t// uni.offBackPress() 在uni-app中不需要手动移除\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n.payment-page {\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tflex: 1;\r\n\tbackground-color: #f5f5f5;\r\n}\r\n\r\n.payment-header {\r\n\tbackground-color: #ffffff;\r\n\tpadding: 15px;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tborder-bottom: 1px solid #e5e5e5;\r\n}\r\n\r\n.back-btn {\r\n\tfont-size: 24px;\r\n\tcolor: #333333;\r\n\tpadding: 5px;\r\n\tmargin-right: 15px;\r\n}\r\n\r\n.header-title {\r\n\tfont-size: 18px;\r\n\tfont-weight: bold;\r\n\tcolor: #333333;\r\n}\r\n\r\n.payment-content {\r\n\tflex: 1;\r\n\t/* overflow-y: auto; */\r\n}\r\n\r\n/* 价格明细部分 */\r\n.price-detail-section {\r\n\tbackground-color: #ffffff;\r\n\tpadding: 20px 15px;\r\n\tmargin-bottom: 10px;\r\n}\r\n\r\n.price-detail {\r\n\tpadding: 15px;\r\n\tbackground-color: #f8f9fa;\r\n\tborder-radius: 8px;\r\n\tmargin-bottom: 15px;\r\n}\r\n\r\n.price-row {\r\n\tdisplay: flex;\r\n\tjustify-content: space-between;\r\n\talign-items: center;\r\n\tpadding: 8px 0;\r\n}\r\n\r\n.price-row.total {\r\n\tborder-top: 1px solid #e5e5e5;\r\n\tmargin-top: 8px;\r\n\tpadding-top: 15px;\r\n}\r\n\r\n.price-label {\r\n\tfont-size: 14px;\r\n\tcolor: #666666;\r\n}\r\n\r\n.price-value {\r\n\tfont-size: 14px;\r\n\tcolor: #333333;\r\n}\r\n\r\n.price-value.discount {\r\n\tcolor: #4caf50;\r\n}\r\n\r\n.price-value.total-price {\r\n\tfont-size: 18px;\r\n\tcolor: #ff4757;\r\n\tfont-weight: bold;\r\n}\r\n\r\n.order-no {\r\n\t/* display: block; */\r\n\tfont-size: 12px;\r\n\tcolor: #999999;\r\n\ttext-align: center;\r\n}\r\n\r\n.methods-section {\r\n\tbackground-color: #ffffff;\r\n\tpadding: 20px 15px;\r\n\tmargin-bottom: 10px;\r\n}\r\n\r\n.section-title {\r\n\t/* display: block; */\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.method-list {\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\t/* gap: 10px; */\r\n}\r\n\r\n.method-item {\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: space-between;\r\n\tpadding: 15px;\r\n\tborder: 1px solid #e5e5e5;\r\n\tborder-radius: 8px;\r\n\tmargin-bottom: 10px;\r\n}\r\n\r\n.method-item.selected {\r\n\tborder-color: #007aff;\r\n\tbackground-color: #f0f8ff;\r\n}\r\n\r\n.method-left {\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n}\r\n\r\n.method-icon {\r\n\tfont-size: 24px;\r\n\tmargin-right: 15px;\r\n}\r\n\r\n.method-info {\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n}\r\n\r\n.method-name {\r\n\tfont-size: 16px;\r\n\tfont-weight: bold;\r\n\tcolor: #333333;\r\n\tmargin-bottom: 5px;\r\n}\r\n\r\n.method-desc {\r\n\tfont-size: 12px;\r\n\tcolor: #999999;\r\n}\r\n\r\n.method-selected {\r\n\twidth: 24px;\r\n\theight: 24px;\r\n\tborder-radius: 12px;\r\n\tbackground-color: #007aff;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n}\r\n\r\n.selected-icon {\r\n\tcolor: #ffffff;\r\n\tfont-size: 14px;\r\n}\r\n\r\n.balance-section {\r\n\tbackground-color: #ffffff;\r\n\tpadding: 15px;\r\n\tmargin-bottom: 10px;\r\n}\r\n\r\n.balance-info {\r\n\tdisplay: flex;\r\n\tjustify-content: space-between;\r\n\talign-items: center;\r\n\tmargin-bottom: 10px;\r\n}\r\n\r\n.balance-label {\r\n\tfont-size: 14px;\r\n\tcolor: #333333;\r\n}\r\n\r\n.balance-value {\r\n\tfont-size: 18px;\r\n\tcolor: #ff4757;\r\n\tfont-weight: bold;\r\n}\r\n\r\n.balance-tip {\r\n\tpadding: 10px;\r\n\tbackground-color: #fff0f0;\r\n\tborder-radius: 5px;\r\n}\r\n\r\n.tip-text {\r\n\tfont-size: 12px;\r\n\tcolor: #ff4757;\r\n}\r\n\r\n.password-section {\r\n\tbackground-color: #ffffff;\r\n\tpadding: 30px 15px;\r\n\ttext-align: center;\r\n\tmargin-bottom: 10px;\r\n}\r\n\r\n.password-title {\r\n\t/* display: block; */\r\n\tfont-size: 16px;\r\n\tcolor: #333333;\r\n\tmargin-bottom: 30px;\r\n}\r\n\r\n.password-input {\r\n\tdisplay: flex;\r\n\tjustify-content: center;\r\n\t/* gap: 15px; */\r\n\tmargin-bottom: 20px;\r\n}\r\n\r\n.password-dot {\r\n\twidth: 12px;\r\n\theight: 12px;\r\n\tborder-radius: 6px;\r\n\tbackground-color: #333333;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\tmargin: 0 7.5px;\r\n}\r\n\r\n.password-dot-text {\r\n\tcolor: #ffffff;\r\n\tfont-size: 8px;\r\n}\r\n\r\n.forgot-password {\r\n\tcolor: #007aff;\r\n\tfont-size: 14px;\r\n}\r\n\r\n.payment-bottom {\r\n\tbackground-color: #ffffff;\r\n\tborder-top: 1px solid #e5e5e5;\r\n\tpadding: 15px;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: space-between;\r\n}\r\n\r\n.price-summary {\r\n\tdisplay: flex;\r\n\talign-items: flex-end;\r\n}\r\n\r\n.summary-label {\r\n\tfont-size: 14px;\r\n\tcolor: #333333;\r\n\tmargin-right: 5px;\r\n}\r\n\r\n.summary-price {\r\n\tfont-size: 20px;\r\n\tcolor: #ff4757;\r\n\tfont-weight: bold;\r\n}\r\n\r\n.pay-btn {\r\n\tbackground-color: #007aff;\r\n\tcolor: #ffffff;\r\n\tpadding: 0 40px;\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.pay-btn.disabled {\r\n\tbackground-color: #cccccc;\r\n\topacity: 0.6;\r\n}\r\n\r\n.password-keyboard {\r\n\tbackground-color: #ffffff;\r\n\tborder-top: 1px solid #e5e5e5;\r\n\tpadding: 10px;\r\n}\r\n\r\n.keyboard-grid {\r\n\tdisplay: flex;\r\n\tflex-wrap: wrap;\r\n\t/* grid-template-columns: repeat(3, 1fr); uvue unsupported */\r\n\t/* grid-gap: 1px; uvue unsupported */\r\n\tbackground-color: #e5e5e5;\r\n}\r\n\r\n.keyboard-key {\r\n\twidth: 33.33%;\r\n\tbackground-color: #ffffff;\r\n\theight: 60px;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\tborder: 1px solid #f5f5f5; /* mimic grid gap */\r\n\tbox-sizing: border-box;\r\n}\r\n\r\n.key-text {\r\n\tfont-size: 24px;\r\n\tcolor: #333333;\r\n}\r\n</style>\r\n",null,null,null,null,null,null,null],"names":[],"mappings":"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"} |