order.vue 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. <template>
  2. <view>
  3. <view class="swiper-wrap">
  4. <view class="u-tabs-box">
  5. <u-tabs-swiper activeColor="#008CFF" ref="tabs" :list="list" :current="current" @change="change" :is-scroll="false" swiperWidth="100%"></u-tabs-swiper>
  6. </view>
  7. <swiper class="swiper-box" :current="swiperCurrent" @transition="transition" @animationfinish="animationfinish">
  8. <swiper-item class="swiper-item" v-for="(item, index) in list" :key="index">
  9. <scroll-view scroll-y style="height: 100%;width: 100%;" @scrolltolower="reachBottom">
  10. <view class="page-box">
  11. <view class="order" @click="goDetails(orderItem)" v-for="(orderItem, index) in orderList[index]" :key="orderItem.id">
  12. <view class="order-top u-flex">
  13. <view class="order-top-left u-flex-1">
  14. <view class="car">{{orderItem.vehicleNo}}</view>
  15. <view class="addr">{{orderItem.roadName}}</view>
  16. </view>
  17. <!--
  18. 显示申请退款按钮满足一下条件:
  19. 1.允许退款allowRefund等于1 并且
  20. 2.退款状态auditStatus等于2 已驳回 或者
  21. 3.退款状态auditStatus不能为空 并且不能等于0
  22. -->
  23. <view
  24. class="order-top-right apply-refund"
  25. v-show="orderItem.allowRefund == 1 &&
  26. (orderItem.auditStatus == 2 || !orderItem.auditStatus && orderItem.auditStatus != 0)"
  27. @click.stop="applyRefund(orderItem)"
  28. >申请退款</view>
  29. <!--
  30. 显示申请状态满足以下条件
  31. 申请状态存在或者审核状态存在(由于0比较特殊,所以单独拉出来判断)
  32. -->
  33. <view
  34. class="order-top-right apply-refund"
  35. @click.stop="applyRefundDetails(orderItem)"
  36. v-if="orderItem.refundStatus ||
  37. orderItem.refundStatus == 0 ||
  38. orderItem.auditStatus ||
  39. orderItem.auditStatus == 0">
  40. {{orderItem | verifyRefundStatus}}
  41. </view>
  42. <view
  43. class="order-top-right"
  44. v-else
  45. :class="{'order-top-right-finished': orderItem.orderStatus == '4'}">
  46. {{orderItem.orderStatus | verifyStatusFilter}}
  47. </view>
  48. </view>
  49. <view class="order-center">
  50. <view class="order-center-item">订单编号:{{orderItem.orderId}}</view>
  51. <view class="order-center-item">入场时间:{{orderItem.inTime}}</view>
  52. <view class="order-center-item" v-if="orderItem.orderStatus !== 1">出场时间:{{orderItem.outTime}}</view>
  53. <view class="order-center-item" v-if="orderItem.orderStatus !== 1">停留时间:{{orderItem.duration}}</view>
  54. <view class="order-center-item">应付金额:<span class="pay-amount">{{orderItem.payAmount}}</span></view>
  55. <view class="order-center-item" v-if="orderItem.actualAmount">实际金额:<span class="pay-amount">{{orderItem.actualAmount}}</span></view>
  56. </view>
  57. <view class="order-bottom">
  58. <u-cell-item title="收费标准" @click.native.stop="jumpChargeStandard(orderItem)"></u-cell-item>
  59. </view>
  60. </view>
  61. <u-loadmore :status="loadStatus[index]" bgColor="#F6F6FF"></u-loadmore>
  62. </view>
  63. </scroll-view>
  64. </swiper-item>
  65. </swiper>
  66. </view>
  67. <u-toast ref="uToast" />
  68. </view>
  69. </template>
  70. <script>
  71. export default {
  72. data() {
  73. return {
  74. orderList: [[], [], [], []],
  75. list: [
  76. {index:0,name: '全部',orderStatu:null,pageNum:1,total:null},
  77. {index:1,name: '停放中',orderStatu:1,pageNum:1,total:null},
  78. {index:2,name: '欠费未缴',orderStatu:2,pageNum:1,total:null},
  79. {index:3,name: '已完成',orderStatu:4,pageNum:1,total:null}
  80. ],
  81. current: 0,
  82. swiperCurrent: 0,
  83. tabsHeight: 0,
  84. dx: 0,
  85. loadStatus: ['loadmore','loadmore','loadmore','loadmore'],
  86. };
  87. },
  88. onLoad() {
  89. // this.getOrderList(this.list[0]);
  90. // this.getOrderList(this.list[1]);
  91. // this.getOrderList(this.list[2]);
  92. // this.getOrderList(this.list[3]);
  93. },
  94. onShow(){
  95. // onShow 刷新数据
  96. this.list[this.current].pageNum = 1;
  97. this.orderList=[[], [], [], []];
  98. this.getOrderList(this.list[this.current]);
  99. },
  100. computed: {
  101. // 价格小数
  102. priceDecimal() {
  103. return val => {
  104. if (val !== parseInt(val)) return val.slice(-2);
  105. else return '00';
  106. };
  107. },
  108. // 价格整数
  109. priceInt() {
  110. return val => {
  111. if (val !== parseInt(val)) return val.split('.')[0];
  112. else return val;
  113. };
  114. }
  115. },
  116. methods: {
  117. reachBottom() {
  118. // console.log('this.list[this.current]',this.list[this.current]);
  119. if(this.orderList[this.current].length>=this.list[this.current].total){
  120. this.loadStatus.splice(this.list[this.current].index,1,"nomore");
  121. return;
  122. };
  123. this.loadStatus.splice(this.list[this.current].index,1,"loading");
  124. this.getOrderList(this.list[this.current]);
  125. },
  126. // 页面数据
  127. getOrderList(orderType) {
  128. let param = {
  129. pageNum:orderType.pageNum,
  130. orderStatus:orderType.orderStatu,
  131. };
  132. // 未出场: orderStatu = 1-停放中
  133. // 缴费中: orderStatu = 2-出场中 && payStatus = 2-支付中
  134. // 完成: orderStatu = 4-完成
  135. this.$u.api.getOrderList(param)
  136. .then(res=>{
  137. for(let item of res.data.rows){
  138. this.orderList[orderType.index].push(item);
  139. }
  140. // console.log('this.list[orderType.index]',this.list[orderType.index]);
  141. this.list[this.current].total = res.data.total;
  142. this.list[orderType.index].pageNum++;
  143. if(this.orderList[this.current].length>=this.list[this.current].total){
  144. this.loadStatus.splice(this.list[orderType.index].index,1,"nomore");
  145. };
  146. // console.log(JSON.parse(JSON.stringify(this.orderList[this.swiperCurrent])));
  147. // console.log('this.list[this.current]',this.list[this.current]);
  148. }).catch(err=>{
  149. this.$refs.uToast.show({
  150. title: err.msg,
  151. type: 'error',
  152. });
  153. // console.log('getOrderList ',err)
  154. });
  155. this.loadStatus.splice(this.current,1,"loadmore")
  156. },
  157. // tab栏切换
  158. change(index) {
  159. // this.swiperCurrent = this.list[index].orderStatu;
  160. this.swiperCurrent = index;
  161. this.getOrderList(this.list[index]);
  162. },
  163. transition({ detail: { dx } }) {
  164. this.$refs.tabs.setDx(dx);
  165. },
  166. animationfinish({ detail: { current } }) {
  167. this.$refs.tabs.setFinishCurrent(current);
  168. this.swiperCurrent = current;
  169. this.current = current;
  170. },
  171. /**
  172. * 跳转详情
  173. * 未发起退款或者未退款成功的
  174. * */
  175. goDetails(item){
  176. this.$u.route({
  177. url: 'pages/center/order/orderDetails/orderDetails',
  178. params: {
  179. orderId: item.id
  180. }
  181. });
  182. },
  183. jumpChargeStandard(item) {
  184. this.$u.route({
  185. url: 'pages/chargeStandard/chargeStandard',
  186. params: {
  187. roadNo: item.roadNo
  188. }
  189. });
  190. },
  191. // 申请退款
  192. applyRefund(item) {
  193. this.$u.route('pages/applyRefund/applyRefund', {
  194. orderId: item.orderId,
  195. payAmount: item.actualAmount
  196. })
  197. },
  198. /**
  199. * 申请退款详情
  200. * 只要申请退款状态等于1并且审批状态等于1跳转到退款完成详情页
  201. * 否则跳转到退款过程页
  202. * */
  203. applyRefundDetails(item) {
  204. if (item.refundStatus === 1 && item.auditStatus === 1) {
  205. this.$u.route('pages/applyRefundDetails/applyRefundAchieveDetails', {
  206. orderId: item.orderId
  207. })
  208. } else {
  209. this.$u.route('pages/applyRefundDetails/applyRefundDetails', {
  210. orderId: item.orderId
  211. })
  212. }
  213. }
  214. },
  215. filters:{
  216. verifyStatusFilter(value) {
  217. if (value === 0) {
  218. return '';
  219. } else if(value === 1){
  220. return '停放中';
  221. } else if(value === 2){
  222. return '欠费未缴';
  223. } else if(value === 4){
  224. return '已完成';
  225. } else {
  226. return '';
  227. }
  228. },
  229. verifyRefundStatus(item) {
  230. if (item.auditStatus === 0) {
  231. return '申请退款中';
  232. } else if (item.auditStatus === 1) {
  233. if (item.refundStatus === 0) {
  234. return '退款失败'
  235. } else if (item.refundStatus === 1) {
  236. return '退款成功'
  237. }
  238. } else if (item.auditStatus === 2) {
  239. return '已驳回'
  240. }
  241. }
  242. }
  243. };
  244. </script>
  245. <style>
  246. /* #ifndef H5 */
  247. page {
  248. height: 100%;
  249. background-color: #F6F6FF;
  250. }
  251. /* #endif */
  252. </style>
  253. <style lang="scss" scoped>
  254. @import "./order.scss";
  255. </style>