编程案例——bootstrap左侧树增删改查

【ztree系列——图标的修改】Bootstrap风格的ztree 前段时间项目中需要用树形结构,在选取的时候参考了很多插件,经过很多尝试,最后又回归到了ztree上。我以前用的界面框架是EasyUI,但是它的树结构在实现起来有点复杂,并且功能不是特别完善。dtree在做demo的时候没什么问题,但是放到项目中,从数据库读取数据后还需要进行转换……码了n个demo后,还是觉得ztree最好用! 1.ztree图标        ztree功能强大,使用方便是一 阅读详情

bootstrap左侧树demo



左侧树效果图

在这里插入图片描述

代码实例

前端页面
页面只需写一个ul标签即可

<div class="col-md-2">
      <ul id="ztree" class="ztree"></ul>
</div>

js引包

<script type="text/javascript" src="${ctx.contextPath}/static/plugins/admin-template/js/jquery.min.js"></script>
<script type="text/javascript" src="${ctx.contextPath}/static/plugins/ztree/js/jquery.ztree.all.min.js"></script>
<script type="text/javascript" src="${ctx.contextPath}/static/plugins/ztree/js/jquery.ztree.excheck.min.js"></script>
<script type="text/javascript" src="${ctx.contextPath}/static/plugins/ztree/js/jquery.ztree.exedit.min.js"></script>

js代码
只实现了删除和修改,本人不太会前端,所以没有写新增,希望懂的朋友留言告诉我。

var setting = {
        // view: {
        //     addHoverDom: addHoverDom,
        //     removeHoverDom: removeHoverDom,
        //     selectedMulti: false
        // },
        edit: {
            enable: true, //单独设置为true时,可加载修改、删除图标
            editNameSelectAll: true,
            removeTitle: '删除',
            renameTitle: '重命名'
        },
        data: {
            simpleData: {
                enable: true,
                idKey: "id",
                nameKey: "name"
            }
        },
        callback: {

            beforeRemove: beforeRemove,//点击删除时触发,用来提示用户是否确定删除(可以根据返回值 true|false 确定是否可以删除)
            //beforeEditName: beforeEditName,//点击编辑时触发,用来判断该节点是否能编辑
            beforeRename: beforeRename,//编辑结束时触发,用来验证输入的数据是否符合要求(也是根据返回值 true|false 确定是否可以编辑完成)
            onRemove: onRemove,//(beforeRemove返回true之后可以进行onRemove)删除节点后触发,用户后台操作
            onRename: onRename,//编辑后触发,用于操作后台
            beforeDrag: beforeDrag,//用户禁止拖动节点
            onClick: clickNode//点击节点触发的事件
        }
    };

    var newCount = 1;
    function addHoverDom(treeId, treeNode) {
        console.log(treeNode);
        var sObj = $("#" + treeNode.id + "_span");
        if (treeNode.editNameFlag || $("#addBtn_"+treeNode.id).length>0) return;
        var addStr = "<span class=‘button add‘ id=‘addBtn_" + treeNode.id
            + "‘title=‘add node' οnfοcus='this.blur();'></span>";
        sObj.after(addStr);
        var btn = $("#addBtn_"+treeNode.id);
        if (btn) btn.bind("click", function(){
            var zTree = $.fn.zTree.getZTreeObj("ztree");
            zTree.addNodes(treeNode, {id:(treeNode.id*10 + newCount), pId:treeNode.id, name:"new node" + (newCount++)});
            return false;
        });
    }
    function removeHoverDom(treeId, treeNode) {
        $("#addBtn_"+treeNode.tId).unbind().remove();
    }

    function beforeRemove(e, treeId, treeNode) {
        //console.log(e);
        //console.log(treeId); //  ztree
        //获取treeNode的父节点
        if (treeId.open) {
            return confirm("删除父节点会将其附属的子节点一并删除,您确定要删除吗?");
        }
        return confirm("您确定要删除吗?");
    }

    function onRemove(e, treeId, treeNode) {
        //console.log(treeId); //  ztree
        //console.log(treeNode); //  {name: "范冰冰", pId: "3", id: "31", open: false, level: 1, …}
        //alert("删除父节点的id为:" + treeNode.id + "\r\n它的子节点有:" + paramsArray.join(","));
        $.ajax({
            type: 'post',
            data: {
                id: treeNode.id
            },
            dataType: 'json',
            url: '${ctx.contextPath}/admin/demand/category/remove',
            success: function (data) {
                //alert("删除父节点的id为:" + treeNode.id + "\r\n它的子节点有:" + paramsArray.join(","));
                if (data.result) {
                    return alert("删除成功");
                } else {
                    return alert(data.msg);
                }
            },
            error: function (data) {
                return alert(data.msg);
            }
        });
    }

    function beforeRename(treeId, treeNode, newName, isCancel) {
        if (newName.length < 2) {
            alert("名称不能少于2个字符!");
            return false;
        }
        return true;
    }

    function onRename(e, treeId, treeNode, isCancel) {
        //console.log(treeNode);
        $.ajax({
            type: 'post',
            data: {
                id: treeNode.id,
                name: treeNode.name
            },
            dataType: 'json',
            url: '${ctx.contextPath}/admin/demand/category/update',
            success: function (data) {
                //alert("删除父节点的id为:" + treeNode.id + "\r\n它的子节点有:" + paramsArray.join(","));
                if (data.result) {
                    return alert("修改成功");
                } else {
                    return alert(data.msg);
                }
            },
            error: function (data) {
                return alert(data.msg);
            }
        });
        // alert("修改节点的id为:" + treeNode.id + "\n修改后的名称为:" + treeNode.name);
    }

    function beforeDrag(treeId, treeNodes) {
        return false;
    }

    function clickNode(event, treeId, treeNode, clickFlag) {
        //console.log(treeNode);
        var id = treeNode.id;
        var pid = treeNode.pid;
        $("#table-pagination").bootstrapTable('refresh', {
            url: "${ctx.contextPath}/admin/demand/detail/demandList?id=" + id + "&pid=" + pid
        });
    }

