From 4d73194c017d0c568280780887c2cc2048278f09 Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期三, 31 十二月 2025 10:03:19 +0800
Subject: [PATCH] Merge branch 'master' of http://120.26.58.240:8888/r/flexJobMiniApp

---
 apps/housekeepingMiniApp/src/subpackages/sercice/serciceDetail/serciceDetail.vue |  165 +++++++++++++++++++++++++++++--------------------------
 1 files changed, 87 insertions(+), 78 deletions(-)

diff --git a/apps/housekeepingMiniApp/src/subpackages/sercice/serciceDetail/serciceDetail.vue b/apps/housekeepingMiniApp/src/subpackages/sercice/serciceDetail/serciceDetail.vue
index 13fc4df..0a92480 100644
--- a/apps/housekeepingMiniApp/src/subpackages/sercice/serciceDetail/serciceDetail.vue
+++ b/apps/housekeepingMiniApp/src/subpackages/sercice/serciceDetail/serciceDetail.vue
@@ -10,24 +10,25 @@
         scrollViewClassName="common-infinite-scroll-list-no-padding"
       >
         <div class="serciceDetail-top-view">
-          <nut-swiper
-            :auto-play="3000"
-            v-if="detail?.files?.length > 0"
-            class="serciceDetail-swiper"
-          >
-            <nut-swiper-item
-              v-for="(item, index) in detail.files"
-              :key="item"
-              class="serciceDetail-swiper-item"
+          <SquareView>
+            <nut-swiper
+              :auto-play="3000"
+              v-if="detail?.files?.length > 0"
+              class="serciceDetail-swiper"
             >
-              <img
-                :src="setOSSLink(item)"
-                class="serciceDetail-swiper-item-img"
-                draggable="false"
-              />
-            </nut-swiper-item>
-          </nut-swiper>
-
+              <nut-swiper-item
+                v-for="(item, index) in detail.files"
+                :key="item"
+                class="serciceDetail-swiper-item"
+              >
+                <img
+                  :src="setOSSLink(item)"
+                  class="serciceDetail-swiper-item-img"
+                  draggable="false"
+                />
+              </nut-swiper-item>
+            </nut-swiper>
+          </SquareView>
           <div class="serciceDetail-top-view-title-wrapper">
             <div class="serciceDetail-price-wrapper">
               <div class="serciceDetail-price">{{ toThousand(minPrice) }}</div>
@@ -57,7 +58,20 @@
             <NoData />
           </ProTabPane>
           <ProTabPane :title="`鐩稿叧鎺ㄨ崘`" pane-key="3">
-            <NoData />
+            <InfiniteLoading
+              scrollViewClassName="common-infinite-scroll-list serciceDetail-recommend-list"
+              commonMode
+              v-bind="infiniteLoadingProps"
+            >
+              <template #renderItem="{ item }">
+                <StandardServiceCard
+                  :file="item.file"
+                  :name="item.name"
+                  :minSpecPrice="item.minSpecPrice"
+                  @click="goSerciceDetail(item)"
+                />
+              </template>
+            </InfiniteLoading>
           </ProTabPane>
         </ProTabs>
       </InfiniteLoading>
@@ -88,7 +102,7 @@
 </template>
 
 <script setup lang="ts">
-import { useStandardServiceDetail } from '@12333/hooks';
+import { useInfiniteLoading, useStandardServiceDetail } from '@12333/hooks';
 import Taro from '@tarojs/taro';
 import * as standardOrderServices from '@12333/services/apiV2/standardOrder';
 import * as standardServiceServices from '@12333/services/apiV2/standardService';
@@ -102,11 +116,13 @@
   ListItem,
   ProTabs,
   ProTabPane,
+  SquareView,
 } from '@12333/components';
 import { useAccessLogin } from '@/hooks';
 import IconShare from '@/assets/flexJob/icon-share.png';
 import IconAttention from '@/assets/flexJob/icon-attention-lg.png';
 import IconAttentionActive from '@/assets/flexJob/icon-attention-lg-active.png';
+import { EnumPagedListOrder } from '@12333/constants';
 
 defineOptions({
   name: 'serciceDetail',
@@ -135,10 +151,11 @@
     ];
     skuState.goods = {
       skuId: SkuUtils.DefaultSkuSpecId,
-      price: toThousand(res.specs[0].price),
+      price: res.specs[0].price,
       imagePath: setOSSLink(res.files[0]),
       name: res.name,
     };
+    queryState.jobCode = res.jobCode;
   },
 });
 
