Authored by 王涛

Merge branch 'master-500-dev-lushangqing' into 'master-500-dev'

告警消除页面联调接口当前处理人,当前负责人,当前告警统计信息,消除告警,从历史告警进入告警消除页面



See merge request !486
... ... @@ -35,6 +35,10 @@
margin:8px 0;
text-align: left;
}
.info-item-statistics{
margin:8px 0;
text-align: left;
}
.info-content{
margin-bottom: 5px;
}
... ... @@ -76,6 +80,7 @@
/*justify-content: space-between;*/
padding:10px;
background: #FFFFFF;
margin-bottom: 5px;
}
.alarmsNotice{
display: flex;
... ... @@ -92,4 +97,27 @@
padding:0 10px 10px;
background: #FFFFFF;
text-align: left;
}
.disabled_style{
background: #F2F2F2;
}
.scheme-title-per .el-switch:focus{
outline: 0;
}
.alarmNotice-title{
text-align: left;
padding-bottom: 10px;
}
.editor_detail{
border:1px solid #c0c4cc;
padding:10px;
}
.detail_comments{
background: #FFFFFF;
padding:10px;
margin-top:5px;
}
.detail_comments_title{
text-align: left;
padding-bottom: 10px;
}
\ No newline at end of file
... ...
... ... @@ -156,6 +156,7 @@
.editor_text .w-e-text{
min-height:300px;
max-height: 500px;
box-sizing: border-box;
}
.alarmsClearEditor-btn{
padding:10px;
... ...
<div class="info-content">
<div class="info-content-body">
<div class="content-body-info">
<div class="info-item">
通知信息:monitor_xjic
</div>
<div class="info-item">
通知人清单:monitor_xjic
</div>
</div>
</div>
</div>
<div class="info-content">
<div class="info-content-body">
<div class="content-body-info">
<div class="info-item-statistics">
统计信息:该告警历史上出现了{{statisticsData.alarmCnt?statisticsData.alarmCnt:0}}次,
平均持续时长{{statisticsData.continueTimeAvg?statisticsData.continueTimeAvg:0}}s,
最大持续时长{{statisticsData.continueTimeMax?statisticsData.continueTimeMax:0}}s,
最小持续时长{{statisticsData.continueTimeMin?statisticsData.continueTimeMin:0}}s
</div>
</div>
</div>
</div>
<!-- 告警信息处理审核时有-->
<div class="info-content">
<div class="info-content-body">
<div class="content-body-info">
<div class="info-item">
同类型告警处理过程:monitor_xjic
</div>
</div>
</div>
</div>
\ No newline at end of file
... ...
export default {
name: 'noticeStatistics',
template: '',
props: {
alarmId: {
type: String,
default: ''
}
},
data() {
return {
}
},
setup(props, {attrs, slots, emit}) {
const {proxy} = Vue.getCurrentInstance();
let statisticsData=Vue.ref('');
let getStatisticsData=()=>{
proxy.$http.post(`/api-web/bAlarmManage/alarm/statis`, {alarmId:props.alarmId}, function (res) {
if (res && res.code == 0) {
statisticsData.value=res.object
}else{
proxy.$global.showMsg(res.msg, 'warning');
}
})
}
/**
* 挂载完
*/
Vue.onMounted(() => {
})
return {
getStatisticsData,
statisticsData
}
}
}
... ...
<div class="editor">
<div ref="toolbar" class="editor_toolbar">
</div>
<div ref="editor" class="editor_text">
<div ref="editor" :class="['editor_text',{'disabled_style':isDisabled==0}]">
</div>
</div>
\ No newline at end of file
... ...
/**
* 分页表格组件
* wangEditor富文本组件
*/
export default {
name: 'wangEditorComponent',
... ... @@ -17,6 +17,14 @@ export default {
isClear: {
type: Boolean,
default: false
},
isDisabled:{//是否禁用
type:Boolean,
default:true
},
repositoryInfo:{//引用知识库的文本
type:String,
default:''
}
},
data() {
... ... @@ -37,13 +45,25 @@ export default {
if (val !== editor.value.txt.html()) {
editor.value.txt.html(val)
}
}
},
repositoryInfo:{
handler(val){
console.log("%%%%%%%%%",val)
this.setValue(val);
},
deep:true
},
//value为编辑框输入的内容,这里我监听了一下值,当父组件调用得时候,如果给value赋值了,子组件将会显示父组件赋给的值
isDisabled: function(val) {
// 禁用编辑功能
this.setDisabled(val)
}
},
setup(props, {attrs, slots, emit}) {
const {proxy} = Vue.getCurrentInstance();
let editor=Vue.ref(null);
let info_=Vue.ref(null);
let elemText=Vue.ref(null);
Vue.watch(props.value, (newVal) => {
})
... ... @@ -54,6 +74,24 @@ export default {
seteditor();
editor.value.txt.html(props.value)
})
//引用知识库文本
let editorTxt=Vue.ref(null);
let setValue=(val)=>{
if (val !== editorTxt.value.html()) {
editorTxt.value.html(val)
}
}
//禁用编辑功能
let setDisabled=(val)=>{
let value=true;
if(val==0){
value=false;
}else{
value=true;
}
elemText.value.attr('contenteditable',value)
}
let seteditor=()=> {
editor.value = new wangEditor(proxy.$refs.toolbar, proxy.$refs.editor)
editor.value.customConfig.uploadImgShowBase64 = false // base 64 存储图片
... ... @@ -170,10 +208,17 @@ export default {
}
// 创建富文本编辑器
editor.value.create()
elemText.value=editor.value.$textElem;//.attr('contenteditable');
editorTxt.value=editor.value.txt;
}
return {
seteditor,
editor,
setDisabled,
setValue,
elemText,
editorTxt,
info_
}
}
... ...
... ... @@ -44,7 +44,9 @@ Promise.all([
//时间范围组件
.component('cm-date-range-influx', Vue.defineAsyncComponent(() => myImport('components/common/dateRange/indexInflux')))
//富文本框组件
.component('cm-wang-editor', Vue.defineAsyncComponent(() => myImport('components/common/wangEditorComponent/index')));
.component('cm-wang-editor', Vue.defineAsyncComponent(() => myImport('components/common/wangEditorComponent/index')))
//告警通知统计信息
.component('cm-notice-statistics', Vue.defineAsyncComponent(() => myImport('components/common/noticeStatistics/index')));
// // 自定义指令
... ...
... ... @@ -15,7 +15,7 @@
资源类型:{{alarmInfo.resType}}
</div>
<div class="info-item">
所属业务系统:{{alarmInfo.alarmResource==1?'华为告警':'监控系统'}}
所属业务系统:{{alarmInfo.busTypeName}}
</div>
<div class="info-item">
IP地址:{{alarmInfo.ip}}
... ... @@ -34,7 +34,7 @@
<div class="content-title">告警信息</div>
<div class="content-body-info">
<div class="info-item">
告警级别:<sapn>{{alarmInfo.alarmLevel}}</sapn>
告警级别:<sapn>{{alarmInfo.alarmLevel==1?'一般':alarmInfo.alarmLevel==2?'重要':'严重'}}</sapn>
</div>
<div class="info-item">
首次时间:{{alarmInfo.alarmTime}}
... ... @@ -42,82 +42,90 @@
<div class="info-item">
最后一次时间:{{alarmInfo.updateTime}}
</div>
<div class="info-item">
消除时间:
<div class="info-item" v-if="alarmInfo.alarmType!=active">
消除人:{{alarmInfo.clearUserId}}
</div>
<div class="info-item">
告警次数:{{alarmInfo.alarmRepeatCnt}}
<div class="info-item" v-if="alarmInfo.alarmType!=active">
消除原因:{{alarmInfo.clearReason}}
</div>
<div class="info-item">
实际告警值:
<div class="info-item" v-if="alarmInfo.alarmType!=active">
消除时间:{{alarmInfo.clearTime}}
</div>
<div class="info-item">
消除人告警策略:
</div>
</div>
</div>
</div>
<div class="info-content">
<div class="info-content-body">
<div class="content-body-info">
<div class="info-item">
通知信息:monitor_xjic
告警次数:{{alarmInfo.alarmRepeatCnt?alarmInfo.alarmRepeatCnt:0}}
</div>
<div class="info-item">
通知人清单:monitor_xjic
实际告警值:{{alarmInfo.kpiValue}}
</div>
</div>
</div>
</div>
<div class="info-content">
<div class="info-content-body">
<div class="content-body-info">
<div class="info-item">
统计信息:monitor_xjic
</div>
</div>
</div>
</div>
<div class="info-content">
<div class="info-content-body">
<div class="content-body-info">
<div class="info-item">
同类型告警处理过程:monitor_xjic
</div>
</div>
<!--通知统计信息组件-->
<cm-notice-statistics :alarmId="alarmInfo.id"></cm-notice-statistics>
</div>
<div class="alarmsRadio" v-if="!isExamine">
<div class="alarmNotice-title">消除原因</div>
<div class="alarmsNotice">
<div class="alarmsDes"><el-input v-model="reason" placeholder="消除原因" /></div>
<div class="alarmsNotice-radio">
<span class="radioLabel">是否通知:</span>
<el-radio-group v-model="noticeFlag">
<el-radio :label="true"></el-radio>
<el-radio :label="false"></el-radio>
</el-radio-group>
</div>
</div>
</div>
<div class="alarmsClearEditor-scheme">
<div class="scheme-title-per"> <span class="title-handle-per">处理方案</span>
<div class="scheme-title-per">
<span class="title-handle-per">处理方案</span>
<span class="title-handle-per" v-if="isExamine">处理人:{{loginName}}</span>
<span class="title-handle-per" v-if="isExamine">时间:{{alarmInfo.dateTime}}</span>
<el-tooltip :content="'是否入知识库'" placement="top" v-if="!isExamine">
<el-switch
v-model="repositoryInto"
active-value="1"
inactive-value="0"
/>
</el-tooltip>
</div>
<div class="scheme-title">
<span class="title-handle-per">
<span class="title-handle-per" v-if="!isExamine">
<!--v-model="cascaderValue"
:options="cascaderOptions"-->
<el-cascader
v-model="cascaderValue"
:options="cascaderOptions"
:props="propsTrigger"
@change="handleChange"
placeholder="搜索选择内容"
filterable
clearable
/>
</span>
<!-- <span class="title-handle-per">处理人:admin</span>-->
<span class="title-handle-per">审批人:{{approverName}} <el-button type="primary" @click="showUserDialog(true)" size="small">选择审批人</el-button>
<!-- <el-select v-model="approver" filterable placeholder="选择审批人" @change="changeApprover">
<el-option
v-for="item in options"
:key="item.value"
:label="item.name"
:value="item.value"
/>
</el-select>-->
<span class="title-handle-per" v-if="!isExamine">审批人:{{approverName}} <el-button v-if="!isExamine" type="primary" @click="showUserDialog(true)" size="small">选择审批人</el-button>
</span>
<span class="title-handle-per">时间:{{dateTime}}</span>
<span class="title-handle-per" v-if="!isExamine">时间:{{dateTime}}</span>
</div>
<cm-wang-editor v-if="!isExamine" v-model="detail" :repositoryInfo="repositoryInfo" :isDisabled="repositoryInto" :isClear="isClear" @change="change" @changetext="changetext"></cm-wang-editor>
<div class="editor_detail" v-if="isExamine" >de3333
<div v-html="detail"></div>
</div>
<cm-wang-editor v-model="detail" :isClear="isClear" @change="change" @changetext="changetext"></cm-wang-editor>
</div>
<div class="alarmsClearTag">
<div class="detail_comments" v-if="isExamine">
<div class="detail_comments_title">审核意见</div>
<el-input
v-model="textarea1"
type="textarea"
:rows="5"
placeholder="此处输入审核意见"
/>
</div>
<div class="alarmsClearTag" v-if="repositoryInto==1 && !isExamine">
<div class="tag-keyword">
关键字:
<el-tag
... ... @@ -143,37 +151,27 @@
+ New Tag
</el-button>
</div>
<div class="tag-keyword-get"><el-button type="primary" @click="getKeyword" size="small">关键字提取</el-button></div>
<!-- <div class="tag-keyword-get"><el-button type="primary" @click="getKeyword" size="small">关键字提取</el-button></div>-->
</div>
<div class="alarmsRadio">
<div class="alarmsNotice">
<div class="alarmsDes"><el-input v-model="input" placeholder="简要说明" /></div>
<div class="alarmsNotice-radio">
<span class="radioLabel">是否通知:</span>
<el-radio-group v-model="noticeFlag">
<el-radio :label="true"></el-radio>
<el-radio :label="false"></el-radio>
</el-radio-group>
</div>
</div>
</div>
<div class="alarmsCover">
<div class="alarmsCover" v-if="repositoryInto==1 && !isExamine">
<span class="radioLabel">引用是否覆盖:</span>
<el-radio-group v-model="noticeFlag">
<el-radio-group v-model="citeCover">
<el-radio :label="true"></el-radio>
<el-radio :label="false"></el-radio>
</el-radio-group>
</div>
<div class="alarmsClearEditor-btn">
<el-button type="primary" @click="saveDetail(0)" size="small">存为草稿</el-button>
<el-button type="primary" @click="saveDetail(1)" size="small">确认</el-button>
<el-button @click="saveDetail" size="small">取消</el-button>
<el-button type="primary" @click="saveDetail(0)" v-if="!isExamine" size="small">存为草稿</el-button>
<el-button type="primary" @click="saveDetail(1)" v-if="!isExamine" size="small">确认</el-button>
<el-button type="primary" @click="saveDetail(2)" v-if="isExamine" size="small">通过</el-button>
<el-button type="primary" @click="saveDetail(3)" v-if="isExamine" size="small">不通过</el-button>
<el-button @click="cancleBtn" size="small">取消</el-button>
</div>
<cm-userright title="审批人" :titles="titles" :showRole="false" :showGroup="false" :showDialogVisible="showUserDialogVisible" :selectedArr="userFileRight" :userArr="userList" :isUser="false" :showOrg="false" @callback="selectUser"
@hideDialog="showUserDialog"></cm-userright>
<!--关键字提取列表-->
<cm-dialog :title="title" width="60%" :showDialogVisible="dialogVisible" :showFooter="true" @okfunc="okfunc" @hidedialog="closeDetail" :showOkBtn="true">
<template v-slot>
<cm-table-page :columns="columns" :dataList="dataList" @loaddata="getPage" :showIndex="true"
... ...
... ... @@ -2,7 +2,12 @@ export default {
name: 'alarmsClearEditor',
template: '',
components: {},
props:[],
props: {
isExamine: {
type: Boolean,
default: false
},
},
data () {
return {
}
... ... @@ -17,19 +22,11 @@ export default {
//审批人
let approver=Vue.ref('');
let approverName=Vue.ref('admin');
//操作人
let loginName=Vue.ref('');
let options=Vue.ref([{value:'001',name:'admin'},{value:'002',name:'root'}])
let timer=Vue.ref(null);
// 挂载完
Vue.onMounted(() => {
//定时器每秒调用一次fnDate()
timer.value=setInterval(function(){
getDateTime();
},1000);
getAlarmInfo();
})
Vue.onUnmounted(()=>{
timer.value=null;
})
//富文本带标签内容
let change=(val)=> {
detail.value=val;
... ... @@ -39,27 +36,50 @@ export default {
detailText.value=val;
}
//保存富文本内容
let repositoryInto=Vue.ref('1');//是否入知识库
let repositoryId=Vue.ref('');//知识库id
let citeCover=Vue.ref(true);//是否覆盖
let reason=Vue.ref('');//简要说明
let alarmType=Vue.ref('active');//告警类型
let saveDetail=(val)=>{
console.log("detailText",detailText.value)
let dynamicTagsStr=dynamicTags.value.join(',');
let pcontent=detail.value;
if(repositoryInto.value==0){
pcontent='';
detailText.value=''
}
let params={
detail:detail.value,//富文本详情
state:val,//存储状态 0 草稿,1 审批中
approverName:approverName.value,//审批人
pcontent:pcontent,//富文本详情
status:val,//存储状态 0 草稿,1 审批中
approver:approverName.value,//审批人
dateTime:dateTime.value,//当前时间
keyword:dynamicTagsStr,//关键字
aralmid:alarmInfo.id,//告警id
// manageTime:dateTime.value,//处理时间
// manageName:loginName.value,//处理人
// repositoryId:repositoryId.value,//引用知识库id
repositoryInto:repositoryInto.value,//是否入知识库 1入,0不入
citeCover:citeCover.value?1:0,//引用是否覆盖 0 未覆盖 1已覆盖
reason:reason.value,//消除原因
noticeFlag:noticeFlag.value,//是否通知
alarmType:alarmInfo.alarmType,//告警类型,active活动告警,his历史告警
}
}
//审批人change事件
let changeApprover=(val)=>{
let arr=options.value;
console.log("val",val)
arr.map(item=>{
if(item.value==val){
approverName.value=item.name;
proxy.$http.post(`/api-web/bAlarmManage/clearAlarm`, params, function (res) {
if (res && res.code == 0) {
proxy.$global.showMsg(res.msg, 'success');
cancleBtn();
}else{
proxy.$global.showMsg(res.msg, 'warning');
}
})
}
//取消按钮
let cancleBtn=()=>{
window.parent.layer.closeAll();
}
//关键字标签
const inputValue = Vue.ref('')
const dynamicTags = Vue.ref(['Tag 1', 'Tag 2', 'Tag 3'])
const inputVisible = Vue.ref(false)
... ... @@ -85,7 +105,6 @@ export default {
}
//提取关键字
let getKeyword=()=>{
console.log("detailText.value",detailText.value)
if(!detailText.value){
proxy.$global.showMsg('请输入处理方案!', 'warning');
... ... @@ -123,12 +142,12 @@ export default {
dynamicTags.value.push(item.keyword);
})
dialogVisible.value=false;
console.log("dynamicTags",dynamicTags.value)
}else{
proxy.$global.showMsg('请选择关键字!', 'warning');
}
}
//获取所有的关键字列表
let getPage=()=>{
}
... ... @@ -220,7 +239,9 @@ export default {
let userIds = userObj.user.map(function (v) {
return v.username;
});
console.log("userObj",userObj)
console.log("userIds",userObj)
approverName.value=userIds.join(',')
}
//获取当前时间
... ... @@ -237,25 +258,68 @@ export default {
//获取告警信息
let alarmInfo=Vue.ref({});
let getAlarmInfo=()=>{
console.log("proxy.$route.query",proxy.$route.query)
alarmInfo.value=proxy.$route.query
if(props.isExamine){
//审核告警消除
}else {
alarmInfo.value=proxy.$route.query;
}
getUserByToken();
getUser();
}
//级联选择器
const cascaderValue = Vue.ref([])
const propsTrigger = {
expandTrigger: 'hover',
lazy: true,
lazyLoad(node, resolve) {
console.log("node",node,node.value,node.level)
const { level } = node
console.log("level",level,cascaderValue.value)
setTimeout(() => {
// const nodes = Array.from({ length: level + 1 }).map((item) => ({
// value: ++id,
// label: `Option - ${id}`,
// leaf: level >= 2,
// }))
//动态获取关键字相关的方案文本
cascaderOptions.value=[{
value: 'v1',
label: 'Disciplines',
leaf: level >=1,
},{
value: 'v2',
label: 'll',
leaf: level >=1,
}]
// Invoke `resolve` callback to return the child nodes data and indicate the loading is finished.
resolve(cascaderOptions.value)
}, 500)
},
}
// {
// expandTrigger: 'hover',
// }
//引用知识库的处理方案
let repositoryInfo=Vue.ref('');
const handleChange = (value) => {
console.log(value)
cascaderValue.value=value;
if(cascaderValue.value.length>1){
let arr=cascaderOptions.value;
arr.map(item=>{
if(item.value==cascaderValue.value[1]){
repositoryInfo.value=item.label;
}
})
}
// repositoryId
}
const cascaderOptions = [
{
value: 'guide',
label: 'Guide',
children: [
/*children: [
{
value: 'disciplines',
label: 'Disciplines',
... ... @@ -292,242 +356,61 @@ export default {
},
],
},
],
],*/
},
{
value: 'component',
label: 'Component',
children: [
{
value: 'basic',
label: 'Basic',
children: [
{
value: 'layout',
label: 'Layout',
},
{
value: 'color',
label: 'Color',
},
{
value: 'typography',
label: 'Typography',
},
{
value: 'icon',
label: 'Icon',
},
{
value: 'button',
label: 'Button',
},
],
},
{
value: 'form',
label: 'Form',
children: [
{
value: 'radio',
label: 'Radio',
},
{
value: 'checkbox',
label: 'Checkbox',
},
{
value: 'input',
label: 'Input',
},
{
value: 'input-number',
label: 'InputNumber',
},
{
value: 'select',
label: 'Select',
},
{
value: 'cascader',
label: 'Cascader',
},
{
value: 'switch',
label: 'Switch',
},
{
value: 'slider',
label: 'Slider',
},
{
value: 'time-picker',
label: 'TimePicker',
},
{
value: 'date-picker',
label: 'DatePicker',
},
{
value: 'datetime-picker',
label: 'DateTimePicker',
},
{
value: 'upload',
label: 'Upload',
},
{
value: 'rate',
label: 'Rate',
},
{
value: 'form',
label: 'Form',
},
],
},
{
value: 'data',
label: 'Data',
children: [
{
value: 'table',
label: 'Table',
},
{
value: 'tag',
label: 'Tag',
},
{
value: 'progress',
label: 'Progress',
},
{
value: 'tree',
label: 'Tree',
},
{
value: 'pagination',
label: 'Pagination',
},
{
value: 'badge',
label: 'Badge',
},
],
},
{
value: 'notice',
label: 'Notice',
children: [
{
value: 'alert',
label: 'Alert',
},
{
value: 'loading',
label: 'Loading',
},
{
value: 'message',
label: 'Message',
},
{
value: 'message-box',
label: 'MessageBox',
},
{
value: 'notification',
label: 'Notification',
},
],
},
{
value: 'navigation',
label: 'Navigation',
children: [
{
value: 'menu',
label: 'Menu',
},
{
value: 'tabs',
label: 'Tabs',
},
{
value: 'breadcrumb',
label: 'Breadcrumb',
},
{
value: 'dropdown',
label: 'Dropdown',
},
{
value: 'steps',
label: 'Steps',
},
],
},
{
value: 'others',
label: 'Others',
children: [
{
value: 'dialog',
label: 'Dialog',
},
{
value: 'tooltip',
label: 'Tooltip',
},
{
value: 'popover',
label: 'Popover',
},
{
value: 'card',
label: 'Card',
},
{
value: 'carousel',
label: 'Carousel',
},
{
value: 'collapse',
label: 'Collapse',
},
],
},
],
},
{
value: 'resource',
label: 'Resource',
children: [
{
value: 'axure',
label: 'Axure Components',
},
{
value: 'sketch',
label: 'Sketch Templates',
},
{
value: 'docs',
label: 'Design Documentation',
},
],
},
]
//是否通知
let noticeFlag=Vue.ref(true)
let noticeFlag=Vue.ref(true);
//获取当前登录人-操作人
let getUserByToken=()=>{
proxy.$http.get(`/api-user/users/getUserByToken`, {}, function (res) {
if (res && res.code == 0) {
let userData=res.object;
loginName.value=userData.username;
}
})
}
//获取告警负责人-默认审批人
let getUser=()=>{
proxy.$http.get(`/api-web/bAlarmManage/alarm/userName`, {alarmNo:alarmInfo.alarmNo}, function (res) {
if (res && res.code == 0) {
let data=res.object;
if(data){
approverName.value=data.adminName;x
}
}
})
}
// 挂载完
Vue.onMounted(() => {
//定时器每秒调用一次fnDate()
timer.value=setInterval(function(){
getDateTime();
},1000);
getAlarmInfo();
})
Vue.onUnmounted(()=>{
timer.value=null;
})
return {
change,changetext,saveDetail,approver,approverName,detailText,detail,
options,changeApprover,inputValue,dynamicTags,inputVisible,handleClose,showInput,handleInputConfirm,
change,changetext,saveDetail,approver,approverName,loginName,detailText,detail,repositoryInto,reason,citeCover,alarmType,
options,inputValue,dynamicTags,inputVisible,handleClose,showInput,handleInputConfirm,
getKeyword, timer,dateTime,getDateTime,timeFormat,
title, dialogVisible, height, dataList, columns, closeDetail,okfunc, getPage,selectionChange,dynamicTagsAppend,
showUserDialog,showUserDialogVisible,userFileRight,userList,selectUser,getUserList,titles,
getAlarmInfo,alarmInfo,cascaderValue,propsTrigger,handleChange,cascaderOptions,noticeFlag
getAlarmInfo,alarmInfo,cascaderValue,propsTrigger,handleChange,cascaderOptions,noticeFlag,
getUserByToken,getUser,cancleBtn,repositoryInfo,repositoryId
}
}
... ...
... ... @@ -249,82 +249,101 @@ layui.define(['table', 'form', 'laydate', 'admin', 'layer', 'laytpl', 'common',
$.each(data, function (i, obj) {
ids.push(obj.id)
});
//获取以往告警消除意见
//获取知识库开启状态
admin.req({
url: common.domainName + '/api-web/home/alarm/clear/reason',
url: common.domainName + '/api-user/sysConf/getByCode',
type: "get",
data:{
alarmId: ids.toString()
data: {
code: 'knFlag'
},
done:function (data) {
var clearReson = "暂无参考处理方案,请输入处理方案";
var hisReason = "";
var reasonlist = data.reason;
if(reasonlist && reasonlist.length > 0){
hisReason = "参考方案:\n";
$.each(reasonlist,function (i,v) {
var idx = i + 1;
hisReason += idx +":"+v +"\n";
});
}
/////////////////////////
// Start 将对象转成key=value&key1=value1 LSQ 2022/03/22
let urlParams='';
let paramsData=table.checkStatus('activewarningTable').data;
if (paramsData.length >1) {
layer.msg('只能选择一项数据', {icon: 7, time: 2000});
return;
}
let params=paramsData[0];
console.log("params",params)
for(let key in params){
if(params[key]){
urlParams+=key+'='+params[key]+'&'
done: function (data) {
console.log("knFlag",data)
let knFlag=data.object.value;
if(knFlag){
//开启闭环
/////////////////////////
// Start 将对象转成key=value&key1=value1 LSQ 2022/03/22
let urlParams='';
let paramsData=table.checkStatus('activewarningTable').data;
if (paramsData.length >1) {
layer.msg('只能选择一项数据', {icon: 7, time: 2000});
return;
}
}
urlParams=urlParams.substr(0,urlParams.length-1)
layer.open({
title: ['告警消除', 'font-size:18px;'],
type: 2,
area: ['80%', '90%'],
shadeClose: true,//开启遮罩层
id: 'alarms_clear_id',
// content: laytpl(res.body).render(JSON.stringify(params)),
content: ['/vue3/index.html#/alarmsClearEditor?'+urlParams, 'no'],
cancel: function () {
clearTimeout();
let params=paramsData[0];
console.log("params",params)
for(let key in params){
if(params[key]){
urlParams+=key+'='+params[key]+'&'
}
}
});
urlParams=urlParams.substr(0,urlParams.length-1)+'&alarmType=active';
layer.open({
title: ['告警消除', 'font-size:18px;'],
type: 2,
area: ['80%', '90%'],
shadeClose: true,//开启遮罩层
id: 'alarms_clear_id',
// content: laytpl(res.body).render(JSON.stringify(params)),
content: ['/vue3/index.html#/alarmsClearEditor?'+urlParams, 'no'],
cancel: function () {
clearTimeout();
}
});
///////////////////////////
/*layer.prompt({id: "alarms_clear_id", title: '告警消除', area: ['400px'], formType: 2,value: hisReason}, function (text, index) {
}else{
//不开启闭环
//获取以往告警消除意见
admin.req({
url: common.domainName + '/api-web/home/alarm/clear'
, type: "post"
, data: {
ids: ids.toString(),
reason: text,
access_token: accessToken,
noticeFlag: $('input[name="noticeFlag"]:checked').val()
}
, done: function (res) {
//如果消除成功,关闭弹出框然后重新加载页面
if (res.success) {
layer.close(index);
layer.msg('告警已消除!', {icon: 1, time: 2000});
reloadTable();
} else {
layer.msg('告警消除失败,请与管理员联系!', {icon: 7, time: 3000});
url: common.domainName + '/api-web/home/alarm/clear/reason',
type: "get",
data:{
alarmId: ids.toString()
},
done:function (data) {
var clearReson = "暂无参考处理方案,请输入处理方案";
var hisReason = "";
var reasonlist = data.reason;
if(reasonlist && reasonlist.length > 0){
hisReason = "参考方案:\n";
$.each(reasonlist,function (i,v) {
var idx = i + 1;
hisReason += idx +":"+v +"\n";
});
}
layer.prompt({id: "alarms_clear_id", title: '告警消除', area: ['400px'], formType: 2,value: hisReason}, function (text, index) {
admin.req({
url: common.domainName + '/api-web/home/alarm/clear'
, type: "post"
, data: {
ids: ids.toString(),
reason: text,
access_token: accessToken,
noticeFlag: $('input[name="noticeFlag"]:checked').val()
}
, done: function (res) {
//如果消除成功,关闭弹出框然后重新加载页面
if (res.success) {
layer.close(index);
layer.msg('告警已消除!', {icon: 1, time: 2000});
reloadTable();
} else {
layer.msg('告警消除失败,请与管理员联系!', {icon: 7, time: 3000});
}
}
});
});
$("#alarms_clear_id").find('textarea.layui-layer-input').attr("placeholder", clearReson);
$("#alarms_clear_id").append('<div style="padding-top: 15px;"><span>是否通知:</span> ' +
'<input type="radio" name="noticeFlag" value="true" title="是" >&nbsp;是' +
'<input type="radio" name="noticeFlag" value="false" title="否" checked="" style="margin-left: 20px;">&nbsp;否</div> ');
}
});
});
$("#alarms_clear_id").find('textarea.layui-layer-input').attr("placeholder", clearReson);
$("#alarms_clear_id").append('<div style="padding-top: 15px;"><span>是否通知:</span> ' +
'<input type="radio" name="noticeFlag" value="true" title="是" >&nbsp;是' +
'<input type="radio" name="noticeFlag" value="false" title="否" checked="" style="margin-left: 20px;">&nbsp;否</div> ');*/
}
}
});
})
});
//告警关闭
$("#closeBtn").unbind('click').on("click", function () {
... ...
... ... @@ -282,7 +282,7 @@ layui.define(['table', 'form', 'laydate', 'admin', 'layer', 'laytpl', 'common',
, {field: 'durationStr', title: '持续时间', align: 'center', width: 190}
, {
title: '操作', align: 'center', minWidth: 100,
templet: '<div><span history-data-warn-view="{{d.id}}" class="layui-table-link">查看</span> <span history-data-warn-path="{{d.id}}" class="layui-table-link">轨迹</span></div>'
templet: '<div><span history-data-warn-clear="{{d.id}}" class="layui-table-link">消除</span> <span history-data-warn-view="{{d.id}}" class="layui-table-link">查看</span> <span history-data-warn-path="{{d.id}}" class="layui-table-link">轨迹</span></div>'
}
];
}
... ... @@ -319,6 +319,7 @@ layui.define(['table', 'form', 'laydate', 'admin', 'layer', 'laytpl', 'common',
, drag: {toolbar: false}
, cols: [cols],
done: function (res, curr, count) {
let resArr=res.data;
soulTable.render(this)
initHistoryBtnCLick();
var groupurl = domainName + '/api-web/home/alarm/countAlarmNumByAlarmLevel?access_token=' + accessToken;
... ... @@ -353,6 +354,43 @@ layui.define(['table', 'form', 'laydate', 'admin', 'layer', 'laytpl', 'common',
});
});
}
//start lsq 历史告警消除 2022-03-23
$('[history-data-warn-clear]').unbind("click").on('click', function () {
// Start 将对象转成key=value&key1=value1 LSQ 2022/03/22
let urlParams='';
// let paramsData=table.checkStatus('historywarningTable').data;
let paramsData= [];
if(resArr){
resArr.map(item=>{
if(item.id==$(this).attr('history-data-warn-clear')){
paramsData.push(item);
}
})
}
let params=paramsData[0];
console.log("params",params)
for(let key in params){
if(params[key]){
urlParams+=key+'='+params[key]+'&'
}
}
urlParams=urlParams.substr(0,urlParams.length-1)+'&alarmType=his';
layer.open({
title: ['告警消除', 'font-size:18px;'],
type: 2,
area: ['80%', '90%'],
shadeClose: true,//开启遮罩层
id: 'alarms_clear_id',
// content: laytpl(res.body).render(JSON.stringify(params)),
content: ['/vue3/index.html#/alarmsClearEditor?'+urlParams, 'no'],
cancel: function () {
clearTimeout();
}
});
})
//end lsq 2022-03-23
//告警操作日志
$('[history-data-warn-view]').unbind("click").on('click', function () {
admin.req({
... ...