Răsfoiți Sursa

角色管理功能

git-svn-id: https://192.168.57.71/svn/jsgkj@860 931142cf-59ea-a443-aa0e-51397b428577
ld_zhouk 8 ani în urmă
părinte
comite
6d5cca395d

+ 56 - 12
gkaqv2/trunk/modules/web/src/main/java/com/xt/js/gkaq/web/ctl/DictCtl.java

@@ -1,5 +1,7 @@
 package com.xt.js.gkaq.web.ctl;
 
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
 import java.util.List;
 
 import org.springframework.beans.BeanUtils;
@@ -13,9 +15,12 @@ import org.springframework.web.bind.annotation.ResponseBody;
 import com.alibaba.fastjson.JSONArray;
 import com.xt.js.gkaq.common.BaseCtl;
 import com.xt.js.gkaq.frame.model.CodeModel;
+import com.xt.js.gkaq.frame.model.CodeModelDto;
 import com.xt.js.gkaq.frame.model.ComboBoxDto;
 import com.xt.js.gkaq.frame.service.CodeService;
 import com.xt.js.gkaq.web.vo.DictVo;
+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;
 
@@ -35,20 +40,37 @@ public class DictCtl extends BaseCtl {
      */
     @RequestMapping("list")
     @ResponseBody
-    public String selectList() {
+    public PageInfo<CodeModelDto> getPageInfo(DictVo 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());
 
-        List<CodeModel> list = codeService.initDict();
-        return JSONArray.toJSONString(list);
+        CodeModelDto model = new CodeModelDto();
+        BeanUtils.copyProperties(vo, model);
+        if (StringUtils.isNotEmpty(vo.getText())) {
+            model.setText("%" + URLDecoder.decode(vo.getText(), "UTF-8") + "%");
+        }
+        List<CodeModelDto> list = codeService.findAllByCond(model);
+        PageInfo<CodeModelDto> pageResult = new PageInfo<>(list);
+        return pageResult;
     }
+//    public String selectList() {
+//
+//        List<CodeModel> list = codeService.initDict();
+//        return JSONArray.toJSONString(list);
+//    }
 
     @RequestMapping("getRecord")
     @ResponseBody
-    public DictVo getRecord(String id) {
+    public CodeModel getRecord(String id) {
 
-        CodeModel codeModel = codeService.findById(id);
-        DictVo dictVo = new DictVo();
-        BeanUtils.copyProperties(codeModel, dictVo);
-        return dictVo;
+        CodeModel model = codeService.findById(id);
+        return model;
     }
 
     @RequestMapping("delRecodes")
@@ -61,10 +83,11 @@ public class DictCtl extends BaseCtl {
             String[] idArr = ids.split(",");
             for (String id : idArr) {
                 if (StringUtils.isNotEmpty(id)) {
-                    // 删除非末级关联的子集
-                    cnt += codeService.deleteByPid(id);
-                    // 删除
-                    cnt += codeService.deleteByID(id);
+//                    // 删除非末级关联的子集
+//                    cnt += codeService.deleteByPid(id);
+//                    // 删除
+//                    cnt += codeService.deleteByID(id);
+                    delByPid(id);
                 }
             }
         }
@@ -72,6 +95,27 @@ public class DictCtl extends BaseCtl {
     }
 
     /**
+     * 递归删除
+     * @param id
+     */
+    private void delByPid(String id) {
+
+        CodeModel model = codeService.findById(id);
+        if (model == null) {
+            return;
+        }
+        if ("N".equals(model.getLeaf())) {
+            CodeModelDto dto = new CodeModelDto();
+            dto.setPid(model.getId());
+            List<CodeModelDto> list = codeService.findAllByCond(dto);
+            for (CodeModelDto data : list) {
+                delByPid(data.getId());
+            }
+        }
+        codeService.deleteByID(id);
+    }
+
+    /**
      * 保存
      * 
      * @param vo

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

@@ -37,7 +37,7 @@ public class MenuCtl extends BaseCtl {
      */
     @RequestMapping("list")
     @ResponseBody
-    public String selectList() {
+    public String initMenu() {
 
         List<MenuModel> list = menuService.initMenu();
         return JSONArray.toJSONString(list);
@@ -63,14 +63,15 @@ 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);
+//                    // 删除按钮
+//                    cnt += buttonService.deleteByID(id);
+//                    // 删除末级菜单关联的按钮
+//                    cnt += buttonService.deleteByMenu(id);
+//                    // 删除非末级菜单关联的子菜单
+//                    cnt += menuService.deleteByPid(id);
+//                    // 删除菜单
+//                    cnt += menuService.deleteByID(id);
+                    delByPid(id);
                 }
             }
         }
