【开发实践】使用jstree实现文件结构目录树

一、需求分析

因开发系统的需要,维护服务端导出文件的目录结构。因此,需要利用jstree,实现前端对文件结构目录的展示。

【预期效果】:

 二、需求实现

【项目准备】:

jstree在线文档:jstree在线文档地址

前端需要的json数据格式:

{
"id": "顶级目录1",
"text": "顶级目录1",
"icon": "fa fa-folder",
"children": [{"id": "二级目录1","text": "二级目录1","icon": "fa fa-file-zip-o","children": null}
]
}

引入js文件

资源下载:jstree 文件

<script src="./js/jstree/jstree.js"></script>
<script src="./js/jstree/examples.treeview.js"></script>

前端html

<div id="treeBasic"> </div>

 JavaScript代码

// API createNode(parent, id, text, position).//  parent:在该节点下创建,id: 新节点id, text:新节点文本, position:插入位置   function createNode(parent_node, new_node_id, new_node_text, position) {$('#treeBasic').jstree('create_node', $(parent_node), {"text": new_node_text,"id": new_node_id}, position, false, false);};//发送ajax请求
getFiles() {axios({method: "get",url: "download/get-files"}).then(res => {this.fileList = res.data.data;//当jsree加载完成会执行如下函数,创建两个节点var data = this.fileList;//创建根节点$("#treeBasic").jstree({'core': {"data": [data]},});}).catch(function (error) {console.log(error);})
},

服务端

@Data
@AllArgsConstructor
@NoArgsConstructor
public class FileDto {private String id;private String text;private String icon;private List<FileDto> children;
}@ResponseBody@GetMapping("/get-files")public Result getFiles() {FileDto root = new FileDto();ZipUtils.ergodic(new File("zip"), root, "static");root.setText("所有导出文件");return Result.success(root);}/*** 封装需要的file文件path多级文件对象** @param file   源文件* @param target 目标多级对象*/public static void ergodic(File file, FileDto target, String path) {if (file.isFile()) {target.setId(path + "/" + file.getName());target.setText(file.getName());target.setIcon("fa fa-file-zip-o");} else {target.setId(path + "/" + file.getName());target.setText(file.getName());target.setIcon("fa fa-folder");List<FileDto> childList = new ArrayList<>();File[] files = file.listFiles();for (File f : files) {FileDto child = new FileDto();ergodic(f, child, target.getId());childList.add(child);}target.setChildren(childList);}}

 三、效果展示


如果您觉得文章对您有帮助的话,点赞支持一下吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/184004.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java核心知识点整理大全23-笔记

目录 21. JAVA 算法 21.1.1. 二分查找 21.1.2.冒泡排序算法 21.1.3. 插入排序算法 21.1.4. 快速排序算法 21.1.1. 希尔排序算法 21.1.2. 归并排序算法 21.1.3. 桶排序算法 21.1.4. 基数排序算法 21.1.5. 剪枝算法 21.1.6. 回溯算法 21.1.7. 最短路径算法 21.1.8. 最…

正则表达式【C#】

1作用&#xff1a; 1文本匹配&#xff08;验证字符串&#xff09; 2查找字符串 2符号&#xff1a; . ^ $ * - ? ( ) [ ] { } \ | [0-9] 匹配出数字 3语法格式&#xff1a; / 表示模式 / 修饰符 /[0-9]/g 表示模式&#xff1a;是指匹配条件&#xff0c;要写在2个斜…

【C++高阶(六)】哈希的应用--位图布隆过滤器

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; 哈希的应用 1. 前言2. 位图的概念以及定义3. 位…

使用 Docker 安装和配置 MySQL 数据库简介

目录 一、使用镜像安装 1、查询镜像 2、拉取镜像 3、查看本地镜像 4、启动docker镜像 二、使用Docker Compose安装 1、安装Docker和Docker Compose 2、创建Docker Compose文件&#xff1a; 3、启动MySQL容器 4、验证MySQL容器是否正常运行 5、连接到MySQL容器 6、停止…

java Stream流操作

什么是Stream&#xff1f; java8新增Stream&#xff0c;配合同版出现的Lambda&#xff0c;为集合&#xff08;Collection&#xff09;操作提供了极大的便利。 Stream将要处理的元素集合看作一种流&#xff0c;在流的过程中&#xff0c;借助Stream API对流中的元素进行操作&am…

004:Direct 2D离屏渲染(Qt中实现)

简介&#xff1a; 用QT开发图像显示的小程序&#xff0c;需要一些标注工具&#xff0c;由于用的是opengl渲染&#xff0c;所以就在内存中进行绘制&#xff0c;然后纹理贴图贴出去&#xff0c;发现Qt绘制的效果太差&#xff0c;且速度一般&#xff0c;于是就想着用direct2d来绘制…

python——第十五天

面向对象和面向对象编程 面向对象编程&#xff1a; C语言是一门面向过程的编程语言&#xff01;&#xff01;&#xff01; 面向对象的编程思想 就是分门别类的一种能力 面向对象的概念 类&#xff1a; 对一类事物的统称 对象&#xff1a; 一类事物中的具体案例 面向对象的…

python之pyqt专栏8-信号与槽4

信号重载 在上一篇python之pyqt专栏7-信号与槽3-CSDN博客&#xff0c;我们知道在自定义信号时&#xff0c;可以设定信号参数数据类型。pyqt还支持信号重载。 信号定义 sendText pyqtSignal([int],[str]) 代码意思是定义重载信号sendText&#xff0c;槽函数的参数可以是int数…

【Vulnhub 靶场】【CEREAL: 1】【困难】【20210529】

1、环境介绍 靶场介绍&#xff1a;https://www.vulnhub.com/entry/cereal-1,703/ 靶场下载&#xff1a;https://download.vulnhub.com/cereal/Cereal.ova 靶场难度&#xff1a;困难 发布日期&#xff1a;2021年5月29日 文件大小&#xff1a;1.1 GB 靶场作者&#xff1a;Thomas…

postman打开白屏

现状&#xff1a;postman打开白屏如下图 window环境变量&#xff1a; Win R 快捷键打开 sysdm.cpl 增加环境变量&#xff1a; 变量名&#xff1a;POSTMAN_DISABLE_GPU 值&#xff1a;true 重新打开postman

不用第三方软件实现停止windows10/11更新

第一步&#xff1a;打开regedit 1&#xff1a;键盘按下winR输入regedit 2&#xff1a;按下图顺序选择 3&#xff1a;右击settings新建DWORD【32位】值 输入FlightSettingsMaxPauseDays 然后右击修改值选择十进制输入4000代表可以延迟4000天就是10年多 然后打开设置 一直…

网络运维与网络安全 学习笔记2023.11.29

网络运维与网络安全 学习笔记 第三十天 今日更新太晚啦&#xff01;&#xff01;&#xff01; 主要是今天工作时挨了一天骂&#xff0c;服了&#xff0c;下次记得骂的轻一点&#xff01;&#xff01;&#xff01; &#xff08;要不是为了那点微薄的薪资&#xff0c;谁愿意听你…

文件fd【Linux系统编程】

本文是基础IO的第一个部分&#xff0c;基础IO部分将主要讲解以下内容&#xff1a;文件fd 文件系统 软硬链接 操作系统的内存管理 以及 动静态库。本节重点讲解文件fd&#xff0c;其余内容将在后面的博客更新。 一、共识 文件 内容 属性 文件分为打开了的文件和没打开的文件。…

第二证券:股票几点到几点开盘?

作为股民或许投资者&#xff0c;我们都知道股票是每天都有开盘和收盘时间的。但是&#xff0c;关于股票的开盘时间&#xff0c;很多人并不是很清楚&#xff0c;特别是初学者。在本文中&#xff0c;我们将从多个视点分析股票开盘时间&#xff0c;并为大家供给一些有用的信息。 …

血的教训--kail系统免密centos7的坑【高版本ssh免密低版本ssh的坑】

血的教训–kail系统免密centos7的坑【高版本ssh免密低版本ssh的坑】 最近下载了一个2023版本的kail系统&#xff0c;但是经过几次设置免密后&#xff0c;ssh过去一直让提供密码&#xff0c;所以就仔细的分析了一下&#xff0c;果然还是发现了点猫腻 接上一个博客&#xff0c;大…

CSS新手入门笔记整理:CSS边框样式

边框宽度&#xff1a;boder-width 语法 boder-width:像素值&#xff1b; 边框样式&#xff1a;boder-style 语法 boder-style:取值&#xff1b; 属性值 说明 none 无样式 dashed 虚线 solid 实线 边框颜色&#xff1a;boder-color 语法 boder-color:色值&#xf…

Mysql之子查询(知识点+例题)

Mysql之子查询<知识点例题> 什么是子查询案例分析案例分析子查询的分类单行子查询子查询中的空值问题题目练习题目一题目二题目三题目四题目五补充&#xff1a;聚合函数与GROUP BY的使用关系 CASE表达式&#xff08;子查询中的运用&#xff09;简单CASE表达式搜索CASE表达…

电脑突然死机怎么办?教你几招快速拯救

当今社会&#xff0c;电脑成为我们日常生活和工作不可或缺的一部分。然而&#xff0c;有时电脑可能会突然死机&#xff0c;给我们的操作和数据带来不便。那电脑突然死机怎么办呢&#xff1f;本文将介绍解决电脑突然死机的三种方法&#xff0c;通过详细的步骤指南&#xff0c;帮…

类 —— 继承、多重继承

继承 一个类&#xff0c;继承另一个已有的类。&#xff08;在一个已存在的类的基础上建立一个新的类&#xff0c;并拥有其特性&#xff09; 是一个父类&#xff08;基类&#xff09;派生出子类&#xff08;派生类&#xff09;的过程。 派生类往往是基类的具象化&#xff0c;基…

接口测试之测试原则、测试用例、测试流程......

一、接口的介绍 软件测试中&#xff0c;常说的接口有两种&#xff1a;图形用户接口&#xff08;GUI&#xff0c;人与程序的接口&#xff09;、应用程序编程接口&#xff08;API&#xff09;。 接口&#xff08;API&#xff09;是系统与系统之间&#xff0c;模块与模块之间或者…