Authored by xwx

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

…eb into master-500-dev-xwx
Showing 36 changed files with 1836 additions and 1173 deletions
@@ -734,7 +734,6 @@ layui.extend({ @@ -734,7 +734,6 @@ layui.extend({
734 tryFunc(); 734 tryFunc();
735 }) 735 })
736 736
737 - layui.pageTips.ajaxSetupInit();  
738 737
739 //对外输出 738 //对外输出
740 exports('index', { 739 exports('index', {
@@ -83,8 +83,6 @@ layui.define(['laytpl', 'layer'], function (exports) { @@ -83,8 +83,6 @@ layui.define(['laytpl', 'layer'], function (exports) {
83 options.data = options.data || {}; 83 options.data = options.data || {};
84 options.headers = options.headers || {}; 84 options.headers = options.headers || {};
85 85
86 - layui.pageTips.viewReqHeader(options);  
87 - //  
88 if (request.tokenName) { 86 if (request.tokenName) {
89 var sendData = typeof options.data === 'string' 87 var sendData = typeof options.data === 'string'
90 ? JSON.parse(options.data) 88 ? JSON.parse(options.data)
@@ -26,113 +26,113 @@ layui.define(['element', 'admin', 'view'], function (exports) { @@ -26,113 +26,113 @@ layui.define(['element', 'admin', 'view'], function (exports) {
26 hashChane: function () { 26 hashChane: function () {
27 27
28 var that = this; 28 var that = this;
  29 + // window.onload = function () {
  30 + // // 绑定事件
  31 + // that.bindElemClickEvent();
  32 + // }
29 33
30 - window.onload = function (){  
31 - // 绑定事件  
32 - that.bindElemClickEvent();  
33 - }  
34 -  
35 - // debugger  
36 var hash = window.top.location.hash; 34 var hash = window.top.location.hash;
37 - sessionStorage.setItem("pagePath", hash);  
38 - sessionStorage.setItem("batchNo", that.getOperateUUID()); 35 + // sessionStorage.setItem("pagePath", hash);
  36 + // sessionStorage.setItem("batchNo", that.getOperateUUID());
39 37
40 if (hash == '#/') { 38 if (hash == '#/') {
41 - sessionStorage.setItem("pageName", "首页");  
42 - sessionStorage.setItem("menuName", "首页");  
43 - sessionStorage.setItem("menuPath", "");  
44 - sessionStorage.setItem("groupId",that.getOperateUUID()); 39 + // sessionStorage.setItem("pageName", "首页");
  40 + // sessionStorage.setItem("menuName", "首页");
  41 + // sessionStorage.setItem("menuPath", "");
  42 + // sessionStorage.setItem("groupId", that.getOperateUUID());
  43 + that.saveMenuLog("首页", "/")
  44 +
45 return; 45 return;
46 } else if (hash == '#/user/login/redirect=%2F') { 46 } else if (hash == '#/user/login/redirect=%2F') {
47 sessionStorage.setItem("pageName", "登录"); 47 sessionStorage.setItem("pageName", "登录");
48 return; 48 return;
49 } 49 }
  50 + //
  51 + //
  52 + // var url = [];
  53 + // window.top.location.hash.split('/').map(function (v) {
  54 + // if (v.indexOf('=') == -1 && v != '#' && v != '') {
  55 + // url.push(v);
  56 + // return v;
  57 + // }
  58 + // return '';
  59 + // })
  60 + //
  61 + // if (url.length > 0) {
  62 + // $.ajax({
  63 + // url: setter.views + url.join('/') + setter.engine,
  64 + // async: false,
  65 + // success(res) {
  66 + // var html = '<div>' + res + '</div>';
  67 + // var elemTitle = $(html).find('title')
  68 + // , title = elemTitle.text() || (html.match(/\<title\>([\s\S]*)\<\/title>/) || [])[1];
  69 + // sessionStorage.setItem("pageName", title);
  70 + // }
  71 + // });
  72 + // }
50 73
  74 + },
51 75
52 - var url = [];  
53 - window.top.location.hash.split('/').map(function (v) {  
54 - if (v.indexOf('=') == -1 && v != '#' && v != '') {  
55 - url.push(v);  
56 - return v;  
57 - }  
58 - return '';  
59 - }) 76 + // /**
  77 + // * hash变更
  78 + // */
  79 + // viewReqHeader: function (options) {
  80 + // options.headers['batchNo'] = this.getPath("batchNo");
  81 + // options.headers['groupId'] = this.getPath("groupId");
  82 + // options.headers['intervalFunc'] = this.getPath("intervalFunc");
  83 + // options.headers['pagePath'] = this.getPath("pagePath");
  84 + // options.headers['pageName'] = this.getEncodeName('pageName'); //encodeURIComponent(sessionStorage.getItem("pageName"))
  85 + //
  86 + // options.headers['menuPath'] = this.getPath("menuPath")
  87 + // options.headers['menuName'] = this.getEncodeName('menuName'); //encodeURIComponent(sessionStorage.getItem("menuName"))
  88 + //
  89 + // options.headers['buttonPath'] = this.getPath("buttonPath")
  90 + // options.headers['buttonName'] = this.getEncodeName('buttonName'); //encodeURIComponent(sessionStorage.getItem("buttonName"))
  91 + // },
60 92
61 - if (url.length > 0) {  
62 - $.ajax({  
63 - url: setter.views + url.join('/') + setter.engine,  
64 - async: false,  
65 - success(res) {  
66 - var html = '<div>' + res + '</div>';  
67 - var elemTitle = $(html).find('title')  
68 - , title = elemTitle.text() || (html.match(/\<title\>([\s\S]*)\<\/title>/) || [])[1];  
69 - sessionStorage.setItem("pageName", title);  
70 - }  
71 - });  
72 - } 93 + // ajaxSetupInit: function () {
  94 + //
  95 + // // 清空按钮名称
  96 + // sessionStorage.setItem("buttonPath", "");
  97 + // sessionStorage.setItem("buttonName", "");
  98 + //
  99 + // $.ajaxSetup({
  100 + // headers: {
  101 + // batchNo: this.getPath("batchNo"),
  102 + // groupId: this.getPath("groupId"),
  103 + // intervalFunc: this.getPath("IntervalFunc"),
  104 + // pagePath: this.getPath("pagePath"),
  105 + // pageName: this.getEncodeName('pageName'),// encodeURIComponent(sessionStorage.getItem(sessionStorage.getItem("pageName"))),
  106 + //
  107 + // menuPath: this.getPath("menuPath"),
  108 + // menuName: this.getEncodeName('menuName'),//encodeURIComponent(sessionStorage.getItem("menuName")),
  109 + //
  110 + // buttonPath: this.getPath("buttonPath"),
  111 + // buttonName: this.getEncodeName('buttonName'),//encodeURIComponent(sessionStorage.getItem("buttonName"))
  112 + // }
  113 + // });
  114 + // },
73 115
74 - },  
75 116
76 /** 117 /**
77 - * hash变更 118 + * 定时刷新任务
  119 + * @constructor
78 */ 120 */
79 - viewReqHeader: function (options) {  
80 - options.headers['batchNo'] = this.getPath("batchNo");  
81 - options.headers['groupId'] = this.getPath("groupId");  
82 -  
83 - options.headers['pagePath'] = this.getPath("pagePath");  
84 - options.headers['pageName'] = this.getEncodeName('pageName'); //encodeURIComponent(sessionStorage.getItem("pageName"))  
85 -  
86 - options.headers['menuPath'] = this.getPath("menuPath")  
87 - options.headers['menuName'] = this.getEncodeName('menuName'); //encodeURIComponent(sessionStorage.getItem("menuName"))  
88 -  
89 - options.headers['buttonPath'] = this.getPath("buttonPath")  
90 - options.headers['buttonName'] = this.getEncodeName('buttonName'); //encodeURIComponent(sessionStorage.getItem("buttonName"))  
91 - },  
92 -  
93 - ajaxSetupInit: function () {  
94 -  
95 - // sessionStorage.setItem("batchNo", "");  
96 - // sessionStorage.setItem("groupId", "");  
97 - //  
98 - // // 清空按钮名称  
99 - // sessionStorage.setItem("pagePath", "");  
100 - // sessionStorage.setItem("pageName", "");  
101 - // // 清空按钮名称  
102 - // sessionStorage.setItem("menuPath", "");  
103 - // sessionStorage.setItem("pageName", "");  
104 - // 清空按钮名称  
105 - sessionStorage.setItem("buttonPath", "");  
106 - sessionStorage.setItem("buttonName", "");  
107 -  
108 -  
109 - $.ajaxSetup({  
110 - headers: {  
111 - batchNo: this.getPath("batchNo"),  
112 - groupId: this.getPath("groupId"),  
113 - pagePath: this.getPath("pagePath"),  
114 - pageName: this.getEncodeName('pageName'),// encodeURIComponent(sessionStorage.getItem(sessionStorage.getItem("pageName"))),  
115 -  
116 - menuPath: this.getPath("menuPath"),  
117 - menuName: this.getEncodeName('menuName'),//encodeURIComponent(sessionStorage.getItem("menuName")),  
118 -  
119 - buttonPath: this.getPath("buttonPath"),  
120 - buttonName: this.getEncodeName('buttonName'),//encodeURIComponent(sessionStorage.getItem("buttonName"))  
121 - }  
122 - }); 121 + IntervalFunc: (isAuto) => {
  122 + sessionStorage.setItem("IntervalFunc", isAuto);
123 }, 123 },
124 124
125 - getPath:(key)=>{ 125 + getPath: (key) => {
126 var val = sessionStorage.getItem(key); 126 var val = sessionStorage.getItem(key);
127 - if(val){ 127 + if (val) {
128 return val; 128 return val;
129 } 129 }
130 return ''; 130 return '';
131 }, 131 },
132 132
133 - getEncodeName:(key)=>{ 133 + getEncodeName: (key) => {
134 var val = sessionStorage.getItem(key); 134 var val = sessionStorage.getItem(key);
135 - if(val){ 135 + if (val) {
136 return encodeURIComponent(val); 136 return encodeURIComponent(val);
137 } 137 }
138 return ''; 138 return '';
@@ -141,7 +141,7 @@ layui.define(['element', 'admin', 'view'], function (exports) { @@ -141,7 +141,7 @@ layui.define(['element', 'admin', 'view'], function (exports) {
141 /** 141 /**
142 * 获取操作 142 * 获取操作
143 */ 143 */
144 - getOperateUUID:() => { 144 + getOperateUUID: () => {
145 return window.generateUUID().replace(/-/g, "") + (new Date()).getTime(); 145 return window.generateUUID().replace(/-/g, "") + (new Date()).getTime();
146 }, 146 },
147 147
@@ -157,7 +157,7 @@ layui.define(['element', 'admin', 'view'], function (exports) { @@ -157,7 +157,7 @@ layui.define(['element', 'admin', 'view'], function (exports) {
157 // 绑定菜单点击事件 157 // 绑定菜单点击事件
158 that.bindMenuClickEvent(); 158 that.bindMenuClickEvent();
159 // 绑定元素点击事件 159 // 绑定元素点击事件
160 - that.bindElemClickEvent(); 160 + // that.bindElemClickEvent();
161 // console.log("日志事件注册完成!") 161 // console.log("日志事件注册完成!")
162 }, 500) 162 }, 500)
163 163
@@ -224,22 +224,7 @@ layui.define(['element', 'admin', 'view'], function (exports) { @@ -224,22 +224,7 @@ layui.define(['element', 'admin', 'view'], function (exports) {
224 } 224 }
225 }) 225 })
226 }, 226 },
227 - // /**  
228 - // * ajax掉接口之前传参  
229 - // * @author lsq  
230 - // * @date 2022-08-18  
231 - // * */  
232 - // sendAjaxData(menuPath, elementName) {  
233 - // let name = encodeURIComponent(elementName);  
234 - //  
235 - // $.ajaxSetup({  
236 - // headers: {  
237 - // menuPath: obj.getCurrentHash(),  
238 - // elementName: name  
239 - // }  
240 - //  
241 - // });  
242 - // }, 227 +
243 /** 228 /**
244 * 左侧菜单,鼠标点击事件 229 * 左侧菜单,鼠标点击事件
245 */ 230 */
@@ -299,13 +284,17 @@ layui.define(['element', 'admin', 'view'], function (exports) { @@ -299,13 +284,17 @@ layui.define(['element', 'admin', 'view'], function (exports) {
299 //菜单点击传入属性lay-href的值,普通元素传入当前页面路由 284 //菜单点击传入属性lay-href的值,普通元素传入当前页面路由
300 if (flg) { 285 if (flg) {
301 // 清空按钮名称 286 // 清空按钮名称
302 - sessionStorage.setItem("buttonPath", "");  
303 - sessionStorage.setItem("buttonName", ""); 287 + // sessionStorage.setItem("buttonPath", "");
  288 + // sessionStorage.setItem("buttonName", "");
  289 + //
  290 + // sessionStorage.setItem("groupId", that.getOperateUUID());
  291 + // //that.sendAjaxData(layHref, text)
  292 + // sessionStorage.setItem("menuName", text);
  293 + // sessionStorage.setItem("menuPath", layHref);
  294 +
  295 + that.saveMenuLog(text, layHref)
  296 +
304 297
305 - sessionStorage.setItem("groupId",that.getOperateUUID());  
306 - //that.sendAjaxData(layHref, text)  
307 - sessionStorage.setItem("menuName", text);  
308 - sessionStorage.setItem("menuPath", layHref);  
309 } else { 298 } else {
310 let locationPath = location.hash; 299 let locationPath = location.hash;
311 let pathArr = locationPath.split("#/"); 300 let pathArr = locationPath.split("#/");
@@ -314,68 +303,58 @@ layui.define(['element', 'admin', 'view'], function (exports) { @@ -314,68 +303,58 @@ layui.define(['element', 'admin', 'view'], function (exports) {
314 path = pathArr[1] 303 path = pathArr[1]
315 } 304 }
316 // that.sendAjaxData(path, text) 305 // that.sendAjaxData(path, text)
317 - sessionStorage.setItem("buttonName", text);  
318 - sessionStorage.setItem("buttonPath", layHref); 306 + // sessionStorage.setItem("buttonName", text);
  307 + // sessionStorage.setItem("buttonPath", layHref);
319 } 308 }
320 }, 309 },
321 - /**  
322 - * 页面其他元素绑定事件  
323 - * @author lsq  
324 - * @date 2022-08-11  
325 - */  
326 - clickEventHandle(thisObj, key) {  
327 - let that = this;  
328 - sessionStorage.setItem("groupId",that.getOperateUUID());  
329 -  
330 - let layHref = thisObj.attr('lay-href') ? thisObj.attr('lay-href') : '';  
331 - sessionStorage.setItem("buttonName", thisObj.text());  
332 - sessionStorage.setItem("buttonPath", layHref);  
333 -  
334 - //绑定事件时增加一个class防止多次绑定事件  
335 - // thisObj.addClass("on_fn");  
336 - // that.pushArrNoRepeat(thisObj);  
337 - // // 把点击的元素按顺序展示  
338 - // let handleStr = '';  
339 - // let menuStrArr = [];  
340 - // let menuStrArrSecond = [];  
341 - // that.data.handleLog.map(item => {  
342 - // if (item.menuType) {  
343 - // menuStrArr.push(item.text)  
344 - // } else {  
345 - // menuStrArrSecond.push(item.text)  
346 - // }  
347 - // })  
348 - // if (menuStrArr.length > 0) {  
349 - // handleStr = menuStrArr.join('->');  
350 - // }  
351 - // if (menuStrArrSecond.length > 0) {  
352 - // handleStr += '->' + menuStrArrSecond.join(',');  
353 - // } 310 + saveMenuLog(name, href) {
  311 + if (href && href != '') {
  312 + // 菜单请求日志
  313 + admin.req({
  314 + url: domainName + `/api-web/setGroupName?name=${name}&url=${href}`
  315 + , method: 'GET'
  316 + , async: true
  317 + , success: function (res) {
  318 + }
  319 + })
  320 + }
354 }, 321 },
  322 +
  323 +
  324 + // /**
  325 + // * 页面其他元素绑定事件
  326 + // * @author lsq
  327 + // * @date 2022-08-11
  328 + // */
  329 + // clickEventHandle(thisObj, key) {
  330 + // let that = this;
  331 + // sessionStorage.setItem("groupId", that.getOperateUUID());
  332 + // sessionStorage.setItem("IntervalFunc", '0');
  333 + //
  334 + // let layHref = thisObj.attr('lay-href') ? thisObj.attr('lay-href') : '';
  335 + // let title = thisObj.attr('title') == '点击鼠标右键查看功能点描述信息' ? '' : thisObj.attr('title');
  336 + //
  337 + // let btnName = thisObj.text() ? thisObj.text() : title;
  338 + // sessionStorage.setItem("buttonName", btnName);
  339 + // sessionStorage.setItem("buttonPath", layHref);
  340 + // },
355 /** 341 /**
356 * 页面其他元素绑定事件 342 * 页面其他元素绑定事件
357 * @author lsq 343 * @author lsq
358 * @date 2022-08-11 344 * @date 2022-08-11
359 */ 345 */
360 bindElemClickEvent() { 346 bindElemClickEvent() {
361 - let that = this;  
362 - var eventKeys = ['button', '[data-bizid]', '.layui-table-link', '[data-zymc]', '[data-busid]','.layui-tree-txt','.layui-cols-items'];  
363 - eventKeys.map(item => {  
364 - // if (!$(item).hasClass("on_fn")) {  
365 - // console.log(`${item}元素点击事件绑定完成!`)  
366 - // $(item).unbind('click.handle').on('click.handle', (function (e) {  
367 - // e.preventDefault();  
368 - // that.clickEventHandle($(this), item)  
369 - // }))  
370 - // }  
371 - setTimeout(function (){  
372 - // console.log(`${item}元素点击事件绑定完成!`)  
373 - $(item).unbind('click.handle').on('click.handle', (function (e) {  
374 - e.preventDefault();  
375 - that.clickEventHandle($(this), item)  
376 - }))  
377 - },500)  
378 - }) 347 + // let that = this;
  348 + // var eventKeys = ['button', '[data-bizid]', '.layui-table-link', '[data-zymc]', '[data-busid]', '.layui-tree-txt', '.layui-cols-items'];
  349 + // eventKeys.map(item => {
  350 + // setTimeout(function () {
  351 + // // console.log(`${item}元素点击事件绑定完成!`)
  352 + // $(item).unbind('click.handle').on('click.handle', (function (e) {
  353 + // e.preventDefault();
  354 + // that.clickEventHandle($(this), item)
  355 + // }))
  356 + // }, 500)
  357 + // })
379 }, 358 },
380 /** 359 /**
381 * 绑定鼠标右键事件 360 * 绑定鼠标右键事件
1 -<title>操作日志</title> 1 +<title>操作日志统计</title>
2 <iframe class="layadmin-iframe" src="/vue3/index.html#/vue3/operationLog" style="height: 99.5%!important;"/> 2 <iframe class="layadmin-iframe" src="/vue3/index.html#/vue3/operationLog" style="height: 99.5%!important;"/>
  1 +<title>我的操作日志</title>
  2 +<iframe class="layadmin-iframe" src="/vue3/index.html#/vue3/operationLog/userList" style="height: 99.5%!important;"/>
@@ -5,6 +5,7 @@ @@ -5,6 +5,7 @@
5 <link href="public/shui.png" rel="icon"/> 5 <link href="public/shui.png" rel="icon"/>
6 <meta content="width=device-width, initial-scale=1.0" name="viewport"> 6 <meta content="width=device-width, initial-scale=1.0" name="viewport">
7 <title>智能综合监控平台</title> 7 <title>智能综合监控平台</title>
  8 + <script src="public/lib/polyfill/polyfill.min.js"></script>
8 <script src="public/lib/vue/vue.global.prod.js"></script> 9 <script src="public/lib/vue/vue.global.prod.js"></script>
9 <script src="public/lib/vue/vue-router.global.prod.js"></script> 10 <script src="public/lib/vue/vue-router.global.prod.js"></script>
10 <script src="public/lib/vue/vuex.global.prod.js"></script> 11 <script src="public/lib/vue/vuex.global.prod.js"></script>
@@ -16,7 +17,7 @@ @@ -16,7 +17,7 @@
16 <link href="public/lib/vant/index.css" rel="stylesheet"> 17 <link href="public/lib/vant/index.css" rel="stylesheet">
17 <script src="public/lib/vant/vant.min.js"></script> 18 <script src="public/lib/vant/vant.min.js"></script>
18 <script src="public/lib/axios/axios.min.js"></script> 19 <script src="public/lib/axios/axios.min.js"></script>
19 - <!-- <script src="public/lib/dayjs/dayjs.min.js"></script> --> 20 + <script src="public/lib/dayjs/dayjs.min.js"></script>
20 <script src="public/lib/jquery/jquery.min.js"></script> 21 <script src="public/lib/jquery/jquery.min.js"></script>
21 22
22 <script src="public/lib/echarts/echarts.min.js"></script> 23 <script src="public/lib/echarts/echarts.min.js"></script>
@@ -11,8 +11,6 @@ @@ -11,8 +11,6 @@
11 @import "../css/cmdbdatasync.css"; 11 @import "../css/cmdbdatasync.css";
12 /*登录logo配置*/ 12 /*登录logo配置*/
13 @import "../css/logoConfig.css"; 13 @import "../css/logoConfig.css";
14 -/*lsq 操作记录日志样式 2022-09-26*/  
15 -@import "../css/operationLog.css";  
16 14
17 .d-flex { 15 .d-flex {
18 display: flex; 16 display: flex;
@@ -33,14 +31,14 @@ @@ -33,14 +31,14 @@
33 /*最外层样式*/ 31 /*最外层样式*/
34 .container { 32 .container {
35 background-color: #CCCCCC; 33 background-color: #CCCCCC;
36 - padding: 3px 3px;  
37 - width: calc(100% - 10px); 34 + padding: 0px 0px;
  35 + width: calc(100% - 6px);
38 } 36 }
39 37
40 .container .cm-card { 38 .container .cm-card {
41 overflow-y: auto; 39 overflow-y: auto;
42 background: white; 40 background: white;
43 - border-radius: 3px 41 + border-radius: 3px;
44 } 42 }
45 43
46 .container .cm-card .search { 44 .container .cm-card .search {
@@ -63,13 +61,16 @@ @@ -63,13 +61,16 @@
63 margin-bottom: 3px !important; 61 margin-bottom: 3px !important;
64 /*width: 250px !important;*/ 62 /*width: 250px !important;*/
65 } 63 }
  64 +
66 /*lsq esData下的搜索条件栏样式调整 2022-06-27*/ 65 /*lsq esData下的搜索条件栏样式调整 2022-06-27*/
67 .container .cm-card .search .condition.esData-conditon div { 66 .container .cm-card .search .condition.esData-conditon div {
68 margin-bottom: 0px !important; 67 margin-bottom: 0px !important;
69 } 68 }
70 -.container .cm-card .search .condition.esData-conditon{ 69 +
  70 +.container .cm-card .search .condition.esData-conditon {
71 margin-bottom: 3px; 71 margin-bottom: 3px;
72 } 72 }
  73 +
73 .container .cm-card .search .btns { 74 .container .cm-card .search .btns {
74 width: 200px; 75 width: 200px;
75 display: flex; 76 display: flex;
@@ -82,6 +83,74 @@ @@ -82,6 +83,74 @@
82 padding: 0px 6px; 83 padding: 0px 6px;
83 } 84 }
84 85
  86 +/* 盒子样式 */
  87 +.m-6 {
  88 + margin: 6px;
  89 +}
  90 +
  91 +.m-l-6 {
  92 + margin-left: 6px;
  93 +}
  94 +
  95 +.m-r-6 {
  96 + margin-right: 6px;
  97 +}
  98 +
  99 +.m-t-6 {
  100 + margin-top: 6px;
  101 +}
  102 +
  103 +.m-b-6 {
  104 + margin-top: 6px;
  105 +}
  106 +
  107 +.p-6 {
  108 + padding: 6px;
  109 +}
  110 +
  111 +.p-l-6 {
  112 + padding-left: 6px;
  113 +}
  114 +
  115 +.p-r-6 {
  116 + padding-right: 6px;
  117 +}
  118 +
  119 +.p-t-6 {
  120 + padding-top: 6px;
  121 +}
  122 +
  123 +.p-b-6 {
  124 + padding-top: 6px;
  125 +}
  126 +
  127 +.p-l-3 {
  128 + padding-left: 3px;
  129 +}
  130 +
  131 +.p-r-3 {
  132 + padding-right: 3px;
  133 +}
  134 +.page-item{
  135 + padding: 0px 10px
  136 +}
  137 +
  138 +.page-item-title-h3 {
  139 + text-align: left;
  140 + color: #2b9eef;
  141 + padding-left: 6px;
  142 +}
  143 +
  144 +.page-item-content {
  145 + position: relative;
  146 + cursor: default;
  147 + border: 1px solid rgb(228, 228, 228);
  148 + -webkit-tap-highlight-color: transparent;
  149 + user-select: none;
  150 + margin: 6px;
  151 + padding: 6px;
  152 +}
  153 +
85 /* 154 /*
86 共通弹框配置样式 155 共通弹框配置样式
87 custom-class="config-dialog" 156 custom-class="config-dialog"
@@ -161,30 +230,37 @@ custom-class="config-dialog" @@ -161,30 +230,37 @@ custom-class="config-dialog"
161 .tree-table .el-table .el-table__cell.is-center div { 230 .tree-table .el-table .el-table__cell.is-center div {
162 justify-content: center; 231 justify-content: center;
163 } 232 }
  233 +
164 /*lsq 资产视图下搜索栏样式调整 2022-06-27*/ 234 /*lsq 资产视图下搜索栏样式调整 2022-06-27*/
165 -.resList-form.el-form--inline .el-form-item{ 235 +.resList-form.el-form--inline .el-form-item {
166 align-items: center; 236 align-items: center;
167 - margin-right:6px; 237 + margin-right: 6px;
168 } 238 }
  239 +
169 /*lsq ping详情页面中搜索栏的样式调整 2022-06-28*/ 240 /*lsq ping详情页面中搜索栏的样式调整 2022-06-28*/
170 -.container .cm-card .search .condition.ping div{ 241 +.container .cm-card .search .condition.ping div {
171 margin-bottom: 0px !important; 242 margin-bottom: 0px !important;
172 } 243 }
173 -.container .cm-card .search .condition.ping{ 244 +
  245 +.container .cm-card .search .condition.ping {
174 margin-bottom: 6px; 246 margin-bottom: 6px;
175 } 247 }
  248 +
176 /*lsq elementUI的滚动条样式修改 2022-06-28*/ 249 /*lsq elementUI的滚动条样式修改 2022-06-28*/
177 .el-scrollbar__bar.is-vertical { 250 .el-scrollbar__bar.is-vertical {
178 - width:15px;  
179 - top:0px; 251 + width: 15px;
  252 + top: 0px;
180 } 253 }
  254 +
181 .el-scrollbar__bar.is-horizontal { 255 .el-scrollbar__bar.is-horizontal {
182 height: 15px; 256 height: 15px;
183 - left:0px; 257 + left: 0px;
184 } 258 }
185 -.el-scrollbar__thumb,.el-scrollbar__thumb:hover { 259 +
  260 +.el-scrollbar__thumb, .el-scrollbar__thumb:hover {
186 border-radius: 0px; 261 border-radius: 0px;
187 background-color: #CCCCCC; 262 background-color: #CCCCCC;
188 opacity: 1; 263 opacity: 1;
189 - width:10px;.el-scrollbar__bar.is-horizontal>div  
190 -}  
  264 + width: 10px;
  265 +. el-scrollbar__bar . is-horizontal > div
  266 +}
1 -.operation-log-search{  
2 - display: flex;  
3 - align-items: center;  
4 - justify-content: center;  
5 - margin-top:6px;  
6 -}  
7 -.container-none{  
8 - width:100%;  
9 - height: 20px;  
10 - background:#fafafa;  
11 -}  
12 -.operation-log-container.container .cm-card .search-table{padding:15px;}  
13 -.echart-con{  
14 - padding:10px;  
15 -}  
16 -.echart-con .echart-title{  
17 - font-size: 16px;  
18 - color:#1e9fff;  
19 - text-align: left;  
20 - margin-bottom: 6px;  
21 - padding:10px;  
22 -}  
23 -.echart-left,.echart-right{  
24 - border:1px solid #eee;  
25 -}  
26 -.echart-chart{  
27 - height: 300px;  
28 -  
29 -}  
1 /* Logo 字体 */ 1 /* Logo 字体 */
2 @font-face { 2 @font-face {
3 - font-family: "iconfont logo";  
4 - src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');  
5 - src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'), 3 + font-family: "iconfont logo";
  4 + src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
  5 + src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
6 url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'), 6 url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
7 url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'), 7 url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
8 url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg'); 8 url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
9 } 9 }
10 10
11 .logo { 11 .logo {
12 - font-family: "iconfont logo";  
13 - font-size: 160px;  
14 - font-style: normal;  
15 - -webkit-font-smoothing: antialiased;  
16 - -moz-osx-font-smoothing: grayscale; 12 + font-family: "iconfont logo";
  13 + font-size: 160px;
  14 + font-style: normal;
  15 + -webkit-font-smoothing: antialiased;
  16 + -moz-osx-font-smoothing: grayscale;
17 } 17 }
18 18
19 /* tabs */ 19 /* tabs */
20 .nav-tabs { 20 .nav-tabs {
21 - position: relative; 21 + position: relative;
22 } 22 }
23 23
24 .nav-tabs .nav-more { 24 .nav-tabs .nav-more {
25 - position: absolute;  
26 - right: 0;  
27 - bottom: 0;  
28 - height: 42px;  
29 - line-height: 42px;  
30 - color: #666; 25 + position: absolute;
  26 + right: 0;
  27 + bottom: 0;
  28 + height: 42px;
  29 + line-height: 42px;
  30 + color: #666;
31 } 31 }
32 32
33 #tabs { 33 #tabs {
34 - border-bottom: 1px solid #eee; 34 + border-bottom: 1px solid #eee;
35 } 35 }
36 36
37 #tabs li { 37 #tabs li {
38 - cursor: pointer;  
39 - width: 100px;  
40 - height: 40px;  
41 - line-height: 40px;  
42 - text-align: center;  
43 - font-size: 16px;  
44 - border-bottom: 2px solid transparent;  
45 - position: relative;  
46 - z-index: 1;  
47 - margin-bottom: -1px;  
48 - color: #666; 38 + cursor: pointer;
  39 + width: 100px;
  40 + height: 40px;
  41 + line-height: 40px;
  42 + text-align: center;
  43 + font-size: 16px;
  44 + border-bottom: 2px solid transparent;
  45 + position: relative;
  46 + z-index: 1;
  47 + margin-bottom: -1px;
  48 + color: #666;
49 } 49 }
50 50
51 51
52 #tabs .active { 52 #tabs .active {
53 - border-bottom-color: #f00;  
54 - color: #222; 53 + border-bottom-color: #f00;
  54 + color: #222;
55 } 55 }
56 56
57 .tab-container .content { 57 .tab-container .content {
58 - display: none; 58 + display: none;
59 } 59 }
60 60
61 /* 页面布局 */ 61 /* 页面布局 */
62 .main { 62 .main {
63 - padding: 30px 100px;  
64 - width: 960px;  
65 - margin: 0 auto; 63 + padding: 30px 100px;
  64 + width: 960px;
  65 + margin: 0 auto;
66 } 66 }
67 67
68 .main .logo { 68 .main .logo {
69 - color: #333;  
70 - text-align: left;  
71 - margin-bottom: 30px;  
72 - line-height: 1;  
73 - height: 110px;  
74 - margin-top: -50px;  
75 - overflow: hidden;  
76 - *zoom: 1; 69 + color: #333;
  70 + text-align: left;
  71 + margin-bottom: 30px;
  72 + line-height: 1;
  73 + height: 110px;
  74 + margin-top: -50px;
  75 + overflow: hidden;
  76 + *zoom: 1;
77 } 77 }
78 78
79 .main .logo a { 79 .main .logo a {
80 - font-size: 160px;  
81 - color: #333; 80 + font-size: 160px;
  81 + color: #333;
82 } 82 }
83 83
84 .helps { 84 .helps {
85 - margin-top: 40px; 85 + margin-top: 40px;
86 } 86 }
87 87
88 .helps pre { 88 .helps pre {
89 - padding: 20px;  
90 - margin: 10px 0;  
91 - border: solid 1px #e7e1cd;  
92 - background-color: #fffdef;  
93 - overflow: auto; 89 + padding: 20px;
  90 + margin: 10px 0;
  91 + border: solid 1px #e7e1cd;
  92 + background-color: #fffdef;
  93 + overflow: auto;
94 } 94 }
95 95
96 .icon_lists { 96 .icon_lists {
97 - width: 100% !important;  
98 - overflow: hidden;  
99 - *zoom: 1; 97 + width: 100% !important;
  98 + overflow: hidden;
  99 + *zoom: 1;
100 } 100 }
101 101
102 .icon_lists li { 102 .icon_lists li {
103 - width: 100px;  
104 - margin-bottom: 10px;  
105 - margin-right: 20px;  
106 - text-align: center;  
107 - list-style: none !important;  
108 - cursor: default; 103 + width: 100px;
  104 + margin-bottom: 10px;
  105 + margin-right: 20px;
  106 + text-align: center;
  107 + list-style: none !important;
  108 + cursor: default;
109 } 109 }
110 110
111 .icon_lists li .code-name { 111 .icon_lists li .code-name {
112 - line-height: 1.2; 112 + line-height: 1.2;
113 } 113 }
114 114
115 .icon_lists .icon { 115 .icon_lists .icon {
116 - display: block;  
117 - height: 100px;  
118 - line-height: 100px;  
119 - font-size: 42px;  
120 - margin: 10px auto;  
121 - color: #333;  
122 - -webkit-transition: font-size 0.25s linear, width 0.25s linear;  
123 - -moz-transition: font-size 0.25s linear, width 0.25s linear;  
124 - transition: font-size 0.25s linear, width 0.25s linear; 116 + display: block;
  117 + height: 100px;
  118 + line-height: 100px;
  119 + font-size: 42px;
  120 + margin: 10px auto;
  121 + color: #333;
  122 + -webkit-transition: font-size 0.25s linear, width 0.25s linear;
  123 + -moz-transition: font-size 0.25s linear, width 0.25s linear;
  124 + transition: font-size 0.25s linear, width 0.25s linear;
125 } 125 }
126 126
127 .icon_lists .icon:hover { 127 .icon_lists .icon:hover {
128 - font-size: 100px; 128 + font-size: 100px;
129 } 129 }
130 130
131 .icon_lists .svg-icon { 131 .icon_lists .svg-icon {
132 - /* 通过设置 font-size 来改变图标大小 */  
133 - width: 1em;  
134 - /* 图标和文字相邻时,垂直对齐 */  
135 - vertical-align: -0.15em;  
136 - /* 通过设置 color 来改变 SVG 的颜色/fill */  
137 - fill: currentColor;  
138 - /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示  
139 - normalize.css 中也包含这行 */  
140 - overflow: hidden; 132 + /* 通过设置 font-size 来改变图标大小 */
  133 + width: 1em;
  134 + /* 图标和文字相邻时,垂直对齐 */
  135 + vertical-align: -0.15em;
  136 + /* 通过设置 color 来改变 SVG 的颜色/fill */
  137 + fill: currentColor;
  138 + /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
  139 + normalize.css 中也包含这行 */
  140 + overflow: hidden;
141 } 141 }
142 142
143 .icon_lists li .name, 143 .icon_lists li .name,
144 .icon_lists li .code-name { 144 .icon_lists li .code-name {
145 - color: #666; 145 + color: #666;
146 } 146 }
147 147
148 /* markdown 样式 */ 148 /* markdown 样式 */
149 .markdown { 149 .markdown {
150 - color: #666;  
151 - font-size: 14px;  
152 - line-height: 1.8; 150 + color: #666;
  151 + font-size: 14px;
  152 + line-height: 1.8;
153 } 153 }
154 154
155 .highlight { 155 .highlight {
156 - line-height: 1.5; 156 + line-height: 1.5;
157 } 157 }
158 158
159 .markdown img { 159 .markdown img {
160 - vertical-align: middle;  
161 - max-width: 100%; 160 + vertical-align: middle;
  161 + max-width: 100%;
162 } 162 }
163 163
164 .markdown h1 { 164 .markdown h1 {
165 - color: #404040;  
166 - font-weight: 500;  
167 - line-height: 40px;  
168 - margin-bottom: 24px; 165 + color: #404040;
  166 + font-weight: 500;
  167 + line-height: 40px;
  168 + margin-bottom: 24px;
169 } 169 }
170 170
171 .markdown h2, 171 .markdown h2,
@@ -173,139 +173,139 @@ @@ -173,139 +173,139 @@
173 .markdown h4, 173 .markdown h4,
174 .markdown h5, 174 .markdown h5,
175 .markdown h6 { 175 .markdown h6 {
176 - color: #404040;  
177 - margin: 1.6em 0 0.6em 0;  
178 - font-weight: 500;  
179 - clear: both; 176 + color: #404040;
  177 + margin: 1.6em 0 0.6em 0;
  178 + font-weight: 500;
  179 + clear: both;
180 } 180 }
181 181
182 .markdown h1 { 182 .markdown h1 {
183 - font-size: 28px; 183 + font-size: 28px;
184 } 184 }
185 185
186 .markdown h2 { 186 .markdown h2 {
187 - font-size: 22px; 187 + font-size: 22px;
188 } 188 }
189 189
190 .markdown h3 { 190 .markdown h3 {
191 - font-size: 16px; 191 + font-size: 16px;
192 } 192 }
193 193
194 .markdown h4 { 194 .markdown h4 {
195 - font-size: 14px; 195 + font-size: 14px;
196 } 196 }
197 197
198 .markdown h5 { 198 .markdown h5 {
199 - font-size: 12px; 199 + font-size: 12px;
200 } 200 }
201 201
202 .markdown h6 { 202 .markdown h6 {
203 - font-size: 12px; 203 + font-size: 12px;
204 } 204 }
205 205
206 .markdown hr { 206 .markdown hr {
207 - height: 1px;  
208 - border: 0;  
209 - background: #e9e9e9;  
210 - margin: 16px 0;  
211 - clear: both; 207 + height: 1px;
  208 + border: 0;
  209 + background: #e9e9e9;
  210 + margin: 16px 0;
  211 + clear: both;
212 } 212 }
213 213
214 .markdown p { 214 .markdown p {
215 - margin: 1em 0; 215 + margin: 1em 0;
216 } 216 }
217 217
218 -.markdown > p,  
219 -.markdown > blockquote,  
220 -.markdown > .highlight,  
221 -.markdown > ol,  
222 -.markdown > ul {  
223 - width: 80%; 218 +.markdown>p,
  219 +.markdown>blockquote,
  220 +.markdown>.highlight,
  221 +.markdown>ol,
  222 +.markdown>ul {
  223 + width: 80%;
224 } 224 }
225 225
226 -.markdown ul > li {  
227 - list-style: circle; 226 +.markdown ul>li {
  227 + list-style: circle;
228 } 228 }
229 229
230 -.markdown > ul li,  
231 -.markdown blockquote ul > li {  
232 - margin-left: 20px;  
233 - padding-left: 4px; 230 +.markdown>ul li,
  231 +.markdown blockquote ul>li {
  232 + margin-left: 20px;
  233 + padding-left: 4px;
234 } 234 }
235 235
236 -.markdown > ul li p,  
237 -.markdown > ol li p {  
238 - margin: 0.6em 0; 236 +.markdown>ul li p,
  237 +.markdown>ol li p {
  238 + margin: 0.6em 0;
239 } 239 }
240 240
241 -.markdown ol > li {  
242 - list-style: decimal; 241 +.markdown ol>li {
  242 + list-style: decimal;
243 } 243 }
244 244
245 -.markdown > ol li,  
246 -.markdown blockquote ol > li {  
247 - margin-left: 20px;  
248 - padding-left: 4px; 245 +.markdown>ol li,
  246 +.markdown blockquote ol>li {
  247 + margin-left: 20px;
  248 + padding-left: 4px;
249 } 249 }
250 250
251 .markdown code { 251 .markdown code {
252 - margin: 0 3px;  
253 - padding: 0 5px;  
254 - background: #eee;  
255 - border-radius: 3px; 252 + margin: 0 3px;
  253 + padding: 0 5px;
  254 + background: #eee;
  255 + border-radius: 3px;
256 } 256 }
257 257
258 .markdown strong, 258 .markdown strong,
259 .markdown b { 259 .markdown b {
260 - font-weight: 600; 260 + font-weight: 600;
261 } 261 }
262 262
263 -.markdown > table {  
264 - border-collapse: collapse;  
265 - border-spacing: 0px;  
266 - empty-cells: show;  
267 - border: 1px solid #e9e9e9;  
268 - width: 95%;  
269 - margin-bottom: 24px; 263 +.markdown>table {
  264 + border-collapse: collapse;
  265 + border-spacing: 0px;
  266 + empty-cells: show;
  267 + border: 1px solid #e9e9e9;
  268 + width: 95%;
  269 + margin-bottom: 24px;
270 } 270 }
271 271
272 -.markdown > table th {  
273 - white-space: nowrap;  
274 - color: #333;  
275 - font-weight: 600; 272 +.markdown>table th {
  273 + white-space: nowrap;
  274 + color: #333;
  275 + font-weight: 600;
276 } 276 }
277 277
278 -.markdown > table th,  
279 -.markdown > table td {  
280 - border: 1px solid #e9e9e9;  
281 - padding: 8px 16px;  
282 - text-align: left; 278 +.markdown>table th,
  279 +.markdown>table td {
  280 + border: 1px solid #e9e9e9;
  281 + padding: 8px 16px;
  282 + text-align: left;
283 } 283 }
284 284
285 -.markdown > table th {  
286 - background: #F7F7F7; 285 +.markdown>table th {
  286 + background: #F7F7F7;
287 } 287 }
288 288
289 .markdown blockquote { 289 .markdown blockquote {
290 - font-size: 90%;  
291 - color: #999;  
292 - border-left: 4px solid #e9e9e9;  
293 - padding-left: 0.8em;  
294 - margin: 1em 0; 290 + font-size: 90%;
  291 + color: #999;
  292 + border-left: 4px solid #e9e9e9;
  293 + padding-left: 0.8em;
  294 + margin: 1em 0;
295 } 295 }
296 296
297 .markdown blockquote p { 297 .markdown blockquote p {
298 - margin: 0; 298 + margin: 0;
299 } 299 }
300 300
301 .markdown .anchor { 301 .markdown .anchor {
302 - opacity: 0;  
303 - transition: opacity 0.3s ease;  
304 - margin-left: 8px; 302 + opacity: 0;
  303 + transition: opacity 0.3s ease;
  304 + margin-left: 8px;
305 } 305 }
306 306
307 .markdown .waiting { 307 .markdown .waiting {
308 - color: #ccc; 308 + color: #ccc;
309 } 309 }
310 310
311 .markdown h1:hover .anchor, 311 .markdown h1:hover .anchor,
@@ -314,27 +314,27 @@ @@ -314,27 +314,27 @@
314 .markdown h4:hover .anchor, 314 .markdown h4:hover .anchor,
315 .markdown h5:hover .anchor, 315 .markdown h5:hover .anchor,
316 .markdown h6:hover .anchor { 316 .markdown h6:hover .anchor {
317 - opacity: 1;  
318 - display: inline-block; 317 + opacity: 1;
  318 + display: inline-block;
319 } 319 }
320 320
321 -.markdown > br,  
322 -.markdown > p > br {  
323 - clear: both; 321 +.markdown>br,
  322 +.markdown>p>br {
  323 + clear: both;
324 } 324 }
325 325
326 326
327 .hljs { 327 .hljs {
328 - display: block;  
329 - background: white;  
330 - padding: 0.5em;  
331 - color: #333333;  
332 - overflow-x: auto; 328 + display: block;
  329 + background: white;
  330 + padding: 0.5em;
  331 + color: #333333;
  332 + overflow-x: auto;
333 } 333 }
334 334
335 .hljs-comment, 335 .hljs-comment,
336 .hljs-meta { 336 .hljs-meta {
337 - color: #969896; 337 + color: #969896;
338 } 338 }
339 339
340 .hljs-string, 340 .hljs-string,
@@ -343,29 +343,29 @@ @@ -343,29 +343,29 @@
343 .hljs-strong, 343 .hljs-strong,
344 .hljs-emphasis, 344 .hljs-emphasis,
345 .hljs-quote { 345 .hljs-quote {
346 - color: #df5000; 346 + color: #df5000;
347 } 347 }
348 348
349 .hljs-keyword, 349 .hljs-keyword,
350 .hljs-selector-tag, 350 .hljs-selector-tag,
351 .hljs-type { 351 .hljs-type {
352 - color: #a71d5d; 352 + color: #a71d5d;
353 } 353 }
354 354
355 .hljs-literal, 355 .hljs-literal,
356 .hljs-symbol, 356 .hljs-symbol,
357 .hljs-bullet, 357 .hljs-bullet,
358 .hljs-attribute { 358 .hljs-attribute {
359 - color: #0086b3; 359 + color: #0086b3;
360 } 360 }
361 361
362 .hljs-section, 362 .hljs-section,
363 .hljs-name { 363 .hljs-name {
364 - color: #63a35c; 364 + color: #63a35c;
365 } 365 }
366 366
367 .hljs-tag { 367 .hljs-tag {
368 - color: #333333; 368 + color: #333333;
369 } 369 }
370 370
371 .hljs-title, 371 .hljs-title,
@@ -374,21 +374,21 @@ @@ -374,21 +374,21 @@
374 .hljs-selector-class, 374 .hljs-selector-class,
375 .hljs-selector-attr, 375 .hljs-selector-attr,
376 .hljs-selector-pseudo { 376 .hljs-selector-pseudo {
377 - color: #795da3; 377 + color: #795da3;
378 } 378 }
379 379
380 .hljs-addition { 380 .hljs-addition {
381 - color: #55a532;  
382 - background-color: #eaffea; 381 + color: #55a532;
  382 + background-color: #eaffea;
383 } 383 }
384 384
385 .hljs-deletion { 385 .hljs-deletion {
386 - color: #bd2c00;  
387 - background-color: #ffecec; 386 + color: #bd2c00;
  387 + background-color: #ffecec;
388 } 388 }
389 389
390 .hljs-link { 390 .hljs-link {
391 - text-decoration: underline; 391 + text-decoration: underline;
392 } 392 }
393 393
394 /* 代码高亮 */ 394 /* 代码高亮 */
@@ -401,83 +401,83 @@ https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javasc @@ -401,83 +401,83 @@ https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javasc
401 */ 401 */
402 code[class*="language-"], 402 code[class*="language-"],
403 pre[class*="language-"] { 403 pre[class*="language-"] {
404 - color: black;  
405 - background: none;  
406 - text-shadow: 0 1px white;  
407 - font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;  
408 - text-align: left;  
409 - white-space: pre;  
410 - word-spacing: normal;  
411 - word-break: normal;  
412 - word-wrap: normal;  
413 - line-height: 1.5;  
414 -  
415 - -moz-tab-size: 4;  
416 - -o-tab-size: 4;  
417 - tab-size: 4;  
418 -  
419 - -webkit-hyphens: none;  
420 - -moz-hyphens: none;  
421 - -ms-hyphens: none;  
422 - hyphens: none; 404 + color: black;
  405 + background: none;
  406 + text-shadow: 0 1px white;
  407 + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
  408 + text-align: left;
  409 + white-space: pre;
  410 + word-spacing: normal;
  411 + word-break: normal;
  412 + word-wrap: normal;
  413 + line-height: 1.5;
  414 +
  415 + -moz-tab-size: 4;
  416 + -o-tab-size: 4;
  417 + tab-size: 4;
  418 +
  419 + -webkit-hyphens: none;
  420 + -moz-hyphens: none;
  421 + -ms-hyphens: none;
  422 + hyphens: none;
423 } 423 }
424 424
425 pre[class*="language-"]::-moz-selection, 425 pre[class*="language-"]::-moz-selection,
426 pre[class*="language-"] ::-moz-selection, 426 pre[class*="language-"] ::-moz-selection,
427 code[class*="language-"]::-moz-selection, 427 code[class*="language-"]::-moz-selection,
428 code[class*="language-"] ::-moz-selection { 428 code[class*="language-"] ::-moz-selection {
429 - text-shadow: none;  
430 - background: #b3d4fc; 429 + text-shadow: none;
  430 + background: #b3d4fc;
431 } 431 }
432 432
433 pre[class*="language-"]::selection, 433 pre[class*="language-"]::selection,
434 pre[class*="language-"] ::selection, 434 pre[class*="language-"] ::selection,
435 code[class*="language-"]::selection, 435 code[class*="language-"]::selection,
436 code[class*="language-"] ::selection { 436 code[class*="language-"] ::selection {
437 - text-shadow: none;  
438 - background: #b3d4fc; 437 + text-shadow: none;
  438 + background: #b3d4fc;
439 } 439 }
440 440
441 @media print { 441 @media print {
442 442
443 - code[class*="language-"],  
444 - pre[class*="language-"] {  
445 - text-shadow: none;  
446 - } 443 + code[class*="language-"],
  444 + pre[class*="language-"] {
  445 + text-shadow: none;
  446 + }
447 } 447 }
448 448
449 /* Code blocks */ 449 /* Code blocks */
450 pre[class*="language-"] { 450 pre[class*="language-"] {
451 - padding: 1em;  
452 - margin: .5em 0;  
453 - overflow: auto; 451 + padding: 1em;
  452 + margin: .5em 0;
  453 + overflow: auto;
454 } 454 }
455 455
456 -:not(pre) > code[class*="language-"], 456 +:not(pre)>code[class*="language-"],
457 pre[class*="language-"] { 457 pre[class*="language-"] {
458 - background: #f5f2f0; 458 + background: #f5f2f0;
459 } 459 }
460 460
461 /* Inline code */ 461 /* Inline code */
462 -:not(pre) > code[class*="language-"] {  
463 - padding: .1em;  
464 - border-radius: .3em;  
465 - white-space: normal; 462 +:not(pre)>code[class*="language-"] {
  463 + padding: .1em;
  464 + border-radius: .3em;
  465 + white-space: normal;
466 } 466 }
467 467
468 .token.comment, 468 .token.comment,
469 .token.prolog, 469 .token.prolog,
470 .token.doctype, 470 .token.doctype,
471 .token.cdata { 471 .token.cdata {
472 - color: slategray; 472 + color: slategray;
473 } 473 }
474 474
475 .token.punctuation { 475 .token.punctuation {
476 - color: #999; 476 + color: #999;
477 } 477 }
478 478
479 .namespace { 479 .namespace {
480 - opacity: .7; 480 + opacity: .7;
481 } 481 }
482 482
483 .token.property, 483 .token.property,
@@ -487,7 +487,7 @@ pre[class*="language-"] { @@ -487,7 +487,7 @@ pre[class*="language-"] {
487 .token.constant, 487 .token.constant,
488 .token.symbol, 488 .token.symbol,
489 .token.deleted { 489 .token.deleted {
490 - color: #905; 490 + color: #905;
491 } 491 }
492 492
493 .token.selector, 493 .token.selector,
@@ -496,7 +496,7 @@ pre[class*="language-"] { @@ -496,7 +496,7 @@ pre[class*="language-"] {
496 .token.char, 496 .token.char,
497 .token.builtin, 497 .token.builtin,
498 .token.inserted { 498 .token.inserted {
499 - color: #690; 499 + color: #690;
500 } 500 }
501 501
502 .token.operator, 502 .token.operator,
@@ -504,36 +504,36 @@ pre[class*="language-"] { @@ -504,36 +504,36 @@ pre[class*="language-"] {
504 .token.url, 504 .token.url,
505 .language-css .token.string, 505 .language-css .token.string,
506 .style .token.string { 506 .style .token.string {
507 - color: #9a6e3a;  
508 - background: hsla(0, 0%, 100%, .5); 507 + color: #9a6e3a;
  508 + background: hsla(0, 0%, 100%, .5);
509 } 509 }
510 510
511 .token.atrule, 511 .token.atrule,
512 .token.attr-value, 512 .token.attr-value,
513 .token.keyword { 513 .token.keyword {
514 - color: #07a; 514 + color: #07a;
515 } 515 }
516 516
517 .token.function, 517 .token.function,
518 .token.class-name { 518 .token.class-name {
519 - color: #DD4A68; 519 + color: #DD4A68;
520 } 520 }
521 521
522 .token.regex, 522 .token.regex,
523 .token.important, 523 .token.important,
524 .token.variable { 524 .token.variable {
525 - color: #e90; 525 + color: #e90;
526 } 526 }
527 527
528 .token.important, 528 .token.important,
529 .token.bold { 529 .token.bold {
530 - font-weight: bold; 530 + font-weight: bold;
531 } 531 }
532 532
533 .token.italic { 533 .token.italic {
534 - font-style: italic; 534 + font-style: italic;
535 } 535 }
536 536
537 .token.entity { 537 .token.entity {
538 - cursor: help; 538 + cursor: help;
539 } 539 }
1 @font-face { 1 @font-face {
2 - font-family: "iconfont"; /* Project id 2843738 */  
3 - src: url('iconfont.woff2?t=1639498542236') format('woff2'),  
4 - url('iconfont.woff?t=1639498542236') format('woff'),  
5 - url('iconfont.ttf?t=1639498542236') format('truetype'); 2 + font-family: "iconfont"; /* Project id 2843738 */
  3 + src: url('iconfont.woff2?t=1659325108758') format('woff2'),
  4 + url('iconfont.woff?t=1659325108758') format('woff'),
  5 + url('iconfont.ttf?t=1659325108758') format('truetype');
6 } 6 }
7 7
8 .iconfont { 8 .iconfont {
9 - font-family: "iconfont" !important;  
10 - font-size: 16px;  
11 - font-style: normal;  
12 - -webkit-font-smoothing: antialiased;  
13 - -moz-osx-font-smoothing: grayscale; 9 + font-family: "iconfont" !important;
  10 + font-size: 16px;
  11 + font-style: normal;
  12 + -webkit-font-smoothing: antialiased;
  13 + -moz-osx-font-smoothing: grayscale;
  14 +}
  15 +
  16 +.icon-tishi:before {
  17 + content: "\e67c";
  18 +}
  19 +
  20 +.icon-dian:before {
  21 + content: "\ec1e";
  22 +}
  23 +
  24 +.icon-gengduo-shuxiang:before {
  25 + content: "\e8c4";
  26 +}
  27 +
  28 +.icon-weixin:before {
  29 + content: "\e67b";
  30 +}
  31 +
  32 +.icon-youxiang:before {
  33 + content: "\e908";
  34 +}
  35 +
  36 +.icon-duanxinqunfa:before {
  37 + content: "\eb42";
  38 +}
  39 +
  40 +.icon-yewuziyuantuopu:before {
  41 + content: "\ea6f";
14 } 42 }
15 43
16 .icon-yibiaopan:before { 44 .icon-yibiaopan:before {
17 - content: "\eb67"; 45 + content: "\eb67";
18 } 46 }
19 47
20 .icon-nginx:before { 48 .icon-nginx:before {
21 - content: "\e63e"; 49 + content: "\e63e";
22 } 50 }
23 51
24 .icon-dianya:before { 52 .icon-dianya:before {
25 - content: "\e639"; 53 + content: "\e639";
26 } 54 }
27 55
28 .icon-shujujiekou:before { 56 .icon-shujujiekou:before {
29 - content: "\e641"; 57 + content: "\e641";
30 } 58 }
31 59
32 .icon-xudianchizu:before { 60 .icon-xudianchizu:before {
33 - content: "\e7df"; 61 + content: "\e7df";
34 } 62 }
35 63
36 .icon-tomcat2:before { 64 .icon-tomcat2:before {
37 - content: "\e63a"; 65 + content: "\e63a";
38 } 66 }
39 67
40 .icon-xiaoxingji:before { 68 .icon-xiaoxingji:before {
41 - content: "\e63b"; 69 + content: "\e63b";
42 } 70 }
43 71
44 .icon-dianyabiao:before { 72 .icon-dianyabiao:before {
45 - content: "\e658"; 73 + content: "\e658";
46 } 74 }
47 75
48 .icon-suzhuji:before { 76 .icon-suzhuji:before {
49 - content: "\e63f"; 77 + content: "\e63f";
50 } 78 }
51 79
52 .icon-kongtiao1:before { 80 .icon-kongtiao1:before {
53 - content: "\e90d"; 81 + content: "\e90d";
54 } 82 }
55 83
56 .icon-kaiguan:before { 84 .icon-kaiguan:before {
57 - content: "\e642"; 85 + content: "\e642";
58 } 86 }
59 87
60 .icon-wenduji:before { 88 .icon-wenduji:before {
61 - content: "\e643"; 89 + content: "\e643";
62 } 90 }
63 91
64 .icon-kaiguan1:before { 92 .icon-kaiguan1:before {
65 - content: "\eaf7"; 93 + content: "\eaf7";
66 } 94 }
67 95
68 .icon-xuehua:before { 96 .icon-xuehua:before {
69 - content: "\e644"; 97 + content: "\e644";
70 } 98 }
71 99
72 .icon-aliyun:before { 100 .icon-aliyun:before {
73 - content: "\e6aa"; 101 + content: "\e6aa";
74 } 102 }
75 103
76 .icon-kongtiao2:before { 104 .icon-kongtiao2:before {
77 - content: "\e645"; 105 + content: "\e645";
78 } 106 }
79 107
80 .icon-kaiguan2:before { 108 .icon-kaiguan2:before {
81 - content: "\ec76"; 109 + content: "\ec76";
82 } 110 }
83 111
84 .icon-dianchizu:before { 112 .icon-dianchizu:before {
85 - content: "\e647"; 113 + content: "\e647";
86 } 114 }
87 115
88 .icon-dianchizu1:before { 116 .icon-dianchizu1:before {
89 - content: "\e646"; 117 + content: "\e646";
90 } 118 }
91 119
92 .icon-CADshezhi:before { 120 .icon-CADshezhi:before {
93 - content: "\e649"; 121 + content: "\e649";
94 } 122 }
95 123
96 .icon-EPStubiao:before { 124 .icon-EPStubiao:before {
97 - content: "\e64a"; 125 + content: "\e64a";
98 } 126 }
99 127
100 .icon-webLogic:before { 128 .icon-webLogic:before {
101 - content: "\e73a"; 129 + content: "\e73a";
102 } 130 }
103 131
104 .icon-xiaoxingji1:before { 132 .icon-xiaoxingji1:before {
105 - content: "\e65a"; 133 + content: "\e65a";
106 } 134 }
107 135
108 .icon-wenduji1:before { 136 .icon-wenduji1:before {
109 - content: "\e64b"; 137 + content: "\e64b";
110 } 138 }
111 139
112 .icon-guangyuwang:before { 140 .icon-guangyuwang:before {
113 - content: "\e64c"; 141 + content: "\e64c";
114 } 142 }
115 143
116 .icon-wangguanshezhi:before { 144 .icon-wangguanshezhi:before {
117 - content: "\e69f"; 145 + content: "\e69f";
118 } 146 }
119 147
120 .icon-sanjiaohuanji:before { 148 .icon-sanjiaohuanji:before {
121 - content: "\e64d"; 149 + content: "\e64d";
122 } 150 }
123 151
124 .icon-Redis1:before { 152 .icon-Redis1:before {
125 - content: "\e64e"; 153 + content: "\e64e";
126 } 154 }
127 155
128 .icon-dianchi3:before { 156 .icon-dianchi3:before {
129 - content: "\e64f"; 157 + content: "\e64f";
130 } 158 }
131 159
132 .icon-xiaoxingji2:before { 160 .icon-xiaoxingji2:before {
133 - content: "\e734"; 161 + content: "\e734";
134 } 162 }
135 163
136 .icon-xiaoxingji3:before { 164 .icon-xiaoxingji3:before {
137 - content: "\e749"; 165 + content: "\e749";
138 } 166 }
139 167
140 .icon-dns:before { 168 .icon-dns:before {
141 - content: "\e650"; 169 + content: "\e650";
142 } 170 }
143 171
144 .icon-yangan:before { 172 .icon-yangan:before {
145 - content: "\e651"; 173 + content: "\e651";
146 } 174 }
147 175
148 .icon-shujuku:before { 176 .icon-shujuku:before {
149 - content: "\e652"; 177 + content: "\e652";
150 } 178 }
151 179
152 .icon-xuehua1:before { 180 .icon-xuehua1:before {
153 - content: "\e653"; 181 + content: "\e653";
154 } 182 }
155 183
156 .icon-kongtiao3:before { 184 .icon-kongtiao3:before {
157 - content: "\e655"; 185 + content: "\e655";
158 } 186 }
159 187
160 .icon-jifang:before { 188 .icon-jifang:before {
161 - content: "\e6ca"; 189 + content: "\e6ca";
162 } 190 }
163 191
164 .icon-eps:before { 192 .icon-eps:before {
165 - content: "\e8ae"; 193 + content: "\e8ae";
166 } 194 }
167 195
168 .icon-sharpicons_snowflake:before { 196 .icon-sharpicons_snowflake:before {
169 - content: "\e7c4"; 197 + content: "\e7c4";
170 } 198 }
171 199
172 .icon-SANjiaohuanji:before { 200 .icon-SANjiaohuanji:before {
173 - content: "\e656"; 201 + content: "\e656";
174 } 202 }
175 203
176 .icon-dianchi4:before { 204 .icon-dianchi4:before {
177 - content: "\e659"; 205 + content: "\e659";
178 } 206 }
179 207
180 .icon-dianyabiao1:before { 208 .icon-dianyabiao1:before {
181 - content: "\e65f"; 209 + content: "\e65f";
182 } 210 }
183 211
184 .icon-dianchizu2:before { 212 .icon-dianchizu2:before {
185 - content: "\e82b"; 213 + content: "\e82b";
186 } 214 }
187 215
188 .icon-hengban-huaweiyun-quanbu:before { 216 .icon-hengban-huaweiyun-quanbu:before {
189 - content: "\e6c9"; 217 + content: "\e6c9";
190 } 218 }
191 219
192 .icon-UPS:before { 220 .icon-UPS:before {
193 - content: "\e661"; 221 + content: "\e661";
194 } 222 }
195 223
196 .icon-yangan1:before { 224 .icon-yangan1:before {
197 - content: "\e67e"; 225 + content: "\e67e";
198 } 226 }
199 227
200 .icon-dianliu:before { 228 .icon-dianliu:before {
201 - content: "\e68a"; 229 + content: "\e68a";
202 } 230 }
203 231
204 .icon-dianchi-wu:before { 232 .icon-dianchi-wu:before {
205 - content: "\e662"; 233 + content: "\e662";
206 } 234 }
207 235
208 .icon-ecsyunfuwuqi:before { 236 .icon-ecsyunfuwuqi:before {
209 - content: "\e666"; 237 + content: "\e666";
210 } 238 }
211 239
212 .icon-ups:before { 240 .icon-ups:before {
213 - content: "\e7b9"; 241 + content: "\e7b9";
214 } 242 }
215 243
216 .icon-mysqlshujukumgrban:before { 244 .icon-mysqlshujukumgrban:before {
217 - content: "\e663"; 245 + content: "\e663";
218 } 246 }
219 247
220 .icon-dianya1:before { 248 .icon-dianya1:before {
221 - content: "\e665"; 249 + content: "\e665";
222 } 250 }
223 251
224 .icon-VMware:before { 252 .icon-VMware:before {
225 - content: "\e843"; 253 + content: "\e843";
226 } 254 }
227 255
228 .icon-yibiaopan1:before { 256 .icon-yibiaopan1:before {
229 - content: "\e664"; 257 + content: "\e664";
230 } 258 }
231 259
232 .icon-ecsyunfuwuqiECS:before { 260 .icon-ecsyunfuwuqiECS:before {
233 - content: "\e667"; 261 + content: "\e667";
234 } 262 }
235 263
236 .icon-ecsyunfuwuqiECS1:before { 264 .icon-ecsyunfuwuqiECS1:before {
237 - content: "\e6e8"; 265 + content: "\e6e8";
238 } 266 }
239 267
240 .icon-ruqinjiance1:before { 268 .icon-ruqinjiance1:before {
241 - content: "\e668"; 269 + content: "\e668";
242 } 270 }
243 271
244 .icon-gongxiangcunchu:before { 272 .icon-gongxiangcunchu:before {
245 - content: "\e754"; 273 + content: "\e754";
246 } 274 }
247 275
248 .icon-dianliu1:before { 276 .icon-dianliu1:before {
249 - content: "\e673"; 277 + content: "\e673";
250 } 278 }
251 279
252 .icon-icon-huaweiyunxuniji:before { 280 .icon-icon-huaweiyunxuniji:before {
253 - content: "\e927"; 281 + content: "\e927";
254 } 282 }
255 283
256 .icon-MySQLshujuku:before { 284 .icon-MySQLshujuku:before {
257 - content: "\e72a"; 285 + content: "\e72a";
258 } 286 }
259 287
260 .icon-Internet-yunzhuangjiedian:before { 288 .icon-Internet-yunzhuangjiedian:before {
261 - content: "\e6ac"; 289 + content: "\e6ac";
262 } 290 }
263 291
264 .icon-Internet-yunzhuangjiedian1:before { 292 .icon-Internet-yunzhuangjiedian1:before {
265 - content: "\e6b6"; 293 + content: "\e6b6";
266 } 294 }
267 295
268 .icon-yangan2:before { 296 .icon-yangan2:before {
269 - content: "\e669"; 297 + content: "\e669";
270 } 298 }
271 299
272 .icon-KAFAKA:before { 300 .icon-KAFAKA:before {
273 - content: "\e801"; 301 + content: "\e801";
274 } 302 }
275 303
276 .icon-zhongjiqi:before { 304 .icon-zhongjiqi:before {
277 - content: "\e6b9"; 305 + content: "\e6b9";
278 } 306 }
279 307
280 .icon-wangguan:before { 308 .icon-wangguan:before {
281 - content: "\e67a"; 309 + content: "\e67a";
282 } 310 }
283 311
284 .icon-alarm-full:before { 312 .icon-alarm-full:before {
285 - content: "\e871"; 313 + content: "\e871";
286 } 314 }
287 315
288 .icon-alarm:before { 316 .icon-alarm:before {
289 - content: "\e872"; 317 + content: "\e872";
290 } 318 }
291 319
292 .icon-blood-full:before { 320 .icon-blood-full:before {
293 - content: "\e918"; 321 + content: "\e918";
294 } 322 }
295 323
296 .icon-mianxingbaojingdengtubiao:before { 324 .icon-mianxingbaojingdengtubiao:before {
297 - content: "\e6a3"; 325 + content: "\e6a3";
298 } 326 }
299 327
300 .icon-fuwuqi2:before { 328 .icon-fuwuqi2:before {
301 - content: "\e98e"; 329 + content: "\e98e";
302 } 330 }
303 331
304 .icon-fenqu:before { 332 .icon-fenqu:before {
305 - content: "\e684"; 333 + content: "\e684";
306 } 334 }
307 335
308 .icon-wenduji2:before { 336 .icon-wenduji2:before {
309 - content: "\e66a"; 337 + content: "\e66a";
310 } 338 }
311 339
312 .icon-shujukucaozuo-chaxunmysqlshujuku:before { 340 .icon-shujukucaozuo-chaxunmysqlshujuku:before {
313 - content: "\e66b"; 341 + content: "\e66b";
314 } 342 }
315 343
316 .icon-jifang1:before { 344 .icon-jifang1:before {
317 - content: "\e66c"; 345 + content: "\e66c";
318 } 346 }
319 347
320 .icon-zhuanyongsuzhuji:before { 348 .icon-zhuanyongsuzhuji:before {
321 - content: "\e66d"; 349 + content: "\e66d";
322 } 350 }
323 351
324 .icon-danxingwangka:before { 352 .icon-danxingwangka:before {
325 - content: "\e66e"; 353 + content: "\e66e";
326 } 354 }
327 355
328 .icon-wuliwangkaduankou:before { 356 .icon-wuliwangkaduankou:before {
329 - content: "\e66f"; 357 + content: "\e66f";
330 } 358 }
331 359
332 .icon-wangluoruqinjiance:before { 360 .icon-wangluoruqinjiance:before {
333 - content: "\e672"; 361 + content: "\e672";
334 } 362 }
335 363
336 .icon-qiansuanxudianchizu:before { 364 .icon-qiansuanxudianchizu:before {
337 - content: "\e674"; 365 + content: "\e674";
338 } 366 }
339 367
340 .icon-UPS1:before { 368 .icon-UPS1:before {
341 - content: "\e676"; 369 + content: "\e676";
342 } 370 }
343 371
344 .icon-guangyuwangxianlu:before { 372 .icon-guangyuwangxianlu:before {
345 - content: "\e678"; 373 + content: "\e678";
346 } 374 }
347 375
348 .icon-wuliwangka:before { 376 .icon-wuliwangka:before {
349 - content: "\e67f"; 377 + content: "\e67f";
350 } 378 }
351 379
352 .icon-Nginx:before { 380 .icon-Nginx:before {
353 - content: "\e683"; 381 + content: "\e683";
354 } 382 }
355 383
356 .icon-Weblogic:before { 384 .icon-Weblogic:before {
357 - content: "\e685"; 385 + content: "\e685";
358 } 386 }
359 387
360 .icon-TOMCAT:before { 388 .icon-TOMCAT:before {
361 - content: "\e687"; 389 + content: "\e687";
362 } 390 }
363 391
364 .icon-wulifuwuqi1:before { 392 .icon-wulifuwuqi1:before {
365 - content: "\e688"; 393 + content: "\e688";
366 } 394 }
367 395
368 .icon-VMware1:before { 396 .icon-VMware1:before {
369 - content: "\e68b"; 397 + content: "\e68b";
370 } 398 }
371 399
372 .icon-jiqun:before { 400 .icon-jiqun:before {
373 - content: "\e68c"; 401 + content: "\e68c";
374 } 402 }
375 403
376 .icon-bianyuanjiaohuanji:before { 404 .icon-bianyuanjiaohuanji:before {
377 - content: "\e770"; 405 + content: "\e770";
378 } 406 }
379 407
380 .icon-epsdaoru:before { 408 .icon-epsdaoru:before {
381 - content: "\ee23"; 409 + content: "\ee23";
382 } 410 }
383 411
384 .icon-epsdaochu:before { 412 .icon-epsdaochu:before {
385 - content: "\ee24"; 413 + content: "\ee24";
386 } 414 }
387 415
388 .icon-zhongjiqi1:before { 416 .icon-zhongjiqi1:before {
389 - content: "\e8e0"; 417 + content: "\e8e0";
390 } 418 }
391 419
392 .icon-a-ziyuan117:before { 420 .icon-a-ziyuan117:before {
393 - content: "\e670"; 421 + content: "\e670";
394 } 422 }
395 423
396 .icon-suzhuji1:before { 424 .icon-suzhuji1:before {
397 - content: "\e671"; 425 + content: "\e671";
398 } 426 }
399 427
400 .icon-binghaitushi_shuizi:before { 428 .icon-binghaitushi_shuizi:before {
401 - content: "\e6a5"; 429 + content: "\e6a5";
402 } 430 }
403 431
404 .icon-gongxiangcunchu1:before { 432 .icon-gongxiangcunchu1:before {
405 - content: "\e677"; 433 + content: "\e677";
406 } 434 }
407 435
408 .icon-loudiandianliu-xian:before { 436 .icon-loudiandianliu-xian:before {
409 - content: "\e7de"; 437 + content: "\e7de";
410 } 438 }
411 439
412 .icon-alarm-full1:before { 440 .icon-alarm-full1:before {
413 - content: "\e679"; 441 + content: "\e679";
414 } 442 }
415 443
416 .icon-xiaoxingji4:before { 444 .icon-xiaoxingji4:before {
417 - content: "\e7c3"; 445 + content: "\e7c3";
418 } 446 }
419 447
420 .icon-dianliu2:before { 448 .icon-dianliu2:before {
421 - content: "\e7b0"; 449 + content: "\e7b0";
422 } 450 }
423 451
424 .icon-huaweiyun:before { 452 .icon-huaweiyun:before {
425 - content: "\e7ca"; 453 + content: "\e7ca";
426 } 454 }
427 455
428 .icon-dianchi:before { 456 .icon-dianchi:before {
429 - content: "\e624"; 457 + content: "\e624";
430 } 458 }
431 459
432 .icon-chongdian:before { 460 .icon-chongdian:before {
433 - content: "\e627"; 461 + content: "\e627";
434 } 462 }
435 463
436 .icon-5:before { 464 .icon-5:before {
437 - content: "\e628"; 465 + content: "\e628";
438 } 466 }
439 467
440 .icon-tomcat:before { 468 .icon-tomcat:before {
441 - content: "\e629"; 469 + content: "\e629";
442 } 470 }
443 471
444 .icon-ids:before { 472 .icon-ids:before {
445 - content: "\e6db"; 473 + content: "\e6db";
446 } 474 }
447 475
448 .icon-fuzaijunheng:before { 476 .icon-fuzaijunheng:before {
449 - content: "\e62b"; 477 + content: "\e62b";
450 } 478 }
451 479
452 .icon-xuniips:before { 480 .icon-xuniips:before {
453 - content: "\ea5d"; 481 + content: "\ea5d";
454 } 482 }
455 483
456 .icon-xuniips1:before { 484 .icon-xuniips1:before {
457 - content: "\ea67"; 485 + content: "\ea67";
458 } 486 }
459 487
460 .icon-fanghuoqiang37:before { 488 .icon-fanghuoqiang37:before {
461 - content: "\e728"; 489 + content: "\e728";
462 } 490 }
463 491
464 .icon-vlb:before { 492 .icon-vlb:before {
465 - content: "\e729"; 493 + content: "\e729";
466 } 494 }
467 495
468 .icon-shouye:before { 496 .icon-shouye:before {
469 - content: "\e636"; 497 + content: "\e636";
470 } 498 }
471 499
472 .icon-shuizisunshixian:before { 500 .icon-shuizisunshixian:before {
473 - content: "\e6d6"; 501 + content: "\e6d6";
474 } 502 }
475 503
476 .icon-ruqinjiance:before { 504 .icon-ruqinjiance:before {
477 - content: "\e65c"; 505 + content: "\e65c";
478 } 506 }
479 507
480 .icon-jiaohuanji:before { 508 .icon-jiaohuanji:before {
481 - content: "\e836"; 509 + content: "\e836";
482 } 510 }
483 511
484 .icon-jingwuicon_svg-:before { 512 .icon-jingwuicon_svg-:before {
485 - content: "\e65b"; 513 + content: "\e65b";
486 } 514 }
487 515
488 .icon-tomcat1:before { 516 .icon-tomcat1:before {
489 - content: "\e62c"; 517 + content: "\e62c";
490 } 518 }
491 519
492 .icon-jiaohuanji1:before { 520 .icon-jiaohuanji1:before {
493 - content: "\e62f"; 521 + content: "\e62f";
494 } 522 }
495 523
496 .icon-oracleshujuku:before { 524 .icon-oracleshujuku:before {
497 - content: "\e630"; 525 + content: "\e630";
498 } 526 }
499 527
500 .icon-fanghuoqiang:before { 528 .icon-fanghuoqiang:before {
501 - content: "\e648"; 529 + content: "\e648";
502 } 530 }
503 531
504 .icon-fuwuqi:before { 532 .icon-fuwuqi:before {
505 - content: "\e631"; 533 + content: "\e631";
506 } 534 }
507 535
508 .icon-fuwuqi1:before { 536 .icon-fuwuqi1:before {
509 - content: "\e632"; 537 + content: "\e632";
510 } 538 }
511 539
512 .icon-kongtiao:before { 540 .icon-kongtiao:before {
513 - content: "\e67d"; 541 + content: "\e67d";
514 } 542 }
515 543
516 .icon-yunshujuku:before { 544 .icon-yunshujuku:before {
517 - content: "\e744"; 545 + content: "\e744";
518 } 546 }
519 547
520 .icon-dianchi1:before { 548 .icon-dianchi1:before {
521 - content: "\e633"; 549 + content: "\e633";
522 } 550 }
523 551
524 .icon-Redis:before { 552 .icon-Redis:before {
525 - content: "\e6a2"; 553 + content: "\e6a2";
526 } 554 }
527 555
528 .icon-icon-current:before { 556 .icon-icon-current:before {
529 - content: "\e634"; 557 + content: "\e634";
530 } 558 }
531 559
532 .icon-oracleshujuku1:before { 560 .icon-oracleshujuku1:before {
533 - content: "\e635"; 561 + content: "\e635";
534 } 562 }
535 563
536 .icon-DNS-xiugai:before { 564 .icon-DNS-xiugai:before {
537 - content: "\e637"; 565 + content: "\e637";
538 } 566 }
539 567
540 .icon-wulifuwuqi:before { 568 .icon-wulifuwuqi:before {
541 - content: "\e6a8"; 569 + content: "\e6a8";
542 } 570 }
543 571
544 .icon-dianchi2:before { 572 .icon-dianchi2:before {
545 - content: "\e638"; 573 + content: "\e638";
546 } 574 }
547 575
548 .icon-daochu:before { 576 .icon-daochu:before {
549 - content: "\eabf"; 577 + content: "\eabf";
550 } 578 }
551 579
552 .icon-daochu1:before { 580 .icon-daochu1:before {
553 - content: "\e623"; 581 + content: "\e623";
554 } 582 }
555 583
556 .icon-database:before { 584 .icon-database:before {
557 - content: "\e940"; 585 + content: "\e940";
558 } 586 }
559 587
560 .icon-OPCtiaobanjiquanxianshenqing:before { 588 .icon-OPCtiaobanjiquanxianshenqing:before {
561 - content: "\e620"; 589 + content: "\e620";
562 } 590 }
563 591
564 .icon-assets:before { 592 .icon-assets:before {
565 - content: "\e615"; 593 + content: "\e615";
566 } 594 }
567 595
568 .icon-shoucang:before { 596 .icon-shoucang:before {
569 - content: "\e61f"; 597 + content: "\e61f";
570 } 598 }
571 599
572 .icon-wangluotuopu:before { 600 .icon-wangluotuopu:before {
573 - content: "\e835"; 601 + content: "\e835";
574 } 602 }
575 603
576 .icon-shoucang1:before { 604 .icon-shoucang1:before {
577 - content: "\e622"; 605 + content: "\e622";
578 } 606 }
579 607
580 .icon-xunizhuomian:before { 608 .icon-xunizhuomian:before {
581 - content: "\e613"; 609 + content: "\e613";
582 } 610 }
583 611
584 .icon-baoleiji:before { 612 .icon-baoleiji:before {
585 - content: "\e63c"; 613 + content: "\e63c";
586 } 614 }
587 615
588 .icon-baoleijisas:before { 616 .icon-baoleijisas:before {
589 - content: "\e61a"; 617 + content: "\e61a";
590 } 618 }
591 619
592 .icon-baoleijishouquanshenqingliucheng:before { 620 .icon-baoleijishouquanshenqingliucheng:before {
593 - content: "\e657"; 621 + content: "\e657";
594 } 622 }
595 623
596 .icon-xunizhuomian1:before { 624 .icon-xunizhuomian1:before {
597 - content: "\e63d"; 625 + content: "\e63d";
598 } 626 }
599 627
600 .icon-shuiba2:before { 628 .icon-shuiba2:before {
601 - content: "\e905"; 629 + content: "\e905";
602 } 630 }
603 631
604 .icon-xunizhuomian2:before { 632 .icon-xunizhuomian2:before {
605 - content: "\e675"; 633 + content: "\e675";
606 } 634 }
607 635
608 .icon-gunshuiba:before { 636 .icon-gunshuiba:before {
609 - content: "\e614"; 637 + content: "\e614";
610 } 638 }
611 639
612 .icon-line1:before { 640 .icon-line1:before {
613 - content: "\ebde"; 641 + content: "\ebde";
614 } 642 }
615 643
616 .icon-line:before { 644 .icon-line:before {
617 - content: "\e7fd"; 645 + content: "\e7fd";
618 } 646 }
619 647
620 .icon-luyouqi:before { 648 .icon-luyouqi:before {
621 - content: "\ec62"; 649 + content: "\ec62";
622 } 650 }
623 651
624 .icon-sousuo:before { 652 .icon-sousuo:before {
625 - content: "\e752"; 653 + content: "\e752";
626 } 654 }
627 655
628 .icon-icon--mubiaoku:before { 656 .icon-icon--mubiaoku:before {
629 - content: "\e610"; 657 + content: "\e610";
630 } 658 }
631 659
632 .icon-icon--download:before { 660 .icon-icon--download:before {
633 - content: "\e612"; 661 + content: "\e612";
634 } 662 }
635 663
636 .icon-icon--shangchuan:before { 664 .icon-icon--shangchuan:before {
637 - content: "\e616"; 665 + content: "\e616";
638 } 666 }
639 667
640 .icon-icon--tongji:before { 668 .icon-icon--tongji:before {
641 - content: "\e61b"; 669 + content: "\e61b";
642 } 670 }
643 671
644 .icon-icon--quanxian:before { 672 .icon-icon--quanxian:before {
645 - content: "\e61c"; 673 + content: "\e61c";
646 } 674 }
647 675
648 .icon-icon--yingbing:before { 676 .icon-icon--yingbing:before {
649 - content: "\e61d"; 677 + content: "\e61d";
650 } 678 }
651 679
652 .icon-icon--yes:before { 680 .icon-icon--yes:before {
653 - content: "\e61e"; 681 + content: "\e61e";
654 } 682 }
655 683
656 .icon-icon--shanchu:before { 684 .icon-icon--shanchu:before {
657 - content: "\e621"; 685 + content: "\e621";
658 } 686 }
659 687
660 .icon-icon-rizhi:before { 688 .icon-icon-rizhi:before {
661 - content: "\e625"; 689 + content: "\e625";
662 } 690 }
663 691
664 .icon-icon-gaojing:before { 692 .icon-icon-gaojing:before {
665 - content: "\e626"; 693 + content: "\e626";
666 } 694 }
667 695
668 .icon-icon-liucheng:before { 696 .icon-icon-liucheng:before {
669 - content: "\e62e"; 697 + content: "\e62e";
670 } 698 }
671 699
672 .icon-yuangongchelianglika:before { 700 .icon-yuangongchelianglika:before {
673 - content: "\e65d"; 701 + content: "\e65d";
674 } 702 }
675 703
676 .icon-yuangongcheliangjinr:before { 704 .icon-yuangongcheliangjinr:before {
677 - content: "\e65e"; 705 + content: "\e65e";
678 } 706 }
679 707
680 .icon-lunxun:before { 708 .icon-lunxun:before {
681 - content: "\e660"; 709 + content: "\e660";
682 } 710 }
683 711
684 .icon-haoyou:before { 712 .icon-haoyou:before {
685 - content: "\e60f"; 713 + content: "\e60f";
686 } 714 }
687 715
688 .icon-yonghu:before { 716 .icon-yonghu:before {
689 - content: "\e8c8"; 717 + content: "\e8c8";
690 } 718 }
691 719
692 .icon-jiaoseguanli:before { 720 .icon-jiaoseguanli:before {
693 - content: "\ea62"; 721 + content: "\ea62";
694 } 722 }
695 723
696 .icon-liebiaomoshi:before { 724 .icon-liebiaomoshi:before {
697 - content: "\e60d"; 725 + content: "\e60d";
698 } 726 }
699 727
700 .icon-liebiao:before { 728 .icon-liebiao:before {
701 - content: "\e62d"; 729 + content: "\e62d";
702 } 730 }
703 731
704 .icon-bt_duigou_B:before { 732 .icon-bt_duigou_B:before {
705 - content: "\e60c"; 733 + content: "\e60c";
706 } 734 }
707 735
708 .icon-duigouxuanzhong:before { 736 .icon-duigouxuanzhong:before {
709 - content: "\e617"; 737 + content: "\e617";
710 } 738 }
711 739
712 .icon-confirm-line:before { 740 .icon-confirm-line:before {
713 - content: "\e62a"; 741 + content: "\e62a";
714 } 742 }
715 743
716 .icon-duigou_kuai:before { 744 .icon-duigou_kuai:before {
717 - content: "\e60e"; 745 + content: "\e60e";
718 } 746 }
719 747
720 .icon-duigou3:before { 748 .icon-duigou3:before {
721 - content: "\e640"; 749 + content: "\e640";
722 } 750 }
723 751
724 .icon-cha:before { 752 .icon-cha:before {
725 - content: "\e686"; 753 + content: "\e686";
726 } 754 }
727 755
728 .icon-duigou4:before { 756 .icon-duigou4:before {
729 - content: "\e6e7"; 757 + content: "\e6e7";
730 } 758 }
731 759
732 .icon-guifandaohanglancha:before { 760 .icon-guifandaohanglancha:before {
733 - content: "\e618"; 761 + content: "\e618";
734 } 762 }
735 763
736 .icon-ziyuan:before { 764 .icon-ziyuan:before {
737 - content: "\e654"; 765 + content: "\e654";
738 } 766 }
739 767
740 .icon-duigou:before { 768 .icon-duigou:before {
741 - content: "\e730"; 769 + content: "\e730";
742 } 770 }
743 771
744 .icon-duigou1:before { 772 .icon-duigou1:before {
745 - content: "\e733"; 773 + content: "\e733";
746 } 774 }
747 775
748 .icon-duigou2:before { 776 .icon-duigou2:before {
749 - content: "\e6b5"; 777 + content: "\e6b5";
750 } 778 }
751 779
752 .icon-bt_duigou_a:before { 780 .icon-bt_duigou_a:before {
753 - content: "\e60b"; 781 + content: "\e60b";
754 } 782 }
755 783
756 .icon-wenjian:before { 784 .icon-wenjian:before {
757 - content: "\e600"; 785 + content: "\e600";
758 } 786 }
759 787
760 .icon-bianjiwenjian:before { 788 .icon-bianjiwenjian:before {
761 - content: "\e601"; 789 + content: "\e601";
762 } 790 }
763 791
764 .icon-dengdaiwenjian:before { 792 .icon-dengdaiwenjian:before {
765 - content: "\e602"; 793 + content: "\e602";
766 } 794 }
767 795
768 .icon-shanchuwenjian:before { 796 .icon-shanchuwenjian:before {
769 - content: "\e603"; 797 + content: "\e603";
770 } 798 }
771 799
772 .icon-jianqiewenjian:before { 800 .icon-jianqiewenjian:before {
773 - content: "\e604"; 801 + content: "\e604";
774 } 802 }
775 803
776 .icon-wenjianjia:before { 804 .icon-wenjianjia:before {
777 - content: "\e605"; 805 + content: "\e605";
778 } 806 }
779 807
780 .icon-shanchuwenjianjia:before { 808 .icon-shanchuwenjianjia:before {
781 - content: "\e606"; 809 + content: "\e606";
782 } 810 }
783 811
784 .icon-weidaqiadewenjianjia:before { 812 .icon-weidaqiadewenjianjia:before {
785 - content: "\e607"; 813 + content: "\e607";
786 } 814 }
787 815
788 .icon-ziliaoku:before { 816 .icon-ziliaoku:before {
789 - content: "\e608"; 817 + content: "\e608";
790 } 818 }
791 819
792 .icon-wenben:before { 820 .icon-wenben:before {
793 - content: "\e609"; 821 + content: "\e609";
794 } 822 }
795 823
796 .icon-daimawenjian:before { 824 .icon-daimawenjian:before {
797 - content: "\e60a"; 825 + content: "\e60a";
798 } 826 }
799 827
800 .icon-excel:before { 828 .icon-excel:before {
801 - content: "\e611"; 829 + content: "\e611";
802 } 830 }
803 831
804 .icon-24gf-fileEmpty:before { 832 .icon-24gf-fileEmpty:before {
805 - content: "\eac3"; 833 + content: "\eac3";
806 } 834 }
807 835
808 .icon-24gf-fileText:before { 836 .icon-24gf-fileText:before {
809 - content: "\eac4"; 837 + content: "\eac4";
810 } 838 }
811 839
812 .icon-24gf-folderHeart:before { 840 .icon-24gf-folderHeart:before {
813 - content: "\eac5"; 841 + content: "\eac5";
814 } 842 }
815 843
816 .icon-24gf-folderStar:before { 844 .icon-24gf-folderStar:before {
817 - content: "\eac6"; 845 + content: "\eac6";
818 } 846 }
819 847
820 .icon-24gf-folderOpen:before { 848 .icon-24gf-folderOpen:before {
821 - content: "\eac7"; 849 + content: "\eac7";
822 } 850 }
823 851
824 .icon-wenjian1:before { 852 .icon-wenjian1:before {
825 - content: "\e619"; 853 + content: "\e619";
826 } 854 }
827 855
828 .icon-image:before { 856 .icon-image:before {
829 - content: "\ea40"; 857 + content: "\ea40";
830 } 858 }
831 859
832 .icon-image-full:before { 860 .icon-image-full:before {
833 - content: "\ea41"; 861 + content: "\ea41";
834 } 862 }
835 863
836 .icon-json-full:before { 864 .icon-json-full:before {
837 - content: "\ea42"; 865 + content: "\ea42";
838 } 866 }
839 867
840 .icon-json:before { 868 .icon-json:before {
841 - content: "\ea43"; 869 + content: "\ea43";
842 } 870 }
843 871
844 .icon-pdf:before { 872 .icon-pdf:before {
845 - content: "\ea44"; 873 + content: "\ea44";
846 } 874 }
847 875
848 .icon-pdf-full:before { 876 .icon-pdf-full:before {
849 - content: "\ea45"; 877 + content: "\ea45";
850 } 878 }
851 879
852 .icon-txt-full:before { 880 .icon-txt-full:before {
853 - content: "\ea46"; 881 + content: "\ea46";
854 } 882 }
855 883
856 .icon-txt:before { 884 .icon-txt:before {
857 - content: "\ea47"; 885 + content: "\ea47";
858 } 886 }
859 887
860 .icon-excel1:before { 888 .icon-excel1:before {
861 - content: "\ea48"; 889 + content: "\ea48";
862 } 890 }
863 891
864 .icon-excel-full:before { 892 .icon-excel-full:before {
865 - content: "\ea49"; 893 + content: "\ea49";
866 } 894 }
867 895
868 .icon-ppt:before { 896 .icon-ppt:before {
869 - content: "\ea4a"; 897 + content: "\ea4a";
870 } 898 }
871 899
872 .icon-ppt-full:before { 900 .icon-ppt-full:before {
873 - content: "\ea4b"; 901 + content: "\ea4b";
874 } 902 }
875 903
876 .icon-word-full:before { 904 .icon-word-full:before {
877 - content: "\ea4c"; 905 + content: "\ea4c";
878 } 906 }
879 907
880 .icon-word:before { 908 .icon-word:before {
881 - content: "\ea4d"; 909 + content: "\ea4d";
882 } 910 }
883 911
884 .icon-audio-full:before { 912 .icon-audio-full:before {
885 - content: "\ea4e"; 913 + content: "\ea4e";
886 } 914 }
887 915
888 .icon-audio:before { 916 .icon-audio:before {
889 - content: "\ea4f"; 917 + content: "\ea4f";
890 } 918 }
891 919
892 .icon-avi-full:before { 920 .icon-avi-full:before {
893 - content: "\ea50"; 921 + content: "\ea50";
894 } 922 }
895 923
896 .icon-avi:before { 924 .icon-avi:before {
897 - content: "\ea51"; 925 + content: "\ea51";
898 } 926 }
899 927
900 .icon-zip-full:before { 928 .icon-zip-full:before {
901 - content: "\ea52"; 929 + content: "\ea52";
902 } 930 }
903 931
904 .icon-zip:before { 932 .icon-zip:before {
905 - content: "\ea53"; 933 + content: "\ea53";
906 } 934 }
907 935
@@ -6,6 +6,55 @@ @@ -6,6 +6,55 @@
6 "description": "", 6 "description": "",
7 "glyphs": [ 7 "glyphs": [
8 { 8 {
  9 + "icon_id": "577891",
  10 + "name": "提示",
  11 + "font_class": "tishi",
  12 + "unicode": "e67c",
  13 + "unicode_decimal": 59004
  14 + },
  15 + {
  16 + "icon_id": "4933869",
  17 + "name": "点",
  18 + "font_class": "dian",
  19 + "unicode": "ec1e",
  20 + "unicode_decimal": 60446
  21 + },
  22 + {
  23 + "icon_id": "1727447",
  24 + "name": "216更多-竖向",
  25 + "font_class": "gengduo-shuxiang",
  26 + "unicode": "e8c4",
  27 + "unicode_decimal": 59588
  28 + },
  29 + {
  30 + "icon_id": "1206404",
  31 + "name": "微信",
  32 + "font_class": "weixin",
  33 + "unicode": "e67b",
  34 + "unicode_decimal": 59003
  35 + },
  36 + {
  37 + "icon_id": "4552970",
  38 + "name": "邮箱",
  39 + "font_class": "youxiang",
  40 + "unicode": "e908",
  41 + "unicode_decimal": 59656
  42 + },
  43 + {
  44 + "icon_id": "5387727",
  45 + "name": "短信群发",
  46 + "font_class": "duanxinqunfa",
  47 + "unicode": "eb42",
  48 + "unicode_decimal": 60226
  49 + },
  50 + {
  51 + "icon_id": "742139",
  52 + "name": "业务资源拓扑",
  53 + "font_class": "yewuziyuantuopu",
  54 + "unicode": "ea6f",
  55 + "unicode_decimal": 60015
  56 + },
  57 + {
9 "icon_id": "3868284", 58 "icon_id": "3868284",
10 "name": "仪表盘", 59 "name": "仪表盘",
11 "font_class": "yibiaopan", 60 "font_class": "yibiaopan",
1 -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.dayjs=e()}(this,function(){"use strict";const t=60,e=60*t,s=24*e,r=7*s,n=(t,e,s)=>!t||t.length>=e?t:`${Array(e+1-t.length).join(s)}${t}`;class i{constructor(t){this.utc=!1;const e=this.parseConfig(t);this.date=new Date(e),this.timeZone=this.date.getTimezoneOffset()/60,this.timeZoneString=n(String(-1*this.timeZone).replace(/^(.)?(\d)/,"$10$200"),5,"+"),this.mYear=this.date.getFullYear(),this.mMonth=this.date.getMonth(),this.mDay=this.date.getDate(),this.mWeek=this.date.getDay(),this.mHour=this.date.getHours(),this.mMinute=this.date.getMinutes(),this.mSecond=this.date.getSeconds()}parseConfig(t){if(!t)return new Date;if(t instanceof Date)return t;if(/^(\d){8}$/.test(t)){return this.utc=!0,`${t.substr(0,4)}-${t.substr(4,2)}-${t.substr(6,2)}`}return t}year(){return this.mYear}month(){return this.mMonth}unix(){const t=this.utc?60*this.timeZone*60*1e3:0;return Math.floor((this.date.getTime()+t)/1e3)}toString(){return this.date.toUTCString()}startOf(t){switch(t){case"year":return new i(new Date(this.year(),0,1));case"month":return new i(new Date(this.year(),this.month(),1));default:return this}}add(n,a){let h;switch(a){case"m":case"minutes":h=t;break;case"h":case"hours":h=e;break;case"d":case"days":h=s;break;case"w":case"weeks":h=r;break;default:h=1}const u=this.unix()+n*h;return new i(1e3*u)}subtract(t,e){return this.add(-1*t,e)}format(t="YYYY-MM-DDTHH:mm:ssZ"){const e=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];return t.replace(/Y{2,4}|M{1,2}|D{1,2}|d{1,4}|H{1,2}|m{1,2}|s{1,2}|Z{1,2}/g,t=>{switch(t){case"YY":return String(this.mYear).slice(-2);case"YYYY":return String(this.mYear);case"M":return String(this.mMonth+1);case"MM":return n(String(this.mMonth+1),2,"0");case"D":return String(this.mDay);case"DD":return n(String(this.mDay),2,"0");case"d":return String(this.mWeek);case"dddd":return e[this.mWeek];case"H":return String(this.mHour);case"HH":return n(String(this.mHour),2,"0");case"m":return String(this.mMinute);case"mm":return n(String(this.mMinute),2,"0");case"s":return String(this.mSecond);case"ss":return n(String(this.mSecond),2,"0");case"Z":return`${this.timeZoneString.slice(0,-2)}:00`;case"ZZ":return this.timeZoneString;default:return t}})}}return t=>new i(t)}); 1 +!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):t.dayjs=n()}(this,function(){"use strict";var t="millisecond",n="second",e="minute",r="hour",i="day",s="week",u="month",o="quarter",a="year",h=/^(\d{4})-?(\d{1,2})-?(\d{0,2})[^0-9]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?.?(\d{1,3})?$/,f=/\[([^\]]+)]|Y{2,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,c=function(t,n,e){var r=String(t);return!r||r.length>=n?t:""+Array(n+1-r.length).join(e)+t},d={s:c,z:function(t){var n=-t.utcOffset(),e=Math.abs(n),r=Math.floor(e/60),i=e%60;return(n<=0?"+":"-")+c(r,2,"0")+":"+c(i,2,"0")},m:function(t,n){var e=12*(n.year()-t.year())+(n.month()-t.month()),r=t.clone().add(e,u),i=n-r<0,s=t.clone().add(e+(i?-1:1),u);return Number(-(e+(n-r)/(i?r-s:s-r))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(h){return{M:u,y:a,w:s,d:i,D:"date",h:r,m:e,s:n,ms:t,Q:o}[h]||String(h||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},$={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_")},l="en",m={};m[l]=$;var y=function(t){return t instanceof v},M=function(t,n,e){var r;if(!t)return l;if("string"==typeof t)m[t]&&(r=t),n&&(m[t]=n,r=t);else{var i=t.name;m[i]=t,r=i}return e||(l=r),r},g=function(t,n,e){if(y(t))return t.clone();var r=n?"string"==typeof n?{format:n,pl:e}:n:{};return r.date=t,new v(r)},D=d;D.l=M,D.i=y,D.w=function(t,n){return g(t,{locale:n.$L,utc:n.$u,$offset:n.$offset})};var v=function(){function c(t){this.$L=this.$L||M(t.locale,null,!0),this.parse(t)}var d=c.prototype;return d.parse=function(t){this.$d=function(t){var n=t.date,e=t.utc;if(null===n)return new Date(NaN);if(D.u(n))return new Date;if(n instanceof Date)return new Date(n);if("string"==typeof n&&!/Z$/i.test(n)){var r=n.match(h);if(r)return e?new Date(Date.UTC(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)):new Date(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)}return new Date(n)}(t),this.init()},d.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},d.$utils=function(){return D},d.isValid=function(){return!("Invalid Date"===this.$d.toString())},d.isSame=function(t,n){var e=g(t);return this.startOf(n)<=e&&e<=this.endOf(n)},d.isAfter=function(t,n){return g(t)<this.startOf(n)},d.isBefore=function(t,n){return this.endOf(n)<g(t)},d.$g=function(t,n,e){return D.u(t)?this[n]:this.set(e,t)},d.year=function(t){return this.$g(t,"$y",a)},d.month=function(t){return this.$g(t,"$M",u)},d.day=function(t){return this.$g(t,"$W",i)},d.date=function(t){return this.$g(t,"$D","date")},d.hour=function(t){return this.$g(t,"$H",r)},d.minute=function(t){return this.$g(t,"$m",e)},d.second=function(t){return this.$g(t,"$s",n)},d.millisecond=function(n){return this.$g(n,"$ms",t)},d.unix=function(){return Math.floor(this.valueOf()/1e3)},d.valueOf=function(){return this.$d.getTime()},d.startOf=function(t,o){var h=this,f=!!D.u(o)||o,c=D.p(t),d=function(t,n){var e=D.w(h.$u?Date.UTC(h.$y,n,t):new Date(h.$y,n,t),h);return f?e:e.endOf(i)},$=function(t,n){return D.w(h.toDate()[t].apply(h.toDate(),(f?[0,0,0,0]:[23,59,59,999]).slice(n)),h)},l=this.$W,m=this.$M,y=this.$D,M="set"+(this.$u?"UTC":"");switch(c){case a:return f?d(1,0):d(31,11);case u:return f?d(1,m):d(0,m+1);case s:var g=this.$locale().weekStart||0,v=(l<g?l+7:l)-g;return d(f?y-v:y+(6-v),m);case i:case"date":return $(M+"Hours",0);case r:return $(M+"Minutes",1);case e:return $(M+"Seconds",2);case n:return $(M+"Milliseconds",3);default:return this.clone()}},d.endOf=function(t){return this.startOf(t,!1)},d.$set=function(s,o){var h,f=D.p(s),c="set"+(this.$u?"UTC":""),d=(h={},h[i]=c+"Date",h.date=c+"Date",h[u]=c+"Month",h[a]=c+"FullYear",h[r]=c+"Hours",h[e]=c+"Minutes",h[n]=c+"Seconds",h[t]=c+"Milliseconds",h)[f],$=f===i?this.$D+(o-this.$W):o;if(f===u||f===a){var l=this.clone().set("date",1);l.$d[d]($),l.init(),this.$d=l.set("date",Math.min(this.$D,l.daysInMonth())).toDate()}else d&&this.$d[d]($);return this.init(),this},d.set=function(t,n){return this.clone().$set(t,n)},d.get=function(t){return this[D.p(t)]()},d.add=function(t,o){var h,f=this;t=Number(t);var c=D.p(o),d=function(n){var e=g(f);return D.w(e.date(e.date()+Math.round(n*t)),f)};if(c===u)return this.set(u,this.$M+t);if(c===a)return this.set(a,this.$y+t);if(c===i)return d(1);if(c===s)return d(7);var $=(h={},h[e]=6e4,h[r]=36e5,h[n]=1e3,h)[c]||1,l=this.$d.getTime()+t*$;return D.w(l,this)},d.subtract=function(t,n){return this.add(-1*t,n)},d.format=function(t){var n=this;if(!this.isValid())return"Invalid Date";var e=t||"YYYY-MM-DDTHH:mm:ssZ",r=D.z(this),i=this.$locale(),s=this.$H,u=this.$m,o=this.$M,a=i.weekdays,h=i.months,c=function(t,r,i,s){return t&&(t[r]||t(n,e))||i[r].substr(0,s)},d=function(t){return D.s(s%12||12,t,"0")},$=i.meridiem||function(t,n,e){var r=t<12?"AM":"PM";return e?r.toLowerCase():r},l={YY:String(this.$y).slice(-2),YYYY:this.$y,M:o+1,MM:D.s(o+1,2,"0"),MMM:c(i.monthsShort,o,h,3),MMMM:h[o]||h(this,e),D:this.$D,DD:D.s(this.$D,2,"0"),d:String(this.$W),dd:c(i.weekdaysMin,this.$W,a,2),ddd:c(i.weekdaysShort,this.$W,a,3),dddd:a[this.$W],H:String(s),HH:D.s(s,2,"0"),h:d(1),hh:d(2),a:$(s,u,!0),A:$(s,u,!1),m:String(u),mm:D.s(u,2,"0"),s:String(this.$s),ss:D.s(this.$s,2,"0"),SSS:D.s(this.$ms,3,"0"),Z:r};return e.replace(f,function(t,n){return n||l[t]||r.replace(":","")})},d.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},d.diff=function(t,h,f){var c,d=D.p(h),$=g(t),l=6e4*($.utcOffset()-this.utcOffset()),m=this-$,y=D.m(this,$);return y=(c={},c[a]=y/12,c[u]=y,c[o]=y/3,c[s]=(m-l)/6048e5,c[i]=(m-l)/864e5,c[r]=m/36e5,c[e]=m/6e4,c[n]=m/1e3,c)[d]||m,f?y:D.a(y)},d.daysInMonth=function(){return this.endOf(u).$D},d.$locale=function(){return m[this.$L]},d.locale=function(t,n){if(!t)return this.$L;var e=this.clone(),r=M(t,n,!0);return r&&(e.$L=r),e},d.clone=function(){return D.w(this.$d,this)},d.toDate=function(){return new Date(this.valueOf())},d.toJSON=function(){return this.isValid()?this.toISOString():null},d.toISOString=function(){return this.$d.toISOString()},d.toString=function(){return this.$d.toUTCString()},c}();return g.prototype=v.prototype,g.extend=function(t,n){return t(n,v,g),g},g.locale=M,g.isDayjs=y,g.unix=function(t){return g(1e3*t)},g.en=m[l],g.Ls=m,g});
  1 +/* Disable minification (remove `.min` from URL path) for more info */
  2 +
  3 +(function(undefined) {var _mutation=function(){function e(e){return"function"==typeof Node?e instanceof Node:e&&"object"==typeof e&&e.nodeName&&e.nodeType>=1&&e.nodeType<=12}return function(n){if(1===n.length)return e(n[0])?n[0]:document.createTextNode(n[0]+"");for(var t=document.createDocumentFragment(),o=0;o<n.length;o++)t.appendChild(e(n[o])?n[o]:document.createTextNode(n[o]+""));return t}}();DocumentFragment.prototype.append=function(){this.appendChild(_mutation(arguments))};DocumentFragment.prototype.prepend=function(){this.insertBefore(_mutation(arguments),this.firstChild)};Document.prototype.after=Element.prototype.after=function(){if(this.parentNode){for(var t=Array.prototype.slice.call(arguments),e=this.nextSibling,o=e?t.indexOf(e):-1;-1!==o&&(e=e.nextSibling);)o=t.indexOf(e);this.parentNode.insertBefore(_mutation(arguments),e)}},"Text"in this&&(Text.prototype.after=Element.prototype.after);Document.prototype.append=Element.prototype.append=function(){this.appendChild(_mutation(arguments))};Document.prototype.before=Element.prototype.before=function(){if(this.parentNode){for(var e=Array.prototype.slice.call(arguments),t=this.previousSibling,o=t?e.indexOf(t):-1;-1!==o&&(t=t.previousSibling);)o=e.indexOf(t);this.parentNode.insertBefore(_mutation(arguments),t?t.nextSibling:this.parentNode.firstChild)}},"Text"in this&&(Text.prototype.before=Element.prototype.before);Element.prototype.matches=Element.prototype.webkitMatchesSelector||Element.prototype.oMatchesSelector||Element.prototype.msMatchesSelector||Element.prototype.mozMatchesSelector||function(e){for(var t=this,o=(t.document||t.ownerDocument).querySelectorAll(e),r=0;o[r]&&o[r]!==t;)++r;return!!o[r]};Element.prototype.closest=function(e){for(var n=this;n;){if(n.matches(e))return n;n="SVGElement"in window&&n instanceof SVGElement?n.parentNode:n.parentElement}return null};Document.prototype.prepend=Element.prototype.prepend=function(){this.insertBefore(_mutation(arguments),this.firstChild)};Document.prototype.replaceWith=Element.prototype.replaceWith=function(){this.parentNode&&this.parentNode.replaceChild(_mutation(arguments),this)},"Text"in this&&(Text.prototype.replaceWith=Element.prototype.replaceWith);!function(e){"use strict";function t(t){return!!t&&("Symbol"in e&&"iterator"in e.Symbol&&"function"==typeof t[Symbol.iterator]||!!Array.isArray(t))}function n(e){return"from"in Array?Array.from(e):Array.prototype.slice.call(e)}!function(){function r(e){var t="",n=!0;return e.forEach(function(e){var r=encodeURIComponent(e.name),a=encodeURIComponent(e.value);n||(t+="&"),t+=r+"="+a,n=!1}),t.replace(/%20/g,"+")}function a(e,t){var n=e.split("&");t&&-1===n[0].indexOf("=")&&(n[0]="="+n[0]);var r=[];n.forEach(function(e){if(0!==e.length){var t=e.indexOf("=");if(-1!==t)var n=e.substring(0,t),a=e.substring(t+1);else n=e,a="";n=n.replace(/\+/g," "),a=a.replace(/\+/g," "),r.push({name:n,value:a})}});var a=[];return r.forEach(function(e){a.push({name:decodeURIComponent(e.name),value:decodeURIComponent(e.value)})}),a}function i(e){if(c)return new s(e);var t=document.createElement("a");return t.href=e,t}function o(e){var i=this;this._list=[],e===undefined||null===e||(e instanceof o?this._list=a(String(e)):"object"==typeof e&&t(e)?n(e).forEach(function(e){if(!t(e))throw TypeError();var r=n(e);if(2!==r.length)throw TypeError();i._list.push({name:String(r[0]),value:String(r[1])})}):"object"==typeof e&&e?Object.keys(e).forEach(function(t){i._list.push({name:String(t),value:String(e[t])})}):(e=String(e),"?"===e.substring(0,1)&&(e=e.substring(1)),this._list=a(e))),this._url_object=null,this._setList=function(e){u||(i._list=e)};var u=!1;this._update_steps=function(){u||(u=!0,i._url_object&&("about:"===i._url_object.protocol&&-1!==i._url_object.pathname.indexOf("?")&&(i._url_object.pathname=i._url_object.pathname.split("?")[0]),i._url_object.search=r(i._list),u=!1))}}function u(e,t){var n=0;this.next=function(){if(n>=e.length)return{done:!0,value:undefined};var r=e[n++];return{done:!1,value:"key"===t?r.name:"value"===t?r.value:[r.name,r.value]}}}function l(t,n){function r(){var e=l.href.replace(/#$|\?$|\?(?=#)/g,"");l.href!==e&&(l.href=e)}function u(){m._setList(l.search?a(l.search.substring(1)):[]),m._update_steps()}if(!(this instanceof e.URL))throw new TypeError("Failed to construct 'URL': Please use the 'new' operator.");n&&(t=function(){if(c)return new s(t,n).href;var e;try{var r;if("[object OperaMini]"===Object.prototype.toString.call(window.operamini)?(e=document.createElement("iframe"),e.style.display="none",document.documentElement.appendChild(e),r=e.contentWindow.document):document.implementation&&document.implementation.createHTMLDocument?r=document.implementation.createHTMLDocument(""):document.implementation&&document.implementation.createDocument?(r=document.implementation.createDocument("http://www.w3.org/1999/xhtml","html",null),r.documentElement.appendChild(r.createElement("head")),r.documentElement.appendChild(r.createElement("body"))):window.ActiveXObject&&(r=new window.ActiveXObject("htmlfile"),r.write("<head></head><body></body>"),r.close()),!r)throw Error("base not supported");var a=r.createElement("base");a.href=n,r.getElementsByTagName("head")[0].appendChild(a);var i=r.createElement("a");return i.href=t,i.href}finally{e&&e.parentNode.removeChild(e)}}());var l=i(t||""),f=function(){if(!("defineProperties"in Object))return!1;try{var e={};return Object.defineProperties(e,{prop:{get:function(){return!0}}}),e.prop}catch(t){return!1}}(),h=f?this:document.createElement("a"),m=new o(l.search?l.search.substring(1):null);return m._url_object=h,Object.defineProperties(h,{href:{get:function(){return l.href},set:function(e){l.href=e,r(),u()},enumerable:!0,configurable:!0},origin:{get:function(){return"origin"in l?l.origin:this.protocol+"//"+this.host},enumerable:!0,configurable:!0},protocol:{get:function(){return l.protocol},set:function(e){l.protocol=e},enumerable:!0,configurable:!0},username:{get:function(){return l.username},set:function(e){l.username=e},enumerable:!0,configurable:!0},password:{get:function(){return l.password},set:function(e){l.password=e},enumerable:!0,configurable:!0},host:{get:function(){var e={"http:":/:80$/,"https:":/:443$/,"ftp:":/:21$/}[l.protocol];return e?l.host.replace(e,""):l.host},set:function(e){l.host=e},enumerable:!0,configurable:!0},hostname:{get:function(){return l.hostname},set:function(e){l.hostname=e},enumerable:!0,configurable:!0},port:{get:function(){return l.port},set:function(e){l.port=e},enumerable:!0,configurable:!0},pathname:{get:function(){return"/"!==l.pathname.charAt(0)?"/"+l.pathname:l.pathname},set:function(e){l.pathname=e},enumerable:!0,configurable:!0},search:{get:function(){return l.search},set:function(e){l.search!==e&&(l.search=e,r(),u())},enumerable:!0,configurable:!0},searchParams:{get:function(){return m},enumerable:!0,configurable:!0},hash:{get:function(){return l.hash},set:function(e){l.hash=e,r()},enumerable:!0,configurable:!0},toString:{value:function(){return l.toString()},enumerable:!1,configurable:!0},valueOf:{value:function(){return l.valueOf()},enumerable:!1,configurable:!0}}),h}var c,s=e.URL;try{if(s){if("searchParams"in(c=new e.URL("http://example.com")))return;"href"in c||(c=undefined)}}catch(h){}if(Object.defineProperties(o.prototype,{append:{value:function(e,t){this._list.push({name:e,value:t}),this._update_steps()},writable:!0,enumerable:!0,configurable:!0},"delete":{value:function(e){for(var t=0;t<this._list.length;)this._list[t].name===e?this._list.splice(t,1):++t;this._update_steps()},writable:!0,enumerable:!0,configurable:!0},get:{value:function(e){for(var t=0;t<this._list.length;++t)if(this._list[t].name===e)return this._list[t].value;return null},writable:!0,enumerable:!0,configurable:!0},getAll:{value:function(e){for(var t=[],n=0;n<this._list.length;++n)this._list[n].name===e&&t.push(this._list[n].value);return t},writable:!0,enumerable:!0,configurable:!0},has:{value:function(e){for(var t=0;t<this._list.length;++t)if(this._list[t].name===e)return!0;return!1},writable:!0,enumerable:!0,configurable:!0},set:{value:function(e,t){for(var n=!1,r=0;r<this._list.length;)this._list[r].name===e?n?this._list.splice(r,1):(this._list[r].value=t,n=!0,++r):++r;n||this._list.push({name:e,value:t}),this._update_steps()},writable:!0,enumerable:!0,configurable:!0},entries:{value:function(){return new u(this._list,"key+value")},writable:!0,enumerable:!0,configurable:!0},keys:{value:function(){return new u(this._list,"key")},writable:!0,enumerable:!0,configurable:!0},values:{value:function(){return new u(this._list,"value")},writable:!0,enumerable:!0,configurable:!0},forEach:{value:function(e){var t=arguments.length>1?arguments[1]:undefined;this._list.forEach(function(n,r){e.call(t,n.value,n.name)})},writable:!0,enumerable:!0,configurable:!0},toString:{value:function(){return r(this._list)},writable:!0,enumerable:!1,configurable:!0}}),"Symbol"in e&&"iterator"in e.Symbol&&(Object.defineProperty(o.prototype,e.Symbol.iterator,{value:o.prototype.entries,writable:!0,enumerable:!0,configurable:!0}),Object.defineProperty(u.prototype,e.Symbol.iterator,{value:function(){return this},writable:!0,enumerable:!0,configurable:!0})),s)for(var f in s)s.hasOwnProperty(f)&&"function"==typeof s[f]&&(l[f]=s[f]);e.URL=l,e.URLSearchParams=o}(),function(){if("1"!==new e.URLSearchParams([["a",1]]).get("a")||"1"!==new e.URLSearchParams({a:1}).get("a")){var r=e.URLSearchParams;e.URLSearchParams=function(e){if(e&&"object"==typeof e&&t(e)){var a=new r;return n(e).forEach(function(e){if(!t(e))throw TypeError();var r=n(e);if(2!==r.length)throw TypeError();a.append(r[0],r[1])}),a}return e&&"object"==typeof e?(a=new r,Object.keys(e).forEach(function(t){a.set(t,e[t])}),a):new r(e)}}}()}(self);}).call('object' === typeof window && window || 'object' === typeof self && self || 'object' === typeof global && global || {});
  1 +import http from "../script/http.js";
  2 +
  3 +/**
  4 + * 获取配置信息
  5 + * <p>
  6 + * 作者: Wang
  7 + * 时间:2022/7/26 11:18
  8 + */
  9 +const getOptions = (opt) => {
  10 + if (!opt) {
  11 + opt = {};
  12 + }
  13 + return Object.assign({
  14 + showLoadding: true,// 展示加载库,默认展示
  15 + needToken: true,// 是否需要token,默认true
  16 + asSync: true // 是否同步请求,
  17 + }, opt);
  18 +}
  19 +
  20 +
  21 +/**
  22 + * 发送get请求
  23 + * @param url 请求地址
  24 + * @param params 请求参数
  25 + * @param options 配置参数
  26 + * {
  27 + * showLoadding : true ,// 展示加载库,默认展示
  28 + * needToken:true,// 是否需要token,默认true
  29 + * asSync:true // 是否同步请求,
  30 + * }
  31 + * @returns {Promise<unknown>}
  32 + */
  33 +export const get = (url, params, options) => {
  34 + params = params || {};
  35 +
  36 + var option = getOptions(options);
  37 + return new Promise((resolve, reject) => {
  38 + // 发送请求
  39 + http.get(url, params,function (res){
  40 + resolve(res);
  41 + },function (res){
  42 + reject(res);
  43 + },option.showLoadding,option.needToken,option.asSync);
  44 +
  45 + })
  46 +}
  47 +
  48 +
  49 +/**
  50 + * 发送get请求
  51 + * @param url 请求地址
  52 + * @param params 请求参数
  53 + * @param options 配置参数
  54 + * {
  55 + * showLoadding : true ,// 展示加载库,默认展示
  56 + * needToken:true,// 是否需要token,默认true
  57 + * asSync:true // 是否同步请求,
  58 + * }
  59 + * @returns {Promise<unknown>}
  60 + */
  61 +export const post = (url, params, options) => {
  62 + params = params || {};
  63 +
  64 + var option = getOptions(options);
  65 + return new Promise((resolve, reject) => {
  66 + // 发送请求
  67 + http.post(url, params,function (res){
  68 + resolve(res);
  69 + },function (res){
  70 + reject(res);
  71 + },option.showLoadding,option.needToken,option.asSync);
  72 + })
  73 +}
  74 +
  75 +
  1 +import {get, post} from './BaseApi.js'
  2 +
  3 +/**
  4 + * 获取巡检组以及组下的用户
  5 + * @returns {Promise<*>}
  6 + */
  7 +const getGroupAndGroupUser = () => {
  8 + return get('/api-log/log/groupUser', {});
  9 +}
  10 +
  11 +/**
  12 + * 组统计
  13 + * @param params /api-log/user/log?userName=&id=&startTime=&endTime=&timeType=
  14 + * @returns {Promise<*>}
  15 + */
  16 +const stackedGraphGroup = (params) => {
  17 + return get('/api-log/log/group', params);
  18 +}
  19 +
  20 +
  21 +/**
  22 + * 用户统计
  23 + * @param params /api-log/log/user?userName=&id=1&startTime=&endTime=&timeType=
  24 + * @returns {Promise<*>}
  25 + */
  26 +const stackedGraphUser = (params) => {
  27 + return get('/api-log/log/user', params);
  28 +}
  29 +/**
  30 + * 获取操作日志列表
  31 + * @param params /api-log/log/groupList?userName=&id=1&startTime=&endTime=&timeType=&access_token=0f7119f9-9b86-4c9e-a122-ba651c9eea7a
  32 + * @returns {Promise<*>}
  33 + */
  34 +const getOperationLogList = (params) => {
  35 + return get('/api-log/log/groupList', params);
  36 +}
  37 +
  38 +
  39 +export default {
  40 + getGroupAndGroupUser,
  41 + stackedGraphGroup,
  42 + stackedGraphUser,
  43 + getOperationLogList
  44 +}
  1 +<el-breadcrumb>
  2 + <el-breadcrumb-item v-for="item in linkInfo">
  3 + <el-tooltip placement="top">
  4 + <template #content>{{item.flag ? '已存在操作记录' : '未查询到操作记录'}}</template>
  5 + <div :style="{color:(item.flag ? '#67C23A' : '#F56C6C')}">{{item.name}}</div>
  6 + </el-tooltip>
  7 + </el-breadcrumb-item>
  8 +</el-breadcrumb>
  1 +export default {
  2 + name: "operationLogLink",
  3 + template: '',
  4 + props: {
  5 + opLink: {
  6 + type: String,
  7 + default: '',
  8 + },
  9 + opLinkSource: {
  10 + type: String,
  11 + default: '',
  12 + },
  13 + },
  14 + setup(props) {
  15 +
  16 + const linkInfo = Vue.ref([]);
  17 +
  18 + const getLinkInfo = () => {
  19 + let l = props.opLink.split(' => ');
  20 + let ls = props.opLinkSource.split(' => ')
  21 +
  22 + for (let i = 0; i < ls.length; i++) {
  23 + let itemName = ls[i];
  24 + let linkDetail = {
  25 + name: itemName,
  26 + flag: l.includes(itemName)
  27 + }
  28 + linkInfo.value.push(linkDetail);
  29 + }
  30 + }
  31 +
  32 +
  33 + Vue.onMounted(() => {
  34 + getLinkInfo();
  35 + });
  36 +
  37 +
  38 + return {
  39 + linkInfo
  40 + }
  41 + }
  42 +}
  1 +import store from '/vue3/src/store/index.js'
  2 +
  3 +
  4 +/**
  5 + * 获取接口数据
  6 + * @param storeApiName store中apide
  7 + * @param params
  8 + */
  9 +export function useGetData(storeApiName, params) {
  10 + const data = Vue.ref({})
  11 + const error = Vue.ref('')
  12 + const flag = Vue.ref(false);
  13 +
  14 + let api = store.dispatch(storeApiName, params);
  15 +
  16 + if (!api) {
  17 + let msg = "无效的请求";
  18 + console.log(`${msg},API:${storeApiName} params:${params}`)
  19 + error.value = msg
  20 + return {data, error}
  21 + }
  22 +
  23 + api.then((json) => {
  24 + data.value = json;
  25 + flag.value = true;
  26 + }).catch((err) => {
  27 + data.value.success = false;
  28 + error.value = err
  29 + flag.value = true;
  30 + });
  31 +
  32 + return {data, error, flag}
  33 +}
  1 +“组合式函数”(Composables) 是一个利用 Vue 的组合式 API 来封装和复用有状态逻辑的函数。
  2 +
  3 +命名#
  4 +组合式函数约定用驼峰命名法命名,并以“use”作为开头。
  5 +
  6 +文档:
  7 +https://cn.vuejs.org/guide/reusability/composables.html#mouse-tracker-example
@@ -54,48 +54,25 @@ Promise.all([ @@ -54,48 +54,25 @@ Promise.all([
54 .component('cm-user-type-tree-input', Vue.defineAsyncComponent(() => myImport('components/common/inputusertree/index'))) 54 .component('cm-user-type-tree-input', Vue.defineAsyncComponent(() => myImport('components/common/inputusertree/index')))
55 //菜单下拉树 55 //菜单下拉树
56 .component('cm-tree-select-menu', Vue.defineAsyncComponent(() => myImport('components/common/treeSelectMenu/index'))); 56 .component('cm-tree-select-menu', Vue.defineAsyncComponent(() => myImport('components/common/treeSelectMenu/index')));
57 -// // 自定义指令  
58 -// app.directive('permissions', {  
59 -// // 当被绑定的元素插入到 DOM 中时……  
60 -// mounted(el, binding, vnode) {  
61 -// debugger  
62 -// let p = sessionStorage.getItem('permissions')  
63 -// let val = binding.value;  
64 -// if (p && val) {  
65 -// let arr = p.split(',');  
66 -//  
67 -// if (arr.indexOf(val) == -1) {  
68 -// // 删除元素  
69 -// el.parentNode && el.parentNode.removeChild(el)  
70 -// }  
71 -// }  
72 -// }  
73 -// })  
74 - //start lsq 设置ajax请求增加headers参数 2022-09-20  
75 - let setAjaxData=(val)=>{  
76 - let p = window.top.location.hash;  
77 - if (p) {  
78 - let arr = p.split('#/');  
79 - if(arr && arr.length>1){  
80 - let menuPath=arr[1];  
81 - //title的值  
82 - let nameText=$(window.top.document).find("[lay-id='/"+menuPath+"'] span").text();  
83 - if(val){  
84 - nameText=val; 57 +
  58 + // 自定义指令 授权按钮
  59 + app.directive('permissions', {
  60 + // 当被绑定的元素插入到 DOM 中时……
  61 + mounted(el, binding, vnode) {
  62 + let p = sessionStorage.getItem('permissions')
  63 + let val = binding.value;
  64 + if (p && val) {
  65 + let arr = p.split(',');
  66 +
  67 + if (arr.indexOf(val) == -1) {
  68 + // 删除元素
  69 + el.parentNode && el.parentNode.removeChild(el)
85 } 70 }
86 - let name=encodeURIComponent(nameText)  
87 - $.ajaxSetup({  
88 - headers:{  
89 - menuPath:menuPath,  
90 - elementName:name  
91 - }  
92 - });  
93 } 71 }
94 } 72 }
95 - }  
96 - setAjaxData();  
97 - //end lsq 2022-09-20 73 + })
  74 +
98 app.config.globalProperties.$global = res[3].default 75 app.config.globalProperties.$global = res[3].default
99 app.config.globalProperties.$http = res[4].default 76 app.config.globalProperties.$http = res[4].default
100 app.mount('#app'); // 挂载Vue的app实例 77 app.mount('#app'); // 挂载Vue的app实例
101 -})  
  78 +})
@@ -183,6 +183,12 @@ const routes = [{ @@ -183,6 +183,12 @@ const routes = [{
183 path: '/vue3/operationLog', 183 path: '/vue3/operationLog',
184 name: 'operationLog', 184 name: 'operationLog',
185 component: () => myImport('views/operationLog/index') 185 component: () => myImport('views/operationLog/index')
  186 + },
  187 + //操作日志 - 用户列表
  188 + {
  189 + path: '/vue3/operationLog/userList',
  190 + name: 'operationLogUserList',
  191 + component: () => myImport('views/operationLog/userList')
186 } 192 }
187 ]; 193 ];
188 194
  1 +import operationLog from './modules/operationLog.js'
  2 +
1 export default Vuex.createStore({ 3 export default Vuex.createStore({
2 state: {}, 4 state: {},
3 getters: {}, 5 getters: {},
4 mutations: {}, 6 mutations: {},
5 actions: {}, 7 actions: {},
6 - modules: {} 8 + modules: {
  9 + operationLog
  10 + }
7 }) 11 })
  1 +import operationLog from '../../api/operationLog.js';
  2 +
  3 +export default {
  4 + state: {},
  5 + mutations: {},
  6 + getters: {},
  7 + actions: {
  8 + stackedGraphGroup(context, params) {
  9 + return operationLog.stackedGraphGroup(params);
  10 + },
  11 + stackedGraphUser(context, params) {
  12 + return operationLog.stackedGraphUser(params);
  13 + },
  14 + getGroupAndGroupUser(context, params) {
  15 + return operationLog.getGroupAndGroupUser(params);
  16 + },
  17 + getOperationLogList(context, params) {
  18 + return operationLog.getOperationLogList(params);
  19 + },
  20 + }
  21 +};
1 -<div :style="{'height':height+'px','max-height':height+'px'}" class="container operation-log-container"> 1 +<div :style="{'height':height+'px','max-height':height+'px'}" class="container">
2 <div :style="{'min-height':height+'px','max-height':height+'px','height':'100%'}" class="cm-card"> 2 <div :style="{'min-height':height+'px','max-height':height+'px','height':'100%'}" class="cm-card">
  3 + <!-- 搜索区域 -->
3 <el-row> 4 <el-row>
4 - <el-col :span="14" class="search-item">  
5 - <div class="search">  
6 - <div class="operation-log-search">  
7 - <el-button-group class="ml-4">  
8 - <el-button :size="$global.elementConfig.size.button" :type="search.status == 1 ? 'primary' : ''"  
9 - @click="getDataList(1)">用户名  
10 - </el-button>  
11 - <el-button :size="$global.elementConfig.size.button" :type="search.status == 2 ? 'primary' : ''"  
12 - @click="getDataList(2)">巡检组  
13 - </el-button>  
14 - </el-button-group>  
15 - </div>  
16 - </div>  
17 - <div class="echart-con">  
18 - <div class="echart-left">  
19 - <div class="echart-title">巡检点击完成统计</div>  
20 - <div class="echart-chart">  
21 - <LineChart :optionData="optionData" v-if="optionData"></LineChart>  
22 - </div>  
23 - </div> 5 + <el-col :span="14" class="search">
  6 + <div>
  7 + <el-select v-model="search.groupId" clearable v-if="groupList && groupList.length > 0"
  8 + :size="$global.elementConfig.size.input" placeholder="请选择巡检组" @change="getGroupUser">
  9 + <el-option
  10 + v-for="item in groupList"
  11 + :key="item.groupId"
  12 + :label="item.groupName"
  13 + :value="item.groupId"/>
  14 + </el-select>
  15 +
  16 + <el-select v-model="search.userId" clearable class="m-l-6" :size="$global.elementConfig.size.input"
  17 + placeholder="请选择用户">
  18 + <el-option
  19 + v-for="item in userList"
  20 + :key="item.username"
  21 + :label="item.nickName"
  22 + :value="item.username"/>
  23 + </el-select>
24 </div> 24 </div>
  25 + </el-col>
  26 + <el-col :span="10" class="search">
  27 + <el-button-group class="ml-4">
  28 + <el-button :size="$global.elementConfig.size.button"
  29 + :type="search.dateType == 'yesterday' ? 'primary' : ''"
  30 + @click="loadPage('yesterday')">昨天
  31 + </el-button>
  32 + <el-button :size="$global.elementConfig.size.button"
  33 + :type="search.dateType == 'today' ? 'primary' : ''"
  34 + @click="loadPage('today')">今天
  35 + </el-button>
  36 + <el-button :size="$global.elementConfig.size.button"
  37 + :type="search.dateType == 'lastWeek' ? 'primary' : ''"
  38 + @click="loadPage('lastWeek')">上周
  39 + </el-button>
  40 + <el-button :size="$global.elementConfig.size.button"
  41 + :type="search.dateType == 'thisWeek' ? 'primary' : ''"
  42 + @click="loadPage('thisWeek')">本周
  43 + </el-button>
  44 + <el-button :size="$global.elementConfig.size.button"
  45 + :type="search.dateType == 'thisMonth' ? 'primary' : ''"
  46 + @click="loadPage('thisMonth')">本月
  47 + </el-button>
  48 + <el-button style="border-radius: 0;" :size="$global.elementConfig.size.button"
  49 + :type="search.dateType == 'all' ? 'primary' : ''"
  50 + @click="loadPage('all')">全部
  51 + </el-button>
  52 + </el-button-group>
  53 + <el-date-picker
  54 + :size="$global.elementConfig.size.input"
  55 + style="width:150px;border-radius: 0 4px 4px 0;"
  56 + end-placeholder="结束日期"
  57 + format="YYYY-MM-DD"
  58 + range-separator="-"
  59 + start-placeholder="开始日期"
  60 + type="daterange"
  61 + v-model="search.dateTime"
  62 + value-format="YYYY-MM-DD"
  63 + :prefix-icon="'none'"
  64 + @focus="dateFocus"
  65 + @change="dateChange"/>
25 66
  67 + <el-button :size="$global.elementConfig.size.button" class="m-l-6" type="primary" @click="loadPage('')">
  68 + 查询
  69 + </el-button>
26 </el-col> 70 </el-col>
27 - <el-col :span="10">  
28 - <div class="search">  
29 - <div class="operation-log-search">  
30 - <el-button-group class="ml-4">  
31 - <el-button :size="$global.elementConfig.size.button" :type="search.status == 'yesterday' ? 'primary' : ''"  
32 - @click="getDataList('yesterday')">昨天  
33 - </el-button>  
34 - <el-button :size="$global.elementConfig.size.button" :type="search.status == 'today' ? 'primary' : ''"  
35 - @click="getDataList('today')">今天  
36 - </el-button>  
37 - <el-button :size="$global.elementConfig.size.button" :type="search.status == 'lastWeek' ? 'primary' : ''"  
38 - @click="getDataList('lastWeek')">上周  
39 - </el-button>  
40 - <el-button :size="$global.elementConfig.size.button" :type="search.status == 'thisWeek' ? 'primary' : ''"  
41 - @click="getDataList('thisWeek')">本周  
42 - </el-button>  
43 - <el-button :size="$global.elementConfig.size.button" :type="search.status == 'thisMonth' ? 'primary' : ''"  
44 - @click="getDataList('thisMonth')">本月  
45 - </el-button>  
46 - <el-button style="border-radius: 0;" :size="$global.elementConfig.size.button" :type="search.status == 'all' ? 'primary' : ''"  
47 - @click="getDataList('all')">全部  
48 - </el-button>  
49 - </el-button-group>  
50 - <el-date-picker  
51 - :size="$global.elementConfig.size.input"  
52 - style="width:150px;border-radius: 0 4px 4px 0;"  
53 - end-placeholder="结束日期"  
54 - format="YYYY-MM-DD"  
55 - range-separator="-"  
56 - start-placeholder="开始日期"  
57 - type="daterange"  
58 - v-model="search.dateTime"  
59 - value-format="YYYY-MM-DD"  
60 - :prefix-icon="'none'"  
61 - @focus="dateFocus"  
62 - @change="dateChange"  
63 - />  
64 - </div> 71 + </el-row>
  72 +
  73 + <!--统计区区域-->
  74 + <el-row>
  75 + <el-col :span="12" class="p-r-3">
  76 + <h3 class="page-item-title-h3">巡检点击完成统计</h3>
  77 + <div class="page-item-content" style="height: 300px">
  78 + <LineChart :optionData="stackedGraphGroupData" v-if="stackedGraphGroupData"></LineChart>
65 </div> 79 </div>
66 - <div class="echart-con">  
67 - <div class="echart-right">  
68 - <div class="echart-title">人员功能点击量</div>  
69 - <div class="echart-chart">  
70 - <LineChart :optionData="optionDataR" v-if="optionDataR"></LineChart>  
71 - </div>  
72 - </div> 80 + </el-col>
  81 + <el-col :span="12" class="p-l-3">
  82 + <h3 class="page-item-title-h3">人员功能点击量</h3>
  83 + <div class="page-item-content" style="height: 300px">
  84 + <LineChart :optionData="stackedGraphUserData" v-if="stackedGraphUserData"></LineChart>
73 </div> 85 </div>
74 -  
75 </el-col> 86 </el-col>
76 </el-row> 87 </el-row>
77 88
78 - <div class="container-none"></div>  
79 - <div class="search-table"> 89 + <!--表格区域-->
  90 + <div class="p-6">
80 <cm-table-page :columns="tableData.columns" :dataList="tableData.dataList" 91 <cm-table-page :columns="tableData.columns" :dataList="tableData.dataList"
81 - :height="height - 110" 92 + :height="height - 480"
  93 + :pageSizes='[10,20,50,100, 200, 300, 400]'
82 :loading="false" 94 :loading="false"
83 :pageSize="pageSize" 95 :pageSize="pageSize"
84 :showBorder="true" 96 :showBorder="true"
@@ -89,16 +101,19 @@ @@ -89,16 +101,19 @@
89 :total="tableData.count" 101 :total="tableData.count"
90 @loaddata="loaddata"> 102 @loaddata="loaddata">
91 <template #default="{row,prop,column}"> 103 <template #default="{row,prop,column}">
92 - 104 + <div v-if="prop == 'link'">
  105 + <operationLogLink :opLink="row.link" :opLinkSource="row.linkSource"></operationLogLink>
  106 + </div>
  107 + <div v-if="prop == 'dwellTime'">
  108 + {{row.dwellTime}}
  109 + <el-tooltip placement="top">
  110 + <template #content>统计规则<br/>当前操作路径的<span style="color: #67C23A">首次操作时间({{row.createTime}})</span><span style="color: #67C23A">最后一次的操作时间({{row.endTime}})</span>的间隔</template>
  111 + <i class="iconfont icon-tishi"style="position: absolute;right: 5px;"></i>
  112 + </el-tooltip>
  113 + </div>
93 </template> 114 </template>
94 </cm-table-page> 115 </cm-table-page>
95 </div> 116 </div>
96 </div> 117 </div>
97 </div> 118 </div>
98 119
99 -<!--新增编辑弹框-->  
100 -<cm-dialog :showDialogVisible="dialog.show" :showFooter="false" :title="dialog.title" @hidedialog="hideDialog">  
101 - <template v-slot>  
102 - </template>  
103 -</cm-dialog>  
104 -  
  1 +import operationLogService from "./operationLogService.js";
  2 +
1 export default { 3 export default {
2 name: 'operationLog', 4 name: 'operationLog',
3 template: '', 5 template: '',
4 components: { 6 components: {
5 'LineChart': Vue.defineAsyncComponent( 7 'LineChart': Vue.defineAsyncComponent(
6 () => myImport('views/page/components/lineChart/index') 8 () => myImport('views/page/components/lineChart/index')
  9 + ),
  10 + 'operationLogLink': Vue.defineAsyncComponent(
  11 + () => myImport('components/page/operationLog/operationLogLink')
7 ) 12 )
8 }, 13 },
9 props: [], 14 props: [],
10 setup(props, {attrs, slots, emit}) { 15 setup(props, {attrs, slots, emit}) {
11 const {proxy} = Vue.getCurrentInstance(); 16 const {proxy} = Vue.getCurrentInstance();
12 - let isView = Vue.ref(false);  
13 - let height = Vue.ref(window.innerHeight);  
14 - let optionData = Vue.ref('');  
15 - let optionDataR = Vue.ref('');  
16 - let series = Vue.ref([]);  
17 - let seriesR = Vue.ref([]);  
18 - let names = Vue.ref(['智能综合巡检系统', '数据中心虚拟化', '备份系统']);  
19 - let namesR = Vue.ref(['吴斌斌','袁晋鹏'])  
20 - let kpiName=Vue.ref('');  
21 - let kpiNameR = Vue.ref('');  
22 - let kpiUnit=Vue.ref('');  
23 - let kpiUnitR=Vue.ref('');  
24 - let colorsArr = Vue.ref([  
25 - {  
26 - start: '#468ced',  
27 - end: '#68a5fa'  
28 - },  
29 - {  
30 - start: '#79dda1',  
31 - end: '#9bddb5' 17 + let height = Vue.ref(window.innerHeight - 10);
  18 +
  19 + let groupList = Vue.ref([]);
  20 + let userList = Vue.ref([]);
  21 + let stackedGraphGroupData = Vue.ref({});
  22 + let stackedGraphUserData = Vue.ref({});
  23 +
  24 + // 搜索
  25 + let search = Vue.ref({
  26 + groupId: '',
  27 + userId: '',
  28 + dateType: 'today',
  29 + dateTime: '',
  30 + page: 1,
  31 + limit: 20,
  32 + });
  33 +
  34 + /**
  35 + * 初始化报表
  36 + */
  37 + const loadPage = (dateType) => {
  38 +
  39 + // 加载表格内容
  40 + if (dateType && dateType != '') {
  41 + // 设置最新的类型
  42 + search.value.dateType = dateType;
  43 + } else {
  44 + // 获取当前点击的配置
  45 + dateType = search.value.dateType;
32 } 46 }
33 - ])  
34 - const optionDataInit = () => {  
35 47
36 - optionData.value = {  
37 - tooltip: {  
38 - trigger: 'axis',  
39 - formatter: function (param) {  
40 - var tips = kpiName.value + " " + param[0].name + "<br/>";  
41 - $.each(param, function (i, v) {  
42 - tips += v.marker + " " + v.seriesName + ":" + v.value + kpiUnit.value + "</br>"  
43 - });  
44 - return tips;  
45 - }  
46 - },  
47 - legend: {  
48 - show: true  
49 - },  
50 - grid: {  
51 - top: '10%',  
52 - left: '3%',  
53 - right: '4%',  
54 - bottom: '5%',  
55 - containLabel: true  
56 - },  
57 - toolbox: {  
58 - feature: {  
59 - saveAsImage: {  
60 - show: false  
61 - }  
62 - }  
63 - },  
64 - xAxis: {  
65 - type: 'category',  
66 - data: names.value,  
67 - axisLine: {  
68 - lineStyle: {  
69 - color: '#c9c9c9'  
70 - }  
71 - },  
72 - axisLabel: {  
73 - color: '#232425',  
74 - showMaxLabel: true,  
75 - lineHeight:18,  
76 - formatter: function (params) {  
77 - var newParamsName = '';  
78 - let paramsNameNumber = params.length;  
79 - let provideNumber = 4;  
80 - let rowNumber = Math.ceil(paramsNameNumber / provideNumber);  
81 - if (paramsNameNumber > provideNumber) {  
82 - for (let i = 0; i < rowNumber; i++) {  
83 - let tempStr = '';  
84 - let start = i * provideNumber;  
85 - let end = start + provideNumber;  
86 - if (i == rowNumber - 1) {  
87 - tempStr = params.substring(start, paramsNameNumber);  
88 - } else {  
89 - tempStr = params.substring(start, end) + "\n";  
90 - }  
91 - newParamsName += tempStr;  
92 - }  
93 - } else {  
94 - newParamsName = params;  
95 - }  
96 - return newParamsName;  
97 - }  
98 - },  
99 - splitArea: {  
100 - show: true,  
101 - areaStyle: {  
102 - color: ['rgba(200,200,200,0.1)', 'transparent'  
103 - ]  
104 - }  
105 - }  
106 - },  
107 - yAxis: {  
108 - type: 'value',  
109 - scale: true,  
110 - min:0,  
111 - boundaryGap: ['10%', '10%'],  
112 - axisLine: {  
113 - lineStyle: {  
114 - color: '#232425'  
115 - },  
116 - show: false  
117 - },  
118 - axisTick: {  
119 - show: false  
120 - },  
121 - splitLine: {  
122 - lineStyle: {  
123 - color: ['#ddd'],  
124 - type: 'dotted', 48 + if (dateType != 'dateRange') {
  49 + search.value.dateTime = [];
  50 + } else {
  51 + if (search.value.dateTime && search.value.dateTime.length == 0) {
  52 + // 时间范围
  53 + proxy.$global.showMsg("请选择开始结束时间!", "warning");
  54 + return;
  55 + }
  56 + }
125 57
126 - }  
127 - }  
128 - },  
129 - series: series.value  
130 - };  
131 - optionDataR.value= {  
132 - tooltip: {  
133 - trigger: 'axis',  
134 - formatter: function (param) {  
135 - var tips = kpiName.value + " " + param[0].name + "<br/>";  
136 - $.each(param, function (i, v) {  
137 - tips += v.marker + " " + v.seriesName + ":" + v.value + kpiUnit.value + "</br>"  
138 - });  
139 - return tips;  
140 - }  
141 - },  
142 - legend: {  
143 - show: true  
144 - },  
145 - grid: {  
146 - top: '10%',  
147 - left: '3%',  
148 - right: '4%',  
149 - bottom: '5%',  
150 - containLabel: true  
151 - },  
152 - toolbox: {  
153 - feature: {  
154 - saveAsImage: {  
155 - show: false  
156 - }  
157 - }  
158 - },  
159 - xAxis: {  
160 - type: 'category',  
161 - data: namesR.value,  
162 - axisLine: {  
163 - lineStyle: {  
164 - color: '#c9c9c9'  
165 - }  
166 - },  
167 - axisLabel: {  
168 - color: '#232425',  
169 - showMaxLabel: true,  
170 - lineHeight:18,  
171 - formatter: function (params) {  
172 - var newParamsName = '';  
173 - let paramsNameNumber = params.length;  
174 - let provideNumber = 4;  
175 - let rowNumber = Math.ceil(paramsNameNumber / provideNumber);  
176 - if (paramsNameNumber > provideNumber) {  
177 - for (let i = 0; i < rowNumber; i++) {  
178 - let tempStr = '';  
179 - let start = i * provideNumber;  
180 - let end = start + provideNumber;  
181 - if (i == rowNumber - 1) {  
182 - tempStr = params.substring(start, paramsNameNumber);  
183 - } else {  
184 - tempStr = params.substring(start, end) + "\n";  
185 - }  
186 - newParamsName += tempStr;  
187 - }  
188 - } else {  
189 - newParamsName = params;  
190 - }  
191 - return newParamsName;  
192 - }  
193 - },  
194 - splitArea: {  
195 - show: true,  
196 - areaStyle: {  
197 - color: ['rgba(200,200,200,0.1)', 'transparent'  
198 - ]  
199 - }  
200 - }  
201 - },  
202 - yAxis: {  
203 - type: 'value',  
204 - scale: true,  
205 - boundaryGap: ['10%', '10%'],  
206 - axisLine: {  
207 - lineStyle: {  
208 - color: '#232425'  
209 - },  
210 - show: false  
211 - },  
212 - axisTick: {  
213 - show: false  
214 - },  
215 - splitLine: {  
216 - lineStyle: {  
217 - color: ['#ddd'],  
218 - type: 'dotted', 58 + let startTime = '';
  59 + let endTime = ''
  60 + if (search.value.dateTime && search.value.dateTime.length > 0) {
  61 + startTime = search.value.dateTime[0];
  62 + endTime = search.value.dateTime[1];
  63 + }
  64 + let params = {
  65 + page: search.value.page,
  66 + limit: search.value.limit,
  67 + id: search.value.groupId,
  68 + userName: search.value.userId,
  69 + timeType: search.value.dateType,
  70 + startTime: startTime,
  71 + endTime: endTime
  72 + }
219 73
220 - }  
221 - }  
222 - },  
223 - series: seriesR.value  
224 - }; 74 + // 组统计
  75 + operationLogService.stackedGraphGroupInit(params, stackedGraphGroupData);
  76 + // 用户统计
  77 + operationLogService.stackedGraphUserInit(params, stackedGraphUserData);
  78 + // 下拉列表选项
  79 + operationLogService.getOperationLogGroupAndUserList(groupList);
  80 +
  81 + // 查询列表
  82 + operationLogService.pageList(params,tableData);
225 } 83 }
226 - let rateData=Vue.ref([  
227 - {name:'应点击量',data:[1,34,12]},  
228 - {name:'实际点击量',data:[15,24,10]}  
229 - ])  
230 - let rateDataR=Vue.ref([  
231 - {name:'',data:[1,6,8,9,10]},  
232 - ])  
233 - const setSeries = () => {  
234 - series.value = [];  
235 - $.each(rateData.value, function (i, v) {  
236 - series.value.push({  
237 - name: v.name,  
238 - type: 'bar',  
239 - barWidth: 16,//设置柱状图大小  
240 - data: v.data,  
241 - stack:'total',  
242 - symbolSize: 12,  
243 - symbol: 'circle',  
244 - itemStyle: {  
245 - normal: {  
246 - // color: colorsArr.value[i].start //图标颜色  
247 - color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ //关键在这里, 设置面积渐变  
248 - offset: 0,  
249 - color: colorsArr.value[i].start //这里是我设置的渐变的颜色从线条颜色变为透明  
250 - }, {  
251 - offset: 1,  
252 - color: colorsArr.value[i].end  
253 - }])  
254 - }  
255 - }  
256 - })  
257 - });  
258 84
259 - seriesR.value = [];  
260 - $.each(rateDataR.value, function (i, v) {  
261 - seriesR.value.push({  
262 - name: v.name,  
263 - type: 'bar',  
264 - barWidth: 16,//设置柱状图大小  
265 - data: v.data,  
266 - stack:'noStack',  
267 - symbolSize: 12,  
268 - symbol: 'circle',  
269 - itemStyle: {  
270 - normal: {  
271 - // color: colorsArr.value[i].start //图标颜色  
272 - color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ //关键在这里, 设置面积渐变  
273 - offset: 0,  
274 - color: colorsArr.value[i].start //这里是我设置的渐变的颜色从线条颜色变为透明  
275 - }, {  
276 - offset: 1,  
277 - color: colorsArr.value[i].end  
278 - }])  
279 - },  
280 - borderRadius:[3,3,0,0]  
281 - }  
282 - }) 85 + /**
  86 + * 变更巡检组,获取用户列表
  87 + * @param val
  88 + */
  89 + const getGroupUser = (val) => {
  90 + let group = groupList.value.filter(item => {
  91 + if (item.groupId === val) {
  92 + return item;
  93 + }
283 }); 94 });
  95 + if(group && group.length > 0){
  96 + userList.value = group[0].groupUser;
  97 + }
  98 + }
  99 +
  100 + /**
  101 + * 分页事件,加载数据
  102 + * @param page
  103 + * @param limit
  104 + */
  105 + const loaddata = ({page, limit}) => {
  106 + search.value.page = page;
  107 + search.value.limit = limit;
284 108
285 - optionDataInit(); 109 + loadPage('');
286 } 110 }
287 - let search = Vue.ref({  
288 - status: 'today',  
289 - dateTime:'',  
290 - keyword: '',  
291 - page: 1,  
292 - limit: 10,  
293 - });  
294 - let dialog = Vue.ref({  
295 - title: "处理审批",  
296 - show: false,  
297 - amId: '',  
298 - amStatus: 0,  
299 - alarmId: '',  
300 - }); 111 +
301 112
302 //表格字段 113 //表格字段
303 let tableData = Vue.ref({ 114 let tableData = Vue.ref({
@@ -305,143 +116,122 @@ export default { @@ -305,143 +116,122 @@ export default {
305 dataList: [], 116 dataList: [],
306 columns: [ 117 columns: [
307 { 118 {
308 - prop: 'alarmNo', 119 + prop: 'groupName',
  120 + label: '组名称',
  121 + sortable: true,
  122 + align: 'center',
  123 + width: '180'
  124 + },
  125 + {
  126 + prop: 'nickName',
309 label: '用户名', 127 label: '用户名',
310 sortable: true, 128 sortable: true,
311 align: 'center', 129 align: 'center',
312 width: '150' 130 width: '150'
313 }, 131 },
314 { 132 {
315 - prop: 'resName', 133 + prop: 'createTime',
316 label: '时间', 134 label: '时间',
317 sortable: true, 135 sortable: true,
318 align: 'center', 136 align: 'center',
319 - width: '250', 137 + width: '170',
320 }, 138 },
321 { 139 {
322 - prop: 'resTypeName', 140 + prop: 'ip',
323 label: 'IP地址', 141 label: 'IP地址',
324 sortable: true, 142 sortable: true,
325 align: 'center', 143 align: 'center',
326 width: '150' 144 width: '150'
327 }, { 145 }, {
328 - prop: 'managenameName', 146 + prop: 'link',
329 label: '访问位置', 147 label: '访问位置',
330 sortable: true, 148 sortable: true,
331 align: 'center', 149 align: 'center',
332 }, { 150 }, {
333 - prop: 'reason', 151 + prop: 'dwellTime',
334 label: '停留总时长', 152 label: '停留总时长',
335 sortable: true, 153 sortable: true,
336 align: 'center', 154 align: 'center',
337 - width: '120' 155 + width: '150'
338 } 156 }
339 ] 157 ]
340 }) 158 })
341 //点击时间选择时,其他按钮不高亮 159 //点击时间选择时,其他按钮不高亮
342 - let dateFocus=()=>{  
343 - search.value.status = 'dateRange'; 160 + let dateFocus = () => {
  161 + search.value.dateType = 'dateRange';
344 } 162 }
345 //时间更改事件 163 //时间更改事件
346 - let dateChange=(val)=>{  
347 - console.log(val,search.value.dateTime)  
348 - getDataList('dateRange')  
349 - }  
350 -  
351 - //获取aj配置信息  
352 - let statusVal = Vue.ref('today');  
353 - let getDataList = (status) => {  
354 - if (status == undefined) {  
355 - status = 'today'  
356 - }  
357 - if(status != 'dateRange'){  
358 - search.value.dateTime=[];  
359 - }  
360 - statusVal.value = status;  
361 - search.value.status = status;  
362 - let startTime='';  
363 - let endTime=''  
364 - if(search.value.dateTime && search.value.dateTime.length>0){  
365 - startTime=search.value.dateTime[0];  
366 - endTime=search.value.dateTime[1];  
367 - }  
368 - let params={  
369 - page: search.value.page,  
370 - limit: search.value.limit,  
371 - keyword: search.value.keyword,  
372 - status: search.value.status,  
373 - startTime:startTime,  
374 - endTime:endTime  
375 - }  
376 - proxy.$http.get(`/api-web/bAlarmManage/page`, params, function (res) {  
377 - if (res && res.data) {  
378 - tableData.value.dataList = res.data;  
379 - tableData.value.count = res.count;  
380 - } else {  
381 - tableData.value.dataList = [];  
382 - tableData.value.count = 0;  
383 - }  
384 - }); 164 + let dateChange = (val) => {
  165 + loadPage('dateRange')
385 } 166 }
386 167
387 - let loaddata = ({page, limit}) => {  
388 - search.value.page = page;  
389 - search.value.limit = limit;  
390 - }  
391 168
  169 + // let getDataList = (dateType) => {
  170 + // if (dateType) {
  171 + // // 设置最新的类型
  172 + // search.value.dateType = dateType;
  173 + // } else {
  174 + // // 获取当前点击的配置
  175 + // dateType = search.value.dateType;
  176 + // }
  177 + //
  178 + // if (dateType != 'dateRange') {
  179 + // search.value.dateTime = [];
  180 + // } else {
  181 + // if (search.value.dateTime && search.value.dateTime.length == 0) {
  182 + // // 时间范围
  183 + // proxy.$global.showMsg("请选择开始结束时间!", "warning");
  184 + // return;
  185 + // }
  186 + // }
  187 + //
  188 + // let startTime = '';
  189 + // let endTime = ''
  190 + // if (search.value.dateTime && search.value.dateTime.length > 0) {
  191 + // startTime = search.value.dateTime[0];
  192 + // endTime = search.value.dateTime[1];
  193 + // }
  194 + // let params = {
  195 + // page: search.value.page,
  196 + // limit: search.value.limit,
  197 + // id: search.value.groupId,
  198 + // userName: search.value.userId,
  199 + // timeType: search.value.dateType,
  200 + // startTime: startTime,
  201 + // endTime: endTime
  202 + // }
  203 + // // // 查询列表
  204 + // operationLogService.pageList(params,tableData);
  205 + //
  206 + // }
392 207
393 - let hideDialog = (flg) => {  
394 - dialog.value.show = flg;  
395 - if (!flg) {  
396 - getDataList(dialog.value.amStatus)  
397 - }  
398 - }  
399 -  
400 - // 处理弹框  
401 - let handle = (row, flag) => {  
402 - isView.value = flag;  
403 - hideDialog(true);  
404 - dialog.value.amId = row.id;  
405 - dialog.value.amStatus = row.status;  
406 - dialog.value.alarmId = row.alarmId;  
407 - }  
408 - //审核保存后关闭弹框  
409 - let saveback = (val) => {  
410 - hideDialog(val)  
411 - }  
412 - let loginName = Vue.ref(localStorage.getItem('lgn'));  
413 208
414 // 挂载完 209 // 挂载完
415 Vue.onMounted(() => { 210 Vue.onMounted(() => {
416 - getDataList();  
417 - setSeries(); 211 + // 默认加载搜索条件、统计图、表格
  212 + loadPage();
  213 +
418 }) 214 })
419 215
420 return { 216 return {
421 - loginName,  
422 height, 217 height,
423 - optionData,  
424 - optionDataInit,  
425 - series,  
426 - names,  
427 - rateData,  
428 - optionDataR,  
429 - seriesR,  
430 - namesR,  
431 - rateDataR,  
432 - setSeries, 218 + groupList,
  219 + userList,
  220 + // 搜索条件
  221 + search,
  222 + getGroupUser,
433 dateFocus, 223 dateFocus,
434 dateChange, 224 dateChange,
435 - dialog,  
436 - hideDialog,  
437 - search,  
438 - tableData, 225 +
  226 + stackedGraphGroupData,
  227 + stackedGraphUserData,
  228 +
  229 + // 搜索数据
  230 + loadPage,
439 loaddata, 231 loaddata,
440 - getDataList,  
441 - handle,  
442 - saveback,  
443 - statusVal,  
444 - isView 232 +
  233 + // 表格数据
  234 + tableData
445 } 235 }
446 } 236 }
447 237
  1 +import {useGetData} from '/vue3/src/composables/usePageCurd.js'
  2 +
  3 +const getSeriesData = (resData) => {
  4 + let series = [];
  5 + let colorsArr = [
  6 + {
  7 + start: '#468ced',
  8 + end: '#68a5fa'
  9 + },
  10 + {
  11 + start: '#79dda1',
  12 + end: '#9bddb5'
  13 + }
  14 + ];
  15 + $.each(resData, function (i, v) {
  16 + series.push({
  17 + name: v.name,
  18 + type: 'bar',
  19 + barWidth: 16,//设置柱状图大小
  20 + data: v.data,
  21 + stack: 'total',
  22 + symbolSize: 12,
  23 + symbol: 'circle',
  24 + itemStyle: {
  25 + normal: {
  26 + color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ //关键在这里, 设置面积渐变
  27 + offset: 0,
  28 + color: colorsArr[i].start //这里是我设置的渐变的颜色从线条颜色变为透明
  29 + }, {
  30 + offset: 1,
  31 + color: colorsArr[i].end
  32 + }])
  33 + }
  34 + }
  35 + })
  36 + });
  37 +
  38 + return series;
  39 +}
  40 +
  41 +
  42 +const getOptionData = (rateData, barNames) => {
  43 + let seriesData = getSeriesData(rateData);
  44 + return {
  45 + tooltip: {
  46 + trigger: 'axis',
  47 + formatter: function (param) {
  48 + var tips = param[0].name + "<br/>";
  49 + $.each(param, function (i, v) {
  50 + tips += v.marker + " " + v.seriesName + ":" + v.value + "</br>"
  51 + });
  52 + return tips;
  53 + }
  54 + },
  55 + legend: {
  56 + show: true
  57 + },
  58 + grid: {
  59 + top: '10%',
  60 + left: '3%',
  61 + right: '4%',
  62 + bottom: '5%',
  63 + containLabel: true
  64 + },
  65 + toolbox: {
  66 + feature: {
  67 + saveAsImage: {
  68 + show: false
  69 + }
  70 + }
  71 + },
  72 + xAxis: {
  73 + type: 'category',
  74 + data: barNames,
  75 + axisLine: {
  76 + lineStyle: {
  77 + color: '#c9c9c9'
  78 + }
  79 + },
  80 + axisLabel: {
  81 + color: '#232425',
  82 + showMaxLabel: true,
  83 + lineHeight: 18,
  84 + formatter: function (params) {
  85 + var newParamsName = '';
  86 + let paramsNameNumber = params.length;
  87 + let provideNumber = 4;
  88 + let rowNumber = Math.ceil(paramsNameNumber / provideNumber);
  89 + if (paramsNameNumber > provideNumber) {
  90 + for (let i = 0; i < rowNumber; i++) {
  91 + let tempStr = '';
  92 + let start = i * provideNumber;
  93 + let end = start + provideNumber;
  94 + if (i == rowNumber - 1) {
  95 + tempStr = params.substring(start, paramsNameNumber);
  96 + } else {
  97 + tempStr = params.substring(start, end) + "\n";
  98 + }
  99 + newParamsName += tempStr;
  100 + }
  101 + } else {
  102 + newParamsName = params;
  103 + }
  104 + return newParamsName;
  105 + }
  106 + },
  107 + splitArea: {
  108 + show: true,
  109 + areaStyle: {
  110 + color: ['rgba(200,200,200,0.1)', 'transparent'
  111 + ]
  112 + }
  113 + }
  114 + },
  115 + yAxis: {
  116 + type: 'value',
  117 + scale: true,
  118 + min: 0,
  119 + boundaryGap: ['10%', '10%'],
  120 + axisLine: {
  121 + lineStyle: {
  122 + color: '#232425'
  123 + },
  124 + show: false
  125 + },
  126 + axisTick: {
  127 + show: false
  128 + },
  129 + splitLine: {
  130 + lineStyle: {
  131 + color: ['#ddd'],
  132 + type: 'dotted',
  133 +
  134 + }
  135 + }
  136 + },
  137 + series: seriesData
  138 + };
  139 +}
  140 +
  141 +
  142 +const operationLogService = {
  143 +
  144 + /**
  145 + * 获取操作日志分组用户列表
  146 + * @param type group 组 user 用户
  147 + * @param groupId 组id
  148 + * @param outData1 输出数据
  149 + * @returns [{
  150 + * groupName: '组1',
  151 + * groupId: '1',
  152 + * groupUser: [{username: 'admin', nickName: '管理员ad'},
  153 + * {username: 'root', nickName: '管理员ad1'},
  154 + * {username: 'admin1', nickName: '管理员ad1'}]
  155 + * }]
  156 + */
  157 + getOperationLogGroupAndUserList: (outGroupData) => {
  158 +
  159 + const {data, error} = useGetData('getGroupAndGroupUser', {});
  160 +
  161 + Vue.watchEffect(() => {
  162 + if (data.value && data.value.data) {
  163 + outGroupData.value = data.value.data;
  164 + }
  165 + })
  166 + },
  167 +
  168 + /**
  169 + * 堆叠图-按照巡检组统计
  170 + * 样例数据:
  171 + * let data = {
  172 + * nameList: ['智能综合巡检系统', '数据中心虚拟化', '备份系统'],
  173 + * dataList: [
  174 + * {name: '应点击量', data: [1, 34, 12]},
  175 + * {name: '实际点击量', data: [15, 24, 10]}
  176 + * ]
  177 + * }
  178 + */
  179 + stackedGraphGroupInit: (params, outData) => {
  180 +
  181 + const {data, error} = useGetData('stackedGraphGroup', params);
  182 +
  183 + Vue.watchEffect(() => {
  184 + if (data.value.object) {
  185 + outData.value = getOptionData(data.value.object.dataList, data.value.object.nameList)
  186 + }
  187 + })
  188 + },
  189 +
  190 +
  191 + /**
  192 + * 堆叠图-按照人员统计
  193 + * 样例数据
  194 + * let data = {
  195 + * nameList: ['吴斌斌', '袁晋鹏'],
  196 + * dataList: [
  197 + * {name: '应点击量', data: [1, 34, 12]},
  198 + * {name: '实际点击量', data: [15, 24, 10]}
  199 + * ]
  200 + * }
  201 + */
  202 + stackedGraphUserInit: (params, outData) => {
  203 +
  204 + const {data, error} = useGetData('stackedGraphUser', params);
  205 +
  206 + Vue.watchEffect(() => {
  207 + if (data.value.object) {
  208 + outData.value = getOptionData(data.value.object.dataList, data.value.object.nameList)
  209 + }
  210 + });
  211 + },
  212 +
  213 + pageList: (params, outData) => {
  214 + const {data, error} = useGetData('getOperationLogList', params);
  215 +
  216 + Vue.watchEffect(() => {
  217 + if (data.value) {
  218 + outData.value.count = data.value.count;
  219 + outData.value.dataList = data.value.data;
  220 + }
  221 + });
  222 + }
  223 +}
  224 +
  225 +
  226 +export default operationLogService
  1 +<div :style="{'height':height+'px','max-height':height+'px'}" class="container">
  2 + <div :style="{'min-height':height+'px','max-height':height+'px','height':'100%'}" class="cm-card">
  3 + <!-- 搜索区域 -->
  4 + <el-row>
  5 + <el-col :span="10" class="search">
  6 + <el-button-group class="ml-4">
  7 + <el-button :size="$global.elementConfig.size.button" :type="search.dateType == 'yesterday' ? 'primary' : ''"
  8 + @click="loadPage('yesterday')">昨天
  9 + </el-button>
  10 + <el-button :size="$global.elementConfig.size.button" :type="search.dateType == 'today' ? 'primary' : ''"
  11 + @click="loadPage('today')">今天
  12 + </el-button>
  13 + <el-button :size="$global.elementConfig.size.button" :type="search.dateType == 'lastWeek' ? 'primary' : ''"
  14 + @click="loadPage('lastWeek')">上周
  15 + </el-button>
  16 + <el-button :size="$global.elementConfig.size.button" :type="search.dateType == 'thisWeek' ? 'primary' : ''"
  17 + @click="loadPage('thisWeek')">本周
  18 + </el-button>
  19 + <el-button :size="$global.elementConfig.size.button" :type="search.dateType == 'thisMonth' ? 'primary' : ''"
  20 + @click="loadPage('thisMonth')">本月
  21 + </el-button>
  22 + <el-button style="border-radius: 0;" :size="$global.elementConfig.size.button" :type="search.dateType == 'all' ? 'primary' : ''"
  23 + @click="loadPage('all')">全部
  24 + </el-button>
  25 + </el-button-group>
  26 + <el-date-picker
  27 + :size="$global.elementConfig.size.input"
  28 + style="width:150px;border-radius: 0 4px 4px 0;"
  29 + end-placeholder="结束日期"
  30 + format="YYYY-MM-DD"
  31 + range-separator="-"
  32 + start-placeholder="开始日期"
  33 + type="daterange"
  34 + v-model="search.dateTime"
  35 + value-format="YYYY-MM-DD"
  36 + :prefix-icon="'none'"
  37 + @focus="dateFocus"
  38 + @change="dateChange"/>
  39 +
  40 + <el-button :size="$global.elementConfig.size.button" class="m-l-6" type="primary" @click="loadPage('')">
  41 + 查询
  42 + </el-button>
  43 + </el-col>
  44 + </el-row>
  45 +
  46 + <!--表格区域-->
  47 + <div class="p-6">
  48 + <cm-table-page :columns="tableData.columns" :dataList="tableData.dataList"
  49 + :height="height - 95"
  50 + :pageSizes = '[10,20,50,100, 200, 300, 400]'
  51 + :loading="false"
  52 + :pageSize="pageSize"
  53 + :showBorder="true"
  54 + :showIndex="true"
  55 + :showPage="true"
  56 + :showSelection="false"
  57 + :showTools="false"
  58 + :total="tableData.count"
  59 + @loaddata="loaddata">
  60 + <template #default="{row,prop,column}">
  61 + <div v-if="prop == 'link'">
  62 + <operationLogLink :opLink="row.link" :opLinkSource="row.linkSource"></operationLogLink>
  63 + </div>
  64 + <div v-if="prop == 'dwellTime'">
  65 + {{row.dwellTime}}
  66 + <el-tooltip placement="top">
  67 + <template #content>统计规则<br/>当前操作路径的<span style="color: #67C23A">首次操作时间({{row.createTime}})</span><span style="color: #67C23A">最后一次的操作时间({{row.endTime}})</span>的间隔</template>
  68 + <i class="iconfont icon-tishi"style="position: absolute;right: 5px;"></i>
  69 + </el-tooltip>
  70 + </div>
  71 + </template>
  72 + </cm-table-page>
  73 + </div>
  74 + </div>
  75 +</div>
  76 +
  1 +import operationLogService from "./operationLogService.js";
  2 +
  3 +export default {
  4 + name: 'operationLog',
  5 + template: '',
  6 + components: {
  7 + 'LineChart': Vue.defineAsyncComponent(
  8 + () => myImport('views/page/components/lineChart/index')
  9 + ),
  10 + 'operationLogLink': Vue.defineAsyncComponent(
  11 + () => myImport('components/page/operationLog/operationLogLink')
  12 + )
  13 + },
  14 + props: [],
  15 + setup(props, {attrs, slots, emit}) {
  16 + const {proxy} = Vue.getCurrentInstance();
  17 + let height = Vue.ref(window.innerHeight - 10);
  18 +
  19 + let groupList = Vue.ref([]);
  20 + let userList = Vue.ref([]);
  21 + let stackedGraphGroupData = Vue.ref({});
  22 + let stackedGraphUserData = Vue.ref({});
  23 +
  24 + // 搜索
  25 + let search = Vue.ref({
  26 + groupId: '',
  27 + userId: '',
  28 + dateType: 'today',
  29 + dateTime: '',
  30 + page: 1,
  31 + limit: 20,
  32 + });
  33 +
  34 + /**
  35 + * 初始化报表
  36 + */
  37 + const loadPage = (dateType) => {
  38 +
  39 + // 加载表格内容
  40 + if (dateType && dateType != '') {
  41 + // 设置最新的类型
  42 + search.value.dateType = dateType;
  43 + } else {
  44 + // 获取当前点击的配置
  45 + dateType = search.value.dateType;
  46 + }
  47 +
  48 + if (dateType != 'dateRange') {
  49 + search.value.dateTime = [];
  50 + } else {
  51 + if (search.value.dateTime && search.value.dateTime.length == 0) {
  52 + // 时间范围
  53 + proxy.$global.showMsg("请选择开始结束时间!", "warning");
  54 + return;
  55 + }
  56 + }
  57 +
  58 + let startTime = '';
  59 + let endTime = ''
  60 + if (search.value.dateTime && search.value.dateTime.length > 0) {
  61 + startTime = search.value.dateTime[0];
  62 + endTime = search.value.dateTime[1];
  63 + }
  64 + let params = {
  65 + page: search.value.page,
  66 + limit: search.value.limit,
  67 + id: search.value.groupId,
  68 + userName: localStorage.getItem('lgn'),
  69 + timeType: search.value.dateType,
  70 + startTime: startTime,
  71 + endTime: endTime
  72 + }
  73 +
  74 + // 下拉列表选项
  75 + operationLogService.getOperationLogGroupAndUserList(groupList);
  76 +
  77 + // 查询列表
  78 + operationLogService.pageList(params,tableData);
  79 + }
  80 +
  81 + /**
  82 + * 变更巡检组,获取用户列表
  83 + * @param val
  84 + */
  85 + const getGroupUser = (val) => {
  86 + let group = groupList.value.filter(item => {
  87 + if (item.groupId === val) {
  88 + return item;
  89 + }
  90 + });
  91 + if(group && group.length > 0){
  92 + userList.value = group[0].groupUser;
  93 + }
  94 + }
  95 +
  96 + /**
  97 + * 分页事件,加载数据
  98 + * @param page
  99 + * @param limit
  100 + */
  101 + const loaddata = ({page, limit}) => {
  102 + search.value.page = page;
  103 + search.value.limit = limit;
  104 +
  105 + loadPage('');
  106 + }
  107 +
  108 +
  109 + //表格字段
  110 + let tableData = Vue.ref({
  111 + count: 0,
  112 + dataList: [],
  113 + columns: [
  114 + {
  115 + prop: 'groupName',
  116 + label: '组名称',
  117 + sortable: true,
  118 + align: 'center',
  119 + width: '180'
  120 + },
  121 + {
  122 + prop: 'nickName',
  123 + label: '用户名',
  124 + sortable: true,
  125 + align: 'center',
  126 + width: '150'
  127 + },
  128 + {
  129 + prop: 'createTime',
  130 + label: '时间',
  131 + sortable: true,
  132 + align: 'center',
  133 + width: '170',
  134 + },
  135 + {
  136 + prop: 'ip',
  137 + label: 'IP地址',
  138 + sortable: true,
  139 + align: 'center',
  140 + width: '150'
  141 + }, {
  142 + prop: 'link',
  143 + label: '访问位置',
  144 + sortable: true,
  145 + align: 'center',
  146 + }, {
  147 + prop: 'dwellTime',
  148 + label: '停留总时长',
  149 + sortable: true,
  150 + align: 'center',
  151 + width: '150'
  152 + }
  153 + ]
  154 + })
  155 + //点击时间选择时,其他按钮不高亮
  156 + let dateFocus = () => {
  157 + search.value.dateType = 'dateRange';
  158 + }
  159 + //时间更改事件
  160 + let dateChange = (val) => {
  161 + loadPage('dateRange')
  162 + }
  163 +
  164 +
  165 + // let getDataList = (dateType) => {
  166 + // if (dateType) {
  167 + // // 设置最新的类型
  168 + // search.value.dateType = dateType;
  169 + // } else {
  170 + // // 获取当前点击的配置
  171 + // dateType = search.value.dateType;
  172 + // }
  173 + //
  174 + // if (dateType != 'dateRange') {
  175 + // search.value.dateTime = [];
  176 + // } else {
  177 + // if (search.value.dateTime && search.value.dateTime.length == 0) {
  178 + // // 时间范围
  179 + // proxy.$global.showMsg("请选择开始结束时间!", "warning");
  180 + // return;
  181 + // }
  182 + // }
  183 + //
  184 + // let startTime = '';
  185 + // let endTime = ''
  186 + // if (search.value.dateTime && search.value.dateTime.length > 0) {
  187 + // startTime = search.value.dateTime[0];
  188 + // endTime = search.value.dateTime[1];
  189 + // }
  190 + // let params = {
  191 + // page: search.value.page,
  192 + // limit: search.value.limit,
  193 + // id: search.value.groupId,
  194 + // userName: search.value.userId,
  195 + // timeType: search.value.dateType,
  196 + // startTime: startTime,
  197 + // endTime: endTime
  198 + // }
  199 + // // // 查询列表
  200 + // operationLogService.pageList(params,tableData);
  201 + //
  202 + // }
  203 +
  204 +
  205 + // 挂载完
  206 + Vue.onMounted(() => {
  207 + // 默认加载搜索条件、统计图、表格
  208 + loadPage();
  209 +
  210 + })
  211 +
  212 + return {
  213 + height,
  214 + groupList,
  215 + userList,
  216 + // 搜索条件
  217 + search,
  218 + getGroupUser,
  219 + dateFocus,
  220 + dateChange,
  221 +
  222 + stackedGraphGroupData,
  223 + stackedGraphUserData,
  224 +
  225 + // 搜索数据
  226 + loadPage,
  227 + loaddata,
  228 +
  229 + // 表格数据
  230 + tableData
  231 + }
  232 + }
  233 +
  234 +}
@@ -52,15 +52,15 @@ @@ -52,15 +52,15 @@
52 52
53 <el-row :gutter="20" style="padding: 3px 10px;"> 53 <el-row :gutter="20" style="padding: 3px 10px;">
54 <el-col :span="8"> 54 <el-col :span="8">
55 - <h3 style="text-align: left;color:#2b9eef;">资源类型快照量TOP5</h3> 55 + <h3 class="page-item-title-h3">资源类型快照量TOP5</h3>
56 <div ref="bizChartsRefs" style="width: 100%;height: 320px;border: 1px solid #e4e4e4;"></div> 56 <div ref="bizChartsRefs" style="width: 100%;height: 320px;border: 1px solid #e4e4e4;"></div>
57 </el-col> 57 </el-col>
58 <el-col :span="8"> 58 <el-col :span="8">
59 - <h3 style="text-align: left;color:#2b9eef;">业务系统快照量TOP5</h3> 59 + <h3 class="page-item-title-h3">业务系统快照量TOP5</h3>
60 <div ref="devChartsRefs" style="width: 100%;height: 320px;border: 1px solid #e4e4e4;"></div> 60 <div ref="devChartsRefs" style="width: 100%;height: 320px;border: 1px solid #e4e4e4;"></div>
61 </el-col> 61 </el-col>
62 <el-col :span="8"> 62 <el-col :span="8">
63 - <h3 style="text-align: left;color:#2b9eef;">快照量</h3> 63 + <h3 class="page-item-title-h3">快照量</h3>
64 <div ref="snapshotChartsRefs" style="width: 100%;height: 320px;border: 1px solid #e4e4e4;"></div> 64 <div ref="snapshotChartsRefs" style="width: 100%;height: 320px;border: 1px solid #e4e4e4;"></div>
65 </el-col> 65 </el-col>
66 </el-row> 66 </el-row>
@@ -284,6 +284,12 @@ const routes = [{ @@ -284,6 +284,12 @@ const routes = [{
284 path: '/vue3/operationLog', 284 path: '/vue3/operationLog',
285 name: 'operationLog', 285 name: 'operationLog',
286 component: () => myImport('views/operationLog/index') 286 component: () => myImport('views/operationLog/index')
  287 + },
  288 + //操作日志 - 用户列表
  289 + {
  290 + path: '/vue3/operationLog/userList',
  291 + name: 'operationLogUserList',
  292 + component: () => myImport('views/operationLog/userList')
287 } 293 }
288 ]; 294 ];
289 295
1 -export default Vuex.createStore({  
2 - state: {},  
3 - getters: {},  
4 - mutations: {},  
5 - actions: {},  
6 - modules: {}  
7 -})