后端代码

@PostMapping("remove")
    public @ResponseBody
    RestResult remove(String id) {
        if (StringUtils.isBlank(id)) {
            return RestResult.Fail("删除失败,请重新尝试");
        }
        QueryWrapper<TDeCategory> q = Wrappers.query();
        q.eq("pid", id);
        List<TDeCategory> list = categoryService.list(q);
        if (list.size() > 0) {
            for (TDeCategory tDeCategory : list) {
                boolean b = categoryService.removeById(tDeCategory.getId());
                if (!b) {
                    return RestResult.Fail("删除子节点失败,请重新尝试");
                }
            }
        }
        boolean b = categoryService.removeById(id);
        if (b) {
            return RestResult.OK();
        } else {
            return RestResult.Fail("删除失败,请重新尝试");
        }
    }

    @PostMapping("update")
    public @ResponseBody
    RestResult update(String id, String name) {
        if (StringUtils.isBlank(id) || StringUtils.isBlank(name)) {
            return RestResult.Fail("请刷新页面,重新编辑");
        }
        QueryWrapper<TDeCategory> q = Wrappers.query();
        q.eq("id", id);
        TDeCategory category = new TDeCategory();
        category.setName(name);
        boolean update = categoryService.update(category, q);
        if (update) {
            return RestResult.OK();
        } else {
            return RestResult.Fail("修改失败请重新尝试");
        }
    }
    @GetMapping("dataList")
    public @ResponseBody
    RestPaging<TDeCategory> dataList(Page page) {
        QueryWrapper<TDeCategory> q = Wrappers.query();
        q.eq("status", 1);
        q.orderByAsc("sort");
        Page page1 = categoryService.page(page, q);
        return new RestPaging<TDeCategory>(page1.getTotal(), page1.getRecords());
    }
