import { flattenAreaTree, formatAreaListToTree } from '@12333/utils';
|
import { useQuery, useQueryClient } from '@tanstack/vue-query';
|
import { computed, onMounted, onUnmounted, ref } from 'vue';
|
import { AreaType, CategoryCode } from '@12333/constants';
|
import Taro, { EventChannel } from '@tarojs/taro';
|
import { useDictionaryDataSelect } from './dic';
|
|
export function useArea() {
|
const queryClient = useQueryClient();
|
|
const { dictionaryDataList } = useDictionaryDataSelect({
|
categoryCode: CategoryCode.Area,
|
staleTime: Infinity,
|
all: true,
|
maxDeep: AreaType.City,
|
});
|
|
const areaList = computed(() => dictionaryDataList.value.map(convertDictionaryToAreaTreeNode));
|
console.log('areaList: ', areaList);
|
|
const areaTree = computed(() => formatAreaListToTree(areaList.value));
|
|
function getAreaFromCompleteAreaList(areaCode: string) {
|
return areaList.value.find((x) => x.areaCode === areaCode);
|
}
|
|
function getAreaByAreaCode(areaCode: string) {
|
return areaList.value.find((x) => x.areaCode === areaCode);
|
}
|
|
return {
|
completeAreaList: areaList,
|
areaList,
|
completeAreaTree: areaTree,
|
provinceList: computed(() => areaList.value.filter((x) => x.layer === AreaType.Province)),
|
getAreaFromCompleteAreaList,
|
getAreaByAreaCode,
|
};
|
}
|
|
function convertDictionaryToAreaTreeNode(
|
item: API.SelectOptionStringGetDictionaryDataSelectQueryResultOption
|
) {
|
return {
|
children: [],
|
areaCode: item.data?.code,
|
parentCode: item.data?.field1,
|
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 { areaList } = useArea();
|
|
const findAreaCodeFromName = (areaName: string) => {
|
const areaItem = areaList.value.find((x) => x.areaName === areaName);
|
return areaItem?.areaCode ?? '';
|
};
|
|
const findAreaNameFromCode = (areaCode: string) => {
|
const areaItem = areaList.value.find((x) => x.areaCode === areaCode);
|
return areaItem?.areaName ?? '';
|
};
|
|
const findAreaItemFromCode = (areaCode: string) => {
|
const areaItem = areaList.value.find((x) => x.areaCode === areaCode);
|
return areaItem;
|
};
|
|
return {
|
areaList,
|
findAreaCodeFromName,
|
findAreaNameFromCode,
|
findAreaItemFromCode,
|
};
|
}
|
|
export function useProvinceList() {
|
const { provinceList } = useArea();
|
|
return {
|
provinceList,
|
};
|
}
|
|
export const globalEventEmitter = new Taro.Events();
|
|
export function useEvent(eventName: string, fn: TaroGeneral.EventCallback) {
|
onMounted(() => {
|
if (globalEventEmitter?.on) {
|
globalEventEmitter.on(eventName, fn);
|
}
|
});
|
|
onUnmounted(() => {
|
if (globalEventEmitter?.off) {
|
globalEventEmitter.off(eventName, fn);
|
}
|
});
|
}
|