ztree異步加載樹節點


參考文檔:https://www.cnblogs.com/tenWood/p/8620708.html

ztree api地址:http://www.treejs.cn/v3/api.php

說明:jsp頁面中有的方法在本實例中用不到,但是還是列出來了,目的是為了方便以后的擴展和改寫。

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta HTTP-EQUIV="pragma" CONTENT="no-cache">
<meta HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<meta HTTP-EQUIV="expires" CONTENT="0">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    ${jqery1_7_1}
    ${zTree3_5_24}

<script type="text/javascript">

    var setting = {
        view: {
            selectedMulti: false
        },
        async: {
            enable: true, //是否為異步加載
            url:"/${contextName}/${sys_id}/viewAffix/getAsyncAffixTreeData",
            dataType: "json",
            /*
             *  //異步加載時需要自動提交父節點屬性的參數。[setting.async.enable = true 時生效]
             *  1、 將需要作為參數提交的屬性名稱,制作成 Array 即可,例如:["id", "name"]
             *  2、可以設置提交時的參數名稱,例如 server 只接受 zId : ["id=zId"]
             * */
            autoParam:["pk_id","fk_pid"],
            //Ajax 請求提交的靜態參數鍵值對。[setting.async.enable = true 時生效]
            otherParam:{"root_id":"${pk_id}"},
            //用於對 Ajax 返回數據進行預處理的函數。[setting.async.enable = true 時生效]
            dataFilter: filter
        },
        data:{
            // keep:{
            //     parent: true
            // },
            key:{
                name:"f_name"
            },
            //采用簡單數據類型,不必嵌套復雜json數據格式
            simpleData:{
                enable:true, ////是否之用簡單數據
                idKey:"pk_id",
                pIdKey:"fk_pid",
                rootPId:""
            }
        },
        callback: {
            beforeClick: beforeClick, //用於捕獲單擊節點之前的事件回調函數,並且根據返回值確定是否允許單擊操作
            beforeAsync: beforeAsync, //用於捕獲異步加載之前的事件回調函數,zTree 根據返回值確定是否允許進行異步加載  eg: 禁止 id 為 1 的父節點進行異步加載操作
            onAsyncError: onAsyncError, //用於捕獲異步加載出現異常錯誤的事件回調函數。如果設置了 setting.callback.beforeAsync 方法,且返回 false,將無法觸發 onAsyncSuccess / onAsyncError 事件回調函數
            onAsyncSuccess: onAsyncSuccess //用於捕獲異步加載正常結束的事件回調函數 。如果設置了 setting.callback.beforeAsync 方法,且返回 false,將無法觸發 onAsyncSuccess / onAsyncError 事件回調函數
        }
    };

    function filter(treeId, parentNode, childNodes) {
        // console.log('過濾數據!');
        //判斷是否為父節點
        for (var i = 0; i < childNodes.length; i++){
            if (childNodes[i].f_type == '1') {
                childNodes[i].isParent = true;
            }
        }
        return childNodes;
    }

    //點擊節點
    function beforeClick(treeId, treeNode) {
        if (!treeNode.isParent) {
            alert("請選擇父節點");
            return false;
        } else {
            return true;
        }
    }

    //展開節點
    function beforeAsync(treeId, treeNode) {
        return true;
    }

    function onAsyncError(event, treeId, treeNode, XMLHttpRequest, textStatus, errorThrown) {
       console.log('異步加載發生了錯誤!');
    }

    function onAsyncSuccess(event, treeId, treeNode, msg) {
        console.log('異步加載成功了');
    }

    //初始化樹 一開始初始化完tree時候,讓第一個父節點展開了;
    function initZTree(){
        // console.log('初始化數據!');
        $.ajax({
            url: "/${contextName}/${sys_id}/viewAffix/getAsyncAffixTreeData",
            type:"post",
            dataType: "json",
            cache:false, //是否緩存
            async:true,//true 異步;false 同步
            data:{
                root_id: '${pk_id}'
            },
            success: function(data){
                if (!data) {
                    return;
                }
                var nodes = data;
                // console.log(nodes);
                //判斷節點是否為父節點
                for(var i=0;i<nodes.length;i++){
                    if (nodes[i].f_type == '1') {
                        nodes[i].isParent = true;
                    }/*else {
                        nodes[i].isParent = false;
                    }*/
                }
                // console.log(nodes);
                var zTreeObj = $.fn.zTree.init($("#ztree"),setting, data);

                //讓第一個父節點展開
                var rootNode_0 = zTreeObj.getNodeByParam('fk_pid',0,null);
                zTreeObj.expandNode(rootNode_0, true, false, false, false);
            },
            error: function(){
                alert('加載根節點發生了錯誤!');
            }
        });
    }

    //初始化樹的數據
    $(document).ready(function(){
        initZTree();
    });


</script>
<title>查看文件詳情</title>
</head>
<body>
    <div class="zTreeDemoBackground left">
        <ul id="ztree" class="ztree"></ul>
    </div>
</body>
</html>
View Code

controller

/**
     * 資料查看公用
     * @param pk_id:單項工程id
     */
    @RequestMapping("/asyncAffixtree")
    public String asyncAffixtree(Model model,@RequestParam(value="pk_id", required=false)String pk_id){
        model.addAttribute("pk_id", pk_id);//單項工程id
        return "/web/gz/viewAffix/asyncAffixTree";
    }

    /**
     * 獲取附件樹
     * @param root_id:根節點id
     */
    @RequestMapping("/getAsyncAffixTreeData")
    @ResponseBody
    public Object getAsyncAffixTreeData(String root_id, String pk_id, String fk_pid){
        return iViewAffixService.getAsyncAffixTreeData(root_id,pk_id,fk_pid);
    }
View Code

service

/**
     * 獲取ztree樹的數據
     * @param root_id
     * @param pk_id
     * @param fk_pid
     * @return
     */
    @Override
    public List<Map<String,Object>> getAsyncAffixTreeData(String root_id, String pk_id, String fk_pid) {
        List<Map<String,Object>> list = new ArrayList<>();
        if (root_id == null || root_id.trim().isEmpty()) {
            return list;
        }
        String sys_id = getCurSysId();
        //加載父節點和第一次子節點
        if(fk_pid == null || fk_pid.trim().isEmpty()){
            list = affixDao.getFirstLoadTreeData(sys_id, root_id);
            return list;
        }
        list = affixDao.getMapDataByFkPid(sys_id, pk_id);
        return list;
    }
View Code

mapper

<select id="getFirstLoadTreeData" resultType="com.base.obj.BaseMap" parameterType="string">
        select
            pk_id, fk_pid, f_name, f_type
        from
            ${sys_id}_kyps.T_C_AFFIX
        where
            pk_id = #{pk_id} or fk_pid = #{pk_id}
    </select>

    <select id="getMapDataByFkPid" resultType="com.base.obj.BaseMap" parameterType="string">
        select
            pk_id, fk_pid, f_name, f_type
        from
            ${sys_id}_kyps.T_C_AFFIX
        where
            FK_PID = #{fk_pid,jdbcType=VARCHAR}
    </select>
View Code

初始化

異步加載后

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM