order.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. <template>
  2. <app-layout>
  3. <view class="order">
  4. <view class="header dir-left-nowrap">
  5. <view class="header-item box-grow-1" @click="setActiveHeader(0)">
  6. <app-form-id>
  7. <text :class="{'active-item': status === 0}">
  8. 全部
  9. </text>
  10. </app-form-id>
  11. </view>
  12. <view class="header-item box-grow-1" @click="setActiveHeader(1)">
  13. <app-form-id>
  14. <text :class="{'active-item': status === 1}">
  15. 待支付
  16. </text>
  17. </app-form-id>
  18. </view>
  19. <view class="header-item box-grow-1" @click="setActiveHeader(2)">
  20. <app-form-id>
  21. <text :class="{'active-item': status === 2}">
  22. 待使用
  23. </text>
  24. </app-form-id>
  25. </view>
  26. <view class="header-item box-grow-1" @click="setActiveHeader(4)">
  27. <app-form-id>
  28. <text :class="{'active-item': status === 4}">
  29. 待评价
  30. </text>
  31. </app-form-id>
  32. </view>
  33. </view>
  34. <view class="product-list" v-if="list.length > 0">
  35. <view class="product" v-for="(item, index) in list" :key="index">
  36. <view class="top dir-left-nowrap main-between" @click.stop="jump(item)">
  37. <view class="image-content">
  38. <image :src="item.detail[0].goods_info.pic_url"></image>
  39. <view class="tip-angle" v-if="item.cancel_status == 2">
  40. 退款中
  41. </view>
  42. <view class="tip-angle" v-else-if="item.cancel_status == 1 && item.is_pay == 0">
  43. 已取消
  44. </view>
  45. <view class="tip-angle" v-else-if="item.cancel_status == 1">
  46. 已退款
  47. </view>
  48. <view class='tip-angle' v-else-if="item.is_comment == 1">
  49. 已评价
  50. </view>
  51. <view class="tip-angle" v-else-if="item.is_pay == 0">
  52. 待付款
  53. </view>
  54. <view class="tip-angle" v-else-if="item.is_confirm == 0">
  55. 待使用
  56. </view>
  57. <view class="tip-angle" v-else-if="item.is_confirm == 1">
  58. 已使用
  59. </view>
  60. </view>
  61. <view class="text-content dir-top-nowrap main-between">
  62. <view class="text-top">
  63. <view class="name">
  64. {{item.detail[0].goods_info.name}}
  65. </view>
  66. <view class="attr dir-left-nowrap">
  67. <view :key="n" v-for="(attr, n) in item.detail[0].goods_info.attr_list">
  68. {{attr.attr_group_name}}: {{attr.attr_name}}
  69. </view>
  70. </view>
  71. </view>
  72. <view class="text-bottom dir-left-nowrap main-right cross-center">
  73. <!-- <view class="original-price">¥{{item.detail[0].total_original_price}}</view> -->
  74. <view class="current-price">¥{{item.detail[0].total_price}}</view>
  75. </view>
  76. </view>
  77. </view>
  78. <view class="bottom dir-left-nowrap main-right cross-center"
  79. v-if="item.cancel_status === '0' && item.is_sale === '0' && item.sale_status === '0' && item.is_comment == 0"
  80. >
  81. <!-- <view class="but no" @click.stop="operationOrder(1, item)" v-if="item.cancel_status != 2 && item.is_pay == 1 && item.is_confirm == 0">
  82. <app-form-id>
  83. 申请退款
  84. </app-form-id>
  85. </view> -->
  86. <view class="but no" @click.stop="to" v-if="item.cancel_status != 2 && item.is_pay == 1 && item.is_confirm == 0">
  87. <app-form-id>
  88. 代付尾款
  89. </app-form-id>
  90. </view>
  91. <view class="but ok" @click.stop="operationOrder(2, item)" v-if="item.cancel_status != 2 && item.is_pay == 1 && item.is_confirm == 0">
  92. <app-form-id>
  93. 立即使用
  94. </app-form-id>
  95. </view>
  96. <view class="but ok" v-if="item.sale_status == 0 && item.is_sale == 0 && item.is_confirm == 1 && item.is_comment == 0">
  97. <app-jump-button form :url="`/pages/order/appraise/appraise?id=${item.id}`">
  98. 去评价
  99. </app-jump-button>
  100. </view>
  101. <view class="but no" @click.stop="operationOrder(3, item)" v-if="item.is_pay == 0">
  102. <app-form-id>
  103. 申请取消
  104. </app-form-id>
  105. </view>
  106. <view class="but ok" v-if="item.is_pay == 0" @click.stop="operationOrder(4, item)">
  107. <app-form-id>
  108. 去支付
  109. </app-form-id>
  110. </view>
  111. </view>
  112. </view>
  113. </view>
  114. <view class="model" v-if="model" @click.stop="model = false">
  115. <view class="model-content" v-if="modelType !== 2">
  116. <view class="model-title-top">提示</view>
  117. <view class="model-header" v-if="modelType === 1">是否申请退款</view>
  118. <view class="model-header" v-else-if="modelType === 3">是否申请取消订单</view>
  119. <view class="model-header" v-else-if="modelType === 4">申请支付</view>
  120. <view class="model-bottom dir-left-nowrap cross-center" v-if="modelType !== 2">
  121. <view class="model-but" @click.stop="cancle">
  122. <app-form-id>
  123. 取消
  124. </app-form-id>
  125. </view>
  126. <view class="model-line"></view>
  127. <view class="model-but" @click.stop="determine">
  128. <app-form-id>
  129. 确定
  130. </app-form-id>
  131. </view>
  132. </view>
  133. </view>
  134. <view class="model-use" v-if="modelType === 2">
  135. <view class="image" @click.stop="model = false"></view>
  136. <view class="model-title">核销码</view>
  137. <image class="model-image" :src="writeOffChart" mode="aspectFill"></image>
  138. </view>
  139. </view>
  140. </view>
  141. </app-layout>
  142. </template>
  143. <script>
  144. export default {
  145. name: "order",
  146. data() {
  147. return {
  148. status: 0,
  149. list: [],
  150. page: 1,
  151. over: false,
  152. model: false,
  153. modelType: 0,
  154. setItem: {},
  155. writeOffChart: '',
  156. }
  157. },
  158. onLoad() {
  159. this.request({
  160. status: this.status,
  161. page: this.page,
  162. }).then(res => {
  163. if (res) {
  164. this.list = res.list;
  165. }
  166. });
  167. },
  168. onReachBottom() {
  169. if (!this.over) {
  170. this.page+=1;
  171. this.pagingRequest({
  172. status: this.status,
  173. page: this.page,
  174. });
  175. }
  176. },
  177. methods: {
  178. setActiveHeader(data) {
  179. this.page = 1;
  180. this.status = data;
  181. this.over = false;
  182. this.list = [];
  183. this.request({
  184. status: this.status,
  185. page: this.page,
  186. }).then(res => {
  187. if (res) {
  188. this.list = res.list;
  189. }
  190. })
  191. },
  192. async request({status, page}) {
  193. const res = await this.$request({
  194. url: this.$api.book.order_list,
  195. data: {
  196. status,
  197. page,
  198. }
  199. });
  200. if (res.code === 0) {
  201. return res.data;
  202. } else {
  203. return false;
  204. }
  205. },
  206. operationOrder(number, data) {
  207. this.model = true;
  208. this.setItem = data;
  209. switch (number) {
  210. case 1:
  211. this.modelType = 1;
  212. break;
  213. case 2:
  214. uni.showLoading({
  215. mask: true,
  216. title: '加载中',
  217. });
  218. this.modelType = 2;
  219. this.$request({
  220. url: this.$api.book.clerk_code,
  221. data: {
  222. id: data.id,
  223. }
  224. }).then(res => {
  225. uni.hideLoading();
  226. if (res.code === 0) {
  227. this.writeOffChart = res.data.file_path;
  228. } else if (res.code === 1) {
  229. this.model = false;
  230. uni.showModal({
  231. title: '提示',
  232. content: res.msg,
  233. });
  234. }
  235. });
  236. break;
  237. case 3:
  238. this.modelType = 3;
  239. break;
  240. case 4:
  241. this.modelType = 4;
  242. break;
  243. }
  244. },
  245. pagingRequest({status, page}) {
  246. this.request({
  247. status,
  248. page,
  249. }).then(response => {
  250. if (response) {
  251. if (response.list.length > 0) {
  252. this.list = [...this.list, ...response.list];
  253. } else {
  254. this.over = true;
  255. }
  256. }
  257. })
  258. },
  259. cancle() {
  260. this.modelType = 0;
  261. this.model = false;
  262. },
  263. determine() {
  264. uni.showLoading({
  265. mask: true,
  266. title: '加载中',
  267. });
  268. switch (this.modelType) {
  269. case 1:
  270. this.$request({
  271. url: this.$api.order.cancel,
  272. data: {
  273. id: this.setItem.id,
  274. }
  275. }).then(res => {
  276. if (res.code === 0) {
  277. uni.hideLoading();
  278. this.model = false;
  279. for (let i = 0; i < this.list.length; i++) {
  280. if (this.setItem.id === this.list[i].id) {
  281. this.list[i].cancel_status = '2';
  282. if (this.status === 2) {
  283. this.$delete(this.list, i);
  284. }
  285. }
  286. }
  287. }
  288. });
  289. break;
  290. case 3:
  291. this.$request({
  292. url: this.$api.order.cancel,
  293. data: {
  294. id: this.setItem.id,
  295. }
  296. }).then(res => {
  297. if (res.code === 0) {
  298. uni.hideLoading();
  299. this.model = false;
  300. for (let i = 0; i < this.list.length; i++) {
  301. if (this.setItem.id === this.list[i].id) {
  302. this.list[i].cancel_status = '1';
  303. this.list[i].is_pay = '0';
  304. if (this.status === 1) {
  305. this.$delete(this.list, i);
  306. }
  307. }
  308. }
  309. }
  310. });
  311. break;
  312. case 4:
  313. this.$request({
  314. url: this.$api.order.list_pay_data,
  315. data: {
  316. id: this.setItem.id,
  317. }
  318. }).then(res => {
  319. if (res.code === 0) {
  320. uni.hideLoading();
  321. this.model = false;
  322. this.$payment.pay(res.data.id).then(() => {
  323. for (let i = 0; i < this.list.length; i++) {
  324. if (this.setItem.id === this.list[i].id) {
  325. this.list[i].is_pay = '1';
  326. if (this.status === 1) {
  327. this.$delete(this.list, i);
  328. }
  329. }
  330. }
  331. }).catch(() => {
  332. })
  333. }
  334. });
  335. break;
  336. }
  337. },
  338. jump(data) {
  339. this.$jump({
  340. open_type: 'navigate',
  341. url: `/plugins/book/orderDetails/orderDetails?id=${data.id}`
  342. });
  343. },
  344. to(){
  345. uni.navigateTo({
  346. url:'/plugins/scan_code/index/index'
  347. })
  348. }
  349. }
  350. }
  351. </script>
  352. <style scoped lang="scss">
  353. @import './order.scss';
  354. </style>