import { ref, onMounted } from 'vue'; import { getDepartmentList, getDepartmentDetail } from '@/api/setting'; import { DepartmentItem } from '@/types/setting'; export default function useDepartmentList(autoFetch = true) { const departmentListData = ref([]); const allDepartmentKeys = ref([]); function markNonLevel1Departments(list: DepartmentItem[]): DepartmentItem[] { const traverse = (items: DepartmentItem[]) => { return items.map((item) => { const newItem: DepartmentItem = { ...item, isShowEditIcon: false, children: [], }; // 收集 ID allDepartmentKeys.value.push(item.id); if (item.children && item.children.length > 0) { newItem.children = traverse(item.children); } return newItem; }); }; return traverse(list); } const getDepartmentListData = async () => { try { const { code, data } = await getDepartmentList(); if (code === 200) { if (data?.departmentList?.length === 0) return; allDepartmentKeys.value = []; // 清空再收集 const fetchDepartmentList = markNonLevel1Departments( data?.departmentList ); departmentListData.value = fetchDepartmentList; } } catch (error) { console.error('获取部门列表失败:', error); } }; const getDepartmentDetailData = async ( id: number ): Promise => { try { const { code, data } = await getDepartmentDetail(id); if (code === 200 && data?.department) { return data.department; } return null; } catch (error) { console.error('获取部门详情失败:', error); return null; } }; if (autoFetch) { onMounted(() => { getDepartmentListData(); }); } return { departmentListData, allDepartmentKeys, getDepartmentListData, getDepartmentDetailData, }; }