【Ztree】前台展示多级菜单,后台配置方法

第一步、前台HTML页面。

  1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="feeClassification.aspx.cs" Inherits="Webs.pages.Parameter.feeClassification" %>
  2
  3 <!DOCTYPE html>
  4 <html lang="en-us">
  5 <head>
  6     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7     <title>费用分类</title>
  8     <!-- IE兼容模式 -->
  9     <!-- 引入css样式文件 -->
 10     <link rel="stylesheet" type="text/css" href="/content/common/css/app.v2.css?verson=<%=VersionNo %>">
 11     <link rel="stylesheet" type="text/css" href="/content/common/css/info.css?verson=<%=VersionNo %>">
 12     <link href="/content/common/ztree/demo.css?verson=<%=VersionNo %>" rel="stylesheet" />
 13     <link href="/content/common/ztree/zTreeStyle.css?verson=<%=VersionNo %>" rel="stylesheet" />
 14     <!--[if lt IE 9]> <script src="/content/common/js/ie/html5shiv.js?verson=<%=VersionNo %>" cache="false"></script> <script src="/content/common/js/ie/respond.min.js?verson=<%=VersionNo %>" cache="false"></script> <script src="/content/common/js/ie/excanvas.js?verson=<%=VersionNo %>" cache="false"></script> <![endif]-->
 15
 16     <%=headAppendHtmlJavaScript() %>
 17 </head>
 18 <body>
 19     <div>
 20         <div class="margin-bottom5" style="float:left;width:40%; border: 1px solid black;" id="divTable">
 21             <input type="hidden" id="txtCode" />
 22             <input type="hidden" id="txtFathCode" />
 23             <table class="tableDefault" cellpadding="0" cellspacing="0" border="1">
 24                 <tr>
 25                     <th style="width: 30%;"><span>操    作</span></th>
 26                     <td>
 27                         <input class="btn btn-s-md btn-success" id="modify" type="button" onclick="Modify();" value="修改保存" />
 28                         <input class="btn btn-s-md btn-success" id="Add" type="button" onclick="AddAway();" value="新增保存" />
 29                         <input class="btn btn-s-md btn-success" id="Del" type="button" onclick="DelAway();" value="删除节点" />
 30                     </td>
 31                 </tr>
 32                 <tr>
 33                     <th><span>分类显示</span></th>
 34                     <td style="text-align: left;">
 35                         <span id="sify_name"></span>
 36                     </td>
 37                 </tr>
 38                 <tr>
 39                     <th><span>分类名称</span></th>
 40                     <td style="text-align: left;">
 41                         <input name="classify_Name" class="form-control" style="width: 40%;" type="text" id="classify_name" />
 42                     </td>
 43                 </tr>
 44                 <tr>
 45                     <th><span>排序数值</span></th>
 46                     <td style="text-align: left;">
 47                         <input name="order_value" class="form-control" style="width: 40%;" type="text" id="order_value" />
 48                     </td>
 49                 </tr>
 50                 <tr>
 51                     <th><span>助 记 码</span></th>
 52                     <td style="text-align: left;">
 53                         <input name="code_value" class="form-control" style="width: 40%;" type="text" id="code_value" />
 54                     </td>
 55                 </tr>
 56             </table>
 57
 58         </div>
 59         <!-- 页面树 -->
 60         <div class="zTreeDemoBackground right" id="ztreeId" style="width: 40%; height: auto">
 61             <ul id="treeDemo" class="ztree" style="width: 40%; height: auto; float: right; margin-top: 5px;"></ul>
 62         </div>
 63
 64     </div>
 65     <script src="/content/common/js/ajaxRequest.js?verson=<%=VersionNo %>" type="text/javascript"></script>
 66     <script src="/content/common/ztree/jquery.ztree.core.js?verson=<%=VersionNo %>"></script>
 67     <%=bodyAppendHtmlJavaScript() %>
 68     <script type="text/javascript">
 69         var zNodes, cropId;
 70         var messageError = "";
 71         var jsonObject = {};
 72         var tree = [];
 73         //ztree配置信息
 74         var setting = {
 75             view: {
 76                 showIcon: true,//是否展示树图片
 77                 dblClickExpand: false,
 78                 showLine: true,
 79                 selectedMulti: false,
 80                 fontCss: { background: "write" }
 81             },
 82             edit: {
 83                 enable: true,
 84                 editNameSelectAll: true
 85             },
 86             data: {
 87                 simpleData: {
 88                     enable: true
 89                 }
 90             },
 91             callback: {
 92                 onClick: GetNodeAway,//节点点击事件
 93                 onExpand: GetNodeAway//节点展开折叠事件
 94             }
 95         };
 96         //加载事件
 97         $(function () {
 98             //加载树信息
 99             GetTreeData();
100         });
101         //处理接收数据
102         function GetTreeData() {
103             jsonPost("/wsService/PManagementHandler.ashx?type=GetFreeClassTree", jsonObject,
104                 function (response) {
105                     $.fn.zTree.init($("#treeDemo"), setting, response.data);
106                 },
107                 function () { });
108         }
109         //树图片回调事件
110         function showIconForTree(treeId, treeNode) {
111             return !treeNode.isParent;
112         };
113         //修改事件
114         function Modify() {
115             if (JudgeAway(0)) {
116                 SaveFileDate($("#txtCode").val());
117                 treeHandler(0);
118             } else { showErrorAlert(messageError); }
119         }
120         //新增事件
121         function AddAway() {
122             var lxid = 1;
123             if ($("#txtCode").val() == "") {
124                 if (!confirm("确定是增加根节点菜单吗?")) return;
125                 lxid = 2;
126             }
127             if (JudgeAway(1)) {
128                 SaveFileDate("");
129                 treeHandler(lxid);
130             } else {
131                 showErrorAlert(messageError);
132             }
133         }
134         //新增--修改
135         function treeHandler(lxid) {
136             jsonPost("/wsService/PManagementHandler.ashx?type=UpdateFreeTreeNote", jsonObject,
137                           function (response) {
138                               if (response.code === 0) {
139                                   showSuccessAlert(lxid==0?"修改成功!":"新增成功!");
140                                   checkAway();
141                                   location.reload();
142                               } else { showErrorAlert(response.message); }
143                           }, function () {
144                           });
145         }
146         //删除事件
147         function DelAway() {
148             if (JudgeAway(2)) {
149                 if (confirm("删除节点信息,请慎重!")) {
150                     if (confirm("确认要删除吗?")) {
151                         jsonObject.deleteId = $("#txtCode").val();
152                         jsonPost("/wsService/PManagementHandler.ashx?type=DeleteFreeTreeNote", jsonObject,
153                         function (response) {
154                             if (response.code === 0) {
155                                 showSuccessAlert("删除成功!");
156                                 checkAway();
157                                 location.reload();
158                             } else { showErrorAlert(response.message); }
159                         }, function () {
160                         });
161                     }
162                 }
163             } else { showErrorAlert("请点击要删除的节点!") };
164         }
165         //保存前验证方法:0--修改;1:新增;2;删除
166         //删除不检验
167         function JudgeAway(lxid) {
168             if (lxid != 2) {
169                 if (lxid != 1) {
170                     messageError = "";
171                     var value = $("#classify_name").val();
172                     if (value == "") {
173                         messageError = "分类名称不能为空";
174                         messageError += "<br/>";
175                     }
176                     value = $("#order_value").val();
177                     if (value == "") {
178                         messageError = "排序数值不能为空";
179                         messageError += "<br/>";
180                     }
181                     value = $("#code_value").val();
182                     if (value == "") {
183                         messageError = "助记码不能为空";
184                         messageError += "<br/>";
185                     }
186                     return messageError.length === 0 ? true : false;
187                 }
188             }
189             return true;
190         }
191         //保存内容填充方法
192         function SaveFileDate(zid) {
193             jsonObject = {};
194             var resultInformation = zid == "" ? $("#txtCode").val() + "^" : $("#txtFathCode").val() + "^";
195             resultInformation += zid == "" ? "^" : zid + "^";
196             resultInformation += $("#classify_name").val() + "^";
197             resultInformation += $("#code_value").val() + "^";
198             resultInformation += $("#order_value").val();
199             jsonObject.menuArray = resultInformation;
200         }
201         //节点点击事件
202         function GetNodeAway(event, treeId, nodes) {
203             var fileInfo = event.type == "click" ? true : false;
204             GetSonNode(nodes, fileInfo);
205         }
206         //获取节点信息
207         function GetSonNode(nodes, fileInfo) {
208             if (nodes.id != "" && nodes.id != null) {
209                 if (nodes.isParent == true) {
210                     //含有子节点信息
211                     //非父节点(根据ID获取二级或三级菜单)
212                     jsonObject.paramId = nodes.id;
213                     jsonPost("/wsService/PManagementHandler.ashx?type=GetChildrenFreeClassTree", jsonObject,
214                         function (response) {
215                             GroupResultData(response.data, nodes, fileInfo);
216                         }, function () { });
217                 } else {
218                     //不包含子节点信息所以直接更新展示内容
219                     GroupResultData("", nodes, fileInfo);
220                 }
221             }
222         }
223         //节点信息填充
224         function GroupResultData(dataArray, notes, fileInfo) {
225             //填充展示信息
226             if (fileInfo) {
227                 $("#txtCode").val(notes.id);//子ID
228                 $("#txtFathCode").val(notes.pId);//父ID
229                 $("#sify_name").html(notes.SifyName);//分类显示
230                 $("#classify_name").val(notes.name);//分类名称
231                 $("#order_value").val(notes.OrderValue);//排序数值
232                 $("#code_value").val(notes.CodeValue);//助 记 码
233             }
234             if (notes.isExpernt != true) {
235                 if (dataArray !== "" && dataArray != null) {
236                     var zTree = $.fn.zTree.getZTreeObj("treeDemo");
237                     notes.isExpernt = true;
238                     //notes.children = dataArray;
239                     dataArray.forEach(function (obj) {
240                         obj.SifyName = "【" + notes.name + ";" + obj.name + "】";
241                         zTree.addNodes(notes, obj);
242                     });
243                 }
244             }
245         }
246         //清空节点信息
247         function checkAway() {
248             //清空输入区数据
249             $("#txtCode").val("");
250             $("#txtFathCode").val("");
251             $("#sify_name").html("");
252             $("#classify_name").val("");
253             $("#order_value").val("");
254             $("#code_value").val("");
255         }
256     </script>
257 </body>
258 </html>

