Files
leaser_front/src/composables/useDepartmentList.ts
T

76 lines
1.9 KiB
TypeScript

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<DepartmentItem[]>([]);
const allDepartmentKeys = ref<number[]>([]);
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<DepartmentItem | null> => {
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,
};
}