order.vue 6.5 KB

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