@@ -150,8 +167,7 @@
 
 // 搴曢儴鎿嶄綔鎸夐挳瑙﹀彂
 const clickBtnOperate = (op: { type: string; value: number }) => {
-  // addStandardOrder(op.value);
-  Message.warning('鏀粯绯荤粺缁存姢涓紝璇风◢鍚庨绾�');
+  goAddStandardOrder(op.value);
 };
 
 const openSkuDialog = () => {
@@ -159,65 +175,13 @@
 };
 
 const goAddStandardOrder = useAccessLogin((specNumber: number) => {
+  const spec = SkuUtils.getCurrentActiveSpec(skuState.sku);
   Taro.navigateTo({
-    url: `${RouterPath.addStandardOrder}?specNumber=${specNumber}`,
+    url: `${RouterPath.addStandardOrder}?specNumber=${specNumber}&specId=${spec.id}&id=${id}`,
   });
 });
 
-async function addStandardOrder(specNumber: number) {
-  try {
-    const spec = SkuUtils.getCurrentActiveSpec(skuState.sku);
-    let params: API.AddStandardOrderCommand = {
-      serviceId: detail.value.id,
-      serviceName: detail.value.name,
-      serviceCode: detail.value.code,
-      specId: spec.id,
-      specName: spec.name,
-      specPrice: detail.value.specs.find((x) => x.id === spec.id)?.price ?? 0,
-      specNumber: specNumber,
-      addressId: '3fa85f64-5717-4562-b3fc-2c963f66afa6',
-      name: detail.value.name,
-      contactPhoneNumber: 'string',
-      provinceCode: 'string',
-      provinceContent: 'string',
-      cityCode: 'string',
-      cityContent: 'string',
-      areaCode: 'string',
-      areaContent: 'string',
-      addressName: 'string',
-      addressDetail: 'string',
-      longitude: 0,
-      latitude: 0,
-      beginTime: '2025-12-24T08:25:08.372Z',
-      endTime: '2025-12-24T08:25:08.372Z',
-      supplierEnterpriseId: '3fa85f64-5717-4562-b3fc-2c963f66afa6',
-      enterpriseEmployeeIds: ['3fa85f64-5717-4562-b3fc-2c963f66afa6'],
-      remark: 'string',
-      payAccess: 1,
-    };
-    let res = await standardOrderServices.addStandardOrder(params);
-  } catch (error) {}
-}
-
-async function pay() {
-  try {
-    let params: API.PayStandardOrderCommand = {
-      id: '9e919af2-3d33-4eac-f6dc-08de429676b3',
-    };
-    let res = await standardOrderServices.payStandardOrder(params);
-    if (res) {
-      Taro.requestPayment({
-        timeStamp: res.timestamp,
-        nonceStr: res.nonceStr,
-        package: res.package,
-        signType: res.signType as any,
-        paySign: res.paySign,
-      });
-    }
-  } catch (error) {}
-}
-
-async function handleAttention() {
+const handleAttention = useAccessLogin(async () => {
   try {
     let params: API.CollectionStandardServiceCommand = {
       ids: [id],
@@ -228,6 +192,39 @@
       refetch({ type: 'inactive' });
     }
   } catch (error) {}
+});
+
+const queryState = reactive({
+  ignoreId: id,
+  jobCode: '',
+});
+
+const { infiniteLoadingProps, invalidateQueries } = useInfiniteLoading(
+  ({ pageParam }) => {
+    let params: API.GetStandardServicesQuery = {
+      pageModel: {
+        rows: 20,
+        page: pageParam,
+        orderInput: [{ property: 'createdTime', order: EnumPagedListOrder.Desc }],
+      },
+      ignoreId: queryState.ignoreId,
+      jobCode: queryState.jobCode,
+    };
+
+    return standardServiceServices.getOpenStandardServices(params, {
+      showLoading: false,
+    });
+  },
+  {
+    queryKey: ['standardServiceServices/getOpenStandardServices', queryState],
+    enabled: computed(() => !!queryState.jobCode),
+  }
+);
+
+function goSerciceDetail(item: API.GetStandardServicesQueryResultItem) {
+  Taro.navigateTo({
+    url: `${RouterPath.serciceDetail}?id=${item.id}`,
+  });
 }
 </script>
 
@@ -236,12 +233,15 @@
 
 .serciceDetail-page-wrapper {
   .serciceDetail-swiper {
-    height: 640px;
+    width: 100%;
+    height: 100%;
 
     .serciceDetail-swiper-item-img {
       width: 100%;
       height: 100%;
       object-fit: cover;
+      /* 鍙�夛細璋冩暣鍥剧墖瑁佸壀鐨勫榻愭柟寮忥紙榛樿灞呬腑锛� */
+      object-position: center center;
     }
   }
 
@@ -262,6 +262,7 @@
           font-size: 48px;
           color: #ff6414;
           line-height: 52px;
+          margin-right: 8px;
         }
 
         .serciceDetail-price-unit {
@@ -284,5 +285,13 @@
   .serciceDetail-content-list {
     margin-bottom: 20px;
   }
+
+  .serciceDetail-recommend-list {
+    .infinite-list-inner {
+      display: grid;
+      grid-template-columns: repeat(2, 1fr);
+      grid-gap: 20px;
+    }
+  }
 }
 </style>

--
Gitblit v1.10.0