基于ssm的简单增删改查 之前简单了解了Spring后就想找个简单的项目练一下,于是就有了这个简单的增删改查,个人水平有限. 基础框架-ssm(Spring + SpringMVC + MyBatis) 数据库-MySQl 前端框架-bootstrap快速搭建界面 项目的依赖管理-Maven 分页-pagehelper 逆向工程-MyBatis Generator 基础环境搭建 1.创建一个maven工程 参考链接:h... 阅读详情

相关推荐

个人博客——Bootstrap+maysql+PHP案例

Bootstrap个人博客项目

Aotops_Fang的博客 380

BootStrap左侧菜单栏

1. 事先说明 事先说明,此代码比较简短所以并没有美化,所以css需要自己再补一些。 另外,我比较菜。。刚进入前端,只能用vue、avue和element做一点公司的crud,勿喷 2. 做法过程 bootstrap折叠 主要使用的是上面链接的功能。 代码: &lt;div&gt; &lt;!-- 侧边栏标签页 --&gt; &lt;ul class="na...

pinkling的博客 3万+

bootstrap树形下拉框 下拉框树形菜单(花了一小时修改过的)

bootstrap树控件使用bootstrap-treeview.js树形控件在下拉框select中显示,带树形的下拉框

bootstrap treeview实现菜单树

本博客,介绍通过Bootstrap的treeview插件实现菜单树的功能。 treeview链接:http://www.htmleaf.com/Demo/201502141380.html ORM框架是Mybatis的,这里其实就是单表查询而已,获取要做菜单树的信息表,这张表必须要有一个parentSeq,然后通过关联实现。 <sql id="groupDefineColum"> ...

weixin_30432007的博客 896

左侧黑色树形导航菜单

左侧黑色树形导航菜单,bootstrap风格,简单大气,jquery开发,很好看的树形菜单框架,绝对值得下载,简单容易改造

Bootstrap框架建立树形菜单(Tree)的实例代码

这里的Tree指的是树形菜单,这篇文章通过一个实例来讲解一下,在Bootstrap框架下怎么去建立一个树形菜单。 前提:先添加Bootstrap和JQ的引用 &lt;link rel="stylesheet" type="text/css" href="bootstrap-3.3.0-dist/dist/css/bootstrap.min.css" rel="external nofollow" &gt; [removed][removed] &lt;script src="bootstrap-3.3

bootstrap中实现zTree

这是zTree必须导入的样式。 &lt;link rel="stylesheet" href="css/bootstrapStyle/bootstrapStyle.css" type="text/css"&gt; &lt;script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js&

weixin_42597761的博客 3310

想在瑞芯微RK3588上跑视频分类模型?避开3D卷积这个坑,试试这几种NPU友好的方案

本文探讨了在瑞芯微RK3588上部署视频分类模型时如何避开3D卷积的性能陷阱,提供了三种NPU友好的替代方案:MobileNetV2+GRU组合、Temporal Shift Module(TSM)和帧级池化。这些方案在保持较高准确率的同时,充分利用RKNPU的硬件加速能力,显著提升推理效率。文章还分享了从模型转换到部署优化的完整流程和实战经验。

weixin_28724319的博客 418

SpringBoot之JPA实现bootstrap界面版案例以及图片上传

SpringBoot之JPA实现bootstrap界面版案例以及图片上传1.什么是jpa呢?2.jpa具有什么优势?3.基于注解的使用3.1 JPA拥有哪些注解呢?案例4.Springboot+bootstrap界面版之增删改查及图片上传 1.什么是jpa呢? JPA顾名思义就是Java Persistence API的意思,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 2.jpa具有什么优势? 2.1标准化 JPA 是 JCP 组织发布的 Java EE

licmi的博客 509

金蝶K3系统物料主数据后台表对应字段一览

