当前位置: 首页 > article >正文

【开发实践】使用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.kler.cn/a/159526.html

相关文章:

  • 力扣 最长公共前缀-14
  • 文献阅读 | Nature Communications:使用自适应图注意自动编码器从空间解析的转录组学中解读空间域
  • 【C++】string(一)
  • 数据结构小项目
  • Elasticsearch集群和Kibana部署流程
  • 【数据结构】AVL树
  • Go 语言中的反射机制
  • Hadoop学习笔记(HDP)-Part.04 基础环境配置
  • 数字化转型如何落地?_光点科技
  • 在Ubuntu18.04运行qt程序不小心修改内部文件出现The following files have no write permissions的解决方案
  • ARM预取侧信道(Prefetcher Side Channels)攻击与防御
  • 【热点】Docker镜像自动升级?Watchtower帮你搞定!
  • fastapi.templating与HTMLResponse
  • 华为OD机试 - 九宫格按键输入 - 逻辑分析(Java 2023 B卷 200分)
  • 腾讯面试真题(C语言)
  • 【链表Linked List】力扣-83 删除排序链表中的重复元素
  • 有什么可视化数据管理工具?
  • 同旺科技 USB TO RS-485 定制款适配器--- 拆解(一)
  • MyBatisPlus+SpringBoot+JavaFX连接查询
  • 技术阅读周刊第第8️⃣期
  • Temporal table join requires an equality condition on fields of table
  • 【2】基于多设计模式下的同步异步日志系统-设计模式
  • git小白初学习
  • 腾讯云位居中国分布式关系型数据库“领导者”类别
  • 基于SSM实现的公文管理系统
  • 玩转数据8:数据质量管理与数据清洗的实践