From 25f0924ac4dcce46cb14856b88ced3b0b6289cab Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期四, 25 十二月 2025 07:41:55 +0800
Subject: [PATCH] fix: 甲方小程序

---
 apps/housekeepingMiniApp/src/subpackages/sercice/addStandardOrder/InnerPage.vue              |   45 +++++++++++
 packages/components/src/Sku/Sku.vue                                                          |   34 ++++++++
 packages/components/src/Sku/sku.ts                                                           |   22 +++++
 apps/housekeepingMiniApp/src/subpackages/sercice/serciceDetail/serciceDetail.vue             |   84 ++++++++++++++------
 apps/housekeepingMiniApp/src/subpackages/sercice/addStandardOrder/addStandardOrder.config.ts |    3 
 apps/housekeepingMiniApp/src/subpackages/sercice/serciceDetail/serciceDetail.config.ts       |    3 
 apps/housekeepingMiniApp/src/app.config.ts                                                   |    2 
 apps/housekeepingMiniApp/src/constants/router.ts                                             |    1 
 apps/housekeepingMiniApp/src/subpackages/sercice/addStandardOrder/addStandardOrder.vue       |   13 +++
 9 files changed, 177 insertions(+), 30 deletions(-)

diff --git a/apps/housekeepingMiniApp/src/app.config.ts b/apps/housekeepingMiniApp/src/app.config.ts
index 10cb140..3bfac94 100644
--- a/apps/housekeepingMiniApp/src/app.config.ts
+++ b/apps/housekeepingMiniApp/src/app.config.ts
@@ -91,7 +91,7 @@
     },
     {
       root: 'subpackages/sercice',
-      pages: ['serciceDetail/serciceDetail'],
+      pages: ['serciceDetail/serciceDetail', 'addStandardOrder/addStandardOrder'],
     },
     {
       root: 'subpackages/user',
diff --git a/apps/housekeepingMiniApp/src/constants/router.ts b/apps/housekeepingMiniApp/src/constants/router.ts
index 47ce4ed..d4652ee 100644
--- a/apps/housekeepingMiniApp/src/constants/router.ts
+++ b/apps/housekeepingMiniApp/src/constants/router.ts
@@ -34,6 +34,7 @@
   mineReserveServiceConfirm = '/subpackages/mine/mineReserveServiceConfirm/mineReserveServiceConfirm',
 
   serciceDetail = '/subpackages/sercice/serciceDetail/serciceDetail',
+  addStandardOrder = '/subpackages/sercice/addStandardOrder/addStandardOrder',
 
   extraPage = '/subpackages/extraPage/extraPage/extraPage',
 }
diff --git a/apps/housekeepingMiniApp/src/subpackages/sercice/addStandardOrder/InnerPage.vue b/apps/housekeepingMiniApp/src/subpackages/sercice/addStandardOrder/InnerPage.vue
new file mode 100644
index 0000000..045d716
--- /dev/null
+++ b/apps/housekeepingMiniApp/src/subpackages/sercice/addStandardOrder/InnerPage.vue
@@ -0,0 +1,45 @@
+<template>
+  <!-- <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch"> -->
+  <ContentScrollView hasPaddingTop>
+    <MineServiceDetailView />
+  </ContentScrollView>
+  <PageFooter>
+    <PageFooterBtn type="primary" class="business-card-btn" @click="goCancel"
+      >鍙栨秷鏈嶅姟</PageFooterBtn
+    >
+    <PageFooterBtn type="primary" class="business-card-btn" @click="goConfirm"
+      >鏈嶅姟纭</PageFooterBtn
+    >
+  </PageFooter>
+  <!-- </LoadingLayout> -->
+</template>
+
+<script setup lang="ts">
+import MineServiceDetailView from '../../components/MineServiceDetailView.vue';
+import Taro from '@tarojs/taro';
+import * as standardServiceServices from '@12333/services/apiV2/standardService';
+import { RouterPath } from '@/constants';
+
+defineOptions({
+  name: 'InnerPage',
+});
+
+const route = Taro.useRouter();
+const id = route.params?.id as string;
+
+function goCancel() {
+  Taro.navigateTo({
+    url: `${RouterPath.mineReserveServiceCancel}?id=${id}`,
+  });
+}
+
+function goConfirm() {
+  Taro.navigateTo({
+    url: `${RouterPath.mineReserveServiceConfirm}?id=${id}`,
+  });
+}
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+</style>
diff --git a/apps/housekeepingMiniApp/src/subpackages/sercice/addStandardOrder/addStandardOrder.config.ts b/apps/housekeepingMiniApp/src/subpackages/sercice/addStandardOrder/addStandardOrder.config.ts
new file mode 100644
index 0000000..305fdb1
--- /dev/null
+++ b/apps/housekeepingMiniApp/src/subpackages/sercice/addStandardOrder/addStandardOrder.config.ts
@@ -0,0 +1,3 @@
+export default definePageConfig({
+  disableScroll: true,
+});
diff --git a/apps/housekeepingMiniApp/src/subpackages/sercice/addStandardOrder/addStandardOrder.vue b/apps/housekeepingMiniApp/src/subpackages/sercice/addStandardOrder/addStandardOrder.vue
new file mode 100644
index 0000000..0a13ac3
--- /dev/null
+++ b/apps/housekeepingMiniApp/src/subpackages/sercice/addStandardOrder/addStandardOrder.vue
@@ -0,0 +1,13 @@
+<template>
+  <PageLayout class="addStandardOrder-page-wrapper" title="棰勭害涓嬪崟" has-border>
+    <InnerPage />
+  </PageLayout>
+</template>
+
+<script setup lang="ts">
+import InnerPage from './InnerPage.vue';
+
+defineOptions({
+  name: 'addStandardOrder',
+});
+</script>
diff --git a/apps/housekeepingMiniApp/src/subpackages/sercice/serciceDetail/serciceDetail.config.ts b/apps/housekeepingMiniApp/src/subpackages/sercice/serciceDetail/serciceDetail.config.ts
index e69de29..305fdb1 100644
--- a/apps/housekeepingMiniApp/src/subpackages/sercice/serciceDetail/serciceDetail.config.ts
+++ b/apps/housekeepingMiniApp/src/subpackages/sercice/serciceDetail/serciceDetail.config.ts
@@ -0,0 +1,3 @@
+export default definePageConfig({
+  disableScroll: true,
+});
diff --git a/apps/housekeepingMiniApp/src/subpackages/sercice/serciceDetail/serciceDetail.vue b/apps/housekeepingMiniApp/src/subpackages/sercice/serciceDetail/serciceDetail.vue
index f41598b..744f2c1 100644
--- a/apps/housekeepingMiniApp/src/subpackages/sercice/serciceDetail/serciceDetail.vue
+++ b/apps/housekeepingMiniApp/src/subpackages/sercice/serciceDetail/serciceDetail.vue
@@ -3,19 +3,19 @@
     <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch">
       <ContentScrollView style="background-color: transparent"> serciceDetail </ContentScrollView>
       <PageFooter>
-        <!-- <PageFooterAction
-            :icon="IconShare"
-            text="鍒嗕韩"
-            :isFlex="false"
-            openType="share"
-          ></PageFooterAction>
-          <PageFooterAction
-            :icon="userResumeInfo.isCollected ? IconAttentionActive : IconAttention"
-            text="鏀惰棌"
-            :isFlex="false"
-            @click="handleAttention"
-          ></PageFooterAction> -->
-        <PageFooterBtn type="primary" @click="skuState.visible = true">棰勭害涓嬪崟</PageFooterBtn>
+        <PageFooterAction
+          :icon="detail.isCollection ? IconAttentionActive : IconAttention"
+          text="鏀惰棌"
+          :isFlex="false"
+          @click="handleAttention"
+        ></PageFooterAction>
+        <PageFooterAction
+          :icon="IconShare"
+          text="鍒嗕韩"
+          :isFlex="false"
+          :open-type="'contact'"
+        ></PageFooterAction>
+        <PageFooterBtn type="primary" @click="openSkuDialog()">棰勭害涓嬪崟</PageFooterBtn>
         <PageFooterBtn type="primary" @click="pay">棰勭害涓嬪崟</PageFooterBtn>
       </PageFooter>
       <Sku
@@ -34,7 +34,11 @@
 import Taro from '@tarojs/taro';
 import * as standardOrderServices from '@12333/services/apiV2/standardOrder';
 import { toThousand, setOSSLink } from '@12333/utils';
