Authored by wangtao
@@ -8,6 +8,7 @@ layui.define(['soulTable', 'commonDetail', 'common', 'laytpl', 'view', 'admin', @@ -8,6 +8,7 @@ layui.define(['soulTable', 'commonDetail', 'common', 'laytpl', 'view', 'admin',
8 var common = layui.common; 8 var common = layui.common;
9 var sessions = layui.sessions; 9 var sessions = layui.sessions;
10 var accessToken = sessions.getToken()['access_token']; 10 var accessToken = sessions.getToken()['access_token'];
  11 + var regular = eval(sessionStorage.getItem("regular"));
11 var soulTable = layui.soulTable; 12 var soulTable = layui.soulTable;
12 var laytpl = layui.laytpl; 13 var laytpl = layui.laytpl;
13 var view = layui.view; 14 var view = layui.view;
@@ -3005,46 +3006,110 @@ layui.define(['soulTable', 'commonDetail', 'common', 'laytpl', 'view', 'admin', @@ -3005,46 +3006,110 @@ layui.define(['soulTable', 'commonDetail', 'common', 'laytpl', 'view', 'admin',
3005 //start lsq 停机计划中的右键点击事件 2022-05-19 3006 //start lsq 停机计划中的右键点击事件 2022-05-19
3006 contextmenuEvent: function (){ 3007 contextmenuEvent: function (){
3007 var contextmenuTips; 3008 var contextmenuTips;
3008 - let text=''; 3009 + let urlHash=window.location.hash;
  3010 + $('[type=button]').attr('title','点击鼠标右键查看功能点描述信息')
  3011 + $('td .layui-table-link').attr('title','点击鼠标右键查看功能点描述信息')
  3012 + $('table thead tr th span').attr('title','点击鼠标右键查看功能点描述信息')
  3013 +
3009 $('[type=button]').contextmenu(function (e) { 3014 $('[type=button]').contextmenu(function (e) {
3010 e.preventDefault(); 3015 e.preventDefault();
3011 //按钮 3016 //按钮
3012 - text='按钮->'+$(this).text();  
3013 - var contextmenuEl='<ul class="contextmenu-style" style="color:#fff;">';  
3014 - contextmenuEl+='<li>name--'+text+'</li>';  
3015 - contextmenuEl+='</ul>';  
3016 - contextmenuTips = layer.tips(contextmenuEl, $(this), {  
3017 - time: 0,  
3018 - tips: [3, '#1e9fff'],  
3019 - success() { 3017 + let that=$(this);
  3018 + let elementName=that.text().replace(regular, "");
  3019 + admin.req({
  3020 + url: common.domainName + '/api-web/bHalt'
  3021 + ,data:{
  3022 + urlHash:urlHash,
  3023 + elementName:elementName
  3024 + }
  3025 + , async: false
  3026 + , done: function (res) {
  3027 + let liEle=''
  3028 + var contextmenuEl='<ul id="tipContextmenu" class="contextmenu-style" style="color:#fff;">';
  3029 + if(res.data && res.data.length>0){
  3030 + let tipData=res.data;
  3031 + tipData.map(item=>{
  3032 + contextmenuEl+='<li>'+item.elementExplain+'</li>';
  3033 + })
  3034 + }else{
  3035 + contextmenuEl+='<li>'+elementName+'</li>';
  3036 + }
  3037 + contextmenuEl+='</ul>';
  3038 + contextmenuTips = layer.tips(contextmenuEl, that, {
  3039 + time: 0,
  3040 + tips: [3, '#1e9fff'],
  3041 + success() {
  3042 + }
  3043 + })
3020 } 3044 }
3021 }) 3045 })
  3046 +
3022 }) 3047 })
3023 - $('.layui-table-link').parents('td').contextmenu(function (e) { 3048 + // $('.layui-table-link').parents('td').contextmenu(function (e) {
  3049 + $('td .layui-table-link').contextmenu(function (e) {
3024 e.preventDefault(); 3050 e.preventDefault();
3025 //超链接 3051 //超链接
3026 - text='超链接->'+$(this).text();  
3027 - var contextmenuEl='<ul class="contextmenu-style" style="color:#fff;">';  
3028 - contextmenuEl+='<li>name--'+text+'</li>';  
3029 - contextmenuEl+='</ul>';  
3030 - contextmenuTips = layer.tips(contextmenuEl, $(this), {  
3031 - time: 0,  
3032 - tips: [2, '#1e9fff'],  
3033 - success() { 3052 + let that=$(this);
  3053 + let elementName=that.text().replace(regular, "");
  3054 + admin.req({
  3055 + url: common.domainName + '/api-web/bHalt'
  3056 + ,data:{
  3057 + urlHash:urlHash,
  3058 + elementName:elementName
  3059 + }
  3060 + , async: false
  3061 + , done: function (res) {
  3062 + let liEle=''
  3063 + var contextmenuEl='<ul id="tipContextmenu" class="contextmenu-style" style="color:#fff;">';
  3064 + if(res.data && res.data.length>0){
  3065 + let tipData=res.data;
  3066 + tipData.map(item=>{
  3067 + contextmenuEl+='<li>'+item.elementExplain+'</li>';
  3068 + })
  3069 + }else{
  3070 + contextmenuEl+='<li>'+elementName+'</li>';
  3071 + }
  3072 + contextmenuEl+='</ul>';
  3073 + contextmenuTips = layer.tips(contextmenuEl, that, {
  3074 + time: 0,
  3075 + tips: [3, '#1e9fff'],
  3076 + success() {
  3077 + }
  3078 + })
3034 } 3079 }
3035 }) 3080 })
3036 }) 3081 })
3037 - $('table thead tr th').contextmenu(function (e) { 3082 + // $('table thead tr th').contextmenu(function (e) {
  3083 + $('table thead tr th span').contextmenu(function (e) {
3038 e.preventDefault(); 3084 e.preventDefault();
3039 - //超链接  
3040 - text='表头->'+$(this).text();  
3041 - var contextmenuEl='<ul class="contextmenu-style" style="color:#fff;">';  
3042 - contextmenuEl+='<li>name--'+text+'</li>';  
3043 - contextmenuEl+='</ul>';  
3044 - contextmenuTips = layer.tips(contextmenuEl, $(this), {  
3045 - time: 0,  
3046 - tips: [2, '#1e9fff'],  
3047 - success() { 3085 + //表头
  3086 + let that=$(this);
  3087 + let elementName=that.text().replace(regular, "");
  3088 + admin.req({
  3089 + url: common.domainName + '/api-web/bHalt'
  3090 + ,data:{
  3091 + urlHash:urlHash,
  3092 + elementName:elementName
  3093 + }
  3094 + , async: false
  3095 + , done: function (res) {
  3096 + let liEle=''
  3097 + var contextmenuEl='<ul id="tipContextmenu" class="contextmenu-style" style="color:#fff;">';
  3098 + if(res.data && res.data.length>0){
  3099 + let tipData=res.data;
  3100 + tipData.map(item=>{
  3101 + contextmenuEl+='<li>'+item.elementExplain+'</li>';
  3102 + })
  3103 + }else{
  3104 + contextmenuEl+='<li>'+elementName+'</li>';
  3105 + }
  3106 + contextmenuEl+='</ul>';
  3107 + contextmenuTips = layer.tips(contextmenuEl, that, {
  3108 + time: 0,
  3109 + tips: [3, '#1e9fff'],
  3110 + success() {
  3111 + }
  3112 + })
3048 } 3113 }
3049 }) 3114 })
3050 }) 3115 })
@@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
2 @Name:通用资源详细信息 2 @Name:通用资源详细信息
3 @Author:王凤 3 @Author:王凤
4 */ 4 */
5 -layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSelect', 'md5'], function (exports) { 5 +layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSelect', 'md5','carousel'], function (exports) {
6 var $ = layui.$ 6 var $ = layui.$
7 , table = layui.table 7 , table = layui.table
8 , common = layui.common 8 , common = layui.common
@@ -13,7 +13,8 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele @@ -13,7 +13,8 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele
13 , form = layui.form 13 , form = layui.form
14 , xmSelect = layui.xmSelect 14 , xmSelect = layui.xmSelect
15 , admin = layui.admin 15 , admin = layui.admin
16 - , md5 = layui.md5; 16 + , md5 = layui.md5
  17 + , carousel = layui.carousel;
17 //编辑状态时,选中的指标信息集合 18 //编辑状态时,选中的指标信息集合
18 var checkedKpiObj = []; 19 var checkedKpiObj = [];
19 //详情页悬浮提示的index 20 //详情页悬浮提示的index
@@ -152,7 +153,7 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele @@ -152,7 +153,7 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele
152 rowMenu.attr('data-nature', 'true');//性能趋势 153 rowMenu.attr('data-nature', 'true');//性能趋势
153 // rowMenu.attr('data-canca', data.canCA); 154 // rowMenu.attr('data-canca', data.canCA);
154 // rowMenu.attr('data-incaing', data.inCAing); 155 // rowMenu.attr('data-incaing', data.inCAing);
155 - rowMenu.attr('data-restype', data[0]?data[0].resType:''); 156 + rowMenu.attr('data-restype', (data && data[0])?data[0].resType:'');
156 //监听告警压制等操作配置 157 //监听告警压制等操作配置
157 $('#' + targetId + "_detail_row_menu").hover(function () { 158 $('#' + targetId + "_detail_row_menu").hover(function () {
158 var $that = $(this); 159 var $that = $(this);
@@ -3077,6 +3078,8 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele @@ -3077,6 +3078,8 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele
3077 layer.alert('该资源只对接TRAP告警信息!',{icon:0}); 3078 layer.alert('该资源只对接TRAP告警信息!',{icon:0});
3078 return; 3079 return;
3079 } 3080 }
  3081 + //url(/src/style/img/shutdown.png)
  3082 + title +=`<span id="title-shutdown" data-id=${resId} style="padding:0 5px;width:600px;display: inline-block;position: relative;top: 0px;left:20px;"></span>`
3080 obj.openNewWin(url, title, params, editFlag, fn, cancelfn, type,sign_); 3083 obj.openNewWin(url, title, params, editFlag, fn, cancelfn, type,sign_);
3081 }, 3084 },
3082 error: function () { 3085 error: function () {
@@ -3346,6 +3349,56 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele @@ -3346,6 +3349,56 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele
3346 // layer.close(detailTips); 3349 // layer.close(detailTips);
3347 // } 3350 // }
3348 // }) 3351 // })
  3352 + //start lsq 增加停机状态跑马灯效果 2022-05-24
  3353 + let resId= $('#title-shutdown').data("id");
  3354 + admin.req({
  3355 + url: common.domainName + '/api-web/manage/cutover/findByResId?access_token=' + layui.sessions.getToken().access_token + '&resId=' + resId
  3356 + , async: false
  3357 + , done: function (res) {
  3358 + if(res.data && res.data.length>0){
  3359 + let listData=res.data;
  3360 + //
  3361 + let carouselStr=`
  3362 + <img src="/src/style/img/shutdown.png" style="position: absolute;top: 0; left: -3px;" alt="">
  3363 + <div style="background: transparent; height: 30px;font-size: 14px; color:#ff0000; display: flex;align-items: center;">
  3364 + <marquee id="marqueeDiv" behavior="scroll" direction="left" scrollamount="10" >`;
  3365 + let boxShadow='0 0 10px';
  3366 + listData.map((item,index)=>{
  3367 + carouselStr+=item;
  3368 + /* carouselStr+=` <div class="layui-row layui-col-space10" style="background: transparent;position: relative;" >
  3369 + <span style="font-size: 14px;color:#ff0000;padding:0 5px; height:30px;width:100%;position: absolute;top:0;left:0;right:0;">`+item+`</span>
  3370 + </div>`;*/
  3371 + })
  3372 + carouselStr+=` </marquee></div>`;
  3373 + $('.layui-layer-title #title-shutdown').append(carouselStr);
  3374 + $("#marqueeDiv").mouseenter(function (){
  3375 + this.stop();
  3376 + })
  3377 + $("#marqueeDiv").mouseout(function (){
  3378 + this.start();
  3379 + })
  3380 + /*//轮播切换
  3381 + let options={
  3382 + width: '630px'
  3383 + , height:'30px'
  3384 + , arrow: 'none'
  3385 + , autoplay: true//自动切换
  3386 + , interval:5000//自动切换的时间间隔
  3387 + // , trigger: (layui.device().ios || layui.device().android) ? 'click' : 'hover'
  3388 + , anim: 'default' //切换动画的方式 fade,default,updown
  3389 + , index: 0
  3390 + , indicator:'none'//指示器的位置 outside,inside,none
  3391 + }
  3392 + var ins=carousel.render({
  3393 + elem: '#shutdown-carousel'
  3394 + });
  3395 + //重置轮播
  3396 + ins.reload(options);*/
  3397 + //end lsq 2022-05-24
  3398 + }
  3399 + }
  3400 + })
  3401 +
3349 }, 3402 },
3350 yes:function (index) { 3403 yes:function (index) {
3351 layer.close(index); 3404 layer.close(index);
@@ -18,12 +18,13 @@ @@ -18,12 +18,13 @@
18 lay-tips="清除redis中指定资源的缓存信息,调用全量刷新缓存接口可重新刷新资源缓存">清除指定资源的缓存 18 lay-tips="清除redis中指定资源的缓存信息,调用全量刷新缓存接口可重新刷新资源缓存">清除指定资源的缓存
19 </button> 19 </button>
20 </div> 20 </div>
21 - <div class="layui-col-md3"> 21 + <!-- lsq 623 【常用运维接口】屏蔽所有现场的‘清除所有资源的快照缓存’按钮 2022-05-25-->
  22 + <!-- <div class="layui-col-md3">
22 <button class="layui-btn btn-general" data-prefix="api-url-workstation-config" 23 <button class="layui-btn btn-general" data-prefix="api-url-workstation-config"
23 data-url="/delete/lastcoll" id="deleteSnapshotCache" 24 data-url="/delete/lastcoll" id="deleteSnapshotCache"
24 lay-tips="清除redis中所有资源的快照缓存信息;例如:清理过快照表后,基本指标不入库的问题需要清除快照缓存">清除所有资源的快照缓存 25 lay-tips="清除redis中所有资源的快照缓存信息;例如:清理过快照表后,基本指标不入库的问题需要清除快照缓存">清除所有资源的快照缓存
25 </button> 26 </button>
26 - </div> 27 + </div>-->
27 <div class="layui-col-md3"> 28 <div class="layui-col-md3">
28 <button class="layui-btn btn-delete-by-resid" data-prefix="api-url-workstation-config" 29 <button class="layui-btn btn-delete-by-resid" data-prefix="api-url-workstation-config"
29 data-url="/delete/lastcoll?resId=" id="deleteSnapshotCacheByRes" 30 data-url="/delete/lastcoll?resId=" id="deleteSnapshotCacheByRes"
@@ -84,9 +84,9 @@ @@ -84,9 +84,9 @@
84 84
85 <el-form-item label="类型" prop="type"> 85 <el-form-item label="类型" prop="type">
86 <div style="width: 240px"> 86 <div style="width: 240px">
87 - <el-radio v-model="ajConfigFrom.type" label="0" size="large">菜单</el-radio>  
88 - <el-radio v-model="ajConfigFrom.type" label="1" size="large">按钮</el-radio>  
89 - <el-radio v-model="ajConfigFrom.type" label="2" size="large">详情页</el-radio> 87 + <el-radio v-model="ajConfigFrom.type" label="0" size="large">菜单</el-radio>
  88 + <el-radio v-model="ajConfigFrom.type" label="1" size="large">按钮</el-radio>
  89 + <el-radio v-model="ajConfigFrom.type" label="2" size="large">详情页</el-radio>
90 </div> 90 </div>
91 <!-- <div style="height: 15px; color: darkgrey">说明:参数中间用'&'拼接</div>--> 91 <!-- <div style="height: 15px; color: darkgrey">说明:参数中间用'&'拼接</div>-->
92 </el-form-item> 92 </el-form-item>
@@ -98,7 +98,7 @@ @@ -98,7 +98,7 @@
98 allow-create 98 allow-create
99 default-first-option 99 default-first-option
100 :reserve-keyword="false" 100 :reserve-keyword="false"
101 - placeholder="请选择" style="width: 555px;"> 101 + placeholder="请选择" style="width: 100%;">
102 <el-option 102 <el-option
103 v-for="item in menuOptions" 103 v-for="item in menuOptions"
104 :key="item.value" 104 :key="item.value"
@@ -123,7 +123,7 @@ @@ -123,7 +123,7 @@
123 allow-create 123 allow-create
124 default-first-option 124 default-first-option
125 :reserve-keyword="false" 125 :reserve-keyword="false"
126 - placeholder="请选择" style="width: 510px;"> 126 + placeholder="请选择" style="width: 91.73%;">
127 <el-option 127 <el-option
128 v-for="item in options" 128 v-for="item in options"
129 :key="item.value" 129 :key="item.value"
@@ -171,7 +171,7 @@ @@ -171,7 +171,7 @@
171 171
172 <el-form-item label="厂商" prop="provider" v-if="ajConfigFrom.type==2" style="text-align: left"> 172 <el-form-item label="厂商" prop="provider" v-if="ajConfigFrom.type==2" style="text-align: left">
173 <!--<el-input :size="$global.elementSize" v-model="ajConfigFrom.firm" clearable></el-input>--> 173 <!--<el-input :size="$global.elementSize" v-model="ajConfigFrom.firm" clearable></el-input>-->
174 - <el-select v-model="ajConfigFrom.provider" filterable clearable collapse-tags placeholder="请选择厂商" style="width: 550px"> 174 + <el-select v-model="ajConfigFrom.provider" filterable clearable collapse-tags placeholder="请选择厂商" style="width: 100%">
175 <el-option 175 <el-option
176 v-for="item in ddicProvider" 176 v-for="item in ddicProvider"
177 :label="item.ddicName" :value="item.ddicCode"></el-option> 177 :label="item.ddicName" :value="item.ddicCode"></el-option>
@@ -181,7 +181,7 @@ @@ -181,7 +181,7 @@
181 181
182 <el-form-item label="操作系统" prop="os" v-if="ajConfigFrom.type==2" style="text-align: left"> 182 <el-form-item label="操作系统" prop="os" v-if="ajConfigFrom.type==2" style="text-align: left">
183 <!--<el-input :size="$global.elementSize" v-model="ajConfigFrom.firm" clearable></el-input>--> 183 <!--<el-input :size="$global.elementSize" v-model="ajConfigFrom.firm" clearable></el-input>-->
184 - <el-select v-model="ajConfigFrom.os" filterable clearable collapse-tags placeholder="请选择操作类型" style="width: 550px"> 184 + <el-select v-model="ajConfigFrom.os" filterable clearable collapse-tags placeholder="请选择操作类型" style="width: 100%">
185 <el-option 185 <el-option
186 v-for="item in ddicOS" 186 v-for="item in ddicOS"
187 :label="item.ddicName" :value="item.ddicCode"></el-option> 187 :label="item.ddicName" :value="item.ddicCode"></el-option>
@@ -149,7 +149,7 @@ export default { @@ -149,7 +149,7 @@ export default {
149 prop: 'creatTime', 149 prop: 'creatTime',
150 label: '创建时间', 150 label: '创建时间',
151 sortable: true, 151 sortable: true,
152 - align: 'left' 152 + align: 'center'
153 } 153 }
154 ]) 154 ])
155 let butColumns=Vue.ref([ 155 let butColumns=Vue.ref([
@@ -190,7 +190,7 @@ export default { @@ -190,7 +190,7 @@ export default {
190 prop: 'creatTime', 190 prop: 'creatTime',
191 label: '创建时间', 191 label: '创建时间',
192 sortable: true, 192 sortable: true,
193 - align: 'left' 193 + align: 'center'
194 } 194 }
195 ]) 195 ])
196 let currentPage=Vue.ref(1); 196 let currentPage=Vue.ref(1);
@@ -164,7 +164,12 @@ export default { @@ -164,7 +164,12 @@ export default {
164 series.value=[]; 164 series.value=[];
165 $.each(rateData.value,function (i,v) { 165 $.each(rateData.value,function (i,v) {
166 if(v.x && v.x.length>0){ 166 if(v.x && v.x.length>0){
167 - xAxisData.value=v.x; 167 + let nameArr=[];
  168 + v.x.map(item=>{
  169 + nameArr.unshift(item);
  170 +
  171 + })
  172 + xAxisData.value=nameArr;
168 } 173 }
169 series.value.push({ 174 series.value.push({
170 name: v.name, 175 name: v.name,
@@ -31,3 +31,4 @@ config: @@ -31,3 +31,4 @@ config:
31 tingyun: 31 tingyun:
32 api_key: aZipZbC18BhpG5GrjtiFAtThL1I0OUfn 32 api_key: aZipZbC18BhpG5GrjtiFAtThL1I0OUfn
33 secret_key: nbxay44wx8c3x4n5wcxe63mp87a72xed 33 secret_key: nbxay44wx8c3x4n5wcxe63mp87a72xed
  34 + regular: /[`~!@#$^&*()=|{}':;',\\\[\]\.<>\/?~!@#¥……&*()——|{}【】';:""'。,、?\s ]/g
@@ -29,7 +29,7 @@ @@ -29,7 +29,7 @@
29 }),$.ajax({ 29 }),$.ajax({
30 url: '/config/getConfig', 30 url: '/config/getConfig',
31 data: { 31 data: {
32 - configName: 'config.audio' 32 + configName: 'config'
33 }, 33 },
34 }), 34 }),
35 ).done(function (res1,res2) { 35 ).done(function (res1,res2) {
@@ -42,7 +42,8 @@ @@ -42,7 +42,8 @@
42 sessionStorage.setItem('ajWeb', res1[0].ajWeb);//lsq 2022-04-07 设置ajWeb的地址 42 sessionStorage.setItem('ajWeb', res1[0].ajWeb);//lsq 2022-04-07 设置ajWeb的地址
43 sessionStorage.setItem('sxView', res1[0].sxView); 43 sessionStorage.setItem('sxView', res1[0].sxView);
44 sessionStorage.setItem('workflow', res1[0].workflow); 44 sessionStorage.setItem('workflow', res1[0].workflow);
45 - sessionStorage.setItem('mp3', res2[0].mp3); 45 + sessionStorage.setItem('mp3', res2[0].audio.mp3);
  46 + sessionStorage.setItem('regular', res2[0].regular);
46 sessionStorage.setItem('jimuReport', res1[0].jimuReport); 47 sessionStorage.setItem('jimuReport', res1[0].jimuReport);
47 sessionStorage.setItem('cmdbWeb', res1[0].cmdbWeb); 48 sessionStorage.setItem('cmdbWeb', res1[0].cmdbWeb);
48 }) 49 })