Explorar o código

```
feat(attractions): 添加景区订单功能并修复开发环境配置

- 启用邓的开发环境地址 'http://192.168.0.19:8080'
- 注释掉田的开发环境地址 'http://192.168.1.89:8080'
- 在景区详情页引入MenuButtonHeight并调整样式高度计算
- 在订单列表中集成全局加载中间件,替换为xsb.orderList API
- 更新订单状态映射参数从status到orderStatus,添加businessType字段
- 修改订单列表组件以支持JDMP业务类型
- 更新景点订单列表组件的数据结构访问路径
- 移除页面滚动监听中的条件注释
```

zouzexu hai 2 días
pai
achega
b839560e77

+ 2 - 2
src/config/index.ts

@@ -6,10 +6,10 @@ const mapEnvVersion = {
   // develop: 'http://192.168.1.101:8080',
   // develop: 'http://192.168.0.157:8080',
   // develop: 'http://192.168.1.253:8080',
-  // develop: 'http://192.168.0.19:8080', // 邓
+  develop: 'http://192.168.0.19:8080', // 邓
   // develop: 'http://192.168.0.217:8080', // 黄
   // develop: 'http://192.168.0.11:8080', // 王
-  develop: 'http://192.168.1.89:8080', // 田
+  // develop: 'http://192.168.1.89:8080', // 田
   // develop: 'http://74949mkfh190.vicp.fun', // 付
   // develop: 'http://47.109.84.152:8081',
   // develop: 'https://5ed0f7cc.r9.vip.cpolar.cn',

+ 2 - 2
src/subPack-attractions/attractionsDetail/attractionsDetail.vue

@@ -4,7 +4,7 @@ import { StaticUrl } from '@/config'
 import router from '@/router'
 import { fixImgStyle } from '@/utils/index'
 
-const { statusBarHeight, opcity } = storeToRefs(useSysStore())
+const { statusBarHeight, MenuButtonHeight, opcity } = storeToRefs(useSysStore())
 
 const currentSwiper = ref(0)
 
@@ -143,7 +143,7 @@ async function handleMonthChange(e: { year: number, month: number }) {
       :height="300"
       class="w-full"
     />
-
+    <view v-else :style="{ height: `${(Number(statusBarHeight) || 44) + MenuButtonHeight + 30}px` }" />
     <!-- 价格标题区域 -->
     <view class="relative z-10 rounded-t-32rpx bg-white px24rpx pt30rpx -mt-30rpx">
       <view class="flex items-baseline text-#FF4D3A">

+ 21 - 32
src/subPack-attractions/commonTab/components/orderList.vue

@@ -1,6 +1,7 @@
 <script setup lang="ts">
 import { tabsList } from '../order-data'
 import attractionsList from '@/subPack-smqjh/components/attractions-orderList/attractions-orderList.vue?async'
+import { createGlobalLoadingMiddleware } from '@/api/core/middleware'
 
 const tab = ref<number>(0)
 const { statusBarHeight, MenuButtonHeight } = storeToRefs(useSysStore())
@@ -14,44 +15,36 @@ const statusMap: Record<number, number> = {
   4: 4, // 已完成
 }
 
-// 使用 usePagination 调用接口
-const { data: orderList, isLastPage, reload, page, loading } = usePagination(
-  (pageNum, pageSize) => Apis.attractions.orderList({
-    data: {
-      pageNum,
-      pageSize,
-      status: statusMap[tab.value],
-    },
-  }),
-  {
-    immediate: true,
-    pageNum: 1,
-    pageSize: 10,
-    initialData: [],
-    data: res => res.data?.list,
-    append: true,
-  },
-)
+const { data: orderList, isLastPage, page, error, refresh, reload } = usePagination((pageNum, pageSize) => Apis.xsb.orderList({ data: {
+  businessType: 'JDMP',
+  pageNum,
+  pageSize,
+  orderStatus: statusMap[tab.value],
+} }), {
+  immediate: false,
+  pageNum: 1,
+  pageSize: 10,
+  initialData: [],
+  data: res => res.data?.list,
+  append: true,
+  middleware: createGlobalLoadingMiddleware(),
+})
 
 // tab切换
 function handleClick(e: { index: number }) {
   tab.value = e.index
-  // 清空数据后重新加载,避免数据溢出
   orderList.value = []
-  reload()
+  refresh()
 }
 
 onReachBottom(() => {
   if (!isLastPage.value) {
     page.value++
+    refresh()
   }
 })
-const loadMoreState = computed(() => {
-  if (loading.value)
-    return 'loading'
-  if (isLastPage.value)
-    return 'finished'
-  return 'loading'
+const state = computed(() => {
+  return error.value ? 'error' : !isLastPage.value ? 'loading' : 'finished'
 })
 </script>
 
@@ -67,17 +60,13 @@ const loadMoreState = computed(() => {
         <wd-tab :title="item">
           <view class="box-border px24rpx" style="background-color: #f6f6f6; min-height: 60vh;">
             <view class="h-20rpx" />
-            <StatusTip v-if="!orderList.length && !loading" tip="暂无内容" />
+            <StatusTip v-if="!orderList.length" tip="暂无内容" />
             <attractionsList
               v-for="order in orderList"
               :key="order.orderNumber"
               :order="order"
             />
-            <wd-loadmore
-              v-if="orderList.length > 0"
-              :state="loadMoreState"
-              :loading-props="{ color: '#9ED605', size: 20 }"
-            />
+            <wd-loadmore :state="state" :loading-props="{ color: '#9ED605', size: 20 }" @reload="reload" />
             <!-- 底部安全区域占位 -->
             <view class="h-40rpx" />
           </view>

+ 0 - 1
src/subPack-attractions/commonTab/index.vue

@@ -21,7 +21,6 @@ onLoad((options: any) => {
 })
 // 页面级滚动监听 - 必须在页面组件中才能生效
 onPageScroll((e) => {
-  // 只在首页 tab 时更新透明度
   if (tabbar.value === 0) {
     const calculatedOpacity = e.scrollTop / 100
     opcity.value = Math.min(1, Math.max(0.1, calculatedOpacity))

+ 7 - 6
src/subPack-smqjh/components/attractions-orderList/attractions-orderList.vue

@@ -2,7 +2,7 @@
 import router from '@/router'
 
 const props = defineProps<{
-  order: Api.ScenicOrderListVo
+  order: Api.xsbOrderList
 }>()
 
 // 订单状态映射(hbOrderStatus)
@@ -12,8 +12,9 @@ const statusMap: Record<number, { text: string, color: string }> = {
   70: { text: '已支付', color: '#52C41A' },
   80: { text: '已完成', color: '#52C41A' },
 }
+
 // 订单项点击
-function handleOrderClick(order: Api.ScenicOrderListVo) {
+function handleOrderClick(order: Api.ScenicOrderListVo | Api.xsbOrderList) {
   router.push({ name: 'attractions-order-detail', params: { orderNo: String(order.orderNumber) } })
 }
 const statusInfo = computed(() => {
@@ -26,23 +27,23 @@ const statusInfo = computed(() => {
   <view class="mb-20rpx rounded-16rpx bg-#FFF p-24rpx" @click="handleOrderClick(order)">
     <view class="flex items-center justify-between">
       <view class="text-32rpx font-bold">
-        {{ order?.viewName }}
+        {{ order?.orderScenic.viewName }}
       </view>
       <view class="text-28rpx" :style="{ color: statusInfo.color }">
         {{ statusInfo.text }}
       </view>
     </view>
     <view class="mt-20rpx flex items-center gap-20rpx">
-      <image v-if="order?.img" :src="order.img" class="h-160rpx w-160rpx rounded-8rpx" mode="aspectFill" />
+      <image v-if="order?.orderScenic.img" :src="order?.orderScenic.img" class="h-160rpx w-160rpx rounded-8rpx" mode="aspectFill" />
       <view v-else class="h-160rpx w-160rpx flex items-center justify-center rounded-8rpx bg-#f5f5f5 text-#999">
         暂无图片
       </view>
       <view class="flex-1">
         <view class="line-clamp-2 text-28rpx font-bold">
-          {{ order?.productName }}
+          {{ order?.orderScenic.productName }}
         </view>
         <view class="mt-20rpx text-24rpx text-#666">
-          游玩日期:{{ order?.travelDate }}
+          游玩日期:{{ order?.orderScenic.travelDate }}
         </view>
       </view>
     </view>

+ 5 - 0
src/subPack-smqjh/order/components/OrderRenderer.vue

@@ -5,6 +5,7 @@ import filmList from '../../components/film-orderList/film-orderList.vue'
 import djkorder from '../../components/djk-order/index.vue'
 import videoRightsList from '../../components/videoRights-orderList/videoRights-orderList.vue'
 import Jy from '../../components/refueling-order/index.vue'
+import attractionsList from '../../components/attractions-orderList/attractions-orderList.vue'
 
 interface Props {
   orderList: Api.xsbOrderList
@@ -34,5 +35,9 @@ defineEmits<{
     />
     <videoRightsList v-else-if="orderList.businessType === 'XNSP' || orderList.businessType === 'all'" :order="orderList" />
     <Jy v-else-if="orderList.businessType === 'JY' || orderList.businessType === 'all'" :order="orderList" />
+    <attractionsList
+      v-else-if="orderList.businessType === 'JDMP' || orderList.businessType === 'all'" :order="orderList"
+      @refresh="$emit('refresh')"
+    />
   </block>
 </template>

+ 1 - 0
src/subPack-smqjh/order/order-data.ts

@@ -6,6 +6,7 @@ export const navTabTypeList = [
   { name: '视频权益', value: 'XNSP' },
   { name: '大健康', value: 'DJK' },
   { name: '加油', value: 'JY' },
+  { name: '景区', value: 'JDMP' },
 ]
 
 export const orderStatusList = [