jsTree 多级树结构加子节点分页

16 篇文章 0 订阅
$('#tree')
    .jstree({
        "core" : {
           "check_callback" : true,
            'data' : {
                "url" : function(data){
                    return '/admin/ajax/list';
                },
                "data" : function (node) {
                    if(node.id !="#"){
                        if(node.li_attr['is_reference']==1 && node.li_attr['viewid']!=undefined) {
                            var id = node.li_attr['viewid'];
                        } else {
                            var id = node.original['id'];
                        }
                        if(node.li_attr['type']==undefined) {
                            node.li_attr['type'] = 0;
                        }
                        if (node.li_attr['page'] != undefined && node.li_attr['page'] > 1) {
                            if (localStorage.getItem(id + "page") == undefined) {
                                localStorage.setItem(id + "page", 1);
                            }
                        }
                        console.log(node);
                        return {"id" : id, 'tableName': node.li_attr['tablename'], 'is_reference':node.li_attr['is_reference'], 'locking_status' : node.li_attr['is_locking'], 'type' : node.li_attr['type'], 'page' : localStorage.getItem(id+"page")};
                    }
                    return {"id" : 0, 'tableName': "root", 'is_reference' : 0, 'locking_status' : 0, 'type':0};//写自己的加载数据
                }
            }

        },
        plugins : ["types", 'state'],
        "types" : {
            "default" : {  
                "icon" : "/css/default/folder.gif"  
            }, 
            "file" : { "icon" : "/css/default/file.gif" }
        }
    })
    .on('dehover_node.jstree', function (e, data) {
        var id = data.node['id'];
        $("#"+id+"_anchor").find(".handle").remove();
    })
    .on('hover_node.jstree', function (e, data) {
        var html= '';
        var nodeInfo = data.node.li_attr;
        var tableName = nodeInfo['tablename'];
        console.log(data);
        var id = data.node['id'];
        if(tableName!='root') {
            if(nodeInfo['add']==1) {
                html+=' <span class="glyphicon glyphicon-plus-sign" onclick="addNodeData(this);"></span>';
            }
            if(nodeInfo['edit']==1) {
                html+=' <span class="glyphicon glyphicon-edit" onclick="editNodeData(this);"></span>';
            }
        }
        if(tableName=='page' && nodeInfo['page']>1) {

            html+=' <span class="glyphicon glyphicon-backward" onclick="paging(this);"></span> <span class="glyphicon glyphicon-forward" onclick="paging(this);"></span>';
        }

        if(html!='') {
            $("#"+id+"_anchor").append('<span class="handle">'+html+'</span>');
        }
    })
    .on('changed.jstree', function (e, data) {
        if(data.node){
            var currNode = data.node;
            var nodeInfo = currNode.li_attr;
            var selectId = nodeInfo['viewid'];
            if(selectId==undefined){
                selectId = nodeInfo['idvalue'];
            }
            var is_locking = nodeInfo['is_locking'];
            var is_reference = nodeInfo['is_reference'];
            var tableName = nodeInfo['tablename'];
            $.post("/admin/nav/view", { id: selectId, tableName: tableName, is_locking: is_locking, is_reference: is_reference },
                function(result){
                $('#contentRight').html(result);
            });
            selectNode = data.node['id'];
            $.ajaxSetup({
                async: false
            });
            $.post("/admin/nav/referencedcount", { id: selectId, tableName: tableName },
                function(results){
                    if(results['error_code'] == 0){
                        var nodeId = selectNode.split('_')[1];
                        var t = parseInt(nodeId) + parseInt(results['count']);
                        selectNode = "j1_"+t;
                    }
                });
            var exp = new Date();  
            exp.setTime(exp.getTime() + 60 * 5000);//过期时间 5分钟
            document.cookie="selectNode="+selectNode+";expires="+exp;
            
        }
    })
    .bind("loaded.jstree", function (e, data) {
       // data.instance.open_node(1);
        $('#tree').jstree('open_node', 'j1_1');
    })
    .bind('ready.jstree', function (e, data) {
        $('#tree').css('display','block');
        var selectId=document.cookie.split(";")[0].split("=")[1];
        if(!selectId){
            $('#tree').jstree('select_node', 'j1_1');
        }else{
            $('#tree').jstree('select_node', selectId);
        }

    })

 