前台HTML页面

第二步、构建实体类。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5
 6 namespace Webs.common
 7 {
 8     [Serializable]
 9     //树节点识别信息模型
10     public class ZTree
11     {
12         #region ZTree唯一标识不可改变大小写
13         /// <summary>
14         ///节点名称
15         /// </summary>
16         public string name { set; get; }
17         /// <summary>
18         /// 节点Id
19         /// </summary>
20         public string id { set; get; }
21         /// <summary>
22         /// 节点父ID
23         /// </summary>
24         public string pId { set; get; }
25         /// <summary>
26         /// 节点是否展开事件
27         /// </summary>
28         public bool open { set; get; }
29         /// <summary>
30         /// 是否是父节点标识
31         /// </summary>
32         public bool isParent { set; get; }
33         /// <summary>
34         /// 该节点是否包含子节点信息
35         /// </summary>
36         public List<ZTree> children { set; get; }
37         #endregion
38
39         #region 自定义属性
40         /// <summary>
41         /// 分类展示名称
42         /// </summary>
43         public string SifyName { set; get; }
44         /// <summary>
45         /// 节点自有名称
46         /// </summary>
47         public string ClassifyName { set; get; }
48         /// <summary>
49         /// 排序值
50         /// </summary>
51         public int OrderValue { set; get; }
52         /// <summary>
53         /// 助计码
54         /// </summary>
55         public string CodeValue { set; get; }
56         /// <summary>
57         /// 是否已展开唯一标识
58         /// </summary>
59         public bool isExpernt { get; set; }
60         #endregion
61     }
62 }

