Prechádzať zdrojové kódy

菜单管理功能添加组织树

git-svn-id: https://192.168.57.71/svn/jsgkj@992 931142cf-59ea-a443-aa0e-51397b428577
ld_zhouk 8 rokov pred
rodič
commit
5aef432341

+ 6 - 0
gkaqv2/trunk/modules/web/src/main/java/com/xt/js/gkaq/common/GlobalData.java

@@ -8,4 +8,10 @@ public class GlobalData {
     public static final String CHK_YES = "Y";
 
     public static final String CHK_NO = "N";
+
+    public static final String LEAF_YES = "Y";
+
+    public static final String LEAF_NO = "N";
+
+    public static final String LEAF_BTN = "B";
 }

+ 53 - 14
gkaqv2/trunk/modules/web/src/main/java/com/xt/js/gkaq/web/ctl/MenuCtl.java

@@ -1,5 +1,8 @@
 package com.xt.js.gkaq.web.ctl;
 
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.ArrayList;
 import java.util.List;
 
 import org.springframework.beans.BeanUtils;
@@ -12,10 +15,13 @@ import org.springframework.web.bind.annotation.ResponseBody;
 
 import com.alibaba.fastjson.JSONArray;
 import com.xt.js.gkaq.common.BaseCtl;
+import com.xt.js.gkaq.common.GlobalData;
 import com.xt.js.gkaq.frame.model.MenuModel;
 import com.xt.js.gkaq.frame.service.ButtonService;
 import com.xt.js.gkaq.frame.service.MenuService;
 import com.xt.js.gkaq.web.vo.MenuVo;
+import com.yuanxd.tools.pagehelper.PageHelper;
+import com.yuanxd.tools.pagehelper.PageInfo;
 import com.yuanxd.tools.utils.WebJsonResult;
 import com.yuanxd.tools.utils.string.StringUtils;
 
@@ -33,16 +39,57 @@ public class MenuCtl extends BaseCtl {
     }
 
     /**
+     * 初始化页面加载树
+     */
+    @RequestMapping("tree")
+    @ResponseBody
+    public String initMenuTree() {
+
+        List<MenuModel> list = menuService.initMenuTree();
+        return JSONArray.toJSONString(list);
+    }
+
+    /**
      * 初始化页面加载数据
      */
     @RequestMapping("list")
     @ResponseBody
