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