/** * 关灯重开页面 */ import { View, Text, Image } from '@tarojs/components' import Taro, { useLoad, useRouter } from '@tarojs/taro' import { useState } from 'react' import { observer } from 'mobx-react' import { turnOffRestart, invokeWechatPay } from '../../api/startDevice' import { userStore, tableStore } from '../../store' import './index.scss' // 使用本地图片资源 const phoneIcon = require('../startTable/images/phone.png') const locationIcon = require('../../assets/icon/locationIcon.png') const TurnOffRestart = observer(() => { const router = useRouter() const [loading, setLoading] = useState(false) // 加载状态 // 从路由参数获取设备信息和操作记录ID,如果没有则从 store 获取 const grpSn = tableStore.getGrpSn(router.params.grpSn) const operationId = tableStore.getOperationId(Number(router.params.operationId)) const scanInfo = tableStore.scanInfo const opInfo = scanInfo?.opInfo const priceInfo = scanInfo?.price useLoad(() => { console.log('关灯重开页面加载, 设备编码:', grpSn, '操作记录ID:', operationId) if (grpSn) tableStore.setCurrentGrpSn(grpSn) if (operationId) tableStore.setCurrentOperationId(operationId) }) // 拨打电话 const handlePhoneCall = () => { Taro.makePhoneCall({ phoneNumber: '100-666-XXXX', }).catch((err) => { console.error('拨打电话失败:', err) }) } // 确认结算 const handleConfirmSettle = async () => { if (loading) return // 获取用户 openId const openId = userStore.userInfo?.wxOpenId || Taro.getStorageSync('openId') if (!openId) { Taro.showToast({ title: '请先登录', icon: 'none', duration: 2000 }) return } if (!grpSn) { Taro.showToast({ title: '设备信息异常', icon: 'none', duration: 2000 }) return } // 确认结算 const confirmResult = await Taro.showModal({ title: '确认结算', content: '结算本次消费金额,押金于最后关台时结算。确定要继续吗?', confirmText: '确定', cancelText: '取消' }) if (!confirmResult.confirm) { return } setLoading(true) try { console.log('关灯重开,设备编码:', grpSn, '操作记录ID:', operationId) // 调用关灯重开接口 const result = await turnOffRestart(grpSn, openId) console.log('关灯重开接口返回:', result) // 判断是否需要支付 if (result.data.paymentResponseDto?.payParameters) { // 调起微信支付 try { await invokeWechatPay(result.data.paymentResponseDto.payParameters) // 支付成功 Taro.showToast({ title: '结算成功', icon: 'success', duration: 2000 }) // 返回关台页面或跳转到首页 setTimeout(() => { Taro.navigateBack() }, 2000) } catch (payError: any) { console.log('支付错误:', payError) // 用户取消支付或支付失败 if (payError.errMsg?.includes('cancel')) { Taro.showToast({ title: '已取消支付', icon: 'none', duration: 2000 }) } else { Taro.showToast({ title: payError.errMsg || '支付失败', icon: 'none', duration: 2000 }) } } } else { // 无需支付 Taro.showToast({ title: '结算成功', icon: 'success', duration: 2000 }) setTimeout(() => { Taro.navigateBack() }, 2000) } } catch (error: any) { console.error('关灯重开失败:', error) // 错误提示由 request 拦截器处理 } finally { setLoading(false) } } return ( {/* 内容区域 */} {/* 台球桌信息卡片 */} {/* 顶部:类型和店名 */} 中式台球 联系店长 {/* 台球桌标题和使用状态 */} {scanInfo?.tableInfo?.name || '--'} {scanInfo?.tableInfo?.statusDescription || '使用中...'} {/* 位置信息 */} {scanInfo?.shopName || '--'} {/* 温馨提示 */} 温馨提示: 结算本次消费金额,押金于最后关台时结算。 {/* 开台订单信息卡片 */} {/* 开台方式标签 */} 开台方式 {/* 订单统计 */} {opInfo?.usedTime || '--'} 消费时长 {opInfo ? `${opInfo.currentAmount.toFixed(2)}元` : '--'} 消费金额 {/* 收费规则 */} 收费规则 价格: {priceInfo ? `${priceInfo.standard.toFixed(2)}元/小时` : '--'} {priceInfo && priceInfo.memberPrice > 0 && ( 折扣价: {priceInfo.memberPrice.toFixed(2)}元/小时 )} {/* 底部固定区域 */} {loading ? '处理中...' : '确认结算'} ) }) export default TurnOffRestart