orderList.vue 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <script setup lang="ts">
  2. import { tabsList } from '../order-data'
  3. import attractionsList from '@/subPack-smqjh/components/attractions-orderList/attractions-orderList.vue?async'
  4. import { createGlobalLoadingMiddleware } from '@/api/core/middleware'
  5. const tab = ref<number>(0)
  6. const { statusBarHeight, MenuButtonHeight } = storeToRefs(useSysStore())
  7. // 状态映射:tab索引 -> 接口status
  8. const statusMap: Record<number, string> = {
  9. 0: 'all', // 全部
  10. 1: 'paddingPay', // 待支付
  11. 2: 'ing', // 已支付
  12. 3: 'cancel', // 已取消
  13. 4: 'completed', // 已完成
  14. }
  15. const { data: orderList, isLastPage, page, error, refresh, reload } = usePagination((pageNum, pageSize) => Apis.xsb.orderList({ data: {
  16. businessType: 'JDMP',
  17. pageNum,
  18. pageSize,
  19. orderStatus: statusMap[tab.value],
  20. } }), {
  21. immediate: true,
  22. pageNum: 1,
  23. pageSize: 10,
  24. initialData: [],
  25. data: res => res.data?.list,
  26. append: true,
  27. middleware: createGlobalLoadingMiddleware(),
  28. })
  29. onShow(() => {
  30. refresh()
  31. })
  32. function handleClick(e: { index: number }) {
  33. tab.value = e.index
  34. orderList.value = []
  35. refresh()
  36. }
  37. onReachBottom(() => {
  38. if (!isLastPage.value) {
  39. page.value++
  40. refresh()
  41. }
  42. })
  43. const state = computed(() => {
  44. return error.value ? 'error' : !isLastPage.value ? 'loading' : 'finished'
  45. })
  46. </script>
  47. <template>
  48. <view class="attractions-order-page" style="min-height: 100vh; background-color: #f6f6f6;">
  49. <wd-navbar
  50. title="订单列表" custom-style="background-color:#FFF" :bordered="false" :z-index="99"
  51. safe-area-inset-top fixed
  52. />
  53. <view :style="{ paddingTop: `${(Number(statusBarHeight) || 44) + MenuButtonHeight + 12}px` }" />
  54. <wd-tabs v-model="tab" :offset-top="statusBarHeight + MenuButtonHeight + 12" sticky custom-style="background-color: transparent;" @click="handleClick">
  55. <block v-for="(item, index) in tabsList" :key="index">
  56. <wd-tab :title="item">
  57. <view class="box-border w-full overflow-hidden px24rpx">
  58. <view class="h-20rpx" />
  59. <StatusTip v-if="!orderList.length" tip="暂无内容" />
  60. <view v-for="order in orderList" :key="order.orderNumber">
  61. <attractionsList :order="order" />
  62. </view>
  63. <wd-loadmore :state="state" :loading-props="{ color: '#9ED605', size: 20 }" @reload="reload" />
  64. <view class="h-40rpx" />
  65. </view>
  66. </wd-tab>
  67. </block>
  68. </wd-tabs>
  69. </view>
  70. </template>
  71. <style lang="scss" scoped></style>