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): def wrapper(*args, **kwargs):
# 定义管理员的id为1 # 定义管理员的id为1
if current_user.username == current_app.config.get("SUPERADMIN"): if current_user.username == current_app.config.get("SUPERADMIN"):
if log:
admin_log(request=request, is_access=True)
return func(*args, **kwargs) return func(*args, **kwargs)
if not power in session.get('permissions'): if not power in session.get('permissions'):
if log: if log:
admin_log(request=request, is_access=False) admin_log(request=request, is_access=False)
@@ -26,8 +31,10 @@ def authorize(power: str, log: bool = False):
abort(403) abort(403)
else: else:
return jsonify(success=False, msg="权限不足!") return jsonify(success=False, msg="权限不足!")
if log: if log:
admin_log(request=request, is_access=True) admin_log(request=request, is_access=True)
return func(*args, **kwargs) return func(*args, **kwargs)
return wrapper 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() dict_all = DictType.query.filter(mf.get_filter(DictType)).layui_paginate()
count = dict_all.total count = dict_all.total
data = curd.model_to_dicts(schema=DictTypeOutSchema, data=dict_all.items) data = curd.model_to_dicts(schema=DictTypeOutSchema, data=dict_all.items)
return table_api(data=data, count=count) return table_api(data=data, count=count)
@@ -46,13 +47,24 @@ def dict_type_add():
@authorize("system:dict:add", log=True) @authorize("system:dict:add", log=True)
def dict_type_save(): def dict_type_save():
req_json = request.get_json(force=True) req_json = request.get_json(force=True)
description = str_escape(req_json.get("description"))
enable = str_escape(req_json.get("enable")) data = {
type_code = str_escape(req_json.get("typeCode")) 'type_name': str_escape(req_json.get("typeName")),
if type_code is None: 'type_code': str_escape(req_json.get("typeCode")),
return fail_api(msg="标识必须填写") 'enable': str_escape(req_json.get("enable")),
type_name = str_escape(req_json.get("typeName")) 'description': str_escape(req_json.get("description"))
d = DictType(type_name=type_name, type_code=type_code, enable=enable, description=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.add(d)
db.session.commit() db.session.commit()
if d.id is None: if d.id is None:
@@ -75,16 +87,26 @@ def dict_type_edit():
def dict_type_update(): def dict_type_update():
req_json = request.get_json(force=True) req_json = request.get_json(force=True)
id = str_escape(req_json.get("id")) id = str_escape(req_json.get("id"))
description = str_escape(req_json.get("description"))
enable = str_escape(req_json.get("enable")) data = {
type_code = str_escape(req_json.get("typeCode")) "description": str_escape(req_json.get("description")),
type_name = str_escape(req_json.get("typeName")) "enable": str_escape(req_json.get("enable")),
DictType.query.filter_by(id=id).update({ "type_code": str_escape(req_json.get("typeCode")),
"description": description, "type_name": str_escape(req_json.get("typeName"))
"enable": enable, }
"type_code": type_code,
"type_name": type_name 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() db.session.commit()
return success_api(msg="更新成功") return success_api(msg="更新成功")
@@ -94,11 +116,11 @@ def dict_type_update():
@authorize("system:dict:edit", log=True) @authorize("system:dict:edit", log=True)
def dict_type_enable(): def dict_type_enable():
_id = request.get_json(force=True).get('id') _id = request.get_json(force=True).get('id')
if id: if _id:
res = curd.enable_status(DictType,_id) res = curd.enable_status(DictType, _id)
if not res: if not res:
return fail_api(msg="出错啦") return fail_api(msg="出错啦")
return success_api("成功") return success_api("成功")
return fail_api(msg="数据错误") return fail_api(msg="数据错误")
@@ -107,8 +129,8 @@ def dict_type_enable():
@authorize("system:dict:edit", log=True) @authorize("system:dict:edit", log=True)
def dict_type_dis_enable(): def dict_type_dis_enable():
_id = request.get_json(force=True).get('id') _id = request.get_json(force=True).get('id')
if id: if _id:
res = curd.disable_status(DictType,_id) res = curd.disable_status(DictType, _id)
if not res: if not res:
return fail_api(msg="出错啦") return fail_api(msg="出错啦")
return success_api("禁用成功") return success_api("禁用成功")
@@ -119,9 +141,15 @@ def dict_type_dis_enable():
@bp.delete('/dictType/remove/<int:_id>') @bp.delete('/dictType/remove/<int:_id>')
@authorize("system:dict:remove", log=True) @authorize("system:dict:remove", log=True)
def dict_type_delete(_id): 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: if not res:
return fail_api(msg="删除失败") return fail_api(msg="删除失败")
db.session.commit()
return success_api(msg="删除成功") return success_api(msg="删除成功")
@@ -148,11 +176,13 @@ def dict_data_add():
@authorize("system:dict:add", log=True) @authorize("system:dict:add", log=True)
def dict_data_save(): def dict_data_save():
req_json = request.get_json(force=True) req_json = request.get_json(force=True)
data_label = str_escape(req_json.get("dataLabel")) data_label = str_escape(req_json.get("dataLabel"))
data_value = str_escape(req_json.get("dataValue")) data_value = str_escape(req_json.get("dataValue"))
enable = str_escape(req_json.get("enable")) enable = str_escape(req_json.get("enable"))
remark = str_escape(req_json.get("remark")) remark = str_escape(req_json.get("remark"))
type_code = str_escape(req_json.get("typeCode")) 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) d = DictData(data_label=data_label, data_value=data_value, enable=enable, remark=remark, type_code=type_code)
db.session.add(d) db.session.add(d)
db.session.commit() db.session.commit()
@@ -213,7 +243,7 @@ def dict_data_disenable():
return fail_api(msg="数据错误") return fail_api(msg="数据错误")
# 删除字典类型 # 删除字典数据
@bp.delete('dictData/remove/<int:id>') @bp.delete('dictData/remove/<int:id>')
@authorize("system:dict:remove", log=True) @authorize("system:dict:remove", log=True)
def dict_data_delete(id): def dict_data_delete(id):
@@ -221,3 +251,40 @@ def dict_data_delete(id):
if not res: if not res:
return fail_api(msg="删除失败") return fail_api(msg="删除失败")
return success_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(): def login_log():
# orm查询 # orm查询
# 使用分页获取data需要.items # 使用分页获取data需要.items
log = AdminLog.query.filter( log = AdminLog.query.filter_by(
AdminLog.url != '/passport/login' url='/system/passport/login'
).order_by(desc(AdminLog.create_time)).layui_paginate() ).order_by(desc(AdminLog.create_time)).layui_paginate()
count = log.total count = log.total
return table_api(data=model_to_dicts(schema=LogOutSchema, data=log.items), count=count) return table_api(data=model_to_dicts(schema=LogOutSchema, data=log.items), count=count)
@@ -35,8 +35,8 @@ def login_log():
def operate_log(): def operate_log():
# orm查询 # orm查询
# 使用分页获取data需要.items # 使用分页获取data需要.items
log = AdminLog.query.filter_by( log = AdminLog.query.filter(
url='/passport/login' AdminLog.url != '/system/passport/login'
).order_by( ).order_by(
desc(AdminLog.create_time)).layui_paginate() desc(AdminLog.create_time)).layui_paginate()
count = log.total count = log.total
+22 -4
View File
@@ -1,7 +1,4 @@
.pear-container {
background-color: whitesmoke;
margin: 10px;
}
.pear-card { .pear-card {
width: 100%; width: 100%;
@@ -28,6 +25,16 @@
margin-bottom: 3px; 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 { .pear-card2 i {
font-size: 30px; font-size: 30px;
height: 90px; height: 90px;
@@ -185,3 +192,14 @@
color: #333; 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) { 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; var $iframeLoad;
if (time != false && time != 0) { if (time != false && time != 0) {
+9 -10
View File
@@ -26,7 +26,8 @@
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">负责人</label> <label class="layui-form-label">负责人</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" value="{{ dept.leader }}" name="leader" lay-verify="required" autocomplete="off" <input type="text" value="{{ dept.leader }}" name="leader" lay-verify="required"
autocomplete="off"
placeholder="请输入负责人" placeholder="请输入负责人"
class="layui-input"> class="layui-input">
</div> </div>
@@ -34,7 +35,8 @@
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">邮箱</label> <label class="layui-form-label">邮箱</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" value="{{ dept.email }}" name="email" lay-verify="required" autocomplete="off" <input type="text" value="{{ dept.email }}" name="email" lay-verify="required"
autocomplete="off"
placeholder="请输入邮箱" placeholder="请输入邮箱"
class="layui-input"> class="layui-input">
</div> </div>
@@ -42,7 +44,8 @@
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">联系方式</label> <label class="layui-form-label">联系方式</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" value="{{ dept.phone }}" name="phone" lay-verify="required" autocomplete="off" <input type="text" value="{{ dept.phone }}" name="phone" lay-verify="required"
autocomplete="off"
placeholder="请输入联系方式" placeholder="请输入联系方式"
class="layui-input"> class="layui-input">
</div> </div>
@@ -70,11 +73,7 @@
<label class="layui-form-label">地址</label> <label class="layui-form-label">地址</label>
<div class="layui-input-block"> <div class="layui-input-block">
<textarea placeholder="请输入详细地址" name="address" <textarea placeholder="请输入详细地址" name="address"
class="layui-textarea"> class="layui-textarea">{% if dept.address %}{{ dept.address }}{% endif %}</textarea>
{% if dept.address %}
{{ dept.address }}
{% endif %}
</textarea>
</div> </div>
</div> </div>
</div> </div>
@@ -109,12 +108,12 @@
type: 'put', type: 'put',
success: function (result) { success: function (result) {
if (result.success) { if (result.success) {
layer.msg(result.msg, { icon: 1, time: 1000 }, function () { layer.msg(result.msg, {icon: 1, time: 1000}, function () {
parent.layer.close(parent.layer.getFrameIndex(window.name))//关闭当前页 parent.layer.close(parent.layer.getFrameIndex(window.name))//关闭当前页
parent.render() parent.render()
}) })
} else { } else {
layer.msg(result.msg, { icon: 2, time: 1000 }) layer.msg(result.msg, {icon: 2, time: 1000})
} }
} }
}) })
+4 -4
View File
@@ -12,14 +12,14 @@
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">名称</label> <label class="layui-form-label">名称</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" name="typeName" lay-verify="title" autocomplete="off" placeholder="请输入名称" <input type="text" name="typeName" lay-verify="required" autocomplete="off" placeholder="请输入名称"
class="layui-input"> class="layui-input">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">标识</label> <label class="layui-form-label">标识</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" name="typeCode" lay-verify="title" autocomplete="off" placeholder="请输入标识" <input type="text" name="typeCode" lay-verify="required" autocomplete="off" placeholder="请输入标识"
class="layui-input"> class="layui-input">
</div> </div>
</div> </div>
@@ -41,12 +41,12 @@
</div> </div>
<div class="bottom"> <div class="bottom">
<div class="button-container"> <div class="button-container">
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit="" <button type="submit" class="layui-btn layui-btn-sm" lay-submit=""
lay-filter="dict-type-save"> lay-filter="dict-type-save">
<i class="layui-icon layui-icon-ok"></i> <i class="layui-icon layui-icon-ok"></i>
提交 提交
</button> </button>
<button type="reset" class="pear-btn pear-btn-sm"> <button type="reset" class="layui-btn layui-btn-primary layui-btn-sm">
<i class="layui-icon layui-icon-refresh"></i> <i class="layui-icon layui-icon-refresh"></i>
重置 重置
</button> </button>
+3 -3
View File
@@ -28,7 +28,7 @@
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" value="{{ type_code }}" readonly="readonly" name="typeCode" <input type="text" value="{{ type_code }}" readonly="readonly" name="typeCode"
lay-verify="title" lay-verify="title"
autocomplete="off" placeholder="请输入标" class="layui-input"> autocomplete="off" placeholder="请输入标" class="layui-input">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
@@ -49,12 +49,12 @@
</div> </div>
<div class="bottom"> <div class="bottom">
<div class="button-container"> <div class="button-container">
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit="" <button type="submit" class="layui-btn layui-btn-sm" lay-submit=""
lay-filter="dict-data-save"> lay-filter="dict-data-save">
<i class="layui-icon layui-icon-ok"></i> <i class="layui-icon layui-icon-ok"></i>
提交 提交
</button> </button>
<button type="reset" class="pear-btn pear-btn-sm"> <button type="reset" class="layui-btn layui-btn-primary layui-btn-sm">
<i class="layui-icon layui-icon-refresh"></i> <i class="layui-icon layui-icon-refresh"></i>
重置 重置
</button> </button>
+9 -8
View File
@@ -19,21 +19,21 @@
<label class="layui-form-label">标签</label> <label class="layui-form-label">标签</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" value="{{ dict_data.data_label }}" name="dataLabel" lay-verify="title" <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> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label"></label> <label class="layui-form-label"></label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" value="{{ dict_data.data_value }}" name="dataValue" lay-verify="title" <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> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">标识</label> <label class="layui-form-label">标识</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" value="{{ dict_data.type_code }}" readonly="readonly" name="typeCode" <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> </div>
<div class="layui-form-item"> <div class="layui-form-item">
@@ -49,7 +49,8 @@
<label class="layui-form-label">描述</label> <label class="layui-form-label">描述</label>
<div class="layui-input-block"> <div class="layui-input-block">
<textarea placeholder="请输入描述" name="remark" <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> </div>
</div> </div>
@@ -57,12 +58,12 @@
</div> </div>
<div class="bottom"> <div class="bottom">
<div class="button-container"> <div class="button-container">
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit="" <button type="submit" class="layui-btn layui-btn-sm" lay-submit=""
lay-filter="dict-data-save"> lay-filter="dict-data-save">
<i class="layui-icon layui-icon-ok"></i> <i class="layui-icon layui-icon-ok"></i>
提交 提交
</button> </button>
<button type="reset" class="pear-btn pear-btn-sm"> <button type="reset" class="layui-btn layui-btn-primary layui-btn-sm">
<i class="layui-icon layui-icon-refresh"></i> <i class="layui-icon layui-icon-refresh"></i>
重置 重置
</button> </button>
@@ -84,12 +85,12 @@
type: 'put', type: 'put',
success: function (result) { success: function (result) {
if (result.success) { if (result.success) {
layer.msg(result.msg, { icon: 1, time: 1000 }, function () { layer.msg(result.msg, {icon: 1, time: 1000}, function () {
parent.layer.close(parent.layer.getFrameIndex(window.name))//关闭当前页 parent.layer.close(parent.layer.getFrameIndex(window.name))//关闭当前页
parent.layui.table.reload('dict-data-table') parent.layui.table.reload('dict-data-table')
}) })
} else { } else {
layer.msg(result.msg, { icon: 2, time: 1000 }) layer.msg(result.msg, {icon: 2, time: 1000})
} }
} }
}) })
+13 -10
View File
@@ -12,22 +12,22 @@
<div class="layui-form-item layui-hide"> <div class="layui-form-item layui-hide">
<label class="layui-form-label">编号</label> <label class="layui-form-label">编号</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" value="{{ 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"> placeholder="请输入标题" class="layui-input">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">名称</label> <label class="layui-form-label">名称</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" value="{{ dict_type.type_name }}" name="typeName" lay-verify="title" <input type="text" value="{{ dict_type.type_name }}" name="typeName" lay-verify="required"
autocomplete="off" placeholder="请输入标题" class="layui-input"> autocomplete="off" placeholder="请输入名称" class="layui-input">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">标识</label> <label class="layui-form-label">标识</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" value="{{ dict_type.type_code }}" readonly name="typeCode" <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> </div>
<div class="layui-form-item"> <div class="layui-form-item">
@@ -42,8 +42,11 @@
<div class="layui-form-item layui-form-text"> <div class="layui-form-item layui-form-text">
<label class="layui-form-label">描述</label> <label class="layui-form-label">描述</label>
<div class="layui-input-block"> <div class="layui-input-block">
<textarea placeholder="请输入描述" name="description" <textarea
class="layui-textarea">{{ dict_type.description }}</textarea> placeholder="请输入描述"
name="description"
class="layui-textarea"
>{% if dict_type.description %}{{ dict_type.description }}{% endif %}</textarea>
</div> </div>
</div> </div>
</div> </div>
@@ -51,12 +54,12 @@
</div> </div>
<div class="bottom"> <div class="bottom">
<div class="button-container"> <div class="button-container">
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit="" <button type="submit" class="layui-btn layui-btn-primary layui-btn-sm" lay-submit=""
lay-filter="dict-type-update"> lay-filter="dict-type-update">
<i class="layui-icon layui-icon-ok"></i> <i class="layui-icon layui-icon-ok"></i>
提交 提交
</button> </button>
<button type="reset" class="pear-btn pear-btn-sm"> <button type="reset" class="layui-btn layui-btn-sm">
<i class="layui-icon layui-icon-refresh"></i> <i class="layui-icon layui-icon-refresh"></i>
重置 重置
</button> </button>
@@ -78,12 +81,12 @@
type: 'put', type: 'put',
success: function (result) { success: function (result) {
if (result.success) { if (result.success) {
layer.msg(result.msg, { icon: 1, time: 1000 }, function () { layer.msg(result.msg, {icon: 1, time: 1000}, function () {
parent.layer.close(parent.layer.getFrameIndex(window.name))//关闭当前页 parent.layer.close(parent.layer.getFrameIndex(window.name))//关闭当前页
parent.layui.table.reload('dict-type-table') parent.layui.table.reload('dict-type-table')
}) })
} else { } else {
layer.msg(result.msg, { icon: 2, time: 1000 }) layer.msg(result.msg, {icon: 2, time: 1000})
} }
} }
}) })
+133 -34
View File
@@ -10,16 +10,17 @@
<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" style="margin-bottom: unset;">
<label class="layui-form-label">字典名称</label> <label class="layui-form-label">字典名称</label>
<div class="layui-input-inline"> <div class="layui-input-inline">
<input type="text" name="typeName" placeholder="" class="layui-input"> <input type="text" name="typeName" placeholder="" class="layui-input">
</div> </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> <i class="layui-icon layui-icon-search"></i>
查询 查询
</button> </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> <i class="layui-icon layui-icon-refresh"></i>
重置 重置
</button> </button>
@@ -38,7 +39,8 @@
<div class="layui-col-md6"> <div class="layui-col-md6">
<div class="layui-card"> <div class="layui-card">
<div class="layui-card-body"> <div class="layui-card-body">
<svg class="empty" style="margin-top: 50px;margin-left: 220px;margin-bottom: 80px;" width="184" <div style="text-align: center;">
<svg class="empty" width="184"
height="152" viewBox="0 0 184 152" xmlns="http://www.w3.org/2000/svg"> height="152" viewBox="0 0 184 152" xmlns="http://www.w3.org/2000/svg">
<g fill="none" fillRule="evenodd"> <g fill="none" fillRule="evenodd">
<g transform="translate(24 31.67)"> <g transform="translate(24 31.67)">
@@ -61,6 +63,8 @@
</g> </g>
</g> </g>
</svg> </svg>
</div>
<table id="dict-data-table" lay-filter="dict-data-table"></table> <table id="dict-data-table" lay-filter="dict-data-table"></table>
</div> </div>
</div> </div>
@@ -69,48 +73,51 @@
</body> </body>
<script type="text/html" id="dict-type-toolbar"> <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> <i class="layui-icon layui-icon-add-1"></i>
新增 新增
</button> </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> <i class="layui-icon layui-icon-delete"></i>
删除 删除
</button> </button>
</script> </script>
<script type="text/html" id="dict-type-bar"> <script type="text/html" id="dict-type-bar">
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="edit"> <button class="layui-btn layui-btn-primary layui-btn-xs" lay-event="edit">
<i class="layui-icon layui-icon-edit"></i> <i class="layui-icon layui-icon-edit"> 编辑</i>
</button> </button>
<button class="pear-btn pear-btn-warming pear-btn-sm" lay-event="details"> <button class="layui-btn layui-btn-warming layui-btn-xs" lay-event="details">
<i class="layui-icon layui-icon-transfer"></i> <i class="layui-icon layui-icon-transfer"> 关联</i>
</button> </button>
<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="remove"> <button class="layui-btn layui-btn-danger layui-btn-xs" lay-event="remove">
<i class="layui-icon layui-icon-delete"></i> <i class="layui-icon layui-icon-delete"> 删除</i>
</button> </button>
</script> </script>
<script type="text/html" id="dict-type-enable"> <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 {{# } }}" }}> {{ "{{# if(d.enable==1){ }} checked {{# } }}" }}>
</script> </script>
<script type="text/html" id="dict-data-toolbar"> <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> <i class="layui-icon layui-icon-add-1"></i>
新增 新增
</button> </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> <i class="layui-icon layui-icon-delete"></i>
删除 删除
</button> </button>
</script> </script>
<script type="text/html" id="dict-data-bar"> <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>
<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> </button>
</script> </script>
@@ -131,21 +138,21 @@
let cols = [ let cols = [
[ [
{ type: 'checkbox' }, {type: 'checkbox'},
{ title: '字典名称', field: 'typeName', align: 'center', width: 120 }, {title: '字典名称', field: 'typeName', align: 'center', width: 120},
{ title: '描述', field: 'description', align: 'center' }, {title: '描述', field: 'description', align: 'center'},
{ title: '字典状态', field: 'enable', align: 'center', templet: '#dict-type-enable' }, {title: '字典状态', field: 'enable', align: 'center', templet: '#dict-type-enable', width: 100},
{ title: '操作', toolbar: '#dict-type-bar', align: 'center', width: 180 } {title: '操作', toolbar: '#dict-type-bar', align: 'center', width: 250}
] ]
] ]
let dataCols = [ let dataCols = [
[ [
{ type: 'checkbox' }, {type: 'checkbox'},
{ title: '标签', field: 'dataLabel', align: 'center', width: 120 }, {title: '标签', field: 'dataLabel', align: 'center', width: 120},
{ title: '对应值', field: 'dataValue', align: 'center' }, {title: '对应值', field: 'dataValue', align: 'center'},
{ title: '状态', field: 'enable', align: 'center', templet: '#dict-data-enable' }, {title: '状态', field: 'enable', align: 'center', templet: '#dict-data-enable'},
{ title: '操作', toolbar: '#dict-data-bar', align: 'center', width: 180 } {title: '操作', toolbar: '#dict-data-bar', align: 'center', width: 180}
] ]
] ]
@@ -192,11 +199,13 @@
window.addType() window.addType()
} else if (obj.event === 'refresh') { } else if (obj.event === 'refresh') {
window.refreshType() window.refreshType()
} else if (obj.event === 'batchRemove') {
window.batchRemoveDictType(obj)
} }
}) })
form.on('submit(dict-type-query)', function (data) { form.on('submit(dict-type-query)', function (data) {
table.reload('dict-type-table', { where: data.field }) table.reload('dict-type-table', {where: data.field})
return false return false
}) })
@@ -210,7 +219,7 @@
let loading = layer.load() let loading = layer.load()
$.ajax({ $.ajax({
url: '/system/dict/dictType/' + operate, url: '/system/dict/dictType/' + operate,
data: JSON.stringify({ id: this.value }), data: JSON.stringify({id: this.value}),
dataType: 'json', dataType: 'json',
contentType: 'application/json', contentType: 'application/json',
type: 'put', type: 'put',
@@ -246,7 +255,7 @@
} }
window.removeType = function (obj) { window.removeType = function (obj) {
layer.confirm('确定要删除该字典分类', { icon: 3, title: '提示' }, function (index) { layer.confirm('确定要删除该字典分类?字典值会一并删除!', {icon: 3, title: '提示'}, function (index) {
layer.close(index) layer.close(index)
let loading = layer.load() let loading = layer.load()
$.ajax({ $.ajax({
@@ -258,7 +267,7 @@
if (result.success) { if (result.success) {
popup.success(result.msg, function () { popup.success(result.msg, function () {
if (typeCode === obj.data['typeCode']) { if (typeCode === obj.data['typeCode']) {
$('[lay-id=\'dict-data-table\']').remove() $('div[lay-table-id="dict-data-table"]').remove()
$('.empty').show() $('.empty').show()
} }
obj.del() obj.del()
@@ -296,7 +305,7 @@
} }
window.removeData = function (obj) { window.removeData = function (obj) {
layer.confirm('确定要删除该字典值', { icon: 3, title: '提示' }, function (index) { layer.confirm('确定要删除该字典值', {icon: 3, title: '提示'}, function (index) {
layer.close(index) layer.close(index)
let loading = layer.load() let loading = layer.load()
$.ajax({ $.ajax({
@@ -332,12 +341,14 @@
window.addData() window.addData()
} else if (obj.event === 'refresh') { } else if (obj.event === 'refresh') {
window.refreshData() window.refreshData()
} else if (obj.event === 'batchRemove') {
window.batchRemoveDictData(obj)
} }
}) })
form.on('submit(dict-data-query)', function (data) { form.on('submit(dict-data-query)', function (data) {
data.field.typeCode = typeCode data.field.typeCode = typeCode
table.reload('dict-data-table', { where: data.field }) table.reload('dict-data-table', {where: data.field})
return false return false
}) })
@@ -351,7 +362,7 @@
let loading = layer.load() let loading = layer.load()
$.ajax({ $.ajax({
url: '/system/dict/dictData/' + operate, url: '/system/dict/dictData/' + operate,
data: JSON.stringify({ dataId: this.value }), data: JSON.stringify({dataId: this.value}),
dataType: 'json', dataType: 'json',
contentType: 'application/json', contentType: 'application/json',
type: 'put', type: 'put',
@@ -369,6 +380,94 @@
window.refreshData = function () { window.refreshData = function () {
table.reload('dict-data-table') 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> </script>
</html> </html>
+4 -4
View File
@@ -12,7 +12,7 @@
<div class="layui-col-md6" id="host-info-card"> <div class="layui-col-md6" id="host-info-card">
<div class="layui-card"> <div class="layui-card">
<div class="layui-card-header"> <div class="layui-card-header">
主机信息 主机监控
</div> </div>
<div class="layui-card-body"> <div class="layui-card-body">
<div class="layui-row layui-col-space10"> <div class="layui-row layui-col-space10">
@@ -95,7 +95,7 @@
<div class="layui-card"> <div class="layui-card">
<div class="layui-card-header">主机信息</div> <div class="layui-card-header">主机信息</div>
<div class="layui-card-body"> <div class="layui-card-body">
<table class="layui-table" lay-skin="line"> <table class="layui-table">
<thead> <thead>
<tr> <tr>
<th>属性</th> <th>属性</th>
@@ -244,7 +244,6 @@
}) })
let bgColor = "#fff";
let color = [ let color = [
"#0090FF", "#0090FF",
"#36CE9E", "#36CE9E",
@@ -269,7 +268,7 @@
let echartData = []; let echartData = [];
var option = { var option = {
backgroundColor: bgColor, backgroundColor: 'transparent',
color: color, color: color,
legend: { legend: {
right: 10, right: 10,
@@ -286,6 +285,7 @@
} }
}, },
grid: { grid: {
backgroundColor: 'transparent',
top: 100, top: 100,
containLabel: true containLabel: true
}, },