mirror of https://gitee.com/karson/fastadmin.git
优化权限角色组列表
parent
82386cc9d8
commit
92e722c674
|
|
@ -258,7 +258,10 @@ class Group extends Backend
|
||||||
}
|
}
|
||||||
if (($pid || $parentGroupModel) && (!$id || $currentGroupModel)) {
|
if (($pid || $parentGroupModel) && (!$id || $currentGroupModel)) {
|
||||||
$id = $id ? $id : null;
|
$id = $id ? $id : null;
|
||||||
$ruleList = collection(model('AuthRule')->order('weigh', 'desc')->order('id', 'asc')->select())->toArray();
|
$ruleList = Db::name("auth_rule")
|
||||||
|
->field('id,pid,name,title,icon,ismenu,status,weigh')
|
||||||
|
->order('weigh DESC,id ASC')
|
||||||
|
->select();
|
||||||
//读取父类角色所有节点列表
|
//读取父类角色所有节点列表
|
||||||
$parentRuleList = [];
|
$parentRuleList = [];
|
||||||
if (in_array('*', explode(',', $parentGroupModel->rules))) {
|
if (in_array('*', explode(',', $parentGroupModel->rules))) {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<form id="add-form" class="form-horizontal form-ajax" role="form" data-toggle="validator" method="POST" action="">
|
<form id="add-form" class="form-horizontal form-ajax" role="form" data-toggle="validator" method="POST" action="">
|
||||||
{:token()}
|
{:token()}
|
||||||
<input type="hidden" name="row[rules]" value="" />
|
<input type="hidden" name="row[rules]" value=""/>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-xs-12 col-sm-2">{:__('Parent')}:</label>
|
<label class="control-label col-xs-12 col-sm-2">{:__('Parent')}:</label>
|
||||||
<div class="col-xs-12 col-sm-8">
|
<div class="col-xs-12 col-sm-8">
|
||||||
|
|
@ -10,14 +10,16 @@
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
|
<label class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
|
||||||
<div class="col-xs-12 col-sm-8">
|
<div class="col-xs-12 col-sm-8">
|
||||||
<input type="text" class="form-control" id="name" name="row[name]" value="" data-rule="required" />
|
<input type="text" class="form-control" id="name" name="row[name]" value="" data-rule="required"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-xs-12 col-sm-2">{:__('Permission')}:</label>
|
<label class="control-label col-xs-12 col-sm-2">{:__('Permission')}:</label>
|
||||||
<div class="col-xs-12 col-sm-8">
|
<div class="col-xs-12 col-sm-8">
|
||||||
<span class="text-muted"><input type="checkbox" name="" id="checkall" /> <label for="checkall"><span>{:__('Check all')}</span></label></span>
|
<div style="margin-top:8px;">
|
||||||
<span class="text-muted"><input type="checkbox" name="" id="expandall" /> <label for="expandall"><span>{:__('Expand all')}</span></label></span>
|
<span class="text-muted"><input type="checkbox" name="" id="checkall"/> <label for="checkall"><span>{:__('Check all')}</span></label></span>
|
||||||
|
<span class="text-muted"><input type="checkbox" name="" id="expandall"/> <label for="expandall"><span>{:__('Expand all')}</span></label></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div id="treeview"></div>
|
<div id="treeview"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<form id="edit-form" class="form-horizontal form-ajax" role="form" method="POST" action="">
|
<form id="edit-form" class="form-horizontal form-ajax" role="form" method="POST" action="">
|
||||||
{:token()}
|
{:token()}
|
||||||
<input type="hidden" name="row[rules]" value="" />
|
<input type="hidden" name="row[rules]" value=""/>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-xs-12 col-sm-2">{:__('Parent')}:</label>
|
<label class="control-label col-xs-12 col-sm-2">{:__('Parent')}:</label>
|
||||||
<div class="col-xs-12 col-sm-8">
|
<div class="col-xs-12 col-sm-8">
|
||||||
|
|
@ -10,14 +10,16 @@
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
|
<label class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
|
||||||
<div class="col-xs-12 col-sm-8">
|
<div class="col-xs-12 col-sm-8">
|
||||||
<input type="text" class="form-control" id="name" name="row[name]" value="{$row.name|htmlentities}" data-rule="required" />
|
<input type="text" class="form-control" id="name" name="row[name]" value="{$row.name|htmlentities}" data-rule="required"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-xs-12 col-sm-2">{:__('Permission')}:</label>
|
<label class="control-label col-xs-12 col-sm-2">{:__('Permission')}:</label>
|
||||||
<div class="col-xs-12 col-sm-8">
|
<div class="col-xs-12 col-sm-8">
|
||||||
<span class="text-muted"><input type="checkbox" name="" id="checkall" /> <label for="checkall"><span>{:__('Check all')}</span></label></span>
|
<div style="margin-top:8px;">
|
||||||
<span class="text-muted"><input type="checkbox" name="" id="expandall" /> <label for="expandall"><span>{:__('Expand all')}</span></label></span>
|
<span class="text-muted"><input type="checkbox" name="" id="checkall"/> <label for="checkall"><span>{:__('Check all')}</span></label></span>
|
||||||
|
<span class="text-muted"><input type="checkbox" name="" id="expandall"/> <label for="expandall"><span>{:__('Expand all')}</span></label></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div id="treeview"></div>
|
<div id="treeview"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,8 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'jstree'], function (
|
||||||
{field: 'state', checkbox: true,},
|
{field: 'state', checkbox: true,},
|
||||||
{field: 'id', title: 'ID'},
|
{field: 'id', title: 'ID'},
|
||||||
{field: 'pid', title: __('Parent')},
|
{field: 'pid', title: __('Parent')},
|
||||||
{field: 'name', title: __('Name'), align: 'left', formatter:function (value, row, index) {
|
{
|
||||||
|
field: 'name', title: __('Name'), align: 'left', formatter: function (value, row, index) {
|
||||||
return value.toString().replace(/(&|&)nbsp;/g, ' ');
|
return value.toString().replace(/(&|&)nbsp;/g, ' ');
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -79,14 +80,17 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'jstree'], function (
|
||||||
},
|
},
|
||||||
api: {
|
api: {
|
||||||
bindevent: function () {
|
bindevent: function () {
|
||||||
|
var treeview = $("#treeview");
|
||||||
|
|
||||||
|
// 表单提交前设定规则集合
|
||||||
Form.api.bindevent($("form[role=form]"), null, null, function () {
|
Form.api.bindevent($("form[role=form]"), null, null, function () {
|
||||||
if ($("#treeview").length > 0) {
|
if (treeview.length > 0) {
|
||||||
var r = $("#treeview").jstree("get_all_checked");
|
var r = treeview.jstree("get_all_checked");
|
||||||
$("input[name='row[rules]']").val(r.join(','));
|
$("input[name='row[rules]']").val(r.join(','));
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
//渲染权限节点树
|
|
||||||
//变更级别后需要重建节点树
|
//变更级别后需要重建节点树
|
||||||
$(document).on("change", "select[name='row[pid]']", function () {
|
$(document).on("change", "select[name='row[pid]']", function () {
|
||||||
var pid = $(this).data("pid");
|
var pid = $(this).data("pid");
|
||||||
|
|
@ -96,37 +100,21 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'jstree'], function (
|
||||||
Backend.api.toastr.error(__('Can not change the parent to self'));
|
Backend.api.toastr.error(__('Can not change the parent to self'));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$.ajax({
|
treeview.jstree(true).refresh(false);
|
||||||
url: "auth/group/roletree",
|
|
||||||
type: 'post',
|
|
||||||
dataType: 'json',
|
|
||||||
data: {id: id, pid: $(this).val()},
|
|
||||||
success: function (ret) {
|
|
||||||
if (ret.hasOwnProperty("code")) {
|
|
||||||
var data = ret.hasOwnProperty("data") && ret.data != "" ? ret.data : "";
|
|
||||||
if (ret.code === 1) {
|
|
||||||
//销毁已有的节点树
|
|
||||||
$("#treeview").jstree("destroy");
|
|
||||||
Controller.api.rendertree(data);
|
|
||||||
} else {
|
|
||||||
Backend.api.toastr.error(ret.msg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, error: function (e) {
|
|
||||||
Backend.api.toastr.error(e.message);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
//全选和展开
|
//全选和展开
|
||||||
$(document).on("click", "#checkall", function () {
|
$(document).on("click", "#checkall", function () {
|
||||||
$("#treeview").jstree($(this).prop("checked") ? "check_all" : "uncheck_all");
|
treeview.jstree($(this).prop("checked") ? "check_all" : "uncheck_all");
|
||||||
});
|
});
|
||||||
$(document).on("click", "#expandall", function () {
|
$(document).on("click", "#expandall", function () {
|
||||||
$("#treeview").jstree($(this).prop("checked") ? "open_all" : "close_all");
|
treeview.jstree($(this).prop("checked") ? "open_all" : "close_all");
|
||||||
});
|
});
|
||||||
$("select[name='row[pid]']").trigger("change");
|
|
||||||
|
//首次渲染
|
||||||
|
Controller.api.rendertree();
|
||||||
},
|
},
|
||||||
rendertree: function (content) {
|
rendertree: function () {
|
||||||
$("#treeview")
|
$("#treeview")
|
||||||
.on('redraw.jstree', function (e) {
|
.on('redraw.jstree', function (e) {
|
||||||
$(".layer-footer").attr("domrefresh", Math.random());
|
$(".layer-footer").attr("domrefresh", Math.random());
|
||||||
|
|
@ -150,7 +138,32 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'jstree'], function (
|
||||||
"plugins": ["checkbox", "types"],
|
"plugins": ["checkbox", "types"],
|
||||||
"core": {
|
"core": {
|
||||||
'check_callback': true,
|
'check_callback': true,
|
||||||
"data": content
|
'strings': {
|
||||||
|
'Loading ...': __('Loading')
|
||||||
|
},
|
||||||
|
"data": function (obj, callback) {
|
||||||
|
var pidObj = $("select[name='row[pid]']");
|
||||||
|
$.ajax({
|
||||||
|
url: "auth/group/roletree",
|
||||||
|
type: 'post',
|
||||||
|
dataType: 'json',
|
||||||
|
data: {id: pidObj.data('id'), pid: pidObj.val()},
|
||||||
|
success: function (ret) {
|
||||||
|
if (ret.hasOwnProperty("code")) {
|
||||||
|
var data = ret.hasOwnProperty("data") && ret.data != "" ? ret.data : "";
|
||||||
|
if (ret.code === 1) {
|
||||||
|
callback(data);
|
||||||
|
} else {
|
||||||
|
Backend.api.toastr.error(ret.msg);
|
||||||
|
callback([]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, error: function (e) {
|
||||||
|
Backend.api.toastr.error(e.message);
|
||||||
|
callback([]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue