zTree与Layer的结合使用

一、无复选框 & 弹出框内容为本页面中的内容

1、引入zTree的css、js文件

<link href="${basePath }public/zTree_v3/css/zTreeStyle/zTreeStyle.css" rel="stylesheet" />
<script src="${basePath }public/zTree_v3/js/jquery.ztree.all-3.5.js"></script>
<%-- 引入layer --%>
<script type="text/javascript" src="${basePath }public/layer-v2.3/layer/layer.js"></script>

2、HTML部分代码

<input type="hidden" name="supervision.userids" id="userIds" value="${supervision.userids }"/>
<textarea name="userNames" id="userNames" rows="4"  class="required" onclick="doLoadZTreeNodes();">
    ${supervision.userNames}
</textarea>
<!-- Ztree -->
<div id="layer-zTree" style="display: none;">
    <div style="padding: 10px; height:90%;">
        <ul id="typeTree" class="ztree"></ul>
    </div>
</div>

3、弹出弹框并初始化树

<script type="text/javascript">
    var zTree;
    var setting = {
        data : {   
            simpleData : {
                enable : true, // 设置启用简单数据格式[{id, pId, name}, {id, pId, name}]   
                idKey : "id",  // 节点数据中保存唯一标识的属性名称
                pIdKey : "pId",  // 节点数据中保存其父节点唯一标识的属性名称
                rootPId : null  // 根节点id
            }
        }
    };

    $(document).ready(function(){
        //发送异步请求加载分类信息,更新Ztree节点内容
        var url = "supervision/getZtreeData";
        $.getJSON(url,function(result){
            if(result.state=='1'){
                //访问zTree方法通过数据初始化节点信息
                zTree=$.fn.zTree.init($("#typeTree"),setting,result.data);
            }else{
                alert("初始化失败!");
            }
        });
    });

    /** 显示Ztree以及树上的节点信息 */
    function doLoadZTreeNodes(){
        //页面层
        layer.open({
            type: 1,
            area:['320px', '410px'],
            title: ['请人员', 'background-color:#dae7f5'],
            skin: 'layui-layer-demo', //加上边框
            shadeClose: true,
            btn: ['确定', '取消'],
            content: $('#layer-zTree'),
            yes: function(index, layero){
                doSetSelectedNode(index);
            },
            btn2: function(index){
                layer.close(index);
            }
        });
    }

    /*设置选中的节点*/
    function doSetSelectedNode(index){
        var userIds = "";
        var userNames = "";
        // 1.获得选中的的节点对象
        // getSelectedNodes是zTree中的一个函数,返回值是一个数组        
        var selectedNodes = zTree.getSelectedNodes();
        // 2.获得具体的节点(node)对象
        var node=selectedNodes[0];
        // 3.通过node节点数据更新页面内容
        $("#userNames").val(node.name));
        $("#userIds").val(node.id);
        // 4.关闭弹框
        layer.close(index);    
    }
</script>

4、Java代码

/**
 * 获取部门+人员数据
 * JFinal框架下
 */
public void getZtreeData(){
    JSONArray Ztree = new JSONArray();
    JSONObject node = null;
    // 0.构造根节点
    node = new JSONObject();
    node.put("id", "0");
    node.put("pId", null);
    node.put("name", "所有用户");
    node.put("type", "root");
    Ztree.add(node);
    // 1.遍历部门
    List<Dept> list4Dept = Dept.dao.getAll();
    for (Dept dept : list4Dept) {
        node = new JSONObject();
        node.put("id", dept.getStr("id"));
        node.put("pId", dept.getStr("parent_id"));
        node.put("name", dept.getStr("shortname"));
        Ztree.add(node);
    }
    // 2.遍历用户
    List<User> list4User = User.dao.getAll();
    for (User user : list4User) {
        node = new JSONObject();
        node.put("id", user.getStr("id"));
        node.put("pId", user.getStr("deptid"));
        node.put("name", user.getStr("name"));
        Ztree.add(node);
    }
    JSONObject result = new JSONObject();
    result.put("state", "1");
    result.put("data", Ztree);
    renderJson(result);
}

 

一、复选框 & 弹出框内容为iframe层

