先看效果:

结构如下:
<el-tree
ref="tree"
lazy
:props="props"
:load="loadNode"
node-key="label"
highlight-current
@node-click="handleNodeClick">
</el-tree>
script 标签内的数据:
data() {
return {
...
props: {
label: 'label',
children: 'children',
isLeaf: 'isLeaf'
},
}
},
...
methods: {
handleNodeClick(data, node) {
console.log(data)
console.log(node)
},
async loadNode(node, resolve) {
if (node.level === 0) {
return resolve([
{
label: "根节点",
fileFullName: "/",
}
])
}
if (node.level >= 1) {
let res = await loadFtpFileSystemApi({
appId: this.appItem.id,
fullPath: node.data.fileFullName,
})
let children = []
res.data.directoryList.forEach(folder => {
let data = {
label: folder.fileName,
isLeaf: false,
fileFullName: folder.fileFullName
}
children.push(data)
})
res.data.fileList.forEach(file => {
let data = {
label: file.fileName,
isLeaf: true,
fileFullName: file.fileFullName
}
children.push(data)
})
return resolve(children)
}
},
}