ObligationOrderList.vue 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <script setup lang="ts">
  2. import {getAllOrder, getGroupOrderList} from "~/apis/order.api";
  3. import OrderItem from "~/pages/order/components/OrderItem.vue";
  4. import OtherOrderItem from "~/pages/order/components/OtherOrderItem.vue";
  5. import CXBEmpty from "~/components/CXBEmpty/CXBEmpty.vue";
  6. import OrderObligationItem from "~/pages/order/components/OrderObligationItem.vue";
  7. const props = defineProps({
  8. tabValue: {
  9. type: Number,
  10. default: 0
  11. }
  12. })
  13. const state = reactive({
  14. currentPage: 1,
  15. pageSize: 10,
  16. totalPage: 1,
  17. status: 'noMore',
  18. list: []
  19. })
  20. function loadList(action: 'page' | 'reload', callback?: (items) => void) {
  21. // console.log(state.keyword)
  22. if (action === 'reload') {
  23. state.currentPage = 1
  24. }
  25. const params = {
  26. page: state.currentPage,
  27. limit: state.pageSize
  28. }
  29. if (state.keyword) {
  30. params.keyword = state.keyword
  31. }
  32. getGroupOrderList({
  33. page: state.currentPage,
  34. limit: state.pageSize
  35. }).then(res => {
  36. if (action === 'page') {
  37. state.list = state.list.concat(res.list)
  38. }
  39. if (action == 'reload') {
  40. state.list = res.list
  41. }
  42. state.totalPage = Math.ceil(res.total / state.pageSize);
  43. state.status = 'more'
  44. if (callback) {
  45. callback(res.list)
  46. }
  47. })
  48. }
  49. function handleScrollToLower() {
  50. state.status = 'loading';
  51. state.currentPage += 1;
  52. if (state.currentPage > state.totalPage) {
  53. state.status = 'noMore';
  54. } else {
  55. setTimeout(() => {
  56. loadList('page')
  57. }, 300)
  58. }
  59. }
  60. onMounted(() => {
  61. loadList('reload')
  62. uni.$on('orderCancelFromList', () => {
  63. // loadAllOrderList()
  64. loadList('reload')
  65. // uni.$emit('orderCancelFromList', 1)
  66. // state.tabvalue = 0
  67. })
  68. uni.$on('onTab1ReachBottom', handleScrollToLower)
  69. uni.$on('onTab1PullDownRefresh', () => {
  70. loadList('reload', items => {
  71. setTimeout(() => {
  72. uni.stopPullDownRefresh()
  73. }, 300)
  74. })
  75. })
  76. })
  77. onUnmounted(() => {
  78. uni.$off('onTab1ReachBottom');
  79. uni.$off('onTab1PullDownRefresh');
  80. })
  81. </script>
  82. <template>
  83. <div class="p-3 flex flex-col">
  84. <div v-if="state.list.length > 0" class="flex flex-col">
  85. <div v-for="(orderItem, index) in state.list" :key="index">
  86. <!-- <OrderItem :order-item="orderItem" />-->
  87. <!-- <OtherOrderItem :item="orderItem" v-else/>-->
  88. <OrderObligationItem :order-item="orderItem" :tab-value="props.tabValue"/>
  89. </div>
  90. <div class=" flex justify-center items-center text-[12px] text-gray-500"
  91. v-if="state.list && state.list.length > 0">
  92. <div v-if="state.status === 'loading'">
  93. 加载中...
  94. </div>
  95. <div v-if="state.status === 'noMore'">
  96. 没有更多了~
  97. </div>
  98. </div>
  99. </div>
  100. <div v-else class="flex flex-col justify-center items-center w-full">
  101. <CXBEmpty />
  102. </div>
  103. </div>
  104. </template>