Files
swiftadmin/app/admin/view/system/admin/rules.html
2022-11-28 19:11:12 +08:00

372 lines
16 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<include file="/public/header" />
<!-- // 重定位style -->
<style>
.layui-form-item .layui-input-inline .layui-form-radio {
margin-right: 1px;
}
</style>
<div class="layui-fluid">
<div class="layui-card">
<!-- // 默认操作按钮 -->
<div class="layui-card-header layadmin-card-header-auto ">
<div class="layui-form">
<div class="layui-form-item">
<div class="layui-inline">
<div class="layui-form-label">{:__('菜单名称')}</div>
<div class="layui-input-inline "><input name="title" class="layui-input" type="text" placeholder="{:__('菜单名称')}"/></div>
</div>
<div class="layui-inline">
<div class="layui-form-label">{:__('菜单地址')}</div>
<div class="layui-input-inline "><input name="router" class="layui-input" type="text" placeholder="{:__('菜单地址')}"/></div>
</div>
<div class="layui-inline" >
<!-- // 默认搜索 -->
<button class="layui-btn icon-btn"
lay-filter="treeSearch" lay-submit><i class="layui-icon layui-icon-search"></i>{:__('搜索')}
</button>
<!-- // 打开添加页面 -->
<button class="layui-btn icon-btn" lay-open="" data-title="{:__('添加菜单')}"
callback="add" data-disable="true" data-area="680px,380px" data-url="#editforms" >
<i class="layui-icon layui-icon-add-1"></i>{:__('添加')}
</button>
<button class="layui-btn layui-btn-primary icon-btn" id="expandAll" ><i class="layui-icon layui-icon-templeate-1"></i>{:__('展开全部')}</button>
<button class="layui-btn layui-btn-danger icon-btn" id="foldAll" ><i class="layui-icon layui-icon-add-1"></i>{:__('折叠全部')}</button>
</div>
</div>
</div>
</div>
<!-- // 创建数据表实例 -->
<table class="layui-hide" id="lay-tableList" lay-filter="lay-tableList"></table>
</div>
</div>
<!-- // 添加编辑数据 -->
<script type="text/html" id="editforms" >
<div class="layui-fluid layui-bg-white">
<form class="layui-form" lay-filter="editforms" >
<input type="text" name="id" hidden="">
<div class="layui-form-item">
<label class="layui-form-label">{:__('上级菜单')}</label>
<div class="layui-input-inline">
<div id="treeNode" name="pid" lay-filter="treeNode" ></div>
</div>
<label class="layui-form-label"><font color="red">* </font>{:__('')}</label>
<div class="layui-input-inline">
<input name="alias" placeholder="{:__('system:Target:index')}" type="text" disabled class="layui-input alias layui-disabled" lay-verify="required" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span style="color: red; ">* </span>{:__('')}</label>
<div class="layui-input-inline">
<input name="title" placeholder="{:__('请输入菜单名称')}" type="text" class="layui-input" lay-verify="required" />
</div>
<label class="layui-form-label">{:__('排序号')}</label>
<div class="layui-input-inline">
<input name="sort" placeholder="{:__('默认自动生成')}" type="number" class="layui-input" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">{:__('菜单图标')}</label>
<div class="layui-input-inline">
<input name="icon" placeholder="{:__('请选择菜单图标')}" id="iconPicker" type="text" class="layui-input" />
</div>
<label class="layui-form-label">{:__('菜单类型')}</label>
<div class="layui-input-inline" style="white-space: nowrap;">
<input name="type" type="radio" value="0" title="{:__('菜单')}" lay-tips="* 菜单默认就是路由地址!" />
<input name="type" type="radio" value="1" title="{:__('按钮')}" lay-tips="* 按钮不会当作菜单显示!" checked />
<input name="type" type="radio" value="2" title="{:__('接口')}" lay-tips="* 接口用户上传等API场景"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span style="color: red; ">* </span>{:__('')}</label>
<div class="layui-input-inline">
<input name="router" placeholder="{:__('/system/Target/index')}" type="text" class="layui-input router" lay-verify="required" />
</div>
<label class="layui-form-label"><span style="color: red; ">* </span>{:__('')}</label>
<div class="layui-input-inline">
<input name="auth" type="radio" value="1" title="{:__('开启')}" checked/>
<input name="auth" type="radio" value="0" title="{:__('关闭')}"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span style="color: red; ">* </span>{:__('')}</label>
<div class="layui-input-inline" style="width: 500px">
<input name="condition" placeholder="{:__('请输入正则表达式,适合通配符校验')}" type="text" class="layui-input" />
</div>
</div>
<div class="layui-footer layui-form-item layui-center " >
<button class="layui-btn layui-btn-primary" type="button" sa-event="closePageDialog" >{:__('取消')}</button>
<button class="layui-btn" lay-add="{:url('/system/AdminRules/add')}" lay-edit="{:url('/system/AdminRules/edit')}" lay-filter="submitPage" lay-submit>{:__('提交')}</button>
</div>
</form>
</div>
</script>
<!-- // 列表工具栏 -->
<script type="text/html" id="tableBar">
<!-- 注意添加的回调函数里面 增加了data-disable="true"属性也就是不会执行form.val方法 -->
<a class="layui-table-text" data-title="{:__('添加菜单')}" data-url="#editforms"
data-area="668px,380px" callback="add" data-disable="true" lay-event="add" >{:__('添加')}</a>
<div class="layui-divider layui-divider-vertical"></div>
<a class="layui-table-text" data-title="{:__('编辑菜单')}" data-area="668px,380px" data-url="#editforms" lay-event="edit" callback="edit" >{:__('编辑')}</a>
<div class="layui-divider layui-divider-vertical"></div>
<a class="layui-table-text" data-url="{:url('/system/AdminRules/del')}?id={{d.id}}" lay-event="del" >{:__('删除')}</a>
</script>
<script src="__STATICADMIN__module/xmselect/xmselect.js?v={:release()}"></script>
<include file="/public/footer" />
<script>
layui.use(['admin','form','treetable','iconPicker'], function () {
var jquery = layui.jquery;
var admin = layui.admin;
var form = layui.form;
var table = layui.table;
var treetable = layui.treetable;
var iconPicker = layui.iconPicker;
var tableURL = "{:url('/system/AdminRules/index')}";
// 渲染初始化表格
var renderTable = function (tableURL) {
treetable.render({
elem: '#lay-tableList',
treeColIndex: 1,
treeSpid: 0,
treeIdName: 'id',
treePidName: 'pid',
url: tableURL,
cellMinWidth: 100,
treeDefaultClose: true,
cols: [[
{type: 'numbers'},
{field: 'title', title: '{:__("菜单名称")}'},
{field: 'router', title: '{:__("路由地址")}'},
{field: 'alias', title: '{:__("权限标识")}'},
{field: 'auth', width: 80,title: '{:__("鉴权")}',templet: function(d) {
var strs = ['<font color="red">{:__("否")}</font>', '<span>{:__("是")}</span>'];
return strs[d.auth];
}, align: 'center'
},
{
field: 'type',title: '{:__("类型")}', width: 80, templet: function (d) {
var strs = ['<span class="layui-badge layui-bg-blue">{:__("菜单")}</span>',
'<span class="layui-badge layui-bg-gray">{:__("按钮")}</span>',
'<span class="layui-badge layui-bg-cyan">{:__("接口")}</span>',
'<span class="layui-badge">{:__("系统")}</span>'
];
return strs[d.type];
}, align: 'center'
},
{field: 'sort', width: 80, align: 'center',title: '{:__("排序")}'},
{field: 'create_time', align: 'center',title: '{:__("创建时间")}'},
{align: 'center', toolbar: '#tableBar', width: 220,title: '{:__("操作")}'},
]]
});
}
// 监听搜索 serialize
form.on('submit(treeSearch)',function(data) {
var whereURL = '',
field = data.field;
for (var key in field ) {
whereURL += key + '=' + field[key];
whereURL += '&';
}
// 拼接字符串
whereURL = whereURL.replace(/(.*)&/,'$1 ');
whereURL = tableURL + '?' + whereURL;
renderTable(whereURL);
})
/*
* 编辑回调函数示例
* 这个是默认编辑框的回调函数
* 默认返回当前点击元素对象、数据合集、配置项
*/
admin.callback.edit = function(clickthis,colletction,config) {
// 渲染选择器
draSelect(colletction.tableThis);
// 渲染图标
draIcon();
// 监听改变
inputchange();
// 监听提交
listenPost(colletction);
}
/*
* 添加的回调函数
*/
admin.callback.add = function(clickthis,colletction,config) {
// 渲染选择器
draSelect(colletction.tableThis);
// 渲染图标
draIcon();
// 监听改变
inputchange();
// 监听提交
listenPost(colletction);
}
// 渲染权限select元素
var draSelect = function(tableThis, subadd) {
var checkedId = [];
if (typeof(tableThis) !== "undefined") {
if (tableThis.event === 'add') {
checkedId.push(tableThis.data.id);
} else {
// 这里需要自己判断pid是否等于0否则会报错
if (tableThis.data.pid !== 0) {
checkedId.push(tableThis.data.pid);
}
}
}
var select = xmSelect.render({
el: '#treeNode',
tips: '请选择上级菜单',
name: 'pid',
height: 'auto',
data: table.cache['rules'],
radio: true,
clickClose: true,
initValue: checkedId,
prop: {
value: 'id',
name:'title'
},
tree: {
show: true,
strict: false,
showLine: false,
clickExpand: false,
},
model: {
icon: 'hidden',
label: {
type: 'text'
}
},
theme: {
color: '#1890FF'
}
})
}
// 渲染图标元素
var draIcon = function() {
iconPicker.render({
elem: '#iconPicker',
type: 'fontClass',
search: true,
cellWidth: "19%",
page: true,
limit: 12,
click: function(data) { // 点击回调
jquery('#iconPicker').val(data.icon);
},
success: function(d) { // 渲染成功后的回调
//console.log(d);
}
});
}
// 监听input表单
var inputchange = function() {
jquery('.router').bind('input propertychange change',function(data){
let router = jquery('.router').val();
let first = router.substr(0, 1);
if (first !== '/') {
jquery('.router').val('/');
return layui.layer.error('路由必须以/符号开始');
}
router = router.substring(1);
jquery('.alias').val(router.replaceAll('/',':'));
})
}
// 监听提交
var listenPost = function(colletction) {
var tableThis = colletction.tableThis;
form.on("submit(submitPage)",function(post){
var pageThat = jquery(this);
pageThat.attr("disabled",true);
// 获取提交地址
if (typeof(tableThis) !== 'undefined') {
_pageUrl = tableThis.event === 'edit' ? pageThat.attr('lay-edit') : pageThat.attr('lay-add');
}else {
_pageUrl = pageThat.attr('lay-add');
}
if (typeof(_pageUrl) === 'undefined') {
layer.msg('按钮缺少 url 属性','info');
return false;
}
// 开始POST提交数据
jquery.post(_pageUrl,
post.field, function(res){
if (res.code == 200) {
layer.msg(res.msg);
// 更新列数据
if (typeof(tableThis) !== 'undefined') {
if (tableThis.event === 'edit')
tableThis.update(JSON.parse(JSON.stringify(post.field)));
}else { // 添加则更新列表
renderTable(tableURL);
}
// 调用接口更新菜单
top.layui.admin.reloadLayout();
// 关闭当前窗口
layer.close(colletction.index);
}else {
layer.error(res.msg);
}
}, 'json');
return false;
})
}
// 展开所有
jquery('#expandAll').click(function(){
treetable.expandAll('#lay-tableList');
})
// 折叠所有
jquery('#foldAll').click(function () {
treetable.foldAll('#lay-tableList');
});
// 执行初始化
renderTable(tableURL);
});
</script>