Authored by wangtao

删除无用工程(hg-monitor-web-nx)

1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"  
3 - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">  
4 - <modelVersion>4.0.0</modelVersion>  
5 - <parent>  
6 - <groupId>com.honggroup</groupId>  
7 - <artifactId>hg-monitor-web</artifactId>  
8 - <version>0.0.1-SNAPSHOT</version>  
9 - </parent>  
10 - <groupId>com.honggroup</groupId>  
11 - <artifactId>hg-monitor-web-nx</artifactId>  
12 - <version>5.4.0</version>  
13 - <name>hg-monitor-web-nx</name>  
14 - <description>宁夏个性化版本</description>  
15 - <properties>  
16 - <java.version>1.8</java.version>  
17 - </properties>  
18 - <dependencies>  
19 - <dependency>  
20 - <groupId>com.honggroup</groupId>  
21 - <artifactId>hg-monitor-web-base</artifactId>  
22 - <version>0.0.1-SNAPSHOT</version>  
23 - </dependency>  
24 - </dependencies>  
25 -  
26 - <build>  
27 - <finalName>nxweb-${version}.${timestamp}</finalName>  
28 - <resources>  
29 - <resource>  
30 - <directory>src/main/resources</directory>  
31 - <includes>  
32 - <include>**/**</include>  
33 - </includes>  
34 - </resource>  
35 - </resources>  
36 - <plugins>  
37 - <plugin>  
38 - <groupId>org.codehaus.mojo</groupId>  
39 - <artifactId>buildnumber-maven-plugin</artifactId>  
40 - <version>1.4</version>  
41 - <configuration>  
42 - <timestampFormat>yyyyMMdd</timestampFormat>  
43 - </configuration>  
44 - <executions>  
45 - <execution>  
46 - <goals>  
47 - <goal>create-timestamp</goal>  
48 - </goals>  
49 - </execution>  
50 - </executions>  
51 - <inherited>false</inherited>  
52 - </plugin>  
53 - <plugin>  
54 - <groupId>org.springframework.boot</groupId>  
55 - <artifactId>spring-boot-maven-plugin</artifactId>  
56 - </plugin>  
57 - </plugins>  
58 - </build>  
59 -  
60 -</project>  
1 -package com.web;  
2 -  
3 -import org.springframework.boot.SpringApplication;  
4 -import org.springframework.boot.autoconfigure.SpringBootApplication;  
5 -  
6 -@SpringBootApplication  
7 -public class HGMonitorNXWebApplication {  
8 -  
9 - public static void main(String[] args) {  
10 - SpringApplication.run(HGMonitorNXWebApplication.class, args);  
11 - }  
12 -  
13 -}  
1 -spring:  
2 - application:  
3 - name: zjweb  
4 -server:  
5 - port: 8088  
6 - ssl:  
7 - enabled: false  
8 - key-alias: tomcat_https  
9 - key-store: classpath:keystore/tomcat_https.keystore  
10 - key-store-type: JKS  
11 - key-store-password: Hg0801..  
12 - key-password: Hg0801..  
13 -url:  
14 - gateway: http://127.0.0.1:8080  
15 - inspection_web: http://127.0.0.1:8082  
16 - assetsweb: http://127.0.0.1:8082  
17 - mxgraph_editor: http://127.0.0.1:8085  
18 - tingyun: http://127.0.0.1:8088  
19 - bigScreen: http://127.0.0.1:8081  
20 - #流程系统路径,当ssl.enabled=true时,http要改为https,并修改流程nginx的conf文件  
21 - workflow: http://192.168.0.248:8002  
22 - # 积木报表工具  
23 - jimuReport: http://192.168.0.41:8085  
24 -config:  
25 - layer:  
26 - load:  
27 - icon: mj  
28 - audio:  
29 - mp3: 14039  
30 - tingyun:  
31 - api_key: aZipZbC18BhpG5GrjtiFAtThL1I0OUfn  
32 - secret_key: nbxay44wx8c3x4n5wcxe63mp87a72xed  
1 -/**  
2 -  
3 - @Name:layuiAdmin 公共业务  
4 - @Author:贤心  
5 - @Site:http://www.layui.com/admin/  
6 - @License:LPPL  
7 -  
8 - */  
9 -  
10 -layui.define(['xmSelect', 'md5'], function (exports) {  
11 - var $ = layui.$  
12 - , laytpl = layui.laytpl  
13 - , layer = layui.layer  
14 - , view = layui.view  
15 - , xmSelect = layui.xmSelect  
16 - , md5 = layui.md5  
17 - , form = layui.form  
18 - , commonDetail = layui.commonDetail  
19 - , admin = layui.admin;  
20 - //公共业务的逻辑处理可以写在此处,切换任何页面都会执行  
21 - var obj = {  
22 - domainIpManage: "http://94.12.40.231:8080/zoneportal/",  
23 - domainName: sessionStorage.getItem('domainName'), // gateway地址  
24 - domainInspectionURI: sessionStorage.getItem('domainInspectionURI'), // 巡检系统地址  
25 - domainAssetsManage: sessionStorage.getItem('domainAssetsManage'), // 资产系统地址  
26 - graphEditorOrigin: sessionStorage.getItem('graphEditorOrigin'), // 拓扑系统地址  
27 - ajScreenStatement: sessionStorage.getItem('ajWeb'), //aj系统地址  
28 - workflowName: sessionStorage.getItem('workflow'),//流程系统地址  
29 - domainCMDBName: "http://80.12.147.24:8888/hgkjcmdb", //杭州咨源老cmdb系统地址  
30 - lineTimer: null,//性能曲线图全局定时器  
31 - detailTimer: [],//详细页的全局定时器  
32 - alarmTimer: null,//首页告警刷新定时器  
33 - limit: 50,//全局分页条目数  
34 - limits: [50, 100, 150, 200],//全局分页条目数组  
35 - //base64加密  
36 - Base64: {  
37 - _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",  
38 - encode: function (e) {  
39 - var t = "";  
40 - var n, r, i, s, o, u, a;  
41 - var f = 0;  
42 - e = obj.Base64._utf8_encode(e);  
43 - while (f < e.length) {  
44 - n = e.charCodeAt(f++);  
45 - r = e.charCodeAt(f++);  
46 - i = e.charCodeAt(f++);  
47 - s = n >> 2;  
48 - o = (n & 3) << 4 | r >> 4;  
49 - u = (r & 15) << 2 | i >> 6;  
50 - a = i & 63;  
51 - if (isNaN(r)) {  
52 - u = a = 64  
53 - } else if (isNaN(i)) {  
54 - a = 64  
55 - }  
56 - t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a)  
57 - }  
58 - return t  
59 - },  
60 - decode: function (e) {  
61 - var t = "";  
62 - var n, r, i;  
63 - var s, o, u, a;  
64 - var f = 0;  
65 - e = e.replace(/[^A-Za-z0-9+/=]/g, "");  
66 - while (f < e.length) {  
67 - s = this._keyStr.indexOf(e.charAt(f++));  
68 - o = this._keyStr.indexOf(e.charAt(f++));  
69 - u = this._keyStr.indexOf(e.charAt(f++));  
70 - a = this._keyStr.indexOf(e.charAt(f++));  
71 - n = s << 2 | o >> 4;  
72 - r = (o & 15) << 4 | u >> 2;  
73 - i = (u & 3) << 6 | a;  
74 - t = t + String.fromCharCode(n);  
75 - if (u != 64) {  
76 - t = t + String.fromCharCode(r)  
77 - }  
78 - if (a != 64) {  
79 - t = t + String.fromCharCode(i)  
80 - }  
81 - }  
82 - t = obj.Base64._utf8_decode(t);  
83 - return t  
84 - },  
85 - _utf8_encode: function (e) {  
86 - e = e.replace(/rn/g, "n");  
87 - var t = "";  
88 - for (var n = 0; n < e.length; n++) {  
89 - var r = e.charCodeAt(n);  
90 - if (r < 128) {  
91 - t += String.fromCharCode(r)  
92 - } else if (r > 127 && r < 2048) {  
93 - t += String.fromCharCode(r >> 6 | 192);  
94 - t += String.fromCharCode(r & 63 | 128)  
95 - } else {  
96 - t += String.fromCharCode(r >> 12 | 224);  
97 - t += String.fromCharCode(r >> 6 & 63 | 128);  
98 - t += String.fromCharCode(r & 63 | 128)  
99 - }  
100 - }  
101 - return t  
102 - },  
103 - _utf8_decode: function (e) {  
104 - var t = "";  
105 - var n = 0;  
106 - var r = c1 = c2 = 0;  
107 - while (n < e.length) {  
108 - r = e.charCodeAt(n);  
109 - if (r < 128) {  
110 - t += String.fromCharCode(r);  
111 - n++  
112 - } else if (r > 191 && r < 224) {  
113 - c2 = e.charCodeAt(n + 1);  
114 - t += String.fromCharCode((r & 31) << 6 | c2 & 63);  
115 - n += 2  
116 - } else {  
117 - c2 = e.charCodeAt(n + 1);  
118 - c3 = e.charCodeAt(n + 2);  
119 - t += String.fromCharCode((r & 15) << 12 | (c2 & 63) << 6 | c3 & 63);  
120 - n += 3  
121 - }  
122 - }  
123 - return t  
124 - }  
125 - },  
126 - /**  
127 - * 颜色数组  
128 - */  
129 - colorsArr: [  
130 - {  
131 - start: '#46d6d8',  
132 - end: '#2883d0'  
133 - },  
134 - {  
135 - start: '#facf5b',  
136 - end: '#f77623'  
137 - },  
138 - {  
139 - start: '#C04DD8',  
140 - end: '#D81F72'  
141 - },  
142 - {  
143 - start: '#F5A1EB',  
144 - end: '#A04DE2'  
145 - },  
146 - {  
147 - start: '#F36093',  
148 - end: '#FF465C'  
149 - },  
150 - {  
151 - start: '#C2E74D',  
152 - end: '#00AE8B'  
153 - },  
154 - {  
155 - start: '#3DC3FF',  
156 - end: '#01FFFF'  
157 - },  
158 - {  
159 - start: '#B850ED',  
160 - end: '#9062EF'  
161 - },  
162 - {  
163 - start: '#305be6',  
164 - end: '#36a7d3'  
165 - },  
166 - {  
167 - start: '#FFA500',  
168 - end: '#FFEE00'  
169 - },  
170 - {  
171 - start: '#C4E64C',  
172 - end: '#2de078'  
173 - },  
174 - {  
175 - start: '#30ffb3',  
176 - end: '#01FFFF'  
177 - },  
178 - {  
179 - start: '#FF4488',  
180 - end: '#F13EFF'  
181 - },  
182 - {  
183 - start: '#A64CE2',  
184 - end: '#625AE7'  
185 - },  
186 - {  
187 - start: '#5AEBC7',  
188 - end: '#5FC9F8'  
189 - },  
190 - {  
191 - start: '#FFA500',  
192 - end: '#FFEE00'  
193 - },  
194 - {  
195 - start: '#00AAD6',  
196 - end: '#625AE7'  
197 - },  
198 - {  
199 - start: '#E48BDE',  
200 - end: '#FF9262'  
201 - },  
202 - {  
203 - start: '#B2797B',  
204 - end: '#FF4B51'  
205 - },  
206 - {  
207 - start: '#ffe393',  
208 - end: '#feff5b'  
209 - }  
210 - ],  
211 - //资源类型悬浮提示信息定义  
212 - nodeTipsKpiArr: {  
213 - //小型机:主机状态,主机IP、运行状态、磁盘使用率、CPU使用率、网络联通状态、网络带宽占用率、运行时长  
214 - HOST_MINICOMPUTER_SERVER: "KPI1635BB9B,KPI1AF5B3C6,KPIE4B51D5C,KPI2C8A6D17,KPI7054BC34,KPI618689D8,KPID1E6EFA1,KPI1C777D98",  
215 - //小型机分区:主机状态,主机IP、运行状态、磁盘使用率、CPU使用率、网络联通状态、网络带宽占用率、运行时长  
216 - HOST_MINICOMPUTER_PARTITION: "KPI1635BB9B,KPI1AF5B3C6,KPIE4B51D5C,KPI2C8A6D17,KPI7054BC34,KPI618689D8,KPID1E6EFA1,KPI1C777D98",  
217 - //物理服务器:主机状态、主机IP、磁盘使用率、内存使用率、网络连通状态、CPU使用率、服务器与存储间的连通状态、、网络带宽占用率  
218 - HOST_X86SERVER: "KPI1635BB9B,KPI1AF5B3C6,KPI2C8A6D17,KPI31CB8D97,KPI618689D8,KPI7054BC34,KPIA537846F,KPID1E6EFA1",  
219 - //虚拟服务器:主机状态、主机IP、磁盘使用率、内存使用率、网络连通状态、CPU使用率、服务器与存储间的连通状态、、网络带宽占用率  
220 - HOST_X86VIRTUAL: "KPI1635BB9B,KPI1AF5B3C6,KPI2C8A6D17,KPI31CB8D97,KPI618689D8,KPI7054BC34,KPIA537846F,KPID1E6EFA1",  
221 - //华为云:物理机数量  
222 - HUAWEI_CLOUD: "KPI3CF8A73E",  
223 - //华为云物理机:物理主机IP、所属资源池、已分配内存大小、已分配磁盘大小、CPU使用率、内存使用率、磁盘使用率  
224 - HUAWEI_CLOUD_PHYSICSHOST: "KPIEA270DAB,KPID7BE5E90,KPI191373C6,KPI9B34D90F,KPI7054BC34,KPI31CB8D97,KPI2C8A6D17",  
225 - //华为存储 IP地址、总容量、已使用容量、CPU使用率、内存占用率、运行状态  
226 - HUAWEI_CLOUD_STORAGE: "KPI2DC9105C,KPI2D4365CA,KPI008F0D3A,KPI7054BC34,KPI31CB8D97,KPIE4B51D5C",  
227 - //华为交换机:IP地址、管理状态、操作状态、所属区域、CPU平均使用率、内存平均使用率  
228 - HUAWEI_CLOUD_SWITCHBOARD: "KPI2DC9105C,KPI6F17667E,KPIF21A9F60,KPI5364695E,KPI961A9688,KPIE78B29FF",  
229 - //华为防火墙:IP地址、管理状态、操作状态、所属区域、CPU平均使用率、内存平均使用率  
230 - HUAWEI_CLOUD_FIREWALL: "KPI2DC9105C,KPI6F17667E,KPIF21A9F60,KPI5364695E,KPI961A9688,KPIE78B29FF",  
231 - //虚拟化vmware平台:主机数、虚拟机数量、磁盘已使用大小、已使用内存、网络数、磁盘数量、网卡数量、平台运行状态  
232 - VIRTUALIZATION_VMWARE: "KPI02EA188F,KPID4E1FD1D,KPI1988842F,KPI4A216352,KPI63916615,KPIA4D671CC,KPID1BA9510",  
233 - //虚拟化资源池:资源池名称、HA健康监测、主机数、网络数、CPU大小、内存大小、CPU线程数、资源池状态、CPU使用率、内存使用率  
234 - VIRTUALIZATION_VMWARE_CLUSTER: "KPIC3F28B34,KPI26E85604,KPI02EA188F,KPI63916615,KPI98960E55,KPI1584BE1C,KPI15358CE3,KPIEE008133,KPI7054BC34,KPI31CB8D97",  
235 - //虚拟化物理机:所属资源池 、主机状态 、CPU使用率、内存使用率、启动时间  
236 - VIRTUALIZATION_VMWARE_PHYSICSHOST: "KPID7BE5E90,KPI1635BB9B,KPI7054BC34,KPI31CB8D97,KPIF0A20BB4",  
237 - //虚拟化虚拟机:所属资源池、所属物理主机IP、主机状态、运行状态、网卡数量、磁盘数量、CPU使用率、内存使用率  
238 - VIRTUALIZATION_VMWARE_VHOST: "KPID7BE5E90,KPI9BFCAA00,KPI1635BB9B,KPIE4B51D5C,KPICB05513A,KPIA4D671CC,KPI7054BC34,KPI31CB8D97",  
239 - //存储:总容量、已使用容量、已分配容量、已分配未使用容量、磁带库运行状态  
240 - STORAGE: "KPI2D4365CA,KPI008F0D3A,KPIFAFA06EE,KPI358301D0,KPIEFF93409",  
241 - //网络设备路由器:端口数量\所属区域\视频会议期间链路带宽占用率\接收丢包率\端口发送流量\发送丢包率\设备的连通状态\征收期宽带链路占用率\主备链路的通断状态  
242 - NETHARDWARE_ROUTER: "KPI1FC18754,KPI5364695E,KPI59705C06,KPI87312ED9,KPI88D5DF44,KPI89560B13,KPI94AEBD99,KPI9806211A,KPIC37FE51C",  
243 - //网络设备:交换机  
244 - NETHARDWARE_SWITCHBOARD: "KPI1FC18754,KPI5364695E,KPI59705C06,KPI87312ED9,KPI88D5DF44,KPI89560B13,KPI94AEBD99,KPI9806211A,KPIC37FE51C",  
245 - //负载均衡 CPU使用率  
246 - NETHARDWARE_LOADBALANCING: "KPI7054BC34",  
247 - //Oracle 数据库:数据库状态、是否为集群、会话百分比、表空间使用率、归档日志状态、安装的选项、锁数量、活动会话数量  
248 - DATABASE_ORACLE: "KPI7498580B,KPI096EB5BA,KPI18F18278,KPI64B1610A,KPI69E67C68,KPIA52AF07F,KPIA55F9590,KPICFA785F5",  
249 - //DATABASE_MYSQL :mysql运行线程数、mysql当前连接线程数最大连接数、mysql进程执行时间、吞吐量、版本信息  
250 - DATABASE_MYSQL: "KPI08809218,KPIA5980712,KPI8914AC3B,KPIDB9E6D41,KPIFB54AE94,KPIDAC7AC64",  
251 - //weblogic:活动线程数、网络连通性、最大连接数、执行线程数使用率、已打开会话数、队列长度、总队列数  
252 - MIDDLEWARE_WEBLOGIC: "KPI2893A9EC,KPI2DBC270D,KPI8914AC3B,KPI8BF5E027,KPIC0A94965,KPIC18DC28A,KPIFDB4AD23",  
253 - //tomcat:最大线程数、当前线程数、繁忙线程数、已使用heap内存量、Non-heap使用率、heap使用率  
254 - MIDDLEWARE_TOMCAT: "KPI0A144EC2,KPI70500CAA,KPIAAF2D335,KPIA0FB8392,KPI68B432E5,KPIADACC4E3"  
255 - },  
256 - /**  
257 - * 预览附件  
258 - * @param id 附件ID  
259 - */  
260 - openReport: function (id, flag, suffix, code, name, document) {  
261 - var accessToken = '';  
262 - layui.use(['sessions', 'common'], function () {  
263 - var sessions = layui.sessions;  
264 - accessToken = sessions.getToken()['access_token'];  
265 - });  
266 - var url = obj.domainName + '/api-web/home/priviewOfiice/' + id + '?document=' + document + '&access_token=' + accessToken;  
267 - var loadIndex = layer.load(1, {shade: [0.3], content: '文件正在转换...'});  
268 - $.ajax({  
269 - type: "get",  
270 - url: url,  
271 - async: true,  
272 - success: function (data) {  
273 - if (data.code == 0) {  
274 - layer.close(loadIndex);  
275 - window.open("/src/lib/extend/pdfjs/web/viewer.html?test=" + encodeURIComponent(data.pdfPath));  
276 - }  
277 - }  
278 - });  
279 - },  
280 - //业务下拉选择数据绑定  
281 - bizTypeSelect: function (targtetId, callback) {  
282 - var options = "<option value=''>=所属业务=</option>";  
283 - admin.req({  
284 - url: this.domainName + '/api-web/home/business/findAllBusType',  
285 - data: {'type': 'per'}  
286 - , async: false  
287 - }).done(function (res) {  
288 - var bizlist = res.data;  
289 - $.each(bizlist, function (i, v) {  
290 - options += '<option value="' + v.busId + '">' + v.busTypeName + '</option>';  
291 - });  
292 - $('#' + targtetId).html($(options));  
293 - if (callback) {  
294 - callback();  
295 - }  
296 - }).error(function (error) {  
297 - console.error(error);  
298 - });  
299 - },  
300 - //资源类型下拉选择数据绑定  
301 - resTypeSelect: function (targtetId, callback, ajaxParams) {  
302 - var options = "<option value=''>=资源类型=</option>";  
303 - admin.req(Object.assign({  
304 - url: this.domainName + '/api-web/home/restype/getAllResType'  
305 - }, ajaxParams)).done(function (res) {  
306 - var reslist = res.data;  
307 - $.each(reslist, function (i, v) {  
308 - options += '<option value="' + v.resTypeCode + '">' + v.resTypeName + '</option>';  
309 - });  
310 - $('#' + targtetId).html($(options));  
311 - if (callback) {  
312 - callback();  
313 - }  
314 - }).error(function (error) {  
315 - console.error(error);  
316 - });  
317 - },  
318 - resTypeXmSelect: function (xmSelectParams) {  
319 - admin.req({  
320 - url: `${obj.domainName}/api-web/manage/restype/list`,  
321 - async: false,  
322 - success: function (res) {  
323 - // 资源类型下拉框  
324 - var resTypeList = res.data;  
325 - var resTypeTree = obj.pidToChildren(resTypeList, "resTypeCode", "parentId");  
326 - xmSelect.render(Object.assign({  
327 - el: '#',  
328 - tips: '=资源类型=',  
329 - filterable: true,  
330 - radio: false,  
331 - clickClose: false,  
332 - initValue: [],  
333 - prop: {  
334 - name: 'resTypeName',  
335 - value: 'resTypeCode'  
336 - },  
337 - toolbar: {  
338 - show: true,  
339 - list: ['CLEAR']  
340 - },  
341 - tree: {  
342 - show: true,  
343 - showFolderIcon: true,  
344 - showLine: true,  
345 - strict: false,  
346 - indent: 20  
347 - },  
348 - data: resTypeTree,  
349 - on: function (data) {  
350 -  
351 - }  
352 - }, xmSelectParams));  
353 - }  
354 - });  
355 - },  
356 - /**  
357 - * @description 厂商公共方法  
358 - * @author XuHaoJie  
359 - * @date 2021/12/27 15:03  
360 - */  
361 - providerSelect: function (targtetId, callback) {  
362 - var sessions = layui.sessions;  
363 - var accessToken = sessions.getToken()['access_token'];  
364 - var options = "<option value=''>=所属厂商=</option>";  
365 - admin.req({  
366 - url: `${obj.domainName}/api-web/manage/ddic/findSucDdics/provider?access_token=` + accessToken,  
367 - type: 'POST',  
368 - async: false  
369 - }).done(function (res) {  
370 - var list = res.data;  
371 - $.each(list, function (i, v) {  
372 - options += '<option value="' + v.ddicCode + '">' + v.ddicName + '</option>';  
373 - });  
374 - $('#' + targtetId).html($(options));  
375 - if (callback) {  
376 - callback();  
377 - }  
378 - }).error(function (error) {  
379 - console.error(error);  
380 - });  
381 - },  
382 -  
383 - menuXmSelect: function (xmSelectParams, done, username_, roleId_) {  
384 - var username = username_ ? username_ : '';  
385 - var roleId = roleId_ ? roleId_ : '';  
386 - admin.req({  
387 - url: `${obj.domainName}/api-user/menus/findMenus?username=` + username + '&roleIds=' + roleId,  
388 - success: function (res) {  
389 - // 菜单下拉框  
390 - var menuList = res.data;  
391 - // menuList.forEach(item => {  
392 - // item.disabled = item.isLeaf !== 'Y';  
393 - // });  
394 - var menuTree = obj.pidToChildren(menuList, "id", "parentId");  
395 - //XuHaoJie 2021/10/21 添加是否是父节点  
396 - addProperty(menuTree);  
397 - var menuSelect = xmSelect.render(Object.assign({  
398 - el: '#',  
399 - tips: '=菜单=',  
400 - filterable: true,  
401 - radio: false,  
402 - clickClose: false,  
403 - initValue: [],  
404 - prop: {  
405 - name: 'name',  
406 - value: 'id'  
407 - },  
408 - toolbar: {  
409 - show: true,  
410 - list: ['CLEAR']  
411 - },  
412 - tree: {  
413 - show: true,  
414 - showFolderIcon: true,  
415 - showLine: true,  
416 - strict: false,  
417 - indent: 20  
418 - },  
419 - data: menuTree,  
420 - on: function (data) {  
421 -  
422 - }  
423 - }, xmSelectParams));  
424 - if (done) {  
425 - done(menuSelect);  
426 - }  
427 - }  
428 - });  
429 -  
430 - //添加是否是父节点的删除  
431 - function addProperty(list) {  
432 - list.forEach(item => {  
433 - if (item.children && item.children.length > 0) {  
434 - item['isParent'] = 1;  
435 - addProperty(item.children);  
436 - } else {  
437 - item['isParent'] = 0;  
438 - }  
439 - return item;  
440 - })  
441 - }  
442 - },  
443 - relationTypeXmSelect: function (xmSelectParams, done) {  
444 - admin.req({  
445 - url: `${obj.domainName}/api-web/relationType/getAll`,  
446 - success: function (res) {  
447 - var relationTypeList = res.data;  
448 - var relationTypeSelect = xmSelect.render(Object.assign({  
449 - el: '#',  
450 - tips: '=关系=',  
451 - filterable: true,  
452 - radio: false,  
453 - clickClose: false,  
454 - initValue: [],  
455 - prop: {  
456 - name: 'typeName',  
457 - value: 'reType'  
458 - },  
459 - toolbar: {  
460 - show: true,  
461 - list: ['ALL', 'CLEAR']  
462 - },  
463 - data: relationTypeList,  
464 - on: function (data) {  
465 -  
466 - }  
467 - }, xmSelectParams));  
468 - if (done) {  
469 - done(relationTypeSelect);  
470 - }  
471 - }  
472 - });  
473 - },  
474 -  
475 - //绑定拓扑数据  
476 - topoSelect: function (targtetId, callback) {  
477 - var options = "<option value=''>=选择拓扑=</option>";  
478 - admin.req({  
479 - url: this.domainName + "/api-web/topo/jtopo/getListByUser?page=1&limit=50"  
480 - }).done(function (res) {  
481 - var topolist = res.data;  
482 - $.each(topolist, function (i, v) {  
483 - options += '<option value="' + v.jtopoId + '">' + v.topoName + '</option>';  
484 - });  
485 - $('#' + targtetId).html($(options));  
486 - if (callback) {  
487 - callback();  
488 - }  
489 - }).error(function (error) {  
490 - console.error(error);  
491 - });  
492 - },  
493 - //绑定虚拟化平台  
494 - virtualPlatFormSelect: function (targtetId, bizId, callback) {  
495 - var options = "<option value=''>=所属平台=</option>";  
496 - admin.req({  
497 - url: this.domainName + '/api-web/home/virtual/platform'  
498 - }).done(function (res) {  
499 - var virtuallist = res.data;  
500 - $.each(virtuallist, function (i, v) {  
501 - options += '<option value="' + v.resId + '">' + v.resName + '</option>';  
502 - });  
503 - $('#' + targtetId).html($(options));  
504 - if (callback) {  
505 - callback();  
506 - }  
507 - }).error(function (error) {  
508 - console.error(error);  
509 - });  
510 - },  
511 - /**  
512 - * 数据字典下拉选择数据绑定  
513 - *  
514 - * @param targtetId 下拉框id  
515 - * @param ddicCategory 数据类别  
516 - * @param callback 回调函数  
517 - */  
518 - ddicSelect: function (targtetId, ddicCategory, callback) {  
519 - layui.use(['sessions', 'common'], function () {  
520 - var sessions = layui.sessions;  
521 - accessToken = sessions.getToken()['access_token'];  
522 - });  
523 - var options = "<option value=''>=请选择=</option>";  
524 - $.ajax({  
525 - url: `${this.domainName}/api-web/manage/ddic/findSucDdics/${ddicCategory}?access_token=${accessToken}`  
526 - , method: 'POST'  
527 - , success: function (res) {  
528 - if (res && res.data) {  
529 - var ddiclist = res.data;  
530 - $.each(ddiclist, function (i, v) {  
531 - options += '<option value="' + v.ddicCode + '">' + v.ddicName + '</option>';  
532 - });  
533 - $('#' + targtetId).html($(options));  
534 - if (callback) {  
535 - callback(ddiclist);  
536 - }  
537 - }  
538 - }  
539 - , error(error) {  
540 - console.error(error);  
541 - }  
542 - });  
543 - },  
544 - // 用户下拉框  
545 - userXmSelect: function (xmSelectParams) {  
546 - var userSelect;  
547 - $.ajax({  
548 - url: this.domainName + '/api-user/users/getAll?access_token=' + localStorage.getItem("access_token"),  
549 - async: false,  
550 - success: function (response) {  
551 - userSelect = xmSelect.render(Object.assign({  
552 - el: '#',  
553 - tips: '=选择用户=',  
554 - prop: {  
555 - name: 'nickname',  
556 - value: 'username'  
557 - },  
558 - autoRow: true,  
559 - filterable: true,  
560 - toolbar: {  
561 - show: true,  
562 - list: ['ALL', 'REVERSE', 'CLEAR']  
563 - },  
564 - data: response,  
565 - on: function (data) {  
566 -  
567 - }  
568 - }, xmSelectParams));  
569 - }  
570 - });  
571 - return userSelect;  
572 - },  
573 - //打开弹框  
574 - openWin: function (url, name, params, btns, fn, cancelfn, area, done, layerParams) {  
575 - if (!name) {  
576 - name = "信息";  
577 - }  
578 - if (!area) {  
579 - area = ['80%', '90%']  
580 - }  
581 - var id = md5(url)  
582 - view('commonViewModel').render(url).then(function (res) {  
583 - layer.open(Object.assign({  
584 - title: [name, 'font-size:18px;'],  
585 - type: 1,  
586 - area: area,  
587 - resize: false,  
588 - shadeClose: true,//开启遮罩层  
589 - id: id,  
590 - content: laytpl(res.body).render(JSON.stringify(params)),  
591 - success: function (layero, index) {  
592 - if (done) {  
593 - done(layero, index);  
594 - }  
595 - },  
596 - yes: function (index, layero) {  
597 - if (fn && fn(index)) {  
598 - layer.close(index);  
599 - }  
600 - },  
601 - cancel: function () {  
602 - $.each(obj.detailTimer, function (i, v) {  
603 - clearTimeout(obj.detailTimer[i]);  
604 - });  
605 - obj.detailTimer.length = 0;  
606 - //取消的回调函数  
607 - if (cancelfn) {  
608 - cancelfn();  
609 - }  
610 - },  
611 - btn: btns  
612 - }, layerParams));  
613 - });  
614 - },  
615 - openMoreBtnWin: function (url, name, params, btns, fn, fn2, cancelfn, area, done, layerParams) {  
616 - if (!name) {  
617 - name = "信息";  
618 - }  
619 - if (!area) {  
620 - area = ['80%', '90%']  
621 - }  
622 - view('commonViewModel').render(url).then(function (res) {  
623 - layer.open(Object.assign({  
624 - title: [name, 'font-size:18px;'],  
625 - type: 1,  
626 - resize: false,  
627 - area: area,  
628 - content: laytpl(res.body).render(JSON.stringify(params)),  
629 - scrollbar: false,  
630 - success: function (layero, index) {  
631 - if (done) {  
632 - done(layero, index);  
633 - }  
634 - },  
635 - yes: function (index, layero) {  
636 - if (fn && fn()) {  
637 - layer.close(index);  
638 - }  
639 - }  
640 - , btn2: function (index, layero) {  
641 - if (fn2 && fn2()) {  
642 - layer.close(index);  
643 - }  
644 - }  
645 - , cancel: function () {  
646 - //取消的回调函数  
647 - if (cancelfn) {  
648 - cancelfn();  
649 - }  
650 - },  
651 - btn: btns  
652 - }, layerParams));  
653 - });  
654 - },  
655 - /**  
656 - * @desc 以layer.open打开弹框,渲染html元素在弹框的内容区域,可以直接传参为html片段  
657 - * @param id 设定一个id,防止重复弹出  
658 - * @param conent html内容  
659 - * @param title 标题,可选  
660 - * @param width 宽度,可选  
661 - * @param height 高度,可选  
662 - * @param btns 按钮组 ,可选  
663 - * @param fn 点击确定回调函数,可选  
664 - * @param successfn 加载成功后的回调处理,可选  
665 - */  
666 - openWindow: function (id, conent, title, width, height, btns, fn, successfn) {  
667 - if (!width) {  
668 - width = '80%'  
669 - }  
670 - if (!height) {  
671 - height = '90%'  
672 - }  
673 - layer.open({  
674 - type: 1  
675 - , title: title //不显示标题栏  
676 - , closeBtn: false  
677 - , area: [width, height]  
678 - , shade: 0.8  
679 - , resize: false  
680 - , id: id //设定一个id,防止重复弹出  
681 - , btn: btns  
682 - , content: conent  
683 - , success: function (layero, index) {  
684 - if (successfn && successfn) {  
685 - successfn();  
686 - }  
687 - }  
688 - , yes: function (index, layero) {  
689 - if (fn && fn()) {  
690 - fn()  
691 - layer.close(index); //如果设定了yes回调,需进行手工关闭  
692 - }  
693 - }  
694 - });  
695 - },  
696 - //详细页地址  
697 - detailPath: function (resType, resId, protocol) {  
698 - //供从详细页配置策略时使用  
699 - localStorage.setItem("currentResType", resType);  
700 - //网络设备  
701 - if (resType.indexOf("NETHARDWARE_") == 0 && resType != 'NETHARDWARE_360SAFE' && resType != 'NETHARDWARE_LOADBALANCING' && resType != 'NETHARDWARE_SAN_SWITCHBOARD') {  
702 - resType = 'NETHARDWARE';  
703 - }  
704 - //安全  
705 - // if (resType != 'NETSAFE_FIREWALL_SUB' && resType.indexOf("NETSAFE_") == 0 && resType !== 'NETSAFE_FIREWALL') {  
706 - // resType = 'NETHARDWARE';  
707 - // }  
708 - //华为云的防火墙和路由器走相同页面  
709 - if (resType == 'HUAWEI_CLOUD_SWITCHBOARD' || resType == 'HUAWEI_CLOUD_FIREWALL') {  
710 - resType = "HUAWEI_CLOUD_NETHARDWARE";  
711 - }  
712 - //小型机分区  
713 - if (resType.indexOf("HOST_MINICOMPUTER_P") != -1) {  
714 - resType = 'HOST_MINICOMPUTER_PARTITION';  
715 - }  
716 - //如果是物理服务器并且配置了ssh和snmp协议。则跳转至tab详情页  
717 - if (resType.indexOf("HOST_X86SERVER") != -1 && protocol && protocol.split(",").length > 1) {  
718 - resType = 'X86SERVER_BMC';  
719 - }  
720 - //如果是HOST_X86SERVER服务器并且协议为snmp,或共享存储则根据厂商和型号判断类型  
721 - if ((resType.indexOf("HOST_X86SERVER") !== -1 && protocol == 'SNMP') || resType.indexOf("STORAGE_SHARE") != -1) {  
722 - resType = this.detailPathByProviderAndModel(resType, resId);  
723 - }  
724 - //如果是虚拟化相关资源类型,则根据采集协议判断去那个页面  
725 - var resTypeList = ['VIRTUALIZATION_VMWARE_VHOST', 'VIRTUALIZATION_HUAWEI_VHOST', 'HUAWEI_CLOUD_VIRTUALHOST', 'ALI_CLOUD_ECS'];  
726 - if (resTypeList.indexOf(resType) != -1) {  
727 - if (protocol == 'SSH' || protocol == 'SNMP') {  
728 - resType = 'HOST_X86VIRTUAL';  
729 - }  
730 - }  
731 - //如果是虚拟化虚拟机资源,则直接走X86虚拟机页面  
732 - if (resType.indexOf("VIRTUALIZATION_VHOST") != -1) {  
733 - resType = 'HOST_X86VIRTUAL';  
734 - }  
735 - //如果是oracle数据库,则判定是否配置集群  
736 - if (resType == 'DATABASE_ORACLE') {  
737 - resType = this.checkHasCluster(resType, resId);  
738 - }  
739 -  
740 - return "template/detail/" + resType.toLowerCase();  
741 - },  
742 - checkHasCluster: function (resType, resId) {  
743 - $.ajax({  
744 - url: this.domainName + '/api-web/detail/block?access_token=' + layui.sessions.getToken()['access_token'],  
745 - data: {  
746 - resId: resId,  
747 - kpiId: 'KPI096EB5BA'  
748 - },  
749 - async: false,  
750 - success: function (res) {  
751 -  
752 - if (res && res.data && res.data.length > 0) {  
753 - if (res.data[0].value == '是') {  
754 - resType = 'ORACLE_RAC';  
755 - }  
756 - }  
757 - }  
758 - });  
759 - return resType;  
760 - },  
761 - //BMC服务器和共享存储根据厂商和型号跳转不同的详情页  
762 - detailPathByProviderAndModel: function (resType, resId) {  
763 - $.ajax({  
764 - url: this.domainName + '/api-web/manage/resource/findById?access_token=' + layui.sessions.getToken()['access_token'],  
765 - data: {resId: resId},  
766 - async: false,  
767 - success: function (res) {  
768 - var res = res.obj;  
769 - var bean = res['bean'];  
770 -  
771 - //存放BMC服务器厂商和详情页关系的map  
772 - var BMCMap = new Map();  
773 - BMCMap.set('DELL', 'HOST_BMC_DELL');  
774 - BMCMap.set('H3C', 'HOST_BMC_H3C');  
775 - BMCMap.set('HUAWEI', 'HOST_BMC_HUAWEI');  
776 - BMCMap.set('LENOVO', 'HOST_BMC_LENOVO');  
777 - BMCMap.set("IBM", "HOST_BMC_IBM");  
778 - BMCMap.set('Inspur', 'HOST_BMC_INSPUR');  
779 - BMCMap.set('sugon', 'HOST_BMC_SUGON');  
780 - BMCMap.set('HP', 'HOST_BMC_HP');  
781 - BMCMap.set('HP_knifeBox', 'HOST_BMC_HP_KNIFEBOX');  
782 - BMCMap.set('HUAWEI_KNIFEBOX', 'HOST_BMC_HUAWEI_KNIFEBOX');  
783 - BMCMap.set('HUAWEI_BLADE', 'HOST_BMC_HUAWEI_BLADE');  
784 -  
785 - //存放共享存储厂商和详情页关系的map  
786 - var shareMap = new Map();  
787 - shareMap.set('HUAWEI', 'STORAGE_SHARE');  
788 - shareMap.set('Inspur', 'STORAGE_SHARE_INSPUR');  
789 -  
790 - if (resType.indexOf('HOST_X86SERVER') != -1) {  
791 - if (bean.provider == 'HP' && bean.model.split('-')[0] == 'C7000') {  
792 - resType = BMCMap.get('HP_knifeBox');  
793 - } else if (bean.provider == 'H3C' && bean.model.split('-')[1] == 'R690') {  
794 - resType = BMCMap.get('HP');  
795 - } else if (bean.provider === 'HUAWEI' && bean.model === 'E9000') {  
796 - resType = BMCMap.get('HUAWEI_KNIFEBOX');  
797 - } else if (bean.resCode && bean.resCode.indexOf('华为Blade__') && bean.parentId) {  
798 - resType = BMCMap.get('HUAWEI_BLADE');  
799 - } else {  
800 - if (BMCMap.get(bean.provider)) {  
801 - resType = BMCMap.get(bean.provider)  
802 - }  
803 - }  
804 - }  
805 - if (resType.indexOf('STORAGE_SHARE') != -1) {  
806 - resType = shareMap.get(bean.provider)  
807 - }  
808 - }  
809 - })  
810 - return resType;  
811 - },  
812 - //打开性能曲线图  
813 - openLineChart: function (title, params) {  
814 - // Start 将对象转成key=value&key1=value1 LSQ 2022/1/17  
815 - let urlParams = '';  
816 - for (let key in params) {  
817 - if (params[key]) {  
818 - urlParams += key + '=' + params[key] + '&'  
819 - }  
820 - }  
821 - urlParams = urlParams.substr(0, urlParams.length - 1)  
822 - //End LSQ 2022/1/17  
823 - if (!title) {  
824 - title = "性能曲线图";  
825 - }  
826 - view('commonViewModel').render("template/detail/line").then(function (res) {  
827 - // Start ident==1为性能趋势 LSQ 2022/1/17  
828 - let type = 1;  
829 - let content = laytpl(res.body).render(JSON.stringify(params));  
830 - if (params.ident && params.ident == 1) {  
831 - type = 2;  
832 - content = ['/vue3/index.html#/vue3/pieDetailLine?' + urlParams, 'no'];  
833 - }  
834 - //End LSQ 2022/1/17  
835 - layer.open({  
836 - title: [title, 'font-size:18px;'],  
837 - // type: 1,  
838 - type: type,  
839 - area: ['80%', '90%'],  
840 - shadeClose: true,//开启遮罩层  
841 - id: 'line_chart_div',  
842 - // content: laytpl(res.body).render(JSON.stringify(params)),  
843 - content: content,  
844 - cancel: function () {  
845 - clearTimeout(obj.lineTimer);  
846 - }  
847 - });  
848 - });  
849 - },  
850 - //打开性能柱状图  
851 - openBarChart: function (title, params) {  
852 - if (!title) {  
853 - title = "使用情况";  
854 - }  
855 - view('commonViewModel').render("template/detail/bar").then(function (res) {  
856 - layer.open({  
857 - title: [title, 'font-size:18px;'],  
858 - type: 1,  
859 - area: ['90%', '600px'],  
860 - content: laytpl(res.body).render(JSON.stringify(params))  
861 - });  
862 - });  
863 - },  
864 - //将数组切割分组  
865 - splieceGroup: function (array, subLength) {  
866 - var index = 0;  
867 - var newArray = [];  
868 - while (index < array.length) {  
869 - newArray.push(array.slice(index, index += subLength));  
870 - }  
871 - return newArray;  
872 - },  
873 - //判定是否为空或者undefined wtc add  
874 - isNotEmpty: function (data) {  
875 - if (data != '' && data != null && data != undefined) {  
876 - return true  
877 - } else {  
878 - return false  
879 - }  
880 - },  
881 - getPreMonth(date) {  
882 - var arr = date.split('-');  
883 - var year = arr[0]; //获取当前日期的年份  
884 - var month = arr[1]; //获取当前日期的月份  
885 - var day = arr[2]; //获取当前日期的日  
886 - var days = new Date(year, month, 0);  
887 - days = days.getDate(); //获取当前日期中月的天数  
888 - var year2 = year;  
889 - var month2 = parseInt(month) - 1;  
890 - if (month2 == 0) {  
891 - year2 = parseInt(year2) - 1;  
892 - month2 = 12;  
893 - }  
894 - var day2 = day;  
895 - var days2 = new Date(year2, month2, 0);  
896 - days2 = days2.getDate();  
897 - if (day2 > days2) {  
898 - day2 = days2;  
899 - }  
900 - if (month2 < 10) {  
901 - month2 = '0' + month2;  
902 - }  
903 - var t2 = year2 + '年' + month2 + '月';  
904 - return t2;  
905 - },  
906 - //生成uuid wtc add  
907 - uuid: function () {  
908 - var s = [];  
909 - var hexDigits = "0123456789abcdef";  
910 - for (var i = 0; i < 36; i++) {  
911 - s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);  
912 - }  
913 - s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010  
914 - s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01  
915 - s[8] = s[13] = s[18] = s[23] = "-";  
916 -  
917 - var uuid = s.join("");  
918 - return uuid;  
919 - },  
920 - //获取当日 joke add 0200422  
921 - getToday: function (type) {  
922 - var date = new Date();  
923 - var year = date.getFullYear();//当前年份  
924 - var month = date.getMonth();//当前月份  
925 - var data = date.getDate();//天  
926 - var hours = date.getHours();//小时  
927 - var minute = date.getMinutes();//分  
928 - var second = date.getSeconds();//秒  
929 - if (type === 'day') {  
930 - return year + "-" + obj.fnW(month + 1) + "-" + obj.fnW(data)  
931 - } else {  
932 - return year + "-" + obj.fnW(month + 1) + "-" + obj.fnW(data) + ' ' + obj.fnW(hours) + ":" + obj.fnW(minute) + ":" + obj.fnW(second);  
933 - }  
934 - },  
935 - //日期时间补0 joke add 0200422  
936 - fnW: function (str) {  
937 - var num;  
938 - str > 9 ? num = str : num = "0" + str;  
939 - return num;  
940 - },  
941 - getUrlParam: function (key) {  
942 - var href = window.location.href;  
943 - href = href.substr(0, href.indexOf("#"));  
944 - var url = href.split("?");  
945 - if (url.length <= 1) {  
946 - return "";  
947 - }  
948 - var params = url[1].split("&");  
949 -  
950 - for (var i = 0; i < params.length; i++) {  
951 - var param = params[i].split("=");  
952 - if (key == param[0]) {  
953 - return param[1];  
954 - }  
955 - }  
956 - return "";  
957 - },  
958 - //保存列  
959 - saveTableCols: function (data, sign) {  
960 - var accessToken = '';  
961 - layui.use(['sessions', 'common'], function () {  
962 - var sessions = layui.sessions;  
963 - accessToken = sessions.getToken()['access_token'];  
964 - });  
965 - var cols = data['cols'][0];  
966 - if (sign === 0) {  
967 - var parseData = JSON.parse(data['cols']);  
968 - cols = parseData[0];  
969 - }  
970 - $.each(cols, function (i, e) {  
971 - if (e['isChild']) {  
972 - if (e['isChild'] && typeof e['isChild'] === 'function') {  
973 - e['isChild'] = e['isChild'] + '';  
974 - }  
975 - }  
976 - if (e['children']) {  
977 - $.each(e['children'], function (j, k) {  
978 - if (k['url'] && typeof k['url'] === 'function') {  
979 - k['url'] = k['url'] + '';  
980 - }  
981 - if (k['done'] && typeof k['done'] === 'function') {  
982 - k['done'] = k['done'] + '';  
983 - }  
984 - })  
985 - }  
986 - })  
987 - data['cols'] = JSON.stringify([cols]);  
988 - layer.load(2);  
989 - admin.req({  
990 - url: obj.domainName + '/api-web/bUsercustomTable/save?access_token=' + accessToken  
991 - , type: 'post'  
992 - , contentType: "application/json;charset=UTF-8"//指定消息请求类型  
993 - , data: JSON.stringify(data)  
994 - , error: function (e) {  
995 - layer.closeAll('loading');  
996 - }  
997 - }).done(function (res) {  
998 - layer.closeAll('loading');  
999 - layer.msg("保存成功", {icon: 1, time: 2000})  
1000 - });  
1001 - },  
1002 - //获取列  
1003 - getTableCols: function (param, callback) {  
1004 - //获取配置的列  
1005 - admin.req({  
1006 - url: obj.domainName + '/api-web/bUsercustomTable/findByUserNameAndOthers'  
1007 - , data: param  
1008 - }).done(function (res) {  
1009 - var cols = null;  
1010 - if (res.object && res.object.cols) {  
1011 - cols = JSON.parse(res.object.cols)[0];  
1012 - $.each(cols, function (i, e) {  
1013 - if (e['isChild']) {  
1014 - if (e['isChild']) {  
1015 - e['isChild'] = eval("(function(){return " + e['isChild'] + " })()");  
1016 - }  
1017 - }  
1018 - if (e['children']) {  
1019 - $.each(e['children'], function (j, k) {  
1020 - if (k['url']) {  
1021 - k['url'] = eval("(function(){return " + k['url'] + " })()");  
1022 - }  
1023 - if (k['done']) {  
1024 - k['done'] = eval("(function(){return " + k['done'] + " })()");  
1025 - }  
1026 - })  
1027 - }  
1028 - })  
1029 - }  
1030 - if (callback) {  
1031 - callback(cols);  
1032 - }  
1033 - });  
1034 - },  
1035 - //列拖动事件  
1036 - dragCols: function (target) {  
1037 - $(".layui-table th").mousedown(function () {  
1038 - $(".layui-table th").mousemove(function () {  
1039 - $("#" + target).show();  
1040 - $("#" + target).removeClass("hide");  
1041 - });  
1042 - });  
1043 - },  
1044 - // 树表格列拖动/保存事件  
1045 - treeTableDragCols: function (tableTarget, toolBarTarget) {  
1046 - var toolBarHtml = '';  
1047 - if (toolBarTarget) {  
1048 - toolBarHtml = '<div class="layui-table-tool"><div class="layui-table-tool-temp">' + $(toolBarTarget).html() + '</div></div>';  
1049 - } else {  
1050 - toolBarHtml = '<div class="layui-table-tool"><div class="layui-table-tool-temp"><button class="layui-btn layui-btn-primary layui-btn-xs btn_save_cols toolbar-btn" lay-tips="保存列顺序"><i class="iconfont">&#xe633;</i></button></div></div>';  
1051 - }  
1052 - $(tableTarget).next().find('.layui-table-box').before(toolBarHtml);  
1053 - $(".layui-table th").mousedown(function () {  
1054 - $(".layui-table th").mousemove(function () {  
1055 - $(tableTarget).next().find('.layui-table-tool .btn_save_cols').removeClass('hide');  
1056 - $(tableTarget).next().find('.layui-table-tool .btn_save_cols').show();  
1057 - });  
1058 - });  
1059 - },  
1060 -  
1061 - // 普通表格导出到excel  
1062 - exportTableData: function (tableObj, title) {  
1063 - var cols = tableObj.config.cols[0].filter(item => (item.title && item.field));  
1064 - var tableData = layui.table.cache[tableObj.config.id];  
1065 - var headList = cols.map(item => item.title);  
1066 - var rowList = tableData.map(item => {  
1067 - var row = {};  
1068 - cols.forEach(col => {  
1069 - if (!col.templet) {  
1070 - row[col.field] = item[col.field];  
1071 - } else {  
1072 - var renderHtml = laytpl($(col.templet).html()).render(item).replace(/[\r\n]/g, '');  
1073 - if (renderHtml.match(/(<.+>)([^<]+)(<\/.+>)/)) {  
1074 - row[col.field] = renderHtml.match(/(<.+>)([^<]+)(<\/.+>)/)[2];  
1075 - if (!row[col.field].trim()) {  
1076 - row[col.field] = item[col.field];  
1077 - }  
1078 - } else {  
1079 - row[col.field] = renderHtml  
1080 - }  
1081 - }  
1082 - });  
1083 - return row;  
1084 - });  
1085 - obj.exportData(title, headList, rowList);  
1086 - },  
1087 - // 树表格导出到excel  
1088 - exportTreeTableData: function (tableObj, title) {  
1089 - var cols = tableObj.getTreeOptions().cols[0].filter(item => (item.title && item.field));  
1090 - var tableData = tableObj.getTableTreeData();  
1091 - var headList = cols.map(item => item.title);  
1092 - var rowList = [];  
1093 - rowList = treeToList(tableData, rowList, cols);  
1094 - obj.exportData(title, headList, rowList);  
1095 -  
1096 - function treeToList(treeData, rowList, cols) {  
1097 - treeData.forEach(item => {  
1098 - var row = {};  
1099 - cols.forEach(col => {  
1100 - if (!col.templet) {  
1101 - row[col.field] = item[col.field];  
1102 - } else {  
1103 - var renderHtml = laytpl($(col.templet).html()).render(item);  
1104 - var value = '';  
1105 - if (renderHtml.match(/(<.+>|\w)+(.+)(\w|<\/.+>)+/)) {  
1106 - value = renderHtml.match(/(<.+>|\w)+(.+)(\w|<\/.+>)+/)[0];  
1107 - }  
1108 - if (value) {  
1109 - row[col.field] = value  
1110 - } else {  
1111 - row[col.field] = renderHtml  
1112 - }  
1113 - }  
1114 - });  
1115 - rowList.push(row);  
1116 - if (item.children && item.children.length > 0) {  
1117 - treeToList(item.children, rowList, cols);  
1118 - }  
1119 - });  
1120 - return rowList;  
1121 - }  
1122 - },  
1123 -  
1124 - /**  
1125 - * 导出数据至excel  
1126 - *  
1127 - * @return null  
1128 - * @author 惠佳旭  
1129 - * @date 2020/11/23  
1130 - * @param title 导出excel文件名  
1131 - * @param headList 导出excel列头  
1132 - * @param rowList 导出excel数据  
1133 - */  
1134 - exportData: function (title, headList, rowList) {  
1135 - if (rowList.length < 1) {  
1136 - layer.msg('暂无数据导出...', {icon: 0});  
1137 - return;  
1138 - }  
1139 - if (layui.device().ie) {  
1140 - layer.msg('不支持ie导出...', {icon: 0});  
1141 - return;  
1142 - }  
1143 - // 转换bodyData  
1144 - var bodyData = rowList.map(row => Object.values(row).map(item => item ? item.toString().trim().replace(/,/g, ',') : '').join(','));  
1145 - // 创建下载文件的a标签  
1146 - var alink = document.createElement('a');  
1147 - var content = encodeURIComponent(headList.join(',') + '\r\n' + bodyData.join('\r\n'));  
1148 - var contentType = ({csv: 'text/csv', xls: 'application/vnd.ms-excel'})['xls'];  
1149 - alink.href = 'data:' + contentType + ';charset=utf-8,\ufeff' + content;  
1150 - alink.download = title + '.xls';  
1151 - document.body.appendChild(alink);  
1152 - alink.click();  
1153 - document.body.removeChild(alink);  
1154 - },  
1155 -  
1156 - /**检查权限*/  
1157 - checkPermission: function (access_token) {  
1158 - // Start Wang 2021/12/13 19:42 权限列表,如果能从缓存中加载到数据,则获取缓存中的数据  
1159 - var ps = sessionStorage.getItem('permissions');  
1160 - if (ps && ps != '' && ps != null) {  
1161 - return ps.split(',');  
1162 - }  
1163 - // End Wang 2021/12/13 19:43 权限列表,如果能从缓存中加载到数据,则获取缓存中的数据  
1164 - var pers = [];  
1165 - $.ajax({  
1166 - type: 'get',  
1167 - url: obj.domainName + '/api-u/users/current?access_token=' + access_token,  
1168 - contentType: "application/json; charset=utf-8",  
1169 - async: false,  
1170 - success: function (data) {  
1171 - pers = data.permissions;  
1172 - $("[permission]").each(function () {  
1173 - var per = $(this).attr("permission");  
1174 - if ($.inArray(per, pers) < 0) {  
1175 - $(this).hide();  
1176 - }  
1177 - });  
1178 - }  
1179 - });  
1180 - return pers;  
1181 - },  
1182 - /* pid转children形式 */  
1183 - pidToChildren: function (data, idName, pidName, childName, pId, canNotCheckPranet) {  
1184 - childName || (childName = 'children');  
1185 - var newList = [];  
1186 - for (var i = 0; i < data.length; i++) {  
1187 - (pId == undefined) && (pId = obj.getPids(data, idName, pidName));  
1188 - if (obj.pidEquals(data[i][pidName], pId)) {  
1189 - var children = this.pidToChildren(data, idName, pidName, childName, data[i][idName], canNotCheckPranet);  
1190 - if (canNotCheckPranet === false) { //当不能选择时,设置父节点不可选择  
1191 - if (children.length > 0) {  
1192 - data[i].disabled = true;  
1193 - }  
1194 - }  
1195 - (children.length > 0) && (data[i][childName] = children);  
1196 - newList.push(data[i]);  
1197 - }  
1198 - }  
1199 - return newList;  
1200 - },  
1201 - /** 获取顶级的pId */  
1202 - getPids: function (list, idName, pidName) {  
1203 - var pids = [];  
1204 - for (var i = 0; i < list.length; i++) {  
1205 - var hasPid = false;  
1206 - for (var j = 0; j < list.length; j++) {  
1207 - if (i != j && list[j][idName] == list[i][pidName]) {  
1208 - hasPid = true;  
1209 - }  
1210 - }  
1211 - if (!hasPid) {  
1212 - pids.push(list[i][pidName]);  
1213 - }  
1214 - }  
1215 - return pids;  
1216 - },  
1217 -  
1218 - /** 判断pId是否相等 */  
1219 - pidEquals: function (pId, pIds) {  
1220 - if (obj.isClass(pIds) == 'Array') {  
1221 - for (var i = 0; i < pIds.length; i++) {  
1222 - if (pId == pIds[i]) {  
1223 - return true;  
1224 - }  
1225 - }  
1226 - } else {  
1227 - return pId == pIds;  
1228 - }  
1229 - return false;  
1230 - },  
1231 - /** 获取变量类型 */  
1232 - isClass: function (o) {  
1233 - if (o === null)  
1234 - return 'Null';  
1235 - if (o === undefined)  
1236 - return 'Undefined';  
1237 - return Object.prototype.toString.call(o).slice(8, -1);  
1238 - },  
1239 - copyText: function (text, formId) {  
1240 - var textarea = document.createElement("textarea"); //创建input对象  
1241 - var currentFocus = document.activeElement; //当前获得焦点的元素  
1242 - var toolBoxwrap = document.getElementById(formId); //将文本框插入到NewsToolBox这个之后  
1243 - toolBoxwrap.appendChild(textarea); //添加元素  
1244 - textarea.value = text;  
1245 - textarea.focus();  
1246 - if (textarea.setSelectionRange) {  
1247 - textarea.setSelectionRange(0, textarea.value.length); //获取光标起始位置到结束位置  
1248 - } else {  
1249 - textarea.select();  
1250 - }  
1251 - try {  
1252 - var flag = document.execCommand("copy"); //执行复制  
1253 - } catch (e) {  
1254 - var flag = false;  
1255 - }  
1256 - toolBoxwrap.removeChild(textarea); //删除元素  
1257 - currentFocus.focus();  
1258 - return flag;  
1259 - },  
1260 - layJump: function (layHref) {  
1261 - var alink = document.createElement('a');  
1262 - var param = '';  
1263 - if (layHref.indexOf('=') !== -1) {  
1264 - param = "=" + encodeURIComponent(layHref.split('=')[1]);  
1265 - }  
1266 - alink.setAttribute("lay-href", layHref.split('=')[0] + param);  
1267 - admin.req({  
1268 - url: obj.domainName + '/api-web/mxgraph/getJtopoInfoById/' + layHref.split('=')[2],  
1269 - success(response) {  
1270 - //LH 修改 弹框展示子拓扑  
1271 - layer.open({  
1272 - title: response.object.topoName,  
1273 - type: 2,  
1274 - area: ['90%', '90%'],  
1275 - content: obj.graphEditorOrigin + "/jgraph/grapheditor/viewer.html?access_token=" + localStorage.getItem('access_token') + '&id=' + layHref.split('=')[2],//+ "&layout=organic",  
1276 - })  
1277 - },  
1278 - error() {  
1279 - layer.closeAll('loading');  
1280 - layer.msg('生成资源拓扑失败...', {icon: 2});  
1281 - }  
1282 - });  
1283 -  
1284 - // document.body.appendChild(alink);  
1285 - // alink.click();  
1286 - // document.body.removeChild(alink);  
1287 - },  
1288 -  
1289 - /**  
1290 - * @desc 查看资源详细  
1291 - * @author wangfeng  
1292 - * @date 2020/9/1 15:42  
1293 - **/  
1294 - viewMxGraphNodeResInfo: function (resId) {  
1295 - admin.req({  
1296 - url: obj.domainName + "/api-web/home/resource/findById?resId=" + resId  
1297 - , type: "get"  
1298 - , done: function (res) {  
1299 - if (res.str === 'false') {  
1300 - layer.msg('暂无该资源权限!', {icon: 0});  
1301 - return;  
1302 - }  
1303 - var data = res.object;  
1304 - if (data) {  
1305 - // var resTypeName = data.resTypeName ? data.resTypeName + " | " : "";  
1306 - // var resName = data.resName ? data.resName + " | " : "";  
1307 - // var resIp = data.ip ? data.ip + " | " : "";  
1308 - // var resPositon = data.resPositon ? data.resPositon + " | " : "";  
1309 - // var resLabel = data.resLabel ? data.resLabel + " | " : "";  
1310 - // var admin = data.admin ? data.admin : "";  
1311 - // var title = resTypeName + resName + resIp + resPositon + resLabel + admin;  
1312 - var resId = data.resId;  
1313 - var resType = data.resType;  
1314 - var resName = data.resName;  
1315 - var ip = data.ip;  
1316 - var resTypeName = data.resTypeName;  
1317 - var adminName = data.adminName;  
1318 - var manageIp = data.manageIp;  
1319 - var collProtocol = data.collProtocol;  
1320 - var title = resName;  
1321 - if (title && title != '') {  
1322 - title += '|';  
1323 - }  
1324 - if (resTypeName && resType !== 'HOST_X86SERVER') {  
1325 - title += resTypeName + '|';  
1326 - }  
1327 - if (ip) {  
1328 - if (resType === 'HOST_X86SERVER') {  
1329 - if (collProtocol && (collProtocol.split(",").length > 1 || collProtocol === 'SSH')) {  
1330 - title += '应用IP-' + ip + '|';  
1331 - }  
1332 - } else {  
1333 - title += ip + '|';  
1334 - }  
1335 - }  
1336 - if (resType === 'HOST_X86SERVER' && collProtocol && collProtocol.indexOf('SNMP') !== -1) {  
1337 - if (manageIp) {  
1338 - title += '管理IP-' + manageIp + '|';  
1339 - }  
1340 - }  
1341 - if (adminName) {  
1342 - title += adminName + '|';  
1343 - }  
1344 - if (title.length > 0) {  
1345 - title = title.substr(0, title.length - 1);  
1346 - }  
1347 - if (!commonDetail) {  
1348 - commonDetail = layui.commonDetail;  
1349 - }  
1350 - if (data.pingEnable == '2') { //如果pingEnable为2,则进入ping状态详情页面  
1351 - commonDetail.openNewWin('template/detail/pingIndex', title, {'resId': data.resId}, false);  
1352 - } else { //否则进入监控详情页面  
1353 - commonDetail.openDetail(data.resId, data.resType, title);  
1354 - }  
1355 - } else {  
1356 - layer.msg("获取资源详细信息失败,请稍后再试!", {offset: '15px', icon: 7, time: 2000});  
1357 - }  
1358 - }  
1359 - });  
1360 - },  
1361 - viewResTopo: function (resId) {  
1362 - layer.load(2);  
1363 - admin.req({  
1364 - url: obj.domainName + '/api-web/mxgraph/generateByResId',  
1365 - data: {resId},  
1366 - success(response) {  
1367 - layer.closeAll('loading');  
1368 - if (response && response.success) {  
1369 - layer.open({  
1370 - type: 2,  
1371 - content: obj.graphEditorOrigin + "/jgraph/grapheditor/viewer.html?access_token=" + localStorage.getItem('access_token') + '&id=' + response.str + "&layout=organic",  
1372 - area: ['98%', '98%'],  
1373 - title: ''  
1374 - });  
1375 - } else {  
1376 - layer.msg('生成资源拓扑失败!', {icon: 2});  
1377 - }  
1378 - },  
1379 - error() {  
1380 - layer.closeAll('loading');  
1381 - layer.msg('生成资源拓扑失败...', {icon: 2});  
1382 - }  
1383 - });  
1384 - },  
1385 - viewAjView: function (reportCode, height, width) {  
1386 - layer.load(2);  
1387 - admin.req({  
1388 - url: obj.domainName + '/api-web/ajConfig/findOneById',  
1389 - data: {id: reportCode},  
1390 - success(response) {  
1391 - layer.closeAll('loading');  
1392 - if (response && response.success) {  
1393 - layer.open({  
1394 - type: 2,  
1395 - content: obj.ajScreenStatement + "/#/bigscreen/viewer?reportCode=" + response.object.designPage + response.object.param + "&access_token=" + localStorage.getItem('access_token'),  
1396 - area: [height, width],  
1397 - title: response.object.title  
1398 - });  
1399 - } else {  
1400 - layer.open({  
1401 - type: 2,  
1402 - content: obj.ajScreenStatement + "/#/bigscreen/viewer?reportCode=" + reportCode + "&access_token=" + localStorage.getItem('access_token'),  
1403 - area: [height, width],  
1404 - title: ''  
1405 - });  
1406 - layer.closeAll('loading');  
1407 - }  
1408 - }  
1409 - });  
1410 - },  
1411 - viewBizTopo: function (busId) {  
1412 - layer.load(2);  
1413 - admin.req({  
1414 - url: obj.domainName + '/api-web/mxgraph/generateByBusId',  
1415 - data: {busId},  
1416 - success(response) {  
1417 - layer.closeAll('loading');  
1418 - if (response && response.success) {  
1419 - layer.open({  
1420 - type: 2,  
1421 - content: obj.graphEditorOrigin + "/jgraph/grapheditor/viewer.html?access_token=" + localStorage.getItem('access_token') + '&id=' + response.str + "&layout=organic",  
1422 - area: ['98%', '98%'],  
1423 - title: ''  
1424 - });  
1425 - } else {  
1426 - layer.msg('生成业务拓扑失败!', {icon: 2});  
1427 - }  
1428 - },  
1429 - error() {  
1430 - layer.closeAll('loading');  
1431 - layer.msg('生成业务拓扑失败...', {icon: 2});  
1432 - }  
1433 - });  
1434 - },  
1435 -  
1436 - /**  
1437 - * @description 采集器选择一级是所属域,第二级别是域下采集器  
1438 - * @author XuHaoJie  
1439 - * @date 2021/6/9 15:43  
1440 - */  
1441 - collectorTree: function (data, parentId, parentName, childName, childId) {  
1442 - var dataList = [];  
1443 - $.each(data, function (i, v) {  
1444 - var child = [];  
1445 - $.each(v.children, function (x, y) {  
1446 - child.push({name: y[childName] + ' | ' + y.deployIp, value: y[childId]})  
1447 - })  
1448 - var val = {  
1449 - name: v[parentName],  
1450 - value: i == 0 ? parentId : -(i + 1),  
1451 - children: child,  
1452 - }  
1453 - dataList.push(val);  
1454 - })  
1455 - return dataList;  
1456 - },  
1457 -  
1458 - /** 业务下拉选择(tree)  
1459 - *radio传入则为单选,不传或传入false为多选 joke add  
1460 - *strict传入false为非严格父子关系,不传或传入非false为严格父子关系 joke add  
1461 - * canNotCheckPranet传入true为不能选择,传入false为可以选择  
1462 - */  
1463 - busTreeSelect: function (xmSelectParams, canNotCheckPranet) {  
1464 - //绑定业务下拉选择数据  
1465 - admin.req({  
1466 - url: this.domainName + '/api-web/home/business/findAllBusType',  
1467 - async: false,  
1468 - success: function (response) {  
1469 - if (response && response.success) {  
1470 - var bizList = response.data.map(item => {  
1471 - return {  
1472 - name: item.busTypeName,  
1473 - value: item.busId,  
1474 - parentId: item.parentId  
1475 - }  
1476 - });  
1477 - var bizTree = obj.pidToChildren(bizList, 'value', 'parentId', canNotCheckPranet);  
1478 - // 影响业务下拉框  
1479 - xmSelect.render(Object.assign({  
1480 - el: '#',  
1481 - name: '',  
1482 - tips: '=所属业务=',  
1483 - //默认开启多选、选完不关闭下拉  
1484 - radio: false,  
1485 - clickClose: false,  
1486 - //开启搜索  
1487 - filterable: true,  
1488 - direction: 'down',  
1489 - initValue: [],  
1490 - toolbar: {  
1491 - show: true,  
1492 - list: ['ALL', 'REVERSE', 'CLEAR']  
1493 - },  
1494 - height: '400px',  
1495 - tree: {  
1496 - show: true,  
1497 - showFolderIcon: true,  
1498 - showLine: true,  
1499 - strict: true,  
1500 - //间距  
1501 - indent: 20,  
1502 - },  
1503 - data: bizTree,  
1504 - on: function (data) {  
1505 - }  
1506 - }, xmSelectParams));  
1507 - } else {  
1508 - layer.msg('获取业务失败', {icon: 2});  
1509 - }  
1510 - },  
1511 - error: function () {  
1512 - layer.msg('获取业务失败', {icon: 2});  
1513 - }  
1514 - },);  
1515 - },  
1516 - getTingyunToken: function () {  
1517 - var token = '';  
1518 -  
1519 - var api_key = '';  
1520 - var secret_key = '';  
1521 - $.ajax({  
1522 - url: '/config/getConfig',  
1523 - data: {  
1524 - configName: 'config.tingyun'  
1525 - },  
1526 - async: false,  
1527 - success(response) {  
1528 - api_key = response.api_key;  
1529 - secret_key = response.secret_key;  
1530 - }  
1531 - });  
1532 - var timestamp = Date.now();  
1533 - var auth = md5(`api_key=${api_key}&secret_key=${secret_key}&timestamp=${timestamp}`);  
1534 -  
1535 - var formData = new FormData();  
1536 - formData.append("api_key", api_key);  
1537 - formData.append("auth", auth);  
1538 - formData.append("timestamp", timestamp);  
1539 - $.ajax({  
1540 - url: sessionStorage.getItem('tingyun') + '/auth-api/auth/token',  
1541 - type: 'POST',  
1542 - processData: false,  
1543 - mimeType: "multipart/form-data",  
1544 - contentType: false,  
1545 - async: false,  
1546 - data: formData,  
1547 - success(response) {  
1548 - response = JSON.parse(response)  
1549 - if (response && response.code == '200') {  
1550 - token = 'Bearer ' + response.access_token;  
1551 - }  
1552 - }  
1553 - });  
1554 - sessionStorage.setItem("tingyun_token", token);  
1555 - return token;  
1556 - },  
1557 - tingyunReq: function (ajaxParams) {  
1558 - var response = {  
1559 - success: false,  
1560 - msg: '',  
1561 - data: []  
1562 - }  
1563 - var token = sessionStorage.getItem("tingyun_token");  
1564 - if (!token) {  
1565 - token = obj.getTingyunToken();  
1566 - }  
1567 - if (!token) {  
1568 - response.msg = '获取token失败!';  
1569 - ajaxParams.success(response);  
1570 - return;  
1571 - }  
1572 - var successFun = ajaxParams.success;  
1573 - var errorFun = ajaxParams.error;  
1574 - delete ajaxParams.success;  
1575 - delete ajaxParams.error;  
1576 - var failCount = 2;  
1577 - var res = null;  
1578 - var err = null;  
1579 - do {  
1580 - try {  
1581 - $.ajax(Object.assign({  
1582 - url: '',  
1583 - headers: {  
1584 - Authorization: token  
1585 - },  
1586 - async: false,  
1587 - success(response) {  
1588 - res = response;  
1589 - if (response && response.code.toString().startsWith('401')) {  
1590 - throw new Error();  
1591 - }  
1592 - },  
1593 - error(error) {  
1594 - err = error;  
1595 - throw new Error();  
1596 - }  
1597 - }, ajaxParams));  
1598 - } catch (e) {  
1599 - failCount--;  
1600 - if (failCount) {  
1601 - token = obj.getTingyunToken();  
1602 - }  
1603 - continue;  
1604 - }  
1605 - failCount = 0;  
1606 - } while (failCount)  
1607 - if (res) {  
1608 - successFun(res);  
1609 - } else {  
1610 - errorFun();  
1611 - }  
1612 - },  
1613 - //音频播放  
1614 - audioPlayer: function (url) {  
1615 - var audio = document.createElement('audio')  
1616 - if (audio.canPlayType) {  
1617 - var element = document.createElement('source')  
1618 - element.setAttribute('src', url)  
1619 - element.setAttribute('type', 'audio/mpeg')  
1620 - audio.appendChild(element)  
1621 - audio.load()  
1622 - audio.muted = true;  
1623 - audio.playclip = function () {  
1624 - audio.pause();  
1625 - audio.currentTime = 0;  
1626 - audio.play();  
1627 - }  
1628 - return audio  
1629 - }  
1630 - },  
1631 -  
1632 - /**  
1633 - * 导出数据至excel 可以修改sheet  
1634 - *  
1635 - * @return null  
1636 - * @author 徐毫杰  
1637 - * @date 2021/08/01  
1638 - * @param title 导出excel文件名  
1639 - * @param headList 导出excel列头  
1640 - * @param rowList 导出excel数据  
1641 - * @param sheet 导出excel sheet页  
1642 - */  
1643 - exportDataExcel: function (title, headList, rowList, sheetName) {  
1644 - rowList.unshift(headList);  
1645 - var sheet = XLSX.utils.aoa_to_sheet(rowList);  
1646 - openDownloadDialog(sheet2blob(sheet, sheetName), title + '.xlsx');  
1647 - },  
1648 -  
1649 - /**  
1650 - * @description 根据用户资源权限或、业务权限、资源类型权限获取详情页展示页签(优先度由高到低)  
1651 - * @author XuHaoJie  
1652 - * @date 2021/9/23 11:41  
1653 - */  
1654 - getShowType: function (resId, username) {  
1655 - //默认查出全部  
1656 - var value = 'all';  
1657 - //查找用户资源权限  
1658 - admin.req({  
1659 - url: this.domainName + '/api-web/manage/resource/getShowType?resId=' + resId + '&username=' + username,  
1660 - async: false,  
1661 - success: function (response) {  
1662 - if (response && response.success) {  
1663 - value = response.str;  
1664 - }  
1665 - },  
1666 - error: function () {  
1667 - layer.msg('获取用户权限失败', {icon: 2});  
1668 - }  
1669 - });  
1670 - return value;  
1671 - },  
1672 -  
1673 - };  
1674 -  
1675 - //通用的打开下载对话框方法,没有测试过具体兼容性  
1676 - //url 下载地址,也可以是一个blob对象,必选  
1677 - //saveName 保存文件名,可选  
1678 - function openDownloadDialog(url, saveName) {  
1679 - if (typeof url == 'object' && url instanceof Blob) {  
1680 - url = URL.createObjectURL(url); // 创建blob地址  
1681 - }  
1682 - var aLink = document.createElement('a');  
1683 - aLink.href = url;  
1684 - aLink.download = saveName || ''; // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效  
1685 - var event;  
1686 - if (window.MouseEvent) event = new MouseEvent('click');  
1687 - else {  
1688 - event = document.createEvent('MouseEvents');  
1689 - event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);  
1690 - }  
1691 - aLink.dispatchEvent(event);  
1692 - }  
1693 -  
1694 - // 将一个sheet转成最终的excel文件的blob对象,然后利用URL.createObjectURL下载  
1695 - function sheet2blob(sheet, sheetName) {  
1696 - sheetName = sheetName || 'sheet1';  
1697 - var workbook = {  
1698 - SheetNames: [sheetName],  
1699 - Sheets: {}  
1700 - };  
1701 - workbook.Sheets[sheetName] = sheet;  
1702 - // 生成excel的配置项  
1703 - var wopts = {  
1704 - bookType: 'xlsx', // 要生成的文件类型  
1705 - bookSST: false, // 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性  
1706 - type: 'binary'  
1707 - };  
1708 - var wbout = XLSX.write(workbook, wopts);  
1709 - var blob = new Blob([s2ab(wbout)], {type: "application/octet-stream"});  
1710 -  
1711 - // 字符串转ArrayBuffer  
1712 - function s2ab(s) {  
1713 - var buf = new ArrayBuffer(s.length);  
1714 - var view = new Uint8Array(buf);  
1715 - for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;  
1716 - return buf;  
1717 - }  
1718 -  
1719 - return blob;  
1720 - }  
1721 -  
1722 - //退出  
1723 - admin.events.logout = function () {  
1724 - var logoutIdx = layer.confirm('确定退出登录?', function () {  
1725 - admin.exit();  
1726 - layer.close(logoutIdx);  
1727 - });  
1728 - };  
1729 - //菜单折叠事件  
1730 - admin.events.closeMenu = function () {  
1731 - admin.sideFlexible();  
1732 - };  
1733 -  
1734 - //监听F5刷新  
1735 - $(document).keydown(function (e) {  
1736 - e = e || window.event;  
1737 - if ((e.ctrlKey && e.keyCode == 82) || //ctrl+R  
1738 - e.keyCode == 116) {//F5刷新  
1739 -  
1740 - //获取首页  
1741 - var firstTab = $('.layui-tab-title').children().first().attr('lay-id');  
1742 -  
1743 - if (firstTab === '/index/' || firstTab === '/') {  
1744 -  
1745 - location.hash = "/";  
1746 - } else {  
1747 - //刷新后跳转到首页(用户默认首页)  
1748 - location.hash = firstTab;  
1749 - }  
1750 -  
1751 - if ($.isFunction(admin.closeAllTabs)) {  
1752 - admin.closeAllTabs();  
1753 - }  
1754 -  
1755 - return false;  
1756 - }  
1757 - });  
1758 -  
1759 - //检索条件区域收缩事件  
1760 - $("a.search_expend_icon").on("click", function () {  
1761 - if ($(this).hasClass("expend")) {  
1762 - $(this).parent().css("height", "auto")  
1763 - $(".layui-status .layui-form-item").slideDown(300, 'linear');  
1764 - } else {  
1765 - $(".layui-status .layui-form-item").not(":eq(0)").slideUp(300, 'linear');  
1766 - }  
1767 - $(this).toggleClass("expend");  
1768 - });  
1769 -  
1770 - //解决layui-table-tips不能点击其他地方关闭问题 joke add 20200420  
1771 - document.onclick = function (event) {  
1772 - //如果页面中有layui-table-tips样式,且点击其他的元素不是layui-table-tips或者点击元素的腹肌不是layui-table-tips(资源名称需要判定父级)  
1773 - if ($('.layui-table-tips').length > 0 && event.target.className.indexOf('layui-table-tips') == -1 && event.target.parentNode.className.indexOf('layui-table-tips') == -1) {  
1774 - $('.layui-table-tips-c').click();  
1775 - }  
1776 - };  
1777 -  
1778 - //自动化巡检系统  
1779 - admin.events.inspectionsys = function () {  
1780 - var accessToken = '';  
1781 - layui.use(['sessions', 'common'], function () {  
1782 - var sessions = layui.sessions;  
1783 - accessToken = sessions.getToken()['access_token'];  
1784 - });  
1785 - var url = obj.domainInspectionURI + "/start/index.html#/access_token=" + accessToken;  
1786 - window.open(url);  
1787 - }  
1788 - // 资产管理系统  
1789 - admin.events.assetsmanage = function () {  
1790 - var accessToken = '';  
1791 - layui.use(['sessions', 'common'], function () {  
1792 - var sessions = layui.sessions;  
1793 - accessToken = sessions.getToken()['access_token'];  
1794 - });  
1795 - var url = obj.domainAssetsManage + "/ITAM/index.jsp?access_token=" + accessToken;  
1796 - window.open(url);  
1797 - };  
1798 -  
1799 - // ip管理系统  
1800 - admin.events.ipmanage = function () {  
1801 - var accessToken = '';  
1802 - layui.use(['sessions', 'common'], function () {  
1803 - var sessions = layui.sessions;  
1804 - accessToken = sessions.getToken()['access_token'];  
1805 - });  
1806 - var url = obj.domainIpManage + "?access_token=" + accessToken;  
1807 - window.open(url);  
1808 - };  
1809 -  
1810 - // 科来系统  
1811 - admin.events.kelai = function () {  
1812 - var accessToken = '';  
1813 - layui.use(['sessions', 'common'], function () {  
1814 - var sessions = layui.sessions;  
1815 - accessToken = sessions.getToken()['access_token'];  
1816 - });  
1817 - //查询科来系统账号及密码  
1818 - admin.req({  
1819 - url: obj.domainName + '/api-web/userRefSystem/getByUsernameAndSystem',  
1820 - type: "GET",  
1821 - dataType: "json",  
1822 - data: {  
1823 - username: localStorage.getItem("lgn"),  
1824 - refSystem: 'kelai'  
1825 - },  
1826 - success: function (res) {  
1827 - if (res && res.success && res.object) {  
1828 - var url = obj.kelaiTargetUrl;  
1829 - url = url.replace('{USERNAME}', res.object.account).replace('{PASSWORD}', obj.Base64.decode(res.object.password))  
1830 - window.open(url);  
1831 - } else {  
1832 - layer.alert('请先绑定科来账号');  
1833 - }  
1834 - }  
1835 - })  
1836 - };  
1837 -  
1838 - //第三方系统账号绑定 joke add 20210525  
1839 - admin.events.setAccount = function () {  
1840 - view('data-setting-account').render('template/user/accountSet').then(function (res) {  
1841 - layer.open({  
1842 - title: ['第三方账号绑定', 'font-size:18px;'],  
1843 - type: 1,  
1844 - area: ['450px', '300px'],  
1845 - content: res.body  
1846 - });  
1847 - });  
1848 - };  
1849 -  
1850 - /**  
1851 - * 打开第三方系统界面  
1852 - * <p>  
1853 - * 作者: Wang  
1854 - * 时间:2022/2/9 17:10  
1855 - */  
1856 - admin.events.openOtherSystem = function () {  
1857 - let code = $(this).attr("data-code");  
1858 - if (code) {  
1859 - var isHttp = function (str) {  
1860 - var RegUrl = new RegExp();  
1861 - RegUrl.compile("^http|https+://[A-Za-z0-9-_]+\\.[A-Za-z0-9-_%&\?\/.=]+$");  
1862 - if (!RegUrl.test(str)) {  
1863 - return false;  
1864 - }  
1865 - return true;  
1866 - }  
1867 -  
1868 - if (isHttp(code)) {  
1869 - var accessToken = '';  
1870 - layui.use(['sessions', 'common'], function () {  
1871 - var sessions = layui.sessions;  
1872 - accessToken = sessions.getToken()['access_token'];  
1873 - });  
1874 - window.open(`${code}?access_token=${accessToken}`);  
1875 - }  
1876 - admin.events[code].call();  
1877 - }  
1878 - }  
1879 -  
1880 - //监听浏览器窗口变化  
1881 - $(window).resize(function () { //当浏览器大小变化时  
1882 - resizePageWidth();  
1883 - });  
1884 -  
1885 - function resizePageWidth() {  
1886 - var pagewidth = $('.layui-body').width() - 40;  
1887 - $(".layui-table-page").css({width: pagewidth + "px"});  
1888 - };  
1889 - //修改密码 joke add 20210413  
1890 - admin.events.updtpswd = function () {  
1891 - view('data-setting-pwd').render('template/user/password').then(function (res) {  
1892 - layer.open({  
1893 - title: ['修改密码', 'font-size:18px;'],  
1894 - type: 1,  
1895 - area: ['450px', '300px'],  
1896 - content: res.body  
1897 - });  
1898 - });  
1899 - };  
1900 - //修改基本信息 joke add 20211206  
1901 - admin.events.changeInfo = function () {  
1902 - obj.openWin('baseconfig/user/userChange', '个人信息修改', {  
1903 - id: sessionStorage.getItem('user_id'),  
1904 - type: 'userChange'  
1905 - }, ['保存', '取消'], function f() {  
1906 - $("#user_form_save_id").trigger("click");  
1907 - }, null, ['60%', '45%']);  
1908 - };  
1909 -  
1910 - // 监听拓扑iframe事件  
1911 - window.onmessage = function (messageEvent) {  
1912 - if (messageEvent.data.type === 'function') {  
1913 - // 如果是执行方法  
1914 - var result = eval(messageEvent.data.evalParam);  
1915 - }  
1916 - }  
1917 -  
1918 - //全局搜索框回车事件  
1919 - $('#allSearchKeywords').keydown(function (e) {  
1920 - if (e.keyCode === 13) {  
1921 - $('[layadmin-event="globalSearch"]').trigger("click");  
1922 - }  
1923 - })  
1924 - // 日期个格式化  
1925 - Date.prototype.format = function (fmt, hoursTime) {  
1926 - //12小时制和24小时制  
1927 - var hours = 12;  
1928 - if (hoursTime == 24) {  
1929 - hours = 24;  
1930 - }  
1931 - var o = {  
1932 - "M+": this.getMonth() + 1, //月份  
1933 - "d+": this.getDate(), //日  
1934 - "h+": this.getHours() % hours == 0 ? hours : this.getHours() % hours, //小时  
1935 - "H+": this.getHours(), //小时  
1936 - "m+": this.getMinutes(), //分  
1937 - "s+": this.getSeconds(), //秒  
1938 - "q+": Math.floor((this.getMonth() + 3) / 3), //季度  
1939 - "S": this.getMilliseconds() //毫秒  
1940 - };  
1941 - if (/(y+)/.test(fmt))  
1942 - fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));  
1943 - for (var k in o)  
1944 - if (new RegExp("(" + k + ")").test(fmt))  
1945 - fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));  
1946 - return fmt;  
1947 - }  
1948 -  
1949 - // 表单验证  
1950 - form.verify({  
1951 - json: function (d) {  
1952 - try {  
1953 - if (d) {  
1954 - var obj = JSON.parse(d);  
1955 - }  
1956 - } catch (e) {  
1957 - return "请输入格式正确的JSON"  
1958 - }  
1959 - }  
1960 - });  
1961 - //对外暴露的接口  
1962 - exports('common', obj);  
1963 -});  
1 -<!--默认布局-->  
2 -<div class="layui-layout layui-layout-admin">  
3 - <script>  
4 - var show = location.search.substr(1).split("&")[0].split("=")[1];  
5 - if (show === '0') {  
6 - document.querySelector("body").classList.add("layout-nav-hide");  
7 - }  
8 -  
9 - var editFlag = location.search.substr(1).split("&")[1];  
10 - if (editFlag) {  
11 - var name = editFlag.split("=")[0];  
12 - var val = editFlag.split("=")[1] == "true" ? true : false;  
13 - if (name === "editFlag") {  
14 - localStorage.setItem("editFlag", val);  
15 - }  
16 - }  
17 - var menuIsopen = 'false';  
18 - layui.use(['jquery'], function () {  
19 - var $ = layui.jquery;  
20 - // 读取配置文件  
21 - $.ajax({  
22 - url: sessionStorage.getItem('domainName') + '/api-web/sysConf/getByCode',  
23 - async: false,  
24 - data: {  
25 - code: 'view_menu_isopen',  
26 - access_token: localStorage.getItem('access_token')  
27 - },  
28 - success(response) {  
29 - if (response && response.success && response.object) {  
30 - menuIsopen = response.object.value;  
31 - }  
32 - }  
33 - });  
34 - });  
35 -  
36 -  
37 - </script>  
38 - <div class="layui-header">  
39 - <!-- 头部区域 -->  
40 - <ul class="layui-nav layui-layout-left">  
41 - <li class="layui-nav-item layadmin-flexible" lay-unselect>  
42 - <a href="javascript:;" layadmin-event="flexible" title="侧边伸缩">  
43 - <i class="layui-icon layui-icon-shrink-right" id="LAY_app_flexible"></i>  
44 - </a>  
45 - </li>  
46 - <!--判定是否有daping角色,如果有则显示该菜单 joke add 20211203-->  
47 - <script lay-url="{{sessionStorage.getItem('domainName')}}/api-user/users/checkHasRole?roleCode=daping"  
48 - template  
49 - type="text/html">  
50 - {{# if(d.count > 0){ }}  
51 - <li class="layui-nav-item" lay-tips="展示大屏">  
52 - <a href="javascript:;" layadmin-event="toBigScreen"><img src="/src/style/img/icon-daping.png"  
53 - style="width: 16px;height: 16px"></a>  
54 - </li>  
55 - {{# } }}  
56 - </script>  
57 -  
58 - <script lay-url="{{sessionStorage.getItem('domainName')}}/api-web/sxview/getbizListByUser?access_token={{localStorage.getItem('access_token')}}"  
59 - template  
60 - type="text/html">  
61 -  
62 - {{# if(d.data.length>0){ }}  
63 - <li class="layui-nav-item">  
64 -  
65 - <div id="toYTHView_div">  
66 - <dd layadmin-event="toYTHViewScreen" title="一体化监控台"><a><img  
67 - src="/src/style/img/icon-yitihuadaping.png" style="width: 16px;height: 16px"></a></dd>  
68 - </div>  
69 - </li>  
70 -  
71 - {{# } }}  
72 - </script>  
73 -  
74 -  
75 - <li class="layui-nav-item" lay-unselect>  
76 - <a href="javascript:;" layadmin-event="refresh" title="刷新">  
77 - <i class="layui-icon layui-icon-refresh-3"></i>  
78 - </a>  
79 - </li>  
80 -  
81 - </ul>  
82 - <img class="logo" src="/src/style/img/logo.png">  
83 - <ul class="layui-nav layui-layout-right" lay-filter="layadmin-layout-right">  
84 - <!--搜索框检索-->  
85 - <!-- <li class="layui-nav-item layui-hide-xs">-->  
86 - <!-- <input type="text" class="layui-input" id="allSearchKeywords" style="margin-top: 6px">-->  
87 - <!-- </li>-->  
88 - <li class="layui-nav-item layui-hide-xs" lay-tips="全局搜索">  
89 - <a href="javascript:;" layadmin-event="globalSearch"><i class="layui-icon layui-icon-search"></i></a>  
90 - </li>  
91 - <li class="layui-nav-item layui-show-xs-inline-block layui-hide-sm" lay-unselect>  
92 - <a href="javascript:;" layadmin-event="more"><i class="layui-icon layui-icon-more-vertical"></i></a>  
93 - </li>  
94 - <!-- <li class="layui-nav-item layui-hide-xs" lay-unselect>  
95 - <a href="javascript:;" layadmin-event="theme">  
96 - <i class="layui-icon layui-icon-theme"></i>  
97 - </a>  
98 - </li>-->  
99 - <li class="layui-nav-item" id="systems-select" lay-unselect>  
100 - <script lay-done="layui.element.render('nav', 'layadmin-systems');"  
101 - lay-url="{{sessionStorage.getItem('domainName')}}/api-web/manage/ddic/list?ddicCategory=systems"  
102 - template  
103 - type="text/html">  
104 - <a href="javascript:;" title="第三方系统">  
105 - <span class="layui-icon layui-icon-slider"></span>  
106 - </a>  
107 - <dl class="layui-nav-child">  
108 - {{# if(d.data && d.data.length == 0){ }}  
109 - {{# var sysObj = document.querySelector('#systems-select'); }}  
110 - {{# sysObj != null ? sysObj.remove() :''; }}  
111 - {{# } }}  
112 - {{# layui.each(d.data, function(index, item){ }}  
113 - <dd style="text-align: left;" lay-filter="layadmin-systems">  
114 - <a href="javascript:;" layadmin-event="openOtherSystem" data-code="{{item.ddicCode}}"  
115 - title="{{item.ddicName}}">  
116 - <i class="iconfont icon-tree {{ item.ddicDesc }}"/>&nbsp;&nbsp;{{ item.ddicName }}  
117 - </a>  
118 - </dd>  
119 - {{# }); }}  
120 -  
121 - </dl>  
122 - </script>  
123 - </li>  
124 - <li class="layui-nav-item layui-hide-xs" lay-unselect>  
125 - <a href="javascript:;" layadmin-event="fullscreen">  
126 - <i class="layui-icon layui-icon-screen-full"></i>  
127 - </a>  
128 - </li>  
129 - <!-- 报表通知统计 -->  
130 - <li class="layui-nav-item" lay-unselect>  
131 - <script lay-url="{{sessionStorage.getItem('domainName')}}/api-web/home/messageRemind" template  
132 - type="text/html">  
133 - <a href="javascript:;" class="notice_msg">  
134 - <i class="layui-icon layui-icon-notice"></i><span>{{d.map==null? 0 : d.map.totalCountByUser}}</span>  
135 - </a>  
136 - <dl class="layui-nav-child">  
137 - <dd><a href="javascript:;" lay-href="/alarm/activewarning">活动告警:{{d.map==null? 0 :  
138 - d.map.totalCountByUser}}</a></dd>  
139 - <!-- <hr>-->  
140 - <!-- <dd><a href="javascript:;" lay-href="/iframe/insp/monitor/flag=0">未处理报表:{{d.map==null? 0 : d.map.statusCountByUser}}</a></dd>-->  
141 - <!-- <hr>-->  
142 - <!-- <dd><a href="javascript:;" lay-href="/iframe/insp/workview/read=0/type=1">工作汇报未读:{{d.map==null? 0 : d.map.notReadCountByUser}}</a></dd>-->  
143 - <!-- <hr>-->  
144 - <!-- <dd><a href="javascript:;" lay-href="/iframe/insp/notice/t=day">今日通知:{{d.map==null? 0 : d.map.countByUserAndToday}}</a></dd>-->  
145 - </dl>  
146 - </script>  
147 - </li>  
148 -  
149 - <li class="layui-nav-item" lay-unselect>  
150 - <script lay-done="layui.element.render('nav', 'layadmin-layout-right');"  
151 - lay-url="{{sessionStorage.getItem('domainName')}}/api-user/users/getUserByToken"  
152 - template  
153 - type="text/html">  
154 - <a href="javascript:;">  
155 - 欢迎&nbsp;&nbsp;<cite style="color: #1E9FFF" user-info>{{d.object.nickname}}</cite>  
156 - </a>  
157 - {{#  
158 - var roles = '';  
159 - layui.each(d.object.sysRoles, function(idx, role){  
160 - roles += role.code+",";  
161 - });  
162 - }}  
163 - <li><input type="hidden" id="user_roles" value="{{roles}}"></li>  
164 - <dl class="layui-nav-child">  
165 - <dd layadmin-event="updtpswd" style="text-align: center;"><a>修改密码</a></dd>  
166 - <dd user-info layadmin-event="changeInfo" style="text-align: center;"><a>修改信息</a></dd>  
167 - <dd layadmin-event="logout" style="text-align: center;"><a>退出</a></dd>  
168 - </dl>  
169 - </script>  
170 - </li>  
171 -  
172 - <!-- <script type="text/html" template lay-url="{{sessionStorage.getItem('domainName')}}/api-user/users/getUserByToken"-->  
173 - <!-- lay-done="layui.element.render('nav', 'layadmin-text-name');">-->  
174 - <!-- <li class="layui-nav-item layui-hide-xs" lay-unselect lay-filter="layadmin-text-name">-->  
175 - <!-- <a href="javascript:;" style="text-align: center;" >欢迎&nbsp;&nbsp;<b id="user-name" lay-tips="点击退出" layadmin-event="logout" style="color: #3d9fe6">{{d.object.nickname }}</b></a>-->  
176 - <!-- </li>-->  
177 - <!-- </script>-->  
178 - </ul>  
179 - </div>  
180 -  
181 - <!-- 侧边菜单 -->  
182 - <!-- 先获取默认菜单拼接 d.str 返回数据格式 modeleid#path-->  
183 - <!-- 如果配置默认首页,则给默认首页,否则给工作台(moduleid为work,path为work/index)-->  
184 -  
185 - <div class="layui-side layui-side-menu">  
186 - <div class="layui-side-scroll">  
187 - <script id="TPL_layout" lay-done="layui.element.render('nav', 'layadmin-system-side-menu');"  
188 - lay-url="{{sessionStorage.getItem('domainName')}}/api-user/menus/current?type=1"  
189 - template type="text/html">  
190 -  
191 - {{#  
192 - var dataName = layui.setter.response.dataName;  
193 - var fisthref = "/index";  
194 - var defaultMenu = d.str;  
195 - var defaultModuleid = '';  
196 - var defaultPath = '';  
197 - if(defaultMenu && defaultMenu != ''){  
198 - defaultModuleid = d.str.split('#')[0];  
199 - defaultPath = d.str.split('#')[1];  
200 - fisthref = defaultPath;  
201 - }  
202 - }}  
203 -  
204 - <div class="layui-logo" lay-href="{{fisthref}}">  
205 - <span>{{ layui.setter.name || 'layuiAdmin' }}</span>  
206 - </div>  
207 -  
208 - <ul class="layui-nav layui-nav-tree" lay-shrink="all" id="LAY-system-side-menu"  
209 - lay-filter="layadmin-system-side-menu">  
210 - {{#  
211 - var show = location.search.substr(1).split("&")[0].split("=")[1];  
212 - if(show == '1') window.history.pushState({} ,'' ,'#');  
213 - if(show != '0') location.hash = "/";  
214 -  
215 - var path = layui.router().path  
216 - ,pathURL = layui.admin.correctRouter(path.join('/'))  
217 - ,dataName = layui.setter.response.dataName;  
218 - var fistModuleid = '';  
219 - if(d && d[dataName].length>0){  
220 - fistModuleid = d[dataName][0].moduleid;  
221 - }  
222 -  
223 - layui.each(d[dataName], function(index, item){  
224 - var isselectd = '';  
225 - var isSelectedModuleid = '';  
226 - if(defaultModuleid != '' || item.moduleid != ''){  
227 - if(item.moduleid == defaultModuleid){  
228 - isselectd = "layui-this";  
229 - }else{  
230 - isselectd = "";  
231 - }  
232 - }else {  
233 - if(!defaultModuleid || defaultModuleid == ''){  
234 - if(index = 0){  
235 - isselectd = "layui-this";  
236 - }  
237 - }else{  
238 - isselectd = "";  
239 - }  
240 - }  
241 - var hasChildren = typeof item.subMenus === 'object' && item.subMenus && item.subMenus.length > 0  
242 - ,classSelected = function(){  
243 - var match = path[0] == item.moduleid || (index == 0 && !path[0]) || (item.path && pathURL ==  
244 - layui.admin.correctRouter(item.path)) || item.spread;  
245 - if(match){  
246 - return hasChildren ? 'layui-nav-itemed' : 'layui-nav-itemed';  
247 - }  
248 - return '';  
249 - }  
250 - ,url = (item.path && typeof item.path === 'string') ? item.path : item.moduleid;  
251 - var closeMenuEvent = '';  
252 - if(item.moduleid == 'biz' || item.moduleid == 'res'){ closeMenuEvent = 'closeMenu'}  
253 - }}  
254 -  
255 - <li data-name="{{ item.moduleid || '' }}" data-jump="{{ item.path || '' }}"  
256 - class="layui-nav-item {{ menuIsopen == 'true' ? 'layui-nav-itemed' : '' }} {{isselectd}}">  
257 -  
258 - {{# if(item.moduleid == 'cmdbsys' || item.moduleid == 'sxview' || item.moduleid == 'dpsys'){ }}  
259 - <a href="javascript:;" layadmin-event="{{item.moduleid}}" lay-tips="{{ item.name  
260 - }}" lay-direction="2" lay-href-type="menu">  
261 - <i class="layui-icon {{ item.css }}"></i>  
262 - <cite>{{ item.name }}</cite>  
263 - </a>  
264 - {{# } }}  
265 - {{# if(item.moduleid != 'cmdbsys' && item.moduleid != 'sxview' && item.moduleid != 'dpsys'){ }}  
266 - <a href="javascript:;" {{ hasChildren ? '' : 'lay-href="'+ url +'"' }}  
267 - layadmin-event="{{closeMenuEvent}}" lay-tips="{{ item.name  
268 - }}" lay-direction="2">  
269 - <i class="layui-icon {{ item.css }}"></i>  
270 - <cite>{{ item.name }}</cite>  
271 - </a>  
272 -  
273 - {{# } }}  
274 -  
275 -  
276 - {{# if(hasChildren){ }}  
277 - <dl class="layui-nav-child">  
278 - {{# layui.each(item.subMenus, function(index2, item2){  
279 - if(item2.moduleid && item2.moduleid == defaultModuleid){  
280 - isselectd = "layui-this";  
281 - }else{  
282 - isselectd = "";  
283 - }  
284 - var hasChildren2 = typeof item2.subMenus == 'object' && item2.subMenus &&  
285 - item2.subMenus.length > 0  
286 - ,classSelected2 = function(){  
287 - var match = (path[0] == item.moduleid && path[1] == item2.moduleid) || (item2.path &&  
288 - pathURL == layui.admin.correctRouter(item2.path)) || item2.spread;  
289 - return '';  
290 - }  
291 - ,url2 = (item2.path && typeof item2.path === 'string')  
292 - ? item2.path  
293 - : [item.moduleid, item2.moduleid, ''].join('/');  
294 - }}  
295 - <dd data-name="{{ item2.moduleid || '' }}" data-jump="{{ item2.path || '' }}"  
296 - class="layui-nav-item {{ classSelected2() }} {{isselectd}}"  
297 - >  
298 - {{# if(item2.menuDesc.indexOf('第三方') == '-1') {}}  
299 - <a href="javascript:;" {{ hasChildren2 ? '' : 'lay-href="'+ url2 +'"' }}  
300 - lay-href-type="menu">{{ item2.name }}</a>  
301 - {{# }else{ }}  
302 - <a href="javascript:;" {{ hasChildren2 ? '' : 'data-url="'+ url2 +'"  
303 - layadmin-event="IntegratedEntrance"' }} data-moduleid="{{item2.moduleid}}"  
304 - lay-href-type="menu">{{ item2.name }}</a>  
305 - {{# } }}  
306 - {{# if(hasChildren2){ }}  
307 - <dl class="layui-nav-child {{}}">  
308 - {{# layui.each(item2.subMenus, function(index3, item3){  
309 - var match = (path[0] == item.moduleid && path[1] == item2.moduleid && path[2] ==  
310 - item3.moduleid)  
311 - || (item3.path && pathURL == layui.admin.correctRouter(item3.path))  
312 - ,url3 = (item3.path && typeof item3.path === 'string')  
313 - ? item3.path  
314 - : [item.moduleid, item2.moduleid, item3.moduleid].join('/')  
315 - }}  
316 - <dd data-name="{{ item3.moduleid || '' }}" data-jump="{{ item3.path || '' }}">  
317 - {{# if(item2.menuDesc.indexOf('第三方') == '-1') {}}  
318 - <a href="javascript:;" lay-href="{{ url3 }}" {{ item3.iframe ?  
319 - 'lay-iframe="true"' : ''}} lay-href-type="menu">{{ item3.name }}</a>  
320 - {{# }else{ }}  
321 - <a href="javascript:;" data-url="{{ url3 }}" layadmin-event="IntegratedEntrance"  
322 - data-moduleid="{{item3.moduleid}}" lay-href-type="menu">{{ item3.name }}</a>  
323 - {{# } }}  
324 - </dd>  
325 - {{# }); }}  
326 - </dl>  
327 - {{# } }}  
328 - </dd>  
329 - {{# }); }}  
330 - </dl>  
331 - {{# } }}  
332 - </li>  
333 - {{# }); }}  
334 - </ul>  
335 - </script>  
336 - </div>  
337 - <div class="right-bottom-tips"></div>  
338 - </div>  
339 -  
340 - <!-- 页面标签 -->  
341 - <script lay-done="layui.element.render('nav', 'layadmin-pagetabs-nav')"  
342 - lay-url="{{sessionStorage.getItem('domainName')}}/api-user/menus/findSettingDefaultMenus"  
343 - template  
344 - type="text/html">  
345 - <div class="layadmin-pagetabs" id="LAY_app_tabs">  
346 - <div class="layui-icon layadmin-tabs-control layui-icon-prev" layadmin-event="leftPage"></div>  
347 - <div class="layui-icon layadmin-tabs-control layui-icon-next" layadmin-event="rightPage"></div>  
348 - <div class="layui-icon layadmin-tabs-control layui-icon-down">  
349 -  
350 - <ul class="layui-nav layadmin-tabs-select" lay-filter="layadmin-pagetabs-nav">  
351 - <li class="layui-nav-item" lay-unselect>  
352 - <a href="javascript:;"></a>  
353 - <dl class="layui-nav-child layui-anim-fadein">  
354 - <dd layadmin-event="closeThisTabs"><a href="javascript:;">关闭当前标签页</a></dd>  
355 - <dd layadmin-event="closeOtherTabs"><a href="javascript:;">关闭其它标签页</a></dd>  
356 - <dd layadmin-event="closeAllTabs"><a href="javascript:;">关闭全部标签页</a></dd>  
357 - </dl>  
358 - </li>  
359 - </ul>  
360 - </div>  
361 - <!-- <script type="text/html" template lay-url="{{sessionStorage.getItem('domainName')}}/api-user/users/getUserByToken">-->  
362 -  
363 - <!-- <div id="toYTHView_div" style="padding:0 10px;float: left;">-->  
364 - <!-- <dd layadmin-event="toYTHViewScreen" title="一体化控制台"><a><img src="/src/style/img/icon-yitihuadaping.png" style="width: 16px;height: 16px"></a></dd>-->  
365 - <!-- </div>-->  
366 -  
367 - <div class="layui-tab" lay-unauto lay-allowClose="true" lay-filter="layadmin-layout-tabs">  
368 -  
369 - <ul class="layui-tab-title" id="LAY_app_tabsheader">  
370 -  
371 - {{# if(d.data.length >= 1 ){ }}  
372 - {{# if(d.data[0].moduleid == 'index'){ }}  
373 - <li lay-id="/"><i class="layui-icon layui-icon-home"></i></li>  
374 - {{# } }}  
375 - {{# if(d.data[0].moduleid != 'index'){ }}  
376 - <li lay-id="/{{d.data[0].moduleid}}/" lay-attr="/{{d.data[0].moduleid}}/"><i  
377 - class="layui-icon layui-icon-home"></i></li>  
378 - {{# } }}  
379 - {{# } }}  
380 - {{# if(d.data.length == 0){ }}  
381 - <li lay-id="/"><i class="layui-icon layui-icon-home"></i></li>  
382 - {{# } }}  
383 - </ul>  
384 -  
385 -  
386 - </div>  
387 - </div>  
388 - </script>  
389 -  
390 -  
391 - <!-- 主体内容 -->  
392 - <div class="layui-body" id="LAY_app_body">  
393 - <!-- 单页模式接入-->  
394 - <div class="layadmin-tabsbody-item layui-show"></div>  
395 - </div>  
396 -  
397 - <!-- 辅助元素,一般用于移动设备下遮罩 -->  
398 - <div class="layadmin-body-shade" layadmin-event="shade"></div>  
399 -</div>  
400 -  
401 -<!--告警操作记录-->  
402 -<script id="warnViewWinTpl" type="text/html">  
403 - <div class="warn-win">  
404 - <div class="warn-win-item">  
405 - <h5>告警确认【{{d.confirm.length}}</h5>  
406 - {{# layui.each(d.confirm, function(index, item){ }}  
407 - <div class="warn-win-item-con">  
408 - <span>{{layui.util.toDateString(item.confirmTime)}}</span>  
409 - <ul>  
410 - <li>备注:{{item.remark}}</li>  
411 - <li>告警确认人:{{item.confirmUserId}}</li>  
412 - <li>紧急程度:{{item.levelName}}</li>  
413 - </ul>  
414 - </div>  
415 - {{# }); }}  
416 - </div>  
417 - <div class="warn-win-item">  
418 - <h5>告警关闭【{{d.close.length}}</h5>  
419 - {{# layui.each(d.close, function(index, item){ }}  
420 - {{# var closeTypeStr = '告警'}}  
421 - {{# if(item.closeType == 1){ closeTypeStr = '通知' } }}  
422 - <div class="warn-win-item-con">  
423 - <span>备注:{{item.remark}}</span>  
424 - <ul>  
425 - <li>告警关闭时间:{{layui.util.toDateString(item.closeTime)}}</li>  
426 - <li>告警关闭人:{{item.closeUserId}}</li>  
427 - <li>关闭范围:{{closeTypeStr}}</li>  
428 - <li>关闭时长:{{item.closeDuration}}小时</li>  
429 - </ul>  
430 - </div>  
431 - {{# }); }}  
432 - </div>  
433 - <div class="warn-win-item">  
434 - <h5>告警恢复【{{d.resume.length}}</h5>  
435 - {{# layui.each(d.resume, function(index, item){ }}  
436 - {{# var resumeTypeStr = '恢复关闭的活动告警'}}  
437 - {{# if(item.resumeType == 1){resumeTypeStr = '恢复历史告警' } }}  
438 - <div class="warn-win-item-con">  
439 - <span>备注:{{item.remark}}</span>  
440 - <ul>  
441 - <li>告警恢复时间:{{layui.util.toDateString(item.resumeTime)}}</li>  
442 - <li>告警恢复人:{{item.resumeUserId}}</li>  
443 - <li>恢复类型:{{resumeTypeStr}}</li>  
444 - </ul>  
445 - </div>  
446 - {{# }); }}  
447 - </div>  
448 - </div>  
449 -</script>  
450 -  
451 -<!--详细页左侧面板-->  
452 -<script id="detailPageLeftPanel" type="text/html">  
453 - <div class="detail-left-panel">  
454 - <a class="detail-left-panel-btn" href="javascript:void(0)"><i class="layui-icon layui-icon-next"></i></a>  
455 - <div class="detail-left-panel-node" style="display: none">  
456 - {{# layui.each(d.map, function(k, v){ }}  
457 - <div class="left-panel-restype">  
458 - <div class="layui-title">{{v[0].reTypeName}}</div>  
459 - <div class="">  
460 - {{# layui.each(v, function(i, e){ }}  
461 - <div class="info-box link"  
462 - data-resid="{{e.targetId}}"  
463 - data-restype="{{e.resType}}"  
464 - data-restypename="{{e.resTypeName}}"  
465 - data-ip="{{e.ip}}"  
466 - data-admin="{{e.admin}}"  
467 - >  
468 - {{e.targetName}}  
469 - </div>  
470 - {{# }); }}  
471 - </div>  
472 - </div>  
473 - {{# }); }}  
474 - {{# if(!Object.keys(d.map).length) { }}  
475 - <div class="left-panel-restype">  
476 - <div class="desc-box">  
477 - 暂无关联关系  
478 - </div>  
479 - </div>  
480 - {{# } }}  
481 - </div>  
482 - </div>  
483 -</script>  
484 -  
485 -<!--下探top30表格展示内容-->  
486 -<script id="detailKpiTableTpl" type="text/html">  
487 - <table class="layui-table" lay-even="" lay-skin="row">  
488 - <colgroup>  
489 - <col width="100">  
490 - <col width="150">  
491 - <col width="180">  
492 - <col width="180">  
493 - </colgroup>  
494 - <thead>  
495 - <tr>  
496 - <th>序号</th>  
497 - <th>进程号</th>  
498 - <th>所属用户</th>  
499 - {{# if(d.kpi == 'KPI7054BC34'){ }}  
500 - <th>使用率</th>  
501 - {{# } }}  
502 - {{# if(d.kpi != 'KPI7054BC34'){ }}  
503 - <th>使用量</th>  
504 - {{# } }}  
505 - </tr>  
506 - </thead>  
507 - <tbody>  
508 - {{# layui.each(d.data, function(index, item){ }}  
509 - <tr>  
510 - <td>{{index + 1}}</td>  
511 - <td>{{item.pid}}</td>  
512 - <td>{{item.username}}</td>  
513 - <td>{{item.usedPercent}}</td>  
514 - <!--<td>{{item.info}}</td>-->  
515 - </tr>  
516 - {{# }); }}  
517 - </tbody>  
518 - </table>  
519 -</script>  
520 -  
521 -<!--corn表达式-->  
522 -<script id="cronHtml" type="text/html">  
523 - <div id="cronContent" style="color:#000000">  
524 - <p style="margin: 10px auto; padding: 0px;">  
525 -   <strong style="margin: 0px; padding: 0px;"><span  
526 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(255, 0, 0);">常用表达式例子</span></strong>  
527 - </p>  
528 - <p style="margin: 10px auto; padding: 0px;">  
529 -   <span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(255, 0, 0);"><span  
530 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);"><span  
531 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 0);">1</span></span><strong  
532 - style="margin: 0px; padding: 0px;"><span  
533 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0/2 * * * * ?</span></strong>&nbsp;&nbsp;</span>&nbsp;表示每2  
534 - 执行任务  
535 - </p>  
536 - <p style="margin: 10px auto; padding: 0px;">  
537 -   <span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(255, 0, 0);"><span  
538 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);"><span  
539 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 0);">1</span></span><strong  
540 - style="margin: 0px; padding: 0px;"><span  
541 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 0/2 * * * ? </span></strong>&nbsp;&nbsp;</span>&nbsp;表示每2分  
542 - 执行任务  
543 - </p>  
544 -  
545 - <p style="margin: 10px auto; padding: 0px;">  
546 -   <span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(255, 0, 0);"><span  
547 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);"><span  
548 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 0);">1</span></span><strong  
549 - style="margin: 0px; padding: 0px;"><span  
550 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 0 2 1 * ?</span></strong>&nbsp;&nbsp;</span>&nbsp;表示在每月的1日的凌晨2点调整任  
551 - </p>  
552 - <p style="margin: 10px auto; padding: 0px;">  
553 -   <span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);"><span  
554 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 0);">2</span></span><strong  
555 - style="margin: 0px; padding: 0px;"><span  
556 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 ? * MON-FRI</span>&nbsp;</strong>&nbsp;  
557 - 表示周一到周五每天上午10:15执行作业  
558 - </p>  
559 - <p style="margin: 10px auto; padding: 0px;">  
560 -   (3<strong style="margin: 0px; padding: 0px;"><span  
561 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 ? 6L 2002-2006</span></strong>&nbsp;&nbsp;  
562 - 表示2002-2006年的每个月的最后一个星期五上午10:15执行作  
563 - </p>  
564 - <p style="margin: 10px auto; padding: 0px;">  
565 -   (4<strong style="margin: 0px; padding: 0px;"><span  
566 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 0 10,14,16 * * ?</span></strong>&nbsp;&nbsp;&nbsp;每天上午10点,下午2点,4&nbsp;  
567 - </p>  
568 - <p style="margin: 10px auto; padding: 0px;">  
569 -   (5<strong style="margin: 0px; padding: 0px;"><span  
570 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 0/30 9-17 * * ?</span></strong>&nbsp;&nbsp;  
571 - 朝九晚五工作时间内每半小时&nbsp;  
572 - </p>  
573 - <p style="margin: 10px auto; padding: 0px;">  
574 -   (6<strong style="margin: 0px; padding: 0px;"><span  
575 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 0 12 ? * WED</span></strong>&nbsp;&nbsp;  
576 - &nbsp;表示每个星期三中午12&nbsp;  
577 - </p>  
578 - <p style="margin: 10px auto; padding: 0px;">  
579 -   (7<strong style="margin: 0px; padding: 0px;"><span  
580 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 0 12 * * ?</span></strong>&nbsp;&nbsp;&nbsp;每天中午12点触发&nbsp;  
581 - </p>  
582 - <p style="margin: 10px auto; padding: 0px;">  
583 -   (8<strong style="margin: 0px; padding: 0px;"><span  
584 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 ? * * &nbsp;</span></strong>&nbsp;&nbsp;每天上午10:15触发&nbsp;  
585 - </p>  
586 - <p style="margin: 10px auto; padding: 0px;">  
587 -   (9<strong style="margin: 0px; padding: 0px;"><span  
588 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 * * ?</span></strong>&nbsp;&nbsp;  
589 - &nbsp; 每天上午10:15触发&nbsp;  
590 - </p>  
591 - <p style="margin: 10px auto; padding: 0px;">  
592 -   (10<strong style="margin: 0px; padding: 0px;"><span  
593 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 * * ?</span>&nbsp;</strong>&nbsp;  
594 - &nbsp;每天上午10:15触发&nbsp;  
595 - </p>  
596 - <p style="margin: 10px auto; padding: 0px;">  
597 -   (11<strong style="margin: 0px; padding: 0px;"><span  
598 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 * * ? 2005</span></strong>&nbsp;&nbsp;  
599 - &nbsp;2005年的每天上午10:15触发&nbsp;  
600 - </p>  
601 - <p style="margin: 10px auto; padding: 0px;">  
602 -   (12<strong style="margin: 0px; padding: 0px;"><span  
603 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 * 14 * * ?</span></strong>&nbsp;&nbsp;  
604 - &nbsp; 在每天下午2点到下午2:59期间的每1分钟触发&nbsp;  
605 - </p>  
606 - <p style="margin: 10px auto; padding: 0px;">  
607 -   (13<strong style="margin: 0px; padding: 0px;"><span  
608 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 0/5 14 * * ?</span></strong>&nbsp;&nbsp;  
609 - &nbsp;在每天下午2点到下午2:55期间的每5分钟触发&nbsp;  
610 - </p>  
611 - <p style="margin: 10px auto; padding: 0px;">  
612 -   (14<strong style="margin: 0px; padding: 0px;"><span  
613 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 0/5 14,18 * * ?</span></strong>&nbsp;&nbsp;  
614 - &nbsp; 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发&nbsp;  
615 - </p>  
616 - <p style="margin: 10px auto; padding: 0px;">  
617 -   (15<strong style="margin: 0px; padding: 0px;"><span  
618 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 0-5 14 * * ?</span>&nbsp;</strong>&nbsp;  
619 - &nbsp;在每天下午2点到下午2:05期间的每1分钟触发&nbsp;  
620 - </p>  
621 - <p style="margin: 10px auto; padding: 0px;">  
622 -   (16<strong style="margin: 0px; padding: 0px;"><span  
623 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 10,44 14 ? 3 WED</span></strong>&nbsp;&nbsp;  
624 - &nbsp;每年三月的星期三的下午2:102:44触发&nbsp;  
625 - </p>  
626 - <p style="margin: 10px auto; padding: 0px;">  
627 -   (17<strong style="margin: 0px; padding: 0px;"><span  
628 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 ? * MON-FRI</span>&nbsp;</strong>&nbsp;  
629 - &nbsp;周一至周五的上午10:15触发&nbsp;  
630 - </p>  
631 - <p style="margin: 10px auto; padding: 0px;">  
632 -   (18<strong style="margin: 0px; padding: 0px;"><span  
633 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 15 * ?</span>&nbsp;</strong>&nbsp;  
634 - &nbsp;每月15日上午10:15触发&nbsp;  
635 - </p>  
636 - <p style="margin: 10px auto; padding: 0px;">  
637 -   (19<strong style="margin: 0px; padding: 0px;"><span  
638 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 L * ?</span>&nbsp;</strong>&nbsp;  
639 - &nbsp;每月最后一日的上午10:15触发&nbsp;  
640 - </p>  
641 - <p style="margin: 10px auto; padding: 0px;">  
642 -   (20<strong style="margin: 0px; padding: 0px;"><span  
643 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 ? * 6L</span>&nbsp;</strong>&nbsp;  
644 - &nbsp;每月的最后一个星期五上午10:15触发&nbsp;  
645 - </p>  
646 - <p style="margin: 10px auto; padding: 0px;">  
647 -   (21<strong style="margin: 0px; padding: 0px;"><span  
648 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 ? * 6L 2002-2005</span></strong>&nbsp;&nbsp;  
649 - 2002年至2005年的每月的最后一个星期五上午10:15触发&nbsp;  
650 - </p>  
651 - <p style="margin: 10px auto; padding: 0px;">  
652 -   (22<strong style="margin: 0px; padding: 0px;"><span  
653 - style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 ? * 6#3</span></strong>&nbsp;&nbsp;  
654 - 每月的第三个星期五上午10:15触发  
655 - </p>  
656 - <p style="margin: 10px auto; padding: 0px;">  
657 - &nbsp;  
658 - </p>  
659 - </div>  
660 -</script>  
661 -  
662 -<!--资源名称-->  
663 -<script id="resindex_resName" type="text/html">  
664 - <!-- 更改单元格溢出时的tip跑到左上角 LSQ 2022/1/6-->  
665 - <div id="res-div">  
666 - {{# var urlLast=window.location.hash;  
667 - var w=$(".layui-table thead th[data-field='resName']").data('minwidth');  
668 - if(urlLast=="#/res/index"){  
669 - w=$("[lay-id='resListTable'] table thead th[data-field='resName'").data('minwidth');  
670 -  
671 - }else if(urlLast=="#/biz/index"){  
672 - w=$("[lay-id='bizListTable'] table thead th[data-field='resName'").data('minwidth');  
673 - }  
674 - var maxW=(w-45)+'px';  
675 - var styleW="float: left;max-width: "+maxW+";overflow: hidden; text-overflow: ellipsis; white-space:  
676 - nowrap;display: inline-block;";  
677 - }}  
678 - <span lay-tips="{{ d.resName }}" style="{{styleW}}" data-zymc="{{ d.resId }}" data-restype="{{d.resType}}"  
679 - data-name="{{d.resName}}" data-childrennum="{{d.childrenNum}}" data-ip="{{ d.ip }}"  
680 - data-resTypeName="{{ d.resTypeName }}" data-admin="{{ d.admin }}" data-adminname="{{ d.adminName }}"  
681 - data-pingenable="{{d.pingEnable}}" data-manageIp="{{d.manageIp}}" data-collProtocol="{{d.collProtocol}}"  
682 - data-provider="{{d.provider}}" data-state="{{d.state}}" class="layui-table-link">{{ d.resName }}</span>  
683 - {{# if (d.favId == null) { }}  
684 - <a class="layui-icon layui-icon-rate hide" data-favid="{{d.favId}}" data-id="{{d.resId}}" lay-tips="加入收藏夹"  
685 - style="font-size: 14px"></a>  
686 - {{# } else { }}  
687 - <a class="layui-icon layui-icon-rate-solid" data-favid="{{d.favId}}"  
688 - style="color: #FEB61E; font-size: 14px; margin-left: 1px;" data-id="{{d.resId}}" lay-tips="移出收藏夹"></a>  
689 - {{# } }}  
690 - <a class="layui-icon reslist-view-topo hide" data-resid="{{d.resId}}"  
691 - style="color: #FEB61E; font-size: 14px; margin-left: 1px;" lay-tips="查看资源拓扑"></a>  
692 - <!--{{# if (d.resCategory == 'share' && d.hardwareFlag && d.hardwareFlag.endsWith("Y")) { }}  
693 - <a class="layui-icon reslist-assets-details hide" data-resid="{{d.resId}}" data-restype="{{d.resType}}" data-name="{{d.resName}}" data-ip="{{ d.ip }}" style="color: #FEB61E; font-size: 14px; margin-left: 10px;" lay-tips="资产配置信息"><i class="iconfont">&#XE517;</i></a>  
694 - {{# } }}-->  
695 - </div>  
696 -</script>  
697 -  
698 -<!--最大文件系统使用率-->  
699 -<script id="fileUseRateTpl" type="text/html">  
700 - <div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI449F5365" data-flag="fs"  
701 - data-name="{{d.os=='windows'?'磁盘使用情况':'文件系统使用情况'}}" data-showtype="bar"  
702 - data-barkpiid="{{d.os=='windows'?'KPI29D42042,KPI1988842F':'KPIA91F44E7,KPI98306224'}}"  
703 - data-barxaxis="{{d.os=='windows'?'KPI9D22EAB6':'KPI7AC1664E'}}"  
704 - data-warning="0" data-ident="1" data-trend="0">  
705 - <div class="layui-progress layui-progress-big" lay-showpercent="true">  
706 - <div style="position:absolute; z-index:1;width: 100%" id="{{d.resId}}_bizfileName"  
707 - lay-tips="{{d.fileSysUseName}}"  
708 - data-id="{{d.resId}}_bizfileName" data-message="{{d.fileSysUseName}}"><span style="color: #000000;">{{d.fileSysUseName}}</span>  
709 - </div>  
710 - <div class="layui-progress-bar layui-bg-green {{ d.fileSysUseRate >= 98 ? 'layui-bg-red' : (d.fileSysUseRate >= 95 ? 'layui-bg-orange' : (d.fileSysUseRate >= 90 ? 'layui-bg-blue':'')) }}"  
711 - lay-percent="{{ d.fileSysUseRate }}%"  
712 - style="width: {{ d.fileSysUseRate }}%;">  
713 - </div>  
714 - </div>  
715 - <span class="layui-progress-text">{{ (d.fileSysUseRate == null || d.fileSysUseRate == '' || d.fileSysUseRate === '未知' || d.fileSysUseRate === '无' )? '0%' : d.fileSysUseRate +'%' }}</span>  
716 - </div>  
717 -</script>  
718 -<!--CPU使用率-->  
719 -<script id="cpuRateTpl" type="text/html">  
720 - <div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI7054BC34" data-flag="cpu"  
721 - data-name="CPU使用率"  
722 - data-warning="0" data-ident="1" data-trend="1">  
723 - <div class="layui-progress layui-progress-big" lay-showpercent="true">  
724 - <div class="layui-progress-bar layui-bg-green {{ d.cpuRate >= 95 ? 'layui-bg-red' : (d.cpuRate >= 90 ? 'layui-bg-orange' : (d.cpuRate >= 80 ? 'layui-bg-blue':''))}}"  
725 - lay-percent="{{ d.cpuRate }}%"  
726 - style="width: {{ d.cpuRate }}%;">  
727 - </div>  
728 - </div>  
729 - <span class="layui-progress-text">{{ (d.cpuRate == null || d.cpuRate == '' || d.cpuRate === '未知' || d.cpuRate === '无' )? '0%' : d.cpuRate +'%' }}</span>  
730 - </div>  
731 -</script>  
732 -<!--内存使用率-->  
733 -<script id="memoryRateTpl" type="text/html">  
734 - <div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI31CB8D97" data-flag="mem"  
735 - data-name="内存使用率"  
736 - data-warning="1" data-ident="1" data-trend="1">  
737 - <div class="layui-progress layui-progress-big" lay-showpercent="true">  
738 - <div class="layui-progress-bar layui-bg-green {{ d.memoryRate >= 95 ? 'layui-bg-red' : (d.memoryRate >= 90 ? 'layui-bg-orange' : (d.memoryRate >= 80 ? 'layui-bg-blue':''))}}"  
739 - lay-percent="{{ d.memoryRate }}%"  
740 - style="width: {{ d.memoryRate }}%;">  
741 - </div>  
742 - </div>  
743 - <span class="layui-progress-text">{{ (d.memoryRate == null || d.memoryRate == '' || d.memoryRate === '未知' || d.memoryRate === '无' )? '0%' : d.memoryRate +'%' }}</span>  
744 - </div>  
745 -</script>  
746 -<!--虚拟内存使用率-->  
747 -<script id="vmmemoryRateTpl" type="text/html">  
748 - <div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI20352505" data-flag="vmem"  
749 - data-name="虚拟内存使用率"  
750 - data-warning="1" data-ident="1" data-trend="1">  
751 - <div class="layui-progress layui-progress-big" lay-showpercent="true">  
752 - <div class="layui-progress-bar layui-bg-green {{ d.vmmemoryUseRate >= 95 ? 'layui-bg-red' : (d.vmmemoryUseRate >= 90 ? 'layui-bg-orange' : (d.vmmemoryUseRate >= 80 ? 'layui-bg-blue':''))}}"  
753 - lay-percent="{{ d.vmmemoryUseRate }}%"  
754 - style="width: {{ d.vmmemoryUseRate }}%;">  
755 - </div>  
756 - </div>  
757 - <span class="layui-progress-text">{{ (d.vmmemoryUseRate == null || d.vmmemoryUseRate == '' || d.vmmemoryUseRate === '未知' || d.vmmemoryUseRate === '无' )? '0%' : d.vmmemoryUseRate +'%' }}</span>  
758 - </div>  
759 -</script>  
760 -<!--会话百分比-->  
761 -<script id="sessionRateTpl" type="text/html">  
762 - <div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI18F18278" data-name="活动会话百分比"  
763 - data-flag="session"  
764 - data-warning="0" data-ident="1" data-trend="0">  
765 - <div class="layui-progress layui-progress-big" lay-showpercent="true">  
766 - <div class="layui-progress-bar layui-bg-green {{ d.sessionRate >= 80 ? 'layui-bg-red' : (d.sessionRate <= 50 ? '' : 'layui-bg-orange') }}"  
767 - lay-percent="{{ d.sessionRate }}%"  
768 - style="width: {{ d.sessionRate }}%;">  
769 - </div>  
770 - </div>  
771 - <span class="layui-progress-text">{{ (d.sessionRate == null || d.sessionRate == '' || d.sessionRate === '未知' || d.sessionRate === '无' )? '0%' : d.sessionRate +'%' }}</span>  
772 - </div>  
773 -</script>  
774 -<!--CPU分配率-->  
775 -<script id="cpuSetRateTpl" type="text/html">  
776 - <div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPIBFA3F5CD" data-name="CPU分配率"  
777 - data-flag="cpu"  
778 - data-warning="0" data-ident="1" data-trend="0">  
779 - {{#  
780 - d.cpuSetRate = parseFloat(d.cpuSetRate).toFixed(2);  
781 - }}  
782 - <div class="layui-progress layui-progress-big" lay-showpercent="true">  
783 - <div class="layui-progress-bar layui-bg-green {{ d.cpuSetRate >= 80 ? 'layui-bg-red' : (d.cpuSetRate <= 50 ? '' : 'layui-bg-orange') }}"  
784 - lay-percent="{{ d.cpuSetRate }}%"  
785 - style="width: {{ d.cpuSetRate }}%;">  
786 - </div>  
787 - </div>  
788 - <span class="layui-progress-text">{{ (d.cpuSetRate == null || d.cpuSetRate == '' || d.cpuSetRate === '未知' || d.cpuSetRate === '无' )? '0%' : d.cpuSetRate +'%' }}</span>  
789 - </div>  
790 -</script>  
791 -<!--内存分配率-->  
792 -<script id="memorySetRateTpl" type="text/html">  
793 - <div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPIC40A80AC" data-name="内存分配率"  
794 - data-flag="mem"  
795 - data-warning="0" data-ident="1" data-trend="0">  
796 - <div class="layui-progress layui-progress-big" lay-showpercent="true">  
797 - <div class="layui-progress-bar layui-bg-green {{ d.memorySetRate >= 80 ? 'layui-bg-red' : (d.memorySetRate <= 50 ? '' : 'layui-bg-orange') }}"  
798 - lay-percent="{{ d.memorySetRate }}%"  
799 - style="width: {{ d.memorySetRate }}%;">  
800 - </div>  
801 - </div>  
802 - <span class="layui-progress-text">{{ (d.memorySetRate == null || d.memorySetRate == '' || d.memorySetRate === '未知' || d.memorySetRate === '无' )? '0%' : d.memorySetRate +'%' }}</span>  
803 - </div>  
804 -</script>  
805 -<!--存储分配率-->  
806 -<script id="storageSetRateTpl" type="text/html">  
807 - <div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI46BAA9BE" data-name="存储分配率"  
808 - data-flag="storage"  
809 - data-warning="0" data-ident="1" data-trend="0">  
810 - <div class="layui-progress layui-progress-big" lay-showpercent="true">  
811 - <div class="layui-progress-bar layui-bg-green {{ d.storageSetRate >= 80 ? 'layui-bg-red' : (d.storageSetRate <= 50 ? '' : 'layui-bg-orange') }}"  
812 - lay-percent="{{ d.storageSetRate }}%"  
813 - style="width: {{ d.storageSetRate }}%;">  
814 - </div>  
815 - </div>  
816 - <span class="layui-progress-text">{{ (d.storageSetRate == null || d.storageSetRate == '' || d.storageSetRate === '未知' || d.storageSetRate === '无' )? '0%' : d.storageSetRate +'%' }}</span>  
817 - </div>  
818 -</script>  
819 -<!--连接状态-->  
820 -<script id="linkStateTpl" type="text/html">  
821 - {{#  
822 - var linkStateHtml = '';  
823 - var linkStateTips = '无连接信息';  
824 - if(d.linkStateList && d.linkStateList.length >=0 ) {  
825 - linkStateTips = '';  
826 - if(d.linkStateList.length == 1) {  
827 - var linkState = d.linkStateList[0];  
828 - linkStateTips = `${linkState.protocol}: ${linkState.state}`;  
829 - if(linkState.state.indexOf('成功') !== -1) {  
830 - linkStateHtml = '  
831 - <button type="button" class="layui-btn layui-btn-radius layui-bg-green layui-btn-xs p-0-15 cant-click">成功</button>';  
832 - } else {  
833 - linkStateHtml = `  
834 - <button type="button"  
835 - id="${d.resId}_bizdanger"  
836 - data-message="${d.message}"  
837 - data-state="${d.state}"  
838 - data-id="${d.resId}_bizdanger"  
839 - class="layui-btn layui-btn-danger layui-bg-red layui-btn-radius layui-btn-xs p-0-15 cant-click">  
840 - 失败  
841 - </button>`;  
842 - }  
843 - } else {  
844 - if(d.linkStateList.length == 0){  
845 - if(d.hostState == 'active' || d.hostState == 'connected' || d.hostState == '正常' ){  
846 - linkStateHtml = '  
847 - <button type="button" class="layui-btn layui-btn-radius layui-bg-green layui-btn-xs p-0-15 cant-click">成功</button>';  
848 - linkStateTips += `  
849 - <li class='li-link-state-tips-red'>自动发现: 连接成功</li>`;  
850 - }else{  
851 - linkStateHtml = `  
852 - <button type="button"  
853 - id="${d.resId}_bizdanger"  
854 - data-message="${d.message}"  
855 - data-state="${d.state}"  
856 - data-id="${d.resId}_bizdanger"  
857 - class="layui-btn layui-btn-danger layui-bg-red layui-btn-radius layui-btn-xs p-0-15 cant-click">  
858 - 失败  
859 - </button>`;  
860 - if(d.hostState!=''){  
861 - linkStateTips += `  
862 - <li class='li-link-state-tips-red'>自动发现: 连接失败</li>`;  
863 - }else{  
864 - linkStateTips += `  
865 - <li class='li-link-state-tips-red'>ssh: 连接失败</li>`;  
866 - }  
867 - }  
868 - }else{  
869 - linkStateTips += `  
870 - <ul class='ul-link-state-tips'>`;  
871 - layui.each(d.linkStateList, function(index, value) {  
872 - if(value.state.indexOf('成功') !== -1) {  
873 - linkStateTips += `  
874 - <li class='li-link-state-tips-green'>${value.protocol}: ${value.state}</li>  
875 - `;  
876 - linkStateHtml += '<span class="layui-badge-dot layui-bg-green"></span>';  
877 - } else {  
878 - linkStateTips += `  
879 - <li class='li-link-state-tips-red'>${value.protocol}: ${value.state}</li>  
880 - `;  
881 - linkStateHtml += '<span class="layui-badge-dot layui-bg-red"></span>';  
882 - }  
883 - });  
884 - linkStateTips += '  
885 - </ul>';  
886 - }  
887 - }  
888 - }  
889 - }}  
890 - <div class="div-link-state-list" lay-tips="{{linkStateTips}}">  
891 - {{linkStateHtml}}  
892 - </div>  
893 -</script>  
894 -<!--详情页面连接状态-->  
895 -<script id="linkStateDetailTpl" type="text/html">  
896 - {{#  
897 - var linkStateHtml = '';  
898 - var linkStateTips = '无连接信息';  
899 - if(d.linkStateList && d.linkStateList.length) {  
900 - linkStateTips = '';  
901 - if(d.linkStateList.length == 1) {  
902 - var linkState = d.linkStateList[0];  
903 - linkStateTips = `${linkState.protocol}: ${linkState.state}`;  
904 - if(linkState.state.indexOf('成功') !== -1) {  
905 - linkStateHtml = `<span class="span-green">${linkState.state}</span>`;  
906 - } else {  
907 - linkStateHtml = `<span class="span-red">${linkState.state}</span>`;  
908 - }  
909 - } else {  
910 - linkStateTips += `  
911 - <ul class='ul-link-state-tips'>`;  
912 - layui.each(d.linkStateList, function(index, value) {  
913 - if(value.state.indexOf('成功') !== -1) {  
914 - linkStateTips += `  
915 - <li class='li-link-state-tips-green'>${value.protocol}: ${value.state}</li>  
916 - `;  
917 - linkStateHtml += '  
918 - <div class="layui-badge-dot layui-bg-green"></div>  
919 - ';  
920 - } else {  
921 - linkStateTips += `  
922 - <li class='li-link-state-tips-red'>${value.protocol}: ${value.state}</li>  
923 - `;  
924 - linkStateHtml += '  
925 - <div class="layui-badge-dot layui-bg-red"></div>  
926 - ';  
927 - }  
928 - });  
929 - linkStateTips += '  
930 - </ul>';  
931 - }  
932 - }  
933 - }}  
934 - <div class="div-link-state-list" lay-tips="{{linkStateTips}}">  
935 - {{linkStateHtml}}  
936 - </div>  
937 -</script>  
938 -<!--电源状态-->  
939 -<script id="powerStateTpl" type="text/html">  
940 - {{# if(d.powerState != null && d.powerState == 'poweredOn'){ }}  
941 - <button type="button" class="layui-btn layui-btn-radius layui-bg-green layui-btn-xs p-0-15 cant-click">  
942 - 开机  
943 - </button>  
944 - {{# }else if(d.powerState != null && d.powerState == 'poweredOff'){ }}  
945 - <button type="button" class="layui-btn layui-bg-red layui-btn-radius layui-btn-xs p-0-15 cant-click">  
946 - 关机  
947 - </button>  
948 - {{# }else if(d.powerState != null && d.powerState == 'standBy'){ }}  
949 - <button type="button" class="layui-btn layui-bg-orange layui-btn-radius layui-btn-xs p-0-15 cant-click">  
950 - 待机  
951 - </button>  
952 - {{# }else if(d.powerState != null && d.powerState == 'unknown'){ }}  
953 - <button type="button" class="layui-btn layui-bg-gray layui-btn-radius layui-btn-xs p-0-15 cant-click">  
954 - 未知  
955 - </button>  
956 - {{# }else{ }}  
957 - <button type="button"  
958 - class="layui-btn layui-btn-radius layui-bg-gray layui-btn-xs p-0-15 cant-click">{{  
959 - '未监控'}}  
960 - </button>  
961 - {{# }}}  
962 -</script>  
963 -<!--健康状态-->  
964 -<script id="healthTpl" type="text/html">  
965 - {{# if(d.state != 'new'){ }}  
966 - {{# if(d.health === '1'){ }}  
967 - <button type="button"  
968 - class="layui-btn layui-btn-danger layui-bg-red layui-btn-radius layui-btn-xs p-0-15 cant-click">  
969 - </button>  
970 - {{# } }}  
971 - {{# if(d.health === '2'){ }}  
972 - <button type="button"  
973 - class="layui-btn layui-btn-warm layui-bg-orange layui-btn-radius layui-btn-xs p-0-15 cant-click">  
974 - </button>  
975 - {{# } }}  
976 - {{# if(d.health === '3'){ }}  
977 - <button type="button" class="layui-btn layui-btn-radius layui-bg-green layui-btn-xs p-0-15 cant-click"></button>  
978 - {{# } }}  
979 - {{# } }}  
980 -</script>  
981 -<!--主机状态-->  
982 -<script id="hostStateTpl" type="text/html">  
983 - {{# if(d.hostState != null && d.hostState == 'connected'){ }}  
984 - <button type="button" class="layui-btn layui-btn-radius layui-bg-green layui-btn-xs p-0-15 cant-click">  
985 - 已连接  
986 - </button>  
987 - {{# }else if(d.hostState != null && d.hostState == 'notResponding'){ }}  
988 - <button type="button" class="layui-btn layui-bg-orange layui-btn-radius layui-btn-xs p-0-15 cant-click">  
989 - 未响应  
990 - </button>  
991 - {{# }else if(d.hostState != null && d.hostState == 'disconnected'){ }}  
992 - <button type="button" class="layui-btn layui-bg-red layui-btn-radius layui-btn-xs p-0-15 cant-click">  
993 - 断开连接  
994 - </button>  
995 - {{# }else if(d.hostState != null && d.hostState == '正常'){ }}  
996 - <button type="button" class="layui-btn layui-bg-green layui-btn-radius layui-btn-xs p-0-15 cant-click">  
997 - 正常  
998 - </button>  
999 - {{# }else{ }}  
1000 - <button type="button"  
1001 - class="layui-btn layui-btn-radius layui-bg-gray layui-btn-xs p-0-15 cant-click">{{  
1002 - '未监控'}}  
1003 - </button>  
1004 - {{# }}}  
1005 -</script>  
1006 -<!--ping状态-->  
1007 -<script id="pingStatusTpl" type="text/html">  
1008 - {{# if(d.pingStatus === '正常'){ }}  
1009 - <button type="button" class="layui-btn layui-btn-danger layui-bg-green layui-btn-radius layui-btn-xs p-0-15">正常  
1010 - </button>  
1011 - {{# }else{ }}  
1012 - <button type="button" class="layui-btn layui-btn-radius layui-bg-red layui-btn-xs p-0-15">异常</button>  
1013 - {{# } }}  
1014 -</script>  
1015 -<!--资源状态-->  
1016 -<script id="resStateTpl" type="text/html">  
1017 - {{#  
1018 - switch (d.state) {  
1019 - case "new" :  
1020 - }}  
1021 - <button type="button"  
1022 - class="layui-btn layui-btn-warm layui-bg-blue layui-btn-radius layui-btn-xs p-0-15 cant-click">未监控  
1023 - </button> {{#  
1024 - break;  
1025 - case "monitor" :  
1026 - }}  
1027 - <button type="button"  
1028 - class="layui-btn layui-btn-warm layui-bg-green layui-btn-radius layui-btn-xs p-0-15 cant-click">监控中  
1029 - </button> {{#  
1030 - break;  
1031 - case "stop" :  
1032 - }}  
1033 - <button type="button" class="layui-btn layui-btn-warm layui-bg-red layui-btn-radius layui-btn-xs p-0-15 cant-click">  
1034 - 暂停监控  
1035 - </button> {{#  
1036 - break;  
1037 - case "alarmIgnore" :  
1038 - }}  
1039 - <button type="button"  
1040 - class="layui-btn layui-btn-warm layui-bg-orange layui-btn-radius layui-btn-xs p-0-15 cant-click">告警压制中  
1041 - </button> {{#  
1042 - break;  
1043 - }  
1044 - }}  
1045 -</script>  
1046 -<!--判断树结构有无子节点-->  
1047 -<script id="bizResNameTpl" type="text/html">  
1048 - <div>  
1049 - {{# if(d.resType == 'MIDDLEWARE_WEBLOGIC' && (d.parentId == null || d.parentId == '') ){ }}  
1050 - <span data-childrennum="{{d.childrenNum}}">{{d.resName}}</span>  
1051 - {{# }else{ }}  
1052 - <span data-zymc="{{d.resId}}" data-restype="{{d.resType}}" data-name="{{d.resName}}" data-ip="{{d.ip}}"  
1053 - data-childrennum="{{d.childrenNum}}" data-resTypeName="{{d.resTypeName}}" data-admin="{{d.admin}}"  
1054 - data-pingenable="{{d.pingEnable}}" class="layui-table-link">{{d.resName}}</span>  
1055 - {{# } }}  
1056 - {{# if (d.favId == null) { }}  
1057 - <a class="layui-icon layui-icon-rate hide" data-favid="{{d.favId}}" data-id="{{d.resId}}" lay-tips="加入收藏夹"  
1058 - style="font-size: 14px"></a>  
1059 - {{# } else { }}  
1060 - <a class="layui-icon layui-icon-rate-solid" data-favid="{{d.favId}}"  
1061 - style="color: #FEB61E; font-size: 14px; margin-left: 10px;" data-id="{{d.resId}}" lay-tips="移出收藏夹"></a>  
1062 - {{# } }}  
1063 - <a class="layui-icon reslist-view-topo hide" data-resid="{{d.resId}}"  
1064 - style="color: #FEB61E; font-size: 14px; margin-left: 10px;" lay-tips="查看资源拓扑"><i  
1065 - class="iconfont">&#XE515;</i></a>  
1066 - </div>  
1067 -</script>  
1068 -<!--表空间使用率(最大)-->  
1069 -<script id="tableSpaceUseRateTpl" type="text/html">  
1070 - <div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI64B1610A" data-name="表空间使用率"  
1071 - data-showtype="bar" data-barkpiid="KPI2EC3F15A,KPI6AD9EBD6" data-barxaxis="KPI4332BAC8"  
1072 - data-warning="0" data-ident="1" data-trend="0" data-flag="tps">  
1073 - <div class="layui-progress layui-progress-big" lay-showpercent="true">  
1074 - <div style="position:absolute; z-index:1;width: 100%" id="{{d.resId}}_bizTableSpaceUseRate"  
1075 - class="showTipsName" data-id="{{d.resId}}_bizTableSpaceUseRate" data-message="{{d.tableSpaceUseName}}">  
1076 - <span style="color: #000000;">{{d.tableSpaceUseName}}</span></div>  
1077 - <div class="layui-progress-bar layui-bg-green {{ d.tableSpaceUseRate >= 80 ? 'layui-bg-red' : (d.tableSpaceUseRate <= 50 ? '' : 'layui-bg-orange') }}"  
1078 - lay-percent="{{ d.tableSpaceUseRate }}%"  
1079 - style="width: {{ d.tableSpaceUseRate }}%;">  
1080 - </div>  
1081 - </div>  
1082 - <span class="layui-progress-text">{{ (d.tableSpaceUseRate == null || d.tableSpaceUseRate == '' || d.tableSpaceUseRate === '未知' || d.tableSpaceUseRate === '无' )? '0%' : d.tableSpaceUseRate +'%' }}</span>  
1083 - </div>  
1084 -</script>  
1085 -<!--ASM磁盘空间使用率-->  
1086 -<script id="asmDiskUsedRateTpl" type="text/html">  
1087 - <div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI922F8FF7" data-name="ASM磁盘空间使用率"  
1088 - data-showtype="bar" data-barkpiid="KPI4D710FDA,KPI811E751E" data-barxaxis="KPI50267025"  
1089 - data-warning="0" data-ident="1" data-trend="0" data-flag="asm">  
1090 - <div class="layui-progress layui-progress-big" lay-showpercent="true">  
1091 - <div style="position:absolute; z-index:1;width: 100%" id="{{d.resId}}_asmDiskUsedRate" class="showTipsName"  
1092 - data-id="{{d.resId}}_asmDiskUsedRate" data-message="{{d.asmDiskUsedRate}}"><span  
1093 - style="color: #000000;">{{d.asmDiskUsedRateName}}</span></div>  
1094 - <div class="layui-progress-bar layui-bg-green {{ d.asmDiskUsedRate >= 80 ? 'layui-bg-red' : (d.asmDiskUsedRate <= 50 ? '' : 'layui-bg-orange') }}"  
1095 - lay-percent="{{ d.asmDiskUsedRate }}%"  
1096 - style="width: {{ d.asmDiskUsedRate }}%;">  
1097 - </div>  
1098 - </div>  
1099 - <span class="layui-progress-text">{{ (d.asmDiskUsedRate == null || d.asmDiskUsedRate == '' || d.asmDiskUsedRate === '未知' || d.asmDiskUsedRate === '无' )? '0%' : d.asmDiskUsedRate +'%' }}</span>  
1100 - </div>  
1101 -</script>  
1102 -<!--weblogic定制表头-->  
1103 -<script id="webLogicResNameTpl" type="text/html">  
1104 - <div>  
1105 - {{# if(d.resType == 'MIDDLEWARE_WEBLOGIC' && (d.parentId == null || d.parentId == '') ){ }}  
1106 - <span data-childrennum="{{d.childrenNum}}">{{d.resName}}</span>  
1107 - {{# }else{ }}  
1108 - <span data-zymc="{{ d.resId }}" data-restype="{{d.resType}}" data-name="{{d.resName}}"  
1109 - data-childrennum="{{d.childrenNum}}" data-ip="{{ d.ip }}" data-resTypeName="{{ d.resTypeName }}"  
1110 - data-admin="{{ d.admin }}" data-pingenable="{{d.pingEnable}}"  
1111 - class="layui-table-link">{{ d.resName }}</span>  
1112 - {{# } }}  
1113 - {{# if (d.favId == null) { }}  
1114 - <a class="layui-icon layui-icon-rate hide" data-favid="{{d.favId}}" data-id="{{d.resId}}" lay-tips="加入收藏夹"  
1115 - style="font-size: 14px"></a>  
1116 - {{# } else { }}  
1117 - <a class="layui-icon layui-icon-rate-solid" data-favid="{{d.favId}}"  
1118 - style="color: #FEB61E; font-size: 14px; margin-left: 10px;" data-id="{{d.resId}}" lay-tips="移出收藏夹"></a>  
1119 - {{# } }}  
1120 - <a class="layui-icon reslist-view-topo hide" data-resid="{{d.resId}}"  
1121 - style="color: #FEB61E; font-size: 14px; margin-left: 10px;" lay-tips="查看资源拓扑"><i  
1122 - class="iconfont">&#XE515;</i></a>  
1123 - </div>  
1124 -</script>  
1125 -<!--资源池状态-->  
1126 -<script id="clusterStateTpl" type="text/html">  
1127 - {{# if(d.clusterState === '正常'){ }}  
1128 - <button type="button" class="layui-btn layui-btn-danger layui-bg-green layui-btn-radius layui-btn-xs p-0-15">正常  
1129 - </button>  
1130 - {{# }else{ }}  
1131 - <button type="button" class="layui-btn layui-btn-radius layui-bg-red layui-btn-xs p-0-15">异常</button>  
1132 - {{# } }}  
1133 -</script>  
1134 -<!--运行状态-->  
1135 -<script id="runStateTpl" type="text/html">  
1136 - {{# if(d.runState === '正常'){ }}  
1137 - <button type="button" class="layui-btn layui-btn-danger layui-bg-green layui-btn-radius layui-btn-xs p-0-15">正常  
1138 - </button>  
1139 - {{# }else{ if(d.runState === '运行中'){ }}  
1140 - <button type="button" class="layui-btn layui-btn-danger layui-bg-green layui-btn-radius layui-btn-xs p-0-15">运行中  
1141 - </button>  
1142 - {{# }else{ }}  
1143 - <button type="button" class="layui-btn layui-btn-radius layui-bg-red layui-btn-xs p-0-15">异常</button>  
1144 - {{# } }}  
1145 - {{# } }}  
1146 -</script>  
1147 -<script id="weblogicIpTpl" type="text/html">  
1148 - <div>{{d.ip?d.ip:""}}</div>  
1149 -</script>  
1150 -<script id="weblogicListenAddrTpl" type="text/html">  
1151 - <div>{{d.listenAddr?d.listenAddr:""}}</div>  
1152 -</script>  
1153 -<!--cup核心数-->  
1154 -<script id="cpuCoresTpl" type="text/html">  
1155 - <div>{{d.cpuCores?(d.cpuCores+"核"):""}}</div>  
1156 -</script>  
1157 -<!--cup个数-->  
1158 -<script id="cpuNumTpl" type="text/html">  
1159 - <div>{{d.cpuNum?(d.cpuNum+"个"):""}}</div>  
1160 -</script>  
1 -<div class="layadmin-user-login layadmin-user-display-show setting">  
2 - <div class="layadmin-user-login-main">  
3 - <div class="layadmin-user-login-box layadmin-user-login-body layui-form">  
4 - <div class="layui-form-item hide">  
5 - <label class="layadmin-user-login-icon layui-icon layui-icon-password"></label>  
6 - <input class="layui-input" lay-verify="required" name="username" placeholder="监控账号" type="text">  
7 - </div>  
8 - <div class="layui-form-item">  
9 - <div class="">  
10 - <select class="layui-select layui-input" id="refSystem" lay-filter="refSystem" lay-verify="required"  
11 - name="refSystem"></select>  
12 - </div>  
13 - </div>  
14 - <div class="layui-form-item">  
15 - <label class="layadmin-user-login-icon"></label>  
16 - <input class="layui-input" lay-verify="required" name="account" placeholder="系统账号" type="text">  
17 - </div>  
18 - <div class="layui-form-item">  
19 - <label class="layadmin-user-login-icon"></label>  
20 - <input class="layui-input" lay-verify="required" name="password" placeholder="系统密码" type="password">  
21 - </div>  
22 - <div class="layui-form-item">  
23 - <div class="setting-btn">  
24 - <button class="layui-btn" id="setCommit" lay-filter="setAccount" lay-submit>保存</button>  
25 - <button class="layui-btn layui-btn-primary" id="setClose">取消</button>  
26 - </div>  
27 - </div>  
28 - </div>  
29 - </div>  
30 -</div>  
31 -  
32 -<script>  
33 - layui.use(['admin', 'form', 'common', 'sessions'], function () {  
34 - var $ = layui.$;  
35 - var admin = layui.admin;  
36 - var form = layui.form;  
37 - var common = layui.common;  
38 - var sessions = layui.sessions;  
39 - var accessToken = sessions.getToken().access_token;  
40 - form.render();  
41 -  
42 - //填充用户监控账号  
43 - var username = localStorage.getItem("lgn");  
44 - $('input[name="username"]').val(username);  
45 -  
46 - //第三方系统下拉框切换事件监听  
47 - form.on('select(refSystem)', function (data) {  
48 - if (data.value != '') {  
49 - getOldAccountAndPwd(username, data.value);  
50 - }  
51 - });  
52 -  
53 - //第三方系统下拉框数据填充  
54 - common.ddicSelect('refSystem', 'systems', function (datalist) {  
55 - if (datalist.length == 1) {  
56 - $('#refSystem').val(datalist[0].ddicCode);  
57 - getOldAccountAndPwd(username, datalist[0].ddicCode);  
58 - }  
59 - form.render('select');  
60 - });  
61 -  
62 - $('#setClose').on('click', function () {  
63 - layer.closeAll();  
64 - });  
65 -  
66 - //保存点击事件  
67 - form.on('submit(setAccount)', function (obj) {  
68 - var userRefSystem = {};  
69 - //修改密码  
70 - userRefSystem.username = $('input[name="username"]').val();  
71 - userRefSystem.refSystem = $('#refSystem').val();  
72 - userRefSystem.account = $('input[name="account"]').val();  
73 - userRefSystem.password = $('input[name="password"]').val();  
74 - saveOrUpdate(userRefSystem);  
75 - });  
76 -  
77 - //增加或更细第三方账号关联信息  
78 - function saveOrUpdate(data) {  
79 - admin.req({  
80 - url: common.domainName + '/api-web/userRefSystem/saveOrUpdate?access_token=' + accessToken,  
81 - type: "POST",  
82 - dataType: "json",  
83 - contentType: 'application/json; charset=utf-8',  
84 - data: JSON.stringify(data),  
85 - success: function (res) {  
86 - if (res) {  
87 - var icon = 7;  
88 - if (res.success) {  
89 - icon = 1;  
90 - }  
91 - layer.msg(res.msg, {offset: '15px', icon: icon, time: 1000}, function () {  
92 - if (res.success) {  
93 - layer.closeAll();  
94 - }  
95 - });  
96 - }  
97 -  
98 - }  
99 - })  
100 - }  
101 -  
102 - //根据监控账号及第三方系统,查找关联信息  
103 - function getOldAccountAndPwd(username, refSystem) {  
104 - admin.req({  
105 - url: common.domainName + '/api-web/userRefSystem/getByUsernameAndSystem',  
106 - type: "GET",  
107 - dataType: "json",  
108 - data: {  
109 - username: username,  
110 - refSystem: refSystem  
111 - },  
112 - success: function (res) {  
113 - if (res && res.success) {  
114 - if (res.object) { //如果有绑定  
115 - $('#resSystem').val(res.object.refSystem);  
116 - $('input[name="account"]').val(res.object.account);  
117 - $('input[name="password"]').val(common.Base64.decode(res.object.password));  
118 - } else { //如果未绑定  
119 - $('input[name="account"]').val(localStorage.getItem("lgn"));  
120 - }  
121 - }  
122 - form.render();  
123 - },  
124 - error: function () {  
125 - layer.msg('获取第三方账号异常', {offset: '15px', icon: 1, time: 1000}, function () {  
126 - });  
127 - }  
128 - })  
129 - }  
130 - });  
131 -</script>