ZTree Model

第三步、后台代码。

  1    #region 费用分类
  2         /// <summary>
  3         /// 获取费用分类一级节点信息
  4         /// </summary>
  5         private void GetFreeClassTree()
  6         {
  7             try
  8             {
  9                 string cParamId = stringWithFormId("paramId") == "null" ? "" : stringWithFormId("paramId");
 10                 List<ParamClassify> paramClassifyList = new List<ParamClassify>();
 11                 bool result = RemotingProxy.Param().GetParamClassifyList(cParamId, userInfo.UserId, ref paramClassifyList, ref Message);
 12                 var jsonParent = new ZTree() { id = "-1", ClassifyName = "根节点", open = true, name = "父节点" };
 13                 jsonParent.isParent = true;
 14                 jsonParent.children = new List<ZTree>();
 15                 foreach (var m in paramClassifyList)
 16                 {
 17                     var json = new ZTree();
 18                     json.pId = jsonParent.id;
 19                     json.id = m.CParamId;
 20                     json.SifyName = "根节点;" + m.VClassifyName;
 21                     json.ClassifyName = m.VClassifyName;
 22                     json.name = m.VClassifyName;
 23                     json.isParent = m.IsContainsChidrens;
 24                     json.children = new List<ZTree>();
 25                     json.CodeValue = m.VUnitMnem;
 26                     json.isParent = true;
 27                     json.OrderValue = m.NSortValue;
 28                     jsonParent.children.Add(json);
 29                 }
 30                 Response.Write(result
 31                     ? jsonString(statusCode.success, Message, jsonParent)
 32                     : jsonString(statusCode.fail, Message));
 33             }
 34             catch (Exception ex)
 35             {
 36                 CreatErrorTxt(ex.ToString());
 37                 Response.Write(jsonString(statusCode.fail, Error.DataError));
 38             }
 39         }
 40
 41         /// <summary>
 42         /// 获取费用分类其它节点信息
 43         /// </summary>
 44         private void GetChildrenFreeClassTree()
 45         {
 46             try
 47             {
 48                 string cParamId = stringWithFormId("paramId");
 49                 List<ParamClassify> paramClassifyList = new List<ParamClassify>();
 50                 bool result = RemotingProxy.Param().GetParamClassifyList(cParamId, userInfo.UserId, ref paramClassifyList, ref Message);
 51                 var children = new List<ZTree>();
 52                 foreach (var m in paramClassifyList)
 53                 {
 54                     var json = new ZTree();
 55                     json.pId = cParamId;
 56                     json.id = m.CParamId;
 57                     json.ClassifyName = m.VClassifyName;
 58                     json.name = m.VClassifyName;
 59                     json.isParent = m.IsContainsChidrens;
 60                     json.children = new List<ZTree>();
 61                     json.CodeValue = m.VUnitMnem;
 62                     json.OrderValue = m.NSortValue;
 63                     children.Add(json);
 64                 }
 65                 Response.Write(result
 66                     ? jsonString(statusCode.success, Message, children)
 67                     : jsonString(statusCode.fail, Message));
 68             }
 69             catch (Exception ex)
 70             {
 71                 CreatErrorTxt(ex.ToString());
 72                 Response.Write(jsonString(statusCode.fail, Error.DataError));
 73             }
 74         }
 75
 76         /// <summary>
 77         /// 获取节点详细信息
 78         /// </summary>
 79         private void GetTreeNoteInformation()
 80         {
 81             try
 82             {
 83                 string cParamId = stringWithFormId("paramId");
 84                 ParamClassify paramClassify = new ParamClassify();
 85                 bool result = RemotingProxy.Param().GetParamClassify(cParamId, userInfo.UserId, ref paramClassify, ref Message);
 86                 Response.Write(result
 87                     ? jsonString(statusCode.success, Message, paramClassify)
 88                     : jsonString(statusCode.fail, Message));
 89             }
 90             catch (Exception ex)
 91             {
 92                 CreatErrorTxt(ex.ToString());
 93                 Response.Write(jsonString(statusCode.fail, Error.DataError));
 94             }
 95         }
 96
 97         /// <summary>
 98         /// 新增修改节点信息
 99         /// </summary>
