refactor(jinja2):修改模板使用继承
This commit is contained in:
@@ -0,0 +1,35 @@
|
|||||||
|
<!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>
|
||||||
|
{% endblock %}
|
||||||
|
{# 当前页面自己编写的 JavaScript #}
|
||||||
|
{% block models_script %}
|
||||||
|
{% endblock %}
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
<script src="/static/admin/component/layui/layui.js"></script>
|
|
||||||
<script src="/static/admin/component/pear/pear.js"></script>
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
<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"/>
|
|
||||||
@@ -1,256 +1,252 @@
|
|||||||
<!DOCTYPE html>
|
{% extends 'admin/base.html' %}
|
||||||
<html>
|
{% block title %}
|
||||||
<head>
|
|
||||||
<title>部门新增</title>
|
<title>部门新增</title>
|
||||||
{% include 'admin/common/header.html' %}
|
{% endblock %}
|
||||||
</head>
|
|
||||||
{#pear 后台边框#}
|
|
||||||
<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="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>
|
||||||
{#查询按钮--需要触发layui事件#}
|
</form>
|
||||||
<button class="pear-btn pear-btn-md pear-btn-primary" lay-submit lay-filter="form_search">
|
</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>
|
<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>
|
||||||
</div>
|
{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
{#表格工具栏,需要在表格中绑定,且需要自定义事件#}
|
{% block models_script %}
|
||||||
<script type="text/html" id="toolbar">
|
{#表格工具栏,需要在表格中绑定,且需要自定义事件#}
|
||||||
{% if authorize("admin:dept:edit") %}
|
<script type="text/html" id="toolbar">
|
||||||
<button class="pear-btn pear-btn-primary pear-btn-md" lay-event="toolbar-add">
|
{% if authorize("admin:dept:edit") %}
|
||||||
<i class="layui-icon layui-icon-add-1"></i>
|
<button class="pear-btn pear-btn-primary pear-btn-md" lay-event="toolbar-add">
|
||||||
新增
|
<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>
|
||||||
{% endif %}
|
<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="tool_remove">
|
||||||
{% 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>
|
||||||
{% endif %}
|
</script>
|
||||||
</script>
|
{#表格内的切换按钮#}
|
||||||
{#操作字段,需要在表格中使用#}
|
<script type="text/html" id="dept-status">
|
||||||
<script type="text/html" id="tool">
|
<input type="checkbox"
|
||||||
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="tool_edit">
|
name="status"
|
||||||
<i class="layui-icon layui-icon-edit"></i>
|
value="{{ "{{ d.deptId }}" }}"
|
||||||
</button>
|
lay-skin="switch"
|
||||||
<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="tool_remove">
|
lay-text="启用|禁用"
|
||||||
<i class="layui-icon layui-icon-delete"></i>
|
lay-filter="dept_enable"
|
||||||
</button>
|
{{ "{{# if(d.status==1){ }} checked {{# } }}" }}>
|
||||||
</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 type="module">
|
||||||
|
|
||||||
{% include 'admin/common/footer.html' %}
|
import { DEPARTMENT_API } from '/static/api/http.js'
|
||||||
|
|
||||||
<script type="module">
|
layui.use(['table', 'form', 'jquery', 'treetable', 'popup'], function () {
|
||||||
|
let table = layui.table
|
||||||
|
let form = layui.form
|
||||||
|
let $ = layui.jquery
|
||||||
|
let treetable = layui.treetable
|
||||||
|
let popup = layui.popup
|
||||||
|
|
||||||
import { DEPARTMENT_API } from '/static/api/http.js'
|
let MODULE_PATH = '/dept/'
|
||||||
|
const get_columns = () => [
|
||||||
|
[
|
||||||
|
{ type: 'checkbox' },
|
||||||
|
{ field: 'deptName', minWidth: 200, title: '部门名称' },
|
||||||
|
{ field: 'leader', title: '负责人' },
|
||||||
|
{ field: 'phone', title: '联系方式' },
|
||||||
|
{ field: 'email', title: '邮箱' },
|
||||||
|
{ field: 'address', title: '详细地址' },
|
||||||
|
{ field: 'status', title: '状态', templet: '#dept-status' },
|
||||||
|
{ field: 'sort', title: '排序', width: 100 },
|
||||||
|
{ title: '操作', templet: '#tool', width: 120, align: 'center' },
|
||||||
|
],
|
||||||
|
]
|
||||||
|
|
||||||
layui.use(['table', 'form', 'jquery', 'treetable', 'popup'], function () {
|
{#定义表格渲染函数#}
|
||||||
let table = layui.table
|
window.render = function () {
|
||||||
let form = layui.form
|
/*树形表格渲染*/
|
||||||
let $ = layui.jquery
|
treetable.render({
|
||||||
let treetable = layui.treetable
|
treeColIndex: 1,
|
||||||
let popup = layui.popup
|
treeSpid: 0,
|
||||||
|
treeIdName: 'deptId', /*表格的顶级字段*/
|
||||||
let MODULE_PATH = '/dept/'
|
treePidName: 'parentId', /*父级id选项*/
|
||||||
const get_columns = () => [
|
skin: 'line',
|
||||||
[
|
method: 'post', /**/
|
||||||
{ type: 'checkbox' },
|
treeDefaultClose: false,
|
||||||
{ field: 'deptName', minWidth: 200, title: '部门名称' },
|
toolbar: '#toolbar', /*表格的工具栏*/
|
||||||
{ field: 'leader', title: '负责人' },
|
elem: '#tables', /*表格挂载的对象*/
|
||||||
{ field: 'phone', title: '联系方式' },
|
url: DEPARTMENT_API.DEPARTMENTS(), /*数据来源接口*/
|
||||||
{ field: 'email', title: '邮箱' },
|
page: false,
|
||||||
{ field: 'address', title: '详细地址' },
|
cols: get_columns(),/*表格渲染的数据*/
|
||||||
{ field: 'status', title: '状态', templet: '#dept-status' },
|
})
|
||||||
{ field: 'sort', title: '排序', width: 100 },
|
|
||||||
{ title: '操作', templet: '#tool', width: 120, align: 'center' },
|
|
||||||
],
|
|
||||||
]
|
|
||||||
|
|
||||||
{#定义表格渲染函数#}
|
|
||||||
window.render = function () {
|
|
||||||
/*树形表格渲染*/
|
|
||||||
treetable.render({
|
|
||||||
treeColIndex: 1,
|
|
||||||
treeSpid: 0,
|
|
||||||
treeIdName: 'deptId', /*表格的顶级字段*/
|
|
||||||
treePidName: 'parentId', /*父级id选项*/
|
|
||||||
skin: 'line',
|
|
||||||
method: 'post', /**/
|
|
||||||
treeDefaultClose: false,
|
|
||||||
toolbar: '#toolbar', /*表格的工具栏*/
|
|
||||||
elem: '#tables', /*表格挂载的对象*/
|
|
||||||
url: DEPARTMENT_API.DEPARTMENTS(), /*数据来源接口*/
|
|
||||||
page: false,
|
|
||||||
cols: get_columns(),/*表格渲染的数据*/
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
/*查询表单按钮被点击的事件*/
|
|
||||||
form.on('submit(form_search)', function (data) {
|
|
||||||
let keyword = $.trim(data.field.deptName)
|
|
||||||
/*获取所有的公司节点*/
|
|
||||||
let $tds = $('#tables').next('.treeTable').find('.layui-table-body tbody tr td')
|
|
||||||
if (!keyword) {
|
|
||||||
$tds.css('background-color', 'transparent')
|
|
||||||
layer.msg('请输入关键字', { icon: 5 })
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
/*本地查询并且标注高亮*/
|
|
||||||
let 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
|
|
||||||
})
|
|
||||||
|
|
||||||
render()
|
/*查询表单按钮被点击的事件*/
|
||||||
|
form.on('submit(form_search)', function (data) {
|
||||||
/*表格的操作栏*/
|
let keyword = $.trim(data.field.deptName)
|
||||||
table.on('tool(tables)', function (obj) {
|
/*获取所有的公司节点*/
|
||||||
if (obj.event === 'tool_remove') {
|
let $tds = $('#tables').next('.treeTable').find('.layui-table-body tbody tr td')
|
||||||
/*移出事件*/
|
if (!keyword) {
|
||||||
window.tool_remove(obj)
|
$tds.css('background-color', 'transparent')
|
||||||
} else if (obj.event === 'tool_edit') {
|
layer.msg('请输入关键字', { icon: 5 })
|
||||||
/*编辑事件*/
|
return false
|
||||||
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: DEPARTMENT_API.DEPARTMENT_STATUS(this.value),
|
|
||||||
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)
|
|
||||||
}
|
}
|
||||||
},
|
/*本地查询并且标注高亮*/
|
||||||
})
|
let searchCount = 0
|
||||||
})
|
$tds.each(function () {
|
||||||
|
$(this).css('background-color', 'transparent')
|
||||||
window.toolbar_add = function () {
|
if ($(this).text().indexOf(keyword) >= 0) {
|
||||||
layer.open({
|
$(this).css('background-color', 'rgba(250,230,160,0.5)')
|
||||||
type: 2,
|
if (searchCount === 0) {
|
||||||
title: '新增',
|
$('body,html').stop(true)
|
||||||
shade: 0.1,
|
$('body,html').animate({ scrollTop: $(this).offset().top - 150 }, 500)
|
||||||
area: ['450px', '500px'], /*新增窗口的大小*/
|
}
|
||||||
content: '/dept/add', /*新增窗口从那里来*/
|
searchCount++
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
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: DEPARTMENT_API.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)
|
|
||||||
}
|
}
|
||||||
},
|
})
|
||||||
|
if (searchCount === 0) {
|
||||||
|
layer.msg('没有匹配结果', { icon: 5 })
|
||||||
|
} else {
|
||||||
|
treetable.expandAll('#tables')
|
||||||
|
}
|
||||||
|
return false
|
||||||
})
|
})
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
})
|
render()
|
||||||
</script>
|
|
||||||
</body>
|
/*表格的操作栏*/
|
||||||
</html>
|
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: DEPARTMENT_API.DEPARTMENT_STATUS(this.value),
|
||||||
|
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: DEPARTMENT_API.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 %}
|
||||||
|
|||||||
@@ -1,128 +1,129 @@
|
|||||||
<!DOCTYPE html>
|
{% extends 'admin/base.html' %}
|
||||||
<html>
|
|
||||||
<head>
|
{% block title %}
|
||||||
<title>部门管理</title>
|
<title>部门管理</title>
|
||||||
{% include 'admin/common/header.html' %}
|
{% endblock %}
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<form class="layui-form" action="">
|
{% block body %}
|
||||||
<div class="mainBox">
|
<form class="layui-form" action="">
|
||||||
<div class="main-container">
|
<div class="mainBox">
|
||||||
<div class="layui-form-item">
|
<div class="main-container">
|
||||||
<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="0"></ul>
|
<div class="layui-input-block">
|
||||||
|
<ul id="selectParent" name="parentId" class="dtree" data-id="0"></ul>
|
||||||
|
</div>
|
||||||
</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">
|
<input type="text" name="deptName" lay-verify="title" autocomplete="off" placeholder="请输入部门名称"
|
||||||
<input type="text" name="deptName" lay-verify="title" autocomplete="off" placeholder="请输入部门名称"
|
class="layui-input">
|
||||||
class="layui-input">
|
</div>
|
||||||
</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">
|
<input type="text" name="leader" lay-verify="title" autocomplete="off" placeholder="请输入负责人名字"
|
||||||
<input type="text" name="leader" lay-verify="title" autocomplete="off" placeholder="请输入负责人名字"
|
class="layui-input">
|
||||||
class="layui-input">
|
</div>
|
||||||
</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">
|
<input type="text" name="email" lay-verify="title" autocomplete="off" placeholder="请输入邮箱地址"
|
||||||
<input type="text" name="email" lay-verify="title" autocomplete="off" placeholder="请输入邮箱地址"
|
class="layui-input">
|
||||||
class="layui-input">
|
</div>
|
||||||
</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">
|
<input type="text" name="phone" lay-verify="title" autocomplete="off"
|
||||||
<input type="text" name="phone" lay-verify="title" autocomplete="off" placeholder="请输入联系方式(电话号码)"
|
placeholder="请输入联系方式(电话号码)"
|
||||||
class="layui-input">
|
class="layui-input">
|
||||||
|
</div>
|
||||||
</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">
|
<input type="radio" name="status" value="1" title="开启">
|
||||||
<input type="radio" name="status" value="1" title="开启">
|
<input type="radio" name="status" value="0" title="关闭" checked>
|
||||||
<input type="radio" name="status" value="0" title="关闭" checked>
|
</div>
|
||||||
</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">
|
<input type="text" name="sort" lay-verify="title" autocomplete="off" placeholder="请输入排序序号(数字)"
|
||||||
<input type="text" name="sort" lay-verify="title" autocomplete="off" placeholder="请输入排序序号(数字)"
|
class="layui-input">
|
||||||
class="layui-input">
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="layui-form-item layui-form-text">
|
||||||
<div class="layui-form-item layui-form-text">
|
<label class="layui-form-label">详细地址</label>
|
||||||
<label class="layui-form-label">详细地址</label>
|
<div class="layui-input-block">
|
||||||
<div class="layui-input-block">
|
<textarea placeholder="请输入详细地址" name="address" class="layui-textarea"></textarea>
|
||||||
<textarea placeholder="请输入详细地址" name="address" class="layui-textarea"></textarea>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="bottom">
|
||||||
<div class="bottom">
|
<div class="button-container">
|
||||||
<div class="button-container">
|
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit=""
|
||||||
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit="" lay-filter="dept-save">
|
lay-filter="dept-save">
|
||||||
<i class="layui-icon layui-icon-ok"></i>
|
<i class="layui-icon layui-icon-ok"></i>
|
||||||
提交
|
提交
|
||||||
</button>
|
</button>
|
||||||
<button type="reset" class="pear-btn pear-btn-sm">
|
<button type="reset" class="pear-btn pear-btn-sm">
|
||||||
<i class="layui-icon layui-icon-refresh"></i>
|
<i class="layui-icon layui-icon-refresh"></i>
|
||||||
重置
|
重置
|
||||||
</button>
|
</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</form>
|
||||||
</form>
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block models_script %}
|
||||||
|
<script type="module">
|
||||||
|
import { DEPARTMENT_API } from '/static/api/http.js'
|
||||||
|
|
||||||
{% include 'admin/common/footer.html' %}
|
layui.use(['form', 'jquery', 'dtree'], function () {
|
||||||
|
let form = layui.form
|
||||||
|
let $ = layui.jquery
|
||||||
|
let dtree = layui.dtree
|
||||||
|
|
||||||
<script type="module">
|
/*添加数据 渲染下拉选择组件*/
|
||||||
import { DEPARTMENT_API } from '/static/api/http.js'
|
dtree.renderSelect({
|
||||||
|
elem: '#selectParent',
|
||||||
|
url: DEPARTMENT_API.DEPARTMENTS(),
|
||||||
|
method: 'get',
|
||||||
|
selectInputName: { nodeId: 'parentId', context: 'parentName' },
|
||||||
|
skin: 'layui',
|
||||||
|
dataFormat: 'list',
|
||||||
|
response: { treeId: 'deptId', parentId: 'parentId', title: 'deptName' },
|
||||||
|
selectInitVal: '1',
|
||||||
|
})
|
||||||
|
|
||||||
layui.use(['form', 'jquery', 'dtree'], function () {
|
/*添加数据 表单组件,提交按钮之后触发的事件*/
|
||||||
let form = layui.form
|
form.on('submit(dept-save)', function (data) {
|
||||||
let $ = layui.jquery
|
$.ajax({
|
||||||
let dtree = layui.dtree
|
url: DEPARTMENT_API.DEPARTMENTS(),
|
||||||
|
data: JSON.stringify(data.field),
|
||||||
/*添加数据 渲染下拉选择组件*/
|
dataType: 'json',
|
||||||
dtree.renderSelect({
|
contentType: 'application/json',
|
||||||
elem: '#selectParent',
|
type: 'post',
|
||||||
url: DEPARTMENT_API.DEPARTMENTS(),
|
success: function (result) {
|
||||||
method: 'get',
|
if (result.success) {
|
||||||
selectInputName: { nodeId: 'parentId', context: 'parentName' },
|
layer.msg(result.message, { icon: 1, time: 1000 }, function () {
|
||||||
skin: 'layui',
|
parent.layer.close(parent.layer.getFrameIndex(window.name))
|
||||||
dataFormat: 'list',
|
parent.render()
|
||||||
response: { treeId: 'deptId', parentId: 'parentId', title: 'deptName' },
|
})
|
||||||
selectInitVal: '1'
|
} else {
|
||||||
})
|
layer.msg(result.message, { icon: 2, time: 1000 })
|
||||||
|
}
|
||||||
/*添加数据 表单组件,提交按钮之后触发的事件*/
|
},
|
||||||
form.on('submit(dept-save)', function (data) {
|
})
|
||||||
$.ajax({
|
return false
|
||||||
url: DEPARTMENT_API.DEPARTMENTS(),
|
})
|
||||||
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
|
</script>
|
||||||
})
|
{% endblock %}
|
||||||
})
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,129 +1,129 @@
|
|||||||
<!DOCTYPE html>
|
{% extends 'admin/base.html' %}
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>部门修改</title>
|
|
||||||
{% include 'admin/common/header.html' %}
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<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 title %}
|
||||||
value="0"
|
<title>部门修改</title>
|
||||||
title="关闭">
|
{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
|
{% block body %}
|
||||||
|
<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>
|
||||||
</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">
|
<input type="text" value="{{ dept.dept_name }}" name="deptName" lay-verify="required"
|
||||||
<input type="text" name="sort" value="{{ dept.sort }}" lay-verify="required|number"
|
autocomplete="off" placeholder="请输入部门名称" class="layui-input">
|
||||||
autocomplete="off"
|
</div>
|
||||||
placeholder="请输入排序序号(数字)"
|
|
||||||
class="layui-input">
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="layui-form-item">
|
||||||
<div class="layui-form-item layui-form-text">
|
<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="{{ 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 %}
|
||||||
|
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>
|
<div class="bottom">
|
||||||
<div class="bottom">
|
<div class="button-container">
|
||||||
<div class="button-container">
|
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit=""
|
||||||
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit=""
|
lay-filter="dept-update">
|
||||||
lay-filter="dept-update">
|
<i class="layui-icon layui-icon-ok"></i>
|
||||||
<i class="layui-icon layui-icon-ok"></i>
|
提交
|
||||||
提交
|
</button>
|
||||||
</button>
|
<button type="reset" class="pear-btn pear-btn-sm">
|
||||||
<button type="reset" class="pear-btn pear-btn-sm">
|
<i class="layui-icon layui-icon-refresh"></i>
|
||||||
<i class="layui-icon layui-icon-refresh"></i>
|
重置
|
||||||
重置
|
</button>
|
||||||
</button>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</form>
|
||||||
</form>
|
{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
{% include 'admin/common/footer.html' %}
|
{% block models_script %}
|
||||||
|
<script type="module">
|
||||||
|
import { DEPARTMENT_API } from '/static/api/http.js'
|
||||||
|
|
||||||
<script type="module">
|
layui.use(['form', 'jquery'], function () {
|
||||||
import { DEPARTMENT_API } from '/static/api/http.js'
|
let form = layui.form
|
||||||
|
let $ = layui.jquery
|
||||||
|
|
||||||
layui.use(['form', 'jquery'], function () {
|
// 修改数据 当点击更新之后,获取数据
|
||||||
let form = layui.form
|
form.on('submit(dept-update)', function (data) {
|
||||||
let $ = layui.jquery
|
$.ajax({
|
||||||
|
url: DEPARTMENT_API.DEPARTMENT(data.field.deptId),
|
||||||
|
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(dept-update)', function (data) {
|
|
||||||
$.ajax({
|
|
||||||
url: DEPARTMENT_API.DEPARTMENT(data.field.deptId),
|
|
||||||
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
|
</script>
|
||||||
})
|
{% endblock %}
|
||||||
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|||||||
+257
-259
@@ -1,270 +1,268 @@
|
|||||||
<!DOCTYPE html>
|
{% extends 'admin/base.html' %}
|
||||||
<html>
|
|
||||||
<head>
|
{% block title %}
|
||||||
<title>图片上传</title>
|
<title>图片上传</title>
|
||||||
{% include 'admin/common/header.html' %}
|
{% endblock %}
|
||||||
</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">
|
||||||
<table id="tables" lay-filter="tables"></table>
|
<table id="tables" lay-filter="tables"></table>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
{% endblock %}
|
||||||
|
|
||||||
|
{% 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>
|
||||||
|
|
||||||
{% include 'admin/common/footer.html' %}
|
<script type="module">
|
||||||
|
import { FILE_API, parserTableData as parseData } from '/static/api/http.js'
|
||||||
|
|
||||||
<script type="text/html" id="toolbar">
|
layui.use(['table', 'form', 'jquery', 'element', 'form', 'upload'], function () {
|
||||||
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="toolbar-add">
|
let table = layui.table
|
||||||
<i class="layui-icon layui-icon-add-1"></i>
|
let form = layui.form
|
||||||
新增
|
let $ = layui.jquery
|
||||||
</button>
|
let upload = layui.upload
|
||||||
<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 type="module">
|
const get_columns = () => [
|
||||||
import { FILE_API, parserTableData as parseData } from '/static/api/http.js'
|
[
|
||||||
|
{
|
||||||
|
type: 'checkbox',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'id',
|
||||||
|
title: 'ID',
|
||||||
|
sort: true,
|
||||||
|
align: 'center',
|
||||||
|
unresize: true,
|
||||||
|
width: 80,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'name',
|
||||||
|
title: '文件名称',
|
||||||
|
unresize: true,
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'href',
|
||||||
|
title: '图片',
|
||||||
|
unresize: true,
|
||||||
|
align: 'center',
|
||||||
|
templet: (d) => {
|
||||||
|
return `<img class="tool-photo" style="max-width: 100%;height: 100%;cursor: pointer;" lay-event="photo" src="${d.href}"></i>`
|
||||||
|
},
|
||||||
|
|
||||||
layui.use(['table', 'form', 'jquery', 'element', 'form', 'upload'], function () {
|
},
|
||||||
let table = layui.table
|
{
|
||||||
let form = layui.form
|
field: 'mime',
|
||||||
let $ = layui.jquery
|
title: 'mime类型',
|
||||||
let upload = layui.upload
|
unresize: true,
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'size',
|
||||||
|
title: '文件大小',
|
||||||
|
unresize: true,
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'create_at',
|
||||||
|
title: '创建时间',
|
||||||
|
templet: (d) => `${layui.util.toDateString(d.create_at, 'yyyy-MM-dd HH:mm:ss')}`,
|
||||||
|
unresize: true,
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '操作',
|
||||||
|
toolbar: '#tool',
|
||||||
|
align: 'center',
|
||||||
|
unresize: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
]
|
||||||
|
|
||||||
const get_columns = () => [
|
table.render({
|
||||||
[
|
parseData,
|
||||||
{
|
elem: '#tables',
|
||||||
type: 'checkbox',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'id',
|
|
||||||
title: 'ID',
|
|
||||||
sort: true,
|
|
||||||
align: 'center',
|
|
||||||
unresize: true,
|
|
||||||
width: 80,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'name',
|
|
||||||
title: '文件名称',
|
|
||||||
unresize: true,
|
|
||||||
align: 'center',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'href',
|
|
||||||
title: '图片',
|
|
||||||
unresize: true,
|
|
||||||
align: 'center',
|
|
||||||
templet: (d) => {
|
|
||||||
return `<img class="tool-photo" style="max-width: 100%;height: 100%;cursor: pointer;" lay-event="photo" src="${d.href}"></i>`
|
|
||||||
},
|
|
||||||
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'mime',
|
|
||||||
title: 'mime类型',
|
|
||||||
unresize: true,
|
|
||||||
align: 'center',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'size',
|
|
||||||
title: '文件大小',
|
|
||||||
unresize: true,
|
|
||||||
align: 'center',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'create_at',
|
|
||||||
title: '创建时间',
|
|
||||||
templet: (d) => `${layui.util.toDateString(d.create_at, 'yyyy-MM-dd HH:mm:ss')}`,
|
|
||||||
unresize: true,
|
|
||||||
align: 'center',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '操作',
|
|
||||||
toolbar: '#tool',
|
|
||||||
align: 'center',
|
|
||||||
unresize: true,
|
|
||||||
width: 200,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
]
|
|
||||||
|
|
||||||
table.render({
|
|
||||||
parseData,
|
|
||||||
elem: '#tables',
|
|
||||||
url: FILE_API.PHOTOS(),
|
|
||||||
page: true,
|
|
||||||
cols: get_columns(),
|
|
||||||
skin: 'line',
|
|
||||||
toolbar: '#toolbar',
|
|
||||||
defaultToolbar: [
|
|
||||||
{
|
|
||||||
layEvent: 'refresh',
|
|
||||||
icon: 'layui-icon-refresh',
|
|
||||||
}, 'filter', 'print', 'exports'],
|
|
||||||
})
|
|
||||||
|
|
||||||
table.on('tool(tables)', function (obj) {
|
|
||||||
if (obj.event === 'tool-remove') {
|
|
||||||
window.remove(obj)
|
|
||||||
} else if (obj.event === 'photo') {
|
|
||||||
window.photo(obj)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
table.on('toolbar(tables)', function (obj) {
|
|
||||||
if (obj.event === 'toolbar-add') {
|
|
||||||
window.add()
|
|
||||||
} else if (obj.event === 'refresh') {
|
|
||||||
window.refresh()
|
|
||||||
} else if (obj.event === 'toolbar-remove') {
|
|
||||||
window.batchRemove(obj)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
//弹出窗设置 自己设置弹出百分比
|
|
||||||
function screen (width, height) {
|
|
||||||
if (typeof width !== 'number' || width === 0) {
|
|
||||||
width = $(window).width() * 0.8
|
|
||||||
}
|
|
||||||
if (typeof height !== 'number' || height === 0) {
|
|
||||||
height = $(window).height() - 20
|
|
||||||
}
|
|
||||||
return [width + 'px', height + 'px']
|
|
||||||
}
|
|
||||||
|
|
||||||
window.add = function () {
|
|
||||||
layer.open({
|
|
||||||
type: 2,
|
|
||||||
maxmin: true,
|
|
||||||
title: '新增图片',
|
|
||||||
shade: 0.1,
|
|
||||||
area: screen(),
|
|
||||||
content: 'file/photo/add',
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
window.remove = function (obj) {
|
|
||||||
layer.confirm('确定要删除该图片', {
|
|
||||||
icon: 3,
|
|
||||||
title: '提示',
|
|
||||||
}, function (index) {
|
|
||||||
layer.close(index)
|
|
||||||
let loading = layer.load()
|
|
||||||
$.ajax({
|
|
||||||
url: FILE_API.PHOTO(obj.data['id']),
|
|
||||||
data: { id: obj.data['id'] },
|
|
||||||
dataType: 'json',
|
|
||||||
type: 'delete',
|
|
||||||
success: function (res) {
|
|
||||||
layer.close(loading)
|
|
||||||
if (res.success) {
|
|
||||||
layer.msg(res.message, {
|
|
||||||
icon: 1,
|
|
||||||
time: 1000,
|
|
||||||
}, function () {
|
|
||||||
obj.del()
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
layer.msg(res.message, {
|
|
||||||
icon: 2,
|
|
||||||
time: 1000,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
window.batchRemove = 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: FILE_API.PHOTOS(),
|
url: FILE_API.PHOTOS(),
|
||||||
data: { ids: ids },
|
page: true,
|
||||||
dataType: 'json',
|
cols: get_columns(),
|
||||||
type: 'POST',
|
skin: 'line',
|
||||||
success: function (res) {
|
toolbar: '#toolbar',
|
||||||
layer.close(loading)
|
defaultToolbar: [
|
||||||
if (res.success) {
|
{
|
||||||
layer.msg(res.message, {
|
layEvent: 'refresh',
|
||||||
icon: 1,
|
icon: 'layui-icon-refresh',
|
||||||
time: 1000,
|
}, 'filter', 'print', 'exports'],
|
||||||
}, function () {
|
|
||||||
table.reload('tables')
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
layer.msg(res.message, {
|
|
||||||
icon: 2,
|
|
||||||
time: 1000,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
table.on('tool(tables)', function (obj) {
|
||||||
|
if (obj.event === 'tool-remove') {
|
||||||
|
window.remove(obj)
|
||||||
|
} else if (obj.event === 'photo') {
|
||||||
|
window.photo(obj)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
table.on('toolbar(tables)', function (obj) {
|
||||||
|
if (obj.event === 'toolbar-add') {
|
||||||
|
window.add()
|
||||||
|
} else if (obj.event === 'refresh') {
|
||||||
|
window.refresh()
|
||||||
|
} else if (obj.event === 'toolbar-remove') {
|
||||||
|
window.batchRemove(obj)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
//弹出窗设置 自己设置弹出百分比
|
||||||
|
function screen (width, height) {
|
||||||
|
if (typeof width !== 'number' || width === 0) {
|
||||||
|
width = $(window).width() * 0.8
|
||||||
|
}
|
||||||
|
if (typeof height !== 'number' || height === 0) {
|
||||||
|
height = $(window).height() - 20
|
||||||
|
}
|
||||||
|
return [width + 'px', height + 'px']
|
||||||
|
}
|
||||||
|
|
||||||
|
window.add = function () {
|
||||||
|
layer.open({
|
||||||
|
type: 2,
|
||||||
|
maxmin: true,
|
||||||
|
title: '新增图片',
|
||||||
|
shade: 0.1,
|
||||||
|
area: screen(),
|
||||||
|
content: 'file/photo/add',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
window.remove = function (obj) {
|
||||||
|
layer.confirm('确定要删除该图片', {
|
||||||
|
icon: 3,
|
||||||
|
title: '提示',
|
||||||
|
}, function (index) {
|
||||||
|
layer.close(index)
|
||||||
|
let loading = layer.load()
|
||||||
|
$.ajax({
|
||||||
|
url: FILE_API.PHOTO(obj.data['id']),
|
||||||
|
data: { id: obj.data['id'] },
|
||||||
|
dataType: 'json',
|
||||||
|
type: 'delete',
|
||||||
|
success: function (res) {
|
||||||
|
layer.close(loading)
|
||||||
|
if (res.success) {
|
||||||
|
layer.msg(res.message, {
|
||||||
|
icon: 1,
|
||||||
|
time: 1000,
|
||||||
|
}, function () {
|
||||||
|
obj.del()
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
layer.msg(res.message, {
|
||||||
|
icon: 2,
|
||||||
|
time: 1000,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
window.batchRemove = 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: FILE_API.PHOTOS(),
|
||||||
|
data: { ids: ids },
|
||||||
|
dataType: 'json',
|
||||||
|
type: 'POST',
|
||||||
|
success: function (res) {
|
||||||
|
layer.close(loading)
|
||||||
|
if (res.success) {
|
||||||
|
layer.msg(res.message, {
|
||||||
|
icon: 1,
|
||||||
|
time: 1000,
|
||||||
|
}, function () {
|
||||||
|
table.reload('tables')
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
layer.msg(res.message, {
|
||||||
|
icon: 2,
|
||||||
|
time: 1000,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
window.refresh = function () {
|
||||||
|
table.reload('tables')
|
||||||
|
}
|
||||||
|
// 查看大图
|
||||||
|
window.photo = function (obj) {
|
||||||
|
if (!obj.data.href || obj.data.href === '') {
|
||||||
|
layer.msg('图片地址错误!')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var auto_img = {}
|
||||||
|
var img = new Image()
|
||||||
|
img.src = obj.data.href
|
||||||
|
img.onload = function () {
|
||||||
|
var max_height = $(window).height() - 100
|
||||||
|
var max_width = $(window).width()
|
||||||
|
var rate1 = max_height / img.height
|
||||||
|
var rate2 = max_width / img.width
|
||||||
|
var rate3 = 1
|
||||||
|
var rate = Math.min(rate1, rate2, rate3)
|
||||||
|
auto_img.height = img.height * rate
|
||||||
|
auto_img.width = img.width * rate
|
||||||
|
layer.open({
|
||||||
|
type: 1,
|
||||||
|
title: false,
|
||||||
|
area: ['auto'],
|
||||||
|
skin: 'layui-layer-nobg', //没有背景色
|
||||||
|
shadeClose: true,
|
||||||
|
content: `<img src="${obj.data['href']}" width="${auto_img.width}px" height="${auto_img.height}px">`,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
}
|
</script>
|
||||||
|
{% endblock %}
|
||||||
window.refresh = function () {
|
|
||||||
table.reload('tables')
|
|
||||||
}
|
|
||||||
// 查看大图
|
|
||||||
window.photo = function (obj) {
|
|
||||||
if (!obj.data.href || obj.data.href === '') {
|
|
||||||
layer.msg('图片地址错误!')
|
|
||||||
return
|
|
||||||
}
|
|
||||||
var auto_img = {}
|
|
||||||
var img = new Image()
|
|
||||||
img.src = obj.data.href
|
|
||||||
img.onload = function () {
|
|
||||||
var max_height = $(window).height() - 100
|
|
||||||
var max_width = $(window).width()
|
|
||||||
var rate1 = max_height / img.height
|
|
||||||
var rate2 = max_width / img.width
|
|
||||||
var rate3 = 1
|
|
||||||
var rate = Math.min(rate1, rate2, rate3)
|
|
||||||
auto_img.height = img.height * rate
|
|
||||||
auto_img.width = img.width * rate
|
|
||||||
layer.open({
|
|
||||||
type: 1,
|
|
||||||
title: false,
|
|
||||||
area: ['auto'],
|
|
||||||
skin: 'layui-layer-nobg', //没有背景色
|
|
||||||
shadeClose: true,
|
|
||||||
content: `<img src="${obj.data['href']}" width="${auto_img.width}px" height="${auto_img.height}px">`,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,66 +1,61 @@
|
|||||||
<!DOCTYPE html>
|
{% extends 'admin/base.html' %}
|
||||||
<html>
|
|
||||||
<head>
|
{% block title %}
|
||||||
{% include 'admin/common/header.html' %}
|
<title>新增图片</title>
|
||||||
<style>
|
{% endblock %}
|
||||||
body {
|
|
||||||
margin: 10px;
|
{% block body %}
|
||||||
}
|
<div class="layui-row layui-col-space15">
|
||||||
</style>
|
<div class="layui-col-md12">
|
||||||
</head>
|
<div class="layui-card">
|
||||||
<body>
|
<div class="layui-tab-content">
|
||||||
<div class="layui-row layui-col-space15">
|
<fieldset class="layui-elem-field layui-field-title">
|
||||||
<div class="layui-col-md12">
|
<legend>新增图片</legend>
|
||||||
<div class="layui-card">
|
</fieldset>
|
||||||
<div class="layui-tab-content">
|
<form class="layui-form edit-form">
|
||||||
<fieldset class="layui-elem-field layui-field-title">
|
<div class="layui-form-item">
|
||||||
<legend>新增图片</legend>
|
<label class="layui-form-label">
|
||||||
</fieldset>
|
新增图片
|
||||||
<form class="layui-form edit-form">
|
</label>
|
||||||
<div class="layui-form-item">
|
<button type="button" class="layui-btn layui-btn-normal" id="select-img">选择文件</button>
|
||||||
<label class="layui-form-label">
|
<button type="button" class="layui-btn" id="logo-upload-button">开始上传</button>
|
||||||
新增图片
|
</div>
|
||||||
</label>
|
</form>
|
||||||
<button type="button" class="layui-btn layui-btn-normal" id="select-img">选择文件</button>
|
</div>
|
||||||
<button type="button" class="layui-btn" id="logo-upload-button">开始上传</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
{% include 'admin/common/footer.html' %}
|
{% block models_script %}
|
||||||
|
<script type="module">
|
||||||
|
import { FILE_API } from '/static/api/http.js'
|
||||||
|
|
||||||
<script type="module">
|
layui.use(['jquery', 'element', 'form', 'upload'], function () {
|
||||||
import { FILE_API } from '/static/api/http.js'
|
var $ = layui.jquery
|
||||||
|
var element = layui.element
|
||||||
layui.use(['jquery', 'element', 'form', 'upload'], function () {
|
var form = layui.form
|
||||||
var $ = layui.jquery
|
var upload = layui.upload
|
||||||
var element = layui.element
|
//选完文件后不自动上传
|
||||||
var form = layui.form
|
upload.render({
|
||||||
var upload = layui.upload
|
elem: '#select-img'
|
||||||
//选完文件后不自动上传
|
, url: FILE_API.PHOTOS()
|
||||||
upload.render({
|
, auto: false
|
||||||
elem: '#select-img'
|
, exts: 'jpg|png|gif|bmp|jpeg'
|
||||||
, url: FILE_API.PHOTOS()
|
, size: 1000
|
||||||
, auto: false
|
, bindAction: '#logo-upload-button'
|
||||||
, exts: 'jpg|png|gif|bmp|jpeg'
|
, done: function (res) {
|
||||||
, size: 1000
|
if (res.success) {
|
||||||
, bindAction: '#logo-upload-button'
|
layer.msg(res.message, { icon: 1, time: 500 }, function () {
|
||||||
, done: function (res) {
|
parent.layer.close(parent.layer.getFrameIndex(window.name))//关闭当前页
|
||||||
if (res.success) {
|
window.parent.location.reload()
|
||||||
layer.msg(res.message, { icon: 1, time: 500 }, function () {
|
})
|
||||||
parent.layer.close(parent.layer.getFrameIndex(window.name))//关闭当前页
|
} else {
|
||||||
window.parent.location.reload()
|
layer.msg(res.message, { icon: 2 })
|
||||||
})
|
}
|
||||||
} else {
|
},
|
||||||
layer.msg(res.message, { icon: 2 })
|
})
|
||||||
}
|
})
|
||||||
},
|
</script>
|
||||||
})
|
{% endblock %}
|
||||||
})
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,87 +1,86 @@
|
|||||||
<!DOCTYPE html>
|
{% extends 'admin/base.html' %}
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>日志</title>
|
|
||||||
{% include 'admin/common/header.html' %}
|
|
||||||
<link rel="stylesheet" href="/static/admin/admin/css/other/console2.css"/>
|
|
||||||
</head>
|
|
||||||
<body class="pear-container">
|
|
||||||
|
|
||||||
<div class="layui-card">
|
{% block title %}
|
||||||
<div class="layui-card-body">
|
<title>日志</title>
|
||||||
<div class="layui-tab layui-tab-card">
|
<link rel="stylesheet" href="/static/admin/admin/css/other/console2.css"/>
|
||||||
<ul class="layui-tab-title">
|
{% endblock %}
|
||||||
<li class="layui-this">登录日志</li>
|
|
||||||
<li>访问日志</li>
|
|
||||||
</ul>
|
{% block body %}
|
||||||
<div class="layui-tab-content">
|
<div class="layui-card">
|
||||||
<div class="layui-tab-item layui-show">
|
<div class="layui-card-body">
|
||||||
<table style="margin-top: 10px;" id="log-login-table" lay-filter="log-login-table"></table>
|
<div class="layui-tab layui-tab-card">
|
||||||
</div>
|
<ul class="layui-tab-title">
|
||||||
<div class="layui-tab-item">
|
<li class="layui-this">登录日志</li>
|
||||||
<table style="margin-top: 10px;" id="log-access-table" lay-filter="log-access-table"></table>
|
<li>访问日志</li>
|
||||||
|
</ul>
|
||||||
|
<div class="layui-tab-content">
|
||||||
|
<div class="layui-tab-item layui-show">
|
||||||
|
<table style="margin-top: 10px;" id="log-login-table" lay-filter="log-login-table"></table>
|
||||||
|
</div>
|
||||||
|
<div class="layui-tab-item">
|
||||||
|
<table style="margin-top: 10px;" id="log-access-table" lay-filter="log-access-table"></table>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
{% endblock %}
|
||||||
</body>
|
|
||||||
|
|
||||||
{% include 'admin/common/footer.html' %}
|
{% block models_script %}
|
||||||
|
<script type="text/html" id="log-createTime">
|
||||||
<script type="text/html" id="log-createTime">
|
{{ ' {{layui.util.toDateString(d.create_at, "yyyy-MM-dd HH:mm:ss")}' |safe }}}
|
||||||
{{ ' {{layui.util.toDateString(d.create_at, "yyyy-MM-dd HH:mm:ss")}' |safe }}}
|
</script>
|
||||||
</script>
|
<script type="text/html" id="log-status">
|
||||||
<script type="text/html" id="log-status">
|
{{ '{{#if (d.success == true) { }}
|
||||||
{{ '{{#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 type="module">
|
<script type="module">
|
||||||
import { parserTableData as parseData } from '/static/api/http.js'
|
import { parserTableData as parseData } from '/static/api/http.js'
|
||||||
|
|
||||||
layui.use(['table', 'form', 'jquery', 'element', 'util'], function () {
|
layui.use(['table', 'form', 'jquery', 'element', 'util'], function () {
|
||||||
let table = layui.table
|
let table = layui.table
|
||||||
let form = layui.form
|
let form = layui.form
|
||||||
|
|
||||||
let MODULE_PATH = '/logs/'
|
let MODULE_PATH = '/logs/'
|
||||||
|
|
||||||
const get_columns = () => [
|
const get_columns = () => [
|
||||||
[
|
[
|
||||||
{ title: 'ID', field: 'id', align: 'center' },
|
{ title: 'ID', field: 'id', align: 'center' },
|
||||||
{ title: '请求方式', field: 'method', align: 'center' },
|
{ title: '请求方式', field: 'method', align: 'center' },
|
||||||
{ title: '接口', field: 'url', align: 'center' },
|
{ title: '接口', field: 'url', align: 'center' },
|
||||||
{ title: '浏览器', field: 'user_agent', align: 'center' },
|
{ title: '浏览器', field: 'user_agent', align: 'center' },
|
||||||
{ title: '操作地址', field: 'ip', align: 'center' },
|
{ title: '操作地址', field: 'ip', align: 'center' },
|
||||||
{ title: '访问时间', field: 'create_at', templet: '#log-createTime', align: 'center' },
|
{ title: '访问时间', field: 'create_at', templet: '#log-createTime', align: 'center' },
|
||||||
{ title: '操作人ID', field: 'uid', align: 'center' },
|
{ title: '操作人ID', field: 'uid', align: 'center' },
|
||||||
{ title: '描述', field: 'desc', align: 'center' },
|
{ title: '描述', field: 'desc', align: 'center' },
|
||||||
{ title: '访问状态', templet: '#log-status', align: 'center' },
|
{ title: '访问状态', templet: '#log-status', align: 'center' },
|
||||||
],
|
],
|
||||||
]
|
]
|
||||||
|
|
||||||
table.render({
|
table.render({
|
||||||
parseData,
|
parseData,
|
||||||
elem: '#log-access-table',
|
elem: '#log-access-table',
|
||||||
url: MODULE_PATH + 'access_log',
|
url: MODULE_PATH + 'access_log',
|
||||||
page: true,
|
page: true,
|
||||||
cols: get_columns(),
|
cols: get_columns(),
|
||||||
skin: 'line',
|
skin: 'line',
|
||||||
toolbar: false,
|
toolbar: false,
|
||||||
})
|
})
|
||||||
|
|
||||||
table.render({
|
table.render({
|
||||||
parseData,
|
parseData,
|
||||||
elem: '#log-login-table',
|
elem: '#log-login-table',
|
||||||
url: MODULE_PATH + 'login_log',
|
url: MODULE_PATH + 'login_log',
|
||||||
page: true,
|
page: true,
|
||||||
cols: get_columns(),
|
cols: get_columns(),
|
||||||
skin: 'line',
|
skin: 'line',
|
||||||
toolbar: false,
|
toolbar: false,
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
</html>
|
{% endblock %}
|
||||||
+271
-272
@@ -1,286 +1,285 @@
|
|||||||
<!DOCTYPE html>
|
{% extends 'admin/base.html' %}
|
||||||
<html>
|
|
||||||
<head>
|
{% block title %}
|
||||||
<title>权限</title>
|
<title>权限</title>
|
||||||
{% include 'admin/common/header.html' %}
|
{% endblock %}
|
||||||
</head>
|
|
||||||
<body class="pear-container">
|
|
||||||
<div class="layui-card">
|
{% block body %}
|
||||||
<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>
|
||||||
<input type="text" name="powerName" placeholder="" class="layui-input">
|
<div class="layui-input-inline">
|
||||||
|
<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>
|
||||||
<button class="pear-btn pear-btn-md pear-btn-primary" lay-submit lay-filter="power_query">
|
</form>
|
||||||
<i class="layui-icon layui-icon-search"></i>
|
</div>
|
||||||
查询
|
|
||||||
</button>
|
|
||||||
<button type="reset" class="pear-btn pear-btn-md">
|
|
||||||
<i class="layui-icon layui-icon-refresh"></i>
|
|
||||||
重置
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<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>
|
||||||
</div>
|
{% endblock %}
|
||||||
|
|
||||||
|
{% 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>
|
||||||
|
|
||||||
{% include 'admin/common/footer.html' %}
|
<script type="module">
|
||||||
|
import { RIGHTS_API, parserTableData as parseData } from '/static/api/http.js'
|
||||||
|
|
||||||
<script type="text/html" id="toolbar">
|
layui.use(['table', 'form', 'jquery', 'treetable', 'popup', 'dtree', 'iconPicker'], function () {
|
||||||
<button class="pear-btn pear-btn-primary pear-btn-md" lay-event="toolbar-add">
|
let table = layui.table
|
||||||
<i class="layui-icon layui-icon-add-1"></i>
|
let form = layui.form
|
||||||
新增
|
let $ = layui.jquery
|
||||||
</button>
|
let treetable = layui.treetable
|
||||||
<button class="pear-btn pear-btn-md" lay-event="toolbar-remove">
|
let popup = layui.popup
|
||||||
<i class="layui-icon layui-icon-delete"></i>
|
let iconPicker = layui.iconPicker
|
||||||
删除
|
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 type="module">
|
const get_columns = () => [
|
||||||
import { RIGHTS_API, parserTableData as parseData } from '/static/api/http.js'
|
[
|
||||||
|
{ type: 'checkbox' },
|
||||||
|
{ field: 'powerName', minWidth: 200, title: '权限名称' },
|
||||||
|
{ field: 'icon', title: '图标', templet: (d) => `<i class="layui-icon ${d.icon}"></i>` },
|
||||||
|
{
|
||||||
|
field: 'powerType', title: '权限类型', templet: (d) => {
|
||||||
|
if (d.powerType === '0') {
|
||||||
|
return `<span>目录</span>`
|
||||||
|
} else if (d.powerType === '1') {
|
||||||
|
return `<span>菜单</span>`
|
||||||
|
} else if (d.powerType === '2') {
|
||||||
|
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 ===
|
||||||
|
1 ? 'checked=checked' : ''}>`
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{ field: 'sort', title: '排序' },
|
||||||
|
{ title: '操作', templet: '#tool', width: 150, align: 'center' },
|
||||||
|
],
|
||||||
|
]
|
||||||
|
|
||||||
layui.use(['table', 'form', 'jquery', 'treetable', 'popup', 'dtree', 'iconPicker'], function () {
|
treetable.render({
|
||||||
let table = layui.table
|
treeColIndex: 1,
|
||||||
let form = layui.form
|
treeSpid: 0,
|
||||||
let $ = layui.jquery
|
treeIdName: 'powerId',
|
||||||
let treetable = layui.treetable
|
treePidName: 'parentId',
|
||||||
let popup = layui.popup
|
skin: 'line',
|
||||||
let iconPicker = layui.iconPicker
|
method: 'post',
|
||||||
let dtree = layui.dtree
|
treeDefaultClose: true,
|
||||||
|
toolbar: '#toolbar',
|
||||||
const get_columns = () => [
|
elem: '#tables',
|
||||||
[
|
|
||||||
{ type: 'checkbox' },
|
|
||||||
{ field: 'powerName', minWidth: 200, title: '权限名称' },
|
|
||||||
{ field: 'icon', title: '图标', templet: (d) => `<i class="layui-icon ${d.icon}"></i>` },
|
|
||||||
{
|
|
||||||
field: 'powerType', title: '权限类型', templet: (d) => {
|
|
||||||
if (d.powerType === '0') {
|
|
||||||
return `<span>目录</span>`
|
|
||||||
} else if (d.powerType === '1') {
|
|
||||||
return `<span>菜单</span>`
|
|
||||||
} else if (d.powerType === '2') {
|
|
||||||
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 ===
|
|
||||||
1 ? '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: RIGHTS_API.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: RIGHTS_API.POWER_STATUS(this.value),
|
|
||||||
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: RIGHTS_API.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: RIGHTS_API.RIGHTS(),
|
url: RIGHTS_API.RIGHTS(),
|
||||||
data: { ids: ids },
|
page: false,
|
||||||
dataType: 'json',
|
cols: get_columns(),
|
||||||
type: 'delete',
|
})
|
||||||
success: function (result) {
|
|
||||||
layer.close(loading)
|
form.on('submit(power_query)', function (data) {
|
||||||
if (result.success) {
|
var keyword = data.field.powerName
|
||||||
popup.success(result.msg, function () {
|
var $tds = $('#tables').next('.treeTable').find('.layui-table-body tbody tr td')
|
||||||
console.log(obj)
|
if (!keyword) {
|
||||||
obj.del()
|
$tds.css('background-color', 'transparent')
|
||||||
})
|
layer.msg('请输入关键字', { icon: 5 })
|
||||||
} else {
|
return
|
||||||
popup.failure(result.msg)
|
}
|
||||||
|
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: RIGHTS_API.POWER_STATUS(this.value),
|
||||||
|
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: RIGHTS_API.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: RIGHTS_API.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>
|
||||||
|
{% endblock %}
|
||||||
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>
|
|
||||||
|
|||||||
@@ -1,172 +1,171 @@
|
|||||||
<!DOCTYPE html>
|
{% extends 'admin/base.html' %}
|
||||||
<html>
|
|
||||||
<head>
|
{% block title %}
|
||||||
<title>权限</title>
|
<title>权限</title>
|
||||||
{% include 'admin/common/header.html' %}</head>
|
{% endblock %}
|
||||||
</head>
|
|
||||||
<body>
|
{% 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="layui-form-item">
|
<div class="main-container">
|
||||||
<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">
|
||||||
|
<ul id="selectParent" name="parentId" class="dtree" data-id="-1"></ul>
|
||||||
|
</div>
|
||||||
</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">
|
<input type="text" name="powerName" lay-verify="title" autocomplete="off" placeholder="权限名称"
|
||||||
<input type="text" name="powerName" lay-verify="title" autocomplete="off" placeholder="权限名称"
|
class="layui-input">
|
||||||
class="layui-input">
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="layui-form-item" id="powerCodeItem">
|
||||||
<div class="layui-form-item" id="powerCodeItem">
|
<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" id="powerCode" name="powerCode" autocomplete="off" placeholder="权限标识"
|
||||||
<input type="text" id="powerCode" name="powerCode" autocomplete="off" placeholder="权限标识"
|
class="layui-input">
|
||||||
class="layui-input">
|
</div>
|
||||||
</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">
|
<input type="radio" lay-filter="powerType" name="powerType" value="0" title="目录">
|
||||||
<input type="radio" lay-filter="powerType" name="powerType" value="0" title="目录">
|
<input type="radio" lay-filter="powerType" name="powerType" value="1" title="菜单" checked>
|
||||||
<input type="radio" lay-filter="powerType" name="powerType" value="1" title="菜单" checked>
|
<input type="radio" lay-filter="powerType" name="powerType" value="2" title="按钮">
|
||||||
<input type="radio" lay-filter="powerType" name="powerType" value="2" title="按钮">
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="layui-form-item" id="powerUrlItem">
|
||||||
<div class="layui-form-item" id="powerUrlItem">
|
<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" id="powerUrl" name="powerUrl" autocomplete="off" placeholder="菜单路径"
|
||||||
<input type="text" id="powerUrl" name="powerUrl" autocomplete="off" placeholder="菜单路径"
|
class="layui-input">
|
||||||
class="layui-input">
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="layui-form-item" id="openTypeItem">
|
||||||
<div class="layui-form-item" id="openTypeItem">
|
<label class="layui-form-label">打开</label>
|
||||||
<label class="layui-form-label">打开</label>
|
<div class="layui-input-block">
|
||||||
<div class="layui-input-block">
|
<select name="openType" id="openType">
|
||||||
<select name="openType" id="openType">
|
<option value=""></option>
|
||||||
<option value=""></option>
|
<option value="_iframe">框架</option>
|
||||||
<option value="_iframe">框架</option>
|
<option value="_blank">签页</option>
|
||||||
<option value="_blank">签页</option>
|
</select>
|
||||||
</select>
|
</div>
|
||||||
</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">
|
<input type="text" id="icon" name="icon" lay-filter="icon" class="layui-input">
|
||||||
<input type="text" id="icon" name="icon" lay-filter="icon" class="layui-input">
|
</div>
|
||||||
</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">
|
<input type="text" name="sort" lay-verify="title" autocomplete="off" placeholder="排序"
|
||||||
<input type="text" name="sort" lay-verify="title" autocomplete="off" placeholder="排序"
|
class="layui-input">
|
||||||
class="layui-input">
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="bottom">
|
||||||
<div class="bottom">
|
<div class="button-container">
|
||||||
<div class="button-container">
|
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit=""
|
||||||
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit="" lay-filter="power-save">
|
lay-filter="power-save">
|
||||||
<i class="layui-icon layui-icon-ok"></i>
|
<i class="layui-icon layui-icon-ok"></i>
|
||||||
提交
|
提交
|
||||||
</button>
|
</button>
|
||||||
<button type="reset" class="pear-btn pear-btn-sm">
|
<button type="reset" class="pear-btn pear-btn-sm">
|
||||||
<i class="layui-icon layui-icon-refresh"></i>
|
<i class="layui-icon layui-icon-refresh"></i>
|
||||||
重置
|
重置
|
||||||
</button>
|
</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</form>
|
||||||
</form>
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block models_script %}
|
||||||
|
<script type="module">
|
||||||
|
import { RIGHTS_API } from '/static/api/http.js'
|
||||||
|
|
||||||
{% include 'admin/common/footer.html' %}
|
layui.use(['form', 'jquery', 'iconPicker', 'dtree'], function () {
|
||||||
|
let form = layui.form
|
||||||
|
let $ = layui.jquery
|
||||||
|
let iconPicker = layui.iconPicker
|
||||||
|
let dtree = layui.dtree
|
||||||
|
|
||||||
<script type="module">
|
dtree.renderSelect({
|
||||||
import { RIGHTS_API } from '/static/api/http.js'
|
elem: '#selectParent',
|
||||||
|
url: RIGHTS_API.RIGHTS(),
|
||||||
|
method: 'get',
|
||||||
|
selectInputName: { nodeId: 'parentId', context: 'powerName' },
|
||||||
|
skin: 'layui',
|
||||||
|
dataFormat: 'list',
|
||||||
|
response: { treeId: 'powerId', parentId: 'parentId', title: 'powerName' }, //修改response中返回数据的定义
|
||||||
|
selectInitVal: '0',
|
||||||
|
})
|
||||||
|
|
||||||
layui.use(['form', 'jquery', 'iconPicker', 'dtree'], function () {
|
form.on('radio(powerType)', function () {
|
||||||
let form = layui.form
|
if (this.value == '0') {
|
||||||
let $ = layui.jquery
|
$('#powerUrlItem').hide()
|
||||||
let iconPicker = layui.iconPicker
|
$('#powerCodeItem').hide()
|
||||||
let dtree = layui.dtree
|
$('#openTypeItem').hide()
|
||||||
|
$('#powerUrl').val('')
|
||||||
dtree.renderSelect({
|
$('#powerCode').val('')
|
||||||
elem: '#selectParent',
|
$('#openType').val('')
|
||||||
url: RIGHTS_API.RIGHTS(),
|
} else if (this.value == '1') {
|
||||||
method: 'get',
|
$('#powerUrlItem').show()
|
||||||
selectInputName: { nodeId: 'parentId', context: 'powerName' },
|
$('#powerCodeItem').show()
|
||||||
skin: 'layui',
|
$('#openTypeItem').show()
|
||||||
dataFormat: 'list',
|
} else if (this.value == '2') {
|
||||||
response: { treeId: 'powerId', parentId: 'parentId', title: 'powerName' }, //修改response中返回数据的定义
|
$('#powerUrlItem').hide()
|
||||||
selectInitVal: '0'
|
$('#openTypeItem').hide()
|
||||||
})
|
$('#powerCodeItem').show()
|
||||||
|
$('#powerUrl').val('')
|
||||||
form.on('radio(powerType)', function () {
|
$('#openType').val('')
|
||||||
if (this.value == '0') {
|
|
||||||
$('#powerUrlItem').hide()
|
|
||||||
$('#powerCodeItem').hide()
|
|
||||||
$('#openTypeItem').hide()
|
|
||||||
$('#powerUrl').val('')
|
|
||||||
$('#powerCode').val('')
|
|
||||||
$('#openType').val('')
|
|
||||||
} else if (this.value == '1') {
|
|
||||||
$('#powerUrlItem').show()
|
|
||||||
$('#powerCodeItem').show()
|
|
||||||
$('#openTypeItem').show()
|
|
||||||
} else if (this.value == '2') {
|
|
||||||
$('#powerUrlItem').hide()
|
|
||||||
$('#openTypeItem').hide()
|
|
||||||
$('#powerCodeItem').show()
|
|
||||||
$('#powerUrl').val('')
|
|
||||||
$('#openType').val('')
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
form.on('submit(power-save)', function (data) {
|
|
||||||
data.field.icon = 'layui-icon ' + data.field.icon
|
|
||||||
$.ajax({
|
|
||||||
url: RIGHTS_API.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
|
|
||||||
})
|
|
||||||
|
|
||||||
iconPicker.render({
|
form.on('submit(power-save)', function (data) {
|
||||||
// 选择器,推荐使用input
|
data.field.icon = 'layui-icon ' + data.field.icon
|
||||||
elem: '#icon',
|
$.ajax({
|
||||||
// 数据类型:fontClass/unicode,推荐使用fontClass
|
url: RIGHTS_API.POWER(0),
|
||||||
type: 'fontClass',
|
data: JSON.stringify(data.field),
|
||||||
// 是否开启搜索:true/false
|
dataType: 'json',
|
||||||
search: true,
|
contentType: 'application/json',
|
||||||
// 是否开启分页
|
type: 'post',
|
||||||
page: true,
|
success: function (result) {
|
||||||
// 每页显示数量,默认12
|
if (result.success) {
|
||||||
limit: 12,
|
layer.msg(result.message, { icon: 1, time: 1000 }, function () {
|
||||||
// 点击回调
|
parent.layer.close(parent.layer.getFrameIndex(window.name))//关闭当前页
|
||||||
click: function (data) {
|
parent.render()
|
||||||
console.log(data)
|
})
|
||||||
}
|
} else {
|
||||||
})
|
layer.msg(result.message, { icon: 2, time: 1000 })
|
||||||
})
|
}
|
||||||
</script>
|
},
|
||||||
</body>
|
})
|
||||||
</html>
|
return false
|
||||||
|
})
|
||||||
|
|
||||||
|
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 %}
|
||||||
@@ -1,206 +1,206 @@
|
|||||||
<!DOCTYPE html>
|
{% extends 'admin/base.html' %}
|
||||||
<html>
|
|
||||||
<head>
|
{% block title %}
|
||||||
<title>权限编辑</title>
|
<title>权限编辑</title>
|
||||||
{% include 'admin/common/header.html' %}
|
{% endblock %}
|
||||||
</head>
|
|
||||||
<body>
|
{% 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>
|
<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>
|
<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" value="{{ power.name }}" name="powerName"
|
||||||
<input type="text" value="{{ power.name }}" name="powerName"
|
autocomplete="off" placeholder="权限名称" class="layui-input">
|
||||||
autocomplete="off" placeholder="权限名称" class="layui-input">
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="layui-form-item" id="powerCodeItem">
|
||||||
<div class="layui-form-item" id="powerCodeItem">
|
<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" id="powerCode" value="{{ power.code }}" name="powerCode"
|
||||||
<input type="text" id="powerCode" value="{{ power.code }}" name="powerCode"
|
autocomplete="off" placeholder="权限标识" class="layui-input">
|
||||||
autocomplete="off" placeholder="权限标识" class="layui-input">
|
</div>
|
||||||
</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">
|
<input type="radio" lay-filter="powerType" {% if power.type == 0 %} checked{% endif %}
|
||||||
<input type="radio" lay-filter="powerType" {% if power.type == 0 %} checked{% endif %}
|
name="powerType" value="0" title="目录">
|
||||||
name="powerType" value="0" title="目录">
|
<input type="radio" lay-filter="powerType" {% if power.type == 1 %} checked{% endif %}
|
||||||
<input type="radio" lay-filter="powerType" {% if power.type == 1 %} checked{% endif %}
|
name="powerType" value="1" title="菜单">
|
||||||
name="powerType" value="1" title="菜单">
|
<input type="radio" lay-filter="powerType" {% if power.type == 2 %} checked{% endif %}
|
||||||
<input type="radio" lay-filter="powerType" {% if power.type == 2 %} checked{% endif %}
|
name="powerType" value="2" title="按钮">
|
||||||
name="powerType" value="2" title="按钮">
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="layui-form-item" id="powerUrlItem">
|
||||||
<div class="layui-form-item" id="powerUrlItem">
|
<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" id="powerUrl" value="{{ power.url }}" name="powerUrl"
|
||||||
<input type="text" id="powerUrl" value="{{ power.url }}" name="powerUrl"
|
autocomplete="off" placeholder="菜单路径" class="layui-input">
|
||||||
autocomplete="off" placeholder="菜单路径" class="layui-input">
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="layui-form-item" id="openTypeItem">
|
||||||
<div class="layui-form-item" id="openTypeItem">
|
<label class="layui-form-label">打开</label>
|
||||||
<label class="layui-form-label">打开</label>
|
<div class="layui-input-block">
|
||||||
<div class="layui-input-block">
|
<select name="openType" id="openType">
|
||||||
<select name="openType" id="openType">
|
<option value=""></option>
|
||||||
<option value=""></option>
|
<option value="_iframe" {% if power.open_type == "_iframe" %} selected{% endif %}>框架
|
||||||
<option value="_iframe" {% if power.open_type == "_iframe" %} selected{% endif %}>框架
|
</option>
|
||||||
</option>
|
<option value="_blank" {% if power.open_type == "_blank" %} selected{% endif %}>签页</option>
|
||||||
<option value="_blank" {% if power.open_type == "_blank" %} selected{% endif %}>签页</option>
|
</select>
|
||||||
</select>
|
</div>
|
||||||
</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">
|
<input type="text" id="edit_icon" value="{{ power.icon }}" name="icon" lay-filter="icon"
|
||||||
<input type="text" id="edit_icon" value="{{ power.icon }}" name="icon" lay-filter="icon"
|
class="layui-input">
|
||||||
class="layui-input">
|
</div>
|
||||||
</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">
|
<input type="text" value="{{ power.sort }}" name="sort" lay-verify="title" autocomplete="off"
|
||||||
<input type="text" value="{{ power.sort }}" name="sort" lay-verify="title" autocomplete="off"
|
placeholder="排序" class="layui-input">
|
||||||
placeholder="排序" class="layui-input">
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="bottom">
|
||||||
<div class="bottom">
|
<div class="button-container">
|
||||||
<div class="button-container">
|
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit=""
|
||||||
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit="" lay-filter="power-save">
|
lay-filter="power-save">
|
||||||
<i class="layui-icon layui-icon-ok"></i>
|
<i class="layui-icon layui-icon-ok"></i>
|
||||||
提交
|
提交
|
||||||
</button>
|
</button>
|
||||||
<button type="reset" class="pear-btn pear-btn-sm">
|
<button type="reset" class="pear-btn pear-btn-sm">
|
||||||
<i class="layui-icon layui-icon-refresh"></i>
|
<i class="layui-icon layui-icon-refresh"></i>
|
||||||
重置
|
重置
|
||||||
</button>
|
</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</form>
|
||||||
</form>
|
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
{% include 'admin/common/footer.html' %}
|
{% block models_script %}
|
||||||
|
<script type="module">
|
||||||
|
|
||||||
<script type="module">
|
import { RIGHTS_API } from '/static/api/http.js'
|
||||||
|
|
||||||
import { RIGHTS_API } from '/static/api/http.js'
|
layui.use(['form', 'jquery', 'iconPicker', 'dtree'], function () {
|
||||||
|
let form = layui.form
|
||||||
|
let $ = layui.jquery
|
||||||
|
let iconPicker = layui.iconPicker
|
||||||
|
let dtree = layui.dtree
|
||||||
|
|
||||||
layui.use(['form', 'jquery', 'iconPicker', 'dtree'], function () {
|
dtree.renderSelect({
|
||||||
let form = layui.form
|
elem: '#selectParent',
|
||||||
let $ = layui.jquery
|
url: RIGHTS_API.RIGHTS(),
|
||||||
let iconPicker = layui.iconPicker
|
method: 'get',
|
||||||
let dtree = layui.dtree
|
selectInputName: { nodeId: 'parentId', context: 'powerName' },
|
||||||
|
skin: 'layui',
|
||||||
|
dataFormat: 'list',
|
||||||
|
response: { treeId: 'powerId', parentId: 'parentId', title: 'powerName' },
|
||||||
|
selectInitVal: "{{ power.parent_id }}",
|
||||||
|
})
|
||||||
|
|
||||||
dtree.renderSelect({
|
form.on('radio(powerType)', function (data) {
|
||||||
elem: '#selectParent',
|
if (this.value == '0') {
|
||||||
url: RIGHTS_API.RIGHTS(),
|
{#目录#}
|
||||||
method: 'get',
|
$('#powerUrlItem').hide()
|
||||||
selectInputName: { nodeId: 'parentId', context: 'powerName' },
|
$('#powerCodeItem').hide()
|
||||||
skin: 'layui',
|
$('#openTypeItem').hide()
|
||||||
dataFormat: 'list',
|
$('#powerUrl').val('')
|
||||||
response: { treeId: 'powerId', parentId: 'parentId', title: 'powerName' },
|
$('#powerCode').val('')
|
||||||
selectInitVal: "{{ power.parent_id }}"
|
$('#openType').val('')
|
||||||
})
|
} else if (this.value == '1') {
|
||||||
|
{#菜单#}
|
||||||
|
$('#powerUrlItem').show()
|
||||||
|
$('#powerCodeItem').show()
|
||||||
|
$('#openTypeItem').show()
|
||||||
|
} else if (this.value == '2') {
|
||||||
|
{#按钮#}
|
||||||
|
$('#powerUrlItem').hide()
|
||||||
|
$('#openTypeItem').hide()
|
||||||
|
$('#powerCodeItem').show()
|
||||||
|
$('#powerUrl').val('')
|
||||||
|
$('#openType').val('')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
form.on('radio(powerType)', function (data) {
|
form.on('submit(power-save)', function (data) {
|
||||||
if (this.value == '0') {
|
data.field.icon = 'layui-icon ' + data.field.icon
|
||||||
{#目录#}
|
console.log(data.field)
|
||||||
$('#powerUrlItem').hide()
|
$.ajax({
|
||||||
$('#powerCodeItem').hide()
|
url: RIGHTS_API.POWER(data.field.powerId),
|
||||||
$('#openTypeItem').hide()
|
data: JSON.stringify(data.field),
|
||||||
$('#powerUrl').val('')
|
dataType: 'json',
|
||||||
$('#powerCode').val('')
|
contentType: 'application/json',
|
||||||
$('#openType').val('')
|
type: 'put',
|
||||||
} else if (this.value == '1') {
|
success: function (result) {
|
||||||
{#菜单#}
|
if (result.success) {
|
||||||
$('#powerUrlItem').show()
|
layer.msg(result.message, { icon: 1, time: 1000 }, function () {
|
||||||
$('#powerCodeItem').show()
|
parent.layer.close(parent.layer.getFrameIndex(window.name))//关闭当前页
|
||||||
$('#openTypeItem').show()
|
parent.render()
|
||||||
} else if (this.value == '2') {
|
})
|
||||||
{#按钮#}
|
} else {
|
||||||
$('#powerUrlItem').hide()
|
layer.msg(result.message, { icon: 2, time: 1000 })
|
||||||
$('#openTypeItem').hide()
|
}
|
||||||
$('#powerCodeItem').show()
|
},
|
||||||
$('#powerUrl').val('')
|
})
|
||||||
$('#openType').val('')
|
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: RIGHTS_API.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 () {
|
iconPicker.checkIcon('icon', "{{ icon }}")
|
||||||
parent.layer.close(parent.layer.getFrameIndex(window.name))//关闭当前页
|
|
||||||
parent.render()
|
window.init = function (type) {
|
||||||
})
|
if (type == '0') {
|
||||||
} else {
|
$('#powerUrlItem').hide()
|
||||||
layer.msg(result.message, { icon: 2, time: 1000 })
|
$('#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("{{ power.type }}")
|
||||||
})
|
})
|
||||||
return false
|
</script>
|
||||||
})
|
{% endblock %}
|
||||||
|
|
||||||
iconPicker.render({
|
|
||||||
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("{{ power.type }}")
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
+242
-243
@@ -1,255 +1,254 @@
|
|||||||
<!DOCTYPE html>
|
{% extends 'admin/base.html' %}
|
||||||
<html>
|
|
||||||
<head>
|
{% block title %}
|
||||||
<title>角色管理</title>
|
<title>角色管理</title>
|
||||||
{% include 'admin/common/header.html' %}</head>
|
{% endblock %}
|
||||||
<body class="pear-container">
|
|
||||||
<div class="layui-card">
|
{% block body %}
|
||||||
<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>
|
||||||
<input type="text" name="roleName" placeholder="" class="layui-input">
|
<div class="layui-input-inline">
|
||||||
|
<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>
|
||||||
<label class="layui-form-label">角色标识</label>
|
</form>
|
||||||
<div class="layui-input-inline">
|
</div>
|
||||||
<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>
|
<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>
|
||||||
</div>
|
{% endblock %}
|
||||||
|
|
||||||
{% include 'admin/common/footer.html' %}
|
{% 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 type="module">
|
||||||
|
import { ROLE_API, parserTableData as parseData } from '/static/api/http.js'
|
||||||
|
|
||||||
<script type="text/html" id="toolbar">
|
layui.use(['table', 'form', 'jquery', 'popup', 'common'], function () {
|
||||||
<button class="pear-btn pear-btn-primary pear-btn-md" lay-event="toolbar-add">
|
let table = layui.table
|
||||||
<i class="layui-icon layui-icon-add-1"></i>
|
let form = layui.form
|
||||||
新增
|
let $ = layui.jquery
|
||||||
</button>
|
let popup = layui.popup
|
||||||
<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 type="module">
|
const get_columns = () => [
|
||||||
import { ROLE_API, parserTableData as parseData } from '/static/api/http.js'
|
[
|
||||||
|
{ type: 'checkbox' },
|
||||||
layui.use(['table', 'form', 'jquery', 'popup', 'common'], function () {
|
{ title: '角色名', field: 'roleName', align: 'center', width: 100 },
|
||||||
let table = layui.table
|
{ title: 'Key值', field: 'roleCode', align: 'center' },
|
||||||
let form = layui.form
|
{ title: '描述', field: 'details', align: 'center' },
|
||||||
let $ = layui.jquery
|
{ title: '是否可用', field: 'enable', align: 'center', templet: '#tool-switch' },
|
||||||
let popup = layui.popup
|
{ title: '排序', field: 'sort', align: 'center' },
|
||||||
|
{ title: '操作', toolbar: '#tool', align: 'center', width: 195 },
|
||||||
const get_columns = () => [
|
],
|
||||||
[
|
]
|
||||||
{ type: 'checkbox' },
|
|
||||||
{ title: '角色名', field: 'roleName', align: 'center', width: 100 },
|
|
||||||
{ title: 'Key值', field: 'roleCode', align: 'center' },
|
|
||||||
{ title: '描述', field: 'details', align: 'center' },
|
|
||||||
{ title: '是否可用', field: 'enable', align: 'center', templet: '#tool-switch' },
|
|
||||||
{ title: '排序', field: 'sort', align: 'center' },
|
|
||||||
{ title: '操作', toolbar: '#tool', align: 'center', width: 195 },
|
|
||||||
],
|
|
||||||
]
|
|
||||||
|
|
||||||
table.render({
|
|
||||||
parseData,
|
|
||||||
elem: '#tables',
|
|
||||||
url: ROLE_API.ROLES(),
|
|
||||||
page: true,
|
|
||||||
cols: get_columns(),
|
|
||||||
skin: 'line',
|
|
||||||
toolbar: '#toolbar',
|
|
||||||
defaultToolbar: [
|
|
||||||
{
|
|
||||||
layEvent: 'refresh',
|
|
||||||
icon: 'layui-icon-refresh',
|
|
||||||
}, 'filter', 'print', 'exports'],
|
|
||||||
})
|
|
||||||
|
|
||||||
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)
|
|
||||||
} else if (obj.event === 'tool-power') {
|
|
||||||
window.tool_power(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('submit(role-query)', function (data) {
|
|
||||||
table.reload('tables', { where: 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: ROLE_API.ROLE_STATUS(this.value),
|
|
||||||
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 () {
|
|
||||||
layer.open({
|
|
||||||
type: 2,
|
|
||||||
title: '新增',
|
|
||||||
shade: 0.1,
|
|
||||||
area: ['500px', '500px'],
|
|
||||||
content: '/admin/role/add',
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
window.tool_power = function (obj) {
|
|
||||||
layer.open({
|
|
||||||
type: 2,
|
|
||||||
title: '授权',
|
|
||||||
shade: 0.1,
|
|
||||||
area: ['320px', '400px'],
|
|
||||||
content: '/admin/role/power/' + obj.data['id'],
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
window.tool_edit = function (obj) {
|
|
||||||
layer.open({
|
|
||||||
type: 2,
|
|
||||||
title: '修改',
|
|
||||||
shade: 0.1,
|
|
||||||
area: ['500px', '500px'],
|
|
||||||
content: '/admin/role/edit/' + obj.data['id'],
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
window.tool_remove = function (obj) {
|
|
||||||
layer.confirm('确定要删除该角色', { icon: 3, title: '提示' }, function (index) {
|
|
||||||
layer.close(index)
|
|
||||||
let loading = layer.load()
|
|
||||||
$.ajax({
|
|
||||||
url: ROLE_API.ROLE_POWER(obj.data['id']),
|
|
||||||
dataType: 'json',
|
|
||||||
type: 'delete',
|
|
||||||
success: function (result) {
|
|
||||||
layer.close(loading)
|
|
||||||
if (result.success) {
|
|
||||||
layer.msg(result.message, { icon: 1, time: 1000 }, function () {
|
|
||||||
obj.del()
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
layer.msg(result.message, { icon: 2, time: 1000 })
|
|
||||||
}
|
|
||||||
},
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
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,
|
||||||
|
elem: '#tables',
|
||||||
url: ROLE_API.ROLES(),
|
url: ROLE_API.ROLES(),
|
||||||
data: { ids: ids },
|
page: true,
|
||||||
dataType: 'json',
|
cols: get_columns(),
|
||||||
type: 'delete',
|
skin: 'line',
|
||||||
success: function (result) {
|
toolbar: '#toolbar',
|
||||||
layer.close(loading)
|
defaultToolbar: [
|
||||||
if (result.success) {
|
{
|
||||||
popup.success(result.message, function () {
|
layEvent: 'refresh',
|
||||||
table.reload('tables')
|
icon: 'layui-icon-refresh',
|
||||||
})
|
}, 'filter', 'print', 'exports'],
|
||||||
} else {
|
|
||||||
popup.failure(result.message)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
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)
|
||||||
|
} else if (obj.event === 'tool-power') {
|
||||||
|
window.tool_power(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('submit(role-query)', function (data) {
|
||||||
|
table.reload('tables', { where: 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: ROLE_API.ROLE_STATUS(this.value),
|
||||||
|
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 () {
|
||||||
|
layer.open({
|
||||||
|
type: 2,
|
||||||
|
title: '新增',
|
||||||
|
shade: 0.1,
|
||||||
|
area: ['500px', '500px'],
|
||||||
|
content: '/admin/role/add',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
window.tool_power = function (obj) {
|
||||||
|
layer.open({
|
||||||
|
type: 2,
|
||||||
|
title: '授权',
|
||||||
|
shade: 0.1,
|
||||||
|
area: ['320px', '400px'],
|
||||||
|
content: '/admin/role/power/' + obj.data['id'],
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
window.tool_edit = function (obj) {
|
||||||
|
layer.open({
|
||||||
|
type: 2,
|
||||||
|
title: '修改',
|
||||||
|
shade: 0.1,
|
||||||
|
area: ['500px', '500px'],
|
||||||
|
content: '/admin/role/edit/' + obj.data['id'],
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
window.tool_remove = function (obj) {
|
||||||
|
layer.confirm('确定要删除该角色', { icon: 3, title: '提示' }, function (index) {
|
||||||
|
layer.close(index)
|
||||||
|
let loading = layer.load()
|
||||||
|
$.ajax({
|
||||||
|
url: ROLE_API.ROLE_POWER(obj.data['id']),
|
||||||
|
dataType: 'json',
|
||||||
|
type: 'delete',
|
||||||
|
success: function (result) {
|
||||||
|
layer.close(loading)
|
||||||
|
if (result.success) {
|
||||||
|
layer.msg(result.message, { icon: 1, time: 1000 }, function () {
|
||||||
|
obj.del()
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
layer.msg(result.message, { icon: 2, time: 1000 })
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
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: ROLE_API.ROLES(),
|
||||||
|
data: { ids: ids },
|
||||||
|
dataType: 'json',
|
||||||
|
type: 'delete',
|
||||||
|
success: function (result) {
|
||||||
|
layer.close(loading)
|
||||||
|
if (result.success) {
|
||||||
|
popup.success(result.message, function () {
|
||||||
|
table.reload('tables')
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
popup.failure(result.message)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
window.refresh = function () {
|
||||||
|
table.reload('tables')
|
||||||
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
}
|
</script>
|
||||||
|
{% endblock %}
|
||||||
window.refresh = function () {
|
|
||||||
table.reload('tables')
|
|
||||||
}
|
|
||||||
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,93 +1,93 @@
|
|||||||
<!DOCTYPE html>
|
{% extends 'admin/base.html' %}
|
||||||
<html>
|
{% block title %}
|
||||||
<head>
|
|
||||||
<title>角色新增</title>
|
<title>角色新增</title>
|
||||||
{% include 'admin/common/header.html' %}</head>
|
{% endblock %}
|
||||||
<body>
|
|
||||||
<form class="layui-form" action="">
|
{% block body %}
|
||||||
<div class="mainBox">
|
<form class="layui-form" action="">
|
||||||
<div class="main-container">
|
<div class="mainBox">
|
||||||
<div class="layui-form-item">
|
<div class="main-container">
|
||||||
<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="roleName" lay-verify="title" autocomplete="off" placeholder="请输入名称"
|
<div class="layui-input-block">
|
||||||
class="layui-input">
|
<input type="text" name="roleName" lay-verify="title" autocomplete="off" placeholder="请输入名称"
|
||||||
|
class="layui-input">
|
||||||
|
</div>
|
||||||
</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">
|
<input type="text" name="roleCode" lay-verify="title" autocomplete="off" placeholder="请输入标识"
|
||||||
<input type="text" name="roleCode" lay-verify="title" autocomplete="off" placeholder="请输入标识"
|
class="layui-input">
|
||||||
class="layui-input">
|
</div>
|
||||||
</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">
|
<input type="radio" name="enable" value="0" title="开启">
|
||||||
<input type="radio" name="enable" value="0" title="开启">
|
<input type="radio" name="enable" value="1" title="关闭" checked>
|
||||||
<input type="radio" name="enable" value="1" title="关闭" checked>
|
</div>
|
||||||
</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">
|
<input type="text" name="sort" lay-verify="title" autocomplete="off" placeholder="请输入排序序号(数字)"
|
||||||
<input type="text" name="sort" lay-verify="title" autocomplete="off" placeholder="请输入排序序号(数字)"
|
class="layui-input">
|
||||||
class="layui-input">
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="layui-form-item layui-form-text">
|
||||||
<div class="layui-form-item layui-form-text">
|
<label class="layui-form-label">描述</label>
|
||||||
<label class="layui-form-label">描述</label>
|
<div class="layui-input-block">
|
||||||
<div class="layui-input-block">
|
<textarea placeholder="请输入描述" name="details" class="layui-textarea"></textarea>
|
||||||
<textarea placeholder="请输入描述" name="details" class="layui-textarea"></textarea>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="bottom">
|
||||||
<div class="bottom">
|
<div class="button-container">
|
||||||
<div class="button-container">
|
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit=""
|
||||||
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit="" lay-filter="role-save">
|
lay-filter="role-save">
|
||||||
<i class="layui-icon layui-icon-ok"></i>
|
<i class="layui-icon layui-icon-ok"></i>
|
||||||
提交
|
提交
|
||||||
</button>
|
</button>
|
||||||
<button type="reset" class="pear-btn pear-btn-sm">
|
<button type="reset" class="pear-btn pear-btn-sm">
|
||||||
<i class="layui-icon layui-icon-refresh"></i>
|
<i class="layui-icon layui-icon-refresh"></i>
|
||||||
重置
|
重置
|
||||||
</button>
|
</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</form>
|
||||||
</form>
|
{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
{% include 'admin/common/footer.html' %}
|
{% block models_script %}
|
||||||
|
<script type="module">
|
||||||
|
import { ROLE_API } from '/static/api/http.js'
|
||||||
|
|
||||||
<script type="module">
|
layui.use(['form', 'jquery'], function () {
|
||||||
import { ROLE_API } from '/static/api/http.js'
|
let form = layui.form
|
||||||
|
let $ = layui.jquery
|
||||||
|
|
||||||
layui.use(['form', 'jquery'], function () {
|
form.on('submit(role-save)', function (data) {
|
||||||
let form = layui.form
|
$.ajax({
|
||||||
let $ = layui.jquery
|
url: ROLE_API.ROLE(0),
|
||||||
|
data: JSON.stringify(data.field),
|
||||||
form.on('submit(role-save)', function (data) {
|
dataType: 'json',
|
||||||
$.ajax({
|
contentType: 'application/json',
|
||||||
url: ROLE_API.ROLE(0),
|
type: 'post',
|
||||||
data: JSON.stringify(data.field),
|
success: function (result) {
|
||||||
dataType: 'json',
|
if (result.success) {
|
||||||
contentType: 'application/json',
|
layer.msg(result.message, { icon: 1, time: 1000 }, function () {
|
||||||
type: 'post',
|
parent.layer.close(parent.layer.getFrameIndex(window.name))//关闭当前页
|
||||||
success: function (result) {
|
parent.layui.table.reload('tables')
|
||||||
if (result.success) {
|
})
|
||||||
layer.msg(result.message, { icon: 1, time: 1000 }, function () {
|
} else {
|
||||||
parent.layer.close(parent.layer.getFrameIndex(window.name))//关闭当前页
|
layer.msg(result.message, { icon: 2, time: 1000 })
|
||||||
parent.layui.table.reload('tables')
|
}
|
||||||
})
|
},
|
||||||
} else {
|
})
|
||||||
layer.msg(result.message, { icon: 2, time: 1000 })
|
return false
|
||||||
}
|
})
|
||||||
},
|
|
||||||
})
|
})
|
||||||
return false
|
</script>
|
||||||
})
|
{% endblock %}
|
||||||
})
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,108 +1,107 @@
|
|||||||
<!DOCTYPE html>
|
{% extends 'admin/base.html' %}
|
||||||
<html>
|
{% block title %}
|
||||||
<head>
|
|
||||||
<title>角色编辑</title>
|
<title>角色编辑</title>
|
||||||
{% include 'admin/common/header.html' %}</head>
|
{% endblock %}
|
||||||
<body>
|
|
||||||
<form class="layui-form" action="">
|
{% block body %}
|
||||||
<div class="mainBox">
|
<form class="layui-form" action="">
|
||||||
<div class="main-container">
|
<div class="mainBox">
|
||||||
<div class="main-container">
|
<div class="main-container">
|
||||||
<div class="layui-form-item layui-hide">
|
<div class="main-container">
|
||||||
<label class="layui-form-label">编号</label>
|
<div class="layui-form-item layui-hide">
|
||||||
<div class="layui-input-block">
|
<label class="layui-form-label">编号</label>
|
||||||
<input type="text" value="{{ role.id }}" name="roleId" lay-verify="title"
|
<div class="layui-input-block">
|
||||||
autocomplete="off" placeholder="请输入编号" class="layui-input">
|
<input type="text" value="{{ role.id }}" name="roleId" lay-verify="title"
|
||||||
|
autocomplete="off" placeholder="请输入编号" class="layui-input">
|
||||||
|
</div>
|
||||||
</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">
|
<input type="text" value="{{ role.name }}" name="roleName" lay-verify="title"
|
||||||
<input type="text" value="{{ role.name }}" name="roleName" lay-verify="title"
|
autocomplete="off" placeholder="请输入名称" class="layui-input">
|
||||||
autocomplete="off" placeholder="请输入名称" class="layui-input">
|
</div>
|
||||||
</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">
|
<input type="text" value="{{ role.code }}" readonly name="roleCode" lay-verify="title"
|
||||||
<input type="text" value="{{ role.code }}" readonly name="roleCode" lay-verify="title"
|
autocomplete="off" placeholder="请输入标识" class="layui-input">
|
||||||
autocomplete="off" placeholder="请输入标识" class="layui-input">
|
</div>
|
||||||
</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">
|
<input type="radio" name="enable" {% if role.enable == 1 %}checked {% endif %}value="1"
|
||||||
<input type="radio" name="enable" {% if role.enable == 1 %}checked {% endif %}value="1"
|
title="开启">
|
||||||
title="开启">
|
<input type="radio" name="enable" {% if role.enable == 0 %}checked {% endif %} value="0"
|
||||||
<input type="radio" name="enable" {% if role.enable == 0 %}checked {% endif %} value="0"
|
title="关闭">
|
||||||
title="关闭">
|
</div>
|
||||||
</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">
|
<input type="text" name="sort" value="{{ role.sort }}" lay-verify="title" autocomplete="off"
|
||||||
<input type="text" name="sort" value="{{ role.sort }}" lay-verify="title" autocomplete="off"
|
placeholder="请输入排序序号(数字)"
|
||||||
placeholder="请输入排序序号(数字)"
|
class="layui-input">
|
||||||
class="layui-input">
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="layui-form-item layui-form-text">
|
||||||
<div class="layui-form-item layui-form-text">
|
<label class="layui-form-label">描述</label>
|
||||||
<label class="layui-form-label">描述</label>
|
<div class="layui-input-block">
|
||||||
<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>
|
<div class="bottom">
|
||||||
<div class="bottom">
|
<div class="button-container">
|
||||||
<div class="button-container">
|
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit=""
|
||||||
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit=""
|
lay-filter="role-update">
|
||||||
lay-filter="role-update">
|
<i class="layui-icon layui-icon-ok"></i>
|
||||||
<i class="layui-icon layui-icon-ok"></i>
|
提交
|
||||||
提交
|
</button>
|
||||||
</button>
|
<button type="reset" class="pear-btn pear-btn-sm">
|
||||||
<button type="reset" class="pear-btn pear-btn-sm">
|
<i class="layui-icon layui-icon-refresh"></i>
|
||||||
<i class="layui-icon layui-icon-refresh"></i>
|
重置
|
||||||
重置
|
</button>
|
||||||
</button>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</form>
|
||||||
</form>
|
{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
{% include 'admin/common/footer.html' %}
|
{% block models_script %}
|
||||||
|
<script type="module">
|
||||||
|
|
||||||
<script type="module">
|
import { ROLE_API } from '/static/api/http.js'
|
||||||
|
|
||||||
import { ROLE_API } from '/static/api/http.js'
|
layui.use(['form', 'jquery'], function () {
|
||||||
|
let form = layui.form
|
||||||
|
let $ = layui.jquery
|
||||||
|
|
||||||
layui.use(['form', 'jquery'], function () {
|
form.on('submit(role-update)', function (data) {
|
||||||
let form = layui.form
|
$.ajax({
|
||||||
let $ = layui.jquery
|
url: ROLE_API.ROLE(data.field.roleId),
|
||||||
|
data: JSON.stringify(data.field),
|
||||||
form.on('submit(role-update)', function (data) {
|
dataType: 'json',
|
||||||
$.ajax({
|
contentType: 'application/json',
|
||||||
url: ROLE_API.ROLE(data.field.roleId),
|
type: 'put',
|
||||||
data: JSON.stringify(data.field),
|
success: function (result) {
|
||||||
dataType: 'json',
|
if (result.success) {
|
||||||
contentType: 'application/json',
|
layer.msg(result.message, { icon: 1, time: 1000 }, function () {
|
||||||
type: 'put',
|
parent.layer.close(parent.layer.getFrameIndex(window.name))//关闭当前页
|
||||||
success: function (result) {
|
parent.layui.table.reload('role-table')
|
||||||
if (result.success) {
|
})
|
||||||
layer.msg(result.message, { icon: 1, time: 1000 }, function () {
|
} else {
|
||||||
parent.layer.close(parent.layer.getFrameIndex(window.name))//关闭当前页
|
layer.msg(result.message, { icon: 2, time: 1000 })
|
||||||
parent.layui.table.reload('role-table')
|
}
|
||||||
})
|
},
|
||||||
} else {
|
})
|
||||||
layer.msg(result.message, { icon: 2, time: 1000 })
|
return false
|
||||||
}
|
})
|
||||||
}
|
|
||||||
})
|
})
|
||||||
return false
|
</script>
|
||||||
})
|
{% endblock %}
|
||||||
})
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,85 +1,85 @@
|
|||||||
<!DOCTYPE html>
|
{% extends 'admin/base.html' %}
|
||||||
<html>
|
{% block title %}
|
||||||
<head>
|
|
||||||
<title>角色授权</title>
|
<title>角色授权</title>
|
||||||
{% include 'admin/common/header.html' %}</head>
|
{% endblock %}
|
||||||
<body>
|
|
||||||
<form class="layui-form" action="">
|
{% block body %}
|
||||||
<div class="mainBox">
|
<form class="layui-form" action="">
|
||||||
<div class="main-container">
|
<div class="mainBox">
|
||||||
<div class="main-container">
|
<div class="main-container">
|
||||||
<ul id="role-power" class="dtree" data-id="0"></ul>
|
<div class="main-container">
|
||||||
|
<ul id="role-power" class="dtree" data-id="0"></ul>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="bottom">
|
||||||
<div class="bottom">
|
<div class="button-container">
|
||||||
<div class="button-container">
|
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit=""
|
||||||
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit="" lay-filter="power-save">
|
lay-filter="power-save">
|
||||||
<i class="layui-icon layui-icon-ok"></i>
|
<i class="layui-icon layui-icon-ok"></i>
|
||||||
提交
|
提交
|
||||||
</button>
|
</button>
|
||||||
<button type="reset" class="pear-btn pear-btn-sm">
|
<button type="reset" class="pear-btn pear-btn-sm">
|
||||||
<i class="layui-icon layui-icon-refresh"></i>
|
<i class="layui-icon layui-icon-refresh"></i>
|
||||||
重置
|
重置
|
||||||
</button>
|
</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</form>
|
||||||
</form>
|
{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
{% include 'admin/common/footer.html' %}
|
{% block models_script %}
|
||||||
|
<script type="module">
|
||||||
|
|
||||||
<script type="module">
|
import { ROLE_API } from '/static/api/http.js'
|
||||||
|
|
||||||
import { ROLE_API } from '/static/api/http.js'
|
layui.use(['dtree', 'form', 'jquery'], function () {
|
||||||
|
let dtree = layui.dtree
|
||||||
|
let form = layui.form
|
||||||
|
let $ = layui.jquery
|
||||||
|
|
||||||
layui.use(['dtree', 'form', 'jquery'], function () {
|
dtree.render({
|
||||||
let dtree = layui.dtree
|
elem: '#role-power',
|
||||||
let form = layui.form
|
method: 'get',
|
||||||
let $ = layui.jquery
|
url: ROLE_API.ROLE_POWER({{role_id}}),
|
||||||
|
dataFormat: 'list',
|
||||||
|
checkbar: true,
|
||||||
|
skin: 'layui',
|
||||||
|
initLevel: '1',
|
||||||
|
checkbarType: 'self',
|
||||||
|
response: { treeId: 'powerId', parentId: 'parentId', title: 'powerName' },
|
||||||
|
})
|
||||||
|
|
||||||
dtree.render({
|
form.on('submit(power-save)', function (data) {
|
||||||
elem: '#role-power',
|
let param = dtree.getCheckbarNodesParam('role-power')
|
||||||
method: 'get',
|
let ids = ''
|
||||||
url: ROLE_API.ROLE_POWER({{role_id}}),
|
for (let i = 0; i < param.length; i++) {
|
||||||
dataFormat: 'list',
|
let id = param[i].nodeId
|
||||||
checkbar: true,
|
ids += id + ','
|
||||||
skin: 'layui',
|
|
||||||
initLevel: '1',
|
|
||||||
checkbarType: 'self',
|
|
||||||
response: { treeId: 'powerId', parentId: 'parentId', title: 'powerName' },
|
|
||||||
})
|
|
||||||
|
|
||||||
form.on('submit(power-save)', function (data) {
|
|
||||||
let param = dtree.getCheckbarNodesParam('role-power')
|
|
||||||
let ids = ''
|
|
||||||
for (let i = 0; i < param.length; i++) {
|
|
||||||
let id = param[i].nodeId
|
|
||||||
ids += id + ','
|
|
||||||
}
|
|
||||||
ids = ids.substr(0, ids.length - 1)
|
|
||||||
data.field.roleId = {{role_id}};
|
|
||||||
data.field.powerIds = ids
|
|
||||||
|
|
||||||
$.ajax({
|
|
||||||
url: ROLE_API.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}};
|
||||||
return false
|
data.field.powerIds = ids
|
||||||
})
|
|
||||||
|
|
||||||
})
|
$.ajax({
|
||||||
</script>
|
url: ROLE_API.ROLE_POWER(data.field.roleId),
|
||||||
</body>
|
data: data.field,
|
||||||
</html>
|
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 })
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
|
return false
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
||||||
+262
-258
@@ -1,174 +1,180 @@
|
|||||||
<!DOCTYPE html>
|
{% extends 'admin/base.html' %}
|
||||||
<html>
|
|
||||||
<head>
|
{% block title %}
|
||||||
<title>个人中心</title>
|
<title>个人中心</title>
|
||||||
{% include 'admin/common/header.html' %}
|
|
||||||
<style>
|
<style>
|
||||||
.layui-form-item {
|
.layui-form-item {
|
||||||
margin-top: 17px !important;
|
margin-top: 17px !important;
|
||||||
margin-bottom: 17px !important;
|
margin-bottom: 17px !important;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
{% endblock %}
|
||||||
<body class="pear-container">
|
|
||||||
<div class="layui-row layui-col-space10">
|
|
||||||
{# 左侧栏 #}
|
{% block body %}
|
||||||
<div class="layui-col-md3">
|
<div class="layui-row layui-col-space10">
|
||||||
{# 个人信息卡片 #}
|
{# 左侧栏 #}
|
||||||
<div class="layui-card">
|
<div class="layui-col-md3">
|
||||||
<div class="layui-card-body" style="padding: 25px;">
|
{# 个人信息卡片 #}
|
||||||
<div class="text-center layui-text">
|
<div class="layui-card">
|
||||||
<div class="user-info-head" id="userInfoHead">
|
<div class="layui-card-body" style="padding: 25px;">
|
||||||
<img id="avatar" src="{{ user_info.avatar }}" width="115px" height="115px" alt="">
|
<div class="text-center layui-text">
|
||||||
|
<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>
|
||||||
<h2 style="padding-top: 20px;font-size: 20px;">{{ user_info.realname }}</h2>
|
</div>
|
||||||
<p style="padding-top: 8px;margin-top: 10px;font-size: 13.5px;">China , 中国</p>
|
<div style="height: 45px;border-top: 1px whitesmoke solid;text-align: center;line-height: 45px;font-size: 13.5px;">
|
||||||
|
<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;">
|
{# 登录信息卡片 #}
|
||||||
<span>{{ user_info.remark }}</span>
|
<div class="layui-card">
|
||||||
|
<div class="layui-card-header">
|
||||||
|
登录记录
|
||||||
|
</div>
|
||||||
|
<div class="layui-card-body">
|
||||||
|
<ul class="list">
|
||||||
|
{% for log in user_logs %}
|
||||||
|
<li class="list-item">
|
||||||
|
<span class="title">{{ log.url }}</span>
|
||||||
|
<span class="footer">{{ log.create_time }}</span>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{# 登录信息卡片 #}
|
{# 右侧栏 #}
|
||||||
<div class="layui-card">
|
<div class="layui-col-md9">
|
||||||
<div class="layui-card-header">
|
{# 个人信息卡片 #}
|
||||||
登录记录
|
<div class="layui-card">
|
||||||
</div>
|
<div class="layui-card-header">个人信息</div>
|
||||||
<div class="layui-card-body">
|
<div class="layui-card-body">
|
||||||
<ul class="list">
|
<div class="layui-tab layui-tab-brief">
|
||||||
{% for log in user_logs %}
|
<div class="layui-tab-content">
|
||||||
<li class="list-item">
|
<div class="layui-tab-item layui-show">
|
||||||
<span class="title">{{ log.url }}</span>
|
<form class="layui-form">
|
||||||
<span class="footer">{{ log.create_time }}</span>
|
<div class="layui-form-item" style="display: none">
|
||||||
</li>
|
<label class="layui-form-label">用户id</label>
|
||||||
{% endfor %}
|
<div class="layui-input-block">
|
||||||
</ul>
|
<input value="{{ user_info.id }}" type="text" readonly name="user_id"
|
||||||
</div>
|
id="user_id"
|
||||||
</div>
|
lay-verify="title"
|
||||||
</div>
|
autocomplete="off" placeholder="请输入标题" class="layui-input">
|
||||||
{# 右侧栏 #}
|
</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>
|
<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 value="{{ user_info.username }}" type="text" readonly name="username"
|
||||||
<input value="{{ user_info.username }}" type="text" readonly name="username"
|
lay-verify="title"
|
||||||
lay-verify="title"
|
autocomplete="off" placeholder="请输入标题" class="layui-input">
|
||||||
autocomplete="off" placeholder="请输入标题" class="layui-input">
|
</div>
|
||||||
</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">
|
<input value="{{ user_info.realname }}" type="text" name="realName"
|
||||||
<input value="{{ user_info.realname }}" type="text" name="realName"
|
lay-verify="title"
|
||||||
lay-verify="title"
|
autocomplete="off" placeholder="请输入标题" class="layui-input">
|
||||||
autocomplete="off" placeholder="请输入标题" class="layui-input">
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="layui-form-item layui-form-text">
|
<div class="layui-form-item layui-form-text">
|
||||||
<label class="layui-form-label">描述</label>
|
<label class="layui-form-label">描述</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<textarea placeholder="请输入描述" name="details"
|
<textarea placeholder="请输入描述" name="details"
|
||||||
class="layui-textarea">{{ user_info.remark }}</textarea>
|
class="layui-textarea">{{ user_info.remark }}</textarea>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="layui-form-item">
|
||||||
<div class="layui-form-item">
|
<div class="layui-input-block">
|
||||||
<div class="layui-input-block">
|
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-submit
|
||||||
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-submit
|
lay-filter="user-update">修改资料
|
||||||
lay-filter="user-update">修改资料
|
</button>
|
||||||
</button>
|
<button class="pear-btn pear-btn-sm edit-password">更改密码</button>
|
||||||
<button class="pear-btn pear-btn-sm edit-password">更改密码</button>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</form>
|
||||||
</form>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
{# 个人文章记录 #}
|
||||||
{# 个人文章记录 #}
|
<div class="layui-card">
|
||||||
<div class="layui-card">
|
<div class="layui-card-header">
|
||||||
<div class="layui-card-header">
|
我的文章
|
||||||
我的文章
|
</div>
|
||||||
</div>
|
<div class="layui-card-body">
|
||||||
<div class="layui-card-body">
|
<div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
|
||||||
<div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
|
<div class="layui-tab-content">
|
||||||
<div class="layui-tab-content">
|
<div class="layui-tab-item layui-show">
|
||||||
<div class="layui-tab-item layui-show">
|
<div class="layui-row layui-col-space10" style="margin: 15px;">
|
||||||
<div class="layui-row layui-col-space10" style="margin: 15px;">
|
<div class="layui-col-md1">
|
||||||
<div class="layui-col-md1">
|
<img src="{{ url_for('static', filename='admin/admin/images/act.jpg') }}"
|
||||||
<img src="{{ url_for('static', filename='admin/admin/images/act.jpg') }}"
|
style="width: 100%;height: 100%;border-radius: 5px;"/>
|
||||||
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="comment">2020-06-12 评论 5 点赞 12 转发
|
<div class="layui-col-md11" style="height: 80px;">
|
||||||
4
|
<div class="title">为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习?</div>
|
||||||
|
<div class="content">
|
||||||
|
“Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~
|
||||||
|
</div>
|
||||||
|
<div class="comment">2020-06-12 评论 5 点赞 12
|
||||||
|
转发
|
||||||
|
4
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="layui-row layui-col-space10" style="margin: 15px;">
|
||||||
<div class="layui-row layui-col-space10" style="margin: 15px;">
|
<div class="layui-col-md1">
|
||||||
<div class="layui-col-md1">
|
<img src="{{ url_for('static', filename='admin/admin/images/act.jpg') }}"
|
||||||
<img src="{{ url_for('static', filename='admin/admin/images/act.jpg') }}"
|
style="width: 100%;height: 100%;border-radius: 5px;"/>
|
||||||
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="comment">2020-06-12 评论 5 点赞 12 转发
|
<div class="layui-col-md11" style="height: 80px;">
|
||||||
4
|
<div class="title">为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习?</div>
|
||||||
|
<div class="content">
|
||||||
|
“Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~
|
||||||
|
</div>
|
||||||
|
<div class="comment">2020-06-12 评论 5 点赞 12
|
||||||
|
转发
|
||||||
|
4
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="layui-row layui-col-space10" style="margin: 15px;">
|
||||||
<div class="layui-row layui-col-space10" style="margin: 15px;">
|
<div class="layui-col-md1">
|
||||||
<div class="layui-col-md1">
|
<img src="{{ url_for('static', filename='admin/admin/images/act.jpg') }}"
|
||||||
<img src="{{ url_for('static', filename='admin/admin/images/act.jpg') }}"
|
style="width: 100%;height: 100%;border-radius: 5px;"/>
|
||||||
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="comment">2020-06-12 评论 5 点赞 12 转发
|
<div class="layui-col-md11" style="height: 80px;">
|
||||||
4
|
<div class="title">为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习?</div>
|
||||||
|
<div class="content">
|
||||||
|
“Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~
|
||||||
|
</div>
|
||||||
|
<div class="comment">2020-06-12 评论 5 点赞 12
|
||||||
|
转发
|
||||||
|
4
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="layui-row layui-col-space10" style="margin: 15px;">
|
||||||
<div class="layui-row layui-col-space10" style="margin: 15px;">
|
<div class="layui-col-md1">
|
||||||
<div class="layui-col-md1">
|
<img src="{{ url_for('static', filename='admin/admin/images/act.jpg') }}"
|
||||||
<img src="{{ url_for('static', filename='admin/admin/images/act.jpg') }}"
|
style="width: 100%;height: 100%;border-radius: 5px;"/>
|
||||||
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="comment">2020-06-12 评论 5 点赞 12 转发
|
<div class="layui-col-md11" style="height: 80px;">
|
||||||
4
|
<div class="title">为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习?</div>
|
||||||
|
<div class="content">
|
||||||
|
“Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~
|
||||||
|
</div>
|
||||||
|
<div class="comment">2020-06-12 评论 5 点赞 12
|
||||||
|
转发
|
||||||
|
4
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -178,140 +184,138 @@
|
|||||||
</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="main-container">
|
||||||
<div class="layui-form-item" style="display: none">
|
<div class="main-container">
|
||||||
<label class="layui-form-label">用户id</label>
|
<div class="layui-form-item" style="display: none">
|
||||||
<div class="layui-input-block">
|
<label class="layui-form-label">用户id</label>
|
||||||
<input value="{{ user_info.id }}" type="text" readonly name="user_id"
|
<div class="layui-input-block">
|
||||||
id="user_id"
|
<input value="{{ user_info.id }}" type="text" readonly name="user_id"
|
||||||
lay-verify="title"
|
id="user_id"
|
||||||
autocomplete="off" placeholder="请输入标题" class="layui-input">
|
lay-verify="title"
|
||||||
|
autocomplete="off" placeholder="请输入标题" class="layui-input">
|
||||||
|
</div>
|
||||||
</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">
|
<input type="password" name="oldPassword" lay-verify="title" autocomplete="off"
|
||||||
<input type="password" name="oldPassword" lay-verify="title" autocomplete="off"
|
placeholder="请输入标题" class="layui-input">
|
||||||
placeholder="请输入标题" class="layui-input">
|
</div>
|
||||||
</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">
|
<input type="password" name="newPassword" lay-verify="title" autocomplete="off"
|
||||||
<input type="password" name="newPassword" lay-verify="title" autocomplete="off"
|
placeholder="请输入标题" class="layui-input">
|
||||||
placeholder="请输入标题" class="layui-input">
|
</div>
|
||||||
</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">
|
<input type="password" name="confirmPassword" lay-verify="title" autocomplete="off"
|
||||||
<input type="password" name="confirmPassword" lay-verify="title" autocomplete="off"
|
placeholder="请输入标题" class="layui-input">
|
||||||
placeholder="请输入标题" class="layui-input">
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="bottom">
|
||||||
<div class="bottom">
|
<div class="button-container">
|
||||||
<div class="button-container">
|
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit=""
|
||||||
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit=""
|
lay-filter="edit-password">
|
||||||
lay-filter="edit-password">
|
<i class="layui-icon layui-icon-ok"></i>
|
||||||
<i class="layui-icon layui-icon-ok"></i>
|
提交
|
||||||
提交
|
</button>
|
||||||
</button>
|
<button type="reset" class="pear-btn pear-btn-sm">
|
||||||
<button type="reset" class="pear-btn pear-btn-sm">
|
<i class="layui-icon layui-icon-refresh"></i>
|
||||||
<i class="layui-icon layui-icon-refresh"></i>
|
重置
|
||||||
重置
|
</button>
|
||||||
</button>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</form>
|
||||||
</form>
|
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
{% include 'admin/common/footer.html' %}
|
{% block models_script %}
|
||||||
|
<script type="module">
|
||||||
|
import { USER_API } from '/static/api/http.js'
|
||||||
|
|
||||||
<script type="module">
|
layui.use(['element', 'jquery', 'layer', 'form', 'popup'], function () {
|
||||||
import { USER_API } from '/static/api/http.js'
|
let $ = layui.jquery
|
||||||
|
let layer = layui.layer
|
||||||
|
let form = layui.form
|
||||||
|
let popup = layui.popup
|
||||||
|
|
||||||
layui.use(['element', 'jquery', 'layer', 'form', 'popup'], function () {
|
// 修改密码页面
|
||||||
let $ = layui.jquery
|
$('.edit-password').click(function () {
|
||||||
let layer = layui.layer
|
layer.open({
|
||||||
let form = layui.form
|
type: 1,
|
||||||
let popup = layui.popup
|
title: '修改密码',
|
||||||
|
shade: 0.1,
|
||||||
|
area: ['550px', '280px'],
|
||||||
|
content: $('#edit_password_view'),
|
||||||
|
})
|
||||||
|
return false
|
||||||
|
})
|
||||||
|
|
||||||
// 修改密码页面
|
// 修改头像
|
||||||
$('.edit-password').click(function () {
|
$('#avatar').click(function () {
|
||||||
layer.open({
|
layer.open({
|
||||||
type: 1,
|
type: 2,
|
||||||
title: '修改密码',
|
title: '更换图片',
|
||||||
shade: 0.1,
|
shade: 0.1,
|
||||||
area: ['550px', '280px'],
|
area: ['900px', '500px'],
|
||||||
content: $('#edit_password_view')
|
content: '/users/avatar',
|
||||||
|
btn: ['确定', '取消'],
|
||||||
|
yes: function (index, layero) {
|
||||||
|
window['layui-layer-iframe' + index].submitForm()
|
||||||
|
},
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
// 表单提交更改个人信息数据
|
||||||
|
form.on('submit(user-update)', function (data) {
|
||||||
|
$.ajax({
|
||||||
|
url: USER_API.USER_INFO(data.field.user_id),
|
||||||
|
data: JSON.stringify(data.field),
|
||||||
|
dataType: 'json',
|
||||||
|
contentType: 'application/json',
|
||||||
|
type: 'put',
|
||||||
|
success: function (result) {
|
||||||
|
if (result.success) {
|
||||||
|
layer.msg('修改成功', { icon: 1, time: 1000 })
|
||||||
|
} else {
|
||||||
|
layer.msg('修改失败', { icon: 2, time: 1000 })
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
|
return false
|
||||||
|
})
|
||||||
|
|
||||||
|
// 修改密码提交
|
||||||
|
form.on('submit(edit-password)', function (data) {
|
||||||
|
$.ajax({
|
||||||
|
url: USER_API.USER_PASSWORD(data.field.user_id),
|
||||||
|
data: JSON.stringify(data.field),
|
||||||
|
contentType: 'application/json',
|
||||||
|
dataType: 'json',
|
||||||
|
type: 'put',
|
||||||
|
success: function (result) {
|
||||||
|
if (result.success) {
|
||||||
|
popup.success(result.message, function () {
|
||||||
|
// TODO 关闭修改密码成之后的窗口
|
||||||
|
parent.layer.close(parent.layer.getFrameIndex(window.name))
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
popup.failure(result.message)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
|
return false
|
||||||
|
})
|
||||||
})
|
})
|
||||||
return false
|
</script>
|
||||||
})
|
{% endblock %}
|
||||||
|
|
||||||
// 修改头像
|
|
||||||
$('#avatar').click(function () {
|
|
||||||
layer.open({
|
|
||||||
type: 2,
|
|
||||||
title: '更换图片',
|
|
||||||
shade: 0.1,
|
|
||||||
area: ['900px', '500px'],
|
|
||||||
content: '/users/avatar',
|
|
||||||
btn: ['确定', '取消'],
|
|
||||||
yes: function (index, layero) {
|
|
||||||
window['layui-layer-iframe' + index].submitForm()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
// 表单提交更改个人信息数据
|
|
||||||
form.on('submit(user-update)', function (data) {
|
|
||||||
$.ajax({
|
|
||||||
url: USER_API.USER_INFO(data.field.user_id),
|
|
||||||
data: JSON.stringify(data.field),
|
|
||||||
dataType: 'json',
|
|
||||||
contentType: 'application/json',
|
|
||||||
type: 'put',
|
|
||||||
success: function (result) {
|
|
||||||
if (result.success) {
|
|
||||||
layer.msg('修改成功', { icon: 1, time: 1000 })
|
|
||||||
} else {
|
|
||||||
layer.msg('修改失败', { icon: 2, time: 1000 })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return false
|
|
||||||
})
|
|
||||||
|
|
||||||
// 修改密码提交
|
|
||||||
form.on('submit(edit-password)', function (data) {
|
|
||||||
$.ajax({
|
|
||||||
url: USER_API.USER_PASSWORD(data.field.user_id),
|
|
||||||
data: JSON.stringify(data.field),
|
|
||||||
contentType: 'application/json',
|
|
||||||
dataType: 'json',
|
|
||||||
type: 'put',
|
|
||||||
success: function (result) {
|
|
||||||
if (result.success) {
|
|
||||||
popup.success(result.message, function () {
|
|
||||||
// TODO 关闭修改密码成之后的窗口
|
|
||||||
parent.layer.close(parent.layer.getFrameIndex(window.name))
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
popup.failure(result.message)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return false
|
|
||||||
})
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,131 +1,129 @@
|
|||||||
<!DOCTYPE html>
|
{% extends 'admin/base.html' %}
|
||||||
<html>
|
|
||||||
<head>
|
{% block title %}
|
||||||
<title>头像上传</title>
|
<title>头像上传</title>
|
||||||
{% include 'admin/common/header.html' %}
|
{% endblock %}
|
||||||
</head>
|
|
||||||
<body class="pear-container">
|
{% block body %}
|
||||||
<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-col-xs3" style="padding-left:0px;">
|
<div class="layui-row">
|
||||||
<div id="previewImage"
|
<div class="layui-form-item">
|
||||||
style="width:210px;height:210px;border: 1px solid rgb(200, 200, 200);border-radius: 50%;overflow:hidden;">
|
<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>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
{% endblock %}
|
||||||
<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>
|
|
||||||
|
|
||||||
{% include 'admin/common/footer.html' %}
|
|
||||||
<script type="module">
|
|
||||||
import { USER_API } from '/static/api/http.js'
|
|
||||||
|
|
||||||
layui.use(['jquery', 'layer', 'cropper', 'popup'], function () {
|
{% block models_script %}
|
||||||
let $ = layui.jquery
|
<script type="module">
|
||||||
let layer = layui.layer
|
import { USER_API } from '/static/api/http.js'
|
||||||
let cropper = layui.cropper
|
|
||||||
let popup = layui.popup
|
|
||||||
|
|
||||||
let options = {
|
layui.use(['jquery', 'layer', 'cropper', 'popup'], function () {
|
||||||
aspectRatio: 1 / 1, // 裁剪框比例
|
let $ = layui.jquery
|
||||||
preview: '#previewImage', // 预览div
|
let layer = layui.layer
|
||||||
viewmode: 1
|
let cropper = layui.cropper
|
||||||
}
|
let popup = layui.popup
|
||||||
|
|
||||||
$('#sourceImage').attr('src', parent.layui.$('#avatar').attr('src'))
|
let options = {
|
||||||
$('#sourceImage').cropper(options)
|
aspectRatio: 1 / 1, // 裁剪框比例
|
||||||
|
preview: '#previewImage', // 预览div
|
||||||
|
viewmode: 1,
|
||||||
|
}
|
||||||
|
|
||||||
window.submitForm = function () {
|
$('#sourceImage').attr('src', parent.layui.$('#avatar').attr('src'))
|
||||||
$('#sourceImage').crossOrigin = 'anonymous'//解决跨域图片问题
|
$('#sourceImage').cropper(options)
|
||||||
$('#sourceImage').cropper('getCroppedCanvas', {
|
|
||||||
width: 280,
|
window.submitForm = function () {
|
||||||
height: 140
|
$('#sourceImage').crossOrigin = 'anonymous'//解决跨域图片问题
|
||||||
}).toBlob(function (blob) {
|
$('#sourceImage').cropper('getCroppedCanvas', {
|
||||||
let timeStamp = Date.parse(new Date())
|
width: 280,
|
||||||
let fileName = timeStamp + '.jpg'
|
height: 140,
|
||||||
let formData = new FormData()
|
}).toBlob(function (blob) {
|
||||||
formData.append('file', blob, fileName)
|
let timeStamp = Date.parse(new Date())
|
||||||
formData.append('fileName', fileName)
|
let fileName = timeStamp + '.jpg'
|
||||||
formData.append('fileToken', timeStamp)
|
let formData = new FormData()
|
||||||
$.ajax({
|
formData.append('file', blob, fileName)
|
||||||
method: 'post',
|
formData.append('fileName', fileName)
|
||||||
url: '/api/v1/file/photos', //用于文件上传的服务器端请求地址
|
formData.append('fileToken', timeStamp)
|
||||||
data: formData,
|
$.ajax({
|
||||||
processData: false,
|
method: 'post',
|
||||||
contentType: false,
|
url: '/api/v1/file/photos', //用于文件上传的服务器端请求地址
|
||||||
success: function (result) {
|
data: formData,
|
||||||
if (result.success) {
|
processData: false,
|
||||||
// 修改 avatar 字段
|
contentType: false,
|
||||||
$.ajax({
|
success: function (result) {
|
||||||
method: 'put',
|
if (result.success) {
|
||||||
url: USER_API.USER_AVATAR($('#user_id').val()),
|
// 修改 avatar 字段
|
||||||
data: JSON.stringify({ avatar: result.data }),
|
$.ajax({
|
||||||
dataType: 'json',
|
method: 'put',
|
||||||
contentType: 'application/json',
|
url: USER_API.USER_AVATAR($('#user_id').val()),
|
||||||
success: function (res) {
|
data: JSON.stringify({ avatar: result.data }),
|
||||||
if (res.success) {
|
dataType: 'json',
|
||||||
// 关闭当前弹层
|
contentType: 'application/json',
|
||||||
parent.layui.$('#avatar').attr('src', result.data.src)
|
success: function (res) {
|
||||||
top.layui.$('#avatar').attr('src', result.data.src)
|
if (res.success) {
|
||||||
parent.layer.close(parent.layer.getFrameIndex(window.name))
|
// 关闭当前弹层
|
||||||
} else {
|
parent.layui.$('#avatar').attr('src', result.data.src)
|
||||||
popup.failure('上传失败')
|
top.layui.$('#avatar').attr('src', result.data.src)
|
||||||
}
|
parent.layer.close(parent.layer.getFrameIndex(window.name))
|
||||||
|
} else {
|
||||||
|
popup.failure('上传失败')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
popup.failure('上传失败')
|
||||||
}
|
}
|
||||||
})
|
},
|
||||||
} else {
|
})
|
||||||
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)
|
||||||
|
}
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
</script>
|
||||||
|
{% endblock %}
|
||||||
$('.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)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
+297
-298
@@ -1,316 +1,315 @@
|
|||||||
<!DOCTYPE html>
|
{% extends 'admin/base.html' %}
|
||||||
<html lang="en">
|
|
||||||
<head>
|
{% block title %}
|
||||||
<title>用户管理</title>
|
<title>用户管理</title>
|
||||||
{% include 'admin/common/header.html' %}
|
<link rel="stylesheet" href="/static/admin/admin/css/other/user.css"/>
|
||||||
<link rel="stylesheet" href="{{ url_for('static', filename='/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">
|
||||||
<div class="button button-primary user-group" user-group=""> 全 部 用 户</div>
|
<form class="layui-form" action="" lay-filter="user-query-form">
|
||||||
<div class="button button-default user-group" user-group="-1"> 默 认 分 组</div>
|
<div class="layui-form-item">
|
||||||
<div style="overflow: auto">
|
<label class="layui-form-label">用户</label>
|
||||||
<ul id="dept-tree" class="dept-tree" data-id="0"></ul>
|
<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-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="user-main user-collasped">
|
<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>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
{% endblock %}
|
||||||
|
|
||||||
|
{% 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>
|
||||||
|
|
||||||
{% include 'admin/common/footer.html' %}
|
<script type="module">
|
||||||
|
import { USER_API, ROLE, parserTableData as parseData } from '/static/api/http.js'
|
||||||
|
|
||||||
{# 表格操作 #}
|
layui.use(['table', 'dtree', '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="pear-icon pear-icon-add"></i>
|
let $ = layui.jquery
|
||||||
新增
|
let dtree = layui.dtree
|
||||||
</button>
|
let popup = layui.popup
|
||||||
<button class="pear-btn pear-btn-md" lay-event="toolbar-remove">
|
let common = layui.common
|
||||||
<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 type="module">
|
// 表格数据
|
||||||
import { USER_API, ROLE, parserTableData as parseData } from '/static/api/http.js'
|
const get_columns = () => [
|
||||||
|
[
|
||||||
layui.use(['table', 'dtree', 'form', 'jquery', 'popup', 'common'], function () {
|
{ type: 'checkbox' },
|
||||||
let table = layui.table
|
{ title: '姓名', field: 'realname', align: 'center', width: 110 },
|
||||||
let form = layui.form
|
{ title: '账号', field: 'username', align: 'center' },
|
||||||
let $ = layui.jquery
|
{ title: '部门', field: 'dept', align: 'center' },
|
||||||
let dtree = layui.dtree
|
{ title: '启用', field: 'enable', align: 'center', templet: '#tool-switch', width: 120 },
|
||||||
let popup = layui.popup
|
{ title: '注册时间', field: 'create_at', templet: '#user-createTime', align: 'center' },
|
||||||
let common = layui.common
|
{ title: '更新时间', field: 'update_at', templet: '#user-updateTime', align: 'center' },
|
||||||
|
{ title: '操作', toolbar: '#tool', align: 'center', width: 130 },
|
||||||
// 表格数据
|
],
|
||||||
const get_columns = () => [
|
]
|
||||||
[
|
|
||||||
{ type: 'checkbox' },
|
|
||||||
{ title: '姓名', field: 'realname', align: 'center', width: 110 },
|
|
||||||
{ title: '账号', field: 'username', align: 'center' },
|
|
||||||
{ title: '部门', field: 'dept', align: 'center' },
|
|
||||||
{ title: '启用', field: 'enable', align: 'center', templet: '#tool-switch', width: 120 },
|
|
||||||
{ title: '注册时间', field: 'create_at', templet: '#user-createTime', align: 'center' },
|
|
||||||
{ title: '更新时间', field: 'update_at', templet: '#user-updateTime', align: 'center' },
|
|
||||||
{ title: '操作', toolbar: '#tool', align: 'center', width: 130 },
|
|
||||||
],
|
|
||||||
]
|
|
||||||
|
|
||||||
// 渲染表格数据
|
|
||||||
table.render({
|
|
||||||
parseData,
|
|
||||||
elem: '#tables',
|
|
||||||
url: USER_API.USERS(),
|
|
||||||
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/departments',
|
|
||||||
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: USER_API.USER_STATUS(this.value),
|
|
||||||
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,
|
||||||
|
elem: '#tables',
|
||||||
url: USER_API.USERS(),
|
url: USER_API.USERS(),
|
||||||
data: { ids: ids },
|
page: true,
|
||||||
dataType: 'json',
|
cols: get_columns(),
|
||||||
type: 'delete',
|
skin: 'line',
|
||||||
success: function (result) {
|
height: 'full-148',
|
||||||
layer.close(loading)
|
toolbar: '#toolbar', /*工具栏*/
|
||||||
if (result.success) {
|
text: { none: '暂无人员信息' },
|
||||||
popup.success(result.message, function () {
|
defaultToolbar: [{ layEvent: 'refresh', icon: 'layui-icon-refresh' }, 'filter', 'print', 'exports'], /*默认工具栏*/
|
||||||
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) {
|
dtree.render({
|
||||||
layer.close(index)
|
elem: '#dept-tree',
|
||||||
let loading = layer.load()
|
method: 'get',
|
||||||
$.ajax({
|
url: '/api/v1/dept/departments',
|
||||||
url: USER_API.USER(obj.data['id']),
|
dataFormat: 'list',
|
||||||
dataType: 'json',
|
line: true,
|
||||||
type: 'delete',
|
skin: 'laySimple',
|
||||||
success: function (result) {
|
icon: '-1',
|
||||||
layer.close(loading)
|
response: { treeId: 'deptId', parentId: 'parentId', title: 'deptName' },
|
||||||
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>
|
dtree.on('node(\'dept-tree\')', function (obj) {
|
||||||
</body>
|
let field = form.val('user-query-form') /*用户账号查询*/
|
||||||
</html>
|
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: USER_API.USER_STATUS(this.value),
|
||||||
|
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: USER_API.USERS(),
|
||||||
|
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: USER_API.USER(obj.data['id']),
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
window.tool_edit = function (obj) {
|
||||||
|
layer.open({
|
||||||
|
type: 2,
|
||||||
|
title: '修改',
|
||||||
|
shade: 0.1,
|
||||||
|
area: ['550px', '500px'],
|
||||||
|
content: '/users/' + obj.data['id'],
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
||||||
@@ -1,101 +1,100 @@
|
|||||||
<!DOCTYPE html>
|
{% extends 'admin/base.html' %}
|
||||||
<html>
|
{% block title %}
|
||||||
<head>
|
|
||||||
<title>用户管理</title>
|
<title>用户管理</title>
|
||||||
{% include 'admin/common/header.html' %}
|
{% endblock %}
|
||||||
</head>
|
|
||||||
<body>
|
{% block body %}
|
||||||
<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="layui-form-item">
|
<div class="main-container">
|
||||||
<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="username" lay-verify="title" autocomplete="off" placeholder="请输入账号"
|
<div class="layui-input-block">
|
||||||
class="layui-input">
|
<input type="text" name="username" lay-verify="title" autocomplete="off" placeholder="请输入账号"
|
||||||
|
class="layui-input">
|
||||||
|
</div>
|
||||||
</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">
|
<input type="text" name="realName" lay-verify="title" autocomplete="off" placeholder="请输入姓名"
|
||||||
<input type="text" name="realName" lay-verify="title" autocomplete="off" placeholder="请输入姓名"
|
class="layui-input">
|
||||||
class="layui-input">
|
</div>
|
||||||
</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">
|
<input type="text" name="password" lay-verify="title" autocomplete="off" placeholder="请输入密码"
|
||||||
<input type="text" name="password" lay-verify="title" autocomplete="off" placeholder="请输入密码"
|
class="layui-input">
|
||||||
class="layui-input">
|
</div>
|
||||||
</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>
|
<div class="bottom">
|
||||||
<div class="bottom">
|
<div class="button-container">
|
||||||
<div class="button-container">
|
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit=""
|
||||||
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit="" lay-filter="user-save">
|
lay-filter="user-save">
|
||||||
<i class="layui-icon layui-icon-ok"></i>
|
<i class="layui-icon layui-icon-ok"></i>
|
||||||
提交
|
提交
|
||||||
</button>
|
</button>
|
||||||
<button type="reset" class="pear-btn pear-btn-sm">
|
<button type="reset" class="pear-btn pear-btn-sm">
|
||||||
<i class="layui-icon layui-icon-refresh"></i>
|
<i class="layui-icon layui-icon-refresh"></i>
|
||||||
重置
|
重置
|
||||||
</button>
|
</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</form>
|
||||||
</form>
|
{% endblock %}
|
||||||
{% include 'admin/common/footer.html' %}
|
|
||||||
<script type="module">
|
|
||||||
import { USER_API } from '/static/api/http.js'
|
|
||||||
|
|
||||||
layui.use(['form', 'jquery'], function () {
|
{% block models_script %}
|
||||||
let form = layui.form
|
<script type="module">
|
||||||
let $ = layui.jquery
|
import { USER_API } from '/static/api/http.js'
|
||||||
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: USER_API.USERS(),
|
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: USER_API.USERS(),
|
||||||
layer.msg(result.message, { icon: 2, time: 1000 })
|
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
|
||||||
|
})
|
||||||
})
|
})
|
||||||
return false
|
</script>
|
||||||
})
|
{% endblock %}
|
||||||
})
|
|
||||||
</script>
|
|
||||||
<script>
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,122 +1,121 @@
|
|||||||
<!DOCTYPE html>
|
{% extends 'admin/base.html' %}
|
||||||
<!DOCTYPE html>
|
{% block title %}
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<title>用户编辑</title>
|
<title>用户编辑</title>
|
||||||
{% include 'admin/common/header.html' %}
|
{% endblock %}
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<form class="layui-form" action="">
|
{% block body %}
|
||||||
<div class="mainBox">
|
<form class="layui-form" action="">
|
||||||
<div class="main-container">
|
<div class="mainBox">
|
||||||
<div class="main-container">
|
<div class="main-container">
|
||||||
<div class="layui-form-item layui-hide">
|
<div class="main-container">
|
||||||
<label class="layui-form-label">编号</label>
|
<div class="layui-form-item layui-hide">
|
||||||
<div class="layui-input-block">
|
<label class="layui-form-label">编号</label>
|
||||||
<input type="text" value="{{ user.id }}" name="userId" lay-verify="title"
|
<div class="layui-input-block">
|
||||||
autocomplete="off" placeholder="请输入编号" class="layui-input">
|
<input type="text" value="{{ user.id }}" name="userId" lay-verify="title"
|
||||||
|
autocomplete="off" placeholder="请输入编号" class="layui-input">
|
||||||
|
</div>
|
||||||
</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">
|
<input type="text" value="{{ user.username }}" name="username" lay-verify="title"
|
||||||
<input type="text" value="{{ user.username }}" name="username" lay-verify="title"
|
autocomplete="off" placeholder="请输入账号" class="layui-input">
|
||||||
autocomplete="off" placeholder="请输入账号" class="layui-input">
|
</div>
|
||||||
</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">
|
<input type="text" value="{{ user.realname }}" name="realName" lay-verify="title"
|
||||||
<input type="text" value="{{ user.realname }}" name="realName" lay-verify="title"
|
autocomplete="off" placeholder="请输入姓名"
|
||||||
autocomplete="off" placeholder="请输入姓名"
|
class="layui-input">
|
||||||
class="layui-input">
|
</div>
|
||||||
</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">
|
<ul id="selectParent" name="deptId" class="dtree" data-id="0"></ul>
|
||||||
<ul id="selectParent" name="deptId" class="dtree" data-id="0"></ul>
|
</div>
|
||||||
</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>
|
<div class="bottom">
|
||||||
<div class="bottom">
|
<div class="button-container">
|
||||||
<div class="button-container">
|
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit=""
|
||||||
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit="" lay-filter="user-update">
|
lay-filter="user-update">
|
||||||
<i class="layui-icon layui-icon-ok"></i>
|
<i class="layui-icon layui-icon-ok"></i>
|
||||||
提交
|
提交
|
||||||
</button>
|
</button>
|
||||||
<button type="reset" class="pear-btn pear-btn-sm">
|
<button type="reset" class="pear-btn pear-btn-sm">
|
||||||
<i class="layui-icon layui-icon-refresh"></i>
|
<i class="layui-icon layui-icon-refresh"></i>
|
||||||
重置
|
重置
|
||||||
</button>
|
</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</form>
|
||||||
</form>
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block models_script %}
|
||||||
|
<script type="module">
|
||||||
|
import { USER_API } from '/static/api/http.js'
|
||||||
|
|
||||||
{% include 'admin/common/footer.html' %}
|
layui.use(['form', 'jquery', 'dtree'], function () {
|
||||||
|
let form = layui.form
|
||||||
|
let $ = layui.jquery
|
||||||
|
let dtree = layui.dtree
|
||||||
|
|
||||||
<script type="module">
|
dtree.renderSelect({
|
||||||
import { USER_API } from '/static/api/http.js'
|
elem: '#selectParent',
|
||||||
|
url: '/api/v1/dept/departments',
|
||||||
|
method: 'get',
|
||||||
|
selectInputName: { nodeId: 'deptId', context: 'deptName' },
|
||||||
|
skin: 'layui',
|
||||||
|
dataFormat: 'list',
|
||||||
|
response: { treeId: 'deptId', parentId: 'parentId', title: 'deptName' },
|
||||||
|
selectInitVal: "{{ user.dept_id }}",
|
||||||
|
})
|
||||||
|
|
||||||
layui.use(['form', 'jquery', 'dtree'], function () {
|
form.on('submit(user-update)', function (data) {
|
||||||
let form = layui.form
|
let roleIds = ''
|
||||||
let $ = layui.jquery
|
$('input[type=checkbox]:checked').each(function () {
|
||||||
let dtree = layui.dtree
|
roleIds += $(this).val() + ','
|
||||||
|
})
|
||||||
dtree.renderSelect({
|
roleIds = roleIds.substr(0, roleIds.length - 1)
|
||||||
elem: '#selectParent',
|
data.field.roleIds = roleIds
|
||||||
url: '/api/v1/dept/departments',
|
$.ajax({
|
||||||
method: 'get',
|
url: USER_API.USER_ROLE(data.field.userId),
|
||||||
selectInputName: { nodeId: 'deptId', context: 'deptName' },
|
data: JSON.stringify(data.field),
|
||||||
skin: 'layui',
|
dataType: 'json',
|
||||||
dataFormat: 'list',
|
contentType: 'application/json',
|
||||||
response: { treeId: 'deptId', parentId: 'parentId', title: 'deptName' },
|
type: 'put',
|
||||||
selectInitVal: "{{ user.dept_id }}"
|
success: function (result) {
|
||||||
})
|
if (result.success) {
|
||||||
form.on('submit(user-update)', function (data) {
|
layer.msg(result.message, { icon: 1, time: 1000 }, function () {
|
||||||
let roleIds = ''
|
parent.layer.close(parent.layer.getFrameIndex(window.name)) //关闭当前页
|
||||||
$('input[type=checkbox]:checked').each(function () {
|
parent.layui.table.reload('tables')
|
||||||
roleIds += $(this).val() + ','
|
})
|
||||||
|
} else {
|
||||||
|
layer.msg(result.message, { icon: 2, time: 1000 })
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
|
return false
|
||||||
|
})
|
||||||
})
|
})
|
||||||
roleIds = roleIds.substr(0, roleIds.length - 1)
|
</script>
|
||||||
data.field.roleIds = roleIds
|
{% endblock %}
|
||||||
$.ajax({
|
|
||||||
url: USER_API.USER_ROLE(data.field.userId),
|
|
||||||
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.layui.table.reload('tables')
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
layer.msg(result.message, { icon: 2, time: 1000 })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return false
|
|
||||||
})
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
Reference in New Issue
Block a user