order.vue 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. <template>
  2. <ax-body @init="initBody" blank="0">
  3. <view class="body">
  4. <view class="app-flex c-between top">
  5. <view class="tabs">
  6. <view v-for="(item,index) in tabs.data" :key="index" @click="tabs.index=index"
  7. class="tab" :class="{active:tabs.index==index}">{{item.name}}</view>
  8. </view>
  9. <view><text @click="openFilter()" class="ax-iconline i-setting filter-icon"></text></view>
  10. </view>
  11. <view class="list app-hide-scrollbar">
  12. <view v-for="(item,index) in orders.data" :key="index" class="item" @click="toOrderDeile(item)">
  13. <view class="title">
  14. <view class="name">{{item.params.stationName}}</view>
  15. <view class="state" :class="[getSates(item).color]">{{getSates(item).name}}</view>
  16. </view>
  17. <view class="subinfo">
  18. <view>
  19. <view>订单时间: {{item.createTime}}</view>
  20. <view>终端名称: {{item.params.deviceName}}</view>
  21. </view>
  22. <view>
  23. <view @click.stop="customerService()" class="invoice">开发票</view>
  24. </view>
  25. </view>
  26. <view class="bottom">
  27. <view class="money-txt">充电费用:</view>
  28. <view class="money">
  29. <text style="color:red;" v-if="item.discountMoney||item.firmPrice">共减 ¥{{(item.discountMoney+item.firmPrice).toFixed(4)}}</text>
  30. <text style="width: 20rpx;display: inline-block;"></text>
  31. <text :style="{color:`${item.discountMoney||item.firmPrice?'':'red'}`}"><text v-if="item.discountMoney||item.firmPrice">实付</text> ¥{{item.realCost.toFixed(4) || ''}}</text>
  32. </view>
  33. </view>
  34. </view>
  35. <view v-if="orders.data.length==0" class="empty">
  36. <icon class="ax-iconblock i-meiyou icon"></icon>
  37. <view>暂无数据</view>
  38. </view>
  39. <view v-if="orders.total>orders.data.length" @click="loadData(true)" class="loadmore"><text>点击加载更多</text></view>
  40. </view>
  41. <!-- 筛选查询 -->
  42. <ax-popup ref="filter" position="top" maskType="black" maskEnable maskClose>
  43. <view class="filter-box" :style="{'--filter-padding-top':`${bodyTop+60}px`}">
  44. <view class="divider"></view>
  45. <view class="filter-form">
  46. <view class="cell">
  47. <view class="lable">开始时间</view>
  48. <picker @change="onChange('start',$event)" :value="filter.start" class="content" mode="date">
  49. <text>{{filter.start}}</text>
  50. <text class="ax-iconline i-arrow-right icon"></text>
  51. </picker>
  52. </view>
  53. <view class="cell">
  54. <view class="lable">结束时间</view>
  55. <picker @change="onChange('end',$event)" :value="filter.end" class="content" mode="date">
  56. <text>{{filter.end}}</text>
  57. <text class="ax-iconline i-arrow-right icon"></text>
  58. </picker>
  59. </view>
  60. </view>
  61. <view class="fast">
  62. <view class="cell">
  63. <view class="lable">快速设定</view>
  64. </view>
  65. <view class="shortcut-list">
  66. <view v-for="(item,index) in shortcuts" :key="index" @click="shortcut(item)" class="shortcut">{{item.name}}</view>
  67. </view>
  68. </view>
  69. <view @click="submit()" class="submit">确认查询</view>
  70. </view>
  71. </ax-popup>
  72. </view>
  73. </ax-body>
  74. </template>
  75. <script>
  76. export default {
  77. onLoad() {
  78. this.shortcut({code:'currentMonth'});
  79. this.loadData();
  80. },
  81. data() {
  82. return {
  83. bodyTop: 0,
  84. tabs:{
  85. index: 0,
  86. data:[{name:'全部订单',type:-1},{name:'进行中',type:1},{name:'已完成',type:2}]
  87. },
  88. shortcuts:[
  89. {name:'近7天',code:'7day'},
  90. {name:'近30天',code:'30day'},
  91. {name:'近三月',code:'3months'},
  92. {name:'本月份',code:'currentMonth'},
  93. ],
  94. orders:{
  95. total: 0,
  96. data:[],
  97. },
  98. filter:{
  99. start: '',
  100. end: '',
  101. },
  102. formSubmitPara : {//提交的参数信息
  103. startDate: '',
  104. endDate: '',
  105. pageNum : 1,
  106. pageSize : 10,
  107. type:-1,//全部订单
  108. }
  109. }
  110. },
  111. watch:{
  112. "tabs.index":function(){
  113. this.loadData();
  114. }
  115. },
  116. methods: {
  117. initBody(data){
  118. this.bodyTop = data.top;
  119. },
  120. shortcut(item){
  121. const now = new Date();
  122. const format = this.$app.date.format;
  123. switch (item.code){
  124. case '7day':
  125. now.setDate(now.getDate()-7);
  126. this.filter.start = format('yyyy-MM-dd',now);
  127. this.filter.end = this.$app.date.format('yyyy-MM-dd');
  128. break;
  129. case '30day':
  130. now.setDate(now.getDate()-30);
  131. this.filter.start = format('yyyy-MM-dd',now);
  132. this.filter.end = this.$app.date.format('yyyy-MM-dd');
  133. break;
  134. case '3months':
  135. this.filter.start = format('yyyy-MM-dd',new Date(now.getFullYear(),now.getMonth()-3,1));
  136. this.filter.end = format('yyyy-MM-dd',new Date(now.getFullYear(),now.getMonth()+1,0));
  137. break;
  138. case 'currentMonth':
  139. this.filter.start = format('yyyy-MM-dd',new Date(now.getFullYear(),now.getMonth(),1));
  140. this.filter.end = format('yyyy-MM-dd',new Date(now.getFullYear(),now.getMonth()+1,0));
  141. break;
  142. }
  143. },
  144. openFilter(){
  145. this.$refs.filter.open();
  146. },
  147. submit(){
  148. console.log(this.filter);
  149. this.formSubmitPara.startDate = this.filter.start;
  150. this.formSubmitPara.endDate = this.filter.end;
  151. this.loadData();
  152. this.$refs.filter.close();
  153. },
  154. onChange(name,e){
  155. this.filter[name] = e.detail.value;
  156. },
  157. loadData(append){
  158. this.formSubmitPara.type = this.tabs.data[this.tabs.index].type;
  159. if(append){
  160. //点击加载更多的调用
  161. this.formSubmitPara.pageNum = this.formSubmitPara.pageNum + 1;
  162. }else{
  163. this.formSubmitPara.pageNum = 0;
  164. this.orders.data =[];
  165. this.orders.total = 0;
  166. }
  167. this.$api.base("post","/chargeApi/queryOrderList",this.formSubmitPara,{}).then(res=>{
  168. console.log("订单列表:",res)
  169. this.orders.data = this.orders.data.concat(res.table.rows);
  170. this.orders.total = res.table.total;
  171. })
  172. },
  173. //映射状态信息
  174. getSates(item){
  175. var obj = {color:"",name:"未知"};
  176. if(item.status == 0){
  177. obj.color = "";
  178. obj.name = "待充电";
  179. }else if(item.status == 1){
  180. obj.color = "green";
  181. obj.name = "充电中";
  182. }else if(item.status == 2){
  183. obj.color = "green";
  184. obj.name = "结算中";
  185. }else if(item.status == 3){
  186. obj.color = "blue";
  187. obj.name = "已完成";
  188. }else if(item.status == 5){
  189. obj.color = "blue";
  190. obj.name = "订单取消";
  191. }
  192. return obj;
  193. },
  194. toOrderDeile(item){
  195. if(item.status == 0 || item.status == 1){
  196. //有充电中的订单,点击时跳转到充电中页面进行查看
  197. this.$app.url.goto('/pages/charging/charging?orderId='+item.id+"&deviceId="+item.deviceId,true);
  198. }else{
  199. this.$app.url.goto('/pages/order-detail/order-detail?orderId='+item.id);
  200. }
  201. },
  202. // 打开客服
  203. customerService(){
  204. const cs = this.$config.customerService;
  205. this.$app.act.customerService(cs.id,cs.url).catch(err=>{
  206. console.log(err);
  207. this.$app.popup.alert('客服中心失联啦,请联系管理员!');
  208. });
  209. },
  210. }
  211. }
  212. </script>
  213. <style scoped>
  214. @import url("order.css");
  215. </style>