mirror of
https://gitee.com/dromara/RuoYi-Vue-Plus.git
synced 2026-09-13 15:43:43 +08:00
40 lines
1.0 KiB
TypeScript
40 lines
1.0 KiB
TypeScript
import type { Ref } from 'vue';
|
|
|
|
interface UseTreeTableExpandOptions<T> {
|
|
tableRef: Ref<ElTableInstance | undefined>;
|
|
data: Ref<T[]>;
|
|
initialExpandAll?: boolean;
|
|
getChildren?: (row: T) => T[] | undefined;
|
|
}
|
|
|
|
export function useTreeTableExpand<T extends Record<string, any>>(options: UseTreeTableExpandOptions<T>) {
|
|
const { tableRef, data, initialExpandAll = true, getChildren = row => row.children as T[] | undefined } = options;
|
|
|
|
const isExpandAll = ref(initialExpandAll);
|
|
|
|
const toggleRows = (rows: T[], expanded: boolean) => {
|
|
rows.forEach(row => {
|
|
tableRef.value?.toggleRowExpansion(row, expanded);
|
|
const children = getChildren(row);
|
|
if (children?.length) {
|
|
toggleRows(children, expanded);
|
|
}
|
|
});
|
|
};
|
|
|
|
const setExpandAll = (expanded: boolean) => {
|
|
isExpandAll.value = expanded;
|
|
toggleRows(data.value, expanded);
|
|
};
|
|
|
|
const handleToggleExpandAll = () => {
|
|
setExpandAll(!isExpandAll.value);
|
|
};
|
|
|
|
return {
|
|
isExpandAll,
|
|
setExpandAll,
|
|
handleToggleExpandAll
|
|
};
|
|
}
|