Authored by xwx

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

…eb into master-500-dev-xwx
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
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-nx</artifactId>
<version>5.4.0</version>
<name>hg-monitor-web-nx</name>
<description>宁夏个性化版本</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>com.honggroup</groupId>
<artifactId>hg-monitor-web-base</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<finalName>nxweb-${version}.${timestamp}</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/**</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.4</version>
<configuration>
<timestampFormat>yyyyMMdd</timestampFormat>
</configuration>
<executions>
<execution>
<goals>
<goal>create-timestamp</goal>
</goals>
</execution>
</executions>
<inherited>false</inherited>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
package com.web;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class HGMonitorNXWebApplication {
public static void main(String[] args) {
SpringApplication.run(HGMonitorNXWebApplication.class, args);
}
}
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:8080
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
/**
@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'), // 拓扑系统地址
ajScreenStatement: sessionStorage.getItem('ajWeb'), //aj系统地址
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/manage/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/manage/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/menus/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/manage/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">&#xe633;</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});
}
});
},
viewAjView: function (reportCode, height, width) {
layer.load(2);
admin.req({
url: obj.domainName + '/api-web/ajConfig/findOneById',
data: {id: reportCode},
success(response) {
layer.closeAll('loading');
if (response && response.success) {
layer.open({
type: 2,
content: obj.ajScreenStatement + "/#/bigscreen/viewer?reportCode=" + response.object.designPage + response.object.param + "&access_token=" + localStorage.getItem('access_token'),
area: [height, width],
title: response.object.title
});
} else {
layer.open({
type: 2,
content: obj.ajScreenStatement + "/#/bigscreen/viewer?reportCode=" + reportCode + "&access_token=" + localStorage.getItem('access_token'),
area: [height, width],
title: ''
});
layer.closeAll('loading');
}
}
});
},
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");
if (code) {
var isHttp = function (str) {
var RegUrl = new RegExp();
RegUrl.compile("^http|https+://[A-Za-z0-9-_]+\\.[A-Za-z0-9-_%&\?\/.=]+$");
if (!RegUrl.test(str)) {
return false;
}
return true;
}
if (isHttp(code)) {
var accessToken = '';
layui.use(['sessions', 'common'], function () {
var sessions = layui.sessions;
accessToken = sessions.getToken()['access_token'];
});
window.open(`${code}?access_token=${accessToken}`);
}
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);
});
<!--默认布局-->
<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 lay-url="{{sessionStorage.getItem('domainName')}}/api-user/users/checkHasRole?roleCode=daping"
template
type="text/html">
{{# 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 lay-url="{{sessionStorage.getItem('domainName')}}/api-web/sxview/getbizListByUser?access_token={{localStorage.getItem('access_token')}}"
template
type="text/html">
{{# 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 class="logo" src="/src/style/img/logo.png">
<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>
<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" id="systems-select" lay-unselect>
<script lay-done="layui.element.render('nav', 'layadmin-systems');"
lay-url="{{sessionStorage.getItem('domainName')}}/api-web/thirdParty/getList"
template
type="text/html">
<a href="javascript:;" title="第三方系统">
<span class="layui-icon layui-icon-slider"></span>
</a>
<dl class="layui-nav-child">
{{# if(d.data && d.data.length == 0){ }}
{{# var sysObj = document.querySelector('#systems-select'); }}
{{# sysObj != null ? sysObj.remove() :''; }}
{{# } }}
{{# layui.each(d.data, function(index, item){ }}
<dd style="text-align: left;" lay-filter="layadmin-systems">
<a href="javascript:;" layadmin-event="openOtherSystem" data-code="{{item.detail}}"
title="{{item.name}}">
<i class="iconfont icon-tree {{ item.name }}"/>&nbsp;&nbsp;{{ item.name }}
</a>
</dd>
{{# }); }}
</dl>
</script>
</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 lay-url="{{sessionStorage.getItem('domainName')}}/api-web/home/messageRemind" template
type="text/html">
<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 lay-done="layui.element.render('nav', 'layadmin-layout-right');"
lay-url="{{sessionStorage.getItem('domainName')}}/api-user/users/getUserByToken"
template
type="text/html">
<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;" >欢迎&nbsp;&nbsp;<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 id="TPL_layout" lay-done="layui.element.render('nav', 'layadmin-system-side-menu');"
lay-url="{{sessionStorage.getItem('domainName')}}/api-user/menus/current?type=1"
template type="text/html">
{{#
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" lay-href-type="menu">
<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 +'"' }}
lay-href-type="menu">{{ item2.name }}</a>
{{# }else{ }}
<a href="javascript:;" {{ hasChildren2 ? '' : 'data-url="'+ url2 +'"
layadmin-event="IntegratedEntrance"' }} data-moduleid="{{item2.moduleid}}"
lay-href-type="menu">{{ 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"' : ''}} lay-href-type="menu">{{ item3.name }}</a>
{{# }else{ }}
<a href="javascript:;" data-url="{{ url3 }}" layadmin-event="IntegratedEntrance"
data-moduleid="{{item3.moduleid}}" lay-href-type="menu">{{ item3.name }}</a>
{{# } }}
</dd>
{{# }); }}
</dl>
{{# } }}
</dd>
{{# }); }}
</dl>
{{# } }}
</li>
{{# }); }}
</ul>
</script>
</div>
<div class="right-bottom-tips"></div>
</div>
<!-- 页面标签 -->
<script lay-done="layui.element.render('nav', 'layadmin-pagetabs-nav')"
lay-url="{{sessionStorage.getItem('domainName')}}/api-user/menus/findSettingDefaultMenus"
template
type="text/html">
<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 id="warnViewWinTpl" type="text/html">
<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 id="detailPageLeftPanel" type="text/html">
<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 id="detailKpiTableTpl" type="text/html">
<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 id="cronHtml" type="text/html">
<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>&nbsp;表示每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>&nbsp;表示每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>&nbsp;表示在每月的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>&nbsp;</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 ? 6L 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>&nbsp;</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>&nbsp;</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:102: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>&nbsp;</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>&nbsp;</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>&nbsp;</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 ? * 6L</span>&nbsp;</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 ? * 6L 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 id="resindex_resName" type="text/html">
<!-- 更改单元格溢出时的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="查看资源拓扑"></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 id="fileUseRateTpl" type="text/html">
<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 id="cpuRateTpl" type="text/html">
<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 id="memoryRateTpl" type="text/html">
<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 id="vmmemoryRateTpl" type="text/html">
<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 id="sessionRateTpl" type="text/html">
<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 id="cpuSetRateTpl" type="text/html">
<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 id="memorySetRateTpl" type="text/html">
<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 id="storageSetRateTpl" type="text/html">
<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 id="linkStateTpl" type="text/html">
{{#
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 id="linkStateDetailTpl" type="text/html">
{{#
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 id="powerStateTpl" type="text/html">
{{# 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 id="healthTpl" type="text/html">
{{# 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 id="hostStateTpl" type="text/html">
{{# 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 id="pingStatusTpl" type="text/html">
{{# 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 id="resStateTpl" type="text/html">
{{#
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 id="bizResNameTpl" type="text/html">
<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 id="tableSpaceUseRateTpl" type="text/html">
<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 id="asmDiskUsedRateTpl" type="text/html">
<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 id="webLogicResNameTpl" type="text/html">
<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 id="clusterStateTpl" type="text/html">
{{# 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 id="runStateTpl" type="text/html">
{{# 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 id="weblogicIpTpl" type="text/html">
<div>{{d.ip?d.ip:""}}</div>
</script>
<script id="weblogicListenAddrTpl" type="text/html">
<div>{{d.listenAddr?d.listenAddr:""}}</div>
</script>
<!--cup核心数-->
<script id="cpuCoresTpl" type="text/html">
<div>{{d.cpuCores?(d.cpuCores+"核"):""}}</div>
</script>
<!--cup个数-->
<script id="cpuNumTpl" type="text/html">
<div>{{d.cpuNum?(d.cpuNum+"个"):""}}</div>
</script>
<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 class="layui-input" lay-verify="required" name="username" placeholder="监控账号" type="text">
</div>
<div class="layui-form-item">
<div class="">
<select class="layui-select layui-input" id="refSystem" lay-filter="refSystem" lay-verify="required"
name="refSystem"></select>
</div>
</div>
<div class="layui-form-item">
<label class="layadmin-user-login-icon"></label>
<input class="layui-input" lay-verify="required" name="account" placeholder="系统账号" type="text">
</div>
<div class="layui-form-item">
<label class="layadmin-user-login-icon"></label>
<input class="layui-input" lay-verify="required" name="password" placeholder="系统密码" type="password">
</div>
<div class="layui-form-item">
<div class="setting-btn">
<button class="layui-btn" id="setCommit" lay-filter="setAccount" lay-submit>保存</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>
... ... @@ -311,7 +311,7 @@
lay-href-type="menu">{{ item2.name }}</a>
{{# }else{ }}
<a href="javascript:;" {{ hasChildren2 ? '' : 'data-url="'+ url2 +'"
layadmin-event="IntegratedEntrance"' }} data-moduleid="{{item2.moduleid}}"
layadmin-event="IntegratedEntrance"' }} data-moduleid="{{item2.moduleid}}" lay-href="{{url2}}"
lay-href-type="menu">{{ item2.name }}</a>
{{# } }}
{{# if(hasChildren2){ }}
... ... @@ -330,7 +330,7 @@
<a href="javascript:;" lay-href="{{ url3 }}" {{ item3.iframe ?
'lay-iframe="true"' : ''}} lay-href-type="menu">{{ item3.name }}</a>
{{# }else{ }}
<a href="javascript:;" data-url="{{ url3 }}" layadmin-event="IntegratedEntrance"
<a href="javascript:;" data-url="{{ url3 }}" lay-href="{{ url3 }}" layadmin-event="IntegratedEntrance"
data-moduleid="{{item3.moduleid}}" lay-href-type="menu">{{ item3.name }}</a>
{{# } }}
</dd>
... ...