树型菜单数据项AJAX实现增删改查

前端之家收集整理的这篇文章主要介绍了树型菜单数据项AJAX实现增删改查前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
首先请查一下最终的效果


实现的思路很简单,即首构建一个JSON数据,这里已经通过后台排好序并且已做好了父子关系,然后通过QUI列表控件显示出来,也可以直接用HTML显示代码如下:

<!--框架必需start-->

<script type="text/javascript" charset="utf-8" src="@Url.Content("~/libs/js/language/cn.js")"></script>
<script type="text/javascript" charset="utf-8" src="@Url.Content("~/libs/js/framework.js")"></script>
<link href="@Url.Content("~/libs/css/import_basic.css")" rel="stylesheet" type="text/css" />
<link rel="stylesheet" type="text/css" id="skin" />
<!--框架必需end-->

<!--数据表格start-->
<script type="text/javascript" charset="utf-8" src="@Url.Content("~/libs/js/table/quiGrid.js")"></script>
<!--数据表格end-->
<script type="text/javascript" src="@Url.Content("~/libs/js/popup/dialog.js")"></script>
<link href="@Url.Content("~/libs/skins/blue/style.css")" rel="stylesheet" type="text/css" id="theme" themecolor="green" positiontarget="positionContent" />
<div class="main">
    <ul class="mainMenu" id="mainMenu">
        <li class="func"><i></i><a href="@Url.Action("Index","Fun")">功能库</a></li>
        <li class="app"><i></i><a href="@Url.Action("Index","App")">应用库</a></li>
        <li class="active set"><i></i><a href="@Url.Action("Index","Cls")">应用分类维护</a></li>
    </ul>
    <div class="content">
        <!-- end leftTree -->
        <div class="rightCon" style="width: 980px;">
            <div class="rightCon-tit">
                <h1>应用分类维护</h1>
            </div>
            <div class="maintain">
                <div class="search">
                    <div>
                        @*                        <label for="" class="ml20">菜单名称:</label><input type="text" class="input mr20" style="width: 200px;height: 35px;">
                        
                        <input type="button" class="btn" value="查   询">
                        <input type="button" class="btn" value="重   置">*@
                        <input type="button" class="btn add" value="添加一级分类" style="margin-left: 20px;" onclick="onAdd(0,-1);">
                    </div>

                    <div class="buttons">
                    </div>
                </div>
                <div class="m-container">
                    <div id="maingrid"></div>
                </div>
            </div>
            <!-- end maintain -->
        </div>
        <!-- end rightCon -->
    </div>
    <!-- end content -->
</div>