@@ -78,6 +79,30 @@ public class MenuCtl extends BaseCtl {
     }
 
     /**
+     * 递归删除
+     * @param id
+     */
+    private void delByPid(String id) {
+
+        MenuModel model = menuService.findById(id);
+        if (model == null) {
+            // 删除按钮
+            buttonService.deleteByID(id);
+            return;
+        }
+        if ("N".equals(model.getLeaf())) {
+            List<MenuModel> list = menuService.findAllByPid(model.getId());
+            for (MenuModel data : list) {
+                delByPid(data.getId());
+            }
+        } else {
+            // 删除末级菜单关联的按钮
+            buttonService.deleteByMenu(id);
+        }
+        menuService.deleteByID(id);
+    }
+
+    /**
      * 保存
      * 
      * @param vo

+ 27 - 15
gkaqv2/trunk/modules/web/src/main/java/com/xt/js/gkaq/web/ctl/OrgCtl.java

@@ -2,10 +2,7 @@ package com.xt.js.gkaq.web.ctl;
 
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
-import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -15,7 +12,6 @@ import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 
-import com.alibaba.fastjson.JSONArray;
 import com.xt.js.gkaq.common.BaseCtl;
 import com.xt.js.gkaq.frame.model.OrgModelDto;
 import com.xt.js.gkaq.frame.service.OrgService;
@@ -80,7 +76,11 @@ public class OrgCtl extends BaseCtl {
             String[] idArr = ids.split(",");
             for (String id : idArr) {
                 if (StringUtils.isNotEmpty(id)) {
-                    cnt += orgService.deleteByID(id);
+//                    // 删除非末级关联的子集
+//                    cnt += orgService.deleteByPid(id);
+//                    // 删除
+//                    cnt += orgService.deleteByID(id);
+                    delByPid(id);
                 }
             }
         }
@@ -88,6 +88,28 @@ public class OrgCtl extends BaseCtl {
     }
 
     /**
+     * 递归删除
+     * @param id
+     */
+    private void delByPid(String id) {
+
+        OrgModelDto model = orgService.findById(id);
+        if (model == null) {
+            return;
+        }
+        OrgModelDto dto = new OrgModelDto();
+        dto.setPid(model.getId());
+        List<OrgModelDto> list = orgService.findAllByCond(dto);
+
+        if (list != null && list.size() > 0) {
+            for (OrgModelDto data : list) {
+                delByPid(data.getId());
+            }
+        }
+        orgService.deleteByID(id);
+    }
+
+    /**
      * 保存
      * 
      * @param vo
@@ -111,14 +133,4 @@ public class OrgCtl extends BaseCtl {
         return success();
     }
 
-    @RequestMapping("orgTypeSelect")
-    @ResponseBody
-    public String orgTypeSelect() {
-        List<Map<String, String>> selectList = new ArrayList<Map<String, String>>();
-        Map<String, String> orgType1 = new HashMap<String, String>();
-        orgType1.put("value", "1");
-        orgType1.put("name", "测试");
-        selectList.add(orgType1);
-        return JSONArray.toJSONString(selectList);
-    }
 }

+ 166 - 0
gkaqv2/trunk/modules/web/src/main/java/com/xt/js/gkaq/web/ctl/RoleCtl.java

@@ -0,0 +1,166 @@
+package com.xt.js.gkaq.web.ctl;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.List;
+
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import com.xt.js.gkaq.common.BaseCtl;
+import com.xt.js.gkaq.frame.model.RoleButtonModel;
+import com.xt.js.gkaq.frame.model.RoleMenuModel;
+import com.xt.js.gkaq.frame.model.RoleModel;
+import com.xt.js.gkaq.frame.service.RoleButtonService;
+import com.xt.js.gkaq.frame.service.RoleMenuService;
+import com.xt.js.gkaq.frame.service.RoleService;
+import com.xt.js.gkaq.web.vo.RoleVo;
+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;
+
+@Controller
+@RequestMapping(value = "/role")
+public class RoleCtl extends BaseCtl {
+    @Autowired
+    private RoleService roleService;
+    @Autowired
+    private RoleMenuService roleMenuService;
+    @Autowired
+    private RoleButtonService roleButtonService;
+
+    @RequestMapping("")
+    public String index(Model model) {
+        return "frame/role";
+    }
+
+    /**
+     * 初始化页面加载数据
+     * @throws UnsupportedEncodingException 
+     */
+    @RequestMapping("list")
+    @ResponseBody
+    public PageInfo<RoleModel> getPageInfo(RoleVo 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());
+
+        RoleModel model = new RoleModel();
+        BeanUtils.copyProperties(vo, model);
+        if (StringUtils.isNotEmpty(vo.getName())) {
+            model.setName("%" + URLDecoder.decode(vo.getName(), "UTF-8") + "%");
+        }
+        List<RoleModel> list = roleService.findAllByCond(model);
+        PageInfo<RoleModel> pageResult = new PageInfo<>(list);
+        return pageResult;
+    }
+
+    @RequestMapping("getRecord")
+    @ResponseBody
+    public RoleVo getRecord(String id) {
+
+        RoleModel model = roleService.findById(id);
+        List<RoleButtonModel> roleBtnList = roleButtonService.findByRoleId(id);
+        List<RoleMenuModel> roleMenuList = roleMenuService.findByRoleId(id);
+        String btns = "";
+        String menus = "";
+        for (RoleButtonModel roleBtn : roleBtnList) {
+            if (btns != "") {
+                btns += ",";
+            }
+            btns += roleBtn.getButtonId();
+        }
+        for (RoleMenuModel roleMenu : roleMenuList) {
+            if (menus != "") {
+                menus += ",";
+            }
+            menus += roleMenu.getMenuId();
+        }
+        RoleVo vo = new RoleVo();
+        BeanUtils.copyProperties(model, vo);
+        vo.setMenuBtnRef(menus + ";" + btns);
+        return vo;
+    }
+
+    @RequestMapping("delRecodes")
+    @ResponseBody
+    @Transactional
+    public int delRecodes(String ids) {
+
+        int cnt = 0;
+        if (StringUtils.isNotEmpty(ids)) {
+            String[] idArr = ids.split(",");
+            for (String id : idArr) {
+                if (StringUtils.isNotEmpty(id)) {
+                    // 删除关联菜单及按钮
+                    roleButtonService.deleteByRoleId(id);
+                    roleMenuService.deleteByRoleId(id);
+                    // 删除
+                    cnt += roleService.deleteByID(id);
+                }
+            }
+        }
+        return cnt;
+    }
+
+    /**
+     * 保存
+     * 
+     * @param vo
+     * @return
+     */
+    @RequestMapping("save")
+    @ResponseBody
+    @Transactional
+    public WebJsonResult save(RoleVo vo) {
+
+        RoleModel model = new RoleModel();
+        if (StringUtils.isEmpty(vo.getId())) {
+            // 新增
+            BeanUtils.copyProperties(vo, model);
+            roleService.add(model);
+        } else {
+            // 更新
+            model = roleService.findById(vo.getId());
+            BeanUtils.copyProperties(vo, model);
+            roleService.update(model);
+            // 删除关联菜单及按钮
+            roleButtonService.deleteByRoleId(model.getId());
+            roleMenuService.deleteByRoleId(model.getId());
+        }
+        // 添加关联菜单及按钮
+        if (StringUtils.isNotEmpty(vo.getMenuBtnRef())) {
+            String[] menuBtnRefs = vo.getMenuBtnRef().split(";");
+            String[] menus = menuBtnRefs[0].split(",");
+            for (String menuId : menus) {
+                RoleMenuModel roleMenuModel = new RoleMenuModel();
+                roleMenuModel.setRoleId(model.getId());
+                roleMenuModel.setMenuId(menuId);
+                roleMenuService.add(roleMenuModel);
+            }
+            if (menuBtnRefs.length > 1) {
+                String[] btns = menuBtnRefs[1].split(",");
+                for (String btnId : btns) {
+                    RoleButtonModel roleBtnModel = new RoleButtonModel();
+                    roleBtnModel.setRoleId(model.getId());
+                    roleBtnModel.setButtonId(btnId);
+                    roleButtonService.add(roleBtnModel);
+                }
+            }
+        }
+
+        return success();
+    }
+
+}

