完成部门管理,增加.flaskenv配置,抽基本js和css作为引入模板

This commit is contained in:
mkg
2021-06-01 17:54:13 +08:00
parent f051693690
commit e0738aa5b2
22 changed files with 1003 additions and 76 deletions
+3 -1
View File
@@ -1,3 +1,5 @@
FLASK_APP=main.py
FLASK_ENV=development
FLASK_DEBUG=1
FLASK_DEBUG=1
FLASK_RUN_HOST = 127.0.0.1
FLASK_RUN_PORT = 5000
+31
View File
@@ -0,0 +1,31 @@
import datetime
from applications.models import db, ma
from marshmallow import fields
class Dept(db.Model):
__tablename__ = 'admin_dept'
id = db.Column(db.Integer, primary_key=True, comment="部门ID")
parent_id = db.Column(db.Integer, comment="父级编号")
dept_name = db.Column(db.String(50), comment="部门名称")
sort = db.Column(db.Integer, comment="排序")
leader = db.Column(db.String(50), comment="负责人")
phone = db.Column(db.String(20), comment="联系方式")
email = db.Column(db.String(50), comment="邮箱")
status = db.Column(db.Integer, comment='状态(1开启,0关闭)')
remark = db.Column(db.Text, comment="备注")
address = db.Column(db.String(255), comment="详细地址")
create_at = db.Column(db.DateTime, default=datetime.datetime.now, comment='创建时间')
update_at = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='创建时间')
class DeptSchema(ma.Schema): # 序列化类
deptId = fields.Integer(attribute="id")
parentId = fields.Integer(attribute="parent_id")
deptName = fields.Str(attribute="dept_name")
leader = fields.Str()
phone = fields.Str()
email = fields.Str()
address = fields.Str()
status = fields.Str()
sort = fields.Str()
+10
View File
@@ -4,6 +4,7 @@ from werkzeug.security import generate_password_hash, check_password_hash
from applications.models import db, ma
from marshmallow import fields
from applications.models import admin_user_role
from applications.models.admin_dept import Dept
class User(db.Model, UserMixin):
@@ -15,6 +16,7 @@ class User(db.Model, UserMixin):
remark = db.Column(db.String(255), comment='备注')
password_hash = db.Column(db.String(128), comment='哈希密码')
enable = db.Column(db.Integer, default=0, comment='启用')
dept_id = db.Column(db.Integer, comment='部门id')
create_at = db.Column(db.DateTime, default=datetime.datetime.now, comment='创建时间')
update_at = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='创建时间')
role = db.relationship('Role', secondary="admin_user_role", backref=db.backref('user'), lazy='dynamic')
@@ -34,3 +36,11 @@ class UserSchema(ma.Schema):
enable = fields.Integer()
create_at = fields.DateTime()
update_at = fields.DateTime()
dept = fields.Method("get_dept")
def get_dept(self, obj):
if obj.dept_id != None:
return Dept.query.filter_by(id=obj.dept_id).first().dept_name
else:
return None
+92
View File
@@ -0,0 +1,92 @@
from markupsafe import escape, Markup
from applications.models import db
from applications.models.admin_dept import Dept, DeptSchema
from applications.models.admin_user import User
from applications.service.common.curd import model_to_dicts
def get_dept_dict():
dept = Dept.query.order_by(Dept.sort).all()
res = model_to_dicts(Schema=DeptSchema, model=dept)
return res
def save_dept(req):
address = req.get("address")
deptName = req.get("deptName")
email = req.get("email")
leader = req.get("leader")
parentId = req.get("parentId")
parentName = req.get("parentName")
phone = req.get("phone")
selectParent_select_input = req.get("selectParent_select_input")
sort = req.get("sort")
status = req.get("status")
dept = Dept(
parent_id=parentId,
dept_name=deptName,
sort=sort,
leader=leader,
phone=phone,
email=email,
status=status,
address=address
)
r = db.session.add(dept)
db.session.commit()
return r
def get_dept_by_id(id):
d = Dept.query.filter_by(id=id).first()
return d
# 启动权限
def enable_status(id):
enable = 1
d = Dept.query.filter_by(id=id).update({"status": enable})
if d:
db.session.commit()
return True
print('0')
return False
# 停用权限
def disable_status(id):
enable = 0
d = Dept.query.filter_by(id=id).update({"status": enable})
if d:
db.session.commit()
return True
return False
def update_dept(json):
id = json.get("deptId"),
print(str(Markup(json.get("leader"))))
data = {
"dept_name": json.get("deptName"),
"sort": json.get("sort"),
"leader": json.get("leader"),
"phone": json.get("phone"),
"email": json.get("email"),
"status": json.get("status"),
"address": json.get("address")
}
d = Dept.query.filter_by(id=id).update(data)
if not d:
return False
db.session.commit()
return True
def remove_dept(id):
d = Dept.query.filter_by(id=id).delete()
if not d:
return False
User.query.filter_by(dept_id=id).update({"dept_id": None})
db.session.commit()
return True
+6 -8
View File
@@ -1,22 +1,20 @@
from applications.models import db
from applications.models.admin_power import Power, PowerSchema2
from applications.models.admin_role import Role
from applications.service.common.curd import model_to_dicts
def get_power_dict():
power = Power.query.all()
power_schema = PowerSchema2(many=True)
power_dict = power_schema.dump(power)
return power_dict
res = model_to_dicts(Schema=PowerSchema2, model=power)
return res
# 选择父节点
def select_parent():
power = Power.query.all()
power_schema = PowerSchema2(many=True)
power_dict = power_schema.dump(power)
power_dict.append({"powerId": 0, "powerName": "顶级权限", "parentId": -1})
return power_dict
res = model_to_dicts(Schema=PowerSchema2, model=power)
res.append({"powerId": 0, "powerName": "顶级权限", "parentId": -1})
return res
# 增加权限
+11 -6
View File
@@ -11,8 +11,13 @@ from applications.models.admin_log import AdminLog
from applications.service.common.curd import model_to_dicts
def get_user_data(page, limit, filters):
user = User.query.filter(and_(*[getattr(User, k).like(v) for k, v in filters.items()])).paginate(page=page,
def get_user_data(page, limit, filters,deptId):
if deptId:
user = User.query.filter_by(dept_id=deptId).filter(and_(*[getattr(User, k).like(v) for k, v in filters.items()])).paginate(page=page,
per_page=limit,
error_out=False)
else:
user = User.query.filter(and_(*[getattr(User, k).like(v) for k, v in filters.items()])).paginate(page=page,
per_page=limit,
error_out=False)
count = User.query.count()
@@ -20,8 +25,8 @@ def get_user_data(page, limit, filters):
# 获取用户的dict数据分页器
def get_user_data_dict(page, limit, filters):
user, count = get_user_data(page, limit, filters)
def get_user_data_dict(page, limit, filters,deptId):
user, count = get_user_data(page, limit, filters,deptId)
data = model_to_dicts(Schema=UserSchema,model=user.items)
return data, count
@@ -70,8 +75,8 @@ def update_avatar(url):
# 更新用户信息
def update_user(id, username, realname):
user = User.query.filter_by(id=id).update({'username': username, 'realname': realname})
def update_user(id, username, realname, deptId):
user = User.query.filter_by(id=id).update({'username': username, 'realname': realname,'dept_id':deptId})
db.session.commit()
return user
+3 -6
View File
@@ -1,3 +1,4 @@
from applications.views.admin.dept import admin_dept
from applications.views.admin.index import admin_index
from applications.views.admin.user import admin_user
from applications.views.admin.file import admin_file
@@ -6,14 +7,10 @@ from applications.views.admin.admin_log import admin_log
from applications.views.admin.power import admin_power
from applications.views.admin.role import admin_role
from applications.views.admin.dict import admin_dict
"""
初始化蓝图
"""
# 初始化蓝图
def init_adminViews(app):
app.register_blueprint(admin_index)
app.register_blueprint(admin_user)
app.register_blueprint(admin_file)
@@ -22,4 +19,4 @@ def init_adminViews(app):
app.register_blueprint(admin_power)
app.register_blueprint(admin_role)
app.register_blueprint(admin_dict)
app.register_blueprint(admin_dept)
+101
View File
@@ -0,0 +1,101 @@
from flask import Blueprint, render_template, request, jsonify
from applications.service.admin import dept as dept_curd
from applications.service.common.response import table_api, success_api, fail_api
from applications.service.route_auth import authorize_and_log, authorize
admin_dept = Blueprint('adminDept', __name__, url_prefix='/admin/dept')
@admin_dept.route('/')
@authorize_and_log("admin:dept:main")
def main():
return render_template('admin/dept/main.html')
@admin_dept.route('/data')
@authorize_and_log("admin:dept:main")
def data():
power_data = dept_curd.get_dept_dict()
res = {
"data": power_data
}
return jsonify(res)
@admin_dept.route('/add')
@authorize_and_log("admin:dept:add")
def add():
return render_template('admin/dept/add.html')
@admin_dept.route('/tree')
@authorize_and_log("admin:dept:main")
def tree():
power_data = dept_curd.get_dept_dict()
res = {
"status": {"code": 200, "message": "默认"},
"data": power_data
}
return jsonify(res)
@admin_dept.route('/save', methods=['POST'])
@authorize_and_log("admin:dept:edit")
def save():
req = request.json
dept_curd.save_dept(req)
return success_api(msg="成功")
@admin_dept.route('/edit', methods=['GET', 'POST'])
@authorize_and_log("admin:dept:edit")
def edit():
id = request.args.get("deptId")
dept = dept_curd.get_dept_by_id(id)
return render_template('admin/dept/edit.html', dept=dept)
# 启用
@admin_dept.route('/enable', methods=['PUT'])
@authorize_and_log("admin:dept:edit")
def enable():
id = request.json.get('deptId')
if id:
res = dept_curd.enable_status(id)
if not res:
return fail_api(msg="出错啦")
return success_api(msg="启用成功")
return fail_api(msg="数据错误")
# 禁用
@admin_dept.route('/disable', methods=['PUT'])
@authorize_and_log("admin:dept:edit")
def disenable():
id = request.json.get('deptId')
if id:
res = dept_curd.disable_status(id)
if not res:
return fail_api(msg="出错啦")
return success_api(msg="禁用成功")
return fail_api(msg="数据错误")
@admin_dept.route('/update', methods=['PUT'])
@authorize_and_log("admin:dept:edit")
def update():
res = dept_curd.update_dept(request.json)
if not res:
return fail_api(msg="更新失败")
return success_api(msg="更新成功")
@admin_dept.route('/remove/<int:id>', methods=['DELETE'])
@authorize_and_log("admin:dept:remove")
def remove(id):
res = dept_curd.remove_dept(id)
if res:
return success_api(msg="删除成功")
else:
return fail_api(msg="删除失败")
+3 -3
View File
@@ -73,7 +73,7 @@ def update():
return success_api(msg="更新权限成功")
# 启用用户
# 启用权限
@admin_power.route('/enable', methods=['PUT'])
@authorize_and_log("admin:power:edit")
def enable():
@@ -83,11 +83,11 @@ def enable():
res = enable_status(id)
if not res:
return fail_api(msg="出错啦")
return success_api(msg="成功")
return success_api(msg="成功")
return fail_api(msg="数据错误")
# 禁用用户
# 禁用权限
@admin_power.route('/disable', methods=['PUT'])
@authorize_and_log("admin:power:edit")
def disenable():
+4 -3
View File
@@ -26,12 +26,13 @@ def data():
limit = request.args.get('limit', type=int)
realName = request.args.get('realName', type=str)
username = request.args.get('username', type=str)
deptId = request.args.get('deptId', type=int)
filters = {}
if realName:
filters["realname"] = ('%' + realName + '%')
if username:
filters["username"] = ('%' + username + '%')
user_data, count = get_user_data_dict(page=page, limit=limit, filters=filters)
user_data, count = get_user_data_dict(page=page, limit=limit, filters=filters,deptId=deptId)
return table_api(data=user_data, count=count)
@@ -96,8 +97,9 @@ def update():
id = req_json.get("userId")
username = req_json.get('username')
realName = req_json.get('realName')
deptId = req_json.get('deptId')
role_ids = a.split(',')
update_user(id, username, realName)
update_user(id, username, realName,deptId)
update_user_role(id, role_ids)
return success_api(msg="更新成功")
@@ -158,7 +160,6 @@ def edit_password_put():
@authorize_and_log("admin:user:edit")
def enable():
id = request.json.get('userId')
print(id)
if id:
res = enable_status(id)
if not res:
+85 -43
View File
@@ -11,7 +11,7 @@
Target Server Version : 50726
File Encoding : 65001
Date: 27/04/2021 11:57:13
Date: 01/06/2021 17:50:18
*/
SET NAMES utf8mb4;
@@ -32,12 +32,41 @@ CREATE TABLE `admin_admin_log` (
`create_time` datetime(0) NULL DEFAULT NULL,
`success` int(11) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1267 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = DYNAMIC;
) ENGINE = InnoDB AUTO_INCREMENT = 546 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of admin_admin_log
-- ----------------------------
-- ----------------------------
-- Table structure for admin_dept
-- ----------------------------
DROP TABLE IF EXISTS `admin_dept`;
CREATE TABLE `admin_dept` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '部门ID',
`parent_id` int(11) NULL DEFAULT NULL COMMENT '父级编号',
`dept_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '部门名称',
`sort` int(11) NULL DEFAULT NULL COMMENT '排序',
`leader` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '负责人',
`phone` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '联系方式',
`email` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '邮箱',
`status` int(11) NULL DEFAULT NULL COMMENT '状态(1开启,0关闭)',
`remark` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL COMMENT '备注',
`address` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '详细地址',
`create_at` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
`update_at` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of admin_dept
-- ----------------------------
INSERT INTO `admin_dept` VALUES (1, 0, '总公司', 1, '就眠仪式', '12312345679', '123qq.com', 1, NULL, '这是总公司', NULL, '2021-06-01 17:23:20');
INSERT INTO `admin_dept` VALUES (4, 1, '济南分公司', 2, '就眠仪式', '12312345678', '1234qq.com', 1, NULL, '这是济南', '2021-06-01 17:24:33', '2021-06-01 17:25:19');
INSERT INTO `admin_dept` VALUES (5, 1, '唐山分公司', 4, 'mkg', '12312345678', '123@qq.com', 1, NULL, '这是唐山', '2021-06-01 17:25:15', '2021-06-01 17:25:20');
INSERT INTO `admin_dept` VALUES (7, 4, '济南分公司开发部', 5, '就眠仪式', '12312345678', '123@qq.com', 1, NULL, '测试', '2021-06-01 17:27:39', '2021-06-01 17:27:39');
INSERT INTO `admin_dept` VALUES (8, 5, '唐山测试部', 6, 'mkg', '12312345678', '123@qq.com', 1, NULL, '测试部', '2021-06-01 17:28:27', '2021-06-01 17:28:27');
-- ----------------------------
-- Table structure for admin_dict_data
-- ----------------------------
@@ -74,7 +103,7 @@ CREATE TABLE `admin_dict_type` (
`create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
`update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 12 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = DYNAMIC;
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of admin_dict_type
@@ -119,7 +148,7 @@ CREATE TABLE `admin_power` (
`update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
`enable` int(11) NULL DEFAULT NULL COMMENT '是否开启',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 48 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = DYNAMIC;
) ENGINE = InnoDB AUTO_INCREMENT = 52 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of admin_power
@@ -148,6 +177,10 @@ INSERT INTO `admin_power` VALUES (44, '数据字典', '1', 'admin:dict:main', '/
INSERT INTO `admin_power` VALUES (45, '字典增加', '2', 'admin:dict:add', '', '', '44', 'layui-icon ', 1, '2021-04-16 14:00:59', '2021-04-16 14:00:59', 1);
INSERT INTO `admin_power` VALUES (46, '字典修改', '2', 'admin:dict:edit', '', '', '44', 'layui-icon ', 2, '2021-04-16 14:01:33', '2021-04-16 14:01:33', 1);
INSERT INTO `admin_power` VALUES (47, '字典删除', '2', 'admin:dict:remove', '', '', '44', 'layui-icon ', 3, '2021-04-16 14:02:06', '2021-04-16 14:02:06', 1);
INSERT INTO `admin_power` VALUES (48, '部门管理', '1', 'admin:dept:main', '/admin/dept', '_iframe', '1', 'layui-icon layui-icon-group', 3, '2021-06-01 16:22:11', '2021-06-01 16:22:11', 1);
INSERT INTO `admin_power` VALUES (49, '部门增加', '2', 'admin:dept:add', '', '', '48', 'layui-icon None', 1, '2021-06-01 17:35:52', '2021-06-01 17:36:15', 1);
INSERT INTO `admin_power` VALUES (50, '部门编辑', '2', 'admin:dept:edit', '', '', '48', 'layui-icon ', 2, '2021-06-01 17:36:41', '2021-06-01 17:36:41', 1);
INSERT INTO `admin_power` VALUES (51, '部门删除', '2', 'admin:dept:remove', '', '', '48', 'layui-icon None', 3, '2021-06-01 17:37:15', '2021-06-01 17:37:26', 1);
-- ----------------------------
-- Table structure for admin_role
@@ -185,43 +218,49 @@ CREATE TABLE `admin_role_power` (
INDEX `role_id`(`role_id`) USING BTREE,
CONSTRAINT `admin_role_power_ibfk_1` FOREIGN KEY (`power_id`) REFERENCES `admin_power` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `admin_role_power_ibfk_2` FOREIGN KEY (`role_id`) REFERENCES `admin_role` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 212 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = DYNAMIC;
) ENGINE = InnoDB AUTO_INCREMENT = 275 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of admin_role_power
-- ----------------------------
INSERT INTO `admin_role_power` VALUES (159, 1, 2);
INSERT INTO `admin_role_power` VALUES (160, 3, 2);
INSERT INTO `admin_role_power` VALUES (161, 4, 2);
INSERT INTO `admin_role_power` VALUES (162, 9, 2);
INSERT INTO `admin_role_power` VALUES (163, 12, 2);
INSERT INTO `admin_role_power` VALUES (164, 13, 2);
INSERT INTO `admin_role_power` VALUES (165, 17, 2);
INSERT INTO `admin_role_power` VALUES (166, 18, 2);
INSERT INTO `admin_role_power` VALUES (188, 1, 1);
INSERT INTO `admin_role_power` VALUES (189, 3, 1);
INSERT INTO `admin_role_power` VALUES (190, 4, 1);
INSERT INTO `admin_role_power` VALUES (191, 9, 1);
INSERT INTO `admin_role_power` VALUES (192, 12, 1);
INSERT INTO `admin_role_power` VALUES (193, 13, 1);
INSERT INTO `admin_role_power` VALUES (194, 17, 1);
INSERT INTO `admin_role_power` VALUES (195, 18, 1);
INSERT INTO `admin_role_power` VALUES (196, 21, 1);
INSERT INTO `admin_role_power` VALUES (197, 22, 1);
INSERT INTO `admin_role_power` VALUES (198, 23, 1);
INSERT INTO `admin_role_power` VALUES (199, 24, 1);
INSERT INTO `admin_role_power` VALUES (200, 25, 1);
INSERT INTO `admin_role_power` VALUES (201, 26, 1);
INSERT INTO `admin_role_power` VALUES (202, 27, 1);
INSERT INTO `admin_role_power` VALUES (203, 28, 1);
INSERT INTO `admin_role_power` VALUES (204, 29, 1);
INSERT INTO `admin_role_power` VALUES (205, 30, 1);
INSERT INTO `admin_role_power` VALUES (206, 31, 1);
INSERT INTO `admin_role_power` VALUES (207, 32, 1);
INSERT INTO `admin_role_power` VALUES (208, 44, 1);
INSERT INTO `admin_role_power` VALUES (209, 45, 1);
INSERT INTO `admin_role_power` VALUES (210, 46, 1);
INSERT INTO `admin_role_power` VALUES (211, 47, 1);
INSERT INTO `admin_role_power` VALUES (237, 1, 1);
INSERT INTO `admin_role_power` VALUES (238, 3, 1);
INSERT INTO `admin_role_power` VALUES (239, 4, 1);
INSERT INTO `admin_role_power` VALUES (240, 9, 1);
INSERT INTO `admin_role_power` VALUES (241, 12, 1);
INSERT INTO `admin_role_power` VALUES (242, 13, 1);
INSERT INTO `admin_role_power` VALUES (243, 17, 1);
INSERT INTO `admin_role_power` VALUES (244, 18, 1);
INSERT INTO `admin_role_power` VALUES (245, 21, 1);
INSERT INTO `admin_role_power` VALUES (246, 22, 1);
INSERT INTO `admin_role_power` VALUES (247, 23, 1);
INSERT INTO `admin_role_power` VALUES (248, 24, 1);
INSERT INTO `admin_role_power` VALUES (249, 25, 1);
INSERT INTO `admin_role_power` VALUES (250, 26, 1);
INSERT INTO `admin_role_power` VALUES (251, 27, 1);
INSERT INTO `admin_role_power` VALUES (252, 28, 1);
INSERT INTO `admin_role_power` VALUES (253, 29, 1);
INSERT INTO `admin_role_power` VALUES (254, 30, 1);
INSERT INTO `admin_role_power` VALUES (255, 31, 1);
INSERT INTO `admin_role_power` VALUES (256, 32, 1);
INSERT INTO `admin_role_power` VALUES (257, 44, 1);
INSERT INTO `admin_role_power` VALUES (258, 45, 1);
INSERT INTO `admin_role_power` VALUES (259, 46, 1);
INSERT INTO `admin_role_power` VALUES (260, 47, 1);
INSERT INTO `admin_role_power` VALUES (261, 48, 1);
INSERT INTO `admin_role_power` VALUES (262, 49, 1);
INSERT INTO `admin_role_power` VALUES (263, 50, 1);
INSERT INTO `admin_role_power` VALUES (264, 51, 1);
INSERT INTO `admin_role_power` VALUES (265, 1, 2);
INSERT INTO `admin_role_power` VALUES (266, 3, 2);
INSERT INTO `admin_role_power` VALUES (267, 4, 2);
INSERT INTO `admin_role_power` VALUES (268, 9, 2);
INSERT INTO `admin_role_power` VALUES (269, 12, 2);
INSERT INTO `admin_role_power` VALUES (270, 13, 2);
INSERT INTO `admin_role_power` VALUES (271, 17, 2);
INSERT INTO `admin_role_power` VALUES (272, 18, 2);
INSERT INTO `admin_role_power` VALUES (273, 44, 2);
INSERT INTO `admin_role_power` VALUES (274, 48, 2);
-- ----------------------------
-- Table structure for admin_user
@@ -237,14 +276,16 @@ CREATE TABLE `admin_user` (
`realname` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '真实名字',
`remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '备注',
`avatar` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '头像',
`dept_id` int(11) NULL DEFAULT NULL COMMENT '部门id',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of admin_user
-- ----------------------------
INSERT INTO `admin_user` VALUES (1, 'admin', 'pbkdf2:sha256:150000$raM7mDSr$58fe069c3eac01531fc8af85e6fc200655dd2588090530084d182e6ec9d52c85', NULL, '2021-04-01 23:39:41', 1, '超级管理', '要是不能把握时机,就要终身蹭蹬,一事无成!', 'http://127.0.0.1:5000/_uploads/photos/1617291580000.jpg');
INSERT INTO `admin_user` VALUES (7, 'test', 'pbkdf2:sha256:150000$cRS8bYNh$adb57e64d929863cf159f924f74d0634f1fecc46dba749f1bfaca03da6d2e3ac', '2021-03-22 20:03:42', '2021-04-01 23:37:39', 1, '超级管理', '要是不能把握时机,就要终身蹭蹬,一事无成', '/static/admin/admin/images/avatar.jpg');
INSERT INTO `admin_user` VALUES (1, 'admin', 'pbkdf2:sha256:150000$raM7mDSr$58fe069c3eac01531fc8af85e6fc200655dd2588090530084d182e6ec9d52c85', NULL, '2021-06-01 17:28:55', 1, '超级管理', '要是不能把握时机,就要终身蹭蹬,一事无成!', 'http://127.0.0.1:5000/_uploads/photos/1617291580000.jpg', 1);
INSERT INTO `admin_user` VALUES (7, 'test', 'pbkdf2:sha256:150000$cRS8bYNh$adb57e64d929863cf159f924f74d0634f1fecc46dba749f1bfaca03da6d2e3ac', '2021-03-22 20:03:42', '2021-06-01 17:29:47', 1, '超级管理', '要是不能把握时机,就要终身蹭蹬,一事无成', '/static/admin/admin/images/avatar.jpg', 1);
INSERT INTO `admin_user` VALUES (8, 'wind', 'pbkdf2:sha256:150000$skME1obT$6a2c20cd29f89d7d2f21d9e373a7e3445f70ebce3ef1c3a555e42a7d17170b37', '2021-06-01 17:30:39', '2021-06-01 17:30:52', 1, '', NULL, '/static/admin/admin/images/avatar.jpg', 7);
-- ----------------------------
-- Table structure for admin_user_role
@@ -259,13 +300,14 @@ CREATE TABLE `admin_user_role` (
INDEX `user_id`(`user_id`) USING BTREE,
CONSTRAINT `admin_user_role_ibfk_1` FOREIGN KEY (`role_id`) REFERENCES `admin_role` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `admin_user_role_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `admin_user` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 18 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = DYNAMIC;
) ENGINE = InnoDB AUTO_INCREMENT = 25 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of admin_user_role
-- ----------------------------
INSERT INTO `admin_user_role` VALUES (14, 1, 1);
INSERT INTO `admin_user_role` VALUES (17, 7, 2);
INSERT INTO `admin_user_role` VALUES (21, 1, 1);
INSERT INTO `admin_user_role` VALUES (22, 7, 2);
INSERT INTO `admin_user_role` VALUES (24, 8, 2);
-- ----------------------------
-- Table structure for alembic_version
@@ -279,6 +321,6 @@ CREATE TABLE `alembic_version` (
-- ----------------------------
-- Records of alembic_version
-- ----------------------------
INSERT INTO `alembic_version` VALUES ('ec21e19825ff');
INSERT INTO `alembic_version` VALUES ('7634e028e338');
SET FOREIGN_KEY_CHECKS = 1;
+28
View File
@@ -0,0 +1,28 @@
"""empty message
Revision ID: 7634e028e338
Revises: 8b664608a7c7
Create Date: 2021-06-01 16:43:50.853692
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '7634e028e338'
down_revision = '8b664608a7c7'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column('admin_user', sa.Column('dept_id', sa.Integer(), nullable=True, comment='部门id'))
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_column('admin_user', 'dept_id')
# ### end Alembic commands ###
+42
View File
@@ -0,0 +1,42 @@
"""empty message
Revision ID: 8b664608a7c7
Revises: ec21e19825ff
Create Date: 2021-06-01 14:37:20.327189
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '8b664608a7c7'
down_revision = 'ec21e19825ff'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.create_table('admin_dept',
sa.Column('id', sa.Integer(), nullable=False, comment='部门ID'),
sa.Column('parent_id', sa.Integer(), nullable=True, comment='父级编号'),
sa.Column('dept_name', sa.String(length=50), nullable=True, comment='部门名称'),
sa.Column('sort', sa.Integer(), nullable=True, comment='排序'),
sa.Column('leader', sa.String(length=50), nullable=True, comment='负责人'),
sa.Column('phone', sa.String(length=20), nullable=True, comment='联系方式'),
sa.Column('email', sa.String(length=50), nullable=True, comment='邮箱'),
sa.Column('status', sa.Integer(), nullable=True, comment='状态(1开启,0关闭)'),
sa.Column('remark', sa.Text(), nullable=True, comment='备注'),
sa.Column('address', sa.String(length=255), nullable=True, comment='详细地址'),
sa.Column('create_at', sa.DateTime(), nullable=True, comment='创建时间'),
sa.Column('update_at', sa.DateTime(), nullable=True, comment='创建时间'),
sa.PrimaryKeyConstraint('id')
)
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_table('admin_dept')
# ### end Alembic commands ###
+58
View File
@@ -0,0 +1,58 @@
.dept-tree {
width: 100%;
height: -webkit-calc(100vh - 247px);
height: -moz-calc(100vh - 247px);
height: calc(100vh - 247px);
margin-top: 20px;
}
.dtree-laySimple-item-this{
background-color: transparent!important;
}
.dtree-nav-div:hover{
background-color: transparent!important;
}
.button{
margin-top: 10px;
width: 94%;
margin-left: 3%;
display: block;
height: 40px;
line-height: 40px;
padding: 0 15px;
white-space: nowrap;
text-align: center;
font-size: 14.5px;
border: none;
cursor: pointer;
box-sizing: border-box;
display:inline-block;
outline: 0;
border-radius: 2px;
-webkit-appearance: none;
box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.15);
}
.button-primary{
background-color: #5FB878;
color: white;
}
.button-default{
color: #2f495e;
background-color: #edf2f7;
}
.user-main{
width: calc(100% - 312px);
float: right;
}
.user-left{
width: 300px;
float: left;
}
.user-collasped.user-main{
width: 100%;
}
.user-collasped.user-left{
width: 0px;
}
.user-collasped.user-left .user-group{
display: none;
}
+2
View File
@@ -0,0 +1,2 @@
<script src="{{ url_for('static', filename='/admin/component/layui/layui.js') }}"></script>
<script src="{{ url_for('static', filename='/admin/component/pear/pear.js') }}"></script>
+5
View File
@@ -0,0 +1,5 @@
<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="{{ url_for('static', filename='/admin/component/pear/css/pear.css') }}" />
+125
View File
@@ -0,0 +1,125 @@
<!DOCTYPE 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="main-container">
<div class="layui-form-item">
<label class="layui-form-label">上级部门</label>
<div class="layui-input-block">
<ul id="selectParent" name="parentId" class="dtree" data-id="0"></ul>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">名称</label>
<div class="layui-input-block">
<input type="text" name="deptName" lay-verify="title" autocomplete="off" placeholder="请输入标题"
class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">负责人</label>
<div class="layui-input-block">
<input type="text" name="leader" lay-verify="title" autocomplete="off" placeholder="请输入标题"
class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">邮箱</label>
<div class="layui-input-block">
<input type="text" name="email" lay-verify="title" autocomplete="off" placeholder="请输入标题"
class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">联系方式</label>
<div class="layui-input-block">
<input type="text" name="phone" lay-verify="title" autocomplete="off" placeholder="请输入标题"
class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">状态</label>
<div class="layui-input-block">
<input type="radio" name="status" value="1" title="开启">
<input type="radio" name="status" value="0" title="关闭" checked>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">排序</label>
<div class="layui-input-block">
<input type="text" name="sort" lay-verify="title" autocomplete="off" placeholder="请输入标题"
class="layui-input">
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">详细地址</label>
<div class="layui-input-block">
<textarea placeholder="请输入描述" name="address" class="layui-textarea"></textarea>
</div>
</div>
</div>
</div>
</div>
<div class="bottom">
<div class="button-container">
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit="" lay-filter="dept-save">
<i class="layui-icon layui-icon-ok"></i>
提交
</button>
<button type="reset" class="pear-btn pear-btn-sm">
<i class="layui-icon layui-icon-refresh"></i>
重置
</button>
</div>
</div>
</form>
{% include 'admin/common/footer.html' %}
<script>
layui.use(['form', 'jquery','dtree'], function () {
let form = layui.form;
let $ = layui.jquery;
let dtree = layui.dtree;
dtree.renderSelect({
elem: "#selectParent",
url: "/admin/dept/tree",
method: 'get',
selectInputName: {nodeId: "parentId", context: "parentName"},
skin: "layui",
dataFormat: "list",
response: {treeId: "deptId", parentId: "parentId", title: "deptName"},
selectInitVal: "1"
});
form.on('submit(dept-save)', function (data) {
$.ajax({
url: '/admin/dept/save',
data: JSON.stringify(data.field),
dataType: 'json',
contentType: 'application/json',
type: 'post',
success: function (result) {
if (result.success) {
layer.msg(result.msg, {icon: 1, time: 1000}, function () {
parent.layer.close(parent.layer.getFrameIndex(window.name));
parent.render();
});
} else {
layer.msg(result.msg, {icon: 2, time: 1000});
}
}
})
return false;
});
})
</script>
<script>
</script>
</body>
</html>
+119
View File
@@ -0,0 +1,119 @@
<!DOCTYPE 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="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="title"
autocomplete="off" placeholder="请输入标题" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">名称</label>
<div class="layui-input-block">
<input type="text" value="{{ dept.dept_name }}" name="deptName" lay-verify="title"
autocomplete="off" placeholder="请输入标题" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">负责人</label>
<div class="layui-input-block">
<input type="text" value="{{ dept.leader }}" name="leader" lay-verify="title" autocomplete="off" placeholder="请输入标题"
class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">邮箱</label>
<div class="layui-input-block">
<input type="text" value="{{ dept.email }}" name="email" lay-verify="title" autocomplete="off" placeholder="请输入标题"
class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">联系方式</label>
<div class="layui-input-block">
<input type="text" value="{{ dept.phone }}" name="phone" lay-verify="title" autocomplete="off" placeholder="请输入标题"
class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">状态</label>
<div class="layui-input-block">
<input type="radio" name="status"{% if dept.status == 1 %}checked{% endif %} value="0" title="开启">
<input type="radio" name="status" {% if dept.status == 0 %}checked{% endif %} value="1" 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="title" autocomplete="off" placeholder="请输入标题"
class="layui-input">
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">描述</label>
<div class="layui-input-block">
<textarea placeholder="请输入详细地址" name="address"
class="layui-textarea">{{ dept.address }}</textarea>
</div>
</div>
</div>
</div>
</div>
<div class="bottom">
<div class="button-container">
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit=""
lay-filter="dept-update">
<i class="layui-icon layui-icon-ok"></i>
提交
</button>
<button type="reset" class="pear-btn pear-btn-sm">
<i class="layui-icon layui-icon-refresh"></i>
重置
</button>
</div>
</div>
</form>
{% include 'admin/common/footer.html' %}
<script>
layui.use(['form', 'jquery'], function () {
let form = layui.form;
let $ = layui.jquery;
form.on('submit(dept-update)', function (data) {
$.ajax({
url: '/admin/dept/update',
data: JSON.stringify(data.field),
dataType: 'json',
contentType: 'application/json',
type: 'put',
success: function (result) {
if (result.success) {
layer.msg(result.msg, {icon: 1, time: 1000}, function () {
parent.layer.close(parent.layer.getFrameIndex(window.name));//关闭当前页
parent.render();
});
} else {
layer.msg(result.msg, {icon: 2, time: 1000});
}
}
})
return false;
});
})
</script>
<script>
</script>
</body>
</html>
+225
View File
@@ -0,0 +1,225 @@
<!DOCTYPE html>
<html>
<head>
<title>部门新增</title>
{% include 'admin/common/header.html' %}
</head>
<body class="pear-container">
<div class="layui-card">
<div class="layui-card-body">
<form class="layui-form" action="">
<div class="layui-form-item">
<label class="layui-form-label">部门名称</label>
<div class="layui-input-inline">
<input type="text" name="deptName" placeholder="" class="layui-input">
</div>
<button class="pear-btn pear-btn-md pear-btn-primary" lay-submit lay-filter="dept-query">
<i class="layui-icon layui-icon-search"></i>
查询
</button>
<button type="reset" class="pear-btn pear-btn-md">
<i class="layui-icon layui-icon-refresh"></i>
重置
</button>
</div>
</form>
</div>
</div>
<div class="layui-card">
<div class="layui-card-body">
<table id="dept-table" lay-filter="dept-table"></table>
</div>
</div>
<script type="text/html" id="dept-toolbar">
{% if authorize("admin:dept:edit") %}
<button class="pear-btn pear-btn-primary pear-btn-md" lay-event="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="batchRemove">
<i class="layui-icon layui-icon-delete"></i>
删除
</button>
{% endif %}
</script>
<script type="text/html" id="dept-bar">
{% if authorize("admin:dept:edit") %}
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>
</button>
{% endif %}
{% if authorize("admin:dept:remove") %}
<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="remove"><i class="layui-icon layui-icon-delete"></i>
</button>
{% endif %}
</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>
</body>
{% include 'admin/common/footer.html' %}
<script>
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;
let MODULE_PATH = "/admin/dept/";
window.render = function () {
treetable.render({
treeColIndex: 1,
treeSpid: 0,
treeIdName: 'deptId',
treePidName: 'parentId',
skin: 'line',
method: 'post',
treeDefaultClose: false,
toolbar: '#dept-toolbar',
elem: '#dept-table',
url: '/admin/dept/data',
page: false,
cols: [
[
{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: '#dept-bar', width: 120, align: 'center'}
]
]
});
}
form.on('submit(dept-query)', function (data) {
var keyword = data.field.deptName;
var $tds = $('#dept-table').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('#dept-table');
}
return false;
});
render();
table.on('tool(dept-table)', function (obj) {
if (obj.event === 'remove') {
window.remove(obj);
} else if (obj.event === 'edit') {
window.edit(obj);
}
})
table.on('toolbar(dept-table)', function (obj) {
if (obj.event === 'add') {
window.add();
} else if (obj.event === 'refresh') {
window.refresh();
} else if (obj.event === 'batchRemove') {
window.batchRemove(obj);
}
});
form.on('switch(dept-enable)', function (obj) {
let operate;
if (obj.elem.checked) {
operate = "enable";
} else {
operate = "disable";
}
let loading = layer.load();
$.ajax({
url: '/admin/dept/' + operate,
data: JSON.stringify({deptId: this.value}),
dataType: 'json',
contentType: 'application/json',
type: 'put',
success: function (result) {
layer.close(loading);
if (result.success) {
popup.success(result.msg);
} else {
popup.failure(result.msg);
}
}
})
});
window.add = function () {
layer.open({
type: 2,
title: '新增',
shade: 0.1,
area: ['450px', '500px'],
content: MODULE_PATH + 'add'
});
}
window.edit = function (obj) {
layer.open({
type: 2,
title: '修改',
shade: 0.1,
area: ['450px', '500px'],
content: MODULE_PATH + 'edit?deptId=' + obj.data['deptId']
});
}
window.remove = function (obj) {
layer.confirm('确定要删除该部门', {icon: 3, title: '提示'}, function (index) {
layer.close(index);
let loading = layer.load();
$.ajax({
url: MODULE_PATH + "remove/" + obj.data['deptId'],
dataType: 'json',
type: 'delete',
success: function (result) {
layer.close(loading);
if (result.success) {
popup.success(result.msg, function () {
obj.del();
});
} else {
popup.failure(result.msg);
}
}
})
});
}
})
</script>
</html>
+1 -1
View File
@@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<html>
<head>
<meta charset="utf-8">
<title>用户管理</title>
+19 -1
View File
@@ -33,6 +33,12 @@
class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">部门</label>
<div class="layui-input-block">
<ul id="selectParent" name="deptId" class="dtree" data-id="0"></ul>
</div>
</div>
<div class="layui-form-item">
@@ -67,9 +73,21 @@
<script src="{{ url_for('static', filename='/admin/component/layui/layui.js') }}"></script>
<script src="{{ url_for('static', filename='/admin/component/pear/pear.js') }}"></script>
<script>
layui.use(['form', 'jquery'], function () {
layui.use(['form', 'jquery','dtree'], function () {
let form = layui.form;
let $ = layui.jquery;
let dtree = layui.dtree;
dtree.renderSelect({
elem: "#selectParent",
url: "/admin/dept/tree",
method: 'get',
selectInputName: {nodeId: "deptId", context: "deptName"},
skin: "layui",
dataFormat: "list",
response: {treeId: "deptId", parentId: "parentId", title: "deptName"},
selectInitVal: "{{ user.dept_id }}"
});
form.on('submit(user-update)', function (data) {
let roleIds = "";
$('input[type=checkbox]:checked').each(function () {
+30 -4
View File
@@ -3,7 +3,8 @@
<head>
<meta charset="utf-8">
<title>用户管理</title>
<link rel="stylesheet" href="{{ url_for('static', filename='/admin/component/pear/css/pear.css') }}" />
{% include 'admin/common/header.html' %}
<link rel="stylesheet" href="{{ url_for('static', filename='/admin/admin/css/other/user.css') }}" />
</head>
<body class="pear-container">
<div class="layui-card">
@@ -33,6 +34,8 @@
<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>
@@ -60,7 +63,11 @@
<i class="pear-icon pear-icon-ashbin"></i>
删除
</button>
{% endif %}
{% endif %}
<button class="pear-btn pear-btn-md" lay-event="collasped">
<i class="pear-icon pear-icon-modular"></i>
高级
</button>
</script>
<script type="text/html" id="user-bar">
@@ -88,12 +95,13 @@
<script src="{{ url_for('static', filename='/admin/component/layui/layui.js') }}"></script>
<script src="{{ url_for('static', filename='/admin/component/pear/pear.js') }}"></script>
<script>
layui.use(['table','form', 'jquery','popup','common'], function () {
layui.use(['table', 'dtree','form', 'jquery','popup','common'], function () {
let table = layui.table;
let form = layui.form;
let $ = layui.jquery;
let dtree = layui.dtree;
let popup = layui.popup;
let common = layui.common;
let MODULE_PATH = "/admin/user/";
let cols = [
@@ -103,6 +111,7 @@
{% endif %}
{title: '姓名', field: 'realname', align: 'center', width: 110},
{title: '账号', field: 'username', align: 'center'},
{title: '部门', field: 'dept', align: 'center'},
{title: '启用', field: 'enable', align: 'center', templet: '#user-enable',width: 120},
{title: '注册时间', field: 'create_at', templet: '#user-createTime', align: 'center'},
{title: '更新时间', field: 'update_at', templet: '#user-updateTime', align: 'center'},
@@ -123,6 +132,23 @@
});
dtree.render({
elem: "#dept-tree",
method: "get",
url: "/admin/dept/tree",
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);
});