index.tsx 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. import ColHeader from '@/components/col-header'
  2. import ColResult from '@/components/col-result'
  3. import request from '@/helpers/request'
  4. import { Button, Cell, CellGroup, Dialog, Image, List, Tab, Tabs } from 'vant'
  5. import { defineComponent } from 'vue'
  6. import styles from './index.module.less'
  7. import { orderState } from '@/views/shop-mall/shop-mall'
  8. import { cartConfirm } from '@/views/cart/cart'
  9. import Item from './item'
  10. import AfterSaleBtns from './components/after-sale-btns'
  11. export default defineComponent({
  12. name: 'shop-order',
  13. data() {
  14. return {
  15. active: 0,
  16. list: [],
  17. dataShow: true, // 判断是否有数据
  18. loading: false,
  19. finished: false,
  20. params: {
  21. search: '',
  22. groupStatus: 'APPLY',
  23. page: 1,
  24. rows: 20
  25. },
  26. page: {
  27. pageNum: 1,
  28. pageSize: 20
  29. }
  30. }
  31. },
  32. watch: {
  33. active(val) {
  34. this.init()
  35. this.getList()
  36. }
  37. },
  38. methods: {
  39. init() {
  40. this.page.pageNum = 1
  41. this.finished = false
  42. this.list = []
  43. this.dataShow = true
  44. },
  45. async getList() {
  46. if (this.loading || this.finished) {
  47. return
  48. }
  49. this.loading = true
  50. try {
  51. let { code, data } = await request.get('/api-mall-portal/order/list', {
  52. params: {
  53. ...this.page,
  54. status: this.active === 0 ? '0,4' : this.active === 1 ? '1,2' : '3'
  55. }
  56. })
  57. if (code === 200 && data.list) {
  58. this.page.pageNum += 1
  59. this.list = [].concat(this.list as any, data.list)
  60. }
  61. if (this.list.length >= data.total) {
  62. this.finished = true
  63. }
  64. if (this.list.length === 0) {
  65. this.dataShow = false
  66. }
  67. } catch (error) {}
  68. this.loading = false
  69. },
  70. onClickRight() {
  71. this.$router.push('/afterSale')
  72. },
  73. async cancelOrder(item: any) {
  74. let dialog = await Dialog.confirm({
  75. title: '提示',
  76. message: '确认取消订单?',
  77. confirmButtonText: '取消订单',
  78. confirmButtonColor: 'var(--van-primary)'
  79. })
  80. if (dialog === 'confirm') {
  81. let { code, data } = await request.post(
  82. '/api-mall-portal/order/cancelUserOrder',
  83. { params: { orderId: item.id } }
  84. )
  85. if (code === 200) {
  86. this.init()
  87. this.getList()
  88. }
  89. }
  90. },
  91. payOrder(item: any) {
  92. cartConfirm.orderInfo = item
  93. this.$router.push({ path: '/cartConfirmAgin' })
  94. },
  95. // 确认收货
  96. async onConfirmReceipt(item: any) {
  97. let dialog = await Dialog.confirm({
  98. title: '提示',
  99. message: '确认收货?',
  100. confirmButtonText: '收货',
  101. confirmButtonColor: 'var(--van-primary)'
  102. })
  103. if (dialog === 'confirm') {
  104. let res = await request.post(
  105. '/api-mall-portal/order/confirmReceiveOrder',
  106. { params: { orderId: item.id } }
  107. )
  108. if (res.code === 200) {
  109. item.status = 3
  110. // this.init()
  111. // this.getList()
  112. }
  113. }
  114. }
  115. },
  116. render() {
  117. return (
  118. <div class={styles.shopOrder}>
  119. <ColHeader
  120. rightText="售后服务"
  121. onClickRight={this.onClickRight}
  122. v-slots={{
  123. default: () => (
  124. <Tabs
  125. v-model:active={this.active}
  126. color="var(--van-primary)"
  127. lineWidth={28}
  128. >
  129. <Tab name={0} title="待支付"></Tab>
  130. <Tab name={1} title="待收货"></Tab>
  131. <Tab name={2} title="已收货"></Tab>
  132. </Tabs>
  133. )
  134. }}
  135. />
  136. {this.dataShow ? (
  137. <List
  138. loading={this.loading}
  139. finished={this.finished}
  140. finishedText=" "
  141. class={[styles.goodsList]}
  142. onLoad={this.getList}
  143. >
  144. {this.list.map((item: any) => (
  145. <>
  146. <CellGroup
  147. class={styles.cellGroup}
  148. onClick={() => {
  149. this.$router.push({
  150. path: '/shopOrderDetail',
  151. query: { id: item.id }
  152. })
  153. }}
  154. >
  155. <Cell
  156. title={item.createTime}
  157. titleClass={styles.payTime}
  158. value={orderState[item.status]}
  159. valueClass={
  160. [0, 4, 5, 6].includes(item.status)
  161. ? styles.payStatus
  162. : styles.paySuccess
  163. }
  164. ></Cell>
  165. {item.orderItemList && item.orderItemList.length
  166. ? item.orderItemList.map((n: any) => <Item item={n} />)
  167. : null}
  168. <AfterSaleBtns
  169. item={item}
  170. onCancelOrder={this.cancelOrder}
  171. onPayOrder={this.payOrder}
  172. onConfirmReceipt={this.onConfirmReceipt}
  173. />
  174. </CellGroup>
  175. </>
  176. ))}
  177. </List>
  178. ) : (
  179. <ColResult btnStatus={false} classImgSize="SMALL" tips="暂无订单" />
  180. )}
  181. </div>
  182. )
  183. }
  184. })