diff --git a/src/components/Tree/src/BasicTree.vue b/src/components/Tree/src/BasicTree.vue index 637639fc..182748ba 100644 --- a/src/components/Tree/src/BasicTree.vue +++ b/src/components/Tree/src/BasicTree.vue @@ -13,7 +13,7 @@ import { treeEmits, treeProps } from './types/tree' import { ScrollContainer } from '@/components/Container' import { isArray, isBoolean, isEmpty, isFunction } from '@/utils/is' import { extendSlots, getSlot } from '@/utils/helper/tsxHelper' -import { eachTree, filter, treeToList } from '@/utils/helper/treeHelper' +import { eachTree, filter, findNode, treeToList } from '@/utils/helper/treeHelper' import { useContextMenu } from '@/hooks/web/useContextMenu' import type { CreateContextOptions } from '@/components/ContextMenu' import { createBEM } from '@/utils/bem' @@ -395,6 +395,14 @@ export default defineComponent({ return data }) + async function loadData(node: TreeItem) { + const parentNode = findNode(treeDataRef.value, item => item.key === node.key) + try { + parentNode.children = await props.loadData(node) + } + catch {} + } + expose(instance) return () => { @@ -422,7 +430,7 @@ export default defineComponent({ )} - + {extendSlots(slots, ['title'])} diff --git a/src/components/Tree/src/types/tree.ts b/src/components/Tree/src/types/tree.ts index 559af27f..f0971dcb 100644 --- a/src/components/Tree/src/types/tree.ts +++ b/src/components/Tree/src/types/tree.ts @@ -31,6 +31,8 @@ export type KeyType = string | number export type CheckKeys = KeyType[] | { checked: string[] | number[], halfChecked: string[] | number[] } +export type TreeNode = (Omit & { key?: string | number }) + export const treeProps = buildProps({ value: { type: [Object, Array] as PropType, @@ -77,7 +79,7 @@ export const treeProps = buildProps({ }, treeData: { - type: Array as PropType<(Omit & { key?: string | number })[]>, + type: Array as PropType, }, actionList: { @@ -128,6 +130,10 @@ export const treeProps = buildProps({ default: false, }, treeWrapperClassName: String, + + loadData: { + type: Function as PropType<(node: TreeNode) => Promise>, + }, }) export type TreeProps = ExtractPropTypes diff --git a/src/views/system/user/DeptTree.vue b/src/views/system/user/DeptTree.vue deleted file mode 100644 index 4b820d3f..00000000 --- a/src/views/system/user/DeptTree.vue +++ /dev/null @@ -1,63 +0,0 @@ - - -