100         private void UpdateFreeTreeNote()
101         {
102             try
103             {
104                 string cParamId ="";
105                 ParamClassify paramClassify = new ParamClassify();
106                 string[] menuIdArray = stringWithFormId("menuArray").Split(‘^‘);
107                 paramClassify.CParentParamId = menuIdArray[0]=="-1"?"":menuIdArray[0];//父级ID
108                 paramClassify.CParamId = menuIdArray[1];//自己ID
109                 paramClassify.VClassifyName = menuIdArray[2];//分类名称
110                 paramClassify.VUnitMnem = menuIdArray[3];//助记码
111                 paramClassify.NSortValue = int.Parse(menuIdArray[4]);//排序值
112                 paramClassify.NDelflag = 0;//是否删除
113                 bool result = RemotingProxy.Param().UpdateParamClassify(paramClassify, userInfo.UserId, ref cParamId, ref Message);
114                 Response.Write(result
115                     ? jsonString(statusCode.success, Message, paramClassify)
116                     : jsonString(statusCode.fail, Message));
117             }
118             catch (Exception ex)
119             {
120                 CreatErrorTxt(ex.ToString());
121                 Response.Write(jsonString(statusCode.fail, Error.DataError));
122             }
123         }
124
125         /// <summary>
126         /// 删除节点信息
127         /// </summary>
128         private void DeleteFreeTreeNote()
129         {
130             try
131             {
132                 string deleteId = stringWithFormId("deleteId");
133                 bool result = RemotingProxy.Param().DeleteParamClassify(deleteId, userInfo.UserId, ref Message);
134                 Response.Write(result
135                     ? jsonString(statusCode.success, Message)
136                     : jsonString(statusCode.fail, Message));
137             }
138             catch (Exception ex)
139             {
140                 CreatErrorTxt(ex.ToString());
141                 Response.Write(jsonString(statusCode.fail, Error.DataError));
142             }
143         }
144         #endregion

Handler

