# :-: 第一部创建角色表 CREATE TABLE `zuche`.`roles` ( `id` MEDIUMTEXT NOT NULL AUTO_INCREMENT , `role_name` VARCHAR(20) NOT NULL COMMENT '角色名字' , `privilege_id` TEXT NOT NULL COMMENT '角色id' , `create_time` INT NOT NULL COMMENT '创建时间' , `update_time` INT NOT NULL COMMENT '修改时间' , PRIMARY KEY (`id`), UNIQUE (`role_name`)) ENGINE = InnoDB; # :-: 加载首页php代码 ~~~ public function index() { $roles = Db::table('role')->all(); return view('',compact('roles')); } ~~~ # :-: 首页Html 页面 ~~~ {include file='common/father_css'/} <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" style="margin-top: -5px!important;"> <a href="{:url('admin/role/add')}"> <button class="btn btn-danger btn-sm">添加新角色</button></a> </div> </div> <div class="ibox-content"> <div class="table-responsive"> <form name="myform" id="myform" method="post"> <table class="table table-striped"> <thead> <tr> <th>id</th> <th>权限名称</th> <th>创建时间</th> <th>操作</th> </tr> </thead> <tbody> {foreach $roles as $v} <tr> <td> {$v['id']} </td> <td> {$v['role_name']} </td> <td>{$v['privilege_id']}</td> <td> <div class="layui-table-cell laytable-cell-1-0-10"> <a class="layui-btn layui-btn-xs" lay-event="edit" href="{:url('admin/role/edit',['id'=>$v['id']])}">编辑</a> <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del" onclick="del({$v.id})">删除</a> </div> </td> </tr> {/foreach} </tbody> </table> </form> </div> </div> </div> </div> </div> </div> <!-- 全局js --> <script> function del(id) { swal({ title: "确定删除吗?", text: "你将无法回复该用户,点击空白区,取消选框", type: "warning", showCancelButton: true, confirmButtonColor: "#DD6B55", confirmButtonText: "确定删除!", cancelButtonText: "取消删除!", closeOnConfirm: false, closeOnCancel: false }).then( function(isConfirm){ if (isConfirm) { //或者id ,传递给后台 window.location.href = "/admin/role/delete/id/"+id } else { swal("取消!", "你的用户删除结束)", "error"); } }); } </script> </body> </html> ~~~ # :-: 添加角色Php代码 ~~~ //添加角色页面 public function add(\app\admin\model\Privileges $privileges) { //调取 权限数据 $privileges = $privileges->privilegestrey(); return view('',compact('privileges')); } //角色列表数据处理 public function addSave(Request $request) { $data = $request->param(); $validate = new Validate( [ 'role_name|角色' => 'require', 'privilegeid|权限' => 'require', ]); $info = $validate->check($data); $data['privilege_id'] = implode(',',$data['privilegeid']); unset($data['privilegeid']); // halt($data); // halt($data); if ($info){ // halt($data); $rules = model('role')->save($data); // halt($rules); if ($rules){ return $this->success('角色添加成功','admin/role/index'); } } else{ return $this->error($validate->getError()); } // halt($data); } //加载权限数据,写到模型里面的 //获得排序 public function privilegestrey(){ //获得栏目所有数据 $data = Privileges::all(); //把获得栏目的数据放到下面处理 return $this->sort($data); } //递归处理排序 public function sort($data,$pid =0,$level = 0){ //定义一个静态数组 static $arr = []; foreach($data as $v){ if ($pid == $v['pid']){ $v['level']=$level; $arr[] = $v; $this->sort($data,$v['id'],$level+1); } } //获得一级id return $arr; } ~~~ # :-: 添加Html 代码 ~~~ {include file='common/father_css'/} <body class="gray-bg"> <div class="wrapper wrapper-content"> <div class="col-sm-12"> <div class="ibox float-e-margins"> <div class="ibox-title"> <h5>角色名称 <small class="text-danger">注意:角色名称不能重复,也不能为空</small> </h5> </div> <div class="ibox-content"> <form method="post" class="form-horizontal layui-form" id="register" action="{:url('admin/role/addSave')}"> <div class="form-group"> <label class="col-sm-2 control-label text-danger">*角色名称</label> <div class="col-sm-10"> <input type="text" value="" name="role_name" class="form-control" required placeholder="角色名称必须为中文"> </div> </div> <div class="hr-line-dashed"></div> <div class="form-group"> <label class="col-sm-2 control-label text-danger">*权限选择</label> <div class="col-sm-10 "> <ul> {foreach $privileges as $v} <li level="{$v.level}"> <input type="checkbox" name="privilegeid[]" lay-skin="primary" value="{$v['id']}" id="checkbox"> {if condition = "$v['level'] neq 0 "}&nbsp|{/if} {if condition = "$v['level'] eq 0 "}<span class="text-danger"><span class="layui-badge">顶级</span>{/if} <?php echo str_repeat('&nbsp&nbsp&nbsp-', $v['level']*4);?> {$v->p_name} {if condition = "$v['level'] eq 0 "}</span>{/if} </li> {/foreach} </ul> </div> </div> <div class="hr-line-dashed"></div> <div class="form-group"> <div class="col-sm-4 col-sm-offset-2"> <button class="btn btn-primary layui-btn-radius" type="submit">添加角色</button> </div> </div> </form> </div> </div> </div> </div> <script> layui.use('upload', function () { var $ = layui.jquery , upload = layui.upload; //拖拽上传 upload.render({ elem: '#test10' , url: '/admin/category/imgUpload' , data: {} //,drag:true //是否接受拖拽的文件上传,设置 false 可禁用。不支持ie8/9 //上传成功之后的回调 , done: function (res) { let {code, data, msd} = res if (code == 0) { $('#test10').html(`<img src = "${data['src']}" width="50px" height="50px"> <input name="pic" type="hidden" value="${data['src']}"/>`) } else { swal({ text: res.message, icon: "warning", button: false }); } } }); }); layui.use('layedit', function () { var layedit = layui.layedit; layedit.build('demo', { //tool: ['left', 'center', 'right', '|', 'face'],//自定义 tollbar height: 180 //设置编辑器高度 , uploadImage: { url: "/admin/category/imgUpload", type: 'post' } }); }); //表单清空 </script> <script type="text/javascript"> $( "input[name='checkbox']").click(function(){ alert(1); var cur_li=$(this).parent(); var level=cur_li.attr("level"); var checked=$(this).attr("checked"); cur_li.prevAll("li").each(function(){ if($(this).attr("level")<level && checked ){ $(this).find(":checkbox").attr("checked","checked"); if($(this).attr("level")==0){ return false; } } }); if(!checked){ // cur_li.nextAll("li").each(function(){ if($(this).attr("level")>level){ $(this).find(":checkbox").removeAttr("checked"); }else{ return false; } }); // } }); </script> </body> </html> ~~~ # :-: 修改角色Phpd代码 ~~~ //角色修改数据处理 public function edit($id,\app\admin\model\Privileges $privileges) { //调取 权限数据 $privileges = $privileges->privilegestrey(); $role = \app\admin\model\Role::where('id',$id)->find(); $role['privilege_id'] = explode(',',$role['privilege_id']); // halt($role); return view('',compact('role','privileges')); } //角色修改数据处理 public function update(Request $request,$id) { $data = $request->param(); $data['privilege_id'] = implode(',',$data['privilegeid']); unset($data['privilegeid']); $info = \app\admin\model\Role::where('id',$id)->data($data)->update(); if ($info){ $this->success('权限修改成功','/admin/role/index'); } } ~~~ # :-: 角色Hmtl 代码 ~~~ {include file='common/father_css'/} <body class="gray-bg"> <div class="wrapper wrapper-content"> <div class="col-sm-12"> <div class="ibox float-e-margins"> <div class="ibox-title"> <h5>角色名称 <small class="text-danger">注意:角色名称不能重复,也不能为空</small> </h5> </div> <div class="ibox-content"> <form method="post" class="form-horizontal layui-form" id="register" action="{:url('admin/role/update')}"> <div class="form-group"> <label class="col-sm-2 control-label text-danger">*角色名称</label> <div class="col-sm-10"> <input type="text" value="{$role.role_name}" name="role_name" class="form-control" required placeholder="角色名称必须为中文"> </div> </div> <div class="hr-line-dashed"></div> <div class="form-group"> <label class="col-sm-2 control-label text-danger">*权限选择</label> <input type="hidden" name="id" value="{$role.id}"> <div class="col-sm-10 "> <ul> {foreach $privileges as $v} <li level="{$v.level}"> <input type="checkbox" name="privilegeid[]" lay-skin="primary" value="{$v['id']}" id="checkbox" {foreach $role['privilege_id'] as $c} {eq name='$c' value="$v.id"} checked{/eq} {/foreach} > {if condition = "$v['level'] neq 0 "}&nbsp|{/if} {if condition = "$v['level'] eq 0 "}<span class="text-danger"><span class="layui-badge">顶级</span>{/if} <?php echo str_repeat('&nbsp&nbsp&nbsp-', $v['level']*4);?> {$v->p_name} {if condition = "$v['level'] eq 0 "}</span>{/if} </li> {/foreach} </ul> </div> </div> <div class="hr-line-dashed"></div> <div class="form-group"> <div class="col-sm-4 col-sm-offset-2"> <button class="btn btn-primary layui-btn-radius" type="submit">修改角色</button> </div> </div> </form> </div> </div> </div> </div> <script> layui.use('upload', function () { var $ = layui.jquery , upload = layui.upload; //拖拽上传 upload.render({ elem: '#test10' , url: '/admin/category/imgUpload' , data: {} //,drag:true //是否接受拖拽的文件上传,设置 false 可禁用。不支持ie8/9 //上传成功之后的回调 , done: function (res) { let {code, data, msd} = res if (code == 0) { $('#test10').html(`<img src = "${data['src']}" width="50px" height="50px"> <input name="pic" type="hidden" value="${data['src']}"/>`) } else { swal({ text: res.message, icon: "warning", button: false }); } } }); }); layui.use('layedit', function () { var layedit = layui.layedit; layedit.build('demo', { //tool: ['left', 'center', 'right', '|', 'face'],//自定义 tollbar height: 180 //设置编辑器高度 , uploadImage: { url: "/admin/category/imgUpload", type: 'post' } }); }); //表单清空 </script> <script type="text/javascript"> $( "input[name='checkbox']").click(function(){ alert(1); var cur_li=$(this).parent(); var level=cur_li.attr("level"); var checked=$(this).attr("checked"); cur_li.prevAll("li").each(function(){ if($(this).attr("level")<level && checked ){ $(this).find(":checkbox").attr("checked","checked"); if($(this).attr("level")==0){ return false; } } }); if(!checked){ // cur_li.nextAll("li").each(function(){ if($(this).attr("level")>level){ $(this).find(":checkbox").removeAttr("checked"); }else{ return false; } }); // } }); </script> </body> </html> ~~~ # 角色删Php代码 ~~~ //角色删除 public function delete($id) { $info = \app\admin\model\Role::destroy($id); if ($info){ $this->success('角色删除成功','/admin/role/index'); } } ~~~