From d042bb3c5679375956c7616e6b1afe681fb82d9b Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期三, 24 十二月 2025 16:12:02 +0800
Subject: [PATCH] fix: 甲方小程序
---
packages/constants/dic.ts | 5 +
packages/hooks/standardOrder.ts | 6 +
packages/components/src/index.ts | 2
packages/hooks/dic.ts | 3
packages/components/src/Sku/Sku.vue | 58 ++++++++++++++
packages/components/src/Sku/sku.ts | 17 ++++
apps/housekeepingMiniApp/src/subpackages/sercice/serciceDetail/serciceDetail.vue | 43 ++++++++++
packages/services/apiV2/typings.d.ts | 42 ++++++++++
apps/housekeepingMiniApp/src/pages/home/hooks/index.ts | 7 +
apps/housekeepingMiniApp/src/pages/home/index.vue | 2
packages/constants/apiEnum.ts | 2
11 files changed, 178 insertions(+), 9 deletions(-)
diff --git a/apps/housekeepingMiniApp/src/pages/home/hooks/index.ts b/apps/housekeepingMiniApp/src/pages/home/hooks/index.ts
index deb8b05..7c89e56 100644
--- a/apps/housekeepingMiniApp/src/pages/home/hooks/index.ts
+++ b/apps/housekeepingMiniApp/src/pages/home/hooks/index.ts
@@ -1,6 +1,6 @@
import { useQuery, useQueryClient } from '@tanstack/vue-query';
import * as advertisementServices from '@12333/services/apiV2/advertisement';
-import { EnumAdvertisementPage, CategoryCode } from '@12333/constants';
+import { EnumAdvertisementPage, CategoryCode, PositionCodeEnum } from '@12333/constants';
import { useDictionaryDataSelect } from '@12333/hooks';
import _ from 'lodash';
@@ -28,11 +28,12 @@
export function usePositionGrid() {
const { dictionaryDataList: positionList } = useDictionaryDataSelect({
categoryCode: CategoryCode.Position,
+ field1: PositionCodeEnum.Housekeeping,
});
- const positionListChunk = computed(() => _.chunk(positionList.value, 8));
+ const positionListChunk = computed(() => _.chunk(positionList.value, 10));
- const positionGrid = computed(() => positionList.value.slice(0, 8));
+ const positionGrid = computed(() => positionList.value.slice(0, 10));
return {
positionListChunk,
diff --git a/apps/housekeepingMiniApp/src/pages/home/index.vue b/apps/housekeepingMiniApp/src/pages/home/index.vue
index 006890a..d3793bc 100644
--- a/apps/housekeepingMiniApp/src/pages/home/index.vue
+++ b/apps/housekeepingMiniApp/src/pages/home/index.vue
@@ -43,7 +43,7 @@
:key="index"
style="height: 160px"
> -->
- <nut-grid class="home-gird">
+ <nut-grid class="home-gird" :column-num="5">
<nut-grid-item v-for="item in positionGrid" :key="item.value" :text="item.label">
<img :src="setOSSLink(item.data.field2)" class="home-grid-item-icon" />
<!-- <Dongdong /> -->
diff --git a/apps/housekeepingMiniApp/src/subpackages/sercice/serciceDetail/serciceDetail.vue b/apps/housekeepingMiniApp/src/subpackages/sercice/serciceDetail/serciceDetail.vue
index fa0f6d3..f41598b 100644
--- a/apps/housekeepingMiniApp/src/subpackages/sercice/serciceDetail/serciceDetail.vue
+++ b/apps/housekeepingMiniApp/src/subpackages/sercice/serciceDetail/serciceDetail.vue
@@ -15,9 +15,16 @@
:isFlex="false"
@click="handleAttention"
></PageFooterAction> -->
- <PageFooterBtn type="primary" @click="pay">棰勭害涓嬪崟</PageFooterBtn>
+ <PageFooterBtn type="primary" @click="skuState.visible = true">棰勭害涓嬪崟</PageFooterBtn>
<PageFooterBtn type="primary" @click="pay">棰勭害涓嬪崟</PageFooterBtn>
</PageFooter>
+ <Sku
+ v-model:visible="skuState.visible"
+ :sku="skuState.sku"
+ v-model:goods="skuState.goods"
+ @clickBtnOperate="clickBtnOperate"
+ >
+ </Sku>
</LoadingLayout>
</PageLayoutWithBg>
</template>
@@ -26,6 +33,8 @@
import { useStandardServiceDetail } from '@12333/hooks';
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';
defineOptions({
name: 'serciceDetail',
@@ -36,8 +45,39 @@
const { isLoading, isError, detail, refetch } = useStandardServiceDetail({
id,
+ onSuccess(res) {
+ skuState.sku = [
+ {
+ id: '1',
+ name: '瑙勬牸',
+ list: res.specs.map((item, index) => ({
+ id: item.id,
+ name: item.name,
+ active: index === 0,
+ disable: false,
+ })),
+ },
+ ];
+ skuState.goods = {
+ skuId: '1',
+ price: toThousand(res.specs[0].price),
+ imagePath: setOSSLink(res.files[0]),
+ name: res.name,
+ };
+ },
});
+const skuState = reactive({
+ visible: false,
+ sku: [] as SkuItem[],
+ goods: {} as Goods,
+});
+
+// 搴曢儴鎿嶄綔鎸夐挳瑙﹀彂
+const clickBtnOperate = (op) => {
+ console.log('鐐瑰嚮浜嗘搷浣滄寜閽�', op);
+};
+
async function addStandardOrder() {
try {
let params: API.AddStandardOrderCommand = {
@@ -54,7 +94,6 @@
enterpriseEmployeeIds: ['3fa85f64-5717-4562-b3fc-2c963f66afa6'],
remark: 'string',
payAccess: 1,
- payAmount: 0,
};
let res = await standardOrderServices.addStandardOrder(params);
} catch (error) {}
diff --git a/packages/components/src/Sku/Sku.vue b/packages/components/src/Sku/Sku.vue
new file mode 100644
index 0000000..51d1786
--- /dev/null
+++ b/packages/components/src/Sku/Sku.vue
@@ -0,0 +1,58 @@
+<template>
+ <nut-sku
+ v-model:visible="visible"
+ :sku="sku"
+ :goods="goods"
+ @selectSku="selectSku"
+ class="pro-sku"
+ >
+ <template #sku-header-price>
+ <div class="pro-sku-header">
+ <div class="pro-sku-header-title">{{ goods.name }}</div>
+ <nut-price :price="goods.price" />
+ </div>
+ </template>
+ </nut-sku>
+</template>
+
+<script setup lang="ts">
+import { toThousand } from '@12333/utils';
+import { Goods, SkuItem } from './sku';
+
+defineOptions({
+ name: 'Sku',
+});
+
+type Props = {
+ sku: SkuItem[];
+};
+
+const props = withDefaults(defineProps<Props>(), {});
+
+const visible = defineModel<boolean>('visible');
+const goods = defineModel<Goods>('goods');
+
+const selectSku = (ss) => {
+ const { sku, skuIndex, parentSku, parentIndex } = ss;
+ if (sku.disable) return false;
+ props.sku[parentIndex].list.forEach((s) => {
+ s.active = s.id == sku.id;
+ });
+ goods.value = {
+ ...goods.value,
+ skuId: sku.id,
+ price: toThousand(sku.price),
+ };
+};
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+
+.pro-sku {
+ .pro-sku-header {
+ flex: 1;
+ min-height: 0;
+ }
+}
+</style>
diff --git a/packages/components/src/Sku/sku.ts b/packages/components/src/Sku/sku.ts
new file mode 100644
index 0000000..1b864b7
--- /dev/null
+++ b/packages/components/src/Sku/sku.ts
@@ -0,0 +1,17 @@
+export type SkuItem = {
+ id: string;
+ name: string;
+ list: {
+ active: boolean;
+ disable: boolean;
+ id: string;
+ name: string;
+ }[];
+};
+
+export type Goods = {
+ imagePath: string;
+ price: string;
+ skuId: string;
+ name: string;
+};
diff --git a/packages/components/src/index.ts b/packages/components/src/index.ts
index b72256e..cb7ac69 100644
--- a/packages/components/src/index.ts
+++ b/packages/components/src/index.ts
@@ -51,3 +51,5 @@
export { default as Cell } from './Chunk/Cell.vue';
export { default as CellChunk } from './Chunk/CellChunk.vue';
export { default as ChunkTitle } from './Chunk/ChunkTitle.vue';
+export { default as Sku } from './Sku/Sku.vue';
+export * from './Sku/sku';
diff --git a/packages/constants/apiEnum.ts b/packages/constants/apiEnum.ts
index cb4bfa6..a8c9942 100644
--- a/packages/constants/apiEnum.ts
+++ b/packages/constants/apiEnum.ts
@@ -823,6 +823,8 @@
/** 鐢ㄦ埛閽卞寘鏀舵敮绫诲瀷 */
export enum EnumUserWalletTransactionType {
+ /**鏀粯 */
+ Payment = 1,
/**鏀跺叆 */
Income = 10,
/**鎻愮幇 */
diff --git a/packages/constants/dic.ts b/packages/constants/dic.ts
index 41e3e90..c23b5f5 100644
--- a/packages/constants/dic.ts
+++ b/packages/constants/dic.ts
@@ -58,3 +58,8 @@
/**楂樻俯琛ヨ创 */
HighTemperatureSubsidies = '50-40',
}
+
+export enum PositionCodeEnum {
+ /**瀹舵斂 */
+ Housekeeping = '60-600',
+}
diff --git a/packages/hooks/dic.ts b/packages/hooks/dic.ts
index bb28a9f..d6fc03d 100644
--- a/packages/hooks/dic.ts
+++ b/packages/hooks/dic.ts
@@ -57,6 +57,7 @@
/** 鏌ヨ鎵�鏈� */
all?: MaybeRef<boolean>;
maxDeep?: number;
+ field1?: MaybeRef<string>;
};
export function useDictionaryDataSelect({
@@ -67,6 +68,7 @@
keywords,
all,
maxDeep,
+ field1,
}: UseDictionaryDataSelectOptions) {
const params = computed(() => ({
categoryId: unref(categoryId),
@@ -75,6 +77,7 @@
keywords: unref(keywords),
all: unref(all),
maxDeep: maxDeep,
+ field1: unref(field1),
}));
const { data: dictionaryDataList, refetch } = useQuery({
queryKey: ['dictionaryServices/getDictionaryDataSelect', params],
diff --git a/packages/hooks/standardOrder.ts b/packages/hooks/standardOrder.ts
index b1a1e61..585b716 100644
--- a/packages/hooks/standardOrder.ts
+++ b/packages/hooks/standardOrder.ts
@@ -4,9 +4,10 @@
type UseStandardServiceDetailOptions = {
id: MaybeRef<string>;
+ onSuccess?: (data: API.GetStandardServiceQueryResult) => any;
};
-export function useStandardServiceDetail({ id }: UseStandardServiceDetailOptions) {
+export function useStandardServiceDetail({ id, onSuccess }: UseStandardServiceDetailOptions) {
const { data, refetch, isLoading, isError } = useQuery({
queryKey: ['standardServiceServices/getStandardService', id],
queryFn: async () => {
@@ -19,6 +20,9 @@
});
},
placeholderData: () => ({} as API.GetStandardServiceQueryResult),
+ onSuccess(data) {
+ onSuccess?.(data);
+ },
});
return {
diff --git a/packages/services/apiV2/typings.d.ts b/packages/services/apiV2/typings.d.ts
index c0a541b..8815df5 100644
--- a/packages/services/apiV2/typings.d.ts
+++ b/packages/services/apiV2/typings.d.ts
@@ -30,6 +30,8 @@
serviceId?: string;
/** 鏈嶅姟鍚� */
serviceName?: string;
+ /** 鏈嶅姟鍗曞彿 */
+ serviceCode?: string;
/** 瑙勬牸 */
specId?: string;
/** 瑙勬牸鍚嶇О */
@@ -40,6 +42,30 @@
specNumber?: number;
/** 鍦板潃Id */
addressId?: string;
+ /** 濮撳悕 */
+ name?: string;
+ /** 鑱旂郴鐢佃瘽 */
+ contactPhoneNumber?: string;
+ /** 鐪佷唤缂栧彿 */
+ provinceCode?: string;
+ /** 鐪佷唤 */
+ provinceContent?: string;
+ /** 鍩庡競缂栧彿 */
+ cityCode?: string;
+ /** 鍩庡競 */
+ cityContent?: string;
+ /** 鍖虹紪鍙� */
+ areaCode?: string;
+ /** 鍖� */
+ areaContent?: string;
+ /** 璇︾粏鍦板潃 */
+ addressName?: string;
+ /** 闂ㄧ墝鍙� */
+ addressDetail?: string;
+ /** 缁忓害 */
+ longitude?: number;
+ /** 绾害 */
+ latitude?: number;
/** 鏈嶅姟璧峰鏃堕棿 */
beginTime?: string;
/** 鏈嶅姟鎴鏃堕棿 */
@@ -51,8 +77,6 @@
/** 澶囨敞 */
remark?: string;
payAccess?: EnumUserBankCardAccess;
- /** 瀹炰粯閲戦 */
- payAmount?: number;
}
interface AgainSureTaskSettlementOrderRosterCommand {
@@ -149,6 +173,16 @@
maxDeep?: number;
/** 鎼哄甫涓嬬骇 */
withChildren?: boolean;
+ /** 瀛楁1 */
+ field1?: string;
+ /** 瀛楁2 */
+ field2?: string;
+ /** 瀛楁3 */
+ field3?: string;
+ /** 瀛楁4 */
+ field4?: string;
+ /** 瀛楁5 */
+ field5?: string;
}
interface APIgetEnabledElectronSignSettingsParams {
@@ -1638,6 +1672,8 @@
}
enum EnumUserWalletTransactionType {
+ /**鏀粯 */
+ Payment = 1,
/**鏀跺叆 */
Income = 10,
/**鎻愮幇 */
@@ -9413,6 +9449,8 @@
signType?: string;
/** 绛惧悕锛屽叿浣撹寰俊鏀粯鏂囨。 */
paySign?: string;
+ /** 鏀粯缁撴潫鏃堕棿 */
+ timeExpire?: string;
}
interface PersonalUserElectronSignCommand {
--
Gitblit v1.10.0