Showing
24 changed files
with
3985 additions
and
2 deletions
Too many changes to show.
To preserve performance only 24 of 24+ files are displayed.
.gitignore
0 → 100644
1 | +HELP.md | ||
2 | +target/ | ||
3 | +!.mvn/wrapper/maven-wrapper.jar | ||
4 | +!**/src/main/**/target/ | ||
5 | +!**/src/test/**/target/ | ||
6 | + | ||
7 | +### STS ### | ||
8 | +.apt_generated | ||
9 | +.classpath | ||
10 | +.factorypath | ||
11 | +.project | ||
12 | +.settings | ||
13 | +.springBeans | ||
14 | +.sts4-cache | ||
15 | + | ||
16 | +### IntelliJ IDEA ### | ||
17 | +.idea | ||
18 | +*.iws | ||
19 | +*.iml | ||
20 | +*.ipr | ||
21 | + | ||
22 | +### NetBeans ### | ||
23 | +/nbproject/private/ | ||
24 | +/nbbuild/ | ||
25 | +/dist/ | ||
26 | +/nbdist/ | ||
27 | +/.nb-gradle/ | ||
28 | +build/ | ||
29 | +!**/src/main/**/build/ | ||
30 | +!**/src/test/**/build/ | ||
31 | + | ||
32 | +### VS Code ### | ||
33 | +.vscode/ |
1 | -hg-monitor-web-base 基于天津现有功能作为基类 | ||
2 | -hg-monitor-web-new 最新开发版本 | 1 | +>>hg-monitor-web-base 基于天津现有功能作为基类 |
2 | +>>hg-monitor-web-new 最新开发版本 | ||
3 | hg-monitor-web-tj 天津10月后的个性化开发 | 3 | hg-monitor-web-tj 天津10月后的个性化开发 |
4 | 注意事项 版本开发,天津版本的开发可在base中修改,然后将代码复制到hg-monitor-web-tj代码中 | 4 | 注意事项 版本开发,天津版本的开发可在base中修改,然后将代码复制到hg-monitor-web-tj代码中 |
5 | +W |
hg-monitor-web-base/pom.xml
0 → 100644
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
3 | + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
4 | + <modelVersion>4.0.0</modelVersion> | ||
5 | + <parent> | ||
6 | + <groupId>com.honggroup</groupId> | ||
7 | + <artifactId>hg-monitor-web</artifactId> | ||
8 | + <version>0.0.1-SNAPSHOT</version> | ||
9 | + <relativePath/> <!-- lookup parent from repository --> | ||
10 | + </parent> | ||
11 | + <groupId>com.honggroup</groupId> | ||
12 | + <artifactId>hg-monitor-web-base</artifactId> | ||
13 | + <version>0.0.1-SNAPSHOT</version> | ||
14 | + <name>hg-monitor-web-base</name> | ||
15 | + <description>hg-monitor-web-base</description> | ||
16 | + <properties> | ||
17 | + <java.version>1.8</java.version> | ||
18 | + </properties> | ||
19 | + <dependencies> | ||
20 | + <dependency> | ||
21 | + <groupId>org.springframework.boot</groupId> | ||
22 | + <artifactId>spring-boot-starter</artifactId> | ||
23 | + </dependency> | ||
24 | + | ||
25 | + <dependency> | ||
26 | + <groupId>org.springframework.boot</groupId> | ||
27 | + <artifactId>spring-boot-starter-test</artifactId> | ||
28 | + <scope>test</scope> | ||
29 | + </dependency> | ||
30 | + </dependencies> | ||
31 | + | ||
32 | + <build> | ||
33 | + <plugins> | ||
34 | + <plugin> | ||
35 | + <groupId>org.springframework.boot</groupId> | ||
36 | + <artifactId>spring-boot-maven-plugin</artifactId> | ||
37 | + </plugin> | ||
38 | + </plugins> | ||
39 | + </build> | ||
40 | + | ||
41 | +</project> |
1 | +package com.web.config; | ||
2 | + | ||
3 | +import org.springframework.context.annotation.Configuration; | ||
4 | +import org.springframework.core.Ordered; | ||
5 | +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; | ||
6 | +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; | ||
7 | + | ||
8 | +@Configuration | ||
9 | +public class IndexConfig implements WebMvcConfigurer { | ||
10 | + @Override | ||
11 | + public void addViewControllers(ViewControllerRegistry registry) { | ||
12 | + registry.addViewController("/").setViewName("forward:/start/index.html"); | ||
13 | + registry.setOrder(Ordered.HIGHEST_PRECEDENCE); | ||
14 | + } | ||
15 | +} |
1 | +package com.web.controller; | ||
2 | + | ||
3 | +import org.springframework.beans.factory.annotation.Autowired; | ||
4 | +import org.springframework.core.env.AbstractEnvironment; | ||
5 | +import org.springframework.core.env.EnumerablePropertySource; | ||
6 | +import org.springframework.core.env.Environment; | ||
7 | +import org.springframework.core.env.PropertySource; | ||
8 | +import org.springframework.http.ResponseEntity; | ||
9 | +import org.springframework.web.bind.annotation.RequestMapping; | ||
10 | +import org.springframework.web.bind.annotation.RestController; | ||
11 | + | ||
12 | +import java.util.HashMap; | ||
13 | +import java.util.LinkedList; | ||
14 | +import java.util.List; | ||
15 | +import java.util.Map; | ||
16 | +import java.util.regex.Pattern; | ||
17 | + | ||
18 | +@RestController | ||
19 | +@RequestMapping("/config") | ||
20 | +public class ConfigController { | ||
21 | + | ||
22 | + @Autowired | ||
23 | + Environment env; | ||
24 | + | ||
25 | + @RequestMapping("/getConfig") | ||
26 | + public ResponseEntity getConfig(String configName) { | ||
27 | + Map<String, Object> configMap = new HashMap<>(); | ||
28 | + for (PropertySource<?> source : ((AbstractEnvironment) env).getPropertySources()) { | ||
29 | + // 遍历每个配置来源中的配置项 | ||
30 | + if (source instanceof EnumerablePropertySource) { | ||
31 | + for (String name : ((EnumerablePropertySource) source).getPropertyNames()) { | ||
32 | + if (name.startsWith(configName)) { | ||
33 | + String itemName = name.substring(configName.length() + 1); | ||
34 | + configToMap(configMap, name, itemName); | ||
35 | + } | ||
36 | + } | ||
37 | + } | ||
38 | + } | ||
39 | + return ResponseEntity.ok(configMap); | ||
40 | + } | ||
41 | + | ||
42 | + private void configToMap(Map<String, Object> configMap, String configName, String itemName) { | ||
43 | + if (itemName.contains(".")) { | ||
44 | + Map<String, Object> currMap = configMap; | ||
45 | + String[] split = itemName.split("\\."); | ||
46 | + currMap = (Map) currMap.computeIfAbsent(split[0], map -> new HashMap<>()); | ||
47 | + String childName = itemName.substring(split[0].length() + 1); | ||
48 | + configToMap(currMap, configName, childName); | ||
49 | + } else if (Pattern.compile("\\[\\d+]").matcher(itemName).find()) { | ||
50 | + List l = (List) configMap.computeIfAbsent(itemName.replaceAll("\\[\\d+]", ""), map -> new LinkedList<>()); | ||
51 | + l.add(env.getProperty(configName, Object.class)); | ||
52 | + } else { | ||
53 | + configMap.put(itemName, env.getProperty(configName, Object.class)); | ||
54 | + } | ||
55 | + } | ||
56 | +} |
No preview for this file type
1 | +var express = require('express'); | ||
2 | +var app = express(); | ||
3 | +app.use(express.static(__dirname + '/')); | ||
4 | + | ||
5 | +app.use(express.static(__dirname + '/start/')); | ||
6 | + | ||
7 | +app.use(express.static(__dirname + '/demo/start/')); | ||
8 | + | ||
9 | +app.listen(3333); | ||
10 | + | ||
11 | +var c = require('child_process'); | ||
12 | +c.exec('start http://localhost:3333/start/index.html#/'); | ||
13 | +c.exec('start http://localhost:3333/demo/start/index.html'); |
1 | +## commit message | ||
2 | + | ||
3 | +格式约定:`<type>(<scope>): <subject>` (注意冒号后面有空格) | ||
4 | + | ||
5 | +**scope 可选,写不写都可** | ||
6 | + | ||
7 | +### type | ||
8 | + | ||
9 | +`type` 用于说明 commit 的类别 | ||
10 | + | ||
11 | +- **feat / feature**:新增功能 | ||
12 | +- **fix / fixes / fixed / hotfix**:(热)修复 Bug(s) | ||
13 | +- **docs**:修改文档 | ||
14 | +- **style**:仅仅修改了代码样式(空格、缩进)等,不改变代码逻辑 | ||
15 | +- **refactor**:代码重构,未新增任何功能和修复任何 Bug | ||
16 | +- **perf**: 改善性能和用户体验 | ||
17 | +- **resolve / resolves / resolved**: 修复代码合并冲突 | ||
18 | +- **test**:测试用例的修改 | ||
19 | +- **chore**:构建过程或辅助工具的变动(新增依赖库、工具配置等) | ||
20 | +- **revert**: 回滚版本 | ||
21 | +- **ci**: 自动化流程配置修改 | ||
22 | +- **release**: 版本发布 | ||
23 | +- **close / closes / closed**: 关闭 issue(s) | ||
24 | + | ||
25 | +如果 `type` 为 `feat` 和 `fix`,则该 commit 将肯定出现在 Change log 之中。 | ||
26 | + | ||
27 | +### scope(可选) | ||
28 | + | ||
29 | +`scope` 用于说明本次提交所影响的功能模块,视项目的不同而不同。 | ||
30 | + | ||
31 | +必须将内容包含在 `()` 里,里面的模块以 `,` 隔开,最后一项没有逗号。 | ||
32 | + | ||
33 | +### subject | ||
34 | + | ||
35 | +`subject` 是 commit 目的的简短描述,不超过50个字符。 | ||
36 | + | ||
37 | +- 以动词开头,使用第一人称现在时,比如 change,而不是 changed 或 changes | ||
38 | +- 第一个字母小写 | ||
39 | +- 结尾不加句号(.) | ||
40 | + | ||
41 | +### 示例 | ||
42 | + | ||
43 | +``` bash | ||
44 | +~ git commit -m "feat: add a new feature" | ||
45 | +``` | ||
46 | +``` bash | ||
47 | +~ git commit -m "fix(nav): 更正参数拼写错误" | ||
48 | +``` | ||
49 | +``` bash | ||
50 | +~ git commit -m "docs: update README.md" | ||
51 | +``` |
1 | +/** | ||
2 | + layuiAdmin pro 构建 | ||
3 | +*/ | ||
4 | + | ||
5 | +var pkg = require('./package.json'); | ||
6 | +var inds = pkg.independents; | ||
7 | + | ||
8 | +var gulp = require('gulp'); | ||
9 | +var uglify = require('gulp-uglify'); | ||
10 | +var minify = require('gulp-minify-css'); | ||
11 | +var concat = require('gulp-concat'); | ||
12 | +var rename = require('gulp-rename'); | ||
13 | +var replace = require('gulp-replace'); | ||
14 | +var header = require('gulp-header'); | ||
15 | +var del = require('del'); | ||
16 | +var gulpif = require('gulp-if'); | ||
17 | +var minimist = require('minimist'); | ||
18 | +var sass = require('gulp-sass'); | ||
19 | +var autoPreFixer = require('gulp-autoprefixer'); | ||
20 | +sass.compiler = require('node-sass'); | ||
21 | +var px2rem = require('gulp-px2rem'); | ||
22 | + | ||
23 | +//获取参数 | ||
24 | +var argv = require('minimist')(process.argv.slice(2), { | ||
25 | + default: { | ||
26 | + ver: 'all' | ||
27 | + } | ||
28 | +}) | ||
29 | + | ||
30 | + //注释 | ||
31 | + , note = [ | ||
32 | + '/** <%= pkg.name %>-v<%= pkg.version %> <%= pkg.license %> License By <%= pkg.homepage %> */\n <%= js %>' | ||
33 | + , { pkg: pkg, js: ';' } | ||
34 | + ] | ||
35 | + | ||
36 | + , destDir = './dist' //构建的目标目录 | ||
37 | + , releaseDir = '../pack/layuiAdmin.pack/' + pkg.name + '-v' + pkg.version //发行版本目录 | ||
38 | + | ||
39 | + //任务 | ||
40 | + , task = { | ||
41 | + //压缩 JS | ||
42 | + minjs: function () { | ||
43 | + var src = [ | ||
44 | + './src/**/*.js' | ||
45 | + , '!./src/config.js' | ||
46 | + , '!./src/lib/extend/echarts.js' | ||
47 | + ]; | ||
48 | + | ||
49 | + return gulp.src(src).pipe(uglify()) | ||
50 | + .pipe(header.apply(null, note)) | ||
51 | + .pipe(gulp.dest(destDir)); | ||
52 | + } | ||
53 | + | ||
54 | + //压缩 CSS | ||
55 | + , mincss: function () { | ||
56 | + var src = [ | ||
57 | + './src/**/*.css' | ||
58 | + ] | ||
59 | + , noteNew = JSON.parse(JSON.stringify(note)); | ||
60 | + | ||
61 | + | ||
62 | + noteNew[1].js = ''; | ||
63 | + | ||
64 | + return gulp.src(src).pipe(minify({ | ||
65 | + compatibility: 'ie7' | ||
66 | + })).pipe(header.apply(null, noteNew)) | ||
67 | + .pipe(gulp.dest(destDir)); | ||
68 | + } | ||
69 | + | ||
70 | + //复制文件夹 | ||
71 | + , mv: function () { | ||
72 | + gulp.src('./src/config.js') | ||
73 | + .pipe(gulp.dest(destDir)); | ||
74 | + | ||
75 | + gulp.src('./src/lib/extend/echarts.js') | ||
76 | + .pipe(gulp.dest(destDir + '/lib/extend')); | ||
77 | + | ||
78 | + gulp.src([ | ||
79 | + './src/style/**/*', | ||
80 | + '!./src/style/css/**/*', | ||
81 | + ]) | ||
82 | + .pipe(gulp.dest(destDir + '/style')); | ||
83 | + | ||
84 | + return gulp.src('./src/views/**/*') | ||
85 | + .pipe(gulp.dest(destDir + '/views')); | ||
86 | + } | ||
87 | + }; | ||
88 | + | ||
89 | + | ||
90 | +//清理 | ||
91 | +gulp.task('clear', function (cb) { | ||
92 | + return del(['./dist/*'], cb); | ||
93 | +}); | ||
94 | +gulp.task('clearRelease', function (cb) { | ||
95 | + return del(['./json/*', releaseDir], cb); | ||
96 | +}); | ||
97 | + | ||
98 | +gulp.task('minjs', task.minjs); | ||
99 | +gulp.task('mincss', task.mincss); | ||
100 | +gulp.task('mv', task.mv); | ||
101 | + | ||
102 | +gulp.task('src', function () { //命令:gulp src | ||
103 | + return gulp.src('./dev-pro/**/*') | ||
104 | + .pipe(gulp.dest('./src')); | ||
105 | +}); | ||
106 | + | ||
107 | +//构建核心源文件 | ||
108 | +gulp.task('default', ['clear', 'src'], function () { //命令:gulp | ||
109 | + for (var key in task) { | ||
110 | + task[key](); | ||
111 | + } | ||
112 | +}); | ||
113 | + | ||
114 | +//发行 - layuiAdmin 官方使用 | ||
115 | +gulp.task('release', function () { //命令:gulp && gulp release | ||
116 | + | ||
117 | + //复制核心文件 | ||
118 | + gulp.src('./dist/**/*') | ||
119 | + .pipe(gulp.dest(releaseDir + '/dist')); | ||
120 | + | ||
121 | + gulp.src('./src/**/*') | ||
122 | + .pipe(gulp.dest(releaseDir + '/src')); | ||
123 | + | ||
124 | + //复制 json | ||
125 | + gulp.src('./dev/json/**/*') | ||
126 | + .pipe(gulp.dest('./json')) | ||
127 | + .pipe(gulp.dest('./start/json')) | ||
128 | + .pipe(gulp.dest(releaseDir + '/start/json')); | ||
129 | + | ||
130 | + //复制并转义宿主页面 | ||
131 | + gulp.src('./dev/index.html') | ||
132 | + .pipe(replace(/\<\!-- clear s --\>([\s\S]*?)\<\!-- clear e --\>/, '')) | ||
133 | + .pipe(replace('//local.res.layui.com/layui/src', 'layui')) | ||
134 | + .pipe(replace("base: '../dev-pro/'", "base: '../dist/'")) | ||
135 | + .pipe(replace('@@version@@', pkg.version)) | ||
136 | + .pipe(gulp.dest('./start')) | ||
137 | + .pipe(gulp.dest(releaseDir + '/start')); | ||
138 | + | ||
139 | + //复制帮助文件 | ||
140 | + gulp.src([ | ||
141 | + './帮助/*' | ||
142 | + , '!./帮助/说明.txt' | ||
143 | + ]).pipe(gulp.dest(releaseDir + '/帮助')); | ||
144 | + | ||
145 | + gulp.src([ | ||
146 | + './帮助/说明.txt' | ||
147 | + ]).pipe(gulp.dest(releaseDir)); | ||
148 | + | ||
149 | + | ||
150 | + //复制 gulpfile | ||
151 | + gulp.src([ | ||
152 | + 'gulpfile.js' | ||
153 | + , 'package.json' | ||
154 | + ]).pipe(gulp.dest(releaseDir)); | ||
155 | + | ||
156 | + //说明 | ||
157 | + gulp.src('../pack/说明.txt') | ||
158 | + .pipe(gulp.dest('../pack/layuiAdmin.pack')); | ||
159 | + | ||
160 | + //复制 layui | ||
161 | + return gulp.src('../../../../res/layui/rc/**/*') | ||
162 | + .pipe(gulp.dest('./start/layui')) | ||
163 | + .pipe(gulp.dest(releaseDir + '/start/layui')) | ||
164 | +}); | ||
165 | + | ||
166 | +// 编译sass zx | ||
167 | +gulp.task('base', function () { | ||
168 | + gulp.src('src/style/css/scss/**/*.scss') | ||
169 | + .pipe(sass().on('error', sass.logError)) | ||
170 | + .pipe(replace('../../../font', '../font')) | ||
171 | + .pipe(replace('../../../img', '../img')) | ||
172 | + .pipe(replace('../../img', '../img')) | ||
173 | + .pipe(autoPreFixer({ | ||
174 | + overrideBrowserslist: [ | ||
175 | + 'last 2 versions', 'not ie <= 8', 'iOS >= 9', 'Android >= 4.0', 'since 2013' | ||
176 | + ], | ||
177 | + grid: true | ||
178 | + })) | ||
179 | + // .pipe(px2rem({ | ||
180 | + // replace: true, | ||
181 | + // rootValue: 37.5 | ||
182 | + // })) | ||
183 | + .pipe(concat('main.css')) | ||
184 | + .pipe(gulp.dest('src/style/css')); | ||
185 | +}); | ||
186 | + | ||
187 | +gulp.task('w', function () { | ||
188 | + gulp.watch('src/style/css/scss/**/*.scss', ['base']); | ||
189 | +}); |
This diff could not be displayed because it is too large.
1 | +{ | ||
2 | + "name": "layuiAdmin.pro", | ||
3 | + "version": "1.2.1", | ||
4 | + "description": "通用后台管理模板系统", | ||
5 | + "license": "LPPL", | ||
6 | + "author": [ | ||
7 | + "xianxin <xianxin@layui-inc.com>" | ||
8 | + ], | ||
9 | + "scripts": { | ||
10 | + "w": "gulp w", | ||
11 | + "s": "node app.js", | ||
12 | + "sw": "concurrently \"npm run w\" \"npm run s\"" | ||
13 | + }, | ||
14 | + "homepage": "http://www.layui.com/admin/", | ||
15 | + "devDependencies": { | ||
16 | + "chai": "^4.1.1", | ||
17 | + "concurrently": "^4.0.1", | ||
18 | + "del": "^2.2.2", | ||
19 | + "express": "^4.16.3", | ||
20 | + "gulp": "^3.9.1", | ||
21 | + "gulp-autoprefixer": "^6.0.0", | ||
22 | + "gulp-concat": "^2.6.0 ", | ||
23 | + "gulp-header": "^1.8.8", | ||
24 | + "gulp-if": "^2.0.1", | ||
25 | + "gulp-less": "^4.0.1", | ||
26 | + "gulp-minify-css": "^1.2.4", | ||
27 | + "gulp-px2rem": "^1.1.1", | ||
28 | + "gulp-rename": "^1.2.2", | ||
29 | + "gulp-replace": "^0.6.1", | ||
30 | + "gulp-sass": "^4.0.2", | ||
31 | + "gulp-uglify": "^1.5.4", | ||
32 | + "minimist": "^1.2.0", | ||
33 | + "mocha": "^3.2.0", | ||
34 | + "node-sass": "^4.12.0", | ||
35 | + "sinon": "^3.2.1", | ||
36 | + "sinon-chai": "^2.13.0" | ||
37 | + } | ||
38 | +} |
1 | +/*! | ||
2 | +Math.uuid.js (v1.4) | ||
3 | +http://www.broofa.com | ||
4 | +mailto:robert@broofa.com | ||
5 | + | ||
6 | +Copyright (c) 2010 Robert Kieffer | ||
7 | +Dual licensed under the MIT and GPL licenses. | ||
8 | +*/ | ||
9 | + | ||
10 | +/* | ||
11 | + * Generate a random uuid. | ||
12 | + * | ||
13 | + * USAGE: Math.uuid(length, radix) | ||
14 | + * length - the desired number of characters | ||
15 | + * radix - the number of allowable values for each character. | ||
16 | + * | ||
17 | + * EXAMPLES: | ||
18 | + * // No arguments - returns RFC4122, version 4 ID | ||
19 | + * >>> Math.uuid() | ||
20 | + * "92329D39-6F5C-4520-ABFC-AAB64544E172" | ||
21 | + * | ||
22 | + * // One argument - returns ID of the specified length | ||
23 | + * >>> Math.uuid(15) // 15 character ID (default base=62) | ||
24 | + * "VcydxgltxrVZSTV" | ||
25 | + * | ||
26 | + * // Two arguments - returns ID of the specified length, and radix. (Radix must be <= 62) | ||
27 | + * >>> Math.uuid(8, 2) // 8 character ID (base=2) | ||
28 | + * "01001010" | ||
29 | + * >>> Math.uuid(8, 10) // 8 character ID (base=10) | ||
30 | + * "47473046" | ||
31 | + * >>> Math.uuid(8, 16) // 8 character ID (base=16) | ||
32 | + * "098F4D35" | ||
33 | + */ | ||
34 | +(function() { | ||
35 | + // Private array of chars to use | ||
36 | + var CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split(''); | ||
37 | + | ||
38 | + Math.uuid = function (len, radix) { | ||
39 | + var chars = CHARS, uuid = [], i; | ||
40 | + radix = radix || chars.length; | ||
41 | + if (len) { | ||
42 | + // Compact form | ||
43 | + for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random()*radix]; | ||
44 | + } else { | ||
45 | + // rfc4122, version 4 form | ||
46 | + var r; | ||
47 | + | ||
48 | + // rfc4122 requires these characters | ||
49 | + uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'; | ||
50 | + uuid[14] = '4'; | ||
51 | + | ||
52 | + // Fill in random data. At i==19 set the high bits of clock sequence as | ||
53 | + // per rfc4122, sec. 4.1.5 | ||
54 | + for (i = 0; i < 36; i++) { | ||
55 | + if (!uuid[i]) { | ||
56 | + r = 0 | Math.random()*16; | ||
57 | + uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r]; | ||
58 | + } | ||
59 | + } | ||
60 | + } | ||
61 | + return uuid.join(''); | ||
62 | + }; | ||
63 | +})(); |
1 | +/** | ||
2 | + | ||
3 | + @Name:全局配置 | ||
4 | + @Author:贤心 | ||
5 | + @Site:http://www.layui.com/admin/ | ||
6 | + @License:LPPL(layui付费产品协议) | ||
7 | + | ||
8 | + */ | ||
9 | + | ||
10 | +layui.define(['laytpl', 'layer', 'element', 'util'], function(exports){ | ||
11 | + exports('setter', { | ||
12 | + container: 'LAY_app' //容器ID | ||
13 | + ,base: layui.cache.base //记录layuiAdmin文件夹所在路径 | ||
14 | + ,views: layui.cache.base + 'views/' //视图所在目录 | ||
15 | + ,entry: 'index' //默认视图文件名 | ||
16 | + ,engine: '.html' //视图文件后缀名 | ||
17 | + ,pageTabs: true //是否开启页面选项卡功能。单页版不推荐开启 | ||
18 | + | ||
19 | + ,name: ' ' | ||
20 | + ,tableName: 'layuiAdmin' //本地存储表名 | ||
21 | + ,MOD_NAME: 'admin' //模块事件名 | ||
22 | + | ||
23 | + ,debug: true //是否开启调试模式。如开启,接口异常时会抛出异常 URL 等信息 | ||
24 | + | ||
25 | + ,interceptor: true //是否开启未登入拦截 | ||
26 | + | ||
27 | + //自定义请求字段 | ||
28 | + ,request: { | ||
29 | + tokenName: 'access_token' //自动携带 token 的字段名。可设置 false 不携带。 | ||
30 | + } | ||
31 | + | ||
32 | + //自定义响应字段 | ||
33 | + ,response: { | ||
34 | + statusName: 'code' //数据状态的字段名称 | ||
35 | + ,statusCode: { | ||
36 | + ok: 0 //数据状态一切正常的状态码 | ||
37 | + ,logout: 1001 //登录状态失效的状态码 | ||
38 | + } | ||
39 | + ,msgName: 'msg' //状态信息的字段名称 | ||
40 | + ,dataName: 'data' //数据详情的字段名称 | ||
41 | + } | ||
42 | + | ||
43 | + //独立页面路由,可随意添加(无需写参数) | ||
44 | + ,indPage: [ | ||
45 | + '/user/login', //登入页 | ||
46 | + '/page/forward' // 听云访问系统页面 | ||
47 | + ] | ||
48 | + | ||
49 | + //扩展的第三方模块 | ||
50 | + ,extend: [ | ||
51 | + 'lay', | ||
52 | + 'swiper', | ||
53 | + 'jtopo', | ||
54 | + 'echarts', | ||
55 | + 'treeTable', | ||
56 | + 'xmSelect', | ||
57 | + 'formSelects', | ||
58 | + 'codemirror', | ||
59 | + 'matchbrackets', | ||
60 | + 'sockjs', | ||
61 | + 'stomp', | ||
62 | + 'inputTags', | ||
63 | + 'mxClient', | ||
64 | + 'soulTable', | ||
65 | + 'tableFilter', | ||
66 | + 'tableChild', | ||
67 | + 'tableMerge', | ||
68 | + 'excel', | ||
69 | + 'tableEdit', | ||
70 | + 'tableTree', | ||
71 | + 'setStep', | ||
72 | + 'msgTips', | ||
73 | + 'cron', | ||
74 | + 'dropMenu', | ||
75 | + 'shell', | ||
76 | + 'cascader', | ||
77 | + 'md5' | ||
78 | + ] | ||
79 | + | ||
80 | + //主题配置 | ||
81 | + ,theme: { | ||
82 | + //内置主题配色方案 | ||
83 | + color: [{ | ||
84 | + main: '#20222A' //主题色 | ||
85 | + ,selected: '#009688' //选中色 | ||
86 | + ,alias: 'default' //默认别名 | ||
87 | + },{ | ||
88 | + main: '#03152A' | ||
89 | + ,selected: '#3B91FF' | ||
90 | + ,alias: 'dark-blue' //藏蓝 | ||
91 | + },{ | ||
92 | + main: '#2E241B' | ||
93 | + ,selected: '#A48566' | ||
94 | + ,alias: 'coffee' //咖啡 | ||
95 | + },{ | ||
96 | + main: '#50314F' | ||
97 | + ,selected: '#7A4D7B' | ||
98 | + ,alias: 'purple-red' //紫红 | ||
99 | + },{ | ||
100 | + main: '#344058' | ||
101 | + ,logo: '#1E9FFF' | ||
102 | + ,selected: '#1E9FFF' | ||
103 | + ,alias: 'ocean' //海洋 | ||
104 | + },{ | ||
105 | + main: '#3A3D49' | ||
106 | + ,logo: '#2F9688' | ||
107 | + ,selected: '#5FB878' | ||
108 | + ,alias: 'green' //墨绿 | ||
109 | + },{ | ||
110 | + main: '#20222A' | ||
111 | + ,logo: '#F78400' | ||
112 | + ,selected: '#F78400' | ||
113 | + ,alias: 'red' //橙色 | ||
114 | + },{ | ||
115 | + main: '#28333E' | ||
116 | + ,logo: '#AA3130' | ||
117 | + ,selected: '#AA3130' | ||
118 | + ,alias: 'fashion-red' //时尚红 | ||
119 | + },{ | ||
120 | + main: '#24262F' | ||
121 | + ,logo: '#3A3D49' | ||
122 | + ,selected: '#009688' | ||
123 | + ,alias: 'classic-black' //经典黑 | ||
124 | + },{ | ||
125 | + logo: '#226A62' | ||
126 | + ,header: '#2F9688' | ||
127 | + ,alias: 'green-header' //墨绿头 | ||
128 | + },{ | ||
129 | + main: '#344058' | ||
130 | + ,logo: '#0085E8' | ||
131 | + ,selected: '#1E9FFF' | ||
132 | + ,header: '#1E9FFF' | ||
133 | + ,alias: 'ocean-header' //海洋头 | ||
134 | + },{ | ||
135 | + header: '#393D49' | ||
136 | + ,alias: 'classic-black-header' //经典黑 | ||
137 | + },{ | ||
138 | + main: '#50314F' | ||
139 | + ,logo: '#50314F' | ||
140 | + ,selected: '#7A4D7B' | ||
141 | + ,header: '#50314F' | ||
142 | + ,alias: 'purple-red-header' //紫红头 | ||
143 | + },{ | ||
144 | + main: '#28333E' | ||
145 | + ,logo: '#28333E' | ||
146 | + ,selected: '#AA3130' | ||
147 | + ,header: '#AA3130' | ||
148 | + ,alias: 'fashion-red-header' //时尚红头 | ||
149 | + },{ | ||
150 | + main: '#28333E' | ||
151 | + ,logo: '#009688' | ||
152 | + ,selected: '#009688' | ||
153 | + ,header: '#009688' | ||
154 | + ,alias: 'green-header' //墨绿头 | ||
155 | + }] | ||
156 | + | ||
157 | + //初始的颜色索引,对应上面的配色方案数组索引 | ||
158 | + //如果本地已经有主题色记录,则以本地记录为优先,除非请求本地数据(localStorage) | ||
159 | + ,initColorIndex: 1 | ||
160 | + } | ||
161 | + }); | ||
162 | +}); |
1 | +/** | ||
2 | + * @desc 共享存储 | ||
3 | + * @author yh | ||
4 | + * @date 2021/4/23 14:03 | ||
5 | + **/ | ||
6 | +layui.define(['commonDetail','common'], function (exports) { | ||
7 | + var commonDetail = layui.commonDetail; | ||
8 | + var common = layui.common; | ||
9 | + //对外暴露的接口 | ||
10 | + exports('a_cloud_physicshost', function (data) { | ||
11 | + var resId = ''; | ||
12 | + var resType = ''; | ||
13 | + var showFlag = common.getUrlParam("show"); | ||
14 | + if(showFlag && showFlag == '0'){ | ||
15 | + resId = common.getUrlParam("resId"); | ||
16 | + resType = common.getUrlParam("resType"); | ||
17 | + }else{ | ||
18 | + resId = data.resId; | ||
19 | + resType = data.resType; | ||
20 | + } | ||
21 | + | ||
22 | + //基本信息 | ||
23 | + var jbxxKpi = "KPIE13DD9A3,KPI72E7FB4B,KPIF74D9D2B,KPI1635BB9B"; | ||
24 | + //文件系统信息 | ||
25 | + var filesystemkpi = "KPI7AC1664E,KPI449F5365,KPIA91F44E7,KPI98306224,KPIE25925F7"; | ||
26 | + //网络接口信息 | ||
27 | + var interfacekpi = "KPIFABFD741,KPI73C0F7E7,KPIFA92AF2D"; | ||
28 | + //存储信息 | ||
29 | + var storagekpi = "KPIFB844B8B,KPI5E148DBE,KPIE55684DF,KPIDBFA1EE2"; | ||
30 | + | ||
31 | + reload(); | ||
32 | + | ||
33 | + //渲染页面 | ||
34 | + function reload() { | ||
35 | + commonDetail.renderText("a_cloud_physicshost_baseinfo",resId,jbxxKpi); | ||
36 | + //cpu使用率 | ||
37 | + // commonDetail.renderGauge("a_cloud_physicshost_cpurate",resId,"KPI7054BC34",true); | ||
38 | + commonDetail.renderLineCharat("a_cloud_physicshost_cpurate",resId,"KPI7054BC34","CPU使用率","cpu"); | ||
39 | + //内存使用率 | ||
40 | + // commonDetail.renderGauge("a_cloud_physicshost_memeryrate",resId,"KPI31CB8D97",true); | ||
41 | + commonDetail.renderLineCharat("a_cloud_physicshost_memeryrate",resId,"KPI31CB8D97","内存使用率","mem"); | ||
42 | + //文件系统信息 | ||
43 | + commonDetail.renderTable("a_cloud_physicshost_filesystem",false,resId,filesystemkpi,'文件系统信息','filesystem-'); | ||
44 | + //网络接口信息 | ||
45 | + commonDetail.renderTable("a_cloud_physicshost_interface",false,resId,interfacekpi,'网络接口信息','interface-'); | ||
46 | + //存储信息 | ||
47 | + commonDetail.renderTable("a_cloud_physicshost_storage",false,resId,storagekpi,'设备主机信息','storage-'); | ||
48 | + //活动告警 | ||
49 | + commonDetail.renderActiveAlarms("a_cloud_physicshost_alarms",resId); | ||
50 | + } | ||
51 | + | ||
52 | + //定时任务 | ||
53 | + var timer = setInterval(function () { | ||
54 | + reload() | ||
55 | + },commonDetail.timerTime); | ||
56 | + commonDetail.detailTimer.push(timer); | ||
57 | + | ||
58 | + }); | ||
59 | +}); |
1 | +/** 关于系统*/ | ||
2 | +layui.define([ 'table', 'form', 'admin', 'common','sessions','upload'], function (exports) { | ||
3 | + var $ = layui.$; | ||
4 | + var form = layui.form; | ||
5 | + var tree = layui.tree; | ||
6 | + var table = layui.table; | ||
7 | + var admin = layui.admin; | ||
8 | + var common = layui.common; | ||
9 | + var upload = layui.upload; | ||
10 | + //对外暴露的接口 | ||
11 | + exports('aboutSystemIndex', function () { | ||
12 | + var sessions = layui.sessions; | ||
13 | + var accessToken = sessions.getToken().access_token; | ||
14 | + form.render(null, 'aboutSystem-form'); | ||
15 | + | ||
16 | + var documentTable = ''; | ||
17 | + var nodeId = 'id_gf_sysc'; | ||
18 | + //加载文档表格数据 | ||
19 | + renderDocumentTable(); | ||
20 | + //检索事件 | ||
21 | + serachEvent(); | ||
22 | + //上传操作 | ||
23 | + $("#doc_upload").on("click",function () { | ||
24 | + var $content = $("#doc-upload-form"); | ||
25 | + //打开选择文件弹框 | ||
26 | + layer.open({ | ||
27 | + type: 1 | ||
28 | + ,title: "选择文件" //不显示标题栏 | ||
29 | + ,closeBtn: false | ||
30 | + ,area: ['500px', '300px'] | ||
31 | + ,shade: 0.8 | ||
32 | + ,id: 'doc-upload-form-id' //设定一个id,防止重复弹出 | ||
33 | + ,btn: ['上传', '取消'] | ||
34 | + ,content: $content.html() | ||
35 | + ,yes: function(index, layero){ | ||
36 | + if($("#doc-display-file-name").val()){ | ||
37 | + //点击上传按钮 | ||
38 | + $("#doc-upload-actionbtn").trigger("click"); | ||
39 | + }else{ | ||
40 | + layer.msg('请选择要上传的文件!', { | ||
41 | + icon: 7,time:3000 | ||
42 | + }); | ||
43 | + } | ||
44 | + return false; | ||
45 | + } | ||
46 | + }); | ||
47 | + | ||
48 | + var param = {"category":nodeId,"access_token":localStorage.getItem("access_token")}; | ||
49 | + //上传 | ||
50 | + var uploadFile = upload.render({ | ||
51 | + elem: '#doc-display-file-name' | ||
52 | + , url: common.domainName+'/api-web/inspection/document/upload' | ||
53 | + , auto: false | ||
54 | + , accept: 'file' | ||
55 | + , data:param | ||
56 | + , exts: 'xls|doc|pdf|rar|zip|docx|xlsx|txt|jpg|log' | ||
57 | + ,choose: function(obj){ | ||
58 | + var files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列 | ||
59 | + //读取本地文件 | ||
60 | + obj.preview(function(index, file, result){ | ||
61 | + // 验证文件是否合规 | ||
62 | + admin.req({ | ||
63 | + url: common.domainName+'/api-web/inspection/document/check?fileName='+file.name, | ||
64 | + async: false | ||
65 | + }).done(function (res) { | ||
66 | + // 10 文件不符合规则 20 文件不存在 21 文件已存在 | ||
67 | + if(res.data == 20){ | ||
68 | + $("#doc-display-file-name").val(file.name); | ||
69 | + }else{ | ||
70 | + if(res.data == 10){ | ||
71 | + layer.msg('文件名不符合规则!', { | ||
72 | + icon: 7,time:3000 | ||
73 | + }); | ||
74 | + delete files[index]; | ||
75 | + }else{ | ||
76 | + $("#doc-display-file-name").val(file.name); | ||
77 | + layer.msg('检测到该文件已存在,执行上传操作文件将被覆盖!', { | ||
78 | + icon: 7,time:3000 | ||
79 | + }); | ||
80 | + } | ||
81 | + } | ||
82 | + }); | ||
83 | + }); | ||
84 | + } | ||
85 | + ,done: function(res){ | ||
86 | + // 上传成功 | ||
87 | + if(res && res["status"] == 1){ | ||
88 | + delete res["createTime"]; | ||
89 | + // 获取用户信息 | ||
90 | + // res["authUser"] = param["authUser"]; | ||
91 | + res["access_token"] = accessToken; | ||
92 | + res["docType"] ="doc"; | ||
93 | + // 发起保存操作 | ||
94 | + admin.req({ | ||
95 | + url: common.domainName + '/api-web/inspection/document/save', | ||
96 | + async: false, | ||
97 | + type: "post", | ||
98 | + data : res | ||
99 | + }).done(function (res) { | ||
100 | + if(res.data){ | ||
101 | + layer.msg('文档上传成功!', { | ||
102 | + icon: 1,time:2000 | ||
103 | + },function () { | ||
104 | + layer.closeAll(); | ||
105 | + reloadDocTable(nodeId); | ||
106 | + }); | ||
107 | + }else{ | ||
108 | + layer.msg('文档上传失败!', { | ||
109 | + icon: 7,time:2000 | ||
110 | + }); | ||
111 | + } | ||
112 | + }); | ||
113 | + } | ||
114 | + } | ||
115 | + ,error: function(index, upload){ | ||
116 | + // 上传失败 | ||
117 | + layer.msg('文件上传时发生故障,请稍后再试!', { | ||
118 | + icon: 7,time:3000 | ||
119 | + }); | ||
120 | + } | ||
121 | + }); | ||
122 | + //上传请求操作 | ||
123 | + $("#doc-upload-actionbtn").on("click",function(){ | ||
124 | + uploadFile.upload(); | ||
125 | + }) | ||
126 | + }); | ||
127 | + //下载文档 | ||
128 | + $('#doc_download').click(function () { | ||
129 | + var ids = []; | ||
130 | + var data = table.checkStatus('aboutSystem_table').data; | ||
131 | + if (data.length == 0) { | ||
132 | + layer.msg('请选择要下载的文件!', { icon: 7,time:3000 }); | ||
133 | + return false; | ||
134 | + } | ||
135 | + //将选中的报表ID放到集合中 | ||
136 | + $.each(data, function (i, obj) { | ||
137 | + ids.push(obj.id); | ||
138 | + }); | ||
139 | + ids = ids.toString(); | ||
140 | + var path = common.domainName + '/api-web/inspection/document/download?access_token='+accessToken+"&ids="+ids; | ||
141 | + window.open(path); | ||
142 | + | ||
143 | + }); | ||
144 | + | ||
145 | + //关键字检索 | ||
146 | + $('#doc_keyword').keydown(function (e) { | ||
147 | + if (e.keyCode === 13) { | ||
148 | + reloadDocTable(); | ||
149 | + } | ||
150 | + }); | ||
151 | + | ||
152 | + //检索事件 | ||
153 | + function serachEvent() { | ||
154 | + //关键字检索 | ||
155 | + $('#doc_keyword').keydown(function (e) { | ||
156 | + if (e.keyCode === 13) { | ||
157 | + reloadDocTable(); | ||
158 | + } | ||
159 | + }); | ||
160 | + //文档编号 | ||
161 | + $('#doc_code').keydown(function (e) { | ||
162 | + if (e.keyCode === 13) { | ||
163 | + reloadDocTable(); | ||
164 | + } | ||
165 | + }); | ||
166 | + } | ||
167 | + | ||
168 | + //表格数据 | ||
169 | + function renderDocumentTable() { | ||
170 | + documentTable = table.render({ | ||
171 | + elem: '#aboutSystem_table' | ||
172 | + , url: common.domainName + '/api-web/inspection/document/list' | ||
173 | + , where: { | ||
174 | + access_token: accessToken, | ||
175 | + name:$("#doc_keyword").val(), | ||
176 | + docNo:$("#doc_code").val(), | ||
177 | + category:nodeId, | ||
178 | + createUser:'', | ||
179 | + flag: 'true', | ||
180 | + docType:"doc" | ||
181 | + } | ||
182 | + , height: 'full' | ||
183 | + , page: { | ||
184 | + layout: ['count', 'prev', 'page', 'next', 'limit', 'skip'] | ||
185 | + ,theme: '#1E9FFF' | ||
186 | + } | ||
187 | + ,limit: common.limit | ||
188 | + ,limits: common.limits | ||
189 | + , even: true | ||
190 | + , cols: [[ | ||
191 | + {type: 'checkbox',width:50} | ||
192 | + , {field: 'docNo', title: '文档编号', align: 'center',width:150} | ||
193 | + , {field: 'name', title: '文档名称', align: 'left', | ||
194 | + templet: '<div><span data-id="{{d.id}}" data-path="{{d.localPath}}" class="layui-table-link preview-btn">{{d.name}}</span></div>' } | ||
195 | + , {field: 'categoryName', title: '文档类型', align: 'center',width:200} | ||
196 | + , {field: 'createUserName', title: '提交人', align: 'center',width:150} | ||
197 | + , {field: 'createTime', title: '提交时间', align: 'center',width:170 | ||
198 | + ,templet:'<div>{{ layui.util.toDateString(d.createTime, "yyyy-MM-dd HH:mm:ss") }}</div>'} | ||
199 | + , { | ||
200 | + field: 'path', title: '下载', align: 'center',width:100, | ||
201 | + templet:function (v) { | ||
202 | + var url = common.domainName + '/api-web/inspection/document/download?access_token='+accessToken+"&ids="+v.id; | ||
203 | + return '<a class=" layui-table-link" href="'+url+'">下载</a>'; | ||
204 | + } | ||
205 | + } | ||
206 | + ]],done:function () { | ||
207 | + $('.preview-btn').on('click', function () { | ||
208 | + var id = $(this).data('id') | ||
209 | + var localPath = $(this).data('path') | ||
210 | + common.openReport(id,'','','','',1) | ||
211 | + }) | ||
212 | + } | ||
213 | + }); | ||
214 | + } | ||
215 | + //刷新表格 | ||
216 | + function reloadDocTable() { | ||
217 | + documentTable.reload({ | ||
218 | + where: { | ||
219 | + access_token: accessToken, | ||
220 | + name:$("#doc_keyword").val(), | ||
221 | + docNo:$("#doc_code").val(), | ||
222 | + createUser:'', | ||
223 | + category:nodeId, | ||
224 | + flag: 'true', | ||
225 | + docType:"doc" | ||
226 | + } | ||
227 | + }) | ||
228 | + } | ||
229 | + }); | ||
230 | +}); |
1 | +//活动告警 | ||
2 | +layui.define(['table', 'form', 'laydate', 'admin', 'layer', 'laytpl', 'common', 'sessions','commonDetail','soulTable', 'treeTable'], function (exports) { | ||
3 | + var $ = layui.$; | ||
4 | + var form = layui.form; | ||
5 | + var layer = layui.layer; | ||
6 | + var admin = layui.admin; | ||
7 | + var table = layui.table; | ||
8 | + var laydate = layui.laydate; | ||
9 | + var laytpl = layui.laytpl; | ||
10 | + var treeTable = layui.treeTable; | ||
11 | + var common = layui.common; | ||
12 | + var commonDetail=layui.commonDetail; | ||
13 | + var domainName = common.domainName; | ||
14 | + var todayStr = ''; | ||
15 | + //对外暴露的接口 | ||
16 | + exports('activewarning', function () { | ||
17 | + var sessions = layui.sessions; | ||
18 | + var accessToken = sessions.getToken()['access_token']; | ||
19 | + var router = layui.router(); | ||
20 | + var alarmLevel = router.search.level; //告警级别 | ||
21 | + var checkList = common.checkPermission(accessToken); | ||
22 | + var resId = router.search.resId;//资源Id | ||
23 | + var kpiId = router.search.kpiId;//指标Id | ||
24 | + var bizId = router.search.bizId;//业务Id | ||
25 | + var alarmNo = router.search.alarmNo;//告警编号 | ||
26 | + var busIdSelect; | ||
27 | + var busTypeList = []; | ||
28 | + if(!bizId){ | ||
29 | + bizId=''; | ||
30 | + } | ||
31 | + if (resId) { | ||
32 | + resId = decodeURIComponent(resId); | ||
33 | + } | ||
34 | + if (alarmNo) { | ||
35 | + $("#activewarningkw").val(alarmNo); | ||
36 | + } | ||
37 | + var netFlag = router.search.netFlag;//网络标识 | ||
38 | + var resType = router.search.restype ? router.search.restype : '';//资源类型 | ||
39 | + var soulTable = layui.soulTable; | ||
40 | + | ||
41 | + var sortKey = ''; | ||
42 | + | ||
43 | + if ($("#alarmLevelSearchBox").val()) { | ||
44 | + alarmLevel = $("#alarmLevelSearchBox").val() | ||
45 | + } | ||
46 | + //回显告警级别 | ||
47 | + $("#alarmLevelSearchBox").val(alarmLevel); | ||
48 | + form.render("select"); | ||
49 | + | ||
50 | + function initDate() { | ||
51 | + //开始时间 | ||
52 | + var start = laydate.render({ | ||
53 | + elem: '#activewarningStartdate' | ||
54 | + , trigger: 'click' | ||
55 | + , done: function (value, date) { | ||
56 | + date.month--; | ||
57 | + end.config.min = date; | ||
58 | + var endDate = $("#activewarningEnddate").val(); | ||
59 | + if (endDate != null && endDate != "") { | ||
60 | + reloadTable(); | ||
61 | + } | ||
62 | + } | ||
63 | + }); | ||
64 | + //结束时间 | ||
65 | + var end = laydate.render({ | ||
66 | + elem: '#activewarningEnddate' | ||
67 | + , trigger: 'click' | ||
68 | + , done: function (value, date) { | ||
69 | + date.month--; | ||
70 | + start.config.max = date; | ||
71 | + var benginDate = $("#activewarningStartdate").val(); | ||
72 | + if (benginDate != null && benginDate != "") { | ||
73 | + reloadTable(); | ||
74 | + } | ||
75 | + } | ||
76 | + }); | ||
77 | + //绑定业务下拉选择数据 | ||
78 | + admin.req({ | ||
79 | + url: domainName + '/api-web/home/business/findAllBusType', | ||
80 | + success: function (response) { | ||
81 | + if (response && response.success) { | ||
82 | + busTypeList = response.data; | ||
83 | + var bizList = response.data.map(item => { | ||
84 | + return { | ||
85 | + name: item.busTypeName, | ||
86 | + value: item.busId, | ||
87 | + parentId: item.parentId | ||
88 | + } | ||
89 | + }); | ||
90 | + var bizTree=common.pidToChildren(bizList, 'value', 'parentId'); | ||
91 | + | ||
92 | + // 影响业务下拉框 | ||
93 | + busIdSelect = xmSelect.render({ | ||
94 | + el: '#bisTypeSearchBox', | ||
95 | + name: 'bizId', | ||
96 | + tips: '=所属业务=', | ||
97 | + //开启搜索 | ||
98 | + filterable: true, | ||
99 | + clickClose: true, | ||
100 | + initValue: [bizId.split(',')[0]], | ||
101 | + toolbar: { | ||
102 | + show: true, | ||
103 | + list: ['ALL', 'REVERSE', 'CLEAR'] | ||
104 | + }, | ||
105 | + height: 'auto', | ||
106 | + tree: { | ||
107 | + show: true, | ||
108 | + showFolderIcon: true, | ||
109 | + showLine: true, | ||
110 | + strict: true, | ||
111 | + //间距 | ||
112 | + indent: 20, | ||
113 | + }, | ||
114 | + model: { | ||
115 | + label: { | ||
116 | + type: 'text' | ||
117 | + } | ||
118 | + }, | ||
119 | + data: bizTree, | ||
120 | + on: function (data) { | ||
121 | + if (data.arr.length != 0) { | ||
122 | + var str=''; | ||
123 | + $.each(data.arr,function (i,v) { | ||
124 | + str+=v.value+','; | ||
125 | + }) | ||
126 | + bizId = str.substring(0,str.length-1); | ||
127 | + } else { | ||
128 | + bizId = ''; | ||
129 | + } | ||
130 | + form.render(); | ||
131 | + reloadTable(); | ||
132 | + } | ||
133 | + }); | ||
134 | + if(busIdSelect){ | ||
135 | + //追加样式 | ||
136 | + $('#bisTypeSearchBox').find('.xm-body').eq(0).css("width","230px"); | ||
137 | + } | ||
138 | + } else { | ||
139 | + layer.msg('获取业务失败', {icon: 2}); | ||
140 | + } | ||
141 | + }, | ||
142 | + error: function () { | ||
143 | + layer.msg('获取业务失败', {icon: 2}); | ||
144 | + } | ||
145 | + }); | ||
146 | + | ||
147 | + $.ajax({ | ||
148 | + url: common.domainName + '/api-web/manage/kpi/findKpiInAlarm?access_token='+accessToken+'&tableName=b_alarm', | ||
149 | + type: "get", | ||
150 | + success:function (res) { | ||
151 | + var kpis = res.data; | ||
152 | + var html = '<option value="">=指标名称=</option>' | ||
153 | + $.each(kpis,function (i,e) { | ||
154 | + html+='<option value="'+e.kpiId+'">'+e.kpiName+'</option>' | ||
155 | + }) | ||
156 | + $("#alarmKpiSearchBox").html(''); | ||
157 | + $("#alarmKpiSearchBox").append(html); | ||
158 | + form.render(); | ||
159 | + } | ||
160 | + }) | ||
161 | + $.ajax({ | ||
162 | + url: `${common.domainName}/api-web/manage/restype/list?access_token=${accessToken}`, | ||
163 | + method: 'GET', | ||
164 | + success: function (res) { | ||
165 | + // 资源类型下拉框 | ||
166 | + var resTypeList = res.data.map(item => { | ||
167 | + return { | ||
168 | + name: item.resTypeName, | ||
169 | + value: item.resTypeCode, | ||
170 | + parentId: item.parentId | ||
171 | + } | ||
172 | + }); | ||
173 | + var resTypeTree = treeTable.pidToChildren(resTypeList, "value", "parentId"); | ||
174 | + xmSelect.render({ | ||
175 | + el: '#resTypeSearchBox', | ||
176 | + name: "resType", | ||
177 | + tips: '=资源类型=', | ||
178 | + filterable: true, | ||
179 | + radio: true, | ||
180 | + clickClose: true, | ||
181 | + initValue: [resType], | ||
182 | + toolbar: { | ||
183 | + show: true, | ||
184 | + list: ['CLEAR'] | ||
185 | + }, | ||
186 | + tree: { | ||
187 | + show: true, | ||
188 | + showFolderIcon: true, | ||
189 | + showLine: true, | ||
190 | + strict: false, | ||
191 | + indent: 20 | ||
192 | + }, | ||
193 | + model: { | ||
194 | + label: { | ||
195 | + type: 'text' | ||
196 | + } | ||
197 | + }, | ||
198 | + height: 'auto', | ||
199 | + data: resTypeTree, | ||
200 | + on: function (data) { | ||
201 | + if(data.isAdd){ | ||
202 | + if (data.arr.length != 0) { | ||
203 | + resType = data.arr[0].value; | ||
204 | + } else { | ||
205 | + resType = ''; | ||
206 | + } | ||
207 | + reloadTable(); | ||
208 | + } | ||
209 | + } | ||
210 | + }); | ||
211 | + } | ||
212 | + }); | ||
213 | + } | ||
214 | + | ||
215 | + //回车搜索 | ||
216 | + $('#activewarningkw, input[name="durationVal"]').keydown(function (e) { | ||
217 | + if (e.keyCode === 13) { | ||
218 | + reloadTable(); | ||
219 | + } | ||
220 | + }); | ||
221 | + //选择框搜索事件 | ||
222 | + bindSelectEvent(); | ||
223 | + initDate(); | ||
224 | + | ||
225 | + function initToolBarClickEvent() { | ||
226 | + //告警消除 | ||
227 | + $("#clearBtn").unbind('click').on('click', function () { | ||
228 | + if ($.inArray('app:alarm:clear', checkList) == -1) { | ||
229 | + layer.msg('暂无权限!', {icon: 7, time: 3000}); | ||
230 | + return; | ||
231 | + } | ||
232 | + var ids = []; | ||
233 | + var data = table.checkStatus('activewarningTable').data; | ||
234 | + if (data.length == 0) { | ||
235 | + layer.msg('请最少选择一项数据', {icon: 7, time: 2000}); | ||
236 | + return; | ||
237 | + } | ||
238 | + //选中的告警ID放到集合中 | ||
239 | + $.each(data, function (i, obj) { | ||
240 | + ids.push(obj.id) | ||
241 | + }); | ||
242 | + //获取以往告警消除意见 | ||
243 | + admin.req({ | ||
244 | + url: common.domainName + '/api-web/home/alarm/clear/reason', | ||
245 | + type: "get", | ||
246 | + data:{ | ||
247 | + alarmId: ids.toString() | ||
248 | + }, | ||
249 | + done:function (data) { | ||
250 | + var clearReson = "暂无参考处理方案,请输入处理方案"; | ||
251 | + var hisReason = ""; | ||
252 | + var reasonlist = data.reason; | ||
253 | + if(reasonlist && reasonlist.length > 0){ | ||
254 | + hisReason = "参考方案:\n"; | ||
255 | + $.each(reasonlist,function (i,v) { | ||
256 | + var idx = i + 1; | ||
257 | + hisReason += idx +":"+v +"\n"; | ||
258 | + }); | ||
259 | + } | ||
260 | + | ||
261 | + layer.prompt({id: "alarms_clear_id", title: '告警消除', area: ['400px'], formType: 2,value: hisReason}, function (text, index) { | ||
262 | + admin.req({ | ||
263 | + url: common.domainName + '/api-web/home/alarm/clear' | ||
264 | + , type: "post" | ||
265 | + , data: { | ||
266 | + ids: ids.toString(), | ||
267 | + reason: text, | ||
268 | + access_token: accessToken, | ||
269 | + noticeFlag: $('input[name="noticeFlag"]:checked').val() | ||
270 | + } | ||
271 | + , done: function (res) { | ||
272 | + //如果消除成功,关闭弹出框然后重新加载页面 | ||
273 | + if (res.success) { | ||
274 | + layer.close(index); | ||
275 | + layer.msg('告警已消除!', {icon: 1, time: 2000}); | ||
276 | + reloadTable(); | ||
277 | + } else { | ||
278 | + layer.msg('告警消除失败,请与管理员联系!', {icon: 7, time: 3000}); | ||
279 | + } | ||
280 | + } | ||
281 | + }); | ||
282 | + }); | ||
283 | + | ||
284 | + $("#alarms_clear_id").find('textarea.layui-layer-input').attr("placeholder", clearReson); | ||
285 | + $("#alarms_clear_id").append('<div style="padding-top: 15px;"><span>是否通知:</span> ' + | ||
286 | + '<input type="radio" name="noticeFlag" value="true" title="是" > 是' + | ||
287 | + '<input type="radio" name="noticeFlag" value="false" title="否" checked="" style="margin-left: 20px;"> 否</div> '); | ||
288 | + } | ||
289 | + }); | ||
290 | + }); | ||
291 | + //告警关闭 | ||
292 | + $("#closeBtn").unbind('click').on("click", function () { | ||
293 | + if ($.inArray('app:alarm:close', checkList) == -1) { | ||
294 | + layer.msg('暂无权限!', {icon: 7, time: 3000}); | ||
295 | + return; | ||
296 | + } | ||
297 | + var ids = []; | ||
298 | + var data = table.checkStatus('activewarningTable').data; | ||
299 | + var alarmStatus = true; | ||
300 | + if (data.length == 0) { | ||
301 | + layer.msg('请最少选择一项数据', {icon: 7, time: 2000}); | ||
302 | + return; | ||
303 | + } | ||
304 | + //选中的告警ID放到集合中 | ||
305 | + $.each(data, function (i, obj) { | ||
306 | + var status = JSON.stringify(obj.alarmStatus); | ||
307 | + if (status && status == '1') { | ||
308 | + alarmStatus = false; | ||
309 | + } | ||
310 | + ids.push(obj.id) | ||
311 | + }); | ||
312 | + if (!alarmStatus) { | ||
313 | + layer.msg('已关闭的告警不可重复关闭!', {icon: 7, time: 3000}); | ||
314 | + return; | ||
315 | + } | ||
316 | + layer.prompt({ | ||
317 | + id: "alarms_cloes_id", | ||
318 | + formType: 2, | ||
319 | + title: '告警关闭', | ||
320 | + area: ['400px'] | ||
321 | + }, | ||
322 | + function (value, index) { | ||
323 | + if (value === "") { | ||
324 | + layer.msg('请填写关闭意见', {icon: 7, time: 3000}); | ||
325 | + } | ||
326 | + if ($('#closeDuration').val() === "") { | ||
327 | + layer.msg('请填写关闭时长', {icon: 7, time: 3000}); | ||
328 | + return; | ||
329 | + } | ||
330 | + admin.req({ | ||
331 | + url: common.domainName + '/api-web/home/alarm/close' | ||
332 | + , type: "post" | ||
333 | + , data: { | ||
334 | + ids: ids.toString(), | ||
335 | + reason: value, | ||
336 | + duration: $('#closeDuration').val() * 60, | ||
337 | + closeType: $('input[name="closeType"]:checked').val(), | ||
338 | + noticeFlag: $('input[name="noticeFlag"]:checked').val(), | ||
339 | + kpiAllFlag: $('input[name="kpiAllFlag"]:checked').val(), | ||
340 | + access_token: accessToken | ||
341 | + } | ||
342 | + , done: function (res) { | ||
343 | + if (res.success) { | ||
344 | + layer.close(index); | ||
345 | + layer.msg('关闭成功', {icon: 1, time: 2000}, function () { | ||
346 | + reloadTable(); | ||
347 | + }); | ||
348 | + } else { | ||
349 | + layer.msg('告警关闭失败,请与管理员联系!', {icon: 7, time: 3000}); | ||
350 | + } | ||
351 | + } | ||
352 | + }); | ||
353 | + }); | ||
354 | + $("#alarms_cloes_id").find('textarea.layui-layer-input').attr("placeholder", "请输入关闭意见(必填)");// /[^(\d||/.)]/g,'' | ||
355 | + $("#alarms_cloes_id").append('<br/>' + | ||
356 | + '<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="输入关闭时长,单位小时(必填)"/>'); | ||
357 | + | ||
358 | + $("#alarms_cloes_id").append('<br/><div style="line-height: 38px;"><span>关闭类型:</span> ' + | ||
359 | + '<input type="radio" name="closeType" value="0" title="关闭告警" checked=""> 关闭告警' + | ||
360 | + '<input type="radio" name="closeType" value="1" title="关闭通知" style="margin-left: 20px;"> 关闭通知</div> '); | ||
361 | + | ||
362 | + $("#alarms_cloes_id").append('<div style="line-height: 38px;"><span>是否关闭该指标所有告警/通知:</span> ' + | ||
363 | + '<input type="radio" name="kpiAllFlag" value="true" title="是"> 是' + | ||
364 | + '<input type="radio" name="kpiAllFlag" value="false" title="否" checked="" style="margin-left: 20px;"> 否</div> '); | ||
365 | + | ||
366 | + $("#alarms_cloes_id").append('<div style="line-height: 38px;"><span>是否通知:</span> ' + | ||
367 | + '<input type="radio" name="noticeFlag" value="true" title="是"> 是' + | ||
368 | + '<input type="radio" name="noticeFlag" value="false" title="否" checked="" style="margin-left: 20px;"> 否</div> '); | ||
369 | + }); | ||
370 | + //告警确认 | ||
371 | + $("#confirmBtn").unbind('click').on("click", function () { | ||
372 | + if ($.inArray('app:alarm:confirm', checkList) == -1) { | ||
373 | + layer.msg('暂无权限!', {icon: 7, time: 3000}); | ||
374 | + return; | ||
375 | + } | ||
376 | + var ids = []; | ||
377 | + var data = table.checkStatus('activewarningTable').data; | ||
378 | + if (data.length == 0) { | ||
379 | + layer.msg('请最少选择一项数据', {icon: 7, time: 2000}); | ||
380 | + return; | ||
381 | + } | ||
382 | + $.each(data, function (i, obj) { | ||
383 | + ids.push(obj.id) | ||
384 | + }); | ||
385 | + layer.prompt({ | ||
386 | + id: "alarms_confirm_id", | ||
387 | + formType: 2, | ||
388 | + title: '告警确认', | ||
389 | + area: ['400px'] | ||
390 | + }, | ||
391 | + function (value, index) { | ||
392 | + if (value === "") { | ||
393 | + layer.msg('请填确认意见', {icon: 7, time: 3000}); | ||
394 | + } | ||
395 | + admin.req({ | ||
396 | + url: common.domainName + '/api-web/home/alarm/confirm' | ||
397 | + , type: "post" | ||
398 | + , data: { | ||
399 | + ids: ids.toString(), | ||
400 | + reason: value, | ||
401 | + level: $('input[name="confrimlevel"]:checked').val(), | ||
402 | + access_token: accessToken | ||
403 | + } | ||
404 | + , done: function (res) { | ||
405 | + if (res.success) { | ||
406 | + layer.close(index); | ||
407 | + layer.msg('告警确认成功', {icon: 1, time: 2000}, function () { | ||
408 | + reloadTable(); | ||
409 | + }); | ||
410 | + } else { | ||
411 | + layer.msg('告警确认失败,请与管理员联系!', {icon: 7, time: 3000}); | ||
412 | + } | ||
413 | + } | ||
414 | + }); | ||
415 | + }); | ||
416 | + $("#alarms_confirm_id").find('textarea.layui-layer-input').attr("placeholder", "请输入意见(必填)"); | ||
417 | + $("#alarms_confirm_id").append('<br/> ' + | ||
418 | + '<input type="radio" name="confrimlevel" value="0" title="紧急" checked=""> 紧急' + | ||
419 | + '<input type="radio" name="confrimlevel" value="1" title="非常紧急" style="margin-left: 20px;"> 非常紧急' + | ||
420 | + '<input type="radio" name="confrimlevel" value="2" title="不紧急" style="margin-left: 20px;"> 不紧急'); | ||
421 | + }); | ||
422 | + //告警恢复 | ||
423 | + $("#resumeBtn").unbind('click').on("click", function () { | ||
424 | + if ($.inArray('app:alarm:resume', checkList) == -1) { | ||
425 | + layer.msg('暂无权限!', {icon: 7, time: 3000}); | ||
426 | + return; | ||
427 | + } | ||
428 | + var ids = []; | ||
429 | + var closeIds = []; | ||
430 | + var data = table.checkStatus('activewarningTable').data; | ||
431 | + var resumeStatus = true; | ||
432 | + if (data.length == 0) { | ||
433 | + layer.msg('请最少选择一项数据', {icon: 7, time: 2000}); | ||
434 | + return; | ||
435 | + } | ||
436 | + var msg = ""; | ||
437 | + //选中的告警ID放到集合中 | ||
438 | + $.each(data, function (i, obj) { | ||
439 | + var alarmStatus = JSON.stringify(obj.alarmStatus); | ||
440 | + //已关闭的告警才可以恢复,告警状态,0告警,1关闭 | ||
441 | + if (alarmStatus && alarmStatus == '0') { | ||
442 | + resumeStatus = false; | ||
443 | + msg = '只能恢复已关闭状态的告警,请重新选择!'; | ||
444 | + } | ||
445 | + ids.push(obj.id); | ||
446 | + closeIds.push(obj.closeId); | ||
447 | + }); | ||
448 | + if (!resumeStatus) { | ||
449 | + layer.msg(msg, {icon: 7, time: 3000}); | ||
450 | + return; | ||
451 | + } | ||
452 | + layer.prompt({title: '恢复说明(必填)', formType: 2}, function (text, index) { | ||
453 | + admin.req({ | ||
454 | + url: common.domainName + '/api-web/home/alarm/resume' | ||
455 | + , type: "post" | ||
456 | + , data: { | ||
457 | + ids: ids.toString(), | ||
458 | + reason: text, | ||
459 | + closeId: closeIds.toString(), | ||
460 | + resumeType: '0',//0告警关闭,1历史告警 | ||
461 | + access_token: accessToken | ||
462 | + } | ||
463 | + , done: function (res) { | ||
464 | + //如果消除成功,关闭弹出框然后重新加载页面 | ||
465 | + if (res.success) { | ||
466 | + layer.close(index); | ||
467 | + layer.msg('告警已恢复!', {icon: 1, time: 3000}, function () { | ||
468 | + reloadTable(); | ||
469 | + }); | ||
470 | + } else { | ||
471 | + layer.msg('告警恢复失败,请与管理员联系!', {icon: 7, time: 3000}); | ||
472 | + } | ||
473 | + } | ||
474 | + }); | ||
475 | + }) | ||
476 | + }); | ||
477 | + //导出 | ||
478 | + $("#exportAarmBtn").unbind('click').on("click", function () { | ||
479 | + if ($.inArray('app:alarm:export', checkList) == -1) { | ||
480 | + layer.msg('暂无权限!', {icon: 7, time: 3000}); | ||
481 | + return; | ||
482 | + } | ||
483 | + var data = table.checkStatus('activewarningTable').data; | ||
484 | + if (data.length == 0) { | ||
485 | + //确认提示框 | ||
486 | + layer.confirm('当前没选择告警,将全量导出数据,请确认', { | ||
487 | + btn: ['确定', '取消'] //按钮 | ||
488 | + }, function () { | ||
489 | + var url = common.domainName + '/api-web/home/alarm/exportExcel?access_token=' + accessToken; | ||
490 | + window.open(url); | ||
491 | + layer.closeAll(); | ||
492 | + }); | ||
493 | + } else { | ||
494 | + var ids = []; | ||
495 | + //讲选中的告警ID放到集合中 | ||
496 | + $.each(data, function (i, obj) { | ||
497 | + ids.push(obj.id); | ||
498 | + }); | ||
499 | + ids = ids.toString(); | ||
500 | + var url = common.domainName + '/api-web/home/alarm/exportExcel?alarmIds=' + ids + "&access_token=" + accessToken; | ||
501 | + window.open(url) | ||
502 | + } | ||
503 | + }); | ||
504 | + //发送通知 | ||
505 | + $("#sendNoticeBtn").unbind('click').on("click", function () { | ||
506 | + if ($.inArray('app:alarm:sendnotice', checkList) == -1) { | ||
507 | + layer.msg('暂无权限!', {icon: 7, time: 3000}); | ||
508 | + return; | ||
509 | + } | ||
510 | + var ids = []; | ||
511 | + var resIds = []; | ||
512 | + var data = table.checkStatus('activewarningTable').data; | ||
513 | + if (data.length == 0) { | ||
514 | + layer.msg('请最少选择一项数据', {icon: 7, time: 2000}); | ||
515 | + return; | ||
516 | + } | ||
517 | + if (data.length > 1) { | ||
518 | + layer.msg('请最多选择一项数据', {icon: 7, time: 2000}); | ||
519 | + return; | ||
520 | + } | ||
521 | + //将选中的告警ID放到集合中 | ||
522 | + $.each(data, function (i, obj) { | ||
523 | + ids.push(obj.id); | ||
524 | + resIds.push(obj.resId); | ||
525 | + }); | ||
526 | + admin.req({ | ||
527 | + url: common.domainName + '/api-web/home/alarm/subscribe/user/' + resIds.toString() | ||
528 | + , done: function (res) { | ||
529 | + if (res.data && res.data.length > 0) { | ||
530 | + var username = ''; | ||
531 | + var begin = '<div style="padding: 0 5px 0 5px;"><table class="layui-table"><thead>' + | ||
532 | + '<tr><th></th><th>名称</th><th>电话</th><th>邮箱</th></tr></thead><tbody>'; | ||
533 | + var end = '</tbody></table></div>'; | ||
534 | + $.each(res.data, function (i, v) { | ||
535 | + 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>'; | ||
536 | + }); | ||
537 | + //获取告警通知接收人 | ||
538 | + var reciveUsers = begin + username + end; | ||
539 | + layer.open({ | ||
540 | + type: 1 | ||
541 | + , title: "通知接收人" | ||
542 | + , shade: 0.8 | ||
543 | + , area: ['600px', '390px'] | ||
544 | + , id: 'lay_users' //设定一个id,防止重复弹出 | ||
545 | + , content: reciveUsers | ||
546 | + , btn: ['发送', '关闭'] | ||
547 | + , yes: function () { | ||
548 | + var names = []; | ||
549 | + $("input[class='userName']:checked").each(function(i){ | ||
550 | + names.push($(this).attr("data-name")); | ||
551 | + }); | ||
552 | + if(names.length<1){ | ||
553 | + layer.msg('请最少选择一个用户', {icon: 7, time: 2000}); | ||
554 | + return; | ||
555 | + } | ||
556 | + admin.req({ | ||
557 | + url: common.domainName + '/api-web/home/alarm/sendnotice' | ||
558 | + , type: "post" | ||
559 | + , data: { | ||
560 | + ids: ids.toString(), | ||
561 | + names:names.toString(), | ||
562 | + access_token: accessToken | ||
563 | + } | ||
564 | + , done: function (res) { | ||
565 | + layer.closeAll(); | ||
566 | + if (res.success) { | ||
567 | + layer.msg('发送成功', {icon: 1, time: 2000}); | ||
568 | + } else { | ||
569 | + layer.msg('发送失败,稍后再试', {icon: 7, time: 2000}); | ||
570 | + } | ||
571 | + } | ||
572 | + }); | ||
573 | + } | ||
574 | + }); | ||
575 | + } else { | ||
576 | + layer.msg('未获取到接收所选通知的用户!', {icon: 7, time: 2000}); | ||
577 | + } | ||
578 | + } | ||
579 | + }); | ||
580 | + }); | ||
581 | + } | ||
582 | + | ||
583 | + //告警处理及时率 | ||
584 | + getAlarmCount(); | ||
585 | + | ||
586 | + var activeAlarmTable; | ||
587 | + //获取配置的列 | ||
588 | + common.getTableCols({ | ||
589 | + domId: 'activewarningTable', | ||
590 | + moduleId: 'activewarning', | ||
591 | + resType: '' | ||
592 | + },function (retCols) { | ||
593 | + var cols = [ | ||
594 | + {type: 'checkbox', fixed: 'left'} | ||
595 | + , { | ||
596 | + field: 'alarmLevel', title: '级别', align: 'center', width: 120, sort: true, | ||
597 | + templet: ` | ||
598 | + <div> | ||
599 | + {{# if (d.alarmLevel == 3) { | ||
600 | + }} <span class="layui-table-warn" style="width: 100%;">严重</span> {{# | ||
601 | + } else if (d.alarmLevel == 2) { | ||
602 | + }} <span class="layui-table-close" style="width: 100%;">重要</span> {{# | ||
603 | + } else if (d.alarmLevel == 1) { | ||
604 | + }} <span class="layui-table-normal" style="width: 100%;">一般</span> {{# | ||
605 | + } }} | ||
606 | + </div> | ||
607 | + ` | ||
608 | + } | ||
609 | + , { | ||
610 | + field: 'alarmNo', title: '告警编号', align: 'center', width: 140, sort: true, | ||
611 | + } | ||
612 | + , { | ||
613 | + field: 'resName', title: '资源名称', width: 230, sort: true, | ||
614 | + templet:` | ||
615 | + <div> | ||
616 | + {{# if (d.confirmStatus == 0 || d.confirmStatus == null) { }} | ||
617 | + <i lay-tips="新的告警未确认,告警确认后消失!" class="shake iconfont" style="color: red;font-size: 28px;"></i> | ||
618 | + {{# } }} | ||
619 | + <span data-resid="{{d.resId}}" data-restype="{{d.resType}}" data-warn-zymc="{{d.id}}" data-ip="{{d.ip}}" | ||
620 | + data-resname="{{d.resName}}" data-pingenable="{{d.pingEnable}}" class="layui-table-link">{{d.resName}}</span> | ||
621 | + <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> | ||
622 | + </div> | ||
623 | + ` | ||
624 | + } | ||
625 | + , { | ||
626 | + field: 'kpiName', title: '指标名称', align: 'center', width: 120, sort: true, | ||
627 | + templet: ` | ||
628 | + <div> | ||
629 | + {{# | ||
630 | + var kpiName = d.kpiName == 'TYPE'?'ERRPT':d.kpiName; | ||
631 | + if (d.kpiIdent != 1) { | ||
632 | + if(d.isWarning != 1) { | ||
633 | + }} <div>{{kpiName}}</div> {{# | ||
634 | + } else { }} | ||
635 | + <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> | ||
636 | + {{# } | ||
637 | + } else { }} | ||
638 | + <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> | ||
639 | + {{# } | ||
640 | + }} | ||
641 | + </div>` | ||
642 | + } | ||
643 | + , {field: 'alarmContent', title: '告警内容', align: 'center', width: 500} | ||
644 | + , { | ||
645 | + field: 'alarmResource', title: '告警来源', align: 'center', minWidth: 120, templet: `<div> | ||
646 | + {{# if (d.alarmResource == 1) { }} | ||
647 | + <div>华为告警</div> | ||
648 | + {{# } else { }} | ||
649 | + <div>监控系统</div> | ||
650 | + {{# } }} | ||
651 | + </div>` | ||
652 | + } | ||
653 | + , {field: 'updateTime', title: '告警时间', align: 'center', minWidth: 180, sort: true} | ||
654 | + , {field: 'alarmTime', title: '首次告警时间', align: 'center', minWidth: 180, sort: true} | ||
655 | + , {field: 'durationStr', title: '持续时间', align: 'center', width: 190} | ||
656 | + , {field: 'alarmRepeatCnt', title: '告警次数', align: 'center', width: 180} | ||
657 | + , {field: 'nickName', title: '通知人', align: 'center', width: 180} | ||
658 | + , {field: 'adminName', title: '负责人', align: 'center', width: 180} | ||
659 | + , {field: 'noticeTime', title: '通知时间', align: 'center', width: 180, hide: true} | ||
660 | + , { | ||
661 | + title: '操作', align: 'center', minWidth: 100, | ||
662 | + 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>' | ||
663 | + } | ||
664 | + ]; | ||
665 | + | ||
666 | + if (retCols) { | ||
667 | + cols = retCols; | ||
668 | + } | ||
669 | + | ||
670 | + //渲染表格 | ||
671 | + activeAlarmTable = table.render({ | ||
672 | + elem: '#activewarningTable' | ||
673 | + , url: domainName + '/api-web/home/alarm/alarmListPage' | ||
674 | + , id: 'activewarningTable' | ||
675 | + , toolbar: '#activeAlarmtoolbar' //开启头部工具栏,并为其绑定左侧模板 | ||
676 | + , defaultToolbar: ['filter'] | ||
677 | + , where: { | ||
678 | + access_token: accessToken, | ||
679 | + kpiName: $("#activewarningkw").val(), | ||
680 | + busId: bizId, | ||
681 | + resId: resId, | ||
682 | + kpiId: kpiId, | ||
683 | + alarmStatus: $("#alarmStatusSearchBox").val(), | ||
684 | + alarmLevel: alarmLevel, | ||
685 | + confirmStatus: $("#alarmConfirmSearchBox").val(), | ||
686 | + beginTime: $("#activewarningStartdate").val(), | ||
687 | + endTime: $("#activewarningEnddate").val(), | ||
688 | + sortKey: sortKey, | ||
689 | + alarmKpi: $("#alarmKpiSearchBox").val(), | ||
690 | + durationVal: $('#inline-condition-duration input[name="durationVal"]').val(), | ||
691 | + durationUnit: $('#inline-condition-duration select[name="durationUnit"]').val(), | ||
692 | + netFlag: netFlag, | ||
693 | + resType:resType | ||
694 | + } | ||
695 | + , height: 'full-245' | ||
696 | + , cellMinWidth: 80 | ||
697 | + , page: { | ||
698 | + layout: ['count', 'prev', 'page', 'next', 'limit', 'skip'] | ||
699 | + , theme: '#1E9FFF' | ||
700 | + } | ||
701 | + , even: true | ||
702 | + , drag: {toolbar: false} | ||
703 | + , cols: [cols], | ||
704 | + done: function (res, curr, count) { | ||
705 | + soulTable.render(this) | ||
706 | + var groupurl = domainName + '/api-web/home/alarm/countAlarmNumByAlarmLevel?alarmTimeDay=' + todayStr + '&access_token=' + accessToken; | ||
707 | + $.ajax({ | ||
708 | + url: groupurl, | ||
709 | + type: 'get', | ||
710 | + data: { | ||
711 | + access_token: accessToken, | ||
712 | + kpiName: $("#activewarningkw").val(), | ||
713 | + busId: bizId, | ||
714 | + resId: resId, | ||
715 | + kpiId: kpiId, | ||
716 | + alarmStatus: $("#alarmStatusSearchBox").val(), | ||
717 | + alarmLevel: alarmLevel, | ||
718 | + confirmStatus: $("#alarmConfirmSearchBox").val(), | ||
719 | + beginTime: $("#activewarningStartdate").val(), | ||
720 | + endTime: $("#activewarningEnddate").val(), | ||
721 | + sortKey: sortKey, | ||
722 | + alarmKpi: $("#alarmKpiSearchBox").val(), | ||
723 | + durationVal: $('#inline-condition-duration input[name="durationVal"]').val(), | ||
724 | + durationUnit: $('#inline-condition-duration select[name="durationUnit"]').val(), | ||
725 | + netFlag: netFlag, | ||
726 | + resType:resType | ||
727 | + }, | ||
728 | + success: function (res) { | ||
729 | + var map = res.map; | ||
730 | + if (map) { | ||
731 | + layui.use('laytpl', function () { | ||
732 | + var laytpl = layui.laytpl; | ||
733 | + var getTpl = document.getElementById("alarm-count-id-tpl").innerHTML; | ||
734 | + laytpl(getTpl).render(map, function (html) { | ||
735 | + $('#alarm-count-id').html(html); | ||
736 | + }); | ||
737 | + //告警升级量 悬浮提示 | ||
738 | + var alarmUpRate, alarmDealRate; | ||
739 | + $("#alarm_level_up_area_id").hover(function () { | ||
740 | + alarmUpRate = layer.tips("活动告警中升级的告警总量及占比", | ||
741 | + '#alarm_level_up_area_id', {tips: [1]}); | ||
742 | + }, function () { | ||
743 | + layer.close(alarmUpRate); | ||
744 | + }); | ||
745 | + //告警处理及时率 | ||
746 | + $("#alarm_deal_rate_area_id").hover(function () { | ||
747 | + alarmDealRate = layer.tips("活动告警中及时处理的告警量占比", | ||
748 | + '#alarm_deal_rate_area_id', {tips: [1]}); | ||
749 | + }, function () { | ||
750 | + layer.close(alarmDealRate); | ||
751 | + }); | ||
752 | + | ||
753 | + $('[data-warn-zymc]').unbind('click').on('click', function () { | ||
754 | + //先去查找资源有没有权限 | ||
755 | + | ||
756 | + var resId = $(this).data("resid"); | ||
757 | + var resType = $(this).data("restype"); | ||
758 | + var ip = $(this).data("ip") ? $(this).data("ip") : ""; | ||
759 | + var resName = $(this).data("resname"); | ||
760 | + var pingEnable = $(this).data("pingenable"); //获取pingEnable的值 joke add 20200619 | ||
761 | + var resTypeName = ''; | ||
762 | + var adminName = ''; | ||
763 | + var manageIp = ''; | ||
764 | + var collProtocol = ''; | ||
765 | + var sign='false'; | ||
766 | + $.ajax({ | ||
767 | + url: common.domainName + "/api-web/home/resource/findById?resId="+resId + '&access_token='+ accessToken, | ||
768 | + async: false, | ||
769 | + type:'get', | ||
770 | + success: function (res) { | ||
771 | + sign=res.str; | ||
772 | + var data = res.object; | ||
773 | + resType = data.resType; | ||
774 | + adminName = data.adminName; | ||
775 | + manageIp = data.manageIp; | ||
776 | + collProtocol = data.collProtocol; | ||
777 | + resTypeName = data.resTypeName; | ||
778 | + } | ||
779 | + }) | ||
780 | + if(sign=='false'){ | ||
781 | + layer.msg('当前用户暂无此资源权限!', {icon: 7, time: 3000}); | ||
782 | + return false; | ||
783 | + } | ||
784 | + let title = resName; | ||
785 | + if (title && title !== '') { | ||
786 | + title += '|'; | ||
787 | + } | ||
788 | + if (resTypeName && resType !== 'HOST_X86SERVER') { | ||
789 | + title += resTypeName + '|'; | ||
790 | + } | ||
791 | + if (ip) { | ||
792 | + if (resType === 'HOST_X86SERVER') { | ||
793 | + if (collProtocol && (collProtocol.split(",").length > 1 || collProtocol === 'SSH')) { | ||
794 | + title += '应用IP-' + ip + '|'; | ||
795 | + } | ||
796 | + } else { | ||
797 | + title += ip + '|'; | ||
798 | + } | ||
799 | + } | ||
800 | + if (resType === 'HOST_X86SERVER' && collProtocol && collProtocol.indexOf('SNMP') !== -1 ) { | ||
801 | + if (manageIp) { | ||
802 | + title += '管理IP-' + manageIp + '|'; | ||
803 | + } | ||
804 | + } | ||
805 | + if (adminName) { | ||
806 | + title += adminName + '|'; | ||
807 | + } | ||
808 | + if (title.length > 0) { | ||
809 | + title = title.substr(0, title.length - 1); | ||
810 | + } | ||
811 | + if (pingEnable == '2') { //如果pingEnable为2,则进入ping状态详情页面 | ||
812 | + commonDetail.openNewWin('template/detail/pingIndex', title, {'resId': resId}, false); | ||
813 | + } else { //否则进入监控详情页面 | ||
814 | + commonDetail.openDetail(resId, resType, title); | ||
815 | + } | ||
816 | + }); | ||
817 | + | ||
818 | + //指标名称点击事件 | ||
819 | + $('[data-warn-zbmc]').unbind("click").on('click', function () { | ||
820 | + var name = $(this).data("name"); | ||
821 | + var params = { | ||
822 | + resId: $(this).data("resid"), | ||
823 | + kpiId: $(this).data("kpi"), | ||
824 | + flag: $(this).data("flag"), | ||
825 | + name: name, | ||
826 | + warning: $(this).data("warning"), | ||
827 | + ident: $(this).data("ident"), | ||
828 | + trend: $(this).data("trend") | ||
829 | + }; | ||
830 | + common.openLineChart(name, params); | ||
831 | + }); | ||
832 | + | ||
833 | + //告警操作日志 | ||
834 | + $('[data-warn-view]').unbind('click').on('click', function () { | ||
835 | + admin.req({ | ||
836 | + url: common.domainName + '/api-web/home/alarm/info' | ||
837 | + , data: { | ||
838 | + alarmId: $(this).data('warn-view'), | ||
839 | + access_token: accessToken | ||
840 | + } | ||
841 | + }).done(function (res) { | ||
842 | + laytpl($('#warnViewWinTpl').html()).render(res.obj, function (html) { | ||
843 | + layer.open({ | ||
844 | + area: '750px', | ||
845 | + title: ['告警操作信息', 'font-size:18px;'], | ||
846 | + type: 1, | ||
847 | + content: html | ||
848 | + }); | ||
849 | + }); | ||
850 | + }); | ||
851 | + }); | ||
852 | + | ||
853 | + //告警轨迹 | ||
854 | + $('[data-warn-path]').unbind('click').on('click', function () { | ||
855 | + var id = $(this).attr('data-warn-path'); | ||
856 | + var view = layui.view; | ||
857 | + var params = { | ||
858 | + "warnId": id | ||
859 | + }; | ||
860 | + view('commonViewModel').render("template/detail/warn_gj").then(function (res) { | ||
861 | + layer.open({ | ||
862 | + title: ['告警轨迹', 'font-size:18px;'], | ||
863 | + type: 1, | ||
864 | + area: ['900px', '650px'], | ||
865 | + content: laytpl(res.body).render(JSON.stringify(params)) | ||
866 | + }); | ||
867 | + }); | ||
868 | + }); | ||
869 | + | ||
870 | + }); | ||
871 | + //点击严重重要一般统计告警 | ||
872 | + $("#alarm-count-id").find(".warn-count-item").unbind('click').on("click", function () { | ||
873 | + var alarmLevel = $(this).attr("alarm-level"); | ||
874 | + if (alarmLevel != '' && alarmLevel != null && alarmLevel != undefined) { | ||
875 | + $("#alarmLevelSearchBox").val(alarmLevel) | ||
876 | + layui.form.render('select'); | ||
877 | + reloadTable(); | ||
878 | + } else { | ||
879 | + $("#alarmLevelSearchBox").val(""); | ||
880 | + layui.form.render('select'); | ||
881 | + if (alarmLevel === '') { | ||
882 | + reloadTable(); | ||
883 | + } | ||
884 | + } | ||
885 | + }); | ||
886 | + initToolBarClickEvent(); | ||
887 | + //表格排序监听 joke add 20200408 | ||
888 | + table.on('sort(activewarningTable)', function (obj) { | ||
889 | + //有些时候,你可能需要根据当前排序的字段,重新向服务端发送请求,从而实现服务端排序,如: | ||
890 | + if (obj.type != null) { | ||
891 | + sortKey = obj.field + ' ' + obj.type; | ||
892 | + } else { | ||
893 | + sortKey = ''; | ||
894 | + } | ||
895 | + reloadTable('sort'); | ||
896 | + }) | ||
897 | + } | ||
898 | + } | ||
899 | + }) | ||
900 | + | ||
901 | + //触发拖动列事件,参数为保存按钮的id | ||
902 | + common.dragCols("activewarning_cols_save"); | ||
903 | + | ||
904 | + //保存列顺序 | ||
905 | + $("#activewarning_cols_save").unbind("click").on("click", function () { | ||
906 | + var params = { | ||
907 | + domId: 'activewarningTable', | ||
908 | + moduleId: 'activewarning', | ||
909 | + resType: '', | ||
910 | + cols: JSON.stringify(activeAlarmTable.config.cols) | ||
911 | + } | ||
912 | + common.saveTableCols(params); | ||
913 | + }); | ||
914 | + resTopo(); | ||
915 | + } | ||
916 | + }); | ||
917 | + }); | ||
918 | + | ||
919 | + //绑定下拉搜索事件 | ||
920 | + function bindSelectEvent() { | ||
921 | + //选择业务搜索 | ||
922 | + form.on('select(bisTypeSearch)', function (data) { | ||
923 | + bizId = data.value; | ||
924 | + reloadTable(); | ||
925 | + }); | ||
926 | + //选择业务搜索 | ||
927 | + form.on('select(alarmKpiSearch)', function (data) { | ||
928 | + reloadTable(); | ||
929 | + }); | ||
930 | + // 告警状态 | ||
931 | + form.on('select(alarmStatusSearch)', function (data) { | ||
932 | + reloadTable(); | ||
933 | + }); | ||
934 | + //告警级别 | ||
935 | + form.on('select(alarmLevelSearch)', function (data) { | ||
936 | + reloadTable(); | ||
937 | + }); | ||
938 | + // 告警确认 | ||
939 | + form.on('select(alarmConfirmSearch)', function (data) { | ||
940 | + reloadTable(); | ||
941 | + }); | ||
942 | + } | ||
943 | + | ||
944 | + $("#todayOrAllBtn").unbind().on("click",function () { | ||
945 | + var $that = $(this); | ||
946 | + var str = $(this).text(); | ||
947 | + if(str.indexOf("今日") > -1){ | ||
948 | + $that.text("全部告警") | ||
949 | + todayStr = common.getToday('day'); | ||
950 | + }else{ | ||
951 | + todayStr = '' | ||
952 | + $that.text("今日告警") | ||
953 | + } | ||
954 | + reloadTable(); | ||
955 | + }) | ||
956 | + | ||
957 | + | ||
958 | + //刷新表格 | ||
959 | + function reloadTable(type) { | ||
960 | + if (type != 'sort'){ | ||
961 | + sortKey = ''; | ||
962 | + } | ||
963 | + activeAlarmTable.reload({ | ||
964 | + page: { | ||
965 | + curr: 1 | ||
966 | + } | ||
967 | + ,where: { | ||
968 | + access_token: accessToken, | ||
969 | + kpiName: $("#activewarningkw").val(), | ||
970 | + busId: bizId, | ||
971 | + resId: resId, | ||
972 | + kpiId: kpiId, | ||
973 | + alarmStatus: $("#alarmStatusSearchBox").val(), | ||
974 | + alarmLevel: $("#alarmLevelSearchBox").val(), | ||
975 | + confirmStatus: $("#alarmConfirmSearchBox").val(), | ||
976 | + beginTime: $("#activewarningStartdate").val(), | ||
977 | + endTime: $("#activewarningEnddate").val(), | ||
978 | + sortKey: sortKey, | ||
979 | + alarmKpi: $("#alarmKpiSearchBox").val(), | ||
980 | + durationVal: $('#inline-condition-duration input[name="durationVal"]').val(), | ||
981 | + durationUnit: $('#inline-condition-duration select[name="durationUnit"]').val(), | ||
982 | + alarmTimeDay:todayStr, | ||
983 | + resType:resType | ||
984 | + } | ||
985 | + }); | ||
986 | + } | ||
987 | + | ||
988 | + //获取告警统计信息 | ||
989 | + function getAlarmCount() { | ||
990 | + admin.req({ | ||
991 | + url: common.domainName + "/api-web/home/alarm/countByAlarmLevel" | ||
992 | + , type: "get" | ||
993 | + , done: function (data) { | ||
994 | + var alarms = data.data; | ||
995 | + if (data.code == 0) { | ||
996 | + $.each(alarms, function (i, v) { | ||
997 | + if (v.alarmLevel == 5) {//及时率 | ||
998 | + $("#alarm_dealRate").html(v.alarmNum + "%"); | ||
999 | + } | ||
1000 | + }); | ||
1001 | + } else { | ||
1002 | + console.error("接口请求失败") | ||
1003 | + console.log(data.msg); | ||
1004 | + } | ||
1005 | + } | ||
1006 | + }) | ||
1007 | + } | ||
1008 | + | ||
1009 | + form.render(null, 'activewarning-form'); | ||
1010 | + //60秒倒计时 | ||
1011 | + (function () { | ||
1012 | + var autoBtn = $('#activewarningAutoFlush'); | ||
1013 | + var timer = null; | ||
1014 | + | ||
1015 | + function autoFlush(target) { | ||
1016 | + var el = target.find('span'); | ||
1017 | + var checked = target.find('input').prop('checked'); | ||
1018 | + localStorage.setItem('alarm_auto__flush', checked); | ||
1019 | + function fn() { | ||
1020 | + var second = el.data('second'); | ||
1021 | + var checked = target.find('input').prop('checked'); | ||
1022 | + if (!checked) { | ||
1023 | + return; | ||
1024 | + } | ||
1025 | + --second; | ||
1026 | + el.data('second', second); | ||
1027 | + el.html(second + '秒'); | ||
1028 | + | ||
1029 | + timer = setTimeout(fn, 1000); | ||
1030 | + if (second <= 0) { | ||
1031 | + clearTimeout(timer); | ||
1032 | + reloadTable() | ||
1033 | + $(el).data('second', 60); | ||
1034 | + $(el).text("60秒"); | ||
1035 | + fn(); | ||
1036 | + } | ||
1037 | + } | ||
1038 | + if (checked) { | ||
1039 | + timer = setTimeout(fn, 1000); | ||
1040 | + } else { | ||
1041 | + clearTimeout(timer); | ||
1042 | + } | ||
1043 | + } | ||
1044 | + form.on("checkbox(warnActiveAutoFlush)",function (data) { | ||
1045 | + autoFlush(autoBtn); | ||
1046 | + }) | ||
1047 | + /*autoBtn.change(function () { | ||
1048 | + autoFlush(autoBtn); | ||
1049 | + });*/ | ||
1050 | + var auto = localStorage.getItem('alarm_auto__flush') | ||
1051 | + auto = auto ? auto : false; | ||
1052 | + autoBtn.find('input').prop('checked', auto); | ||
1053 | + | ||
1054 | + autoFlush(autoBtn); | ||
1055 | + | ||
1056 | + admin.on('hash(*)', function (router) { | ||
1057 | + if (router.href === '/activewarning') { | ||
1058 | + autoFlush(autoBtn); | ||
1059 | + } else { | ||
1060 | + clearTimeout(timer); | ||
1061 | + } | ||
1062 | + }); | ||
1063 | + })(); | ||
1064 | + | ||
1065 | + function resTopo() { | ||
1066 | + | ||
1067 | + //绑定鼠标移入移出事件 | ||
1068 | + $('table tr').hover(function (obj) { | ||
1069 | + $(obj.currentTarget).find('.reslist-view-topo').removeClass('hide'); | ||
1070 | + }, function (obj) { | ||
1071 | + $(obj.currentTarget).find('.reslist-view-topo').addClass('hide'); | ||
1072 | + }) | ||
1073 | + | ||
1074 | + // 加入/移出收藏夹 | ||
1075 | + $('a.reslist-view-topo').unbind('click').on('click', function () { | ||
1076 | + common.viewResTopo($(this).data('resid')); | ||
1077 | + }); | ||
1078 | + | ||
1079 | + } | ||
1080 | + }); | ||
1081 | +}); |
1 | +//告警策略 | ||
2 | +layui.define(['form', 'admin', 'laydate', 'common','sessions','reskpilist'], function (exports) { | ||
3 | + var $ = layui.$; | ||
4 | + var form = layui.form; | ||
5 | + var laydate = layui.laydate; | ||
6 | + var admin = layui.admin; | ||
7 | + var common = layui.common; | ||
8 | + var domainName = common.domainName; | ||
9 | + | ||
10 | + //对外暴露的接口 | ||
11 | + exports('alarmpolicyAdd', function (data) { | ||
12 | + var sessions = layui.sessions; | ||
13 | + var accessToken = sessions.getToken()['access_token']; | ||
14 | + console.log(data) | ||
15 | + form.render(null, 'add-alarmpolicy-form'); | ||
16 | + //初始化日期组件 | ||
17 | + laydate.render({ | ||
18 | + elem: '#seriousTimes' | ||
19 | + ,type: 'time' | ||
20 | + ,range: true | ||
21 | + }); | ||
22 | + laydate.render({ | ||
23 | + elem: '#importantTimes' | ||
24 | + ,type: 'time' | ||
25 | + ,range: true | ||
26 | + }); | ||
27 | + laydate.render({ | ||
28 | + elem: '#commonlyTimes' | ||
29 | + ,type: 'time' | ||
30 | + ,range: true | ||
31 | + }); | ||
32 | + var resType = localStorage.getItem("currentResType"); | ||
33 | + //编辑 | ||
34 | + if(data && data.id){ | ||
35 | + admin.req({ | ||
36 | + url:domainName + '/api-web/alarmPolicy/getbyId/'+data.id | ||
37 | + ,done:function (res){ | ||
38 | + exprToChar(res.object, 'alarmContentExpr'); | ||
39 | + exprToChar(res.object, 'cleanPolicy'); | ||
40 | + exprToChar(res.object, 'commonlyExpr'); | ||
41 | + exprToChar(res.object, 'importantExpr'); | ||
42 | + exprToChar(res.object, 'seriousExpr'); | ||
43 | + form.val("add-alarmpolicy-form",res.object); | ||
44 | + $("#alarm-policy-kpiName").val(res.object.kpiId +" "+ res.object.kpiName); | ||
45 | + $("#seriousTimes").val(res.object.seriousTimes); | ||
46 | + $("#importantTimes").val(res.object.importantTimes); | ||
47 | + $("#commonlyTimes").val(res.object.commonlyTimes); | ||
48 | + $("#alarmPolicyType").val(res.object.policyType); | ||
49 | + } | ||
50 | + }); | ||
51 | + }else{ | ||
52 | + $("#seriousTimes").val('00:00:00 - 23:59:59'); | ||
53 | + $("#importantTimes").val('00:00:00 - 23:59:59'); | ||
54 | + $("#commonlyTimes").val('00:00:00 - 23:59:59'); | ||
55 | + } | ||
56 | + $('#btn-alarmpolicy-expr-add').unbind('click').on('click', function () { | ||
57 | + editNoticeExpr(); | ||
58 | + return false; | ||
59 | + }); | ||
60 | + //全天 | ||
61 | + $(".allday").on("click",function (){ | ||
62 | + var id = $(this).data("flag"); | ||
63 | + $("#"+id).val('00:00:00 - 23:59:59'); | ||
64 | + }); | ||
65 | + //工作时间 | ||
66 | + $(".worktime").on("click",function (){ | ||
67 | + var id = $(this).data("flag"); | ||
68 | + $("#"+id).val('08:00:00 - 19:59:59'); | ||
69 | + }); | ||
70 | + $('.noticeExpr').unbind('click').on('click', function () { | ||
71 | + var id = $(this).prop('id'); | ||
72 | + var alarmTimes = ''; | ||
73 | + if (['seriousExpr', 'importantExpr', 'commonlyExpr'].includes(id)) { | ||
74 | + id = id.substring(0, id.length - 4); | ||
75 | + alarmTimes = $('#' + id + 'Times').val(); | ||
76 | + } | ||
77 | + editNoticeExpr($(this).val(), alarmTimes, id); | ||
78 | + }); | ||
79 | + //指标信息 | ||
80 | + if(data.kpiId){ | ||
81 | + $("#alarm-policy-kpiId").val(data.kpiId); | ||
82 | + $("#alarm-policy-kpiName").val(data.kpiId + " " + data.name); | ||
83 | + } | ||
84 | + | ||
85 | + //告警规则类型切换事件 | ||
86 | + form.on('radio(alarm-policy-rule-type)', function (data) { | ||
87 | + var flag = $(data.elem).data("flag"); | ||
88 | + if(data.value == '1'){ | ||
89 | + $(`.${flag}-tab-item`).find("div.cont-base").show(); | ||
90 | + }else{ | ||
91 | + $(`.${flag}-tab-item`).find("div.cont-base").hide(); | ||
92 | + $(`#${flag}Policy`).val(''); | ||
93 | + } | ||
94 | + }); | ||
95 | + //选择指标 | ||
96 | + $("#alarmpolicy-form-select-kpi, #alarm-policy-kpiName").unbind('click').on("click",function (){ | ||
97 | + common.openWin("template/res/reskpilist","选择指标", {resType:null},["选择","取消"], function () { | ||
98 | + var data = layui.reskpilist().getData(); | ||
99 | + if(data && data.length != 1){ | ||
100 | + layer.msg('只能选择一个指标!', {icon: 7,time:3000}); | ||
101 | + return false; | ||
102 | + } | ||
103 | + if(data && data.length > 0){ | ||
104 | + $("#alarm-policy-kpiId").val(data[0].kpiId); | ||
105 | + $("#alarm-policy-kpiName").val(data[0].kpiId + " " + data[0].kpiName); | ||
106 | + $("#alarmPolicyName").val(data[0].kpiName + "告警策略"); | ||
107 | + | ||
108 | + var arry = [ "base", "cpu", "mem"]; | ||
109 | + return true; | ||
110 | + } | ||
111 | + }); | ||
112 | + }); | ||
113 | + | ||
114 | + //增加一行策略表达式输入框 | ||
115 | + $("i.policy-input-add").off("click").on("click",function (){ | ||
116 | + var id = $(this).data("id"); | ||
117 | + clonePolicyDoms(id); | ||
118 | + }); | ||
119 | + //删除告警策略规则行 | ||
120 | + $("i.policy-input-del").on("click",function (){ | ||
121 | + var id = $(this).data("id"); | ||
122 | + $(`#${id}`).remove(); | ||
123 | + }); | ||
124 | + | ||
125 | + | ||
126 | + //生成策略 | ||
127 | + $("a.createpolicybtn").on("click",function (){ | ||
128 | + var kpiId = $("#alarm-policy-kpiId").val(); | ||
129 | + if(!kpiId){ | ||
130 | + layer.msg("请先选择指标!", { | ||
131 | + icon: 7 | ||
132 | + , time: 3000 | ||
133 | + }); | ||
134 | + return false; | ||
135 | + } | ||
136 | + var policyFlag = $(this).data("flag"); | ||
137 | + var conOjb = {"0":">","1":"<","2":"=","3":">=","4":"<=","5":"equals","6":"contains","7":"startsWith","8":"endsWith"}; | ||
138 | + var doms = $(`[id^=${policyFlag}-policy-box]`); | ||
139 | + var policyStr = ''; | ||
140 | + $(doms).each(function(i,v){ | ||
141 | + var domId = $(v).attr("id"); | ||
142 | + if(domId.indexOf("condition") != -1){//条件 | ||
143 | + var open = $(v).find('.layui-form-switch').hasClass("layui-form-onswitch"); | ||
144 | + if(open){ policyStr += "||" }else{ policyStr += "&&" } | ||
145 | + }else{ //值 | ||
146 | + var conditon = $(v).find("."+policyFlag+"_condition").val(); | ||
147 | + var cls = policyFlag +"_value"; | ||
148 | + var conval = $(v).find('[flag="'+cls+'"]').val().trim(); | ||
149 | + if(conval){ | ||
150 | + if(conditon < 5){ //数字类的 | ||
151 | + policyStr += `Double.parseDouble([${kpiId},kpiValue])${conOjb[conditon]}${conval}`; | ||
152 | + }else{ //字符串类的 | ||
153 | + policyStr += `[${kpiId},kpiValue].${conOjb[conditon]}("${conval}")`; | ||
154 | + } | ||
155 | + } | ||
156 | + } | ||
157 | + }); | ||
158 | + if(policyStr){ | ||
159 | + $(`#${policyFlag}Policy`).val(policyStr); | ||
160 | + }else{ | ||
161 | + layer.msg("请先输入策略值!", { | ||
162 | + icon: 7 | ||
163 | + , time: 3000 | ||
164 | + }); | ||
165 | + return false; | ||
166 | + } | ||
167 | + }); | ||
168 | + | ||
169 | + //保存策略 | ||
170 | + $("#alarmpolicy-form-save-id").on("click",function (){ | ||
171 | + var data = form.val("add-alarmpolicy-form"); | ||
172 | + //移除非数进性的属性 | ||
173 | + delete data['serious-policy-type']; | ||
174 | + delete data['important-policy-type']; | ||
175 | + delete data['commonly-policy-type']; | ||
176 | + delete data['filter-policy-type']; | ||
177 | + delete data['commonly-policy-type']; | ||
178 | + delete data['alarmcotent-policy-type']; | ||
179 | + data.seriousTimes = $("#seriousTimes").val(); | ||
180 | + data.importantTimes = $("#importantTimes").val(); | ||
181 | + data.commonlyTimes = $("#commonlyTimes").val(); | ||
182 | + | ||
183 | + charToExpr(data, 'alarmContentExpr'); | ||
184 | + charToExpr(data, 'cleanPolicy'); | ||
185 | + charToExpr(data, 'commonlyExpr'); | ||
186 | + charToExpr(data, 'importantExpr'); | ||
187 | + charToExpr(data, 'seriousExpr'); | ||
188 | + | ||
189 | + form.on('submit(add-alarmpolicy-form)',function () { | ||
190 | + admin.req({ | ||
191 | + url : domainName + '/api-web/alarmPolicy/save?access_token='+accessToken | ||
192 | + ,data:JSON.stringify(data) | ||
193 | + ,type:'post' | ||
194 | + ,contentType: "application/json; charset=utf-8" | ||
195 | + ,done:function (res){ | ||
196 | + if(res.success){ | ||
197 | + localStorage.setItem("detailPageOfcustomPolicyId",res.str) | ||
198 | + layer.msg(res.msg, { offset: '15px' , icon: 1 , time: 1000 },function (){ | ||
199 | + localStorage.removeItem("currentResType"); | ||
200 | + if(layui.alarmpolicyIndex && layui.alarmpolicyIndex()){ | ||
201 | + layui.alarmpolicyIndex().reloadAlarmPolicy() | ||
202 | + } | ||
203 | + }); | ||
204 | + }else{ | ||
205 | + layer.msg(res.msg, { offset: '15px' , icon: 7 , time: 1000 }); | ||
206 | + } | ||
207 | + } | ||
208 | + }); | ||
209 | + | ||
210 | + return false;//必须要写,解决禁用submit提交,ajax方法才能正确执行,且表单不会自动刷新 | ||
211 | + }) | ||
212 | + }); | ||
213 | + | ||
214 | + //克隆告警策略元素 | ||
215 | + function clonePolicyDoms(id){ | ||
216 | + var times = new Date().getTime() | ||
217 | + var cond = `<div class="layui-form-item cont-base" id="${id}-${times}-condition"> | ||
218 | + <input type="checkbox" checked="" lay-skin="switch" lay-text="或|且"> | ||
219 | + </div>`; | ||
220 | + var clone = $(`#${id}`).clone(); | ||
221 | + clone.attr("id",id+"-"+times).find("i.policy-input-add").addClass("hide") | ||
222 | + .parent().parent().find("i.policy-input-del").attr("data-id",id + "-"+times).removeClass("hide") | ||
223 | + .parent().parent().find("input.layui-input").val(""); | ||
224 | + $(`#${id}`).after(clone).after(cond); | ||
225 | + | ||
226 | + form.render(); | ||
227 | + //渲染新增事件 | ||
228 | + $("i.policy-input-add").off("click").on("click",function (){ | ||
229 | + clonePolicyDoms($(this).data("id")); | ||
230 | + }); | ||
231 | + //删除告警策略规则行 | ||
232 | + $("i.policy-input-del").off("click").on("click",function (){ | ||
233 | + var id = $(this).data("id"); | ||
234 | + $(`#${id}`).remove(); | ||
235 | + $(`#${id}-condition`).remove(); | ||
236 | + }); | ||
237 | + } | ||
238 | + | ||
239 | + function editNoticeExpr(noticeExpr, alarmTimes, noticeType) { | ||
240 | + var title = `<a class="layui-icon layui-icon-edit win_title_icon"></a>编辑通知表达式`; | ||
241 | + common.openWin('baseconfig/alarmpolicy/noticeExprEdit', title, { | ||
242 | + noticeExpr, | ||
243 | + alarmTimes, | ||
244 | + noticeType | ||
245 | + }, ['保存', '取消'], function (index) { | ||
246 | + $("#btn-noticeExpr-submit").click(); | ||
247 | + }, null, ['70%', '80%'], function (layero, index) { | ||
248 | + $("#btn-noticeExpr-submit").data('layerindex', index); | ||
249 | + }); | ||
250 | + } | ||
251 | + | ||
252 | + function exprToChar(obj, varName) { | ||
253 | + obj[varName] = obj[varName].replace(/\[\[br]]/g, '\n').replace(/\[\[tab]]/g, '\t'); | ||
254 | + } | ||
255 | + | ||
256 | + function charToExpr(obj, varName) { | ||
257 | + obj[varName] = obj[varName].replace(/\n/g, '[[br]]').replace(/\t/g, '[[tab]]'); | ||
258 | + } | ||
259 | + | ||
260 | + //如果是详情页过来的,则不能改变指标和默认状态 | ||
261 | + if (data && data.from === 'detail') { | ||
262 | + $("#alarmpolicy-form-select-kpi, #alarm-policy-kpiName").off('click'); | ||
263 | + $('#add-alarmpolicy-form').find('[name="policyType"]').attr("disabled","disabled"); | ||
264 | + } | ||
265 | + }); | ||
266 | +}); |
1 | +//告警策略 | ||
2 | +layui.define(['form', 'admin', 'laydate', 'common', 'sessions', 'reskpilist', 'table'], function (exports) { | ||
3 | + var $ = layui.$; | ||
4 | + var form = layui.form; | ||
5 | + var laydate = layui.laydate; | ||
6 | + var admin = layui.admin; | ||
7 | + var table = layui.table; | ||
8 | + var common = layui.common; | ||
9 | + var domainName = common.domainName; | ||
10 | + | ||
11 | + //对外暴露的接口 | ||
12 | + exports('alarmpolicyEdit', function (data) { | ||
13 | + var sessions = layui.sessions; | ||
14 | + var accessToken = sessions.getToken()['access_token']; | ||
15 | + | ||
16 | + var policyId = (data && data.id) ? data.id : ''; | ||
17 | + var policy = { | ||
18 | + resType: '', | ||
19 | + busId: '' | ||
20 | + }; | ||
21 | + | ||
22 | + var typeList = ['serious']; | ||
23 | + var timeSlotList = [] | ||
24 | + | ||
25 | + common.resTypeXmSelect({ | ||
26 | + el: '#slt-alarmpolicy-restype', | ||
27 | + name: 'resType' | ||
28 | + }); | ||
29 | + | ||
30 | + common.busTreeSelect({ | ||
31 | + el: '#slt-alarmpolicy-bustype', | ||
32 | + tips: '=业务类型=', | ||
33 | + name: 'busId', | ||
34 | + tree: { | ||
35 | + strict: false | ||
36 | + } | ||
37 | + }) | ||
38 | + | ||
39 | + var sltResType = xmSelect.get('#slt-alarmpolicy-restype')[0]; | ||
40 | + var sltBusType = xmSelect.get('#slt-alarmpolicy-bustype')[0]; | ||
41 | + | ||
42 | + $('#btn-alarmpolicy-timeSlot').unbind('click').on('click', function () { | ||
43 | + $(this).text(''); | ||
44 | + return false; | ||
45 | + }); | ||
46 | + | ||
47 | + laydate.render({ | ||
48 | + elem: '#btn-alarmpolicy-timeSlot', | ||
49 | + type: 'time', | ||
50 | + range: true, | ||
51 | + ready: function (date) { | ||
52 | + $('#btn-alarmpolicy-timeSlot').text('添加时间范围'); | ||
53 | + }, | ||
54 | + remove: function () { | ||
55 | + $('#btn-alarmpolicy-timeSlot').text(''); | ||
56 | + setTimeout(function () { | ||
57 | + $('#btn-alarmpolicy-timeSlot').text('添加时间范围'); | ||
58 | + }, 0); | ||
59 | + }, | ||
60 | + done: function (value, date, endDate) { | ||
61 | + var timeStr = ''; | ||
62 | + if (value) { | ||
63 | + timeSlotList.push({ | ||
64 | + startTime: new Date(1, 1, 1, date.hours, date.minutes, date.seconds, 0), | ||
65 | + endTime: new Date(1, 1, 1, endDate.hours, endDate.minutes, endDate.seconds, 0) | ||
66 | + }) | ||
67 | + timeStr = checkTimeSlot() | ||
68 | + } else { | ||
69 | + timeStr = '' | ||
70 | + } | ||
71 | + $('#txt-alarmpolicy-timeSlot').val(timeStr) | ||
72 | + setTimeout(function () { | ||
73 | + $('#btn-alarmpolicy-timeSlot').text('添加时间范围'); | ||
74 | + }, 0); | ||
75 | + } | ||
76 | + }); | ||
77 | + | ||
78 | + $("#alarmpolicy-form-select-kpi, #alarm-policy-kpiName").unbind('click').on("click", function () { | ||
79 | + common.openWin("template/res/reskpilist", "选择指标", {resType: null}, ["选择", "取消"], function () { | ||
80 | + var data = layui.reskpilist().getData(); | ||
81 | + if (data && data.length != 1) { | ||
82 | + layer.msg('只能选择一个指标!', {icon: 7, time: 3000}); | ||
83 | + return false; | ||
84 | + } | ||
85 | + if (data && data.length > 0) { | ||
86 | + var kpiId = data[0].kpiId; | ||
87 | + var kpiName = data[0].kpiName; | ||
88 | + form.val("add-alarmpolicy-form", { | ||
89 | + kpiId: data[0].kpiId, | ||
90 | + kpiName: kpiId + " " + kpiName, | ||
91 | + name: kpiName + '的告警策略' | ||
92 | + }) | ||
93 | + return true; | ||
94 | + } | ||
95 | + }); | ||
96 | + }); | ||
97 | + | ||
98 | + $(".cont-item").on("click", 'button.policy-input-add', function () { | ||
99 | + $(this).closest('.cont-item').append($('#html-condition-template').html()); | ||
100 | + form.render() | ||
101 | + return false; | ||
102 | + }); | ||
103 | + | ||
104 | + $(".cont-item").on("click", 'button.policy-input-del', function () { | ||
105 | + $(this).closest('.cont-base').remove(); | ||
106 | + return false; | ||
107 | + }); | ||
108 | + | ||
109 | + $('.layui-form .createpolicybtn').unbind('click').on('click', function () { | ||
110 | + var kpiId = $("#alarm-policy-kpiId").val(); | ||
111 | + if (!kpiId) { | ||
112 | + layer.msg("请先选择指标!", {icon: 0}); | ||
113 | + } | ||
114 | + var conOjb = { | ||
115 | + "0": ">", | ||
116 | + "1": "<", | ||
117 | + "2": "=", | ||
118 | + "3": ">=", | ||
119 | + "4": "<=", | ||
120 | + "5": "equals", | ||
121 | + "6": "contains", | ||
122 | + "7": "startsWith", | ||
123 | + "8": "endsWith" | ||
124 | + }; | ||
125 | + var policyStr = ''; | ||
126 | + var $form = $(this).closest('.layui-form'); | ||
127 | + $form.find('.cont-item .cont-base').each(function (index, elem) { | ||
128 | + var $elem = $(elem); | ||
129 | + if (index) { | ||
130 | + if ($elem.find('.layui-form-switch').hasClass('.layui-form-onswitch')) { | ||
131 | + policyStr += '||' | ||
132 | + } else { | ||
133 | + policyStr += '&&' | ||
134 | + } | ||
135 | + } | ||
136 | + var condition = $elem.find('.serious_condition').val(); | ||
137 | + var conval = $elem.find('.serious_value').val(); | ||
138 | + (conval) || (conval = '') | ||
139 | + if (condition < 5) { | ||
140 | + policyStr += `Double.parseDouble([${kpiId},kpiValue])${conOjb[condition]}${conval}`; | ||
141 | + } else { | ||
142 | + policyStr += `[${kpiId},kpiValue].${conOjb[condition]}("${conval}")`; | ||
143 | + } | ||
144 | + }); | ||
145 | + $form.find('textarea[name="policyExpression"]').val(policyStr); | ||
146 | + return false; | ||
147 | + }); | ||
148 | + | ||
149 | + $('textarea[name="contentTemplate"], textarea[name="noticeTemplate"], textarea[name="cleanTemplate"]').unbind('click').on('click', function () { | ||
150 | + var domStr = `#${$(this).closest('.fdt-alarmpolicy').attr('id')} textarea[name="${$(this).attr('name')}"]`; | ||
151 | + editExpr($(this).val(), domStr) | ||
152 | + }); | ||
153 | + | ||
154 | + $('.btn-quote-template').unbind('click').on('click', function () { | ||
155 | + var $card = $(this).closest('.layui-tab-card') | ||
156 | + $card.find('.layui-tab-item.layui-show textarea').val($card.find('.layui-tab-item:not(.layui-show) textarea').val()) | ||
157 | + return false; | ||
158 | + }); | ||
159 | + | ||
160 | + form.on('checkbox(cbo-alarmpolicy-type)', function (data) { | ||
161 | + var type = $(data.elem).data('type'); | ||
162 | + if (data.elem.checked) { | ||
163 | + typeList.push(type); | ||
164 | + } else { | ||
165 | + typeList.splice(typeList.findIndex(item => item === type), 1); | ||
166 | + } | ||
167 | + refreshPolicy() | ||
168 | + }) | ||
169 | + | ||
170 | + form.on('radio(rdo-policyType)', function (data) { | ||
171 | + if (data.value === '1') { | ||
172 | + setDefault(); | ||
173 | + } else { | ||
174 | + setUnDefault(); | ||
175 | + } | ||
176 | + }); | ||
177 | + | ||
178 | + form.on('switch(wth-policy-autoClean)', function (data) { | ||
179 | + var $switch = $(data.elem); | ||
180 | + if (data.elem.checked) { | ||
181 | + $switch.parent().find('input[name="autoClear"]').attr('readonly', false).attr('lay-verify', 'required') | ||
182 | + } else { | ||
183 | + $switch.parent().find('input[name="autoClear"]').attr('readonly', true).removeAttr('lay-verify').val('') | ||
184 | + } | ||
185 | + }); | ||
186 | + | ||
187 | + form.on('switch(wth-policy-autoUp)', function (data) { | ||
188 | + var $switch = $(data.elem); | ||
189 | + if (data.elem.checked) { | ||
190 | + $switch.parent().find('input[name="autoUp"]').attr('readonly', false).attr('lay-verify', 'required') | ||
191 | + } else { | ||
192 | + $switch.parent().find('input[name="autoUp"]').attr('readonly', true).removeAttr('lay-verify').val('') | ||
193 | + } | ||
194 | + }); | ||
195 | + | ||
196 | + form.on('switch(wth-policy-trigger)', function (data) { | ||
197 | + var $switch = $(data.elem); | ||
198 | + if (data.elem.checked) { | ||
199 | + $switch.parent().find('input[name="triggerPolicy"]').attr('readonly', false) | ||
200 | + } else { | ||
201 | + $switch.parent().find('input[name="triggerPolicy"]').attr('readonly', true).val('0') | ||
202 | + } | ||
203 | + }); | ||
204 | + | ||
205 | + form.on('submit(add-alarmpolicy-form)', function (data) { | ||
206 | + if (!typeList.length) { | ||
207 | + layer.msg('至少选择一个告警策略!', {icon: 0}); | ||
208 | + return false; | ||
209 | + } | ||
210 | + var policy = form.val("add-alarmpolicy-form"); | ||
211 | + policy.describe = $('#txt-policy-describe').val() | ||
212 | + | ||
213 | + policy.confList = []; | ||
214 | + $('.fdt-alarmpolicy').not('.hide').each(function (index, elem) { | ||
215 | + policy.confList.push(form.val($(elem).find('.layui-form').attr('lay-filter'))) | ||
216 | + }); | ||
217 | + layer.load(![] + !!{} + !''); | ||
218 | + | ||
219 | + admin.req({ | ||
220 | + url: domainName + '/api-web/policy/save?access_token=' + accessToken, | ||
221 | + data: JSON.stringify(policy), | ||
222 | + type: 'post', | ||
223 | + contentType: "application/json; charset=utf-8", | ||
224 | + success: function (res) { | ||
225 | + layer.closeAll('loading'); | ||
226 | + if (res && res.success) { | ||
227 | + layer.msg('保存成功!', {icon: 1}); | ||
228 | + layer.closeAll('page') | ||
229 | + $('#alarmpolicyQueryListBtn').click(); | ||
230 | + } else { | ||
231 | + layer.closeAll('loading'); | ||
232 | + layer.msg(res.msg, {icon: 2}); | ||
233 | + } | ||
234 | + } | ||
235 | + }); | ||
236 | + | ||
237 | + return false; | ||
238 | + }) | ||
239 | + | ||
240 | + initExprSelect() | ||
241 | + | ||
242 | + if (policyId) { | ||
243 | + layer.load(2); | ||
244 | + admin.req({ | ||
245 | + url: domainName + '/api-web/policy/findById', | ||
246 | + data: { | ||
247 | + id: policyId | ||
248 | + }, | ||
249 | + success(response) { | ||
250 | + layer.closeAll('loading'); | ||
251 | + if (response && response.success) { | ||
252 | + policy = response.object; | ||
253 | + $('#txt-policy-describe').val(policy.describe) | ||
254 | + delete policy.describe; | ||
255 | + form.val('add-alarmpolicy-form', policy) | ||
256 | + | ||
257 | + if (policy.timeSlot) { | ||
258 | + policy.timeSlot.split(',').forEach(time => { | ||
259 | + var timeList = time.split('-'); | ||
260 | + var startTime = timeList[0].split(':') | ||
261 | + var endTime = timeList[1].split(':') | ||
262 | + timeSlotList.push({ | ||
263 | + startTime: new Date(1, 1, 1, startTime[0], startTime[1], startTime[2], 0), | ||
264 | + endTime: new Date(1, 1, 1, endTime[0], endTime[1], endTime[2], 0) | ||
265 | + }) | ||
266 | + }) | ||
267 | + } | ||
268 | + | ||
269 | + sltResType.setValue(policy.resType.split(',')) | ||
270 | + sltBusType.setValue(policy.busId.split(',')) | ||
271 | + | ||
272 | + if (policy.policyType === '1') { | ||
273 | + setDefault(); | ||
274 | + } | ||
275 | + | ||
276 | + typeList = []; | ||
277 | + $('.layui-field-title input[lay-filter="cbo-alarmpolicy-type"]').attr('checked', false); | ||
278 | + policy.confList.forEach(conf => { | ||
279 | + typeList.push(conf.type) | ||
280 | + $('.layui-field-title input[lay-filter="cbo-alarmpolicy-type"][data-type="' + conf.type + '"]').attr('checked', true)[0].checked = true; | ||
281 | + form.val($('#fdt-alarmpolicy-' + conf.type).find('.layui-form').attr('lay-filter'), conf) | ||
282 | + if (conf.autoClear || conf.autoClear === 0) { | ||
283 | + $('#fdt-alarmpolicy-' + conf.type + ' input[lay-filter="wth-policy-autoClean"]')[0].checked = true; | ||
284 | + $('#fdt-alarmpolicy-' + conf.type + ' input[name="autoClear"]').attr('readonly', false); | ||
285 | + } | ||
286 | + if (conf.autoUp || conf.autoUp === 0) { | ||
287 | + $('#fdt-alarmpolicy-' + conf.type + ' input[lay-filter="wth-policy-autoUp"]')[0].checked = true; | ||
288 | + $('#fdt-alarmpolicy-' + conf.type + ' input[name="autoUp"]').attr('readonly', false); | ||
289 | + } | ||
290 | + if (conf.triggerPolicy) { | ||
291 | + $('#fdt-alarmpolicy-' + conf.type + ' input[lay-filter="wth-policy-trigger"]')[0].checked = true; | ||
292 | + $('#fdt-alarmpolicy-' + conf.type + ' input[name="triggerPolicy"]').attr('readonly', false); | ||
293 | + } | ||
294 | + }) | ||
295 | + refreshPolicy(); | ||
296 | + form.render(); | ||
297 | + } else { | ||
298 | + layer.msg('获取告警策略信息失败!', {icon: 2}); | ||
299 | + } | ||
300 | + }, | ||
301 | + error() { | ||
302 | + layer.closeAll('loading'); | ||
303 | + layer.msg('获取告警策略信息失败!', {icon: 2}); | ||
304 | + } | ||
305 | + }) | ||
306 | + } else { | ||
307 | + refreshPolicy(); | ||
308 | + form.render(); | ||
309 | + } | ||
310 | + | ||
311 | + | ||
312 | + function refreshPolicy() { | ||
313 | + $('.fdt-alarmpolicy').addClass('hide') | ||
314 | + $('.fdt-alarmpolicy [lay-verify]').each(function (index, elem) { | ||
315 | + var $elem = $(elem); | ||
316 | + $elem.attr('lay-verify-ignore', $elem.attr('lay-verify')) | ||
317 | + $elem.removeAttr('lay-verify'); | ||
318 | + }); | ||
319 | + typeList.forEach(type => { | ||
320 | + $('#fdt-alarmpolicy-' + type).removeClass('hide') | ||
321 | + $('#fdt-alarmpolicy-' + type + ' [lay-verify-ignore]').each(function (index, elem) { | ||
322 | + var $elem = $(elem); | ||
323 | + $elem.attr('lay-verify', $elem.attr('lay-verify-ignore')) | ||
324 | + $elem.removeAttr('lay-verify-ignore'); | ||
325 | + }); | ||
326 | + }) | ||
327 | + } | ||
328 | + | ||
329 | + function checkTimeSlot() { | ||
330 | + let lastTimeSlot = timeSlotList[timeSlotList.length - 1]; | ||
331 | + if (lastTimeSlot.startTime > lastTimeSlot.endTime) { | ||
332 | + let temp = lastTimeSlot.startTime; | ||
333 | + lastTimeSlot.startTime = lastTimeSlot.endTime; | ||
334 | + lastTimeSlot.endTime = temp; | ||
335 | + } | ||
336 | + timeSlotList.sort((a, b) => { | ||
337 | + return a.startTime - b.startTime | ||
338 | + }); | ||
339 | + | ||
340 | + for (let i = 1; i < timeSlotList.length;) { | ||
341 | + if (timeSlotList[i].startTime <= timeSlotList[i - 1].endTime) { | ||
342 | + timeSlotList[i - 1].endTime = timeSlotList[i].endTime; | ||
343 | + timeSlotList.splice(i, 1); | ||
344 | + } else { | ||
345 | + i++; | ||
346 | + } | ||
347 | + } | ||
348 | + | ||
349 | + let timeStr = ''; | ||
350 | + timeSlotList.forEach(timeSlot => { | ||
351 | + timeStr += timeSlot.startTime.format('HH:mm:ss') | ||
352 | + timeStr += '-' | ||
353 | + timeStr += timeSlot.endTime.format('HH:mm:ss') | ||
354 | + timeStr += ',' | ||
355 | + }); | ||
356 | + (timeStr) && (timeStr = timeStr.substr(0, timeStr.length - 1)) | ||
357 | + return timeStr; | ||
358 | + } | ||
359 | + | ||
360 | + function editExpr(expr, domStr) { | ||
361 | + var title = `<a class="layui-icon layui-icon-edit win_title_icon"></a>编辑表达式`; | ||
362 | + common.openWin('baseconfig/alarmpolicy/exprEdit', title, {expr, domStr}, ['保存', '取消'], function (index) { | ||
363 | + $("#btn-expr-submit").click(); | ||
364 | + }, null, ['70%', '80%'], function (layero, index) { | ||
365 | + $("#btn-expr-submit").data('layerindex', index); | ||
366 | + }); | ||
367 | + } | ||
368 | + | ||
369 | + function initExprSelect() { | ||
370 | + var options = '<option value="">=快速引用=</option>' | ||
371 | + admin.req({ | ||
372 | + url: `${domainName}/api-web/manage/ddic/findSucDdics/alarm_expr?access_token=${accessToken}`, | ||
373 | + method: 'POST', | ||
374 | + success: function (res) { | ||
375 | + if (res && res.data) { | ||
376 | + var ddiclist = res.data; | ||
377 | + $.each(ddiclist, function (i, v) { | ||
378 | + options += '<option value="' + v.ddicDesc + '">' + v.ddicName + '</option>'; | ||
379 | + }); | ||
380 | + $('.slt-expr').html(options); | ||
381 | + form.render('select'); | ||
382 | + | ||
383 | + form.on('select(slt-expr)', function (data) { | ||
384 | + $(data.elem).closest('.layui-tab-card').find('.layui-show textarea').val(data.value); | ||
385 | + }); | ||
386 | + } | ||
387 | + }, | ||
388 | + error(error) { | ||
389 | + console.error(error); | ||
390 | + } | ||
391 | + }); | ||
392 | + | ||
393 | + } | ||
394 | + | ||
395 | + function setDefault() { | ||
396 | + form.val("add-alarmpolicy-form", { | ||
397 | + dateSlot: '0', | ||
398 | + timeSlot: '00:00:00-23:59:59' | ||
399 | + }) | ||
400 | + $('#btn-alarmpolicy-timeSlot').addClass('hide') | ||
401 | + $('select[name="dateSlot"]').attr('disabled', true); | ||
402 | + sltResType.setValue([]).update({disabled: true}); | ||
403 | + sltBusType.setValue([]).update({disabled: true}); | ||
404 | + form.render('select') | ||
405 | + } | ||
406 | + | ||
407 | + function setUnDefault() { | ||
408 | + $('#btn-alarmpolicy-timeSlot').removeClass('hide') | ||
409 | + $('select[name="dateSlot"]').attr('disabled', false); | ||
410 | + sltResType.update({disabled: false}); | ||
411 | + sltBusType.update({disabled: false}); | ||
412 | + form.render('select') | ||
413 | + } | ||
414 | + | ||
415 | + | ||
416 | + }); | ||
417 | +}); |
1 | +//告警策略 | ||
2 | +layui.define(['table', 'form', 'admin', 'layer', 'common','sessions','xmSelect','treeTable'], function (exports) { | ||
3 | + var $ = layui.$; | ||
4 | + var form = layui.form; | ||
5 | + var layer = layui.layer; | ||
6 | + var admin = layui.admin; | ||
7 | + var table = layui.table; | ||
8 | + var common = layui.common; | ||
9 | + var xmSelect = layui.xmSelect; | ||
10 | + var treeTable = layui.treeTable; | ||
11 | + var domainName = common.domainName; | ||
12 | + | ||
13 | + //对外暴露的接口 | ||
14 | + exports('alarmpolicyIndex', function (data) { | ||
15 | + var sessions = layui.sessions; | ||
16 | + var accessToken = sessions.getToken()['access_token']; | ||
17 | + //获得权限列表 | ||
18 | + var checkList = common.checkPermission(accessToken); | ||
19 | + var resName = ''; | ||
20 | + | ||
21 | + if (data && data.type == 'alarmTemplate') { | ||
22 | + $('#alarmpolicy_policyType').val('0'); | ||
23 | + $('#alarmpolicy_policyType').attr('disabled','disabled'); | ||
24 | + } else { | ||
25 | + $('#alarmpolicy_policyType').val('1'); | ||
26 | + } | ||
27 | + | ||
28 | + //回车搜索 | ||
29 | + $('#alarmpolicykw').keydown(function (e) { | ||
30 | + if (e.keyCode === 13) { | ||
31 | + reloadAlarmPolicyTable(); | ||
32 | + } | ||
33 | + }); | ||
34 | + //查询按钮点击事件 joke add 20210428 | ||
35 | + $('#alarmpolicyQueryBtn').on('click',function () { | ||
36 | + reloadAlarmPolicyTable(); | ||
37 | + }); | ||
38 | + | ||
39 | + //指标类型 | ||
40 | + form.on('select(alarmpolicy_kpitype)', function(){ | ||
41 | + reloadAlarmPolicyTable(); | ||
42 | + }); | ||
43 | + | ||
44 | + //指标分类 | ||
45 | + form.on('select(alarmpolicy_category)', function(){ | ||
46 | + reloadAlarmPolicyTable(); | ||
47 | + }); | ||
48 | + | ||
49 | + //策略类型分类 | ||
50 | + form.on('select(alarmpolicy_policyType)', function(){ | ||
51 | + reloadAlarmPolicyTable(); | ||
52 | + }); | ||
53 | + | ||
54 | + form.render(null, 'alarmpolicy-form'); | ||
55 | + //新增 | ||
56 | + $("#alarmpolicy_create").unbind("click").on("click",function () { | ||
57 | + if ($.inArray('back:alarmpolicy:save', checkList) == -1) { | ||
58 | + layer.msg('暂无权限!', {icon: 7, time: 3000}); | ||
59 | + return; | ||
60 | + } | ||
61 | + openPolicyForm(); | ||
62 | + }); | ||
63 | + | ||
64 | + //同步 | ||
65 | + $("#alarmpolicy_sync").on("click",function (){ | ||
66 | + if ($.inArray('back:alarmpolicy:synchronization', checkList) == -1) { | ||
67 | + layer.msg('暂无权限!', {icon: 7, time: 3000}); | ||
68 | + return; | ||
69 | + } | ||
70 | + syncAlarmPolicy(); | ||
71 | + }); | ||
72 | + //删除 | ||
73 | + $("#alarmpolicy_delete").unbind("click").on("click",function () { | ||
74 | + deleteAlarmPolicy(); | ||
75 | + }); | ||
76 | + | ||
77 | + //渲染表格 | ||
78 | + var alarmpolicyTable = table.render({ | ||
79 | + elem: '#alarmpolicyTable' | ||
80 | + , url: domainName + '/api-web/alarmPolicy/page' | ||
81 | + , where:{ | ||
82 | + access_token:accessToken, | ||
83 | + alarmPolicyName:$("#alarmpolicykw").val(), | ||
84 | + kpiIdent:$('#alarmpolicy_category').val(), | ||
85 | + resType:$('#alarmpolicy_kpitype').val(), | ||
86 | + policyType:$('#alarmpolicy_policyType').val(), | ||
87 | + resName: resName | ||
88 | + } | ||
89 | + , height: 'full-200' | ||
90 | + , page: { | ||
91 | + layout: ['count', 'prev', 'page', 'next', 'limit', 'skip'] | ||
92 | + ,theme: '#1E9FFF'//自定义分页主题颜色 | ||
93 | + } | ||
94 | + , end: function(e){ | ||
95 | + form.render(); | ||
96 | + } | ||
97 | + , even: true | ||
98 | + , cols: [[ | ||
99 | + {type: 'checkbox'} | ||
100 | + , {field: 'policyType', title: '策略类型', align: 'center', sort: true, width:120, | ||
101 | + templet: function(d){ | ||
102 | + var checked = ''; | ||
103 | + if(d.policyType == '1'){ //默认 | ||
104 | + checked = "checked"; | ||
105 | + } | ||
106 | + return `<input type="checkbox" id="${d.alarmPolicyId}" data-kpiid="${d.kpiId}" name="close" ${checked} lay-skin="switch" lay-filter="switchPolicyType" lay-text="默认|非默认">`; | ||
107 | + }} | ||
108 | + , { | ||
109 | + field: 'alarmPolicyName', title: '策略名称', align: 'center', sort: true, | ||
110 | + templet: '<div><span data-id="{{d.alarmPolicyId}}" class="layui-table-link view-alarmPolicy-name">{{d.alarmPolicyName}}</span></div>' | ||
111 | + } | ||
112 | + , {title: '资源类型', align: 'center',templet:function (d){ | ||
113 | + return `${d.resTypeName}` | ||
114 | + }} | ||
115 | + , {field: 'kpiName', title: '指标', align: 'center', width:240} | ||
116 | + , {title: '策略内容', align: 'center',templet:function (d){ | ||
117 | + return `告警策略表达式:严重告警:【${d.seriousPolicy}】,<br>重要告警:【${d.importantPolicy}】,<br>一般告警:【${d.commonlyPolicy}】`; | ||
118 | + }} | ||
119 | + , {field: 'alarmTempTotal', title: '所属告警模板量', align: 'center', sort: true, width:180, | ||
120 | + templet:function (d){ | ||
121 | + if(d.alarmTempTotal != '0'){ | ||
122 | + return `<div><span data-id="${d.alarmPolicyId}" class="layui-table-link view-alarm-template-total">${d.alarmTempTotal}</span></div>`; | ||
123 | + }else{ | ||
124 | + return d.alarmTempTotal; | ||
125 | + } | ||
126 | + }} | ||
127 | + // , {field: 'kpiTypes', title: '指标类型', align: 'center', sort: true,minWith:180} | ||
128 | + , {field: 'kpiIdent', title: '指标类型', align: 'center', width:120, templet: function(d){ | ||
129 | + switch (d.kpiIdent){ | ||
130 | + case "0": | ||
131 | + return "基本指标"; | ||
132 | + case "1": | ||
133 | + return "性能指标"; | ||
134 | + case "2": | ||
135 | + return "状态指标"; | ||
136 | + case "4": | ||
137 | + return "告警指标"; | ||
138 | + | ||
139 | + } | ||
140 | + }} | ||
141 | + , {field: 'syncFlag',title: '同步状态',align: 'center', sort: true,width:120, | ||
142 | + templet: function(d){ | ||
143 | + if (d.policyType == '1') { //默认 | ||
144 | + if(d.syncFlag != 1){ //未同步 | ||
145 | + return `<input type="checkbox" id="${d.alarmPolicyId}" name="close" lay-skin="switch" lay-filter="switchSyncPolicy" lay-text="已同步|未同步">`; | ||
146 | + }else{ | ||
147 | + return ' <button type="button" class="layui-btn layui-bg-green layui-btn-radius layui-btn-xs p-0-15">已同步</button>'; | ||
148 | + } | ||
149 | + } else { | ||
150 | + return '' | ||
151 | + } | ||
152 | + } | ||
153 | + } | ||
154 | + , {title: '操作', align: 'center',width:100, fixed: 'right', | ||
155 | + templet: '<div>' + | ||
156 | + '<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>'+ | ||
157 | + '</div>' | ||
158 | + } | ||
159 | + ]], | ||
160 | + done:function () { | ||
161 | + //设置默认 | ||
162 | + form.on('switch(switchPolicyType)', function(obj){ | ||
163 | + var alarmPolicyId = obj.elem.id; | ||
164 | + var alarmPolicyKpiId = $(obj.elem).data("kpiid"); | ||
165 | + var isChecked = obj.elem.checked?"1":"0"; | ||
166 | + admin.req({ | ||
167 | + url:common.domainName + '/api-web/alarmPolicy/default' | ||
168 | + , type : 'post' | ||
169 | + , data:{ | ||
170 | + id:alarmPolicyId, | ||
171 | + type:isChecked, | ||
172 | + kpiId:alarmPolicyKpiId | ||
173 | + } | ||
174 | + }).done(function (res) { | ||
175 | + layer.msg(res.msg, { offset: '15px' , icon: 1, time: 2000},function (){ | ||
176 | + reloadAlarmPolicyTable(); | ||
177 | + }); | ||
178 | + }); | ||
179 | + }); | ||
180 | + | ||
181 | + //点击名称编辑 | ||
182 | + $(".view-alarmPolicy-name").off("click").on("click",function () { | ||
183 | + if ($.inArray('back:alarmpolicy:update', checkList) == -1) { | ||
184 | + layer.msg('暂无权限!', {icon: 7, time: 3000}); | ||
185 | + return; | ||
186 | + } | ||
187 | + openPolicyForm($(this).data("id")); | ||
188 | + }); | ||
189 | + | ||
190 | + //查看告警策略所属模板列表 | ||
191 | + $(".view-alarm-template-total").on("click",function (){ | ||
192 | + var id = $(this).data("id"); | ||
193 | + common.openWin('baseconfig/alarmtemplate/list',"告警模板",{policyId:id}) | ||
194 | + }); | ||
195 | + | ||
196 | + //设置同步 | ||
197 | + form.on('switch(switchSyncPolicy)', function(obj){ | ||
198 | + var alarmPolicyId = obj.elem.id; | ||
199 | + syncAlarmPolicy(alarmPolicyId); | ||
200 | + }); | ||
201 | + | ||
202 | + //删除 | ||
203 | + $(".delete-alarmPolicy-btn").on("click",function () { | ||
204 | + var id = $(this).data("id"); | ||
205 | + deleteAlarmPolicy(id) | ||
206 | + }); | ||
207 | + } | ||
208 | + }); | ||
209 | + | ||
210 | + //同步策略 | ||
211 | + function syncAlarmPolicy(alarmPolicyId){ | ||
212 | + if (typeof (alarmPolicyId) != "string") { | ||
213 | + var ids = []; | ||
214 | + var data = table.checkStatus('alarmpolicyTable').data; | ||
215 | + var flag = true; | ||
216 | + if(data && data.length > 0){ | ||
217 | + $.each(data,function (i,obj) { | ||
218 | + if (obj.policyType == '0') { | ||
219 | + flag = false | ||
220 | + } | ||
221 | + ids.push(obj.alarmPolicyId); | ||
222 | + }); | ||
223 | + } | ||
224 | + if (!flag) { | ||
225 | + layer.msg('非默认策略类型禁止同步!',{icon: 7,time:2000}) | ||
226 | + return; | ||
227 | + } | ||
228 | + if (ids.length == 0) { | ||
229 | + layer.msg('请选择要同步的数据',{icon: 7,time:2000}); | ||
230 | + return; | ||
231 | + } | ||
232 | + alarmPolicyId = ids.toString(); | ||
233 | + } | ||
234 | + | ||
235 | + var syncload = layer.load(2, { | ||
236 | + content: '同步中...', | ||
237 | + shade: [0.5, '#f2eeee'], //0.5透明度的灰色背景 | ||
238 | + success: function (layero) { | ||
239 | + layero.find('.layui-layer-content').css({ | ||
240 | + 'padding-top': '9px', | ||
241 | + 'width': '60px', | ||
242 | + 'padding-left': '40px' | ||
243 | + }); | ||
244 | + } | ||
245 | + }); | ||
246 | + | ||
247 | + admin.req({ | ||
248 | + url:common.domainName + '/api-web/alarmPolicy/sync' | ||
249 | + , data:{ | ||
250 | + ids:alarmPolicyId | ||
251 | + } | ||
252 | + }).done(function (res) { | ||
253 | + layer.close(syncload) | ||
254 | + if(res.success){ | ||
255 | + layer.msg(res.msg, { offset: '15px' , icon: 1 , time: 1000 },function (){ | ||
256 | + reloadAlarmPolicyTable(); | ||
257 | + }); | ||
258 | + }else{ | ||
259 | + layer.msg(res.msg, { offset: '15px' , icon: 7 , time: 1000 }); | ||
260 | + } | ||
261 | + }).error(function (){ | ||
262 | + layer.close(syncload) | ||
263 | + }); | ||
264 | + } | ||
265 | + | ||
266 | + //刷新表格 | ||
267 | + function reloadAlarmPolicyTable() { | ||
268 | + alarmpolicyTable.reload({ | ||
269 | + where:{ | ||
270 | + access_token:accessToken, | ||
271 | + alarmPolicyName:$("#alarmpolicykw").val(), | ||
272 | + kpiIdent:$('#alarmpolicy_category').val(), | ||
273 | + resType:$('#alarmpolicy_kpitype').val(), | ||
274 | + policyType:$('#alarmpolicy_policyType').val(), | ||
275 | + resName: resName | ||
276 | + } | ||
277 | + }); | ||
278 | + } | ||
279 | + | ||
280 | + //删除数据 | ||
281 | + function deleteAlarmPolicy(id) { | ||
282 | + if ($.inArray('back:alarmpolicy:delete', checkList) == -1) { | ||
283 | + layer.msg('暂无权限!', {icon: 7, time: 3000}); | ||
284 | + return; | ||
285 | + } | ||
286 | + if (typeof (id) != "string") { | ||
287 | + var ids = []; | ||
288 | + var data = table.checkStatus('alarmpolicyTable').data; | ||
289 | + if(data && data.length > 0){ | ||
290 | + $.each(data,function (i,obj) { | ||
291 | + ids.push(obj.alarmPolicyId); | ||
292 | + }); | ||
293 | + } | ||
294 | + if (ids.length == 0) { | ||
295 | + layer.msg('请选择要删除的数据',{icon: 7,time:2000}); | ||
296 | + return; | ||
297 | + } | ||
298 | + id = ids.toString(); | ||
299 | + } | ||
300 | + //确认提示框 | ||
301 | + layer.confirm('数据删除后将无法恢复,您确定要删除吗?', { | ||
302 | + btn: ['确定', '取消'] //按钮 | ||
303 | + }, function () { | ||
304 | + admin.req({ | ||
305 | + url: common.domainName + '/api-web/alarmPolicy/delete' | ||
306 | + ,type:"delete" | ||
307 | + ,data:{ids:id} | ||
308 | + }).done(function (res) { | ||
309 | + layer.msg('删除成功', { | ||
310 | + offset: '15px' | ||
311 | + , icon: 1 | ||
312 | + , time: 1000 | ||
313 | + }, function () { | ||
314 | + reloadAlarmPolicyTable(); | ||
315 | + }); | ||
316 | + }).error(function (error) { | ||
317 | + console.log(error); | ||
318 | + }); | ||
319 | + }); | ||
320 | + } | ||
321 | + | ||
322 | + $.ajax({ | ||
323 | + url: `${common.domainName}/api-web/manage/restype/list?access_token=${accessToken}`, | ||
324 | + method: 'GET', | ||
325 | + success: function (res) { | ||
326 | + // 资源类型下拉框 | ||
327 | + var resTypeList = res.data.map(item => { | ||
328 | + return { | ||
329 | + name: item.resTypeName, | ||
330 | + value: item.resTypeCode, | ||
331 | + parentId: item.parentId | ||
332 | + } | ||
333 | + }); | ||
334 | + var resTypeTree = treeTable.pidToChildren(resTypeList, "value", "parentId"); | ||
335 | + xmSelect.render({ | ||
336 | + el: '#alarmpolicy_kpi_resName', | ||
337 | + name: "resName", | ||
338 | + tips: '=资源类型=', | ||
339 | + filterable: true, | ||
340 | + radio: true, | ||
341 | + clickClose: true, | ||
342 | + toolbar: { | ||
343 | + show: true, | ||
344 | + list: ['CLEAR'] | ||
345 | + }, | ||
346 | + tree: { | ||
347 | + show: true, | ||
348 | + showFolderIcon: true, | ||
349 | + showLine: true, | ||
350 | + strict: false, | ||
351 | + indent: 20 | ||
352 | + }, | ||
353 | + model: { | ||
354 | + label: { | ||
355 | + type: 'text' | ||
356 | + } | ||
357 | + }, | ||
358 | + prop: { | ||
359 | + name: 'name', | ||
360 | + value: 'name' | ||
361 | + }, | ||
362 | + height: 'auto', | ||
363 | + data: resTypeTree, | ||
364 | + on: function (data) { | ||
365 | + if(data.isAdd){ | ||
366 | + if (data.arr.length != 0) { | ||
367 | + resName = data.arr[0].name; | ||
368 | + } else { | ||
369 | + resName = ''; | ||
370 | + } | ||
371 | + reloadAlarmPolicyTable(); | ||
372 | + } | ||
373 | + } | ||
374 | + }); | ||
375 | + } | ||
376 | + }); | ||
377 | + | ||
378 | + //新增、编辑策略表单 | ||
379 | + function openPolicyForm(id){ | ||
380 | + var title = id?"编辑策略":"新增策略"; | ||
381 | + title = `<a class="layui-icon layui-icon-edit win_title_icon"></a>${title}`; | ||
382 | + common.openWin('baseconfig/alarmpolicy/add',title, {id:id},['保存','取消'],function () { | ||
383 | + $("#alarmpolicy-form-save-id").trigger("click"); | ||
384 | + return true; | ||
385 | + },null,['90%','90%']); | ||
386 | + } | ||
387 | + | ||
388 | + //获取选中的数据 | ||
389 | + function getCheckAlarmPolicyData() { | ||
390 | + return table.checkStatus('alarmpolicyTable').data; | ||
391 | + } | ||
392 | + | ||
393 | + return { getData: getCheckAlarmPolicyData,reloadAlarmPolicy:reloadAlarmPolicyTable()}; | ||
394 | + }); | ||
395 | +}); |
1 | +//告警策略 | ||
2 | +layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions'], function (exports) { | ||
3 | + var $ = layui.$; | ||
4 | + var form = layui.form; | ||
5 | + var layer = layui.layer; | ||
6 | + var admin = layui.admin; | ||
7 | + var table = layui.table; | ||
8 | + var common = layui.common; | ||
9 | + var domainName = common.domainName; | ||
10 | + | ||
11 | + //对外暴露的接口 | ||
12 | + exports('alarmpolicyList', function (data) { | ||
13 | + var sessions = layui.sessions; | ||
14 | + var accessToken = sessions.getToken()['access_token']; | ||
15 | + //获得权限列表 | ||
16 | + var checkList = common.checkPermission(accessToken); | ||
17 | + | ||
18 | + if (data && data.type == 'alarmTemplate') { | ||
19 | + $('#alarmpolicy_list_policyType').val('0'); | ||
20 | + $('#alarmpolicy_list_policyType').attr('disabled', 'disabled'); | ||
21 | + } else { | ||
22 | + $('#alarmpolicy_list_policyType').val('1'); | ||
23 | + } | ||
24 | + | ||
25 | + //回车搜索 | ||
26 | + $('#alarmpolicyListkw').keydown(function (e) { | ||
27 | + if (e.keyCode === 13) { | ||
28 | + reloadAlarmPolicyTable(); | ||
29 | + } | ||
30 | + }); | ||
31 | + //查询按钮点击事件 joke add 20210428 | ||
32 | + $('#alarmpolicyQueryListBtn').on('click', function () { | ||
33 | + reloadAlarmPolicyTable(); | ||
34 | + }); | ||
35 | + | ||
36 | + //指标类型 | ||
37 | + form.on('select(alarmpolicy_list_kpitype)', function () { | ||
38 | + reloadAlarmPolicyTable(); | ||
39 | + }); | ||
40 | + | ||
41 | + //指标分类 | ||
42 | + form.on('select(alarmpolicy_list_category)', function () { | ||
43 | + reloadAlarmPolicyTable(); | ||
44 | + }); | ||
45 | + | ||
46 | + //策略类型分类 | ||
47 | + form.on('select(alarmpolicy_list_policyType)', function () { | ||
48 | + reloadAlarmPolicyTable(); | ||
49 | + }); | ||
50 | + | ||
51 | + form.render(null, 'alarmpolicy-form'); | ||
52 | + //新增 | ||
53 | + $("#alarmpolicy_list_create").unbind("click").on("click", function () { | ||
54 | + if ($.inArray('back:alarmpolicy:save', checkList) == -1) { | ||
55 | + layer.msg('暂无权限!', {icon: 7, time: 3000}); | ||
56 | + return; | ||
57 | + } | ||
58 | + openPolicyForm(); | ||
59 | + }); | ||
60 | + | ||
61 | + //同步 | ||
62 | + $("#alarmpolicy_list_sync").on("click", function () { | ||
63 | + if ($.inArray('back:alarmpolicy:synchronization', checkList) == -1) { | ||
64 | + layer.msg('暂无权限!', {icon: 7, time: 3000}); | ||
65 | + return; | ||
66 | + } | ||
67 | + syncAlarmPolicy(); | ||
68 | + }); | ||
69 | + //删除 | ||
70 | + $("#alarmpolicy_list_delete").unbind("click").on("click", function () { | ||
71 | + deleteAlarmPolicy(); | ||
72 | + }); | ||
73 | + | ||
74 | + //渲染表格 | ||
75 | + var alarmpolicyTable = table.render({ | ||
76 | + elem: '#alarmpolicyListTable', | ||
77 | + url: domainName + '/api-web/policy/page', | ||
78 | + where: { | ||
79 | + access_token: accessToken, | ||
80 | + policyName: $("#alarmpolicyListkw").val(), | ||
81 | + kpiIdent: $('#alarmpolicy_list_category').val(), | ||
82 | + resType: $('#alarmpolicy_list_kpitype').val(), | ||
83 | + policyType: $('#alarmpolicy_list_policyType').val() | ||
84 | + } | ||
85 | + , height: 'full-200' | ||
86 | + , page: { | ||
87 | + layout: ['count', 'prev', 'page', 'next', 'limit', 'skip'] | ||
88 | + , theme: '#1E9FFF'//自定义分页主题颜色 | ||
89 | + } | ||
90 | + , end: function (e) { | ||
91 | + form.render(); | ||
92 | + } | ||
93 | + , even: true | ||
94 | + , cols: [[{ | ||
95 | + type: 'checkbox' | ||
96 | + }, { | ||
97 | + field: 'policyType', title: '策略类型', align: 'center', sort: true, width: 120, | ||
98 | + templet: function (d) { | ||
99 | + var checked = ''; | ||
100 | + if (d.policyType == '1') { //默认 | ||
101 | + checked = "checked"; | ||
102 | + } | ||
103 | + return `<input type="checkbox" id="${d.id}" data-kpiid="${d.kpiId}" name="close" ${checked} lay-skin="switch" lay-filter="switchPolicyType" lay-text="默认|非默认">`; | ||
104 | + } | ||
105 | + }, { | ||
106 | + field: 'alarmPolicyName', title: '策略名称', align: 'center', sort: true, | ||
107 | + templet: '<div><span data-id="{{d.id}}" class="layui-table-link view-alarmPolicy-name">{{d.name}}</span></div>' | ||
108 | + }, { | ||
109 | + title: '资源类型', align: 'center', templet: function (d) { | ||
110 | + return `${d.resTypeName}` | ||
111 | + } | ||
112 | + }, { | ||
113 | + field: 'kpiName', title: '指标', align: 'center', width: 240 | ||
114 | + }, { | ||
115 | + title: '策略数量', align: 'center', field: "confTotal" | ||
116 | + }, { | ||
117 | + field: 'kpiIdent', title: '指标类型', align: 'center', width: 120, templet: function (d) { | ||
118 | + switch (d.kpiIdent) { | ||
119 | + case "0": | ||
120 | + return "基本指标"; | ||
121 | + case "1": | ||
122 | + return "性能指标"; | ||
123 | + case "2": | ||
124 | + return "状态指标"; | ||
125 | + case "4": | ||
126 | + return "告警指标"; | ||
127 | + } | ||
128 | + } | ||
129 | + }, { | ||
130 | + field: 'syncFlag', title: '同步状态', align: 'center', sort: true, width: 120, | ||
131 | + templet: function (d) { | ||
132 | + if (d.policyType == '1') { //默认 | ||
133 | + if (d.syncFlag != 1) { //未同步 | ||
134 | + return `<input type="checkbox" id="${d.id}" name="close" lay-skin="switch" lay-filter="switchSyncListPolicy" lay-text="已同步|未同步">`; | ||
135 | + } else { | ||
136 | + return ' <button type="button" class="layui-btn layui-bg-green layui-btn-radius layui-btn-xs p-0-15">已同步</button>'; | ||
137 | + } | ||
138 | + } else { | ||
139 | + return '' | ||
140 | + } | ||
141 | + } | ||
142 | + }, { | ||
143 | + title: '操作', align: 'center', width: 100, fixed: 'right', | ||
144 | + templet: '<div>' + | ||
145 | + '<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>' + | ||
146 | + '</div>' | ||
147 | + }]], | ||
148 | + done: function () { | ||
149 | + //设置默认 | ||
150 | + form.on('switch(switchPolicyType)', function (obj) { | ||
151 | + var alarmPolicyId = obj.elem.id; | ||
152 | + var alarmPolicyKpiId = $(obj.elem).data("kpiid"); | ||
153 | + var isChecked = obj.elem.checked ? "1" : "0"; | ||
154 | + layer.load(2); | ||
155 | + admin.req({ | ||
156 | + url: common.domainName + '/api-web/policy/changeType', | ||
157 | + type: 'post', | ||
158 | + data: { | ||
159 | + id: alarmPolicyId, | ||
160 | + policyType: isChecked, | ||
161 | + kpiId: alarmPolicyKpiId | ||
162 | + }, | ||
163 | + success(res) { | ||
164 | + layer.closeAll('loading'); | ||
165 | + if (res && res.success) { | ||
166 | + layer.msg('设置成功!', {icon: 1}); | ||
167 | + reloadAlarmPolicyTable(); | ||
168 | + } else { | ||
169 | + layer.msg('设置失败!', {icon: 2}); | ||
170 | + } | ||
171 | + }, | ||
172 | + error() { | ||
173 | + layer.closeAll('loading'); | ||
174 | + } | ||
175 | + }); | ||
176 | + }); | ||
177 | + | ||
178 | + //点击名称编辑 | ||
179 | + $(".view-alarmPolicy-name").off("click").on("click", function () { | ||
180 | + if ($.inArray('back:alarmpolicy:update', checkList) == -1) { | ||
181 | + layer.msg('暂无权限!', {icon: 7, time: 3000}); | ||
182 | + return; | ||
183 | + } | ||
184 | + openPolicyForm($(this).data("id")); | ||
185 | + }); | ||
186 | + | ||
187 | + //查看告警策略所属模板列表 | ||
188 | + $(".view-alarm-template-total").on("click", function () { | ||
189 | + var id = $(this).data("id"); | ||
190 | + common.openWin('baseconfig/alarmtemplate/list', "告警模板", {policyId: id}) | ||
191 | + }); | ||
192 | + | ||
193 | + //设置同步 | ||
194 | + form.on('switch(switchSyncListPolicy)', function (obj) { | ||
195 | + var alarmPolicyId = obj.elem.id; | ||
196 | + syncAlarmPolicy(alarmPolicyId); | ||
197 | + }); | ||
198 | + | ||
199 | + //删除 | ||
200 | + $(".delete-alarmPolicy-btn").on("click", function () { | ||
201 | + var id = $(this).data("id"); | ||
202 | + deleteAlarmPolicy(id) | ||
203 | + }); | ||
204 | + } | ||
205 | + }); | ||
206 | + | ||
207 | + //同步策略 | ||
208 | + function syncAlarmPolicy(alarmPolicyId) { | ||
209 | + if (typeof (alarmPolicyId) != "string") { | ||
210 | + var ids = []; | ||
211 | + var data = table.checkStatus('alarmpolicyListTable').data; | ||
212 | + var flag = true; | ||
213 | + if (data && data.length > 0) { | ||
214 | + $.each(data, function (i, obj) { | ||
215 | + if (obj.policyType == '0') { | ||
216 | + flag = false | ||
217 | + } | ||
218 | + ids.push(obj.id); | ||
219 | + }); | ||
220 | + } | ||
221 | + if (!flag) { | ||
222 | + layer.msg('非默认策略类型禁止同步!', {icon: 7, time: 2000}) | ||
223 | + return; | ||
224 | + } | ||
225 | + if (ids.length == 0) { | ||
226 | + layer.msg('请选择要同步的数据', {icon: 7, time: 2000}); | ||
227 | + return; | ||
228 | + } | ||
229 | + alarmPolicyId = ids.toString(); | ||
230 | + } | ||
231 | + | ||
232 | + var syncload = layer.load(2); | ||
233 | + | ||
234 | + admin.req({ | ||
235 | + url: common.domainName + '/api-web/policy/sync' | ||
236 | + , data: { | ||
237 | + ids: alarmPolicyId | ||
238 | + } | ||
239 | + }).done(function (res) { | ||
240 | + layer.close(syncload) | ||
241 | + if (res.success) { | ||
242 | + layer.msg('同步成功!', {icon: 1}); | ||
243 | + reloadAlarmPolicyTable(); | ||
244 | + } else { | ||
245 | + layer.msg('同步失败!', {icon: 2}); | ||
246 | + } | ||
247 | + }).error(function () { | ||
248 | + layer.close(syncload) | ||
249 | + }); | ||
250 | + } | ||
251 | + | ||
252 | + //刷新表格 | ||
253 | + function reloadAlarmPolicyTable() { | ||
254 | + alarmpolicyTable.reload({ | ||
255 | + where: { | ||
256 | + access_token: accessToken, | ||
257 | + alarmPolicyName: $("#alarmpolicykw").val(), | ||
258 | + kpiIdent: $('#alarmpolicy_list_category').val(), | ||
259 | + resType: $('#alarmpolicy_list_kpitype').val(), | ||
260 | + policyType: $('#alarmpolicy_list_policyType').val() | ||
261 | + } | ||
262 | + }); | ||
263 | + } | ||
264 | + | ||
265 | + //删除数据 | ||
266 | + function deleteAlarmPolicy(id) { | ||
267 | + if ($.inArray('back:alarmpolicy:delete', checkList) == -1) { | ||
268 | + layer.msg('暂无权限!', {icon: 7, time: 3000}); | ||
269 | + return; | ||
270 | + } | ||
271 | + if (typeof (id) != "string") { | ||
272 | + var ids = []; | ||
273 | + var data = table.checkStatus('alarmpolicyListTable').data; | ||
274 | + if (data && data.length > 0) { | ||
275 | + $.each(data, function (i, obj) { | ||
276 | + ids.push(obj.id); | ||
277 | + }); | ||
278 | + } | ||
279 | + if (ids.length == 0) { | ||
280 | + layer.msg('请选择要删除的数据', {icon: 7, time: 2000}); | ||
281 | + return; | ||
282 | + } | ||
283 | + id = ids.toString(); | ||
284 | + } | ||
285 | + //确认提示框 | ||
286 | + layer.confirm('数据删除后将无法恢复,您确定要删除吗?', { | ||
287 | + btn: ['确定', '取消'] //按钮 | ||
288 | + }, function () { | ||
289 | + layer.load(2); | ||
290 | + admin.req({ | ||
291 | + url: common.domainName + '/api-web/policy/delete' | ||
292 | + , type: "delete" | ||
293 | + , data: {ids: id} | ||
294 | + }).done(function (res) { | ||
295 | + layer.closeAll('loading'); | ||
296 | + if (res && res.success) { | ||
297 | + layer.msg('删除成功!', {icon: 1}); | ||
298 | + reloadAlarmPolicyTable() | ||
299 | + } else { | ||
300 | + layer.msg('删除失败!', {icon: 2}); | ||
301 | + } | ||
302 | + }).error(function (error) { | ||
303 | + layer.closeAll('loading'); | ||
304 | + console.log(error); | ||
305 | + layer.msg('删除失败!', {icon: 2}); | ||
306 | + }); | ||
307 | + }); | ||
308 | + } | ||
309 | + | ||
310 | + //新增、编辑策略表单 | ||
311 | + function openPolicyForm(id) { | ||
312 | + var title = id ? "编辑策略" : "新增策略"; | ||
313 | + title = `<a class="layui-icon layui-icon-edit win_title_icon"></a>${title}`; | ||
314 | + common.openWin('baseconfig/alarmpolicy/edit', title, {id: id}, ['保存', '取消'], function () { | ||
315 | + $("#alarmpolicy-form-save-id").trigger("click"); | ||
316 | + }, null, ['90%', '90%']); | ||
317 | + } | ||
318 | + | ||
319 | + //获取选中的数据 | ||
320 | + function getCheckAlarmPolicyData() { | ||
321 | + return table.checkStatus('alarmpolicyListTable').data; | ||
322 | + } | ||
323 | + | ||
324 | + return {getData: getCheckAlarmPolicyData, reloadAlarmPolicy: reloadAlarmPolicyTable()}; | ||
325 | + }); | ||
326 | +}); |
1 | +//告警订阅表单 | ||
2 | +layui.define(['form', 'admin', 'laydate', 'table', 'common','sessions','cron','orgusergroup'], function (exports) { | ||
3 | + var $ = layui.$; | ||
4 | + var form = layui.form; | ||
5 | + var laydate = layui.laydate; | ||
6 | + var table = layui.table; | ||
7 | + var admin = layui.admin; | ||
8 | + var common = layui.common; | ||
9 | + var domainName = common.domainName; | ||
10 | + var cron = layui.cron; | ||
11 | + var view = layui.view; | ||
12 | + var orgusergroup = layui.orgusergroup; | ||
13 | + | ||
14 | + //对外暴露的接口 | ||
15 | + exports('alarmsubscribeAdd', function (data) { | ||
16 | + var sessions = layui.sessions; | ||
17 | + var accessToken = sessions.getToken()['access_token']; | ||
18 | + var receiveUser = "" | ||
19 | + var userMap = new Map(); | ||
20 | + var receiveUserInfos = [];//接收人数组 | ||
21 | + var receiveOrgInfos = []; //接收部门 | ||
22 | + var receiveGroupInfoS = []; //接收组 | ||
23 | + form.render(null, 'add-alarmsubscribe-form'); | ||
24 | + //初始化日期组件 | ||
25 | + laydate.render({ | ||
26 | + elem: '.alarm_subscribe_times' | ||
27 | + ,type: 'time' | ||
28 | + ,range: true | ||
29 | + }); | ||
30 | + | ||
31 | + if(data && data.id){ | ||
32 | + admin.req({ | ||
33 | + url:domainName + '/api-web/alarmsubscribe/getbyId/'+data.id | ||
34 | + ,async:false | ||
35 | + ,done:function (res){ | ||
36 | + //处理时间段回显 | ||
37 | + if(res.object.times){ | ||
38 | + var times=res.object.times.split(','); | ||
39 | + if(times.length>1){ | ||
40 | + res.object.times=times[0]; | ||
41 | + $.each(times,function(i,v){ | ||
42 | + if(i>0){ | ||
43 | + addTimeQuantum(times[i]); | ||
44 | + } | ||
45 | + }); | ||
46 | + } | ||
47 | + } | ||
48 | + form.val("add-alarmsubscribe-form",res.object); | ||
49 | + //处理回显 | ||
50 | + if(res.object.subWay){ | ||
51 | + var subWay = res.object.subWay; | ||
52 | + $("#alarmsubscribe_add_subway").find('[data-type="'+subWay+'"]').removeClass("gray").siblings().addClass("gray"); | ||
53 | + } | ||
54 | + | ||
55 | + if(res.data){ | ||
56 | + $.each(res.data,function (i,v){ | ||
57 | + writeTagsInfo(v); | ||
58 | + }) | ||
59 | + } | ||
60 | + | ||
61 | + if (res.obj){ | ||
62 | + if (res.obj.subOrgLists){ | ||
63 | + $.each(res.obj.subOrgLists,function (i,v){ | ||
64 | + v.value = v.targetId; | ||
65 | + writeOrgTagsInfo(v,'selecte_org_content_id') | ||
66 | + }); | ||
67 | + } | ||
68 | + if (res.obj.subGroupLists){ | ||
69 | + $.each(res.obj.subGroupLists,function (i,v){ | ||
70 | + v.value = v.targetId; | ||
71 | + writeOrgTagsInfo(v,'selecte_group_content_id') | ||
72 | + }); | ||
73 | + } | ||
74 | + | ||
75 | + } | ||
76 | + | ||
77 | + if(res.object.subType == '1'){//告警订阅 | ||
78 | + $("div.alarmLevel").show(); | ||
79 | + $("div.reportType").hide(); | ||
80 | + var alarmLevels = res.object.alarmLevel.split(","); | ||
81 | + for(var i in alarmLevels){ | ||
82 | + let chkbox = $(`input[type="checkbox"][name="alarmLevel"][value="${alarmLevels[i]}"]`); | ||
83 | + if (chkbox && chkbox.length > 0) { | ||
84 | + chkbox[0].checked = true; | ||
85 | + form.render(); | ||
86 | + } | ||
87 | + } | ||
88 | + }else if(res.object.subType == '2'){//报表订阅 | ||
89 | + $("div.alarmLevel").hide(); | ||
90 | + $("div.reportType").show(); | ||
91 | + var reportTypes = res.object.reportType.split(","); | ||
92 | + for(var i in reportTypes){ | ||
93 | + let chkbox = $(`input[type="checkbox"][name="reportType"][value="${reportTypes[i]}"]`); | ||
94 | + if (chkbox && chkbox.length > 0) { | ||
95 | + chkbox[0].checked = true; | ||
96 | + form.render(); | ||
97 | + } | ||
98 | + } | ||
99 | + }else{ | ||
100 | + $("div.alarmLevel").hide(); | ||
101 | + $("div.reportType").hide(); | ||
102 | + } | ||
103 | + | ||
104 | + if(res.object.sentFrequency && res.object.sentFrequency.indexOf("?")>0){ | ||
105 | + $("#sentFrequency_input").val(res.object.sentFrequency); | ||
106 | + $(".sentFrequency_input").show(); | ||
107 | + $(".sentFrequency_select").hide(); | ||
108 | + }else{ | ||
109 | + $("#sentFrequency_select").val(res.object.sentFrequency); | ||
110 | + $(".sentFrequency_input").hide(); | ||
111 | + $(".sentFrequency_select").show(); | ||
112 | + } | ||
113 | + switchSubType(res.object.subType,res.object) | ||
114 | + form.render(); | ||
115 | + } | ||
116 | + }); | ||
117 | + } | ||
118 | + | ||
119 | + //corn表达式 | ||
120 | + $("#show_corn_info").on("click",function (){ | ||
121 | + layer.open({ | ||
122 | + type: 1 | ||
123 | + , title: 'Cron表达式示例' | ||
124 | + , closeBtn: 1 | ||
125 | + , area: ['60%', '80%'] | ||
126 | + , shade: 0.8 | ||
127 | + , id: 'lay_cron_subcribe' //设定一个id,防止重复弹出 | ||
128 | + , content: $("#cronHtml").html() | ||
129 | + }); | ||
130 | + }); | ||
131 | + | ||
132 | + | ||
133 | + // 初始化Cron表达式组件 | ||
134 | + cron.render({ | ||
135 | + elem: "#sentFrequency_input", // 绑定元素 | ||
136 | + value: $("#sentFrequency_input").val(), // 默认值 | ||
137 | + done: function (cronStr) { // 点击确定,或运行时,触发,参数为 cron 表达式字符串 | ||
138 | + $("#sentFrequency_input").val(cronStr); | ||
139 | + }, | ||
140 | + }); | ||
141 | + | ||
142 | + //全天 | ||
143 | + $(".allday_subscribe").on("click",function (){ | ||
144 | + $(this).prev().find('input[name="times"]').val('00:00:00 - 23:59:59'); | ||
145 | + }); | ||
146 | + //工作时间 | ||
147 | + $(".worktime_subscribe").on("click",function (){ | ||
148 | + $(this).prev().prev().find('input[name="times"]').val('08:00:00 - 19:59:59'); | ||
149 | + }); | ||
150 | + //添加时间段 | ||
151 | + $("#save_subscribe").on("click",function (){ | ||
152 | + addTimeQuantum(); | ||
153 | + }); | ||
154 | + //添加时间段 | ||
155 | + function addTimeQuantum(v){ | ||
156 | + var html=' <div class="layui-form-item">\n' + | ||
157 | + ' <div class="layui-inline-block">\n' + | ||
158 | + ' <label class="layui-form-label">通知时间段</label>\n' + | ||
159 | + ' <div class="layui-input-inline">\n' + | ||
160 | + ' <input type="text" class="layui-input alarm_subscribe_times" placeholder=" 选择告警时间段 ">\n' + | ||
161 | + ' </div>\n' + | ||
162 | + ' <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"></i></div>\n' + | ||
163 | + ' <div class="layui-form-mid layui-word-aux worktime_subscribe" lay-time="times" lay-tips="工作时间"><i class="layui-icon form-btn-icon"></i></div>\n' + | ||
164 | + ' <div class="layui-form-mid layui-word-aux del_subscribe" lay-time="times" lay-tips="删除时间段"><i class="layui-icon form-btn-icon"></i></div>\n' + | ||
165 | + ' </div>\n' + | ||
166 | + ' </div>'; | ||
167 | + //添加组件 | ||
168 | + $('#message-time-quantum-div').before(html); | ||
169 | + //获取添加的节点 | ||
170 | + var alarm_subscribe_times=$('#message-time-quantum-div').prev().find('.alarm_subscribe_times').eq(0).get(0); | ||
171 | + | ||
172 | + laydate.render({ | ||
173 | + elem: alarm_subscribe_times | ||
174 | + ,type: 'time' | ||
175 | + ,range: true | ||
176 | + }); | ||
177 | + | ||
178 | + //全天 | ||
179 | + $('#message-time-quantum-div').prev().find('.allday_subscribe').on("click",function (){ | ||
180 | + $(this).prev().find('.alarm_subscribe_times').val('00:00:00 - 23:59:59'); | ||
181 | + }); | ||
182 | + //工作时间 | ||
183 | + $('#message-time-quantum-div').prev().find('.worktime_subscribe').on("click",function (){ | ||
184 | + $(this).prev().prev().find('.alarm_subscribe_times').val('08:00:00 - 19:59:59'); | ||
185 | + }); | ||
186 | + //删除 | ||
187 | + $('#message-time-quantum-div').prev().find('.del_subscribe').on("click",function (){ | ||
188 | + $(this).closest('.layui-form-item').remove(); | ||
189 | + layer.closeAll('tips'); | ||
190 | + }); | ||
191 | + if(v){ | ||
192 | + $('#message-time-quantum-div').prev().find('.alarm_subscribe_times').val(v); | ||
193 | + } | ||
194 | + form.render(); | ||
195 | + } | ||
196 | + //订阅方式 | ||
197 | + $("#alarmsubscribe_add_subway li").on("click",function (){ | ||
198 | + $(this).removeClass("gray").siblings().addClass("gray"); | ||
199 | + $("#alarmsubscribe_subway").val($(this).data("type")); | ||
200 | + }); | ||
201 | + | ||
202 | + //订阅类型切换事件 | ||
203 | + form.on('select(alarm-subscribe-subype)', function (data) { | ||
204 | + if(data.value == '1'){ | ||
205 | + $("div.alarmLevel").show(); | ||
206 | + $("div.reportType").hide(); | ||
207 | + }else if(data.value == '2'){ | ||
208 | + $("div.alarmLevel").hide(); | ||
209 | + $("div.reportType").show(); | ||
210 | + }else{ | ||
211 | + $("div.alarmLevel").hide(); | ||
212 | + $("div.reportType").hide(); | ||
213 | + } | ||
214 | + switchSubType(data.value,undefined) | ||
215 | + form.render() | ||
216 | + }); | ||
217 | + | ||
218 | + //通知类型 | ||
219 | + form.on('radio(sub_send-type)', function (data) { | ||
220 | + if(data.value == '1'){ | ||
221 | + $(".sentFrequency_select").show(); | ||
222 | + $(".sentFrequency_input").hide(); | ||
223 | + }else{ | ||
224 | + $(".sentFrequency_select").hide(); | ||
225 | + $(".sentFrequency_input").show(); | ||
226 | + } | ||
227 | + }); | ||
228 | + | ||
229 | + $('#orgusergroup').on('click',function () { | ||
230 | + | ||
231 | + }); | ||
232 | + | ||
233 | + //选择用户 | ||
234 | + $("#alarmsubscirbe-form-select-users").on("click",function (){ | ||
235 | + var selObj ={}; | ||
236 | + //回填订阅用户 | ||
237 | + var selectedUserTags = $("#selecte_content_id").find("span"); | ||
238 | + if (selectedUserTags.length > 0){ | ||
239 | + var userSelIds = new Array(); | ||
240 | + selectedUserTags.each(function () { | ||
241 | + userSelIds.push($(this).data("username")); | ||
242 | + }); | ||
243 | + selObj.userSelIds = userSelIds; | ||
244 | + } | ||
245 | + //回填订阅部门 | ||
246 | + var selecteOrgTags = $("#selecte_org_content_id").find("span"); | ||
247 | + if (selecteOrgTags.length > 0){ | ||
248 | + var orgSelIds = new Array(); | ||
249 | + selecteOrgTags.each(function () { | ||
250 | + orgSelIds.push($(this).data("id")); | ||
251 | + }); | ||
252 | + selObj.orgSelIds = orgSelIds; | ||
253 | + } | ||
254 | + //回填订阅组 | ||
255 | + var selecteGoupTags = $("#selecte_group_content_id").find("span"); | ||
256 | + if (selecteGoupTags.length > 0){ | ||
257 | + var groupSelIds = new Array(); | ||
258 | + selecteGoupTags.each(function () { | ||
259 | + groupSelIds.push($(this).data("id")); | ||
260 | + }); | ||
261 | + selObj.groupSelIds = groupSelIds; | ||
262 | + } | ||
263 | + selectPerson(selObj); | ||
264 | + }); | ||
265 | + | ||
266 | + //通知时间段拼接字符 | ||
267 | + function times(timeVal){ | ||
268 | + var str=''; | ||
269 | + $.each($('.alarm_subscribe_times'),function (i,v) { | ||
270 | + if($('.alarm_subscribe_times').eq(i).val()!=''){ | ||
271 | + str+=$('.alarm_subscribe_times').eq(i).val()+','; | ||
272 | + }else{ | ||
273 | + timeVal.val=0; | ||
274 | + } | ||
275 | + }) | ||
276 | + return str.slice(0,str.length-1); | ||
277 | + } | ||
278 | + //保存 | ||
279 | + $("#alarmsubscribe-form-save-id").on("click",function (){ | ||
280 | + var data = form.val("add-alarmsubscribe-form"); | ||
281 | + var val=1; | ||
282 | + var timeVal={val}; | ||
283 | + //通知时间段 | ||
284 | + data.times=times(timeVal); | ||
285 | + if(data.times=='' || timeVal.val==0){ | ||
286 | + layer.msg("请将信息填写完整", {offset: '15px', icon: 7, time: 1500}); | ||
287 | + return false; | ||
288 | + } | ||
289 | + var verdict=1; | ||
290 | + var timeVals={verdict}; | ||
291 | + //时间格式判断 | ||
292 | + if(timeHorizon(data.times,timeVals)==0 || timeVals.verdict==0){ | ||
293 | + layer.msg("请选择合理的时间范围或时间段", {offset: '15px', icon: 7, time: 1500}); | ||
294 | + return false; | ||
295 | + } | ||
296 | + //订阅用户 | ||
297 | + var selectedTags = $("#selecte_content_id").find("span"); | ||
298 | + var contents = [] | ||
299 | + selectedTags.each(function () { | ||
300 | + contents.push($(this).data("id")) | ||
301 | + receiveUserInfos.push({ | ||
302 | + username:$(this).data("username"), | ||
303 | + nickname:$(this).data("nickname"), | ||
304 | + phone:$(this).data("phone"), | ||
305 | + operator:$(this).data("operator"), | ||
306 | + email:$(this).data("email") | ||
307 | + }) | ||
308 | + }); | ||
309 | + receiveUser = contents.toString() | ||
310 | + data.receiveUser = receiveUser; | ||
311 | + data.subUserLists = receiveUserInfos; | ||
312 | + //订阅部门 | ||
313 | + var selectedOrgs = $("#selecte_org_content_id").find("span"); | ||
314 | + selectedOrgs.each(function () { | ||
315 | + receiveOrgInfos.push({ | ||
316 | + targetId: $(this).data("id")+'', | ||
317 | + type: 1 | ||
318 | + }); | ||
319 | + }); | ||
320 | + data.subOrgLists = receiveOrgInfos; | ||
321 | + //订阅部门 | ||
322 | + var selectedGroups = $("#selecte_group_content_id").find("span"); | ||
323 | + selectedGroups.each(function () { | ||
324 | + receiveGroupInfoS.push({ | ||
325 | + targetId: $(this).data("id")+'', | ||
326 | + type: 2 | ||
327 | + }) | ||
328 | + }); | ||
329 | + data.subGroupLists = receiveGroupInfoS; | ||
330 | + delete data["sub_send_type"]; | ||
331 | + form.on('submit(add-alarmsubscribe-form)',function () { | ||
332 | + var alrmlevels = [],reportTypes = []; | ||
333 | + $('input[name="reportType"]:checked').each(function() { | ||
334 | + reportTypes.push($(this).val()); | ||
335 | + }); | ||
336 | + $('input[name="alarmLevel"]:checked').each(function() { | ||
337 | + alrmlevels.push($(this).val()); | ||
338 | + }); | ||
339 | + data.alarmLevel = alrmlevels.toString(); | ||
340 | + data.reportType = reportTypes.toString(); | ||
341 | + //通知周期 | ||
342 | + if($('input[name="sub_send_type"]:checked').val() == "1"){ | ||
343 | + data.sentFrequency = $("#sentFrequency_select").val(); | ||
344 | + }else{ | ||
345 | + data.sentFrequency = $("#sentFrequency_input").val(); | ||
346 | + } | ||
347 | + admin.req({ | ||
348 | + url : domainName + '/api-web/alarmsubscribe/save?access_token='+accessToken | ||
349 | + ,data:JSON.stringify(data) | ||
350 | + ,type:'post' | ||
351 | + ,contentType: "application/json; charset=utf-8" | ||
352 | + ,done:function (res){ | ||
353 | + if(res.success){ | ||
354 | + localStorage.setItem("detailPageOfcustomSubId",res.str) | ||
355 | + layer.msg(res.msg, { offset: '15px' , icon: 1 , time: 1000 },function (){ | ||
356 | + receiveUserInfos = []; | ||
357 | + if(layui.alarmsubscribeIndex && layui.alarmsubscribeIndex()){ | ||
358 | + layer.closeAll(); | ||
359 | + layui.alarmsubscribeIndex().reloadsubscribe(); | ||
360 | + } | ||
361 | + }); | ||
362 | + }else{ | ||
363 | + layer.msg(res.msg, { offset: '15px' , icon: 7 , time: 1000 }); | ||
364 | + } | ||
365 | + } | ||
366 | + }); | ||
367 | + | ||
368 | + return false;//必须要写,解决禁用submit提交,ajax方法才能正确执行,且表单不会自动刷新 | ||
369 | + }) | ||
370 | + }); | ||
371 | + | ||
372 | + //为用户添加资源权限 | ||
373 | + function selectPerson(selObj) { | ||
374 | + var orgusergroup; | ||
375 | + layer.open({ | ||
376 | + title: '订阅绑定信息', | ||
377 | + id: 'layer-subscribe-select', | ||
378 | + type: 1, | ||
379 | + area: ['50%', '80%'], | ||
380 | + btn: ['添加', '取消'], | ||
381 | + success: function (layero, layerIndex) { | ||
382 | + view(this.id).render('/template/user/orgusergroup').done(function () { | ||
383 | + orgusergroup = layui.orgusergroup({selObj: selObj}); //传参 | ||
384 | + }); | ||
385 | + }, | ||
386 | + yes: function (index, layero) { | ||
387 | + layer.close(index); | ||
388 | + var returnValue = orgusergroup.returnValue(); | ||
389 | + //回填订阅人员 | ||
390 | + var selectUser = returnValue.selectUser; | ||
391 | + // if (selectUser){ //如果有选择用户返回 | ||
392 | + $('#selecte_content_id').html(''); | ||
393 | + $.each(selectUser,function (i,v){ //处理元素,满足writeTagsInfo格式 | ||
394 | + v.nickname = v.name; | ||
395 | + v.username = v.value; | ||
396 | + writeTagsInfo(v); //将选择的用户回填到 | ||
397 | + }) | ||
398 | + // } | ||
399 | + //回填订阅部门 | ||
400 | + var selectOrg = returnValue.selectOrg; | ||
401 | + // if (selectOrg){ | ||
402 | + var divId = 'selecte_org_content_id'; | ||
403 | + $('#'+divId).html(''); | ||
404 | + $.each(selectOrg,function (i,v){ | ||
405 | + writeOrgTagsInfo(v,divId); | ||
406 | + }) | ||
407 | + // } | ||
408 | + //回填订阅组 | ||
409 | + var selectGroup = returnValue.selectGroup; | ||
410 | + // if (selectGroup){ | ||
411 | + var divId = 'selecte_group_content_id'; | ||
412 | + $('#'+divId).html(''); | ||
413 | + $.each(selectGroup,function (i,v){ | ||
414 | + writeOrgTagsInfo(v,divId); | ||
415 | + }) | ||
416 | + | ||
417 | + // } | ||
418 | + form.render(); | ||
419 | + } | ||
420 | + }); | ||
421 | + } | ||
422 | + | ||
423 | + //写入标签内容 | ||
424 | + function writeTagsInfo(data) { | ||
425 | + var tags = ` | ||
426 | + <span id="tags_span_${data.id}" data-id="${data.id}" data-username="${data.username}" | ||
427 | + data-nickname="${data.nickname}" data-phone="${data.phone}" data-operator="${data.operator}" | ||
428 | + data-email="${data.email}"><em>${data.nickname}</em> | ||
429 | + <button type="button" value="${data.id}" class="tagsclose close">×</button> | ||
430 | + </span> | ||
431 | + `; | ||
432 | + if(data.username){ | ||
433 | + //拼接标签 | ||
434 | + $("#selecte_content_id").append(tags); | ||
435 | + //绑定标签的删除事件 | ||
436 | + bindTagesDelEvent(); | ||
437 | + } | ||
438 | + } | ||
439 | + | ||
440 | + //写入订阅部门或组标签内容 | ||
441 | + //data:数据 type:org/group | ||
442 | + function writeOrgTagsInfo(data,divId) { | ||
443 | + var tags = ` | ||
444 | + <span id="tags_span_${data.value}" data-id="${data.value}" data-name="${data.name}" | ||
445 | + ><em>${data.name}</em> | ||
446 | + <button type="button" value="${data.value}" class="tagsclose close">×</button> | ||
447 | + </span> | ||
448 | + `; | ||
449 | + if(data.value){ | ||
450 | + //拼接标签 | ||
451 | + $("#"+divId).append(tags); | ||
452 | + //绑定标签的删除事件 | ||
453 | + bindTagesDelEvent(); | ||
454 | + } | ||
455 | + } | ||
456 | + | ||
457 | + //切换订阅类型 | ||
458 | + function switchSubType(subType,data) { | ||
459 | + var dom = $('form[name="add-alarmsubscribe-form"]'); | ||
460 | + if (subType == '3'){ | ||
461 | + dom.find('input[name="sendTotal"]').attr('readonly','readonly').val('1'); | ||
462 | + dom.find('input[name="sub_send_type"]').attr('disabled','disabled'); | ||
463 | + dom.find('input[type="radio"][name="sub_send_type"][value="1"]').attr('checked','checked'); | ||
464 | + dom.find('#sentFrequency_select').attr('disabled','disabled').val('1'); | ||
465 | + } else { | ||
466 | + var sendTotal = ''; | ||
467 | + var sentFrequency = '1'; | ||
468 | + if (data) { | ||
469 | + sendTotal = data.sendTotal | ||
470 | + sentFrequency = data.sentFrequency | ||
471 | + } | ||
472 | + dom.find('input[name="sendTotal"]').removeAttr('readonly').val(sendTotal); | ||
473 | + dom.find('input[name="sub_send_type"]').removeAttr('disabled'); | ||
474 | + dom.find('#sentFrequency_select').removeAttr('disabled').val(sentFrequency); | ||
475 | + } | ||
476 | + } | ||
477 | + | ||
478 | + //删除标签事件 | ||
479 | + function bindTagesDelEvent() { | ||
480 | + //删除已选主体的页签 | ||
481 | + $("button.tagsclose").on("click",function () { | ||
482 | + var id = $(this).attr("value"); | ||
483 | + $("#tags_span_"+id).remove(); | ||
484 | + }); | ||
485 | + } | ||
486 | + | ||
487 | + //时间范围判断 | ||
488 | + function timeHorizon(times,timeVals){ | ||
489 | + var judge=1; | ||
490 | + var list=times.split(','); | ||
491 | + if(list.length.length<=1){ | ||
492 | + return 1; | ||
493 | + } | ||
494 | + var listTime = [...new Set(list)]; | ||
495 | + if(list.length-listTime.length>0){ | ||
496 | + timeVals.verdict=0; | ||
497 | + } | ||
498 | + $.each(list,function (x,y) { | ||
499 | + var beforeTime=dateTime(y.split(' - ')[0]); | ||
500 | + var afterTime=dateTime(y.split(' - ')[1]); | ||
501 | + //判断时间段是否错误 | ||
502 | + if(beforeTime>=afterTime){ | ||
503 | + timeVals.verdict=0; | ||
504 | + } | ||
505 | + $.each(list,function (i,v) { | ||
506 | + if(v!=y){ | ||
507 | + //获取开始时间 | ||
508 | + var startTime=dateTime(v.split(' - ')[0]); | ||
509 | + //获取结束时间 | ||
510 | + var overTime=dateTime(v.split(' - ')[1]); | ||
511 | + //判断是否在时间段里 | ||
512 | + if (beforeTime >= startTime && beforeTime <= overTime) { | ||
513 | + judge=0; | ||
514 | + } | ||
515 | + if(afterTime >= startTime && afterTime <= overTime){ | ||
516 | + judge=0; | ||
517 | + } | ||
518 | + } | ||
519 | + }); | ||
520 | + }); | ||
521 | + return judge; | ||
522 | + } | ||
523 | + //时间格式转换 | ||
524 | + function dateTime(timeDate){ | ||
525 | + var split=timeDate.split(":"); | ||
526 | + var myDate=new Date(2021,6,14,split[0],split[1],split[2]); | ||
527 | + return myDate; | ||
528 | + } | ||
529 | + }); | ||
530 | +}); |
-
Please register or login to post a comment