+ 67 - 0
gkaqv2/trunk/modules/web/src/main/java/com/xt/js/gkaq/web/vo/RoleVo.java

@@ -0,0 +1,67 @@
+package com.xt.js.gkaq.web.vo;
+
+import com.xt.js.gkaq.common.BaseVo;
+
+public class RoleVo extends BaseVo {
+
+    private String id;
+
+    private String code;
+
+    private String name;
+
+    private String menuBtnRef;
+
+    private Long sortno;
+
+    private String remark;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getMenuBtnRef() {
+        return menuBtnRef;
+    }
+
+    public void setMenuBtnRef(String menuBtnRef) {
+        this.menuBtnRef = menuBtnRef;
+    }
+
+    public Long getSortno() {
+        return sortno;
+    }
+
+    public void setSortno(Long sortno) {
+        this.sortno = sortno;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+}

+ 24 - 8
gkaqv2/trunk/modules/web/src/main/webapp/WEB-INF/view/frame/dict.jsp

@@ -5,8 +5,9 @@
 <title>字典管理</title>
 
 <%@ include file="../layouts/header.jsp"%>
-<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/static/js/common/zTree_v3/css/zTreeStyle/zTreeStyle.css" />
-<script type="text/javascript" src="<%=request.getContextPath()%>/static/js/common/zTree_v3/js/jquery.ztree.all-3.5.min.js"></script>
+<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/static/js/common/bootstrap-select/css/bootstrap-select.min.css" />
+<script type="text/javascript" src="<%=request.getContextPath()%>/static/js/common/bootstrap-select/js/bootstrap-select.min.js"></script>
+<script type="text/javascript" src="<%=request.getContextPath()%>/static/js/common/bootstrap-select/js/i18n/defaults-zh_CN.min.js"></script>
 <script src="<%=base%>/static/js/frame/dict.js"></script>
 </head>
 <body class="p_body">
@@ -43,14 +44,29 @@
 							<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="刷新" />
+							<img class="p_buttonimg" src="<%=base%>/static/images/list/search.png" onclick="showSearch()" title="查询" />
 						</div>
 					</div>
-					<div class="page-content"
-						style="margin-left: 20px; height: 400px; width: 92%; overflow-x: auto; overflow-y: scroll;">
-						<!--字典树-->
-						<div id="dictTree" class="ztree"></div>
-					</div>
+                    <div class="p_searchdiv">
+                        <table class="tabsearch">
+                            <tr class="trsearch">
+                                <td class="tdname">上级编码</td>
+                                <td class="tdcontent"><input type="text" id="srh_pcode" name="srh_pcode" class="p_txt"></td>
+                                <td class="tdname">编码</td>
+                                <td class="tdcontent"><input type="text" id="srh_code" name="srh_code" class="p_txt"></td>
+                                <td class="tdname">名称</td>
+                                <td class="tdcontent"><input type="text" id="srh_text" name="srh_text" class="p_txt"></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">
+                        <!--列表部分-->
+                        <table id="grid-table"></table>
+                        <div id="grid-pager"></div>
+                    </div>
 				</div>
 			</div>
 

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

@@ -6,7 +6,11 @@
 
 <%@ include file="../layouts/header.jsp"%>
 <link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/static/js/common/zTree_v3/css/zTreeStyle/zTreeStyle.css" />
+<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/static/js/common/bootstrap-select/css/bootstrap-select.min.css" />
 <script type="text/javascript" src="<%=request.getContextPath()%>/static/js/common/zTree_v3/js/jquery.ztree.all-3.5.min.js"></script>
+<script type="text/javascript" src="<%=request.getContextPath()%>/static/js/common/bootstrap-select/js/bootstrap-select.min.js"></script>
+<script type="text/javascript" src="<%=request.getContextPath()%>/static/js/common/bootstrap-select/js/i18n/defaults-zh_CN.min.js"></script>
+
 <script src="<%=base%>/static/js/frame/menu.js"></script>
 </head>
 <body class="p_body">
@@ -95,7 +99,7 @@
 								<div class="form-group">
 									<label class="col-sm-2 control-label" for="leaf">ÀàÐÍ</label>
 									<div class="col-sm-9">
-										<select class="form-control" id="leaf" name="leaf">
+										<select class="selectpicker form-control" id="leaf" name="leaf">
 											<option value="N">Ŀ¼</option>
 											<option value="Y">Ò³Ãæ</option>
 										</select>

+ 135 - 0
gkaqv2/trunk/modules/web/src/main/webapp/WEB-INF/view/frame/role.jsp

@@ -0,0 +1,135 @@
+<%@ page language="java" contentType="text/html;charset=GBK" pageEncoding="GBK"%>
+<!DOCTYPE html>
+<html>
+<head>
+<title>角色管理</title>
+
+<%@ include file="../layouts/header.jsp"%>
+<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/static/js/common/zTree_v3/css/zTreeStyle/zTreeStyle.css" />
+<script type="text/javascript" src="<%=request.getContextPath()%>/static/js/common/zTree_v3/js/jquery.ztree.all-3.5.min.js"></script>
+<script src="<%=base%>/static/js/frame/role.js"></script>
+</head>
+<body class="p_body">
+	<div class="easyui-layout" data-options="fit:true">
+		<!-- 头部 -->
+		<div id="regionNorth" data-options="region:'north'" class="regionNorthStyle">
+			<%@ include file="../layouts/navbar.jsp"%>
+		</div>
+		<!-- 左边部分 -->
+		<div id="regionWest" data-options="region:'west'" class="regionWestStyle">
+			<%@ include file="../layouts/sidebar.jsp"%>
+		</div>
+		<!-- 底部 -->
+		<div id="regionFooter" data-options="region:'south'" class="regionFooterStyle">
+			<%@ include file="../layouts/footer.jsp"%>
+		</div>
+		<!-- 内容部分 -->
+		<div id="regionCenter" data-options="region:'center'" class="regionCenterStyle">
+			<div class="p_all">
+				<div class="p_block">
+					<div class="p_headdiv">
+						<div class="p_headblock">
+							<div class="p_headleft">角色管理</div>
+						</div>
+					</div>
+					<div class="p_buttondiv">
+						<div class="p_buttonbg">
+							<img class="p_buttonimg" src="<%=base%>/static/images/list/add.png" onclick="addInfo()" title="新增" />
+						</div>
+						<div class="p_buttonbg">
+							<img class="p_buttonimg" src="<%=base%>/static/images/list/delete.png" onclick="delInfo()" title="删除" />
+						</div>
+						<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/search.png" onclick="showSearch()" title="查询" />
+						</div>
+					</div>
+                    <div class="p_searchdiv">
+                        <table class="tabsearch">
+                            <tr class="trsearch">
+                                <td class="tdname">角色编码</td>
+                                <td class="tdcontent"><input type="text" id="srh_code" name="srh_code" class="p_txt"></td>
+                                <td class="tdname">角色名称</td>
+                                <td class="tdcontent"><input type="text" id="srh_name" name="srh_name" class="p_txt"></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">
+                        <!--列表部分-->
+                        <table id="grid-table"></table>
+                        <div id="grid-pager"></div>
+                    </div>
+                </div>
+			</div>
+
+			<div class="modal fade" id="editWin" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
+				<div class="modal-dialog">
+					<div class="modal-content">
+						<div class="modal-header">
+							<button type="button" class="close" data-dismiss="modal">
+								<span aria-hidden="true">&times;</span><span class="sr-only">Close</span>
+							</button>
+							<h6 class="modal-title" id="myModalLabel"></h6>
+						</div>
+						<!-- form 表单信息 -->
+						<div class="modal-body">
+							<form class="form-horizontal" id="editForm" method="post" onsubmit="return false;">
+								<input type="hidden" id="id" name="id">
+                                <input type="hidden" id="menuBtnRef" name="menuBtnRef">
+								<div class="form-group">
+									<label class="col-sm-2 control-label" for="name">角色名称</label>
+									<div class="col-sm-9">
+										<input class="form-control" id="name" name="name" type="text" />
+									</div>
+								</div>
+								<div class="form-group">
+									<label class="col-sm-2 control-label" for="code">角色编码</label>
+									<div class="col-sm-9">
+										<input class="form-control" id="code" name="code" type="text" />
+									</div>
+								</div>
+								<div class="form-group">
+									<label class="col-sm-2 control-label" for="remark">备注</label>
+									<div class="col-sm-9">
+										<input class="form-control" id="remark" name="remark" type="text" />
+									</div>
+								</div>
+                                <div class="form-group">
+                                    <label class="col-sm-2 control-label" for="sortno">序号</label>
+                                    <div class="col-sm-9">
+                                        <input class="form-control" id="sortno" name="sortno" type="text" />
+                                    </div>
+                                </div>
+                                <div class="form-group">
+                                    <label class="col-sm-2 control-label" for="menuTree">关联菜单及按钮</label>
+                                    <div class="col-sm-9">
+                                    	<div class="form-control" style="height: 200px;  overflow-x: auto; overflow-y: scroll;">
+                                            <div id="menuTree" class="ztree"></div>
+                                        </div>
+                                    </div>
+                                </div>
+								<div class="row">
+									<div class="center-block" style="width: 160px;">
+										<button class="btn btn-success btn-round btn-sm" onclick="save()">
+											<i class="glyphicon glyphicon-ok"></i> 保存
+										</button>
+										<button class="btn btn-grey btn-round btn-sm" onclick="closeWin()">
+											<i class="glyphicon glyphicon-remove"></i> 关闭
+										</button>
+									</div>
+								</div>
+							</form>
+						</div>
+						<!-- form 表单信息 -->
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+</body>
+</html>

+ 2 - 1
gkaqv2/trunk/modules/web/src/main/webapp/WEB-INF/view/layouts/sidebar.jsp

@@ -6,4 +6,5 @@
 &emsp;&emsp;<a href="#" onclick="linkUrl('dict')">字典管理</a><br>
 &emsp;&emsp;<a href="#" onclick="linkUrl('xzqh')">行政区划管理</a><br>
 &emsp;&emsp;<a href="#" onclick="linkUrl('param')">参数管理</a><br>
-&emsp;&emsp;<a href="#" onclick="linkUrl('org')">组织管理</a><br>
+&emsp;&emsp;<a href="#" onclick="linkUrl('org')">组织管理</a><br>
+&emsp;&emsp;<a href="#" onclick="linkUrl('role')">角色管理</a><br>

+ 9 - 3
gkaqv2/trunk/modules/web/src/main/webapp/static/js/common/common.js

@@ -305,8 +305,14 @@ function hideModelDialog(modelId) {
 
 function loadComboBox(data, select) {
     var optionStr = "";
-    $.each(data, function() {
-        optionStr += "<option value='" + this.optVal + "' data-tokens='" + this.optName + "'>" + this.optName + "</option>";
-    });
+    if ($(select).attr("data-live-search")) {
+        $.each(data, function() {
+            optionStr += "<option value='" + this.optVal + "' data-tokens='" + this.optName + "'>" + this.optName + "</option>";
+        });
+    } else {
+        $.each(data, function() {
+            optionStr += "<option value='" + this.optVal + "'>" + this.optName + "</option>";
+        });
+    }
     $(select).append(optionStr);
 }

+ 142 - 84
gkaqv2/trunk/modules/web/src/main/webapp/static/js/frame/dict.js

@@ -1,99 +1,161 @@
-var dictTree;
-// zTree的参数配置,setting主要是设置一些tree的属性,是本地数据源,还是远程,动画效果,是否含有复选框等等
-var setting = {
-    // 复选框
-    check : {
-        enable : true,
-        chkboxType : {
-            "Y" : "",
-            "N" : ""
-        }
-    },
-    async : {
-        enable : true,
-        type : 'post',
-        url : basePath + "/dict/list"
-    },
-    data : {
-        // 简单的数据源
-        simpleData : {
-            enable : true,
-            idKey : "id",
-            pIdKey : "pid",
-            rootPId : 0
-        },
-        key: {
-            name: "text"
-        }
-    }
-};
+var grid_selector = "#grid-table";
+var pager_selector = "#grid-pager";
 
 $(document).ready(function() {
-    // 初始化zTree对象
-    dictTree = $.fn.zTree.init($("#dictTree"), setting);
+    initGrid();
 });
 
 /**
+ * 初始化Grid
+ */
+function initGrid() {
+    resizePageGrid(grid_selector);
+    // 数据表格初始化
+    $(grid_selector).jqGrid({
+        url : basePath + '/dict/list',
+        mtype : "POST", // 提交方式
+        datatype : "json",
+        height : "auto",
+        colNames : [
+                '唯一标识', '编码', '名称', '编码值', '上级', '上级编码', '上级名称', '是否末级', '排序', '备注'
+        ],
+        colModel : [
+                {
+                    name : 'id',
+                    index : 'id',
+                    key : true,
+                    hidden : true,
+                    sortable : false
+                }, {
+                    name : 'code',
+                    index : 'code',
+                    sortable : false
+                }, {
+                    name : 'text',
+                    index : 'text',
+                    sortable : false
+                }, {
+                    name : 'val',
+                    index : 'val',
+                    sortable : false
+                }, {
+                    name : 'pid',
+                    index : 'pid',
+                    hidden : true,
+                    sortable : false
+                }, {
+                    name : 'pcode',
+                    index : 'pcode',
+                    sortable : false
+                }, {
+                    name : 'ptext',
+                    index : 'ptext',
+                    sortable : false
+                }, {
+                    name : 'leaf',
+                    index : 'leaf',
+                    sortable : false
+                }, {
+                    name : 'sortno',
+                    index : 'sortno',
+                    sortable : false
+                }, {
+                    name : 'remark',
+                    index : 'remark',
+                    sortable : false
+                }
+        ],
+        rowNum : _rowNum, // 每页显示记录数
+        rowList : _rowList, // 用于改变显示行数的下拉列表框的元素数组。
+        pager : pager_selector, // 定义翻页用的导航栏
+        rownumbers : true,
+        altRows : true, // 设置为交替行表格,默认为false
+        multiselect : true, // 可以多选
+        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 = dictTree.getCheckedNodes(true);
-    if (nodes.length > 1) {
+    // 清空表单信息
+    comClearFormData("#editForm");
+    $('#leaf').selectpicker('refresh');
+
+    //获取选择行
+    var ids = getMultiData(grid_selector);
+    if (ids.indexOf(",") != -1) {
         layer.alert("请选择一条记录!");
         return;
-    } else if (nodes.length == 1) {
-        var node = nodes[0];
-        if (node.leaf == 'Y') { // 末级节点
+    } else if (!isNull(ids) && ids.indexOf(",") == -1) {
+        var data = $(grid_selector).jqGrid('getRowData', ids);
+        if (data.leaf == 'Y') { // 末级节点
             layer.alert("只能在非末级编码下新增!");
             return;
-        } else { // 非末级节点
-            // 清空表单信息
-            comClearFormData("#editForm");
-            $("#pid").val(node.id);
-            $("#ptext").val(node.text);
-            $("#pcode").val(node.code);
-            // 弹出模态框
-            showModelDialog("editWin", "新增");
         }
-    } else { // 根级节点
-        // 清空表单信息
-        comClearFormData("#editForm");
-        // 弹出模态框
-        showModelDialog("editWin", "新增");
+        $("#pid").val(data.id);
+        $("#pcode").val(data.code);
+        $("#ptext").val(data.text);
     }
+    // 弹出模态框
+    showModelDialog("editWin", "新增");
 };
 
 /**
  * 编辑
  */
 function editInfo() {
-    // 获取勾选节点
-    var nodes = dictTree.getCheckedNodes(true);
-    if (nodes.length != 1) {
-        layer.alert("请选择一条记录!");
-        return;
+    // 获取选择行
+    var ids = getMultiData(grid_selector);
+    if (isNull(ids) || ids.indexOf(",") != -1) {
+        layer.alert("请选择且只选择一条记录");
     } else {
-        var node = nodes[0];
-        var pnode = node.getParentNode();
         $.ajax({
             type : 'POST',
             dataType : "json",
             data : {
-                "id" : node.id
+                "id" : ids
             },
             url : basePath + '/dict/getRecord',
             success : function(data) {
-                if (!isNull(pnode)) {
-                    $("#pid").val(pnode.id);
-                    $("#pcode").val(pnode.code);
-                    $("#ptext").val(pnode.text);
-                }
+                var selData = $(grid_selector).jqGrid('getRowData', ids);
+                $("#pid").val(selData.pid);
+                $("#pcode").val(selData.pcode);
+                $("#ptext").val(selData.ptext);
                 $("#id").val(data.id);
                 $("#text").val(data.text);
                 $("#code").val(data.code);
                 $("#val").val(data.val);
-                $("#leaf").val(data.leaf);
+                $("#leaf").selectpicker('val', data.leaf);
                 $("#sortno").val(data.sortno);
                 $("#remark").val(data.remark);
                 showModelDialog("editWin", "编辑");
@@ -109,20 +171,10 @@ function editInfo() {
  * 删除
  */
 function delInfo() {
-    // 获取选择节点
-    var nodes = dictTree.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].text;
-        }
-        layer.confirm('删除所选记录及其下级记录:<br>' + chkNames, {
+    // 获取选择行
+    var ids = getMultiData(grid_selector);
+    if (!isNull(ids)) {
+        layer.confirm('确定删除所选记录及其下级记录吗?', {
             icon : 3,
             title : '提示'
         }, function(index) {
@@ -130,12 +182,12 @@ function delInfo() {
                 type : 'POST',
                 dataType : "json",
                 data : {
-                    "ids" : chkIds
+                    "ids" : ids
                 },
                 url : basePath + '/dict/delRecodes',
                 success : function(data) {
                     layer.close(index);
-                    dictTree.reAsyncChildNodes(null, "refresh");
+                    searchRecord();
                 },
                 error : function(XMLHttpRequest, textStatus, errorThrown) {
                     layer.close(index);
@@ -149,10 +201,16 @@ function delInfo() {
 };
 
 /**
- * 刷新
+ * 查询
  */
-function refresh() {
-    dictTree.reAsyncChildNodes(null, "refresh");
+function searchRecord() {
+    var srh_pcode = $("#srh_pcode").val();
+    var srh_code = $("#srh_code").val();
+    var srh_text = encodeURI(encodeURI($("#srh_text").val()));
+    $(grid_selector).jqGrid('setGridParam', {
+        url : basePath + "/dict/list?pcode=" + srh_pcode + "&code=" + srh_code + "&text=" + srh_text,
+        page : 1
+    }).trigger("reloadGrid");
 };
 
 /**
@@ -169,7 +227,7 @@ function save() {
             if (data && data.success == true) {
                 layer.alert("数据已成功保存!");
                 closeWin();
-                dictTree.reAsyncChildNodes(null, "refresh");
+                searchRecord();
             } else {
                 layer.alert("数据保存失败!");
             }

+ 188 - 0
gkaqv2/trunk/modules/web/src/main/webapp/static/js/frame/dict.js.bak

@@ -0,0 +1,188 @@
+var dictTree;
+// zTree的参数配置,setting主要是设置一些tree的属性,是本地数据源,还是远程,动画效果,是否含有复选框等等
+var setting = {
+    // 复选框
+    check : {
+        enable : true,
+        chkboxType : {
+            "Y" : "",
+            "N" : ""
+        }
+    },
+    async : {
+        enable : true,
+        type : 'post',
+        url : basePath + "/dict/list"
+    },
+    data : {
+        // 简单的数据源
+        simpleData : {
+            enable : true,
+            idKey : "id",
+            pIdKey : "pid",
+            rootPId : 0
+        },
+        key: {
+            name: "text"
+        }
+    }
+};
+
+$(document).ready(function() {
+    // 初始化zTree对象
+    dictTree = $.fn.zTree.init($("#dictTree"), setting);
+});
+
+/**
+ * 新增
+ */
+function addInfo() {
+    // 获取勾选节点
+    var nodes = dictTree.getCheckedNodes(true);
+    if (nodes.length > 1) {
+        layer.alert("请选择一条记录!");
+        return;
+    } else if (nodes.length == 1) {
+        var node = nodes[0];
+        if (node.leaf == 'Y') { // 末级节点
+            layer.alert("只能在非末级编码下新增!");
+            return;
+        } else { // 非末级节点
+            // 清空表单信息
+            comClearFormData("#editForm");
+            $("#pid").val(node.id);
+            $("#ptext").val(node.text);
+            $("#pcode").val(node.code);
+            // 弹出模态框
+            showModelDialog("editWin", "新增");
+        }
+    } else { // 根级节点
+        // 清空表单信息
+        comClearFormData("#editForm");
+        // 弹出模态框
+        showModelDialog("editWin", "新增");
+    }
+};
+
+/**
+ * 编辑
+ */
+function editInfo() {
+    // 获取勾选节点
+    var nodes = dictTree.getCheckedNodes(true);
+    if (nodes.length != 1) {
+        layer.alert("请选择一条记录!");
+        return;
+    } else {
+        var node = nodes[0];
+        var pnode = node.getParentNode();
+        $.ajax({
+            type : 'POST',
+            dataType : "json",
+            data : {
+                "id" : node.id
+            },
+            url : basePath + '/dict/getRecord',
+            success : function(data) {
+                if (!isNull(pnode)) {
+                    $("#pid").val(pnode.id);
+                    $("#pcode").val(pnode.code);
+                    $("#ptext").val(pnode.text);
+                }
+                $("#id").val(data.id);
+                $("#text").val(data.text);
+                $("#code").val(data.code);
+                $("#val").val(data.val);
+                $("#leaf").val(data.leaf);
+                $("#sortno").val(data.sortno);
+                $("#remark").val(data.remark);
+                showModelDialog("editWin", "编辑");
+            },
+            error : function(XMLHttpRequest, textStatus, errorThrown) {
+                layer.alert("error:" + errorThrown);
+            }
+        });
+    }
+};
+
+/**
+ * 删除
+ */
+function delInfo() {
+    // 获取选择节点
+    var nodes = dictTree.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].text;
+        }
+        layer.confirm('删除所选记录及其下级记录:<br>' + chkNames, {
+            icon : 3,
+            title : '提示'
+        }, function(index) {
+            $.ajax({
+                type : 'POST',
+                dataType : "json",
+                data : {
+                    "ids" : chkIds
+                },
+                url : basePath + '/dict/delRecodes',
+                success : function(data) {
+                    layer.close(index);
+                    dictTree.reAsyncChildNodes(null, "refresh");
+                },
+                error : function(XMLHttpRequest, textStatus, errorThrown) {
+                    layer.close(index);
+                    layer.alert("error:" + errorThrown);
+                }
+            });
+        });
+    } else {
+        layer.alert("请选择记录");
+    }
+};
+
+/**
+ * 刷新
+ */
+function refresh() {
+    dictTree.reAsyncChildNodes(null, "refresh");
+};
+
+/**
+ * 保存数据
+ */
+function save() {
+    $.ajax({
+        type : "post",
+        url : basePath + '/dict/save',
+        dataType : 'json',
+        data : $('#editForm').serialize(), // 表单序列化,获取数据
+        success : function(data) {
+            // 成功删除后刷新页面
+            if (data && data.success == true) {
+                layer.alert("数据已成功保存!");
+                closeWin();
+                dictTree.reAsyncChildNodes(null, "refresh");
+            } else {
+                layer.alert("数据保存失败!");
+            }
+        }, // 操作成功后的操作!data是后台传过来的值
+        error : function(XMLHttpRequest, textStatus, errorThrown) {
+            layer.alert("error:" + errorThrown);
+        }
+    });
+}
+
+/**
+ * 关闭窗口
+ */
+function closeWin() {
+    hideModelDialog("editWin");
+}

+ 4 - 2
gkaqv2/trunk/modules/web/src/main/webapp/static/js/frame/menu.js

@@ -55,6 +55,7 @@ function addInfo() {
         } else { // 非末级菜单节点
             // 清空菜单表单信息
             comClearFormData("#editForm");
+            $('#leaf').selectpicker('refresh');
             $("#pid").val(node.id);
             $("#pname").val(node.name);
             $("#pcode").val(node.code);
@@ -64,6 +65,7 @@ function addInfo() {
     } else { // 根级菜单节点
         // 清空菜单表单信息
         comClearFormData("#editForm");
+        $('#leaf').selectpicker('refresh');
         // 弹出菜单模态框
         showModelDialog("editWin", "新增");
     }
@@ -120,7 +122,7 @@ function editInfo() {
                     $("#id").val(data.id);
                     $("#name").val(data.name);
                     $("#code").val(data.code);
-                    $("#leaf").val(data.leaf);
+                    $("#leaf").selectpicker('val', data.leaf);
                     $("#url").val(data.url);
                     $("#sortno").val(data.sortno);
                     showModelDialog("editWin", "编辑");
@@ -150,7 +152,7 @@ function delInfo() {
             chkIds += nodes[i].id;
             chkNames += nodes[i].name;
         }
-        layer.confirm('删除所选记录及其下级记录:<br>' + chkNames, {
+        layer.confirm('确定删除以下记录及其下级记录吗:<br>' + chkNames, {
             icon : 3,
             title : '提示'
         }, function(index) {

+ 7 - 4
gkaqv2/trunk/modules/web/src/main/webapp/static/js/frame/org.js

@@ -124,9 +124,12 @@ function initGrid() {
 function addInfo() {
     // 清空表单信息
     comClearFormData("#editForm");
-    $('#orgType').selectpicker('val', '');
-    $('#szd').selectpicker('val', '');
-    $('#xzqh').selectpicker('val', '');
+    $('#orgType').selectpicker('refresh');
+    $('#szd').selectpicker('refresh');
+    $('#xzqh').selectpicker('refresh');
+//    $('#orgType').selectpicker('val', '');
+//    $('#szd').selectpicker('val', '');
+//    $('#xzqh').selectpicker('val', '');
 
     //获取选择行
     var ids = getMultiData(grid_selector);
@@ -190,7 +193,7 @@ function delInfo() {
     // 获取选择行
     var ids = getMultiData(grid_selector);
     if (!isNull(ids)) {
-        layer.confirm('确定删除吗?', {
+        layer.confirm('确定删除所选记录及其下级记录吗?', {
             icon : 3,
             title : '提示'
         }, function(index) {

+ 282 - 0
gkaqv2/trunk/modules/web/src/main/webapp/static/js/frame/role.js

@@ -0,0 +1,282 @@
+var grid_selector = "#grid-table";
+var pager_selector = "#grid-pager";
+var menuTree;
+//zTree的参数配置,setting主要是设置一些tree的属性,是本地数据源,还是远程,动画效果,是否含有复选框等等
+var setting = {
+ // 复选框
+ check : {
+     enable : true
+ },
+ async : {
+     enable : true,
+     type : 'post',
+     url : basePath + "/menu/list"
+ },
+ data : {
+     // 简单的数据源
+     simpleData : {
+         enable : true,
+         idKey : "id",
+         pIdKey : "pid",
+         rootPId : 0
+     // 根节点
+     }
+ }
+};
+
+$(document).ready(function() {
+    initGrid();
+    // 初始化zTree对象
+    menuTree = $.fn.zTree.init($("#menuTree"), setting);
+});
+
+/**
+ * 初始化Grid
+ */
+function initGrid() {
+    resizePageGrid(grid_selector);
+    // 数据表格初始化
+    $(grid_selector).jqGrid({
+        url : basePath + '/role/list',
+        mtype : "POST", // 提交方式
+        datatype : "json",
+        height : "auto",
+        colNames : [
+                '唯一标识', '角色编码', '角色名称', '排序', '备注'
+        ],
+        colModel : [
+                {
+                    name : 'id',
+                    index : 'id',
+                    key : true,
+                    hidden : true,
+                    sortable : false
+                }, {
+                    name : 'code',
+                    index : 'code',
+                    sortable : false
+                }, {
+                    name : 'name',
+                    index : 'name',
+                    sortable : false
+                }, {
+                    name : 'sortno',
+                    index : 'sortno',
+                    sortable : false
+                }, {
+                    name : 'remark',
+                    index : 'remark',
+                    sortable : false
+                }
+        ],
+        rowNum : _rowNum, // 每页显示记录数
+        rowList : _rowList, // 用于改变显示行数的下拉列表框的元素数组。
+        pager : pager_selector, // 定义翻页用的导航栏
+        rownumbers : true,
+        altRows : true, // 设置为交替行表格,默认为false
+        multiselect : true, // 可以多选
+        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() {
+    // 清空表单信息
+    comClearFormData("#editForm");
+    menuTree.checkAllNodes(false);
+    menuTree.expandAll(false);
+
+    //获取选择行
+    var ids = getMultiData(grid_selector);
+    if (ids.indexOf(",") != -1) {
+        layer.alert("请选择一条记录!");
+        return;
+    } else if (!isNull(ids) && ids.indexOf(",") == -1) {
+        var data = $(grid_selector).jqGrid('getRowData', ids);
+    }
+    // 弹出模态框
+    showModelDialog("editWin", "新增");
+};
+
+/**
+ * 编辑
+ */
+function editInfo() {
+    // 获取选择行
+    var ids = getMultiData(grid_selector);
+    if (isNull(ids) || ids.indexOf(",") != -1) {
+        layer.alert("请选择且只选择一条记录");
+    } else {
+        $.ajax({
+            type : 'POST',
+            dataType : "json",
+            data : {
+                "id" : ids
+            },
+            url : basePath + '/role/getRecord',
+            success : function(data) {
+                var selData = $(grid_selector).jqGrid('getRowData', ids);
+                $("#id").val(data.id);
+                $("#code").val(data.code);
+                $("#name").val(data.name);
+                $("#remark").val(data.remark);
+                $("#sortno").val(data.sortno);
+                $("#menuBtnRef").val(data.menuBtnRef);
+                menuTree.checkAllNodes(false);
+                menuTree.expandAll(false);
+                if (!isNull(data.menuBtnRef)) {
+                    var menuBtnRefs = data.menuBtnRef.split(";");
+                    var menuIds = menuBtnRefs[0].split(",");
+                    for (var i = 0; i < menuIds.length; i++) {
+                        var node = menuTree.getNodeByParam("id", menuIds[i], null);
+                        if (!isNull(node)) {
+                            node.checked = "true";
+                            menuTree.checkNode(node, true, true);
+                        }
+                    }
+                    if (menuBtnRefs.length > 1) {
+                        var btnIds = menuBtnRefs[1].split(",");
+                        for (var i = 0; i < btnIds.length; i++) {
+                            var node = menuTree.getNodeByParam("id", btnIds[i], null);
+                            if (!isNull(node)) {
+                                node.checked = "true";
+                                menuTree.checkNode(node, true, true);
+                            }
+                        }
+                    }
+                    
+                }
+                showModelDialog("editWin", "编辑");
+            },
+            error : function(XMLHttpRequest, textStatus, errorThrown) {
+                layer.alert("error:" + errorThrown);
+            }
+        });
+    }
+};
+
+/**
+ * 删除
+ */
+function delInfo() {
+    // 获取选择行
+    var ids = getMultiData(grid_selector);
+    if (!isNull(ids)) {
+        layer.confirm('确定删除所选记录及其下级记录吗?', {
+            icon : 3,
+            title : '提示'
+        }, function(index) {
+            $.ajax({
+                type : 'POST',
+                dataType : "json",
+                data : {
+                    "ids" : ids
+                },
+                url : basePath + '/role/delRecodes',
+                success : function(data) {
+                    layer.close(index);
+                    searchRecord();
+                },
+                error : function(XMLHttpRequest, textStatus, errorThrown) {
+                    layer.close(index);
+                    layer.alert("error:" + errorThrown);
+                }
+            });
+        });
+    } else {
+        layer.alert("请选择记录");
+    }
+};
+
+/**
+ * 查询
+ */
+function searchRecord() {
+    var srh_code = $("#srh_code").val();
+    var srh_name = encodeURI(encodeURI($("#srh_name").val()));
+    $(grid_selector).jqGrid('setGridParam', {
+        url : basePath + "/role/list?code=" + srh_code + "&name=" + srh_name,
+        page : 1
+    }).trigger("reloadGrid");
+};
+
+/**
+ * 保存数据
+ */
+function save() {
+    var nodes = menuTree.getCheckedNodes(true);
+    if (nodes.length > 0) {
+        var chkMenuIds = "";
+        var chkBtnIds = "";
+        for (var i = 0; i < nodes.length; i++) {
+            if (nodes[i].leaf == 'B') { // 按钮节点
+                if (chkBtnIds != "") {
+                    chkBtnIds += ",";
+                }
+                chkBtnIds += nodes[i].id;
+            } else { // 菜单节点
+                if (chkMenuIds != "") {
+                    chkMenuIds += ",";
+                }
+                chkMenuIds += nodes[i].id;
+            }
+        }
+        $("#menuBtnRef").val(chkMenuIds + ";" + chkBtnIds);
+    }
+    $.ajax({
+        type : "post",
+        url : basePath + '/role/save',
+        dataType : 'json',
+        data : $('#editForm').serialize(), // 表单序列化,获取数据
+        success : function(data) {
+            // 成功删除后刷新页面
+            if (data && data.success == true) {
+                layer.alert("数据已成功保存!");
+                closeWin();
+                searchRecord();
+            } else {
+                layer.alert("数据保存失败!");
+            }
+        }, // 操作成功后的操作!data是后台传过来的值
+        error : function(XMLHttpRequest, textStatus, errorThrown) {
+            layer.alert("error:" + errorThrown);
+        }
+    });
+}
+
+/**
+ * 关闭窗口
+ */
+function closeWin() {
+    hideModelDialog("editWin");
+}