OnsitePayment.vue 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. <!-- 场内支付---停车场 -->
  2. <template>
  3. <view class="parking-lock">
  4. <view class="parking-lock-box">
  5. <view class="parking-lock-pay">
  6. <view class="parking-lock-title">支付停车费</view>
  7. <view class="parking-lock-tips">请您确认停车费用,确认后请支付费用,结束停车。谢谢您的使用!</view>
  8. <view class="parking-lock-info">
  9. <view class="parking-lock-info-item" v-for="(item, index) in fieldList" :key="index">
  10. <view>{{ item.label }}</view>
  11. <view :class="item.money ? 'really-money' : ''">{{ orderInfo[item.key] }}</view>
  12. </view>
  13. </view>
  14. <view class="parking-lock-pay-btn">
  15. <button type="default" @click="payMoney">立即支付</button>
  16. </view>
  17. <view class="parking-lock-pay-attention">
  18. <text>温馨提示:支付完成请尽快离场,超过免费时长将会重新计费</text>
  19. </view>
  20. </view>
  21. <!-- 支付方式 -->
  22. <ChoosePayment ref="choosePayment" :curOrderList="orderList" :jumpUrl="jumpUrl" :isIndoor="true" />
  23. </view>
  24. <u-toast ref="uToast" />
  25. </view>
  26. </template>
  27. <script>
  28. import ChoosePayment from '@/pages/choosePayment/choosePayment.vue';
  29. export default {
  30. components: {
  31. ChoosePayment
  32. },
  33. data() {
  34. return {
  35. // 支付订单编号
  36. orderList: [],
  37. // 订单信息
  38. orderInfo: {},
  39. // 回调地址
  40. jumpUrl: location.href + '&isBack=1',
  41. // 显示的字段集合
  42. fieldList: [
  43. { key: 'vehicleNo', label: '车牌号' },
  44. { key: 'parkingName', label: '停车场名称' },
  45. { key: 'entranceName', label: '入场车道' },
  46. { key: 'inTime', label: '入场时间' },
  47. { key: 'freeDuration', label: '免费时长' },
  48. { key: 'calcDuration', label: '计费时长' },
  49. { key: 'duration', label: '累计停车时长' },
  50. { key: 'payAmount', label: '应缴金额', money: true },
  51. { key: 'id', label: '订单编号' }
  52. ],
  53. paramsObj: {
  54. vehicleNo: '',
  55. parkNo: ''
  56. },
  57. timer: null,
  58. polyOrderId: undefined, // 预支付订单id
  59. isBack: 0
  60. };
  61. },
  62. onLoad(page) {
  63. const { vehicleNo, parkNo, isBack, polyOrderId } = page;
  64. if (vehicleNo && parkNo) {
  65. this.paramsObj.vehicleNo = vehicleNo;
  66. this.paramsObj.parkNo = parkNo;
  67. this.isBack = isBack ?? 0;
  68. this.polyOrderId = polyOrderId;
  69. this.getOrderDetails(vehicleNo, parkNo);
  70. } else {
  71. this.$nextTick(() => {
  72. this.showToast('参数丢失!', 'error');
  73. });
  74. }
  75. },
  76. onShow() {
  77. const { isBack } = this;
  78. if (Number(isBack) === 1 && this.polyOrderId) {
  79. uni.showLoading({
  80. title: '支付查询中...',
  81. mask: true
  82. });
  83. this.timer = setInterval(() => {
  84. this.handlePayStatus(this.polyOrderId);
  85. }, 2000);
  86. }
  87. },
  88. methods: {
  89. /**
  90. * 立即支付
  91. * @date 2023-02-22
  92. * @returns {any}
  93. */
  94. payMoney() {
  95. this.$nextTick(() => {
  96. this.$refs['choosePayment'].openPopup({ ...this.orderInfo }, 'single', 'parking');
  97. });
  98. },
  99. /**
  100. * 根据订单id查询订单信息
  101. * @date 2023-02-22
  102. * @param {any} vehicleNo
  103. * @param {any} parkNo
  104. * @returns {any}
  105. */
  106. async getOrderDetails(vehicleNo, parkNo) {
  107. try {
  108. const { code, data } = await this.$u.api.getOrderInfoByParknoApi({ vehicleNo, parkNo });
  109. if (code === 200) {
  110. const { id } = data;
  111. this.orderList = [id];
  112. this.orderInfo = data;
  113. if (Number(data?.payStatus) === 1) {
  114. this.$refs.uToast.show({
  115. title: '该订单已支付完成!',
  116. type: 'success',
  117. url: '/pages/common/paymentSuccess/paymentSuccess',
  118. callback: () => {
  119. // this.loading = false;
  120. }
  121. });
  122. }
  123. }
  124. } catch (error) {
  125. this.showToast(error?.msg, 'error');
  126. }
  127. },
  128. /**
  129. * 反复查询支付状态
  130. * @param { String } orderId
  131. */
  132. async handlePayStatus(orderId) {
  133. try {
  134. const { code, data } = await this.$u.api.getOrderInfo({ orderId });
  135. if (code === 200) {
  136. if (data?.payStatus === 1 || data?.payStatus === 3) {
  137. clearInterval(this.timer);
  138. this.getOrderDetails(this.paramsObj.vehicleNo, this.paramsObj.parkNo);
  139. uni.hideLoading();
  140. }
  141. }
  142. } catch (error) {
  143. uni.hideLoading();
  144. }
  145. },
  146. // 返回首页
  147. cancel() {
  148. uni.switchTab({
  149. url: '/pages/index/index'
  150. });
  151. },
  152. /**
  153. * @description: 显示提示信息
  154. * @param {*} title
  155. * @param {*} type
  156. * @return {*}
  157. */
  158. showToast(title = '操作失败', type = 'error') {
  159. this.$refs.uToast.show({
  160. title,
  161. type
  162. });
  163. }
  164. }
  165. };
  166. </script>
  167. <style lang="scss" scoped>
  168. @import './OnsitePayment.scss';
  169. </style>