效果图

代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>选择电脑文件夹</title>
<link href="https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.14/theme-chalk/index.min.css" rel="stylesheet" />
</head>
<body>
<div id="app">
<button @click="openFolder">打开文件夹</button>
<el-tree v-if="list.length" :data="list" :props="defaultProps" @node-click="handleNodeClick"></el-tree>
</div>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.9/vue.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.14/index.min.js"></script>
<script>
window.vm = new Vue({
el: "#app",
data() {
return {
list: [],
defaultProps: {
children: "children",
label: "name",
},
};
},
methods: {
async openFolder() {
let handle = await showDirectoryPicker( );
await this.handleHandler(handle);
this.list = [handle];
this.$forceUpdate();
console.log(handle);
},
async handleHandler(handle) {
await processHandler(handle);
async function processHandler(handle) {
if (handle.kind === "file") {
return;
}
handle.children = [];
let iter = await handle.entries();
for await (let entry of iter) {
await processHandler(entry[1]);
handle.children.push(entry[1]);
}
}
},
handleNodeClick() {},
},
});
</script>
</body>
</html>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异