|  |  |  | 
|---|
|  |  |  | 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.Area, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | const { areaList } = useAllAreaList(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const areaList = computed(() => dictionaryDataList.value.map(convertDictionaryToAreaTreeNode)); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 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); | 
|---|
|  |  |  | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | export function useAreaTree() { | 
|---|
|  |  |  | axios.get('https://parkmanagement.oss-cn-hangzhou.aliyuncs.com/12333/area.txt').then((res) => { | 
|---|
|  |  |  | console.log(res); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | const { data } = useQuery({ | 
|---|
|  |  |  | queryKey: ['area.txt'], | 
|---|
|  |  |  | queryFn() { | 
|---|
|  |  |  | return axios | 
|---|
|  |  |  | .get<API.AreaTreeNode[]>( | 
|---|
|  |  |  | 'https://parkmanagement.oss-cn-hangzhou.aliyuncs.com/12333/area.txt' | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | .then((res) => res.data); | 
|---|
|  |  |  | 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.AreaTreeNode[], | 
|---|
|  |  |  | placeholderData: () => [] as API.GetAreaSelectQueryResultOption[], | 
|---|
|  |  |  | staleTime: Infinity, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const areaTree = computed(() => formatAreaListToTree(data.value)); | 
|---|
|  |  |  | // const areaTree = computed(() => formatAreaListToTree(areaList.value, null, unref(maxLayer))); | 
|---|
|  |  |  | console.log('areaTree: ', areaTree); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return { areaTree: areaTree }; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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); | 
|---|