1、引入zTree的css、js文件

<link href="${basePath }public/zTree_v3/css/zTreeStyle/zTreeStyle.css" rel="stylesheet" />
<script src="${basePath }public/zTree_v3/js/jquery.ztree.all-3.5.js"></script>
<%-- 引入layer --%>
<script type="text/javascript" src="${basePath }public/layer-v2.3/layer/layer.js"></script>

2、HTML部分代码

<input name="userIds" type="hidden" id="userIds" value="${users.ids }"/>
<textarea name="userNames" id="userNames" cols="" rows="6" style="height:170px;" onclick="openTree();">
    ${users.names }
</textarea>

3、弹出弹框并初始化树

<script>
    function openTree(){
        // 顶层
        parent.layer.open({
            type: 2, // 1-在content中写html代码, 2-在content中写src路径
            area: ['330px;', '70%'],
            title: "选择用户",
	    content: "${basePath}dept/openTree",  // iframe访问路径
	    btn:['确定', '取消'],
	    yes: function(index, layero){
	        var formWin = $(layero).find("iframe")[0].contentWindow; // 可用来调用弹出层的函数
	        formWin.doSetSelectedNode(index);
	    },
	    btn2: function(index){
                layer.close(index);
	    }
        });
        // layer.close(index);//关闭弹框
    }
</script>

4、iframe层