我们说到物料表,一般是指t_icitem,但正确的说t_icitem并不是一张有,而是一张视图,不过我们对于数据库物料表中的大部分操作,都是通过此视图来完成。比如经常通过此视图,来成批修改数量,单价精度,是否启用批次等一些字段,有的时候,对于账套已经启用,并且已经有业务发生的物料,有一些关键属性也需要通过修改物料表t_icitem来进行。 当然修改的时候,需要考虑一些前提条件的。 比如说我有一个客户新建的账套,在月底结账时发现,要改一种成本核算方法,启用时用的是加权平法,现在想改成移动平均法,这样的情况,

hzfw2008的博客 1万+

抄表程序员的DLMS/COSEM协议实战:从抓包到解析,手把手教你读懂IEC62056报文

本文深入解析DLMS/COSEM协议在智能电表通信中的应用,从报文捕获到数据解析的全流程实战指南。涵盖HDLC帧解析、应用层连接建立、数据请求/响应解码等核心内容,并提供Wireshark配置、OBIS代码速查表等实用工具,帮助开发者快速掌握IEC62056标准下的电能表通信技术。

weixin_29178069的博客 299

bootstrap-table 实现表格增删改查

bootstrap、bootstrap-table官网:http://bootstrap-table.wenzhixin.net.cn/documentation/ 相关cs js 引用dns地址: http://www.bootcdn.cn/bootstrap/  下载到本地加载速度会很快 最终效果:  分页、增删改查,排序因为用不上就没加 不足: 点击编辑想实现的是直接表格行内可编辑化,

Little SunShine 1万+

使用SIMD思想进行memcpy的优化

arm64平台的memcpy的性能优化,相比C库提升30~40%,SIMD优化思路

zhaoxin1989的博客 1万+

视频教程-JAVA Maven Spring Boot Mybatis bootstrap增删改查分页实战-Java

JAVA Maven Spring Boot Mybatis bootstrap增删改查分页实战 ...

weixin_30307873的博客 227

【学习系列】SAP RAP 4:通过注解来完成一些常规需求

本文介绍了RAP应用中常用注解的实现方式,包括搜索帮助、文本描述绑定、联动搜索、字段控制等功能。通过@Consumption、@UI等注解可以实现搜索帮助定义、多字段联动、必输校验、默认排序和默认值设置。管理字段可通过@Semantics注解自动记录创建/修改信息,长文本使用@UI.multiLineText实现多行显示。这些注解可优化界面交互和数据管理,为后续行为定义功能开发奠定基础。文章结构清晰,针对不同需求提供了具体的实现方案和代码示例。

DeveloperMrMeng的博客 698

基于强化学习控制策略的三相逆变器仿真

强化学习控制器的核心在于定义状态空间、动作空间、奖励函数以及选择合适的强化学习算法(例如DQN、DDPG等)。对于三相逆变器,状态可以是输出电压、电流等信息;动作则可能是调制指数的变化量;奖励函数则应鼓励快速准确地跟踪参考信号。定义状态空间和动作空间状态空间可以包括逆变器的输出电压、电流及其变化率等信息。动作空间则是控制器可执行的动作,例如PWM信号的调整幅度。matlab深色版本% 定义状态和动作空间维度numObs = 6;% 假设有六个状态变量(例如三相电压和电流)

amy_mhd的博客 135

视频教程-Maven SpringMVC Mybatis bootstrap信息(增删改查分页)实战-Java

Maven SpringMVC Mybatis bootstrap信息(增删改查分页)实战 ...

weixin_30288615的博客 400

华为OD机试真题 新系统 【社交网络相同爱好好友查询】

华为od机试真题 新系统【社交网络相同爱好好友查询】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为od机试真题【社交网络相同爱好好友查询】多语言题解实现。

qq_45776114的博客 1336

springboot之jpa的使用,增删改查及图片上传案例

