chargeOrderList.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <script setup lang="ts">
  2. import { navTabTypeList } from '../utils/order-data'
  3. import { chargeOrderStatus } from '../utils/index'
  4. import router from '@/router'
  5. import { createGlobalLoadingMiddleware } from '@/api/core/middleware'
  6. import { StaticUrl } from '@/config'
  7. const navActiveTab = ref(0)
  8. const { statusBarHeight, MenuButtonHeight, opcity } = storeToRefs(useSysStore())
  9. definePage({
  10. name: 'charge-order-list',
  11. islogin: false,
  12. style: {
  13. navigationBarTitleText: '充电订单',
  14. navigationStyle: 'custom',
  15. },
  16. })
  17. const { data: orderList, refresh, isLastPage, page, reload } = usePagination((pageNum, pageSize) => Apis.xsb.orderList({ data: {
  18. businessType: 'CD',
  19. pageNum,
  20. pageSize,
  21. status: unref(navActiveTab) === 0 ? '' : unref(navActiveTab),
  22. } }), {
  23. immediate: false,
  24. pageNum: 1,
  25. pageSize: 10,
  26. initialData: [],
  27. data: res => res.data?.list,
  28. append: true,
  29. middleware: createGlobalLoadingMiddleware(),
  30. })
  31. onShow(() => {
  32. refresh()
  33. })
  34. onMounted(() => {
  35. opcity.value = 0
  36. })
  37. onPageScroll((e) => {
  38. const calculatedOpacity = e.scrollTop / 100
  39. opcity.value = Math.min(1, Math.max(0.1, calculatedOpacity))
  40. })
  41. onReachBottom(() => {
  42. if (!isLastPage.value) {
  43. page.value++
  44. }
  45. })
  46. function handleChangeTypeNav(value: number) {
  47. navActiveTab.value = value
  48. orderList.value = []
  49. reload()
  50. console.log(navActiveTab.value, '===============')
  51. }
  52. function handleItemClick(item: Api.xsbOrderList) {
  53. const orderNumber = item.orderNumber
  54. if (orderNumber) {
  55. router.push({
  56. name: 'charge-order-detail',
  57. params: { orderNo: orderNumber },
  58. })
  59. }
  60. else {
  61. console.warn('订单号不存在,无法跳转到详情页')
  62. }
  63. }
  64. </script>
  65. <template>
  66. <view class="min-h-screen bg-[linear-gradient(180deg,#F5FEDD_0%,#FCFFF3_22.46%,#FAFCFB_27.26%,#FBFDFC_45.2%,#FBFCFB_68.94%,#FBFCFB_100%)]">
  67. <wd-navbar
  68. title="充电订单" :custom-style="`background-color: rgba(226, 255, 145, ${opcity})`"
  69. :bordered="false" :z-index="999" safe-area-inset-top left-arrow fixed @click-left="router.back()"
  70. />
  71. <view :style="{ paddingTop: `${(Number(statusBarHeight) || 44) + MenuButtonHeight + 12}px` }" />
  72. <view class="nav sticky top-0 z10 px24rpx">
  73. <view class="h80rpx flex items-center">
  74. <view
  75. v-for="item in navTabTypeList" :key="item.value" class="mr64rpx h-full flex flex-col items-center justify-center text-32rpx"
  76. :class="[navActiveTab == item.value ? 'font-semibold ' : 'text-#AAAAAA']"
  77. @click="handleChangeTypeNav(item.value)"
  78. >
  79. {{ item.name }}
  80. <view
  81. class="mt10rpx bg-[var(--them-color)] transition-all transition-duration-400 ease-in"
  82. :class="[navActiveTab == item.value ? 'w40rpx h8rpx rounded-4rpx' : '']"
  83. />
  84. </view>
  85. </view>
  86. </view>
  87. <view class="box-border px24rpx">
  88. <view v-for="item in orderList" :key="item.orderNumber" class="mt-20rpx mt20rpx rounded-16rpx bg-#FFF p-24rpx" @click="handleItemClick(item)">
  89. <view class="flex items-center justify-between">
  90. <view>
  91. <view class="text-28rpx font-bold">
  92. {{ item.chargeOrder?.powerStationName }}
  93. </view>
  94. <view class="mt-20rpx text-24rpx text-#AAA">
  95. 订单时间:{{ item.chargeOrder?.createTime || '未知' }}
  96. </view>
  97. <view class="mt-20rpx text-24rpx text-#AAA">
  98. 终端编号:{{ item.chargeOrder?.connectorId || '未知' }}
  99. </view>
  100. </view>
  101. <view v-if="item.chargeOrder?.status" class="text-center text-28rpx text-#4EDC86">
  102. <image
  103. class="h-64rpx w-64rpx"
  104. :src="`${StaticUrl}/${chargeOrderStatus(item.chargeOrder?.status).icon}.png`"
  105. />
  106. <view :style="{ color: chargeOrderStatus(item.chargeOrder?.status).color }">
  107. {{ chargeOrderStatus(item.chargeOrder?.status).text }}
  108. </view>
  109. </view>
  110. </view>
  111. <view class="my-20rpx h-2rpx w-full bg-#F0F0F0" />
  112. <view class="flex items-center justify-between">
  113. <view class="text-28rpx">
  114. 充电费用:
  115. </view>
  116. <view class="text-32rpx text-#FF6464 font-800">
  117. <text class="text-18rpx">
  118. </text>
  119. {{ item.chargeOrder?.realCost }}
  120. </view>
  121. </view>
  122. </view>
  123. <StatusTip v-if="!orderList.length" tip="暂无内容" />
  124. </view>
  125. </view>
  126. </template>
  127. <style lang="scss" scoped></style>