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