From e7f0a81e522574957b754623996553cb43ad58a5 Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期一, 11 八月 2025 18:44:18 +0800
Subject: [PATCH] fix: 修改登录

---
 packages/hooks/area.ts |  151 +++++++++++++++++++++++++++-----------------------
 1 files changed, 82 insertions(+), 69 deletions(-)

diff --git a/packages/hooks/area.ts b/packages/hooks/area.ts
index 2f9220f..c8dd413 100644
--- a/packages/hooks/area.ts
+++ b/packages/hooks/area.ts
@@ -1,110 +1,123 @@
 import { flattenAreaTree, formatAreaListToTree } from '@12333/utils';
-import * as flexWorkerServices from '@12333/services/api/FlexWorker';
 import { useQuery, useQueryClient } from '@tanstack/vue-query';
-import { computed, onMounted, onUnmounted, ref } from 'vue';
-import { AreaType } from '@12333/constants';
+import { computed, MaybeRef, onMounted, onUnmounted, ref, unref } from 'vue';
+import { AreaType, CategoryCode } from '@12333/constants';
 import Taro, { EventChannel } from '@tarojs/taro';
+import { useDictionaryDataSelect } from './dic';
+import axios from 'axios';
+import * as dictionaryServices from '@12333/services/apiV2/dictionary';
 
 export function useArea() {
-  // const completeAreaList = ref<API.AreaInfo[]>([]);
-  // const completeAreaTree = ref<API.AreaTreeNode[]>([]);
-  // const provinceList = ref<API.AreaInfo[]>([]);
-  // const areaItemMap = ref<Record<API.AreaInfo['areaCode'], API.AreaInfo>>({});
-
   const queryClient = useQueryClient();
 
-  const { data: areaStore } = useQuery({
-    queryKey: ['flexWorkerServices/getAreaList'],
-    queryFn: async () => {
-      return await flexWorkerServices.getAreaList({}, { showLoading: false });
-    },
-    placeholderData: () => [] as API.AreaDto[],
-    staleTime: Infinity,
-    select(data) {
-      const areaItemMap: Record<API.AreaDto['areaCode'], API.AreaDto> = {};
-      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,
-      };
-    },
-  });
+  const { areaList } = useAllAreaList();
 
-  // onMounted(async () => {
-  //   let data: API.AreaInfo[] = await queryClient.ensureQueryData({
-  //     queryKey: ['areaServices/getRegionalManagementList'],
-  //   });
-  //   completeAreaList.value = flattenAreaTree([...data]);
-  //   completeAreaTree.value = [...data];
-  //   provinceList.value = [...data];
-  //   setAreaMap([...data]);
-  // });
+  // const areaList = computed(() => dictionaryDataList.value.map(convertDictionaryToAreaTreeNode));
 
-  // function setAreaMap(areaList: API.AreaInfo[]) {
-  //   areaList.forEach((item) => {
-  //     areaItemMap[item.areaCode] = item;
-  //   });
-  // }
-
-  function getAreaFromCompleteAreaList(areaCode: number) {
-    return areaStore.value.completeAreaList.find((x) => x.areaCode === areaCode);
+  function getAreaFromCompleteAreaList(areaCode: string) {
+    return areaList.value.find((x) => x.areaCode === areaCode);
   }
 
-  function getAreaByAreaCode(areaCode: number) {
-    return areaStore.value.areaItemMap[areaCode];
+  function getAreaByAreaCode(areaCode: string) {
+    return areaList.value.find((x) => x.areaCode === areaCode);
   }
 
   return {
-    completeAreaList: computed(() => areaStore.value.completeAreaList),
-    completeAreaTree: computed(() => areaStore.value.completeAreaTree),
-    // cityAreaTree: computed(() => areaStore.value.cityAreaTree),
-    provinceList: computed(() => areaStore.value.provinceList),
-    areaItemMap: computed(() => areaStore.value.areaItemMap),
+    completeAreaList: areaList,
+    areaList,
+    // completeAreaTree: areaTree,
+    // provinceList: computed(() => areaList.value.filter((x) => x.layer === AreaType.Province)),
     getAreaFromCompleteAreaList,
     getAreaByAreaCode,
   };
 }
 
+type UseAreaTreeOptions = {
+  maxLayer?: MaybeRef<AreaType>;
+};
+
+export function useAreaTree(options = {} as UseAreaTreeOptions) {
+  const { maxLayer = AreaType.Area } = options;
+
+  // const { areaList } = useAllAreaList();
+
+  const { data: areaTree } = useQuery({
+    queryKey: ['dictionaryServices/getAreaSelect', maxLayer],
+    queryFn: () => {
+      return dictionaryServices.getAreaSelect(
+        {
+          maxDeep: unref(maxLayer),
+        },
+        { showLoading: false }
+      );
+    },
+  });
+
+  // const areaTree = computed(() => formatAreaListToTree(areaList.value, null, unref(maxLayer)));
+  console.log('areaTree: ', areaTree);
+
+  return { areaTree: areaTree };
+}
+
+function convertDictionaryToAreaTreeNode(
+  item: API.SelectOptionStringGetDictionaryDataSelectQueryResultOption
+) {
+  return {
+    areaCode: item.data?.code,
+    parentCode: item.data?.parentCode,
+    areaName: item.label,
+    layer: Number(item.data?.field4),
+    quickQuery: item.data?.field2,
+    sort: item.data?.sort,
+    id: item.data?.id,
+  } as API.AreaTreeNode;
+}
+
 export function useAllAreaList() {
-  const { completeAreaTree, provinceList, completeAreaList } = useArea();
+  const { data: areaList } = useQuery({
+    queryKey: ['area.txt'],
+    queryFn() {
+      return axios
+        .get<API.AreaTreeNode[]>(
+          'https://parkmanagement.oss-cn-hangzhou.aliyuncs.com/12333/area.txt'
+        )
+        .then((res) => res.data);
+    },
+
+    placeholderData: () => [] as API.AreaTreeNode[],
+    staleTime: Infinity,
+  });
 
   const findAreaCodeFromName = (areaName: string) => {
-    const areaItem = completeAreaList.value.find((x) => x.areaName === areaName);
-    return areaItem?.areaCode ?? 0;
+    const areaItem = areaList.value.find((x) => x.areaName === areaName);
+    return areaItem?.areaCode ?? '';
   };
 
-  const findAreaNameFromCode = (areaCode: number) => {
-    const areaItem = completeAreaList.value.find((x) => x.areaCode === areaCode);
+  const findAreaNameFromCode = (areaCode: string) => {
+    const areaItem = areaList.value.find((x) => x.areaCode === areaCode);
     return areaItem?.areaName ?? '';
   };
 
-  const findAreaItemFromCode = (areaCode: number) => {
-    const areaItem = completeAreaList.value.find((x) => x.areaCode === areaCode);
+  const findAreaItemFromCode = (areaCode: string) => {
+    const areaItem = areaList.value.find((x) => x.areaCode === areaCode);
     return areaItem;
   };
 
   return {
+    areaList,
     findAreaCodeFromName,
     findAreaNameFromCode,
     findAreaItemFromCode,
-    areaTreeList: completeAreaTree,
-    provinceList,
   };
 }
 
-export function useProvinceList() {
-  const { provinceList } = useArea();
+// export function useProvinceList() {
+//   const { provinceList } = useArea();
 
-  return {
-    provinceList,
-  };
-}
+//   return {
+//     provinceList,
+//   };
+// }
 
 export const globalEventEmitter = new Taro.Events();
 

--
Gitblit v1.9.1