六、模块实现:角色管理模块(3)

    1. 角色管理模块
      1. 角色model

在包“com.example.demo.model”中的“Role”类已经创建好,参见6.2.1。

在包“com.example.demo.model”中再新建一个“UserRole”类(因为需要用到用户角色关联表,所以用户角色model先创建好),代码如下:

package com.example.demo.model;

 

import com.baomidou.mybatisplus.annotations.TableId;

import com.baomidou.mybatisplus.annotations.TableName;

 

@TableName("t_sys_role_user")//数据库对应表名,关联表

public class UserRole {

   

    @TableId

    private String id;//@TableId表示主键,与字段名称大小写一致

   

    private String sys_user_id;//与字段名称大小写一致

    private String sys_role_id;//与字段名称大小写一致

   

    public String getId() {

         return id;

    }

    public void setId(String id) {

         this.id = id;

    }

    public String getSys_user_id() {

         return sys_user_id;

    }

    public void setSys_user_id(String sys_user_id) {

         this.sys_user_id = sys_user_id;

    }

    public String getSys_role_id() {

         return sys_role_id;

    }

    public void setSys_role_id(String sys_role_id) {

         this.sys_role_id = sys_role_id;

    }

   

}

 

      1. 角色vo

在包“com.example.demo.vo”中新建一个“RoleVO”类(如果自己添加类时,只须定义好属性,然后利用eclipse的生成getter和setter功能,直接生成代码),代码如下:

package com.example.demo.vo;

 

public class RoleVO {

 

    private String id;

   

    private String name;

 

    public String getId() {

         return id;

    }

 

    public void setId(String id) {

         this.id = id;

    }

 

    public String getName() {

         return name;

    }

 

    public void setName(String name) {

         this.name = name;

    }

   

}

 

      1. 角色mapper类以及xml文件

在包“com.example.demo.mapper”中新建一个“RoleMapper”接口,代码如下:

package com.example.demo.mapper;

 

import java.util.List;

 

import org.apache.ibatis.annotations.Mapper;

import com.baomidou.mybatisplus.mapper.BaseMapper;

import com.baomidou.mybatisplus.plugins.pagination.Pagination;

import com.example.demo.model.Role;

import com.example.demo.vo.RoleVO;

 

@Mapper

public interface  RoleMapper  extends BaseMapper<Role>{

     List<RoleVO> selectRoleListPage(Pagination page ,RoleVO roleVO);

}

在“src/main/resources”中的“mapper”文件夹中,新建一个文件,命名为“RoleMapper.xml”,代码如下:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

 

<!-- 指明当前xml对应的Mapper -->

