Files
leaser_front/src/composables/useDepartmentList.ts
T

73 lines
1.8 KiB
TypeScript
Raw Normal View History

import { ref, onMounted } from 'vue';
2026-02-01 12:04:08 +08:00
import { getDepartmentList, getDepartmentDetail } from '@/api/department';
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;
}
2026-02-01 12:04:08 +08:00
} catch {
// 获取部门列表失败,静默处理
}
};
const getDepartmentDetailData = async (id: number): Promise<any> => {
try {
const { code, data } = await getDepartmentDetail(id);
if (code === 200 && data) {
return data;
}
return null;
2026-02-01 12:04:08 +08:00
} catch {
return null;
}
};
if (autoFetch) {
onMounted(() => {
getDepartmentListData();
});
}
return {
departmentListData,
allDepartmentKeys,
getDepartmentListData,
getDepartmentDetailData,
};
}