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

29.7 KB
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 type="text/html" template lay-url="{{sessionStorage.getItem('domainName')}}/api-user/users/checkHasRole?roleCode=daping"> | ||
48 | + {{# if(d.count > 0){ }} | ||
49 | + <li class="layui-nav-item" lay-tips="展示大屏"> | ||
50 | + <a href="javascript:;" layadmin-event="toBigScreen" ><img src="/src/style/img/icon-daping.png" style="width: 16px;height: 16px"></a> | ||
51 | + </li> | ||
52 | + {{# } }} | ||
53 | + </script> | ||
54 | + | ||
55 | + <script type="text/html" template lay-url="{{sessionStorage.getItem('domainName')}}/api-web/sxview/getbizListByUser?access_token={{localStorage.getItem('access_token')}}"> | ||
56 | + | ||
57 | + {{# if(d.data.length>0){ }} | ||
58 | + <li class="layui-nav-item" > | ||
59 | + | ||
60 | + <div id="toYTHView_div" > | ||
61 | + <dd layadmin-event="toYTHViewScreen" title="一体化监控台"><a><img src="/src/style/img/icon-yitihuadaping.png" style="width: 16px;height: 16px"></a></dd> | ||
62 | + </div> | ||
63 | + </li> | ||
64 | + | ||
65 | + {{# } }} | ||
66 | + </script> | ||
67 | + | ||
68 | + | ||
69 | + <li class="layui-nav-item" lay-unselect> | ||
70 | + <a href="javascript:;" layadmin-event="refresh" title="刷新"> | ||
71 | + <i class="layui-icon layui-icon-refresh-3"></i> | ||
72 | + </a> | ||
73 | + </li> | ||
74 | + | ||
75 | + </ul> | ||
76 | + <img src="/src/style/img/logo.png" class="logo"> | ||
77 | + <ul class="layui-nav layui-layout-right" lay-filter="layadmin-layout-right"> | ||
78 | + <!--搜索框检索--> | ||
79 | + <!-- <li class="layui-nav-item layui-hide-xs">--> | ||
80 | + <!-- <input type="text" class="layui-input" id="allSearchKeywords" style="margin-top: 6px">--> | ||
81 | + <!-- </li>--> | ||
82 | + <li class="layui-nav-item layui-hide-xs" lay-tips="全局搜索"> | ||
83 | + <a href="javascript:;" layadmin-event="globalSearch"><i class="layui-icon layui-icon-search"></i></a> | ||
84 | + </li> | ||
85 | +<!-- xwx add 首页增加业务健康度入口 2021-10-25 start--> | ||
86 | + <li class="layui-nav-item" lay-unselect> | ||
87 | + <script type="text/html" template lay-url="{{sessionStorage.getItem('domainName')}}/api-user/users/getUserByToken"> | ||
88 | + <a href="javascript:;"><img src="/src/style/img/icon-1.png" style="width: 16px;height: 16px;"></a> | ||
89 | + {{# | ||
90 | + var roles = ''; | ||
91 | + layui.each(d.object.sysRoles, function(idx, role){ | ||
92 | + roles += role.code+","; | ||
93 | + }); | ||
94 | + }} | ||
95 | + <li><input type="hidden" id="hq_entrance" value="{{roles}}"></li> | ||
96 | + <dl class="layui-nav-child"> | ||
97 | + <!--调整到刷新旁边,此处去掉 lu 屏蔽 20211130--> | ||
98 | + <!-- <dd layadmin-event="toBigScreen" style="text-align: left;"><a><img src="/src/style/img/icon-daping.png" style="width: 16px;height: 16px"> 大屏</a></dd>--> | ||
99 | + <dd layadmin-event="toDZSWJScreen" style="text-align: left;"><a><img src="/src/style/img/icon-dianzishuiwuju.png" style="width: 16px;height: 16px"> 电子税务局大屏</a></dd> | ||
100 | + <!--调整到首页旁边,此处去掉 joke 屏蔽 20211129--> | ||
101 | +<!-- <dd layadmin-event="toYTHViewScreen" style="text-align: left;"><a><img src="/src/style/img/icon-yitihuadaping.png" style="width: 16px;height: 16px"> 一体化视图</a></dd>--> | ||
102 | + <dd layadmin-event="toBiZhEalZhSYS" style="text-align: left;"><a><img src="/src/style/img/icon-YWJKD.png" style="width: 16px;height: 16px"> 业务健康度</a></dd> | ||
103 | + <dd layadmin-event="toCMDB" style="text-align: left;"><a><img src="/src/style/img/icon-CMDB.png" style="width: 16px;height: 16px"> CMDB</a></dd> | ||
104 | + </dl> | ||
105 | + </script> | ||
106 | + </li> | ||
107 | +<!-- xwx add 首页增加业务健康度入口 2021-10-25 end--> | ||
108 | +<!-- <li class="layui-nav-item" lay-tips="一体化视图">--> | ||
109 | +<!-- <!– <a href="javascript:;" layadmin-event="toYTHViewScreen"><i class="layui-icon layui-icon-chart-screen"></i></a>–>--> | ||
110 | +<!-- <a href="javascript:;" layadmin-event="toYTHViewScreen" ><img src="/src/style/img/icon-yitihuadaping.png" style="width: 16px;height: 16px"></a>--> | ||
111 | +<!-- </li>--> | ||
112 | +<!-- <li class="layui-nav-item" lay-tips="大屏">--> | ||
113 | +<!-- <!– <a href="javascript:;" layadmin-event="toBigScreen"><i class="layui-icon layui-icon-chart-screen"></i></a>–>--> | ||
114 | +<!-- <a href="javascript:;" layadmin-event="toBigScreen" ><img src="/src/style/img/icon-daping.png" style="width: 16px;height: 16px"></a>--> | ||
115 | +<!-- </li>--> | ||
116 | +<!-- <li class="layui-nav-item" lay-tips="电子税务局">--> | ||
117 | +<!-- <!– <a href="javascript:;" layadmin-event="toBigScreen"><i class="layui-icon layui-icon-chart-screen"></i></a>–>--> | ||
118 | +<!-- <a href="javascript:;" layadmin-event="toDZSWJScreen" ><img src="/src/style/img/icon-dianzishuiwuju.png" style="width: 16px;height: 16px"></a>--> | ||
119 | +<!-- </li>--> | ||
120 | + <li class="layui-nav-item layui-show-xs-inline-block layui-hide-sm" lay-unselect> | ||
121 | + <a href="javascript:;" layadmin-event="more"><i class="layui-icon layui-icon-more-vertical"></i></a> | ||
122 | + </li> | ||
123 | + <!-- <li class="layui-nav-item layui-hide-xs" lay-unselect> | ||
124 | + <a href="javascript:;" layadmin-event="theme"> | ||
125 | + <i class="layui-icon layui-icon-theme"></i> | ||
126 | + </a> | ||
127 | + </li>--> | ||
128 | + <li class="layui-nav-item layui-hide-xs" lay-unselect> | ||
129 | + <a href="javascript:;" layadmin-event="fullscreen"> | ||
130 | + <i class="layui-icon layui-icon-screen-full"></i> | ||
131 | + </a> | ||
132 | + </li> | ||
133 | + <!-- 报表通知统计 --> | ||
134 | + <li class="layui-nav-item" lay-unselect> | ||
135 | + <script type="text/html" template lay-url="{{sessionStorage.getItem('domainName')}}/api-web/home/messageRemind"> | ||
136 | + <a href="javascript:;" class="notice_msg"> | ||
137 | + <i class="layui-icon layui-icon-notice"></i><span>{{d.map==null? 0 : d.map.totalCountByUser}}</span> | ||
138 | + </a> | ||
139 | + <dl class="layui-nav-child"> | ||
140 | + <dd><a href="javascript:;" lay-href="/alarm/activewarning">活动告警:{{d.map==null? 0 : d.map.totalCountByUser}}</a></dd> | ||
141 | + <!-- <hr>--> | ||
142 | + <!-- <dd><a href="javascript:;" lay-href="/iframe/insp/monitor/flag=0">未处理报表:{{d.map==null? 0 : d.map.statusCountByUser}}</a></dd>--> | ||
143 | + <!-- <hr>--> | ||
144 | + <!-- <dd><a href="javascript:;" lay-href="/iframe/insp/workview/read=0/type=1">工作汇报未读:{{d.map==null? 0 : d.map.notReadCountByUser}}</a></dd>--> | ||
145 | + <!-- <hr>--> | ||
146 | + <!-- <dd><a href="javascript:;" lay-href="/iframe/insp/notice/t=day">今日通知:{{d.map==null? 0 : d.map.countByUserAndToday}}</a></dd>--> | ||
147 | + </dl> | ||
148 | + </script> | ||
149 | + </li> | ||
150 | + | ||
151 | + <li class="layui-nav-item" lay-unselect> | ||
152 | + <script type="text/html" template lay-url="{{sessionStorage.getItem('domainName')}}/api-user/users/getUserByToken" | ||
153 | + lay-done="layui.element.render('nav', 'layadmin-layout-right');"> | ||
154 | + <a href="javascript:;"> | ||
155 | + 欢迎 <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;" >欢迎 <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 type="text/html" template lay-url="{{sessionStorage.getItem('domainName')}}/api-user/menus/current?type=1" | ||
188 | + lay-done="layui.element.render('nav', 'layadmin-system-side-menu');" id="TPL_layout"> | ||
189 | + | ||
190 | + {{# | ||
191 | + var dataName = layui.setter.response.dataName; | ||
192 | + var fisthref = "/index"; | ||
193 | + var defaultMenu = d.str; | ||
194 | + var defaultModuleid = ''; | ||
195 | + var defaultPath = ''; | ||
196 | + if(defaultMenu && defaultMenu != ''){ | ||
197 | + defaultModuleid = d.str.split('#')[0]; | ||
198 | + defaultPath = d.str.split('#')[1]; | ||
199 | + fisthref = defaultPath; | ||
200 | + } | ||
201 | + }} | ||
202 | + | ||
203 | + <div class="layui-logo" lay-href="{{fisthref}}"> | ||
204 | + <span>{{ layui.setter.name || 'layuiAdmin' }}</span> | ||
205 | + </div> | ||
206 | + | ||
207 | + <ul class="layui-nav layui-nav-tree" lay-shrink="all" id="LAY-system-side-menu" | ||
208 | + lay-filter="layadmin-system-side-menu"> | ||
209 | + {{# | ||
210 | + var show = location.search.substr(1).split("&")[0].split("=")[1]; | ||
211 | + if(show == '1') window.history.pushState({} ,'' ,'#'); | ||
212 | + if(show != '0') location.hash = "/"; | ||
213 | + | ||
214 | + var path = layui.router().path | ||
215 | + ,pathURL = layui.admin.correctRouter(path.join('/')) | ||
216 | + ,dataName = layui.setter.response.dataName; | ||
217 | + var fistModuleid = ''; | ||
218 | + if(d && d[dataName].length>0){ | ||
219 | + fistModuleid = d[dataName][0].moduleid; | ||
220 | + } | ||
221 | + | ||
222 | + layui.each(d[dataName], function(index, item){ | ||
223 | + var isselectd = ''; | ||
224 | + var isSelectedModuleid = ''; | ||
225 | + if(defaultModuleid != '' || item.moduleid != ''){ | ||
226 | + if(item.moduleid == defaultModuleid){ | ||
227 | + isselectd = "layui-this"; | ||
228 | + }else{ | ||
229 | + isselectd = ""; | ||
230 | + } | ||
231 | + }else { | ||
232 | + if(!defaultModuleid || defaultModuleid == ''){ | ||
233 | + if(index = 0){ | ||
234 | + isselectd = "layui-this"; | ||
235 | + } | ||
236 | + }else{ | ||
237 | + isselectd = ""; | ||
238 | + } | ||
239 | + } | ||
240 | + var hasChildren = typeof item.subMenus === 'object' && item.subMenus && item.subMenus.length > 0 | ||
241 | + ,classSelected = function(){ | ||
242 | + var match = path[0] == item.moduleid || (index == 0 && !path[0]) || (item.path && pathURL == | ||
243 | + layui.admin.correctRouter(item.path)) || item.spread; | ||
244 | + if(match){ | ||
245 | + return hasChildren ? 'layui-nav-itemed' : 'layui-nav-itemed'; | ||
246 | + } | ||
247 | + return ''; | ||
248 | + } | ||
249 | + ,url = (item.path && typeof item.path === 'string') ? item.path : item.moduleid; | ||
250 | + var closeMenuEvent = ''; | ||
251 | + if(item.moduleid == 'biz' || item.moduleid == 'res'){ closeMenuEvent = 'closeMenu'} | ||
252 | + }} | ||
253 | + | ||
254 | + <li data-name="{{ item.moduleid || '' }}" data-jump="{{ item.path || '' }}" | ||
255 | + class="layui-nav-item {{ menuIsopen == 'true' ? 'layui-nav-itemed' : '' }} {{isselectd}}"> | ||
256 | + | ||
257 | + {{# if(item.moduleid == 'cmdbsys' || item.moduleid == 'sxview' || item.moduleid == 'dpsys'){ }} | ||
258 | + <a href="javascript:;" layadmin-event="{{item.moduleid}}" lay-tips="{{ item.name | ||
259 | + }}" lay-direction="2"> | ||
260 | + <i class="layui-icon {{ item.css }}"></i> | ||
261 | + <cite>{{ item.name }}</cite> | ||
262 | + </a> | ||
263 | + {{# } }} | ||
264 | + {{# if(item.moduleid != 'cmdbsys' && item.moduleid != 'sxview' && item.moduleid != 'dpsys'){ }} | ||
265 | + <a href="javascript:;" {{ hasChildren ? '' : 'lay-href="'+ url +'"' }} layadmin-event="{{closeMenuEvent}}" lay-tips="{{ item.name | ||
266 | + }}" lay-direction="2"> | ||
267 | + <i class="layui-icon {{ item.css }}"></i> | ||
268 | + <cite>{{ item.name }}</cite> | ||
269 | + </a> | ||
270 | + | ||
271 | + {{# } }} | ||
272 | + | ||
273 | + | ||
274 | + {{# if(hasChildren){ }} | ||
275 | + <dl class="layui-nav-child"> | ||
276 | + {{# layui.each(item.subMenus, function(index2, item2){ | ||
277 | + if(item2.moduleid && item2.moduleid == defaultModuleid){ | ||
278 | + isselectd = "layui-this"; | ||
279 | + }else{ | ||
280 | + isselectd = ""; | ||
281 | + } | ||
282 | + var hasChildren2 = typeof item2.subMenus == 'object' && item2.subMenus && | ||
283 | + item2.subMenus.length > 0 | ||
284 | + ,classSelected2 = function(){ | ||
285 | + var match = (path[0] == item.moduleid && path[1] == item2.moduleid) || (item2.path && | ||
286 | + pathURL == layui.admin.correctRouter(item2.path)) || item2.spread; | ||
287 | + return ''; | ||
288 | + } | ||
289 | + ,url2 = (item2.path && typeof item2.path === 'string') | ||
290 | + ? item2.path | ||
291 | + : [item.moduleid, item2.moduleid, ''].join('/'); | ||
292 | + }} | ||
293 | + <dd data-name="{{ item2.moduleid || '' }}" data-jump="{{ item2.path || '' }}" | ||
294 | + class="layui-nav-item {{ classSelected2() }} {{isselectd}}" | ||
295 | + > | ||
296 | + {{# if(item2.menuDesc.indexOf('第三方') == '-1') {}} | ||
297 | + <a href="javascript:;" {{ hasChildren2 ? '' : 'lay-href="'+ url2 +'"' }}>{{ item2.name }}</a> | ||
298 | + {{# }else{ }} | ||
299 | + <a href="javascript:;" {{ hasChildren2 ? '' : 'data-url="'+ url2 +'" layadmin-event="IntegratedEntrance"' }} data-moduleid="{{item2.moduleid}}">{{ item2.name }}</a> | ||
300 | + {{# } }} | ||
301 | + {{# if(hasChildren2){ }} | ||
302 | + <dl class="layui-nav-child {{}}"> | ||
303 | + {{# layui.each(item2.subMenus, function(index3, item3){ | ||
304 | + var match = (path[0] == item.moduleid && path[1] == item2.moduleid && path[2] == | ||
305 | + item3.moduleid) | ||
306 | + || (item3.path && pathURL == layui.admin.correctRouter(item3.path)) | ||
307 | + ,url3 = (item3.path && typeof item3.path === 'string') | ||
308 | + ? item3.path | ||
309 | + : [item.moduleid, item2.moduleid, item3.moduleid].join('/') | ||
310 | + }} | ||
311 | + <dd data-name="{{ item3.moduleid || '' }}" data-jump="{{ item3.path || '' }}"> | ||
312 | + {{# if(item2.menuDesc.indexOf('第三方') == '-1') {}} | ||
313 | + <a href="javascript:;" lay-href="{{ url3 }}" {{ item3.iframe ? 'lay-iframe="true"' : ''}}>{{ item3.name }}</a> | ||
314 | + {{# }else{ }} | ||
315 | + <a href="javascript:;" data-url="{{ url3 }}" layadmin-event="IntegratedEntrance" data-moduleid="{{item3.moduleid}}">{{ item3.name }}</a> | ||
316 | + {{# } }} | ||
317 | + </dd> | ||
318 | + {{# }); }} | ||
319 | + </dl> | ||
320 | + {{# } }} | ||
321 | + </dd> | ||
322 | + {{# }); }} | ||
323 | + </dl> | ||
324 | + {{# } }} | ||
325 | + </li> | ||
326 | + {{# }); }} | ||
327 | + </ul> | ||
328 | + </script> | ||
329 | + </div> | ||
330 | + <div class="right-bottom-tips"></div> | ||
331 | + </div> | ||
332 | + | ||
333 | + <!-- 页面标签 --> | ||
334 | + <script type="text/html" template lay-url="{{sessionStorage.getItem('domainName')}}/api-user/menus/findSettingDefaultMenus" | ||
335 | + lay-done="layui.element.render('nav', 'layadmin-pagetabs-nav')"> | ||
336 | + <div class="layadmin-pagetabs" id="LAY_app_tabs"> | ||
337 | + <div class="layui-icon layadmin-tabs-control layui-icon-prev" layadmin-event="leftPage"></div> | ||
338 | + <div class="layui-icon layadmin-tabs-control layui-icon-next" layadmin-event="rightPage"></div> | ||
339 | + <div class="layui-icon layadmin-tabs-control layui-icon-down"> | ||
340 | + | ||
341 | + <ul class="layui-nav layadmin-tabs-select" lay-filter="layadmin-pagetabs-nav"> | ||
342 | + <li class="layui-nav-item" lay-unselect> | ||
343 | + <a href="javascript:;"></a> | ||
344 | + <dl class="layui-nav-child layui-anim-fadein"> | ||
345 | + <dd layadmin-event="closeThisTabs"><a href="javascript:;">关闭当前标签页</a></dd> | ||
346 | + <dd layadmin-event="closeOtherTabs"><a href="javascript:;">关闭其它标签页</a></dd> | ||
347 | + <dd layadmin-event="closeAllTabs"><a href="javascript:;">关闭全部标签页</a></dd> | ||
348 | + </dl> | ||
349 | + </li> | ||
350 | + </ul> | ||
351 | + </div> | ||
352 | +<!-- <script type="text/html" template lay-url="{{sessionStorage.getItem('domainName')}}/api-user/users/getUserByToken">--> | ||
353 | + | ||
354 | +<!-- <div id="toYTHView_div" style="padding:0 10px;float: left;">--> | ||
355 | +<!-- <dd layadmin-event="toYTHViewScreen" title="一体化控制台"><a><img src="/src/style/img/icon-yitihuadaping.png" style="width: 16px;height: 16px"></a></dd>--> | ||
356 | +<!-- </div>--> | ||
357 | + | ||
358 | + <div class="layui-tab" lay-unauto lay-allowClose="true" lay-filter="layadmin-layout-tabs"> | ||
359 | + | ||
360 | + <ul class="layui-tab-title" id="LAY_app_tabsheader"> | ||
361 | + | ||
362 | + {{# if(d.data.length >= 1 ){ }} | ||
363 | + {{# if(d.data[0].moduleid == 'index'){ }} | ||
364 | + <li lay-id="/"><i class="layui-icon layui-icon-home"></i></li> | ||
365 | + {{# } }} | ||
366 | + {{# if(d.data[0].moduleid != 'index'){ }} | ||
367 | + <li lay-id="/{{d.data[0].moduleid}}/" lay-attr="/{{d.data[0].moduleid}}/"><i class="layui-icon layui-icon-home"></i></li> | ||
368 | + {{# } }} | ||
369 | + {{# } }} | ||
370 | + {{# if(d.data.length == 0){ }} | ||
371 | + <li lay-id="/"><i class="layui-icon layui-icon-home"></i></li> | ||
372 | + {{# } }} | ||
373 | + </ul> | ||
374 | + | ||
375 | + | ||
376 | + </div> | ||
377 | + </div> | ||
378 | + </script> | ||
379 | + | ||
380 | + | ||
381 | + <!-- 主体内容 --> | ||
382 | + <div class="layui-body" id="LAY_app_body"> | ||
383 | + <!-- 单页模式接入--> | ||
384 | + <div class="layadmin-tabsbody-item layui-show"></div> | ||
385 | + </div> | ||
386 | + | ||
387 | + <!-- 辅助元素,一般用于移动设备下遮罩 --> | ||
388 | + <div class="layadmin-body-shade" layadmin-event="shade"></div> | ||
389 | +</div> | ||
390 | + | ||
391 | +<!--告警操作记录--> | ||
392 | +<script type="text/html" id="warnViewWinTpl"> | ||
393 | + <div class="warn-win"> | ||
394 | + <div class="warn-win-item"> | ||
395 | + <h5>告警确认【{{d.confirm.length}}】</h5> | ||
396 | + {{# layui.each(d.confirm, function(index, item){ }} | ||
397 | + <div class="warn-win-item-con"> | ||
398 | + <span>{{layui.util.toDateString(item.confirmTime)}}</span> | ||
399 | + <ul> | ||
400 | + <li>备注:{{item.remark}}</li> | ||
401 | + <li>告警确认人:{{item.confirmUserId}}</li> | ||
402 | + <li>紧急程度:{{item.levelName}}</li> | ||
403 | + </ul> | ||
404 | + </div> | ||
405 | + {{# }); }} | ||
406 | + </div> | ||
407 | + <div class="warn-win-item"> | ||
408 | + <h5>告警关闭【{{d.close.length}}】</h5> | ||
409 | + {{# layui.each(d.close, function(index, item){ }} | ||
410 | + {{# var closeTypeStr = '告警'}} | ||
411 | + {{# if(item.closeType == 1){ closeTypeStr = '通知' } }} | ||
412 | + <div class="warn-win-item-con"> | ||
413 | + <span>备注:{{item.remark}}</span> | ||
414 | + <ul> | ||
415 | + <li>告警关闭时间:{{layui.util.toDateString(item.closeTime)}}</li> | ||
416 | + <li>告警关闭人:{{item.closeUserId}}</li> | ||
417 | + <li>关闭范围:{{closeTypeStr}}</li> | ||
418 | + <li>关闭时长:{{item.closeDuration}}小时</li> | ||
419 | + </ul> | ||
420 | + </div> | ||
421 | + {{# }); }} | ||
422 | + </div> | ||
423 | + <div class="warn-win-item"> | ||
424 | + <h5>告警恢复【{{d.resume.length}}】</h5> | ||
425 | + {{# layui.each(d.resume, function(index, item){ }} | ||
426 | + {{# var resumeTypeStr = '恢复关闭的活动告警'}} | ||
427 | + {{# if(item.resumeType == 1){resumeTypeStr = '恢复历史告警' } }} | ||
428 | + <div class="warn-win-item-con"> | ||
429 | + <span>备注:{{item.remark}}</span> | ||
430 | + <ul> | ||
431 | + <li>告警恢复时间:{{layui.util.toDateString(item.resumeTime)}}</li> | ||
432 | + <li>告警恢复人:{{item.resumeUserId}}</li> | ||
433 | + <li>恢复类型:{{resumeTypeStr}}</li> | ||
434 | + </ul> | ||
435 | + </div> | ||
436 | + {{# }); }} | ||
437 | + </div> | ||
438 | + </div> | ||
439 | +</script> | ||
440 | + | ||
441 | +<!--详细页左侧面板--> | ||
442 | +<script type="text/html" id="detailPageLeftPanel"> | ||
443 | + <div class="detail-left-panel"> | ||
444 | + <a class="detail-left-panel-btn" href="javascript:void(0)"><i class="layui-icon layui-icon-next"></i></a> | ||
445 | + <div class="detail-left-panel-node" style="display: none"> | ||
446 | + {{# layui.each(d.map, function(k, v){ }} | ||
447 | + <div class="left-panel-restype"> | ||
448 | + <div class="layui-title">{{v[0].reTypeName}}</div> | ||
449 | + <div class=""> | ||
450 | + {{# layui.each(v, function(i, e){ }} | ||
451 | + <div class="info-box link" | ||
452 | + data-resid="{{e.targetId}}" | ||
453 | + data-restype="{{e.resType}}" | ||
454 | + data-restypename="{{e.resTypeName}}" | ||
455 | + data-ip="{{e.ip}}" | ||
456 | + data-admin="{{e.admin}}" | ||
457 | + > | ||
458 | + {{e.targetName}} | ||
459 | + </div> | ||
460 | + {{# }); }} | ||
461 | + </div> | ||
462 | + </div> | ||
463 | + {{# }); }} | ||
464 | + {{# if(!Object.keys(d.map).length) { }} | ||
465 | + <div class="left-panel-restype"> | ||
466 | + <div class="desc-box"> | ||
467 | + 暂无关联关系 | ||
468 | + </div> | ||
469 | + </div> | ||
470 | + {{# } }} | ||
471 | + </div> | ||
472 | + </div> | ||
473 | +</script> | ||
474 | + | ||
475 | +<!--下探top30表格展示内容--> | ||
476 | +<script type="text/html" id="detailKpiTableTpl"> | ||
477 | + <table class="layui-table" lay-even="" lay-skin="row"> | ||
478 | + <colgroup> | ||
479 | + <col width="100"> | ||
480 | + <col width="150"> | ||
481 | + <col width="180"> | ||
482 | + <col width="180"> | ||
483 | + </colgroup> | ||
484 | + <thead> | ||
485 | + <tr> | ||
486 | + <th>序号</th> | ||
487 | + <th>进程号</th> | ||
488 | + <th>所属用户</th> | ||
489 | + {{# if(d.kpi == 'KPI7054BC34'){ }} | ||
490 | + <th>使用率</th> | ||
491 | + {{# } }} | ||
492 | + {{# if(d.kpi != 'KPI7054BC34'){ }} | ||
493 | + <th>使用量</th> | ||
494 | + {{# } }} | ||
495 | + </tr> | ||
496 | + </thead> | ||
497 | + <tbody> | ||
498 | + {{# layui.each(d.data, function(index, item){ }} | ||
499 | + <tr> | ||
500 | + <td>{{index + 1}}</td> | ||
501 | + <td>{{item.pid}}</td> | ||
502 | + <td>{{item.username}}</td> | ||
503 | + <td>{{item.usedPercent}}</td> | ||
504 | + <!--<td>{{item.info}}</td>--> | ||
505 | + </tr> | ||
506 | + {{# }); }} | ||
507 | + </tbody> | ||
508 | + </table> | ||
509 | +</script> | ||
510 | + | ||
511 | +<!--corn表达式--> | ||
512 | +<script type="text/html" id="cronHtml" > | ||
513 | + <div id="cronContent" style="color:#000000"> | ||
514 | + <p style="margin: 10px auto; padding: 0px;"> | ||
515 | + <strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(255, 0, 0);">常用表达式例子</span></strong> | ||
516 | + </p> | ||
517 | + <p style="margin: 10px auto; padding: 0px;"> | ||
518 | + <span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(255, 0, 0);"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 0);">(1)</span></span><strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0/2 * * * * ?</span></strong> </span> 表示每2秒 执行任务 | ||
519 | + </p> | ||
520 | + <p style="margin: 10px auto; padding: 0px;"> | ||
521 | + <span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(255, 0, 0);"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 0);">(1)</span></span><strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 0/2 * * * ? </span></strong> </span> 表示每2分钟 执行任务 | ||
522 | + </p> | ||
523 | + | ||
524 | + <p style="margin: 10px auto; padding: 0px;"> | ||
525 | + <span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(255, 0, 0);"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 0);">(1)</span></span><strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 0 2 1 * ?</span></strong> </span> 表示在每月的1日的凌晨2点调整任务 | ||
526 | + </p> | ||
527 | + <p style="margin: 10px auto; padding: 0px;"> | ||
528 | + <span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 0);">(2)</span></span><strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 ? * MON-FRI</span> </strong> 表示周一到周五每天上午10:15执行作业 | ||
529 | + </p> | ||
530 | + <p style="margin: 10px auto; padding: 0px;"> | ||
531 | + (3)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 ? 6L 2002-2006</span></strong> 表示2002-2006年的每个月的最后一个星期五上午10:15执行作 | ||
532 | + </p> | ||
533 | + <p style="margin: 10px auto; padding: 0px;"> | ||
534 | + (4)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 0 10,14,16 * * ?</span></strong> 每天上午10点,下午2点,4点 | ||
535 | + </p> | ||
536 | + <p style="margin: 10px auto; padding: 0px;"> | ||
537 | + (5)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 0/30 9-17 * * ?</span></strong> 朝九晚五工作时间内每半小时 | ||
538 | + </p> | ||
539 | + <p style="margin: 10px auto; padding: 0px;"> | ||
540 | + (6)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 0 12 ? * WED</span></strong> 表示每个星期三中午12点 | ||
541 | + </p> | ||
542 | + <p style="margin: 10px auto; padding: 0px;"> | ||
543 | + (7)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 0 12 * * ?</span></strong> 每天中午12点触发 | ||
544 | + </p> | ||
545 | + <p style="margin: 10px auto; padding: 0px;"> | ||
546 | + (8)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 ? * * </span></strong> 每天上午10:15触发 | ||
547 | + </p> | ||
548 | + <p style="margin: 10px auto; padding: 0px;"> | ||
549 | + (9)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 * * ?</span></strong> 每天上午10:15触发 | ||
550 | + </p> | ||
551 | + <p style="margin: 10px auto; padding: 0px;"> | ||
552 | + (10)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 * * ?</span> </strong> 每天上午10:15触发 | ||
553 | + </p> | ||
554 | + <p style="margin: 10px auto; padding: 0px;"> | ||
555 | + (11)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 * * ? 2005</span></strong> 2005年的每天上午10:15触发 | ||
556 | + </p> | ||
557 | + <p style="margin: 10px auto; padding: 0px;"> | ||
558 | + (12)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 * 14 * * ?</span></strong> 在每天下午2点到下午2:59期间的每1分钟触发 | ||
559 | + </p> | ||
560 | + <p style="margin: 10px auto; padding: 0px;"> | ||
561 | + (13)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 0/5 14 * * ?</span></strong> 在每天下午2点到下午2:55期间的每5分钟触发 | ||
562 | + </p> | ||
563 | + <p style="margin: 10px auto; padding: 0px;"> | ||
564 | + (14)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 0/5 14,18 * * ?</span></strong> 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 | ||
565 | + </p> | ||
566 | + <p style="margin: 10px auto; padding: 0px;"> | ||
567 | + (15)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 0-5 14 * * ?</span> </strong> 在每天下午2点到下午2:05期间的每1分钟触发 | ||
568 | + </p> | ||
569 | + <p style="margin: 10px auto; padding: 0px;"> | ||
570 | + (16)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 10,44 14 ? 3 WED</span></strong> 每年三月的星期三的下午2:10和2:44触发 | ||
571 | + </p> | ||
572 | + <p style="margin: 10px auto; padding: 0px;"> | ||
573 | + (17)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 ? * MON-FRI</span> </strong> 周一至周五的上午10:15触发 | ||
574 | + </p> | ||
575 | + <p style="margin: 10px auto; padding: 0px;"> | ||
576 | + (18)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 15 * ?</span> </strong> 每月15日上午10:15触发 | ||
577 | + </p> | ||
578 | + <p style="margin: 10px auto; padding: 0px;"> | ||
579 | + (19)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 L * ?</span> </strong> 每月最后一日的上午10:15触发 | ||
580 | + </p> | ||
581 | + <p style="margin: 10px auto; padding: 0px;"> | ||
582 | + (20)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 ? * 6L</span> </strong> 每月的最后一个星期五上午10:15触发 | ||
583 | + </p> | ||
584 | + <p style="margin: 10px auto; padding: 0px;"> | ||
585 | + (21)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 ? * 6L 2002-2005</span></strong> 2002年至2005年的每月的最后一个星期五上午10:15触发 | ||
586 | + </p> | ||
587 | + <p style="margin: 10px auto; padding: 0px;"> | ||
588 | + (22)<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);">0 15 10 ? * 6#3</span></strong> 每月的第三个星期五上午10:15触发 | ||
589 | + </p> | ||
590 | + <p style="margin: 10px auto; padding: 0px;"> | ||
591 | + | ||
592 | + </p> | ||
593 | + </div> | ||
594 | +</script> | ||
595 | + | ||
596 | +<!--资源名称--> | ||
597 | +<script type="text/html" id="resindex_resName"> | ||
598 | + <!-- 更改单元格溢出时的tip跑到左上角 LSQ 2022/1/6--> | ||
599 | + <div id="res-div"> | ||
600 | + {{# var urlLast=window.location.hash; | ||
601 | + var w=$(".layui-table thead th[data-field='resName']").data('minwidth'); | ||
602 | + if(urlLast=="#/res/index"){ | ||
603 | + w=$("[lay-id='resListTable'] table thead th[data-field='resName'").data('minwidth'); | ||
604 | + | ||
605 | + }else if(urlLast=="#/biz/index"){ | ||
606 | + w=$("[lay-id='bizListTable'] table thead th[data-field='resName'").data('minwidth'); | ||
607 | + } | ||
608 | + var maxW=(w-45)+'px'; | ||
609 | + var styleW="float: left;max-width: "+maxW+";overflow: hidden; text-overflow: ellipsis; white-space: nowrap;display: inline-block;"; | ||
610 | + }} | ||
611 | + <span lay-tips="{{ d.resName }}" style="{{styleW}}" data-zymc="{{ d.resId }}" data-restype="{{d.resType}}" data-name="{{d.resName}}" data-childrennum="{{d.childrenNum}}" data-ip="{{ d.ip }}" data-resTypeName="{{ d.resTypeName }}" data-admin="{{ d.admin }}" data-adminname="{{ d.adminName }}" data-pingenable="{{d.pingEnable}}" data-manageIp="{{d.manageIp}}" data-collProtocol="{{d.collProtocol}}" data-provider="{{d.provider}}" data-state="{{d.state}}" class="layui-table-link">{{ d.resName }}</span> | ||
612 | + {{# if (d.favId == null) { }} | ||
613 | + <a class="layui-icon layui-icon-rate hide" data-favid="{{d.favId}}" data-id="{{d.resId}}" lay-tips="加入收藏夹" style="font-size: 14px"></a> | ||
614 | + {{# } else { }} | ||
615 | + <a class="layui-icon layui-icon-rate-solid" data-favid="{{d.favId}}" style="color: #FEB61E; font-size: 14px; margin-left: 1px;" data-id="{{d.resId}}" lay-tips="移出收藏夹"></a> | ||
616 | + {{# } }} | ||
617 | + <a class="layui-icon reslist-view-topo hide" data-resid="{{d.resId}}" style="color: #FEB61E; font-size: 14px; margin-left: 1px;" lay-tips="查看资源拓扑"><i class="iconfont"></i></a> | ||
618 | + <!--{{# if (d.resCategory == 'share' && d.hardwareFlag && d.hardwareFlag.endsWith("Y")) { }} | ||
619 | + <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"></i></a> | ||
620 | + {{# } }}--> | ||
621 | + </div> | ||
622 | +</script> | ||
623 | + | ||
624 | +<!--最大文件系统使用率--> | ||
625 | +<script type="text/html" id="fileUseRateTpl"> | ||
626 | + <div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI449F5365" data-flag="fs" data-name="{{d.os=='windows'?'磁盘使用情况':'文件系统使用情况'}}" data-showtype="bar" data-barkpiid="{{d.os=='windows'?'KPI29D42042,KPI1988842F':'KPIA91F44E7,KPI98306224'}}" data-barxaxis="{{d.os=='windows'?'KPI9D22EAB6':'KPI7AC1664E'}}" | ||
627 | + data-warning="0" data-ident="1" data-trend="0"> | ||
628 | + <div class="layui-progress layui-progress-big" lay-showpercent="true"> | ||
629 | + <div style="position:absolute; z-index:1;width: 100%" id="{{d.resId}}_bizfileName" lay-tips="{{d.fileSysUseName}}" | ||
630 | + data-id="{{d.resId}}_bizfileName" data-message="{{d.fileSysUseName}}"><span style="color: #000000;">{{d.fileSysUseName}}</span> | ||
631 | + </div> | ||
632 | + <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':'')) }}" | ||
633 | + lay-percent="{{ d.fileSysUseRate }}%" | ||
634 | + style="width: {{ d.fileSysUseRate }}%;"> | ||
635 | + </div> | ||
636 | + </div> | ||
637 | + <span class="layui-progress-text">{{ (d.fileSysUseRate == null || d.fileSysUseRate == '' || d.fileSysUseRate === '未知' || d.fileSysUseRate === '无' )? '0%' : d.fileSysUseRate +'%' }}</span> | ||
638 | + </div> | ||
639 | +</script> | ||
640 | +<!--CPU使用率--> | ||
641 | +<script type="text/html" id="cpuRateTpl"> | ||
642 | + <div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI7054BC34" data-flag="cpu" data-name="CPU使用率" | ||
643 | + data-warning="0" data-ident="1" data-trend="1"> | ||
644 | + <div class="layui-progress layui-progress-big" lay-showpercent="true"> | ||
645 | + <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':''))}}" | ||
646 | + lay-percent="{{ d.cpuRate }}%" | ||
647 | + style="width: {{ d.cpuRate }}%;"> | ||
648 | + </div> | ||
649 | + </div> | ||
650 | + <span class="layui-progress-text">{{ (d.cpuRate == null || d.cpuRate == '' || d.cpuRate === '未知' || d.cpuRate === '无' )? '0%' : d.cpuRate +'%' }}</span> | ||
651 | + </div> | ||
652 | +</script> | ||
653 | +<!--内存使用率--> | ||
654 | +<script type="text/html" id="memoryRateTpl"> | ||
655 | + <div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI31CB8D97" data-flag="mem" data-name="内存使用率" | ||
656 | + data-warning="1" data-ident="1" data-trend="1"> | ||
657 | + <div class="layui-progress layui-progress-big" lay-showpercent="true"> | ||
658 | + <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':''))}}" | ||
659 | + lay-percent="{{ d.memoryRate }}%" | ||
660 | + style="width: {{ d.memoryRate }}%;"> | ||
661 | + </div> | ||
662 | + </div> | ||
663 | + <span class="layui-progress-text">{{ (d.memoryRate == null || d.memoryRate == '' || d.memoryRate === '未知' || d.memoryRate === '无' )? '0%' : d.memoryRate +'%' }}</span> | ||
664 | + </div> | ||
665 | +</script> | ||
666 | +<!--虚拟内存使用率--> | ||
667 | +<script type="text/html" id="vmmemoryRateTpl"> | ||
668 | + <div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI20352505" data-flag="vmem" data-name="虚拟内存使用率" | ||
669 | + data-warning="1" data-ident="1" data-trend="1"> | ||
670 | + <div class="layui-progress layui-progress-big" lay-showpercent="true"> | ||
671 | + <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':''))}}" | ||
672 | + lay-percent="{{ d.vmmemoryUseRate }}%" | ||
673 | + style="width: {{ d.vmmemoryUseRate }}%;"> | ||
674 | + </div> | ||
675 | + </div> | ||
676 | + <span class="layui-progress-text">{{ (d.vmmemoryUseRate == null || d.vmmemoryUseRate == '' || d.vmmemoryUseRate === '未知' || d.vmmemoryUseRate === '无' )? '0%' : d.vmmemoryUseRate +'%' }}</span> | ||
677 | + </div> | ||
678 | +</script> | ||
679 | +<!--会话百分比--> | ||
680 | +<script type="text/html" id="sessionRateTpl"> | ||
681 | + <div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI18F18278" data-name="活动会话百分比" data-flag="session" | ||
682 | + data-warning="0" data-ident="1" data-trend="0"> | ||
683 | + <div class="layui-progress layui-progress-big" lay-showpercent="true"> | ||
684 | + <div class="layui-progress-bar layui-bg-green {{ d.sessionRate >= 80 ? 'layui-bg-red' : (d.sessionRate <= 50 ? '' : 'layui-bg-orange') }}" | ||
685 | + lay-percent="{{ d.sessionRate }}%" | ||
686 | + style="width: {{ d.sessionRate }}%;"> | ||
687 | + </div> | ||
688 | + </div> | ||
689 | + <span class="layui-progress-text">{{ (d.sessionRate == null || d.sessionRate == '' || d.sessionRate === '未知' || d.sessionRate === '无' )? '0%' : d.sessionRate +'%' }}</span> | ||
690 | + </div> | ||
691 | +</script> | ||
692 | +<!--CPU分配率--> | ||
693 | +<script type="text/html" id="cpuSetRateTpl"> | ||
694 | + <div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPIBFA3F5CD" data-name="CPU分配率" data-flag="cpu" | ||
695 | + data-warning="0" data-ident="1" data-trend="0"> | ||
696 | + {{# | ||
697 | + d.cpuSetRate = parseFloat(d.cpuSetRate).toFixed(2); | ||
698 | + }} | ||
699 | + <div class="layui-progress layui-progress-big" lay-showpercent="true"> | ||
700 | + <div class="layui-progress-bar layui-bg-green {{ d.cpuSetRate >= 80 ? 'layui-bg-red' : (d.cpuSetRate <= 50 ? '' : 'layui-bg-orange') }}" | ||
701 | + lay-percent="{{ d.cpuSetRate }}%" | ||
702 | + style="width: {{ d.cpuSetRate }}%;"> | ||
703 | + </div> | ||
704 | + </div> | ||
705 | + <span class="layui-progress-text">{{ (d.cpuSetRate == null || d.cpuSetRate == '' || d.cpuSetRate === '未知' || d.cpuSetRate === '无' )? '0%' : d.cpuSetRate +'%' }}</span> | ||
706 | + </div> | ||
707 | +</script> | ||
708 | +<!--内存分配率--> | ||
709 | +<script type="text/html" id="memorySetRateTpl"> | ||
710 | + <div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPIC40A80AC" data-name="内存分配率" data-flag="mem" | ||
711 | + data-warning="0" data-ident="1" data-trend="0"> | ||
712 | + <div class="layui-progress layui-progress-big" lay-showpercent="true"> | ||
713 | + <div class="layui-progress-bar layui-bg-green {{ d.memorySetRate >= 80 ? 'layui-bg-red' : (d.memorySetRate <= 50 ? '' : 'layui-bg-orange') }}" | ||
714 | + lay-percent="{{ d.memorySetRate }}%" | ||
715 | + style="width: {{ d.memorySetRate }}%;"> | ||
716 | + </div> | ||
717 | + </div> | ||
718 | + <span class="layui-progress-text">{{ (d.memorySetRate == null || d.memorySetRate == '' || d.memorySetRate === '未知' || d.memorySetRate === '无' )? '0%' : d.memorySetRate +'%' }}</span> | ||
719 | + </div> | ||
720 | +</script> | ||
721 | +<!--存储分配率--> | ||
722 | +<script type="text/html" id="storageSetRateTpl"> | ||
723 | + <div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI46BAA9BE" data-name="存储分配率" data-flag="storage" | ||
724 | + data-warning="0" data-ident="1" data-trend="0"> | ||
725 | + <div class="layui-progress layui-progress-big" lay-showpercent="true"> | ||
726 | + <div class="layui-progress-bar layui-bg-green {{ d.storageSetRate >= 80 ? 'layui-bg-red' : (d.storageSetRate <= 50 ? '' : 'layui-bg-orange') }}" | ||
727 | + lay-percent="{{ d.storageSetRate }}%" | ||
728 | + style="width: {{ d.storageSetRate }}%;"> | ||
729 | + </div> | ||
730 | + </div> | ||
731 | + <span class="layui-progress-text">{{ (d.storageSetRate == null || d.storageSetRate == '' || d.storageSetRate === '未知' || d.storageSetRate === '无' )? '0%' : d.storageSetRate +'%' }}</span> | ||
732 | + </div> | ||
733 | +</script> | ||
734 | +<!--连接状态--> | ||
735 | +<script type="text/html" id="linkStateTpl"> | ||
736 | +{{# | ||
737 | + var linkStateHtml = ''; | ||
738 | + var linkStateTips = '无连接信息'; | ||
739 | + if(d.linkStateList && d.linkStateList.length >=0 ) { | ||
740 | + linkStateTips = ''; | ||
741 | + if(d.linkStateList.length == 1) { | ||
742 | + var linkState = d.linkStateList[0]; | ||
743 | + linkStateTips = `${linkState.protocol}: ${linkState.state}`; | ||
744 | + if(linkState.state.indexOf('成功') !== -1) { | ||
745 | + linkStateHtml = '<button type="button" class="layui-btn layui-btn-radius layui-bg-green layui-btn-xs p-0-15 cant-click">成功</button>'; | ||
746 | + } else { | ||
747 | + linkStateHtml = `<button type="button" | ||
748 | + id="${d.resId}_bizdanger" | ||
749 | + data-message="${d.message}" | ||
750 | + data-state="${d.state}" | ||
751 | + data-id="${d.resId}_bizdanger" | ||
752 | + class="layui-btn layui-btn-danger layui-bg-red layui-btn-radius layui-btn-xs p-0-15 cant-click"> | ||
753 | + 失败 | ||
754 | + </button>`; | ||
755 | + } | ||
756 | + } else { | ||
757 | + if(d.linkStateList.length == 0){ | ||
758 | + if(d.hostState == 'active' || d.hostState == 'connected' || d.hostState == '正常' ){ | ||
759 | + linkStateHtml = '<button type="button" class="layui-btn layui-btn-radius layui-bg-green layui-btn-xs p-0-15 cant-click">成功</button>'; | ||
760 | + linkStateTips += `<li class='li-link-state-tips-red'>自动发现: 连接成功</li>`; | ||
761 | + }else{ | ||
762 | + linkStateHtml = `<button type="button" | ||
763 | + id="${d.resId}_bizdanger" | ||
764 | + data-message="${d.message}" | ||
765 | + data-state="${d.state}" | ||
766 | + data-id="${d.resId}_bizdanger" | ||
767 | + class="layui-btn layui-btn-danger layui-bg-red layui-btn-radius layui-btn-xs p-0-15 cant-click"> | ||
768 | + 失败 | ||
769 | + </button>`; | ||
770 | + if(d.hostState!=''){ | ||
771 | + linkStateTips += `<li class='li-link-state-tips-red'>自动发现: 连接失败</li>`; | ||
772 | + }else{ | ||
773 | + linkStateTips += `<li class='li-link-state-tips-red'>ssh: 连接失败</li>`; | ||
774 | + } | ||
775 | + } | ||
776 | + }else{ | ||
777 | + linkStateTips += `<ul class='ul-link-state-tips'>`; | ||
778 | + layui.each(d.linkStateList, function(index, value) { | ||
779 | + if(value.state.indexOf('成功') !== -1) { | ||
780 | + linkStateTips += `<li class='li-link-state-tips-green'>${value.protocol}: ${value.state}</li>`; | ||
781 | + linkStateHtml += '<span class="layui-badge-dot layui-bg-green"></span>'; | ||
782 | + } else { | ||
783 | + linkStateTips += `<li class='li-link-state-tips-red'>${value.protocol}: ${value.state}</li>`; | ||
784 | + linkStateHtml += '<span class="layui-badge-dot layui-bg-red"></span>'; | ||
785 | + } | ||
786 | + }); | ||
787 | + linkStateTips += '</ul>'; | ||
788 | + } | ||
789 | + } | ||
790 | + } | ||
791 | +}} | ||
792 | + <div class="div-link-state-list" lay-tips="{{linkStateTips}}"> | ||
793 | + {{linkStateHtml}} | ||
794 | + </div> | ||
795 | +</script> | ||
796 | +<!--详情页面连接状态--> | ||
797 | +<script type="text/html" id="linkStateDetailTpl"> | ||
798 | +{{# | ||
799 | + var linkStateHtml = ''; | ||
800 | + var linkStateTips = '无连接信息'; | ||
801 | + if(d.linkStateList && d.linkStateList.length) { | ||
802 | + linkStateTips = ''; | ||
803 | + if(d.linkStateList.length == 1) { | ||
804 | + var linkState = d.linkStateList[0]; | ||
805 | + linkStateTips = `${linkState.protocol}: ${linkState.state}`; | ||
806 | + if(linkState.state.indexOf('成功') !== -1) { | ||
807 | + linkStateHtml = `<span class="span-green">${linkState.state}</span>`; | ||
808 | + } else { | ||
809 | + linkStateHtml = `<span class="span-red">${linkState.state}</span>`; | ||
810 | + } | ||
811 | + } else { | ||
812 | + linkStateTips += `<ul class='ul-link-state-tips'>`; | ||
813 | + layui.each(d.linkStateList, function(index, value) { | ||
814 | + if(value.state.indexOf('成功') !== -1) { | ||
815 | + linkStateTips += `<li class='li-link-state-tips-green'>${value.protocol}: ${value.state}</li>`; | ||
816 | + linkStateHtml += '<div class="layui-badge-dot layui-bg-green"></div>'; | ||
817 | + } else { | ||
818 | + linkStateTips += `<li class='li-link-state-tips-red'>${value.protocol}: ${value.state}</li>`; | ||
819 | + linkStateHtml += '<div class="layui-badge-dot layui-bg-red"></div>'; | ||
820 | + } | ||
821 | + }); | ||
822 | + linkStateTips += '</ul>'; | ||
823 | + } | ||
824 | + } | ||
825 | +}} | ||
826 | + <div class="div-link-state-list" lay-tips="{{linkStateTips}}"> | ||
827 | + {{linkStateHtml}} | ||
828 | + </div> | ||
829 | +</script> | ||
830 | +<!--电源状态--> | ||
831 | +<script type="text/html" id="powerStateTpl"> | ||
832 | + {{# if(d.powerState != null && d.powerState == 'poweredOn'){ }} | ||
833 | + <button type="button" class="layui-btn layui-btn-radius layui-bg-green layui-btn-xs p-0-15 cant-click"> | ||
834 | + 开机 | ||
835 | + </button> | ||
836 | + {{# }else if(d.powerState != null && d.powerState == 'poweredOff'){ }} | ||
837 | + <button type="button" class="layui-btn layui-bg-red layui-btn-radius layui-btn-xs p-0-15 cant-click"> | ||
838 | + 关机 | ||
839 | + </button> | ||
840 | + {{# }else if(d.powerState != null && d.powerState == 'standBy'){ }} | ||
841 | + <button type="button" class="layui-btn layui-bg-orange layui-btn-radius layui-btn-xs p-0-15 cant-click"> | ||
842 | + 待机 | ||
843 | + </button> | ||
844 | + {{# }else if(d.powerState != null && d.powerState == 'unknown'){ }} | ||
845 | + <button type="button" class="layui-btn layui-bg-gray layui-btn-radius layui-btn-xs p-0-15 cant-click"> | ||
846 | + 未知 | ||
847 | + </button> | ||
848 | + {{# }else{ }} | ||
849 | + <button type="button" | ||
850 | + class="layui-btn layui-btn-radius layui-bg-gray layui-btn-xs p-0-15 cant-click">{{ | ||
851 | + '未监控'}} | ||
852 | + </button> | ||
853 | + {{# }}} | ||
854 | +</script> | ||
855 | +<!--健康状态--> | ||
856 | +<script type="text/html" id="healthTpl"> | ||
857 | + {{# if(d.state != 'new'){ }} | ||
858 | + {{# if(d.health === '1'){ }} | ||
859 | + <button type="button" class="layui-btn layui-btn-danger layui-bg-red layui-btn-radius layui-btn-xs p-0-15 cant-click">中 | ||
860 | + </button> | ||
861 | + {{# } }} | ||
862 | + {{# if(d.health === '2'){ }} | ||
863 | + <button type="button" class="layui-btn layui-btn-warm layui-bg-orange layui-btn-radius layui-btn-xs p-0-15 cant-click">良 | ||
864 | + </button> | ||
865 | + {{# } }} | ||
866 | + {{# if(d.health === '3'){ }} | ||
867 | + <button type="button" class="layui-btn layui-btn-radius layui-bg-green layui-btn-xs p-0-15 cant-click">优</button> | ||
868 | + {{# } }} | ||
869 | + {{# } }} | ||
870 | +</script> | ||
871 | +<!--主机状态--> | ||
872 | +<script type="text/html" id="hostStateTpl"> | ||
873 | + {{# if(d.hostState != null && d.hostState == 'connected'){ }} | ||
874 | + <button type="button" class="layui-btn layui-btn-radius layui-bg-green layui-btn-xs p-0-15 cant-click"> | ||
875 | + 已连接 | ||
876 | + </button> | ||
877 | + {{# }else if(d.hostState != null && d.hostState == 'notResponding'){ }} | ||
878 | + <button type="button" class="layui-btn layui-bg-orange layui-btn-radius layui-btn-xs p-0-15 cant-click"> | ||
879 | + 未响应 | ||
880 | + </button> | ||
881 | + {{# }else if(d.hostState != null && d.hostState == 'disconnected'){ }} | ||
882 | + <button type="button" class="layui-btn layui-bg-red layui-btn-radius layui-btn-xs p-0-15 cant-click"> | ||
883 | + 断开连接 | ||
884 | + </button> | ||
885 | + {{# }else if(d.hostState != null && d.hostState == '正常'){ }} | ||
886 | + <button type="button" class="layui-btn layui-bg-green layui-btn-radius layui-btn-xs p-0-15 cant-click"> | ||
887 | + 正常 | ||
888 | + </button> | ||
889 | + {{# }else{ }} | ||
890 | + <button type="button" | ||
891 | + class="layui-btn layui-btn-radius layui-bg-gray layui-btn-xs p-0-15 cant-click">{{ | ||
892 | + '未监控'}} | ||
893 | + </button> | ||
894 | + {{# }}} | ||
895 | +</script> | ||
896 | +<!--ping状态--> | ||
897 | +<script type="text/html" id="pingStatusTpl"> | ||
898 | + {{# if(d.pingStatus === '正常'){ }} | ||
899 | + <button type="button" class="layui-btn layui-btn-danger layui-bg-green layui-btn-radius layui-btn-xs p-0-15">正常 | ||
900 | + </button> | ||
901 | + {{# }else{ }} | ||
902 | + <button type="button" class="layui-btn layui-btn-radius layui-bg-red layui-btn-xs p-0-15">异常</button> | ||
903 | + {{# } }} | ||
904 | +</script> | ||
905 | +<!--资源状态--> | ||
906 | +<script type="text/html" id="resStateTpl"> | ||
907 | + {{# | ||
908 | + switch (d.state) { | ||
909 | + case "new" : | ||
910 | + }} <button type="button" class="layui-btn layui-btn-warm layui-bg-blue layui-btn-radius layui-btn-xs p-0-15 cant-click">未监控</button> {{# | ||
911 | + break; | ||
912 | + case "monitor" : | ||
913 | + }} <button type="button" class="layui-btn layui-btn-warm layui-bg-green layui-btn-radius layui-btn-xs p-0-15 cant-click">监控中</button> {{# | ||
914 | + break; | ||
915 | + case "stop" : | ||
916 | + }} <button type="button" class="layui-btn layui-btn-warm layui-bg-red layui-btn-radius layui-btn-xs p-0-15 cant-click">暂停监控</button> {{# | ||
917 | + break; | ||
918 | + case "alarmIgnore" : | ||
919 | + }} <button type="button" class="layui-btn layui-btn-warm layui-bg-orange layui-btn-radius layui-btn-xs p-0-15 cant-click">告警压制中</button> {{# | ||
920 | + break; | ||
921 | + } | ||
922 | + }} | ||
923 | +</script> | ||
924 | +<!--判断树结构有无子节点--> | ||
925 | +<script type="text/html" id="bizResNameTpl"> | ||
926 | + <div> | ||
927 | + {{# if(d.resType == 'MIDDLEWARE_WEBLOGIC' && (d.parentId == null || d.parentId == '') ){ }} | ||
928 | + <span data-childrennum="{{d.childrenNum}}">{{d.resName}}</span> | ||
929 | + {{# }else{ }} | ||
930 | + <span data-zymc="{{d.resId}}" data-restype="{{d.resType}}" data-name="{{d.resName}}" data-ip="{{d.ip}}" data-childrennum="{{d.childrenNum}}" data-resTypeName="{{d.resTypeName}}" data-admin="{{d.admin}}" data-pingenable="{{d.pingEnable}}" class="layui-table-link">{{d.resName}}</span> | ||
931 | + {{# } }} | ||
932 | + {{# if (d.favId == null) { }} | ||
933 | + <a class="layui-icon layui-icon-rate hide" data-favid="{{d.favId}}" data-id="{{d.resId}}" lay-tips="加入收藏夹" style="font-size: 14px"></a> | ||
934 | + {{# } else { }} | ||
935 | + <a class="layui-icon layui-icon-rate-solid" data-favid="{{d.favId}}" style="color: #FEB61E; font-size: 14px; margin-left: 10px;" data-id="{{d.resId}}" lay-tips="移出收藏夹"></a> | ||
936 | + {{# } }} | ||
937 | + <a class="layui-icon reslist-view-topo hide" data-resid="{{d.resId}}" style="color: #FEB61E; font-size: 14px; margin-left: 10px;" lay-tips="查看资源拓扑"><i class="iconfont"></i></a> | ||
938 | + </div> | ||
939 | +</script> | ||
940 | +<!--表空间使用率(最大)--> | ||
941 | +<script type="text/html" id="tableSpaceUseRateTpl"> | ||
942 | + <div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI64B1610A" data-name="表空间使用率" data-showtype="bar" data-barkpiid="KPI2EC3F15A,KPI6AD9EBD6" data-barxaxis="KPI4332BAC8" | ||
943 | + data-warning="0" data-ident="1" data-trend="0" data-flag="tps" > | ||
944 | + <div class="layui-progress layui-progress-big" lay-showpercent="true"> | ||
945 | + <div style="position:absolute; z-index:1;width: 100%" id="{{d.resId}}_bizTableSpaceUseRate" class="showTipsName" data-id="{{d.resId}}_bizTableSpaceUseRate" data-message="{{d.tableSpaceUseName}}"><span style="color: #000000;" >{{d.tableSpaceUseName}}</span></div> | ||
946 | + <div class="layui-progress-bar layui-bg-green {{ d.tableSpaceUseRate >= 80 ? 'layui-bg-red' : (d.tableSpaceUseRate <= 50 ? '' : 'layui-bg-orange') }}" | ||
947 | + lay-percent="{{ d.tableSpaceUseRate }}%" | ||
948 | + style="width: {{ d.tableSpaceUseRate }}%;"> | ||
949 | + </div> | ||
950 | + </div> | ||
951 | + <span class="layui-progress-text">{{ (d.tableSpaceUseRate == null || d.tableSpaceUseRate == '' || d.tableSpaceUseRate === '未知' || d.tableSpaceUseRate === '无' )? '0%' : d.tableSpaceUseRate +'%' }}</span> | ||
952 | + </div> | ||
953 | +</script> | ||
954 | +<!--ASM磁盘空间使用率--> | ||
955 | +<script type="text/html" id="asmDiskUsedRateTpl"> | ||
956 | + <div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI922F8FF7" data-name="ASM磁盘空间使用率" data-showtype="bar" data-barkpiid="KPI4D710FDA,KPI811E751E" data-barxaxis="KPI50267025" | ||
957 | + data-warning="0" data-ident="1" data-trend="0" data-flag="asm" > | ||
958 | + <div class="layui-progress layui-progress-big" lay-showpercent="true"> | ||
959 | + <div style="position:absolute; z-index:1;width: 100%" id="{{d.resId}}_asmDiskUsedRate" class="showTipsName" data-id="{{d.resId}}_asmDiskUsedRate" data-message="{{d.asmDiskUsedRate}}"><span style="color: #000000;" >{{d.asmDiskUsedRateName}}</span></div> | ||
960 | + <div class="layui-progress-bar layui-bg-green {{ d.asmDiskUsedRate >= 80 ? 'layui-bg-red' : (d.asmDiskUsedRate <= 50 ? '' : 'layui-bg-orange') }}" | ||
961 | + lay-percent="{{ d.asmDiskUsedRate }}%" | ||
962 | + style="width: {{ d.asmDiskUsedRate }}%;"> | ||
963 | + </div> | ||
964 | + </div> | ||
965 | + <span class="layui-progress-text">{{ (d.asmDiskUsedRate == null || d.asmDiskUsedRate == '' || d.asmDiskUsedRate === '未知' || d.asmDiskUsedRate === '无' )? '0%' : d.asmDiskUsedRate +'%' }}</span> | ||
966 | + </div> | ||
967 | +</script> | ||
968 | +<!--weblogic定制表头--> | ||
969 | +<script type="text/html" id="webLogicResNameTpl"> | ||
970 | + <div> | ||
971 | + {{# if(d.resType == 'MIDDLEWARE_WEBLOGIC' && (d.parentId == null || d.parentId == '') ){ }} | ||
972 | + <span data-childrennum="{{d.childrenNum}}">{{d.resName}}</span> | ||
973 | + {{# }else{ }} | ||
974 | + <span data-zymc="{{ d.resId }}" data-restype="{{d.resType}}" data-name="{{d.resName}}" data-childrennum="{{d.childrenNum}}" data-ip="{{ d.ip }}" data-resTypeName="{{ d.resTypeName }}" data-admin="{{ d.admin }}" data-pingenable="{{d.pingEnable}}" class="layui-table-link">{{ d.resName }}</span> | ||
975 | + {{# } }} | ||
976 | + {{# if (d.favId == null) { }} | ||
977 | + <a class="layui-icon layui-icon-rate hide" data-favid="{{d.favId}}" data-id="{{d.resId}}" lay-tips="加入收藏夹" style="font-size: 14px"></a> | ||
978 | + {{# } else { }} | ||
979 | + <a class="layui-icon layui-icon-rate-solid" data-favid="{{d.favId}}" style="color: #FEB61E; font-size: 14px; margin-left: 10px;" data-id="{{d.resId}}" lay-tips="移出收藏夹"></a> | ||
980 | + {{# } }} | ||
981 | + <a class="layui-icon reslist-view-topo hide" data-resid="{{d.resId}}" style="color: #FEB61E; font-size: 14px; margin-left: 10px;" lay-tips="查看资源拓扑"><i class="iconfont"></i></a> | ||
982 | + </div> | ||
983 | +</script> | ||
984 | +<!--资源池状态--> | ||
985 | +<script type="text/html" id="clusterStateTpl"> | ||
986 | + {{# if(d.clusterState === '正常'){ }} | ||
987 | + <button type="button" class="layui-btn layui-btn-danger layui-bg-green layui-btn-radius layui-btn-xs p-0-15">正常 | ||
988 | + </button> | ||
989 | + {{# }else{ }} | ||
990 | + <button type="button" class="layui-btn layui-btn-radius layui-bg-red layui-btn-xs p-0-15">异常</button> | ||
991 | + {{# } }} | ||
992 | +</script> | ||
993 | +<!--运行状态--> | ||
994 | +<script type="text/html" id="runStateTpl"> | ||
995 | + {{# if(d.runState === '正常'){ }} | ||
996 | + <button type="button" class="layui-btn layui-btn-danger layui-bg-green layui-btn-radius layui-btn-xs p-0-15">正常 | ||
997 | + </button> | ||
998 | + {{# }else{ if(d.runState === '运行中'){ }} | ||
999 | + <button type="button" class="layui-btn layui-btn-danger layui-bg-green layui-btn-radius layui-btn-xs p-0-15">运行中</button> | ||
1000 | + {{# }else{ }} | ||
1001 | + <button type="button" class="layui-btn layui-btn-radius layui-bg-red layui-btn-xs p-0-15">异常</button> | ||
1002 | + {{# } }} | ||
1003 | + {{# } }} | ||
1004 | +</script> | ||
1005 | +<script type="text/html" id="weblogicIpTpl"> | ||
1006 | + <div>{{d.ip?d.ip:""}}</div> | ||
1007 | +</script> | ||
1008 | +<script type="text/html" id="weblogicListenAddrTpl"> | ||
1009 | + <div>{{d.listenAddr?d.listenAddr:""}}</div> | ||
1010 | +</script> | ||
1011 | +<!--cup核心数--> | ||
1012 | +<script type="text/html" id="cpuCoresTpl"> | ||
1013 | + <div>{{d.cpuCores?(d.cpuCores+"核"):""}}</div> | ||
1014 | +</script> | ||
1015 | +<!--cup个数--> | ||
1016 | +<script type="text/html" id="cpuNumTpl"> | ||
1017 | + <div>{{d.cpuNum?(d.cpuNum+"个"):""}}</div> | ||
1018 | +</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 type="text" name="username" lay-verify="required" placeholder="监控账号" class="layui-input"> | ||
7 | + </div> | ||
8 | + <div class="layui-form-item"> | ||
9 | + <div class=""> | ||
10 | + <select id="refSystem" name="refSystem" lay-filter="refSystem" lay-verify="required" class="layui-select layui-input"></select> | ||
11 | + </div> | ||
12 | + </div> | ||
13 | + <div class="layui-form-item"> | ||
14 | + <label class="layadmin-user-login-icon"></label> | ||
15 | + <input type="text" name="account" lay-verify="required" placeholder="系统账号" class="layui-input"> | ||
16 | + </div> | ||
17 | + <div class="layui-form-item"> | ||
18 | + <label class="layadmin-user-login-icon"></label> | ||
19 | + <input type="password" name="password" lay-verify="required" placeholder="系统密码" class="layui-input"> | ||
20 | + </div> | ||
21 | + <div class="layui-form-item"> | ||
22 | + <div class="setting-btn"> | ||
23 | + <button class="layui-btn" id="setCommit" lay-submit lay-filter="setAccount">保存</button> | ||
24 | + <button class="layui-btn layui-btn-primary" id="setClose">取消</button> | ||
25 | + </div> | ||
26 | + </div> | ||
27 | + </div> | ||
28 | + </div> | ||
29 | +</div> | ||
30 | + | ||
31 | +<script> | ||
32 | + layui.use(['admin', 'form','common','sessions'], function () { | ||
33 | + var $ = layui.$; | ||
34 | + var admin = layui.admin; | ||
35 | + var form = layui.form; | ||
36 | + var common = layui.common; | ||
37 | + var sessions = layui.sessions; | ||
38 | + var accessToken = sessions.getToken().access_token; | ||
39 | + form.render(); | ||
40 | + | ||
41 | + //填充用户监控账号 | ||
42 | + var username = localStorage.getItem("lgn"); | ||
43 | + $('input[name="username"]').val(username); | ||
44 | + | ||
45 | + //第三方系统下拉框切换事件监听 | ||
46 | + form.on('select(refSystem)', function(data){ | ||
47 | + if (data.value != ''){ | ||
48 | + getOldAccountAndPwd(username,data.value); | ||
49 | + } | ||
50 | + }); | ||
51 | + | ||
52 | + //第三方系统下拉框数据填充 | ||
53 | + common.ddicSelect('refSystem','systems',function (datalist) { | ||
54 | + if (datalist.length == 1){ | ||
55 | + $('#refSystem').val(datalist[0].ddicCode); | ||
56 | + getOldAccountAndPwd(username,datalist[0].ddicCode); | ||
57 | + } | ||
58 | + form.render('select'); | ||
59 | + }); | ||
60 | + | ||
61 | + $('#setClose').on('click',function () { | ||
62 | + layer.closeAll(); | ||
63 | + }); | ||
64 | + | ||
65 | + //保存点击事件 | ||
66 | + form.on('submit(setAccount)', function (obj) { | ||
67 | + var userRefSystem = {}; | ||
68 | + //修改密码 | ||
69 | + userRefSystem.username = $('input[name="username"]').val(); | ||
70 | + userRefSystem.refSystem = $('#refSystem').val(); | ||
71 | + userRefSystem.account = $('input[name="account"]').val(); | ||
72 | + userRefSystem.password = $('input[name="password"]').val(); | ||
73 | + saveOrUpdate(userRefSystem); | ||
74 | + }); | ||
75 | + | ||
76 | + //增加或更细第三方账号关联信息 | ||
77 | + function saveOrUpdate(data) { | ||
78 | + admin.req({ | ||
79 | + url: common.domainName + '/api-web/userRefSystem/saveOrUpdate?access_token='+accessToken, | ||
80 | + type: "POST", | ||
81 | + dataType: "json", | ||
82 | + contentType: 'application/json; charset=utf-8', | ||
83 | + data: JSON.stringify(data), | ||
84 | + success: function (res) { | ||
85 | + if (res){ | ||
86 | + var icon = 7; | ||
87 | + if (res.success){ | ||
88 | + icon = 1; | ||
89 | + } | ||
90 | + layer.msg(res.msg, { offset: '15px' , icon: icon , time: 1000 },function (){ | ||
91 | + if (res.success){ | ||
92 | + layer.closeAll(); | ||
93 | + } | ||
94 | + }); | ||
95 | + } | ||
96 | + | ||
97 | + } | ||
98 | + }) | ||
99 | + } | ||
100 | + | ||
101 | + //根据监控账号及第三方系统,查找关联信息 | ||
102 | + function getOldAccountAndPwd(username,refSystem) { | ||
103 | + admin.req({ | ||
104 | + url: common.domainName + '/api-web/userRefSystem/getByUsernameAndSystem', | ||
105 | + type: "GET", | ||
106 | + dataType: "json", | ||
107 | + data:{ | ||
108 | + username: username, | ||
109 | + refSystem: refSystem | ||
110 | + }, | ||
111 | + success: function (res) { | ||
112 | + if (res && res.success){ | ||
113 | + if (res.object){ //如果有绑定 | ||
114 | + $('#resSystem').val(res.object.refSystem); | ||
115 | + $('input[name="account"]').val(res.object.account); | ||
116 | + $('input[name="password"]').val(common.Base64.decode(res.object.password)); | ||
117 | + }else{ //如果未绑定 | ||
118 | + $('input[name="account"]').val(localStorage.getItem("lgn")); | ||
119 | + } | ||
120 | + } | ||
121 | + form.render(); | ||
122 | + }, | ||
123 | + error: function () { | ||
124 | + layer.msg('获取第三方账号异常', { offset: '15px' , icon: 1 , time: 1000 },function (){ | ||
125 | + }); | ||
126 | + } | ||
127 | + }) | ||
128 | + } | ||
129 | + }); | ||
130 | +</script> |
@@ -21,6 +21,7 @@ | @@ -21,6 +21,7 @@ | ||
21 | <module>hg-monitor-web-tj</module> | 21 | <module>hg-monitor-web-tj</module> |
22 | <module>hg-monitor-web-zj</module> | 22 | <module>hg-monitor-web-zj</module> |
23 | <module>hg-monitor-web-nx</module> | 23 | <module>hg-monitor-web-nx</module> |
24 | + <module>hg-monitor-web-qh</module> | ||
24 | </modules> | 25 | </modules> |
25 | <properties> | 26 | <properties> |
26 | <java.version>1.8</java.version> | 27 | <java.version>1.8</java.version> |
-
Please register or login to post a comment