-    public String initMenu() {
+    public PageInfo<MenuModel> getPageInfo(MenuVo vo) throws UnsupportedEncodingException {
+        // 初始化参数
+        if (null == vo.getPage() || vo.getPage() < 1) {
+            vo.setPage(1);
+        }
+        if (null == vo.getRows() || vo.getRows() < 1) {
+            vo.setRows(1);
+        }
+        PageHelper.startPage(vo.getPage(), vo.getRows());
+        MenuModel model = new MenuModel();
+        if (StringUtils.isNotEmpty(vo.getName())) {
+            model.setName("%" + URLDecoder.decode(vo.getName(), "UTF-8") + "%");
+        }
+        if (StringUtils.isNotEmpty(vo.getCode())) {
+            model.setCode("%" + vo.getCode() + "%");
+        }
+        if (StringUtils.isNotEmpty(vo.getPid())) {
+            model.setPid(vo.getPid());
+        }
+        if (StringUtils.isNotEmpty(vo.getLeaf())) {
+            model.setLeaf(vo.getLeaf());
+        }
+        List<MenuModel> list = null;
 
-        List<MenuModel> list = menuService.initMenu();
-        return JSONArray.toJSONString(list);
+        if (GlobalData.LEAF_BTN.equals(model.getLeaf())) {
+            list = new ArrayList<MenuModel>();
+        } else if (GlobalData.LEAF_YES.equals(model.getLeaf())) {
+            list = menuService.findAllBtnByCond(model);
+        } else {
+            list = menuService.findAllByCond(model);
+        }
+        PageInfo<MenuModel> pageResult = new PageInfo<>(list);
+        return pageResult;
     }
 
+
     @RequestMapping("getRecord")
     @ResponseBody
     public MenuVo getRecord(String id) {
@@ -63,14 +110,6 @@ public class MenuCtl extends BaseCtl {
             String[] idArr = ids.split(",");
             for (String id : idArr) {
                 if (StringUtils.isNotEmpty(id)) {
-//                    // 删除按钮
-//                    cnt += buttonService.deleteByID(id);
-//                    // 删除末级菜单关联的按钮
-//                    cnt += buttonService.deleteByMenu(id);
-//                    // 删除非末级菜单关联的子菜单
-//                    cnt += menuService.deleteByPid(id);
-//                    // 删除菜单
-//                    cnt += menuService.deleteByID(id);
                     delByPid(id);
                 }
             }
@@ -87,7 +126,7 @@ public class MenuCtl extends BaseCtl {
         MenuModel model = menuService.findById(id);
         if (model == null) {
             // 删除按钮
-            buttonService.deleteByID(id);
+            buttonService.deleteLogicByID(id);
             return;
         }
         if ("N".equals(model.getLeaf())) {
@@ -99,7 +138,7 @@ public class MenuCtl extends BaseCtl {
             // 删除末级菜单关联的按钮
             buttonService.deleteByMenu(id);
         }
-        menuService.deleteByID(id);
+        menuService.deleteLogicByID(id);
     }
 
     /**
@@ -120,7 +159,7 @@ public class MenuCtl extends BaseCtl {
         } else {
             // 更新
             MenuModel menuModel = menuService.findById(menuVo.getId());
-            BeanUtils.copyProperties(menuVo, menuModel, new String[] { "remark" });
+            BeanUtils.copyProperties(menuVo, menuModel);
             menuService.update(menuModel);
         }
         return success();

+ 31 - 6
gkaqv2/trunk/modules/web/src/main/webapp/WEB-INF/view/frame/menu.jsp

@@ -40,15 +40,40 @@
 						<div class="p_buttonbg">
 							<img class="p_buttonimg" src="<%=base%>/static/images/list/edit.png" onclick="editInfo()" title="党蜊" />
 						</div>
-						<div class="p_buttonbg">
-							<img class="p_buttonimg" src="<%=base%>/static/images/list/reload.png" onclick="refresh()" title="芃陔" />
-						</div>
+                        <div class="p_buttonbg">
+                            <img class="p_buttonimg" src="<%=base%>/static/images/list/search.png" onclick="showSearch()" title="脤戙" />
+                        </div>
 					</div>
-					<div class="page-content"
+                    <div class="p_searchdiv">
+                        <table class="tabsearch">
+                            <tr class="trsearch">
+                                <td class="tdname">靡備</td>
+                                <td class="tdcontent"><input type="text" id="srh_name" name="srh_name" class="p_txt" value=""></td>
+                                <td class="tdname">晤鎢</td>
+                                <td class="tdcontent"><input type="text" id="srh_code" name="srh_code" class="p_txt" value=""></td>
+                                <td class="tdname"><img class="p_searchbtn" src="<%=base%>/static/images/list/btn_query.png" title="脤戙" onclick="searchRecord()" />
+                                </td>
+                            </tr>
+                        </table>
+                    </div>
+<!-- 					<div class="page-content"
 						style="margin-left: 20px; height: 400px; width: 92%; overflow-x: auto; overflow-y: scroll;">
-						<!--粕等攷-->
+						粕等攷
 						<div id="menuTree" class="ztree"></div>
-					</div>
+					</div> -->
+                    <div class="container page-content">
+                        <div class="row clearfix">
+                            <div class="col-md-3 column page-content-tree">
+                                <!-- 郪眽攷 -->
+                                <div id="menuTree" class="ztree"></div>
+                            </div>
+                            <div class="col-md-9 column page-content-grid">
+                               <!--  蹈桶窒煦 -->
+                                <table id="grid-table"></table>
+                                <div id="grid-pager"></div>
+                            </div>
+                        </div>
+                    </div>
 				</div>
 			</div>
 

+ 1 - 4
gkaqv2/trunk/modules/web/src/main/webapp/WEB-INF/view/user/main.jsp

@@ -30,9 +30,6 @@
                         <div class="p_buttonbg">
                             <img class="p_buttonimg" src="<%=base%>/static/images/list/search.png" onclick="showSearch()" title="查询" />
                         </div>
-                        <div class="p_buttonbg">
-                            <img class="p_buttonimg" src="<%=base%>/static/images/list/print.png" onclick="printInfo()" title="打印" />
-                        </div>
                     </div>
                     <div class="p_searchdiv">
                         <table class="tabsearch">
@@ -53,7 +50,7 @@
                                 <div id="orgTree" class="ztree"></div>
                             </div>
                             <div class="col-md-9 column page-content-grid">
-                                <!-- 列表部分 -->
+                               <!--  列表部分 -->
                                 <table id="grid-table"></table>
                                 <div id="grid-pager"></div>
                             </div>

+ 153 - 37
gkaqv2/trunk/modules/web/src/main/webapp/static/js/frame/menu.js

@@ -1,18 +1,16 @@
+var grid_selector = "#grid-table";
+var pager_selector = "#grid-pager";
 var menuTree;
 // zTree的参数配置,setting主要是设置一些tree的属性,是本地数据源,还是远程,动画效果,是否含有复选框等等
 var setting = {
-    // 复选框
-    check : {
-        enable : true,
-        chkboxType : {
-            "Y" : "",
-            "N" : ""
-        }
+    view : {
+        autoCancelSelected : false,
+        selectedMulti : false
     },
     async : {
         enable : true,
         type : 'post',
-        url : basePath + "/menu/list"
+        url : basePath + "/menu/tree"
     },
     data : {
         // 简单的数据源
@@ -20,23 +18,136 @@ var setting = {
             enable : true,
             idKey : "id",
             pIdKey : "pid",
-            rootPId : 0
-        // 根节点
+            rootPId : 0 // 根节点
         }
+    },
+    callback : {
+        beforeClick : menuTreeBeforeClick,
+        onClick : menuTreeOnClick
     }
 };
 
+function menuTreeBeforeClick(treeId, treeNode) {
+    var nodes = menuTree.getSelectedNodes();
+
+    if (nodes.length == 1){
+        if (nodes[0].tId == treeNode.tId) {
+            menuTree.cancelSelectedNode(treeNode);
+            searchRecord();
+            return false;
+        }
+    } else if (nodes.length > 1) {
+        menuTree.cancelSelectedNode();
+        searchRecord();
+        return false;
+    }
+    return true;
+};
+
+function menuTreeOnClick() {
+    searchRecord();
+};
+
 $(document).ready(function() {
+    // 初始化Grid
+    initGrid();
     // 初始化zTree对象
     menuTree = $.fn.zTree.init($("#menuTree"), setting);
 });
 
 /**
+ * 初始化Grid
+ */
+function initGrid() {
+    // resize to fit page size
+    resizeTreePageGrid(grid_selector);
+    // 数据表格初始化
+    jQuery(grid_selector).jqGrid({
+        url : basePath + '/menu/list',
+        mtype : "POST", // 提交方式
+        datatype : "json",
+        autowidth : false,
+        height : "auto",
+        shrinkToFit : true,
+        sortname : "", // 默认的排序列
+        sortorder : "", // 默认的排序列
+        colNames : [
+                'id', 'leaf', '名称', '编码', '备注'
+        ],
+        colModel : [
+                {
+                    name : 'id',
+                    index : 'id',
+                    key : true,
+                    hidden : true,
+                    sortable : false
+                }, {
+                    name : 'leaf',
+                    index : 'leaf',
+                    hidden : true,
+                    sortable : false
+                }, {
+                    name : 'name',
+                    index : 'name',
+                    sortable : false
+                }, {
+                    name : 'code',
+                    index : 'code',
+                    sortable : false
+                }, {
+                    name : 'remark',
+                    index : 'remark',
+                    sortable : false
+                }
+        ],
+        rowNum : _rowNum, // 每页显示记录数
+        rowList : _rowList, // 用于改变显示行数的下拉列表框的元素数组。
+        pager : pager_selector, // 定义翻页用的导航栏
+        page : 1, // 设置初始的页码,初始为1
+        rownumbers : true,
+        pagerpos : 'center', // 指定分页栏的位置
+        altRows : true, // 设置为交替行表格,默认为false
+        multiselect : true, // 可以多选
+        multiboxonly : true, // 只有选择checkbox才会起作用
+        loadComplete : function() {
+            var table = this;
+            setTimeout(function() {
+                updatePagerIcons(table);
+                enableTooltips(table);
+            }, 0);
+        },
+        prmNames : {
+            oper : "oper",
+            page : "page",
+            rows : "rows",
+            sort : "sidx",
+            order : "sord"
+        },
+        jsonReader : {
+            root : "list", // json中代表实际模型数据的入口
+            page : "page", // json中代表当前页码的数据
+            total : "pages", // json中代表页码总数的数据
+            records : "total", // json中代表数据行总数的数据
+            repeatitems : false
+        // 如果设为false,则jqGrid在解析json时,会根据name来搜索对应的数据元素
+        },
+        gridComplete : function() {
+            comGridComplete("grid-table", "editRecord");
+        },
+        onPaging : function() {
+            comGridPage("grid-table");
+        }
+    });
+    // 调整jqgrid
+    ajustJqGrid(grid_selector, pager_selector);
+};
+
+/**
  * 新增菜单
  */
 function addInfo() {
     // 获取勾选节点
-    var nodes = menuTree.getCheckedNodes(true);
+    var nodes = menuTree.getSelectedNodes();
     if (nodes.length > 1) {
         layer.alert("请选择一条记录!");
         return;
@@ -76,19 +187,19 @@ function addInfo() {
  */
 function editInfo() {
     // 获取勾选节点
-    var nodes = menuTree.getCheckedNodes(true);
-    if (nodes.length != 1) {
-        layer.alert("请选择一条记录!");
+    var ids = getMultiData(grid_selector);
+    if (isNull(ids) || ids.indexOf(",") != -1) {
+        layer.alert("请选择且只选择一条记录!");
         return;
     } else {
-        var node = nodes[0];
-        if (node.leaf == 'B') { // 按钮节点
-            var pnode = node.getParentNode();
+        var selData = $(grid_selector).jqGrid('getRowData', ids);
+        if (selData.leaf == 'B') { // 按钮节点
+            var pnode = menuTree.getNodeByParam("id", selData.id).getParentNode();
             $.ajax({
                 type : 'POST',
                 dataType : "json",
                 data : {
-                    "id" : node.id
+                    "id" : selData.id
                 },
                 url : basePath + '/btn/getRecord',
                 success : function(data) {
@@ -105,12 +216,12 @@ function editInfo() {
                 }
             });
         } else { // 菜单节点
-            var pnode = node.getParentNode();
+            var pnode = menuTree.getNodeByParam("id", selData.id).getParentNode();
             $.ajax({
                 type : 'POST',
                 dataType : "json",
                 data : {
-                    "id" : node.id
+                    "id" : selData.id
                 },
                 url : basePath + '/menu/getRecord',
                 success : function(data) {
@@ -140,19 +251,9 @@ function editInfo() {
  */
 function delInfo() {
     // 获取选择节点
-    var nodes = menuTree.getCheckedNodes(true);
-    if (nodes.length > 0) {
-        var chkIds = "";
-        var chkNames = "";
-        for (var i = 0; i < nodes.length; i++) {
-            if (i != 0) {
-                chkIds += ",";
-                chkNames += ",";
-            }
-            chkIds += nodes[i].id;
-            chkNames += nodes[i].name;
-        }
-        layer.confirm('确定删除以下记录及其下级记录吗:<br>' + chkNames, {
+    var ids = getMultiData(grid_selector);
+    if (!isNull(ids)) {
+        layer.confirm('确定删除所选记录及其下级记录吗?', {
             icon : 3,
             title : '提示'
         }, function(index) {
@@ -160,12 +261,13 @@ function delInfo() {
                 type : 'POST',
                 dataType : "json",
                 data : {
-                    "ids" : chkIds
+                    "ids" : ids
                 },
                 url : basePath + '/menu/delRecodes',
                 success : function(data) {
                     layer.close(index);
                     menuTree.reAsyncChildNodes(null, "refresh");
+                    searchRecord();
                 },
                 error : function(XMLHttpRequest, textStatus, errorThrown) {
                     layer.close(index);
@@ -179,10 +281,22 @@ function delInfo() {
 };
 
 /**
- * 刷新菜单
+ * 查询信息
  */
-function refresh() {
-    menuTree.reAsyncChildNodes(null, "refresh");
+function searchRecord() {
+    var name = encodeURI(encodeURI($("#srh_name").val()));
+    var code = $("#srh_code").val();
+    var pidStr = "";
+
+    var nodes = menuTree.getSelectedNodes();
+    if (nodes.length == 1) {
+        pidStr = "&pid=" + nodes[0].id + "&leaf=" + nodes[0].leaf;
+    }
+
+    $(grid_selector).jqGrid('setGridParam', {
+        url : basePath + "/menu/list?name=" + name + "&code=" + code + pidStr,
+        page : 1
+    }).trigger("reloadGrid");
 };
 
 /**
@@ -200,6 +314,7 @@ function save() {
                 layer.alert("数据已成功保存!");
                 closeWin();
                 menuTree.reAsyncChildNodes(null, "refresh");
+                searchRecord();
             } else {
                 layer.alert("数据保存失败!");
             }
@@ -232,6 +347,7 @@ function btnSave() {
                 layer.alert("数据已成功保存!");
                 closeBtnWin();
                 menuTree.reAsyncChildNodes(null, "refresh");
+                searchRecord();
             } else {
                 layer.alert("数据保存失败!");
             }

+ 23 - 24
gkaqv2/trunk/modules/web/src/main/webapp/static/js/user/index.js

@@ -3,29 +3,28 @@ var pager_selector = "#grid-pager";
 var orgTree;
 //zTree的参数配置,setting主要是设置一些tree的属性,是本地数据源,还是远程,动画效果,是否含有复选框等等
 var setting = {
- view: {
-     autoCancelSelected: false,
-     selectedMulti: false
- },
- async : {
-     enable : true,
-     type : 'post',
-     url : basePath + "/org/tree"
- },
- data : {
-     // 简单的数据源
-     simpleData : {
-         enable : true,
-         idKey : "id",
-         pIdKey : "pid",
-         rootPId : 0
-     // 根节点
-     }
- },
- callback : {
-     beforeClick : orgTreeBeforeClick,
-     onClick : orgTreeOnClick
- }
+    view : {
+        autoCancelSelected : false,
+        selectedMulti : false
+    },
+    async : {
+        enable : true,
+        type : 'post',
+        url : basePath + "/org/tree"
+    },
+    data : {
+        // 简单的数据源
+        simpleData : {
+            enable : true,
+            idKey : "id",
+            pIdKey : "pid",
+            rootPId : 0 // 根节点
+        }
+    },
+    callback : {
+        beforeClick : orgTreeBeforeClick,
+        onClick : orgTreeOnClick
+    }
 };
 
 function orgTreeBeforeClick(treeId, treeNode) {
@@ -229,7 +228,7 @@ function editInfo() {
     // 获取选择行
     var ids = getMultiData(grid_selector);
     if (isNull(ids) || ids.indexOf(",") != -1) {
-        layer.alert("请选择且只选择一条记录");
+        layer.alert("请选择且只选择一条记录");
     } else {
         $.ajax({
             type : 'POST',