order.vue 7.5 KB

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