Update: (步骤备份)更新部门管理前端
This commit is contained in:
@@ -301,7 +301,7 @@ powerdata = [
|
|||||||
|
|
||||||
), Power(
|
), Power(
|
||||||
id=26,
|
id=26,
|
||||||
name='用户删除',
|
name='权限删除',
|
||||||
type='2',
|
type='2',
|
||||||
code='system:power:remove',
|
code='system:power:remove',
|
||||||
url='',
|
url='',
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from flask import Blueprint, render_template, request, jsonify
|
|||||||
|
|
||||||
from applications.common import curd
|
from applications.common import curd
|
||||||
from applications.common.utils import validate
|
from applications.common.utils import validate
|
||||||
from applications.common.utils.http import success_api, fail_api
|
from applications.common.utils.http import success_api, fail_api, table_api
|
||||||
from applications.common.utils.rights import authorize
|
from applications.common.utils.rights import authorize
|
||||||
from applications.common.utils.validate import str_escape
|
from applications.common.utils.validate import str_escape
|
||||||
from applications.extensions import db
|
from applications.extensions import db
|
||||||
@@ -21,11 +21,26 @@ def main():
|
|||||||
@bp.post('/data')
|
@bp.post('/data')
|
||||||
@authorize("system:dept:main", log=True)
|
@authorize("system:dept:main", log=True)
|
||||||
def data():
|
def data():
|
||||||
data = Dept.query.order_by(Dept.sort).all()
|
dept = Dept.query.order_by(Dept.sort).all()
|
||||||
res = {
|
data = DeptSchema(many=True).dump(dept)
|
||||||
"data": DeptSchema(many=True).dump(data)
|
|
||||||
}
|
# 创建一个字典,用于存储每个节点的子节点
|
||||||
return jsonify(res)
|
tree = {}
|
||||||
|
for item in data:
|
||||||
|
item["children"] = []
|
||||||
|
tree[item["id"]] = item
|
||||||
|
|
||||||
|
# 构建树形结构
|
||||||
|
root_nodes = []
|
||||||
|
for item in data:
|
||||||
|
parent_id = item["parent_id"] if item["parent_id"] != 0 else None
|
||||||
|
if parent_id is None:
|
||||||
|
root_nodes.append(item)
|
||||||
|
else:
|
||||||
|
if parent_id in tree:
|
||||||
|
tree[parent_id]["children"].append(item)
|
||||||
|
|
||||||
|
return table_api(msg="请求成功", data=root_nodes)
|
||||||
|
|
||||||
|
|
||||||
@bp.get('/add')
|
@bp.get('/add')
|
||||||
@@ -108,7 +123,7 @@ def dis_enable():
|
|||||||
@authorize("system:dept:edit", log=True)
|
@authorize("system:dept:edit", log=True)
|
||||||
def update():
|
def update():
|
||||||
json = request.get_json(force=True)
|
json = request.get_json(force=True)
|
||||||
#id = json.get("deptId"),
|
# id = json.get("deptId"),
|
||||||
id = str_escape(json.get("deptId"))
|
id = str_escape(json.get("deptId"))
|
||||||
data = {
|
data = {
|
||||||
"dept_name": validate.str_escape(json.get("deptName")),
|
"dept_name": validate.str_escape(json.get("deptName")),
|
||||||
|
|||||||
@@ -18,28 +18,28 @@
|
|||||||
<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="required" 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="required" 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="required" 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" placeholder="请输入标题"
|
<input type="text" name="phone" lay-verify="required" autocomplete="off" placeholder="请输入联系方式"
|
||||||
class="layui-input">
|
class="layui-input">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -52,9 +52,9 @@
|
|||||||
</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-inline" style="width: 100px !important;">
|
||||||
<input type="text" name="sort" lay-verify="title" autocomplete="off" placeholder="请输入标题"
|
<input type="text" name="sort" value="0" lay-verify="required" autocomplete="off"
|
||||||
class="layui-input">
|
placeholder="排序" min="0" step="1" lay-affix="number" class="layui-input">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-form-item layui-form-text">
|
<div class="layui-form-item layui-form-text">
|
||||||
@@ -68,11 +68,11 @@
|
|||||||
</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="" lay-filter="dept-save">
|
<button type="submit" class="layui-btn layui-btn-sm" lay-submit="" 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="layui-btn layui-btn-primary layui-btn-sm">
|
||||||
<i class="layui-icon layui-icon-refresh"></i>
|
<i class="layui-icon layui-icon-refresh"></i>
|
||||||
重置
|
重置
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -12,21 +12,21 @@
|
|||||||
<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="{{ dept.id }}" name="deptId" lay-verify="title"
|
<input type="text" value="{{ dept.id }}" name="deptId" lay-verify="required"
|
||||||
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="{{ dept.dept_name }}" name="deptName" lay-verify="title"
|
<input type="text" value="{{ dept.dept_name }}" name="deptName" lay-verify="required"
|
||||||
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="{{ dept.leader }}" name="leader" lay-verify="title" autocomplete="off"
|
<input type="text" value="{{ dept.leader }}" name="leader" lay-verify="required" autocomplete="off"
|
||||||
placeholder="请输入负责人"
|
placeholder="请输入负责人"
|
||||||
class="layui-input">
|
class="layui-input">
|
||||||
</div>
|
</div>
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
<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.email }}" name="email" lay-verify="title" autocomplete="off"
|
<input type="text" value="{{ dept.email }}" name="email" lay-verify="required" autocomplete="off"
|
||||||
placeholder="请输入邮箱"
|
placeholder="请输入邮箱"
|
||||||
class="layui-input">
|
class="layui-input">
|
||||||
</div>
|
</div>
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
<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.phone }}" name="phone" lay-verify="title" autocomplete="off"
|
<input type="text" value="{{ dept.phone }}" name="phone" lay-verify="required" autocomplete="off"
|
||||||
placeholder="请输入联系方式"
|
placeholder="请输入联系方式"
|
||||||
class="layui-input">
|
class="layui-input">
|
||||||
</div>
|
</div>
|
||||||
@@ -61,17 +61,20 @@
|
|||||||
</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-inline" style="width: 100px !important;">
|
||||||
<input type="text" name="sort" value="{{ dept.sort }}" lay-verify="title" autocomplete="off"
|
<input type="text" name="sort" value="{{ dept.sort }}" lay-verify="required" autocomplete="off"
|
||||||
placeholder="请输入排序"
|
placeholder="排序" min="0" step="1" lay-affix="number" 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"
|
<textarea placeholder="请输入详细地址" name="address"
|
||||||
class="layui-textarea">{{ dept.address }}</textarea>
|
class="layui-textarea">
|
||||||
|
{% if dept.address %}
|
||||||
|
{{ dept.address }}
|
||||||
|
{% endif %}
|
||||||
|
</textarea>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -79,12 +82,12 @@
|
|||||||
</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="layui-btn layui-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="layui-btn layui-btn-primary layui-btn-sm">
|
||||||
<i class="layui-icon layui-icon-refresh"></i>
|
<i class="layui-icon layui-icon-refresh"></i>
|
||||||
重置
|
重置
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -7,8 +7,8 @@
|
|||||||
<body class="pear-container">
|
<body class="pear-container">
|
||||||
<div class="layui-card">
|
<div class="layui-card">
|
||||||
<div class="layui-card-body">
|
<div class="layui-card-body">
|
||||||
<div class="layui-form-item" style="margin-bottom: unset;">
|
<form class="layui-form" action="">
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item" style="margin-bottom: unset;">
|
||||||
<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">
|
||||||
@@ -34,13 +34,13 @@
|
|||||||
|
|
||||||
<script type="text/html" id="dept-toolbar">
|
<script type="text/html" id="dept-toolbar">
|
||||||
{% if authorize("system:dept:edit") %}
|
{% if authorize("system:dept:edit") %}
|
||||||
<button class="layui-btn layui-btn-primary layui-btn-md" lay-event="add">
|
<button class="layui-btn layui-btn-primary layui-btn-sm" lay-event="add">
|
||||||
<i class="layui-icon layui-icon-add-1"></i>
|
<i class="layui-icon layui-icon-add-1"></i>
|
||||||
新增
|
新增
|
||||||
</button>
|
</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if authorize("system:dept:remove") %}
|
{% if authorize("system:dept:remove") %}
|
||||||
<button class="layui-btn layui-btn-md" lay-event="batchRemove">
|
<button class="layui-btn layui-btn-sm" lay-event="batchRemove">
|
||||||
<i class="layui-icon layui-icon-delete"></i>
|
<i class="layui-icon layui-icon-delete"></i>
|
||||||
删除
|
删除
|
||||||
</button>
|
</button>
|
||||||
@@ -49,13 +49,12 @@
|
|||||||
|
|
||||||
<script type="text/html" id="dept-bar">
|
<script type="text/html" id="dept-bar">
|
||||||
{% if authorize("system:dept:edit") %}
|
{% if authorize("system:dept:edit") %}
|
||||||
<button class="layui-btn layui-btn-primary layui-btn-sm" lay-event="edit"><i
|
<button class="layui-btn layui-btn-xs" lay-event="edit"><i class="pear-icon pear-icon-edit"> 编辑</i>
|
||||||
class="layui-icon layui-icon-edit"></i>
|
|
||||||
</button>
|
</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if authorize("system:dept:remove") %}
|
{% if authorize("system:dept:remove") %}
|
||||||
<button class="layui-btn layui-btn-danger layui-btn-sm" lay-event="remove"><i
|
<button class="layui-btn layui-btn-danger layui-btn-xs" lay-event="remove"><i
|
||||||
class="layui-icon layui-icon-delete"></i>
|
class="pear-icon pear-icon-ashbin"> 删除</i>
|
||||||
</button>
|
</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</script>
|
</script>
|
||||||
@@ -71,8 +70,7 @@
|
|||||||
{% include 'system/common/footer.html' %}
|
{% include 'system/common/footer.html' %}
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
layui.use(['table', 'form', 'jquery', 'popup'], function () {
|
layui.use(['form', 'jquery', 'popup', 'treeTable'], function () {
|
||||||
let table = layui.table
|
|
||||||
let form = layui.form
|
let form = layui.form
|
||||||
let $ = layui.jquery
|
let $ = layui.jquery
|
||||||
let treeTable = layui.treeTable
|
let treeTable = layui.treeTable
|
||||||
@@ -82,28 +80,27 @@
|
|||||||
|
|
||||||
window.render = function () {
|
window.render = function () {
|
||||||
treeTable.render({
|
treeTable.render({
|
||||||
treeColIndex: 1,
|
|
||||||
treeSpid: 0,
|
|
||||||
treeIdName: 'id',
|
|
||||||
treePidName: 'parent_id',
|
|
||||||
skin: 'line',
|
skin: 'line',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
treeDefaultClose: false,
|
|
||||||
toolbar: '#dept-toolbar',
|
toolbar: '#dept-toolbar',
|
||||||
elem: '#dept-table',
|
elem: '#dept-table',
|
||||||
url: '/system/dept/data',
|
url: MODULE_PATH + 'data',
|
||||||
page: false,
|
page: false,
|
||||||
|
tree: {
|
||||||
|
customName: {name: 'dept_name'}
|
||||||
|
},
|
||||||
cols: [
|
cols: [
|
||||||
[
|
[
|
||||||
{field: 'id', title: 'id'},
|
{type: 'checkbox', fixed: 'left'},
|
||||||
{field: 'dept_name', minWidth: 200, title: '部门名称'},
|
{field: 'id', width: 100, title: '编号'},
|
||||||
{field: 'leader', title: '负责人'},
|
{field: 'dept_name', title: '部门名称', width: 200},
|
||||||
|
{field: 'leader', title: '负责人', width: 100},
|
||||||
{field: 'phone', title: '联系方式'},
|
{field: 'phone', title: '联系方式'},
|
||||||
{field: 'email', title: '邮箱'},
|
{field: 'email', title: '邮箱'},
|
||||||
{field: 'address', title: '详细地址'},
|
{field: 'address', title: '详细地址'},
|
||||||
{field: 'status', title: '状态', templet: '#dept-status'},
|
{field: 'status', title: '状态', templet: '#dept-status'},
|
||||||
{field: 'sort', title: '排序', width: 100},
|
{field: 'sort', title: '排序', width: 50},
|
||||||
{title: '操作', templet: '#dept-bar', width: 120, align: 'center'}
|
{title: '操作', templet: '#dept-bar', width: 150, align: 'center'}
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
@@ -139,7 +136,7 @@
|
|||||||
|
|
||||||
render()
|
render()
|
||||||
|
|
||||||
table.on('tool(dept-table)', function (obj) {
|
treeTable.on('tool(dept-table)', function (obj) {
|
||||||
if (obj.event === 'remove') {
|
if (obj.event === 'remove') {
|
||||||
window.remove(obj)
|
window.remove(obj)
|
||||||
} else if (obj.event === 'edit') {
|
} else if (obj.event === 'edit') {
|
||||||
@@ -147,7 +144,7 @@
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
table.on('toolbar(dept-table)', function (obj) {
|
treeTable.on('toolbar(dept-table)', function (obj) {
|
||||||
if (obj.event === 'add') {
|
if (obj.event === 'add') {
|
||||||
window.add()
|
window.add()
|
||||||
} else if (obj.event === 'refresh') {
|
} else if (obj.event === 'refresh') {
|
||||||
@@ -199,7 +196,6 @@
|
|||||||
title: '修改',
|
title: '修改',
|
||||||
shade: 0.1,
|
shade: 0.1,
|
||||||
area: ['450px', '500px'],
|
area: ['450px', '500px'],
|
||||||
//content: MODULE_PATH + 'edit?deptId=' + obj.data['deptId']
|
|
||||||
content: MODULE_PATH + 'edit?deptId=' + obj.data['id']
|
content: MODULE_PATH + 'edit?deptId=' + obj.data['id']
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,11 +47,11 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script type="text/html" id="power-bar">
|
<script type="text/html" id="power-bar">
|
||||||
{% if authorize("system:role:edit") %}
|
{% if authorize("system:power:edit") %}
|
||||||
<button class="layui-btn layui-btn-xs" lay-event="edit"><i class="pear-icon pear-icon-edit"> 编辑</i>
|
<button class="layui-btn layui-btn-xs" lay-event="edit"><i class="pear-icon pear-icon-edit"> 编辑</i>
|
||||||
</button>
|
</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if authorize("system:role:remove") %}
|
{% if authorize("system:power:remove") %}
|
||||||
<button class="layui-btn layui-btn-danger layui-btn-xs" lay-event="remove"><i
|
<button class="layui-btn layui-btn-danger layui-btn-xs" lay-event="remove"><i
|
||||||
class="pear-icon pear-icon-ashbin"> 删除</i>
|
class="pear-icon pear-icon-ashbin"> 删除</i>
|
||||||
</button>
|
</button>
|
||||||
@@ -94,19 +94,16 @@
|
|||||||
|
|
||||||
window.render = function () {
|
window.render = function () {
|
||||||
treeTable.render({
|
treeTable.render({
|
||||||
treeColIndex: 1,
|
|
||||||
treeSpid: 0,
|
|
||||||
treeIdName: 'id',
|
|
||||||
treePidName: 'parent_id',
|
|
||||||
skin: 'line',
|
skin: 'line',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
treeDefaultClose: true,
|
treeDefaultClose: true,
|
||||||
toolbar: '#power-toolbar',
|
toolbar: '#power-toolbar',
|
||||||
elem: '#power-table',
|
elem: '#power-table',
|
||||||
url: '/system/power/data',
|
url: MODULE_PATH + 'data',
|
||||||
page: false,
|
page: false,
|
||||||
cols: [
|
cols: [
|
||||||
[{type: 'checkbox', fixed: 'left'},
|
[
|
||||||
|
{type: 'checkbox', fixed: 'left'},
|
||||||
{field: 'id', width: 100, title: '编号'},
|
{field: 'id', width: 100, title: '编号'},
|
||||||
{field: 'name', title: '权限名称'},
|
{field: 'name', title: '权限名称'},
|
||||||
{field: 'icon', title: '图标', templet: '#icon'},
|
{field: 'icon', title: '图标', templet: '#icon'},
|
||||||
|
|||||||
Reference in New Issue
Block a user