<script type="text/javascript">
    var g;
    function initComplete() {
        g = $("#maingrid").quiGrid({
            columns: [
                { display: '分类名称',name: 'ClsName',id: 'ClsId',width: 400,align: 'left' },{ display: '创建时间',name: 'CreateTime',width: 250,align: 'center' },{
                    display: '操作',isAllowHide: false,align: 'center',width: "250",render: function (rowdata,rowindex,value,column) {
                        var str = '<div class="padding_left5"><span class="icon_add hand" title="新增子级" onclick=onAdd("' + rowdata.ClsId + '","' + rowdata.ClsDepth + '","' + rowindex + '")>新增子级</span>  ';
                        if (rowdata.id != -1 && rowdata.id != 0) {
                            str += '<span class="icon_edit hand" title="修改" onclick=onEdit("' + rowdata.ClsId + '","' + rowdata.ClsName + '","' + rowindex + '")>修改</span>  '
                            str += '<span class="icon_delete hand" title="删除" onclick=onDelete("' + rowdata.ClsId + '","' + rowindex + '")>删除</span> '
                        }

                        str += '</div>';
                        return str;
                    }

                }
            ],data: {@Html.Raw(ViewBag.TreeData) },height: '450',width: "100%",headerRowHeight: '40',rowHeight: '33',checkBox: false,usePager: false,autocheckChildren: false,tree: { columnId: 'ClsId' }
        });
    }
    var rowindexs;
    /*新增*/
    function onAdd(id,depth,rowindex) {
        if (depth > 2) {
            alert('最多只能添加三级分类');
            return;
        }
        rowindexs = rowindex;
        top.Dialog.open({
            URL: "@Url.Action("Info","Cls")" + "?clsId=" + id + "&type=add&userid=@ViewBag.UserId&clsName=",Title: "新增分类",Width: 450,Height: 200
        });

    }
    /*修改*/
    function onEdit(id,clsName,rowindex) {
        rowindexs = rowindex;
        top.Dialog.open({
            URL: "@Url.Action("Info","Cls")" + "?clsId=" + id + "&type=edit&userid=@ViewBag.UserId&clsName=" + clsName,Title: "修改分类",Height: 200
        });
    }
    /*删除*/
    function onDelete(id,rowindex) {
        if (confirm("您确定要删除选中的分类吗?")) {
            $.post("@Url.Action("Del","Cls")",{ clsId: id },function (data) {
                if (data.toString() == "-1") {
                    alert("该分类已被关联或使用,无法执行删除操作!");

                } else if (data.toString() == "-2") {
                    alert("该分类下还有子级分类,请先删除!");

                } else if (data.toString() == "1") {
                    alert("操作成功!");
                    deleteGridRow(rowindex);

                } else {
                    alert("操作失败,请与管理员联系!");
                }
            },"text");
        }
    }


    function deleteGridRow(rowindexs) {

        var row = g.getRow(rowindexs);
        var parent = g.getParent(row);
        var sister = g.getChildren(g.getParent(row));
        g.deleteRow(row);
        if (sister.length == 1) {
            parent.isParent = false;
            parent._hasChildren = false;
            parent.iconClass = "icon_star";
            parent.open = false;
        }
        g.reRender(g.records);
    }

    function addOrUpdateRow(type,clsId,parentId,createTime) {

        var row = g.getRow(rowindexs);
        var childs = g.getChildren(row);
        var sister = g.getChildren(g.getParent(row));
        if (type == "add") { //新增并且展开 或者 新增下面无子节点
            //设置父级的相关属性
            row.isParent = true;
            row._hasChildren = true;
            row.open = true;
            row.iconClass = "icon_star";

            //获取位置
            var child = null;
            var isdown = false;

            //根据参数获得一个rowdate
            var rowData = {
                ClsId: clsId,ClsName: clsName,CreateTime: createTime,ClsParentId: parentId,iconClass: "icon_star"
            }
            //将rowdate新增进g
            g.appendRow(rowData,row,child,true);
            //如果是最大数字

            g.expand(row);


        } else if (type == "edit") { //修改

            ClsId = clsId,ClsName = clsName,CreateTime = createTime,ClsParentId = parentId,g.reRender(g.records);
        }
        //重新渲染

    }
    function refershList() {

    }
</script>

后台构建树型菜单JSON数据代码如下:
public ActionResult Index()
        {
            ViewBag.TreeData = GetAppClsList();
            ViewBag.UserId = "";
            return View();
        }

public String GetAppClsList()
        {

            List<D_AppCls> List = _clsBll.GetAppClsList();
            string data = JsonHelper.ConvertToJson(List).Replace("\"","\"");
            string json = String.Format("\"{0}\":{1}","rows",data);
            return json;
        }

/// <summary>  
        /// 转换JSON对象集合,包含子集,递归加载  
        /// </summary>  
        /// <param name="companyList"></param>  
        /// <returns></returns>  
        public static string ConvertToJson(List<D_AppCls> companyList)
        {
            string json = "[";
            //获取第一级目录  
            List<D_AppCls> rootList = companyList.Where(x => x.ClsParentId==0).ToList<D_AppCls>();
            foreach (D_AppCls root in rootList)
            {
                string js = ConvertToJson(root);
                string children = "";
                children = DiGui(companyList,children,root.ClsId);
                json += "{" + string.Format(js,children) + "},";
            }
            if (json.LastIndexOf(",") < 1)
            {
                json += "]";
            }
            else
            {
                json = json.Substring(0,json.Length - 1) + "]";
            }
            return json.Replace(",children:[]",null);
        }

        /// <summary>  
        /// 递归调用添加包含子集的JSON数组  
        /// </summary>  
        private static string DiGui(List<D_AppCls> companyList,string children,int pid)
        {
            children = "[";
            List<D_AppCls> childerList = companyList.Where(x => x.ClsParentId == pid).ToList<D_AppCls>();
            foreach (D_AppCls item in childerList)
            {
                string js = ConvertToJson(item);
                string cd = "";
                cd = DiGui(companyList,cd,item.ClsId);
                children += "{" + string.Format(js,cd) + "},";
            }
            if (children.LastIndexOf(",") < 1)
            {
                children += "]";
            }
            else
            {
                children = children.Substring(0,children.Length - 1) + "]";
            }
            return children;
        }
当然还有其它各种实现方法,如直接指定父子项的字段,交给前端UI来处理层级关系(ztree控件),但这种方式更为灵活,可以指定多列数据属性显示,还可以控制菜单项的状态等,留给我们更多的开发和定制余地。 原文链接:https://www.f2er.com/ajax/163187.html

猜你在找的Ajax相关文章