Update: (步骤备份)完善字典

This commit is contained in:
wojiaoyishang
2025-01-23 21:16:16 +08:00
parent de36a9936a
commit 52838222db
12 changed files with 599 additions and 404 deletions
+7
View File
@@ -18,7 +18,12 @@ def authorize(power: str, log: bool = False):
def wrapper(*args, **kwargs):
# 定义管理员的id为1
if current_user.username == current_app.config.get("SUPERADMIN"):
if log:
admin_log(request=request, is_access=True)
return func(*args, **kwargs)
if not power in session.get('permissions'):
if log:
admin_log(request=request, is_access=False)
@@ -26,8 +31,10 @@ def authorize(power: str, log: bool = False):
abort(403)
else:
return jsonify(success=False, msg="权限不足!")
if log:
admin_log(request=request, is_access=True)
return func(*args, **kwargs)
return wrapper
+91 -24
View File
@@ -33,6 +33,7 @@ def dict_type_data():
dict_all = DictType.query.filter(mf.get_filter(DictType)).layui_paginate()
count = dict_all.total
data = curd.model_to_dicts(schema=DictTypeOutSchema, data=dict_all.items)
return table_api(data=data, count=count)
@@ -46,13 +47,24 @@ def dict_type_add():
@authorize("system:dict:add", log=True)
def dict_type_save():
req_json = request.get_json(force=True)
description = str_escape(req_json.get("description"))
enable = str_escape(req_json.get("enable"))
type_code = str_escape(req_json.get("typeCode"))
if type_code is None:
return fail_api(msg="标识必须填写")
type_name = str_escape(req_json.get("typeName"))
d = DictType(type_name=type_name, type_code=type_code, enable=enable, description=description)
data = {
'type_name': str_escape(req_json.get("typeName")),
'type_code': str_escape(req_json.get("typeCode")),
'enable': str_escape(req_json.get("enable")),
'description': str_escape(req_json.get("description"))
}
description = data['description']
del data['description']
if not all(data.values()):
return fail_api(msg="参数提供不足")
if description is not None:
data['description'] = description
d = DictType(**data)
db.session.add(d)
db.session.commit()
if d.id is None:
@@ -75,16 +87,26 @@ def dict_type_edit():
def dict_type_update():
req_json = request.get_json(force=True)
id = str_escape(req_json.get("id"))
description = str_escape(req_json.get("description"))
enable = str_escape(req_json.get("enable"))
type_code = str_escape(req_json.get("typeCode"))
type_name = str_escape(req_json.get("typeName"))
DictType.query.filter_by(id=id).update({
"description": description,
"enable": enable,
"type_code": type_code,
"type_name": type_name
})
data = {
"description": str_escape(req_json.get("description")),
"enable": str_escape(req_json.get("enable")),
"type_code": str_escape(req_json.get("typeCode")),
"type_name": str_escape(req_json.get("typeName"))
}
if id is None:
return fail_api(msg="字典类型不存在")
description = data['description']
del data['description']
if not all(data.values()):
return fail_api(msg="参数提供不足")
data['description'] = description
DictType.query.filter_by(id=id).update(data)
db.session.commit()
return success_api(msg="更新成功")
@@ -94,11 +116,11 @@ def dict_type_update():
@authorize("system:dict:edit", log=True)
def dict_type_enable():
_id = request.get_json(force=True).get('id')
if id:
res = curd.enable_status(DictType,_id)
if _id:
res = curd.enable_status(DictType, _id)
if not res:
return fail_api(msg="出错啦")
return success_api("成功")
return success_api("成功")
return fail_api(msg="数据错误")
@@ -107,8 +129,8 @@ def dict_type_enable():
@authorize("system:dict:edit", log=True)
def dict_type_dis_enable():
_id = request.get_json(force=True).get('id')
if id:
res = curd.disable_status(DictType,_id)
if _id:
res = curd.disable_status(DictType, _id)
if not res:
return fail_api(msg="出错啦")
return success_api("禁用成功")
@@ -119,9 +141,15 @@ def dict_type_dis_enable():
@bp.delete('/dictType/remove/<int:_id>')
@authorize("system:dict:remove", log=True)
def dict_type_delete(_id):
res = curd.delete_one_by_id(DictType,_id)
DictData.query.filter_by(
type_code=DictType.query.filter_by(id=_id).first().type_code
).all()
res = DictType.query.filter_by(id=_id).delete()
if not res:
return fail_api(msg="删除失败")
db.session.commit()
return success_api(msg="删除成功")
@@ -148,11 +176,13 @@ def dict_data_add():
@authorize("system:dict:add", log=True)
def dict_data_save():
req_json = request.get_json(force=True)
data_label = str_escape(req_json.get("dataLabel"))
data_value = str_escape(req_json.get("dataValue"))
enable = str_escape(req_json.get("enable"))
remark = str_escape(req_json.get("remark"))
type_code = str_escape(req_json.get("typeCode"))
d = DictData(data_label=data_label, data_value=data_value, enable=enable, remark=remark, type_code=type_code)
db.session.add(d)
db.session.commit()
@@ -213,7 +243,7 @@ def dict_data_disenable():
return fail_api(msg="数据错误")
# 删除字典类型
# 删除字典数据
@bp.delete('dictData/remove/<int:id>')
@authorize("system:dict:remove", log=True)
def dict_data_delete(id):
@@ -221,3 +251,40 @@ def dict_data_delete(id):
if not res:
return fail_api(msg="删除失败")
return success_api(msg="删除成功")
# 批量删除字典
@bp.delete('dictData/batchRemoveDictType')
@authorize("system:dict:remove", log=True)
def dict_type_batch_remove():
ids = request.form.getlist('ids[]')
for _id in ids:
DictData.query.filter_by(
type_code=DictType.query.filter_by(id=_id).first().type_code
).all()
res = DictType.query.filter_by(id=_id).delete()
if res == 0:
db.session.rollback()
return fail_api(msg="删除失败,请重试")
db.session.commit()
return success_api(msg="删除成功")
# 批量删除字典数据
@bp.delete('dictData/batchRemoveDictData')
@authorize("system:dict:remove", log=True)
def dict_data_batch_remove():
ids = request.form.getlist('ids[]')
print(ids)
for _id in ids:
res = curd.delete_one_by_id(model=DictData, id=_id)
if not res:
db.session.rollback()
return fail_api(msg="删除失败,请重试")
db.session.commit()
return success_api(msg="删除成功")
+4 -4
View File
@@ -22,8 +22,8 @@ def index():
def login_log():
# orm查询
# 使用分页获取data需要.items
log = AdminLog.query.filter(
AdminLog.url != '/passport/login'
log = AdminLog.query.filter_by(
url='/system/passport/login'
).order_by(desc(AdminLog.create_time)).layui_paginate()
count = log.total
return table_api(data=model_to_dicts(schema=LogOutSchema, data=log.items), count=count)
@@ -35,8 +35,8 @@ def login_log():
def operate_log():
# orm查询
# 使用分页获取data需要.items
log = AdminLog.query.filter_by(
url='/passport/login'
log = AdminLog.query.filter(
AdminLog.url != '/system/passport/login'
).order_by(
desc(AdminLog.create_time)).layui_paginate()
count = log.total
+22 -4
View File
@@ -1,7 +1,4 @@
.pear-container {
background-color: whitesmoke;
margin: 10px;
}
.pear-card {
width: 100%;
@@ -28,6 +25,16 @@
margin-bottom: 3px;
}
.pear-admin-dark .pear-card2 {
width: 100%;
height: 90px;
background-color: #353537;
display: inline-block;
border-radius: 5px;
text-align: center;
margin-bottom: 3px;
}
.pear-card2 i {
font-size: 30px;
height: 90px;
@@ -185,3 +192,14 @@
color: #333;
}
.pear-admin-dark .progress-ring .progress-text {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
font-size: 18px;
font-weight: bold;
color: #cfcfcf;
}
@@ -383,7 +383,8 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) {
*/
tabPage.prototype.refresh = function (time) {
var $iframe = $(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-content .layui-show > div[data-frameid], iframe[data-frameid]");
var $iframe = $(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-content .layui-show > div[data-frameid], " +
".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-content .layui-show > iframe[data-frameid]");
var $iframeLoad;
if (time != false && time != 0) {
+29 -30
View File
@@ -26,7 +26,8 @@
<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="required" autocomplete="off"
<input type="text" value="{{ dept.leader }}" name="leader" lay-verify="required"
autocomplete="off"
placeholder="请输入负责人"
class="layui-input">
</div>
@@ -34,7 +35,8 @@
<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="required" autocomplete="off"
<input type="text" value="{{ dept.email }}" name="email" lay-verify="required"
autocomplete="off"
placeholder="请输入邮箱"
class="layui-input">
</div>
@@ -42,7 +44,8 @@
<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="required" autocomplete="off"
<input type="text" value="{{ dept.phone }}" name="phone" lay-verify="required"
autocomplete="off"
placeholder="请输入联系方式"
class="layui-input">
</div>
@@ -70,11 +73,7 @@
<label class="layui-form-label">地址</label>
<div class="layui-input-block">
<textarea placeholder="请输入详细地址" name="address"
class="layui-textarea">
{% if dept.address %}
{{ dept.address }}
{% endif %}
</textarea>
class="layui-textarea">{% if dept.address %}{{ dept.address }}{% endif %}</textarea>
</div>
</div>
</div>
@@ -96,31 +95,31 @@
</form>
{% include 'system/common/footer.html' %}
<script>
layui.use(['form', 'jquery'], function () {
let form = layui.form
let $ = layui.jquery
layui.use(['form', 'jquery'], function () {
let form = layui.form
let $ = layui.jquery
form.on('submit(dept-update)', function (data) {
$.ajax({
url: '/system/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()
form.on('submit(dept-update)', function (data) {
$.ajax({
url: '/system/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})
}
}
})
} else {
layer.msg(result.msg, { icon: 2, time: 1000 })
}
}
})
return false
return false
})
})
})
</script>
<script>
</script>
+4 -4
View File
@@ -12,14 +12,14 @@
<div class="layui-form-item">
<label class="layui-form-label">名称</label>
<div class="layui-input-block">
<input type="text" name="typeName" lay-verify="title" autocomplete="off" placeholder="请输入名称"
<input type="text" name="typeName" lay-verify="required" autocomplete="off" placeholder="请输入名称"
class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">标识</label>
<div class="layui-input-block">
<input type="text" name="typeCode" lay-verify="title" autocomplete="off" placeholder="请输入标识"
<input type="text" name="typeCode" lay-verify="required" autocomplete="off" placeholder="请输入标识"
class="layui-input">
</div>
</div>
@@ -41,12 +41,12 @@
</div>
<div class="bottom">
<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="dict-type-save">
<i class="layui-icon layui-icon-ok"></i>
提交
</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>
重置
</button>
+3 -3
View File
@@ -28,7 +28,7 @@
<div class="layui-input-block">
<input type="text" value="{{ type_code }}" readonly="readonly" name="typeCode"
lay-verify="title"
autocomplete="off" placeholder="请输入标" class="layui-input">
autocomplete="off" placeholder="请输入标" class="layui-input">
</div>
</div>
<div class="layui-form-item">
@@ -49,12 +49,12 @@
</div>
<div class="bottom">
<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="dict-data-save">
<i class="layui-icon layui-icon-ok"></i>
提交
</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>
重置
</button>
+29 -28
View File
@@ -19,21 +19,21 @@
<label class="layui-form-label">标签</label>
<div class="layui-input-block">
<input type="text" value="{{ dict_data.data_label }}" name="dataLabel" lay-verify="title"
autocomplete="off" placeholder="请输入标" class="layui-input">
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="{{ dict_data.data_value }}" name="dataValue" lay-verify="title"
autocomplete="off" placeholder="请输入标题" class="layui-input">
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="{{ dict_data.type_code }}" readonly="readonly" name="typeCode"
lay-verify="title" autocomplete="off" placeholder="请输入标" class="layui-input">
lay-verify="title" autocomplete="off" placeholder="请输入标" class="layui-input">
</div>
</div>
<div class="layui-form-item">
@@ -49,7 +49,8 @@
<label class="layui-form-label">描述</label>
<div class="layui-input-block">
<textarea placeholder="请输入描述" name="remark"
class="layui-textarea">{{ dict_data.remark }}</textarea>
class="layui-textarea"
>{% if dict_data.remark %}{{ dict_data.remark }}{% endif %}</textarea>
</div>
</div>
</div>
@@ -57,12 +58,12 @@
</div>
<div class="bottom">
<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="dict-data-save">
<i class="layui-icon layui-icon-ok"></i>
提交
</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>
重置
</button>
@@ -71,31 +72,31 @@
</form>
{% include 'system/common/footer.html' %}
<script>
layui.use(['form', 'jquery'], function () {
let form = layui.form
let $ = layui.jquery
layui.use(['form', 'jquery'], function () {
let form = layui.form
let $ = layui.jquery
form.on('submit(dict-data-save)', function (data) {
$.ajax({
url: '/system/dict/dictData/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.layui.table.reload('dict-data-table')
form.on('submit(dict-data-save)', function (data) {
$.ajax({
url: '/system/dict/dictData/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.layui.table.reload('dict-data-table')
})
} else {
layer.msg(result.msg, {icon: 2, time: 1000})
}
}
})
} else {
layer.msg(result.msg, { icon: 2, time: 1000 })
}
}
})
return false
return false
})
})
})
</script>
<script>
</script>
+33 -30
View File
@@ -12,22 +12,22 @@
<div class="layui-form-item layui-hide">
<label class="layui-form-label">编号</label>
<div class="layui-input-block">
<input type="text" value="{{ dict_type.id }}" name="id" lay-verify="title" autocomplete="off"
<input type="text" value="{{ dict_type.id }}" name="id" lay-verify="required" autocomplete="off"
placeholder="请输入标题" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">名称</label>
<div class="layui-input-block">
<input type="text" value="{{ dict_type.type_name }}" name="typeName" lay-verify="title"
autocomplete="off" placeholder="请输入标题" class="layui-input">
<input type="text" value="{{ dict_type.type_name }}" name="typeName" lay-verify="required"
autocomplete="off" placeholder="请输入名称" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">标识</label>
<div class="layui-input-block">
<input type="text" value="{{ dict_type.type_code }}" readonly name="typeCode"
lay-verify="title" autocomplete="off" placeholder="请输入标" class="layui-input">
lay-verify="required" autocomplete="off" placeholder="请输入标" class="layui-input">
</div>
</div>
<div class="layui-form-item">
@@ -42,8 +42,11 @@
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">描述</label>
<div class="layui-input-block">
<textarea placeholder="请输入描述" name="description"
class="layui-textarea">{{ dict_type.description }}</textarea>
<textarea
placeholder="请输入描述"
name="description"
class="layui-textarea"
>{% if dict_type.description %}{{ dict_type.description }}{% endif %}</textarea>
</div>
</div>
</div>
@@ -51,12 +54,12 @@
</div>
<div class="bottom">
<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-primary layui-btn-sm" lay-submit=""
lay-filter="dict-type-update">
<i class="layui-icon layui-icon-ok"></i>
提交
</button>
<button type="reset" class="pear-btn pear-btn-sm">
<button type="reset" class="layui-btn layui-btn-sm">
<i class="layui-icon layui-icon-refresh"></i>
重置
</button>
@@ -65,31 +68,31 @@
</form>
{% include 'system/common/footer.html' %}
<script>
layui.use(['form', 'jquery'], function () {
let form = layui.form
let $ = layui.jquery
layui.use(['form', 'jquery'], function () {
let form = layui.form
let $ = layui.jquery
form.on('submit(dict-type-update)', function (data) {
$.ajax({
url: '/system/dict/dictType/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.layui.table.reload('dict-type-table')
form.on('submit(dict-type-update)', function (data) {
$.ajax({
url: '/system/dict/dictType/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.layui.table.reload('dict-type-table')
})
} else {
layer.msg(result.msg, {icon: 2, time: 1000})
}
}
})
} else {
layer.msg(result.msg, { icon: 2, time: 1000 })
}
}
})
return false
return false
})
})
})
</script>
<script>
</script>
+371 -272
View File
@@ -10,16 +10,17 @@
<div class="layui-card">
<div class="layui-card-body">
<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>
<div class="layui-input-inline">
<input type="text" name="typeName" placeholder="" class="layui-input">
</div>
<button class="pear-btn pear-btn-md pear-btn-primary" lay-submit lay-filter="dict-type-query">
<button class="layui-btn layui-btn-md layui-btn-primary" lay-submit
lay-filter="dict-type-query">
<i class="layui-icon layui-icon-search"></i>
查询
</button>
<button type="reset" class="pear-btn pear-btn-md">
<button type="reset" class="layui-btn layui-btn-md">
<i class="layui-icon layui-icon-refresh"></i>
重置
</button>
@@ -38,29 +39,32 @@
<div class="layui-col-md6">
<div class="layui-card">
<div class="layui-card-body">
<svg class="empty" style="margin-top: 50px;margin-left: 220px;margin-bottom: 80px;" width="184"
height="152" viewBox="0 0 184 152" xmlns="http://www.w3.org/2000/svg">
<g fill="none" fillRule="evenodd">
<g transform="translate(24 31.67)">
<ellipse fillOpacity=".8" fill="#F5F5F7" cx="67.797" cy="106.89" rx="67.797"
ry="12.668"></ellipse>
<path d="M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z"
fill="#AEB8C2"></path>
<path d="M101.537 86.214L80.63 61.102c-1.001-1.207-2.507-1.867-4.048-1.867H31.724c-1.54 0-3.047.66-4.048 1.867L6.769 86.214v13.792h94.768V86.214z"
fill="url(#linearGradient-1)" transform="translate(13.56)"></path>
<path d="M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z"
fill="#F5F5F7"></path>
<path d="M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z"
<div style="text-align: center;">
<svg class="empty" width="184"
height="152" viewBox="0 0 184 152" xmlns="http://www.w3.org/2000/svg">
<g fill="none" fillRule="evenodd">
<g transform="translate(24 31.67)">
<ellipse fillOpacity=".8" fill="#F5F5F7" cx="67.797" cy="106.89" rx="67.797"
ry="12.668"></ellipse>
<path d="M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z"
fill="#AEB8C2"></path>
<path d="M101.537 86.214L80.63 61.102c-1.001-1.207-2.507-1.867-4.048-1.867H31.724c-1.54 0-3.047.66-4.048 1.867L6.769 86.214v13.792h94.768V86.214z"
fill="url(#linearGradient-1)" transform="translate(13.56)"></path>
<path d="M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z"
fill="#F5F5F7"></path>
<path d="M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z"
fill="#DCE0E6"></path>
</g>
<path d="M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z"
fill="#DCE0E6"></path>
<g transform="translate(149.65 15.383)" fill="#FFF">
<ellipse cx="20.654" cy="3.167" rx="2.849" ry="2.815"></ellipse>
<path d="M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z"></path>
</g>
</g>
<path d="M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z"
fill="#DCE0E6"></path>
<g transform="translate(149.65 15.383)" fill="#FFF">
<ellipse cx="20.654" cy="3.167" rx="2.849" ry="2.815"></ellipse>
<path d="M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z"></path>
</g>
</g>
</svg>
</svg>
</div>
<table id="dict-data-table" lay-filter="dict-data-table"></table>
</div>
</div>
@@ -69,48 +73,51 @@
</body>
<script type="text/html" id="dict-type-toolbar">
<button class="pear-btn pear-btn-primary pear-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>
新增
</button>
<button class="pear-btn pear-btn-md" lay-event="batchRemove">
<button class="layui-btn layui-btn-sm" lay-event="batchRemove">
<i class="layui-icon layui-icon-delete"></i>
删除
</button>
</script>
<script type="text/html" id="dict-type-bar">
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="edit">
<i class="layui-icon layui-icon-edit"></i>
<button class="layui-btn layui-btn-primary layui-btn-xs" lay-event="edit">
<i class="layui-icon layui-icon-edit"> 编辑</i>
</button>
<button class="pear-btn pear-btn-warming pear-btn-sm" lay-event="details">
<i class="layui-icon layui-icon-transfer"></i>
<button class="layui-btn layui-btn-warming layui-btn-xs" lay-event="details">
<i class="layui-icon layui-icon-transfer"> 关联</i>
</button>
<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="remove">
<i class="layui-icon layui-icon-delete"></i>
<button class="layui-btn layui-btn-danger layui-btn-xs" lay-event="remove">
<i class="layui-icon layui-icon-delete"> 删除</i>
</button>
</script>
<script type="text/html" id="dict-type-enable">
<input type="checkbox" value="{{ "{{ d.id }}" }}" lay-skin="switch" lay-text="启用|禁用" lay-filter="dict-type-enable"
<input type="checkbox" value="{{ "{{ d.id }}" }}" lay-skin="switch" lay-text="启用|禁用"
lay-filter="dict-type-enable"
{{ "{{# if(d.enable==1){ }} checked {{# } }}" }}>
</script>
<script type="text/html" id="dict-data-toolbar">
<button class="pear-btn pear-btn-primary pear-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>
新增
</button>
<button class="pear-btn pear-btn-md" lay-event="batchRemove">
<button class="layui-btn layui-btn-sm" lay-event="batchRemove">
<i class="layui-icon layui-icon-delete"></i>
删除
</button>
</script>
<script type="text/html" id="dict-data-bar">
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>
<button class="layui-btn layui-btn-primary layui-btn-xs" lay-event="edit">
<i class="layui-icon layui-icon-edit"> 编辑</i>
</button>
<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="remove"><i class="layui-icon layui-icon-delete"></i>
<button class="layui-btn layui-btn-danger layui-btn-xs" lay-event="remove">
<i class="layui-icon layui-icon-delete"> 删除</i>
</button>
</script>
@@ -121,254 +128,346 @@
</script>
{% include 'system/common/footer.html' %}
<script>
layui.use(['table', 'form', 'jquery', 'popup'], function () {
let table = layui.table
let form = layui.form
let $ = layui.jquery
let popup = layui.popup
layui.use(['table', 'form', 'jquery', 'popup'], function () {
let table = layui.table
let form = layui.form
let $ = layui.jquery
let popup = layui.popup
let typeCode
let typeCode
let cols = [
[
{ type: 'checkbox' },
{ title: '字典名称', field: 'typeName', align: 'center', width: 120 },
{ title: '描述', field: 'description', align: 'center' },
{ title: '字典状态', field: 'enable', align: 'center', templet: '#dict-type-enable' },
{ title: '操作', toolbar: '#dict-type-bar', align: 'center', width: 180 }
]
]
let cols = [
[
{type: 'checkbox'},
{title: '字典名称', field: 'typeName', align: 'center', width: 120},
{title: '描述', field: 'description', align: 'center'},
{title: '字典状态', field: 'enable', align: 'center', templet: '#dict-type-enable', width: 100},
{title: '操作', toolbar: '#dict-type-bar', align: 'center', width: 250}
]
]
let dataCols = [
[
{ type: 'checkbox' },
{ title: '标签', field: 'dataLabel', align: 'center', width: 120 },
{ title: '对应值', field: 'dataValue', align: 'center' },
{ title: '状态', field: 'enable', align: 'center', templet: '#dict-data-enable' },
{ title: '操作', toolbar: '#dict-data-bar', align: 'center', width: 180 }
]
]
let dataCols = [
[
{type: 'checkbox'},
{title: '标签', field: 'dataLabel', align: 'center', width: 120},
{title: '对应值', field: 'dataValue', align: 'center'},
{title: '状态', field: 'enable', align: 'center', templet: '#dict-data-enable'},
{title: '操作', toolbar: '#dict-data-bar', align: 'center', width: 180}
]
]
table.render({
elem: '#dict-type-table',
url: '/system/dict/dictType/data',
page: true,
cols: cols,
skin: 'line',
height: 'full-148',
toolbar: '#dict-type-toolbar',
defaultToolbar: [{
layEvent: 'refresh',
icon: 'layui-icon-refresh',
}, 'filter', 'print', 'exports']
})
table.render({
elem: '#dict-type-table',
url: '/system/dict/dictType/data',
page: true,
cols: cols,
skin: 'line',
height: 'full-148',
toolbar: '#dict-type-toolbar',
defaultToolbar: [{
layEvent: 'refresh',
icon: 'layui-icon-refresh',
}, 'filter', 'print', 'exports']
})
window.renderData = function (code) {
typeCode = code
$('.empty').hide()
table.render({
elem: '#dict-data-table',
url: '/system/dict/dictData/data?typeCode=' + typeCode,
page: true,
height: 'full-148',
cols: dataCols,
skin: 'line',
toolbar: '#dict-data-toolbar'
})
}
table.on('tool(dict-type-table)', function (obj) {
if (obj.event === 'remove') {
window.removeType(obj)
} else if (obj.event === 'edit') {
window.editType(obj)
} else if (obj.event === 'details') {
window.renderData(obj.data['typeCode'])
}
})
table.on('toolbar(dict-type-table)', function (obj) {
if (obj.event === 'add') {
window.addType()
} else if (obj.event === 'refresh') {
window.refreshType()
}
})
form.on('submit(dict-type-query)', function (data) {
table.reload('dict-type-table', { where: data.field })
return false
})
form.on('switch(dict-type-enable)', function (obj) {
let operate
if (obj.elem.checked) {
operate = 'enable'
} else {
operate = 'disable'
}
let loading = layer.load()
$.ajax({
url: '/system/dict/dictType/' + operate,
data: JSON.stringify({ id: 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.renderData = function (code) {
typeCode = code
$('.empty').hide()
table.render({
elem: '#dict-data-table',
url: '/system/dict/dictData/data?typeCode=' + typeCode,
page: true,
height: 'full-148',
cols: dataCols,
skin: 'line',
toolbar: '#dict-data-toolbar'
})
}
})
})
window.addType = function () {
layer.open({
type: 2,
title: '新增',
shade: 0.1,
area: ['500px', '400px'],
content: '/system/dict/dictType/add'
})
}
table.on('tool(dict-type-table)', function (obj) {
if (obj.event === 'remove') {
window.removeType(obj)
} else if (obj.event === 'edit') {
window.editType(obj)
} else if (obj.event === 'details') {
window.renderData(obj.data['typeCode'])
}
})
window.editType = function (obj) {
layer.open({
type: 2,
title: '修改',
shade: 0.1,
area: ['500px', '400px'],
content: '/system/dict/dictType/edit?dictTypeId=' + obj.data['id']
})
}
table.on('toolbar(dict-type-table)', function (obj) {
if (obj.event === 'add') {
window.addType()
} else if (obj.event === 'refresh') {
window.refreshType()
} else if (obj.event === 'batchRemove') {
window.batchRemoveDictType(obj)
}
})
window.removeType = function (obj) {
layer.confirm('确定要删除该字典分类', { icon: 3, title: '提示' }, function (index) {
layer.close(index)
let loading = layer.load()
$.ajax({
url: '/system/dict/dictType/remove/' + obj.data['id'],
dataType: 'json',
type: 'delete',
success: function (result) {
layer.close(loading)
if (result.success) {
popup.success(result.msg, function () {
if (typeCode === obj.data['typeCode']) {
$('[lay-id=\'dict-data-table\']').remove()
$('.empty').show()
form.on('submit(dict-type-query)', function (data) {
table.reload('dict-type-table', {where: data.field})
return false
})
form.on('switch(dict-type-enable)', function (obj) {
let operate
if (obj.elem.checked) {
operate = 'enable'
} else {
operate = 'disable'
}
let loading = layer.load()
$.ajax({
url: '/system/dict/dictType/' + operate,
data: JSON.stringify({id: 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)
}
}
obj.del()
})
} else {
popup.failure(result.msg)
}
}
})
})
})
}
window.refreshType = function () {
table.reload('dict-type-table')
}
window.addData = function () {
layer.open({
type: 2,
title: '新增',
shade: 0.1,
area: ['500px', '450px'],
content: '/system/dict/dictData/add?typeCode=' + typeCode
})
}
window.editData = function (obj) {
layer.open({
type: 2,
title: '修改',
shade: 0.1,
area: ['500px', '450px'],
content: '/system/dict/dictData/edit?dataId=' + obj.data['dataId']
})
}
window.removeData = function (obj) {
layer.confirm('确定要删除该字典值', { icon: 3, title: '提示' }, function (index) {
layer.close(index)
let loading = layer.load()
$.ajax({
url: '/system/dict/dictData/remove/' + obj.data['dataId'],
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)
}
}
})
})
}
table.on('tool(dict-data-table)', function (obj) {
if (obj.event === 'remove') {
window.removeData(obj)
} else if (obj.event === 'edit') {
window.editData(obj)
} else if (obj.event === 'details') {
window.details(obj)
}
})
table.on('toolbar(dict-data-table)', function (obj) {
if (obj.event === 'add') {
window.addData()
} else if (obj.event === 'refresh') {
window.refreshData()
}
})
form.on('submit(dict-data-query)', function (data) {
data.field.typeCode = typeCode
table.reload('dict-data-table', { where: data.field })
return false
})
form.on('switch(dict-data-enable)', function (obj) {
let operate
if (obj.elem.checked) {
operate = 'enable'
} else {
operate = 'disable'
}
let loading = layer.load()
$.ajax({
url: '/system/dict/dictData/' + operate,
data: JSON.stringify({ dataId: 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.addType = function () {
layer.open({
type: 2,
title: '新增',
shade: 0.1,
area: ['500px', '400px'],
content: '/system/dict/dictType/add'
})
}
})
})
window.refreshData = function () {
table.reload('dict-data-table')
}
})
window.editType = function (obj) {
layer.open({
type: 2,
title: '修改',
shade: 0.1,
area: ['500px', '400px'],
content: '/system/dict/dictType/edit?dictTypeId=' + obj.data['id']
})
}
window.removeType = function (obj) {
layer.confirm('确定要删除该字典分类?字典值会一并删除!', {icon: 3, title: '提示'}, function (index) {
layer.close(index)
let loading = layer.load()
$.ajax({
url: '/system/dict/dictType/remove/' + obj.data['id'],
dataType: 'json',
type: 'delete',
success: function (result) {
layer.close(loading)
if (result.success) {
popup.success(result.msg, function () {
if (typeCode === obj.data['typeCode']) {
$('div[lay-table-id="dict-data-table"]').remove()
$('.empty').show()
}
obj.del()
})
} else {
popup.failure(result.msg)
}
}
})
})
}
window.refreshType = function () {
table.reload('dict-type-table')
}
window.addData = function () {
layer.open({
type: 2,
title: '新增',
shade: 0.1,
area: ['500px', '450px'],
content: '/system/dict/dictData/add?typeCode=' + typeCode
})
}
window.editData = function (obj) {
layer.open({
type: 2,
title: '修改',
shade: 0.1,
area: ['500px', '450px'],
content: '/system/dict/dictData/edit?dataId=' + obj.data['dataId']
})
}
window.removeData = function (obj) {
layer.confirm('确定要删除该字典值?', {icon: 3, title: '提示'}, function (index) {
layer.close(index)
let loading = layer.load()
$.ajax({
url: '/system/dict/dictData/remove/' + obj.data['dataId'],
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)
}
}
})
})
}
table.on('tool(dict-data-table)', function (obj) {
if (obj.event === 'remove') {
window.removeData(obj)
} else if (obj.event === 'edit') {
window.editData(obj)
} else if (obj.event === 'details') {
window.details(obj)
}
})
table.on('toolbar(dict-data-table)', function (obj) {
if (obj.event === 'add') {
window.addData()
} else if (obj.event === 'refresh') {
window.refreshData()
} else if (obj.event === 'batchRemove') {
window.batchRemoveDictData(obj)
}
})
form.on('submit(dict-data-query)', function (data) {
data.field.typeCode = typeCode
table.reload('dict-data-table', {where: data.field})
return false
})
form.on('switch(dict-data-enable)', function (obj) {
let operate
if (obj.elem.checked) {
operate = 'enable'
} else {
operate = 'disable'
}
let loading = layer.load()
$.ajax({
url: '/system/dict/dictData/' + operate,
data: JSON.stringify({dataId: 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.refreshData = function () {
table.reload('dict-data-table')
}
window.batchRemoveDictType = 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('dict-type-table')
var hasCheckData = hasCheck.data
if (hasCheckData.length > 0) {
$.each(hasCheckData, function (index, element) {
ids.push(element.id)
})
}
layer.confirm('确定要删除选中权限?', {
icon: 3,
title: '提示'
}, function (index) {
layer.close(index)
let loading = layer.load()
$.ajax({
url: '/system/dict/dictData/batchRemoveDictType',
data: {ids: ids},
dataType: 'json',
type: 'delete',
success: function (result) {
layer.close(loading)
if (result.success) {
popup.success(result.msg, function () {
table.reload('dict-type-table');
})
} else {
popup.failure(result.msg)
}
}
})
})
}
window.batchRemoveDictData = 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('dict-data-table')
var hasCheckData = hasCheck.data
if (hasCheckData.length > 0) {
$.each(hasCheckData, function (index, element) {
ids.push(element.dataId)
})
}
layer.confirm('确定要删除选中权限?', {
icon: 3,
title: '提示'
}, function (index) {
layer.close(index)
let loading = layer.load()
$.ajax({
url: '/system/dict/dictData/batchRemoveDictData',
data: {ids: ids},
dataType: 'json',
type: 'delete',
success: function (result) {
layer.close(loading)
if (result.success) {
popup.success(result.msg, function () {
table.reload('dict-data-table');
})
} else {
popup.failure(result.msg)
}
}
})
})
}
})
</script>
</html>
+4 -4
View File
@@ -12,7 +12,7 @@
<div class="layui-col-md6" id="host-info-card">
<div class="layui-card">
<div class="layui-card-header">
主机信息
主机监控
</div>
<div class="layui-card-body">
<div class="layui-row layui-col-space10">
@@ -95,7 +95,7 @@
<div class="layui-card">
<div class="layui-card-header">主机信息</div>
<div class="layui-card-body">
<table class="layui-table" lay-skin="line">
<table class="layui-table">
<thead>
<tr>
<th>属性</th>
@@ -244,7 +244,6 @@
})
let bgColor = "#fff";
let color = [
"#0090FF",
"#36CE9E",
@@ -269,7 +268,7 @@
let echartData = [];
var option = {
backgroundColor: bgColor,
backgroundColor: 'transparent',
color: color,
legend: {
right: 10,
@@ -286,6 +285,7 @@
}
},
grid: {
backgroundColor: 'transparent',
top: 100,
containLabel: true
},