public function getList()
{
    $id = Input::get('id');
    $table = Input::get('tableName');
    $is_reference = Input::get('is_reference');
    $locking_status = Input::get('locking_status');
    $page = Input::get('page', 1);
    $type = Input::get('type');
    $f_table = '';
    $data = $list = [];
    //查看和编辑权限
    $add = $edit = 0;
    $pageSize = 20;
    //查看列表信息
    if (empty($table)) {
        return Response::json(['error_code' => 40000, 'msg' => '缺少必要参数!']);
    }
    switch ($table) {
        case 'template':
            $tableName = "NavPage";
            $f_table = 'page';
            $t_table = 'screen';
            $reYes = Dictionary::getDictIdByKey('db.desktop.page.reference.yes');
            if (checkPermission('admin_nav_screen_add')) {
                $add = 1;
            }
            if (checkPermission('admin_nav_page_edit')) {
                $edit = 1;
            }
            $template_list = $this->userTemplate();
            break;
        case 'page':
            $tableName = "NavScreen";
            $f_table = 'screen';
            $t_table = 'block';
            if (checkPermission('admin_nav_block_add')) {
                $add = 1;
            }
            if (checkPermission('admin_nav_screen_edit')) {
                $edit = 1;
            }
            break;
        case 'screen':
            $tableName = "NavBlock";
            $f_table = 'block';
            if (checkPermission('admin_nav_block_edit')) {
                $edit = 1;
            }
            break;
        case 'root':
            $tableName = "NavTemp";
            //$list = \NavTemp::all();
            $f_table = 'template';
            $version_data = $this->templateVersion();
            $temptype_ppos_id = Dictionary::getDictIdByKey('db.desktop.templatetype.ppos');
            if (checkPermission('admin_nav_page_add')) {
                $add = 1;
            }
            if (checkPermission('admin_nav_temp_edit')) {
                $edit = 1;
            }
            $template_list = $this->userTemplate();
            $list = \NavTemp::whereIn('id', array_keys($template_list))->get();
    }
    if (empty($list)) {
        $builder = $tableName::where($table . '_id', '=', $id);
        $builder = $builder->orderBy('sort', 'asc');
        if ($tableName != 'NavTemp') {
            $builder = $builder->orderBy('fr_epg_status', 'asc');
        }
        if ($table == 'template' && isset($template_list[$id]) && !in_array(0, $template_list[$id])) {
            $builder->whereIn('id', $template_list[$id]);
        }
        if ($table == 'page') {
            $offset = ($page - 1) * $pageSize;
            if ($page > 1) {
                $builder = $builder->offset($offset)->limit($pageSize);
            }
        }
        $list = $builder->get();
    }
    foreach ($list as $k => $v) {
        $data[$k]['id'] = $v['id'];
        $data[$k]['text'] = $v['name'];
        $data[$k]['li_attr'] = ["tablename" => $f_table, 'idvalue' => $v['id']];

        //显示添加或编辑状态
        $data[$k]['li_attr']['add'] = $add;
        $data[$k]['li_attr']['edit'] = $edit;

        if ($table == 'root') {
            $data[$k]['children'] = true;
            $data[$k]['li_attr']['is_reference'] = 0;
            $data[$k]['li_attr']['is_locking'] = 0;
            $data[$k]['li_attr']['class'] = $f_table;
            $data[$k]['li_attr']['tmplate_type_version'] = isset($version_data[$v['fr_template_type']]) ? $version_data[$v['fr_template_type']] : $version_data[$temptype_ppos_id];
            $data[$k]['li_attr']['fr_template_type'] = $v['fr_template_type'];
        } else {
            if ($table != 'screen' && !empty($v->$t_table())) {
                $data[$k]['children'] = true;
            } else {
                $data[$k]['children'] = false;
            }
            //只要为锁定状态,不可添加或编辑权限
            if($v['locking_status']==1) {
                $data[$k]['li_attr']['add'] = $data[$k]['li_attr']['edit'] = 0;
            }
            if ($table == 'template') {
                if ($v['is_reference'] != $reYes) {
                    $data[$k]['li_attr']['is_reference'] = 0;
                } else {
                    //如果是引用值,不可添加
                    $data[$k]['li_attr']['add'] = 0;
                    $data[$k]['li_attr']['is_reference'] = 1;
                    $data[$k]['li_attr']['viewid'] = $v['reference_id'];
                }
                $data[$k]['li_attr']['is_locking'] = $v['locking_status'];
                //判断是否有分页
                $count = count($v->$t_table);
                $pages = ceil($count / $pageSize);
                $data[$k]['li_attr']['page'] = $pages;
            }
            if ($table == 'page' || $table == 'screen') {
                $data[$k]['li_attr']['is_reference'] = $is_reference;
                $data[$k]['li_attr']['is_locking'] = $locking_status;
                //组合推荐位不加添加
                if ($table == 'page') {
                    if($v['type']!=0) {
                        $data[$k]['li_attr']['add'] = 0;
                    }
                    $data[$k]['li_attr']['type'] = $v['type'];
                }
                if ($table == 'screen') {
                    $data[$k]['icon'] = "/css/default/file.gif";
                    if($type!=0) {
                        $data[$k]['li_attr']['edit'] = 0;
                    }
                }
            }
        }

    }
    if ($table == 'root') {
        return Response::json(['id' => 0, 'text' => "模板列表", 'children' => $data,  "li_attr"=>["tablename"=>"root"] ]);
    } else {
        return Response::json($data);
    }

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值