修改目录结构2
This commit is contained in:
@@ -1,4 +1,3 @@
|
|||||||
from flask import escape
|
|
||||||
from applications.extensions import db
|
from applications.extensions import db
|
||||||
from applications.models.rights.power import Power, PowerSchema2
|
from applications.models.rights.power import Power, PowerSchema2
|
||||||
from applications.models import Role
|
from applications.models import Role
|
||||||
@@ -21,14 +20,14 @@ def select_parent():
|
|||||||
|
|
||||||
# 增加权限
|
# 增加权限
|
||||||
def save_power(req):
|
def save_power(req):
|
||||||
icon = escape(req.get("icon"))
|
icon = req.get("icon")
|
||||||
openType = escape(req.get("openType"))
|
openType = req.get("openType")
|
||||||
parentId = escape(req.get("parentId"))
|
parentId = req.get("parentId")
|
||||||
powerCode = escape(req.get("powerCode"))
|
powerCode = req.get("powerCode")
|
||||||
powerName = escape(req.get("powerName"))
|
powerName = req.get("powerName")
|
||||||
powerType = escape(req.get("powerType"))
|
powerType = req.get("powerType")
|
||||||
powerUrl = escape(req.get("powerUrl"))
|
powerUrl = req.get("powerUrl")
|
||||||
sort = escape(req.get("sort"))
|
sort = req.get("sort")
|
||||||
power = Power(
|
power = Power(
|
||||||
icon=icon,
|
icon=icon,
|
||||||
open_type=openType,
|
open_type=openType,
|
||||||
@@ -55,14 +54,14 @@ def get_power_by_id(id):
|
|||||||
def update_power(req_json):
|
def update_power(req_json):
|
||||||
id = req_json.get("powerId")
|
id = req_json.get("powerId")
|
||||||
data = {
|
data = {
|
||||||
"icon": escape(req_json.get("icon")),
|
"icon": req_json.get("icon"),
|
||||||
"open_type": escape(req_json.get("openType")),
|
"open_type": req_json.get("openType"),
|
||||||
"parent_id": escape(req_json.get("parentId")),
|
"parent_id": req_json.get("parentId"),
|
||||||
"code": escape(req_json.get("powerCode")),
|
"code": req_json.get("powerCode"),
|
||||||
"name": escape(req_json.get("powerName")),
|
"name": req_json.get("powerName"),
|
||||||
"type": escape(req_json.get("powerType")),
|
"type": req_json.get("powerType"),
|
||||||
"url": escape(req_json.get("powerUrl")),
|
"url": req_json.get("powerUrl"),
|
||||||
"sort": escape(req_json.get("sort"))
|
"sort": req_json.get("sort")
|
||||||
}
|
}
|
||||||
# print(data)
|
# print(data)
|
||||||
power = Power.query.filter_by(id=id).update(data)
|
power = Power.query.filter_by(id=id).update(data)
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
|
import json
|
||||||
|
|
||||||
from flask import Flask
|
from flask import Flask
|
||||||
|
|
||||||
|
from applications.extensions.init_databases.data import user_data
|
||||||
|
|
||||||
|
|
||||||
def add_data(fields, data_list, obj):
|
def add_data(fields, data_list, obj):
|
||||||
from applications.extensions import db
|
from applications.extensions import db
|
||||||
@@ -284,6 +288,27 @@ def create_example():
|
|||||||
add_data(_fields, _data_list, DictData)
|
add_data(_fields, _data_list, DictData)
|
||||||
|
|
||||||
|
|
||||||
|
course_data = [
|
||||||
|
{'id': 1, 'name': '基础课'},
|
||||||
|
{'id': 2, 'name': '进阶课'},
|
||||||
|
{'id': 3, 'name': '爬虫课'},
|
||||||
|
{'id': 4, 'name': '数据分析课'},
|
||||||
|
{'id': 5, 'name': '全栈课程'},
|
||||||
|
{'id': 6, 'name': '自动化办公专题'},
|
||||||
|
{'id': 7, 'name': '反反爬专题'},
|
||||||
|
{'id': 8, 'name': 'JavaScript解密专题'},
|
||||||
|
{'id': 9, 'name': 'Scrapy框架专题'},
|
||||||
|
]
|
||||||
|
|
||||||
|
phase_data = [
|
||||||
|
{'name': '基础课'},
|
||||||
|
{'name': '进阶'},
|
||||||
|
{'name': '爬虫'},
|
||||||
|
{'name': '数据分析'},
|
||||||
|
{'name': '全栈课程'}
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
def register_script(app: Flask):
|
def register_script(app: Flask):
|
||||||
@app.cli.command()
|
@app.cli.command()
|
||||||
def init_db():
|
def init_db():
|
||||||
@@ -302,3 +327,110 @@ def register_script(app: Flask):
|
|||||||
from applications.extensions import db
|
from applications.extensions import db
|
||||||
db.drop_all()
|
db.drop_all()
|
||||||
db.create_all()
|
db.create_all()
|
||||||
|
|
||||||
|
@app.cli.command()
|
||||||
|
def init_vip_member():
|
||||||
|
from applications.models.vip import VipMember, Course, Phase
|
||||||
|
from applications.extensions import db
|
||||||
|
|
||||||
|
course_list = []
|
||||||
|
|
||||||
|
for data in course_data:
|
||||||
|
course = Course()
|
||||||
|
course.name = data.get('name')
|
||||||
|
db.session.add(course)
|
||||||
|
course_list.append(course_list)
|
||||||
|
|
||||||
|
for _phase in phase_data:
|
||||||
|
for i in range(1, 11):
|
||||||
|
print(_phase['name'], i)
|
||||||
|
phase = Phase()
|
||||||
|
phase.name = _phase['name']
|
||||||
|
phase.phase = i
|
||||||
|
db.session.add(phase)
|
||||||
|
|
||||||
|
db.session.commit()
|
||||||
|
base_course = Course.query.get(1)
|
||||||
|
adv_course = Course.query.get(2)
|
||||||
|
spider_course = Course.query.get(3)
|
||||||
|
ana_course = Course.query.get(4)
|
||||||
|
stack_course = Course.query.get(5)
|
||||||
|
|
||||||
|
for data in user_data:
|
||||||
|
user = VipMember()
|
||||||
|
user.id = int(data['id'])
|
||||||
|
user.create_at = data['date']
|
||||||
|
user.username = data['name']
|
||||||
|
user.wx = data['wx']
|
||||||
|
user.qq = data['qq']
|
||||||
|
user.account = data['account']
|
||||||
|
user.phase = int(data['phase'])
|
||||||
|
user.remark = data['remark']
|
||||||
|
print('rights', data['rights'])
|
||||||
|
rights = int(data['rights']) if data['rights'] else 0
|
||||||
|
|
||||||
|
user.courses.append(base_course)
|
||||||
|
if rights == 1:
|
||||||
|
user.courses.append(adv_course)
|
||||||
|
if rights == 3:
|
||||||
|
user.courses.append(spider_course)
|
||||||
|
if rights == 4:
|
||||||
|
user.courses.append(adv_course)
|
||||||
|
user.courses.append(base_course)
|
||||||
|
if rights == 5:
|
||||||
|
user.courses.append(ana_course)
|
||||||
|
if rights == 7:
|
||||||
|
user.courses.append(stack_course)
|
||||||
|
if rights == 8:
|
||||||
|
user.courses.append(spider_course)
|
||||||
|
user.courses.append(ana_course)
|
||||||
|
if rights == 9:
|
||||||
|
user.courses.append(adv_course)
|
||||||
|
user.courses.append(spider_course)
|
||||||
|
user.courses.append(ana_course)
|
||||||
|
if rights == 10:
|
||||||
|
user.courses.append(spider_course)
|
||||||
|
user.courses.append(stack_course)
|
||||||
|
if rights == 11:
|
||||||
|
user.courses.append(adv_course)
|
||||||
|
user.courses.append(spider_course)
|
||||||
|
user.courses.append(stack_course)
|
||||||
|
if rights == 16:
|
||||||
|
user.courses.append(adv_course)
|
||||||
|
user.courses.append(spider_course)
|
||||||
|
user.courses.append(ana_course)
|
||||||
|
user.courses.append(stack_course)
|
||||||
|
|
||||||
|
if data['base']:
|
||||||
|
base_list = data['base'].replace(',', ',').split(',')
|
||||||
|
print(base_list)
|
||||||
|
for rou in base_list:
|
||||||
|
print('rou', rou)
|
||||||
|
x = Phase.query.filter(Phase.name == '基础课').filter(Phase.phase == int(rou)).first()
|
||||||
|
user.phases.append(x)
|
||||||
|
print(x)
|
||||||
|
if data['adv']:
|
||||||
|
adv_list = data['adv'].replace(',', ',').split(',')
|
||||||
|
for rou in adv_list:
|
||||||
|
x = Phase.query.filter(Phase.name == '高级开发').filter(Phase.phase == int(rou)).first()
|
||||||
|
user.phases.append(x)
|
||||||
|
print(adv_list)
|
||||||
|
if data['spider']:
|
||||||
|
spider_list = data['spider'].replace(',', ',').split(',')
|
||||||
|
for rou in spider_list:
|
||||||
|
x = Phase.query.filter(Phase.name == '爬虫').filter(Phase.phase == int(rou)).first()
|
||||||
|
user.phases.append(x)
|
||||||
|
print(spider_list)
|
||||||
|
if data['ana']:
|
||||||
|
ana_list = data['ana'].replace(',', ',').split(',')
|
||||||
|
for rou in ana_list:
|
||||||
|
x = Phase.query.filter(Phase.name == '数据分析').filter(Phase.phase == int(rou)).first()
|
||||||
|
user.phases.append(x)
|
||||||
|
print(ana_list)
|
||||||
|
if data['stack']:
|
||||||
|
stack_list = data['stack'].replace(',', ',').split(',')
|
||||||
|
for rou in stack_list:
|
||||||
|
x = Phase.query.filter(Phase.name == '全栈课程').filter(Phase.phase == int(rou)).first()
|
||||||
|
user.phases.append(x)
|
||||||
|
print(stack_list)
|
||||||
|
db.session.commit()
|
||||||
|
|||||||
@@ -6,3 +6,4 @@ from applications.models.rights.power import Power, PowerSchema, PowerSchema2
|
|||||||
from applications.models.rights.role import Role, RoleSchema
|
from applications.models.rights.role import Role, RoleSchema
|
||||||
from applications.models.rights.role_power import role_power
|
from applications.models.rights.role_power import role_power
|
||||||
from applications.models.rights.user_role import user_role
|
from applications.models.rights.user_role import user_role
|
||||||
|
from applications.models.vip import VipMember, Course, Phase, course_phase, member_phase
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ class User(db.Model, UserMixin):
|
|||||||
dept_id = db.Column(db.Integer, comment='部门id')
|
dept_id = db.Column(db.Integer, comment='部门id')
|
||||||
create_at = db.Column(db.DateTime, default=datetime.datetime.now, 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='创建时间')
|
update_at = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='创建时间')
|
||||||
|
|
||||||
role = db.relationship('Role', secondary="rt_user_role", backref=db.backref('user'), lazy='dynamic')
|
role = db.relationship('Role', secondary="rt_user_role", backref=db.backref('user'), lazy='dynamic')
|
||||||
|
|
||||||
def set_password(self, password):
|
def set_password(self, password):
|
||||||
|
|||||||
@@ -0,0 +1,62 @@
|
|||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from applications.extensions import db
|
||||||
|
|
||||||
|
|
||||||
|
class VipMember(db.Model):
|
||||||
|
__tablename__ = 'vip_member'
|
||||||
|
|
||||||
|
id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='VIP用户ID')
|
||||||
|
username = db.Column(db.String(20), comment='用户名')
|
||||||
|
mobile = db.Column(db.String(11), comment='电话号码')
|
||||||
|
id_card = db.Column(db.String(16), comment='身份证号码')
|
||||||
|
wx = db.Column(db.String(50), comment='微信号')
|
||||||
|
qq = db.Column(db.String(20), comment='QQ号')
|
||||||
|
account = db.Column(db.String(50), comment='报名账号')
|
||||||
|
number = db.Column(db.String(12), comment='学号')
|
||||||
|
phase = db.Column(db.SMALLINT, comment='第几期')
|
||||||
|
|
||||||
|
avatar = db.Column(db.String(255), comment='头像', default="/static/admin/admin/images/avatar.jpg")
|
||||||
|
|
||||||
|
remark = db.Column(db.String(255), comment='备注')
|
||||||
|
password_hash = db.Column(db.String(128), comment='哈希密码')
|
||||||
|
enable = db.Column(db.Integer, default=0, comment='启用')
|
||||||
|
|
||||||
|
create_at = db.Column(db.DateTime, default=datetime.now, comment='创建时间')
|
||||||
|
update_at = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
|
||||||
|
|
||||||
|
courses = db.relationship('Course', secondary="vip_member_course", backref=db.backref('members'), lazy='dynamic')
|
||||||
|
phases = db.relationship('Phase', secondary="vip_member_phase", backref=db.backref('members'), lazy='dynamic')
|
||||||
|
|
||||||
|
|
||||||
|
class Course(db.Model):
|
||||||
|
__tablename__ = 'vip_course'
|
||||||
|
|
||||||
|
id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='课程id')
|
||||||
|
name = db.Column(db.String(20), comment='课程名')
|
||||||
|
|
||||||
|
|
||||||
|
class Phase(db.Model):
|
||||||
|
__tablename__ = 'vip_phase'
|
||||||
|
|
||||||
|
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
|
||||||
|
name = db.Column(db.String(20), comment='课程名')
|
||||||
|
phase = db.Column(db.Integer, comment='第几期')
|
||||||
|
teacher = db.Column(db.String(20), comment='带课讲师')
|
||||||
|
|
||||||
|
|
||||||
|
# 创建中间表
|
||||||
|
member_phase = db.Table(
|
||||||
|
"vip_member_phase", # 中间表名称
|
||||||
|
db.Column("id", db.Integer, primary_key=True, autoincrement=True, comment='标识'), # 主键
|
||||||
|
db.Column("member_id", db.Integer, db.ForeignKey("vip_member.id"), comment='用户编号'), # 属性 外键
|
||||||
|
db.Column("phase_id", db.Integer, db.ForeignKey("vip_phase.id"), comment='期数编号'), # 属性 外键
|
||||||
|
)
|
||||||
|
|
||||||
|
# 创建中间表
|
||||||
|
course_phase = db.Table(
|
||||||
|
"vip_member_course", # 中间表名称
|
||||||
|
db.Column("id", db.Integer, primary_key=True, autoincrement=True, comment='标识'), # 主键
|
||||||
|
db.Column("member_id", db.Integer, db.ForeignKey("vip_member.id"), comment='用户编号'), # 属性 外键
|
||||||
|
db.Column("course_id", db.Integer, db.ForeignKey("vip_course.id"), comment='期数编号'), # 属性 外键
|
||||||
|
)
|
||||||
+2
-2
@@ -2024,7 +2024,7 @@ window.tinymce.Resource.add("tinymce.plugins.emoticons", {
|
|||||||
category: "people"
|
category: "people"
|
||||||
},
|
},
|
||||||
school_satchel: {
|
school_satchel: {
|
||||||
keywords: [ "student", "education", "bag", "backpack" ],
|
keywords: [ "vip", "education", "bag", "backpack" ],
|
||||||
"char": '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf92" src="1f392.png"/>',
|
"char": '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udf92" src="1f392.png"/>',
|
||||||
fitzpatrick_scale: false,
|
fitzpatrick_scale: false,
|
||||||
category: "people"
|
category: "people"
|
||||||
@@ -5012,7 +5012,7 @@ window.tinymce.Resource.add("tinymce.plugins.emoticons", {
|
|||||||
category: "travel_and_places"
|
category: "travel_and_places"
|
||||||
},
|
},
|
||||||
school: {
|
school: {
|
||||||
keywords: [ "building", "student", "education", "learn", "teach" ],
|
keywords: [ "building", "vip", "education", "learn", "teach" ],
|
||||||
"char": '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfeb" src="1f3eb.png"/>',
|
"char": '<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="\ud83c\udfeb" src="1f3eb.png"/>',
|
||||||
fitzpatrick_scale: false,
|
fitzpatrick_scale: false,
|
||||||
category: "travel_and_places"
|
category: "travel_and_places"
|
||||||
|
|||||||
+1
-1
File diff suppressed because one or more lines are too long
+2
-2
@@ -2011,7 +2011,7 @@ window.tinymce.Resource.add("tinymce.plugins.emoticons", {
|
|||||||
category: "people"
|
category: "people"
|
||||||
},
|
},
|
||||||
school_satchel: {
|
school_satchel: {
|
||||||
keywords: [ "student", "education", "bag", "backpack" ],
|
keywords: [ "vip", "education", "bag", "backpack" ],
|
||||||
"char": "\ud83c\udf92",
|
"char": "\ud83c\udf92",
|
||||||
fitzpatrick_scale: false,
|
fitzpatrick_scale: false,
|
||||||
category: "people"
|
category: "people"
|
||||||
@@ -4999,7 +4999,7 @@ window.tinymce.Resource.add("tinymce.plugins.emoticons", {
|
|||||||
category: "travel_and_places"
|
category: "travel_and_places"
|
||||||
},
|
},
|
||||||
school: {
|
school: {
|
||||||
keywords: [ "building", "student", "education", "learn", "teach" ],
|
keywords: [ "building", "vip", "education", "learn", "teach" ],
|
||||||
"char": "\ud83c\udfeb",
|
"char": "\ud83c\udfeb",
|
||||||
fitzpatrick_scale: false,
|
fitzpatrick_scale: false,
|
||||||
category: "travel_and_places"
|
category: "travel_and_places"
|
||||||
|
|||||||
Vendored
+1
-1
File diff suppressed because one or more lines are too long
@@ -12,6 +12,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">
|
||||||
|
{#渲染树形选择器#}
|
||||||
<ul id="selectParent" name="parentId" class="dtree" data-id="0"></ul>
|
<ul id="selectParent" name="parentId" class="dtree" data-id="0"></ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -86,6 +87,7 @@
|
|||||||
let $ = layui.jquery
|
let $ = layui.jquery
|
||||||
let dtree = layui.dtree
|
let dtree = layui.dtree
|
||||||
|
|
||||||
|
/*渲染下拉选择组件*/
|
||||||
dtree.renderSelect({
|
dtree.renderSelect({
|
||||||
elem: '#selectParent',
|
elem: '#selectParent',
|
||||||
url: '/dept/tree',
|
url: '/dept/tree',
|
||||||
@@ -97,6 +99,7 @@
|
|||||||
selectInitVal: '1'
|
selectInitVal: '1'
|
||||||
})
|
})
|
||||||
|
|
||||||
|
/*表单组件,提交按钮之后触发的事件*/
|
||||||
form.on('submit(dept-save)', function (data) {
|
form.on('submit(dept-save)', function (data) {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: '/dept/save',
|
url: '/dept/save',
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
</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">x`
|
<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="title" autocomplete="off"
|
||||||
placeholder="请输入标题"
|
placeholder="请输入标题"
|
||||||
class="layui-input">
|
class="layui-input">
|
||||||
|
|||||||
@@ -4,19 +4,24 @@
|
|||||||
<title>部门新增</title>
|
<title>部门新增</title>
|
||||||
{% include 'admin/common/header.html' %}
|
{% include 'admin/common/header.html' %}
|
||||||
</head>
|
</head>
|
||||||
|
{#pear 后台边框#}
|
||||||
<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">
|
||||||
<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>
|
</div>
|
||||||
|
{#查询按钮--需要触发layui事件#}
|
||||||
<button class="pear-btn pear-btn-md pear-btn-primary" lay-submit lay-filter="dept-query">
|
<button class="pear-btn pear-btn-md pear-btn-primary" lay-submit lay-filter="dept-query">
|
||||||
<i class="layui-icon layui-icon-search"></i>
|
<i class="layui-icon layui-icon-search"></i>
|
||||||
查询
|
查询
|
||||||
</button>
|
</button>
|
||||||
|
{#重置按钮#}
|
||||||
<button type="reset" class="pear-btn pear-btn-md">
|
<button type="reset" class="pear-btn pear-btn-md">
|
||||||
<i class="layui-icon layui-icon-refresh"></i>
|
<i class="layui-icon layui-icon-refresh"></i>
|
||||||
重置
|
重置
|
||||||
@@ -28,10 +33,12 @@
|
|||||||
|
|
||||||
<div class="layui-card">
|
<div class="layui-card">
|
||||||
<div class="layui-card-body">
|
<div class="layui-card-body">
|
||||||
|
{#表格字段渲染#}
|
||||||
<table id="dept-table" lay-filter="dept-table"></table>
|
<table id="dept-table" lay-filter="dept-table"></table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{#表格工具栏,需要在表格中绑定,且需要自定义事件#}
|
||||||
<script type="text/html" id="dept-toolbar">
|
<script type="text/html" id="dept-toolbar">
|
||||||
{% if authorize("admin:dept:edit") %}
|
{% if authorize("admin:dept:edit") %}
|
||||||
<button class="pear-btn pear-btn-primary pear-btn-md" lay-event="add">
|
<button class="pear-btn pear-btn-primary pear-btn-md" lay-event="add">
|
||||||
@@ -47,19 +54,17 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
{#操作字段,需要在表格中使用#}
|
||||||
<script type="text/html" id="dept-bar">
|
<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">
|
||||||
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="edit"><i
|
<i class="layui-icon layui-icon-edit"></i>
|
||||||
class="layui-icon layui-icon-edit"></i>
|
</button>
|
||||||
</button>
|
<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="remove">
|
||||||
{% endif %}
|
<i class="layui-icon layui-icon-delete"></i>
|
||||||
{% if authorize("admin:dept:remove") %}
|
</button>
|
||||||
<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>
|
||||||
|
|
||||||
|
{#表格内的切换按钮#}
|
||||||
<script type="text/html" id="dept-status">
|
<script type="text/html" id="dept-status">
|
||||||
<input type="checkbox" name="status" value="{{ "{{ d.deptId }}" }}" lay-skin="switch" lay-text="启用|禁用"
|
<input type="checkbox" name="status" value="{{ "{{ d.deptId }}" }}" lay-skin="switch" lay-text="启用|禁用"
|
||||||
lay-filter="dept-enable"
|
lay-filter="dept-enable"
|
||||||
@@ -78,20 +83,23 @@
|
|||||||
let treetable = layui.treetable
|
let treetable = layui.treetable
|
||||||
let popup = layui.popup
|
let popup = layui.popup
|
||||||
|
|
||||||
|
{#定义模块访问路径#}
|
||||||
let MODULE_PATH = '/dept/'
|
let MODULE_PATH = '/dept/'
|
||||||
|
|
||||||
|
{#定义表格渲染函数#}
|
||||||
window.render = function () {
|
window.render = function () {
|
||||||
|
/*树形表格渲染*/
|
||||||
treetable.render({
|
treetable.render({
|
||||||
treeColIndex: 1,
|
treeColIndex: 1,
|
||||||
treeSpid: 0,
|
treeSpid: 0,
|
||||||
treeIdName: 'deptId',
|
treeIdName: 'deptId', /*表格的顶级字段*/
|
||||||
treePidName: 'parentId',
|
treePidName: 'parentId', /*父级id选项*/
|
||||||
skin: 'line',
|
skin: 'line',
|
||||||
method: 'post',
|
method: 'post', /**/
|
||||||
treeDefaultClose: false,
|
treeDefaultClose: false,
|
||||||
toolbar: '#dept-toolbar',
|
toolbar: '#dept-toolbar', /*表格的工具栏*/
|
||||||
elem: '#dept-table',
|
elem: '#dept-table', /*表格挂载的对象*/
|
||||||
url: '/dept/data',
|
url: '/dept/data', /*数据来源接口*/
|
||||||
page: false,
|
page: false,
|
||||||
cols: [
|
cols: [
|
||||||
[
|
[
|
||||||
@@ -105,19 +113,22 @@
|
|||||||
{ field: 'sort', title: '排序', width: 100 },
|
{ field: 'sort', title: '排序', width: 100 },
|
||||||
{ title: '操作', templet: '#dept-bar', width: 120, align: 'center' }
|
{ title: '操作', templet: '#dept-bar', width: 120, align: 'center' }
|
||||||
]
|
]
|
||||||
]
|
]/*表格渲染的数据*/
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*查询表单按钮被点击的事件*/
|
||||||
form.on('submit(dept-query)', function (data) {
|
form.on('submit(dept-query)', function (data) {
|
||||||
var keyword = data.field.deptName
|
let keyword = $.trim(data.field.deptName)
|
||||||
var $tds = $('#dept-table').next('.treeTable').find('.layui-table-body tbody tr td')
|
/*获取所有的公司节点*/
|
||||||
|
let $tds = $('#dept-table').next('.treeTable').find('.layui-table-body tbody tr td')
|
||||||
if (!keyword) {
|
if (!keyword) {
|
||||||
$tds.css('background-color', 'transparent')
|
$tds.css('background-color', 'transparent')
|
||||||
layer.msg('请输入关键字', { icon: 5 })
|
layer.msg('请输入关键字', { icon: 5 })
|
||||||
return
|
return false
|
||||||
}
|
}
|
||||||
var searchCount = 0
|
/*本地查询并且标注高亮*/
|
||||||
|
let searchCount = 0
|
||||||
$tds.each(function () {
|
$tds.each(function () {
|
||||||
$(this).css('background-color', 'transparent')
|
$(this).css('background-color', 'transparent')
|
||||||
if ($(this).text().indexOf(keyword) >= 0) {
|
if ($(this).text().indexOf(keyword) >= 0) {
|
||||||
@@ -139,14 +150,18 @@
|
|||||||
|
|
||||||
render()
|
render()
|
||||||
|
|
||||||
|
/*表格的操作栏*/
|
||||||
table.on('tool(dept-table)', function (obj) {
|
table.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') {
|
||||||
|
/*编辑事件*/
|
||||||
window.edit(obj)
|
window.edit(obj)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
/*表格的工具栏*/
|
||||||
table.on('toolbar(dept-table)', function (obj) {
|
table.on('toolbar(dept-table)', function (obj) {
|
||||||
if (obj.event === 'add') {
|
if (obj.event === 'add') {
|
||||||
window.add()
|
window.add()
|
||||||
@@ -158,6 +173,7 @@
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
/*切换选择状态*/
|
||||||
form.on('switch(dept-enable)', function (obj) {
|
form.on('switch(dept-enable)', function (obj) {
|
||||||
let operate
|
let operate
|
||||||
if (obj.elem.checked) {
|
if (obj.elem.checked) {
|
||||||
@@ -188,8 +204,8 @@
|
|||||||
type: 2,
|
type: 2,
|
||||||
title: '新增',
|
title: '新增',
|
||||||
shade: 0.1,
|
shade: 0.1,
|
||||||
area: ['450px', '500px'],
|
area: ['450px', '500px'], /*新增窗口的大小*/
|
||||||
content: MODULE_PATH + 'add'
|
content: MODULE_PATH + 'add' /*新增窗口从那里来*/
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -199,7 +215,7 @@
|
|||||||
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['deptId'] /*编辑修改窗口从那里来*/
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>用户管理</title>
|
<title>角色管理</title>
|
||||||
{% include 'admin/common/header.html' %}</head>
|
{% include 'admin/common/header.html' %}</head>
|
||||||
<body class="pear-container">
|
<body class="pear-container">
|
||||||
<div class="layui-card">
|
<div class="layui-card">
|
||||||
|
|||||||
@@ -93,7 +93,7 @@
|
|||||||
roleIds = roleIds.substr(0, roleIds.length - 1)
|
roleIds = roleIds.substr(0, roleIds.length - 1)
|
||||||
data.field.roleIds = roleIds
|
data.field.roleIds = roleIds
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: '/users/' + data.userId,
|
url: '/users/' + data.field.userId,
|
||||||
data: JSON.stringify(data.field),
|
data: JSON.stringify(data.field),
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
contentType: 'application/json',
|
contentType: 'application/json',
|
||||||
|
|||||||
@@ -0,0 +1,117 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<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="{{ user.id }}" name="userId" 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="{{ user.username }}" name="username" lay-verify="title"
|
||||||
|
autocomplete="off" placeholder="请输入标题" class="layui-input">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">姓名</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input type="text" value="{{ user.realname }}" name="realName" 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">
|
||||||
|
<ul id="selectParent" name="deptId" class="dtree" data-id="0"></ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">角色</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
{% for role in roles %}
|
||||||
|
<input {% if role.id in checked_roles %}
|
||||||
|
checked
|
||||||
|
{% endif %}
|
||||||
|
value="{{ role.id }}" title="{{ role.name }}" type="checkbox"
|
||||||
|
name="roleIds" lay-skin="primary">
|
||||||
|
{% endfor %}
|
||||||
|
</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="user-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', 'dtree'], function () {
|
||||||
|
let form = layui.form
|
||||||
|
let $ = layui.jquery
|
||||||
|
let dtree = layui.dtree
|
||||||
|
|
||||||
|
dtree.renderSelect({
|
||||||
|
elem: '#selectParent',
|
||||||
|
url: '/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 () {
|
||||||
|
roleIds += $(this).val() + ','
|
||||||
|
})
|
||||||
|
roleIds = roleIds.substr(0, roleIds.length - 1)
|
||||||
|
data.field.roleIds = roleIds
|
||||||
|
$.ajax({
|
||||||
|
url: '/users/' + data.field.userId,
|
||||||
|
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.layui.table.reload('user-table')
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
layer.msg(result.msg, { icon: 2, time: 1000 })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return false
|
||||||
|
})
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,285 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<title>付费学员管理</title>
|
||||||
|
{% 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">
|
||||||
|
<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="username" placeholder="" class="layui-input">
|
||||||
|
</div>
|
||||||
|
<label class="layui-form-label">微信</label>
|
||||||
|
<div class="layui-input-inline">
|
||||||
|
<input type="text" name="wx" 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="1"> 进阶课</div>
|
||||||
|
<div class="button button-default user-group" user-group="2"> 爬虫课</div>
|
||||||
|
<div class="button button-default user-group" user-group="3"> 数据分析课</div>
|
||||||
|
<div style="overflow: auto">
|
||||||
|
{# <ul id="dept-tree" class="dept-tree" data-id="0"></ul>#}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{# 用户表格 #}
|
||||||
|
<div class="user-main user-collasped">
|
||||||
|
<div class="layui-card">
|
||||||
|
<div class="layui-card-body">
|
||||||
|
<table id="user-table" lay-filter="user-table"></table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
{% include 'admin/common/footer.html' %}
|
||||||
|
{# 用户更新时间 #}
|
||||||
|
<script type="text/html" id="user-updateTime">
|
||||||
|
{{ ' {{layui.util.toDateString(d.update_at, "yyyy-MM-dd HH:mm:ss")}' |safe }}}
|
||||||
|
</script>
|
||||||
|
{# 表格操作 #}
|
||||||
|
<script type="text/html" id="user-toolbar">
|
||||||
|
<button class="pear-btn pear-btn-primary pear-btn-md" lay-event="add">
|
||||||
|
<i class="pear-icon pear-icon-add"></i>
|
||||||
|
新增
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<button class="pear-btn pear-btn-md" lay-event="batchRemove">
|
||||||
|
<i class="pear-icon pear-icon-ashbin"></i>
|
||||||
|
删除
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<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">
|
||||||
|
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="edit">
|
||||||
|
<i class="pear-icon pear-icon-edit"></i>
|
||||||
|
</button>
|
||||||
|
<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="remove">
|
||||||
|
<i class="pear-icon pear-icon-ashbin"></i>
|
||||||
|
</button>
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
layui.use(['table', 'dtree', 'form', 'jquery', 'popup', 'common'], function () {
|
||||||
|
let table = layui.table
|
||||||
|
let form = layui.form
|
||||||
|
let $ = layui.jquery
|
||||||
|
let dtree = layui.dtree
|
||||||
|
let popup = layui.popup
|
||||||
|
let common = layui.common
|
||||||
|
let MODULE_PATH = '/vip/'
|
||||||
|
|
||||||
|
// 表格数据
|
||||||
|
let cols = [
|
||||||
|
[
|
||||||
|
{#{ type: 'checkbox' },#}
|
||||||
|
{ title: 'ID', field: 'id', align: 'center', width: 110 },
|
||||||
|
{ title: '期数', field: 'phase', align: 'center', width: 110 },
|
||||||
|
{ title: '用户名', field: 'username', align: 'center', width: 110 },
|
||||||
|
{ title: '电话号码', field: 'mobile', align: 'center', hide: true },
|
||||||
|
{ title: '身份证号', field: 'id_card', align: 'center', hide: true },
|
||||||
|
{ title: '微信号', field: 'wx', align: 'center' },
|
||||||
|
{ title: 'QQ号', field: 'qq', align: 'center' },
|
||||||
|
{ title: '报名账号', field: 'account', align: 'center' },
|
||||||
|
{ title: '学号', field: 'number', align: 'center' },
|
||||||
|
{ title: '创建时间', field: 'create_at', templet: '#user-updateTime', align: 'center' },
|
||||||
|
{ title: '操作', toolbar: '#user-bar', align: 'center', width: 130 }
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
// 渲染表格数据
|
||||||
|
table.render({
|
||||||
|
elem: '#user-table',
|
||||||
|
url: MODULE_PATH + 'data',
|
||||||
|
page: true,
|
||||||
|
cols: cols,
|
||||||
|
skin: 'line',
|
||||||
|
height: 'full-148',
|
||||||
|
toolbar: '#user-toolbar', /*工具栏*/
|
||||||
|
text: { none: '暂无人员信息' },
|
||||||
|
defaultToolbar: [{ layEvent: 'refresh', icon: 'layui-icon-refresh' }, 'filter', 'print', 'exports'] /*默认工具栏*/
|
||||||
|
})
|
||||||
|
|
||||||
|
//
|
||||||
|
$('.user-group').click(function () {
|
||||||
|
let group = $(this).attr('user-group')
|
||||||
|
let field = form.val('user-query-form')
|
||||||
|
field.class_level = group
|
||||||
|
$(this).removeClass('button-default')
|
||||||
|
$(this).siblings().removeClass('button-primary')
|
||||||
|
$(this).siblings().addClass('button-default')
|
||||||
|
$(this).addClass('button-primary')
|
||||||
|
|
||||||
|
window.refresh(field)
|
||||||
|
})
|
||||||
|
|
||||||
|
table.on('tool(user-table)', function (obj) {
|
||||||
|
if (obj.event === 'remove') {
|
||||||
|
window.remove(obj)
|
||||||
|
} else if (obj.event === 'edit') {
|
||||||
|
window.edit(obj)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
table.on('toolbar(user-table)', function (obj) {
|
||||||
|
if (obj.event === 'add') {
|
||||||
|
window.add()
|
||||||
|
} else if (obj.event === 'refresh') {
|
||||||
|
window.refresh()
|
||||||
|
} else if (obj.event === 'batchRemove') {
|
||||||
|
window.batchRemove(obj)
|
||||||
|
} else if (obj.event === '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(user-enable)', function (obj) {
|
||||||
|
let operate
|
||||||
|
if (obj.elem.checked) {
|
||||||
|
operate = 1
|
||||||
|
} else {
|
||||||
|
operate = 0
|
||||||
|
}
|
||||||
|
let loading = layer.load()
|
||||||
|
$.ajax({
|
||||||
|
url: MODULE_PATH + 'enable',
|
||||||
|
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.msg)
|
||||||
|
} else {
|
||||||
|
popup.failure(result.msg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
window.add = function () {
|
||||||
|
layer.open({
|
||||||
|
type: 2,
|
||||||
|
title: '新增',
|
||||||
|
shade: 0.1,
|
||||||
|
area: ['550px', '550px'],
|
||||||
|
content: MODULE_PATH + 'add'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
window.edit = function (obj) {
|
||||||
|
layer.open({
|
||||||
|
type: 2,
|
||||||
|
title: '修改',
|
||||||
|
shade: 0.1,
|
||||||
|
area: ['550px', '500px'],
|
||||||
|
content: MODULE_PATH + obj.data['id']
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
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['id'],
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
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('user-table')
|
||||||
|
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: MODULE_PATH + 'batchRemove',
|
||||||
|
data: { ids: ids },
|
||||||
|
dataType: 'json',
|
||||||
|
type: 'delete',
|
||||||
|
success: function (result) {
|
||||||
|
layer.close(loading)
|
||||||
|
if (result.success) {
|
||||||
|
popup.success(result.msg, function () {
|
||||||
|
table.reload('role-table')
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
popup.failure(result.msg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
window.refresh = function (param) {
|
||||||
|
table.reload('user-table', { where: param })
|
||||||
|
}
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
</html>
|
||||||
@@ -3,6 +3,7 @@ from applications.view.index import register_index_views
|
|||||||
from applications.view.passport import register_passport_views
|
from applications.view.passport import register_passport_views
|
||||||
from applications.view.rights import register_rights_view
|
from applications.view.rights import register_rights_view
|
||||||
from applications.view.company.department import register_dept_views
|
from applications.view.company.department import register_dept_views
|
||||||
|
from applications.view.vip import register_vip_view
|
||||||
|
|
||||||
|
|
||||||
def init_view(app):
|
def init_view(app):
|
||||||
@@ -11,3 +12,4 @@ def init_view(app):
|
|||||||
register_rights_view(app)
|
register_rights_view(app)
|
||||||
register_passport_views(app)
|
register_passport_views(app)
|
||||||
register_dept_views(app)
|
register_dept_views(app)
|
||||||
|
register_vip_view(app)
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ from applications.view.admin.admin_log import admin_log
|
|||||||
from applications.view.admin.dict import admin_dict
|
from applications.view.admin.dict import admin_dict
|
||||||
from applications.view.admin.index import admin_bp
|
from applications.view.admin.index import admin_bp
|
||||||
from applications.view.admin.file import admin_file
|
from applications.view.admin.file import admin_file
|
||||||
from applications.view.admin.role import admin_role
|
from applications.view.rights.role import admin_role
|
||||||
from applications.view.company.users import users_bp
|
from applications.view.company.users import users_bp
|
||||||
from applications.view.admin.monitor import admin_monitor_bp
|
from applications.view.admin.monitor import admin_monitor_bp
|
||||||
|
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ class CURDUser(Resource):
|
|||||||
real_name = req_json.get('realName')
|
real_name = req_json.get('realName')
|
||||||
dept_id = req_json.get('deptId')
|
dept_id = req_json.get('deptId')
|
||||||
role_ids = a.split(',')
|
role_ids = a.split(',')
|
||||||
user_curd.update_user(id, username, real_name, dept_id)
|
user_curd.update_user(user_id, username, real_name, dept_id)
|
||||||
user_curd.update_user_role(_id, role_ids)
|
user_curd.update_user_role(_id, role_ids)
|
||||||
return success_api(msg="更新成功")
|
return success_api(msg="更新成功")
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from applications.common.utils.http import table_api, success_api, fail_api
|
|||||||
from applications.common.utils.rights import authorize
|
from applications.common.utils.rights import authorize
|
||||||
|
|
||||||
|
|
||||||
admin_role = Blueprint('adminRole', __name__, url_prefix='/admin/role')
|
admin_role = Blueprint('role', __name__, url_prefix='/admin/role')
|
||||||
|
|
||||||
|
|
||||||
# 用户管理
|
# 用户管理
|
||||||
@@ -57,10 +57,10 @@ def power(_id):
|
|||||||
|
|
||||||
|
|
||||||
# 获取角色权限
|
# 获取角色权限
|
||||||
@admin_role.get('/getRolePower/<int:id>')
|
@admin_role.get('/getRolePower/<int:_id>')
|
||||||
@authorize("admin:role:main", log=True)
|
@authorize("admin:role:main", log=True)
|
||||||
def get_role_power(id):
|
def get_role_power(_id):
|
||||||
powers = role_curd.get_role_power(id)
|
powers = role_curd.get_role_power(_id)
|
||||||
res = {
|
res = {
|
||||||
"data": powers,
|
"data": powers,
|
||||||
"status": {"code": 200, "message": "默认"}
|
"status": {"code": 200, "message": "默认"}
|
||||||
@@ -76,7 +76,7 @@ def save_role_power():
|
|||||||
power_ids = req_form.get("powerIds")
|
power_ids = req_form.get("powerIds")
|
||||||
power_list = power_ids.split(',')
|
power_list = power_ids.split(',')
|
||||||
role_id = req_form.get("roleId")
|
role_id = req_form.get("roleId")
|
||||||
role_curd.update_role_power(id=role_id, power_list=power_list)
|
role_curd.update_role_power(_id=role_id, power_list=power_list)
|
||||||
return success_api(msg="授权成功")
|
return success_api(msg="授权成功")
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
from flask import Blueprint, render_template, make_response, Flask, request
|
||||||
|
from flask_restful import Resource, Api, reqparse
|
||||||
|
from sqlalchemy import desc
|
||||||
|
|
||||||
|
from applications.common.utils.http import table_api
|
||||||
|
from applications.models import VipMember
|
||||||
|
|
||||||
|
vip_bp = Blueprint('vip', __name__, url_prefix='/vip')
|
||||||
|
vip_api = Api(vip_bp)
|
||||||
|
|
||||||
|
|
||||||
|
def register_vip_view(app: Flask):
|
||||||
|
app.register_blueprint(vip_bp)
|
||||||
|
|
||||||
|
|
||||||
|
@vip_api.resource('/member')
|
||||||
|
class Member(Resource):
|
||||||
|
def get(self):
|
||||||
|
return make_response(render_template('admin/vip/main.html'))
|
||||||
|
|
||||||
|
def post(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
# 用户分页查询
|
||||||
|
@vip_bp.get('/data')
|
||||||
|
def data():
|
||||||
|
parse = reqparse.RequestParser()
|
||||||
|
parse.add_argument('page', type=int, default=1)
|
||||||
|
parse.add_argument('limit', type=int, default=10)
|
||||||
|
parse.add_argument('wx', type=str, default="")
|
||||||
|
parse.add_argument('username', type=str, default="")
|
||||||
|
|
||||||
|
res = parse.parse_args()
|
||||||
|
|
||||||
|
filters = []
|
||||||
|
if res.username:
|
||||||
|
filters.append(VipMember.username.like('%{}%'.format(res.username)))
|
||||||
|
|
||||||
|
if res.wx:
|
||||||
|
filters.append(VipMember.wx.like('%{}%'.format(res.wx)))
|
||||||
|
|
||||||
|
paginate = VipMember.query.filter(*filters).paginate(
|
||||||
|
page=res.page, per_page=res.limit)
|
||||||
|
|
||||||
|
return table_api(data=[
|
||||||
|
{
|
||||||
|
'id': item.id,
|
||||||
|
'username': item.username,
|
||||||
|
'mobile': item.mobile,
|
||||||
|
'id_card': item.id_card,
|
||||||
|
'wx': item.wx,
|
||||||
|
'qq': item.qq,
|
||||||
|
'account': item.account,
|
||||||
|
'number': '{:0>2}{:0>4}'.format(item.phase, item.id),
|
||||||
|
'create_at': item.update_at,
|
||||||
|
'phase': item.phase,
|
||||||
|
} for item in paginate.items], count=paginate.total)
|
||||||
Reference in New Issue
Block a user