mirror of
http://183.237.82.114:10086/kilo/leaser_front.git
synced 2026-10-23 19:35:25 +00:00
75 lines
1.9 KiB
TypeScript
75 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,
|
|
};
|
|
}
|