Authored by wangtao

Merge branch 'master-500-dev' of http://113.200.75.45:82/monitor_v3/hg-monitor-w…

…eb into master-500-dev
@@ -33,6 +33,7 @@ layui.define(['form', 'admin', 'laydate', 'common','sessions','reskpilist'], fun @@ -33,6 +33,7 @@ layui.define(['form', 'admin', 'laydate', 'common','sessions','reskpilist'], fun
33 33
34 // 获取合并通知开关是否开启 34 // 获取合并通知开关是否开启
35 getNoticeMergeFlag(); 35 getNoticeMergeFlag();
  36 + let NoticeMergeFlag = 'off';
36 function getNoticeMergeFlag(){ 37 function getNoticeMergeFlag(){
37 admin.req({ 38 admin.req({
38 url: common.domainName + '/api-web/manage/ddic/findSucDdics/noticeMergeFlag' 39 url: common.domainName + '/api-web/manage/ddic/findSucDdics/noticeMergeFlag'
@@ -41,6 +42,7 @@ layui.define(['form', 'admin', 'laydate', 'common','sessions','reskpilist'], fun @@ -41,6 +42,7 @@ layui.define(['form', 'admin', 'laydate', 'common','sessions','reskpilist'], fun
41 , success: function (res) { 42 , success: function (res) {
42 $.each(res.data, function (i, v) { 43 $.each(res.data, function (i, v) {
43 if(v.ddicCode == 'on'){ 44 if(v.ddicCode == 'on'){
  45 + NoticeMergeFlag= 'on';
44 $('#noticeMergeTab').show(); 46 $('#noticeMergeTab').show();
45 } 47 }
46 }); 48 });
@@ -231,6 +233,7 @@ layui.define(['form', 'admin', 'laydate', 'common','sessions','reskpilist'], fun @@ -231,6 +233,7 @@ layui.define(['form', 'admin', 'laydate', 'common','sessions','reskpilist'], fun
231 return false; 233 return false;
232 } 234 }
233 235
  236 + if(NoticeMergeFlag && NoticeMergeFlag == 'on'){
234 if(!data.alarmContentExpr || data.alarmContentExpr == ''){ 237 if(!data.alarmContentExpr || data.alarmContentExpr == ''){
235 layer.msg("请先填写告警内容描述表达式!", { 238 layer.msg("请先填写告警内容描述表达式!", {
236 icon: 7 239 icon: 7
@@ -238,6 +241,8 @@ layui.define(['form', 'admin', 'laydate', 'common','sessions','reskpilist'], fun @@ -238,6 +241,8 @@ layui.define(['form', 'admin', 'laydate', 'common','sessions','reskpilist'], fun
238 }); 241 });
239 return false; 242 return false;
240 } 243 }
  244 + }
  245 +
241 246
242 var importantPolicy = data.seriousPolicy; 247 var importantPolicy = data.seriousPolicy;
243 var importantExpr = data.importantPolicy; 248 var importantExpr = data.importantPolicy;
@@ -162,10 +162,7 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele @@ -162,10 +162,7 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele
162 } 162 }
163 titleStr = valueStr; 163 titleStr = valueStr;
164 } 164 }
165 - var tips = '<a class="detail_row_menu hide">\n' +  
166 - '<img style="width: 17px;height: 17px;" src="/src/style/img/icon_row_menu.png">\n' +  
167 - '</a>'  
168 - var tips = '<a class="detail_row_menu hide" data-statusf='+statusF+' data-id='+v.id+' data-flag='+v.flag+ 165 + var tips = '<a class="detail_row_menu hide" data-statusf="'+statusF+'" data-id='+v.id+' data-flag='+v.flag+
169 ' data-name='+v.name+' data-kpiname='+v.name+' data-iswarning=1 data-ident=1' + 166 ' data-name='+v.name+' data-kpiname='+v.name+' data-iswarning=1 data-ident=1' +
170 ' data-trend=0 data-unit="" data-hidem="hidem" data-nature="true" ' + 167 ' data-trend=0 data-unit="" data-hidem="hidem" data-nature="true" ' +
171 // ' data-restype='+((data && data[0])?data[0].resType:"")+'>\n' + 168 // ' data-restype='+((data && data[0])?data[0].resType:"")+'>\n' +
@@ -239,12 +236,6 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele @@ -239,12 +236,6 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele
239 }).done(function (res) { 236 }).done(function (res) {
240 var flags = ""; 237 var flags = "";
241 var kpiIdList= ""; 238 var kpiIdList= "";
242 - //start lsq 判断当前kpiId是否在状态指标数据列表中 2022-06-08  
243 - let status=statusKpiList.indexOf(v.id);  
244 - if(status!=-1){  
245 - statusF=true;  
246 - }  
247 - //end lsq 2022-06-08  
248 var data = res.data; 239 var data = res.data;
249 if (data.length > 0) { 240 if (data.length > 0) {
250 var dataArr = common.splieceGroup(data, cols); 241 var dataArr = common.splieceGroup(data, cols);
@@ -255,6 +246,12 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele @@ -255,6 +246,12 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele
255 $.each(v, function (j, ar) { 246 $.each(v, function (j, ar) {
256 var valueStr = ''; 247 var valueStr = '';
257 var titleStr = ''; 248 var titleStr = '';
  249 + //start lsq 判断当前kpiId是否在状态指标数据列表中 2022-06-08
  250 + let status=statusKpiList.indexOf(ar.id);
  251 + if(status!=-1){
  252 + statusF=true;
  253 + }
  254 + //end lsq 2022-06-08
258 if(ar.id == 'KPIE13DD9A3' ) { 255 if(ar.id == 'KPIE13DD9A3' ) {
259 valueStr = laytpl($("#linkStateDetailTpl").html()).render({linkStateList: ar.value}); 256 valueStr = laytpl($("#linkStateDetailTpl").html()).render({linkStateList: ar.value});
260 } else if (ar.value != 'null'){ 257 } else if (ar.value != 'null'){
@@ -277,13 +274,10 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele @@ -277,13 +274,10 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele
277 kpiIdList += ar.id + ","; 274 kpiIdList += ar.id + ",";
278 } 275 }
279 //start lsq 更改下探图标的属性值 2022-06-08 276 //start lsq 更改下探图标的属性值 2022-06-08
280 - /* var tips = '<a class="detail_row_menu hide">\n' +  
281 - '<img style="width: 17px;height: 17px;" src="/src/style/img/icon_row_menu.png">\n' +  
282 - '</a>'*/  
283 - var tips = '<a class="detail_row_menu hide" data-statusf='+statusF+' data-id='+v.id+' data-flag='+v.flag+  
284 - ' data-name='+v.name+' data-kpiname='+v.name+' data-iswarning=1 data-ident=1' + 277 + var tips = '<a class="detail_row_menu hide" data-statusf="'+statusF+'" data-id='+ar.id+' data-flag='+ar.flag+
  278 + ' data-name='+ar.name+' data-kpiname='+ar.name+' data-iswarning=1 data-ident=1' +
285 ' data-trend=0 data-unit="" data-hidem="hidem" data-nature="true" ' + 279 ' data-trend=0 data-unit="" data-hidem="hidem" data-nature="true" ' +
286 - ' data-restype='+(v.resType?v.resType:"")+'>\n' + 280 + ' data-restype='+(ar.resType?ar.resType:"")+'>\n' +
287 '<img style="width: 17px;height: 17px;" src="/src/style/img/icon_row_menu.png">\n' + 281 '<img style="width: 17px;height: 17px;" src="/src/style/img/icon_row_menu.png">\n' +
288 '</a>' 282 '</a>'
289 //end lsq 2022-06-08 283 //end lsq 2022-06-08
@@ -1906,6 +1900,9 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele @@ -1906,6 +1900,9 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele
1906 * @param colWidth 各个列宽度设置,可以只设置前边的,设置百分比 1900 * @param colWidth 各个列宽度设置,可以只设置前边的,设置百分比
1907 */ 1901 */
1908 renderTable: function (tableId, page, resId, kpiId, title, flagPrifix, sortBy, order, size,colWidth) { 1902 renderTable: function (tableId, page, resId, kpiId, title, flagPrifix, sortBy, order, size,colWidth) {
  1903 + //start lsq 状态信息的状态也增加下探 202-06-08
  1904 + let statusF=false;//是否为状态信息
  1905 + //end lsq 2022-06-08
1909 var editFlag = localStorage.getItem("editFlag");//是否编辑状态 1906 var editFlag = localStorage.getItem("editFlag");//是否编辑状态
1910 if (!size) { 1907 if (!size) {
1911 size = 5; 1908 size = 5;
@@ -2029,9 +2026,14 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele @@ -2029,9 +2026,14 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele
2029 // } 2026 // }
2030 // 2027 //
2031 // // End Wang 2021/11/18 15:03 查询字典编辑指标,判断编辑状态 2028 // // End Wang 2021/11/18 15:03 查询字典编辑指标,判断编辑状态
2032 - 2029 + //start lsq 判断当前kpiId是否在状态指标数据列表中 2022-06-08
  2030 + let status=statusKpiList.indexOf(d[v.id].kpiId);
  2031 + if(status!=-1){
  2032 + statusF=true;
  2033 + }
  2034 + //end lsq 2022-06-08
2033 //拼接表空间名称、文件系统名称等等,如果是性能指标或者趋势指标,则可以下探 徐毫杰还原 2035 //拼接表空间名称、文件系统名称等等,如果是性能指标或者趋势指标,则可以下探 徐毫杰还原
2034 - if (value.kpiIdent == '1' || value.isWarning == '1') { 2036 + if (value.kpiIdent == '1' || value.isWarning == '1' || status!=-1) {
2035 var chbox = ''; 2037 var chbox = '';
2036 if (editFlag && editFlag == "true" && value.kpiIdent == '1') { 2038 if (editFlag && editFlag == "true" && value.kpiIdent == '1') {
2037 chbox = '<input lay-filter="kpicheckboxfilter" type="checkbox" lay-skin="primary" name="identKpiCheckbox" ' + 2039 chbox = '<input lay-filter="kpicheckboxfilter" type="checkbox" lay-skin="primary" name="identKpiCheckbox" ' +
@@ -2039,7 +2041,7 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele @@ -2039,7 +2041,7 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele
2039 } 2041 }
2040 return chbox + '<a class="link showlinechart_' + tableId + '" style="padding-left:5px;' + resStyle + '" ' + 'data-isWarning="' + value.isWarning + '" data-ident="' + value.kpiIdent + '"' + 2042 return chbox + '<a class="link showlinechart_' + tableId + '" style="padding-left:5px;' + resStyle + '" ' + 'data-isWarning="' + value.isWarning + '" data-ident="' + value.kpiIdent + '"' +
2041 'data-trend="' + value.isTrend + '" data-id="' + v.id + '" data-kpiname="' + kpiname + '" data-name="' + v.name + '" data-flag="' + value.flag + '">' + value.kpiValue + '</a>' + 2043 'data-trend="' + value.isTrend + '" data-id="' + v.id + '" data-kpiname="' + kpiname + '" data-name="' + v.name + '" data-flag="' + value.flag + '">' + value.kpiValue + '</a>' +
2042 - '<a class="detail_row_menu hide" data-isWarning="' + value.isWarning + '" data-ident="' + value.kpiIdent + '" data-trend="' + value.isTrend + '" ' + 2044 + '<a class="detail_row_menu hide" data-statusf="'+statusF+'" data-isWarning="' + value.isWarning + '" data-ident="' + value.kpiIdent + '" data-trend="' + value.isTrend + '" ' +
2043 'data-id="' + v.id + '" data-kpiname="' + kpiname + '" data-name="' + v.name + '" data-flag="' + value.flag + '"' + 2045 'data-id="' + v.id + '" data-kpiname="' + kpiname + '" data-name="' + v.name + '" data-flag="' + value.flag + '"' +
2044 'data-canca="' + value.canCA + '" data-incaing="' + value.inCAing + '" data-restype="' + resType + '"' + 2046 'data-canca="' + value.canCA + '" data-incaing="' + value.inCAing + '" data-restype="' + resType + '"' +
2045 '>' + 2047 '>' +
@@ -2439,6 +2441,9 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele @@ -2439,6 +2441,9 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele
2439 * @param resId 2441 * @param resId
2440 */ 2442 */
2441 renderActiveAlarms: function (tableId, resId) { 2443 renderActiveAlarms: function (tableId, resId) {
  2444 + //start lsq 状态信息的状态也增加下探 202-06-08
  2445 + let statusF=false;//是否为状态信息
  2446 + //end lsq 2022-06-08
2442 $('#'+tableId).prev().text('实时告警') 2447 $('#'+tableId).prev().text('实时告警')
2443 var alarmlist = table.render({ 2448 var alarmlist = table.render({
2444 elem: '#' + tableId 2449 elem: '#' + tableId
@@ -2477,11 +2482,25 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele @@ -2477,11 +2482,25 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele
2477 , { 2482 , {
2478 field: 'kpiName', title: '指标名称', align: 'center', width: '20%', 2483 field: 'kpiName', title: '指标名称', align: 'center', width: '20%',
2479 templet: function (d) { 2484 templet: function (d) {
  2485 + //start lsq 判断当前kpiId是否在状态指标数据列表中 2022-06-08
  2486 + let status=statusKpiList.indexOf(d.kpiId);
  2487 + if(status!=-1){
  2488 + statusF=true;
  2489 + }
  2490 + //end lsq 2022-06-08
2480 var kpiName = d.kpiName == 'TYPE'?'ERRPT':d.kpiName; 2491 var kpiName = d.kpiName == 'TYPE'?'ERRPT':d.kpiName;
  2492 + let chbox='';
  2493 + if(status!=-1){
  2494 + chbox='<a class="detail_row_menu hide" data-one="1" data-statusf="'+statusF+'" data-isWarning="' + d.isWarning + '" data-ident="' + d.kpiIdent + '" data-trend="' + d.isTrend + '" ' +
  2495 + 'data-id="' + d.kpiId + '" data-kpiname="' + d.kpiName + '" data-name="' + d.name + '" data-flag="' + d.flag + '"' +
  2496 + 'data-canca="' + d.canCA + '" data-incaing="' + d.inCAing + '" data-restype="' + d.resType + '"' +
  2497 + '>' +
  2498 + '<img style="width: 20px;height: 20px;" src="/src/style/img/icon_row_menu.png"></a>';;
  2499 + }
2481 if (d.kpiIdent != 1 && d.isWarning != 1) { 2500 if (d.kpiIdent != 1 && d.isWarning != 1) {
2482 - return '<div>' + kpiName + '</div>'; 2501 + return '<div>' + kpiName +chbox+ '</div>';
2483 } 2502 }
2484 - return '<div><span data-ident="'+d.kpiIdent+'" data-warning="'+d.isWarning+'" data-resid="' + d.resId + '" data-flag="' + d.flag + '" data-kpi="' + d.kpiId + '" data-name="' + kpiName + '" data-warn-zbmc="' + d.id + '" class="layui-table-link">' + kpiName + '</span></div>'; 2503 + return '<div><span data-ident="'+d.kpiIdent+'" data-warning="'+d.isWarning+'" data-resid="' + d.resId + '" data-flag="' + d.flag + '" data-kpi="' + d.kpiId + '" data-name="' + kpiName + '" data-warn-zbmc="' + d.id + '" class="layui-table-link">' + kpiName +chbox+ '</span></div>';
2485 } 2504 }
2486 } 2505 }
2487 , {field: 'updateTime', title: '告警时间', align: 'center', width: '15%'} 2506 , {field: 'updateTime', title: '告警时间', align: 'center', width: '15%'}
@@ -2595,6 +2614,17 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele @@ -2595,6 +2614,17 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele
2595 '<input type="radio" name="noticeFlag" value="true" title="是">&nbsp;是' + 2614 '<input type="radio" name="noticeFlag" value="true" title="是">&nbsp;是' +
2596 '<input type="radio" name="noticeFlag" value="false" title="否" checked="" style="margin-left: 20px;">&nbsp;否</div> '); 2615 '<input type="radio" name="noticeFlag" value="false" title="否" checked="" style="margin-left: 20px;">&nbsp;否</div> ');
2597 } 2616 }
  2617 + //start lsq 添加状态指标下探 2022-06-09
  2618 + $("[lay-id='"+tableId+"']").find(".layui-table-cell").hover(function () {
  2619 + var $that = $(this)
  2620 + var $btn = $that.find(".detail_row_menu");
  2621 + if ($btn.length > 0) {
  2622 + $(".layui-card-body").find(".detail_row_menu:not(.hide)").addClass("hide")
  2623 + $btn.removeClass("hide");
  2624 + }
  2625 + })
  2626 + filterSuppressMonitor(resId);
  2627 + //end lsq 2022-06-09
2598 } 2628 }
2599 }) 2629 })
2600 }); 2630 });
@@ -4213,7 +4243,12 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele @@ -4213,7 +4243,12 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele
4213 var nature = $menu.data('nature'); 4243 var nature = $menu.data('nature');
4214 //lsq 状态信息无其他下探 2022-06-08 4244 //lsq 状态信息无其他下探 2022-06-08
4215 var statusF = $menu.data('statusf'); 4245 var statusF = $menu.data('statusf');
  4246 + var one = $menu.data('one');
4216 var menubox = '<div class="detail_menubox" id="detail_menubox_id" style="color:#666;"><ul>'; 4247 var menubox = '<div class="detail_menubox" id="detail_menubox_id" style="color:#666;"><ul>';
  4248 + //lsq 只有状态指标下探的标识
  4249 + if(one==1){
  4250 + menubox+='';
  4251 + }else{
4217 if (!nature) { 4252 if (!nature) {
4218 menubox += 4253 menubox +=
4219 '<li type="w"><i class="layui-icon">&#xe667;</i>告警设置</li>' + 4254 '<li type="w"><i class="layui-icon">&#xe667;</i>告警设置</li>' +
@@ -4239,6 +4274,8 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele @@ -4239,6 +4274,8 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele
4239 // } 4274 // }
4240 // } 4275 // }
4241 // End Wang 2022/3/28 14:06 4276 // End Wang 2022/3/28 14:06
  4277 + }
  4278 +
4242 menubox += '</ul></div>'; 4279 menubox += '</ul></div>';
4243 var cX = e.clientX + 10; 4280 var cX = e.clientX + 10;
4244 var cY = e.clientY - 10; 4281 var cY = e.clientY - 10;
@@ -4259,7 +4296,6 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele @@ -4259,7 +4296,6 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele
4259 flag = flag.replace(/^\s+|\s+$/g, ""); 4296 flag = flag.replace(/^\s+|\s+$/g, "");
4260 } 4297 }
4261 //start lsq 根据kpiid获取是否是指标状态 2022-05-23 4298 //start lsq 根据kpiid获取是否是指标状态 2022-05-23
4262 - //start lsq 根据kpiid获取是否是指标状态 2022-05-23  
4263 let idArr=[]; 4299 let idArr=[];
4264 let idStr=''; 4300 let idStr='';
4265 if(id.indexOf(',')!=-1){ 4301 if(id.indexOf(',')!=-1){
@@ -12,7 +12,7 @@ layui.extend({ @@ -12,7 +12,7 @@ layui.extend({
12 ,admin: 'lib/admin' //核心模块 12 ,admin: 'lib/admin' //核心模块
13 /*,sessions: 'controller/sessions'*/ 13 /*,sessions: 'controller/sessions'*/
14 ,view: 'lib/view' //核心模块 14 ,view: 'lib/view' //核心模块
15 -}).define(['setter', 'admin'], function(exports){ 15 +}).define(['setter', 'admin','pageTips'], function(exports){
16 var setter = layui.setter 16 var setter = layui.setter
17 ,element = layui.element 17 ,element = layui.element
18 ,admin = layui.admin 18 ,admin = layui.admin
@@ -242,6 +242,13 @@ layui.define(['laytpl', 'layer'], function(exports){ @@ -242,6 +242,13 @@ layui.define(['laytpl', 'layer'], function(exports){
242 that.parse(html); 242 that.parse(html);
243 view.removeLoad(); 243 view.removeLoad();
244 244
  245 + // 弹框
  246 + try{
  247 + layui.pageTips.init();
  248 + }catch (e) {
  249 + console.log(e)
  250 + }
  251 +
245 if(that.done){ 252 if(that.done){
246 that.done(res); 253 that.done(res);
247 delete that.done; 254 delete that.done;
  1 +//性能曲线图
  2 +layui.define(['element', 'admin'], function (exports) {
  3 + var $ = layui.$;
  4 + var admin = layui.admin;
  5 + var domainName = sessionStorage.getItem('domainName');
  6 +
  7 + var obj = {
  8 + data: {
  9 + contextmenuTips: null,
  10 + contextmenus: [],
  11 + classNams: []
  12 + },
  13 + getCurrentHash: function () {
  14 + return window.location.hash;
  15 + },
  16 + init: function () {
  17 + var that = this;
  18 +
  19 + if (that.data.contextmenus.length > 0) {
  20 + that.bindContextMenuEvent();
  21 + return that.data.contextmenus;
  22 + }
  23 + if('#/user/login/redirect=%2F' == that.getCurrentHash()){
  24 + return;
  25 + }
  26 + // 获取配置的信息
  27 + admin.req({
  28 + url: domainName + '/api-web/manage/ddic/findSucDdics/contextmenus'
  29 + , method: 'POST'
  30 + , async: false
  31 + , success: function (res) {
  32 + $.each(res.data, function (i, v) {
  33 + that.data.contextmenus.push(v.ddicCode);
  34 + });
  35 + that.bindContextMenuEvent();
  36 + }
  37 + })
  38 + },
  39 + /**
  40 + * 获取当前元素的提示信息
  41 + * @param elementName 文本内容
  42 + * @param currentEl 当前元素
  43 + */
  44 + getTipsDetail(elementName, currentEl) {
  45 + var that = this;
  46 + admin.req({
  47 + url: domainName + '/api-web/bHalt'
  48 + , data: {
  49 + urlHash: that.getCurrentHash(),
  50 + elementName: elementName
  51 + }
  52 + , async: false
  53 + , done: function (res) {
  54 + var contextmenuEl = '<ul id="tipContextmenu" class="contextmenu-style" style="color:#fff;">';
  55 + if (res.data && res.data.length > 0) {
  56 + let tipData = res.data;
  57 + tipData.map(item => {
  58 + contextmenuEl += '<li>' + item.elementExplain + '</li>';
  59 + })
  60 + } else {
  61 + contextmenuEl += '<li>' + elementName + '</li>';
  62 + }
  63 + contextmenuEl += '</ul>';
  64 + that.data.contextmenuTips = layer.tips(contextmenuEl, currentEl, {
  65 + time: 0,
  66 + tips: [3, '#1e9fff'],
  67 + success() {
  68 + }
  69 + })
  70 +
  71 + setTimeout(function (){
  72 + layer.closeAll('tips');
  73 + },5000)
  74 + }
  75 + })
  76 + },
  77 + bindContextMenuEvent() {
  78 + var that = this;
  79 + var contextmenus = that.data.contextmenus;
  80 +
  81 + var bindContextEvent = function (selector, index) {
  82 + var el = $(selector);
  83 +
  84 + // 超过30秒
  85 + if (index > 60) {
  86 + return;
  87 + }
  88 +
  89 + if (el == null || el.length == 0) {
  90 + setTimeout(function () {
  91 + bindContextEvent(selector, ++index);
  92 + }, 500)
  93 + return;
  94 + }
  95 +
  96 + el.attr('title', '点击鼠标右键查看功能点描述信息')
  97 + el.contextmenu(function (e) {
  98 + e.preventDefault();
  99 + let thatItem = $(this);
  100 + // 获取当前元素名称正则表达式
  101 + var reg = sessionStorage.getItem('regular');
  102 + let elementName = thatItem.text().replace(reg, "");
  103 + that.getTipsDetail(elementName, thatItem);
  104 + })
  105 + }
  106 +
  107 + // 循环绑定事件
  108 + var bind = function (){
  109 + $(contextmenus).each(function (index) {
  110 + let val = contextmenus[index];
  111 +
  112 + if (val.indexOf('el::') != -1) {
  113 + let elName = val.replace('el::', '');
  114 + bindContextEvent(elName, 0);
  115 + }
  116 + })
  117 + }
  118 +
  119 + // 获取当前页面,是否在配置中
  120 + var page = that.getCurrentHash();
  121 + $(contextmenus).each(function (index) {
  122 + let val = contextmenus[index];
  123 + if (val.indexOf('page::') != -1 ) {
  124 + let elName = val.replace('page::', '');
  125 + if(elName == page){
  126 + bind();
  127 + return;
  128 + }
  129 + }
  130 + })
  131 +
  132 + // 点击关闭所有tips
  133 + $(document).on('click', function (event) {
  134 + layer.closeAll('tips');
  135 + })
  136 + }
  137 + }
  138 +
  139 + // 页面刷新默认初始化
  140 + setTimeout(function () {
  141 + obj.init();
  142 + }, 1000)
  143 +
  144 + //对外暴露 的接口
  145 + exports('pageTips', obj);
  146 +});
  1 +<title>登录配置</title>
  2 +<iframe src="/vue3/index.html#/vue3/logoConfig" class="layadmin-iframe" style="height: 99.5%!important;"/>
@@ -9,6 +9,8 @@ @@ -9,6 +9,8 @@
9 @import "../css/esData.css"; 9 @import "../css/esData.css";
10 /*cmdb数据同步*/ 10 /*cmdb数据同步*/
11 @import "../css/cmdbdatasync.css"; 11 @import "../css/cmdbdatasync.css";
  12 +/*登录logo配置*/
  13 +@import "../css/logoConfig.css";
12 14
13 .d-flex { 15 .d-flex {
14 display: flex; 16 display: flex;
  1 +.logoConfig-container{
  2 + padding:10px;
  3 + height: 100%;
  4 + overflow: auto;
  5 + background: #ffffff;
  6 +}
  7 +.logoConfig-item{
  8 + padding:0 20px;
  9 + margin-bottom: 10px;
  10 + display: flex;
  11 + align-items: center;
  12 +
  13 +}
  14 +.logoConfig-item-content{
  15 + margin-bottom:10px;
  16 + padding-bottom: 20px;
  17 +}
  18 +.config-login{
  19 + display: flex;
  20 + align-items: center;
  21 + justify-content: space-around;
  22 +}
  23 +.config-name{
  24 + width:110px;
  25 +}
  26 +.config-tip{
  27 + text-align: left;
  28 + font-size: 12px;
  29 + margin-left:6px;
  30 + width:200px;
  31 +}
  32 +.upload-demo{
  33 + margin-left:20px;
  34 +}
  35 +.logo-img{
  36 + width:400px;
  37 + /*flex:1;*/
  38 +}
@@ -137,6 +137,12 @@ const routes = [{ @@ -137,6 +137,12 @@ const routes = [{
137 name: 'orgBustype', 137 name: 'orgBustype',
138 component: () => myImport('views/orgBustype/index') 138 component: () => myImport('views/orgBustype/index')
139 }, 139 },
  140 + //登录logo配置
  141 + {
  142 + path: '/vue3/logoConfig',
  143 + name: 'logoConfig',
  144 + component: () => myImport('views/logoConfig/index')
  145 + },
140 ]; 146 ];
141 147
142 // hash模式: createWebHashHistory 148 // hash模式: createWebHashHistory
@@ -3,33 +3,38 @@ @@ -3,33 +3,38 @@
3 <div class="pie-detail-content"> 3 <div class="pie-detail-content">
4 <el-row class="detail-content-title"> 4 <el-row class="detail-content-title">
5 <el-col :span="8"></el-col> 5 <el-col :span="8"></el-col>
6 - <el-col :span="16" class="pie-flex-end">  
7 - <div class="pie-date-range">  
8 -<!-- <cm-date-range-influx v-if="dateType=='custom'" :keys="keys" @callbackinflux="getInfluxOption" @callbacksure="getOptionData" @callbacktime="callbacktime" @callbackrate="callbackrate"></cm-date-range-influx>-->  
9 - </div> 6 + <el-col :span="16" class="pie-flex-end" style="justify-content: flex-end;">
10 <div class="line-filter pie-line-filter"> 7 <div class="line-filter pie-line-filter">
11 <div class="linechartfrequency line-filter-content"> 8 <div class="linechartfrequency line-filter-content">
12 <div v-if="dateType!='custom'" @click="changeInterval('oneDay')" :class="['line-filter-item', {'active':dateType=='oneDay'}]" data-value="oneDay" >近24小时</div> 9 <div v-if="dateType!='custom'" @click="changeInterval('oneDay')" :class="['line-filter-item', {'active':dateType=='oneDay'}]" data-value="oneDay" >近24小时</div>
13 - <div v-if="dateType!='custom'" @click="changeInterval('week')" :class="['line-filter-item', {'active':dateType=='week'}]" data-value="week">一周</div>  
14 - <div v-if="dateType!='custom'" @click="changeInterval('month')" :class="['line-filter-item', {'active':dateType=='month'}]" data-value="month">一月</div>  
15 -<!-- <div v-if="dateType!='custom'" @click="changeInterval('YEAR')" :class="['line-filter-item', {'active':dateType=='YEAR'}]" data-value="YEAR">一年</div>-->  
16 -<!-- <div v-if="dateType!='custom'" @click="changeInterval('custom')" :class="['line-filter-item', {'active':dateType=='custom'}]" data-value="custom">自定义</div>-->  
17 -<!-- <div v-if="dateType=='custom'" @click="changeInterval('DAY')" :class="['line-filter-item', {'active':dateType=='custom'}]" data-value="custom">返 回</div>--> 10 + <el-date-picker
  11 + v-model="customDate"
  12 + type="date"
  13 + placeholder="请选择日期"
  14 + size="small"
  15 + format="YYYY-MM-DD"
  16 + value-format="YYYY-MM-DD"
  17 + style="margin-left:6px;"
  18 + />
  19 + <el-time-picker
  20 + v-model="customTime"
  21 + is-range
  22 + range-separator="-"
  23 + start-placeholder="开始时间"
  24 + end-placeholder="结束时间"
  25 + size="small"
  26 + format="HH:mm:ss"
  27 + value-format="HH:mm:ss"
  28 + style="margin-left:6px;"
  29 + />
  30 + <el-button style="margin-left:6px;" type="primary" size="small" @click="search"> 查询</el-button>
18 </div> 31 </div>
19 </div> 32 </div>
20 -  
21 </el-col> 33 </el-col>
22 -  
23 </el-row> 34 </el-row>
24 <el-row class="detail-content"> 35 <el-row class="detail-content">
25 - <el-col :span="24" class="detail_linechart"> 36 + <el-col :span="24" class="detail_linechart" style="height:550px !important;">
26 <LineChart :optionData="optionData" v-if="optionData"></LineChart> 37 <LineChart :optionData="optionData" v-if="optionData"></LineChart>
27 -  
28 -<!-- <div class="detail_linechart" id="indentKpiLineChart"></div>-->  
29 - <!-- <div class="detail_linechart" id="warningKpiLineChart" style="margin-top:35px;"></div>-->  
30 - <!-- <div class="detail_linechart" id="line-tingyun-trendKpiLineChart" style="margin-top:35px;"></div>-->  
31 -  
32 -  
33 </el-col> 38 </el-col>
34 </el-row> 39 </el-row>
35 </div> 40 </div>
@@ -12,6 +12,8 @@ export default { @@ -12,6 +12,8 @@ export default {
12 setup(props, {attrs, slots, emit}) { 12 setup(props, {attrs, slots, emit}) {
13 const {proxy} = Vue.getCurrentInstance(); 13 const {proxy} = Vue.getCurrentInstance();
14 let dateType=Vue.ref('oneDay'); 14 let dateType=Vue.ref('oneDay');
  15 + let customDate=Vue.ref('');//选择日期
  16 + let customTime=Vue.ref([]);//时间范围
15 let optionData=Vue.ref(''); 17 let optionData=Vue.ref('');
16 //series接口无数据时默认数据 18 //series接口无数据时默认数据
17 let seriesData = Vue.ref([{ 19 let seriesData = Vue.ref([{
@@ -111,6 +113,8 @@ export default { @@ -111,6 +113,8 @@ export default {
111 ]) 113 ])
112 114
113 const changeInterval=(val)=>{ 115 const changeInterval=(val)=>{
  116 + customDate.value='';
  117 + customTime.value=[];
114 dateType.value=val; 118 dateType.value=val;
115 if(val=='custom'){ 119 if(val=='custom'){
116 }else{ 120 }else{
@@ -138,8 +142,15 @@ export default { @@ -138,8 +142,15 @@ export default {
138 idStr=kpiId; 142 idStr=kpiId;
139 } 143 }
140 kpiName.value = params.name;//指标名称 144 kpiName.value = params.name;//指标名称
  145 + let startTime='';
  146 + let endTime='';
  147 + if(customTime.value && customTime.value.length>0){
  148 + startTime=customTime.value[0];
  149 + endTime=customTime.value[1];
  150 + }
141 let url = '/api-web/scatter/getByResId?dateType=' + dateType.value + 151 let url = '/api-web/scatter/getByResId?dateType=' + dateType.value +
142 - '&resId=' + resourceId + '&kpiId=' + idStr + '&resType=' + resType; 152 + '&resId=' + resourceId + '&kpiId=' + idStr + '&resType=' + resType+'&customDate='+customDate.value+
  153 + '&startTime=' +startTime +'&endTime=' + endTime;
143 proxy.$http.get(url, {},function (res){ 154 proxy.$http.get(url, {},function (res){
144 kpiUnit.value = (!res.data || res.data.kpiUnit == null) ? "" : res.data.kpiUnit; 155 kpiUnit.value = (!res.data || res.data.kpiUnit == null) ? "" : res.data.kpiUnit;
145 if (res.data && res.data.length == 0) { 156 if (res.data && res.data.length == 0) {
@@ -251,7 +262,18 @@ export default { @@ -251,7 +262,18 @@ export default {
251 boundaryGap: ['10%', '10%'], 262 boundaryGap: ['10%', '10%'],
252 axisLabel: { 263 axisLabel: {
253 interval:59,//label无间隔 264 interval:59,//label无间隔
254 - formatter: '{value} 时' 265 + // formatter: '{value} 时'
  266 + formatter: function (param) {
  267 + let newParamsName='';
  268 + let arr=param?param.split(":"):[];
  269 + if(arr[0]){
  270 + let strFirst=arr[0].substring(0,1);
  271 + let strSecond=arr[0].substring(1);
  272 + strFirst=strFirst.replace('0', "");
  273 + newParamsName=strFirst + strSecond+' 时';
  274 + }
  275 + return newParamsName
  276 + }
255 277
256 }, 278 },
257 axisLine: { 279 axisLine: {
@@ -356,6 +378,18 @@ export default { @@ -356,6 +378,18 @@ export default {
356 } 378 }
357 YAxisData.value=arr1; 379 YAxisData.value=arr1;
358 } 380 }
  381 + //查询自定义时间段的数据
  382 + let search=()=>{
  383 + if(!customDate.value){
  384 + proxy.$global.showMsg('请选择日期','warning');
  385 + return;
  386 + }
  387 + if(!customTime.value || customTime.value.length==0){
  388 + proxy.$global.showMsg('请选择时间范围','warning');
  389 + return;
  390 + }
  391 + getLineChart();
  392 + }
359 // 挂载完 393 // 挂载完
360 Vue.onMounted(() => { 394 Vue.onMounted(() => {
361 getYAxisData(); 395 getYAxisData();
@@ -376,7 +410,10 @@ export default { @@ -376,7 +410,10 @@ export default {
376 kpiName, 410 kpiName,
377 optionDataInit, 411 optionDataInit,
378 getLineChart, 412 getLineChart,
379 - changeInterval 413 + changeInterval,
  414 + customDate,
  415 + customTime,
  416 + search
380 } 417 }
381 } 418 }
382 } 419 }
  1 +<div class="logoConfig-container" >
  2 + <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
  3 + <el-tab-pane v-for="(item,index) in skinData" :key="index" :label="item.name+'布局'" :name="item.name">
  4 + <el-row class="logoConfig-item" >
  5 + <!--<el-col :span="4" >
  6 + 个性化布局-{{item.name}}
  7 + </el-col>-->
  8 + <el-col :span="24">
  9 + <el-row class="logoConfig-item-content" v-if="item.imageUrl">
  10 + <el-col :span="24">
  11 + <div class="config-login">
  12 + <span class="config-name">登录logo:</span>
  13 + <img :src="item.imageUrl" class="logo-img" alt="">
  14 + <el-upload
  15 + class="upload-demo"
  16 + :show-file-list="false"
  17 + :before-upload="beforeAvatarUpload"
  18 + :data="item"
  19 + :multiple="false"
  20 + :http-request="getFile"
  21 + :auto-upload="true">
  22 + <el-button size="mini" type="primary">上传照片</el-button>
  23 + </el-upload>
  24 + <dev class="config-tip">
  25 + (备注说明:登录表单上方展示的logo)
  26 + </dev>
  27 + </div>
  28 + </el-col>
  29 +
  30 + </el-row>
  31 + <el-row class="logoConfig-item-content" v-if="item.imageUrlBg">
  32 + <el-col :span="24">
  33 + <div class="config-login">
  34 + <span class="config-name">登录背景:</span>
  35 + <img :src="item.imageUrlBg" class="logo-img" alt="">
  36 + <el-upload
  37 + class="upload-demo"
  38 + :show-file-list="false"
  39 + :before-upload="beforeAvatarUpload"
  40 + :data="item"
  41 + :multiple="false"
  42 + :http-request="getFile"
  43 + :auto-upload="true">
  44 + <el-button size="mini" type="primary">上传照片</el-button>
  45 + </el-upload>
  46 + <dev class="config-tip">
  47 + (备注说明:登录表单下的背景图片)
  48 + </dev>
  49 + </div>
  50 + </el-col>
  51 + </el-row>
  52 + <el-row class="logoConfig-item-content" v-if="item.imageUrlSkin">
  53 + <el-col :span="24">
  54 + <div class="config-login">
  55 + <span class="config-name">登录皮肤:</span>
  56 + <img :src="item.imageUrlSkin" class="logo-img" alt="">
  57 + <el-upload
  58 + class="upload-demo"
  59 + :show-file-list="false"
  60 + :before-upload="beforeAvatarUpload"
  61 + :data="item"
  62 + :multiple="false"
  63 + :http-request="getFile"
  64 + :auto-upload="true">
  65 + <el-button size="mini" type="primary">上传照片</el-button>
  66 + </el-upload>
  67 + <dev class="config-tip">
  68 + (备注说明:登录页面的皮肤图片)
  69 + </dev>
  70 + </div>
  71 + </el-col>
  72 + </el-row>
  73 + <el-row class="logoConfig-item-content" v-if="item.imageUrlIndex">
  74 + <el-col :span="24">
  75 + <div class="config-login">
  76 + <span class="config-name">首页logo:</span>
  77 + <img :src="item.imageUrlIndex" class="logo-img" alt="">
  78 + <el-upload
  79 + class="upload-demo"
  80 + :show-file-list="false"
  81 + :before-upload="beforeAvatarUpload"
  82 + :data="item"
  83 + :multiple="false"
  84 + :http-request="getFile"
  85 + :auto-upload="true">
  86 + <el-button size="mini" type="primary">上传照片</el-button>
  87 + </el-upload>
  88 + <dev class="config-tip">
  89 + (备注说明:首页上方展示的logo)
  90 + </dev>
  91 + </div>
  92 + </el-col>
  93 + </el-row>
  94 + </el-col>
  95 + </el-row>
  96 + </el-tab-pane>
  97 + </el-tabs>
  98 +
  99 +
  100 +</div>
  1 +export default {
  2 + name: 'logoConfig',
  3 + template: '',
  4 + components: {
  5 + },
  6 + data() {
  7 + },
  8 + props: {
  9 + },
  10 + setup: function (props, {attrs, slots, emit}) {
  11 + const {proxy} = Vue.getCurrentInstance();
  12 + let activeName=Vue.ref('default');
  13 + //imageUrl:登录logo,imageUrlSkin:登录皮肤,imageUrlBg:登录背景,imageUrlIndex:首页logo
  14 + let skinData=Vue.ref([
  15 + {name:"default",imageUrl:'/src/style/img/logo.png',imageUrlSkin:'',
  16 + imageUrlBg:'/src/style/img/login-form.png',imageUrlIndex:'/src/style/img/logo.png'},
  17 + {name:"skin1",imageUrl:'/src/style/img/login/skin/1/mingcheng.png',imageUrlSkin:'/src/style/img/login/skin/1/beijing.png',
  18 + imageUrlBg:'',imageUrlIndex:'/src/style/img/logo.png'},
  19 + {name:"skin2",imageUrl:'/src/style/img/login/skin/2/mingcheng2.png',imageUrlSkin:'/src/style/img/login/skin/2/beijng.png',
  20 + imageUrlBg:'',imageUrlIndex:'/src/style/img/logo.png'}
  21 + ])
  22 + let imageUrl=Vue.ref('/src/style/img/logo.png');
  23 + let imageUrlSkin=Vue.ref('/src/style/img/login/skin/1/beijing.png');
  24 + let imageUrlBg=Vue.ref('/src/style/img/login-form.png');
  25 + let imageUrlIndex=Vue.ref('/src/style/img/logo.png');
  26 + let fit='contain';
  27 + let beforeAvatarUpload = (file) => {
  28 + const isJPG = file.type.indexOf('image/') != -1
  29 + if (!isJPG) {
  30 + proxy.$global.showMsg('您上传的不是图片文件,请选择图片!', 'error');
  31 + }
  32 + return isJPG
  33 + }
  34 + let getFile = (param) => {
  35 + let fileObj = param.file
  36 + console.log("param.data",param.data)
  37 +
  38 + let params = {
  39 + file: fileObj,
  40 + id: props.parentNode.id
  41 + }
  42 + // 上传文件
  43 + proxy.$http.uploadFile("/api-web/bOpsPerson/uploadFile", params, function (res) {
  44 + if (res && res.success) {
  45 + proxy.$global.showMsg("上传成功!");
  46 + }
  47 + })
  48 + imageUrl.value = URL.createObjectURL(fileObj);
  49 + }
  50 + //tabs标签点击事件
  51 + let handleClick=(tab,event)=>{}
  52 + // 挂载完
  53 + Vue.onMounted(() => {
  54 + })
  55 + return {
  56 + activeName,
  57 + handleClick,
  58 + fit,
  59 + imageUrlSkin,
  60 + imageUrlIndex,
  61 + imageUrlBg,
  62 + beforeAvatarUpload,
  63 + imageUrl,
  64 + getFile,
  65 + skinData
  66 + }
  67 + }
  68 +}
@@ -68,7 +68,7 @@ @@ -68,7 +68,7 @@
68 :pageSize="search.limitUn" 68 :pageSize="search.limitUn"
69 :showPage="true" 69 :showPage="true"
70 :showTools="false" 70 :showTools="false"
71 - :height="height - 300"> 71 + :height="'360'">
72 <template #default="{row,prop,column}"> 72 <template #default="{row,prop,column}">
73 <div v-if="prop=='showType'"> 73 <div v-if="prop=='showType'">
74 <el-select v-model="row.showType" placeholder=""> 74 <el-select v-model="row.showType" placeholder="">
@@ -227,6 +227,17 @@ const routes = [{ @@ -227,6 +227,17 @@ const routes = [{
227 name: 'orgBustype', 227 name: 'orgBustype',
228 component: () => myImport('views/orgBustype/index') 228 component: () => myImport('views/orgBustype/index')
229 }, 229 },
  230 + {
  231 + path: '/vue3/batchChangeLeaders',
  232 + name: 'batchChangeLeaders',
  233 + component: () => myImport('views/batchChangeLeaders/index')
  234 + },
  235 + //登录logo配置
  236 + {
  237 + path: '/vue3/logoConfig',
  238 + name: 'logoConfig',
  239 + component: () => myImport('views/logoConfig/index')
  240 + },
230 ]; 241 ];
231 242
232 // hash模式: createWebHashHistory 243 // hash模式: createWebHashHistory