文章目录JPA1、JPA是什么东西?2、JPA具有什么优势? JPA 1、JPA是什么东西? JPA就是Java Persistence API的缩写,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 2、JPA具有什么优势? a、标准化 JPA 是 JCP 组织发布的 Java EE 标准之一,因此任何声称符合 JPA 标准的框架都遵循同样的架构,提...

尽力漂亮的博客 2175

基于Abaqus的横向各向同性线弹性理想塑性材料模型的umat子程序实现——以Fortran为例,带您揭秘弹性塑性模型编程之道

通过以上步骤,我们已经在Abaqus中使用Fortran实现了横向各向同性线弹性理想塑性材料模型的umat子程序。在实际应用中,我们需要根据具体的材料特性和加载条件来调整模型参数和计算过程。尽管我在这篇文章中尽力提供了详细的教程,但由于我自身的知识限制和经验不足,可能会有误解或错误。我希望大家在学习过程中能多思考,多实践,多交流,以更好地理解和掌握这个主题。

qq_38334677的博客 1690

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

SpringBoot+Vue+Axios+BootStrap实现图书的增删改查功能

SpringBoot+Vue+Axios+BootStrap实现图书的增删改查功能 由于是初学Vue、Axios,可能在界面和功能上存在着一些问题,但这些并不妨碍使用。如果有对编程感兴趣的朋友,可以试着做一做。这个由于是第一次做,不太熟练。在后续的过程中会不断的完善。 一、开发工具 IntelliJ IDEA Ultimate 2021.1 apache-maven-3.5.4 MySQL5.7 JDK 1.8.0_281 二、项目结构 三、编写项目 1、创建数据库 SET NAMES utf8mb

阿标的博客 1万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

php+bootstrap+jquery+mysql实现购物车项目案例

使用php,bootstrap,jquery,mysql实现的简易购物车案例。php 操作 mysql 实现增删改查掌握 php 常用数组函数掌握 php $_session 对象使用掌握 php 基本的面向对象编程知识掌握 bootstrap 基本的布局和样式组件使用。

老徐的博客只有干货 1171

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

SSM整合_实现增删改查_基础环境搭建

Spring、SpringMVC、MyBatis整合增删改查

hey_wei_ran的博客 1885

django项目实战二(django+bootstrap实现增删改查)进阶查询

接上一篇知识点:列表将数据库None值显示为空新增时使用钩子函数判重字段多时,显示全部字段或者不显示哪个字段字段显示,但是不可编辑编辑时使用钩子函数判重(先得排除自己的判重)实现查询功能数据库查询知识点,大于、小于、以XX开始、以XX结尾、包含XX等查询时查询条件保留。

春天的波菜 667

JSON数据的增删改查

    今天做个小项目,我负责对音乐文件页面的设计和音乐数据的增删改查,开始觉得没什么,后来才发觉这里面涉及到很多的坑,前台页面没什么好说的,直接利用Bootstrap框架搭建,主要也是值得记录的一点便是:操作php对json文件中的数据进行增删改查,最最最让我高兴的是虽然对json的增加数据功能花了我一个小时的时间,但后继的删改查,就照着增加的功能,很快便写了出来,加油,编程路漫漫,加油! ...

YXB413的博客 2798

用弹窗实现一个页面的增删改查

用弹窗实现一个页面的增删改查 本文适合有一定基础的编程学生,主要实现用弹窗的形式来进行新增和修改。 主要用的技术:boostrap,ASP .NET MVC ,SQL Server ,ajax 环境搭建 使用VS创建MVC项目,并使用Model链接数据库,数据库可以自选,小编这里以Rbac数据库为主,数据库中有角色表(Role),字段名(ID,Name,Remark) 在项目中的Controllers文件夹下创建Role控制器,(名字可以自取,这里小编建议初学者一样,避免出现错误,熟练后自便) 在Ro

weixin_47217457的博客 1341
上一篇: 数据结构与算法学习——基础知识(一)
下一篇: 数据结构与算法学习——基础知识(二)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值