Toggle navigation
Toggle navigation
This project
Loading...
Sign in
monitor_v3
/
hg-monitor-web
·
Commits
Go to a project
GitLab
Go to group
Project
Activity
Files
Commits
Pipelines
0
Builds
0
Graphs
Milestones
Issues
0
Merge Requests
0
Members
Labels
Wiki
Forks
Network
Create a new issue
Download as
Email Patches
Plain Diff
Browse Files
Authored by
王涛
3 years ago
Commit
298076c2a38961624f7ca653ff0aadbb018a3e08
1 parent
052cb5ff
wangfeng-mj
...
master-500-dev
master-500-dev-0327
master-500-dev-LH
master-500-dev-XuHaoJie
master-500-dev-joke
master-500-dev-lushangqing
master-500-dev-lzc
master-500-dev-xwx
master-500-dev-yuanjinpeng
master-500-dev-ztq
master-500-dev-ztq1
master-500-log
master-500-log-ztq
master-500-prod
master-500-prod-joke-new
master-500-prod-lushangqing
master-mj
master-mj-610
master-mj-joke
master-mj-yuanjinpeng
master-mj-ztq
master-prod
master-prod-500-lushangqing
master-prod-lushangqing
master-prod-xwx
master-prod-xwx2
wangfeng-500-dev
青海前端工程
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
3151 additions
and
0 deletions
hg-monitor-web-qh/pom.xml
hg-monitor-web-qh/src/main/java/com/web/HGMonitorQHWebApplication.java
hg-monitor-web-qh/src/main/resources/application.yml
hg-monitor-web-qh/src/main/resources/static/src/controller/common.js
hg-monitor-web-qh/src/main/resources/static/src/style/img/logo-small.png
hg-monitor-web-qh/src/main/resources/static/src/style/img/logo.png
hg-monitor-web-qh/src/main/resources/static/src/views/layout.html
hg-monitor-web-qh/src/main/resources/static/src/views/template/user/accountSet.html
pom.xml
hg-monitor-web-qh/pom.xml
0 → 100644
View file @
298076c
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<parent>
<groupId>
com.honggroup
</groupId>
<artifactId>
hg-monitor-web
</artifactId>
<version>
0.0.1-SNAPSHOT
</version>
</parent>
<groupId>
com.honggroup
</groupId>
<artifactId>
hg-monitor-web-qh
</artifactId>
<version>
0.0.1-SNAPSHOT
</version>
<name>
hg-monitor-web-qh
</name>
<description>
青海个性化版本
</description>
<properties>
<java.version>
1.8
</java.version>
</properties>
<dependencies>
<dependency>
<groupId>
com.honggroup
</groupId>
<artifactId>
hg-monitor-web-zj
</artifactId>
<version>
0.0.1-SNAPSHOT
</version>
</dependency>
</dependencies>
<build>
<finalName>
qhweb
</finalName>
<resources>
<resource>
<directory>
src/main/resources
</directory>
<includes>
<include>
**/**
</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-maven-plugin
</artifactId>
</plugin>
</plugins>
</build>
</project>
...
...
hg-monitor-web-qh/src/main/java/com/web/HGMonitorQHWebApplication.java
0 → 100644
View file @
298076c
package
com
.
web
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
@SpringBootApplication
public
class
HGMonitorQHWebApplication
{
public
static
void
main
(
String
[]
args
)
{
SpringApplication
.
run
(
HGMonitorQHWebApplication
.
class
,
args
);
}
}
...
...
hg-monitor-web-qh/src/main/resources/application.yml
0 → 100644
View file @
298076c
spring
:
application
:
name
:
zjweb
server
:
port
:
8088
ssl
:
enabled
:
false
key-alias
:
tomcat_https
key-store
:
classpath:keystore/tomcat_https.keystore
key-store-type
:
JKS
key-store-password
:
Hg0801..
key-password
:
Hg0801..
url
:
gateway
:
http://127.0.0.1:9200
inspection_web
:
http://127.0.0.1:8082
assetsweb
:
http://127.0.0.1:8082
mxgraph_editor
:
http://127.0.0.1:8085
tingyun
:
http://127.0.0.1:8088
bigScreen
:
http://127.0.0.1:8081
#流程系统路径,当ssl.enabled=true时,http要改为https,并修改流程nginx的conf文件
workflow
:
http://192.168.0.248:8002
# 积木报表工具
jimuReport
:
http://192.168.0.41:8085
config
:
layer
:
load
:
icon
:
mj
audio
:
mp3
:
14039
tingyun
:
api_key
:
aZipZbC18BhpG5GrjtiFAtThL1I0OUfn
secret_key
:
nbxay44wx8c3x4n5wcxe63mp87a72xed
...
...
hg-monitor-web-qh/src/main/resources/static/src/controller/common.js
0 → 100644
View file @
298076c
/**
@Name:layuiAdmin 公共业务
@Author:贤心
@Site:http://www.layui.com/admin/
@License:LPPL
*/
layui
.
define
([
'xmSelect'
,
'md5'
],
function
(
exports
)
{
var
$
=
layui
.
$
,
laytpl
=
layui
.
laytpl
,
layer
=
layui
.
layer
,
view
=
layui
.
view
,
xmSelect
=
layui
.
xmSelect
,
md5
=
layui
.
md5
,
form
=
layui
.
form
,
commonDetail
=
layui
.
commonDetail
,
admin
=
layui
.
admin
;
//公共业务的逻辑处理可以写在此处,切换任何页面都会执行
var
obj
=
{
domainIpManage
:
"http://94.12.40.231:8080/zoneportal/"
,
domainName
:
sessionStorage
.
getItem
(
'domainName'
),
// gateway地址
domainInspectionURI
:
sessionStorage
.
getItem
(
'domainInspectionURI'
),
// 巡检系统地址
domainAssetsManage
:
sessionStorage
.
getItem
(
'domainAssetsManage'
),
// 资产系统地址
graphEditorOrigin
:
sessionStorage
.
getItem
(
'graphEditorOrigin'
),
// 拓扑系统地址
workflowName
:
sessionStorage
.
getItem
(
'workflow'
),
//流程系统地址
domainCMDBName
:
"http://80.12.147.24:8888/hgkjcmdb"
,
//杭州咨源老cmdb系统地址
lineTimer
:
null
,
//性能曲线图全局定时器
detailTimer
:
[],
//详细页的全局定时器
alarmTimer
:
null
,
//首页告警刷新定时器
limit
:
50
,
//全局分页条目数
limits
:
[
50
,
100
,
150
,
200
],
//全局分页条目数组
//base64加密
Base64
:
{
_keyStr
:
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
,
encode
:
function
(
e
)
{
var
t
=
""
;
var
n
,
r
,
i
,
s
,
o
,
u
,
a
;
var
f
=
0
;
e
=
obj
.
Base64
.
_utf8_encode
(
e
);
while
(
f
<
e
.
length
)
{
n
=
e
.
charCodeAt
(
f
++
);
r
=
e
.
charCodeAt
(
f
++
);
i
=
e
.
charCodeAt
(
f
++
);
s
=
n
>>
2
;
o
=
(
n
&
3
)
<<
4
|
r
>>
4
;
u
=
(
r
&
15
)
<<
2
|
i
>>
6
;
a
=
i
&
63
;
if
(
isNaN
(
r
))
{
u
=
a
=
64
}
else
if
(
isNaN
(
i
))
{
a
=
64
}
t
=
t
+
this
.
_keyStr
.
charAt
(
s
)
+
this
.
_keyStr
.
charAt
(
o
)
+
this
.
_keyStr
.
charAt
(
u
)
+
this
.
_keyStr
.
charAt
(
a
)
}
return
t
},
decode
:
function
(
e
)
{
var
t
=
""
;
var
n
,
r
,
i
;
var
s
,
o
,
u
,
a
;
var
f
=
0
;
e
=
e
.
replace
(
/
[^
A-Za-z0-9+
/
=
]
/g
,
""
);
while
(
f
<
e
.
length
)
{
s
=
this
.
_keyStr
.
indexOf
(
e
.
charAt
(
f
++
));
o
=
this
.
_keyStr
.
indexOf
(
e
.
charAt
(
f
++
));
u
=
this
.
_keyStr
.
indexOf
(
e
.
charAt
(
f
++
));
a
=
this
.
_keyStr
.
indexOf
(
e
.
charAt
(
f
++
));
n
=
s
<<
2
|
o
>>
4
;
r
=
(
o
&
15
)
<<
4
|
u
>>
2
;
i
=
(
u
&
3
)
<<
6
|
a
;
t
=
t
+
String
.
fromCharCode
(
n
);
if
(
u
!=
64
)
{
t
=
t
+
String
.
fromCharCode
(
r
)
}
if
(
a
!=
64
)
{
t
=
t
+
String
.
fromCharCode
(
i
)
}
}
t
=
obj
.
Base64
.
_utf8_decode
(
t
);
return
t
},
_utf8_encode
:
function
(
e
)
{
e
=
e
.
replace
(
/rn/g
,
"n"
);
var
t
=
""
;
for
(
var
n
=
0
;
n
<
e
.
length
;
n
++
)
{
var
r
=
e
.
charCodeAt
(
n
);
if
(
r
<
128
)
{
t
+=
String
.
fromCharCode
(
r
)
}
else
if
(
r
>
127
&&
r
<
2048
)
{
t
+=
String
.
fromCharCode
(
r
>>
6
|
192
);
t
+=
String
.
fromCharCode
(
r
&
63
|
128
)
}
else
{
t
+=
String
.
fromCharCode
(
r
>>
12
|
224
);
t
+=
String
.
fromCharCode
(
r
>>
6
&
63
|
128
);
t
+=
String
.
fromCharCode
(
r
&
63
|
128
)
}
}
return
t
},
_utf8_decode
:
function
(
e
)
{
var
t
=
""
;
var
n
=
0
;
var
r
=
c1
=
c2
=
0
;
while
(
n
<
e
.
length
)
{
r
=
e
.
charCodeAt
(
n
);
if
(
r
<
128
)
{
t
+=
String
.
fromCharCode
(
r
);
n
++
}
else
if
(
r
>
191
&&
r
<
224
)
{
c2
=
e
.
charCodeAt
(
n
+
1
);
t
+=
String
.
fromCharCode
((
r
&
31
)
<<
6
|
c2
&
63
);
n
+=
2
}
else
{
c2
=
e
.
charCodeAt
(
n
+
1
);
c3
=
e
.
charCodeAt
(
n
+
2
);
t
+=
String
.
fromCharCode
((
r
&
15
)
<<
12
|
(
c2
&
63
)
<<
6
|
c3
&
63
);
n
+=
3
}
}
return
t
}
},
/**
* 颜色数组
*/
colorsArr
:
[
{
start
:
'#46d6d8'
,
end
:
'#2883d0'
},
{
start
:
'#facf5b'
,
end
:
'#f77623'
},
{
start
:
'#C04DD8'
,
end
:
'#D81F72'
},
{
start
:
'#F5A1EB'
,
end
:
'#A04DE2'
},
{
start
:
'#F36093'
,
end
:
'#FF465C'
},
{
start
:
'#C2E74D'
,
end
:
'#00AE8B'
},
{
start
:
'#3DC3FF'
,
end
:
'#01FFFF'
},
{
start
:
'#B850ED'
,
end
:
'#9062EF'
},
{
start
:
'#305be6'
,
end
:
'#36a7d3'
},
{
start
:
'#FFA500'
,
end
:
'#FFEE00'
},
{
start
:
'#C4E64C'
,
end
:
'#2de078'
},
{
start
:
'#30ffb3'
,
end
:
'#01FFFF'
},
{
start
:
'#FF4488'
,
end
:
'#F13EFF'
},
{
start
:
'#A64CE2'
,
end
:
'#625AE7'
},
{
start
:
'#5AEBC7'
,
end
:
'#5FC9F8'
},
{
start
:
'#FFA500'
,
end
:
'#FFEE00'
},
{
start
:
'#00AAD6'
,
end
:
'#625AE7'
},
{
start
:
'#E48BDE'
,
end
:
'#FF9262'
},
{
start
:
'#B2797B'
,
end
:
'#FF4B51'
},
{
start
:
'#ffe393'
,
end
:
'#feff5b'
}
],
//资源类型悬浮提示信息定义
nodeTipsKpiArr
:
{
//小型机:主机状态,主机IP、运行状态、磁盘使用率、CPU使用率、网络联通状态、网络带宽占用率、运行时长
HOST_MINICOMPUTER_SERVER
:
"KPI1635BB9B,KPI1AF5B3C6,KPIE4B51D5C,KPI2C8A6D17,KPI7054BC34,KPI618689D8,KPID1E6EFA1,KPI1C777D98"
,
//小型机分区:主机状态,主机IP、运行状态、磁盘使用率、CPU使用率、网络联通状态、网络带宽占用率、运行时长
HOST_MINICOMPUTER_PARTITION
:
"KPI1635BB9B,KPI1AF5B3C6,KPIE4B51D5C,KPI2C8A6D17,KPI7054BC34,KPI618689D8,KPID1E6EFA1,KPI1C777D98"
,
//物理服务器:主机状态、主机IP、磁盘使用率、内存使用率、网络连通状态、CPU使用率、服务器与存储间的连通状态、、网络带宽占用率
HOST_X86SERVER
:
"KPI1635BB9B,KPI1AF5B3C6,KPI2C8A6D17,KPI31CB8D97,KPI618689D8,KPI7054BC34,KPIA537846F,KPID1E6EFA1"
,
//虚拟服务器:主机状态、主机IP、磁盘使用率、内存使用率、网络连通状态、CPU使用率、服务器与存储间的连通状态、、网络带宽占用率
HOST_X86VIRTUAL
:
"KPI1635BB9B,KPI1AF5B3C6,KPI2C8A6D17,KPI31CB8D97,KPI618689D8,KPI7054BC34,KPIA537846F,KPID1E6EFA1"
,
//华为云:物理机数量
HUAWEI_CLOUD
:
"KPI3CF8A73E"
,
//华为云物理机:物理主机IP、所属资源池、已分配内存大小、已分配磁盘大小、CPU使用率、内存使用率、磁盘使用率
HUAWEI_CLOUD_PHYSICSHOST
:
"KPIEA270DAB,KPID7BE5E90,KPI191373C6,KPI9B34D90F,KPI7054BC34,KPI31CB8D97,KPI2C8A6D17"
,
//华为存储 IP地址、总容量、已使用容量、CPU使用率、内存占用率、运行状态
HUAWEI_CLOUD_STORAGE
:
"KPI2DC9105C,KPI2D4365CA,KPI008F0D3A,KPI7054BC34,KPI31CB8D97,KPIE4B51D5C"
,
//华为交换机:IP地址、管理状态、操作状态、所属区域、CPU平均使用率、内存平均使用率
HUAWEI_CLOUD_SWITCHBOARD
:
"KPI2DC9105C,KPI6F17667E,KPIF21A9F60,KPI5364695E,KPI961A9688,KPIE78B29FF"
,
//华为防火墙:IP地址、管理状态、操作状态、所属区域、CPU平均使用率、内存平均使用率
HUAWEI_CLOUD_FIREWALL
:
"KPI2DC9105C,KPI6F17667E,KPIF21A9F60,KPI5364695E,KPI961A9688,KPIE78B29FF"
,
//虚拟化vmware平台:主机数、虚拟机数量、磁盘已使用大小、已使用内存、网络数、磁盘数量、网卡数量、平台运行状态
VIRTUALIZATION_VMWARE
:
"KPI02EA188F,KPID4E1FD1D,KPI1988842F,KPI4A216352,KPI63916615,KPIA4D671CC,KPID1BA9510"
,
//虚拟化资源池:资源池名称、HA健康监测、主机数、网络数、CPU大小、内存大小、CPU线程数、资源池状态、CPU使用率、内存使用率
VIRTUALIZATION_VMWARE_CLUSTER
:
"KPIC3F28B34,KPI26E85604,KPI02EA188F,KPI63916615,KPI98960E55,KPI1584BE1C,KPI15358CE3,KPIEE008133,KPI7054BC34,KPI31CB8D97"
,
//虚拟化物理机:所属资源池 、主机状态 、CPU使用率、内存使用率、启动时间
VIRTUALIZATION_VMWARE_PHYSICSHOST
:
"KPID7BE5E90,KPI1635BB9B,KPI7054BC34,KPI31CB8D97,KPIF0A20BB4"
,
//虚拟化虚拟机:所属资源池、所属物理主机IP、主机状态、运行状态、网卡数量、磁盘数量、CPU使用率、内存使用率
VIRTUALIZATION_VMWARE_VHOST
:
"KPID7BE5E90,KPI9BFCAA00,KPI1635BB9B,KPIE4B51D5C,KPICB05513A,KPIA4D671CC,KPI7054BC34,KPI31CB8D97"
,
//存储:总容量、已使用容量、已分配容量、已分配未使用容量、磁带库运行状态
STORAGE
:
"KPI2D4365CA,KPI008F0D3A,KPIFAFA06EE,KPI358301D0,KPIEFF93409"
,
//网络设备路由器:端口数量\所属区域\视频会议期间链路带宽占用率\接收丢包率\端口发送流量\发送丢包率\设备的连通状态\征收期宽带链路占用率\主备链路的通断状态
NETHARDWARE_ROUTER
:
"KPI1FC18754,KPI5364695E,KPI59705C06,KPI87312ED9,KPI88D5DF44,KPI89560B13,KPI94AEBD99,KPI9806211A,KPIC37FE51C"
,
//网络设备:交换机
NETHARDWARE_SWITCHBOARD
:
"KPI1FC18754,KPI5364695E,KPI59705C06,KPI87312ED9,KPI88D5DF44,KPI89560B13,KPI94AEBD99,KPI9806211A,KPIC37FE51C"
,
//负载均衡 CPU使用率
NETHARDWARE_LOADBALANCING
:
"KPI7054BC34"
,
//Oracle 数据库:数据库状态、是否为集群、会话百分比、表空间使用率、归档日志状态、安装的选项、锁数量、活动会话数量
DATABASE_ORACLE
:
"KPI7498580B,KPI096EB5BA,KPI18F18278,KPI64B1610A,KPI69E67C68,KPIA52AF07F,KPIA55F9590,KPICFA785F5"
,
//DATABASE_MYSQL :mysql运行线程数、mysql当前连接线程数最大连接数、mysql进程执行时间、吞吐量、版本信息
DATABASE_MYSQL
:
"KPI08809218,KPIA5980712,KPI8914AC3B,KPIDB9E6D41,KPIFB54AE94,KPIDAC7AC64"
,
//weblogic:活动线程数、网络连通性、最大连接数、执行线程数使用率、已打开会话数、队列长度、总队列数
MIDDLEWARE_WEBLOGIC
:
"KPI2893A9EC,KPI2DBC270D,KPI8914AC3B,KPI8BF5E027,KPIC0A94965,KPIC18DC28A,KPIFDB4AD23"
,
//tomcat:最大线程数、当前线程数、繁忙线程数、已使用heap内存量、Non-heap使用率、heap使用率
MIDDLEWARE_TOMCAT
:
"KPI0A144EC2,KPI70500CAA,KPIAAF2D335,KPIA0FB8392,KPI68B432E5,KPIADACC4E3"
},
/**
* 预览附件
* @param id 附件ID
*/
openReport
:
function
(
id
,
flag
,
suffix
,
code
,
name
,
document
)
{
var
accessToken
=
''
;
layui
.
use
([
'sessions'
,
'common'
],
function
()
{
var
sessions
=
layui
.
sessions
;
accessToken
=
sessions
.
getToken
()[
'access_token'
];
});
var
url
=
obj
.
domainName
+
'/api-web/home/priviewOfiice/'
+
id
+
'?document='
+
document
+
'&access_token='
+
accessToken
;
var
loadIndex
=
layer
.
load
(
1
,
{
shade
:
[
0.3
],
content
:
'文件正在转换...'
});
$
.
ajax
({
type
:
"get"
,
url
:
url
,
async
:
true
,
success
:
function
(
data
)
{
if
(
data
.
code
==
0
)
{
layer
.
close
(
loadIndex
);
window
.
open
(
"/src/lib/extend/pdfjs/web/viewer.html?test="
+
encodeURIComponent
(
data
.
pdfPath
));
}
}
});
},
//业务下拉选择数据绑定
bizTypeSelect
:
function
(
targtetId
,
callback
)
{
var
options
=
"<option value=''>=所属业务=</option>"
;
admin
.
req
({
url
:
this
.
domainName
+
'/api-web/home/business/findAllBusType'
,
data
:
{
'type'
:
'per'
}
,
async
:
false
}).
done
(
function
(
res
)
{
var
bizlist
=
res
.
data
;
$
.
each
(
bizlist
,
function
(
i
,
v
)
{
options
+=
'<option value="'
+
v
.
busId
+
'">'
+
v
.
busTypeName
+
'</option>'
;
});
$
(
'#'
+
targtetId
).
html
(
$
(
options
));
if
(
callback
)
{
callback
();
}
}).
error
(
function
(
error
)
{
console
.
error
(
error
);
});
},
//资源类型下拉选择数据绑定
resTypeSelect
:
function
(
targtetId
,
callback
,
ajaxParams
)
{
var
options
=
"<option value=''>=资源类型=</option>"
;
admin
.
req
(
Object
.
assign
({
url
:
this
.
domainName
+
'/api-web/home/restype/getAllResType'
},
ajaxParams
)).
done
(
function
(
res
)
{
var
reslist
=
res
.
data
;
$
.
each
(
reslist
,
function
(
i
,
v
)
{
options
+=
'<option value="'
+
v
.
resTypeCode
+
'">'
+
v
.
resTypeName
+
'</option>'
;
});
$
(
'#'
+
targtetId
).
html
(
$
(
options
));
if
(
callback
)
{
callback
();
}
}).
error
(
function
(
error
)
{
console
.
error
(
error
);
});
},
resTypeXmSelect
:
function
(
xmSelectParams
)
{
admin
.
req
({
url
:
`
$
{
obj
.
domainName
}
/api-web/m
anage
/
restype
/
list
`
,
async
:
false
,
success
:
function
(
res
)
{
// 资源类型下拉框
var
resTypeList
=
res
.
data
;
var
resTypeTree
=
obj
.
pidToChildren
(
resTypeList
,
"resTypeCode"
,
"parentId"
);
xmSelect
.
render
(
Object
.
assign
({
el
:
'#'
,
tips
:
'=资源类型='
,
filterable
:
true
,
radio
:
false
,
clickClose
:
false
,
initValue
:
[],
prop
:
{
name
:
'resTypeName'
,
value
:
'resTypeCode'
},
toolbar
:
{
show
:
true
,
list
:
[
'CLEAR'
]
},
tree
:
{
show
:
true
,
showFolderIcon
:
true
,
showLine
:
true
,
strict
:
false
,
indent
:
20
},
data
:
resTypeTree
,
on
:
function
(
data
)
{
}
},
xmSelectParams
));
}
});
},
/**
* @description 厂商公共方法
* @author XuHaoJie
* @date 2021/12/27 15:03
*/
providerSelect
:
function
(
targtetId
,
callback
)
{
var
sessions
=
layui
.
sessions
;
var
accessToken
=
sessions
.
getToken
()[
'access_token'
];
var
options
=
"<option value=''>=所属厂商=</option>"
;
admin
.
req
({
url
:
`
$
{
obj
.
domainName
}
/api-web/m
anage
/
ddic
/
findSucDdics
/
provider
?
access_token
=
`
+
accessToken
,
type
:
'POST'
,
async
:
false
}).
done
(
function
(
res
)
{
var
list
=
res
.
data
;
$
.
each
(
list
,
function
(
i
,
v
)
{
options
+=
'<option value="'
+
v
.
ddicCode
+
'">'
+
v
.
ddicName
+
'</option>'
;
});
$
(
'#'
+
targtetId
).
html
(
$
(
options
));
if
(
callback
)
{
callback
();
}
}).
error
(
function
(
error
)
{
console
.
error
(
error
);
});
},
menuXmSelect
:
function
(
xmSelectParams
,
done
,
username_
,
roleId_
)
{
var
username
=
username_
?
username_
:
''
;
var
roleId
=
roleId_
?
roleId_
:
''
;
admin
.
req
({
url
:
`
$
{
obj
.
domainName
}
/api-user/m
enus
/
findMenus
?
username
=
`
+
username
+
'&roleIds='
+
roleId
,
success
:
function
(
res
)
{
// 菜单下拉框
var
menuList
=
res
.
data
;
// menuList.forEach(item => {
// item.disabled = item.isLeaf !== 'Y';
// });
var
menuTree
=
obj
.
pidToChildren
(
menuList
,
"id"
,
"parentId"
);
//XuHaoJie 2021/10/21 添加是否是父节点
addProperty
(
menuTree
);
var
menuSelect
=
xmSelect
.
render
(
Object
.
assign
({
el
:
'#'
,
tips
:
'=菜单='
,
filterable
:
true
,
radio
:
false
,
clickClose
:
false
,
initValue
:
[],
prop
:
{
name
:
'name'
,
value
:
'id'
},
toolbar
:
{
show
:
true
,
list
:
[
'CLEAR'
]
},
tree
:
{
show
:
true
,
showFolderIcon
:
true
,
showLine
:
true
,
strict
:
false
,
indent
:
20
},
data
:
menuTree
,
on
:
function
(
data
)
{
}
},
xmSelectParams
));
if
(
done
)
{
done
(
menuSelect
);
}
}
});
//添加是否是父节点的删除
function
addProperty
(
list
)
{
list
.
forEach
(
item
=>
{
if
(
item
.
children
&&
item
.
children
.
length
>
0
)
{
item
[
'isParent'
]
=
1
;
addProperty
(
item
.
children
);
}
else
{
item
[
'isParent'
]
=
0
;
}
return
item
;
})
}
},
relationTypeXmSelect
:
function
(
xmSelectParams
,
done
)
{
admin
.
req
({
url
:
`
$
{
obj
.
domainName
}
/api-web/
relationType
/
getAll
`
,
success
:
function
(
res
)
{
var
relationTypeList
=
res
.
data
;
var
relationTypeSelect
=
xmSelect
.
render
(
Object
.
assign
({
el
:
'#'
,
tips
:
'=关系='
,
filterable
:
true
,
radio
:
false
,
clickClose
:
false
,
initValue
:
[],
prop
:
{
name
:
'typeName'
,
value
:
'reType'
},
toolbar
:
{
show
:
true
,
list
:
[
'ALL'
,
'CLEAR'
]
},
data
:
relationTypeList
,
on
:
function
(
data
)
{
}
},
xmSelectParams
));
if
(
done
)
{
done
(
relationTypeSelect
);
}
}
});
},
//绑定拓扑数据
topoSelect
:
function
(
targtetId
,
callback
)
{
var
options
=
"<option value=''>=选择拓扑=</option>"
;
admin
.
req
({
url
:
this
.
domainName
+
"/api-web/topo/jtopo/getListByUser?page=1&limit=50"
}).
done
(
function
(
res
)
{
var
topolist
=
res
.
data
;
$
.
each
(
topolist
,
function
(
i
,
v
)
{
options
+=
'<option value="'
+
v
.
jtopoId
+
'">'
+
v
.
topoName
+
'</option>'
;
});
$
(
'#'
+
targtetId
).
html
(
$
(
options
));
if
(
callback
)
{
callback
();
}
}).
error
(
function
(
error
)
{
console
.
error
(
error
);
});
},
//绑定虚拟化平台
virtualPlatFormSelect
:
function
(
targtetId
,
bizId
,
callback
)
{
var
options
=
"<option value=''>=所属平台=</option>"
;
admin
.
req
({
url
:
this
.
domainName
+
'/api-web/home/virtual/platform'
}).
done
(
function
(
res
)
{
var
virtuallist
=
res
.
data
;
$
.
each
(
virtuallist
,
function
(
i
,
v
)
{
options
+=
'<option value="'
+
v
.
resId
+
'">'
+
v
.
resName
+
'</option>'
;
});
$
(
'#'
+
targtetId
).
html
(
$
(
options
));
if
(
callback
)
{
callback
();
}
}).
error
(
function
(
error
)
{
console
.
error
(
error
);
});
},
/**
* 数据字典下拉选择数据绑定
*
* @param targtetId 下拉框id
* @param ddicCategory 数据类别
* @param callback 回调函数
*/
ddicSelect
:
function
(
targtetId
,
ddicCategory
,
callback
)
{
layui
.
use
([
'sessions'
,
'common'
],
function
()
{
var
sessions
=
layui
.
sessions
;
accessToken
=
sessions
.
getToken
()[
'access_token'
];
});
var
options
=
"<option value=''>=请选择=</option>"
;
$
.
ajax
({
url
:
`
$
{
this
.
domainName
}
/api-web/m
anage
/
ddic
/
findSucDdics
/
$
{
ddicCategory
}?
access_token
=
$
{
accessToken
}
`
,
method
:
'POST'
,
success
:
function
(
res
)
{
if
(
res
&&
res
.
data
){
var
ddiclist
=
res
.
data
;
$
.
each
(
ddiclist
,
function
(
i
,
v
)
{
options
+=
'<option value="'
+
v
.
ddicCode
+
'">'
+
v
.
ddicName
+
'</option>'
;
});
$
(
'#'
+
targtetId
).
html
(
$
(
options
));
if
(
callback
)
{
callback
(
ddiclist
);
}
}
}
,
error
(
error
)
{
console
.
error
(
error
);
}
});
},
// 用户下拉框
userXmSelect
:
function
(
xmSelectParams
)
{
var
userSelect
;
$
.
ajax
({
url
:
this
.
domainName
+
'/api-user/users/getAll?access_token='
+
localStorage
.
getItem
(
"access_token"
),
async
:
false
,
success
:
function
(
response
)
{
userSelect
=
xmSelect
.
render
(
Object
.
assign
({
el
:
'#'
,
tips
:
'=选择用户='
,
prop
:
{
name
:
'nickname'
,
value
:
'username'
},
autoRow
:
true
,
filterable
:
true
,
toolbar
:
{
show
:
true
,
list
:
[
'ALL'
,
'REVERSE'
,
'CLEAR'
]
},
data
:
response
,
on
:
function
(
data
)
{
}
},
xmSelectParams
));
}
});
return
userSelect
;
},
//打开弹框
openWin
:
function
(
url
,
name
,
params
,
btns
,
fn
,
cancelfn
,
area
,
done
,
layerParams
)
{
if
(
!
name
)
{
name
=
"信息"
;
}
if
(
!
area
)
{
area
=
[
'80%'
,
'90%'
]
}
var
id
=
md5
(
url
)
view
(
'commonViewModel'
).
render
(
url
).
then
(
function
(
res
)
{
layer
.
open
(
Object
.
assign
({
title
:
[
name
,
'font-size:18px;'
],
type
:
1
,
area
:
area
,
resize
:
false
,
shadeClose
:
true
,
//开启遮罩层
id
:
id
,
content
:
laytpl
(
res
.
body
).
render
(
JSON
.
stringify
(
params
)),
success
:
function
(
layero
,
index
)
{
if
(
done
)
{
done
(
layero
,
index
);
}
},
yes
:
function
(
index
,
layero
)
{
if
(
fn
&&
fn
(
index
))
{
layer
.
close
(
index
);
}
},
cancel
:
function
()
{
$
.
each
(
obj
.
detailTimer
,
function
(
i
,
v
)
{
clearTimeout
(
obj
.
detailTimer
[
i
]);
});
obj
.
detailTimer
.
length
=
0
;
//取消的回调函数
if
(
cancelfn
)
{
cancelfn
();
}
},
btn
:
btns
},
layerParams
));
});
},
openMoreBtnWin
:
function
(
url
,
name
,
params
,
btns
,
fn
,
fn2
,
cancelfn
,
area
,
done
,
layerParams
)
{
if
(
!
name
)
{
name
=
"信息"
;
}
if
(
!
area
)
{
area
=
[
'80%'
,
'90%'
]
}
view
(
'commonViewModel'
).
render
(
url
).
then
(
function
(
res
)
{
layer
.
open
(
Object
.
assign
({
title
:
[
name
,
'font-size:18px;'
],
type
:
1
,
resize
:
false
,
area
:
area
,
content
:
laytpl
(
res
.
body
).
render
(
JSON
.
stringify
(
params
)),
scrollbar
:
false
,
success
:
function
(
layero
,
index
)
{
if
(
done
)
{
done
(
layero
,
index
);
}
},
yes
:
function
(
index
,
layero
)
{
if
(
fn
&&
fn
())
{
layer
.
close
(
index
);
}
}
,
btn2
:
function
(
index
,
layero
)
{
if
(
fn2
&&
fn2
())
{
layer
.
close
(
index
);
}
}
,
cancel
:
function
()
{
//取消的回调函数
if
(
cancelfn
)
{
cancelfn
();
}
},
btn
:
btns
},
layerParams
));
});
},
/**
* @desc 以layer.open打开弹框,渲染html元素在弹框的内容区域,可以直接传参为html片段
* @param id 设定一个id,防止重复弹出
* @param conent html内容
* @param title 标题,可选
* @param width 宽度,可选
* @param height 高度,可选
* @param btns 按钮组 ,可选
* @param fn 点击确定回调函数,可选
* @param successfn 加载成功后的回调处理,可选
*/
openWindow
:
function
(
id
,
conent
,
title
,
width
,
height
,
btns
,
fn
,
successfn
)
{
if
(
!
width
)
{
width
=
'80%'
}
if
(
!
height
)
{
height
=
'90%'
}
layer
.
open
({
type
:
1
,
title
:
title
//不显示标题栏
,
closeBtn
:
false
,
area
:
[
width
,
height
]
,
shade
:
0.8
,
resize
:
false
,
id
:
id
//设定一个id,防止重复弹出
,
btn
:
btns
,
content
:
conent
,
success
:
function
(
layero
,
index
)
{
if
(
successfn
&&
successfn
)
{
successfn
();
}
}
,
yes
:
function
(
index
,
layero
)
{
if
(
fn
&&
fn
())
{
fn
()
layer
.
close
(
index
);
//如果设定了yes回调,需进行手工关闭
}
}
});
},
//详细页地址
detailPath
:
function
(
resType
,
resId
,
protocol
)
{
//供从详细页配置策略时使用
localStorage
.
setItem
(
"currentResType"
,
resType
);
//网络设备
if
(
resType
.
indexOf
(
"NETHARDWARE_"
)
==
0
&&
resType
!=
'NETHARDWARE_360SAFE'
&&
resType
!=
'NETHARDWARE_LOADBALANCING'
&&
resType
!=
'NETHARDWARE_SAN_SWITCHBOARD'
)
{
resType
=
'NETHARDWARE'
;
}
//安全
// if (resType != 'NETSAFE_FIREWALL_SUB' && resType.indexOf("NETSAFE_") == 0 && resType !== 'NETSAFE_FIREWALL') {
// resType = 'NETHARDWARE';
// }
//华为云的防火墙和路由器走相同页面
if
(
resType
==
'HUAWEI_CLOUD_SWITCHBOARD'
||
resType
==
'HUAWEI_CLOUD_FIREWALL'
)
{
resType
=
"HUAWEI_CLOUD_NETHARDWARE"
;
}
//小型机分区
if
(
resType
.
indexOf
(
"HOST_MINICOMPUTER_P"
)
!=
-
1
)
{
resType
=
'HOST_MINICOMPUTER_PARTITION'
;
}
//如果是物理服务器并且配置了ssh和snmp协议。则跳转至tab详情页
if
(
resType
.
indexOf
(
"HOST_X86SERVER"
)
!=
-
1
&&
protocol
&&
protocol
.
split
(
","
).
length
>
1
)
{
resType
=
'X86SERVER_BMC'
;
}
//如果是HOST_X86SERVER服务器并且协议为snmp,或共享存储则根据厂商和型号判断类型
if
((
resType
.
indexOf
(
"HOST_X86SERVER"
)
!==
-
1
&&
protocol
==
'SNMP'
)
||
resType
.
indexOf
(
"STORAGE_SHARE"
)
!=
-
1
)
{
resType
=
this
.
detailPathByProviderAndModel
(
resType
,
resId
);
}
//如果是虚拟化相关资源类型,则根据采集协议判断去那个页面
var
resTypeList
=
[
'VIRTUALIZATION_VMWARE_VHOST'
,
'VIRTUALIZATION_HUAWEI_VHOST'
,
'HUAWEI_CLOUD_VIRTUALHOST'
,
'ALI_CLOUD_ECS'
];
if
(
resTypeList
.
indexOf
(
resType
)
!=
-
1
)
{
if
(
protocol
==
'SSH'
||
protocol
==
'SNMP'
)
{
resType
=
'HOST_X86VIRTUAL'
;
}
}
//如果是虚拟化虚拟机资源,则直接走X86虚拟机页面
if
(
resType
.
indexOf
(
"VIRTUALIZATION_VHOST"
)
!=
-
1
)
{
resType
=
'HOST_X86VIRTUAL'
;
}
//如果是oracle数据库,则判定是否配置集群
if
(
resType
==
'DATABASE_ORACLE'
){
resType
=
this
.
checkHasCluster
(
resType
,
resId
);
}
return
"template/detail/"
+
resType
.
toLowerCase
();
},
checkHasCluster
:
function
(
resType
,
resId
)
{
$
.
ajax
({
url
:
this
.
domainName
+
'/api-web/detail/block?access_token='
+
layui
.
sessions
.
getToken
()[
'access_token'
],
data
:
{
resId
:
resId
,
kpiId
:
'KPI096EB5BA'
},
async
:
false
,
success
:
function
(
res
)
{
if
(
res
&&
res
.
data
&&
res
.
data
.
length
>
0
){
if
(
res
.
data
[
0
].
value
==
'是'
){
resType
=
'ORACLE_RAC'
;
}
}
}
});
return
resType
;
},
//BMC服务器和共享存储根据厂商和型号跳转不同的详情页
detailPathByProviderAndModel
:
function
(
resType
,
resId
)
{
$
.
ajax
({
url
:
this
.
domainName
+
'/api-web/manage/resource/findById?access_token='
+
layui
.
sessions
.
getToken
()[
'access_token'
],
data
:
{
resId
:
resId
},
async
:
false
,
success
:
function
(
res
)
{
var
res
=
res
.
obj
;
var
bean
=
res
[
'bean'
];
//存放BMC服务器厂商和详情页关系的map
var
BMCMap
=
new
Map
();
BMCMap
.
set
(
'DELL'
,
'HOST_BMC_DELL'
);
BMCMap
.
set
(
'H3C'
,
'HOST_BMC_H3C'
);
BMCMap
.
set
(
'HUAWEI'
,
'HOST_BMC_HUAWEI'
);
BMCMap
.
set
(
'LENOVO'
,
'HOST_BMC_LENOVO'
);
BMCMap
.
set
(
"IBM"
,
"HOST_BMC_IBM"
);
BMCMap
.
set
(
'Inspur'
,
'HOST_BMC_INSPUR'
);
BMCMap
.
set
(
'sugon'
,
'HOST_BMC_SUGON'
);
BMCMap
.
set
(
'HP'
,
'HOST_BMC_HP'
);
BMCMap
.
set
(
'HP_knifeBox'
,
'HOST_BMC_HP_KNIFEBOX'
);
BMCMap
.
set
(
'HUAWEI_KNIFEBOX'
,
'HOST_BMC_HUAWEI_KNIFEBOX'
);
BMCMap
.
set
(
'HUAWEI_BLADE'
,
'HOST_BMC_HUAWEI_BLADE'
);
//存放共享存储厂商和详情页关系的map
var
shareMap
=
new
Map
();
shareMap
.
set
(
'HUAWEI'
,
'STORAGE_SHARE'
);
shareMap
.
set
(
'Inspur'
,
'STORAGE_SHARE_INSPUR'
);
if
(
resType
.
indexOf
(
'HOST_X86SERVER'
)
!=
-
1
)
{
if
(
bean
.
provider
==
'HP'
&&
bean
.
model
.
split
(
'-'
)[
0
]
==
'C7000'
)
{
resType
=
BMCMap
.
get
(
'HP_knifeBox'
);
}
else
if
(
bean
.
provider
==
'H3C'
&&
bean
.
model
.
split
(
'-'
)[
1
]
==
'R690'
)
{
resType
=
BMCMap
.
get
(
'HP'
);
}
else
if
(
bean
.
provider
===
'HUAWEI'
&&
bean
.
model
===
'E9000'
)
{
resType
=
BMCMap
.
get
(
'HUAWEI_KNIFEBOX'
);
}
else
if
(
bean
.
resCode
&&
bean
.
resCode
.
indexOf
(
'华为Blade__'
)
&&
bean
.
parentId
)
{
resType
=
BMCMap
.
get
(
'HUAWEI_BLADE'
);
}
else
{
if
(
BMCMap
.
get
(
bean
.
provider
)){
resType
=
BMCMap
.
get
(
bean
.
provider
)
}
}
}
if
(
resType
.
indexOf
(
'STORAGE_SHARE'
)
!=
-
1
)
{
resType
=
shareMap
.
get
(
bean
.
provider
)
}
}
})
return
resType
;
},
//打开性能曲线图
openLineChart
:
function
(
title
,
params
)
{
// Start 将对象转成key=value&key1=value1 LSQ 2022/1/17
let
urlParams
=
''
;
for
(
let
key
in
params
){
if
(
params
[
key
]){
urlParams
+=
key
+
'='
+
params
[
key
]
+
'&'
}
}
urlParams
=
urlParams
.
substr
(
0
,
urlParams
.
length
-
1
)
//End LSQ 2022/1/17
if
(
!
title
)
{
title
=
"性能曲线图"
;
}
view
(
'commonViewModel'
).
render
(
"template/detail/line"
).
then
(
function
(
res
)
{
// Start ident==1为性能趋势 LSQ 2022/1/17
let
type
=
1
;
let
content
=
laytpl
(
res
.
body
).
render
(
JSON
.
stringify
(
params
));
if
(
params
.
ident
&&
params
.
ident
==
1
){
type
=
2
;
content
=
[
'/vue3/index.html#/vue3/pieDetailLine?'
+
urlParams
,
'no'
];
}
//End LSQ 2022/1/17
layer
.
open
({
title
:
[
title
,
'font-size:18px;'
],
// type: 1,
type
:
type
,
area
:
[
'80%'
,
'90%'
],
shadeClose
:
true
,
//开启遮罩层
id
:
'line_chart_div'
,
// content: laytpl(res.body).render(JSON.stringify(params)),
content
:
content
,
cancel
:
function
()
{
clearTimeout
(
obj
.
lineTimer
);
}
});
});
},
//打开性能柱状图
openBarChart
:
function
(
title
,
params
)
{
if
(
!
title
)
{
title
=
"使用情况"
;
}
view
(
'commonViewModel'
).
render
(
"template/detail/bar"
).
then
(
function
(
res
)
{
layer
.
open
({
title
:
[
title
,
'font-size:18px;'
],
type
:
1
,
area
:
[
'90%'
,
'600px'
],
content
:
laytpl
(
res
.
body
).
render
(
JSON
.
stringify
(
params
))
});
});
},
//将数组切割分组
splieceGroup
:
function
(
array
,
subLength
)
{
var
index
=
0
;
var
newArray
=
[];
while
(
index
<
array
.
length
)
{
newArray
.
push
(
array
.
slice
(
index
,
index
+=
subLength
));
}
return
newArray
;
},
//判定是否为空或者undefined wtc add
isNotEmpty
:
function
(
data
)
{
if
(
data
!=
''
&&
data
!=
null
&&
data
!=
undefined
)
{
return
true
}
else
{
return
false
}
},
getPreMonth
(
date
)
{
var
arr
=
date
.
split
(
'-'
);
var
year
=
arr
[
0
];
//获取当前日期的年份
var
month
=
arr
[
1
];
//获取当前日期的月份
var
day
=
arr
[
2
];
//获取当前日期的日
var
days
=
new
Date
(
year
,
month
,
0
);
days
=
days
.
getDate
();
//获取当前日期中月的天数
var
year2
=
year
;
var
month2
=
parseInt
(
month
)
-
1
;
if
(
month2
==
0
)
{
year2
=
parseInt
(
year2
)
-
1
;
month2
=
12
;
}
var
day2
=
day
;
var
days2
=
new
Date
(
year2
,
month2
,
0
);
days2
=
days2
.
getDate
();
if
(
day2
>
days2
)
{
day2
=
days2
;
}
if
(
month2
<
10
)
{
month2
=
'0'
+
month2
;
}
var
t2
=
year2
+
'年'
+
month2
+
'月'
;
return
t2
;
},
//生成uuid wtc add
uuid
:
function
()
{
var
s
=
[];
var
hexDigits
=
"0123456789abcdef"
;
for
(
var
i
=
0
;
i
<
36
;
i
++
)
{
s
[
i
]
=
hexDigits
.
substr
(
Math
.
floor
(
Math
.
random
()
*
0x10
),
1
);
}
s
[
14
]
=
"4"
;
// bits 12-15 of the time_hi_and_version field to 0010
s
[
19
]
=
hexDigits
.
substr
((
s
[
19
]
&
0x3
)
|
0x8
,
1
);
// bits 6-7 of the clock_seq_hi_and_reserved to 01
s
[
8
]
=
s
[
13
]
=
s
[
18
]
=
s
[
23
]
=
"-"
;
var
uuid
=
s
.
join
(
""
);
return
uuid
;
},
//获取当日 joke add 0200422
getToday
:
function
(
type
)
{
var
date
=
new
Date
();
var
year
=
date
.
getFullYear
();
//当前年份
var
month
=
date
.
getMonth
();
//当前月份
var
data
=
date
.
getDate
();
//天
var
hours
=
date
.
getHours
();
//小时
var
minute
=
date
.
getMinutes
();
//分
var
second
=
date
.
getSeconds
();
//秒
if
(
type
===
'day'
)
{
return
year
+
"-"
+
obj
.
fnW
(
month
+
1
)
+
"-"
+
obj
.
fnW
(
data
)
}
else
{
return
year
+
"-"
+
obj
.
fnW
(
month
+
1
)
+
"-"
+
obj
.
fnW
(
data
)
+
' '
+
obj
.
fnW
(
hours
)
+
":"
+
obj
.
fnW
(
minute
)
+
":"
+
obj
.
fnW
(
second
);
}
},
//日期时间补0 joke add 0200422
fnW
:
function
(
str
)
{
var
num
;
str
>
9
?
num
=
str
:
num
=
"0"
+
str
;
return
num
;
},
getUrlParam
:
function
(
key
)
{
var
href
=
window
.
location
.
href
;
href
=
href
.
substr
(
0
,
href
.
indexOf
(
"#"
));
var
url
=
href
.
split
(
"?"
);
if
(
url
.
length
<=
1
)
{
return
""
;
}
var
params
=
url
[
1
].
split
(
"&"
);
for
(
var
i
=
0
;
i
<
params
.
length
;
i
++
)
{
var
param
=
params
[
i
].
split
(
"="
);
if
(
key
==
param
[
0
])
{
return
param
[
1
];
}
}
return
""
;
},
//保存列
saveTableCols
:
function
(
data
,
sign
)
{
var
accessToken
=
''
;
layui
.
use
([
'sessions'
,
'common'
],
function
()
{
var
sessions
=
layui
.
sessions
;
accessToken
=
sessions
.
getToken
()[
'access_token'
];
});
var
cols
=
data
[
'cols'
][
0
];
if
(
sign
===
0
){
var
parseData
=
JSON
.
parse
(
data
[
'cols'
]);
cols
=
parseData
[
0
];
}
$
.
each
(
cols
,
function
(
i
,
e
)
{
if
(
e
[
'isChild'
])
{
if
(
e
[
'isChild'
]
&&
typeof
e
[
'isChild'
]
===
'function'
)
{
e
[
'isChild'
]
=
e
[
'isChild'
]
+
''
;
}
}
if
(
e
[
'children'
])
{
$
.
each
(
e
[
'children'
],
function
(
j
,
k
)
{
if
(
k
[
'url'
]
&&
typeof
k
[
'url'
]
===
'function'
)
{
k
[
'url'
]
=
k
[
'url'
]
+
''
;
}
if
(
k
[
'done'
]
&&
typeof
k
[
'done'
]
===
'function'
)
{
k
[
'done'
]
=
k
[
'done'
]
+
''
;
}
})
}
})
data
[
'cols'
]
=
JSON
.
stringify
([
cols
]);
layer
.
load
(
2
);
admin
.
req
({
url
:
obj
.
domainName
+
'/api-web/bUsercustomTable/save?access_token='
+
accessToken
,
type
:
'post'
,
contentType
:
"application/json;charset=UTF-8"
//指定消息请求类型
,
data
:
JSON
.
stringify
(
data
)
,
error
:
function
(
e
)
{
layer
.
closeAll
(
'loading'
);
}
}).
done
(
function
(
res
)
{
layer
.
closeAll
(
'loading'
);
layer
.
msg
(
"保存成功"
,
{
icon
:
1
,
time
:
2000
})
});
},
//获取列
getTableCols
:
function
(
param
,
callback
)
{
//获取配置的列
admin
.
req
({
url
:
obj
.
domainName
+
'/api-web/bUsercustomTable/findByUserNameAndOthers'
,
data
:
param
}).
done
(
function
(
res
)
{
var
cols
=
null
;
if
(
res
.
object
&&
res
.
object
.
cols
)
{
cols
=
JSON
.
parse
(
res
.
object
.
cols
)[
0
];
$
.
each
(
cols
,
function
(
i
,
e
)
{
if
(
e
[
'isChild'
])
{
if
(
e
[
'isChild'
])
{
e
[
'isChild'
]
=
eval
(
"(function(){return "
+
e
[
'isChild'
]
+
" })()"
);
}
}
if
(
e
[
'children'
])
{
$
.
each
(
e
[
'children'
],
function
(
j
,
k
)
{
if
(
k
[
'url'
])
{
k
[
'url'
]
=
eval
(
"(function(){return "
+
k
[
'url'
]
+
" })()"
);
}
if
(
k
[
'done'
])
{
k
[
'done'
]
=
eval
(
"(function(){return "
+
k
[
'done'
]
+
" })()"
);
}
})
}
})
}
if
(
callback
)
{
callback
(
cols
);
}
});
},
//列拖动事件
dragCols
:
function
(
target
)
{
$
(
".layui-table th"
).
mousedown
(
function
()
{
$
(
".layui-table th"
).
mousemove
(
function
()
{
$
(
"#"
+
target
).
show
();
$
(
"#"
+
target
).
removeClass
(
"hide"
);
});
});
},
// 树表格列拖动/保存事件
treeTableDragCols
:
function
(
tableTarget
,
toolBarTarget
)
{
var
toolBarHtml
=
''
;
if
(
toolBarTarget
)
{
toolBarHtml
=
'<div class="layui-table-tool"><div class="layui-table-tool-temp">'
+
$
(
toolBarTarget
).
html
()
+
'</div></div>'
;
}
else
{
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>'
;
}
$
(
tableTarget
).
next
().
find
(
'.layui-table-box'
).
before
(
toolBarHtml
);
$
(
".layui-table th"
).
mousedown
(
function
()
{
$
(
".layui-table th"
).
mousemove
(
function
()
{
$
(
tableTarget
).
next
().
find
(
'.layui-table-tool .btn_save_cols'
).
removeClass
(
'hide'
);
$
(
tableTarget
).
next
().
find
(
'.layui-table-tool .btn_save_cols'
).
show
();
});
});
},
// 普通表格导出到excel
exportTableData
:
function
(
tableObj
,
title
)
{
var
cols
=
tableObj
.
config
.
cols
[
0
].
filter
(
item
=>
(
item
.
title
&&
item
.
field
));
var
tableData
=
layui
.
table
.
cache
[
tableObj
.
config
.
id
];
var
headList
=
cols
.
map
(
item
=>
item
.
title
);
var
rowList
=
tableData
.
map
(
item
=>
{
var
row
=
{};
cols
.
forEach
(
col
=>
{
if
(
!
col
.
templet
)
{
row
[
col
.
field
]
=
item
[
col
.
field
];
}
else
{
var
renderHtml
=
laytpl
(
$
(
col
.
templet
).
html
()).
render
(
item
).
replace
(
/
[\r\n]
/g
,
''
);
if
(
renderHtml
.
match
(
/
(
<.+>
)([^
<
]
+
)(
<
\/
.+>
)
/
))
{
row
[
col
.
field
]
=
renderHtml
.
match
(
/
(
<.+>
)([^
<
]
+
)(
<
\/
.+>
)
/
)[
2
];
if
(
!
row
[
col
.
field
].
trim
())
{
row
[
col
.
field
]
=
item
[
col
.
field
];
}
}
else
{
row
[
col
.
field
]
=
renderHtml
}
}
});
return
row
;
});
obj
.
exportData
(
title
,
headList
,
rowList
);
},
// 树表格导出到excel
exportTreeTableData
:
function
(
tableObj
,
title
)
{
var
cols
=
tableObj
.
getTreeOptions
().
cols
[
0
].
filter
(
item
=>
(
item
.
title
&&
item
.
field
));
var
tableData
=
tableObj
.
getTableTreeData
();
var
headList
=
cols
.
map
(
item
=>
item
.
title
);
var
rowList
=
[];
rowList
=
treeToList
(
tableData
,
rowList
,
cols
);
obj
.
exportData
(
title
,
headList
,
rowList
);
function
treeToList
(
treeData
,
rowList
,
cols
)
{
treeData
.
forEach
(
item
=>
{
var
row
=
{};
cols
.
forEach
(
col
=>
{
if
(
!
col
.
templet
)
{
row
[
col
.
field
]
=
item
[
col
.
field
];
}
else
{
var
renderHtml
=
laytpl
(
$
(
col
.
templet
).
html
()).
render
(
item
);
var
value
=
''
;
if
(
renderHtml
.
match
(
/
(
<.+>|
\w)
+
(
.+
)(\w
|<
\/
.+>
)
+/
))
{
value
=
renderHtml
.
match
(
/
(
<.+>|
\w)
+
(
.+
)(\w
|<
\/
.+>
)
+/
)[
0
];
}
if
(
value
)
{
row
[
col
.
field
]
=
value
}
else
{
row
[
col
.
field
]
=
renderHtml
}
}
});
rowList
.
push
(
row
);
if
(
item
.
children
&&
item
.
children
.
length
>
0
)
{
treeToList
(
item
.
children
,
rowList
,
cols
);
}
});
return
rowList
;
}
},
/**
* 导出数据至excel
*
* @return null
* @author 惠佳旭
* @date 2020/11/23
* @param title 导出excel文件名
* @param headList 导出excel列头
* @param rowList 导出excel数据
*/
exportData
:
function
(
title
,
headList
,
rowList
)
{
if
(
rowList
.
length
<
1
)
{
layer
.
msg
(
'暂无数据导出...'
,
{
icon
:
0
});
return
;
}
if
(
layui
.
device
().
ie
)
{
layer
.
msg
(
'不支持ie导出...'
,
{
icon
:
0
});
return
;
}
// 转换bodyData
var
bodyData
=
rowList
.
map
(
row
=>
Object
.
values
(
row
).
map
(
item
=>
item
?
item
.
toString
().
trim
().
replace
(
/,/g
,
','
)
:
''
).
join
(
','
));
// 创建下载文件的a标签
var
alink
=
document
.
createElement
(
'a'
);
var
content
=
encodeURIComponent
(
headList
.
join
(
','
)
+
'\r\n'
+
bodyData
.
join
(
'\r\n'
));
var
contentType
=
({
csv
:
'text/csv'
,
xls
:
'application/vnd.ms-excel'
})[
'xls'
];
alink
.
href
=
'data:'
+
contentType
+
';charset=utf-8,\ufeff'
+
content
;
alink
.
download
=
title
+
'.xls'
;
document
.
body
.
appendChild
(
alink
);
alink
.
click
();
document
.
body
.
removeChild
(
alink
);
},
/**检查权限*/
checkPermission
:
function
(
access_token
)
{
// Start Wang 2021/12/13 19:42 权限列表,如果能从缓存中加载到数据,则获取缓存中的数据
var
ps
=
sessionStorage
.
getItem
(
'permissions'
);
if
(
ps
&&
ps
!=
''
&&
ps
!=
null
){
return
ps
.
split
(
','
);
}
// End Wang 2021/12/13 19:43 权限列表,如果能从缓存中加载到数据,则获取缓存中的数据
var
pers
=
[];
$
.
ajax
({
type
:
'get'
,
url
:
obj
.
domainName
+
'/api-u/users/current?access_token='
+
access_token
,
contentType
:
"application/json; charset=utf-8"
,
async
:
false
,
success
:
function
(
data
)
{
pers
=
data
.
permissions
;
$
(
"[permission]"
).
each
(
function
()
{
var
per
=
$
(
this
).
attr
(
"permission"
);
if
(
$
.
inArray
(
per
,
pers
)
<
0
)
{
$
(
this
).
hide
();
}
});
}
});
return
pers
;
},
/* pid转children形式 */
pidToChildren
:
function
(
data
,
idName
,
pidName
,
childName
,
pId
,
canNotCheckPranet
)
{
childName
||
(
childName
=
'children'
);
var
newList
=
[];
for
(
var
i
=
0
;
i
<
data
.
length
;
i
++
)
{
(
pId
==
undefined
)
&&
(
pId
=
obj
.
getPids
(
data
,
idName
,
pidName
));
if
(
obj
.
pidEquals
(
data
[
i
][
pidName
],
pId
))
{
var
children
=
this
.
pidToChildren
(
data
,
idName
,
pidName
,
childName
,
data
[
i
][
idName
],
canNotCheckPranet
);
if
(
canNotCheckPranet
===
false
){
//当不能选择时,设置父节点不可选择
if
(
children
.
length
>
0
){
data
[
i
].
disabled
=
true
;
}
}
(
children
.
length
>
0
)
&&
(
data
[
i
][
childName
]
=
children
);
newList
.
push
(
data
[
i
]);
}
}
return
newList
;
},
/** 获取顶级的pId */
getPids
:
function
(
list
,
idName
,
pidName
)
{
var
pids
=
[];
for
(
var
i
=
0
;
i
<
list
.
length
;
i
++
)
{
var
hasPid
=
false
;
for
(
var
j
=
0
;
j
<
list
.
length
;
j
++
)
{
if
(
i
!=
j
&&
list
[
j
][
idName
]
==
list
[
i
][
pidName
])
{
hasPid
=
true
;
}
}
if
(
!
hasPid
)
{
pids
.
push
(
list
[
i
][
pidName
]);
}
}
return
pids
;
},
/** 判断pId是否相等 */
pidEquals
:
function
(
pId
,
pIds
)
{
if
(
obj
.
isClass
(
pIds
)
==
'Array'
)
{
for
(
var
i
=
0
;
i
<
pIds
.
length
;
i
++
)
{
if
(
pId
==
pIds
[
i
])
{
return
true
;
}
}
}
else
{
return
pId
==
pIds
;
}
return
false
;
},
/** 获取变量类型 */
isClass
:
function
(
o
)
{
if
(
o
===
null
)
return
'Null'
;
if
(
o
===
undefined
)
return
'Undefined'
;
return
Object
.
prototype
.
toString
.
call
(
o
).
slice
(
8
,
-
1
);
},
copyText
:
function
(
text
,
formId
)
{
var
textarea
=
document
.
createElement
(
"textarea"
);
//创建input对象
var
currentFocus
=
document
.
activeElement
;
//当前获得焦点的元素
var
toolBoxwrap
=
document
.
getElementById
(
formId
);
//将文本框插入到NewsToolBox这个之后
toolBoxwrap
.
appendChild
(
textarea
);
//添加元素
textarea
.
value
=
text
;
textarea
.
focus
();
if
(
textarea
.
setSelectionRange
)
{
textarea
.
setSelectionRange
(
0
,
textarea
.
value
.
length
);
//获取光标起始位置到结束位置
}
else
{
textarea
.
select
();
}
try
{
var
flag
=
document
.
execCommand
(
"copy"
);
//执行复制
}
catch
(
e
)
{
var
flag
=
false
;
}
toolBoxwrap
.
removeChild
(
textarea
);
//删除元素
currentFocus
.
focus
();
return
flag
;
},
layJump
:
function
(
layHref
)
{
var
alink
=
document
.
createElement
(
'a'
);
var
param
=
''
;
if
(
layHref
.
indexOf
(
'='
)
!==
-
1
)
{
param
=
"="
+
encodeURIComponent
(
layHref
.
split
(
'='
)[
1
]);
}
alink
.
setAttribute
(
"lay-href"
,
layHref
.
split
(
'='
)[
0
]
+
param
);
admin
.
req
({
url
:
obj
.
domainName
+
'/api-web/mxgraph/getJtopoInfoById/'
+
layHref
.
split
(
'='
)[
2
],
success
(
response
)
{
//LH 修改 弹框展示子拓扑
layer
.
open
({
title
:
response
.
object
.
topoName
,
type
:
2
,
area
:[
'90%'
,
'90%'
],
content
:
obj
.
graphEditorOrigin
+
"/jgraph/grapheditor/viewer.html?access_token="
+
localStorage
.
getItem
(
'access_token'
)
+
'&id='
+
layHref
.
split
(
'='
)[
2
]
,
//+ "&layout=organic",
})
},
error
()
{
layer
.
closeAll
(
'loading'
);
layer
.
msg
(
'生成资源拓扑失败...'
,
{
icon
:
2
});
}
});
// document.body.appendChild(alink);
// alink.click();
// document.body.removeChild(alink);
},
/**
* @desc 查看资源详细
* @author wangfeng
* @date 2020/9/1 15:42
**/
viewMxGraphNodeResInfo
:
function
(
resId
)
{
admin
.
req
({
url
:
obj
.
domainName
+
"/api-web/home/resource/findById?resId="
+
resId
,
type
:
"get"
,
done
:
function
(
res
)
{
if
(
res
.
str
===
'false'
)
{
layer
.
msg
(
'暂无该资源权限!'
,
{
icon
:
0
});
return
;
}
var
data
=
res
.
object
;
if
(
data
)
{
// var resTypeName = data.resTypeName ? data.resTypeName + " | " : "";
// var resName = data.resName ? data.resName + " | " : "";
// var resIp = data.ip ? data.ip + " | " : "";
// var resPositon = data.resPositon ? data.resPositon + " | " : "";
// var resLabel = data.resLabel ? data.resLabel + " | " : "";
// var admin = data.admin ? data.admin : "";
// var title = resTypeName + resName + resIp + resPositon + resLabel + admin;
var
resId
=
data
.
resId
;
var
resType
=
data
.
resType
;
var
resName
=
data
.
resName
;
var
ip
=
data
.
ip
;
var
resTypeName
=
data
.
resTypeName
;
var
adminName
=
data
.
adminName
;
var
manageIp
=
data
.
manageIp
;
var
collProtocol
=
data
.
collProtocol
;
var
title
=
resName
;
if
(
title
&&
title
!=
''
)
{
title
+=
'|'
;
}
if
(
resTypeName
&&
resType
!==
'HOST_X86SERVER'
)
{
title
+=
resTypeName
+
'|'
;
}
if
(
ip
)
{
if
(
resType
===
'HOST_X86SERVER'
)
{
if
(
collProtocol
&&
(
collProtocol
.
split
(
","
).
length
>
1
||
collProtocol
===
'SSH'
))
{
title
+=
'应用IP-'
+
ip
+
'|'
;
}
}
else
{
title
+=
ip
+
'|'
;
}
}
if
(
resType
===
'HOST_X86SERVER'
&&
collProtocol
&&
collProtocol
.
indexOf
(
'SNMP'
)
!==
-
1
)
{
if
(
manageIp
)
{
title
+=
'管理IP-'
+
manageIp
+
'|'
;
}
}
if
(
adminName
)
{
title
+=
adminName
+
'|'
;
}
if
(
title
.
length
>
0
)
{
title
=
title
.
substr
(
0
,
title
.
length
-
1
);
}
if
(
!
commonDetail
)
{
commonDetail
=
layui
.
commonDetail
;
}
if
(
data
.
pingEnable
==
'2'
)
{
//如果pingEnable为2,则进入ping状态详情页面
commonDetail
.
openNewWin
(
'template/detail/pingIndex'
,
title
,
{
'resId'
:
data
.
resId
},
false
);
}
else
{
//否则进入监控详情页面
commonDetail
.
openDetail
(
data
.
resId
,
data
.
resType
,
title
);
}
}
else
{
layer
.
msg
(
"获取资源详细信息失败,请稍后再试!"
,
{
offset
:
'15px'
,
icon
:
7
,
time
:
2000
});
}
}
});
},
viewResTopo
:
function
(
resId
)
{
layer
.
load
(
2
);
admin
.
req
({
url
:
obj
.
domainName
+
'/api-web/mxgraph/generateByResId'
,
data
:
{
resId
},
success
(
response
)
{
layer
.
closeAll
(
'loading'
);
if
(
response
&&
response
.
success
)
{
layer
.
open
({
type
:
2
,
content
:
obj
.
graphEditorOrigin
+
"/jgraph/grapheditor/viewer.html?access_token="
+
localStorage
.
getItem
(
'access_token'
)
+
'&id='
+
response
.
str
+
"&layout=organic"
,
area
:
[
'98%'
,
'98%'
],
title
:
''
});
}
else
{
layer
.
msg
(
'生成资源拓扑失败!'
,
{
icon
:
2
});
}
},
error
()
{
layer
.
closeAll
(
'loading'
);
layer
.
msg
(
'生成资源拓扑失败...'
,
{
icon
:
2
});
}
});
},
viewBizTopo
:
function
(
busId
)
{
layer
.
load
(
2
);
admin
.
req
({
url
:
obj
.
domainName
+
'/api-web/mxgraph/generateByBusId'
,
data
:
{
busId
},
success
(
response
)
{
layer
.
closeAll
(
'loading'
);
if
(
response
&&
response
.
success
)
{
layer
.
open
({
type
:
2
,
content
:
obj
.
graphEditorOrigin
+
"/jgraph/grapheditor/viewer.html?access_token="
+
localStorage
.
getItem
(
'access_token'
)
+
'&id='
+
response
.
str
+
"&layout=organic"
,
area
:
[
'98%'
,
'98%'
],
title
:
''
});
}
else
{
layer
.
msg
(
'生成业务拓扑失败!'
,
{
icon
:
2
});
}
},
error
()
{
layer
.
closeAll
(
'loading'
);
layer
.
msg
(
'生成业务拓扑失败...'
,
{
icon
:
2
});
}
});
},
/**
* @description 采集器选择一级是所属域,第二级别是域下采集器
* @author XuHaoJie
* @date 2021/6/9 15:43
*/
collectorTree
:
function
(
data
,
parentId
,
parentName
,
childName
,
childId
)
{
var
dataList
=
[];
$
.
each
(
data
,
function
(
i
,
v
){
var
child
=
[];
$
.
each
(
v
.
children
,
function
(
x
,
y
)
{
child
.
push
({
name
:
y
[
childName
]
+
' | '
+
y
.
deployIp
,
value
:
y
[
childId
]})
})
var
val
=
{
name
:
v
[
parentName
],
value
:
i
==
0
?
parentId
:
-
(
i
+
1
),
children
:
child
,
}
dataList
.
push
(
val
);
})
return
dataList
;
},
/** 业务下拉选择(tree)
*radio传入则为单选,不传或传入false为多选 joke add
*strict传入false为非严格父子关系,不传或传入非false为严格父子关系 joke add
* canNotCheckPranet传入true为不能选择,传入false为可以选择
*/
busTreeSelect
:
function
(
xmSelectParams
,
canNotCheckPranet
)
{
//绑定业务下拉选择数据
admin
.
req
({
url
:
this
.
domainName
+
'/api-web/home/business/findAllBusType'
,
async
:
false
,
success
:
function
(
response
)
{
if
(
response
&&
response
.
success
)
{
var
bizList
=
response
.
data
.
map
(
item
=>
{
return
{
name
:
item
.
busTypeName
,
value
:
item
.
busId
,
parentId
:
item
.
parentId
}
});
var
bizTree
=
obj
.
pidToChildren
(
bizList
,
'value'
,
'parentId'
,
canNotCheckPranet
);
// 影响业务下拉框
xmSelect
.
render
(
Object
.
assign
({
el
:
'#'
,
name
:
''
,
tips
:
'=所属业务='
,
//默认开启多选、选完不关闭下拉
radio
:
false
,
clickClose
:
false
,
//开启搜索
filterable
:
true
,
direction
:
'down'
,
initValue
:
[],
toolbar
:
{
show
:
true
,
list
:
[
'ALL'
,
'REVERSE'
,
'CLEAR'
]
},
height
:
'400px'
,
tree
:
{
show
:
true
,
showFolderIcon
:
true
,
showLine
:
true
,
strict
:
true
,
//间距
indent
:
20
,
},
data
:
bizTree
,
on
:
function
(
data
)
{
}
},
xmSelectParams
));
}
else
{
layer
.
msg
(
'获取业务失败'
,
{
icon
:
2
});
}
},
error
:
function
()
{
layer
.
msg
(
'获取业务失败'
,
{
icon
:
2
});
}
},);
},
getTingyunToken
:
function
()
{
var
token
=
''
;
var
api_key
=
''
;
var
secret_key
=
''
;
$
.
ajax
({
url
:
'/config/getConfig'
,
data
:
{
configName
:
'config.tingyun'
},
async
:
false
,
success
(
response
)
{
api_key
=
response
.
api_key
;
secret_key
=
response
.
secret_key
;
}
});
var
timestamp
=
Date
.
now
();
var
auth
=
md5
(
`
api_key
=
$
{
api_key
}
&
secret_key
=
$
{
secret_key
}
&
timestamp
=
$
{
timestamp
}
`
);
var
formData
=
new
FormData
();
formData
.
append
(
"api_key"
,
api_key
);
formData
.
append
(
"auth"
,
auth
);
formData
.
append
(
"timestamp"
,
timestamp
);
$
.
ajax
({
url
:
sessionStorage
.
getItem
(
'tingyun'
)
+
'/auth-api/auth/token'
,
type
:
'POST'
,
processData
:
false
,
mimeType
:
"multipart/form-data"
,
contentType
:
false
,
async
:
false
,
data
:
formData
,
success
(
response
)
{
response
=
JSON
.
parse
(
response
)
if
(
response
&&
response
.
code
==
'200'
)
{
token
=
'Bearer '
+
response
.
access_token
;
}
}
});
sessionStorage
.
setItem
(
"tingyun_token"
,
token
);
return
token
;
},
tingyunReq
:
function
(
ajaxParams
)
{
var
response
=
{
success
:
false
,
msg
:
''
,
data
:
[]
}
var
token
=
sessionStorage
.
getItem
(
"tingyun_token"
);
if
(
!
token
)
{
token
=
obj
.
getTingyunToken
();
}
if
(
!
token
)
{
response
.
msg
=
'获取token失败!'
;
ajaxParams
.
success
(
response
);
return
;
}
var
successFun
=
ajaxParams
.
success
;
var
errorFun
=
ajaxParams
.
error
;
delete
ajaxParams
.
success
;
delete
ajaxParams
.
error
;
var
failCount
=
2
;
var
res
=
null
;
var
err
=
null
;
do
{
try
{
$
.
ajax
(
Object
.
assign
({
url
:
''
,
headers
:
{
Authorization
:
token
},
async
:
false
,
success
(
response
)
{
res
=
response
;
if
(
response
&&
response
.
code
.
toString
().
startsWith
(
'401'
))
{
throw
new
Error
();
}
},
error
(
error
)
{
err
=
error
;
throw
new
Error
();
}
},
ajaxParams
));
}
catch
(
e
)
{
failCount
--
;
if
(
failCount
)
{
token
=
obj
.
getTingyunToken
();
}
continue
;
}
failCount
=
0
;
}
while
(
failCount
)
if
(
res
)
{
successFun
(
res
);
}
else
{
errorFun
();
}
},
//音频播放
audioPlayer
:
function
(
url
)
{
var
audio
=
document
.
createElement
(
'audio'
)
if
(
audio
.
canPlayType
)
{
var
element
=
document
.
createElement
(
'source'
)
element
.
setAttribute
(
'src'
,
url
)
element
.
setAttribute
(
'type'
,
'audio/mpeg'
)
audio
.
appendChild
(
element
)
audio
.
load
()
audio
.
muted
=
true
;
audio
.
playclip
=
function
()
{
audio
.
pause
();
audio
.
currentTime
=
0
;
audio
.
play
();
}
return
audio
}
},
/**
* 导出数据至excel 可以修改sheet
*
* @return null
* @author 徐毫杰
* @date 2021/08/01
* @param title 导出excel文件名
* @param headList 导出excel列头
* @param rowList 导出excel数据
* @param sheet 导出excel sheet页
*/
exportDataExcel
:
function
(
title
,
headList
,
rowList
,
sheetName
)
{
rowList
.
unshift
(
headList
);
var
sheet
=
XLSX
.
utils
.
aoa_to_sheet
(
rowList
);
openDownloadDialog
(
sheet2blob
(
sheet
,
sheetName
),
title
+
'.xlsx'
);
},
/**
* @description 根据用户资源权限或、业务权限、资源类型权限获取详情页展示页签(优先度由高到低)
* @author XuHaoJie
* @date 2021/9/23 11:41
*/
getShowType
:
function
(
resId
,
username
)
{
//默认查出全部
var
value
=
'all'
;
//查找用户资源权限
admin
.
req
({
url
:
this
.
domainName
+
'/api-web/manage/resource/getShowType?resId='
+
resId
+
'&username='
+
username
,
async
:
false
,
success
:
function
(
response
)
{
if
(
response
&&
response
.
success
)
{
value
=
response
.
str
;
}
},
error
:
function
()
{
layer
.
msg
(
'获取用户权限失败'
,
{
icon
:
2
});
}
});
return
value
;
},
};
//通用的打开下载对话框方法,没有测试过具体兼容性
//url 下载地址,也可以是一个blob对象,必选
//saveName 保存文件名,可选
function
openDownloadDialog
(
url
,
saveName
)
{
if
(
typeof
url
==
'object'
&&
url
instanceof
Blob
)
{
url
=
URL
.
createObjectURL
(
url
);
// 创建blob地址
}
var
aLink
=
document
.
createElement
(
'a'
);
aLink
.
href
=
url
;
aLink
.
download
=
saveName
||
''
;
// HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效
var
event
;
if
(
window
.
MouseEvent
)
event
=
new
MouseEvent
(
'click'
);
else
{
event
=
document
.
createEvent
(
'MouseEvents'
);
event
.
initMouseEvent
(
'click'
,
true
,
false
,
window
,
0
,
0
,
0
,
0
,
0
,
false
,
false
,
false
,
false
,
0
,
null
);
}
aLink
.
dispatchEvent
(
event
);
}
// 将一个sheet转成最终的excel文件的blob对象,然后利用URL.createObjectURL下载
function
sheet2blob
(
sheet
,
sheetName
)
{
sheetName
=
sheetName
||
'sheet1'
;
var
workbook
=
{
SheetNames
:
[
sheetName
],
Sheets
:
{}
};
workbook
.
Sheets
[
sheetName
]
=
sheet
;
// 生成excel的配置项
var
wopts
=
{
bookType
:
'xlsx'
,
// 要生成的文件类型
bookSST
:
false
,
// 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
type
:
'binary'
};
var
wbout
=
XLSX
.
write
(
workbook
,
wopts
);
var
blob
=
new
Blob
([
s2ab
(
wbout
)],
{
type
:
"application/octet-stream"
});
// 字符串转ArrayBuffer
function
s2ab
(
s
)
{
var
buf
=
new
ArrayBuffer
(
s
.
length
);
var
view
=
new
Uint8Array
(
buf
);
for
(
var
i
=
0
;
i
!=
s
.
length
;
++
i
)
view
[
i
]
=
s
.
charCodeAt
(
i
)
&
0xFF
;
return
buf
;
}
return
blob
;
}
//退出
admin
.
events
.
logout
=
function
()
{
var
logoutIdx
=
layer
.
confirm
(
'确定退出登录?'
,
function
()
{
admin
.
exit
();
layer
.
close
(
logoutIdx
);
});
};
//菜单折叠事件
admin
.
events
.
closeMenu
=
function
()
{
admin
.
sideFlexible
();
};
//监听F5刷新
$
(
document
).
keydown
(
function
(
e
)
{
e
=
e
||
window
.
event
;
if
((
e
.
ctrlKey
&&
e
.
keyCode
==
82
)
||
//ctrl+R
e
.
keyCode
==
116
)
{
//F5刷新
//获取首页
var
firstTab
=
$
(
'.layui-tab-title'
).
children
().
first
().
attr
(
'lay-id'
);
if
(
firstTab
===
'/index/'
||
firstTab
===
'/'
)
{
location
.
hash
=
"/"
;
}
else
{
//刷新后跳转到首页(用户默认首页)
location
.
hash
=
firstTab
;
}
if
(
$
.
isFunction
(
admin
.
closeAllTabs
))
{
admin
.
closeAllTabs
();
}
return
false
;
}
});
//检索条件区域收缩事件
$
(
"a.search_expend_icon"
).
on
(
"click"
,
function
()
{
if
(
$
(
this
).
hasClass
(
"expend"
))
{
$
(
this
).
parent
().
css
(
"height"
,
"auto"
)
$
(
".layui-status .layui-form-item"
).
slideDown
(
300
,
'linear'
);
}
else
{
$
(
".layui-status .layui-form-item"
).
not
(
":eq(0)"
).
slideUp
(
300
,
'linear'
);
}
$
(
this
).
toggleClass
(
"expend"
);
});
//解决layui-table-tips不能点击其他地方关闭问题 joke add 20200420
document
.
onclick
=
function
(
event
)
{
//如果页面中有layui-table-tips样式,且点击其他的元素不是layui-table-tips或者点击元素的腹肌不是layui-table-tips(资源名称需要判定父级)
if
(
$
(
'.layui-table-tips'
).
length
>
0
&&
event
.
target
.
className
.
indexOf
(
'layui-table-tips'
)
==
-
1
&&
event
.
target
.
parentNode
.
className
.
indexOf
(
'layui-table-tips'
)
==
-
1
)
{
$
(
'.layui-table-tips-c'
).
click
();
}
};
//自动化巡检系统
admin
.
events
.
inspectionsys
=
function
()
{
var
accessToken
=
''
;
layui
.
use
([
'sessions'
,
'common'
],
function
()
{
var
sessions
=
layui
.
sessions
;
accessToken
=
sessions
.
getToken
()[
'access_token'
];
});
var
url
=
obj
.
domainInspectionURI
+
"/start/index.html#/access_token="
+
accessToken
;
window
.
open
(
url
);
}
// 资产管理系统
admin
.
events
.
assetsmanage
=
function
()
{
var
accessToken
=
''
;
layui
.
use
([
'sessions'
,
'common'
],
function
()
{
var
sessions
=
layui
.
sessions
;
accessToken
=
sessions
.
getToken
()[
'access_token'
];
});
var
url
=
obj
.
domainAssetsManage
+
"/ITAM/index.jsp?access_token="
+
accessToken
;
window
.
open
(
url
);
};
// ip管理系统
admin
.
events
.
ipmanage
=
function
()
{
var
accessToken
=
''
;
layui
.
use
([
'sessions'
,
'common'
],
function
()
{
var
sessions
=
layui
.
sessions
;
accessToken
=
sessions
.
getToken
()[
'access_token'
];
});
var
url
=
obj
.
domainIpManage
+
"?access_token="
+
accessToken
;
window
.
open
(
url
);
};
// 科来系统
admin
.
events
.
kelai
=
function
()
{
var
accessToken
=
''
;
layui
.
use
([
'sessions'
,
'common'
],
function
()
{
var
sessions
=
layui
.
sessions
;
accessToken
=
sessions
.
getToken
()[
'access_token'
];
});
//查询科来系统账号及密码
admin
.
req
({
url
:
obj
.
domainName
+
'/api-web/userRefSystem/getByUsernameAndSystem'
,
type
:
"GET"
,
dataType
:
"json"
,
data
:{
username
:
localStorage
.
getItem
(
"lgn"
),
refSystem
:
'kelai'
},
success
:
function
(
res
)
{
if
(
res
&&
res
.
success
&&
res
.
object
){
var
url
=
obj
.
kelaiTargetUrl
;
url
=
url
.
replace
(
'{USERNAME}'
,
res
.
object
.
account
).
replace
(
'{PASSWORD}'
,
obj
.
Base64
.
decode
(
res
.
object
.
password
))
window
.
open
(
url
);
}
else
{
layer
.
alert
(
'请先绑定科来账号'
);
}
}
})
};
//第三方系统账号绑定 joke add 20210525
admin
.
events
.
setAccount
=
function
()
{
view
(
'data-setting-account'
).
render
(
'template/user/accountSet'
).
then
(
function
(
res
)
{
layer
.
open
({
title
:
[
'第三方账号绑定'
,
'font-size:18px;'
],
type
:
1
,
area
:
[
'450px'
,
'300px'
],
content
:
res
.
body
});
});
};
/**
* 打开第三方系统界面
* <p>
* 作者: Wang
* 时间:2022/2/9 17:10
*/
admin
.
events
.
openOtherSystem
=
function
(){
let
code
=
$
(
this
).
attr
(
"data-code"
);
admin
.
events
[
code
].
call
();
}
//监听浏览器窗口变化
$
(
window
).
resize
(
function
()
{
//当浏览器大小变化时
resizePageWidth
();
});
function
resizePageWidth
()
{
var
pagewidth
=
$
(
'.layui-body'
).
width
()
-
40
;
$
(
".layui-table-page"
).
css
({
width
:
pagewidth
+
"px"
});
};
//修改密码 joke add 20210413
admin
.
events
.
updtpswd
=
function
()
{
view
(
'data-setting-pwd'
).
render
(
'template/user/password'
).
then
(
function
(
res
)
{
layer
.
open
({
title
:
[
'修改密码'
,
'font-size:18px;'
],
type
:
1
,
area
:
[
'450px'
,
'300px'
],
content
:
res
.
body
});
});
};
//修改基本信息 joke add 20211206
admin
.
events
.
changeInfo
=
function
()
{
obj
.
openWin
(
'baseconfig/user/userChange'
,
'个人信息修改'
,
{
id
:
sessionStorage
.
getItem
(
'user_id'
),
type
:
'userChange'
},
[
'保存'
,
'取消'
],
function
f
()
{
$
(
"#user_form_save_id"
).
trigger
(
"click"
);
},
null
,[
'60%'
,
'45%'
]);
};
// 监听拓扑iframe事件
window
.
onmessage
=
function
(
messageEvent
)
{
if
(
messageEvent
.
data
.
type
===
'function'
)
{
// 如果是执行方法
var
result
=
eval
(
messageEvent
.
data
.
evalParam
);
}
}
//全局搜索框回车事件
$
(
'#allSearchKeywords'
).
keydown
(
function
(
e
)
{
if
(
e
.
keyCode
===
13
)
{
$
(
'[layadmin-event="globalSearch"]'
).
trigger
(
"click"
);
}
})
// 日期个格式化
Date
.
prototype
.
format
=
function
(
fmt
,
hoursTime
)
{
//12小时制和24小时制
var
hours
=
12
;
if
(
hoursTime
==
24
){
hours
=
24
;
}
var
o
=
{
"M+"
:
this
.
getMonth
()
+
1
,
//月份
"d+"
:
this
.
getDate
(),
//日
"h+"
:
this
.
getHours
()
%
hours
==
0
?
hours
:
this
.
getHours
()
%
hours
,
//小时
"H+"
:
this
.
getHours
(),
//小时
"m+"
:
this
.
getMinutes
(),
//分
"s+"
:
this
.
getSeconds
(),
//秒
"q+"
:
Math
.
floor
((
this
.
getMonth
()
+
3
)
/
3
),
//季度
"S"
:
this
.
getMilliseconds
()
//毫秒
};
if
(
/
(
y+
)
/
.
test
(
fmt
))
fmt
=
fmt
.
replace
(
RegExp
.
$1
,
(
this
.
getFullYear
()
+
""
).
substr
(
4
-
RegExp
.
$1
.
length
));
for
(
var
k
in
o
)
if
(
new
RegExp
(
"("
+
k
+
")"
).
test
(
fmt
))
fmt
=
fmt
.
replace
(
RegExp
.
$1
,
(
RegExp
.
$1
.
length
==
1
)
?
(
o
[
k
])
:
((
"00"
+
o
[
k
]).
substr
((
""
+
o
[
k
]).
length
)));
return
fmt
;
}
// 表单验证
form
.
verify
({
json
:
function
(
d
)
{
try
{
if
(
d
)
{
var
obj
=
JSON
.
parse
(
d
);
}
}
catch
(
e
)
{
return
"请输入格式正确的JSON"
}
}
});
//对外暴露的接口
exports
(
'common'
,
obj
);
});
...
...
hg-monitor-web-qh/src/main/resources/static/src/style/img/logo-small.png
0 → 100644
View file @
298076c
27 KB
hg-monitor-web-qh/src/main/resources/static/src/style/img/logo.png
0 → 100644
View file @
298076c
29.7 KB
hg-monitor-web-qh/src/main/resources/static/src/views/layout.html
0 → 100644
View file @
298076c
<!--默认布局-->
<div
class=
"layui-layout layui-layout-admin"
>
<script>
var
show
=
location
.
search
.
substr
(
1
).
split
(
"&"
)[
0
].
split
(
"="
)[
1
];
if
(
show
===
'0'
){
document
.
querySelector
(
"body"
).
classList
.
add
(
"layout-nav-hide"
);
}
var
editFlag
=
location
.
search
.
substr
(
1
).
split
(
"&"
)[
1
];
if
(
editFlag
){
var
name
=
editFlag
.
split
(
"="
)[
0
];
var
val
=
editFlag
.
split
(
"="
)[
1
]
==
"true"
?
true
:
false
;
if
(
name
===
"editFlag"
){
localStorage
.
setItem
(
"editFlag"
,
val
);
}
}
var
menuIsopen
=
'false'
;
layui
.
use
([
'jquery'
],
function
()
{
var
$
=
layui
.
jquery
;
// 读取配置文件
$
.
ajax
({
url
:
sessionStorage
.
getItem
(
'domainName'
)
+
'/api-web/sysConf/getByCode'
,
async
:
false
,
data
:
{
code
:
'view_menu_isopen'
,
access_token
:
localStorage
.
getItem
(
'access_token'
)
},
success
(
response
)
{
if
(
response
&&
response
.
success
&&
response
.
object
)
{
menuIsopen
=
response
.
object
.
value
;
}
}
});
});
</script>
<div
class=
"layui-header"
>
<!-- 头部区域 -->
<ul
class=
"layui-nav layui-layout-left"
>
<li
class=
"layui-nav-item layadmin-flexible"
lay-unselect
>
<a
href=
"javascript:;"
layadmin-event=
"flexible"
title=
"侧边伸缩"
>
<i
class=
"layui-icon layui-icon-shrink-right"
id=
"LAY_app_flexible"
></i>
</a>
</li>
<!--判定是否有daping角色,如果有则显示该菜单 joke add 20211203-->
<script
type=
"text/html"
template
lay-url=
"{{sessionStorage.getItem('domainName')}}/api-user/users/checkHasRole?roleCode=daping"
>
{{
#
if
(
d
.
count
>
0
){
}}
<
li
class
=
"layui-nav-item"
lay
-
tips
=
"展示大屏"
>
<
a
href
=
"javascript:;"
layadmin
-
event
=
"toBigScreen"
><
img
src
=
"/src/style/img/icon-daping.png"
style
=
"width: 16px;height: 16px"
><
/a
>
<
/li
>
{{
#
}
}}
</script>
<script
type=
"text/html"
template
lay-url=
"{{sessionStorage.getItem('domainName')}}/api-web/sxview/getbizListByUser?access_token={{localStorage.getItem('access_token')}}"
>
{{
#
if
(
d
.
data
.
length
>
0
){
}}
<
li
class
=
"layui-nav-item"
>
<
div
id
=
"toYTHView_div"
>
<
dd
layadmin
-
event
=
"toYTHViewScreen"
title
=
"一体化监控台"
><
a
><
img
src
=
"/src/style/img/icon-yitihuadaping.png"
style
=
"width: 16px;height: 16px"
><
/a></
dd
>
<
/div
>
<
/li
>
{{
#
}
}}
</script>
<li
class=
"layui-nav-item"
lay-unselect
>
<a
href=
"javascript:;"
layadmin-event=
"refresh"
title=
"刷新"
>
<i
class=
"layui-icon layui-icon-refresh-3"
></i>
</a>
</li>
</ul>
<img
src=
"/src/style/img/logo.png"
class=
"logo"
>
<ul
class=
"layui-nav layui-layout-right"
lay-filter=
"layadmin-layout-right"
>
<!--搜索框检索-->
<!-- <li class="layui-nav-item layui-hide-xs">-->
<!-- <input type="text" class="layui-input" id="allSearchKeywords" style="margin-top: 6px">-->
<!-- </li>-->
<li
class=
"layui-nav-item layui-hide-xs"
lay-tips=
"全局搜索"
>
<a
href=
"javascript:;"
layadmin-event=
"globalSearch"
><i
class=
"layui-icon layui-icon-search"
></i></a>
</li>
<!-- xwx add 首页增加业务健康度入口 2021-10-25 start-->
<li
class=
"layui-nav-item"
lay-unselect
>
<script
type=
"text/html"
template
lay-url=
"{{sessionStorage.getItem('domainName')}}/api-user/users/getUserByToken"
>
<
a
href
=
"javascript:;"
><
img
src
=
"/src/style/img/icon-1.png"
style
=
"width: 16px;height: 16px;"
><
/a
>
{{
#
var
roles
=
''
;
layui
.
each
(
d
.
object
.
sysRoles
,
function
(
idx
,
role
){
roles
+=
role
.
code
+
","
;
});
}}
<
li
><
input
type
=
"hidden"
id
=
"hq_entrance"
value
=
"{{roles}}"
><
/li
>
<
dl
class
=
"layui-nav-child"
>
<!--
调整到刷新旁边,此处去掉
lu
屏蔽
20211130
-->
<!--
<
dd
layadmin
-
event
=
"toBigScreen"
style
=
"text-align: left;"
><
a
><
img
src
=
"/src/style/img/icon-daping.png"
style
=
"width: 16px;height: 16px"
>&
nbsp
;
&
nbsp
;
大屏
<
/a></
dd
>-->
<
dd
layadmin
-
event
=
"toDZSWJScreen"
style
=
"text-align: left;"
><
a
><
img
src
=
"/src/style/img/icon-dianzishuiwuju.png"
style
=
"width: 16px;height: 16px"
>&
nbsp
;
&
nbsp
;
电子税务局大屏
<
/a></
dd
>
<!--
调整到首页旁边,此处去掉
joke
屏蔽
20211129
-->
<!--
<
dd
layadmin
-
event
=
"toYTHViewScreen"
style
=
"text-align: left;"
><
a
><
img
src
=
"/src/style/img/icon-yitihuadaping.png"
style
=
"width: 16px;height: 16px"
>&
nbsp
;
&
nbsp
;
一体化视图
<
/a></
dd
>-->
<
dd
layadmin
-
event
=
"toBiZhEalZhSYS"
style
=
"text-align: left;"
><
a
><
img
src
=
"/src/style/img/icon-YWJKD.png"
style
=
"width: 16px;height: 16px"
>&
nbsp
;
&
nbsp
;
业务健康度
<
/a></
dd
>
<
dd
layadmin
-
event
=
"toCMDB"
style
=
"text-align: left;"
><
a
><
img
src
=
"/src/style/img/icon-CMDB.png"
style
=
"width: 16px;height: 16px"
>&
nbsp
;
&
nbsp
;
CMDB
<
/a></
dd
>
<
/dl
>
</script>
</li>
<!-- xwx add 首页增加业务健康度入口 2021-10-25 end-->
<!-- <li class="layui-nav-item" lay-tips="一体化视图">-->
<!-- <!– <a href="javascript:;" layadmin-event="toYTHViewScreen"><i class="layui-icon layui-icon-chart-screen"></i></a>–>-->
<!-- <a href="javascript:;" layadmin-event="toYTHViewScreen" ><img src="/src/style/img/icon-yitihuadaping.png" style="width: 16px;height: 16px"></a>-->
<!-- </li>-->
<!-- <li class="layui-nav-item" lay-tips="大屏">-->
<!-- <!– <a href="javascript:;" layadmin-event="toBigScreen"><i class="layui-icon layui-icon-chart-screen"></i></a>–>-->
<!-- <a href="javascript:;" layadmin-event="toBigScreen" ><img src="/src/style/img/icon-daping.png" style="width: 16px;height: 16px"></a>-->
<!-- </li>-->
<!-- <li class="layui-nav-item" lay-tips="电子税务局">-->
<!-- <!– <a href="javascript:;" layadmin-event="toBigScreen"><i class="layui-icon layui-icon-chart-screen"></i></a>–>-->
<!-- <a href="javascript:;" layadmin-event="toDZSWJScreen" ><img src="/src/style/img/icon-dianzishuiwuju.png" style="width: 16px;height: 16px"></a>-->
<!-- </li>-->
<li
class=
"layui-nav-item layui-show-xs-inline-block layui-hide-sm"
lay-unselect
>
<a
href=
"javascript:;"
layadmin-event=
"more"
><i
class=
"layui-icon layui-icon-more-vertical"
></i></a>
</li>
<!-- <li class="layui-nav-item layui-hide-xs" lay-unselect>
<a href="javascript:;" layadmin-event="theme">
<i class="layui-icon layui-icon-theme"></i>
</a>
</li>-->
<li
class=
"layui-nav-item layui-hide-xs"
lay-unselect
>
<a
href=
"javascript:;"
layadmin-event=
"fullscreen"
>
<i
class=
"layui-icon layui-icon-screen-full"
></i>
</a>
</li>
<!-- 报表通知统计 -->
<li
class=
"layui-nav-item"
lay-unselect
>
<script
type=
"text/html"
template
lay-url=
"{{sessionStorage.getItem('domainName')}}/api-web/home/messageRemind"
>
<
a
href
=
"javascript:;"
class
=
"notice_msg"
>
<
i
class
=
"layui-icon layui-icon-notice"
><
/i><span>{{d.map==null
?
0 : d.map.totalCountByUser}}</
span
>
<
/a
>
<
dl
class
=
"layui-nav-child"
>
<
dd
><
a
href
=
"javascript:;"
lay
-
href
=
"/alarm/activewarning"
>
活动告警:
{{
d
.
map
==
null
?
0
:
d
.
map
.
totalCountByUser
}}
<
/a></
dd
>
<!--
<
hr
>-->
<!--
<
dd
><
a
href
=
"javascript:;"
lay
-
href
=
"/iframe/insp/monitor/flag=0"
>
未处理报表:
{{
d
.
map
==
null
?
0
:
d
.
map
.
statusCountByUser
}}
<
/a></
dd
>-->
<!--
<
hr
>-->
<!--
<
dd
><
a
href
=
"javascript:;"
lay
-
href
=
"/iframe/insp/workview/read=0/type=1"
>
工作汇报未读:
{{
d
.
map
==
null
?
0
:
d
.
map
.
notReadCountByUser
}}
<
/a></
dd
>-->
<!--
<
hr
>-->
<!--
<
dd
><
a
href
=
"javascript:;"
lay
-
href
=
"/iframe/insp/notice/t=day"
>
今日通知:
{{
d
.
map
==
null
?
0
:
d
.
map
.
countByUserAndToday
}}
<
/a></
dd
>-->
<
/dl
>
</script>
</li>
<li
class=
"layui-nav-item"
lay-unselect
>
<script
type=
"text/html"
template
lay-url=
"{{sessionStorage.getItem('domainName')}}/api-user/users/getUserByToken"
lay-done=
"layui.element.render('nav', 'layadmin-layout-right');"
>
<
a
href
=
"javascript:;"
>
欢迎
&
nbsp
;
&
nbsp
;
<
cite
style
=
"color: #1E9FFF"
user
-
info
>
{{
d
.
object
.
nickname
}}
<
/cite
>
<
/a
>
{{
#
var
roles
=
''
;
layui
.
each
(
d
.
object
.
sysRoles
,
function
(
idx
,
role
){
roles
+=
role
.
code
+
","
;
});
}}
<
li
><
input
type
=
"hidden"
id
=
"user_roles"
value
=
"{{roles}}"
><
/li
>
<
dl
class
=
"layui-nav-child"
>
<
dd
layadmin
-
event
=
"updtpswd"
style
=
"text-align: center;"
><
a
>
修改密码
<
/a></
dd
>
<
dd
user
-
info
layadmin
-
event
=
"changeInfo"
style
=
"text-align: center;"
><
a
>
修改信息
<
/a></
dd
>
<
dd
layadmin
-
event
=
"logout"
style
=
"text-align: center;"
><
a
>
退出
<
/a></
dd
>
<
/dl
>
</script>
</li>
<!-- <script type="text/html" template lay-url="{{sessionStorage.getItem('domainName')}}/api-user/users/getUserByToken"-->
<!-- lay-done="layui.element.render('nav', 'layadmin-text-name');">-->
<!-- <li class="layui-nav-item layui-hide-xs" lay-unselect lay-filter="layadmin-text-name">-->
<!-- <a href="javascript:;" style="text-align: center;" >欢迎 <b id="user-name" lay-tips="点击退出" layadmin-event="logout" style="color: #3d9fe6">{{d.object.nickname }}</b></a>-->
<!-- </li>-->
<!-- </script>-->
</ul>
</div>
<!-- 侧边菜单 -->
<!-- 先获取默认菜单拼接 d.str 返回数据格式 modeleid#path-->
<!-- 如果配置默认首页,则给默认首页,否则给工作台(moduleid为work,path为work/index)-->
<div
class=
"layui-side layui-side-menu"
>
<div
class=
"layui-side-scroll"
>
<script
type=
"text/html"
template
lay-url=
"{{sessionStorage.getItem('domainName')}}/api-user/menus/current?type=1"
lay-done=
"layui.element.render('nav', 'layadmin-system-side-menu');"
id=
"TPL_layout"
>
{{
#
var
dataName
=
layui
.
setter
.
response
.
dataName
;
var
fisthref
=
"/index"
;
var
defaultMenu
=
d
.
str
;
var
defaultModuleid
=
''
;
var
defaultPath
=
''
;
if
(
defaultMenu
&&
defaultMenu
!=
''
){
defaultModuleid
=
d
.
str
.
split
(
'#'
)[
0
];
defaultPath
=
d
.
str
.
split
(
'#'
)[
1
];
fisthref
=
defaultPath
;
}
}}
<
div
class
=
"layui-logo"
lay
-
href
=
"{{fisthref}}"
>
<
span
>
{{
layui
.
setter
.
name
||
'layuiAdmin'
}}
<
/span
>
<
/div
>
<
ul
class
=
"layui-nav layui-nav-tree"
lay
-
shrink
=
"all"
id
=
"LAY-system-side-menu"
lay
-
filter
=
"layadmin-system-side-menu"
>
{{
#
var
show
=
location
.
search
.
substr
(
1
).
split
(
"&"
)[
0
].
split
(
"="
)[
1
];
if
(
show
==
'1'
)
window
.
history
.
pushState
({}
,
''
,
'#'
);
if
(
show
!=
'0'
)
location
.
hash
=
"/"
;
var
path
=
layui
.
router
().
path
,
pathURL
=
layui
.
admin
.
correctRouter
(
path
.
join
(
'/'
))
,
dataName
=
layui
.
setter
.
response
.
dataName
;
var
fistModuleid
=
''
;
if
(
d
&&
d
[
dataName
].
length
>
0
){
fistModuleid
=
d
[
dataName
][
0
].
moduleid
;
}
layui
.
each
(
d
[
dataName
],
function
(
index
,
item
){
var
isselectd
=
''
;
var
isSelectedModuleid
=
''
;
if
(
defaultModuleid
!=
''
||
item
.
moduleid
!=
''
){
if
(
item
.
moduleid
==
defaultModuleid
){
isselectd
=
"layui-this"
;
}
else
{
isselectd
=
""
;
}
}
else
{
if
(
!
defaultModuleid
||
defaultModuleid
==
''
){
if
(
index
=
0
){
isselectd
=
"layui-this"
;
}
}
else
{
isselectd
=
""
;
}
}
var
hasChildren
=
typeof
item
.
subMenus
===
'object'
&&
item
.
subMenus
&&
item
.
subMenus
.
length
>
0
,
classSelected
=
function
(){
var
match
=
path
[
0
]
==
item
.
moduleid
||
(
index
==
0
&&
!
path
[
0
])
||
(
item
.
path
&&
pathURL
==
layui
.
admin
.
correctRouter
(
item
.
path
))
||
item
.
spread
;
if
(
match
){
return
hasChildren
?
'layui-nav-itemed'
:
'layui-nav-itemed'
;
}
return
''
;
}
,
url
=
(
item
.
path
&&
typeof
item
.
path
===
'string'
)
?
item
.
path
:
item
.
moduleid
;
var
closeMenuEvent
=
''
;
if
(
item
.
moduleid
==
'biz'
||
item
.
moduleid
==
'res'
){
closeMenuEvent
=
'closeMenu'
}
}}
<
li
data
-
name
=
"{{ item.moduleid || '' }}"
data
-
jump
=
"{{ item.path || '' }}"
class
=
"layui-nav-item {{ menuIsopen == 'true' ? 'layui-nav-itemed' : '' }} {{isselectd}}"
>
{{
#
if
(
item
.
moduleid
==
'cmdbsys'
||
item
.
moduleid
==
'sxview'
||
item
.
moduleid
==
'dpsys'
){
}}
<
a
href
=
"javascript:;"
layadmin
-
event
=
"{{item.moduleid}}"
lay
-
tips
=
"{{ item.name
}}"
lay
-
direction
=
"2"
>
<
i
class
=
"layui-icon {{ item.css }}"
><
/i
>
<
cite
>
{{
item
.
name
}}
<
/cite
>
<
/a
>
{{
#
}
}}
{{
#
if
(
item
.
moduleid
!=
'cmdbsys'
&&
item
.
moduleid
!=
'sxview'
&&
item
.
moduleid
!=
'dpsys'
){
}}
<
a
href
=
"javascript:;"
{{
hasChildren
?
''
:
'lay-href="'
+
url
+
'"'
}}
layadmin
-
event
=
"{{closeMenuEvent}}"
lay
-
tips
=
"{{ item.name
}}"
lay
-
direction
=
"2"
>
<
i
class
=
"layui-icon {{ item.css }}"
><
/i
>
<
cite
>
{{
item
.
name
}}
<
/cite
>
<
/a
>
{{
#
}
}}
{{
#
if
(
hasChildren
){
}}
<
dl
class
=
"layui-nav-child"
>
{{
#
layui
.
each
(
item
.
subMenus
,
function
(
index2
,
item2
){
if
(
item2
.
moduleid
&&
item2
.
moduleid
==
defaultModuleid
){
isselectd
=
"layui-this"
;
}
else
{
isselectd
=
""
;
}
var
hasChildren2
=
typeof
item2
.
subMenus
==
'object'
&&
item2
.
subMenus
&&
item2
.
subMenus
.
length
>
0
,
classSelected2
=
function
(){
var
match
=
(
path
[
0
]
==
item
.
moduleid
&&
path
[
1
]
==
item2
.
moduleid
)
||
(
item2
.
path
&&
pathURL
==
layui
.
admin
.
correctRouter
(
item2
.
path
))
||
item2
.
spread
;
return
''
;
}
,
url2
=
(
item2
.
path
&&
typeof
item2
.
path
===
'string'
)
?
item2
.
path
:
[
item
.
moduleid
,
item2
.
moduleid
,
''
].
join
(
'/'
);
}}
<
dd
data
-
name
=
"{{ item2.moduleid || '' }}"
data
-
jump
=
"{{ item2.path || '' }}"
class
=
"layui-nav-item {{ classSelected2() }} {{isselectd}}"
>
{{
#
if
(
item2
.
menuDesc
.
indexOf
(
'第三方'
)
==
'-1'
)
{}}
<
a
href
=
"javascript:;"
{{
hasChildren2
?
''
:
'lay-href="'
+
url2
+
'"'
}}
>
{{
item2
.
name
}}
<
/a
>
{{
#
}
else
{
}}
<
a
href
=
"javascript:;"
{{
hasChildren2
?
''
:
'data-url="'
+
url2
+
'" layadmin-event="IntegratedEntrance"'
}}
data
-
moduleid
=
"{{item2.moduleid}}"
>
{{
item2
.
name
}}
<
/a
>
{{
#
}
}}
{{
#
if
(
hasChildren2
){
}}
<
dl
class
=
"layui-nav-child {{}}"
>
{{
#
layui
.
each
(
item2
.
subMenus
,
function
(
index3
,
item3
){
var
match
=
(
path
[
0
]
==
item
.
moduleid
&&
path
[
1
]
==
item2
.
moduleid
&&
path
[
2
]
==
item3
.
moduleid
)
||
(
item3
.
path
&&
pathURL
==
layui
.
admin
.
correctRouter
(
item3
.
path
))
,
url3
=
(
item3
.
path
&&
typeof
item3
.
path
===
'string'
)
?
item3
.
path
:
[
item
.
moduleid
,
item2
.
moduleid
,
item3
.
moduleid
].
join
(
'/'
)
}}
<
dd
data
-
name
=
"{{ item3.moduleid || '' }}"
data
-
jump
=
"{{ item3.path || '' }}"
>
{{
#
if
(
item2
.
menuDesc
.
indexOf
(
'第三方'
)
==
'-1'
)
{}}
<
a
href
=
"javascript:;"
lay
-
href
=
"{{ url3 }}"
{{
item3
.
iframe
?
'lay-iframe="true"'
:
''
}}
>
{{
item3
.
name
}}
<
/a
>
{{
#
}
else
{
}}
<
a
href
=
"javascript:;"
data
-
url
=
"{{ url3 }}"
layadmin
-
event
=
"IntegratedEntrance"
data
-
moduleid
=
"{{item3.moduleid}}"
>
{{
item3
.
name
}}
<
/a
>
{{
#
}
}}
<
/dd
>
{{
#
});
}}
<
/dl
>
{{
#
}
}}
<
/dd
>
{{
#
});
}}
<
/dl
>
{{
#
}
}}
<
/li
>
{{
#
});
}}
<
/ul
>
</script>
</div>
<div
class=
"right-bottom-tips"
></div>
</div>
<!-- 页面标签 -->
<script
type=
"text/html"
template
lay-url=
"{{sessionStorage.getItem('domainName')}}/api-user/menus/findSettingDefaultMenus"
lay-done=
"layui.element.render('nav', 'layadmin-pagetabs-nav')"
>
<
div
class
=
"layadmin-pagetabs"
id
=
"LAY_app_tabs"
>
<
div
class
=
"layui-icon layadmin-tabs-control layui-icon-prev"
layadmin
-
event
=
"leftPage"
><
/div
>
<
div
class
=
"layui-icon layadmin-tabs-control layui-icon-next"
layadmin
-
event
=
"rightPage"
><
/div
>
<
div
class
=
"layui-icon layadmin-tabs-control layui-icon-down"
>
<
ul
class
=
"layui-nav layadmin-tabs-select"
lay
-
filter
=
"layadmin-pagetabs-nav"
>
<
li
class
=
"layui-nav-item"
lay
-
unselect
>
<
a
href
=
"javascript:;"
><
/a
>
<
dl
class
=
"layui-nav-child layui-anim-fadein"
>
<
dd
layadmin
-
event
=
"closeThisTabs"
><
a
href
=
"javascript:;"
>
关闭当前标签页
<
/a></
dd
>
<
dd
layadmin
-
event
=
"closeOtherTabs"
><
a
href
=
"javascript:;"
>
关闭其它标签页
<
/a></
dd
>
<
dd
layadmin
-
event
=
"closeAllTabs"
><
a
href
=
"javascript:;"
>
关闭全部标签页
<
/a></
dd
>
<
/dl
>
<
/li
>
<
/ul
>
<
/div
>
<!--
<
script
type
=
"text/html"
template
lay
-
url
=
"{{sessionStorage.getItem('domainName')}}/api-user/users/getUserByToken"
>-->
<!--
<
div
id
=
"toYTHView_div"
style
=
"padding:0 10px;float: left;"
>-->
<!--
<
dd
layadmin
-
event
=
"toYTHViewScreen"
title
=
"一体化控制台"
><
a
><
img
src
=
"/src/style/img/icon-yitihuadaping.png"
style
=
"width: 16px;height: 16px"
><
/a></
dd
>-->
<!--
<
/div>--
>
<
div
class
=
"layui-tab"
lay
-
unauto
lay
-
allowClose
=
"true"
lay
-
filter
=
"layadmin-layout-tabs"
>
<
ul
class
=
"layui-tab-title"
id
=
"LAY_app_tabsheader"
>
{{
#
if
(
d
.
data
.
length
>=
1
){
}}
{{
#
if
(
d
.
data
[
0
].
moduleid
==
'index'
){
}}
<
li
lay
-
id
=
"/"
><
i
class
=
"layui-icon layui-icon-home"
><
/i></
li
>
{{
#
}
}}
{{
#
if
(
d
.
data
[
0
].
moduleid
!=
'index'
){
}}
<
li
lay
-
id
=
"/{{d.data[0].moduleid}}/"
lay
-
attr
=
"/{{d.data[0].moduleid}}/"
><
i
class
=
"layui-icon layui-icon-home"
><
/i></
li
>
{{
#
}
}}
{{
#
}
}}
{{
#
if
(
d
.
data
.
length
==
0
){
}}
<
li
lay
-
id
=
"/"
><
i
class
=
"layui-icon layui-icon-home"
><
/i></
li
>
{{
#
}
}}
<
/ul
>
<
/div
>
<
/div
>
</script>
<!-- 主体内容 -->
<div
class=
"layui-body"
id=
"LAY_app_body"
>
<!-- 单页模式接入-->
<div
class=
"layadmin-tabsbody-item layui-show"
></div>
</div>
<!-- 辅助元素,一般用于移动设备下遮罩 -->
<div
class=
"layadmin-body-shade"
layadmin-event=
"shade"
></div>
</div>
<!--告警操作记录-->
<script
type=
"text/html"
id=
"warnViewWinTpl"
>
<
div
class
=
"warn-win"
>
<
div
class
=
"warn-win-item"
>
<
h5
>
告警确认【
{{
d
.
confirm
.
length
}}
】
<
/h5
>
{{
#
layui
.
each
(
d
.
confirm
,
function
(
index
,
item
){
}}
<
div
class
=
"warn-win-item-con"
>
<
span
>
{{
layui
.
util
.
toDateString
(
item
.
confirmTime
)}}
<
/span
>
<
ul
>
<
li
>
备注:
{{
item
.
remark
}}
<
/li
>
<
li
>
告警确认人:
{{
item
.
confirmUserId
}}
<
/li
>
<
li
>
紧急程度:
{{
item
.
levelName
}}
<
/li
>
<
/ul
>
<
/div
>
{{
#
});
}}
<
/div
>
<
div
class
=
"warn-win-item"
>
<
h5
>
告警关闭【
{{
d
.
close
.
length
}}
】
<
/h5
>
{{
#
layui
.
each
(
d
.
close
,
function
(
index
,
item
){
}}
{{
#
var
closeTypeStr
=
'告警'
}}
{{
#
if
(
item
.
closeType
==
1
){
closeTypeStr
=
'通知'
}
}}
<
div
class
=
"warn-win-item-con"
>
<
span
>
备注:
{{
item
.
remark
}}
<
/span
>
<
ul
>
<
li
>
告警关闭时间:
{{
layui
.
util
.
toDateString
(
item
.
closeTime
)}}
<
/li
>
<
li
>
告警关闭人:
{{
item
.
closeUserId
}}
<
/li
>
<
li
>
关闭范围:
{{
closeTypeStr
}}
<
/li
>
<
li
>
关闭时长:
{{
item
.
closeDuration
}}
小时
<
/li
>
<
/ul
>
<
/div
>
{{
#
});
}}
<
/div
>
<
div
class
=
"warn-win-item"
>
<
h5
>
告警恢复【
{{
d
.
resume
.
length
}}
】
<
/h5
>
{{
#
layui
.
each
(
d
.
resume
,
function
(
index
,
item
){
}}
{{
#
var
resumeTypeStr
=
'恢复关闭的活动告警'
}}
{{
#
if
(
item
.
resumeType
==
1
){
resumeTypeStr
=
'恢复历史告警'
}
}}
<
div
class
=
"warn-win-item-con"
>
<
span
>
备注:
{{
item
.
remark
}}
<
/span
>
<
ul
>
<
li
>
告警恢复时间:
{{
layui
.
util
.
toDateString
(
item
.
resumeTime
)}}
<
/li
>
<
li
>
告警恢复人:
{{
item
.
resumeUserId
}}
<
/li
>
<
li
>
恢复类型:
{{
resumeTypeStr
}}
<
/li
>
<
/ul
>
<
/div
>
{{
#
});
}}
<
/div
>
<
/div
>
</script>
<!--详细页左侧面板-->
<script
type=
"text/html"
id=
"detailPageLeftPanel"
>
<
div
class
=
"detail-left-panel"
>
<
a
class
=
"detail-left-panel-btn"
href
=
"javascript:void(0)"
><
i
class
=
"layui-icon layui-icon-next"
><
/i></
a
>
<
div
class
=
"detail-left-panel-node"
style
=
"display: none"
>
{{
#
layui
.
each
(
d
.
map
,
function
(
k
,
v
){
}}
<
div
class
=
"left-panel-restype"
>
<
div
class
=
"layui-title"
>
{{
v
[
0
].
reTypeName
}}
<
/div
>
<
div
class
=
""
>
{{
#
layui
.
each
(
v
,
function
(
i
,
e
){
}}
<
div
class
=
"info-box link"
data
-
resid
=
"{{e.targetId}}"
data
-
restype
=
"{{e.resType}}"
data
-
restypename
=
"{{e.resTypeName}}"
data
-
ip
=
"{{e.ip}}"
data
-
admin
=
"{{e.admin}}"
>
{{
e
.
targetName
}}
<
/div
>
{{
#
});
}}
<
/div
>
<
/div
>
{{
#
});
}}
{{
#
if
(
!
Object
.
keys
(
d
.
map
).
length
)
{
}}
<
div
class
=
"left-panel-restype"
>
<
div
class
=
"desc-box"
>
暂无关联关系
<
/div
>
<
/div
>
{{
#
}
}}
<
/div
>
<
/div
>
</script>
<!--下探top30表格展示内容-->
<script
type=
"text/html"
id=
"detailKpiTableTpl"
>
<
table
class
=
"layui-table"
lay
-
even
=
""
lay
-
skin
=
"row"
>
<
colgroup
>
<
col
width
=
"100"
>
<
col
width
=
"150"
>
<
col
width
=
"180"
>
<
col
width
=
"180"
>
<
/colgroup
>
<
thead
>
<
tr
>
<
th
>
序号
<
/th
>
<
th
>
进程号
<
/th
>
<
th
>
所属用户
<
/th
>
{{
#
if
(
d
.
kpi
==
'KPI7054BC34'
){
}}
<
th
>
使用率
<
/th
>
{{
#
}
}}
{{
#
if
(
d
.
kpi
!=
'KPI7054BC34'
){
}}
<
th
>
使用量
<
/th
>
{{
#
}
}}
<
/tr
>
<
/thead
>
<
tbody
>
{{
#
layui
.
each
(
d
.
data
,
function
(
index
,
item
){
}}
<
tr
>
<
td
>
{{
index
+
1
}}
<
/td
>
<
td
>
{{
item
.
pid
}}
<
/td
>
<
td
>
{{
item
.
username
}}
<
/td
>
<
td
>
{{
item
.
usedPercent
}}
<
/td
>
<!--
<
td
>
{{
item
.
info
}}
<
/td>--
>
<
/tr
>
{{
#
});
}}
<
/tbody
>
<
/table
>
</script>
<!--corn表达式-->
<script
type=
"text/html"
id=
"cronHtml"
>
<
div
id
=
"cronContent"
style
=
"color:#000000"
>
<
p
style
=
"margin: 10px auto; padding: 0px;"
>
<
strong
style
=
"margin: 0px; padding: 0px;"
><
span
style
=
"margin: 0px; padding: 0px; line-height: 18px; color: rgb(255, 0, 0);"
>
常用表达式例子
<
/span></
strong
>
<
/p
>
<
p
style
=
"margin: 10px auto; padding: 0px;"
>
<
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
>&
nbsp
;
&
nbsp
;
<
/span> 表示每2秒 执行任
务
<
/p
>
<
p
style
=
"margin: 10px auto; padding: 0px;"
>
<
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
>&
nbsp
;
&
nbsp
;
<
/span> 表示每2分钟 执行任
务
<
/p
>
<
p
style
=
"margin: 10px auto; padding: 0px;"
>
<
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
>&
nbsp
;
&
nbsp
;
<
/span> 表示在每月的1日的凌晨2点调整任
务
<
/p
>
<
p
style
=
"margin: 10px auto; padding: 0px;"
>
<
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
>&
nbsp
;
表示周一到周五每天上午
10
:
15
执行作业
<
/p
>
<
p
style
=
"margin: 10px auto; padding: 0px;"
>
(
3
)
<
strong
style
=
"margin: 0px; padding: 0px;"
><
span
style
=
"margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);"
>
0
15
10
?
6
L
2002
-
2006
<
/span></
strong
>&
nbsp
;
&
nbsp
;
表示
2002
-
2006
年的每个月的最后一个星期五上午
10
:
15
执行作
<
/p
>
<
p
style
=
"margin: 10px auto; padding: 0px;"
>
(
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
>&
nbsp
;
&
nbsp
;
&
nbsp
;
每天上午
10
点,下午
2
点,
4
点
&
nbsp
;
<
/p
>
<
p
style
=
"margin: 10px auto; padding: 0px;"
>
(
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
>&
nbsp
;
&
nbsp
;
朝九晚五工作时间内每半小时
&
nbsp
;
<
/p
>
<
p
style
=
"margin: 10px auto; padding: 0px;"
>
(
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
>&
nbsp
;
&
nbsp
;
&
nbsp
;
表示每个星期三中午
12
点
&
nbsp
;
<
/p
>
<
p
style
=
"margin: 10px auto; padding: 0px;"
>
(
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
>&
nbsp
;
&
nbsp
;
&
nbsp
;
每天中午
12
点触发
&
nbsp
;
<
/p
>
<
p
style
=
"margin: 10px auto; padding: 0px;"
>
(
8
)
<
strong
style
=
"margin: 0px; padding: 0px;"
><
span
style
=
"margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);"
>
0
15
10
?
*
*
&
nbsp
;
<
/span></
strong
>&
nbsp
;
&
nbsp
;
每天上午
10
:
15
触发
&
nbsp
;
<
/p
>
<
p
style
=
"margin: 10px auto; padding: 0px;"
>
(
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
>&
nbsp
;
&
nbsp
;
&
nbsp
;
每天上午
10
:
15
触发
&
nbsp
;
<
/p
>
<
p
style
=
"margin: 10px auto; padding: 0px;"
>
(
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
>&
nbsp
;
&
nbsp
;
每天上午
10
:
15
触发
&
nbsp
;
<
/p
>
<
p
style
=
"margin: 10px auto; padding: 0px;"
>
(
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
>&
nbsp
;
&
nbsp
;
&
nbsp
;
2005
年的每天上午
10
:
15
触发
&
nbsp
;
<
/p
>
<
p
style
=
"margin: 10px auto; padding: 0px;"
>
(
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
>&
nbsp
;
&
nbsp
;
&
nbsp
;
在每天下午
2
点到下午
2
:
59
期间的每
1
分钟触发
&
nbsp
;
<
/p
>
<
p
style
=
"margin: 10px auto; padding: 0px;"
>
(
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
>&
nbsp
;
&
nbsp
;
&
nbsp
;
在每天下午
2
点到下午
2
:
55
期间的每
5
分钟触发
&
nbsp
;
<
/p
>
<
p
style
=
"margin: 10px auto; padding: 0px;"
>
(
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
>&
nbsp
;
&
nbsp
;
&
nbsp
;
在每天下午
2
点到
2
:
55
期间和下午
6
点到
6
:
55
期间的每
5
分钟触发
&
nbsp
;
<
/p
>
<
p
style
=
"margin: 10px auto; padding: 0px;"
>
(
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
>&
nbsp
;
&
nbsp
;
在每天下午
2
点到下午
2
:
05
期间的每
1
分钟触发
&
nbsp
;
<
/p
>
<
p
style
=
"margin: 10px auto; padding: 0px;"
>
(
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
>&
nbsp
;
&
nbsp
;
&
nbsp
;
每年三月的星期三的下午
2
:
10
和
2
:
44
触发
&
nbsp
;
<
/p
>
<
p
style
=
"margin: 10px auto; padding: 0px;"
>
(
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
>&
nbsp
;
&
nbsp
;
周一至周五的上午
10
:
15
触发
&
nbsp
;
<
/p
>
<
p
style
=
"margin: 10px auto; padding: 0px;"
>
(
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
>&
nbsp
;
&
nbsp
;
每月
15
日上午
10
:
15
触发
&
nbsp
;
<
/p
>
<
p
style
=
"margin: 10px auto; padding: 0px;"
>
(
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
>&
nbsp
;
&
nbsp
;
每月最后一日的上午
10
:
15
触发
&
nbsp
;
<
/p
>
<
p
style
=
"margin: 10px auto; padding: 0px;"
>
(
20
)
<
strong
style
=
"margin: 0px; padding: 0px;"
><
span
style
=
"margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);"
>
0
15
10
?
*
6
L
<
/span> </
strong
>&
nbsp
;
&
nbsp
;
每月的最后一个星期五上午
10
:
15
触发
&
nbsp
;
<
/p
>
<
p
style
=
"margin: 10px auto; padding: 0px;"
>
(
21
)
<
strong
style
=
"margin: 0px; padding: 0px;"
><
span
style
=
"margin: 0px; padding: 0px; line-height: 18px; color: rgb(0, 0, 255);"
>
0
15
10
?
*
6
L
2002
-
2005
<
/span></
strong
>&
nbsp
;
&
nbsp
;
2002
年至
2005
年的每月的最后一个星期五上午
10
:
15
触发
&
nbsp
;
<
/p
>
<
p
style
=
"margin: 10px auto; padding: 0px;"
>
(
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
>&
nbsp
;
&
nbsp
;
每月的第三个星期五上午
10
:
15
触发
<
/p
>
<
p
style
=
"margin: 10px auto; padding: 0px;"
>
&
nbsp
;
<
/p
>
<
/div
>
</script>
<!--资源名称-->
<script
type=
"text/html"
id=
"resindex_resName"
>
<!--
更改单元格溢出时的
tip
跑到左上角
LSQ
2022
/
1
/
6
-->
<
div
id
=
"res-div"
>
{{
#
var
urlLast
=
window
.
location
.
hash
;
var
w
=
$
(
".layui-table thead th[data-field='resName']"
).
data
(
'minwidth'
);
if
(
urlLast
==
"#/res/index"
){
w
=
$
(
"[lay-id='resListTable'] table thead th[data-field='resName'"
).
data
(
'minwidth'
);
}
else
if
(
urlLast
==
"#/biz/index"
){
w
=
$
(
"[lay-id='bizListTable'] table thead th[data-field='resName'"
).
data
(
'minwidth'
);
}
var
maxW
=
(
w
-
45
)
+
'px'
;
var
styleW
=
"float: left;max-width: "
+
maxW
+
";overflow: hidden; text-overflow: ellipsis; white-space: nowrap;display: inline-block;"
;
}}
<
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
>
{{
#
if
(
d
.
favId
==
null
)
{
}}
<
a
class
=
"layui-icon layui-icon-rate hide"
data
-
favid
=
"{{d.favId}}"
data
-
id
=
"{{d.resId}}"
lay
-
tips
=
"加入收藏夹"
style
=
"font-size: 14px"
><
/a
>
{{
#
}
else
{
}}
<
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
>
{{
#
}
}}
<
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"
>&
#
XE515
;
<
/i></
a
>
<!--
{{
#
if
(
d
.
resCategory
==
'share'
&&
d
.
hardwareFlag
&&
d
.
hardwareFlag
.
endsWith
(
"Y"
))
{
}}
<
a
class
=
"layui-icon reslist-assets-details hide"
data
-
resid
=
"{{d.resId}}"
data
-
restype
=
"{{d.resType}}"
data
-
name
=
"{{d.resName}}"
data
-
ip
=
"{{ d.ip }}"
style
=
"color: #FEB61E; font-size: 14px; margin-left: 10px;"
lay
-
tips
=
"资产配置信息"
><
i
class
=
"iconfont"
>&
#
XE517
;
<
/i></
a
>
{{
#
}
}}
-->
<
/div
>
</script>
<!--最大文件系统使用率-->
<script
type=
"text/html"
id=
"fileUseRateTpl"
>
<
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'}}"
data
-
warning
=
"0"
data
-
ident
=
"1"
data
-
trend
=
"0"
>
<
div
class
=
"layui-progress layui-progress-big"
lay
-
showpercent
=
"true"
>
<
div
style
=
"position:absolute; z-index:1;width: 100%"
id
=
"{{d.resId}}_bizfileName"
lay
-
tips
=
"{{d.fileSysUseName}}"
data
-
id
=
"{{d.resId}}_bizfileName"
data
-
message
=
"{{d.fileSysUseName}}"
><
span
style
=
"color: #000000;"
>
{{
d
.
fileSysUseName
}}
<
/span
>
<
/div
>
<
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':'')) }}"
lay
-
percent
=
"{{ d.fileSysUseRate }}%"
style
=
"width: {{ d.fileSysUseRate }}%;"
>
<
/div
>
<
/div
>
<
span
class
=
"layui-progress-text"
>
{{
(
d
.
fileSysUseRate
==
null
||
d
.
fileSysUseRate
==
''
||
d
.
fileSysUseRate
===
'未知'
||
d
.
fileSysUseRate
===
'无'
)?
'0%'
:
d
.
fileSysUseRate
+
'%'
}}
<
/span
>
<
/div
>
</script>
<!--CPU使用率-->
<script
type=
"text/html"
id=
"cpuRateTpl"
>
<
div
class
=
"layui-progress-wrap kpiSubDiv"
data
-
resid
=
{{
d
.
resId
}}
data
-
kpiid
=
"KPI7054BC34"
data
-
flag
=
"cpu"
data
-
name
=
"CPU使用率"
data
-
warning
=
"0"
data
-
ident
=
"1"
data
-
trend
=
"1"
>
<
div
class
=
"layui-progress layui-progress-big"
lay
-
showpercent
=
"true"
>
<
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':''))}}"
lay
-
percent
=
"{{ d.cpuRate }}%"
style
=
"width: {{ d.cpuRate }}%;"
>
<
/div
>
<
/div
>
<
span
class
=
"layui-progress-text"
>
{{
(
d
.
cpuRate
==
null
||
d
.
cpuRate
==
''
||
d
.
cpuRate
===
'未知'
||
d
.
cpuRate
===
'无'
)?
'0%'
:
d
.
cpuRate
+
'%'
}}
<
/span
>
<
/div
>
</script>
<!--内存使用率-->
<script
type=
"text/html"
id=
"memoryRateTpl"
>
<
div
class
=
"layui-progress-wrap kpiSubDiv"
data
-
resid
=
{{
d
.
resId
}}
data
-
kpiid
=
"KPI31CB8D97"
data
-
flag
=
"mem"
data
-
name
=
"内存使用率"
data
-
warning
=
"1"
data
-
ident
=
"1"
data
-
trend
=
"1"
>
<
div
class
=
"layui-progress layui-progress-big"
lay
-
showpercent
=
"true"
>
<
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':''))}}"
lay
-
percent
=
"{{ d.memoryRate }}%"
style
=
"width: {{ d.memoryRate }}%;"
>
<
/div
>
<
/div
>
<
span
class
=
"layui-progress-text"
>
{{
(
d
.
memoryRate
==
null
||
d
.
memoryRate
==
''
||
d
.
memoryRate
===
'未知'
||
d
.
memoryRate
===
'无'
)?
'0%'
:
d
.
memoryRate
+
'%'
}}
<
/span
>
<
/div
>
</script>
<!--虚拟内存使用率-->
<script
type=
"text/html"
id=
"vmmemoryRateTpl"
>
<
div
class
=
"layui-progress-wrap kpiSubDiv"
data
-
resid
=
{{
d
.
resId
}}
data
-
kpiid
=
"KPI20352505"
data
-
flag
=
"vmem"
data
-
name
=
"虚拟内存使用率"
data
-
warning
=
"1"
data
-
ident
=
"1"
data
-
trend
=
"1"
>
<
div
class
=
"layui-progress layui-progress-big"
lay
-
showpercent
=
"true"
>
<
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':''))}}"
lay
-
percent
=
"{{ d.vmmemoryUseRate }}%"
style
=
"width: {{ d.vmmemoryUseRate }}%;"
>
<
/div
>
<
/div
>
<
span
class
=
"layui-progress-text"
>
{{
(
d
.
vmmemoryUseRate
==
null
||
d
.
vmmemoryUseRate
==
''
||
d
.
vmmemoryUseRate
===
'未知'
||
d
.
vmmemoryUseRate
===
'无'
)?
'0%'
:
d
.
vmmemoryUseRate
+
'%'
}}
<
/span
>
<
/div
>
</script>
<!--会话百分比-->
<script
type=
"text/html"
id=
"sessionRateTpl"
>
<
div
class
=
"layui-progress-wrap kpiSubDiv"
data
-
resid
=
{{
d
.
resId
}}
data
-
kpiid
=
"KPI18F18278"
data
-
name
=
"活动会话百分比"
data
-
flag
=
"session"
data
-
warning
=
"0"
data
-
ident
=
"1"
data
-
trend
=
"0"
>
<
div
class
=
"layui-progress layui-progress-big"
lay
-
showpercent
=
"true"
>
<
div
class
=
"layui-progress-bar layui-bg-green {{ d.sessionRate >= 80 ? 'layui-bg-red' : (d.sessionRate <= 50 ? '' : 'layui-bg-orange') }}"
lay
-
percent
=
"{{ d.sessionRate }}%"
style
=
"width: {{ d.sessionRate }}%;"
>
<
/div
>
<
/div
>
<
span
class
=
"layui-progress-text"
>
{{
(
d
.
sessionRate
==
null
||
d
.
sessionRate
==
''
||
d
.
sessionRate
===
'未知'
||
d
.
sessionRate
===
'无'
)?
'0%'
:
d
.
sessionRate
+
'%'
}}
<
/span
>
<
/div
>
</script>
<!--CPU分配率-->
<script
type=
"text/html"
id=
"cpuSetRateTpl"
>
<
div
class
=
"layui-progress-wrap kpiSubDiv"
data
-
resid
=
{{
d
.
resId
}}
data
-
kpiid
=
"KPIBFA3F5CD"
data
-
name
=
"CPU分配率"
data
-
flag
=
"cpu"
data
-
warning
=
"0"
data
-
ident
=
"1"
data
-
trend
=
"0"
>
{{
#
d
.
cpuSetRate
=
parseFloat
(
d
.
cpuSetRate
).
toFixed
(
2
);
}}
<
div
class
=
"layui-progress layui-progress-big"
lay
-
showpercent
=
"true"
>
<
div
class
=
"layui-progress-bar layui-bg-green {{ d.cpuSetRate >= 80 ? 'layui-bg-red' : (d.cpuSetRate <= 50 ? '' : 'layui-bg-orange') }}"
lay
-
percent
=
"{{ d.cpuSetRate }}%"
style
=
"width: {{ d.cpuSetRate }}%;"
>
<
/div
>
<
/div
>
<
span
class
=
"layui-progress-text"
>
{{
(
d
.
cpuSetRate
==
null
||
d
.
cpuSetRate
==
''
||
d
.
cpuSetRate
===
'未知'
||
d
.
cpuSetRate
===
'无'
)?
'0%'
:
d
.
cpuSetRate
+
'%'
}}
<
/span
>
<
/div
>
</script>
<!--内存分配率-->
<script
type=
"text/html"
id=
"memorySetRateTpl"
>
<
div
class
=
"layui-progress-wrap kpiSubDiv"
data
-
resid
=
{{
d
.
resId
}}
data
-
kpiid
=
"KPIC40A80AC"
data
-
name
=
"内存分配率"
data
-
flag
=
"mem"
data
-
warning
=
"0"
data
-
ident
=
"1"
data
-
trend
=
"0"
>
<
div
class
=
"layui-progress layui-progress-big"
lay
-
showpercent
=
"true"
>
<
div
class
=
"layui-progress-bar layui-bg-green {{ d.memorySetRate >= 80 ? 'layui-bg-red' : (d.memorySetRate <= 50 ? '' : 'layui-bg-orange') }}"
lay
-
percent
=
"{{ d.memorySetRate }}%"
style
=
"width: {{ d.memorySetRate }}%;"
>
<
/div
>
<
/div
>
<
span
class
=
"layui-progress-text"
>
{{
(
d
.
memorySetRate
==
null
||
d
.
memorySetRate
==
''
||
d
.
memorySetRate
===
'未知'
||
d
.
memorySetRate
===
'无'
)?
'0%'
:
d
.
memorySetRate
+
'%'
}}
<
/span
>
<
/div
>
</script>
<!--存储分配率-->
<script
type=
"text/html"
id=
"storageSetRateTpl"
>
<
div
class
=
"layui-progress-wrap kpiSubDiv"
data
-
resid
=
{{
d
.
resId
}}
data
-
kpiid
=
"KPI46BAA9BE"
data
-
name
=
"存储分配率"
data
-
flag
=
"storage"
data
-
warning
=
"0"
data
-
ident
=
"1"
data
-
trend
=
"0"
>
<
div
class
=
"layui-progress layui-progress-big"
lay
-
showpercent
=
"true"
>
<
div
class
=
"layui-progress-bar layui-bg-green {{ d.storageSetRate >= 80 ? 'layui-bg-red' : (d.storageSetRate <= 50 ? '' : 'layui-bg-orange') }}"
lay
-
percent
=
"{{ d.storageSetRate }}%"
style
=
"width: {{ d.storageSetRate }}%;"
>
<
/div
>
<
/div
>
<
span
class
=
"layui-progress-text"
>
{{
(
d
.
storageSetRate
==
null
||
d
.
storageSetRate
==
''
||
d
.
storageSetRate
===
'未知'
||
d
.
storageSetRate
===
'无'
)?
'0%'
:
d
.
storageSetRate
+
'%'
}}
<
/span
>
<
/div
>
</script>
<!--连接状态-->
<script
type=
"text/html"
id=
"linkStateTpl"
>
{{
#
var
linkStateHtml
=
''
;
var
linkStateTips
=
'无连接信息'
;
if
(
d
.
linkStateList
&&
d
.
linkStateList
.
length
>=
0
)
{
linkStateTips
=
''
;
if
(
d
.
linkStateList
.
length
==
1
)
{
var
linkState
=
d
.
linkStateList
[
0
];
linkStateTips
=
`
$
{
linkState
.
protocol
}
:
$
{
linkState
.
state
}
`
;
if
(
linkState
.
state
.
indexOf
(
'成功'
)
!==
-
1
)
{
linkStateHtml
=
'<button type="button" class="layui-btn layui-btn-radius layui-bg-green layui-btn-xs p-0-15 cant-click">成功</button>'
;
}
else
{
linkStateHtml
=
`
<
button
type
=
"button"
id
=
"${d.resId}_bizdanger"
data
-
message
=
"${d.message}"
data
-
state
=
"${d.state}"
data
-
id
=
"${d.resId}_bizdanger"
class
=
"layui-btn layui-btn-danger layui-bg-red layui-btn-radius layui-btn-xs p-0-15 cant-click"
>
失败
<
/button>`
;
}
}
else
{
if
(
d
.
linkStateList
.
length
==
0
){
if
(
d
.
hostState
==
'active'
||
d
.
hostState
==
'connected'
||
d
.
hostState
==
'正常'
){
linkStateHtml
=
'<button type="button" class="layui-btn layui-btn-radius layui-bg-green layui-btn-xs p-0-15 cant-click">成功</button>'
;
linkStateTips
+=
`
<
li
class
=
'li-link-state-tips-red'
>
自动发现
:
连接成功
<
/li>`
;
}
else
{
linkStateHtml
=
`
<
button
type
=
"button"
id
=
"${d.resId}_bizdanger"
data
-
message
=
"${d.message}"
data
-
state
=
"${d.state}"
data
-
id
=
"${d.resId}_bizdanger"
class
=
"layui-btn layui-btn-danger layui-bg-red layui-btn-radius layui-btn-xs p-0-15 cant-click"
>
失败
<
/button>`
;
if
(
d
.
hostState
!=
''
){
linkStateTips
+=
`
<
li
class
=
'li-link-state-tips-red'
>
自动发现
:
连接失败
<
/li>`
;
}
else
{
linkStateTips
+=
`
<
li
class
=
'li-link-state-tips-red'
>
ssh
:
连接失败
<
/li>`
;
}
}
}
else
{
linkStateTips
+=
`
<
ul
class
=
'ul-link-state-tips'
>
`
;
layui
.
each
(
d
.
linkStateList
,
function
(
index
,
value
)
{
if
(
value
.
state
.
indexOf
(
'成功'
)
!==
-
1
)
{
linkStateTips
+=
`
<
li
class
=
'li-link-state-tips-green'
>
$
{
value
.
protocol
}
:
$
{
value
.
state
}
<
/li>`
;
linkStateHtml
+=
'<span class="layui-badge-dot layui-bg-green"></span>'
;
}
else
{
linkStateTips
+=
`
<
li
class
=
'li-link-state-tips-red'
>
$
{
value
.
protocol
}
:
$
{
value
.
state
}
<
/li>`
;
linkStateHtml
+=
'<span class="layui-badge-dot layui-bg-red"></span>'
;
}
});
linkStateTips
+=
'</ul>'
;
}
}
}
}}
<
div
class
=
"div-link-state-list"
lay
-
tips
=
"{{linkStateTips}}"
>
{{
linkStateHtml
}}
<
/div
>
</script>
<!--详情页面连接状态-->
<script
type=
"text/html"
id=
"linkStateDetailTpl"
>
{{
#
var
linkStateHtml
=
''
;
var
linkStateTips
=
'无连接信息'
;
if
(
d
.
linkStateList
&&
d
.
linkStateList
.
length
)
{
linkStateTips
=
''
;
if
(
d
.
linkStateList
.
length
==
1
)
{
var
linkState
=
d
.
linkStateList
[
0
];
linkStateTips
=
`
$
{
linkState
.
protocol
}
:
$
{
linkState
.
state
}
`
;
if
(
linkState
.
state
.
indexOf
(
'成功'
)
!==
-
1
)
{
linkStateHtml
=
`
<
span
class
=
"span-green"
>
$
{
linkState
.
state
}
<
/span>`
;
}
else
{
linkStateHtml
=
`
<
span
class
=
"span-red"
>
$
{
linkState
.
state
}
<
/span>`
;
}
}
else
{
linkStateTips
+=
`
<
ul
class
=
'ul-link-state-tips'
>
`
;
layui
.
each
(
d
.
linkStateList
,
function
(
index
,
value
)
{
if
(
value
.
state
.
indexOf
(
'成功'
)
!==
-
1
)
{
linkStateTips
+=
`
<
li
class
=
'li-link-state-tips-green'
>
$
{
value
.
protocol
}
:
$
{
value
.
state
}
<
/li>`
;
linkStateHtml
+=
'<div class="layui-badge-dot layui-bg-green"></div>'
;
}
else
{
linkStateTips
+=
`
<
li
class
=
'li-link-state-tips-red'
>
$
{
value
.
protocol
}
:
$
{
value
.
state
}
<
/li>`
;
linkStateHtml
+=
'<div class="layui-badge-dot layui-bg-red"></div>'
;
}
});
linkStateTips
+=
'</ul>'
;
}
}
}}
<
div
class
=
"div-link-state-list"
lay
-
tips
=
"{{linkStateTips}}"
>
{{
linkStateHtml
}}
<
/div
>
</script>
<!--电源状态-->
<script
type=
"text/html"
id=
"powerStateTpl"
>
{{
#
if
(
d
.
powerState
!=
null
&&
d
.
powerState
==
'poweredOn'
){
}}
<
button
type
=
"button"
class
=
"layui-btn layui-btn-radius layui-bg-green layui-btn-xs p-0-15 cant-click"
>
开机
<
/button
>
{{
#
}
else
if
(
d
.
powerState
!=
null
&&
d
.
powerState
==
'poweredOff'
){
}}
<
button
type
=
"button"
class
=
"layui-btn layui-bg-red layui-btn-radius layui-btn-xs p-0-15 cant-click"
>
关机
<
/button
>
{{
#
}
else
if
(
d
.
powerState
!=
null
&&
d
.
powerState
==
'standBy'
){
}}
<
button
type
=
"button"
class
=
"layui-btn layui-bg-orange layui-btn-radius layui-btn-xs p-0-15 cant-click"
>
待机
<
/button
>
{{
#
}
else
if
(
d
.
powerState
!=
null
&&
d
.
powerState
==
'unknown'
){
}}
<
button
type
=
"button"
class
=
"layui-btn layui-bg-gray layui-btn-radius layui-btn-xs p-0-15 cant-click"
>
未知
<
/button
>
{{
#
}
else
{
}}
<
button
type
=
"button"
class
=
"layui-btn layui-btn-radius layui-bg-gray layui-btn-xs p-0-15 cant-click"
>
{{
'未监控'
}}
<
/button
>
{{
#
}}}
</script>
<!--健康状态-->
<script
type=
"text/html"
id=
"healthTpl"
>
{{
#
if
(
d
.
state
!=
'new'
){
}}
{{
#
if
(
d
.
health
===
'1'
){
}}
<
button
type
=
"button"
class
=
"layui-btn layui-btn-danger layui-bg-red layui-btn-radius layui-btn-xs p-0-15 cant-click"
>
中
<
/button
>
{{
#
}
}}
{{
#
if
(
d
.
health
===
'2'
){
}}
<
button
type
=
"button"
class
=
"layui-btn layui-btn-warm layui-bg-orange layui-btn-radius layui-btn-xs p-0-15 cant-click"
>
良
<
/button
>
{{
#
}
}}
{{
#
if
(
d
.
health
===
'3'
){
}}
<
button
type
=
"button"
class
=
"layui-btn layui-btn-radius layui-bg-green layui-btn-xs p-0-15 cant-click"
>
优
<
/button
>
{{
#
}
}}
{{
#
}
}}
</script>
<!--主机状态-->
<script
type=
"text/html"
id=
"hostStateTpl"
>
{{
#
if
(
d
.
hostState
!=
null
&&
d
.
hostState
==
'connected'
){
}}
<
button
type
=
"button"
class
=
"layui-btn layui-btn-radius layui-bg-green layui-btn-xs p-0-15 cant-click"
>
已连接
<
/button
>
{{
#
}
else
if
(
d
.
hostState
!=
null
&&
d
.
hostState
==
'notResponding'
){
}}
<
button
type
=
"button"
class
=
"layui-btn layui-bg-orange layui-btn-radius layui-btn-xs p-0-15 cant-click"
>
未响应
<
/button
>
{{
#
}
else
if
(
d
.
hostState
!=
null
&&
d
.
hostState
==
'disconnected'
){
}}
<
button
type
=
"button"
class
=
"layui-btn layui-bg-red layui-btn-radius layui-btn-xs p-0-15 cant-click"
>
断开连接
<
/button
>
{{
#
}
else
if
(
d
.
hostState
!=
null
&&
d
.
hostState
==
'正常'
){
}}
<
button
type
=
"button"
class
=
"layui-btn layui-bg-green layui-btn-radius layui-btn-xs p-0-15 cant-click"
>
正常
<
/button
>
{{
#
}
else
{
}}
<
button
type
=
"button"
class
=
"layui-btn layui-btn-radius layui-bg-gray layui-btn-xs p-0-15 cant-click"
>
{{
'未监控'
}}
<
/button
>
{{
#
}}}
</script>
<!--ping状态-->
<script
type=
"text/html"
id=
"pingStatusTpl"
>
{{
#
if
(
d
.
pingStatus
===
'正常'
){
}}
<
button
type
=
"button"
class
=
"layui-btn layui-btn-danger layui-bg-green layui-btn-radius layui-btn-xs p-0-15"
>
正常
<
/button
>
{{
#
}
else
{
}}
<
button
type
=
"button"
class
=
"layui-btn layui-btn-radius layui-bg-red layui-btn-xs p-0-15"
>
异常
<
/button
>
{{
#
}
}}
</script>
<!--资源状态-->
<script
type=
"text/html"
id=
"resStateTpl"
>
{{
#
switch
(
d
.
state
)
{
case
"new"
:
}}
<
button
type
=
"button"
class
=
"layui-btn layui-btn-warm layui-bg-blue layui-btn-radius layui-btn-xs p-0-15 cant-click"
>
未监控
<
/button> {{
#
break
;
case
"monitor"
:
}}
<
button
type
=
"button"
class
=
"layui-btn layui-btn-warm layui-bg-green layui-btn-radius layui-btn-xs p-0-15 cant-click"
>
监控中
<
/button> {{
#
break
;
case
"stop"
:
}}
<
button
type
=
"button"
class
=
"layui-btn layui-btn-warm layui-bg-red layui-btn-radius layui-btn-xs p-0-15 cant-click"
>
暂停监控
<
/button> {{
#
break
;
case
"alarmIgnore"
:
}}
<
button
type
=
"button"
class
=
"layui-btn layui-btn-warm layui-bg-orange layui-btn-radius layui-btn-xs p-0-15 cant-click"
>
告警压制中
<
/button> {{
#
break
;
}
}}
</script>
<!--判断树结构有无子节点-->
<script
type=
"text/html"
id=
"bizResNameTpl"
>
<
div
>
{{
#
if
(
d
.
resType
==
'MIDDLEWARE_WEBLOGIC'
&&
(
d
.
parentId
==
null
||
d
.
parentId
==
''
)
){
}}
<
span
data
-
childrennum
=
"{{d.childrenNum}}"
>
{{
d
.
resName
}}
<
/span
>
{{
#
}
else
{
}}
<
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
>
{{
#
}
}}
{{
#
if
(
d
.
favId
==
null
)
{
}}
<
a
class
=
"layui-icon layui-icon-rate hide"
data
-
favid
=
"{{d.favId}}"
data
-
id
=
"{{d.resId}}"
lay
-
tips
=
"加入收藏夹"
style
=
"font-size: 14px"
><
/a
>
{{
#
}
else
{
}}
<
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
>
{{
#
}
}}
<
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"
>&
#
XE515
;
<
/i></
a
>
<
/div
>
</script>
<!--表空间使用率(最大)-->
<script
type=
"text/html"
id=
"tableSpaceUseRateTpl"
>
<
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"
data
-
warning
=
"0"
data
-
ident
=
"1"
data
-
trend
=
"0"
data
-
flag
=
"tps"
>
<
div
class
=
"layui-progress layui-progress-big"
lay
-
showpercent
=
"true"
>
<
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
>
<
div
class
=
"layui-progress-bar layui-bg-green {{ d.tableSpaceUseRate >= 80 ? 'layui-bg-red' : (d.tableSpaceUseRate <= 50 ? '' : 'layui-bg-orange') }}"
lay
-
percent
=
"{{ d.tableSpaceUseRate }}%"
style
=
"width: {{ d.tableSpaceUseRate }}%;"
>
<
/div
>
<
/div
>
<
span
class
=
"layui-progress-text"
>
{{
(
d
.
tableSpaceUseRate
==
null
||
d
.
tableSpaceUseRate
==
''
||
d
.
tableSpaceUseRate
===
'未知'
||
d
.
tableSpaceUseRate
===
'无'
)?
'0%'
:
d
.
tableSpaceUseRate
+
'%'
}}
<
/span
>
<
/div
>
</script>
<!--ASM磁盘空间使用率-->
<script
type=
"text/html"
id=
"asmDiskUsedRateTpl"
>
<
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"
data
-
warning
=
"0"
data
-
ident
=
"1"
data
-
trend
=
"0"
data
-
flag
=
"asm"
>
<
div
class
=
"layui-progress layui-progress-big"
lay
-
showpercent
=
"true"
>
<
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
>
<
div
class
=
"layui-progress-bar layui-bg-green {{ d.asmDiskUsedRate >= 80 ? 'layui-bg-red' : (d.asmDiskUsedRate <= 50 ? '' : 'layui-bg-orange') }}"
lay
-
percent
=
"{{ d.asmDiskUsedRate }}%"
style
=
"width: {{ d.asmDiskUsedRate }}%;"
>
<
/div
>
<
/div
>
<
span
class
=
"layui-progress-text"
>
{{
(
d
.
asmDiskUsedRate
==
null
||
d
.
asmDiskUsedRate
==
''
||
d
.
asmDiskUsedRate
===
'未知'
||
d
.
asmDiskUsedRate
===
'无'
)?
'0%'
:
d
.
asmDiskUsedRate
+
'%'
}}
<
/span
>
<
/div
>
</script>
<!--weblogic定制表头-->
<script
type=
"text/html"
id=
"webLogicResNameTpl"
>
<
div
>
{{
#
if
(
d
.
resType
==
'MIDDLEWARE_WEBLOGIC'
&&
(
d
.
parentId
==
null
||
d
.
parentId
==
''
)
){
}}
<
span
data
-
childrennum
=
"{{d.childrenNum}}"
>
{{
d
.
resName
}}
<
/span
>
{{
#
}
else
{
}}
<
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
>
{{
#
}
}}
{{
#
if
(
d
.
favId
==
null
)
{
}}
<
a
class
=
"layui-icon layui-icon-rate hide"
data
-
favid
=
"{{d.favId}}"
data
-
id
=
"{{d.resId}}"
lay
-
tips
=
"加入收藏夹"
style
=
"font-size: 14px"
><
/a
>
{{
#
}
else
{
}}
<
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
>
{{
#
}
}}
<
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"
>&
#
XE515
;
<
/i></
a
>
<
/div
>
</script>
<!--资源池状态-->
<script
type=
"text/html"
id=
"clusterStateTpl"
>
{{
#
if
(
d
.
clusterState
===
'正常'
){
}}
<
button
type
=
"button"
class
=
"layui-btn layui-btn-danger layui-bg-green layui-btn-radius layui-btn-xs p-0-15"
>
正常
<
/button
>
{{
#
}
else
{
}}
<
button
type
=
"button"
class
=
"layui-btn layui-btn-radius layui-bg-red layui-btn-xs p-0-15"
>
异常
<
/button
>
{{
#
}
}}
</script>
<!--运行状态-->
<script
type=
"text/html"
id=
"runStateTpl"
>
{{
#
if
(
d
.
runState
===
'正常'
){
}}
<
button
type
=
"button"
class
=
"layui-btn layui-btn-danger layui-bg-green layui-btn-radius layui-btn-xs p-0-15"
>
正常
<
/button
>
{{
#
}
else
{
if
(
d
.
runState
===
'运行中'
){
}}
<
button
type
=
"button"
class
=
"layui-btn layui-btn-danger layui-bg-green layui-btn-radius layui-btn-xs p-0-15"
>
运行中
<
/button
>
{{
#
}
else
{
}}
<
button
type
=
"button"
class
=
"layui-btn layui-btn-radius layui-bg-red layui-btn-xs p-0-15"
>
异常
<
/button
>
{{
#
}
}}
{{
#
}
}}
</script>
<script
type=
"text/html"
id=
"weblogicIpTpl"
>
<
div
>
{{
d
.
ip
?
d
.
ip
:
""
}}
<
/div
>
</script>
<script
type=
"text/html"
id=
"weblogicListenAddrTpl"
>
<
div
>
{{
d
.
listenAddr
?
d
.
listenAddr
:
""
}}
<
/div
>
</script>
<!--cup核心数-->
<script
type=
"text/html"
id=
"cpuCoresTpl"
>
<
div
>
{{
d
.
cpuCores
?(
d
.
cpuCores
+
"核"
):
""
}}
<
/div
>
</script>
<!--cup个数-->
<script
type=
"text/html"
id=
"cpuNumTpl"
>
<
div
>
{{
d
.
cpuNum
?(
d
.
cpuNum
+
"个"
):
""
}}
<
/div
>
</script>
...
...
hg-monitor-web-qh/src/main/resources/static/src/views/template/user/accountSet.html
0 → 100644
View file @
298076c
<div
class=
"layadmin-user-login layadmin-user-display-show setting"
>
<div
class=
"layadmin-user-login-main"
>
<div
class=
"layadmin-user-login-box layadmin-user-login-body layui-form"
>
<div
class=
"layui-form-item hide"
>
<label
class=
"layadmin-user-login-icon layui-icon layui-icon-password"
></label>
<input
type=
"text"
name=
"username"
lay-verify=
"required"
placeholder=
"监控账号"
class=
"layui-input"
>
</div>
<div
class=
"layui-form-item"
>
<div
class=
""
>
<select
id=
"refSystem"
name=
"refSystem"
lay-filter=
"refSystem"
lay-verify=
"required"
class=
"layui-select layui-input"
></select>
</div>
</div>
<div
class=
"layui-form-item"
>
<label
class=
"layadmin-user-login-icon"
></label>
<input
type=
"text"
name=
"account"
lay-verify=
"required"
placeholder=
"系统账号"
class=
"layui-input"
>
</div>
<div
class=
"layui-form-item"
>
<label
class=
"layadmin-user-login-icon"
></label>
<input
type=
"password"
name=
"password"
lay-verify=
"required"
placeholder=
"系统密码"
class=
"layui-input"
>
</div>
<div
class=
"layui-form-item"
>
<div
class=
"setting-btn"
>
<button
class=
"layui-btn"
id=
"setCommit"
lay-submit
lay-filter=
"setAccount"
>
保存
</button>
<button
class=
"layui-btn layui-btn-primary"
id=
"setClose"
>
取消
</button>
</div>
</div>
</div>
</div>
</div>
<script>
layui
.
use
([
'admin'
,
'form'
,
'common'
,
'sessions'
],
function
()
{
var
$
=
layui
.
$
;
var
admin
=
layui
.
admin
;
var
form
=
layui
.
form
;
var
common
=
layui
.
common
;
var
sessions
=
layui
.
sessions
;
var
accessToken
=
sessions
.
getToken
().
access_token
;
form
.
render
();
//填充用户监控账号
var
username
=
localStorage
.
getItem
(
"lgn"
);
$
(
'input[name="username"]'
).
val
(
username
);
//第三方系统下拉框切换事件监听
form
.
on
(
'select(refSystem)'
,
function
(
data
){
if
(
data
.
value
!=
''
){
getOldAccountAndPwd
(
username
,
data
.
value
);
}
});
//第三方系统下拉框数据填充
common
.
ddicSelect
(
'refSystem'
,
'systems'
,
function
(
datalist
)
{
if
(
datalist
.
length
==
1
){
$
(
'#refSystem'
).
val
(
datalist
[
0
].
ddicCode
);
getOldAccountAndPwd
(
username
,
datalist
[
0
].
ddicCode
);
}
form
.
render
(
'select'
);
});
$
(
'#setClose'
).
on
(
'click'
,
function
()
{
layer
.
closeAll
();
});
//保存点击事件
form
.
on
(
'submit(setAccount)'
,
function
(
obj
)
{
var
userRefSystem
=
{};
//修改密码
userRefSystem
.
username
=
$
(
'input[name="username"]'
).
val
();
userRefSystem
.
refSystem
=
$
(
'#refSystem'
).
val
();
userRefSystem
.
account
=
$
(
'input[name="account"]'
).
val
();
userRefSystem
.
password
=
$
(
'input[name="password"]'
).
val
();
saveOrUpdate
(
userRefSystem
);
});
//增加或更细第三方账号关联信息
function
saveOrUpdate
(
data
)
{
admin
.
req
({
url
:
common
.
domainName
+
'/api-web/userRefSystem/saveOrUpdate?access_token='
+
accessToken
,
type
:
"POST"
,
dataType
:
"json"
,
contentType
:
'application/json; charset=utf-8'
,
data
:
JSON
.
stringify
(
data
),
success
:
function
(
res
)
{
if
(
res
){
var
icon
=
7
;
if
(
res
.
success
){
icon
=
1
;
}
layer
.
msg
(
res
.
msg
,
{
offset
:
'15px'
,
icon
:
icon
,
time
:
1000
},
function
(){
if
(
res
.
success
){
layer
.
closeAll
();
}
});
}
}
})
}
//根据监控账号及第三方系统,查找关联信息
function
getOldAccountAndPwd
(
username
,
refSystem
)
{
admin
.
req
({
url
:
common
.
domainName
+
'/api-web/userRefSystem/getByUsernameAndSystem'
,
type
:
"GET"
,
dataType
:
"json"
,
data
:{
username
:
username
,
refSystem
:
refSystem
},
success
:
function
(
res
)
{
if
(
res
&&
res
.
success
){
if
(
res
.
object
){
//如果有绑定
$
(
'#resSystem'
).
val
(
res
.
object
.
refSystem
);
$
(
'input[name="account"]'
).
val
(
res
.
object
.
account
);
$
(
'input[name="password"]'
).
val
(
common
.
Base64
.
decode
(
res
.
object
.
password
));
}
else
{
//如果未绑定
$
(
'input[name="account"]'
).
val
(
localStorage
.
getItem
(
"lgn"
));
}
}
form
.
render
();
},
error
:
function
()
{
layer
.
msg
(
'获取第三方账号异常'
,
{
offset
:
'15px'
,
icon
:
1
,
time
:
1000
},
function
(){
});
}
})
}
});
</script>
...
...
pom.xml
View file @
298076c
...
...
@@ -21,6 +21,7 @@
<module>
hg-monitor-web-tj
</module>
<module>
hg-monitor-web-zj
</module>
<module>
hg-monitor-web-nx
</module>
<module>
hg-monitor-web-qh
</module>
</modules>
<properties>
<java.version>
1.8
</java.version>
...
...
Please
register
or
login
to post a comment