<html>
    <head>
        <title>用户部门树</title>
        <meta http-equiv="pragma" content="no-cache" />
	<meta http-equiv="cache-control" content="no-cache" />
	<meta http-equiv="expires" content="0" />
	<%@include file="/base.jsp"%>
	<link href="${basePath }public/zTree_v3/css/zTreeStyle/zTreeStyle.css" rel="stylesheet" />
	<script src="${basePath }public/zTree_v3/js/jquery.ztree.all-3.5.js"></script>
    </head>
    <body>
        <div id="tree">
            <div style="padding: 10px;" class="layui-layer-wrap">
                <ul id="typeTree" class="ztree"></ul>
            </div>
        </div>
    </body>

    <script type="text/javascript">
        var zTree;
        var setting = {
            data : {   
                simpleData : {
                    enable : true, //设置启用简单数据格式[{id, pId, name}, {id, pId, name}]   
		    idKey : "id",  //节点数据中保存唯一标识的属性名称
		    pIdKey : "pId",  //节点数据中保存其父节点唯一标识的属性名称
	            rootPId : null,  //根节点id
                    type: "type"
                }
            },
            check: {
                enable: true,   //true / false 分别表示 显示 / 不显示 复选框或单选框
		autoCheckTrigger: true,   //true / false 分别表示 触发 / 不触发 事件回调函数
		chkStyle: "checkbox",   //勾选框类型(checkbox 或 radio)
		chkboxType: { "Y": "s", "N": "s" }   //勾选 checkbox 对于父子节点的关联关系
                /*
                    Y: 选择复选框时
                    N: 取消复选框选中
                    p: 父级
                    s: 子级
                */
            }
        };

    $(document).ready(function(){
        var url = "${basePath}dept/getTreeData?type=2";
            $.getJSON(url,function(result){
                // 访问zTree方法通过数据初始化节点信息
                zTree=$.fn.zTree.init($("#typeTree"),setting,result);
             });
    });

     /*设置选中的节点*/
    function doSetSelectedNode(index){
        var userIds = "";
        var userNames = "";
        // 1.获得选中的的节点对象
        var nodes = zTree.getCheckedNodes(true);    // 与无复选框函数名有区别
        for ( var i in nodes) {
            // 2.只获取用户数据
            if (!nodes[i].isParent && nodes[i].type == "user") {
                userIds += nodes[i].id + ",";
                userNames += nodes[i].name + "; ";
            }
        }
        // 3.通过node节点数据更新页面内容(若此iframe的parent页面只有一个则不需要[0])
        parent[0].$("#userNames").val(userNames.substring(0, userNames.length -1));
        parent[0].$("#userIds").val(userIds.substring(0, userIds.length -1));
        // 4.关闭弹框
        parent.layer.close(index);  
	</script>
</html>

5、Java代码

/**
  * 获取树形数据
  * type = 2 查询到用户级, 其他则查询到部门级
  * JFinal框架中
  */
public void getTreeData(){
    String type = getPara("type");
    JSONArray array = new JSONArray();
    // 构造根节点
    JSONObject base = new JSONObject();
    base.put("id", "0");
    base.put("pId", null);
    if (StringUtil.isNotBlank(type) && "2".equals(type)) {
        base.put("name", "所有用户");
    }else{
        base.put("name", "所有部门");
    }
    base.put("type", "root");
    array.add(base);
    // 获取部门数据
    List<Dept> list = Dept.dao.getAllDeptBy12();
    for (Dept dept : list) {
        JSONObject obj = new JSONObject();
        obj.put("id", dept.get("id"));
        obj.put("pId", dept.get("parent_Id"));
        obj.put("name", dept.get("shortName"));
	obj.put("type", "dept");
	array.add(obj);
        // 获取用户数据
        if (StringUtil.isNotBlank(type) && "2".equals(type)) {
            List<User> list2User = User.dao.getListByOffice(obj.getString("id"));
            for (User user : list2User) {
                JSONObject obj2User = new JSONObject();
                obj2User.put("id", user.get("id"));
                obj2User.put("pId", user.get("deptId"));
                obj2User.put("name", user.get("name"));
                obj2User.put("type", "user");
                array.add(obj2User);
            }
        }
    }
    renderJson(array);
}

 

 

 

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
数据来源:中经数据库 主要指标110多个(全部都是纯粹的 市辖区 指标),大致是: GDP GDP增速 第一产业增加值占GDP比重 第二产业增加值占GDP比重 第三产业增加值占GDP比重 人均GDP 社会消费品零售总额 固定资产投资(不含农户) 新设外商投资企业数_外商直接投资 实际利用外资金额(美元) 一般公共预算收入 一般公共预算支出 一般公共预算支出_教育 一般公共预算支出_科学技术 金融机构人民币各项存款余额_个人储蓄存款 金融机构人民币各项存款余额 金融机构人民币各项贷款余额 规模以上工业企业单位数 规模以上工业企业单位数_内资企业 规模以上工业企业单位数_港澳台商投资企业 规模以上工业企业单位数_外商投资企业 规模以上工业总产值 规模以上工业总产值_内资企业 规模以上工业总产值_港澳台商投资企业 规模以上工业总产值_外商投资企业 规模以上工业企业流动资产合计 规模以上工业企业固定资产合计 规模以上工业企业利润总额 规模以上工业企业应交增值税 规模以上工业企业主营业务税金及附加 户籍人口数 年均户籍人口数 户籍人口自然增长率 第一产业就业人员占全部城镇单位就业人员比重 第二产业就业人员占全部城镇单位就业人员比重 第三产业就业人员占全部城镇单位就业人员比重 城镇非私营单位就业人员数 城镇非私营单位就业人员数_第一产业 城镇非私营单位就业人员数_第二产业 城镇非私营单位就业人员数_第三产业 城镇非私营单位就业人员数_农、林、牧、渔业 城镇非私营单位就业人员数_采矿业 城镇非私营单位就业人员数_制造业 城镇非私营单位就业人员数_电力、热力、燃气及水生产和供应业 城镇非私营单位就业人员数_建筑业 城镇非私营单位就业人员数_批发和零售业 城镇非私营单位就业人员数_交通运输、仓储和邮政业 城镇非私营单位就业人员数_住宿和餐饮业 城镇非私营单位就业人员数_信息传输、软件和信息技术服务业 城镇非私营单位就业人员数_金融业 城镇非私营单位就业人员数_房地产业 城镇非私营单位就业人员数_租赁和商务服务业 城镇非私营单位就业人员数_科学研究和技术服务业 城镇非私营单位就业人员数_水利、环境和公共设施管理业 城镇非私营单位就业人员数_居民服务、修理和其他服务业 城镇非私营单位就业人员数_教育 城镇非私营单位就业人员数_卫生和社会工作 城镇非私营单位就业人员数_文化、体育和娱乐业 城镇非私营单位就业人员数_公共管理、社会保障和社会组织 城镇非私营单位在岗职工平均人数 城镇就业人员数_私营企业和个体 城镇非私营单位在岗职工工资总额 城镇非私营单位在岗职工平均工资 城镇登记失业人员数 建成区面积 建设用地面积 建设用地面积_居住用地 液化石油气供气总量 液化石油气供气总量_居民家庭 人工煤气、天然气供气总量 人工煤气、天然气供气总量_居民家庭 液化石油气用气人口 人工煤气、天然气用气人口 城市公共汽电车运营车辆数 城市出租汽车运营车辆数 城市公共汽电车客运总量 道路面积 排水管道长度 建成区绿化覆盖面积 建成区绿化覆盖率 绿地面积 公园绿地面积 维护建设资金支出 土地面积 生活用水供水量 供水总量 全社会用电量 城乡居民生活用电量 工业生产用电量 房地产开发投资 房地产开发投资_住宅 限额以上批发和零售业法人单位数 限额以上批发和零售业商品销售总额 普通中学学校数 中等职业教育学校数 普通小学学校数 普通高等学校专任教师数 普通中学专任教师数 中等职业教育专任教师数 普通小学专任教师数 普通高等学校在校生数 普通中学在校生数 中等职业教育在校生数 普通小学在校生数 电视节目综合人口覆盖率 公共图书馆总藏量_图书 医疗卫生机构数_医院和卫生院 卫生人员数_执业(助理)医师 医疗卫生机构床位数_医院和卫生院 城镇职工基本养老保险参保人数 职工基本医疗保险参保人数 失业保险参保人数
ZTree是一个基于jQuery的形结构插件,可以用于显示形菜单、目录结构等。在Vue项目中使用ZTree,需要先安装ZTree插件,然后在Vue组件中引入和使用。 步骤如下: 1. 在Vue项目中安装ZTree插件: ``` npm install jquery ztree --save ``` 2. 在Vue组件中引入jQuery和ZTree插件: ```javascript import $ from 'jquery' import 'ztree/js/jquery.ztree.all.min.js' import 'ztree/css/metroStyle/metroStyle.css' ``` 其中,`jquery.ztree.all.min.js`是ZTree的核心文件,`metroStyle.css`是一款ZTree的皮肤。 3. 在Vue组件中定义一个div元素,用于显示ZTree: ```html <template> <div id="tree"></div> </template> ``` 4. 在Vue组件的`mounted`钩子函数中,初始化ZTree,并将数据渲染到形菜单中: ```javascript mounted() { // 初始化ZTree let setting = { view: { selectedMulti: false }, data: { simpleData: { enable: true } }, callback: { onClick: this.onClick } } let zNodes = [ { id:1, pId:0, name:"父节点 1", open:true}, { id:11, pId:1, name:"子节点 1-1"}, { id:12, pId:1, name:"子节点 1-2"}, { id:13, pId:1, name:"子节点 1-3"}, { id:2, pId:0, name:"父节点 2", open:true}, { id:21, pId:2, name:"子节点 2-1"}, { id:22, pId:2, name:"子节点 2-2"}, { id:23, pId:2, name:"子节点 2-3"}, { id:3, pId:0, name:"父节点 3", open:true}, { id:31, pId:3, name:"子节点 3-1"}, { id:32, pId:3, name:"子节点 3-2"}, { id:33, pId:3, name:"子节点 3-3"} ] $.fn.zTree.init($("#tree"), setting, zNodes) }, methods: { // 点击节点事件 onClick(event, treeId, treeNode) { console.log(treeNode.name) } } ``` 其中,`zNodes`变量是一个数组,用于存储形菜单的数据。`setting`变量是一个对象,用于配置ZTree的属性,例如是否允许多选、数据格式等。`$.fn.zTree.init`方法用于初始化ZTree,其中`$("#tree")`表示形菜单的容器元素,`setting`表示ZTree的配置,`zNodes`表示形菜单的数据。 5. 最终效果如下图所示: <img src="https://i.loli.net/2022/01/08/aJZ9zVX8q3WOhlY.png" alt="ztree-demo.png" style="zoom:50%;" />

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值