Authored by 王涛

监控项目初始化 20210929

Showing 24 changed files with 3986 additions and 3 deletions

Too many changes to show.

To preserve performance only 24 of 24+ files are displayed.

HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
... ...
hg-monitor-web-base 基于天津现有功能作为基类
hg-monitor-web-new 最新开发版本
>>hg-monitor-web-base 基于天津现有功能作为基类
>>hg-monitor-web-new 最新开发版本
hg-monitor-web-tj 天津10月后的个性化开发
注意事项 版本开发,天津版本的开发可在base中修改,然后将代码复制到hg-monitor-web-tj代码中
\ No newline at end of file
注意事项 版本开发,天津版本的开发可在base中修改,然后将代码复制到hg-monitor-web-tj代码中
W
... ...
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.honggroup</groupId>
<artifactId>hg-monitor-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.honggroup</groupId>
<artifactId>hg-monitor-web-base</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>hg-monitor-web-base</name>
<description>hg-monitor-web-base</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
... ...
package com.web.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class IndexConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("forward:/start/index.html");
registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
}
}
... ...
package com.web.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.AbstractEnvironment;
import org.springframework.core.env.EnumerablePropertySource;
import org.springframework.core.env.Environment;
import org.springframework.core.env.PropertySource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
@RestController
@RequestMapping("/config")
public class ConfigController {
@Autowired
Environment env;
@RequestMapping("/getConfig")
public ResponseEntity getConfig(String configName) {
Map<String, Object> configMap = new HashMap<>();
for (PropertySource<?> source : ((AbstractEnvironment) env).getPropertySources()) {
// 遍历每个配置来源中的配置项
if (source instanceof EnumerablePropertySource) {
for (String name : ((EnumerablePropertySource) source).getPropertyNames()) {
if (name.startsWith(configName)) {
String itemName = name.substring(configName.length() + 1);
configToMap(configMap, name, itemName);
}
}
}
}
return ResponseEntity.ok(configMap);
}
private void configToMap(Map<String, Object> configMap, String configName, String itemName) {
if (itemName.contains(".")) {
Map<String, Object> currMap = configMap;
String[] split = itemName.split("\\.");
currMap = (Map) currMap.computeIfAbsent(split[0], map -> new HashMap<>());
String childName = itemName.substring(split[0].length() + 1);
configToMap(currMap, configName, childName);
} else if (Pattern.compile("\\[\\d+]").matcher(itemName).find()) {
List l = (List) configMap.computeIfAbsent(itemName.replaceAll("\\[\\d+]", ""), map -> new LinkedList<>());
l.add(env.getProperty(configName, Object.class));
} else {
configMap.put(itemName, env.getProperty(configName, Object.class));
}
}
}
... ...
node_modules
.idea
debug.log
dist
.vscode
demo
\ No newline at end of file
... ...
phantomjs_cdnurl=http://cnpmjs.org/downloads
sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
registry=https://registry.npm.taobao.org
\ No newline at end of file
... ...
# 开发帮助
```cmd
# 安装依赖
npm i
# 启动
npm run sw
```
... ...
var express = require('express');
var app = express();
app.use(express.static(__dirname + '/'));
app.use(express.static(__dirname + '/start/'));
app.use(express.static(__dirname + '/demo/start/'));
app.listen(3333);
var c = require('child_process');
c.exec('start http://localhost:3333/start/index.html#/');
c.exec('start http://localhost:3333/demo/start/index.html');
\ No newline at end of file
... ...
## commit message
格式约定:`<type>(<scope>): <subject>` (注意冒号后面有空格)
**scope 可选,写不写都可**
### type
`type` 用于说明 commit 的类别
- **feat / feature**:新增功能
- **fix / fixes / fixed / hotfix**:(热)修复 Bug(s)
- **docs**:修改文档
- **style**:仅仅修改了代码样式(空格、缩进)等,不改变代码逻辑
- **refactor**:代码重构,未新增任何功能和修复任何 Bug
- **perf**: 改善性能和用户体验
- **resolve / resolves / resolved**: 修复代码合并冲突
- **test**:测试用例的修改
- **chore**:构建过程或辅助工具的变动(新增依赖库、工具配置等)
- **revert**: 回滚版本
- **ci**: 自动化流程配置修改
- **release**: 版本发布
- **close / closes / closed**: 关闭 issue(s)
如果 `type` 为 `feat` 和 `fix`,则该 commit 将肯定出现在 Change log 之中。
### scope(可选)
`scope` 用于说明本次提交所影响的功能模块,视项目的不同而不同。
必须将内容包含在 `()` 里,里面的模块以 `,` 隔开,最后一项没有逗号。
### subject
`subject` 是 commit 目的的简短描述,不超过50个字符。
- 以动词开头,使用第一人称现在时,比如 change,而不是 changed 或 changes
- 第一个字母小写
- 结尾不加句号(.)
### 示例
``` bash
~ git commit -m "feat: add a new feature"
```
``` bash
~ git commit -m "fix(nav): 更正参数拼写错误"
```
``` bash
~ git commit -m "docs: update README.md"
```
... ...
/**
layuiAdmin pro 构建
*/
var pkg = require('./package.json');
var inds = pkg.independents;
var gulp = require('gulp');
var uglify = require('gulp-uglify');
var minify = require('gulp-minify-css');
var concat = require('gulp-concat');
var rename = require('gulp-rename');
var replace = require('gulp-replace');
var header = require('gulp-header');
var del = require('del');
var gulpif = require('gulp-if');
var minimist = require('minimist');
var sass = require('gulp-sass');
var autoPreFixer = require('gulp-autoprefixer');
sass.compiler = require('node-sass');
var px2rem = require('gulp-px2rem');
//获取参数
var argv = require('minimist')(process.argv.slice(2), {
default: {
ver: 'all'
}
})
//注释
, note = [
'/** <%= pkg.name %>-v<%= pkg.version %> <%= pkg.license %> License By <%= pkg.homepage %> */\n <%= js %>'
, { pkg: pkg, js: ';' }
]
, destDir = './dist' //构建的目标目录
, releaseDir = '../pack/layuiAdmin.pack/' + pkg.name + '-v' + pkg.version //发行版本目录
//任务
, task = {
//压缩 JS
minjs: function () {
var src = [
'./src/**/*.js'
, '!./src/config.js'
, '!./src/lib/extend/echarts.js'
];
return gulp.src(src).pipe(uglify())
.pipe(header.apply(null, note))
.pipe(gulp.dest(destDir));
}
//压缩 CSS
, mincss: function () {
var src = [
'./src/**/*.css'
]
, noteNew = JSON.parse(JSON.stringify(note));
noteNew[1].js = '';
return gulp.src(src).pipe(minify({
compatibility: 'ie7'
})).pipe(header.apply(null, noteNew))
.pipe(gulp.dest(destDir));
}
//复制文件夹
, mv: function () {
gulp.src('./src/config.js')
.pipe(gulp.dest(destDir));
gulp.src('./src/lib/extend/echarts.js')
.pipe(gulp.dest(destDir + '/lib/extend'));
gulp.src([
'./src/style/**/*',
'!./src/style/css/**/*',
])
.pipe(gulp.dest(destDir + '/style'));
return gulp.src('./src/views/**/*')
.pipe(gulp.dest(destDir + '/views'));
}
};
//清理
gulp.task('clear', function (cb) {
return del(['./dist/*'], cb);
});
gulp.task('clearRelease', function (cb) {
return del(['./json/*', releaseDir], cb);
});
gulp.task('minjs', task.minjs);
gulp.task('mincss', task.mincss);
gulp.task('mv', task.mv);
gulp.task('src', function () { //命令:gulp src
return gulp.src('./dev-pro/**/*')
.pipe(gulp.dest('./src'));
});
//构建核心源文件
gulp.task('default', ['clear', 'src'], function () { //命令:gulp
for (var key in task) {
task[key]();
}
});
//发行 - layuiAdmin 官方使用
gulp.task('release', function () { //命令:gulp && gulp release
//复制核心文件
gulp.src('./dist/**/*')
.pipe(gulp.dest(releaseDir + '/dist'));
gulp.src('./src/**/*')
.pipe(gulp.dest(releaseDir + '/src'));
//复制 json
gulp.src('./dev/json/**/*')
.pipe(gulp.dest('./json'))
.pipe(gulp.dest('./start/json'))
.pipe(gulp.dest(releaseDir + '/start/json'));
//复制并转义宿主页面
gulp.src('./dev/index.html')
.pipe(replace(/\<\!-- clear s --\>([\s\S]*?)\<\!-- clear e --\>/, ''))
.pipe(replace('//local.res.layui.com/layui/src', 'layui'))
.pipe(replace("base: '../dev-pro/'", "base: '../dist/'"))
.pipe(replace('@@version@@', pkg.version))
.pipe(gulp.dest('./start'))
.pipe(gulp.dest(releaseDir + '/start'));
//复制帮助文件
gulp.src([
'./帮助/*'
, '!./帮助/说明.txt'
]).pipe(gulp.dest(releaseDir + '/帮助'));
gulp.src([
'./帮助/说明.txt'
]).pipe(gulp.dest(releaseDir));
//复制 gulpfile
gulp.src([
'gulpfile.js'
, 'package.json'
]).pipe(gulp.dest(releaseDir));
//说明
gulp.src('../pack/说明.txt')
.pipe(gulp.dest('../pack/layuiAdmin.pack'));
//复制 layui
return gulp.src('../../../../res/layui/rc/**/*')
.pipe(gulp.dest('./start/layui'))
.pipe(gulp.dest(releaseDir + '/start/layui'))
});
// 编译sass zx
gulp.task('base', function () {
gulp.src('src/style/css/scss/**/*.scss')
.pipe(sass().on('error', sass.logError))
.pipe(replace('../../../font', '../font'))
.pipe(replace('../../../img', '../img'))
.pipe(replace('../../img', '../img'))
.pipe(autoPreFixer({
overrideBrowserslist: [
'last 2 versions', 'not ie <= 8', 'iOS >= 9', 'Android >= 4.0', 'since 2013'
],
grid: true
}))
// .pipe(px2rem({
// replace: true,
// rootValue: 37.5
// }))
.pipe(concat('main.css'))
.pipe(gulp.dest('src/style/css'));
});
gulp.task('w', function () {
gulp.watch('src/style/css/scss/**/*.scss', ['base']);
});
... ...
This diff could not be displayed because it is too large.
{
"name": "layuiAdmin.pro",
"version": "1.2.1",
"description": "通用后台管理模板系统",
"license": "LPPL",
"author": [
"xianxin <xianxin@layui-inc.com>"
],
"scripts": {
"w": "gulp w",
"s": "node app.js",
"sw": "concurrently \"npm run w\" \"npm run s\""
},
"homepage": "http://www.layui.com/admin/",
"devDependencies": {
"chai": "^4.1.1",
"concurrently": "^4.0.1",
"del": "^2.2.2",
"express": "^4.16.3",
"gulp": "^3.9.1",
"gulp-autoprefixer": "^6.0.0",
"gulp-concat": "^2.6.0 ",
"gulp-header": "^1.8.8",
"gulp-if": "^2.0.1",
"gulp-less": "^4.0.1",
"gulp-minify-css": "^1.2.4",
"gulp-px2rem": "^1.1.1",
"gulp-rename": "^1.2.2",
"gulp-replace": "^0.6.1",
"gulp-sass": "^4.0.2",
"gulp-uglify": "^1.5.4",
"minimist": "^1.2.0",
"mocha": "^3.2.0",
"node-sass": "^4.12.0",
"sinon": "^3.2.1",
"sinon-chai": "^2.13.0"
}
}
... ...
/*!
Math.uuid.js (v1.4)
http://www.broofa.com
mailto:robert@broofa.com
Copyright (c) 2010 Robert Kieffer
Dual licensed under the MIT and GPL licenses.
*/
/*
* Generate a random uuid.
*
* USAGE: Math.uuid(length, radix)
* length - the desired number of characters
* radix - the number of allowable values for each character.
*
* EXAMPLES:
* // No arguments - returns RFC4122, version 4 ID
* >>> Math.uuid()
* "92329D39-6F5C-4520-ABFC-AAB64544E172"
*
* // One argument - returns ID of the specified length
* >>> Math.uuid(15) // 15 character ID (default base=62)
* "VcydxgltxrVZSTV"
*
* // Two arguments - returns ID of the specified length, and radix. (Radix must be <= 62)
* >>> Math.uuid(8, 2) // 8 character ID (base=2)
* "01001010"
* >>> Math.uuid(8, 10) // 8 character ID (base=10)
* "47473046"
* >>> Math.uuid(8, 16) // 8 character ID (base=16)
* "098F4D35"
*/
(function() {
// Private array of chars to use
var CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
Math.uuid = function (len, radix) {
var chars = CHARS, uuid = [], i;
radix = radix || chars.length;
if (len) {
// Compact form
for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random()*radix];
} else {
// rfc4122, version 4 form
var r;
// rfc4122 requires these characters
uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
uuid[14] = '4';
// Fill in random data. At i==19 set the high bits of clock sequence as
// per rfc4122, sec. 4.1.5
for (i = 0; i < 36; i++) {
if (!uuid[i]) {
r = 0 | Math.random()*16;
uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
}
}
}
return uuid.join('');
};
})();
... ...
/**
@Name:全局配置
@Author:贤心
@Site:http://www.layui.com/admin/
@License:LPPL(layui付费产品协议)
*/
layui.define(['laytpl', 'layer', 'element', 'util'], function(exports){
exports('setter', {
container: 'LAY_app' //容器ID
,base: layui.cache.base //记录layuiAdmin文件夹所在路径
,views: layui.cache.base + 'views/' //视图所在目录
,entry: 'index' //默认视图文件名
,engine: '.html' //视图文件后缀名
,pageTabs: true //是否开启页面选项卡功能。单页版不推荐开启
,name: ' '
,tableName: 'layuiAdmin' //本地存储表名
,MOD_NAME: 'admin' //模块事件名
,debug: true //是否开启调试模式。如开启,接口异常时会抛出异常 URL 等信息
,interceptor: true //是否开启未登入拦截
//自定义请求字段
,request: {
tokenName: 'access_token' //自动携带 token 的字段名。可设置 false 不携带。
}
//自定义响应字段
,response: {
statusName: 'code' //数据状态的字段名称
,statusCode: {
ok: 0 //数据状态一切正常的状态码
,logout: 1001 //登录状态失效的状态码
}
,msgName: 'msg' //状态信息的字段名称
,dataName: 'data' //数据详情的字段名称
}
//独立页面路由,可随意添加(无需写参数)
,indPage: [
'/user/login', //登入页
'/page/forward' // 听云访问系统页面
]
//扩展的第三方模块
,extend: [
'lay',
'swiper',
'jtopo',
'echarts',
'treeTable',
'xmSelect',
'formSelects',
'codemirror',
'matchbrackets',
'sockjs',
'stomp',
'inputTags',
'mxClient',
'soulTable',
'tableFilter',
'tableChild',
'tableMerge',
'excel',
'tableEdit',
'tableTree',
'setStep',
'msgTips',
'cron',
'dropMenu',
'shell',
'cascader',
'md5'
]
//主题配置
,theme: {
//内置主题配色方案
color: [{
main: '#20222A' //主题色
,selected: '#009688' //选中色
,alias: 'default' //默认别名
},{
main: '#03152A'
,selected: '#3B91FF'
,alias: 'dark-blue' //藏蓝
},{
main: '#2E241B'
,selected: '#A48566'
,alias: 'coffee' //咖啡
},{
main: '#50314F'
,selected: '#7A4D7B'
,alias: 'purple-red' //紫红
},{
main: '#344058'
,logo: '#1E9FFF'
,selected: '#1E9FFF'
,alias: 'ocean' //海洋
},{
main: '#3A3D49'
,logo: '#2F9688'
,selected: '#5FB878'
,alias: 'green' //墨绿
},{
main: '#20222A'
,logo: '#F78400'
,selected: '#F78400'
,alias: 'red' //橙色
},{
main: '#28333E'
,logo: '#AA3130'
,selected: '#AA3130'
,alias: 'fashion-red' //时尚红
},{
main: '#24262F'
,logo: '#3A3D49'
,selected: '#009688'
,alias: 'classic-black' //经典黑
},{
logo: '#226A62'
,header: '#2F9688'
,alias: 'green-header' //墨绿头
},{
main: '#344058'
,logo: '#0085E8'
,selected: '#1E9FFF'
,header: '#1E9FFF'
,alias: 'ocean-header' //海洋头
},{
header: '#393D49'
,alias: 'classic-black-header' //经典黑
},{
main: '#50314F'
,logo: '#50314F'
,selected: '#7A4D7B'
,header: '#50314F'
,alias: 'purple-red-header' //紫红头
},{
main: '#28333E'
,logo: '#28333E'
,selected: '#AA3130'
,header: '#AA3130'
,alias: 'fashion-red-header' //时尚红头
},{
main: '#28333E'
,logo: '#009688'
,selected: '#009688'
,header: '#009688'
,alias: 'green-header' //墨绿头
}]
//初始的颜色索引,对应上面的配色方案数组索引
//如果本地已经有主题色记录,则以本地记录为优先,除非请求本地数据(localStorage)
,initColorIndex: 1
}
});
});
... ...
/**
* @desc 共享存储
* @author yh
* @date 2021/4/23 14:03
**/
layui.define(['commonDetail','common'], function (exports) {
var commonDetail = layui.commonDetail;
var common = layui.common;
//对外暴露的接口
exports('a_cloud_physicshost', function (data) {
var resId = '';
var resType = '';
var showFlag = common.getUrlParam("show");
if(showFlag && showFlag == '0'){
resId = common.getUrlParam("resId");
resType = common.getUrlParam("resType");
}else{
resId = data.resId;
resType = data.resType;
}
//基本信息
var jbxxKpi = "KPIE13DD9A3,KPI72E7FB4B,KPIF74D9D2B,KPI1635BB9B";
//文件系统信息
var filesystemkpi = "KPI7AC1664E,KPI449F5365,KPIA91F44E7,KPI98306224,KPIE25925F7";
//网络接口信息
var interfacekpi = "KPIFABFD741,KPI73C0F7E7,KPIFA92AF2D";
//存储信息
var storagekpi = "KPIFB844B8B,KPI5E148DBE,KPIE55684DF,KPIDBFA1EE2";
reload();
//渲染页面
function reload() {
commonDetail.renderText("a_cloud_physicshost_baseinfo",resId,jbxxKpi);
//cpu使用率
// commonDetail.renderGauge("a_cloud_physicshost_cpurate",resId,"KPI7054BC34",true);
commonDetail.renderLineCharat("a_cloud_physicshost_cpurate",resId,"KPI7054BC34","CPU使用率","cpu");
//内存使用率
// commonDetail.renderGauge("a_cloud_physicshost_memeryrate",resId,"KPI31CB8D97",true);
commonDetail.renderLineCharat("a_cloud_physicshost_memeryrate",resId,"KPI31CB8D97","内存使用率","mem");
//文件系统信息
commonDetail.renderTable("a_cloud_physicshost_filesystem",false,resId,filesystemkpi,'文件系统信息','filesystem-');
//网络接口信息
commonDetail.renderTable("a_cloud_physicshost_interface",false,resId,interfacekpi,'网络接口信息','interface-');
//存储信息
commonDetail.renderTable("a_cloud_physicshost_storage",false,resId,storagekpi,'设备主机信息','storage-');
//活动告警
commonDetail.renderActiveAlarms("a_cloud_physicshost_alarms",resId);
}
//定时任务
var timer = setInterval(function () {
reload()
},commonDetail.timerTime);
commonDetail.detailTimer.push(timer);
});
});
\ No newline at end of file
... ...
/** 关于系统*/
layui.define([ 'table', 'form', 'admin', 'common','sessions','upload'], function (exports) {
var $ = layui.$;
var form = layui.form;
var tree = layui.tree;
var table = layui.table;
var admin = layui.admin;
var common = layui.common;
var upload = layui.upload;
//对外暴露的接口
exports('aboutSystemIndex', function () {
var sessions = layui.sessions;
var accessToken = sessions.getToken().access_token;
form.render(null, 'aboutSystem-form');
var documentTable = '';
var nodeId = 'id_gf_sysc';
//加载文档表格数据
renderDocumentTable();
//检索事件
serachEvent();
//上传操作
$("#doc_upload").on("click",function () {
var $content = $("#doc-upload-form");
//打开选择文件弹框
layer.open({
type: 1
,title: "选择文件" //不显示标题栏
,closeBtn: false
,area: ['500px', '300px']
,shade: 0.8
,id: 'doc-upload-form-id' //设定一个id,防止重复弹出
,btn: ['上传', '取消']
,content: $content.html()
,yes: function(index, layero){
if($("#doc-display-file-name").val()){
//点击上传按钮
$("#doc-upload-actionbtn").trigger("click");
}else{
layer.msg('请选择要上传的文件!', {
icon: 7,time:3000
});
}
return false;
}
});
var param = {"category":nodeId,"access_token":localStorage.getItem("access_token")};
//上传
var uploadFile = upload.render({
elem: '#doc-display-file-name'
, url: common.domainName+'/api-web/inspection/document/upload'
, auto: false
, accept: 'file'
, data:param
, exts: 'xls|doc|pdf|rar|zip|docx|xlsx|txt|jpg|log'
,choose: function(obj){
var files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列
//读取本地文件
obj.preview(function(index, file, result){
// 验证文件是否合规
admin.req({
url: common.domainName+'/api-web/inspection/document/check?fileName='+file.name,
async: false
}).done(function (res) {
// 10 文件不符合规则 20 文件不存在 21 文件已存在
if(res.data == 20){
$("#doc-display-file-name").val(file.name);
}else{
if(res.data == 10){
layer.msg('文件名不符合规则!', {
icon: 7,time:3000
});
delete files[index];
}else{
$("#doc-display-file-name").val(file.name);
layer.msg('检测到该文件已存在,执行上传操作文件将被覆盖!', {
icon: 7,time:3000
});
}
}
});
});
}
,done: function(res){
// 上传成功
if(res && res["status"] == 1){
delete res["createTime"];
// 获取用户信息
// res["authUser"] = param["authUser"];
res["access_token"] = accessToken;
res["docType"] ="doc";
// 发起保存操作
admin.req({
url: common.domainName + '/api-web/inspection/document/save',
async: false,
type: "post",
data : res
}).done(function (res) {
if(res.data){
layer.msg('文档上传成功!', {
icon: 1,time:2000
},function () {
layer.closeAll();
reloadDocTable(nodeId);
});
}else{
layer.msg('文档上传失败!', {
icon: 7,time:2000
});
}
});
}
}
,error: function(index, upload){
// 上传失败
layer.msg('文件上传时发生故障,请稍后再试!', {
icon: 7,time:3000
});
}
});
//上传请求操作
$("#doc-upload-actionbtn").on("click",function(){
uploadFile.upload();
})
});
//下载文档
$('#doc_download').click(function () {
var ids = [];
var data = table.checkStatus('aboutSystem_table').data;
if (data.length == 0) {
layer.msg('请选择要下载的文件!', { icon: 7,time:3000 });
return false;
}
//将选中的报表ID放到集合中
$.each(data, function (i, obj) {
ids.push(obj.id);
});
ids = ids.toString();
var path = common.domainName + '/api-web/inspection/document/download?access_token='+accessToken+"&ids="+ids;
window.open(path);
});
//关键字检索
$('#doc_keyword').keydown(function (e) {
if (e.keyCode === 13) {
reloadDocTable();
}
});
//检索事件
function serachEvent() {
//关键字检索
$('#doc_keyword').keydown(function (e) {
if (e.keyCode === 13) {
reloadDocTable();
}
});
//文档编号
$('#doc_code').keydown(function (e) {
if (e.keyCode === 13) {
reloadDocTable();
}
});
}
//表格数据
function renderDocumentTable() {
documentTable = table.render({
elem: '#aboutSystem_table'
, url: common.domainName + '/api-web/inspection/document/list'
, where: {
access_token: accessToken,
name:$("#doc_keyword").val(),
docNo:$("#doc_code").val(),
category:nodeId,
createUser:'',
flag: 'true',
docType:"doc"
}
, height: 'full'
, page: {
layout: ['count', 'prev', 'page', 'next', 'limit', 'skip']
,theme: '#1E9FFF'
}
,limit: common.limit
,limits: common.limits
, even: true
, cols: [[
{type: 'checkbox',width:50}
, {field: 'docNo', title: '文档编号', align: 'center',width:150}
, {field: 'name', title: '文档名称', align: 'left',
templet: '<div><span data-id="{{d.id}}" data-path="{{d.localPath}}" class="layui-table-link preview-btn">{{d.name}}</span></div>' }
, {field: 'categoryName', title: '文档类型', align: 'center',width:200}
, {field: 'createUserName', title: '提交人', align: 'center',width:150}
, {field: 'createTime', title: '提交时间', align: 'center',width:170
,templet:'<div>{{ layui.util.toDateString(d.createTime, "yyyy-MM-dd HH:mm:ss") }}</div>'}
, {
field: 'path', title: '下载', align: 'center',width:100,
templet:function (v) {
var url = common.domainName + '/api-web/inspection/document/download?access_token='+accessToken+"&ids="+v.id;
return '<a class=" layui-table-link" href="'+url+'">下载</a>';
}
}
]],done:function () {
$('.preview-btn').on('click', function () {
var id = $(this).data('id')
var localPath = $(this).data('path')
common.openReport(id,'','','','',1)
})
}
});
}
//刷新表格
function reloadDocTable() {
documentTable.reload({
where: {
access_token: accessToken,
name:$("#doc_keyword").val(),
docNo:$("#doc_code").val(),
createUser:'',
category:nodeId,
flag: 'true',
docType:"doc"
}
})
}
});
});
\ No newline at end of file
... ...
//活动告警
layui.define(['table', 'form', 'laydate', 'admin', 'layer', 'laytpl', 'common', 'sessions','commonDetail','soulTable', 'treeTable'], function (exports) {
var $ = layui.$;
var form = layui.form;
var layer = layui.layer;
var admin = layui.admin;
var table = layui.table;
var laydate = layui.laydate;
var laytpl = layui.laytpl;
var treeTable = layui.treeTable;
var common = layui.common;
var commonDetail=layui.commonDetail;
var domainName = common.domainName;
var todayStr = '';
//对外暴露的接口
exports('activewarning', function () {
var sessions = layui.sessions;
var accessToken = sessions.getToken()['access_token'];
var router = layui.router();
var alarmLevel = router.search.level; //告警级别
var checkList = common.checkPermission(accessToken);
var resId = router.search.resId;//资源Id
var kpiId = router.search.kpiId;//指标Id
var bizId = router.search.bizId;//业务Id
var alarmNo = router.search.alarmNo;//告警编号
var busIdSelect;
var busTypeList = [];
if(!bizId){
bizId='';
}
if (resId) {
resId = decodeURIComponent(resId);
}
if (alarmNo) {
$("#activewarningkw").val(alarmNo);
}
var netFlag = router.search.netFlag;//网络标识
var resType = router.search.restype ? router.search.restype : '';//资源类型
var soulTable = layui.soulTable;
var sortKey = '';
if ($("#alarmLevelSearchBox").val()) {
alarmLevel = $("#alarmLevelSearchBox").val()
}
//回显告警级别
$("#alarmLevelSearchBox").val(alarmLevel);
form.render("select");
function initDate() {
//开始时间
var start = laydate.render({
elem: '#activewarningStartdate'
, trigger: 'click'
, done: function (value, date) {
date.month--;
end.config.min = date;
var endDate = $("#activewarningEnddate").val();
if (endDate != null && endDate != "") {
reloadTable();
}
}
});
//结束时间
var end = laydate.render({
elem: '#activewarningEnddate'
, trigger: 'click'
, done: function (value, date) {
date.month--;
start.config.max = date;
var benginDate = $("#activewarningStartdate").val();
if (benginDate != null && benginDate != "") {
reloadTable();
}
}
});
//绑定业务下拉选择数据
admin.req({
url: domainName + '/api-web/home/business/findAllBusType',
success: function (response) {
if (response && response.success) {
busTypeList = response.data;
var bizList = response.data.map(item => {
return {
name: item.busTypeName,
value: item.busId,
parentId: item.parentId
}
});
var bizTree=common.pidToChildren(bizList, 'value', 'parentId');
// 影响业务下拉框
busIdSelect = xmSelect.render({
el: '#bisTypeSearchBox',
name: 'bizId',
tips: '=所属业务=',
//开启搜索
filterable: true,
clickClose: true,
initValue: [bizId.split(',')[0]],
toolbar: {
show: true,
list: ['ALL', 'REVERSE', 'CLEAR']
},
height: 'auto',
tree: {
show: true,
showFolderIcon: true,
showLine: true,
strict: true,
//间距
indent: 20,
},
model: {
label: {
type: 'text'
}
},
data: bizTree,
on: function (data) {
if (data.arr.length != 0) {
var str='';
$.each(data.arr,function (i,v) {
str+=v.value+',';
})
bizId = str.substring(0,str.length-1);
} else {
bizId = '';
}
form.render();
reloadTable();
}
});
if(busIdSelect){
//追加样式
$('#bisTypeSearchBox').find('.xm-body').eq(0).css("width","230px");
}
} else {
layer.msg('获取业务失败', {icon: 2});
}
},
error: function () {
layer.msg('获取业务失败', {icon: 2});
}
});
$.ajax({
url: common.domainName + '/api-web/manage/kpi/findKpiInAlarm?access_token='+accessToken+'&tableName=b_alarm',
type: "get",
success:function (res) {
var kpis = res.data;
var html = '<option value="">=指标名称=</option>'
$.each(kpis,function (i,e) {
html+='<option value="'+e.kpiId+'">'+e.kpiName+'</option>'
})
$("#alarmKpiSearchBox").html('');
$("#alarmKpiSearchBox").append(html);
form.render();
}
})
$.ajax({
url: `${common.domainName}/api-web/manage/restype/list?access_token=${accessToken}`,
method: 'GET',
success: function (res) {
// 资源类型下拉框
var resTypeList = res.data.map(item => {
return {
name: item.resTypeName,
value: item.resTypeCode,
parentId: item.parentId
}
});
var resTypeTree = treeTable.pidToChildren(resTypeList, "value", "parentId");
xmSelect.render({
el: '#resTypeSearchBox',
name: "resType",
tips: '=资源类型=',
filterable: true,
radio: true,
clickClose: true,
initValue: [resType],
toolbar: {
show: true,
list: ['CLEAR']
},
tree: {
show: true,
showFolderIcon: true,
showLine: true,
strict: false,
indent: 20
},
model: {
label: {
type: 'text'
}
},
height: 'auto',
data: resTypeTree,
on: function (data) {
if(data.isAdd){
if (data.arr.length != 0) {
resType = data.arr[0].value;
} else {
resType = '';
}
reloadTable();
}
}
});
}
});
}
//回车搜索
$('#activewarningkw, input[name="durationVal"]').keydown(function (e) {
if (e.keyCode === 13) {
reloadTable();
}
});
//选择框搜索事件
bindSelectEvent();
initDate();
function initToolBarClickEvent() {
//告警消除
$("#clearBtn").unbind('click').on('click', function () {
if ($.inArray('app:alarm:clear', checkList) == -1) {
layer.msg('暂无权限!', {icon: 7, time: 3000});
return;
}
var ids = [];
var data = table.checkStatus('activewarningTable').data;
if (data.length == 0) {
layer.msg('请最少选择一项数据', {icon: 7, time: 2000});
return;
}
//选中的告警ID放到集合中
$.each(data, function (i, obj) {
ids.push(obj.id)
});
//获取以往告警消除意见
admin.req({
url: common.domainName + '/api-web/home/alarm/clear/reason',
type: "get",
data:{
alarmId: ids.toString()
},
done:function (data) {
var clearReson = "暂无参考处理方案,请输入处理方案";
var hisReason = "";
var reasonlist = data.reason;
if(reasonlist && reasonlist.length > 0){
hisReason = "参考方案:\n";
$.each(reasonlist,function (i,v) {
var idx = i + 1;
hisReason += idx +":"+v +"\n";
});
}
layer.prompt({id: "alarms_clear_id", title: '告警消除', area: ['400px'], formType: 2,value: hisReason}, function (text, index) {
admin.req({
url: common.domainName + '/api-web/home/alarm/clear'
, type: "post"
, data: {
ids: ids.toString(),
reason: text,
access_token: accessToken,
noticeFlag: $('input[name="noticeFlag"]:checked').val()
}
, done: function (res) {
//如果消除成功,关闭弹出框然后重新加载页面
if (res.success) {
layer.close(index);
layer.msg('告警已消除!', {icon: 1, time: 2000});
reloadTable();
} else {
layer.msg('告警消除失败,请与管理员联系!', {icon: 7, time: 3000});
}
}
});
});
$("#alarms_clear_id").find('textarea.layui-layer-input').attr("placeholder", clearReson);
$("#alarms_clear_id").append('<div style="padding-top: 15px;"><span>是否通知:</span> ' +
'<input type="radio" name="noticeFlag" value="true" title="是" >&nbsp;是' +
'<input type="radio" name="noticeFlag" value="false" title="否" checked="" style="margin-left: 20px;">&nbsp;否</div> ');
}
});
});
//告警关闭
$("#closeBtn").unbind('click').on("click", function () {
if ($.inArray('app:alarm:close', checkList) == -1) {
layer.msg('暂无权限!', {icon: 7, time: 3000});
return;
}
var ids = [];
var data = table.checkStatus('activewarningTable').data;
var alarmStatus = true;
if (data.length == 0) {
layer.msg('请最少选择一项数据', {icon: 7, time: 2000});
return;
}
//选中的告警ID放到集合中
$.each(data, function (i, obj) {
var status = JSON.stringify(obj.alarmStatus);
if (status && status == '1') {
alarmStatus = false;
}
ids.push(obj.id)
});
if (!alarmStatus) {
layer.msg('已关闭的告警不可重复关闭!', {icon: 7, time: 3000});
return;
}
layer.prompt({
id: "alarms_cloes_id",
formType: 2,
title: '告警关闭',
area: ['400px']
},
function (value, index) {
if (value === "") {
layer.msg('请填写关闭意见', {icon: 7, time: 3000});
}
if ($('#closeDuration').val() === "") {
layer.msg('请填写关闭时长', {icon: 7, time: 3000});
return;
}
admin.req({
url: common.domainName + '/api-web/home/alarm/close'
, type: "post"
, data: {
ids: ids.toString(),
reason: value,
duration: $('#closeDuration').val() * 60,
closeType: $('input[name="closeType"]:checked').val(),
noticeFlag: $('input[name="noticeFlag"]:checked').val(),
kpiAllFlag: $('input[name="kpiAllFlag"]:checked').val(),
access_token: accessToken
}
, done: function (res) {
if (res.success) {
layer.close(index);
layer.msg('关闭成功', {icon: 1, time: 2000}, function () {
reloadTable();
});
} else {
layer.msg('告警关闭失败,请与管理员联系!', {icon: 7, time: 3000});
}
}
});
});
$("#alarms_cloes_id").find('textarea.layui-layer-input').attr("placeholder", "请输入关闭意见(必填)");// /[^(\d||/.)]/g,''
$("#alarms_cloes_id").append('<br/>' +
'<input type="number" id="closeDuration" class="layui-input" min="0" oninput="if(value.length>5)value=value.slice(0,5)" onkeyup="value=value.replace(/(\\d*\\.\\d).*/,\'$1\')" placeholder="输入关闭时长,单位小时(必填)"/>');
$("#alarms_cloes_id").append('<br/><div style="line-height: 38px;"><span>关闭类型:</span> ' +
'<input type="radio" name="closeType" value="0" title="关闭告警" checked="">&nbsp;关闭告警' +
'<input type="radio" name="closeType" value="1" title="关闭通知" style="margin-left: 20px;">&nbsp;关闭通知</div> ');
$("#alarms_cloes_id").append('<div style="line-height: 38px;"><span>是否关闭该指标所有告警/通知:</span> ' +
'<input type="radio" name="kpiAllFlag" value="true" title="是">&nbsp;是' +
'<input type="radio" name="kpiAllFlag" value="false" title="否" checked="" style="margin-left: 20px;">&nbsp;否</div> ');
$("#alarms_cloes_id").append('<div style="line-height: 38px;"><span>是否通知:</span> ' +
'<input type="radio" name="noticeFlag" value="true" title="是">&nbsp;是' +
'<input type="radio" name="noticeFlag" value="false" title="否" checked="" style="margin-left: 20px;">&nbsp;否</div> ');
});
//告警确认
$("#confirmBtn").unbind('click').on("click", function () {
if ($.inArray('app:alarm:confirm', checkList) == -1) {
layer.msg('暂无权限!', {icon: 7, time: 3000});
return;
}
var ids = [];
var data = table.checkStatus('activewarningTable').data;
if (data.length == 0) {
layer.msg('请最少选择一项数据', {icon: 7, time: 2000});
return;
}
$.each(data, function (i, obj) {
ids.push(obj.id)
});
layer.prompt({
id: "alarms_confirm_id",
formType: 2,
title: '告警确认',
area: ['400px']
},
function (value, index) {
if (value === "") {
layer.msg('请填确认意见', {icon: 7, time: 3000});
}
admin.req({
url: common.domainName + '/api-web/home/alarm/confirm'
, type: "post"
, data: {
ids: ids.toString(),
reason: value,
level: $('input[name="confrimlevel"]:checked').val(),
access_token: accessToken
}
, done: function (res) {
if (res.success) {
layer.close(index);
layer.msg('告警确认成功', {icon: 1, time: 2000}, function () {
reloadTable();
});
} else {
layer.msg('告警确认失败,请与管理员联系!', {icon: 7, time: 3000});
}
}
});
});
$("#alarms_confirm_id").find('textarea.layui-layer-input').attr("placeholder", "请输入意见(必填)");
$("#alarms_confirm_id").append('<br/> ' +
'<input type="radio" name="confrimlevel" value="0" title="紧急" checked="">&nbsp;紧急' +
'<input type="radio" name="confrimlevel" value="1" title="非常紧急" style="margin-left: 20px;">&nbsp;非常紧急' +
'<input type="radio" name="confrimlevel" value="2" title="不紧急" style="margin-left: 20px;">&nbsp;不紧急');
});
//告警恢复
$("#resumeBtn").unbind('click').on("click", function () {
if ($.inArray('app:alarm:resume', checkList) == -1) {
layer.msg('暂无权限!', {icon: 7, time: 3000});
return;
}
var ids = [];
var closeIds = [];
var data = table.checkStatus('activewarningTable').data;
var resumeStatus = true;
if (data.length == 0) {
layer.msg('请最少选择一项数据', {icon: 7, time: 2000});
return;
}
var msg = "";
//选中的告警ID放到集合中
$.each(data, function (i, obj) {
var alarmStatus = JSON.stringify(obj.alarmStatus);
//已关闭的告警才可以恢复,告警状态,0告警,1关闭
if (alarmStatus && alarmStatus == '0') {
resumeStatus = false;
msg = '只能恢复已关闭状态的告警,请重新选择!';
}
ids.push(obj.id);
closeIds.push(obj.closeId);
});
if (!resumeStatus) {
layer.msg(msg, {icon: 7, time: 3000});
return;
}
layer.prompt({title: '恢复说明(必填)', formType: 2}, function (text, index) {
admin.req({
url: common.domainName + '/api-web/home/alarm/resume'
, type: "post"
, data: {
ids: ids.toString(),
reason: text,
closeId: closeIds.toString(),
resumeType: '0',//0告警关闭,1历史告警
access_token: accessToken
}
, done: function (res) {
//如果消除成功,关闭弹出框然后重新加载页面
if (res.success) {
layer.close(index);
layer.msg('告警已恢复!', {icon: 1, time: 3000}, function () {
reloadTable();
});
} else {
layer.msg('告警恢复失败,请与管理员联系!', {icon: 7, time: 3000});
}
}
});
})
});
//导出
$("#exportAarmBtn").unbind('click').on("click", function () {
if ($.inArray('app:alarm:export', checkList) == -1) {
layer.msg('暂无权限!', {icon: 7, time: 3000});
return;
}
var data = table.checkStatus('activewarningTable').data;
if (data.length == 0) {
//确认提示框
layer.confirm('当前没选择告警,将全量导出数据,请确认', {
btn: ['确定', '取消'] //按钮
}, function () {
var url = common.domainName + '/api-web/home/alarm/exportExcel?access_token=' + accessToken;
window.open(url);
layer.closeAll();
});
} else {
var ids = [];
//讲选中的告警ID放到集合中
$.each(data, function (i, obj) {
ids.push(obj.id);
});
ids = ids.toString();
var url = common.domainName + '/api-web/home/alarm/exportExcel?alarmIds=' + ids + "&access_token=" + accessToken;
window.open(url)
}
});
//发送通知
$("#sendNoticeBtn").unbind('click').on("click", function () {
if ($.inArray('app:alarm:sendnotice', checkList) == -1) {
layer.msg('暂无权限!', {icon: 7, time: 3000});
return;
}
var ids = [];
var resIds = [];
var data = table.checkStatus('activewarningTable').data;
if (data.length == 0) {
layer.msg('请最少选择一项数据', {icon: 7, time: 2000});
return;
}
if (data.length > 1) {
layer.msg('请最多选择一项数据', {icon: 7, time: 2000});
return;
}
//将选中的告警ID放到集合中
$.each(data, function (i, obj) {
ids.push(obj.id);
resIds.push(obj.resId);
});
admin.req({
url: common.domainName + '/api-web/home/alarm/subscribe/user/' + resIds.toString()
, done: function (res) {
if (res.data && res.data.length > 0) {
var username = '';
var begin = '<div style="padding: 0 5px 0 5px;"><table class="layui-table"><thead>' +
'<tr><th></th><th>名称</th><th>电话</th><th>邮箱</th></tr></thead><tbody>';
var end = '</tbody></table></div>';
$.each(res.data, function (i, v) {
username += '<tr><td><input class="userName" type="checkbox" data-name="' + v.username + '" checked></td><td>' + v.nickname + '</td><td>' + v.phone + '</td><td>' + v.email + '</td></tr>';
});
//获取告警通知接收人
var reciveUsers = begin + username + end;
layer.open({
type: 1
, title: "通知接收人"
, shade: 0.8
, area: ['600px', '390px']
, id: 'lay_users' //设定一个id,防止重复弹出
, content: reciveUsers
, btn: ['发送', '关闭']
, yes: function () {
var names = [];
$("input[class='userName']:checked").each(function(i){
names.push($(this).attr("data-name"));
});
if(names.length<1){
layer.msg('请最少选择一个用户', {icon: 7, time: 2000});
return;
}
admin.req({
url: common.domainName + '/api-web/home/alarm/sendnotice'
, type: "post"
, data: {
ids: ids.toString(),
names:names.toString(),
access_token: accessToken
}
, done: function (res) {
layer.closeAll();
if (res.success) {
layer.msg('发送成功', {icon: 1, time: 2000});
} else {
layer.msg('发送失败,稍后再试', {icon: 7, time: 2000});
}
}
});
}
});
} else {
layer.msg('未获取到接收所选通知的用户!', {icon: 7, time: 2000});
}
}
});
});
}
//告警处理及时率
getAlarmCount();
var activeAlarmTable;
//获取配置的列
common.getTableCols({
domId: 'activewarningTable',
moduleId: 'activewarning',
resType: ''
},function (retCols) {
var cols = [
{type: 'checkbox', fixed: 'left'}
, {
field: 'alarmLevel', title: '级别', align: 'center', width: 120, sort: true,
templet: `
<div>
{{# if (d.alarmLevel == 3) {
}} <span class="layui-table-warn" style="width: 100%;">严重</span> {{#
} else if (d.alarmLevel == 2) {
}} <span class="layui-table-close" style="width: 100%;">重要</span> {{#
} else if (d.alarmLevel == 1) {
}} <span class="layui-table-normal" style="width: 100%;">一般</span> {{#
} }}
</div>
`
}
, {
field: 'alarmNo', title: '告警编号', align: 'center', width: 140, sort: true,
}
, {
field: 'resName', title: '资源名称', width: 230, sort: true,
templet:`
<div>
{{# if (d.confirmStatus == 0 || d.confirmStatus == null) { }}
<i lay-tips="新的告警未确认,告警确认后消失!" class="shake iconfont" style="color: red;font-size: 28px;">&#xe68b;</i>
{{# } }}
<span data-resid="{{d.resId}}" data-restype="{{d.resType}}" data-warn-zymc="{{d.id}}" data-ip="{{d.ip}}"
data-resname="{{d.resName}}" data-pingenable="{{d.pingEnable}}" class="layui-table-link">{{d.resName}}</span>
<a class="layui-icon layui-icon-picture reslist-view-topo hide" data-resid="{{d.resId}}" style="color: #FEB61E; font-size: 14px; margin-left: 10px;" lay-tips="查看资源拓扑"></a>
</div>
`
}
, {
field: 'kpiName', title: '指标名称', align: 'center', width: 120, sort: true,
templet: `
<div>
{{#
var kpiName = d.kpiName == 'TYPE'?'ERRPT':d.kpiName;
if (d.kpiIdent != 1) {
if(d.isWarning != 1) {
}} <div>{{kpiName}}</div> {{#
} else { }}
<div><span data-ident="{{d.kpiIdent}}" data-trend="{{d.isTrend}}" data-warning="{{d.isWarning}}" data-resid="{{d.resId}}" data-flag="{{d.flag}}" data-kpi="{{d.kpiId}}" data-warn-zbmc="{{d.id}}" data-name="{{kpiName}}" class="layui-table-link">{{kpiName}}</span></div>
{{# }
} else { }}
<div><span data-ident="{{d.kpiIdent}}" data-trend="{{d.isTrend}}" data-warning="{{d.isWarning}}" data-resid="{{d.resId}}" data-flag="{{d.flag}}" data-kpi="{{d.kpiId}}" data-warn-zbmc="{{d.id}}" data-name="{{kpiName}}" class="layui-table-link">{{kpiName}}</span></div>
{{# }
}}
</div>`
}
, {field: 'alarmContent', title: '告警内容', align: 'center', width: 500}
, {
field: 'alarmResource', title: '告警来源', align: 'center', minWidth: 120, templet: `<div>
{{# if (d.alarmResource == 1) { }}
<div>华为告警</div>
{{# } else { }}
<div>监控系统</div>
{{# } }}
</div>`
}
, {field: 'updateTime', title: '告警时间', align: 'center', minWidth: 180, sort: true}
, {field: 'alarmTime', title: '首次告警时间', align: 'center', minWidth: 180, sort: true}
, {field: 'durationStr', title: '持续时间', align: 'center', width: 190}
, {field: 'alarmRepeatCnt', title: '告警次数', align: 'center', width: 180}
, {field: 'nickName', title: '通知人', align: 'center', width: 180}
, {field: 'adminName', title: '负责人', align: 'center', width: 180}
, {field: 'noticeTime', title: '通知时间', align: 'center', width: 180, hide: true}
, {
title: '操作', align: 'center', minWidth: 100,
templet: '<div><span data-warn-view="{{d.id}}" class="layui-table-link">查看</span> <span data-warn-path="{{d.id}}" class="layui-table-link">轨迹</span></div>'
}
];
if (retCols) {
cols = retCols;
}
//渲染表格
activeAlarmTable = table.render({
elem: '#activewarningTable'
, url: domainName + '/api-web/home/alarm/alarmListPage'
, id: 'activewarningTable'
, toolbar: '#activeAlarmtoolbar' //开启头部工具栏,并为其绑定左侧模板
, defaultToolbar: ['filter']
, where: {
access_token: accessToken,
kpiName: $("#activewarningkw").val(),
busId: bizId,
resId: resId,
kpiId: kpiId,
alarmStatus: $("#alarmStatusSearchBox").val(),
alarmLevel: alarmLevel,
confirmStatus: $("#alarmConfirmSearchBox").val(),
beginTime: $("#activewarningStartdate").val(),
endTime: $("#activewarningEnddate").val(),
sortKey: sortKey,
alarmKpi: $("#alarmKpiSearchBox").val(),
durationVal: $('#inline-condition-duration input[name="durationVal"]').val(),
durationUnit: $('#inline-condition-duration select[name="durationUnit"]').val(),
netFlag: netFlag,
resType:resType
}
, height: 'full-245'
, cellMinWidth: 80
, page: {
layout: ['count', 'prev', 'page', 'next', 'limit', 'skip']
, theme: '#1E9FFF'
}
, even: true
, drag: {toolbar: false}
, cols: [cols],
done: function (res, curr, count) {
soulTable.render(this)
var groupurl = domainName + '/api-web/home/alarm/countAlarmNumByAlarmLevel?alarmTimeDay=' + todayStr + '&access_token=' + accessToken;
$.ajax({
url: groupurl,
type: 'get',
data: {
access_token: accessToken,
kpiName: $("#activewarningkw").val(),
busId: bizId,
resId: resId,
kpiId: kpiId,
alarmStatus: $("#alarmStatusSearchBox").val(),
alarmLevel: alarmLevel,
confirmStatus: $("#alarmConfirmSearchBox").val(),
beginTime: $("#activewarningStartdate").val(),
endTime: $("#activewarningEnddate").val(),
sortKey: sortKey,
alarmKpi: $("#alarmKpiSearchBox").val(),
durationVal: $('#inline-condition-duration input[name="durationVal"]').val(),
durationUnit: $('#inline-condition-duration select[name="durationUnit"]').val(),
netFlag: netFlag,
resType:resType
},
success: function (res) {
var map = res.map;
if (map) {
layui.use('laytpl', function () {
var laytpl = layui.laytpl;
var getTpl = document.getElementById("alarm-count-id-tpl").innerHTML;
laytpl(getTpl).render(map, function (html) {
$('#alarm-count-id').html(html);
});
//告警升级量 悬浮提示
var alarmUpRate, alarmDealRate;
$("#alarm_level_up_area_id").hover(function () {
alarmUpRate = layer.tips("活动告警中升级的告警总量及占比",
'#alarm_level_up_area_id', {tips: [1]});
}, function () {
layer.close(alarmUpRate);
});
//告警处理及时率
$("#alarm_deal_rate_area_id").hover(function () {
alarmDealRate = layer.tips("活动告警中及时处理的告警量占比",
'#alarm_deal_rate_area_id', {tips: [1]});
}, function () {
layer.close(alarmDealRate);
});
$('[data-warn-zymc]').unbind('click').on('click', function () {
//先去查找资源有没有权限
var resId = $(this).data("resid");
var resType = $(this).data("restype");
var ip = $(this).data("ip") ? $(this).data("ip") : "";
var resName = $(this).data("resname");
var pingEnable = $(this).data("pingenable"); //获取pingEnable的值 joke add 20200619
var resTypeName = '';
var adminName = '';
var manageIp = '';
var collProtocol = '';
var sign='false';
$.ajax({
url: common.domainName + "/api-web/home/resource/findById?resId="+resId + '&access_token='+ accessToken,
async: false,
type:'get',
success: function (res) {
sign=res.str;
var data = res.object;
resType = data.resType;
adminName = data.adminName;
manageIp = data.manageIp;
collProtocol = data.collProtocol;
resTypeName = data.resTypeName;
}
})
if(sign=='false'){
layer.msg('当前用户暂无此资源权限!', {icon: 7, time: 3000});
return false;
}
let 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 (pingEnable == '2') { //如果pingEnable为2,则进入ping状态详情页面
commonDetail.openNewWin('template/detail/pingIndex', title, {'resId': resId}, false);
} else { //否则进入监控详情页面
commonDetail.openDetail(resId, resType, title);
}
});
//指标名称点击事件
$('[data-warn-zbmc]').unbind("click").on('click', function () {
var name = $(this).data("name");
var params = {
resId: $(this).data("resid"),
kpiId: $(this).data("kpi"),
flag: $(this).data("flag"),
name: name,
warning: $(this).data("warning"),
ident: $(this).data("ident"),
trend: $(this).data("trend")
};
common.openLineChart(name, params);
});
//告警操作日志
$('[data-warn-view]').unbind('click').on('click', function () {
admin.req({
url: common.domainName + '/api-web/home/alarm/info'
, data: {
alarmId: $(this).data('warn-view'),
access_token: accessToken
}
}).done(function (res) {
laytpl($('#warnViewWinTpl').html()).render(res.obj, function (html) {
layer.open({
area: '750px',
title: ['告警操作信息', 'font-size:18px;'],
type: 1,
content: html
});
});
});
});
//告警轨迹
$('[data-warn-path]').unbind('click').on('click', function () {
var id = $(this).attr('data-warn-path');
var view = layui.view;
var params = {
"warnId": id
};
view('commonViewModel').render("template/detail/warn_gj").then(function (res) {
layer.open({
title: ['告警轨迹', 'font-size:18px;'],
type: 1,
area: ['900px', '650px'],
content: laytpl(res.body).render(JSON.stringify(params))
});
});
});
});
//点击严重重要一般统计告警
$("#alarm-count-id").find(".warn-count-item").unbind('click').on("click", function () {
var alarmLevel = $(this).attr("alarm-level");
if (alarmLevel != '' && alarmLevel != null && alarmLevel != undefined) {
$("#alarmLevelSearchBox").val(alarmLevel)
layui.form.render('select');
reloadTable();
} else {
$("#alarmLevelSearchBox").val("");
layui.form.render('select');
if (alarmLevel === '') {
reloadTable();
}
}
});
initToolBarClickEvent();
//表格排序监听 joke add 20200408
table.on('sort(activewarningTable)', function (obj) {
//有些时候,你可能需要根据当前排序的字段,重新向服务端发送请求,从而实现服务端排序,如:
if (obj.type != null) {
sortKey = obj.field + ' ' + obj.type;
} else {
sortKey = '';
}
reloadTable('sort');
})
}
}
})
//触发拖动列事件,参数为保存按钮的id
common.dragCols("activewarning_cols_save");
//保存列顺序
$("#activewarning_cols_save").unbind("click").on("click", function () {
var params = {
domId: 'activewarningTable',
moduleId: 'activewarning',
resType: '',
cols: JSON.stringify(activeAlarmTable.config.cols)
}
common.saveTableCols(params);
});
resTopo();
}
});
});
//绑定下拉搜索事件
function bindSelectEvent() {
//选择业务搜索
form.on('select(bisTypeSearch)', function (data) {
bizId = data.value;
reloadTable();
});
//选择业务搜索
form.on('select(alarmKpiSearch)', function (data) {
reloadTable();
});
// 告警状态
form.on('select(alarmStatusSearch)', function (data) {
reloadTable();
});
//告警级别
form.on('select(alarmLevelSearch)', function (data) {
reloadTable();
});
// 告警确认
form.on('select(alarmConfirmSearch)', function (data) {
reloadTable();
});
}
$("#todayOrAllBtn").unbind().on("click",function () {
var $that = $(this);
var str = $(this).text();
if(str.indexOf("今日") > -1){
$that.text("全部告警")
todayStr = common.getToday('day');
}else{
todayStr = ''
$that.text("今日告警")
}
reloadTable();
})
//刷新表格
function reloadTable(type) {
if (type != 'sort'){
sortKey = '';
}
activeAlarmTable.reload({
page: {
curr: 1
}
,where: {
access_token: accessToken,
kpiName: $("#activewarningkw").val(),
busId: bizId,
resId: resId,
kpiId: kpiId,
alarmStatus: $("#alarmStatusSearchBox").val(),
alarmLevel: $("#alarmLevelSearchBox").val(),
confirmStatus: $("#alarmConfirmSearchBox").val(),
beginTime: $("#activewarningStartdate").val(),
endTime: $("#activewarningEnddate").val(),
sortKey: sortKey,
alarmKpi: $("#alarmKpiSearchBox").val(),
durationVal: $('#inline-condition-duration input[name="durationVal"]').val(),
durationUnit: $('#inline-condition-duration select[name="durationUnit"]').val(),
alarmTimeDay:todayStr,
resType:resType
}
});
}
//获取告警统计信息
function getAlarmCount() {
admin.req({
url: common.domainName + "/api-web/home/alarm/countByAlarmLevel"
, type: "get"
, done: function (data) {
var alarms = data.data;
if (data.code == 0) {
$.each(alarms, function (i, v) {
if (v.alarmLevel == 5) {//及时率
$("#alarm_dealRate").html(v.alarmNum + "%");
}
});
} else {
console.error("接口请求失败")
console.log(data.msg);
}
}
})
}
form.render(null, 'activewarning-form');
//60秒倒计时
(function () {
var autoBtn = $('#activewarningAutoFlush');
var timer = null;
function autoFlush(target) {
var el = target.find('span');
var checked = target.find('input').prop('checked');
localStorage.setItem('alarm_auto__flush', checked);
function fn() {
var second = el.data('second');
var checked = target.find('input').prop('checked');
if (!checked) {
return;
}
--second;
el.data('second', second);
el.html(second + '秒');
timer = setTimeout(fn, 1000);
if (second <= 0) {
clearTimeout(timer);
reloadTable()
$(el).data('second', 60);
$(el).text("60秒");
fn();
}
}
if (checked) {
timer = setTimeout(fn, 1000);
} else {
clearTimeout(timer);
}
}
form.on("checkbox(warnActiveAutoFlush)",function (data) {
autoFlush(autoBtn);
})
/*autoBtn.change(function () {
autoFlush(autoBtn);
});*/
var auto = localStorage.getItem('alarm_auto__flush')
auto = auto ? auto : false;
autoBtn.find('input').prop('checked', auto);
autoFlush(autoBtn);
admin.on('hash(*)', function (router) {
if (router.href === '/activewarning') {
autoFlush(autoBtn);
} else {
clearTimeout(timer);
}
});
})();
function resTopo() {
//绑定鼠标移入移出事件
$('table tr').hover(function (obj) {
$(obj.currentTarget).find('.reslist-view-topo').removeClass('hide');
}, function (obj) {
$(obj.currentTarget).find('.reslist-view-topo').addClass('hide');
})
// 加入/移出收藏夹
$('a.reslist-view-topo').unbind('click').on('click', function () {
common.viewResTopo($(this).data('resid'));
});
}
});
});
\ No newline at end of file
... ...
//告警策略
layui.define(['form', 'admin', 'laydate', 'common','sessions','reskpilist'], function (exports) {
var $ = layui.$;
var form = layui.form;
var laydate = layui.laydate;
var admin = layui.admin;
var common = layui.common;
var domainName = common.domainName;
//对外暴露的接口
exports('alarmpolicyAdd', function (data) {
var sessions = layui.sessions;
var accessToken = sessions.getToken()['access_token'];
console.log(data)
form.render(null, 'add-alarmpolicy-form');
//初始化日期组件
laydate.render({
elem: '#seriousTimes'
,type: 'time'
,range: true
});
laydate.render({
elem: '#importantTimes'
,type: 'time'
,range: true
});
laydate.render({
elem: '#commonlyTimes'
,type: 'time'
,range: true
});
var resType = localStorage.getItem("currentResType");
//编辑
if(data && data.id){
admin.req({
url:domainName + '/api-web/alarmPolicy/getbyId/'+data.id
,done:function (res){
exprToChar(res.object, 'alarmContentExpr');
exprToChar(res.object, 'cleanPolicy');
exprToChar(res.object, 'commonlyExpr');
exprToChar(res.object, 'importantExpr');
exprToChar(res.object, 'seriousExpr');
form.val("add-alarmpolicy-form",res.object);
$("#alarm-policy-kpiName").val(res.object.kpiId +" "+ res.object.kpiName);
$("#seriousTimes").val(res.object.seriousTimes);
$("#importantTimes").val(res.object.importantTimes);
$("#commonlyTimes").val(res.object.commonlyTimes);
$("#alarmPolicyType").val(res.object.policyType);
}
});
}else{
$("#seriousTimes").val('00:00:00 - 23:59:59');
$("#importantTimes").val('00:00:00 - 23:59:59');
$("#commonlyTimes").val('00:00:00 - 23:59:59');
}
$('#btn-alarmpolicy-expr-add').unbind('click').on('click', function () {
editNoticeExpr();
return false;
});
//全天
$(".allday").on("click",function (){
var id = $(this).data("flag");
$("#"+id).val('00:00:00 - 23:59:59');
});
//工作时间
$(".worktime").on("click",function (){
var id = $(this).data("flag");
$("#"+id).val('08:00:00 - 19:59:59');
});
$('.noticeExpr').unbind('click').on('click', function () {
var id = $(this).prop('id');
var alarmTimes = '';
if (['seriousExpr', 'importantExpr', 'commonlyExpr'].includes(id)) {
id = id.substring(0, id.length - 4);
alarmTimes = $('#' + id + 'Times').val();
}
editNoticeExpr($(this).val(), alarmTimes, id);
});
//指标信息
if(data.kpiId){
$("#alarm-policy-kpiId").val(data.kpiId);
$("#alarm-policy-kpiName").val(data.kpiId + " " + data.name);
}
//告警规则类型切换事件
form.on('radio(alarm-policy-rule-type)', function (data) {
var flag = $(data.elem).data("flag");
if(data.value == '1'){
$(`.${flag}-tab-item`).find("div.cont-base").show();
}else{
$(`.${flag}-tab-item`).find("div.cont-base").hide();
$(`#${flag}Policy`).val('');
}
});
//选择指标
$("#alarmpolicy-form-select-kpi, #alarm-policy-kpiName").unbind('click').on("click",function (){
common.openWin("template/res/reskpilist","选择指标", {resType:null},["选择","取消"], function () {
var data = layui.reskpilist().getData();
if(data && data.length != 1){
layer.msg('只能选择一个指标!', {icon: 7,time:3000});
return false;
}
if(data && data.length > 0){
$("#alarm-policy-kpiId").val(data[0].kpiId);
$("#alarm-policy-kpiName").val(data[0].kpiId + " " + data[0].kpiName);
$("#alarmPolicyName").val(data[0].kpiName + "告警策略");
var arry = [ "base", "cpu", "mem"];
return true;
}
});
});
//增加一行策略表达式输入框
$("i.policy-input-add").off("click").on("click",function (){
var id = $(this).data("id");
clonePolicyDoms(id);
});
//删除告警策略规则行
$("i.policy-input-del").on("click",function (){
var id = $(this).data("id");
$(`#${id}`).remove();
});
//生成策略
$("a.createpolicybtn").on("click",function (){
var kpiId = $("#alarm-policy-kpiId").val();
if(!kpiId){
layer.msg("请先选择指标!", {
icon: 7
, time: 3000
});
return false;
}
var policyFlag = $(this).data("flag");
var conOjb = {"0":">","1":"<","2":"=","3":">=","4":"<=","5":"equals","6":"contains","7":"startsWith","8":"endsWith"};
var doms = $(`[id^=${policyFlag}-policy-box]`);
var policyStr = '';
$(doms).each(function(i,v){
var domId = $(v).attr("id");
if(domId.indexOf("condition") != -1){//条件
var open = $(v).find('.layui-form-switch').hasClass("layui-form-onswitch");
if(open){ policyStr += "||" }else{ policyStr += "&&" }
}else{ //值
var conditon = $(v).find("."+policyFlag+"_condition").val();
var cls = policyFlag +"_value";
var conval = $(v).find('[flag="'+cls+'"]').val().trim();
if(conval){
if(conditon < 5){ //数字类的
policyStr += `Double.parseDouble([${kpiId},kpiValue])${conOjb[conditon]}${conval}`;
}else{ //字符串类的
policyStr += `[${kpiId},kpiValue].${conOjb[conditon]}("${conval}")`;
}
}
}
});
if(policyStr){
$(`#${policyFlag}Policy`).val(policyStr);
}else{
layer.msg("请先输入策略值!", {
icon: 7
, time: 3000
});
return false;
}
});
//保存策略
$("#alarmpolicy-form-save-id").on("click",function (){
var data = form.val("add-alarmpolicy-form");
//移除非数进性的属性
delete data['serious-policy-type'];
delete data['important-policy-type'];
delete data['commonly-policy-type'];
delete data['filter-policy-type'];
delete data['commonly-policy-type'];
delete data['alarmcotent-policy-type'];
data.seriousTimes = $("#seriousTimes").val();
data.importantTimes = $("#importantTimes").val();
data.commonlyTimes = $("#commonlyTimes").val();
charToExpr(data, 'alarmContentExpr');
charToExpr(data, 'cleanPolicy');
charToExpr(data, 'commonlyExpr');
charToExpr(data, 'importantExpr');
charToExpr(data, 'seriousExpr');
form.on('submit(add-alarmpolicy-form)',function () {
admin.req({
url : domainName + '/api-web/alarmPolicy/save?access_token='+accessToken
,data:JSON.stringify(data)
,type:'post'
,contentType: "application/json; charset=utf-8"
,done:function (res){
if(res.success){
localStorage.setItem("detailPageOfcustomPolicyId",res.str)
layer.msg(res.msg, { offset: '15px' , icon: 1 , time: 1000 },function (){
localStorage.removeItem("currentResType");
if(layui.alarmpolicyIndex && layui.alarmpolicyIndex()){
layui.alarmpolicyIndex().reloadAlarmPolicy()
}
});
}else{
layer.msg(res.msg, { offset: '15px' , icon: 7 , time: 1000 });
}
}
});
return false;//必须要写,解决禁用submit提交,ajax方法才能正确执行,且表单不会自动刷新
})
});
//克隆告警策略元素
function clonePolicyDoms(id){
var times = new Date().getTime()
var cond = `<div class="layui-form-item cont-base" id="${id}-${times}-condition">
<input type="checkbox" checked="" lay-skin="switch" lay-text="或|且">
</div>`;
var clone = $(`#${id}`).clone();
clone.attr("id",id+"-"+times).find("i.policy-input-add").addClass("hide")
.parent().parent().find("i.policy-input-del").attr("data-id",id + "-"+times).removeClass("hide")
.parent().parent().find("input.layui-input").val("");
$(`#${id}`).after(clone).after(cond);
form.render();
//渲染新增事件
$("i.policy-input-add").off("click").on("click",function (){
clonePolicyDoms($(this).data("id"));
});
//删除告警策略规则行
$("i.policy-input-del").off("click").on("click",function (){
var id = $(this).data("id");
$(`#${id}`).remove();
$(`#${id}-condition`).remove();
});
}
function editNoticeExpr(noticeExpr, alarmTimes, noticeType) {
var title = `<a class="layui-icon layui-icon-edit win_title_icon"></a>编辑通知表达式`;
common.openWin('baseconfig/alarmpolicy/noticeExprEdit', title, {
noticeExpr,
alarmTimes,
noticeType
}, ['保存', '取消'], function (index) {
$("#btn-noticeExpr-submit").click();
}, null, ['70%', '80%'], function (layero, index) {
$("#btn-noticeExpr-submit").data('layerindex', index);
});
}
function exprToChar(obj, varName) {
obj[varName] = obj[varName].replace(/\[\[br]]/g, '\n').replace(/\[\[tab]]/g, '\t');
}
function charToExpr(obj, varName) {
obj[varName] = obj[varName].replace(/\n/g, '[[br]]').replace(/\t/g, '[[tab]]');
}
//如果是详情页过来的,则不能改变指标和默认状态
if (data && data.from === 'detail') {
$("#alarmpolicy-form-select-kpi, #alarm-policy-kpiName").off('click');
$('#add-alarmpolicy-form').find('[name="policyType"]').attr("disabled","disabled");
}
});
});
\ No newline at end of file
... ...
//告警策略
layui.define(['form', 'admin', 'laydate', 'common', 'sessions', 'reskpilist', 'table'], function (exports) {
var $ = layui.$;
var form = layui.form;
var laydate = layui.laydate;
var admin = layui.admin;
var table = layui.table;
var common = layui.common;
var domainName = common.domainName;
//对外暴露的接口
exports('alarmpolicyEdit', function (data) {
var sessions = layui.sessions;
var accessToken = sessions.getToken()['access_token'];
var policyId = (data && data.id) ? data.id : '';
var policy = {
resType: '',
busId: ''
};
var typeList = ['serious'];
var timeSlotList = []
common.resTypeXmSelect({
el: '#slt-alarmpolicy-restype',
name: 'resType'
});
common.busTreeSelect({
el: '#slt-alarmpolicy-bustype',
tips: '=业务类型=',
name: 'busId',
tree: {
strict: false
}
})
var sltResType = xmSelect.get('#slt-alarmpolicy-restype')[0];
var sltBusType = xmSelect.get('#slt-alarmpolicy-bustype')[0];
$('#btn-alarmpolicy-timeSlot').unbind('click').on('click', function () {
$(this).text('');
return false;
});
laydate.render({
elem: '#btn-alarmpolicy-timeSlot',
type: 'time',
range: true,
ready: function (date) {
$('#btn-alarmpolicy-timeSlot').text('添加时间范围');
},
remove: function () {
$('#btn-alarmpolicy-timeSlot').text('');
setTimeout(function () {
$('#btn-alarmpolicy-timeSlot').text('添加时间范围');
}, 0);
},
done: function (value, date, endDate) {
var timeStr = '';
if (value) {
timeSlotList.push({
startTime: new Date(1, 1, 1, date.hours, date.minutes, date.seconds, 0),
endTime: new Date(1, 1, 1, endDate.hours, endDate.minutes, endDate.seconds, 0)
})
timeStr = checkTimeSlot()
} else {
timeStr = ''
}
$('#txt-alarmpolicy-timeSlot').val(timeStr)
setTimeout(function () {
$('#btn-alarmpolicy-timeSlot').text('添加时间范围');
}, 0);
}
});
$("#alarmpolicy-form-select-kpi, #alarm-policy-kpiName").unbind('click').on("click", function () {
common.openWin("template/res/reskpilist", "选择指标", {resType: null}, ["选择", "取消"], function () {
var data = layui.reskpilist().getData();
if (data && data.length != 1) {
layer.msg('只能选择一个指标!', {icon: 7, time: 3000});
return false;
}
if (data && data.length > 0) {
var kpiId = data[0].kpiId;
var kpiName = data[0].kpiName;
form.val("add-alarmpolicy-form", {
kpiId: data[0].kpiId,
kpiName: kpiId + " " + kpiName,
name: kpiName + '的告警策略'
})
return true;
}
});
});
$(".cont-item").on("click", 'button.policy-input-add', function () {
$(this).closest('.cont-item').append($('#html-condition-template').html());
form.render()
return false;
});
$(".cont-item").on("click", 'button.policy-input-del', function () {
$(this).closest('.cont-base').remove();
return false;
});
$('.layui-form .createpolicybtn').unbind('click').on('click', function () {
var kpiId = $("#alarm-policy-kpiId").val();
if (!kpiId) {
layer.msg("请先选择指标!", {icon: 0});
}
var conOjb = {
"0": ">",
"1": "<",
"2": "=",
"3": ">=",
"4": "<=",
"5": "equals",
"6": "contains",
"7": "startsWith",
"8": "endsWith"
};
var policyStr = '';
var $form = $(this).closest('.layui-form');
$form.find('.cont-item .cont-base').each(function (index, elem) {
var $elem = $(elem);
if (index) {
if ($elem.find('.layui-form-switch').hasClass('.layui-form-onswitch')) {
policyStr += '||'
} else {
policyStr += '&&'
}
}
var condition = $elem.find('.serious_condition').val();
var conval = $elem.find('.serious_value').val();
(conval) || (conval = '')
if (condition < 5) {
policyStr += `Double.parseDouble([${kpiId},kpiValue])${conOjb[condition]}${conval}`;
} else {
policyStr += `[${kpiId},kpiValue].${conOjb[condition]}("${conval}")`;
}
});
$form.find('textarea[name="policyExpression"]').val(policyStr);
return false;
});
$('textarea[name="contentTemplate"], textarea[name="noticeTemplate"], textarea[name="cleanTemplate"]').unbind('click').on('click', function () {
var domStr = `#${$(this).closest('.fdt-alarmpolicy').attr('id')} textarea[name="${$(this).attr('name')}"]`;
editExpr($(this).val(), domStr)
});
$('.btn-quote-template').unbind('click').on('click', function () {
var $card = $(this).closest('.layui-tab-card')
$card.find('.layui-tab-item.layui-show textarea').val($card.find('.layui-tab-item:not(.layui-show) textarea').val())
return false;
});
form.on('checkbox(cbo-alarmpolicy-type)', function (data) {
var type = $(data.elem).data('type');
if (data.elem.checked) {
typeList.push(type);
} else {
typeList.splice(typeList.findIndex(item => item === type), 1);
}
refreshPolicy()
})
form.on('radio(rdo-policyType)', function (data) {
if (data.value === '1') {
setDefault();
} else {
setUnDefault();
}
});
form.on('switch(wth-policy-autoClean)', function (data) {
var $switch = $(data.elem);
if (data.elem.checked) {
$switch.parent().find('input[name="autoClear"]').attr('readonly', false).attr('lay-verify', 'required')
} else {
$switch.parent().find('input[name="autoClear"]').attr('readonly', true).removeAttr('lay-verify').val('')
}
});
form.on('switch(wth-policy-autoUp)', function (data) {
var $switch = $(data.elem);
if (data.elem.checked) {
$switch.parent().find('input[name="autoUp"]').attr('readonly', false).attr('lay-verify', 'required')
} else {
$switch.parent().find('input[name="autoUp"]').attr('readonly', true).removeAttr('lay-verify').val('')
}
});
form.on('switch(wth-policy-trigger)', function (data) {
var $switch = $(data.elem);
if (data.elem.checked) {
$switch.parent().find('input[name="triggerPolicy"]').attr('readonly', false)
} else {
$switch.parent().find('input[name="triggerPolicy"]').attr('readonly', true).val('0')
}
});
form.on('submit(add-alarmpolicy-form)', function (data) {
if (!typeList.length) {
layer.msg('至少选择一个告警策略!', {icon: 0});
return false;
}
var policy = form.val("add-alarmpolicy-form");
policy.describe = $('#txt-policy-describe').val()
policy.confList = [];
$('.fdt-alarmpolicy').not('.hide').each(function (index, elem) {
policy.confList.push(form.val($(elem).find('.layui-form').attr('lay-filter')))
});
layer.load(![] + !!{} + !'');
admin.req({
url: domainName + '/api-web/policy/save?access_token=' + accessToken,
data: JSON.stringify(policy),
type: 'post',
contentType: "application/json; charset=utf-8",
success: function (res) {
layer.closeAll('loading');
if (res && res.success) {
layer.msg('保存成功!', {icon: 1});
layer.closeAll('page')
$('#alarmpolicyQueryListBtn').click();
} else {
layer.closeAll('loading');
layer.msg(res.msg, {icon: 2});
}
}
});
return false;
})
initExprSelect()
if (policyId) {
layer.load(2);
admin.req({
url: domainName + '/api-web/policy/findById',
data: {
id: policyId
},
success(response) {
layer.closeAll('loading');
if (response && response.success) {
policy = response.object;
$('#txt-policy-describe').val(policy.describe)
delete policy.describe;
form.val('add-alarmpolicy-form', policy)
if (policy.timeSlot) {
policy.timeSlot.split(',').forEach(time => {
var timeList = time.split('-');
var startTime = timeList[0].split(':')
var endTime = timeList[1].split(':')
timeSlotList.push({
startTime: new Date(1, 1, 1, startTime[0], startTime[1], startTime[2], 0),
endTime: new Date(1, 1, 1, endTime[0], endTime[1], endTime[2], 0)
})
})
}
sltResType.setValue(policy.resType.split(','))
sltBusType.setValue(policy.busId.split(','))
if (policy.policyType === '1') {
setDefault();
}
typeList = [];
$('.layui-field-title input[lay-filter="cbo-alarmpolicy-type"]').attr('checked', false);
policy.confList.forEach(conf => {
typeList.push(conf.type)
$('.layui-field-title input[lay-filter="cbo-alarmpolicy-type"][data-type="' + conf.type + '"]').attr('checked', true)[0].checked = true;
form.val($('#fdt-alarmpolicy-' + conf.type).find('.layui-form').attr('lay-filter'), conf)
if (conf.autoClear || conf.autoClear === 0) {
$('#fdt-alarmpolicy-' + conf.type + ' input[lay-filter="wth-policy-autoClean"]')[0].checked = true;
$('#fdt-alarmpolicy-' + conf.type + ' input[name="autoClear"]').attr('readonly', false);
}
if (conf.autoUp || conf.autoUp === 0) {
$('#fdt-alarmpolicy-' + conf.type + ' input[lay-filter="wth-policy-autoUp"]')[0].checked = true;
$('#fdt-alarmpolicy-' + conf.type + ' input[name="autoUp"]').attr('readonly', false);
}
if (conf.triggerPolicy) {
$('#fdt-alarmpolicy-' + conf.type + ' input[lay-filter="wth-policy-trigger"]')[0].checked = true;
$('#fdt-alarmpolicy-' + conf.type + ' input[name="triggerPolicy"]').attr('readonly', false);
}
})
refreshPolicy();
form.render();
} else {
layer.msg('获取告警策略信息失败!', {icon: 2});
}
},
error() {
layer.closeAll('loading');
layer.msg('获取告警策略信息失败!', {icon: 2});
}
})
} else {
refreshPolicy();
form.render();
}
function refreshPolicy() {
$('.fdt-alarmpolicy').addClass('hide')
$('.fdt-alarmpolicy [lay-verify]').each(function (index, elem) {
var $elem = $(elem);
$elem.attr('lay-verify-ignore', $elem.attr('lay-verify'))
$elem.removeAttr('lay-verify');
});
typeList.forEach(type => {
$('#fdt-alarmpolicy-' + type).removeClass('hide')
$('#fdt-alarmpolicy-' + type + ' [lay-verify-ignore]').each(function (index, elem) {
var $elem = $(elem);
$elem.attr('lay-verify', $elem.attr('lay-verify-ignore'))
$elem.removeAttr('lay-verify-ignore');
});
})
}
function checkTimeSlot() {
let lastTimeSlot = timeSlotList[timeSlotList.length - 1];
if (lastTimeSlot.startTime > lastTimeSlot.endTime) {
let temp = lastTimeSlot.startTime;
lastTimeSlot.startTime = lastTimeSlot.endTime;
lastTimeSlot.endTime = temp;
}
timeSlotList.sort((a, b) => {
return a.startTime - b.startTime
});
for (let i = 1; i < timeSlotList.length;) {
if (timeSlotList[i].startTime <= timeSlotList[i - 1].endTime) {
timeSlotList[i - 1].endTime = timeSlotList[i].endTime;
timeSlotList.splice(i, 1);
} else {
i++;
}
}
let timeStr = '';
timeSlotList.forEach(timeSlot => {
timeStr += timeSlot.startTime.format('HH:mm:ss')
timeStr += '-'
timeStr += timeSlot.endTime.format('HH:mm:ss')
timeStr += ','
});
(timeStr) && (timeStr = timeStr.substr(0, timeStr.length - 1))
return timeStr;
}
function editExpr(expr, domStr) {
var title = `<a class="layui-icon layui-icon-edit win_title_icon"></a>编辑表达式`;
common.openWin('baseconfig/alarmpolicy/exprEdit', title, {expr, domStr}, ['保存', '取消'], function (index) {
$("#btn-expr-submit").click();
}, null, ['70%', '80%'], function (layero, index) {
$("#btn-expr-submit").data('layerindex', index);
});
}
function initExprSelect() {
var options = '<option value="">=快速引用=</option>'
admin.req({
url: `${domainName}/api-web/manage/ddic/findSucDdics/alarm_expr?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.ddicDesc + '">' + v.ddicName + '</option>';
});
$('.slt-expr').html(options);
form.render('select');
form.on('select(slt-expr)', function (data) {
$(data.elem).closest('.layui-tab-card').find('.layui-show textarea').val(data.value);
});
}
},
error(error) {
console.error(error);
}
});
}
function setDefault() {
form.val("add-alarmpolicy-form", {
dateSlot: '0',
timeSlot: '00:00:00-23:59:59'
})
$('#btn-alarmpolicy-timeSlot').addClass('hide')
$('select[name="dateSlot"]').attr('disabled', true);
sltResType.setValue([]).update({disabled: true});
sltBusType.setValue([]).update({disabled: true});
form.render('select')
}
function setUnDefault() {
$('#btn-alarmpolicy-timeSlot').removeClass('hide')
$('select[name="dateSlot"]').attr('disabled', false);
sltResType.update({disabled: false});
sltBusType.update({disabled: false});
form.render('select')
}
});
});
\ No newline at end of file
... ...
//告警策略
layui.define(['table', 'form', 'admin', 'layer', 'common','sessions','xmSelect','treeTable'], function (exports) {
var $ = layui.$;
var form = layui.form;
var layer = layui.layer;
var admin = layui.admin;
var table = layui.table;
var common = layui.common;
var xmSelect = layui.xmSelect;
var treeTable = layui.treeTable;
var domainName = common.domainName;
//对外暴露的接口
exports('alarmpolicyIndex', function (data) {
var sessions = layui.sessions;
var accessToken = sessions.getToken()['access_token'];
//获得权限列表
var checkList = common.checkPermission(accessToken);
var resName = '';
if (data && data.type == 'alarmTemplate') {
$('#alarmpolicy_policyType').val('0');
$('#alarmpolicy_policyType').attr('disabled','disabled');
} else {
$('#alarmpolicy_policyType').val('1');
}
//回车搜索
$('#alarmpolicykw').keydown(function (e) {
if (e.keyCode === 13) {
reloadAlarmPolicyTable();
}
});
//查询按钮点击事件 joke add 20210428
$('#alarmpolicyQueryBtn').on('click',function () {
reloadAlarmPolicyTable();
});
//指标类型
form.on('select(alarmpolicy_kpitype)', function(){
reloadAlarmPolicyTable();
});
//指标分类
form.on('select(alarmpolicy_category)', function(){
reloadAlarmPolicyTable();
});
//策略类型分类
form.on('select(alarmpolicy_policyType)', function(){
reloadAlarmPolicyTable();
});
form.render(null, 'alarmpolicy-form');
//新增
$("#alarmpolicy_create").unbind("click").on("click",function () {
if ($.inArray('back:alarmpolicy:save', checkList) == -1) {
layer.msg('暂无权限!', {icon: 7, time: 3000});
return;
}
openPolicyForm();
});
//同步
$("#alarmpolicy_sync").on("click",function (){
if ($.inArray('back:alarmpolicy:synchronization', checkList) == -1) {
layer.msg('暂无权限!', {icon: 7, time: 3000});
return;
}
syncAlarmPolicy();
});
//删除
$("#alarmpolicy_delete").unbind("click").on("click",function () {
deleteAlarmPolicy();
});
//渲染表格
var alarmpolicyTable = table.render({
elem: '#alarmpolicyTable'
, url: domainName + '/api-web/alarmPolicy/page'
, where:{
access_token:accessToken,
alarmPolicyName:$("#alarmpolicykw").val(),
kpiIdent:$('#alarmpolicy_category').val(),
resType:$('#alarmpolicy_kpitype').val(),
policyType:$('#alarmpolicy_policyType').val(),
resName: resName
}
, height: 'full-200'
, page: {
layout: ['count', 'prev', 'page', 'next', 'limit', 'skip']
,theme: '#1E9FFF'//自定义分页主题颜色
}
, end: function(e){
form.render();
}
, even: true
, cols: [[
{type: 'checkbox'}
, {field: 'policyType', title: '策略类型', align: 'center', sort: true, width:120,
templet: function(d){
var checked = '';
if(d.policyType == '1'){ //默认
checked = "checked";
}
return `<input type="checkbox" id="${d.alarmPolicyId}" data-kpiid="${d.kpiId}" name="close" ${checked} lay-skin="switch" lay-filter="switchPolicyType" lay-text="默认|非默认">`;
}}
, {
field: 'alarmPolicyName', title: '策略名称', align: 'center', sort: true,
templet: '<div><span data-id="{{d.alarmPolicyId}}" class="layui-table-link view-alarmPolicy-name">{{d.alarmPolicyName}}</span></div>'
}
, {title: '资源类型', align: 'center',templet:function (d){
return `${d.resTypeName}`
}}
, {field: 'kpiName', title: '指标', align: 'center', width:240}
, {title: '策略内容', align: 'center',templet:function (d){
return `告警策略表达式:严重告警:【${d.seriousPolicy},<br>重要告警:【${d.importantPolicy},<br>一般告警:【${d.commonlyPolicy}】`;
}}
, {field: 'alarmTempTotal', title: '所属告警模板量', align: 'center', sort: true, width:180,
templet:function (d){
if(d.alarmTempTotal != '0'){
return `<div><span data-id="${d.alarmPolicyId}" class="layui-table-link view-alarm-template-total">${d.alarmTempTotal}</span></div>`;
}else{
return d.alarmTempTotal;
}
}}
// , {field: 'kpiTypes', title: '指标类型', align: 'center', sort: true,minWith:180}
, {field: 'kpiIdent', title: '指标类型', align: 'center', width:120, templet: function(d){
switch (d.kpiIdent){
case "0":
return "基本指标";
case "1":
return "性能指标";
case "2":
return "状态指标";
case "4":
return "告警指标";
}
}}
, {field: 'syncFlag',title: '同步状态',align: 'center', sort: true,width:120,
templet: function(d){
if (d.policyType == '1') { //默认
if(d.syncFlag != 1){ //未同步
return `<input type="checkbox" id="${d.alarmPolicyId}" name="close" lay-skin="switch" lay-filter="switchSyncPolicy" lay-text="已同步|未同步">`;
}else{
return ' <button type="button" class="layui-btn layui-bg-green layui-btn-radius layui-btn-xs p-0-15">已同步</button>';
}
} else {
return ''
}
}
}
, {title: '操作', align: 'center',width:100, fixed: 'right',
templet: '<div>' +
'<button data-id="{{d.alarmPolicyId}}" lay-tips="删除" type="button" class="layui-btn layui-btn-xs layui-btn-normal delete-alarmPolicy-btn"><i class="layui-icon layui-icon-delete"></i></button>'+
'</div>'
}
]],
done:function () {
//设置默认
form.on('switch(switchPolicyType)', function(obj){
var alarmPolicyId = obj.elem.id;
var alarmPolicyKpiId = $(obj.elem).data("kpiid");
var isChecked = obj.elem.checked?"1":"0";
admin.req({
url:common.domainName + '/api-web/alarmPolicy/default'
, type : 'post'
, data:{
id:alarmPolicyId,
type:isChecked,
kpiId:alarmPolicyKpiId
}
}).done(function (res) {
layer.msg(res.msg, { offset: '15px' , icon: 1, time: 2000},function (){
reloadAlarmPolicyTable();
});
});
});
//点击名称编辑
$(".view-alarmPolicy-name").off("click").on("click",function () {
if ($.inArray('back:alarmpolicy:update', checkList) == -1) {
layer.msg('暂无权限!', {icon: 7, time: 3000});
return;
}
openPolicyForm($(this).data("id"));
});
//查看告警策略所属模板列表
$(".view-alarm-template-total").on("click",function (){
var id = $(this).data("id");
common.openWin('baseconfig/alarmtemplate/list',"告警模板",{policyId:id})
});
//设置同步
form.on('switch(switchSyncPolicy)', function(obj){
var alarmPolicyId = obj.elem.id;
syncAlarmPolicy(alarmPolicyId);
});
//删除
$(".delete-alarmPolicy-btn").on("click",function () {
var id = $(this).data("id");
deleteAlarmPolicy(id)
});
}
});
//同步策略
function syncAlarmPolicy(alarmPolicyId){
if (typeof (alarmPolicyId) != "string") {
var ids = [];
var data = table.checkStatus('alarmpolicyTable').data;
var flag = true;
if(data && data.length > 0){
$.each(data,function (i,obj) {
if (obj.policyType == '0') {
flag = false
}
ids.push(obj.alarmPolicyId);
});
}
if (!flag) {
layer.msg('非默认策略类型禁止同步!',{icon: 7,time:2000})
return;
}
if (ids.length == 0) {
layer.msg('请选择要同步的数据',{icon: 7,time:2000});
return;
}
alarmPolicyId = ids.toString();
}
var syncload = layer.load(2, {
content: '同步中...',
shade: [0.5, '#f2eeee'], //0.5透明度的灰色背景
success: function (layero) {
layero.find('.layui-layer-content').css({
'padding-top': '9px',
'width': '60px',
'padding-left': '40px'
});
}
});
admin.req({
url:common.domainName + '/api-web/alarmPolicy/sync'
, data:{
ids:alarmPolicyId
}
}).done(function (res) {
layer.close(syncload)
if(res.success){
layer.msg(res.msg, { offset: '15px' , icon: 1 , time: 1000 },function (){
reloadAlarmPolicyTable();
});
}else{
layer.msg(res.msg, { offset: '15px' , icon: 7 , time: 1000 });
}
}).error(function (){
layer.close(syncload)
});
}
//刷新表格
function reloadAlarmPolicyTable() {
alarmpolicyTable.reload({
where:{
access_token:accessToken,
alarmPolicyName:$("#alarmpolicykw").val(),
kpiIdent:$('#alarmpolicy_category').val(),
resType:$('#alarmpolicy_kpitype').val(),
policyType:$('#alarmpolicy_policyType').val(),
resName: resName
}
});
}
//删除数据
function deleteAlarmPolicy(id) {
if ($.inArray('back:alarmpolicy:delete', checkList) == -1) {
layer.msg('暂无权限!', {icon: 7, time: 3000});
return;
}
if (typeof (id) != "string") {
var ids = [];
var data = table.checkStatus('alarmpolicyTable').data;
if(data && data.length > 0){
$.each(data,function (i,obj) {
ids.push(obj.alarmPolicyId);
});
}
if (ids.length == 0) {
layer.msg('请选择要删除的数据',{icon: 7,time:2000});
return;
}
id = ids.toString();
}
//确认提示框
layer.confirm('数据删除后将无法恢复,您确定要删除吗?', {
btn: ['确定', '取消'] //按钮
}, function () {
admin.req({
url: common.domainName + '/api-web/alarmPolicy/delete'
,type:"delete"
,data:{ids:id}
}).done(function (res) {
layer.msg('删除成功', {
offset: '15px'
, icon: 1
, time: 1000
}, function () {
reloadAlarmPolicyTable();
});
}).error(function (error) {
console.log(error);
});
});
}
$.ajax({
url: `${common.domainName}/api-web/manage/restype/list?access_token=${accessToken}`,
method: 'GET',
success: function (res) {
// 资源类型下拉框
var resTypeList = res.data.map(item => {
return {
name: item.resTypeName,
value: item.resTypeCode,
parentId: item.parentId
}
});
var resTypeTree = treeTable.pidToChildren(resTypeList, "value", "parentId");
xmSelect.render({
el: '#alarmpolicy_kpi_resName',
name: "resName",
tips: '=资源类型=',
filterable: true,
radio: true,
clickClose: true,
toolbar: {
show: true,
list: ['CLEAR']
},
tree: {
show: true,
showFolderIcon: true,
showLine: true,
strict: false,
indent: 20
},
model: {
label: {
type: 'text'
}
},
prop: {
name: 'name',
value: 'name'
},
height: 'auto',
data: resTypeTree,
on: function (data) {
if(data.isAdd){
if (data.arr.length != 0) {
resName = data.arr[0].name;
} else {
resName = '';
}
reloadAlarmPolicyTable();
}
}
});
}
});
//新增、编辑策略表单
function openPolicyForm(id){
var title = id?"编辑策略":"新增策略";
title = `<a class="layui-icon layui-icon-edit win_title_icon"></a>${title}`;
common.openWin('baseconfig/alarmpolicy/add',title, {id:id},['保存','取消'],function () {
$("#alarmpolicy-form-save-id").trigger("click");
return true;
},null,['90%','90%']);
}
//获取选中的数据
function getCheckAlarmPolicyData() {
return table.checkStatus('alarmpolicyTable').data;
}
return { getData: getCheckAlarmPolicyData,reloadAlarmPolicy:reloadAlarmPolicyTable()};
});
});
\ No newline at end of file
... ...
//告警策略
layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions'], function (exports) {
var $ = layui.$;
var form = layui.form;
var layer = layui.layer;
var admin = layui.admin;
var table = layui.table;
var common = layui.common;
var domainName = common.domainName;
//对外暴露的接口
exports('alarmpolicyList', function (data) {
var sessions = layui.sessions;
var accessToken = sessions.getToken()['access_token'];
//获得权限列表
var checkList = common.checkPermission(accessToken);
if (data && data.type == 'alarmTemplate') {
$('#alarmpolicy_list_policyType').val('0');
$('#alarmpolicy_list_policyType').attr('disabled', 'disabled');
} else {
$('#alarmpolicy_list_policyType').val('1');
}
//回车搜索
$('#alarmpolicyListkw').keydown(function (e) {
if (e.keyCode === 13) {
reloadAlarmPolicyTable();
}
});
//查询按钮点击事件 joke add 20210428
$('#alarmpolicyQueryListBtn').on('click', function () {
reloadAlarmPolicyTable();
});
//指标类型
form.on('select(alarmpolicy_list_kpitype)', function () {
reloadAlarmPolicyTable();
});
//指标分类
form.on('select(alarmpolicy_list_category)', function () {
reloadAlarmPolicyTable();
});
//策略类型分类
form.on('select(alarmpolicy_list_policyType)', function () {
reloadAlarmPolicyTable();
});
form.render(null, 'alarmpolicy-form');
//新增
$("#alarmpolicy_list_create").unbind("click").on("click", function () {
if ($.inArray('back:alarmpolicy:save', checkList) == -1) {
layer.msg('暂无权限!', {icon: 7, time: 3000});
return;
}
openPolicyForm();
});
//同步
$("#alarmpolicy_list_sync").on("click", function () {
if ($.inArray('back:alarmpolicy:synchronization', checkList) == -1) {
layer.msg('暂无权限!', {icon: 7, time: 3000});
return;
}
syncAlarmPolicy();
});
//删除
$("#alarmpolicy_list_delete").unbind("click").on("click", function () {
deleteAlarmPolicy();
});
//渲染表格
var alarmpolicyTable = table.render({
elem: '#alarmpolicyListTable',
url: domainName + '/api-web/policy/page',
where: {
access_token: accessToken,
policyName: $("#alarmpolicyListkw").val(),
kpiIdent: $('#alarmpolicy_list_category').val(),
resType: $('#alarmpolicy_list_kpitype').val(),
policyType: $('#alarmpolicy_list_policyType').val()
}
, height: 'full-200'
, page: {
layout: ['count', 'prev', 'page', 'next', 'limit', 'skip']
, theme: '#1E9FFF'//自定义分页主题颜色
}
, end: function (e) {
form.render();
}
, even: true
, cols: [[{
type: 'checkbox'
}, {
field: 'policyType', title: '策略类型', align: 'center', sort: true, width: 120,
templet: function (d) {
var checked = '';
if (d.policyType == '1') { //默认
checked = "checked";
}
return `<input type="checkbox" id="${d.id}" data-kpiid="${d.kpiId}" name="close" ${checked} lay-skin="switch" lay-filter="switchPolicyType" lay-text="默认|非默认">`;
}
}, {
field: 'alarmPolicyName', title: '策略名称', align: 'center', sort: true,
templet: '<div><span data-id="{{d.id}}" class="layui-table-link view-alarmPolicy-name">{{d.name}}</span></div>'
}, {
title: '资源类型', align: 'center', templet: function (d) {
return `${d.resTypeName}`
}
}, {
field: 'kpiName', title: '指标', align: 'center', width: 240
}, {
title: '策略数量', align: 'center', field: "confTotal"
}, {
field: 'kpiIdent', title: '指标类型', align: 'center', width: 120, templet: function (d) {
switch (d.kpiIdent) {
case "0":
return "基本指标";
case "1":
return "性能指标";
case "2":
return "状态指标";
case "4":
return "告警指标";
}
}
}, {
field: 'syncFlag', title: '同步状态', align: 'center', sort: true, width: 120,
templet: function (d) {
if (d.policyType == '1') { //默认
if (d.syncFlag != 1) { //未同步
return `<input type="checkbox" id="${d.id}" name="close" lay-skin="switch" lay-filter="switchSyncListPolicy" lay-text="已同步|未同步">`;
} else {
return ' <button type="button" class="layui-btn layui-bg-green layui-btn-radius layui-btn-xs p-0-15">已同步</button>';
}
} else {
return ''
}
}
}, {
title: '操作', align: 'center', width: 100, fixed: 'right',
templet: '<div>' +
'<button data-id="{{d.id}}" lay-tips="删除" type="button" class="layui-btn layui-btn-xs layui-btn-normal delete-alarmPolicy-btn"><i class="layui-icon layui-icon-delete"></i></button>' +
'</div>'
}]],
done: function () {
//设置默认
form.on('switch(switchPolicyType)', function (obj) {
var alarmPolicyId = obj.elem.id;
var alarmPolicyKpiId = $(obj.elem).data("kpiid");
var isChecked = obj.elem.checked ? "1" : "0";
layer.load(2);
admin.req({
url: common.domainName + '/api-web/policy/changeType',
type: 'post',
data: {
id: alarmPolicyId,
policyType: isChecked,
kpiId: alarmPolicyKpiId
},
success(res) {
layer.closeAll('loading');
if (res && res.success) {
layer.msg('设置成功!', {icon: 1});
reloadAlarmPolicyTable();
} else {
layer.msg('设置失败!', {icon: 2});
}
},
error() {
layer.closeAll('loading');
}
});
});
//点击名称编辑
$(".view-alarmPolicy-name").off("click").on("click", function () {
if ($.inArray('back:alarmpolicy:update', checkList) == -1) {
layer.msg('暂无权限!', {icon: 7, time: 3000});
return;
}
openPolicyForm($(this).data("id"));
});
//查看告警策略所属模板列表
$(".view-alarm-template-total").on("click", function () {
var id = $(this).data("id");
common.openWin('baseconfig/alarmtemplate/list', "告警模板", {policyId: id})
});
//设置同步
form.on('switch(switchSyncListPolicy)', function (obj) {
var alarmPolicyId = obj.elem.id;
syncAlarmPolicy(alarmPolicyId);
});
//删除
$(".delete-alarmPolicy-btn").on("click", function () {
var id = $(this).data("id");
deleteAlarmPolicy(id)
});
}
});
//同步策略
function syncAlarmPolicy(alarmPolicyId) {
if (typeof (alarmPolicyId) != "string") {
var ids = [];
var data = table.checkStatus('alarmpolicyListTable').data;
var flag = true;
if (data && data.length > 0) {
$.each(data, function (i, obj) {
if (obj.policyType == '0') {
flag = false
}
ids.push(obj.id);
});
}
if (!flag) {
layer.msg('非默认策略类型禁止同步!', {icon: 7, time: 2000})
return;
}
if (ids.length == 0) {
layer.msg('请选择要同步的数据', {icon: 7, time: 2000});
return;
}
alarmPolicyId = ids.toString();
}
var syncload = layer.load(2);
admin.req({
url: common.domainName + '/api-web/policy/sync'
, data: {
ids: alarmPolicyId
}
}).done(function (res) {
layer.close(syncload)
if (res.success) {
layer.msg('同步成功!', {icon: 1});
reloadAlarmPolicyTable();
} else {
layer.msg('同步失败!', {icon: 2});
}
}).error(function () {
layer.close(syncload)
});
}
//刷新表格
function reloadAlarmPolicyTable() {
alarmpolicyTable.reload({
where: {
access_token: accessToken,
alarmPolicyName: $("#alarmpolicykw").val(),
kpiIdent: $('#alarmpolicy_list_category').val(),
resType: $('#alarmpolicy_list_kpitype').val(),
policyType: $('#alarmpolicy_list_policyType').val()
}
});
}
//删除数据
function deleteAlarmPolicy(id) {
if ($.inArray('back:alarmpolicy:delete', checkList) == -1) {
layer.msg('暂无权限!', {icon: 7, time: 3000});
return;
}
if (typeof (id) != "string") {
var ids = [];
var data = table.checkStatus('alarmpolicyListTable').data;
if (data && data.length > 0) {
$.each(data, function (i, obj) {
ids.push(obj.id);
});
}
if (ids.length == 0) {
layer.msg('请选择要删除的数据', {icon: 7, time: 2000});
return;
}
id = ids.toString();
}
//确认提示框
layer.confirm('数据删除后将无法恢复,您确定要删除吗?', {
btn: ['确定', '取消'] //按钮
}, function () {
layer.load(2);
admin.req({
url: common.domainName + '/api-web/policy/delete'
, type: "delete"
, data: {ids: id}
}).done(function (res) {
layer.closeAll('loading');
if (res && res.success) {
layer.msg('删除成功!', {icon: 1});
reloadAlarmPolicyTable()
} else {
layer.msg('删除失败!', {icon: 2});
}
}).error(function (error) {
layer.closeAll('loading');
console.log(error);
layer.msg('删除失败!', {icon: 2});
});
});
}
//新增、编辑策略表单
function openPolicyForm(id) {
var title = id ? "编辑策略" : "新增策略";
title = `<a class="layui-icon layui-icon-edit win_title_icon"></a>${title}`;
common.openWin('baseconfig/alarmpolicy/edit', title, {id: id}, ['保存', '取消'], function () {
$("#alarmpolicy-form-save-id").trigger("click");
}, null, ['90%', '90%']);
}
//获取选中的数据
function getCheckAlarmPolicyData() {
return table.checkStatus('alarmpolicyListTable').data;
}
return {getData: getCheckAlarmPolicyData, reloadAlarmPolicy: reloadAlarmPolicyTable()};
});
});
... ...
//告警订阅表单
layui.define(['form', 'admin', 'laydate', 'table', 'common','sessions','cron','orgusergroup'], function (exports) {
var $ = layui.$;
var form = layui.form;
var laydate = layui.laydate;
var table = layui.table;
var admin = layui.admin;
var common = layui.common;
var domainName = common.domainName;
var cron = layui.cron;
var view = layui.view;
var orgusergroup = layui.orgusergroup;
//对外暴露的接口
exports('alarmsubscribeAdd', function (data) {
var sessions = layui.sessions;
var accessToken = sessions.getToken()['access_token'];
var receiveUser = ""
var userMap = new Map();
var receiveUserInfos = [];//接收人数组
var receiveOrgInfos = []; //接收部门
var receiveGroupInfoS = []; //接收组
form.render(null, 'add-alarmsubscribe-form');
//初始化日期组件
laydate.render({
elem: '.alarm_subscribe_times'
,type: 'time'
,range: true
});
if(data && data.id){
admin.req({
url:domainName + '/api-web/alarmsubscribe/getbyId/'+data.id
,async:false
,done:function (res){
//处理时间段回显
if(res.object.times){
var times=res.object.times.split(',');
if(times.length>1){
res.object.times=times[0];
$.each(times,function(i,v){
if(i>0){
addTimeQuantum(times[i]);
}
});
}
}
form.val("add-alarmsubscribe-form",res.object);
//处理回显
if(res.object.subWay){
var subWay = res.object.subWay;
$("#alarmsubscribe_add_subway").find('[data-type="'+subWay+'"]').removeClass("gray").siblings().addClass("gray");
}
if(res.data){
$.each(res.data,function (i,v){
writeTagsInfo(v);
})
}
if (res.obj){
if (res.obj.subOrgLists){
$.each(res.obj.subOrgLists,function (i,v){
v.value = v.targetId;
writeOrgTagsInfo(v,'selecte_org_content_id')
});
}
if (res.obj.subGroupLists){
$.each(res.obj.subGroupLists,function (i,v){
v.value = v.targetId;
writeOrgTagsInfo(v,'selecte_group_content_id')
});
}
}
if(res.object.subType == '1'){//告警订阅
$("div.alarmLevel").show();
$("div.reportType").hide();
var alarmLevels = res.object.alarmLevel.split(",");
for(var i in alarmLevels){
let chkbox = $(`input[type="checkbox"][name="alarmLevel"][value="${alarmLevels[i]}"]`);
if (chkbox && chkbox.length > 0) {
chkbox[0].checked = true;
form.render();
}
}
}else if(res.object.subType == '2'){//报表订阅
$("div.alarmLevel").hide();
$("div.reportType").show();
var reportTypes = res.object.reportType.split(",");
for(var i in reportTypes){
let chkbox = $(`input[type="checkbox"][name="reportType"][value="${reportTypes[i]}"]`);
if (chkbox && chkbox.length > 0) {
chkbox[0].checked = true;
form.render();
}
}
}else{
$("div.alarmLevel").hide();
$("div.reportType").hide();
}
if(res.object.sentFrequency && res.object.sentFrequency.indexOf("?")>0){
$("#sentFrequency_input").val(res.object.sentFrequency);
$(".sentFrequency_input").show();
$(".sentFrequency_select").hide();
}else{
$("#sentFrequency_select").val(res.object.sentFrequency);
$(".sentFrequency_input").hide();
$(".sentFrequency_select").show();
}
switchSubType(res.object.subType,res.object)
form.render();
}
});
}
//corn表达式
$("#show_corn_info").on("click",function (){
layer.open({
type: 1
, title: 'Cron表达式示例'
, closeBtn: 1
, area: ['60%', '80%']
, shade: 0.8
, id: 'lay_cron_subcribe' //设定一个id,防止重复弹出
, content: $("#cronHtml").html()
});
});
// 初始化Cron表达式组件
cron.render({
elem: "#sentFrequency_input", // 绑定元素
value: $("#sentFrequency_input").val(), // 默认值
done: function (cronStr) { // 点击确定,或运行时,触发,参数为 cron 表达式字符串
$("#sentFrequency_input").val(cronStr);
},
});
//全天
$(".allday_subscribe").on("click",function (){
$(this).prev().find('input[name="times"]').val('00:00:00 - 23:59:59');
});
//工作时间
$(".worktime_subscribe").on("click",function (){
$(this).prev().prev().find('input[name="times"]').val('08:00:00 - 19:59:59');
});
//添加时间段
$("#save_subscribe").on("click",function (){
addTimeQuantum();
});
//添加时间段
function addTimeQuantum(v){
var html=' <div class="layui-form-item">\n' +
' <div class="layui-inline-block">\n' +
' <label class="layui-form-label">通知时间段</label>\n' +
' <div class="layui-input-inline">\n' +
' <input type="text" class="layui-input alarm_subscribe_times" placeholder=" 选择告警时间段 ">\n' +
' </div>\n' +
' <div class="layui-form-mid layui-word-aux allday_subscribe" lay-time="times" lay-tips="全天" style="margin-left: 10px;"><i class="layui-icon form-btn-icon">&#xe637;</i></div>\n' +
' <div class="layui-form-mid layui-word-aux worktime_subscribe" lay-time="times" lay-tips="工作时间"><i class="layui-icon form-btn-icon">&#xe665;</i></div>\n' +
' <div class="layui-form-mid layui-word-aux del_subscribe" lay-time="times" lay-tips="删除时间段"><i class="layui-icon form-btn-icon">&#xe67e;</i></div>\n' +
' </div>\n' +
' </div>';
//添加组件
$('#message-time-quantum-div').before(html);
//获取添加的节点
var alarm_subscribe_times=$('#message-time-quantum-div').prev().find('.alarm_subscribe_times').eq(0).get(0);
laydate.render({
elem: alarm_subscribe_times
,type: 'time'
,range: true
});
//全天
$('#message-time-quantum-div').prev().find('.allday_subscribe').on("click",function (){
$(this).prev().find('.alarm_subscribe_times').val('00:00:00 - 23:59:59');
});
//工作时间
$('#message-time-quantum-div').prev().find('.worktime_subscribe').on("click",function (){
$(this).prev().prev().find('.alarm_subscribe_times').val('08:00:00 - 19:59:59');
});
//删除
$('#message-time-quantum-div').prev().find('.del_subscribe').on("click",function (){
$(this).closest('.layui-form-item').remove();
layer.closeAll('tips');
});
if(v){
$('#message-time-quantum-div').prev().find('.alarm_subscribe_times').val(v);
}
form.render();
}
//订阅方式
$("#alarmsubscribe_add_subway li").on("click",function (){
$(this).removeClass("gray").siblings().addClass("gray");
$("#alarmsubscribe_subway").val($(this).data("type"));
});
//订阅类型切换事件
form.on('select(alarm-subscribe-subype)', function (data) {
if(data.value == '1'){
$("div.alarmLevel").show();
$("div.reportType").hide();
}else if(data.value == '2'){
$("div.alarmLevel").hide();
$("div.reportType").show();
}else{
$("div.alarmLevel").hide();
$("div.reportType").hide();
}
switchSubType(data.value,undefined)
form.render()
});
//通知类型
form.on('radio(sub_send-type)', function (data) {
if(data.value == '1'){
$(".sentFrequency_select").show();
$(".sentFrequency_input").hide();
}else{
$(".sentFrequency_select").hide();
$(".sentFrequency_input").show();
}
});
$('#orgusergroup').on('click',function () {
});
//选择用户
$("#alarmsubscirbe-form-select-users").on("click",function (){
var selObj ={};
//回填订阅用户
var selectedUserTags = $("#selecte_content_id").find("span");
if (selectedUserTags.length > 0){
var userSelIds = new Array();
selectedUserTags.each(function () {
userSelIds.push($(this).data("username"));
});
selObj.userSelIds = userSelIds;
}
//回填订阅部门
var selecteOrgTags = $("#selecte_org_content_id").find("span");
if (selecteOrgTags.length > 0){
var orgSelIds = new Array();
selecteOrgTags.each(function () {
orgSelIds.push($(this).data("id"));
});
selObj.orgSelIds = orgSelIds;
}
//回填订阅组
var selecteGoupTags = $("#selecte_group_content_id").find("span");
if (selecteGoupTags.length > 0){
var groupSelIds = new Array();
selecteGoupTags.each(function () {
groupSelIds.push($(this).data("id"));
});
selObj.groupSelIds = groupSelIds;
}
selectPerson(selObj);
});
//通知时间段拼接字符
function times(timeVal){
var str='';
$.each($('.alarm_subscribe_times'),function (i,v) {
if($('.alarm_subscribe_times').eq(i).val()!=''){
str+=$('.alarm_subscribe_times').eq(i).val()+',';
}else{
timeVal.val=0;
}
})
return str.slice(0,str.length-1);
}
//保存
$("#alarmsubscribe-form-save-id").on("click",function (){
var data = form.val("add-alarmsubscribe-form");
var val=1;
var timeVal={val};
//通知时间段
data.times=times(timeVal);
if(data.times=='' || timeVal.val==0){
layer.msg("请将信息填写完整", {offset: '15px', icon: 7, time: 1500});
return false;
}
var verdict=1;
var timeVals={verdict};
//时间格式判断
if(timeHorizon(data.times,timeVals)==0 || timeVals.verdict==0){
layer.msg("请选择合理的时间范围或时间段", {offset: '15px', icon: 7, time: 1500});
return false;
}
//订阅用户
var selectedTags = $("#selecte_content_id").find("span");
var contents = []
selectedTags.each(function () {
contents.push($(this).data("id"))
receiveUserInfos.push({
username:$(this).data("username"),
nickname:$(this).data("nickname"),
phone:$(this).data("phone"),
operator:$(this).data("operator"),
email:$(this).data("email")
})
});
receiveUser = contents.toString()
data.receiveUser = receiveUser;
data.subUserLists = receiveUserInfos;
//订阅部门
var selectedOrgs = $("#selecte_org_content_id").find("span");
selectedOrgs.each(function () {
receiveOrgInfos.push({
targetId: $(this).data("id")+'',
type: 1
});
});
data.subOrgLists = receiveOrgInfos;
//订阅部门
var selectedGroups = $("#selecte_group_content_id").find("span");
selectedGroups.each(function () {
receiveGroupInfoS.push({
targetId: $(this).data("id")+'',
type: 2
})
});
data.subGroupLists = receiveGroupInfoS;
delete data["sub_send_type"];
form.on('submit(add-alarmsubscribe-form)',function () {
var alrmlevels = [],reportTypes = [];
$('input[name="reportType"]:checked').each(function() {
reportTypes.push($(this).val());
});
$('input[name="alarmLevel"]:checked').each(function() {
alrmlevels.push($(this).val());
});
data.alarmLevel = alrmlevels.toString();
data.reportType = reportTypes.toString();
//通知周期
if($('input[name="sub_send_type"]:checked').val() == "1"){
data.sentFrequency = $("#sentFrequency_select").val();
}else{
data.sentFrequency = $("#sentFrequency_input").val();
}
admin.req({
url : domainName + '/api-web/alarmsubscribe/save?access_token='+accessToken
,data:JSON.stringify(data)
,type:'post'
,contentType: "application/json; charset=utf-8"
,done:function (res){
if(res.success){
localStorage.setItem("detailPageOfcustomSubId",res.str)
layer.msg(res.msg, { offset: '15px' , icon: 1 , time: 1000 },function (){
receiveUserInfos = [];
if(layui.alarmsubscribeIndex && layui.alarmsubscribeIndex()){
layer.closeAll();
layui.alarmsubscribeIndex().reloadsubscribe();
}
});
}else{
layer.msg(res.msg, { offset: '15px' , icon: 7 , time: 1000 });
}
}
});
return false;//必须要写,解决禁用submit提交,ajax方法才能正确执行,且表单不会自动刷新
})
});
//为用户添加资源权限
function selectPerson(selObj) {
var orgusergroup;
layer.open({
title: '订阅绑定信息',
id: 'layer-subscribe-select',
type: 1,
area: ['50%', '80%'],
btn: ['添加', '取消'],
success: function (layero, layerIndex) {
view(this.id).render('/template/user/orgusergroup').done(function () {
orgusergroup = layui.orgusergroup({selObj: selObj}); //传参
});
},
yes: function (index, layero) {
layer.close(index);
var returnValue = orgusergroup.returnValue();
//回填订阅人员
var selectUser = returnValue.selectUser;
// if (selectUser){ //如果有选择用户返回
$('#selecte_content_id').html('');
$.each(selectUser,function (i,v){ //处理元素,满足writeTagsInfo格式
v.nickname = v.name;
v.username = v.value;
writeTagsInfo(v); //将选择的用户回填到
})
// }
//回填订阅部门
var selectOrg = returnValue.selectOrg;
// if (selectOrg){
var divId = 'selecte_org_content_id';
$('#'+divId).html('');
$.each(selectOrg,function (i,v){
writeOrgTagsInfo(v,divId);
})
// }
//回填订阅组
var selectGroup = returnValue.selectGroup;
// if (selectGroup){
var divId = 'selecte_group_content_id';
$('#'+divId).html('');
$.each(selectGroup,function (i,v){
writeOrgTagsInfo(v,divId);
})
// }
form.render();
}
});
}
//写入标签内容
function writeTagsInfo(data) {
var tags = `
<span id="tags_span_${data.id}" data-id="${data.id}" data-username="${data.username}"
data-nickname="${data.nickname}" data-phone="${data.phone}" data-operator="${data.operator}"
data-email="${data.email}"><em>${data.nickname}</em>
<button type="button" value="${data.id}" class="tagsclose close">×</button>
</span>
`;
if(data.username){
//拼接标签
$("#selecte_content_id").append(tags);
//绑定标签的删除事件
bindTagesDelEvent();
}
}
//写入订阅部门或组标签内容
//data:数据 type:org/group
function writeOrgTagsInfo(data,divId) {
var tags = `
<span id="tags_span_${data.value}" data-id="${data.value}" data-name="${data.name}"
><em>${data.name}</em>
<button type="button" value="${data.value}" class="tagsclose close">×</button>
</span>
`;
if(data.value){
//拼接标签
$("#"+divId).append(tags);
//绑定标签的删除事件
bindTagesDelEvent();
}
}
//切换订阅类型
function switchSubType(subType,data) {
var dom = $('form[name="add-alarmsubscribe-form"]');
if (subType == '3'){
dom.find('input[name="sendTotal"]').attr('readonly','readonly').val('1');
dom.find('input[name="sub_send_type"]').attr('disabled','disabled');
dom.find('input[type="radio"][name="sub_send_type"][value="1"]').attr('checked','checked');
dom.find('#sentFrequency_select').attr('disabled','disabled').val('1');
} else {
var sendTotal = '';
var sentFrequency = '1';
if (data) {
sendTotal = data.sendTotal
sentFrequency = data.sentFrequency
}
dom.find('input[name="sendTotal"]').removeAttr('readonly').val(sendTotal);
dom.find('input[name="sub_send_type"]').removeAttr('disabled');
dom.find('#sentFrequency_select').removeAttr('disabled').val(sentFrequency);
}
}
//删除标签事件
function bindTagesDelEvent() {
//删除已选主体的页签
$("button.tagsclose").on("click",function () {
var id = $(this).attr("value");
$("#tags_span_"+id).remove();
});
}
//时间范围判断
function timeHorizon(times,timeVals){
var judge=1;
var list=times.split(',');
if(list.length.length<=1){
return 1;
}
var listTime = [...new Set(list)];
if(list.length-listTime.length>0){
timeVals.verdict=0;
}
$.each(list,function (x,y) {
var beforeTime=dateTime(y.split(' - ')[0]);
var afterTime=dateTime(y.split(' - ')[1]);
//判断时间段是否错误
if(beforeTime>=afterTime){
timeVals.verdict=0;
}
$.each(list,function (i,v) {
if(v!=y){
//获取开始时间
var startTime=dateTime(v.split(' - ')[0]);
//获取结束时间
var overTime=dateTime(v.split(' - ')[1]);
//判断是否在时间段里
if (beforeTime >= startTime && beforeTime <= overTime) {
judge=0;
}
if(afterTime >= startTime && afterTime <= overTime){
judge=0;
}
}
});
});
return judge;
}
//时间格式转换
function dateTime(timeDate){
var split=timeDate.split(":");
var myDate=new Date(2021,6,14,split[0],split[1],split[2]);
return myDate;
}
});
});
\ No newline at end of file
... ...