style(jinja2):修改模板的复用方式

This commit is contained in:
zhengxinonly
2022-05-24 18:53:37 +08:00
parent d54eb4dc3e
commit 9fc2eb0ae3
24 changed files with 2954 additions and 2963 deletions
-48
View File
@@ -1,48 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
{#页面标题#}
{% block title %}
<title>Pear Admin Flask</title>
{% endblock %}
<meta charset="utf-8">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
{# 头部导入的 Script,主要为样式 #}
{% block header_script %}
<link rel="stylesheet" href="/static/admin/component/pear/css/pear.css"/>
{% endblock %}
</head>
{#pear 后台边框#}
<body class="pear-container">
{#页面的主题内容,用于页面进行改写#}
{% block body %}
{% endblock %}
{# 当前页面需要依赖的 JavaScript #}
{% block footer_script %}
<script src="/static/admin/component/layui/layui.js"></script>
<script src="/static/admin/component/pear/pear.js"></script>
<script>
/******************数据解析********************************/
function parserTableData (data) {
/* 将服务器返回的 json 数据解析为 layui 表格需要的格式 */
return {
'code': data.code, //解析接口状态
'msg': data.message, //解析提示文本
'count': data.result.total, //解析数据长度
'data': data.result.items, //解析数据列表
}
}
</script>
{% endblock %}
{# 当前页面自己编写的 JavaScript #}
{% block models_script %}
{% endblock %}
</body>
</html>
+13 -1
View File
@@ -1,2 +1,14 @@
<script src="/static/admin/component/layui/layui.js"></script> <script src="/static/admin/component/layui/layui.js"></script>
<script src="/static/admin/component/pear/pear.js"></script> <script src="/static/admin/component/pear/pear.js"></script>
<script>
/******************数据解析********************************/
function parserTableData(data) {
/* 将服务器返回的 json 数据解析为 layui 表格需要的格式 */
return {
'code': data.code, /*解析接口状态*/
'msg': data.message, /*解析提示文本*/
'count': data.result.total, /*解析数据长度*/
'data': data.result.items, /*解析数据列表*/
};
}
</script>
+229 -224
View File
@@ -1,249 +1,254 @@
{% extends 'admin/base.html' %} <!DOCTYPE html>
{% block title %} <html lang="en">
<head>
<title>部门新增</title> <title>部门新增</title>
{% endblock %} {% include 'admin/common/header.html' %}
<body class="pear-container">
{#搜索框布局#}
{% block body %} <div class="layui-card">
{#搜索框布局#} <div class="layui-card-body">
<div class="layui-card"> <form class="layui-form" action="">
<div class="layui-card-body"> <div class="layui-form-item">
<form class="layui-form" action=""> <label class="layui-form-label">部门名称</label>
<div class="layui-form-item"> <div class="layui-input-inline">
<label class="layui-form-label">部门名称</label> {#部门信息搜索字段#}
<div class="layui-input-inline"> <input type="text" name="deptName" placeholder="" class="layui-input">
{#部门信息搜索字段#}
<input type="text" name="deptName" placeholder="" class="layui-input">
</div>
{#查询按钮--需要触发layui事件#}
<button class="pear-btn pear-btn-md pear-btn-primary" lay-submit lay-filter="form_search">
<i class="layui-icon layui-icon-search"></i>
查询
</button>
{#重置按钮#}
<button type="reset" class="pear-btn pear-btn-md">
<i class="layui-icon layui-icon-refresh"></i>
重置
</button>
</div> </div>
</form> {#查询按钮--需要触发layui事件#}
</div> <button class="pear-btn pear-btn-md pear-btn-primary" lay-submit lay-filter="form_search">
<i class="layui-icon layui-icon-search"></i>
查询
</button>
{#重置按钮#}
<button type="reset" class="pear-btn pear-btn-md">
<i class="layui-icon layui-icon-refresh"></i>
重置
</button>
</div>
</form>
</div> </div>
<div class="layui-card"> </div>
<div class="layui-card-body"> <div class="layui-card">
{#表格字段渲染#} <div class="layui-card-body">
<table id="tables" lay-filter="tables"></table> {#表格字段渲染#}
</div> <table id="tables" lay-filter="tables"></table>
</div> </div>
{% endblock %} </div>
{% block models_script %} {% include 'admin/common/footer.html' %}
{#表格工具栏,需要在表格中绑定,且需要自定义事件#} {#表格工具栏,需要在表格中绑定,且需要自定义事件#}
<script type="text/html" id="toolbar"> <script type="text/html" id="toolbar">
{% if authorize("admin:dept:edit") %} {% if authorize("admin:dept:edit") %}
<button class="pear-btn pear-btn-primary pear-btn-md" lay-event="toolbar-add"> <button class="pear-btn pear-btn-primary pear-btn-md" lay-event="toolbar-add">
<i class="layui-icon layui-icon-add-1"></i> <i class="layui-icon layui-icon-add-1"></i>
新增 新增
</button>
{% endif %}
{% if authorize("admin:dept:remove") %}
<button class="pear-btn pear-btn-md" lay-event="toolbar-remove">
<i class="layui-icon layui-icon-delete"></i>
删除
</button>
{% endif %}
</script>
{#操作字段,需要在表格中使用#}
<script type="text/html" id="tool">
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="tool_edit">
<i class="layui-icon layui-icon-edit"></i>
</button> </button>
<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="tool_remove"> {% endif %}
{% if authorize("admin:dept:remove") %}
<button class="pear-btn pear-btn-md" lay-event="toolbar-remove">
<i class="layui-icon layui-icon-delete"></i> <i class="layui-icon layui-icon-delete"></i>
删除
</button> </button>
</script> {% endif %}
{#表格内的切换按钮#} </script>
<script type="text/html" id="dept-status"> {#操作字段,需要在表格中使用#}
<input type="checkbox" <script type="text/html" id="tool">
name="status" <button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="tool_edit">
value="{{ "{{ d.deptId }}" }}" <i class="layui-icon layui-icon-edit"></i>
lay-skin="switch" </button>
lay-text="启用|禁用" <button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="tool_remove">
lay-filter="dept_enable" <i class="layui-icon layui-icon-delete"></i>
{{ "{{# if(d.status==1){ }} checked {{# } }}" }}> </button>
</script> </script>
{#表格内的切换按钮#}
<script type="text/html" id="dept-status">
<input type="checkbox"
name="status"
value="{{ "{{ d.deptId }}" }}"
lay-skin="switch"
lay-text="启用|禁用"
lay-filter="dept_enable"
{{ "{{# if(d.status==1){ }} checked {{# } }}" }}>
</script>
<script> <script>
layui.use(['table', 'form', 'jquery', 'treetable', 'popup'], function () { layui.use(['table', 'form', 'jquery', 'treetable', 'popup'], function() {
let table = layui.table let table = layui.table;
let form = layui.form let form = layui.form;
let $ = layui.jquery let $ = layui.jquery;
let treetable = layui.treetable let treetable = layui.treetable;
let popup = layui.popup let popup = layui.popup;
let MODULE_PATH = '/dept/' let MODULE_PATH = '/dept/';
const get_columns = () => [ const get_columns = () => [
[ [
{ type: 'checkbox' }, {type: 'checkbox'},
{ field: 'deptName', minWidth: 200, title: '部门名称' }, {field: 'deptName', minWidth: 200, title: '部门名称'},
{ field: 'leader', title: '负责人' }, {field: 'leader', title: '负责人'},
{ field: 'phone', title: '联系方式' }, {field: 'phone', title: '联系方式'},
{ field: 'email', title: '邮箱' }, {field: 'email', title: '邮箱'},
{ field: 'address', title: '详细地址' }, {field: 'address', title: '详细地址'},
{ field: 'status', title: '状态', templet: '#dept-status' }, {field: 'status', title: '状态', templet: '#dept-status'},
{ field: 'sort', title: '排序', width: 100 }, {field: 'sort', title: '排序', width: 100},
{ title: '操作', templet: '#tool', width: 120, align: 'center' }, {title: '操作', templet: '#tool', width: 120, align: 'center'},
], ],
] ];
{#定义表格渲染函数#} {#定义表格渲染函数#}
window.render = function () { window.render = function() {
/*树形表格渲染*/ /*树形表格渲染*/
treetable.render({ treetable.render({
treeColIndex: 1, treeColIndex: 1,
treeSpid: 0, treeSpid: 0,
treeIdName: 'deptId', /*表格的顶级字段*/ treeIdName: 'deptId', /*表格的顶级字段*/
treePidName: 'parentId', /*父级id选项*/ treePidName: 'parentId', /*父级id选项*/
skin: 'line', skin: 'line',
method: 'post', /**/ method: 'post', /**/
treeDefaultClose: false, treeDefaultClose: false,
toolbar: '#toolbar', /*表格的工具栏*/ toolbar: '#toolbar', /*表格的工具栏*/
elem: '#tables', /*表格挂载的对象*/ elem: '#tables', /*表格挂载的对象*/
url: '/api/v1/dept/department', /*数据来源接口*/ url: '/api/v1/dept/department', /*数据来源接口*/
page: false, page: false,
cols: get_columns(),/*表格渲染的数据*/ cols: get_columns(),/*表格渲染的数据*/
}) });
} };
/*查询表单按钮被点击的事件*/ /*查询表单按钮被点击的事件*/
form.on('submit(form_search)', function (data) { form.on('submit(form_search)', function(data) {
let keyword = $.trim(data.field.deptName) let keyword = $.trim(data.field.deptName);
/*获取所有的公司节点*/ /*获取所有的公司节点*/
let $tds = $('#tables').next('.treeTable').find('.layui-table-body tbody tr td') let $tds = $('#tables').next('.treeTable').find('.layui-table-body tbody tr td');
if (!keyword) { if (!keyword) {
$tds.css('background-color', 'transparent') $tds.css('background-color', 'transparent');
layer.msg('请输入关键字', { icon: 5 }) layer.msg('请输入关键字', {icon: 5});
return false return false;
} }
/*本地查询并且标注高亮*/ /*本地查询并且标注高亮*/
let searchCount = 0 let searchCount = 0;
$tds.each(function () { $tds.each(function() {
$(this).css('background-color', 'transparent') $(this).css('background-color', 'transparent');
if ($(this).text().indexOf(keyword) >= 0) { if ($(this).text().indexOf(keyword) >= 0) {
$(this).css('background-color', 'rgba(250,230,160,0.5)') $(this).css('background-color', 'rgba(250,230,160,0.5)');
if (searchCount === 0) {
$('body,html').stop(true)
$('body,html').animate({ scrollTop: $(this).offset().top - 150 }, 500)
}
searchCount++
}
})
if (searchCount === 0) { if (searchCount === 0) {
layer.msg('没有匹配结果', { icon: 5 }) $('body,html').stop(true);
$('body,html').animate({scrollTop: $(this).offset().top - 150}, 500);
}
searchCount++;
}
});
if (searchCount === 0) {
layer.msg('没有匹配结果', {icon: 5});
} else {
treetable.expandAll('#tables');
}
return false;
});
render();
/*表格的操作栏*/
table.on('tool(tables)', function(obj) {
if (obj.event === 'tool_remove') {
/*移出事件*/
window.tool_remove(obj);
} else if (obj.event === 'tool_edit') {
/*编辑事件*/
window.tool_edit(obj);
}
});
/*表格的工具栏*/
table.on('toolbar(tables)', function(obj) {
{#console.log(obj)#}
if (obj.event === 'toolbar-add') {
window.toolbar_add();
} else if (obj.event === 'refresh') {
window.refresh();
} else if (obj.event === 'toolbar-remove') {
{#window.toolbar_remove(obj)#}
layer.msg('禁止批量删除');
return false;
{#console.log(table.checkStatus(obj.config.id).data)#}
}
});
/*切换选择状态*/
form.on('switch(dept_enable)', function(obj) {
let operate;
if (obj.elem.checked) {
operate = 1;
} else {
operate = 0;
}
let loading = layer.load();
$.ajax({
url: '/api/v1/dept/department/' + this.value + '/status',
data: JSON.stringify({deptId: this.value, operate: operate}),
dataType: 'json',
contentType: 'application/json',
type: 'put',
success: function(result) {
layer.close(loading);
if (result.success) {
popup.success(result.message);
} else { } else {
treetable.expandAll('#tables') popup.failure(result.message);
} }
return false },
}) });
});
render() window.toolbar_add = function() {
layer.open({
type: 2,
title: '新增',
shade: 0.1,
area: ['450px', '500px'], /*新增窗口的大小*/
content: '/dept/add', /*新增窗口从那里来*/
});
};
/*表格的操作栏*/ window.tool_edit = function(obj) {
table.on('tool(tables)', function (obj) { layer.open({
if (obj.event === 'tool_remove') { type: 2,
/*移出事件*/ title: '修改',
window.tool_remove(obj) shade: 0.1,
} else if (obj.event === 'tool_edit') { area: ['450px', '500px'],
/*编辑事件*/ content: MODULE_PATH + 'edit?deptId=' + obj.data['deptId'], /*编辑修改窗口从那里来*/
window.tool_edit(obj) });
}
})
/*表格的工具栏*/ };
table.on('toolbar(tables)', function (obj) {
{#console.log(obj)#} window.tool_remove = function(obj) {
if (obj.event === 'toolbar-add') { layer.confirm('确定要删除该部门', {icon: 3, title: '提示'}, function(index) {
window.toolbar_add() layer.close(index);
} else if (obj.event === 'refresh') { let loading = layer.load();
window.refresh() $.ajax({
} else if (obj.event === 'toolbar-remove') { url: '/api/v1/dept/department/' + obj.data['deptId'],
{#window.toolbar_remove(obj)#} dataType: 'json',
layer.msg('禁止批量删除') type: 'delete',
return false success: function(result) {
{#console.log(table.checkStatus(obj.config.id).data)#} layer.close(loading);
} if (result.success) {
}) popup.success(result.message, function() {
obj.del();
});
} else {
popup.failure(result.message);
}
},
});
});
};
});
</script>
</body>
</html>
/*切换选择状态*/
form.on('switch(dept_enable)', function (obj) {
let operate
if (obj.elem.checked) {
operate = 1
} else {
operate = 0
}
let loading = layer.load()
$.ajax({
url: '/api/v1/dept/department/' + this.value + '/status',
data: JSON.stringify({ deptId: this.value, operate: operate }),
dataType: 'json',
contentType: 'application/json',
type: 'put',
success: function (result) {
layer.close(loading)
if (result.success) {
popup.success(result.message)
} else {
popup.failure(result.message)
}
},
})
})
window.toolbar_add = function () {
layer.open({
type: 2,
title: '新增',
shade: 0.1,
area: ['450px', '500px'], /*新增窗口的大小*/
content: '/dept/add', /*新增窗口从那里来*/
})
}
window.tool_edit = function (obj) {
layer.open({
type: 2,
title: '修改',
shade: 0.1,
area: ['450px', '500px'],
content: MODULE_PATH + 'edit?deptId=' + obj.data['deptId'], /*编辑修改窗口从那里来*/
})
}
window.tool_remove = function (obj) {
layer.confirm('确定要删除该部门', { icon: 3, title: '提示' }, function (index) {
layer.close(index)
let loading = layer.load()
$.ajax({
url: '/api/v1/dept/department/' + obj.data['deptId'],
dataType: 'json',
type: 'delete',
success: function (result) {
layer.close(loading)
if (result.success) {
popup.success(result.message, function () {
obj.del()
})
} else {
popup.failure(result.message)
}
},
})
})
}
})
</script>
{% endblock %}
+115 -112
View File
@@ -1,127 +1,130 @@
{% extends 'admin/base.html' %} <!DOCTYPE html>
<html lang="en">
{% block title %} <head>
<title>部门管理</title> <title>部门管理</title>
{% endblock %} <title>部门新增</title>
<meta charset="utf-8">
<meta name="renderer" content="webkit">
{% block body %} <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<form class="layui-form" action=""> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<div class="mainBox"> {% include 'admin/common/header.html' %}
<div class="main-container"> <body class="pear-container">
<div class="layui-form-item"> <form class="layui-form" action="">
<label class="layui-form-label">上级部门</label> <div class="mainBox">
<div class="layui-input-block"> <div class="main-container">
<ul id="selectParent" name="parentId" class="dtree" data-id="0"></ul> <div class="layui-form-item">
</div> <label class="layui-form-label">上级部门</label>
<div class="layui-input-block">
<ul id="selectParent" name="parentId" class="dtree" data-id="0"></ul>
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">名称</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">名称</label>
<input type="text" name="deptName" lay-verify="title" autocomplete="off" placeholder="请输入部门名称" <div class="layui-input-block">
class="layui-input"> <input type="text" name="deptName" lay-verify="title" autocomplete="off" placeholder="请输入部门名称"
</div> class="layui-input">
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">负责人</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">负责人</label>
<input type="text" name="leader" lay-verify="title" autocomplete="off" placeholder="请输入负责人名字" <div class="layui-input-block">
class="layui-input"> <input type="text" name="leader" lay-verify="title" autocomplete="off" placeholder="请输入负责人名字"
</div> class="layui-input">
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">邮箱</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">邮箱</label>
<input type="text" name="email" lay-verify="title" autocomplete="off" placeholder="请输入邮箱地址" <div class="layui-input-block">
class="layui-input"> <input type="text" name="email" lay-verify="title" autocomplete="off" placeholder="请输入邮箱地址"
</div> class="layui-input">
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">联系方式</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">联系方式</label>
<input type="text" name="phone" lay-verify="title" autocomplete="off" <div class="layui-input-block">
placeholder="请输入联系方式(电话号码)" <input type="text" name="phone" lay-verify="title" autocomplete="off"
class="layui-input"> placeholder="请输入联系方式(电话号码)"
</div> class="layui-input">
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">状态</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">状态</label>
<input type="radio" name="status" value="1" title="开启"> <div class="layui-input-block">
<input type="radio" name="status" value="0" title="关闭" checked> <input type="radio" name="status" value="1" title="开启">
</div> <input type="radio" name="status" value="0" title="关闭" checked>
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">排序</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">排序</label>
<input type="text" name="sort" lay-verify="title" autocomplete="off" placeholder="请输入排序序号(数字)" <div class="layui-input-block">
class="layui-input"> <input type="text" name="sort" lay-verify="title" autocomplete="off" placeholder="请输入排序序号(数字)"
</div> class="layui-input">
</div> </div>
<div class="layui-form-item layui-form-text"> </div>
<label class="layui-form-label">详细地址</label> <div class="layui-form-item layui-form-text">
<div class="layui-input-block"> <label class="layui-form-label">详细地址</label>
<textarea placeholder="请输入详细地址" name="address" class="layui-textarea"></textarea> <div class="layui-input-block">
</div> <textarea placeholder="请输入详细地址" name="address" class="layui-textarea"></textarea>
</div> </div>
</div> </div>
</div> </div>
<div class="bottom"> </div>
<div class="button-container"> <div class="bottom">
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit="" <div class="button-container">
lay-filter="dept-save"> <button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit=""
<i class="layui-icon layui-icon-ok"></i> lay-filter="dept-save">
提交 <i class="layui-icon layui-icon-ok"></i>
</button> 提交
<button type="reset" class="pear-btn pear-btn-sm"> </button>
<i class="layui-icon layui-icon-refresh"></i> <button type="reset" class="pear-btn pear-btn-sm">
重置 <i class="layui-icon layui-icon-refresh"></i>
</button> 重置
</div> </button>
</div> </div>
</form> </div>
{% endblock %} </form>
{% block models_script %} {% include 'admin/common/footer.html' %}
<script> <script>
layui.use(['form', 'jquery', 'dtree'], function () { layui.use(['form', 'jquery', 'dtree'], function() {
let form = layui.form let form = layui.form;
let $ = layui.jquery let $ = layui.jquery;
let dtree = layui.dtree let dtree = layui.dtree;
/*添加数据 渲染下拉选择组件*/ /*添加数据 渲染下拉选择组件*/
dtree.renderSelect({ dtree.renderSelect({
elem: '#selectParent', elem: '#selectParent',
url: '/api/v1/dept/departments', url: '/api/v1/dept/department/',
method: 'get', method: 'get',
selectInputName: { nodeId: 'parentId', context: 'parentName' }, selectInputName: {nodeId: 'parentId', context: 'parentName'},
skin: 'layui', skin: 'layui',
dataFormat: 'list', dataFormat: 'list',
response: { treeId: 'deptId', parentId: 'parentId', title: 'deptName' }, response: {treeId: 'deptId', parentId: 'parentId', title: 'deptName'},
selectInitVal: '1', selectInitVal: '1',
}) });
/*添加数据 表单组件,提交按钮之后触发的事件*/ /*添加数据 表单组件,提交按钮之后触发的事件*/
form.on('submit(dept-save)', function (data) { form.on('submit(dept-save)', function(data) {
$.ajax({ $.ajax({
url: '/api/v1/dept/departments', url: '/api/v1/dept/department/',
data: JSON.stringify(data.field), data: JSON.stringify(data.field),
dataType: 'json', dataType: 'json',
contentType: 'application/json', contentType: 'application/json',
type: 'post', type: 'post',
success: function (result) { success: function(result) {
if (result.success) { if (result.success) {
layer.msg(result.message, { icon: 1, time: 1000 }, function () { layer.msg(result.message, {icon: 1, time: 1000}, function() {
parent.layer.close(parent.layer.getFrameIndex(window.name)) parent.layer.close(parent.layer.getFrameIndex(window.name));
parent.render() parent.render();
}) });
} else { } else {
layer.msg(result.message, { icon: 2, time: 1000 }) layer.msg(result.message, {icon: 2, time: 1000});
} }
}, },
}) });
return false return false;
}) });
}) });
</script> </script>
{% endblock %} </body>
</html>
+112 -115
View File
@@ -1,127 +1,124 @@
{% extends 'admin/base.html' %} <!doctype html>
<html lang="zh-CN">
{% block title %} <head>
<title>部门修改</title> <title>部门修改</title>
{% endblock %} {% include 'admin/common/header.html' %}
</head>
<body class="pear-container">
<form class="layui-form" action="">
<div class="mainBox">
<div class="main-container">
<div class="layui-form-item layui-hide">
<label class="layui-form-label">编号</label>
<div class="layui-input-block">
<input type="text" value="{{ dept.id }}" name="deptId" lay-verify="required|number"
autocomplete="off" placeholder="请输入部门编号" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">名称</label>
<div class="layui-input-block">
<input type="text" value="{{ dept.dept_name }}" name="deptName" lay-verify="required"
autocomplete="off" placeholder="请输入部门名称" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">负责人</label>
<div class="layui-input-block">
<input type="text" value="{{ dept.leader }}" name="leader" autocomplete="off"
placeholder="请输入负责人名字"
class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">邮箱</label>
<div class="layui-input-block">
<input type="text" value="{{ dept.email }}" name="email" autocomplete="off"
placeholder="请输入邮箱地址"
class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">联系方式</label>
<div class="layui-input-block">
<input type="text" value="{{ dept.phone }}" name="phone" autocomplete="off"
placeholder="请输入联系方式(电话号码)"
class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">状态</label>
<div class="layui-input-block">
<input type="radio" name="status" {% if dept.status == 1 %}checked{% endif %}
value="1"
title="开启">
<input type="radio" name="status" {% if dept.status == 0 %}checked{% endif %}
{% block body %} value="0"
<form class="layui-form" action=""> title="关闭">
<div class="mainBox">
<div class="main-container">
<div class="layui-form-item layui-hide">
<label class="layui-form-label">编号</label>
<div class="layui-input-block">
<input type="text" value="{{ dept.id }}" name="deptId" lay-verify="required|number"
autocomplete="off" placeholder="请输入部门编号" class="layui-input">
</div>
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">名称</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">排序</label>
<input type="text" value="{{ dept.dept_name }}" name="deptName" lay-verify="required" <div class="layui-input-block">
autocomplete="off" placeholder="请输入部门名称" class="layui-input"> <input type="text" name="sort" value="{{ dept.sort }}" lay-verify="required|number"
</div> autocomplete="off"
placeholder="请输入排序序号(数字)"
class="layui-input">
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">负责人</label> <div class="layui-form-item layui-form-text">
<div class="layui-input-block"> <label class="layui-form-label">描述</label>
<input type="text" value="{{ dept.leader }}" name="leader" autocomplete="off" <div class="layui-input-block">
placeholder="请输入负责人名字"
class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">邮箱</label>
<div class="layui-input-block">
<input type="text" value="{{ dept.email }}" name="email" autocomplete="off"
placeholder="请输入邮箱地址"
class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">联系方式</label>
<div class="layui-input-block">
<input type="text" value="{{ dept.phone }}" name="phone" autocomplete="off"
placeholder="请输入联系方式(电话号码)"
class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">状态</label>
<div class="layui-input-block">
<input type="radio" name="status" {% if dept.status == 1 %}checked{% endif %}
value="1"
title="开启">
<input type="radio" name="status" {% if dept.status == 0 %}checked{% endif %}
value="0"
title="关闭">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">排序</label>
<div class="layui-input-block">
<input type="text" name="sort" value="{{ dept.sort }}" lay-verify="required|number"
autocomplete="off"
placeholder="请输入排序序号(数字)"
class="layui-input">
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">描述</label>
<div class="layui-input-block">
<textarea placeholder="请输入详细地址" name="address" <textarea placeholder="请输入详细地址" name="address"
class="layui-textarea">{{ dept.address }}</textarea> class="layui-textarea">{{ dept.address }}</textarea>
</div>
</div> </div>
</div> </div>
</div> </div>
<div class="bottom"> </div>
<div class="button-container"> <div class="bottom">
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit="" <div class="button-container">
lay-filter="dept-update"> <button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit=""
<i class="layui-icon layui-icon-ok"></i> lay-filter="dept-update">
提交 <i class="layui-icon layui-icon-ok"></i>
</button> 提交
<button type="reset" class="pear-btn pear-btn-sm"> </button>
<i class="layui-icon layui-icon-refresh"></i> <button type="reset" class="pear-btn pear-btn-sm">
重置 <i class="layui-icon layui-icon-refresh"></i>
</button> 重置
</div> </button>
</div> </div>
</form> </div>
{% endblock %} </form>
{% include 'admin/common/footer.html' %}
<script>
layui.use(['form', 'jquery'], function() {
let form = layui.form;
let $ = layui.jquery;
{% block models_script %} // 修改数据 当点击更新之后,获取数据
<script > form.on('submit(dept-update)', function(data) {
layui.use(['form', 'jquery'], function () { $.ajax({
let form = layui.form url: '/api/v1/dept/department/' + data.field.deptId,
let $ = layui.jquery data: JSON.stringify(data.field),
dataType: 'json',
// 修改数据 当点击更新之后,获取数据 contentType: 'application/json',
form.on('submit(dept-update)', function (data) { type: 'put',
$.ajax({ success: function(result) {
url: '/api/v1/dept/department/' + data.field.deptId, if (result.success) {
data: JSON.stringify(data.field), layer.msg(result.message, {icon: 1, time: 1000}, function() {
dataType: 'json', parent.layer.close(parent.layer.getFrameIndex(window.name));//关闭当前页
contentType: 'application/json', parent.render();
type: 'put', });
success: function (result) { } else {
if (result.success) { layer.msg(result.message, {icon: 2, time: 1000});
layer.msg(result.message, { icon: 1, time: 1000 }, function () { }
parent.layer.close(parent.layer.getFrameIndex(window.name))//关闭当前页 },
parent.render() });
}) return false;
} else { });
layer.msg(result.message, { icon: 2, time: 1000 }) });
} </script>
}, </body>
}) </html>
return false
})
})
</script>
{% endblock %}
+251 -250
View File
@@ -1,266 +1,267 @@
{% extends 'admin/base.html' %} <!doctype html>
<html lang="zh-CN">
{% block title %} <head>
<title>图片上传</title> <title>图片上传</title>
{% endblock %} {% include 'admin/common/header.html' %}
</head>
{% block body %} <body class="pear-container">
<div class="layui-card"> <div class="layui-card">
<div class="layui-card-body"> <div class="layui-card-body">
<table id="tables" lay-filter="tables"></table> <table id="tables" lay-filter="tables"></table>
</div>
</div> </div>
{% endblock %} </div>
{% block models_script %}
<script type="text/html" id="toolbar">
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="toolbar-add">
<i class="layui-icon layui-icon-add-1"></i>
新增
</button>
<button class="pear-btn pear-btn-sm" lay-event="toolbar-remove">
<i class="layui-icon layui-icon-delete"></i>
删除
</button>
</script>
<script type="text/html" id="tool">
<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="tool-remove">
<i class="layui-icon layui-icon-delete"></i>
</button>
</script>
<script> {% include 'admin/common/footer.html' %}
layui.use(['table', 'form', 'jquery', 'element', 'form', 'upload'], function () { <script type="text/html" id="toolbar">
let table = layui.table <button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="toolbar-add">
let form = layui.form <i class="layui-icon layui-icon-add-1"></i>
let $ = layui.jquery 新增
let upload = layui.upload </button>
<button class="pear-btn pear-btn-sm" lay-event="toolbar-remove">
<i class="layui-icon layui-icon-delete"></i>
删除
</button>
</script>
<script type="text/html" id="tool">
<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="tool-remove">
<i class="layui-icon layui-icon-delete"></i>
</button>
</script>
<script>
layui.use(['table', 'form', 'jquery', 'element', 'form', 'upload'], function() {
let table = layui.table;
let form = layui.form;
let $ = layui.jquery;
let upload = layui.upload;
const get_columns = () => [ const get_columns = () => [
[ [
{ {
type: 'checkbox', type: 'checkbox',
}, },
{ {
field: 'id', field: 'id',
title: 'ID', title: 'ID',
sort: true, sort: true,
align: 'center', align: 'center',
unresize: true, unresize: true,
width: 80, width: 80,
}, },
{ {
field: 'name', field: 'name',
title: '文件名称', title: '文件名称',
unresize: true, unresize: true,
align: 'center', align: 'center',
}, },
{ {
field: 'href', field: 'href',
title: '图片', title: '图片',
unresize: true, unresize: true,
align: 'center', align: 'center',
templet: (d) => { templet: (d) => {
return `<img class="tool-photo" style="max-width: 100%;height: 100%;cursor: pointer;" lay-event="photo" src="${d.href}"></i>` return `<img class="tool-photo" style="max-width: 100%;height: 100%;cursor: pointer;" lay-event="photo" src="${d.href}"></i>`;
}, },
}, },
{ {
field: 'mime', field: 'mime',
title: 'mime类型', title: 'mime类型',
unresize: true, unresize: true,
align: 'center', align: 'center',
}, },
{ {
field: 'size', field: 'size',
title: '文件大小', title: '文件大小',
unresize: true, unresize: true,
align: 'center', align: 'center',
}, },
{ {
field: 'create_at', field: 'create_at',
title: '创建时间', title: '创建时间',
templet: (d) => `${layui.util.toDateString(d.create_at, 'yyyy-MM-dd HH:mm:ss')}`, templet: (d) => `${layui.util.toDateString(d.create_at, 'yyyy-MM-dd HH:mm:ss')}`,
unresize: true, unresize: true,
align: 'center', align: 'center',
}, },
{ {
title: '操作', title: '操作',
toolbar: '#tool', toolbar: '#tool',
align: 'center', align: 'center',
unresize: true, unresize: true,
width: 200, width: 200,
}, },
], ],
] ];
table.render({ table.render({
parseData: parserTableData, /* 服务器返回的数据格式与 layui 不一致,需要进行转化*/ parseData: parserTableData, /* 服务器返回的数据格式与 layui 不一致,需要进行转化*/
elem: '#tables', elem: '#tables',
url: '/api/v1/file/photo', url: '/api/v1/file/photo',
page: true, page: true,
cols: get_columns(), cols: get_columns(),
skin: 'line', skin: 'line',
toolbar: '#toolbar', toolbar: '#toolbar',
defaultToolbar: [ defaultToolbar: [
{ {
layEvent: 'refresh', layEvent: 'refresh',
icon: 'layui-icon-refresh', icon: 'layui-icon-refresh',
}, 'filter', 'print', 'exports'], }, 'filter', 'print', 'exports'],
}) });
table.on('tool(tables)', function (obj) { table.on('tool(tables)', function(obj) {
if (obj.event === 'tool-remove') { if (obj.event === 'tool-remove') {
window.remove(obj) window.remove(obj);
} else if (obj.event === 'photo') { } else if (obj.event === 'photo') {
window.photo(obj) window.photo(obj);
} }
}) });
table.on('toolbar(tables)', function (obj) { table.on('toolbar(tables)', function(obj) {
if (obj.event === 'toolbar-add') { if (obj.event === 'toolbar-add') {
window.add() window.add();
} else if (obj.event === 'refresh') { } else if (obj.event === 'refresh') {
window.refresh() window.refresh();
} else if (obj.event === 'toolbar-remove') { } else if (obj.event === 'toolbar-remove') {
window.batchRemove(obj) window.batchRemove(obj);
} }
}) });
//弹出窗设置 自己设置弹出百分比 //弹出窗设置 自己设置弹出百分比
function screen (width, height) { function screen(width, height) {
if (typeof width !== 'number' || width === 0) { if (typeof width !== 'number' || width === 0) {
width = $(window).width() * 0.8 width = $(window).width() * 0.8;
} }
if (typeof height !== 'number' || height === 0) { if (typeof height !== 'number' || height === 0) {
height = $(window).height() - 20 height = $(window).height() - 20;
} }
return [width + 'px', height + 'px'] return [width + 'px', height + 'px'];
} }
window.add = function () { window.add = function() {
layer.open({ layer.open({
type: 2, type: 2,
maxmin: true, maxmin: true,
title: '新增图片', title: '新增图片',
shade: 0.1, shade: 0.1,
area: screen(), area: screen(),
content: 'file/photo/add', content: 'file/photo/add',
}) });
} };
window.remove = function (obj) { window.remove = function(obj) {
layer.confirm('确定要删除该图片', { layer.confirm('确定要删除该图片', {
icon: 3, icon: 3,
title: '提示', title: '提示',
}, function (index) { }, function(index) {
layer.close(index) layer.close(index);
let loading = layer.load() let loading = layer.load();
$.ajax({ $.ajax({
url: '/api/v1/file/photo/' + obj.data['id'], url: '/api/v1/file/photo/' + obj.data['id'],
data: { id: obj.data['id'] }, data: {id: obj.data['id']},
dataType: 'json', dataType: 'json',
type: 'delete', type: 'delete',
success: function (res) { success: function(res) {
layer.close(loading) layer.close(loading);
if (res.success) { if (res.success) {
layer.msg(res.message, { layer.msg(res.message, {
icon: 1, icon: 1,
time: 1000, time: 1000,
}, function () { }, function() {
obj.del() obj.del();
}) });
} else { } else {
layer.msg(res.message, { layer.msg(res.message, {
icon: 2, icon: 2,
time: 1000, time: 1000,
}) });
} }
}, },
}) });
}) });
} };
window.batchRemove = function (obj) { window.batchRemove = function(obj) {
let data = table.checkStatus(obj.config.id).data let data = table.checkStatus(obj.config.id).data;
if (data.length === 0) { if (data.length === 0) {
layer.msg('未选中数据', { layer.msg('未选中数据', {
icon: 3, icon: 3,
time: 1000, time: 1000,
}) });
return false return false;
} }
var ids = [] var ids = [];
var hasCheck = table.checkStatus('tables') var hasCheck = table.checkStatus('tables');
var hasCheckData = hasCheck.data var hasCheckData = hasCheck.data;
if (hasCheckData.length > 0) { if (hasCheckData.length > 0) {
$.each(hasCheckData, function (index, element) { $.each(hasCheckData, function(index, element) {
ids.push(element.id) ids.push(element.id);
}) });
} }
layer.confirm('确定要删除这些图片', { layer.confirm('确定要删除这些图片', {
icon: 3, icon: 3,
title: '提示', title: '提示',
}, function (index) { }, function(index) {
layer.close(index) layer.close(index);
let loading = layer.load() let loading = layer.load();
$.ajax({ $.ajax({
url: '/api/v1/file/photos', url: '/api/v1/file/photos',
data: { ids: ids }, data: {ids: ids},
dataType: 'json', dataType: 'json',
type: 'POST', type: 'POST',
success: function (res) { success: function(res) {
layer.close(loading) layer.close(loading);
if (res.success) { if (res.success) {
layer.msg(res.message, { layer.msg(res.message, {
icon: 1, icon: 1,
time: 1000, time: 1000,
}, function () { }, function() {
table.reload('tables') table.reload('tables');
}) });
} else { } else {
layer.msg(res.message, { layer.msg(res.message, {
icon: 2, icon: 2,
time: 1000, time: 1000,
}) });
} }
}, },
}) });
}) });
} };
window.refresh = function () { window.refresh = function() {
table.reload('tables') table.reload('tables');
} };
// 查看大图 // 查看大图
window.photo = function (obj) { window.photo = function(obj) {
if (!obj.data.href || obj.data.href === '') { if (!obj.data.href || obj.data.href === '') {
layer.msg('图片地址错误!') layer.msg('图片地址错误!');
return return;
} }
var auto_img = {} var auto_img = {};
var img = new Image() var img = new Image();
img.src = obj.data.href img.src = obj.data.href;
img.onload = function () { img.onload = function() {
var max_height = $(window).height() - 100 var max_height = $(window).height() - 100;
var max_width = $(window).width() var max_width = $(window).width();
var rate1 = max_height / img.height var rate1 = max_height / img.height;
var rate2 = max_width / img.width var rate2 = max_width / img.width;
var rate3 = 1 var rate3 = 1;
var rate = Math.min(rate1, rate2, rate3) var rate = Math.min(rate1, rate2, rate3);
auto_img.height = img.height * rate auto_img.height = img.height * rate;
auto_img.width = img.width * rate auto_img.width = img.width * rate;
layer.open({ layer.open({
type: 1, type: 1,
title: false, title: false,
area: ['auto'], area: ['auto'],
skin: 'layui-layer-nobg', //没有背景色 skin: 'layui-layer-nobg', //没有背景色
shadeClose: true, shadeClose: true,
content: `<img src="${obj.data['href']}" width="${auto_img.width}px" height="${auto_img.height}px">`, content: `<img src="${obj.data['href']}" width="${auto_img.width}px" height="${auto_img.height}px">`,
}) });
} };
} };
}) });
</script> </script>
{% endblock %} </body>
</html>
+53 -54
View File
@@ -1,59 +1,58 @@
{% extends 'admin/base.html' %} <!doctype html>
<html lang="zh-CN">
{% block title %} <head>
<title>新增图片</title> <title>新增图片</title>
{% endblock %} {% include 'admin/common/header.html' %}
</head>
{% block body %} <body class="pear-container">
<div class="layui-row layui-col-space15"> <div class="layui-row layui-col-space15">
<div class="layui-col-md12"> <div class="layui-col-md12">
<div class="layui-card"> <div class="layui-card">
<div class="layui-tab-content"> <div class="layui-tab-content">
<fieldset class="layui-elem-field layui-field-title"> <fieldset class="layui-elem-field layui-field-title">
<legend>新增图片</legend> <legend>新增图片</legend>
</fieldset> </fieldset>
<form class="layui-form edit-form"> <form class="layui-form edit-form">
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label"> <label class="layui-form-label">
新增图片 新增图片
</label> </label>
<button type="button" class="layui-btn layui-btn-normal" id="select-img">选择文件</button> <button type="button" class="layui-btn layui-btn-normal" id="select-img">选择文件</button>
<button type="button" class="layui-btn" id="logo-upload-button">开始上传</button> <button type="button" class="layui-btn" id="logo-upload-button">开始上传</button>
</div> </div>
</form> </form>
</div>
</div> </div>
</div> </div>
</div> </div>
{% endblock %} </div>
{% include 'admin/common/footer.html' %}
{% block models_script %} <script>
<script> layui.use(['jquery', 'element', 'form', 'upload'], function() {
layui.use(['jquery', 'element', 'form', 'upload'], function () { var $ = layui.jquery;
var $ = layui.jquery var element = layui.element;
var element = layui.element var form = layui.form;
var form = layui.form var upload = layui.upload;
var upload = layui.upload //选完文件后不自动上传
//选完文件后不自动上传 upload.render({
upload.render({ elem: '#select-img'
elem: '#select-img' , url: '/api/v1/file/photos'
, url: '/api/v1/file/photos' , auto: false
, auto: false , exts: 'jpg|png|gif|bmp|jpeg'
, exts: 'jpg|png|gif|bmp|jpeg' , size: 1000
, size: 1000 , bindAction: '#logo-upload-button'
, bindAction: '#logo-upload-button' , done: function(res) {
, done: function (res) { if (res.success) {
if (res.success) { layer.msg(res.message, {icon: 1, time: 500}, function() {
layer.msg(res.message, { icon: 1, time: 500 }, function () { parent.layer.close(parent.layer.getFrameIndex(window.name));//关闭当前页
parent.layer.close(parent.layer.getFrameIndex(window.name))//关闭当前页 window.parent.location.reload();
window.parent.location.reload() });
}) } else {
} else { layer.msg(res.message, {icon: 2});
layer.msg(res.message, { icon: 2 }) }
} },
}, });
}) });
}) </script>
</script> </body>
{% endblock %} </html>
+69 -68
View File
@@ -1,84 +1,85 @@
{% extends 'admin/base.html' %} <!doctype html>
<html lang="zh-CN">
{% block title %} <head>
<title>日志</title> <title>日志</title>
{% include 'admin/common/header.html' %}
<link rel="stylesheet" href="/static/admin/admin/css/other/console2.css"/> <link rel="stylesheet" href="/static/admin/admin/css/other/console2.css"/>
{% endblock %} </head>
<body class="pear-container">
<div class="layui-card">
{% block body %} <div class="layui-card-body">
<div class="layui-card"> <div class="layui-tab layui-tab-card">
<div class="layui-card-body"> <ul class="layui-tab-title">
<div class="layui-tab layui-tab-card"> <li class="layui-this">登录日志</li>
<ul class="layui-tab-title"> <li>访问日志</li>
<li class="layui-this">登录日志</li> </ul>
<li>访问日志</li> <div class="layui-tab-content">
</ul> <div class="layui-tab-item layui-show">
<div class="layui-tab-content"> <table style="margin-top: 10px;" id="log-login-table" lay-filter="log-login-table"></table>
<div class="layui-tab-item layui-show"> </div>
<table style="margin-top: 10px;" id="log-login-table" lay-filter="log-login-table"></table> <div class="layui-tab-item">
</div> <table style="margin-top: 10px;" id="log-access-table"
<div class="layui-tab-item"> lay-filter="log-access-table"></table>
<table style="margin-top: 10px;" id="log-access-table" lay-filter="log-access-table"></table>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
{% endblock %} </div>
{% block models_script %}
<script type="text/html" id="log-createTime"> {% include 'admin/common/footer.html' %}
{{ ' {{layui.util.toDateString(d.create_at, "yyyy-MM-dd HH:mm:ss")}' |safe }}} <script type="text/html" id="log-createTime">
</script> {{ ' {{layui.util.toDateString(d.create_at, "yyyy-MM-dd HH:mm:ss")}' |safe }}}
<script type="text/html" id="log-status"> </script>
{{ '{{#if (d.success == true) { }} <script type="text/html" id="log-status">
{{ '{{#if (d.success == true) { }}
<span style="color: green">成功</span> <span style="color: green">成功</span>
{{# }else if(d.success == false){ }} {{# }else if(d.success == false){ }}
<span style="color: red">失败</span> <span style="color: red">失败</span>
{{# } }}'|safe }} {{# } }}'|safe }}
</script> </script>
<script>
layui.use(['table', 'form', 'jquery', 'element', 'util'], function() {
let table = layui.table;
let form = layui.form;
<script> let MODULE_PATH = '/logs/';
layui.use(['table', 'form', 'jquery', 'element', 'util'], function () {
let table = layui.table
let form = layui.form
let MODULE_PATH = '/logs/' const get_columns = () => [
[
{title: 'ID', field: 'id', align: 'center'},
{title: '请求方式', field: 'method', align: 'center'},
{title: '接口', field: 'url', align: 'center'},
{title: '浏览器', field: 'user_agent', align: 'center'},
{title: '操作地址', field: 'ip', align: 'center'},
{title: '访问时间', field: 'create_at', templet: '#log-createTime', align: 'center'},
{title: '操作人ID', field: 'uid', align: 'center'},
{title: '描述', field: 'desc', align: 'center'},
{title: '访问状态', templet: '#log-status', align: 'center'},
],
];
const get_columns = () => [ table.render({
[ parseData: parserTableData,
{ title: 'ID', field: 'id', align: 'center' }, elem: '#log-access-table',
{ title: '请求方式', field: 'method', align: 'center' }, url: MODULE_PATH + 'access_log',
{ title: '接口', field: 'url', align: 'center' }, page: true,
{ title: '浏览器', field: 'user_agent', align: 'center' }, cols: get_columns(),
{ title: '操作地址', field: 'ip', align: 'center' }, skin: 'line',
{ title: '访问时间', field: 'create_at', templet: '#log-createTime', align: 'center' }, toolbar: false,
{ title: '操作人ID', field: 'uid', align: 'center' }, });
{ title: '描述', field: 'desc', align: 'center' },
{ title: '访问状态', templet: '#log-status', align: 'center' },
],
]
table.render({ table.render({
parseData: parserTableData, parseData: parserTableData,
elem: '#log-access-table', elem: '#log-login-table',
url: MODULE_PATH + 'access_log', url: MODULE_PATH + 'login_log',
page: true, page: true,
cols: get_columns(), cols: get_columns(),
skin: 'line', skin: 'line',
toolbar: false, toolbar: false,
}) });
});
table.render({ </script>
parseData: parserTableData, </body>
elem: '#log-login-table', </html>
url: MODULE_PATH + 'login_log',
page: true,
cols: get_columns(),
skin: 'line',
toolbar: false,
})
})
</script>
{% endblock %}
+273 -274
View File
@@ -1,283 +1,282 @@
{% extends 'admin/base.html' %} <!doctype html>
<html lang="zh-CN">
{% block title %} <head>
<title>权限</title> <title>权限</title>
{% endblock %} {% include 'admin/common/header.html' %}
</head>
<body class="pear-container">
{% block body %} <div class="layui-card">
<div class="layui-card"> <div class="layui-card-body">
<div class="layui-card-body"> <form class="layui-form" action="">
<form class="layui-form" action=""> <div class="layui-form-item">
<div class="layui-form-item"> <label class="layui-form-label">权限名称</label>
<label class="layui-form-label">权限名称</label> <div class="layui-input-inline">
<div class="layui-input-inline"> <input type="text" name="powerName" placeholder="" class="layui-input">
<input type="text" name="powerName" placeholder="" class="layui-input">
</div>
<button class="pear-btn pear-btn-md pear-btn-primary" lay-submit lay-filter="power_query">
<i class="layui-icon layui-icon-search"></i>
查询
</button>
<button type="reset" class="pear-btn pear-btn-md">
<i class="layui-icon layui-icon-refresh"></i>
重置
</button>
</div> </div>
</form> <button class="pear-btn pear-btn-md pear-btn-primary" lay-submit lay-filter="power_query">
</div> <i class="layui-icon layui-icon-search"></i>
查询
</button>
<button type="reset" class="pear-btn pear-btn-md">
<i class="layui-icon layui-icon-refresh"></i>
重置
</button>
</div>
</form>
</div> </div>
<div class="layui-card"> </div>
<div class="layui-card-body"> <div class="layui-card">
<table id="tables" lay-filter="tables"></table> <div class="layui-card-body">
</div> <table id="tables" lay-filter="tables"></table>
</div> </div>
{% endblock %} </div>
{% block models_script %}
<script type="text/html" id="toolbar">
<button class="pear-btn pear-btn-primary pear-btn-md" lay-event="toolbar-add">
<i class="layui-icon layui-icon-add-1"></i>
新增
</button>
<button class="pear-btn pear-btn-md" lay-event="toolbar-remove">
<i class="layui-icon layui-icon-delete"></i>
删除
</button>
</script>
<script type="text/html" id="tool">
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="tool-edit"><i
class="layui-icon layui-icon-edit"></i>
</button>
<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="tool-remove"><i
class="layui-icon layui-icon-delete"></i>
</button>
</script>
<script> {% include 'admin/common/footer.html' %}
layui.use(['table', 'form', 'jquery', 'treetable', 'popup', 'dtree', 'iconPicker'], function () { <script type="text/html" id="toolbar">
let table = layui.table <button class="pear-btn pear-btn-primary pear-btn-md" lay-event="toolbar-add">
let form = layui.form <i class="layui-icon layui-icon-add-1"></i>
let $ = layui.jquery 新增
let treetable = layui.treetable </button>
let popup = layui.popup <button class="pear-btn pear-btn-md" lay-event="toolbar-remove">
let iconPicker = layui.iconPicker <i class="layui-icon layui-icon-delete"></i>
let dtree = layui.dtree 删除
</button>
</script>
<script type="text/html" id="tool">
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="tool-edit"><i
class="layui-icon layui-icon-edit"></i>
</button>
<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="tool-remove"><i
class="layui-icon layui-icon-delete"></i>
</button>
</script>
<script>
layui.use(['table', 'form', 'jquery', 'treetable', 'popup', 'dtree', 'iconPicker'], function() {
let table = layui.table;
let form = layui.form;
let $ = layui.jquery;
let treetable = layui.treetable;
let popup = layui.popup;
let iconPicker = layui.iconPicker;
let dtree = layui.dtree;
const get_columns = () => [ const get_columns = () => [
[ [
{ type: 'checkbox' }, {type: 'checkbox'},
{ field: 'powerName', minWidth: 200, title: '权限名称' }, {field: 'powerName', minWidth: 200, title: '权限名称'},
{ field: 'icon', title: '图标', templet: (d) => `<i class="layui-icon ${d.icon}"></i>` }, {field: 'icon', title: '图标', templet: (d) => `<i class="layui-icon ${d.icon}"></i>`},
{ {
field: 'powerType', title: '权限类型', templet: (d) => { field: 'powerType', title: '权限类型', templet: (d) => {
if (d.powerType === 0) { if (d.powerType === 0) {
return `<span>目录</span>` return `<span>目录</span>`;
} else if (d.powerType === 1) { } else if (d.powerType === 1) {
return `<span>菜单</span>` return `<span>菜单</span>`;
} else if (d.powerType === 2) { } else if (d.powerType === 2) {
return `<span>按钮</span>` return `<span>按钮</span>`;
}
},
},
{
field: 'enable', title: '是否可用', templet: (d) => {
// TODO 修改禁用启动逻辑
return `<input type="checkbox" name="enable" value="${d.powerId}" lay-skin="switch" lay-text="启用|禁用" lay-filter="tool-switch" ${d.enable ===
true ? 'checked=checked' : ''}>`
},
},
{ field: 'sort', title: '排序' },
{ title: '操作', templet: '#tool', width: 150, align: 'center' },
],
]
treetable.render({
treeColIndex: 1,
treeSpid: 0,
treeIdName: 'powerId',
treePidName: 'parentId',
skin: 'line',
method: 'post',
treeDefaultClose: true,
toolbar: '#toolbar',
elem: '#tables',
url: '/api/v1/rights/rights',
page: false,
cols: get_columns(),
})
form.on('submit(power_query)', function (data) {
var keyword = data.field.powerName
var $tds = $('#tables').next('.treeTable').find('.layui-table-body tbody tr td')
if (!keyword) {
$tds.css('background-color', 'transparent')
layer.msg('请输入关键字', { icon: 5 })
return
}
var searchCount = 0
$tds.each(function () {
$(this).css('background-color', 'transparent')
if ($(this).text().indexOf(keyword) >= 0) {
$(this).css('background-color', 'rgba(250,230,160,0.5)')
if (searchCount === 0) {
$('body,html').stop(true)
$('body,html').animate({ scrollTop: $(this).offset().top - 150 }, 500)
}
searchCount++
} }
})
if (searchCount === 0) {
layer.msg('没有匹配结果', { icon: 5 })
} else {
treetable.expandAll('#tables')
}
return false
})
table.on('tool(tables)', function (obj) {
if (obj.event === 'tool-remove') {
window.tool_remove(obj)
} else if (obj.event === 'tool-edit') {
window.tool_edit(obj)
}
})
table.on('toolbar(tables)', function (obj) {
if (obj.event === 'toolbar-add') {
window.toolbar_add()
} else if (obj.event === 'refresh') {
window.refresh()
} else if (obj.event === 'toolbar-remove') {
window.toolbar_remove(obj)
}
})
form.on('switch(tool-switch)', function (obj) {
let operate
if (obj.elem.checked) {
operate = 1 /*启用*/
} else {
operate = 0 /*禁用*/
}
let loading = layer.load()
$.ajax({
url: '/api/v1/rights/power/' + this.value + '/status',
data: JSON.stringify({ powerId: this.value, operate: operate }),
dataType: 'json',
contentType: 'application/json',
type: 'put',
success: function (result) {
layer.close(loading)
if (result.success) {
popup.success(result.message)
} else {
popup.failure(result.message)
}
},
})
})
window.toolbar_add = function () {
layer.open({
type: 2,
title: '新增',
shade: 0.1,
area: ['450px', '500px'],
content: '/rights/add',
})
}
window.tool_edit = function (obj) {
layer.open({
type: 2,
title: '修改',
shade: 0.1,
area: ['450px', '500px'],
content: '/rights/power/' + obj.data['powerId'],
})
}
window.tool_remove = function (obj) {
layer.confirm('确定要删除该权限', { icon: 3, title: '提示' }, function (index) {
layer.close(index)
let loading = layer.load()
$.ajax({
url: '/api/v1/rights/power/' + obj.data['powerId'],
dataType: 'json',
type: 'delete',
success: function (result) {
layer.close(loading)
if (result.success) {
popup.success(result.message, function () {
console.log(obj)
obj.del()
})
} else {
popup.failure(result.message)
}
},
})
})
}
window.toolbar_remove = function (obj) {
let data = table.checkStatus(obj.config.id).data
if (data.length === 0) {
layer.msg('未选中数据', {
icon: 3,
time: 1000,
})
return false
}
var ids = []
var hasCheck = table.checkStatus('tables')
var hasCheckData = hasCheck.data
if (hasCheckData.length > 0) {
$.each(hasCheckData, function (index, element) {
ids.push(element.id)
})
}
layer.confirm('确定要删除选中权限', {
icon: 3,
title: '提示',
}, function (index) {
layer.close(index)
let loading = layer.load()
$.ajax({
url: '/api/v1/rights/rights',
data: { ids: ids },
dataType: 'json',
type: 'delete',
success: function (result) {
layer.close(loading)
if (result.success) {
popup.success(result.msg, function () {
console.log(obj)
obj.del()
})
} else {
popup.failure(result.msg)
}
},
})
})
}
iconPicker.render({
// 选择器,推荐使用input
elem: '#add_icon',
// 数据类型:fontClass/unicode,推荐使用fontClass
type: 'fontClass',
// 是否开启搜索:true/false
search: true,
// 是否开启分页
page: true,
// 每页显示数量,默认12
limit: 12,
// 点击回调
click: function (data) {
console.log(data)
}, },
}) },
}) {
</script> field: 'enable', title: '是否可用', templet: (d) => {
{% endblock %} // TODO 修改禁用启动逻辑
return `<input type="checkbox" name="enable" value="${d.powerId}" lay-skin="switch" lay-text="启用|禁用" lay-filter="tool-switch" ${d.enable ===
true ? 'checked=checked' : ''}>`;
},
},
{field: 'sort', title: '排序'},
{title: '操作', templet: '#tool', width: 150, align: 'center'},
],
];
treetable.render({
treeColIndex: 1,
treeSpid: 0,
treeIdName: 'powerId',
treePidName: 'parentId',
skin: 'line',
method: 'post',
treeDefaultClose: true,
toolbar: '#toolbar',
elem: '#tables',
url: '/api/v1/rights/rights',
page: false,
cols: get_columns(),
});
form.on('submit(power_query)', function(data) {
var keyword = data.field.powerName;
var $tds = $('#tables').next('.treeTable').find('.layui-table-body tbody tr td');
if (!keyword) {
$tds.css('background-color', 'transparent');
layer.msg('请输入关键字', {icon: 5});
return;
}
var searchCount = 0;
$tds.each(function() {
$(this).css('background-color', 'transparent');
if ($(this).text().indexOf(keyword) >= 0) {
$(this).css('background-color', 'rgba(250,230,160,0.5)');
if (searchCount === 0) {
$('body,html').stop(true);
$('body,html').animate({scrollTop: $(this).offset().top - 150}, 500);
}
searchCount++;
}
});
if (searchCount === 0) {
layer.msg('没有匹配结果', {icon: 5});
} else {
treetable.expandAll('#tables');
}
return false;
});
table.on('tool(tables)', function(obj) {
if (obj.event === 'tool-remove') {
window.tool_remove(obj);
} else if (obj.event === 'tool-edit') {
window.tool_edit(obj);
}
});
table.on('toolbar(tables)', function(obj) {
if (obj.event === 'toolbar-add') {
window.toolbar_add();
} else if (obj.event === 'refresh') {
window.refresh();
} else if (obj.event === 'toolbar-remove') {
window.toolbar_remove(obj);
}
});
form.on('switch(tool-switch)', function(obj) {
let operate;
if (obj.elem.checked) {
operate = 1; /*启用*/
} else {
operate = 0; /*禁用*/
}
let loading = layer.load();
$.ajax({
url: '/api/v1/rights/power/' + this.value + '/status',
data: JSON.stringify({powerId: this.value, operate: operate}),
dataType: 'json',
contentType: 'application/json',
type: 'put',
success: function(result) {
layer.close(loading);
if (result.success) {
popup.success(result.message);
} else {
popup.failure(result.message);
}
},
});
});
window.toolbar_add = function() {
layer.open({
type: 2,
title: '新增',
shade: 0.1,
area: ['450px', '500px'],
content: '/rights/add',
});
};
window.tool_edit = function(obj) {
layer.open({
type: 2,
title: '修改',
shade: 0.1,
area: ['450px', '500px'],
content: '/rights/power/' + obj.data['powerId'],
});
};
window.tool_remove = function(obj) {
layer.confirm('确定要删除该权限', {icon: 3, title: '提示'}, function(index) {
layer.close(index);
let loading = layer.load();
$.ajax({
url: '/api/v1/rights/power/' + obj.data['powerId'],
dataType: 'json',
type: 'delete',
success: function(result) {
layer.close(loading);
if (result.success) {
popup.success(result.message, function() {
console.log(obj);
obj.del();
});
} else {
popup.failure(result.message);
}
},
});
});
};
window.toolbar_remove = function(obj) {
let data = table.checkStatus(obj.config.id).data;
if (data.length === 0) {
layer.msg('未选中数据', {
icon: 3,
time: 1000,
});
return false;
}
var ids = [];
var hasCheck = table.checkStatus('tables');
var hasCheckData = hasCheck.data;
if (hasCheckData.length > 0) {
$.each(hasCheckData, function(index, element) {
ids.push(element.id);
});
}
layer.confirm('确定要删除选中权限', {
icon: 3,
title: '提示',
}, function(index) {
layer.close(index);
let loading = layer.load();
$.ajax({
url: '/api/v1/rights/rights',
data: {ids: ids},
dataType: 'json',
type: 'delete',
success: function(result) {
layer.close(loading);
if (result.success) {
popup.success(result.msg, function() {
console.log(obj);
obj.del();
});
} else {
popup.failure(result.msg);
}
},
});
});
};
iconPicker.render({
// 选择器,推荐使用input
elem: '#add_icon',
// 数据类型:fontClass/unicode,推荐使用fontClass
type: 'fontClass',
// 是否开启搜索:true/false
search: true,
// 是否开启分页
page: true,
// 每页显示数量,默认12
limit: 12,
// 点击回调
click: function(data) {
console.log(data);
},
});
});
</script>
</body>
</html>
+150 -149
View File
@@ -1,170 +1,171 @@
{% extends 'admin/base.html' %} <!doctype html>
<html lang="zh-CN">
{% block title %} <head>
<title>权限</title> <title>权限</title>
{% endblock %} {% include 'admin/common/header.html' %}
</head>
{% block body %} <body class="pear-container">
<form class="layui-form" action=""> <form class="layui-form" action="">
<div class="mainBox"> <div class="mainBox">
<div class="main-container">
<div class="main-container"> <div class="main-container">
<div class="main-container"> <div class="layui-form-item">
<div class="layui-form-item"> <label class="layui-form-label">父级</label>
<label class="layui-form-label">父级</label> <div class="layui-input-block">
<div class="layui-input-block"> <ul id="selectParent" name="parentId" class="dtree" data-id="-1"></ul>
<ul id="selectParent" name="parentId" class="dtree" data-id="-1"></ul>
</div>
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">名称</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">名称</label>
<input type="text" name="powerName" lay-verify="title" autocomplete="off" placeholder="权限名称" <div class="layui-input-block">
class="layui-input"> <input type="text" name="powerName" lay-verify="title" autocomplete="off" placeholder="权限名称"
</div> class="layui-input">
</div> </div>
<div class="layui-form-item" id="powerCodeItem"> </div>
<label class="layui-form-label">标识</label> <div class="layui-form-item" id="powerCodeItem">
<div class="layui-input-block"> <label class="layui-form-label">标识</label>
<input type="text" id="powerCode" name="powerCode" autocomplete="off" placeholder="权限标识" <div class="layui-input-block">
class="layui-input"> <input type="text" id="powerCode" name="powerCode" autocomplete="off" placeholder="权限标识"
</div> class="layui-input">
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">状态</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">状态</label>
<input type="radio" lay-filter="powerType" name="powerType" value="0" title="目录"> <div class="layui-input-block">
<input type="radio" lay-filter="powerType" name="powerType" value="1" title="菜单" checked> <input type="radio" lay-filter="powerType" name="powerType" value="0" title="目录">
<input type="radio" lay-filter="powerType" name="powerType" value="2" title="按钮"> <input type="radio" lay-filter="powerType" name="powerType" value="1" title="菜单" checked>
</div> <input type="radio" lay-filter="powerType" name="powerType" value="2" title="按钮">
</div> </div>
<div class="layui-form-item" id="powerUrlItem"> </div>
<label class="layui-form-label">路径</label> <div class="layui-form-item" id="powerUrlItem">
<div class="layui-input-block"> <label class="layui-form-label">路径</label>
<input type="text" id="powerUrl" name="powerUrl" autocomplete="off" placeholder="菜单路径" <div class="layui-input-block">
class="layui-input"> <input type="text" id="powerUrl" name="powerUrl" autocomplete="off" placeholder="菜单路径"
</div> class="layui-input">
</div> </div>
<div class="layui-form-item" id="openTypeItem"> </div>
<label class="layui-form-label">打开</label> <div class="layui-form-item" id="openTypeItem">
<div class="layui-input-block"> <label class="layui-form-label">打开</label>
<select name="openType" id="openType"> <div class="layui-input-block">
<option value=""></option> <select name="openType" id="openType">
<option value="_iframe">框架</option> <option value=""></option>
<option value="_blank">签页</option> <option value="_iframe">框架</option>
</select> <option value="_blank">签页</option>
</div> </select>
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">图标</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">图标</label>
<input type="text" id="icon" name="icon" lay-filter="icon" class="layui-input"> <div class="layui-input-block">
</div> <input type="text" id="icon" name="icon" lay-filter="icon" class="layui-input">
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">排序</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">排序</label>
<input type="text" name="sort" lay-verify="title" autocomplete="off" placeholder="排序" <div class="layui-input-block">
class="layui-input"> <input type="text" name="sort" lay-verify="title" autocomplete="off" placeholder="排序"
</div> class="layui-input">
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="bottom"> </div>
<div class="button-container"> <div class="bottom">
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit="" <div class="button-container">
lay-filter="power-save"> <button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit=""
<i class="layui-icon layui-icon-ok"></i> lay-filter="power-save">
提交 <i class="layui-icon layui-icon-ok"></i>
</button> 提交
<button type="reset" class="pear-btn pear-btn-sm"> </button>
<i class="layui-icon layui-icon-refresh"></i> <button type="reset" class="pear-btn pear-btn-sm">
重置 <i class="layui-icon layui-icon-refresh"></i>
</button> 重置
</div> </button>
</div> </div>
</form> </div>
{% endblock %} </form>
{% block models_script %}
<script>
layui.use(['form', 'jquery', 'iconPicker', 'dtree'], function () { {% include 'admin/common/footer.html' %}
let form = layui.form <script>
let $ = layui.jquery layui.use(['form', 'jquery', 'iconPicker', 'dtree'], function() {
let iconPicker = layui.iconPicker let form = layui.form;
let dtree = layui.dtree let $ = layui.jquery;
let iconPicker = layui.iconPicker;
let dtree = layui.dtree;
dtree.renderSelect({ dtree.renderSelect({
elem: '#selectParent', elem: '#selectParent',
url: '/api/v1/rights/rights', url: '/api/v1/rights/rights',
method: 'get', method: 'get',
selectInputName: { nodeId: 'parentId', context: 'powerName' }, selectInputName: {nodeId: 'parentId', context: 'powerName'},
skin: 'layui', skin: 'layui',
dataFormat: 'list', dataFormat: 'list',
response: { treeId: 'powerId', parentId: 'parentId', title: 'powerName' }, //修改response中返回数据的定义 response: {treeId: 'powerId', parentId: 'parentId', title: 'powerName'}, //修改response中返回数据的定义
selectInitVal: '0', selectInitVal: '0',
}) });
form.on('radio(powerType)', function () { form.on('radio(powerType)', function() {
if (this.value == '0') { if (this.value == '0') {
$('#powerUrlItem').hide() $('#powerUrlItem').hide();
$('#powerCodeItem').hide() $('#powerCodeItem').hide();
$('#openTypeItem').hide() $('#openTypeItem').hide();
$('#powerUrl').val('') $('#powerUrl').val('');
$('#powerCode').val('') $('#powerCode').val('');
$('#openType').val('') $('#openType').val('');
} else if (this.value == '1') { } else if (this.value == '1') {
$('#powerUrlItem').show() $('#powerUrlItem').show();
$('#powerCodeItem').show() $('#powerCodeItem').show();
$('#openTypeItem').show() $('#openTypeItem').show();
} else if (this.value == '2') { } else if (this.value == '2') {
$('#powerUrlItem').hide() $('#powerUrlItem').hide();
$('#openTypeItem').hide() $('#openTypeItem').hide();
$('#powerCodeItem').show() $('#powerCodeItem').show();
$('#powerUrl').val('') $('#powerUrl').val('');
$('#openType').val('') $('#openType').val('');
}
});
form.on('submit(power-save)', function(data) {
data.field.icon = 'layui-icon ' + data.field.icon;
$.ajax({
url: '/api/v1/rights/power/0',
data: JSON.stringify(data.field),
dataType: 'json',
contentType: 'application/json',
type: 'post',
success: function(result) {
if (result.success) {
layer.msg(result.message, {icon: 1, time: 1000}, function() {
parent.layer.close(parent.layer.getFrameIndex(window.name));//关闭当前页
parent.render();
});
} else {
layer.msg(result.message, {icon: 2, time: 1000});
} }
}) },
});
return false;
});
form.on('submit(power-save)', function (data) { iconPicker.render({
data.field.icon = 'layui-icon ' + data.field.icon // 选择器,推荐使用input
$.ajax({ elem: '#icon',
url: '/api/v1/rights/power/0', // 数据类型:fontClass/unicode,推荐使用fontClass
data: JSON.stringify(data.field), type: 'fontClass',
dataType: 'json', // 是否开启搜索:true/false
contentType: 'application/json', search: true,
type: 'post', // 是否开启分页
success: function (result) { page: true,
if (result.success) { // 每页显示数量,默认12
layer.msg(result.message, { icon: 1, time: 1000 }, function () { limit: 12,
parent.layer.close(parent.layer.getFrameIndex(window.name))//关闭当前页 // 点击回调
parent.render() click: function(data) {
}) console.log(data);
} else { },
layer.msg(result.message, { icon: 2, time: 1000 }) });
} });
}, </script>
}) </body>
return false </html>
})
iconPicker.render({
// 选择器,推荐使用input
elem: '#icon',
// 数据类型:fontClass/unicode,推荐使用fontClass
type: 'fontClass',
// 是否开启搜索:true/false
search: true,
// 是否开启分页
page: true,
// 每页显示数量,默认12
limit: 12,
// 点击回调
click: function (data) {
console.log(data)
},
})
})
</script>
{% endblock %}
+181 -180
View File
@@ -1,203 +1,204 @@
{% extends 'admin/base.html' %} <!doctype html>
<html lang="zh-CN">
{% block title %} <head>
<title>权限编辑</title> <title>权限编辑</title>
{% endblock %} {% include 'admin/common/header.html' %}
</head>
<body class="pear-container">
{% block body %} <form class="layui-form" action="">
<form class="layui-form" action=""> <div class="mainBox">
<div class="mainBox"> <div class="main-container">
<div class="main-container"> <div class="layui-form-item layui-hide">
<div class="layui-form-item layui-hide"> <label class="layui-form-label">编号</label>
<label class="layui-form-label">编号</label> <div class="layui-input-block">
<div class="layui-input-block"> <input type="text" value="{{ power.id }}" name="powerId"
<input type="text" value="{{ power.id }}" name="powerId" autocomplete="off" class="layui-input">
autocomplete="off" class="layui-input">
</div>
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">父级</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">父级</label>
<ul id="selectParent" name="parentId" class="dtree" data-id="-1"></ul> <div class="layui-input-block">
</div> <ul id="selectParent" name="parentId" class="dtree" data-id="-1"></ul>
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">名称</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">名称</label>
<input type="text" value="{{ power.name }}" name="powerName" <div class="layui-input-block">
autocomplete="off" placeholder="权限名称" class="layui-input"> <input type="text" value="{{ power.name }}" name="powerName"
</div> autocomplete="off" placeholder="权限名称" class="layui-input">
</div> </div>
<div class="layui-form-item" id="powerCodeItem"> </div>
<label class="layui-form-label">标识</label> <div class="layui-form-item" id="powerCodeItem">
<div class="layui-input-block"> <label class="layui-form-label">标识</label>
<input type="text" id="powerCode" value="{{ power.code }}" name="powerCode" <div class="layui-input-block">
autocomplete="off" placeholder="权限标识" class="layui-input"> <input type="text" id="powerCode" value="{{ power.code }}" name="powerCode"
</div> autocomplete="off" placeholder="权限标识" class="layui-input">
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">状态</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">状态</label>
<input type="radio" lay-filter="powerType" {% if power.type == 0 %} checked{% endif %} <div class="layui-input-block">
name="powerType" value="0" title="目录"> <input type="radio" lay-filter="powerType" {% if power.type == 0 %} checked{% endif %}
<input type="radio" lay-filter="powerType" {% if power.type == 1 %} checked{% endif %} name="powerType" value="0" title="目录">
name="powerType" value="1" title="菜单"> <input type="radio" lay-filter="powerType" {% if power.type == 1 %} checked{% endif %}
<input type="radio" lay-filter="powerType" {% if power.type == 2 %} checked{% endif %} name="powerType" value="1" title="菜单">
name="powerType" value="2" title="按钮"> <input type="radio" lay-filter="powerType" {% if power.type == 2 %} checked{% endif %}
</div> name="powerType" value="2" title="按钮">
</div> </div>
<div class="layui-form-item" id="powerUrlItem"> </div>
<label class="layui-form-label">路径</label> <div class="layui-form-item" id="powerUrlItem">
<div class="layui-input-block"> <label class="layui-form-label">路径</label>
<input type="text" id="powerUrl" value="{{ power.url }}" name="powerUrl" <div class="layui-input-block">
autocomplete="off" placeholder="菜单路径" class="layui-input"> <input type="text" id="powerUrl" value="{{ power.url }}" name="powerUrl"
</div> autocomplete="off" placeholder="菜单路径" class="layui-input">
</div> </div>
<div class="layui-form-item" id="openTypeItem"> </div>
<label class="layui-form-label">打开</label> <div class="layui-form-item" id="openTypeItem">
<div class="layui-input-block"> <label class="layui-form-label">打开</label>
<select name="openType" id="openType"> <div class="layui-input-block">
<option value=""></option> <select name="openType" id="openType">
<option value="_iframe" {% if power.open_type == "_iframe" %} selected{% endif %}>框架 <option value=""></option>
</option> <option value="_iframe" {% if power.open_type == "_iframe" %} selected{% endif %}>框架
<option value="_blank" {% if power.open_type == "_blank" %} selected{% endif %}>签页</option> </option>
</select> <option value="_blank" {% if power.open_type == "_blank" %} selected{% endif %}>签页</option>
</div> </select>
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">图标</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">图标</label>
<input type="text" id="edit_icon" value="{{ power.icon }}" name="icon" lay-filter="icon" <div class="layui-input-block">
class="layui-input"> <input type="text" id="edit_icon" value="{{ power.icon }}" name="icon" lay-filter="icon"
</div> class="layui-input">
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">排序</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">排序</label>
<input type="text" value="{{ power.sort }}" name="sort" lay-verify="title" autocomplete="off" <div class="layui-input-block">
placeholder="排序" class="layui-input"> <input type="text" value="{{ power.sort }}" name="sort" lay-verify="title" autocomplete="off"
</div> placeholder="排序" class="layui-input">
</div> </div>
</div> </div>
</div> </div>
<div class="bottom"> </div>
<div class="button-container"> <div class="bottom">
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit="" <div class="button-container">
lay-filter="power-save"> <button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit=""
<i class="layui-icon layui-icon-ok"></i> lay-filter="power-save">
提交 <i class="layui-icon layui-icon-ok"></i>
</button> 提交
<button type="reset" class="pear-btn pear-btn-sm"> </button>
<i class="layui-icon layui-icon-refresh"></i> <button type="reset" class="pear-btn pear-btn-sm">
重置 <i class="layui-icon layui-icon-refresh"></i>
</button> 重置
</div> </button>
</div> </div>
</form> </div>
</form>
{% endblock %}
{% block models_script %} {% include 'admin/common/footer.html' %}
<script> <script>
layui.use(['form', 'jquery', 'iconPicker', 'dtree'], function () { layui.use(['form', 'jquery', 'iconPicker', 'dtree'], function() {
let form = layui.form let form = layui.form;
let $ = layui.jquery let $ = layui.jquery;
let iconPicker = layui.iconPicker let iconPicker = layui.iconPicker;
let dtree = layui.dtree let dtree = layui.dtree;
dtree.renderSelect({ dtree.renderSelect({
elem: '#selectParent', elem: '#selectParent',
url: '/api/v1/rights/rights', url: '/api/v1/rights/rights',
method: 'get', method: 'get',
selectInputName: { nodeId: 'parentId', context: 'powerName' }, selectInputName: {nodeId: 'parentId', context: 'powerName'},
skin: 'layui', skin: 'layui',
dataFormat: 'list', dataFormat: 'list',
response: { treeId: 'powerId', parentId: 'parentId', title: 'powerName' }, response: {treeId: 'powerId', parentId: 'parentId', title: 'powerName'},
selectInitVal: "{{ power.parent_id }}", selectInitVal: "{{ power.parent_id }}",
}) });
form.on('radio(powerType)', function (data) { form.on('radio(powerType)', function(data) {
if (this.value == '0') { if (this.value == '0') {
{#目录#} {#目录#}
$('#powerUrlItem').hide() $('#powerUrlItem').hide();
$('#powerCodeItem').hide() $('#powerCodeItem').hide();
$('#openTypeItem').hide() $('#openTypeItem').hide();
$('#powerUrl').val('') $('#powerUrl').val('');
$('#powerCode').val('') $('#powerCode').val('');
$('#openType').val('') $('#openType').val('');
} else if (this.value == '1') { } else if (this.value == '1') {
{#菜单#} {#菜单#}
$('#powerUrlItem').show() $('#powerUrlItem').show();
$('#powerCodeItem').show() $('#powerCodeItem').show();
$('#openTypeItem').show() $('#openTypeItem').show();
} else if (this.value == '2') { } else if (this.value == '2') {
{#按钮#} {#按钮#}
$('#powerUrlItem').hide() $('#powerUrlItem').hide();
$('#openTypeItem').hide() $('#openTypeItem').hide();
$('#powerCodeItem').show() $('#powerCodeItem').show();
$('#powerUrl').val('') $('#powerUrl').val('');
$('#openType').val('') $('#openType').val('');
}
});
form.on('submit(power-save)', function(data) {
data.field.icon = 'layui-icon ' + data.field.icon;
console.log(data.field);
$.ajax({
url: '/api/v1/rights/power/' + data.field.powerId,
data: JSON.stringify(data.field),
dataType: 'json',
contentType: 'application/json',
type: 'put',
success: function(result) {
if (result.success) {
layer.msg(result.message, {icon: 1, time: 1000}, function() {
parent.layer.close(parent.layer.getFrameIndex(window.name));//关闭当前页
parent.render();
});
} else {
layer.msg(result.message, {icon: 2, time: 1000});
} }
}) },
});
return false;
});
form.on('submit(power-save)', function (data) { iconPicker.render({
data.field.icon = 'layui-icon ' + data.field.icon elem: '#edit_icon',
console.log(data.field) type: 'fontClass',
$.ajax({ search: true,
url: '/api/v1/rights/power/' + data.field.powerId, page: true,
data: JSON.stringify(data.field), limit: 12,
dataType: 'json', click: function(data) {
contentType: 'application/json', console.log(data);
type: 'put', },
success: function (result) { });
if (result.success) {
layer.msg(result.message, { icon: 1, time: 1000 }, function () {
parent.layer.close(parent.layer.getFrameIndex(window.name))//关闭当前页
parent.render()
})
} else {
layer.msg(result.message, { icon: 2, time: 1000 })
}
},
})
return false
})
iconPicker.render({ iconPicker.checkIcon('icon', "{{ icon }}");
elem: '#edit_icon',
type: 'fontClass',
search: true,
page: true,
limit: 12,
click: function (data) {
console.log(data)
},
})
iconPicker.checkIcon('icon', "{{ icon }}") window.init = function(type) {
if (type == '0') {
$('#powerUrlItem').hide();
$('#powerCodeItem').hide();
$('#openTypeItem').hide();
$('#powerUrl').val('');
$('#powerCode').val('');
$('#openType').val('');
} else if (type == '1') {
$('#powerUrlItem').show();
$('#powerCodeItem').show();
$('#openTypeItem').show();
} else if (type == '2') {
$('#powerUrlItem').hide();
$('#openTypeItem').hide();
$('#powerCodeItem').show();
$('#powerUrl').val('');
$('#openType').val('');
}
};
window.init = function (type) { window.init("{{ power.type }}");
if (type == '0') { });
$('#powerUrlItem').hide() </script>
$('#powerCodeItem').hide() </body>
$('#openTypeItem').hide() </html>
$('#powerUrl').val('')
$('#powerCode').val('')
$('#openType').val('')
} else if (type == '1') {
$('#powerUrlItem').show()
$('#powerCodeItem').show()
$('#openTypeItem').show()
} else if (type == '2') {
$('#powerUrlItem').hide()
$('#openTypeItem').hide()
$('#powerCodeItem').show()
$('#powerUrl').val('')
$('#openType').val('')
}
}
window.init("{{ power.type }}")
})
</script>
{% endblock %}
+231 -229
View File
@@ -1,252 +1,254 @@
{% extends 'admin/base.html' %} <!doctype html>
<html lang="zh-CN">
{% block title %} <head>
<title>角色管理</title> <title>角色管理</title>
{% endblock %} {% include 'admin/common/header.html' %}
</head>
{% block body %} <body class="pear-container">
<div class="layui-card"> <div class="layui-card">
<div class="layui-card-body"> <div class="layui-card-body">
<form class="layui-form" action=""> <form class="layui-form" action="">
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">角色名</label> <label class="layui-form-label">角色名</label>
<div class="layui-input-inline"> <div class="layui-input-inline">
<input type="text" name="roleName" placeholder="" class="layui-input"> <input type="text" name="roleName" placeholder="" class="layui-input">
</div>
<label class="layui-form-label">角色标识</label>
<div class="layui-input-inline">
<input type="text" name="roleCode" placeholder="" class="layui-input">
</div>
<button class="pear-btn pear-btn-md pear-btn-primary" lay-submit lay-filter="role-query">
<i class="layui-icon layui-icon-search"></i>
查询
</button>
<button type="reset" class="pear-btn pear-btn-md">
<i class="layui-icon layui-icon-refresh"></i>
重置
</button>
</div> </div>
</form> <label class="layui-form-label">角色标识</label>
</div> <div class="layui-input-inline">
<input type="text" name="roleCode" placeholder="" class="layui-input">
</div>
<button class="pear-btn pear-btn-md pear-btn-primary" lay-submit lay-filter="role-query">
<i class="layui-icon layui-icon-search"></i>
查询
</button>
<button type="reset" class="pear-btn pear-btn-md">
<i class="layui-icon layui-icon-refresh"></i>
重置
</button>
</div>
</form>
</div> </div>
<div class="layui-card"> </div>
<div class="layui-card-body"> <div class="layui-card">
<table id="tables" lay-filter="tables"></table> <div class="layui-card-body">
</div> <table id="tables" lay-filter="tables"></table>
</div> </div>
{% endblock %} </div>
{% block models_script %}
<script type="text/html" id="toolbar">
<button class="pear-btn pear-btn-primary pear-btn-md" lay-event="toolbar-add">
<i class="layui-icon layui-icon-add-1"></i>
新增
</button>
<button class="pear-btn pear-btn-md" lay-event="toolbar-remove">
<i class="layui-icon layui-icon-delete"></i>
删除
</button>
</script>
<script type="text/html" id="tool">
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="tool-edit"><i
class="layui-icon layui-icon-edit"></i>
</button>
<button class="pear-btn pear-btn-warming pear-btn-sm" lay-event="tool-power"><i
class="layui-icon layui-icon-vercode"></i>
</button>
<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="tool-remove"><i
class="layui-icon layui-icon-delete"></i>
</button>
</script>
<script type="text/html" id="tool-switch">
<input type="checkbox" name="enable" value="{{ "{{d.id}}" }}" lay-skin="switch" lay-text="启用|禁用"
lay-filter="tool-switch" {{ "{{# if(d.enable==1){ }} checked {{# } }}" }}>
</script>
<script> {% include 'admin/common/footer.html' %}
layui.use(['table', 'form', 'jquery', 'popup', 'common'], function () { <script type="text/html" id="toolbar">
let table = layui.table <button class="pear-btn pear-btn-primary pear-btn-md" lay-event="toolbar-add">
let form = layui.form <i class="layui-icon layui-icon-add-1"></i>
let $ = layui.jquery 新增
let popup = layui.popup </button>
<button class="pear-btn pear-btn-md" lay-event="toolbar-remove">
<i class="layui-icon layui-icon-delete"></i>
删除
</button>
</script>
<script type="text/html" id="tool">
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="tool-edit"><i
class="layui-icon layui-icon-edit"></i>
</button>
<button class="pear-btn pear-btn-warming pear-btn-sm" lay-event="tool-power"><i
class="layui-icon layui-icon-vercode"></i>
</button>
<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="tool-remove"><i
class="layui-icon layui-icon-delete"></i>
</button>
</script>
<script type="text/html" id="tool-switch">
<input type="checkbox" name="enable" value="{{ "{{d.id}}" }}" lay-skin="switch" lay-text="启用|禁用"
lay-filter="tool-switch" {{ "{{# if(d.enable==1){ }} checked {{# } }}" }}>
</script>
<script>
layui.use(['table', 'form', 'jquery', 'popup', 'common'], function() {
let table = layui.table;
let form = layui.form;
let $ = layui.jquery;
let popup = layui.popup;
const get_columns = () => [ const get_columns = () => [
[ [
{ type: 'checkbox' }, {type: 'checkbox'},
{ title: '角色名', field: 'roleName', align: 'center', width: 100 }, {title: '角色名', field: 'roleName', align: 'center', width: 100},
{ title: 'Key值', field: 'roleCode', align: 'center' }, {title: 'Key值', field: 'roleCode', align: 'center'},
{ title: '描述', field: 'details', align: 'center' }, {title: '描述', field: 'details', align: 'center'},
{ title: '是否可用', field: 'enable', align: 'center', templet: '#tool-switch' }, {title: '是否可用', field: 'enable', align: 'center', templet: '#tool-switch'},
{ title: '排序', field: 'sort', align: 'center' }, {title: '排序', field: 'sort', align: 'center'},
{ title: '操作', toolbar: '#tool', align: 'center', width: 195 }, {title: '操作', toolbar: '#tool', align: 'center', width: 195},
], ],
] ];
table.render({ table.render({
parseData: parserTableData, parseData: parserTableData,
elem: '#tables', elem: '#tables',
url: '/api/v1/roles/role', url: '/api/v1/roles/role',
page: true, page: true,
cols: get_columns(), cols: get_columns(),
skin: 'line', skin: 'line',
toolbar: '#toolbar', toolbar: '#toolbar',
defaultToolbar: [ defaultToolbar: [
{ {
layEvent: 'refresh', layEvent: 'refresh',
icon: 'layui-icon-refresh', icon: 'layui-icon-refresh',
}, 'filter', 'print', 'exports'], }, 'filter', 'print', 'exports'],
}) });
table.on('tool(tables)', function (obj) { table.on('tool(tables)', function(obj) {
if (obj.event === 'tool-remove') { if (obj.event === 'tool-remove') {
window.tool_remove(obj) window.tool_remove(obj);
} else if (obj.event === 'tool-edit') { } else if (obj.event === 'tool-edit') {
window.tool_edit(obj) window.tool_edit(obj);
} else if (obj.event === 'tool-power') { } else if (obj.event === 'tool-power') {
window.tool_power(obj) window.tool_power(obj);
} }
}) });
table.on('toolbar(tables)', function (obj) { table.on('toolbar(tables)', function(obj) {
if (obj.event === 'toolbar-add') { if (obj.event === 'toolbar-add') {
window.toolbar_add() window.toolbar_add();
} else if (obj.event === 'refresh') { } else if (obj.event === 'refresh') {
window.refresh() window.refresh();
} else if (obj.event === 'toolbar-remove') { } else if (obj.event === 'toolbar-remove') {
window.toolbar_remove(obj) window.toolbar_remove(obj);
} }
}) });
form.on('submit(role-query)', function (data) { form.on('submit(role-query)', function(data) {
table.reload('tables', { where: data.field }) table.reload('tables', {where: data.field});
return false return false;
}) });
form.on('switch(tool-switch)', function (obj) { form.on('switch(tool-switch)', function(obj) {
let operate let operate;
if (obj.elem.checked) { if (obj.elem.checked) {
operate = 1 operate = 1;
} else {
operate = 0;
}
let loading = layer.load();
$.ajax({
url: '/api/v1/roles/role/' + this.value + '/status',
data: JSON.stringify({roleId: this.value, operate: operate}),
dataType: 'json',
contentType: 'application/json',
type: 'put',
success: function(result) {
layer.close(loading);
if (result.success) {
layer.msg(result.message, {icon: 1, time: 1000});
} else { } else {
operate = 0 layer.msg(result.message, {icon: 2, time: 1000});
} }
let loading = layer.load() },
$.ajax({ });
url: '/api/v1/roles/role/' + this.value + '/status', });
data: JSON.stringify({ roleId: this.value, operate: operate }),
dataType: 'json',
contentType: 'application/json',
type: 'put',
success: function (result) {
layer.close(loading)
if (result.success) {
layer.msg(result.message, { icon: 1, time: 1000 })
} else {
layer.msg(result.message, { icon: 2, time: 1000 })
}
},
})
})
window.toolbar_add = function () { window.toolbar_add = function() {
layer.open({ layer.open({
type: 2, type: 2,
title: '新增', title: '新增',
shade: 0.1, shade: 0.1,
area: ['500px', '500px'], area: ['500px', '500px'],
content: '/admin/role/add', content: '/admin/role/add',
}) });
} };
window.tool_power = function (obj) { window.tool_power = function(obj) {
layer.open({ layer.open({
type: 2, type: 2,
title: '授权', title: '授权',
shade: 0.1, shade: 0.1,
area: ['320px', '400px'], area: ['320px', '400px'],
content: '/admin/role/power/' + obj.data['id'], content: '/admin/role/power/' + obj.data['id'],
}) });
} };
window.tool_edit = function (obj) { window.tool_edit = function(obj) {
layer.open({ layer.open({
type: 2, type: 2,
title: '修改', title: '修改',
shade: 0.1, shade: 0.1,
area: ['500px', '500px'], area: ['500px', '500px'],
content: '/admin/role/edit/' + obj.data['id'], content: '/admin/role/edit/' + obj.data['id'],
}) });
} };
window.tool_remove = function (obj) { window.tool_remove = function(obj) {
layer.confirm('确定要删除该角色', { icon: 3, title: '提示' }, function (index) { layer.confirm('确定要删除该角色', {icon: 3, title: '提示'}, function(index) {
layer.close(index) layer.close(index);
let loading = layer.load() let loading = layer.load();
$.ajax({ $.ajax({
url: '/api/v1/roles/role_power/' + obj.data['id'], url: '/api/v1/roles/role_power/' + obj.data['id'],
dataType: 'json', dataType: 'json',
type: 'delete', type: 'delete',
success: function (result) { success: function(result) {
layer.close(loading) layer.close(loading);
if (result.success) { if (result.success) {
layer.msg(result.message, { icon: 1, time: 1000 }, function () { layer.msg(result.message, {icon: 1, time: 1000}, function() {
obj.del() obj.del();
}) });
} else { } else {
layer.msg(result.message, { icon: 2, time: 1000 }) layer.msg(result.message, {icon: 2, time: 1000});
} }
}, },
}) });
}) });
} };
window.toolbar_remove = function (obj) { window.toolbar_remove = function(obj) {
let data = table.checkStatus(obj.config.id).data let data = table.checkStatus(obj.config.id).data;
if (data.length === 0) { if (data.length === 0) {
layer.msg('未选中数据', { layer.msg('未选中数据', {
icon: 3, icon: 3,
time: 1000, time: 1000,
}) });
return false return false;
} }
var ids = [] var ids = [];
var hasCheck = table.checkStatus('tables') var hasCheck = table.checkStatus('tables');
var hasCheckData = hasCheck.data var hasCheckData = hasCheck.data;
if (hasCheckData.length > 0) { if (hasCheckData.length > 0) {
$.each(hasCheckData, function (index, element) { $.each(hasCheckData, function(index, element) {
ids.push(element.id) ids.push(element.id);
}) });
} }
console.log(ids) console.log(ids);
layer.confirm('确定要删除选中角色', { layer.confirm('确定要删除选中角色', {
icon: 3, icon: 3,
title: '提示', title: '提示',
}, function (index) { }, function(index) {
layer.close(index) layer.close(index);
let loading = layer.load() let loading = layer.load();
$.ajax({ $.ajax({
url: '/api/v1/roles/role', url: '/api/v1/roles/role',
data: { ids: ids }, data: {ids: ids},
dataType: 'json', dataType: 'json',
type: 'delete', type: 'delete',
success: function (result) { success: function(result) {
layer.close(loading) layer.close(loading);
if (result.success) { if (result.success) {
popup.success(result.message, function () { popup.success(result.message, function() {
table.reload('tables') table.reload('tables');
}) });
} else { } else {
popup.failure(result.message) popup.failure(result.message);
} }
}, },
}) });
}) });
} };
window.refresh = function () { window.refresh = function() {
table.reload('tables') table.reload('tables');
} };
});
</script>
</body>
</html>
})
</script>
{% endblock %}
+81 -78
View File
@@ -1,91 +1,94 @@
{% extends 'admin/base.html' %} <!doctype html>
{% block title %} <html lang="zh-CN">
<head>
<title>角色新增</title> <title>角色新增</title>
{% endblock %} {% include 'admin/common/header.html' %}
</head>
{% block body %} <body class="pear-container">
<form class="layui-form" action=""> <form class="layui-form" action="">
<div class="mainBox"> <div class="mainBox">
<div class="main-container"> <div class="main-container">
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">名称</label> <label class="layui-form-label">名称</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" name="roleName" lay-verify="title" autocomplete="off" placeholder="请输入名称" <input type="text" name="roleName" lay-verify="title" autocomplete="off" placeholder="请输入名称"
class="layui-input"> class="layui-input">
</div>
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">标识</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">标识</label>
<input type="text" name="roleCode" lay-verify="title" autocomplete="off" placeholder="请输入标识" <div class="layui-input-block">
class="layui-input"> <input type="text" name="roleCode" lay-verify="title" autocomplete="off" placeholder="请输入标识"
</div> class="layui-input">
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">状态</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">状态</label>
<input type="radio" name="enable" value="0" title="开启"> <div class="layui-input-block">
<input type="radio" name="enable" value="1" title="关闭" checked> <input type="radio" name="enable" value="0" title="开启">
</div> <input type="radio" name="enable" value="1" title="关闭" checked>
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">排序</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">排序</label>
<input type="text" name="sort" lay-verify="title" autocomplete="off" placeholder="请输入排序序号(数字)" <div class="layui-input-block">
class="layui-input"> <input type="text" name="sort" lay-verify="title" autocomplete="off" placeholder="请输入排序序号(数字)"
</div> class="layui-input">
</div> </div>
<div class="layui-form-item layui-form-text"> </div>
<label class="layui-form-label">描述</label> <div class="layui-form-item layui-form-text">
<div class="layui-input-block"> <label class="layui-form-label">描述</label>
<textarea placeholder="请输入描述" name="details" class="layui-textarea"></textarea> <div class="layui-input-block">
</div> <textarea placeholder="请输入描述" name="details" class="layui-textarea"></textarea>
</div> </div>
</div> </div>
</div> </div>
<div class="bottom"> </div>
<div class="button-container"> <div class="bottom">
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit="" <div class="button-container">
lay-filter="role-save"> <button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit=""
<i class="layui-icon layui-icon-ok"></i> lay-filter="role-save">
提交 <i class="layui-icon layui-icon-ok"></i>
</button> 提交
<button type="reset" class="pear-btn pear-btn-sm"> </button>
<i class="layui-icon layui-icon-refresh"></i> <button type="reset" class="pear-btn pear-btn-sm">
重置 <i class="layui-icon layui-icon-refresh"></i>
</button> 重置
</div> </button>
</div> </div>
</form> </div>
{% endblock %} </form>
{% block models_script %} {% include 'admin/common/footer.html' %}
<script> <script>
layui.use(['form', 'jquery'], function () { layui.use(['form', 'jquery'], function() {
let form = layui.form let form = layui.form;
let $ = layui.jquery let $ = layui.jquery;
form.on('submit(role-save)', function(data) {
$.ajax({
url: '/api/v1/roles/role/',
data: JSON.stringify(data.field),
dataType: 'json',
contentType: 'application/json',
type: 'post',
success: function(result) {
if (result.success) {
layer.msg(result.message, {icon: 1, time: 1000}, function() {
parent.layer.close(parent.layer.getFrameIndex(window.name));//关闭当前页
parent.layui.table.reload('tables');
});
} else {
layer.msg(result.message, {icon: 2, time: 1000});
}
},
});
return false;
});
});
</script>
</body>
</html>
form.on('submit(role-save)', function (data) {
$.ajax({
url: '/api/v1/roles/role/',
data: JSON.stringify(data.field),
dataType: 'json',
contentType: 'application/json',
type: 'post',
success: function (result) {
if (result.success) {
layer.msg(result.message, { icon: 1, time: 1000 }, function () {
parent.layer.close(parent.layer.getFrameIndex(window.name))//关闭当前页
parent.layui.table.reload('tables')
})
} else {
layer.msg(result.message, { icon: 2, time: 1000 })
}
},
})
return false
})
})
</script>
{% endblock %}
+88 -88
View File
@@ -1,104 +1,104 @@
{% extends 'admin/base.html' %} <!doctype html>
{% block title %} <html lang="zh-CN">
<head>
<title>角色编辑</title> <title>角色编辑</title>
{% endblock %} {% include 'admin/common/header.html' %}
</head>
{% block body %} <body class="pear-container">
<form class="layui-form" action=""> <form class="layui-form" action="">
<div class="mainBox"> <div class="mainBox">
<div class="main-container">
<div class="main-container"> <div class="main-container">
<div class="main-container"> <div class="layui-form-item layui-hide">
<div class="layui-form-item layui-hide"> <label class="layui-form-label">编号</label>
<label class="layui-form-label">编号</label> <div class="layui-input-block">
<div class="layui-input-block"> <input type="text" value="{{ role.id }}" name="roleId" lay-verify="title"
<input type="text" value="{{ role.id }}" name="roleId" lay-verify="title" autocomplete="off" placeholder="请输入编号" class="layui-input">
autocomplete="off" placeholder="请输入编号" class="layui-input">
</div>
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">名称</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">名称</label>
<input type="text" value="{{ role.name }}" name="roleName" lay-verify="title" <div class="layui-input-block">
autocomplete="off" placeholder="请输入名称" class="layui-input"> <input type="text" value="{{ role.name }}" name="roleName" lay-verify="title"
</div> autocomplete="off" placeholder="请输入名称" class="layui-input">
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">标识</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">标识</label>
<input type="text" value="{{ role.code }}" readonly name="roleCode" lay-verify="title" <div class="layui-input-block">
autocomplete="off" placeholder="请输入标识" class="layui-input"> <input type="text" value="{{ role.code }}" readonly name="roleCode" lay-verify="title"
</div> autocomplete="off" placeholder="请输入标识" class="layui-input">
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">状态</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">状态</label>
<input type="radio" name="enable" {% if role.enable == 1 %}checked {% endif %}value="1" <div class="layui-input-block">
title="开启"> <input type="radio" name="enable" {% if role.enable == 1 %}checked {% endif %}value="1"
<input type="radio" name="enable" {% if role.enable == 0 %}checked {% endif %} value="0" title="开启">
title="关闭"> <input type="radio" name="enable" {% if role.enable == 0 %}checked {% endif %} value="0"
</div> title="关闭">
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">排序</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">排序</label>
<input type="text" name="sort" value="{{ role.sort }}" lay-verify="title" autocomplete="off" <div class="layui-input-block">
placeholder="请输入排序序号(数字)" <input type="text" name="sort" value="{{ role.sort }}" lay-verify="title" autocomplete="off"
class="layui-input"> placeholder="请输入排序序号(数字)"
</div> class="layui-input">
</div> </div>
<div class="layui-form-item layui-form-text"> </div>
<label class="layui-form-label">描述</label> <div class="layui-form-item layui-form-text">
<div class="layui-input-block"> <label class="layui-form-label">描述</label>
<div class="layui-input-block">
<textarea placeholder="请输入描述" name="details" <textarea placeholder="请输入描述" name="details"
class="layui-textarea">{{ role.details }}</textarea> class="layui-textarea">{{ role.details }}</textarea>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="bottom"> </div>
<div class="button-container"> <div class="bottom">
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit="" <div class="button-container">
lay-filter="role-update"> <button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit=""
<i class="layui-icon layui-icon-ok"></i> lay-filter="role-update">
提交 <i class="layui-icon layui-icon-ok"></i>
</button> 提交
<button type="reset" class="pear-btn pear-btn-sm"> </button>
<i class="layui-icon layui-icon-refresh"></i> <button type="reset" class="pear-btn pear-btn-sm">
重置 <i class="layui-icon layui-icon-refresh"></i>
</button> 重置
</div> </button>
</div> </div>
</form> </div>
{% endblock %} </form>
{% include 'admin/common/footer.html' %}
<script type="module">
layui.use(['form', 'jquery'], function() {
let form = layui.form;
let $ = layui.jquery;
{% block models_script %} form.on('submit(role-update)', function(data) {
<script type="module"> $.ajax({
layui.use(['form', 'jquery'], function () { url: '/api/v1/roles/role/' + data.field.roleId,
let form = layui.form data: JSON.stringify(data.field),
let $ = layui.jquery dataType: 'json',
contentType: 'application/json',
form.on('submit(role-update)', function (data) { type: 'put',
$.ajax({ success: function(result) {
url: '/api/v1/roles/role/' + data.field.roleId, if (result.success) {
data: JSON.stringify(data.field), layer.msg(result.message, {icon: 1, time: 1000}, function() {
dataType: 'json', parent.layer.close(parent.layer.getFrameIndex(window.name));//关闭当前页
contentType: 'application/json', parent.layui.table.reload('tables');
type: 'put', });
success: function (result) { } else {
if (result.success) { layer.msg(result.message, {icon: 2, time: 1000});
layer.msg(result.message, { icon: 1, time: 1000 }, function () { }
parent.layer.close(parent.layer.getFrameIndex(window.name))//关闭当前页 },
parent.layui.table.reload('tables') });
}) return false;
} else { });
layer.msg(result.message, { icon: 2, time: 1000 }) });
} </script>
}, </body>
}) </html>
return false
})
})
</script>
{% endblock %}
+72 -70
View File
@@ -1,82 +1,84 @@
{% extends 'admin/base.html' %} <!doctype html>
{% block title %} <html lang="zh-CN">
<head>
<title>角色授权</title> <title>角色授权</title>
{% endblock %} {% include 'admin/common/header.html' %}
</head>
{% block body %} <body class="pear-container">
<form class="layui-form" action=""> <form class="layui-form" action="">
<div class="mainBox"> <div class="mainBox">
<div class="main-container">
<div class="main-container"> <div class="main-container">
<div class="main-container"> <ul id="role-power" class="dtree" data-id="0"></ul>
<ul id="role-power" class="dtree" data-id="0"></ul>
</div>
</div> </div>
</div> </div>
<div class="bottom"> </div>
<div class="button-container"> <div class="bottom">
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit="" <div class="button-container">
lay-filter="power-save"> <button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit=""
<i class="layui-icon layui-icon-ok"></i> lay-filter="power-save">
提交 <i class="layui-icon layui-icon-ok"></i>
</button> 提交
<button type="reset" class="pear-btn pear-btn-sm"> </button>
<i class="layui-icon layui-icon-refresh"></i> <button type="reset" class="pear-btn pear-btn-sm">
重置 <i class="layui-icon layui-icon-refresh"></i>
</button> 重置
</div> </button>
</div> </div>
</form> </div>
{% endblock %} </form>
{% block models_script %} {% include 'admin/common/footer.html' %}
<script> <script>
layui.use(['dtree', 'form', 'jquery'], function () { layui.use(['dtree', 'form', 'jquery'], function() {
let dtree = layui.dtree let dtree = layui.dtree;
let form = layui.form let form = layui.form;
let $ = layui.jquery let $ = layui.jquery;
dtree.render({ dtree.render({
elem: '#role-power', elem: '#role-power',
method: 'get', method: 'get',
url: '/api/v1/roles/role_power/' + {{ role_id }}, /*最后是 jianja2 语法*/ url: '/api/v1/roles/role_power/' + {{ role_id }}, /*最后是 jianja2 语法*/
dataFormat: 'list', dataFormat: 'list',
checkbar: true, checkbar: true,
skin: 'layui', skin: 'layui',
initLevel: '1', initLevel: '1',
checkbarType: 'self', checkbarType: 'self',
response: { treeId: 'powerId', parentId: 'parentId', title: 'powerName' }, response: {treeId: 'powerId', parentId: 'parentId', title: 'powerName'},
}) });
form.on('submit(power-save)', function (data) { form.on('submit(power-save)', function(data) {
let param = dtree.getCheckbarNodesParam('role-power') let param = dtree.getCheckbarNodesParam('role-power');
let ids = '' let ids = '';
for (let i = 0; i < param.length; i++) { for (let i = 0; i < param.length; i++) {
let id = param[i].nodeId let id = param[i].nodeId;
ids += id + ',' ids += id + ',';
}
ids = ids.substr(0, ids.length - 1);
data.field.roleId = {{role_id}};
data.field.powerIds = ids;
$.ajax({
url: '/api/v1/roles/role_power/' + data.field.roleId,
data: data.field,
dataType: 'json',
type: 'put',
success: function(result) {
if (result.success) {
layer.msg(result.message, {icon: 1, time: 1000}, function() {
parent.layer.close(parent.layer.getFrameIndex(window.name));
});
} else {
layer.msg(result.message, {icon: 2, time: 1000});
} }
ids = ids.substr(0, ids.length - 1) },
data.field.roleId = {{role_id}}; });
data.field.powerIds = ids return false;
});
$.ajax({ });
url: '/api/v1/roles/role_power/' + data.field.roleId, </script>
data: data.field, </body>
dataType: 'json', </html>
type: 'put',
success: function (result) {
if (result.success) {
layer.msg(result.message, { icon: 1, time: 1000 }, function () {
parent.layer.close(parent.layer.getFrameIndex(window.name))
})
} else {
layer.msg(result.message, { icon: 2, time: 1000 })
}
},
})
return false
})
})
</script>
{% endblock %}
+269 -270
View File
@@ -1,6 +1,6 @@
{% extends 'admin/base.html' %} <!doctype html>
<html lang="zh-CN">
{% block title %} <head>
<title>个人中心</title> <title>个人中心</title>
<style> <style>
.layui-form-item { .layui-form-item {
@@ -8,173 +8,172 @@
margin-bottom: 17px !important; margin-bottom: 17px !important;
} }
</style> </style>
{% endblock %} {% include 'admin/common/header.html' %}
</head>
<body class="pear-container">
<div class="layui-row layui-col-space10">
{% block body %} {# 左侧栏 #}
<div class="layui-row layui-col-space10"> <div class="layui-col-md3">
{# 左侧栏 #} {# 个人信息卡片 #}
<div class="layui-col-md3"> <div class="layui-card">
{# 个人信息卡片 #} <div class="layui-card-body" style="padding: 25px;">
<div class="layui-card"> <div class="text-center layui-text">
<div class="layui-card-body" style="padding: 25px;"> <div class="user-info-head" id="userInfoHead">
<div class="text-center layui-text"> <img id="avatar" src="{{ user_info.avatar }}" width="115px" height="115px" alt="">
<div class="user-info-head" id="userInfoHead">
<img id="avatar" src="{{ user_info.avatar }}" width="115px" height="115px" alt="">
</div>
<h2 style="padding-top: 20px;font-size: 20px;">{{ user_info.realname }}</h2>
<p style="padding-top: 8px;margin-top: 10px;font-size: 13.5px;">China 中国</p>
</div> </div>
</div> <h2 style="padding-top: 20px;font-size: 20px;">{{ user_info.realname }}</h2>
<div style="height: 45px;border-top: 1px whitesmoke solid;text-align: center;line-height: 45px;font-size: 13.5px;"> <p style="padding-top: 8px;margin-top: 10px;font-size: 13.5px;">China 中国</p>
<span>{{ user_info.remark }}</span>
</div> </div>
</div> </div>
{# 登录信息卡片 #} <div style="height: 45px;border-top: 1px whitesmoke solid;text-align: center;line-height: 45px;font-size: 13.5px;">
<div class="layui-card"> <span>{{ user_info.remark }}</span>
<div class="layui-card-header"> </div>
登录记录 </div>
</div> {# 登录信息卡片 #}
<div class="layui-card-body"> <div class="layui-card">
<ul class="list"> <div class="layui-card-header">
{% for log in user_logs %} 登录记录
<li class="list-item"> </div>
<span class="title">{{ log.url }}</span> <div class="layui-card-body">
<span class="footer">{{ log.create_time }}</span> <ul class="list">
</li> {% for log in user_logs %}
{% endfor %} <li class="list-item">
</ul> <span class="title">{{ log.url }}</span>
<span class="footer">{{ log.create_time }}</span>
</li>
{% endfor %}
</ul>
</div>
</div>
</div>
{# 右侧栏 #}
<div class="layui-col-md9">
{# 个人信息卡片 #}
<div class="layui-card">
<div class="layui-card-header">个人信息</div>
<div class="layui-card-body">
<div class="layui-tab layui-tab-brief">
<div class="layui-tab-content">
<div class="layui-tab-item layui-show">
<form class="layui-form">
<div class="layui-form-item" style="display: none">
<label class="layui-form-label">用户id</label>
<div class="layui-input-block">
<input value="{{ user_info.id }}" type="text" readonly name="user_id"
id="user_id"
lay-verify="title"
autocomplete="off" placeholder="请输入标题" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">账号</label>
<div class="layui-input-block">
<input value="{{ user_info.username }}" type="text" readonly name="username"
lay-verify="title"
autocomplete="off" placeholder="请输入标题" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">姓名</label>
<div class="layui-input-block">
<input value="{{ user_info.realname }}" type="text" name="realName"
lay-verify="title"
autocomplete="off" placeholder="请输入标题" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">描述</label>
<div class="layui-input-block">
<textarea placeholder="请输入描述" name="details"
class="layui-textarea">{{ user_info.remark }}</textarea>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-submit
lay-filter="user-update">修改资料
</button>
<button class="pear-btn pear-btn-sm edit-password">更改密码</button>
</div>
</div>
</form>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
{# 右侧栏 #} {# 个人文章记录 #}
<div class="layui-col-md9"> <div class="layui-card">
{# 个人信息卡片 #} <div class="layui-card-header">
<div class="layui-card"> 我的文章
<div class="layui-card-header">个人信息</div>
<div class="layui-card-body">
<div class="layui-tab layui-tab-brief">
<div class="layui-tab-content">
<div class="layui-tab-item layui-show">
<form class="layui-form">
<div class="layui-form-item" style="display: none">
<label class="layui-form-label">用户id</label>
<div class="layui-input-block">
<input value="{{ user_info.id }}" type="text" readonly name="user_id"
id="user_id"
lay-verify="title"
autocomplete="off" placeholder="请输入标题" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">账号</label>
<div class="layui-input-block">
<input value="{{ user_info.username }}" type="text" readonly name="username"
lay-verify="title"
autocomplete="off" placeholder="请输入标题" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">姓名</label>
<div class="layui-input-block">
<input value="{{ user_info.realname }}" type="text" name="realName"
lay-verify="title"
autocomplete="off" placeholder="请输入标题" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">描述</label>
<div class="layui-input-block">
<textarea placeholder="请输入描述" name="details"
class="layui-textarea">{{ user_info.remark }}</textarea>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-submit
lay-filter="user-update">修改资料
</button>
<button class="pear-btn pear-btn-sm edit-password">更改密码</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div> </div>
{# 个人文章记录 #} <div class="layui-card-body">
<div class="layui-card"> <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
<div class="layui-card-header"> <div class="layui-tab-content">
我的文章 <div class="layui-tab-item layui-show">
</div> <div class="layui-row layui-col-space10" style="margin: 15px;">
<div class="layui-card-body"> <div class="layui-col-md1">
<div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief"> <img src="{{ url_for('static', filename='admin/admin/images/act.jpg') }}"
<div class="layui-tab-content"> style="width: 100%;height: 100%;border-radius: 5px;"/>
<div class="layui-tab-item layui-show"> </div>
<div class="layui-row layui-col-space10" style="margin: 15px;"> <div class="layui-col-md11" style="height: 80px;">
<div class="layui-col-md1"> <div class="title">为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习?</div>
<img src="{{ url_for('static', filename='admin/admin/images/act.jpg') }}" <div class="content">
style="width: 100%;height: 100%;border-radius: 5px;"/> “Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~
</div> </div>
<div class="layui-col-md11" style="height: 80px;"> <div class="comment">2020-06-12 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 评论 5 点赞 12
<div class="title">为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习?</div> 转发
<div class="content"> 4
“Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~
</div>
<div class="comment">2020-06-12 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 评论 5 点赞 12
转发
4
</div>
</div> </div>
</div> </div>
<div class="layui-row layui-col-space10" style="margin: 15px;"> </div>
<div class="layui-col-md1"> <div class="layui-row layui-col-space10" style="margin: 15px;">
<img src="{{ url_for('static', filename='admin/admin/images/act.jpg') }}" <div class="layui-col-md1">
style="width: 100%;height: 100%;border-radius: 5px;"/> <img src="{{ url_for('static', filename='admin/admin/images/act.jpg') }}"
style="width: 100%;height: 100%;border-radius: 5px;"/>
</div>
<div class="layui-col-md11" style="height: 80px;">
<div class="title">为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习?</div>
<div class="content">
“Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~
</div> </div>
<div class="layui-col-md11" style="height: 80px;"> <div class="comment">2020-06-12 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 评论 5 点赞 12
<div class="title">为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习?</div> 转发
<div class="content"> 4
“Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~
</div>
<div class="comment">2020-06-12 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 评论 5 点赞 12
转发
4
</div>
</div> </div>
</div> </div>
<div class="layui-row layui-col-space10" style="margin: 15px;"> </div>
<div class="layui-col-md1"> <div class="layui-row layui-col-space10" style="margin: 15px;">
<img src="{{ url_for('static', filename='admin/admin/images/act.jpg') }}" <div class="layui-col-md1">
style="width: 100%;height: 100%;border-radius: 5px;"/> <img src="{{ url_for('static', filename='admin/admin/images/act.jpg') }}"
style="width: 100%;height: 100%;border-radius: 5px;"/>
</div>
<div class="layui-col-md11" style="height: 80px;">
<div class="title">为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习?</div>
<div class="content">
“Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~
</div> </div>
<div class="layui-col-md11" style="height: 80px;"> <div class="comment">2020-06-12 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 评论 5 点赞 12
<div class="title">为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习?</div> 转发
<div class="content"> 4
“Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~
</div>
<div class="comment">2020-06-12 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 评论 5 点赞 12
转发
4
</div>
</div> </div>
</div> </div>
<div class="layui-row layui-col-space10" style="margin: 15px;"> </div>
<div class="layui-col-md1"> <div class="layui-row layui-col-space10" style="margin: 15px;">
<img src="{{ url_for('static', filename='admin/admin/images/act.jpg') }}" <div class="layui-col-md1">
style="width: 100%;height: 100%;border-radius: 5px;"/> <img src="{{ url_for('static', filename='admin/admin/images/act.jpg') }}"
style="width: 100%;height: 100%;border-radius: 5px;"/>
</div>
<div class="layui-col-md11" style="height: 80px;">
<div class="title">为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习?</div>
<div class="content">
“Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~
</div> </div>
<div class="layui-col-md11" style="height: 80px;"> <div class="comment">2020-06-12 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 评论 5 点赞 12
<div class="title">为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习?</div> 转发
<div class="content"> 4
“Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~
</div>
<div class="comment">2020-06-12 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 评论 5 点赞 12
转发
4
</div>
</div> </div>
</div> </div>
</div> </div>
@@ -184,134 +183,134 @@
</div> </div>
</div> </div>
</div> </div>
</div>
<form id="edit_password_view" class="layui-form" action="" style="display: none"> <form id="edit_password_view" class="layui-form" action="" style="display: none">
<div class="mainBox"> <div class="mainBox">
<div class="main-container"> <div class="main-container">
<div class="layui-form-item" style="display: none"> <div class="layui-form-item" style="display: none">
<label class="layui-form-label">用户id</label> <label class="layui-form-label">用户id</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input value="{{ user_info.id }}" type="text" readonly name="user_id" <input value="{{ user_info.id }}" type="text" readonly name="user_id"
id="user_id" id="user_id"
lay-verify="title" lay-verify="title"
autocomplete="off" placeholder="请输入标题" class="layui-input"> autocomplete="off" placeholder="请输入标题" class="layui-input">
</div>
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">旧密码</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">旧密码</label>
<input type="password" name="oldPassword" lay-verify="title" autocomplete="off" <div class="layui-input-block">
placeholder="请输入标题" class="layui-input"> <input type="password" name="oldPassword" lay-verify="title" autocomplete="off"
</div> placeholder="请输入标题" class="layui-input">
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">新密码</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">新密码</label>
<input type="password" name="newPassword" lay-verify="title" autocomplete="off" <div class="layui-input-block">
placeholder="请输入标题" class="layui-input"> <input type="password" name="newPassword" lay-verify="title" autocomplete="off"
</div> placeholder="请输入标题" class="layui-input">
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">确认密码</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">确认密码</label>
<input type="password" name="confirmPassword" lay-verify="title" autocomplete="off" <div class="layui-input-block">
placeholder="请输入标题" class="layui-input"> <input type="password" name="confirmPassword" lay-verify="title" autocomplete="off"
</div> placeholder="请输入标题" class="layui-input">
</div> </div>
</div> </div>
</div> </div>
<div class="bottom"> </div>
<div class="button-container"> <div class="bottom">
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit="" <div class="button-container">
lay-filter="edit-password"> <button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit=""
<i class="layui-icon layui-icon-ok"></i> lay-filter="edit-password">
提交 <i class="layui-icon layui-icon-ok"></i>
</button> 提交
<button type="reset" class="pear-btn pear-btn-sm"> </button>
<i class="layui-icon layui-icon-refresh"></i> <button type="reset" class="pear-btn pear-btn-sm">
重置 <i class="layui-icon layui-icon-refresh"></i>
</button> 重置
</div> </button>
</div> </div>
</form> </div>
</form>
{% endblock %}
{% block models_script %} {% include 'admin/common/footer.html' %}
<script> <script>
layui.use(['element', 'jquery', 'layer', 'form', 'popup'], function () { layui.use(['element', 'jquery', 'layer', 'form', 'popup'], function() {
let $ = layui.jquery let $ = layui.jquery;
let layer = layui.layer let layer = layui.layer;
let form = layui.form let form = layui.form;
let popup = layui.popup let popup = layui.popup;
// 修改密码页面 // 修改密码页面
$('.edit-password').click(function () { $('.edit-password').click(function() {
layer.open({ layer.open({
type: 1, type: 1,
title: '修改密码', title: '修改密码',
shade: 0.1, shade: 0.1,
area: ['550px', '280px'], area: ['550px', '280px'],
content: $('#edit_password_view'), content: $('#edit_password_view'),
}) });
return false return false;
}) });
// 修改头像 // 修改头像
$('#avatar').click(function () { $('#avatar').click(function() {
layer.open({ layer.open({
type: 2, type: 2,
title: '更换图片', title: '更换图片',
shade: 0.1, shade: 0.1,
area: ['900px', '500px'], area: ['900px', '500px'],
content: '/users/avatar', content: '/users/avatar',
btn: ['确定', '取消'], btn: ['确定', '取消'],
yes: function (index, layero) { yes: function(index, layero) {
window['layui-layer-iframe' + index].submitForm() window['layui-layer-iframe' + index].submitForm();
}, },
}) });
}) });
// 表单提交更改个人信息数据 // 表单提交更改个人信息数据
form.on('submit(user-update)', function (data) { form.on('submit(user-update)', function(data) {
$.ajax({ $.ajax({
url: '/api/v1/users/user/' + data.field.user_id + '/info', url: '/api/v1/users/user/' + data.field.user_id + '/info',
data: JSON.stringify(data.field), data: JSON.stringify(data.field),
dataType: 'json', dataType: 'json',
contentType: 'application/json', contentType: 'application/json',
type: 'put', type: 'put',
success: function (result) { success: function(result) {
if (result.success) { if (result.success) {
layer.msg('修改成功', { icon: 1, time: 1000 }) layer.msg('修改成功', {icon: 1, time: 1000});
} else { } else {
layer.msg('修改失败', { icon: 2, time: 1000 }) layer.msg('修改失败', {icon: 2, time: 1000});
} }
}, },
}) });
return false return false;
}) });
// 修改密码提交 // 修改密码提交
form.on('submit(edit-password)', function (data) { form.on('submit(edit-password)', function(data) {
$.ajax({ $.ajax({
url: '/api/v1/users/user/' + data.field.user_id + '/password', url: '/api/v1/users/user/' + data.field.user_id + '/password',
data: JSON.stringify(data.field), data: JSON.stringify(data.field),
contentType: 'application/json', contentType: 'application/json',
dataType: 'json', dataType: 'json',
type: 'put', type: 'put',
success: function (result) { success: function(result) {
if (result.success) { if (result.success) {
popup.success(result.message, function () { popup.success(result.message, function() {
// TODO 关闭修改密码成之后的窗口 // TODO 关闭修改密码成之后的窗口
parent.layer.close(parent.layer.getFrameIndex(window.name)) parent.layer.close(parent.layer.getFrameIndex(window.name));
}) });
} else { } else {
popup.failure(result.message) popup.failure(result.message);
} }
}, },
}) });
return false return false;
}) });
}) });
</script> </script>
{% endblock %} </body>
</html>
+116 -116
View File
@@ -1,127 +1,127 @@
{% extends 'admin/base.html' %} <!doctype html>
<html lang="zh-CN">
{% block title %} <head>
<title>头像上传</title> <title>头像上传</title>
{% endblock %} {% include 'admin/common/header.html' %}
</head>
{% block body %} <body class="pear-container">
<div class="layui-row layui-col-space15"> <div class="layui-row layui-col-space15">
<div class="layui-col-xs9"> <div class="layui-col-xs9">
<div style="height:325px;background-color: rgb(247, 247, 247);"> <div style="height:325px;background-color: rgb(247, 247, 247);">
<img id="sourceImage" src=""> <img id="sourceImage" src="">
</div>
</div>
<div class="layui-col-xs3" style="padding-left:0px;">
<div id="previewImage"
style="width:210px;height:210px;border: 1px solid rgb(200, 200, 200);border-radius: 50%;overflow:hidden;">
</div>
</div> </div>
</div> </div>
<div class="layui-row"> <div class="layui-col-xs3" style="padding-left:0px;">
<div class="layui-form-item"> <div id="previewImage"
<div class="layui-input-inline layui-btn-container" style="width: auto;vertical-align:top;"> style="width:210px;height:210px;border: 1px solid rgb(200, 200, 200);border-radius: 50%;overflow:hidden;">
<button class="pear-btn pear-btn-sm pear-btn-primary layui-icon layui-icon-left" cropper-event="rotate"
data-option="-15" title="左旋15°"></button>
<button class="pear-btn pear-btn-sm pear-btn-primary layui-icon layui-icon-right" cropper-event="rotate"
data-option="15" title="右旋15°"></button>
<button class="pear-btn pear-btn-sm pear-btn-danger layui-icon layui-icon-refresh" cropper-event="reset"
title="重置"></button>
<label for="uploadPicture" class="pear-btn pear-btn-sm pear-btn-primary layui-icon layui-icon-upload"
title="选择图片"></label>
<input class="layui-upload-file" id="uploadPicture" type="file" value="选择图片">
</div>
<div class="layui-form-mid layui-word-aux">建议:图片的尺寸宽高比为1:1,大小在5m以内。</div>
<input type="text" hidden value="{{ current_user.id }}" id="user_id">
</div> </div>
</div> </div>
{% endblock %} </div>
<div class="layui-row">
<div class="layui-form-item">
<div class="layui-input-inline layui-btn-container" style="width: auto;vertical-align:top;">
<button class="pear-btn pear-btn-sm pear-btn-primary layui-icon layui-icon-left" cropper-event="rotate"
data-option="-15" title="左旋15°"></button>
<button class="pear-btn pear-btn-sm pear-btn-primary layui-icon layui-icon-right" cropper-event="rotate"
data-option="15" title="右旋15°"></button>
<button class="pear-btn pear-btn-sm pear-btn-danger layui-icon layui-icon-refresh" cropper-event="reset"
title="重置"></button>
<label for="uploadPicture" class="pear-btn pear-btn-sm pear-btn-primary layui-icon layui-icon-upload"
title="选择图片"></label>
<input class="layui-upload-file" id="uploadPicture" type="file" value="选择图片">
</div>
<div class="layui-form-mid layui-word-aux">建议:图片的尺寸宽高比为1:1,大小在5m以内。</div>
<input type="text" hidden value="{{ current_user.id }}" id="user_id">
</div>
</div>
{% block models_script %} {% include 'admin/common/footer.html' %}
<script> <script>
layui.use(['jquery', 'layer', 'cropper', 'popup'], function () { layui.use(['jquery', 'layer', 'cropper', 'popup'], function() {
let $ = layui.jquery let $ = layui.jquery;
let layer = layui.layer let layer = layui.layer;
let cropper = layui.cropper let cropper = layui.cropper;
let popup = layui.popup let popup = layui.popup;
let options = { let options = {
aspectRatio: 1 / 1, // 裁剪框比例 aspectRatio: 1 / 1, // 裁剪框比例
preview: '#previewImage', // 预览div preview: '#previewImage', // 预览div
viewmode: 1, viewmode: 1,
} };
$('#sourceImage').attr('src', parent.layui.$('#avatar').attr('src')) $('#sourceImage').attr('src', parent.layui.$('#avatar').attr('src'));
$('#sourceImage').cropper(options) $('#sourceImage').cropper(options);
window.submitForm = function () { window.submitForm = function() {
$('#sourceImage').crossOrigin = 'anonymous'//解决跨域图片问题 $('#sourceImage').crossOrigin = 'anonymous';//解决跨域图片问题
$('#sourceImage').cropper('getCroppedCanvas', { $('#sourceImage').cropper('getCroppedCanvas', {
width: 280, width: 280,
height: 140, height: 140,
}).toBlob(function (blob) { }).toBlob(function(blob) {
let timeStamp = Date.parse(new Date()) let timeStamp = Date.parse(new Date());
let fileName = timeStamp + '.jpg' let fileName = timeStamp + '.jpg';
let formData = new FormData() let formData = new FormData();
formData.append('file', blob, fileName) formData.append('file', blob, fileName);
formData.append('fileName', fileName) formData.append('fileName', fileName);
formData.append('fileToken', timeStamp) formData.append('fileToken', timeStamp);
$.ajax({ $.ajax({
method: 'post', method: 'post',
url: '/api/v1/file/photos', //用于文件上传的服务器端请求地址 url: '/api/v1/file/photos', //用于文件上传的服务器端请求地址
data: formData, data: formData,
processData: false, processData: false,
contentType: false, contentType: false,
success: function (result) { success: function(result) {
if (result.success) { if (result.success) {
// 修改 avatar 字段 // 修改 avatar 字段
$.ajax({ $.ajax({
method: 'put', method: 'put',
url: '/api/v1/users/user/' + $('#user_id').val() + '/avatar', url: '/api/v1/users/user/' + $('#user_id').val() + '/avatar',
data: JSON.stringify({ avatar: result.data }), data: JSON.stringify({avatar: result.data}),
dataType: 'json', dataType: 'json',
contentType: 'application/json', contentType: 'application/json',
success: function (res) { success: function(res) {
if (res.success) { if (res.success) {
// 关闭当前弹层 // 关闭当前弹层
parent.layui.$('#avatar').attr('src', result.data.src) parent.layui.$('#avatar').attr('src', result.data.src);
top.layui.$('#avatar').attr('src', result.data.src) top.layui.$('#avatar').attr('src', result.data.src);
parent.layer.close(parent.layer.getFrameIndex(window.name)) parent.layer.close(parent.layer.getFrameIndex(window.name));
} else { } else {
popup.failure('上传失败') popup.failure('上传失败');
} }
}, },
}) });
} else { } else {
popup.failure('上传失败') popup.failure('上传失败');
}
},
})
})
}
$('.pear-btn').on('click', function () {
let event = $(this).attr('cropper-event')
if (event === 'rotate') {
let option = $(this).attr('data-option')
$('#sourceImage').cropper('rotate', option)
} else if (event === 'reset') {
$('#sourceImage').cropper('reset')
}
$('#uploadPicture').change(function () {
let r = new FileReader()
let f = this.files[0]
let uploadFileSize = f.size / 1024
if (uploadFileSize > 5120) {
parent.layer.msg('上传文件不得超过5m', { icon: 5 })
return false
} }
r.readAsDataURL(f) },
r.onload = function (e) { });
$('#sourceImage').cropper('destroy').attr('src', this.result).cropper(options) });
} };
})
}) $('.pear-btn').on('click', function() {
}) let event = $(this).attr('cropper-event');
</script> if (event === 'rotate') {
{% endblock %} let option = $(this).attr('data-option');
$('#sourceImage').cropper('rotate', option);
} else if (event === 'reset') {
$('#sourceImage').cropper('reset');
}
$('#uploadPicture').change(function() {
let r = new FileReader();
let f = this.files[0];
let uploadFileSize = f.size / 1024;
if (uploadFileSize > 5120) {
parent.layer.msg('上传文件不得超过5m', {icon: 5});
return false;
}
r.readAsDataURL(f);
r.onload = function(e) {
$('#sourceImage').cropper('destroy').attr('src', this.result).cropper(options);
};
});
});
});
</script>
</body>
</html>
+297 -296
View File
@@ -1,314 +1,315 @@
{% extends 'admin/base.html' %} <!doctype html>
<html lang="zh-CN">
{% block title %} <head>
<title>用户管理</title> <title>用户管理</title>
{% include 'admin/common/header.html' %}
<link rel="stylesheet" href="/static/admin/admin/css/other/user.css"/> <link rel="stylesheet" href="/static/admin/admin/css/other/user.css"/>
{% endblock %} </head>
<body class="pear-container">
{% block body %} {# 查询表单 #}
{# 查询表单 #} <div class="layui-card">
<div class="layui-card-body">
<form class="layui-form" action="" lay-filter="user-query-form">
<div class="layui-form-item">
<label class="layui-form-label">用户</label>
<div class="layui-input-inline">
<input type="text" name="realName" placeholder="" class="layui-input">
</div>
<label class="layui-form-label">账号</label>
<div class="layui-input-inline">
<input type="text" name="username" placeholder="" class="layui-input">
</div>
<button class="pear-btn pear-btn-md pear-btn-primary" lay-submit lay-filter="user-query">
<i class="layui-icon layui-icon-search"></i>
查询
</button>
<button type="reset" class="pear-btn pear-btn-md">
<i class="layui-icon layui-icon-refresh"></i>
重置
</button>
</div>
</form>
</div>
</div>
<div class="user-left user-collasped">
<div class="layui-card"> <div class="layui-card">
<div class="layui-card-body"> <div class="layui-card-body">
<form class="layui-form" action="" lay-filter="user-query-form"> <div class="button button-primary user-group" user-group=""> 全 部 用 户</div>
<div class="layui-form-item"> <div class="button button-default user-group" user-group="-1"> 默 认 分 组</div>
<label class="layui-form-label">用户</label> <div style="overflow: auto">
<div class="layui-input-inline"> <ul id="dept-tree" class="dept-tree" data-id="0"></ul>
<input type="text" name="realName" placeholder="" class="layui-input">
</div>
<label class="layui-form-label">账号</label>
<div class="layui-input-inline">
<input type="text" name="username" placeholder="" class="layui-input">
</div>
<button class="pear-btn pear-btn-md pear-btn-primary" lay-submit lay-filter="user-query">
<i class="layui-icon layui-icon-search"></i>
查询
</button>
<button type="reset" class="pear-btn pear-btn-md">
<i class="layui-icon layui-icon-refresh"></i>
重置
</button>
</div>
</form>
</div>
</div>
<div class="user-left user-collasped">
<div class="layui-card">
<div class="layui-card-body">
<div class="button button-primary user-group" user-group=""> 全 部 用 户</div>
<div class="button button-default user-group" user-group="-1"> 默 认 分 组</div>
<div style="overflow: auto">
<ul id="dept-tree" class="dept-tree" data-id="0"></ul>
</div>
</div> </div>
</div> </div>
</div> </div>
{# 用户表格 #} </div>
<div class="user-main user-collasped"> {# 用户表格 #}
<div class="layui-card"> <div class="user-main user-collasped">
<div class="layui-card-body"> <div class="layui-card">
<table id="tables" lay-filter="tables"></table> <div class="layui-card-body">
</div> <table id="tables" lay-filter="tables"></table>
</div> </div>
</div> </div>
{% endblock %} </div>
{% block models_script %}
{# 表格操作 #}
<script type="text/html" id="toolbar">
<button class="pear-btn pear-btn-primary pear-btn-md" lay-event="toolbar-add">
<i class="pear-icon pear-icon-add"></i>
新增
</button>
<button class="pear-btn pear-btn-md" lay-event="toolbar-remove">
<i class="pear-icon pear-icon-ashbin"></i>
删除
</button>
<button class="pear-btn pear-btn-md" lay-event="toolbar-collasped">
<i class="pear-icon pear-icon-modular"></i>
高级
</button>
</script>
{# 用户修改操作 #}
<script type="text/html" id="tool">
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="tool-edit">
<i class="pear-icon pear-icon-edit"></i>
</button>
<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="tool-remove">
<i class="pear-icon pear-icon-ashbin"></i>
</button>
</script>
{# 启动与禁用 #}
<script type="text/html" id="tool-switch">
<input type="checkbox" name="enable" value="{{ "{{ d.id }}" }}" lay-skin="switch" lay-text="启用|禁用"
lay-filter="tool-switch"
{{ "{{# if(d.enable==1){ }} checked {{# } }}" }} />
</script>
{# 用户注册时间 #}
<script type="text/html" id="user-createTime">
{{ ' {{layui.util.toDateString(d.create_at, "yyyy-MM-dd HH:mm:ss")}' |safe }}}
</script>
{# 用户更新时间 #}
<script type="text/html" id="user-updateTime">
{{ ' {{layui.util.toDateString(d.update_at, "yyyy-MM-dd HH:mm:ss")}' |safe }}}
</script>
<script> {% include 'admin/common/footer.html' %}
layui.use(['table', 'dtree', 'form', 'jquery', 'popup', 'common'], function () { {# 表格操作 #}
let table = layui.table <script type="text/html" id="toolbar">
let form = layui.form <button class="pear-btn pear-btn-primary pear-btn-md" lay-event="toolbar-add">
let $ = layui.jquery <i class="pear-icon pear-icon-add"></i>
let dtree = layui.dtree 新增
let popup = layui.popup </button>
let common = layui.common <button class="pear-btn pear-btn-md" lay-event="toolbar-remove">
<i class="pear-icon pear-icon-ashbin"></i>
删除
</button>
<button class="pear-btn pear-btn-md" lay-event="toolbar-collasped">
<i class="pear-icon pear-icon-modular"></i>
高级
</button>
</script>
{# 用户修改操作 #}
<script type="text/html" id="tool">
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="tool-edit">
<i class="pear-icon pear-icon-edit"></i>
</button>
<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="tool-remove">
<i class="pear-icon pear-icon-ashbin"></i>
</button>
</script>
{# 启动与禁用 #}
<script type="text/html" id="tool-switch">
<input type="checkbox" name="enable" value="{{ "{{ d.id }}" }}" lay-skin="switch" lay-text="启用|禁用"
lay-filter="tool-switch"
{{ "{{# if(d.enable==1){ }} checked {{# } }}" }} />
</script>
{# 用户注册时间 #}
<script type="text/html" id="user-createTime">
{{ ' {{layui.util.toDateString(d.create_at, "yyyy-MM-dd HH:mm:ss")}' |safe }}}
</script>
{# 用户更新时间 #}
<script type="text/html" id="user-updateTime">
{{ ' {{layui.util.toDateString(d.update_at, "yyyy-MM-dd HH:mm:ss")}' |safe }}}
</script>
<script>
layui.use(['table', 'dtree', 'form', 'jquery', 'popup', 'common'], function() {
let table = layui.table;
let form = layui.form;
let $ = layui.jquery;
let dtree = layui.dtree;
let popup = layui.popup;
let common = layui.common;
// 表格数据 // 表格数据
const get_columns = () => [ const get_columns = () => [
[ [
{ type: 'checkbox' }, {type: 'checkbox'},
{ title: '姓名', field: 'realname', align: 'center', width: 110 }, {title: '姓名', field: 'realname', align: 'center', width: 110},
{ title: '账号', field: 'username', align: 'center' }, {title: '账号', field: 'username', align: 'center'},
{ title: '部门', field: 'dept', align: 'center' }, {title: '部门', field: 'dept', align: 'center'},
{ title: '启用', field: 'enable', align: 'center', templet: '#tool-switch', width: 120 }, {title: '启用', field: 'enable', align: 'center', templet: '#tool-switch', width: 120},
{ title: '注册时间', field: 'create_at', templet: '#user-createTime', align: 'center' }, {title: '注册时间', field: 'create_at', templet: '#user-createTime', align: 'center'},
{ title: '更新时间', field: 'update_at', templet: '#user-updateTime', align: 'center' }, {title: '更新时间', field: 'update_at', templet: '#user-updateTime', align: 'center'},
{ title: '操作', toolbar: '#tool', align: 'center', width: 130 }, {title: '操作', toolbar: '#tool', align: 'center', width: 130},
], ],
] ];
// 渲染表格数据
table.render({
parseData: parserTableData,
elem: '#tables',
url: '/api/v1/users/user',
page: true,
cols: get_columns(),
skin: 'line',
height: 'full-148',
toolbar: '#toolbar', /*工具栏*/
text: {none: '暂无人员信息'},
defaultToolbar: [{layEvent: 'refresh', icon: 'layui-icon-refresh'}, 'filter', 'print', 'exports'], /*默认工具栏*/
});
// 公司部门树状图菜单
dtree.render({
elem: '#dept-tree',
method: 'get',
url: '/api/v1/dept/department',
dataFormat: 'list',
line: true,
skin: 'laySimple',
icon: '-1',
response: {treeId: 'deptId', parentId: 'parentId', title: 'deptName'},
});
// 菜单栏渲染
dtree.on('node(\'dept-tree\')', function(obj) {
let field = form.val('user-query-form'); /*用户账号查询*/
field.deptId = obj.param.nodeId;
window.refresh(field);
});
//
$('.user-group').click(function() {
let group = $(this).attr('user-group');
let field = form.val('user-query-form');
if (group === '-1') {
field.deptId = group;
$(this).removeClass('button-default');
$(this).prev().removeClass('button-primary');
$(this).prev().addClass('button-default');
$(this).addClass('button-primary');
} else {
field.deptId = group;
$(this).removeClass('button-default');
$(this).next().removeClass('button-primary');
$(this).next().addClass('button-default');
$(this).addClass('button-primary');
}
window.refresh(field);
});
table.on('tool(tables)', function(obj) {
if (obj.event === 'tool-remove') {
window.tool_remove(obj);
} else if (obj.event === 'tool-edit') {
window.tool_edit(obj);
}
});
table.on('toolbar(tables)', function(obj) {
if (obj.event === 'toolbar-add') {
window.toolbar_add();
} else if (obj.event === 'refresh') {
window.refresh();
} else if (obj.event === 'toolbar-remove') {
window.toolbar_remove(obj);
} else if (obj.event === 'toolbar-collasped') {
$('.user-left').toggleClass('user-collasped');
$('.user-main').toggleClass('user-collasped');
table.resize();
}
});
form.on('submit(user-query)', function(data) {
window.refresh(data.field);
return false;
});
form.on('switch(tool-switch)', function(obj) {
let operate;
if (obj.elem.checked) {
operate = 1;
} else {
operate = 0;
}
let loading = layer.load();
$.ajax({
url: '/api/v1/users/user/' + this.value + '/status',
data: JSON.stringify({operate: operate, userId: this.value}),
dataType: 'json',
contentType: 'application/json',
type: 'put',
success: function(result) {
layer.close(loading);
if (result.success) {
popup.success(result.message);
} else {
popup.failure(result.message);
}
},
});
});
window.toolbar_add = function() {
layer.open({
type: 2,
title: '新增',
shade: 0.1,
area: ['550px', '550px'],
content: '/users/add',
});
};
window.toolbar_remove = function(obj) {
let data = table.checkStatus(obj.config.id).data;
if (data.length === 0) {
layer.msg('未选中数据', {
icon: 3,
time: 1000,
});
return false;
}
var ids = [];
var hasCheck = table.checkStatus('tables');
var hasCheckData = hasCheck.data;
if (hasCheckData.length > 0) {
$.each(hasCheckData, function(index, element) {
ids.push(element.id);
});
}
{#console.log(ids);#}
layer.confirm('确定要删除选中角色', {
icon: 3,
title: '提示',
}, function(index) {
layer.close(index);
let loading = layer.load();
$.ajax({
// 渲染表格数据
table.render({
parseData: parserTableData,
elem: '#tables',
url: '/api/v1/users/user', url: '/api/v1/users/user',
page: true, data: {ids: ids},
cols: get_columns(), dataType: 'json',
skin: 'line', type: 'delete',
height: 'full-148', success: function(result) {
toolbar: '#toolbar', /*工具栏*/ layer.close(loading);
text: { none: '暂无人员信息' }, if (result.success) {
defaultToolbar: [{ layEvent: 'refresh', icon: 'layui-icon-refresh' }, 'filter', 'print', 'exports'], /*默认工具栏*/ popup.success(result.message, function() {
}) table.reload('role-table');
});
} else {
popup.failure(result.message);
}
},
});
});
};
window.refresh = function(param) {
table.reload('tables', {where: param});
};
// 公司部门树状图菜单 window.tool_remove = function(obj) {
dtree.render({ layer.confirm('确定要删除该用户', {icon: 3, title: '提示'}, function(index) {
elem: '#dept-tree', layer.close(index);
method: 'get', let loading = layer.load();
url: '/api/v1/dept/department', $.ajax({
dataFormat: 'list', url: '/api/v1/users/user/' + obj.data['id'],
line: true, dataType: 'json',
skin: 'laySimple', contentType: 'application/json',
icon: '-1', type: 'delete',
response: { treeId: 'deptId', parentId: 'parentId', title: 'deptName' }, success: function(result) {
}) layer.close(loading);
if (result.success) {
popup.success(result.message, function() {
obj.del();
});
} else {
popup.failure(result.message);
}
},
});
});
};
window.tool_edit = function(obj) {
layer.open({
type: 2,
title: '修改',
shade: 0.1,
area: ['550px', '500px'],
content: '/users/' + obj.data['id'],
});
};
// 菜单栏渲染 });
dtree.on('node(\'dept-tree\')', function (obj) { </script>
let field = form.val('user-query-form') /*用户账号查询*/ </body>
field.deptId = obj.param.nodeId </html>
window.refresh(field)
})
//
$('.user-group').click(function () {
let group = $(this).attr('user-group')
let field = form.val('user-query-form')
if (group === '-1') {
field.deptId = group
$(this).removeClass('button-default')
$(this).prev().removeClass('button-primary')
$(this).prev().addClass('button-default')
$(this).addClass('button-primary')
} else {
field.deptId = group
$(this).removeClass('button-default')
$(this).next().removeClass('button-primary')
$(this).next().addClass('button-default')
$(this).addClass('button-primary')
}
window.refresh(field)
})
table.on('tool(tables)', function (obj) {
if (obj.event === 'tool-remove') {
window.tool_remove(obj)
} else if (obj.event === 'tool-edit') {
window.tool_edit(obj)
}
})
table.on('toolbar(tables)', function (obj) {
if (obj.event === 'toolbar-add') {
window.toolbar_add()
} else if (obj.event === 'refresh') {
window.refresh()
} else if (obj.event === 'toolbar-remove') {
window.toolbar_remove(obj)
} else if (obj.event === 'toolbar-collasped') {
$('.user-left').toggleClass('user-collasped')
$('.user-main').toggleClass('user-collasped')
table.resize()
}
})
form.on('submit(user-query)', function (data) {
window.refresh(data.field)
return false
})
form.on('switch(tool-switch)', function (obj) {
let operate
if (obj.elem.checked) {
operate = 1
} else {
operate = 0
}
let loading = layer.load()
$.ajax({
url: '/api/v1/users/user/' + this.value + '/status',
data: JSON.stringify({ operate: operate, userId: this.value }),
dataType: 'json',
contentType: 'application/json',
type: 'put',
success: function (result) {
layer.close(loading)
if (result.success) {
popup.success(result.message)
} else {
popup.failure(result.message)
}
},
})
})
window.toolbar_add = function () {
layer.open({
type: 2,
title: '新增',
shade: 0.1,
area: ['550px', '550px'],
content: '/users/add',
})
}
window.toolbar_remove = function (obj) {
let data = table.checkStatus(obj.config.id).data
if (data.length === 0) {
layer.msg('未选中数据', {
icon: 3,
time: 1000,
})
return false
}
var ids = []
var hasCheck = table.checkStatus('tables')
var hasCheckData = hasCheck.data
if (hasCheckData.length > 0) {
$.each(hasCheckData, function (index, element) {
ids.push(element.id)
})
}
{#console.log(ids);#}
layer.confirm('确定要删除选中角色', {
icon: 3,
title: '提示',
}, function (index) {
layer.close(index)
let loading = layer.load()
$.ajax({
url: '/api/v1/users/user',
data: { ids: ids },
dataType: 'json',
type: 'delete',
success: function (result) {
layer.close(loading)
if (result.success) {
popup.success(result.message, function () {
table.reload('role-table')
})
} else {
popup.failure(result.message)
}
},
})
})
}
window.refresh = function (param) {
table.reload('tables', { where: param })
}
window.tool_remove = function (obj) {
layer.confirm('确定要删除该用户', { icon: 3, title: '提示' }, function (index) {
layer.close(index)
let loading = layer.load()
$.ajax({
url: '/api/v1/users/user/' + obj.data['id'],
dataType: 'json',
contentType: 'application/json',
type: 'delete',
success: function (result) {
layer.close(loading)
if (result.success) {
popup.success(result.message, function () {
obj.del()
})
} else {
popup.failure(result.message)
}
},
})
})
}
window.tool_edit = function (obj) {
layer.open({
type: 2,
title: '修改',
shade: 0.1,
area: ['550px', '500px'],
content: '/users/' + obj.data['id'],
})
}
})
</script>
{% endblock %}
+85 -83
View File
@@ -1,99 +1,101 @@
{% extends 'admin/base.html' %} <!doctype html>
{% block title %} <html lang="zh-CN">
<head>
<title>用户管理</title> <title>用户管理</title>
{% endblock %} {% include 'admin/common/header.html' %}
</head>
{% block body %} <body class="pear-container">
<form class="layui-form"> <form class="layui-form">
<div class="mainBox"> <div class="mainBox">
<div class="main-container">
<div class="main-container"> <div class="main-container">
<div class="main-container"> <div class="layui-form-item">
<div class="layui-form-item"> <label class="layui-form-label">账号</label>
<label class="layui-form-label">账号</label> <div class="layui-input-block">
<div class="layui-input-block"> <input type="text" name="username" lay-verify="title" autocomplete="off" placeholder="请输入账号"
<input type="text" name="username" lay-verify="title" autocomplete="off" placeholder="请输入账号" class="layui-input">
class="layui-input">
</div>
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">姓名</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">姓名</label>
<input type="text" name="realName" lay-verify="title" autocomplete="off" placeholder="请输入姓名" <div class="layui-input-block">
class="layui-input"> <input type="text" name="realName" lay-verify="title" autocomplete="off" placeholder="请输入姓名"
</div> class="layui-input">
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">密码</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">密码</label>
<input type="text" name="password" lay-verify="title" autocomplete="off" placeholder="请输入密码" <div class="layui-input-block">
class="layui-input"> <input type="text" name="password" lay-verify="title" autocomplete="off" placeholder="请输入密码"
</div> class="layui-input">
</div> </div>
</div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">角色</label> <label class="layui-form-label">角色</label>
<div class="layui-input-block"> <div class="layui-input-block">
{% for role in roles %} {% for role in roles %}
<input <input
value="{{ role.id }}" title="{{ role.name }}" type="checkbox" value="{{ role.id }}" title="{{ role.name }}" type="checkbox"
name="roleIds" lay-skin="primary"> name="roleIds" lay-skin="primary">
{% endfor %} {% endfor %}
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="bottom"> </div>
<div class="button-container"> <div class="bottom">
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit="" <div class="button-container">
lay-filter="user-save"> <button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit=""
<i class="layui-icon layui-icon-ok"></i> lay-filter="user-save">
提交 <i class="layui-icon layui-icon-ok"></i>
</button> 提交
<button type="reset" class="pear-btn pear-btn-sm"> </button>
<i class="layui-icon layui-icon-refresh"></i> <button type="reset" class="pear-btn pear-btn-sm">
重置 <i class="layui-icon layui-icon-refresh"></i>
</button> 重置
</div> </button>
</div> </div>
</form> </div>
{% endblock %} </form>
{% block models_script %}
<script>
layui.use(['form', 'jquery'], function () { {% include 'admin/common/footer.html' %}
let form = layui.form <script>
let $ = layui.jquery
form.on('submit(user-save)', function (data) {
let roleIds = ''
$('input[type=checkbox]:checked').each(function () {
roleIds += $(this).val() + ','
})
roleIds = roleIds.substr(0, roleIds.length - 1)
data.field.roleIds = roleIds
$.ajax({ layui.use(['form', 'jquery'], function() {
url: '/api/v1/users/user', let form = layui.form;
data: JSON.stringify(data.field), let $ = layui.jquery;
dataType: 'json', form.on('submit(user-save)', function(data) {
contentType: 'application/json', let roleIds = '';
type: 'post', $('input[type=checkbox]:checked').each(function() {
success: function (result) { roleIds += $(this).val() + ',';
if (result.success) { });
layer.msg(result.message, { icon: 1, time: 1000 }, function () { roleIds = roleIds.substr(0, roleIds.length - 1);
parent.layer.close(parent.layer.getFrameIndex(window.name))//关闭当前页 data.field.roleIds = roleIds;
parent.layui.table.reload('tables')
}) $.ajax({
} else { url: '/api/v1/users/user',
layer.msg(result.message, { icon: 2, time: 1000 }) data: JSON.stringify(data.field),
} dataType: 'json',
}, contentType: 'application/json',
}) type: 'post',
return false success: function(result) {
}) if (result.success) {
}) layer.msg(result.message, {icon: 1, time: 1000}, function() {
</script> parent.layer.close(parent.layer.getFrameIndex(window.name));//关闭当前页
{% endblock %} parent.layui.table.reload('tables');
});
} else {
layer.msg(result.message, {icon: 2, time: 1000});
}
},
});
return false;
});
});
</script>
</body>
</html>
+104 -103
View File
@@ -1,119 +1,120 @@
{% extends 'admin/base.html' %} <!doctype html>
{% block title %} <html lang="zh-CN">
<head>
<title>用户编辑</title> <title>用户编辑</title>
{% endblock %} {% include 'admin/common/header.html' %}
</head>
<body class="pear-container">
{% block body %} <form class="layui-form" action="">
<form class="layui-form" action=""> <div class="mainBox">
<div class="mainBox"> <div class="main-container">
<div class="main-container"> <div class="main-container">
<div class="main-container"> <div class="layui-form-item layui-hide">
<div class="layui-form-item layui-hide"> <label class="layui-form-label">编号</label>
<label class="layui-form-label">编号</label> <div class="layui-input-block">
<div class="layui-input-block"> <input type="text" value="{{ user.id }}" name="userId" lay-verify="title"
<input type="text" value="{{ user.id }}" name="userId" lay-verify="title" autocomplete="off" placeholder="请输入编号" class="layui-input">
autocomplete="off" placeholder="请输入编号" class="layui-input">
</div>
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">账号</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">账号</label>
<input type="text" value="{{ user.username }}" name="username" lay-verify="title" <div class="layui-input-block">
autocomplete="off" placeholder="请输入账号" class="layui-input"> <input type="text" value="{{ user.username }}" name="username" lay-verify="title"
</div> autocomplete="off" placeholder="请输入账号" class="layui-input">
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">姓名</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">姓名</label>
<input type="text" value="{{ user.realname }}" name="realName" lay-verify="title" <div class="layui-input-block">
autocomplete="off" placeholder="请输入姓名" <input type="text" value="{{ user.realname }}" name="realName" lay-verify="title"
class="layui-input"> autocomplete="off" placeholder="请输入姓名"
</div> class="layui-input">
</div> </div>
<div class="layui-form-item"> </div>
<label class="layui-form-label">部门</label> <div class="layui-form-item">
<div class="layui-input-block"> <label class="layui-form-label">部门</label>
<ul id="selectParent" name="deptId" class="dtree" data-id="0"></ul> <div class="layui-input-block">
</div> <ul id="selectParent" name="deptId" class="dtree" data-id="0"></ul>
</div> </div>
</div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">角色</label> <label class="layui-form-label">角色</label>
<div class="layui-input-block"> <div class="layui-input-block">
{% for role in roles %} {% for role in roles %}
<input {% if role.id in checked_roles %} <input {% if role.id in checked_roles %}
checked checked
{% endif %} {% endif %}
value="{{ role.id }}" title="{{ role.name }}" type="checkbox" value="{{ role.id }}" title="{{ role.name }}" type="checkbox"
name="roleIds" lay-skin="primary"> name="roleIds" lay-skin="primary">
{% endfor %} {% endfor %}
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="bottom"> </div>
<div class="button-container"> <div class="bottom">
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit="" <div class="button-container">
lay-filter="user-update"> <button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit=""
<i class="layui-icon layui-icon-ok"></i> lay-filter="user-update">
提交 <i class="layui-icon layui-icon-ok"></i>
</button> 提交
<button type="reset" class="pear-btn pear-btn-sm"> </button>
<i class="layui-icon layui-icon-refresh"></i> <button type="reset" class="pear-btn pear-btn-sm">
重置 <i class="layui-icon layui-icon-refresh"></i>
</button> 重置
</div> </button>
</div> </div>
</form> </div>
{% endblock %} </form>
{% block models_script %}
<script>
layui.use(['form', 'jquery', 'dtree'], function () {
let form = layui.form
let $ = layui.jquery
let dtree = layui.dtree
dtree.renderSelect({ {% include 'admin/common/footer.html' %}
elem: '#selectParent', <script>
url: '/api/v1/dept/department', layui.use(['form', 'jquery', 'dtree'], function() {
method: 'get', let form = layui.form;
selectInputName: { nodeId: 'deptId', context: 'deptName' }, let $ = layui.jquery;
skin: 'layui', let dtree = layui.dtree;
dataFormat: 'list',
response: { treeId: 'deptId', parentId: 'parentId', title: 'deptName' },
selectInitVal: "{{ user.dept_id }}",
})
form.on('submit(user-update)', function (data) { dtree.renderSelect({
let roleIds = '' elem: '#selectParent',
$('input[type=checkbox]:checked').each(function () { url: '/api/v1/dept/department',
roleIds += $(this).val() + ',' method: 'get',
}) selectInputName: {nodeId: 'deptId', context: 'deptName'},
roleIds = roleIds.substr(0, roleIds.length - 1) skin: 'layui',
data.field.roleIds = roleIds dataFormat: 'list',
$.ajax({ response: {treeId: 'deptId', parentId: 'parentId', title: 'deptName'},
url: '/api/v1/users/user/' + data.field.userId + '/role', selectInitVal: "{{ user.dept_id }}",
data: JSON.stringify(data.field), });
dataType: 'json',
contentType: 'application/json', form.on('submit(user-update)', function(data) {
type: 'put', let roleIds = '';
success: function (result) { $('input[type=checkbox]:checked').each(function() {
if (result.success) { roleIds += $(this).val() + ',';
layer.msg(result.message, { icon: 1, time: 1000 }, function () { });
parent.layer.close(parent.layer.getFrameIndex(window.name)) //关闭当前页 roleIds = roleIds.substr(0, roleIds.length - 1);
parent.layui.table.reload('tables') data.field.roleIds = roleIds;
}) $.ajax({
} else { url: '/api/v1/users/user/' + data.field.userId + '/role',
layer.msg(result.message, { icon: 2, time: 1000 }) data: JSON.stringify(data.field),
} dataType: 'json',
}, contentType: 'application/json',
}) type: 'put',
return false success: function(result) {
}) if (result.success) {
}) layer.msg(result.message, {icon: 1, time: 1000}, function() {
</script> parent.layer.close(parent.layer.getFrameIndex(window.name)); //关闭当前页
{% endblock %} parent.layui.table.reload('tables');
});
} else {
layer.msg(result.message, {icon: 2, time: 1000});
}
},
});
return false;
});
});
</script>
</body>
</html>
+23 -23
View File
@@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="zh-CN">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
@@ -79,43 +79,43 @@
<!-- 依 赖 脚 本 --> <!-- 依 赖 脚 本 -->
{% include 'admin/common/footer.html' %} {% include 'admin/common/footer.html' %}
<script> <script>
layui.use(['admin', 'jquery', 'layer', 'popup'], function () { layui.use(['admin', 'jquery', 'layer', 'popup'], function() {
let admin = layui.admin let admin = layui.admin;
let $ = layui.jquery let $ = layui.jquery;
let layer = layui.layer let layer = layui.layer;
let popup = layui.popup let popup = layui.popup;
let MODULE_PATH = '/api/v1/rights/' let MODULE_PATH = '/api/v1/rights/';
// 框架初始化时会读取 根目录下 pear.configs.yml 文件作为初始化配置 // 框架初始化时会读取 根目录下 pear.configs.yml 文件作为初始化配置
// 你可以通过 admin.setConfigPath 方法修改配置文件位置 // 你可以通过 admin.setConfigPath 方法修改配置文件位置
// 你可以通过 admin.setConfigType 方法修改配置文件类型 // 你可以通过 admin.setConfigType 方法修改配置文件类型
admin.setConfigType('json') admin.setConfigType('json');
admin.setConfigPath(MODULE_PATH + 'configs') admin.setConfigPath(MODULE_PATH + 'configs');
admin.render() admin.render();
// 注销实现 // 注销实现
admin.logout(function () { admin.logout(function() {
let loading = layer.load() let loading = layer.load();
$.ajax({ $.ajax({
url: '/passport/logout', url: '/passport/logout',
dataType: 'json', dataType: 'json',
type: 'post', type: 'post',
success: function (result) { success: function(result) {
layer.close(loading) layer.close(loading);
if (result.success) { if (result.success) {
popup.success(result.message, function () { popup.success(result.message, function() {
location.href = '/admin' location.href = '/admin';
}) });
return true return true;
} }
} },
}) });
}) });
// 初始化消息事件 // 初始化消息事件
admin.message() admin.message();
}) });
</script> </script>
</body> </body>
</html> </html>
+7 -7
View File
@@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="zh-CN">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>pear-admin-flask</title> <title>pear-admin-flask</title>
@@ -154,12 +154,12 @@
<script src="/static/admin/component/pear/pear.js"></script> <script src="/static/admin/component/pear/pear.js"></script>
<script> <script>
layui.use(['layer', 'form', 'jquery'], function () { layui.use(['layer', 'form', 'jquery'], function() {
var $ = layui.jquery var $ = layui.jquery;
var layer = layui.layer var layer = layui.layer;
var form = layui.form var form = layui.form;
var jquery = layui.jquery var jquery = layui.jquery;
}) });
</script> </script>
</body> </body>
</html> </html>
+37 -35
View File
@@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="zh-CN">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title>登录</title> <title>登录</title>
@@ -37,20 +37,22 @@
</button> </button>
</div> </div>
</form> </form>
{% include 'admin/common/footer.html' %}
<script>
layui.use(['form', 'jquery', 'layer', 'button', 'popup'], function () {
let form = layui.form
let $ = layui.jquery
let layer = layui.layer
let button = layui.button
let popup = layui.popup
let captchaPath = '/passport/getCaptcha'
form.on('submit(login)', function (data) { <script src="/static/admin/component/layui/layui.js"></script>
<script src="/static/admin/component/pear/pear.js"></script>
<script>
layui.use(['form', 'jquery', 'layer', 'button', 'popup'], function() {
let form = layui.form;
let $ = layui.jquery;
let layer = layui.layer;
let button = layui.button;
let popup = layui.popup;
let captchaPath = '/passport/getCaptcha';
form.on('submit(login)', function(data) {
// data 是表单的数据 // data 是表单的数据
let loader = layer.load() // 加载按钮 let loader = layer.load(); // 加载按钮
let btn = button.load({ elem: '.login' }) let btn = button.load({elem: '.login'});
$.ajax({ $.ajax({
url: '/api/v1/passport/login', url: '/api/v1/passport/login',
data: JSON.stringify(data.field), data: JSON.stringify(data.field),
@@ -58,38 +60,38 @@
type: 'post', type: 'post',
dataType: 'json', dataType: 'json',
// 请求成功之后返回的数据 // 请求成功之后返回的数据
success: function (result) { success: function(result) {
layer.close(loader) // 关闭加载按钮 layer.close(loader); // 关闭加载按钮
btn.stop(function () { btn.stop(function() {
if (result.success) { if (result.success) {
popup.success(result.message, function () { popup.success(result.message, function() {
location.href = '/admin' location.href = '/admin';
}) });
} else { } else {
popup.failure(result.message, function () { popup.failure(result.message, function() {
document.getElementById('captchaImage').src = captchaPath + '?' + Math.random() document.getElementById('captchaImage').src = captchaPath + '?' + Math.random();
}) });
} }
}) });
} },
}) });
return false return false;
}) });
// 点击按钮更新验证码 // 点击按钮更新验证码
$('#captchaImage').click(function () { $('#captchaImage').click(function() {
document.getElementById('captchaImage').src = captchaPath + '?' + Math.random() document.getElementById('captchaImage').src = captchaPath + '?' + Math.random();
}) });
// 定时器,定时更新验证码 // 定时器,定时更新验证码
setInterval(function () { setInterval(function() {
document.getElementById('captchaImage').src = captchaPath + '?' + Math.random() document.getElementById('captchaImage').src = captchaPath + '?' + Math.random();
}, 30 * 1000) }, 30 * 1000);
}) });
</script> </script>
<script> <script>
if (window !== top) { if (window !== top) {
top.location.href = location.href top.location.href = location.href;
} }
</script> </script>
</body> </body>
+98 -90
View File
@@ -1,8 +1,12 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="zh-CN">
<head> <head>
<title>首页</title> <title>首页</title>
{% include 'admin/common/header.html' %} <meta charset="utf-8">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="/static/admin/component/pear/css/pear.css"/>
<link rel="stylesheet" href="/static/admin/admin/css/other/console1.css"/> <link rel="stylesheet" href="/static/admin/admin/css/other/console1.css"/>
<!-- 主 题 更 换 --> <!-- 主 题 更 换 -->
@@ -290,124 +294,128 @@
</div> </div>
</div> </div>
</div> </div>
<!--</div>--> <script src="/static/admin/component/layui/layui.js"></script>
{% include 'admin/common/footer.html' %} <script src="/static/admin/component/pear/pear.js"></script>
<script> <script>
layui.use(['layer', 'echarts', 'element', 'count'], function () { layui.use(['layer', 'echarts', 'element', 'count'], function() {
var $ = layui.jquery, var $ = layui.jquery,
layer = layui.layer, layer = layui.layer,
element = layui.element, element = layui.element,
count = layui.count, count = layui.count,
echarts = layui.echarts echarts = layui.echarts;
count.up('value1', { count.up('value1', {
time: 4000, time: 4000,
num: 440.34, num: 440.34,
bit: 2, bit: 2,
regulator: 50 regulator: 50,
}) });
count.up('value2', { count.up('value2', {
time: 4000, time: 4000,
num: 236.30, num: 236.30,
bit: 2, bit: 2,
regulator: 50 regulator: 50,
}) });
count.up('value3', { count.up('value3', {
time: 4000, time: 4000,
num: 634.43, num: 634.43,
bit: 2, bit: 2,
regulator: 50 regulator: 50,
}) });
count.up('value4', { count.up('value4', {
time: 4000, time: 4000,
bit: 2, bit: 2,
num: 373.23, num: 373.23,
regulator: 50 regulator: 50,
}) });
var echartsRecords = echarts.init(document.getElementById('echarts-records'), 'walden') var echartsRecords = echarts.init(document.getElementById('echarts-records'), 'walden');
var option = { var option = {
tooltip: { tooltip: {
trigger: 'axis' trigger: 'axis',
}, },
xAxis: [{ xAxis: [
type: 'category', {
data: ['2019-01', '2019-02', '2019-03', '2019-04', '2019-05', '2019-06'], type: 'category',
axisLine: { data: ['2019-01', '2019-02', '2019-03', '2019-04', '2019-05', '2019-06'],
lineStyle: { axisLine: {
color: '#999' lineStyle: {
} color: '#999',
}
}],
yAxis: [{
type: 'value',
splitNumber: 4,
splitLine: {
lineStyle: {
type: 'dashed',
color: '#DDD'
}
},
axisLine: {
show: false,
lineStyle: {
color: '#333'
},
},
nameTextStyle: {
color: '#999'
},
splitArea: {
show: false
}
}],
series: [{
name: '课时',
type: 'line',
data: [23, 60, 20, 36, 23, 85],
lineStyle: {
normal: {
width: 8,
color: {
type: 'linear',
colorStops: [{
offset: 0,
color: '#A9F387' // 0% 处的颜色
}, {
offset: 1,
color: '#48D8BF' // 100% 处的颜色
}],
globalCoord: false // 缺省为 false
}, },
shadowColor: 'rgba(72,216,191, 0.3)', },
shadowBlur: 10, }],
shadowOffsetY: 20 yAxis: [
} {
}, type: 'value',
itemStyle: { splitNumber: 4,
normal: { splitLine: {
color: '#fff', lineStyle: {
borderWidth: 10, type: 'dashed',
/*shadowColor: 'rgba(72,216,191, 0.3)', color: '#DDD',
shadowBlur: 100,*/ },
borderColor: '#A9F387' },
} axisLine: {
}, show: false,
smooth: true lineStyle: {
}] color: '#333',
} },
echartsRecords.setOption(option) },
nameTextStyle: {
color: '#999',
},
splitArea: {
show: false,
},
}],
series: [
{
name: '课时',
type: 'line',
data: [23, 60, 20, 36, 23, 85],
lineStyle: {
normal: {
width: 8,
color: {
type: 'linear',
window.onresize = function () { colorStops: [
echartsRecords.resize() {
} offset: 0,
color: '#A9F387', // 0% 处的颜色
}, {
offset: 1,
color: '#48D8BF', // 100% 处的颜色
}],
globalCoord: false, // 缺省为 false
},
shadowColor: 'rgba(72,216,191, 0.3)',
shadowBlur: 10,
shadowOffsetY: 20,
},
},
itemStyle: {
normal: {
color: '#fff',
borderWidth: 10,
/*shadowColor: 'rgba(72,216,191, 0.3)',
shadowBlur: 100,*/
borderColor: '#A9F387',
},
},
smooth: true,
}],
};
echartsRecords.setOption(option);
}) window.onresize = function() {
echartsRecords.resize();
};
});
</script> </script>
</body> </body>
</html> </html>