时间: 2024-08-05 14:58:06

【Ztree】前台展示多级菜单,后台配置方法的相关文章

Spring-boot之jQuery File Upload后台配置方法

文件上传在Spring-boot中本身配置起来非常简单,但是有个多文件传递和单个传递的问题. 两者配置是略有不同的,而且还有一些让我这个技术小白很容易踩坑的地方. 重要的几点: 上传的是单个文件:  MultipartFile file 上传的是多个文件: MultipartFile[] file 先从单个文件上传 后台配置来说: public Map uploadFile(@RequestParam("file") MultipartFile file,HttpServletRequ

mvc前台js中调用后台的方法属性

首先要知@Razor视图引擎的应用范围 <script type ="text/javascript"> var d= '@{ if (IsPost) { <script type ="text/javascript "> </script> } }'; </script>这样是不行的 而 @{ <script type ="text/javascript "> </script&

扇形多级菜单可配置Demo

预览效果 在Circular Navigation插件上进行修改而成,领导是想把这个做成复选框,所以做成了可以多选的... Demo下载:

通用权限管理系统之权限菜单zTree树的展示及移动的处理方法

在通用权限管理系统中,有很多数据结构是有父子关系的,如组织机构,部门,权限菜单等,在展示的时候,大多数是通过zTree树的形式展现的,如下: 权限菜单展示 这种数据后台输出比较容易处理,参考如下获取某个子系统的全部操作菜单: 后台输出zTree树的数据 /// <summary> /// 获取module树结构数据 /// </summary> /// <param name="systemCode"></param> /// <r

Ci分开配置网站前台后台的方法

CI 2.0 多目录(应用程序)配置. 多目录的意思是指在同一个网站中有多套程序,最简单的例子就是网站的前台展示与后台管理.二者由于在网站功能中分属不同部分,通常会有不同的界面, 用到images/stylesheet/javavascript基本是分开的,所以设置不同目录. 源码下载解压后文件结构如下图,默认是只有一个目录的. 为了达成多目录共享一个CodeIgniter的目标,我们要完成以下步骤: 1. 在application目录下新建子目录admin,将上图中红框标注的5个文件夹复制到a

展示树菜单(zTree)

zTree是一个依靠 jQuery 实现的多功能 “树插件”,支持选择框等显示,动态更改图标,提供多种事件响应回调,而且异步数据功能强大.相信涉及大型项目或者大量数据时,它的使用将非常方便.利用ztree和Dwr框架可以轻松的实现后台数据的异步加载,他们都是利用Ajax进行后台数据的异步刷新的,页面不会重新加载,而且速度非常快兼容 IE.FireFox.Chrome 等浏览器 • 在一个页面内可同时生成多个 Tree 实例 • 支持 JSON 数据 • 支持一次性静态生成 和 Ajax 异步加载

jquery自定义插件-参数化配置多级菜单导航栏插件

1 自定义菜单导航栏插件的必要性 看图说话,下面是利用自定义的菜单导航栏插件simpleMenu创建的网站导航示例: 插件默认提供的是如上图的导航栏样式,即一二级菜单为横向分布:三四级菜单为纵向分布. 使用插件时,可以修改默认参数,目前插件提供了设置菜单的分布方式:横向或纵向:菜单的位置:依赖上一级菜单栏的定位:上下左右定位. 修改调用参数,将一二级菜单改为纵向排列:并将三级菜单的显示位置改为二级菜单栏的右侧(其他的和默认保持一致),修改后运行效果如下图: 细心的观察,会发现上面两个菜单导航栏的

zTree下拉菜单多级菜单多选实现

惯例,先上图: 这是在一个项目中,为了满足样式美观.多级菜单以及多选而将zTree插件更改过后的效果. 在实际的开发过程中,本来zTree也是可以满足需求的,但是zTree多选的话需要checkbox选择框,这样导致样式风格和项目总体不一致.下面是根据ztree所修改的内容. 如上图 这是个outlook样式的菜单. 我们只需要简单的右键,查看代码,就可以把源码拿下来看看. 我们需要的源码如下: <SCRIPT type="text/javascript"> <!--

ASP.NET后台调用前台JS函数的三种常见方法

第一种:使用普通的添加控件中的Attributes属性进行调用 例如,像一般的普通的按钮:Button1.Attributes.Add("onclick","MyFun();"); 此方法只能在Onload中或者类似于onload的初始化过程中添加才有效.并且是先执行脚本函数,同时无法改变执行顺序. 第二种:使用Response.Write方法进行调用 例如,像我们经常会使用到的Response.Write("<scripttype='text/ja