<mapper namespace="com.example.demo.mapper.RoleMapper">

    <!-- 多表查询,Select as后面的名称必须与RoleVO属性名大小写一致  -->

    <select id="selectRoleListPage" parameterType="com.example.demo.vo.RoleVO" resultType="com.example.demo.vo.RoleVO">

        SELECT

            r.id as id,

            r.name as name

        FROM

            t_sys_role r

        WHERE 1=1

        <if test="name != null">

            and r.name like  concat('%',#{name},'%')

        </if>      

    </select>    

</mapper>

在包“com.example.demo.mapper”中再新建一个“UserRoleMapper”接口,代码如下:

package com.example.demo.mapper;

 

import org.apache.ibatis.annotations.Mapper;

import com.baomidou.mybatisplus.mapper.BaseMapper;

import com.example.demo.model.UserRole;

 

@Mapper

public interface  UserRoleMapper  extends BaseMapper<UserRole>{

}

 

      1. 角色service

在包“com.example.demo.service”中新建一个“RoleService”类,代码如下:

package com.example.demo.service;

 

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import org.springframework.transaction.annotation.Transactional;

import org.springframework.util.StringUtils;

import com.baomidou.mybatisplus.mapper.EntityWrapper;

import com.baomidou.mybatisplus.plugins.Page;

import com.example.demo.mapper.RoleMapper;

import com.example.demo.mapper.UserRoleMapper;

import com.example.demo.model.Role;

import com.example.demo.model.User;

import com.example.demo.model.UserRole;

import com.example.demo.util.Convert;

import com.example.demo.util.SnowflakeIdWorker;

import com.example.demo.vo.DataTableResult;

import com.example.demo.vo.RoleVO;

 

@Service

public class RoleService {

 

    @Autowired

    private RoleMapper roleMapper;// 注入mapper进行数据操作

   

    @Autowired

    private UserRoleMapper userRoleMapper;// 注入mapper进行数据操作

 

    // 对于执行数据修改的方法加上事务处理

    @Transactional

    public int delete(String ids) {

         // ids,逗号隔开的主键

         List<String> listid = Convert.toListStrArray(ids);

         return roleMapper.deleteBatchIds(listid);

    }

 

    public Role selectById(String id) {

         // roleMapper.selectOne(role),selectOne可以按照其他字段来查询一条记录

         return roleMapper.selectById(id);

    }

 

    // 对于执行数据修改的方法加上事务处理

    @Transactional

    public int updateById(Role role) {

         return roleMapper.updateById(role);

    }

 

    // 对于执行数据修改的方法加上事务处理

    @Transactional

    public int insert(Role role) {

         // 添加雪花主键id

         role.setId(SnowflakeIdWorker.getUUID());

         int n = roleMapper.insert(role);

//           n=1/0; //事务测试

         return n;

    }

   

    /**

     * 采用集成的查询方法

     * @param username

     * @return

     */

    public List<Role> selectList() {

         EntityWrapper<Role> wrapper = new EntityWrapper<Role>();

//      wrapper.like("username", username);//可以多个条件

         return roleMapper.selectList(wrapper);

    }

   

    /**

     * 返回用户拥有的角色

     * @param user

     * @return

     */

    public List<UserRole> selectUserRole(User user){

         EntityWrapper<UserRole> wrapper = new EntityWrapper<UserRole>();

        wrapper.eq("sys_user_id", user.getId());//可以多个条件

         return userRoleMapper.selectList(wrapper);

    }

   

    // 对于执行数据修改的方法加上事务处理

    @Transactional

    public void assignRoles(User user,String ids) {

         //1.清除原有分配

         EntityWrapper<UserRole> wrapper = new EntityWrapper<UserRole>();

        wrapper.eq("sys_user_id", user.getId());//可以多个条件

        userRoleMapper.delete(wrapper);       

         //2.重新插入角色

        if(!StringUtils.isEmpty(ids)) {

        List<String> listrid = Convert.toListStrArray(ids);

        SnowflakeIdWorker idWorker = new SnowflakeIdWorker(0, 0);

             for(String rid:listrid) {

             UserRole uRole=new UserRole();

              uRole.setId(String.valueOf(idWorker.nextId()));

             uRole.setSys_user_id(user.getId());

             uRole.setSys_role_id(rid);

             userRoleMapper.insert(uRole);

             }

        }       

    }

 

    /**

     * 分页查询

     *

     * @param role

     * @return

     */

    public DataTableResult selectRoleListPage(RoleVO roleVO,int start,int length,String orderField,String orderDir) {

         Page<RoleVO> page = null;

         //排序

         if(!StringUtils.isEmpty(orderDir)&&!StringUtils.isEmpty(orderField)) {

             if(orderDir.equals("asc")) {

                  page = new Page<>(start/length + 1, length,orderField,true);// 当前页,每页总条数 构造 page 对象

             }else {

                  page = new Page<>(start/length + 1, length,orderField,false);// 当前页,每页总条数 构造 page 对象

             }

            

         }else {

             page = new Page<>(start/length + 1, length,"id",false);//默认id降序

         }

        page.setRecords(roleMapper.selectRoleListPage(page, roleVO));

       

         DataTableResult result = new DataTableResult();

         result.setRecordsTotal(page.getTotal());

         result.setRecordsFiltered(page.getTotal());

         result.setData(page.getRecords());

         return result;

    }

 

}

这个service除了基本的增删改查和分页查询之外,还扩展了查询用户的角色以及用户的角色分配功能,注意理解代码。

      1. 角色controller

在包“com.example.demo.controller”中新建一个“RoleController”类,代码如下:

package com.example.demo.controller;

 

import java.util.ArrayList;

import java.util.List;

 

import javax.servlet.http.HttpServletRequest;

 

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.util.StringUtils;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

import com.example.demo.model.Role;

import com.example.demo.model.User;

import com.example.demo.model.UserRole;

import com.example.demo.service.RoleService;

import com.example.demo.vo.DataTableResult;

import com.example.demo.vo.Json;

import com.example.demo.vo.RoleVO;

import com.example.demo.vo.ZTreeNode;

 

@Controller

@RequestMapping("/RoleController")

public class RoleController {

 

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

   

    private String prefix = "admin/role";// 页面的路径

 

    @Autowired

    private RoleService roleService;// 注入业务层的service

 

    // 未加入@ResponseBody用来返回数据给页面

    @RequestMapping("view")

    public String view(Model model) {

         return prefix + "/view";

    }

 

    // @ResponseBody,直接通过js异步返回数据给页面

    @RequestMapping("list")

    @ResponseBody

    public DataTableResult list(HttpServletRequest request, RoleVO roleVO) {

         // DataTableResult返回给datatables控件的数据格式

         DataTableResult result = new DataTableResult();

         // 获取分页参数

         int start = Integer.parseInt(request.getParameter("start"));

         int length = Integer.parseInt(request.getParameter("length"));

         // 获取排序字段

         String orderIdx = request.getParameter("order[0][column]");

         // 获取排序字段名

         String orderField = request.getParameter("columns[" + orderIdx + "][name]");

         // 获取排序方式,降序desc或者升序asc

         String orderDir = request.getParameter("order[0][dir]");

         result = roleService.selectRoleListPage(roleVO, start, length, orderField, orderDir);

//       result.setDraw(roleVO.getDraw());

         return result;

    }

 

    // @ResponseBody,直接通过js异步返回数据给页面

    @RequestMapping("insert")

    @ResponseBody

    public Json insert(Role role) {

         Json j = new Json();

         if(roleService.insert(role)>0) {

             j.setSuccess(true);

             j.setMsg("添加成功!");

         }else {

             j.setSuccess(false);

             j.setMsg("添加失败!");

         }

         return j;

    }

 

    // @ResponseBody,直接通过js异步返回数据给页面

    @RequestMapping("update")

    @ResponseBody

    public Json updateById(Role role) {

         Json j = new Json();

         if(roleService.updateById(role)>0) {

             j.setSuccess(true);

             j.setMsg("修改成功!");

         }else {

             j.setSuccess(false);

             j.setMsg("修改失败!");

         }

         return j;

    }

 

    // @ResponseBody,直接通过js异步返回数据给页面

    @RequestMapping("select")

    @ResponseBody

    public Json selectById(Role role) {

         Json j = new Json();

         j.setSuccess(true);

         j.setObj(roleService.selectById(role.getId()));

         return j;

    }

 

    // @ResponseBody,直接通过js异步返回数据给页面

    @RequestMapping("delete")

    @ResponseBody

    public Json delete(HttpServletRequest request) {

         Json j = new Json();

         String ids = request.getParameter("ids");

         if (!StringUtils.isEmpty(ids)) {

             j.setSuccess(true);

             j.setObj("成功删除" + roleService.delete(ids) + "条记录");

         } else {

             j.setSuccess(false);

             j.setMsg("没有需要删除的记录!");

         }

         return j;

    }

 

    /**

     * 获取树形结构

     **/

    @RequestMapping("tree")

    @ResponseBody

    public List<ZTreeNode> getTreeList(HttpServletRequest request, User user) {

         List<Role> roleList = roleService.selectList();

         List<UserRole> userRoleList = roleService.selectUserRole(user);// 按照回传的用户id查询角色

         List<ZTreeNode> list = new ArrayList<ZTreeNode>();

         for (Role p : roleList) {

             ZTreeNode zt = new ZTreeNode();

             zt.setId(p.getId());

             zt.setName(p.getName());

             zt.setOpen(true);

             zt.setIsParent(true);

             // 查询是否已经分配了角色

             for (UserRole r : userRoleList) {

                  if (r.getSys_role_id().equals(p.getId())) {

                      zt.setChecked(true);

                      break;

                  }

             }

             list.add(zt);

         }

         return list;

    }

 

    // @ResponseBody,直接通过js异步返回数据给页面

    @RequestMapping("role")

    @ResponseBody

    public Json role(HttpServletRequest request, User user) {

         Json j = new Json();

         String ids = request.getParameter("ids");

         if (!StringUtils.isEmpty(user.getId())) {

             roleService.assignRoles(user, ids);

             j.setSuccess(true);

             j.setObj("分配角色成功!");

         } else {

             j.setSuccess(false);

             j.setMsg("用户id为空!");

         }

         return j;

    }

 

}

这个controller用到了树形结构数据ZTreeNode,把数据组装成树形结构需要的格式返回给前端,role方法利用前端树形结构返回的选中id值(以逗号隔开进行拼接)进行用户的角色分配。

      1. 角色管理界面

添加权限管理界面,在“admin”文件夹中新建一个文件夹“role”,在“role”文件夹-> 右键->new->file,输入“view.html”(这里的路径主要是由controller的转发方法决定,保持一致即可),代码如下:

<!DOCTYPE html>

<html xmlns:th="http://www.thymeleaf.org">

<head>

<meta charset="utf-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<meta name="renderer" content="webkit">

 

<title>角色管理</title>

 

<meta name="keywords" content="">

<meta name="description" content="">

 

<!--[if lt IE 9]>

    <meta http-equiv="refresh" content="0;ie.html" />

    <![endif]-->

 

<link rel="shortcut icon" href="favicon.ico">

<link th:href="@{/static/css/bootstrap.min.css?v=3.3.6}"

    rel="stylesheet">

<link th:href="@{/static/css/font-awesome.min.css?v=4.4.0}"

    rel="stylesheet">

<link th:href="@{/static/css/animate.css}" rel="stylesheet">

<link th:href="@{/static/css/style.css?v=4.1.0}" rel="stylesheet">

<!-- Data Tables -->

<link

    th:href="@{/static/css/plugins/dataTables/dataTables.bootstrap.css}"

    rel="stylesheet">

<!-- Ztree -->

<link rel="stylesheet"

    th:href="@{/static/css/plugins/ztree/zTreeStyle/zTreeStyle.css}"

    type="text/css">

<!-- toastr -->

<link th:href="@{/static/css/plugins/toastr/toastr.min.css}"

    rel="stylesheet">

</head>

 

<body class="gray-bg">

    <div class="wrapper wrapper-content animated fadeInRight">

         <div class="row">

             <div class="col-sm-12">

                  <div class="ibox float-e-margins">

                      <div class="ibox-title">

                          <h5>角色管理</h5>

                          <div class="ibox-tools">

                               <a class="collapse-link"> <i class="fa fa-chevron-up"></i>

                               </a> <a class="dropdown-toggle" data-toggle="dropdown"

                                   href="table_data_tables.html#"> <i class="fa fa-wrench"></i>

                               </a>

                               <ul class="dropdown-menu dropdown-user">

                                   <li><a href="table_data_tables.html#">选项1</a></li>

                                   <li><a href="table_data_tables.html#">选项2</a></li>

                               </ul>

                               <a class="close-link"> <i class="fa fa-times"></i>

                               </a>

                          </div>

                      </div>

                      <div class="ibox-content">

                          <div class="form-horizontal">

                               <div class="form-group">

                                   <div class="col-sm-4">

                                       <button id="btn_add" class="btn btn-primary btn-sm">

                                            <i class="fa fa-plus"></i>&nbsp;添加

                                       </button>

                                       <button id="btn_del" class="btn btn-danger btn-sm m-l-sm">

                                            <i class="fa fa-remove"></i>&nbsp;删除

                                       </button>

                                       <button id="btn_export" class="btn btn-primary btn-sm m-l-sm" onclick="$('#table').tableExport({type:'excel',escape:'false',tableName:'导出表格',ignoreColumn:[0,3]});"><i class="fa fa-file-excel-o"></i>&nbsp;导出</button>

                                   </div>

                                   <label class="col-sm-1 control-label">搜索:</label>

                                   <div class="col-sm-2">

                                       <select id="searchfield" class="form-control">

                                            <!-- value为查找字段名称 -->

                                            <option value="name">角色名称</option>

                                       </select>

 

                                   </div>

                                   <div class="col-sm-3">

                                       <input id="keyword" type="search" class="form-control"

                                            placeholder="关键字" />

                                   </div>

                                   <div class="col-sm-2">

                                       <button id="btn_search" class="btn btn-primary btn-sm m-l-sm">

                                            <i class="fa fa-search"></i>&nbsp;搜索

                                       </button>

                                   </div>

 

                               </div>

                          </div>

                          <table class="table table-striped table-bordered table-hover"

                               id="table">

                               <thead>

                                   <tr>

                                       <th style="padding-left: 10px;"><input type="checkbox"

                                            id="cb_selectAll" class="input-lg"

                                            style="width: 20px; height: 20px;" /></th>

                                       <th>id</th>

                                       <th>角色名称</th>

                                       <th>操作</th>

                                   </tr>

                               </thead>

                          </table>

                      </div>

                  </div>

             </div>

         </div>

 

    </div>

 

    <!-- 模态窗口 -->

    <div class="modal fade" data-backdrop="static" id="modal" tabindex="-1"

         role="dialog" aria-hidden="true">

         <div class="modal-dialog modal-lg">

             <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>

                      <h2 class="modal-title" id="modaltitle"></h2>

                  </div>

                  <div class="modal-body">

                      <div class="row">

                          <!-- 表单布局 -->

                          <form id="form">

                               <div class="col-md-12">

                                   <div class="form-group">

                                       <label class="col-sm-3 control-label"><font

                                            color="#FF0000">*</font>角色名称:</label>

                                       <div class="col-sm-9">

                                            <!-- 保存修改的主键值 -->

                                            <input type="hidden" name="id" id="id"> <input

                                                class="form-control" type="text" name="name" id="name"

                                                placeholder="请输入角色名称"> <span

                                                class="help-block m-b-none"></span>

                                        </div>

                                   </div>

                               </div>

                          </form>

                          <!-- 表单布局结束 -->

                      </div>

                  </div>

                  <div class="modal-footer">

                      <button type="button" class="btn btn-white" data-dismiss="modal">关闭</button>

                      <button type="button" class="btn btn-primary" id="btn_save">保存</button>

                  </div>

             </div>

         </div>

    </div>

    <!-- 模态窗口结束 -->

 

 

    <!-- 分配权限模态窗口 -->

    <div class="modal fade" data-backdrop="static" id="authormodal"

         tabindex="-1" role="dialog" aria-hidden="true">

         <div class="modal-dialog modal-lg">

             <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>

                      <h2 class="modal-title" id="authormodaltitle">分配权限</h2>

                  </div>

                  <div class="modal-body">

                      <div class="row">

                          <!-- 表单布局 -->

                          <form id="roleform">

                               <div class="col-md-12">

                                   <!-- 保存修改的主键值 -->

                                   <input type="hidden" name="roleid" id="roleid">

                                   <ul id="tree" class="ztree"></ul>

                               </div>

                          </form>

                          <!-- 表单布局结束 -->

                      </div>

                  </div>

                  <div class="modal-footer">

                      <button type="button" class="btn btn-white" data-dismiss="modal">关闭</button>

                      <button type="button" class="btn btn-primary" id="btn_authorsave">保存</button>

                  </div>

             </div>

         </div>

    </div>

    <!-- 模态窗口结束 -->

 

    <!-- 全局js -->

    <script th:src="@{/static/js/jquery.min.js?v=2.1.4}"></script>

    <script th:src="@{/static/js/bootstrap.min.js?v=3.3.6}"></script>

    <script th:src="@{/static/js/plugins/layer/layer.min.js}"></script>

 

    <!-- 自定义js -->

    <script th:src="@{/static/js/content.js}"></script>

 

    <!-- Data Tables -->

    <script th:src="@{/static/js/plugins/dataTables/jquery.dataTables.js}"></script>

    <script

         th:src="@{/static/js/plugins/dataTables/dataTables.bootstrap.js}"></script>

 

    <!-- tableexport -->

    <!--   前端直接导出excel有一定的缺陷,使用后台导出功能更强大

        后台导出:阿里巴巴项目组提供了easyexcel工具类,github地址:https://github.com/alibaba/easyexcel -->

    <script th:src="@{/static/js/plugins/tableexport/tableExport.js}"></script>

    <script th:src="@{/static/js/plugins/tableexport/jquery.base64.js}"></script>

   

    <!-- ztree -->

    <script th:src="@{/static/js/plugins/ztree/jquery.ztree.core.min.js}"></script>

    <script

         th:src="@{/static/js/plugins/ztree/jquery.ztree.excheck.min.js}"></script>

    <!-- Toastr script -->

    <script th:src="@{/static/js/plugins/toastr/toastr.min.js}"></script>

    <!-- jQuery Validation plugin javascript-->

    <script th:src="@{/static/js/plugins/validate/jquery.validate.min.js}"></script>

    <script th:src="@{/static/js/plugins/validate/messages_zh.min.js}"></script>

 

    <!-- Page-Level Scripts -->

    <script>

   

    //表格行中的按钮点击事件

    function edit(id){

    //异步获取数据

    $.ajax({

         type: "get",

         data: {

            id:id,//第一个id为参数名,第二个为参数值

         },

         url: "/RoleController/select",//后台处理地址

         success: function (data) {

            //console.log(data);

            if(data.success){

                 //设置数据

                 $("#id").val(data.obj.id);//修改数据必须有主键值

                 

             $("#name").val(data.obj.name);

             $("#modaltitle").text("修改角色");

             $("#modal").modal("show");

            }else{

                 toastr.error(data.msg, '错误!');

            }

         }

    }); // end ajax

   

    }//end edit

   

    //表格行中的按钮点击事件

    function author(id){

    //异步获取数据

    $.ajax({

         type: "get",

         data: {

            id:id,//第一个id为参数名,第二个为参数值

         },

         url: "/PermissionController/tree",//后台处理地址

         success: function (data) {

             //ztree

              var setting = {

                       check: {

                           enable: true

                       },

                       data: {

                           simpleData: {

                               enable: true

                           }

                       }

              };

              $.fn.zTree.init($("#tree"), setting, data);

              $("#roleid").val(id);//通过隐藏input保存角色id

         $("#authormodal").modal("show");

         }

    }); // end ajax

 

    }

   

        $(document).ready(function () {

        var datatable = $('#table').DataTable({

              "processing": true,

                "serverSide": true,

                "ajax": {

                   url: "/RoleController/list",

                   type:"post",

                   data: function (d) {

                     //把字段名和关键词发送给controller进行查询,自动映射到vo模型的相应属性中

                     d[$('#searchfield').val()]=$('#keyword').val()

                   }

                },  

                "language": {

                     "lengthMenu": "每页 _MENU_ ",

                     "info": " _START_ _END_,共 _TOTAL_ 记录",

                     "zeroRecords": "没有找到记录",

                     "infoEmpty": "暂无记录",

                     "infoFiltered": "( _MAX_ 条记录过滤)",

                     "paginate": {

                         "previous": "上一页",

                         "next": "下一页",

 

                     },

                     "processing": "正在加载..."

                 },

                 "autoWidth": false,

                 "pageLength": 2,

                 "lengthChange": false,

                 "searching": false,

                 "columns": [

 

                      {"data":"id","orderable": false,

                          "render": function ( data, type, full, meta ) {

                                   return '<input type="checkbox" value="'+data+'" class="input-lg" style="width:20px;height:20px;" />';

                               }

                      },

                      {"data":"id","name":"id"},

                      {"data":"name","name":"name"},

                      //有排序功能必须指定name为字段名称

                      {"data":"id","orderable": false,

                          "render": function ( data, type, full, meta ) {

                                   return '<button id="btn_edit" class="btn btn-primary btn-sm" οnclick="edit(\''+data+'\')"><i class="fa fa-edit"></i>&nbsp;查看修改</button> <button id="btn_author" class="btn btn-primary btn-sm" οnclick="author(\''+data+'\')"><i class="glyphicon glyphicon-list-alt"></i>&nbsp;分配权限</button>';

                               }

                      },

                  ],

                  "order": [

                     [1, 'desc']

                  ]//默认排序

        });

       

        $("#btn_search").click(function(){

              datatable.ajax.reload();//根据关键词重新加载数据

        });

       

        //全选

        $("#cb_selectAll").click(function(){

              if ($("#cb_selectAll").get(0).checked) {

                    $("#table tbody :checkbox").prop("checked", true);

                }else{

                   $("#table tbody :checkbox").prop("checked", false);

                }              

        });

       

        //toastr选项

        toastr.options = {

           "positionClass": "toast-bottom-center",

        }

       

        //删除

        $("#btn_del").click(function(){

              //获取选中的复选框

              var checkboxlist=$("#table tbody :checked");

              if(checkboxlist.length>0){

                  if(!confirm("您确定删除数据吗?"))

                    {

                       return;

                    }

              }else{

                  toastr.error("请选择要删除的记录。", '错误!');

                  return;

              }

              var ids="";

              $.each(checkboxlist, function(n, cb) { 

                  ids+=cb.value+","

                });

              if(ids.length>0){

                ids=ids.substring(0,ids.length-1);

              }

              //异步删除数据

              $.ajax({

                  type: "post",

                  data: {

                     ids:ids,//第一个ids为参数名,第二个为参数值

                  },

                  url: "/RoleController/delete",//后台处理地址

                  success: function (data) {

                     if(data.success){

                         toastr.success(data.msg, '删除成功!');

                          datatable.ajax.reload(null, false);//刷新当前页

                     }else{

                          toastr.error(data.msg, '错误!');

                     }

                  }

              }); 

 

        });//end btn_del

        

        $("#btn_add").click(function(){

              //清空数据

              $("#name").val("");

              //validator.resetForm();//重置验证

              $("#modaltitle").text("添加角色");

              $("#modal").modal("show");

        });//end add

       

        //不用改,以下为修改jQuery Validation插件兼容Bootstrap的方法,没有直接写在插件中是为了便于插件升级

            $.validator.setDefaults({

                highlight: function (element) {

                    $(element).closest('.form-group').removeClass('has-success').addClass('has-error');

                },

                success: function (element) {

                    element.closest('.form-group').removeClass('has-error').addClass('has-success');

                },

                errorElement: "span",

                errorPlacement: function (error, element) {

                    if (element.is(":radio") || element.is(":checkbox")) {

                        error.appendTo(element.parent().parent().parent());

                    } else {

                        error.appendTo(element.parent());

                    }

                },

                errorClass: "help-block m-b-none",

                validClass: "help-block m-b-none"

            });

        //end setDefaults

           

            // validate form setting

            var icon = "<i class='fa fa-times-circle'></i> ";

            validator=$("#form").validate({

                rules: {

                    name: {

                        required: true,

                        minlength: 1

                    },

                },

                messages: {

                    name: {

                        required: icon + "请输入您的角色名",

                        minlength: icon + "角色名必须1个字符以上"

                    },

                }

            });//end validate

           

            $("#btn_save").click(function(){

              if($("#form").valid()){

                  //save

                  if($("#modaltitle").text()=="添加角色"){

                       //add

                       //异步添加数据

                       $.ajax({

                            type: "post",

                            data: {

                                name:$("#name").val(),

                            },

                            url: "/RoleController/insert",//后台处理地址

                            success: function (data) {

                               if(data.success){

                                   toastr.success(data.msg, '添加成功!');

                                   $("#modal").modal('hide');

                                   datatable.ajax.reload(null, false);//刷新当前页

                               }else{

                                   toastr.error(data.msg, '错误!');

                               }

                            }

                       });  // end ajax

                  }else{

                       //update

                       //异步修改数据

                       $.ajax({

                            type: "post",

                            data: {

                                id:$("#id").val(),//主键,从隐藏input获取到

                                name:$("#name").val(),

                            },

                            url: "/RoleController/update",//后台处理地址

                            success: function (data) {

                               if(data.success){

                                   toastr.success(data.msg, '修改成功!');

                                   $("#modal").modal('hide');

                                   datatable.ajax.reload(null, false);//刷新当前页

                               }else{

                                   toastr.error(data.msg, '错误!');

                               }

                            }

                       });  // end ajax

                  }                

                 

              }            

        });//end btn_save

       

        $("#btn_authorsave").click(function(){

                   var treeObj = $.fn.zTree.getZTreeObj("tree");

                   var nodes = treeObj.getCheckedNodes(true);

                   ids="";

                   for(i=0;i<nodes.length;i++){

                       if(i<nodes.length - 1){

                            ids = ids + nodes[i].id + ",";

                       }else{

                            ids = ids + nodes[i].id;

                       }                      

                   }                 

                   //console.log(ids);

                   $.ajax({

                  type: "post",

                  data: {

                     id:$("#roleid").val(),

                     ids:ids

                  },

                  url: "/PermissionController/author",//后台处理地址

                  success: function (data) {

                       if(data.success){

                    toastr.success("分配权限成功!", '成功');

                    $("#authormodal").modal("hide");

                     }

                  }

              }); // end ajax

               

          });//end btn_authorsave

 

        });//end ready

 

    </script>

 

</body>

 

</html>

点击角色管理菜单的效果:

应用调用的接口实现了,所以用户管理界面中的角色分配功能也可以使用了:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值