<template> <view class="parking-lock"> <view class="Jump"> <view class="Jump-btn" @click="jumpArrears"> 欠费补缴 </view> </view> <!-- 车位锁 --> <view class="parking-lock-box"> <!-- 车位锁支付 --> <template v-if="parkingLockStatus === 1"> <view class="parking-lock-pay"> <view class="parking-lock-title">支付停车费</view> <view class="parking-lock-tips">请您确认停车费用,确认后请支付费用,结束停车。谢谢您的使用!</view> <view class="parking-lock-info"> <view class="parking-lock-info-item"> <view>停车场名称</view> <view>{{ orderInfo.roadName }}</view> </view> <view class="parking-lock-info-item"> <view>停车泊位</view> <view>{{ orderInfo.spaceName }}</view> </view> <!-- <view class="parking-lock-info-item"> <view>入场时间</view> <view>{{orderInfo.inTime}}</view> </view> <view class="parking-lock-info-item"> <view>出场时间</view> <view>{{orderInfo.outTime}}</view> </view> <view class="parking-lock-info-item"> <view>停车时长</view> <view>{{ orderInfo.duration || 0}}</view> </view> <view class="parking-lock-info-item"> <view>免费时长</view> <view>{{ orderInfo.freeDuration || 0 }}</view> </view> --> <view class="parking-lock-info-item"> <view>开始计费</view> <view>{{ orderInfo.inTime }}</view> </view> <view class="parking-lock-info-item"> <view>结束计费</view> <view>{{ orderInfo.outTime }}</view> </view> <view class="parking-lock-info-item"> <view>免费时长</view> <view>{{ orderInfo.freeDuration || `0天0时${free_time}分0秒` }}</view> </view> <view class="parking-lock-info-item"> <view>计费时长</view> <view>{{ orderInfo.calcDuration || 0 }}</view> </view> <view class="parking-lock-info-item"> <view>累计停车时长</view> <view>{{ orderInfo.duration || 0 }}</view> </view> <!-- <view class="parking-lock-info-item"> <view>合计金额</view> <view>{{orderInfo.totalAmount}} 元</view> </view> <view class="parking-lock-info-item"> <view>优惠金额</view> <view>{{orderInfo.preferentialAmount}} 元</view> </view> --> <view class="parking-lock-info-item"> <view>应缴金额</view> <view class="really-money">{{ orderInfo.payAmount || 0 }} 元</view> </view> <view class="parking-lock-info-item"> <view>订单编号</view> <view>{{ orderInfo.orderId }}</view> </view> <!-- <view class="parking-lock-info-item" v-if="orderInfo.vehicleNo"> <view>车牌信息</view> <view class="really-license">{{ orderInfo.vehicleNo }}</view> </view> --> <!-- <view class="parking-lock-info-item" v-if="orderInfo.vehicleNo==''"> <view>车牌信息</view> <view class="really-license"><text class="really-license-txt" @click="addvehicleNo">添加车牌</text> </view> </view> <view class="parking-lock-info-item" v-else> <view>车牌信息</view> <view class="really-license">{{orderInfo.vehicleNo}} <text @click="changevehicleNo" class="really-license-txt1">更换</text></view> </view> --> </view> <view class="parking-lock-pay-btn"> <button type="default" @click="payMoney">立即支付</button> </view> <!-- <view class="parking-lock-pay-attention"> <text> 温馨提示:车牌信息可填可不填,如果您已通过本机号码办理了特定车或包月车业务,则需要输入车牌号,否则将按照常规收费标准进行收费。 </text> </view> --> <view class="parking-lock-pay-attention"> <text> 温馨提示:车辆计费前您有{{ orderInfo.freeDurationNum / 60 }}分钟免费停车时长,{{ orderInfo.freeDurationNum / 60 }}分钟过后则升板锁车开始计费。 </text> </view> </view> </template> <!-- 车位锁开始状态 --> <template v-else-if="parkingLockStatus === 2"> <view class="parking-lock-begin"> <view class="parking-lock-begin-box"> <view class="parking-lock-begin-bg"> <image src="../../static/img/parking-lock-bg.png" mode=""></image> </view> </view> <view class="parking-lock-begin-info">车位锁正在动作,还未到位</view> </view> </template> <!-- 车位锁正在状态 --> <template v-else-if="parkingLockStatus === 3"> <view class="parking-lock-loading"> <view class="parking-lock-loading-box"> <view class="parking-lock-loading-bg"> <image src="../../static/img/parking-lock-bg.png" mode=""></image> </view> </view> <view class="parking-lock-loading-info">开锁中,请等待!</view> </view> </template> <!-- 开锁完成 --> <template v-else-if="parkingLockStatus === 4"> <view class="parking-lock-success"> <view class="parking-lock-success-box"> <image src="../../static/img/parking-lock-achieve.png" mode=""></image> </view> <view class="parking-lock-success-info">开锁已完成</view> <view class="parking-lock-success-button"> <button @click="cancel">返回</button> </view> </view> </template> <template v-else-if="parkingLockStatus === 5"> <view class="parking-lock-pay"> <view class="parking-lock-tips">{{ tipsMsg }}</view> </view> </template> <!-- 支付方式 --> <PaymentMethod :payWayPop="payWayPop" :curOrderList="orderList" :deviceNo="deviceNo" :jumpUrl="jumpUrl" @closePaymentMethod="closePaymentMethod" ></PaymentMethod> <u-toast ref="uToast" /> <u-popup v-model="show" mode="center" border-radius="14" width="200rpx" height="200rpx"> <view class="loadingSelect">订单查询中...</view> <view class="spinner"> <view class="rect1"></view> <view class="rect2"></view> <view class="rect3"></view> <view class="rect4"></view> <view class="rect5"></view> </view> </u-popup> <u-popup class="popup-vehicleNo" v-model="ShowaddvehicleNo" mode="center" border-radius="20" width="710rpx" height="auto"> <view class="popup-vehicleNo-title">添加车牌</view> <view class="popup-vehicleNo-center"></view> <view class="popup-vehicleNo-content"> <view class="new-plate-number"> <view class="message-input-wrap" @click="messageInputClick"> <u-message-input :maxlength="8" width="70" font-size="50" :disabled-keyboard="true" v-model="newPlateNumber"></u-message-input> </view> </view> </view> <view class="popup-vehicleNo-select">暂无绑定车牌</view> <view class="vehicleNo-btn"> <u-button type="primary" @click="handleAddCar">确认</u-button> <u-button type="primary" plain @click="ShowaddvehicleNo = false">取消</u-button> </view> </u-popup> <u-popup class="popup-vehicleNo" v-model="ShowchangevehicleNo" mode="center" border-radius="20" width="710rpx" height="auto"> <view class="popup-vehicleNo-title">更换车牌</view> <view class="popup-vehicleNo-center"></view> <view class="popup-vehicleNo-content"> <view class="new-plate-number"> <view class="message-input-wrap" @click="messageInputClick"> <u-message-input :maxlength="8" width="70" font-size="50" :disabled-keyboard="true" v-model="newPlateNumber"></u-message-input> </view> </view> </view> <view class="popup-vehicleNo-select"> <u-collapse ref="refValue"> <u-collapse-item title="点击选择车牌" align="center"> <u-cell-group> <u-cell-item :title="item.vehicleNo" v-for="(item, index) in groupList" :key="index" :arrow="false"> <u-radio-group v-model="selectvalue" @change="radioGroupChange"> <u-radio :name="item.vehicleNo" :key="index"></u-radio> </u-radio-group> </u-cell-item> </u-cell-group> </u-collapse-item> </u-collapse> </view> <view class="vehicleNo-btn"> <u-button type="primary" @click="handleAddCar">确认</u-button> <u-button type="primary" plain @click="ShowchangevehicleNo = false">取消</u-button> </view> </u-popup> <u-action-sheet :list="colorList" @click="confirmColor" v-model="colorShow"></u-action-sheet> <u-keyboard ref="uKeyboard" mode="car" @change="keyboardChange" @confirm="keyboardConfirm" @backspace="backspace" v-model="keyboardshow" ></u-keyboard> </view> </view> </template> <script> import getUrlParams from '../../utils/getUrlParams.js'; import PaymentMethod from '@/pages/paymentMethod/paymentMethod.vue'; export default { components: { PaymentMethod }, data() { return { selectvalue: null, groupList: [], radiogroupList: [], keyboardshow: false, colorShow: false, colorList: [ { text: '蓝色', colorCode: 0 }, { text: '黄色', colorCode: 1 }, { text: '黑色', colorCode: 2 }, { text: '白色', colorCode: 3 }, { text: '绿色', colorCode: 4 }, { text: '其他', colorCode: 99 } ], vehicleColor: 0, newPlateNumber: '', //更换车牌弹窗 ShowchangevehicleNo: false, //添加车牌弹窗 ShowaddvehicleNo: false, // 车位锁状态 1:支付 2:开始开锁 3:开锁中 4:开锁完成 parkingLockStatus: 0, // 支付方式选择弹框 payWayPop: false, // 订单编号 orderList: [], // 提示信息 tipsMsg: null, // 设备编号 deviceNo: null, // 轮询 timer: null, timer1: null, // 订单信息 orderInfo: {}, // 订单id orderId: null, // 重定向地址 jumpUrl: location.href + '&isBack=1', show: true, isBack: '', polyOrderId: '' }; }, onLoad(page) { if (page.orderId) { this.getOrderDetails(page.orderId); this.orderList = []; this.orderId = page.orderId; this.orderList.push(page.orderId); this.deviceNo = page.deviceNo; this.isBack = page?.isBack; this.polyOrderId = page?.polyOrderId; } else { this.tipsMsg = page.msg || '参数丢失!'; this.parkingLockStatus = 5; } }, onShow() { if (this.orderId) { if (this.polyOrderId && this.isBack == 1) { this.timer1 = setInterval(() => { this.show = true; this.handlePayStatus(this.polyOrderId); }, 2000); } } else { this.show = false; } }, onUnload() { if (this.timer) { clearInterval(this.timer); } if (this.timer1) { clearInterval(this.timer1); } }, methods: { jumpArrears() { uni.navigateTo({ url: '../center/order/order?orderStatus=2' }); }, radioGroupChange(e) { this.newPlateNumber = e; }, // 获取车辆列表 handlegetMycars() { let that = this; this.$u.api .getMycars() .then((res) => { if (res.code === 200) { this.groupList = res.data.rows; this.radiogroupList = res.data.rows; this.$nextTick(() => { // dom元素更新后执行,因此这里能正确打印更改之后的值 console.log(that.$refs.refValue.init()); // 改变了的值 }); } else { this.$refs.uToast.show({ title: res.msg, type: 'error' }); } }) .catch((err) => { this.$refs.uToast.show({ title: '操作失败!', type: 'error' }); }); }, //更换车牌信息 changevehicleNo() { this.ShowchangevehicleNo = true; this.handlegetMycars(); }, // 添加车辆 handleAddCar() { if (!this.$u.test.carNo(this.newPlateNumber)) { this.$refs.uToast.show({ title: '请正确填写车牌号', type: 'error' }); return; } let param = { orderId: this.orderId, vehicleNo: this.newPlateNumber, vehicleColor: this.vehicleColor }; let that = this; this.$u.api .bindVehicleNo(param) .then((res) => { if (res.code === 200) { this.$refs.uToast.show({ title: res.msg, type: 'success' }); that.getOrderDetails(that.orderId); that.ShowchangevehicleNo = false; } else { this.$refs.uToast.show({ title: res.msg, type: 'error' }); } }) .catch((err) => { this.$refs.uToast.show({ title: '操作失败!', type: 'error' }); }); }, //新增车牌 addvehicleNo() { this.ShowaddvehicleNo = true; }, // 点击输入框 messageInputClick() { this.keyboardshow = true; }, // 按键被点击(点击退格键不会触发此事件) keyboardChange(val) { // 将每次按键的值拼接到value变量中,注意+=写法 this.newPlateNumber += val; }, // 退格键被点击 backspace() { // 删除value的最后一个字符 if (this.newPlateNumber.length) this.newPlateNumber = this.newPlateNumber.substr(0, this.newPlateNumber.length - 1); }, // 键盘输入完成后确认 keyboardConfirm() { this.colorShow = true; }, // 确认颜色 confirmColor(e) { this.vehicleColor = this.colorList[e].colorCode; }, /** * 反复查询支付状态 * @param { String } orderId */ handlePayStatus(orderId) { this.$u.api .getOrderInfo({ orderId }) .then((res) => { if (res.code === 200) { if (res.data.payStatus === 1 || res.data.payStatus === 3) { this.show = false; clearInterval(this.timer1); this.getOrderDetails(this.orderId); } } else { this.show = false; clearInterval(this.timer1); this.$refs.uToast.show({ title: res.msg, type: 'error' }); } }) .catch(() => { this.show = false; clearInterval(this.timer1); }); }, payMoney() { this.payWayPop = true; }, // 查询订单信息 getOrderDetails(id) { this.$u.api .getOrderDetail({ id }) .then((res) => { if (res.code === 200 && res.data.id) { this.parkingLockStatus = 1; // 获取页面完整url const local = window.location.href; // 获取url后面的参数 const locationLocaturl = window.location.search; // 截取url中的isBack let isBack = getUrlParams(local, 'isBack'); // 如果没有isBack,则去请求 if (!isBack) { // uni.hideLoading(); this.show = false; clearInterval(this.timer1); } this.orderInfo = res.data; if (res.data.payStatus === 1) { this.show = false; clearInterval(this.timer1); this.checkEqupment(); } } else { this.$refs.uToast.show({ title: res.msg || '订单无数据', type: 'error' }); this.show = false; if (this.timer1) { clearInterval(this.timer1); } } }) .catch(() => { this.show = false; if (this.timer1) { clearInterval(this.timer1); } }); }, // 检测设备 checkEqupment() { this.timer = setInterval(() => { this.getEqumentStatus(this.deviceNo); }, 1000); }, // 查询设备状态 getEqumentStatus(orderNo) { this.$u.api .getEquomentInfo({ orderNo }) .then((res) => { if (res.code === 200) { if (res.data.deviceStatus == 0) { this.parkingLockStatus = 4; clearInterval(this.timer); } else if (res.data.deviceStatus == 1 || res.data.deviceStatus == 5) { this.parkingLockStatus = 2; } else if (res.data.deviceStatus == 6) { this.parkingLockStatus = 3; } } else { clearInterval(this.timer); } }) .catch(() => { clearInterval(this.timer); }); }, // 返回首页 cancel() { uni.switchTab({ url: '/pages/index/index' }); }, closePaymentMethod() { this.payWayPop = false; } } }; </script> <style lang="scss" scoped> @import './parkingLock.scss'; .Jump { display: flex; justify-content: flex-end; background-color: #f6f6ff; &-btn { color: rgb(0, 140, 255); padding: 20rpx 30rpx; } } </style>