Authored by 王涛

Merge branch 'master-V32-XuHaoJie' into 'master'

通用-订阅管理优化-添加业务系统和资源类型订阅



See merge request !245
... ... @@ -251,9 +251,11 @@ layui.define(['table', 'form', 'admin', 'layer', 'common','sessions'], function
return '<div class="small-icon small-icon-msg"></div>'
break;
}
}}
, {field: 'alarmTempTotal', title: '订阅对象', align: 'center', sort: true, width:120,
templet:function (d){
}
}
, {
field: 'alarmTempTotal', title: '订阅对象', align: 'center', sort: true, minWidth: 140,
templet: function (d) {
// if(d.useTotal != '0'){
// return `<div><span data-id="${d.subId}" class="layui-table-link view-alarmsubscribe-target">${d.useTotal}</span></div>`;
// }else{
... ... @@ -263,7 +265,9 @@ layui.define(['table', 'form', 'admin', 'layer', 'common','sessions'], function
return `<div>
<!--<span data-id="${d.subId}" class="layui-table-link view-alarmsubscribe-target">${d.useTotal}</span> / -->
<span data-id="${d.subId}" class="layui-table-link view-alarmsubscribe-resource" lay-tips="资源订阅">${d.resSubTotal}</span> /
<span data-id="${d.subId}" class="layui-table-link view-alarmsubscribe-kpi" lay-tips="指标订阅">${d.kpiSubTotal}</span>
<span data-id="${d.subId}" class="layui-table-link view-alarmsubscribe-kpi" lay-tips="指标订阅">${d.kpiSubTotal}</span> /
<span data-id="${d.subId}" class="layui-table-link view-alarmsubscribe-resType" lay-tips="资源类型">${d.resTypeSubTotal}</span> /
<span data-id="${d.subId}" class="layui-table-link view-alarmsubscribe-busId" lay-tips="业务系统">${d.busSubTotal}</span>
</div>`;
}}
... ... @@ -304,9 +308,11 @@ layui.define(['table', 'form', 'admin', 'layer', 'common','sessions'], function
}
, {title: '操作', align: 'center',width:200,fixed: 'right', toolbar:
'<div>' +
'<button data-id="{{d.subId}}" lay-tips="删除" type="button" class="layui-btn layui-btn-xs layui-btn-normal delete-alarmsubscribe-btn"><i class="layui-icon layui-icon-delete"></i></button>'+
'<button data-id="{{d.subId}}" lay-tips="资源订阅" type="button" class="layui-btn layui-btn-xs layui-btn-normal alarmsubscribe-resource-btn"><i class="layui-icon layui-icon-star"></i></button>'+
'<button data-id="{{d.subId}}" lay-tips="指标订阅" type="button" class="layui-btn layui-btn-xs layui-btn-normal alarmsubscribe-kpi-btn"><i class="layui-icon layui-icon-star-fill"></i></button>'+
'<button data-id="{{d.subId}}" lay-tips="删除" type="button" class="layui-btn layui-btn-xs layui-btn-normal delete-alarmsubscribe-btn"><i class="layui-icon layui-icon-delete"></i></button>' +
'<button data-id="{{d.subId}}" lay-tips="资源订阅" type="button" class="layui-btn layui-btn-xs layui-btn-normal alarmsubscribe-resource-btn"><i class="layui-icon layui-icon-star"></i></button>' +
'<button data-id="{{d.subId}}" lay-tips="指标订阅" type="button" class="layui-btn layui-btn-xs layui-btn-normal alarmsubscribe-kpi-btn"><i class="layui-icon layui-icon-star-fill"></i></button>' +
'<button data-id="{{d.subId}}" lay-tips="资源类型订阅" type="button" class="layui-btn layui-btn-xs layui-btn-normal alarmsubscribe-resType-btn"><i class="layui-icon layui-icon-star-fill"></i></button>' +
'<button data-id="{{d.subId}}" lay-tips="业务类型订阅" type="button" class="layui-btn layui-btn-xs layui-btn-normal alarmsubscribe-busId-btn"><i class="layui-icon layui-icon-star-fill"></i></button>' +
'</div>'
}
]],
... ... @@ -475,7 +481,8 @@ layui.define(['table', 'form', 'admin', 'layer', 'common','sessions'], function
,data:{
subId:subId,
busId:busId,
resTypeCode:resTypeCode
resTypeCode:resTypeCode,
keyword:$('#condition-resType-keyword').val()
}
,done:function (res){
layer.closeAll('loading');
... ... @@ -613,6 +620,15 @@ layui.define(['table', 'form', 'admin', 'layer', 'common','sessions'], function
});
}
});
//回车搜索
$('#condition-resType-keyword').keydown(function (e) {
if (e.keyCode === 13) {
var bus = xmSelect.get('#dyglResListBusType', true);
var resType = xmSelect.get('#dyglResListResType', true);
reloadTbody(bus.getValue('valueStr'),resType.getValue('valueStr'));
}
});
}
});
... ... @@ -658,7 +674,6 @@ layui.define(['table', 'form', 'admin', 'layer', 'common','sessions'], function
}
function reloadData(res) {
var trs = '';
$.each(res.data,function (i,v){
trs += `<tr><td>${i+1}</td><td>${v.resName}</td><td>${v.ip}</td><td>${v.adminName}</td>
... ... @@ -668,6 +683,11 @@ layui.define(['table', 'form', 'admin', 'layer', 'common','sessions'], function
<form class="layui-form layui-card-header layuiadmin-card-header-auto" lay-filter="dyglTools-form">
<div class="layui-form-item">
<div class="layui-inline">
<div class="layui-input-inline layui-input-inline--long">
<input type="text" id="condition-resType-keyword" placeholder="输入名称,回车搜索" autocomplete="off"
lay-tips="关键字检索包含: </br>IP地址</br>资源名称</br>负责人"
class="layui-input">
</div>
<div class="layui-input-inline layui-input-inline--long multi-query" id="dyglResListBusType">
</div>
<div class="layui-input-inline layui-input-inline--long multi-query" id="dyglResListResType">
... ... @@ -742,8 +762,8 @@ layui.define(['table', 'form', 'admin', 'layer', 'common','sessions'], function
reloadalarmsubscribeTable();
});
$("#"+id).parent().parent().remove();
}else{
layer.msg("删除失败,请与管理员联系",{icon:7,time:3000});
} else {
layer.msg("删除失败,请与管理员联系", {icon: 7, time: 3000});
}
}
});
... ... @@ -752,16 +772,37 @@ layui.define(['table', 'form', 'admin', 'layer', 'common','sessions'], function
}
});
});
//查看资源类型订阅列表
$(".view-alarmsubscribe-resType").on("click", function () {
var subId = $(this).data("id");
common.openWin("template/res/typeSubscribeList", "选择资源类型", {
subId: subId,
type: 0
}, ["返回"], function () {
reloadalarmsubscribeTable();
return true;
});
});
//查看业务类型订阅列表
$(".view-alarmsubscribe-busId").on("click", function () {
var subId = $(this).data("id");
common.openWin("template/res/typeSubscribeList", "选择业务系统", {
subId: subId,
type: 1
}, ["返回"], function () {
reloadalarmsubscribeTable();
return true;
});
});
//资源订阅
$(".alarmsubscribe-resource-btn").on("click",function (){
$(".alarmsubscribe-resource-btn").on("click", function () {
if ($.inArray('back:alarmsubscribe:resource', checkList) == -1) {
layer.msg('暂无权限!', {icon: 7, time: 3000});
return;
}
var subId = $(this).data("id");
var oldData = getResOrKpiBySubId(subId,'res');
oldData = $.map(oldData,function (item) {
var oldData = getResOrKpiBySubId(subId, 'res');
oldData = $.map(oldData, function (item) {
return item.resId;
})
common.openWin("template/res/reslist","选择资源",{oldData:oldData},["选择"], function () {
... ... @@ -873,17 +914,65 @@ layui.define(['table', 'form', 'admin', 'layer', 'common','sessions'], function
return true;
});
});
//资源类型订阅
$(".alarmsubscribe-resType-btn").on("click", function () {
var subId = $(this).data("id");
var list = getResTypeOrBusId(subId, 0);
//回填数据
common.openWin("baseconfig/resourcetype/index", "选择资源类型", {"resTypes": list,"showType":0}, ["选择"], function () {
//找到选择的资源类型 并且订阅
var resourcetype = layui.resourcetype({"resTypes": list});
var data = resourcetype.getResTypeChecks();
insertResTypeOrBusId(data, 0, subId);
});
});
//业务类型订阅
$(".alarmsubscribe-busId-btn").on("click", function () {
var subId = $(this).data("id");
var list = getResTypeOrBusId(subId, 1);
//回填数据
common.openWin("baseconfig/bustype/index", "选择业务类型", {busIds: list}, ["选择"], function () {
//找到选择的所有业务 并且订阅
var bustype = layui.bustype({"busIds": list});
var data = bustype.getData();
insertResTypeOrBusId(data, 1, subId);
});
});
}
});
//添加或修改 资源类型订阅或业务订阅
function insertResTypeOrBusId(data, type, subId, id) {
let typeCode = data.map(item => item.resTypeCode ? item.resTypeCode : item.busId).toString();
let typeSubscribe = {
id: id,
subId: subId,
subType: type,
typeCode: typeCode
};
admin.req({
url: common.domainName + '/api-web/bTypeSubscribe/insertOrChange?access_token=' + accessToken,
type: 'post',
contentType: 'application/json',
data: JSON.stringify(typeSubscribe),
success: function (response) {
if (response.success) {
layer.closeAll();
layer.msg(!id ? '添加成功' : '修改成功', {icon: 1, time: 3000});
reloadalarmsubscribeTable();
}
},
});
}
//根据订阅id获取订阅的资源或指标
function getResOrKpiBySubId(subId,type) {
function getResOrKpiBySubId(subId, type) {
var oldData = [];
var url = '';
if (type == 'res') {
url = common.domainName+'/api-web/manage/resource/getResIdsBySubId?subId=' + subId;
url = common.domainName + '/api-web/manage/resource/getResIdsBySubId?subId=' + subId;
} else if (type == 'kpi') {
url = common.domainName+'/api-web/alarmsubscribe/getResAndKpiBySubId?subId=' + subId;
url = common.domainName + '/api-web/alarmsubscribe/getResAndKpiBySubId?subId=' + subId;
}
admin.req({
url: url,
... ... @@ -896,13 +985,28 @@ layui.define(['table', 'form', 'admin', 'layer', 'common','sessions'], function
}
//打开告警订阅窗口
function openAlarmsubscribeForm(id){
var title = id?"编辑告警订阅":"新增告警订阅";
title = `<a class="layui-icon layui-icon-edit win_title_icon"></a>${title}`;
common.openWin('baseconfig/alarmsubscribe/add',title, {id:id},['保存','取消'],function () {
function openAlarmsubscribeForm(id) {
var title = id ? "编辑告警订阅" : "新增告警订阅";
title = `<a class="layui-icon layui-icon-edit win_title_icon"></a>${title}`;
common.openWin('baseconfig/alarmsubscribe/add', title, {id: id}, ['保存', '取消'], function () {
$("#alarmsubscribe-form-save-id").trigger("click");
return false;
},null,['60%','80%'],null,null);
}, null, ['60%', '80%'], null, null);
}
//根据busId获取业务类型或资源的订阅
function getResTypeOrBusId(subId, type) {
let list = [];
admin.req({
url: common.domainName + '/api-web/bTypeSubscribe/subscribeList?subId=' + subId + '&subType=' + type,
async: false,
success: function (response) {
if (response.success) {
list = response.data.map(item => item.typeCode);
}
},
});
return list;
}
... ... @@ -910,9 +1014,9 @@ layui.define(['table', 'form', 'admin', 'layer', 'common','sessions'], function
function reloadalarmsubscribeTable() {
var conditions = form.val('alarmsubscribe-form');
alarmsubscribeTable.reload({
where:{
access_token:accessToken,
policyId:policyId,
where: {
access_token: accessToken,
policyId: policyId,
subName: conditions.subName,
subType: subTypeSelect.getValue('valueStr'),
subWay: noticeWaySelect.getValue("valueStr"),
... ... @@ -1019,10 +1123,9 @@ layui.define(['table', 'form', 'admin', 'layer', 'common','sessions'], function
}
}
});
//获取选中的数据
function getCheckSubscribeData() {
return table.checkStatus('alarmsubscribeTable').data;
return table.checkStatus('alarmsubscTable').data;
}
return { getSubscribeData: getCheckSubscribeData,reloadsubscribe:reloadalarmsubscribeTable};
... ...
... ... @@ -26,6 +26,7 @@ layui.define(['table', 'form', 'admin', 'layer', 'laytpl', 'common', 'view', 'se
}
var mode = (data && data.mode) ? data.mode : '';
var username = (data && data.username) ? data.username : '';
let busIds = data.busIds ? data.busIds : [];
//展示类型
var showTypeList=[];
var dataBusType=[];
... ... @@ -257,7 +258,11 @@ layui.define(['table', 'form', 'admin', 'layer', 'laytpl', 'common', 'view', 'se
})
}
}
//回填数据
if(data && data.busIds){
//第一次进来回填数据
busTypeTable.setChecked(busIds);
}
// 点击编号编辑事件
$('.btn-bustype-edit').click(function () {
if ($.inArray('back:bustype:update', checkList) == -1) {
... ...
... ... @@ -17,23 +17,31 @@ layui.define(['form', 'admin', 'layer', 'laytpl', 'common', 'view', 'sessions',
var sessions = layui.sessions;
var accessToken = sessions.getToken()['access_token'];
var router = layui.router();
var resource_view='';
var biz_view='';
var collTypeSelect='';
var resource_view = '';
var biz_view = '';
var collTypeSelect = '';
//传递参数
let resTypes = data && data.resTypes ? data.resTypes : [];
let showType = data && data.showType==0 ? data.showType : 1;
if(showType == 0){
$('#resourceType-forbidden-type option[value="2"]').removeAttr("selected");
$('#resourceType-forbidden-type option[value="0"]').attr("selected", true);
form.render();
}
// 查询条件
var conditions = {resTypeName: '',userAccount:''}
var conditions = {resTypeName: '', userAccount: ''}
// 加载遮罩
var loading;
//获取权限列表
var checkList = common.checkPermission(accessToken);
var ddicCollType=[];
var ddicCollType = [];
//保存子节点
var arr=[];
var fun=undefined;
var arr = [];
var fun = undefined;
//展示类型
var showTypeList=[];
//展示类型是否展示 获取页面参数
var sign=typeof (data.sign) != 'undefined'?data.sign:true;
var sign=data && typeof (data.sign) != 'undefined'?data.sign:true;
//获取连接
var loginName = localStorage.getItem('lgn');
if (loginName != 'admin') {
... ... @@ -788,6 +796,9 @@ layui.define(['form', 'admin', 'layer', 'laytpl', 'common', 'view', 'sessions',
};
//设置禁用或启用
form.on('switch(switchResourceTypeForbidden)', function(obj){
if(data && showType == 0){//点击事件不生效
return ;
}
var resTypeCode = obj.elem.id;
//找到当前父节点的行
var $res = $('.ew-tree-table').find('table tbody tr[data-id="' + resTypeCode + '"]').eq(0);
... ... @@ -969,7 +980,7 @@ layui.define(['form', 'admin', 'layer', 'laytpl', 'common', 'view', 'sessions',
function loadResTypeTable() {
loading = layer.load(2)
conditions.resTypeName = $('#condition-restype-name').val();
conditions.userAccount = data.username && data.username[0] ? data.username[0] : '';
conditions.userAccount = data && data.username && data.username[0] ? data.username[0] : '';
admin.req({
url: domainName + '/api-web/manage/restype/listAll'
, data: conditions
... ... @@ -1148,19 +1159,32 @@ layui.define(['form', 'admin', 'layer', 'laytpl', 'common', 'view', 'sessions',
});
//回填数据
if (data && data.username) {
if (data.username.length == 1) {
$.ajax({
type: "get",
url: domainName + "/api-web/manage/restype/getResTypeByUser?access_token=" + accessToken + "&username=" + data.username[0],
success: function (res) {
if (res && res.success) {
var resTypeData = res.data;
restypeTable.setChecked(resTypeData.map(item => item.resType))
}
},
})
if (data.username.length == 1) {
$.ajax({
type: "get",
url: domainName + "/api-web/manage/restype/getResTypeByUser?access_token=" + accessToken + "&username=" + data.username[0],
success: function (res) {
if (res && res.success) {
var resTypeData = res.data;
restypeTable.setChecked(resTypeData.map(item => item.resType))
}
},
})
}
}
//回填数据
if(data && data.resTypes){
//第一次进来回填数据
restypeTable.setChecked(resTypes);
}
//启用禁用不可点
if(data && showType == 0){
//隐藏下拉框
$('.layui-inline-resourceType-forbidden').hide();
$.each($('.main td[data-field="forbidden"]'),function (i,v) {
$(this).find('.layui-unselect').addClass("layui-notClick");//设为不可点击
});
}
}
//默认全部展开
restypeTable.expandAll();
// 删除按钮事件
... ...
//资源指标列表
layui.define(['table', 'form', 'sessions', 'common'], function (exports) {
var $ = layui.$;
var form = layui.form;
var table = layui.table;
var common = layui.common;
var layer = layui.layer;
var admin = layui.admin;
//对外暴露的接口
exports('typeSubscribeList', function (data) {
var sessions = layui.sessions;
var accessToken = sessions.getToken().access_token;
var subType = data.type ? data.type : 0;//默认为资源类型
var subId = data.subId ? data.subId : '';
//回车搜索
$('#type_subscribe_list_keyword').keydown(function (e) {
if (e.keyCode === 13) {
reloadTypeSubscribeTable();
}
});
var cols = [];
if (subType) {//业务类型
cols = [[
{type: 'checkbox'},
{type: 'numbers', title: '序号', align: 'center'}
, {field: 'busTypeName', title: '业务名称', minWidth: 200, align: 'center'}
, {field: 'busTypeDesc', title: '业务备注', minWidth: 350, align: 'center'}
, {field: 'subName', title: '订阅名称', minWidth: 170, align: 'center'}
, {field: 'createTime', title: '订阅时间', minWidth: 150, align: 'center'}
, {
title: '操作', align: 'center', minWidth: 150,
templet: '<div><span data-subId="{{d.subId}}" data-id="{{d.id}}" data-typeCode="{{d.typeCode}}" class="layui-table-link typeSubscribe-btn-delete">删除</span>'
}
]]
} else {//资源类型
cols = [[
{type: 'checkbox'},
{type: 'numbers', title: '序号', align: 'center'}
, {field: 'typeCode', title: '编码', minWidth: 400, align: 'center'}
, {field: 'resTypeName', title: '资源类型名称', minWidth: 140, align: 'center'}
, {field: 'resTypeDesc', title: '资源类型备注', minWidth: 200, align: 'center'}
, {field: 'subName', title: '订阅名称', minWidth: 140, align: 'center'}
, {field: 'createTime', title: '订阅时间', minWidth: 140, align: 'center'}
, {
title: '操作', align: 'center', minWidth: 150,
templet: '<div><span data-subId="{{d.subId}}" data-id="{{d.id}}" data-typeCode="{{d.typeCode}}" class="layui-table-link typeSubscribe-btn-delete">删除</span>'
}
]]
}
//渲染表格
var typeSubscribeListable = table.render({
elem: '#type_subscribe_list_table'
, url: common.domainName + '/api-web/bTypeSubscribe/typeSubscribeList'
, where: {
access_token: accessToken,
keyword: $("#type_subscribe_list_keyword").val(),
subType: subType,
subId: subId
}
, height: 'full'
, cellMinWidth: 80
, page: {
layout: ['count', 'prev', 'page', 'next', 'limit', 'skip']
}
, cols: cols
, done: function () {
//删除
$(".typeSubscribe-btn-delete").on("click", function () {
var $this = $(this);
var id = $this.data('id');
var ids = new Array(id);
deleteTypeSubscribe(ids);
});
}
});
//删除数据
function deleteTypeSubscribe(ids) {
layer.confirm('数据删除后将无法恢复,您确定要删除吗?', {
btn: ['确定', '取消'] //按钮
}, function () {
admin.req({
url: common.domainName + '/api-web/bTypeSubscribe/deleteTypeSubscribe?access_token=' + accessToken
, type: "POST"
, traditional: true
, dataType: "json"
, data: {ids: ids}
}).done(function (res) {
if (res.success) {
layer.msg('删除成功', {
offset: '15px'
, icon: 1
, time: 1000
}, function () {
reloadTypeSubscribeTable();
});
}
}).error(function (error) {
console.log(error);
});
});
}
//删除
$("#typeSubscribe_delete").on("click", function () {
//获取选中数据
var li = getCheckKpiData();
deleteTypeSubscribe(li.map(item => item.id));
});
//刷新表格
function reloadTypeSubscribeTable() {
typeSubscribeListable.reload({
where: {
keyword: $("#type_subscribe_list_keyword").val(),
subType: subType,
subId: subId,
access_token: accessToken
}
});
}
//获取选中的数据
function getCheckKpiData() {
return table.checkStatus('type_subscribe_list_table').data;
}
return {getData: getCheckKpiData};
});
});
\ No newline at end of file
... ...
... ... @@ -7885,4 +7885,8 @@ form[lay-filter="activewarning-form"] .layui-inline {
}
.detail_menubox li{
font-size: 12px !important;
}
.layui-notClick{
pointer-events: none!important;
cursor:not-allowed!important;
}
\ No newline at end of file
... ...
... ... @@ -94,12 +94,23 @@
</div>
</div>
</script>
<script template lay-done="layui.data.sendParams(d.params)"></script>
<textarea id="bustype_param_id" style="display: none;">{{d}}</textarea>
<script>
layui.data.sendParams = function (params) {
layui.use('bustype', function (fn) {
fn(params);
});
};
</script>
\ No newline at end of file
layui.use('bustype', function (fn) {
var $ = layui.$;
var param = $("#bustype_param_id").val();
if(param.indexOf('{{d') != -1){
fn();
}else{
fn(JSON.parse(param));
}
});
</script>
<!--<script template lay-done="layui.data.sendParams(d.params)"></script>-->
<!--<script>-->
<!-- layui.data.sendParams = function (params) {-->
<!-- layui.use('bustype', function (fn) {-->
<!-- fn(params);-->
<!-- });-->
<!-- };-->
<!--</script>-->
\ No newline at end of file
... ...
... ... @@ -155,11 +155,26 @@
</button>
</div>
</script>
<script template lay-done="layui.data.sendParams(d.params)"></script>
<textarea id="resourcetype_param_id" style="display: none;">{{d}}</textarea>
<script>
layui.data.sendParams = function (params) {
layui.use('resourcetype', function (fn) {
fn(params);
});
};
</script>
\ No newline at end of file
layui.use('resourcetype', function (fn) {
var $ = layui.$;
var param = $("#resourcetype_param_id").val();
if(param.indexOf('{{d') != -1){
fn();
}else{
fn(JSON.parse(param));
}
});
</script>
<!--<script template lay-done="layui.data.sendParams(d)"></script>-->
<!--<script>-->
<!-- layui.data.sendParams = function (d) {-->
<!-- console.log(d);-->
<!-- console.log(d.params);-->
<!-- layui.use('resourcetype', function (fn) {-->
<!-- fn(d.params);-->
<!-- });-->
<!-- };-->
<!--</script>-->
\ No newline at end of file
... ...
<title>资源类型订阅列表</title>
<article class="page-container">
<div class="page-panel">
<div class="main">
<div class="layui-card">
<div class="layui-card-header">
<div class="layui-status">
<form class="layui-form layui-card-header layuiadmin-card-header-auto" lay-filter="res-list-query-form">
<div class="layui-form-item">
<div class="layui-inline">
<div class="layui-input-inline layui-input-inline--long">
<input id="type_subscribe_list_keyword" type="text" placeholder="输入关键字,回车搜索" lay-tips='关键字检索包括:<br>名称</br>编码</br>备注' name="keyword" class="layui-input">
</div>
</div>
</div>
</form>
</div>
</div>
<div class="layui-card-body">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-sm layui-btn-normal" id="typeSubscribe_delete">
<i class="layui-icon">&#xe640;</i>删除</button>
</div>
<table id="type_subscribe_list_table"></table>
</div>
</div>
</div>
</div>
</article>
<textarea class="hide" id="typeSubscribeList-params">{{d}}</textarea>
<script>
var params = document.getElementById("typeSubscribeList-params").value;
layui.use('typeSubscribeList', function (fn) {
if (params.indexOf("{{d") !== -1) {
fn();
} else {
fn(JSON.parse(params));
}
});
</script>
\ No newline at end of file
... ...