From 07d73df3d817d01ce47f6c7b7a8d8514cd389295 Mon Sep 17 00:00:00 2001 From: zhengyiming <540361168@qq.com> Date: 星期四, 13 三月 2025 10:19:44 +0800 Subject: [PATCH] release: @life-payment/core v0.0.3 --- packages/components/src/hooks/area.ts | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 103 insertions(+), 0 deletions(-) diff --git a/packages/components/src/hooks/area.ts b/packages/components/src/hooks/area.ts new file mode 100644 index 0000000..749d57b --- /dev/null +++ b/packages/components/src/hooks/area.ts @@ -0,0 +1,103 @@ +import { useQuery } from '@tanstack/vue-query'; +import { computed } from 'vue'; +import { useLifeRechargeContext, AreaInfo } from '@life-payment/core-vue'; +// import { AreaType } from '@12333/constants'; + +export function flattenAreaTree(tree: AreaInfo[]) { + let result = [] as AreaInfo[]; + + // 閫掑綊鍑芥暟锛岀敤浜庨亶鍘嗗瓙鑺傜偣 + function flatten(node: AreaInfo) { + result.push(node); + + if (node.children && node.children.length > 0) { + node.children.forEach(flatten); + } + } + + // 閬嶅巻鏍戠殑鏍硅妭鐐� + tree.forEach(flatten); + + return result; +} + +export function useArea() { + const { blLifeRecharge } = useLifeRechargeContext(); + + const { data: areaStore } = useQuery({ + queryKey: ['blLifeRecharge/getRegionalManagementList'], + queryFn: async () => { + return await blLifeRecharge.services.getRegionalManagementList({ showLoading: false }); + }, + placeholderData: () => [] as AreaInfo[], + staleTime: Infinity, + select(data) { + const areaItemMap: Record<AreaInfo['areaCode'], AreaInfo> = {}; + data.forEach((item) => { + areaItemMap[item.areaCode] = item; + }); + const completeAreaList = flattenAreaTree([...data]); + return { + completeAreaList: completeAreaList, + completeAreaTree: [...data], + // cityAreaTree: formatAreaListToTree(completeAreaList, 0, AreaType.City), + provinceList: [...data], + areaItemMap: areaItemMap, + }; + }, + }); + + function getAreaFromCompleteAreaList(areaCode: number) { + return areaStore.value.completeAreaList.find((x) => x.areaCode === areaCode); + } + + function getAreaByAreaCode(areaCode: number) { + return areaStore.value.areaItemMap[areaCode]; + } + + return { + completeAreaList: computed(() => areaStore.value.completeAreaList), + completeAreaTree: computed(() => areaStore.value.completeAreaTree), + cityAreaTree: computed(() => + areaStore.value.completeAreaTree.map((x) => ({ + ...x, + children: x.children.map((y) => ({ + ...y, + children: undefined, + })), + })) + ), + provinceList: computed(() => areaStore.value.provinceList), + areaItemMap: computed(() => areaStore.value.areaItemMap), + getAreaFromCompleteAreaList, + getAreaByAreaCode, + }; +} + +export function useAllAreaList() { + const { completeAreaTree, provinceList, completeAreaList, cityAreaTree } = useArea(); + + const findAreaCodeFromName = (areaName: string) => { + const areaItem = completeAreaList.value.find((x) => x.areaName === areaName); + return areaItem?.areaCode ?? 0; + }; + + const findAreaNameFromCode = (areaCode: number) => { + const areaItem = completeAreaList.value.find((x) => x.areaCode === areaCode); + return areaItem?.areaName ?? ''; + }; + + const findAreaItemFromCode = (areaCode: number) => { + const areaItem = completeAreaList.value.find((x) => x.areaCode === areaCode); + return areaItem; + }; + + return { + findAreaCodeFromName, + findAreaNameFromCode, + findAreaItemFromCode, + areaTreeList: completeAreaTree, + provinceList, + cityAreaTree, + }; +} -- Gitblit v1.9.1