From 318a7bbb40a8f37f825f9eb4ee1bcd84c6020a09 Mon Sep 17 00:00:00 2001 From: wupengfei <834520024@qq.com> Date: 星期三, 13 八月 2025 16:00:34 +0800 Subject: [PATCH] feat: 接口对接 --- packages/hooks/area.ts | 78 ++++++++++++++++++++++++++++----------- 1 files changed, 56 insertions(+), 22 deletions(-) diff --git a/packages/hooks/area.ts b/packages/hooks/area.ts index f8bd597..506b61d 100644 --- a/packages/hooks/area.ts +++ b/packages/hooks/area.ts @@ -1,24 +1,18 @@ import { flattenAreaTree, formatAreaListToTree } from '@12333/utils'; import { useQuery, useQueryClient } from '@tanstack/vue-query'; -import { computed, onMounted, onUnmounted, ref } from 'vue'; +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 queryClient = useQueryClient(); - const { dictionaryDataList } = useDictionaryDataSelect({ - categoryCode: CategoryCode.Area, - staleTime: Infinity, - all: true, - maxDeep: AreaType.City, - }); + const { areaList } = useAllAreaList(); - const areaList = computed(() => dictionaryDataList.value.map(convertDictionaryToAreaTreeNode)); - console.log('areaList: ', areaList); - - const areaTree = computed(() => formatAreaListToTree(areaList.value)); + // const areaList = computed(() => dictionaryDataList.value.map(convertDictionaryToAreaTreeNode)); function getAreaFromCompleteAreaList(areaCode: string) { return areaList.value.find((x) => x.areaCode === areaCode); @@ -31,20 +25,48 @@ return { completeAreaList: areaList, areaList, - completeAreaTree: areaTree, - provinceList: computed(() => areaList.value.filter((x) => x.layer === AreaType.Province)), + // 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 } + ); + }, + placeholderData: () => [] as API.GetAreaSelectQueryResultOption[], + staleTime: Infinity, + }); + + // const areaTree = computed(() => formatAreaListToTree(areaList.value, null, unref(maxLayer))); + console.log('areaTree: ', areaTree); + + return { areaTree: areaTree }; } function convertDictionaryToAreaTreeNode( item: API.SelectOptionStringGetDictionaryDataSelectQueryResultOption ) { return { - children: [], areaCode: item.data?.code, - parentCode: item.data?.field1, + parentCode: item.data?.parentCode, areaName: item.label, layer: Number(item.data?.field4), quickQuery: item.data?.field2, @@ -54,7 +76,19 @@ } export function useAllAreaList() { - const { areaList } = 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 = areaList.value.find((x) => x.areaName === areaName); @@ -79,13 +113,13 @@ }; } -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