-import { Sku, Goods, SkuItem } from '@12333/components';
+import { Sku, Goods, SkuItem, SkuUtils } 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';
 
 defineOptions({
   name: 'serciceDetail',
@@ -48,7 +52,7 @@
   onSuccess(res) {
     skuState.sku = [
       {
-        id: '1',
+        id: SkuUtils.DefaultSkuSpecId,
         name: '瑙勬牸',
         list: res.specs.map((item, index) => ({
           id: item.id,
@@ -59,7 +63,7 @@
       },
     ];
     skuState.goods = {
-      skuId: '1',
+      skuId: SkuUtils.DefaultSkuSpecId,
       price: toThousand(res.specs[0].price),
       imagePath: setOSSLink(res.files[0]),
       name: res.name,
@@ -74,22 +78,46 @@
 });
 
 // 搴曢儴鎿嶄綔鎸夐挳瑙﹀彂
-const clickBtnOperate = (op) => {
-  console.log('鐐瑰嚮浜嗘搷浣滄寜閽�', op);
+const clickBtnOperate = (op: { type: string; value: number }) => {
+  addStandardOrder(op.value);
 };
 
-async function addStandardOrder() {
+const openSkuDialog = useAccessLogin(() => {
+  skuState.visible = true;
+});
+
+function goAddStandardOrder(specNumber: number) {
+  Taro.navigateTo({
+    url: `${RouterPath.addStandardOrder}?specNumber=${specNumber}`,
+  });
+}
+
+async function addStandardOrder(specNumber: number) {
   try {
+    const spec = SkuUtils.getCurrentActiveSpec(skuState.sku);
     let params: API.AddStandardOrderCommand = {
-      serviceId: '3fa85f64-5717-4562-b3fc-2c963f66afa6',
-      serviceName: 'string',
-      specId: '3fa85f64-5717-4562-b3fc-2c963f66afa6',
-      specName: 'string',
-      specPrice: 0,
-      specNumber: 0,
+      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',
-      beginTime: '2025-12-24T06:44:24.840Z',
-      endTime: '2025-12-24T06:44:24.840Z',
+      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',
@@ -116,6 +144,8 @@
     }
   } catch (error) {}
 }
+
+function handleAttention() {}
 </script>
 
 <style lang="scss">
diff --git a/packages/components/src/Sku/Sku.vue b/packages/components/src/Sku/Sku.vue
index 51d1786..ad7f6f5 100644
--- a/packages/components/src/Sku/Sku.vue
+++ b/packages/components/src/Sku/Sku.vue
@@ -9,15 +9,20 @@
     <template #sku-header-price>
       <div class="pro-sku-header">
         <div class="pro-sku-header-title">{{ goods.name }}</div>
-        <nut-price :price="goods.price" />
+        <div class="pro-sku-header-spec">{{ currentSpecName }}</div>
+        <nut-price :price="goods.price" size="large" />
       </div>
     </template>
+    <template #sku-header-extra>
+      <div></div>
+    </template>
   </nut-sku>
 </template>
 
 <script setup lang="ts">
 import { toThousand } from '@12333/utils';
-import { Goods, SkuItem } from './sku';
+import { Goods, SkuItem, SkuUtils } from './sku';
+import { computed } from 'vue';
 
 defineOptions({
   name: 'Sku',
@@ -44,6 +49,14 @@
     price: toThousand(sku.price),
   };
 };
+
+const currentSpecName = computed(() => {
+  const spec = SkuUtils.getCurrentActiveSpec(props.sku);
+  if (spec) {
+    return spec.name ?? '';
+  }
+  return '';
+});
 </script>
 
 <style lang="scss">
@@ -53,6 +66,23 @@
   .pro-sku-header {
     flex: 1;
     min-height: 0;
+    display: flex;
+    flex-direction: column;
+    justify-content: space-between;
+
+    .pro-sku-header-title {
+      color: boleGetCssVar('text-color', 'primary');
+    }
+
+    .pro-sku-header-spec {
+      color: boleGetCssVar('text-color', 'secondary');
+      font-size: 26px;
+    }
+  }
+
+  .nut-sku-content {
+    width: 100%;
+    box-sizing: border-box;
   }
 }
 </style>
diff --git a/packages/components/src/Sku/sku.ts b/packages/components/src/Sku/sku.ts
index 1b864b7..7e66361 100644
--- a/packages/components/src/Sku/sku.ts
+++ b/packages/components/src/Sku/sku.ts
@@ -15,3 +15,25 @@
   skuId: string;
   name: string;
 };
+
+export class SkuUtils {
+  static DefaultSkuSpecId = 'spec';
+
+  static getCurrentSku(skuList: SkuItem[], goods: Goods) {
+    const sku = skuList.find((item) => item.id === goods.skuId);
+    return sku;
+  }
+
+  static getCurrentSpecSkuItem(skuList: SkuItem[]) {
+    const sku = skuList.find((item) => item.id === this.DefaultSkuSpecId);
+    return sku;
+  }
+
+  static getCurrentActiveSpec(skuList: SkuItem[]) {
+    const sku = this.getCurrentSpecSkuItem(skuList);
+    if (sku) {
+      return sku.list.find((item) => item.active);
+    }
+    return null;
+  }
+}

--
Gitblit v1.10.0