NEZ-978 feat:alert rule 页面功能重构
This commit is contained in:
@@ -103,7 +103,7 @@ const cn = {
|
|||||||
exportExcelLower: '导出',
|
exportExcelLower: '导出',
|
||||||
rollbackImport: '回滚',
|
rollbackImport: '回滚',
|
||||||
exportCur: '当前页',
|
exportCur: '当前页',
|
||||||
exportAll: '总计',
|
exportAll: '全部',
|
||||||
importFile: '请上传文件',
|
importFile: '请上传文件',
|
||||||
importTip: '只允许xlsx/xls格式文件',
|
importTip: '只允许xlsx/xls格式文件',
|
||||||
importTipImg: '只允许jpg/png格式文件',
|
importTipImg: '只允许jpg/png格式文件',
|
||||||
@@ -1286,7 +1286,16 @@ const cn = {
|
|||||||
alertRuleInfo: '告警规则',
|
alertRuleInfo: '告警规则',
|
||||||
alertNumTrend: '告警数量趋势',
|
alertNumTrend: '告警数量趋势',
|
||||||
affectEntity: '影响'
|
affectEntity: '影响'
|
||||||
}
|
},
|
||||||
|
timeout: 'Timeout',
|
||||||
|
inr: 'Evaluation interval',
|
||||||
|
autoExpired: 'Automatic expired',
|
||||||
|
state: '状态',
|
||||||
|
schedEnable: 'Schedule',
|
||||||
|
schedDays: 'Effective time',
|
||||||
|
notifyActive: 'Active Notification',
|
||||||
|
notifyExpired: 'Expired notification',
|
||||||
|
trbShot: 'Trouble shooting'
|
||||||
},
|
},
|
||||||
silence: {
|
silence: {
|
||||||
name: '名称',
|
name: '名称',
|
||||||
@@ -1797,6 +1806,15 @@ const cn = {
|
|||||||
source: '来源',
|
source: '来源',
|
||||||
twoFactorAuthentication: '双因子认证'
|
twoFactorAuthentication: '双因子认证'
|
||||||
},
|
},
|
||||||
|
week:{
|
||||||
|
Mon: '周一',
|
||||||
|
Tue: '周二',
|
||||||
|
Wed: '周三',
|
||||||
|
Thu: '周四',
|
||||||
|
Fri: '周五',
|
||||||
|
Sat: '周六',
|
||||||
|
Sun: '周日'
|
||||||
|
},
|
||||||
...zhLocale
|
...zhLocale
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1289,7 +1289,16 @@ const en = {
|
|||||||
alertRuleInfo: 'Alert rule information',
|
alertRuleInfo: 'Alert rule information',
|
||||||
alertNumTrend: 'Alert num trend',
|
alertNumTrend: 'Alert num trend',
|
||||||
affectEntity: 'Affect entity'
|
affectEntity: 'Affect entity'
|
||||||
}
|
},
|
||||||
|
timeout: 'Timeout',
|
||||||
|
inr: 'Evaluation interval ',
|
||||||
|
autoExpired: 'Automatic expired',
|
||||||
|
state: 'State',
|
||||||
|
schedEnable: 'Schedule',
|
||||||
|
schedDays: 'Effective time',
|
||||||
|
notifyActive: 'Active Notification',
|
||||||
|
notifyExpired: 'Expired notification',
|
||||||
|
trbShot: 'Trouble shooting'
|
||||||
},
|
},
|
||||||
silence: {
|
silence: {
|
||||||
name: 'Name',
|
name: 'Name',
|
||||||
@@ -1679,6 +1688,15 @@ const en = {
|
|||||||
source: 'Source',
|
source: 'Source',
|
||||||
twoFactorAuthentication: 'Two-Factor Authentication'
|
twoFactorAuthentication: 'Two-Factor Authentication'
|
||||||
},
|
},
|
||||||
|
week: {
|
||||||
|
Mon: 'Monday',
|
||||||
|
Tue: 'Tuesday',
|
||||||
|
Wed: 'Wednesday',
|
||||||
|
Thu: 'Thursday',
|
||||||
|
Fri: 'Friday',
|
||||||
|
Sat: 'Saturday',
|
||||||
|
Sun: 'Sunday'
|
||||||
|
},
|
||||||
...enLocale
|
...enLocale
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,9 +15,10 @@
|
|||||||
<el-form ref="alertRuleForm" :model="editAlertRule" :rules="rules" label-position = "top" label-width="120px">
|
<el-form ref="alertRuleForm" :model="editAlertRule" :rules="rules" label-position = "top" label-width="120px">
|
||||||
<!--name-->
|
<!--name-->
|
||||||
<el-form-item :label='$t("alert.config.name")' prop="name">
|
<el-form-item :label='$t("alert.config.name")' prop="name">
|
||||||
<el-input id="alert-box-input-name" v-model="editAlertRule.name" maxlength="64" placeholder="" show-word-limit size="small"></el-input>
|
<el-input id="alert-box-input-name" ref="alertName" v-model="editAlertRule.name" maxlength="64" placeholder="" show-word-limit size="small"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="$t('overall.type')" prop="type">
|
<!--type-->
|
||||||
|
<el-form-item :label="$t('overall.type')" prop="type" class="half-form-item">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="fromData.status"
|
v-model="fromData.status"
|
||||||
class="right-box__select"
|
class="right-box__select"
|
||||||
@@ -32,6 +33,18 @@
|
|||||||
:value="item.value"></el-option>
|
:value="item.value"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<!--severity-->
|
||||||
|
<el-form-item :label="$t('alert.severity')" class="severity-box half-form-item" prop="severityId">
|
||||||
|
<el-select id="alert-box-input-severity" v-model="editAlertRule.severityId" class="right-box__select" placeholder="" popper-class="prevent-clickoutside" size="small">
|
||||||
|
<el-option v-for="item in severityData" :id="'alert-severity-'+item.value" :key="item.id" :label="item.name" :value="item.id">
|
||||||
|
<span>
|
||||||
|
<i :style="{color:item.color,'font-size':'12px'}" class="nz-icon nz-icon-circle"></i> {{item.name}}
|
||||||
|
</span>
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
<i v-if="editAlertRule.severityId" :style="{color:severityData.length > 0 && severityData.find(severity => severity.id === editAlertRule.severityId).color,'font-size':'12px'}" class="nz-icon nz-icon-circle severity-circle"></i>
|
||||||
|
</el-form-item>
|
||||||
|
<!--expr-->
|
||||||
<el-form-item v-if="showSnmpTrap" :label='$t("alert.config.exprBox")' prop="expr">
|
<el-form-item v-if="showSnmpTrap" :label='$t("alert.config.exprBox")' prop="expr">
|
||||||
<template v-if="showMetrics">
|
<template v-if="showMetrics">
|
||||||
<el-row style="line-height: 32px;">
|
<el-row style="line-height: 32px;">
|
||||||
@@ -68,42 +81,198 @@
|
|||||||
<el-input id="alert-box-input-oid" v-model="editAlertRule.expr" size="small" type="text"></el-input>
|
<el-input id="alert-box-input-oid" v-model="editAlertRule.expr" size="small" type="text"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!--threshold-->
|
<!--threshold-->
|
||||||
<el-form-item v-if="showSnmpTrap" :label="$t('alert.config.threshold')" prop="threshold" style="display: inline-block;">
|
<el-form-item :label="$t('alert.config.threshold')" prop="threshold" class="half-form-item" style="display: inline-block;">
|
||||||
<el-input id="alert-box-input-threshold" v-model="editAlertRule.threshold" placeholder="" size="small" type="text">
|
<el-input id="alert-box-input-threshold" v-model="editAlertRule.threshold" placeholder="" size="small" type="text" :disabled="!showSnmpTrap">
|
||||||
<el-select id="alert-box-input-operator" slot="prepend" v-model="editAlertRule.operator" class="hide-icon" popper-class="right-box-select-dropdown prevent-clickoutside" size="small">
|
<el-select id="alert-box-input-operator" slot="prepend" v-model="editAlertRule.operator" class="hide-icon" popper-class="prevent-clickoutside" size="small" :disabled="!showSnmpTrap">
|
||||||
<el-option v-for="item in operators" :id="'operator-'+item.key" :key="item.value" :label="item.label" :value="item.value"></el-option>
|
<el-option v-for="item in operators" :id="'operator-'+item.key" :key="item.value" :label="item.label" :value="item.value"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!--unit-->
|
<!--unit-->
|
||||||
<el-form-item v-if="showSnmpTrap" :label="$t('alert.config.unit')" prop="unit">
|
<el-form-item :label="$t('alert.config.unit')" class="half-form-item" prop="unit">
|
||||||
<el-cascader id="alert-box-input-unit" v-model="editAlertRule.unit" :options="unitOptions" :props="{ expandTrigger: 'click',emitPath:false }" :show-all-levels="false" filterable
|
<el-cascader id="alert-box-input-unit" v-model="editAlertRule.unit" :options="unitOptions" :props="{ expandTrigger: 'click',emitPath:false }" :show-all-levels="false" filterable
|
||||||
placeholder=""
|
placeholder=""
|
||||||
popper-class="no-style-class unit-popper-class"
|
popper-class="no-style-class unit-popper-class"
|
||||||
size="small"
|
size="small"
|
||||||
|
:disabled="!showSnmpTrap"
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
>
|
>
|
||||||
</el-cascader>
|
</el-cascader>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<!--inr-->
|
||||||
|
<el-form-item :label="$t('alert.config.inr')" prop="inr" class="half-form-item">
|
||||||
|
<el-input id="alert-box-input-inr" v-model.number="editAlertRule.inr" placeholder="" size="small" type="text" :disabled="!showSnmpTrap"></el-input>
|
||||||
|
</el-form-item>
|
||||||
<!--last-->
|
<!--last-->
|
||||||
<el-form-item :label="$t('alert.config.for')" prop="last">
|
<el-form-item :label="$t('alert.config.for')" prop="last" class="half-form-item">
|
||||||
<el-input id="alert-box-input-last" v-model.number="editAlertRule.last" placeholder="" size="small" type="text">
|
<el-input id="alert-box-input-last" v-model.number="editAlertRule.last" placeholder="" size="small" type="text">
|
||||||
<template slot="append">{{$t('alert.config.second')}}</template>
|
<template slot="append">{{$t('alert.config.second')}}</template>
|
||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!--severity-->
|
<!--autoExpired-->
|
||||||
<el-form-item :label="$t('alert.severity')" class="severity-box" prop="severityId">
|
<el-form-item :label="$t('alert.config.autoExpired')" prop="autoExpired" class="half-form-item">
|
||||||
<el-select id="alert-box-input-severity" v-model="editAlertRule.severityId" class="right-box__select" placeholder="" popper-class="right-box-select-dropdown prevent-clickoutside" size="small">
|
<el-select
|
||||||
<el-option v-for="item in severityData" :id="'alert-severity-'+item.value" :key="item.id" :label="item.name" :value="item.id">
|
id="alert-box-input-autoExpired"
|
||||||
<span>
|
v-model="editAlertRule.autoExpired"
|
||||||
<i :style="{color:item.color,'font-size':'12px'}" class="nz-icon nz-icon-circle"></i> {{item.name}}
|
class="right-box__select half-form-item"
|
||||||
</span>
|
placeholder=""
|
||||||
|
popper-class="prevent-clickoutside"
|
||||||
|
size="small"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
:label="$t('dashboard.panel.chartForm.lockList.on')"
|
||||||
|
:value="1">
|
||||||
|
</el-option>
|
||||||
|
<el-option
|
||||||
|
:label="$t('dashboard.panel.chartForm.lockList.off')"
|
||||||
|
:value="0">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<!--timeout-->
|
||||||
|
<el-form-item :label="$t('alert.config.timeout')" prop="timeout" class="half-form-item">
|
||||||
|
<el-input id="alert-box-input-timeout" v-model.number="editAlertRule.timeout" placeholder="" size="small" type="text"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<!--summary-->
|
||||||
|
<el-form-item :label="$t('alert.summary')" prop="summary">
|
||||||
|
<el-input id="alert-box-input-summary" v-model="editAlertRule.summary" maxlength="512" placeholder="" rows="3" show-word-limit size="small" type="textarea"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<!--description-->
|
||||||
|
<el-form-item :label="$t('overall.remark')" prop="description">
|
||||||
|
<el-input id="alert-box-input-description" v-model="editAlertRule.description" maxlength="256" placeholder="" rows="4" show-word-limit size="small" type="textarea"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<div class="alert-rule-split-title">Effective configuration</div>
|
||||||
|
<!--state-->
|
||||||
|
<el-form-item :label="$t('alert.config.state')" prop="state" class="half-form-item">
|
||||||
|
<el-select
|
||||||
|
id="alert-box-input-state"
|
||||||
|
v-model="editAlertRule.state"
|
||||||
|
class="right-box__select half-form-item"
|
||||||
|
placeholder=""
|
||||||
|
:popper-append-to-body="false"
|
||||||
|
popper-class="prevent-clickoutside"
|
||||||
|
size="small"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
:label="$t('dashboard.panel.chartForm.lockList.on')"
|
||||||
|
:value="1">
|
||||||
|
</el-option>
|
||||||
|
<el-option
|
||||||
|
:label="$t('dashboard.panel.chartForm.lockList.off')"
|
||||||
|
:value="0">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<!--schedEnable-->
|
||||||
|
<el-form-item :label="$t('alert.config.schedEnable')" prop="schedEnable" class="half-form-item">
|
||||||
|
<el-select
|
||||||
|
id="alert-box-input-schedEnable"
|
||||||
|
v-model="editAlertRule.schedEnable"
|
||||||
|
class="right-box__select half-form-item"
|
||||||
|
placeholder=""
|
||||||
|
:popper-append-to-body="false"
|
||||||
|
popper-class="prevent-clickoutside"
|
||||||
|
size="small"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
:label="$t('dashboard.panel.chartForm.lockList.on')"
|
||||||
|
:value="1">
|
||||||
|
</el-option>
|
||||||
|
<el-option
|
||||||
|
:label="$t('dashboard.panel.chartForm.lockList.off')"
|
||||||
|
:value="0">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<!--schedDays-->
|
||||||
|
<el-form-item :label="$t('alert.config.schedDays')" prop="schedDays" :rules="[{ required: editAlertRule.schedEnable, message: this.$t('validate.required'), trigger: 'blur' }]">
|
||||||
|
<el-select
|
||||||
|
id="alert-box-input-schedDays"
|
||||||
|
style="width: 100%"
|
||||||
|
v-model="editAlertRule.schedDays"
|
||||||
|
class="right-box__select half-form-item"
|
||||||
|
placeholder=""
|
||||||
|
multiple
|
||||||
|
@change="$refs.alertRuleForm.validateField('schedDays')"
|
||||||
|
popper-class="prevent-clickoutside"
|
||||||
|
size="small"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in weekList"
|
||||||
|
:key="item.value"
|
||||||
|
:label="item.label"
|
||||||
|
:value="item.value">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item style="margin-top: -15px;">
|
||||||
|
<el-time-picker
|
||||||
|
style="width: calc(50% - 5px);display: inline-block"
|
||||||
|
:value-format="'HH:mm'"
|
||||||
|
:format="'HH:mm'"
|
||||||
|
v-model="editAlertRule.schedStime"
|
||||||
|
size="small"
|
||||||
|
:clearable = 'false'
|
||||||
|
:picker-options="{
|
||||||
|
}">
|
||||||
|
</el-time-picker>
|
||||||
|
<el-time-picker
|
||||||
|
style="width: calc(50% - 5px);display: inline-block"
|
||||||
|
:value-format="'HH:mm'"
|
||||||
|
:format="'HH:mm'"
|
||||||
|
size="small"
|
||||||
|
:clearable = 'false'
|
||||||
|
v-model="editAlertRule.schedEtime"
|
||||||
|
:picker-options="{
|
||||||
|
minTime: editAlertRule.schedStime
|
||||||
|
}">
|
||||||
|
</el-time-picker>
|
||||||
|
</el-form-item>
|
||||||
|
<div class="alert-rule-split-title">Notification configuration</div>
|
||||||
|
<!--notifyActive-->
|
||||||
|
<el-form-item :label="$t('alert.config.notifyActive')" prop="notifyActive" class="half-form-item">
|
||||||
|
<el-select
|
||||||
|
id="alert-box-input-notifyActive"
|
||||||
|
v-model="editAlertRule.notifyActive"
|
||||||
|
class="right-box__select half-form-item"
|
||||||
|
placeholder=""
|
||||||
|
:popper-append-to-body="false"
|
||||||
|
popper-class="prevent-clickoutside"
|
||||||
|
size="small"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
:label="$t('dashboard.panel.chartForm.lockList.on')"
|
||||||
|
:value="1">
|
||||||
|
</el-option>
|
||||||
|
<el-option
|
||||||
|
:label="$t('dashboard.panel.chartForm.lockList.off')"
|
||||||
|
:value="0">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<!--notifyExpired-->
|
||||||
|
<el-form-item :label="$t('alert.config.notifyExpired')" prop="notifyExpired" class="half-form-item">
|
||||||
|
<el-select
|
||||||
|
id="alert-box-input-notifyExpired"
|
||||||
|
v-model="editAlertRule.notifyExpired"
|
||||||
|
class="right-box__select half-form-item"
|
||||||
|
placeholder=""
|
||||||
|
:popper-append-to-body="false"
|
||||||
|
popper-class="prevent-clickoutside"
|
||||||
|
size="small"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
:label="$t('dashboard.panel.chartForm.lockList.on')"
|
||||||
|
:value="1">
|
||||||
|
</el-option>
|
||||||
|
<el-option
|
||||||
|
:label="$t('dashboard.panel.chartForm.lockList.off')"
|
||||||
|
:value="0">
|
||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
<i v-if="editAlertRule.severityId" :style="{color:severityData.length > 0 && severityData.find(severity => severity.id === editAlertRule.severityId).color,'font-size':'12px'}" class="nz-icon nz-icon-circle severity-circle"></i>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!--receiver-->
|
<!--receiver-->
|
||||||
<el-form-item :label="$t('config.user.receiver')" prop="receiver">
|
<el-form-item :label="$t('config.user.receiver')" prop="receiver" :rules="[{ required: editAlertRule.notifyExpired || editAlertRule.notifyActive, message: this.$t('validate.required'), trigger: 'blur' }]">
|
||||||
<el-select
|
<el-select
|
||||||
id="alert-box-input-receiver"
|
id="alert-box-input-receiver"
|
||||||
v-model.trim="editAlertRule.receiverShow"
|
v-model.trim="editAlertRule.receiverShow"
|
||||||
@@ -111,7 +280,7 @@
|
|||||||
filterable
|
filterable
|
||||||
multiple
|
multiple
|
||||||
placeholder=""
|
placeholder=""
|
||||||
popper-class="right-box-select-dropdown prevent-clickoutside"
|
popper-class="prevent-clickoutside"
|
||||||
size="small"
|
size="small"
|
||||||
value-key="userId"
|
value-key="userId"
|
||||||
@change="receiverShowChange"
|
@change="receiverShowChange"
|
||||||
@@ -125,30 +294,15 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!--notify-->
|
<!--notify-->
|
||||||
<el-form-item :label="$t('alert.notify')" :rules="[{ validator: validateNotify, trigger: 'change'},]" class="notify-box" prop="method">
|
<el-form-item :label="$t('alert.notify')" :rules="[{ required: editAlertRule.notifyExpired || editAlertRule.notifyActive, message: this.$t('validate.required'), trigger: 'change' }]" class="notify-box" prop="method" >
|
||||||
<el-select id="alert-box-input-notify" v-model="editAlertRule.method" class="right-box__select" multiple placeholder="" popper-class="right-box-select-dropdown prevent-clickoutside" size="small">
|
<el-select id="alert-box-input-notify" v-model="editAlertRule.method" class="right-box__select" multiple placeholder="" :popper-append-to-body="false" popper-class="right-box-select-dropdown prevent-clickoutside" size="small">
|
||||||
<el-option v-for="item in notifyData" :id="'alert-severity-'+item.value" :key="item.id" :label="item.name" :value="item.id">
|
<el-option v-for="item in notifyData" :id="'alert-severity-'+item.value" :key="item.id" :label="item.name" :value="item.id">
|
||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!--summary-->
|
<div class="alert-rule-split-title">More</div>
|
||||||
<el-form-item :label="$t('alert.summary')" prop="summary">
|
<el-form-item :label="$t('alert.config.trbShot')" prop="trbShot">
|
||||||
<el-input id="alert-box-input-summary" v-model="editAlertRule.summary" maxlength="512" placeholder="" rows="3" show-word-limit size="small" type="textarea"></el-input>
|
<rich-text-editor ref="richTextEditor" :edit-data="editAlertRule.trbShot" @after-init="afterInitRich"></rich-text-editor>
|
||||||
</el-form-item>
|
|
||||||
<!--description-->
|
|
||||||
<el-form-item :label="$t('overall.remark')" prop="description">
|
|
||||||
<el-input id="alert-box-input-description" v-model="editAlertRule.description" maxlength="256" placeholder="" rows="4" show-word-limit size="small" type="textarea"></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
<!--state-->
|
|
||||||
<el-form-item :label='$t("config.dc.state")' prop="state">
|
|
||||||
<el-switch
|
|
||||||
id="dc-box-input-name"
|
|
||||||
v-model="editAlertRule.state"
|
|
||||||
:active-value="1"
|
|
||||||
:inactive-value="0"
|
|
||||||
active-color="#ee9d3f"
|
|
||||||
>
|
|
||||||
</el-switch>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
@@ -172,13 +326,15 @@ import chartDataFormat from '../../charts/chartDataFormat'
|
|||||||
import promqlInput from '../../page/dashboard/explore/promqlInput'
|
import promqlInput from '../../page/dashboard/explore/promqlInput'
|
||||||
import { nzNumber } from '../js/validate'
|
import { nzNumber } from '../js/validate'
|
||||||
import editRigthBox from '../mixin/editRigthBox'
|
import editRigthBox from '../mixin/editRigthBox'
|
||||||
|
import richTextEditor from '@/components/charts/richTextEditor'
|
||||||
export default {
|
export default {
|
||||||
name: 'alertRuleBox',
|
name: 'alertRuleBox',
|
||||||
props: {
|
props: {
|
||||||
alertRule: Object
|
alertRule: Object
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
'promql-input': promqlInput
|
'promql-input': promqlInput,
|
||||||
|
richTextEditor
|
||||||
},
|
},
|
||||||
mixins: [editRigthBox],
|
mixins: [editRigthBox],
|
||||||
data () {
|
data () {
|
||||||
@@ -280,7 +436,31 @@ export default {
|
|||||||
userData: [],
|
userData: [],
|
||||||
severityData: [],
|
severityData: [],
|
||||||
notifyData: [],
|
notifyData: [],
|
||||||
MetricsType: 1
|
MetricsType: 1,
|
||||||
|
weekList: [
|
||||||
|
{
|
||||||
|
value: 1,
|
||||||
|
label: this.$t('week.Sun')
|
||||||
|
}, {
|
||||||
|
value: 2,
|
||||||
|
label: this.$t('week.Mon')
|
||||||
|
}, {
|
||||||
|
value: 3,
|
||||||
|
label: this.$t('week.Tue')
|
||||||
|
}, {
|
||||||
|
value: 4,
|
||||||
|
label: this.$t('week.Wed')
|
||||||
|
}, {
|
||||||
|
value: 5,
|
||||||
|
label: this.$t('week.Thu')
|
||||||
|
}, {
|
||||||
|
value: 6,
|
||||||
|
label: this.$t('week.Fri')
|
||||||
|
}, {
|
||||||
|
value: 7,
|
||||||
|
label: this.$t('week.Sat')
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@@ -305,6 +485,8 @@ export default {
|
|||||||
this.$refs.alertRuleForm.validate((valid) => {
|
this.$refs.alertRuleForm.validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
params.receiver = this.editAlertRule.receiverShow.join(',')
|
params.receiver = this.editAlertRule.receiverShow.join(',')
|
||||||
|
params.schedDays = this.editAlertRule.schedDays.join(',')
|
||||||
|
params.trbShot = this.$refs.richTextEditor.getContent()
|
||||||
if (this.editAlertRule.id) {
|
if (this.editAlertRule.id) {
|
||||||
this.$put('alert/rule', params).then(response => {
|
this.$put('alert/rule', params).then(response => {
|
||||||
this.prevent_opt.save = false
|
this.prevent_opt.save = false
|
||||||
@@ -381,9 +563,8 @@ export default {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
receiverShowChange (val) {
|
receiverShowChange (val) {
|
||||||
if (!val.length) {
|
this.editAlertRule.receiver = [...this.editAlertRule.receiverShow].join(',')
|
||||||
this.$refs.alertRuleForm.validateField('method')
|
this.$refs.alertRuleForm.validateField('receiver')
|
||||||
}
|
|
||||||
},
|
},
|
||||||
validateNotify (rule, value, callback) {
|
validateNotify (rule, value, callback) {
|
||||||
if (this.editAlertRule.receiverShow.length && value.length === 0) {
|
if (this.editAlertRule.receiverShow.length && value.length === 0) {
|
||||||
@@ -395,6 +576,7 @@ export default {
|
|||||||
selectAlertRuleMetric (val) {
|
selectAlertRuleMetric (val) {
|
||||||
if (val === 'Metrics') {
|
if (val === 'Metrics') {
|
||||||
this.MetricsType = 1 // type = 1
|
this.MetricsType = 1 // type = 1
|
||||||
|
this.showMetrics = true
|
||||||
this.showSnmpTrap = true // showSnmptrap 为 true 时显示 expr,threshold,unit
|
this.showSnmpTrap = true // showSnmptrap 为 true 时显示 expr,threshold,unit
|
||||||
this.$refs.alertRuleForm.clearValidate('expr') // 移除from表单的 expr 验证
|
this.$refs.alertRuleForm.clearValidate('expr') // 移除from表单的 expr 验证
|
||||||
} else if (val === 'Logs') {
|
} else if (val === 'Logs') {
|
||||||
@@ -406,6 +588,9 @@ export default {
|
|||||||
this.showSnmpTrap = false // showSnmpTrap 为 false 时,展示 OID
|
this.showSnmpTrap = false // showSnmpTrap 为 false 时,展示 OID
|
||||||
this.MetricsType = 3 // type = 3
|
this.MetricsType = 3 // type = 3
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
afterInitRich () {
|
||||||
|
this.$refs.alertName.focus()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted () {
|
mounted () {
|
||||||
@@ -454,7 +639,7 @@ export default {
|
|||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<style scoped>
|
<style scoped lang="scss">
|
||||||
.severity-circle{
|
.severity-circle{
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 10px;
|
left: 10px;
|
||||||
@@ -466,4 +651,42 @@ export default {
|
|||||||
.severity-box /deep/ .el-select .el-input__inner{
|
.severity-box /deep/ .el-select .el-input__inner{
|
||||||
padding-left: 25px;
|
padding-left: 25px;
|
||||||
}
|
}
|
||||||
|
.half-form-item {
|
||||||
|
width: calc(50% - 5px);
|
||||||
|
display: inline-block;
|
||||||
|
.el-form-item__content,.el-select{
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.right-box-alert-rule /deep/ .right-box__container .el-form-item__content .el-input-group--prepend{
|
||||||
|
width: 100%;
|
||||||
|
margin-top: 5px;
|
||||||
|
}
|
||||||
|
/deep/ .rich-text-editor{
|
||||||
|
line-height: 24px;
|
||||||
|
}
|
||||||
|
/deep/ .el-input-group__prepend{
|
||||||
|
position: relative;
|
||||||
|
.hide-icon{
|
||||||
|
width: 38px;
|
||||||
|
.el-input__inner{
|
||||||
|
border: none;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.alert-rule-split-title{
|
||||||
|
background: #F6F6F6;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #333333;
|
||||||
|
letter-spacing: 0;
|
||||||
|
font-weight: 400;
|
||||||
|
line-height: 24px;
|
||||||
|
padding-left: 10px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
height: 24px;
|
||||||
|
}
|
||||||
|
/deep/ .el-form-item__content .el-input-group{
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -61,14 +61,27 @@
|
|||||||
<el-tag v-for="(user, index) in scope.row[item.prop]" v-if="user&&user.username" :key="index" class="alert-rule-tag" effect="dark" size="mini">{{user.username}} </el-tag>
|
<el-tag v-for="(user, index) in scope.row[item.prop]" v-if="user&&user.username" :key="index" class="alert-rule-tag" effect="dark" size="mini">{{user.username}} </el-tag>
|
||||||
</template>
|
</template>
|
||||||
<template v-else-if="item.prop === 'state'">
|
<template v-else-if="item.prop === 'state'">
|
||||||
<el-switch
|
<el-popover
|
||||||
v-model="scope.row.state"
|
placement="right"
|
||||||
:disabled="!hasButton('dc_edit') || !hasButton('dc_edit') || !!Number(scope.row.buildIn)"
|
trigger="hover"
|
||||||
active-color="#ee9d3f"
|
:open-delay="300"
|
||||||
:active-value="1"
|
>
|
||||||
:inactive-value="0"
|
<div>
|
||||||
@change="(val)=>{$emit('statusChange', scope.row)}"
|
<div>Schedule : {{scope.row.schedEnable ? $t('dashboard.panel.chartForm.lockList.on') : $t('dashboard.panel.chartForm.lockList.off')}}</div>
|
||||||
/>
|
<div>Effective configuration:</div>
|
||||||
|
<div>{{weekStr(scope.row.schedDays)}}</div>
|
||||||
|
<div>{{scope.row.schedStime+' - '+scope.row.schedEtime}}</div>
|
||||||
|
</div>
|
||||||
|
<el-switch
|
||||||
|
slot="reference"
|
||||||
|
v-model="scope.row.state"
|
||||||
|
:disabled="!hasButton('dc_edit') || !hasButton('dc_edit') || !!Number(scope.row.buildIn)"
|
||||||
|
active-color="#ee9d3f"
|
||||||
|
:active-value="1"
|
||||||
|
:inactive-value="0"
|
||||||
|
@change="(val)=>{$emit('statusChange', scope.row)}"
|
||||||
|
/>
|
||||||
|
</el-popover>
|
||||||
</template>
|
</template>
|
||||||
<span v-else-if="scope.row[item.prop]">{{scope.row[item.prop]}}</span>
|
<span v-else-if="scope.row[item.prop]">{{scope.row[item.prop]}}</span>
|
||||||
<template v-else>-</template>
|
<template v-else>-</template>
|
||||||
@@ -184,6 +197,30 @@ export default {
|
|||||||
minWidth: 100,
|
minWidth: 100,
|
||||||
sortable: 'custom'
|
sortable: 'custom'
|
||||||
}
|
}
|
||||||
|
],
|
||||||
|
weekList: [
|
||||||
|
{
|
||||||
|
value: 1,
|
||||||
|
label: this.$t('week.Sun')
|
||||||
|
}, {
|
||||||
|
value: 2,
|
||||||
|
label: this.$t('week.Mon')
|
||||||
|
}, {
|
||||||
|
value: 3,
|
||||||
|
label: this.$t('week.Tue')
|
||||||
|
}, {
|
||||||
|
value: 4,
|
||||||
|
label: this.$t('week.Wed')
|
||||||
|
}, {
|
||||||
|
value: 5,
|
||||||
|
label: this.$t('week.Thu')
|
||||||
|
}, {
|
||||||
|
value: 6,
|
||||||
|
label: this.$t('week.Fri')
|
||||||
|
}, {
|
||||||
|
value: 7,
|
||||||
|
label: this.$t('week.Sat')
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -198,6 +235,18 @@ export default {
|
|||||||
} else {
|
} else {
|
||||||
return value
|
return value
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
weekStr (weekstr) {
|
||||||
|
const arr = weekstr.split(',')
|
||||||
|
let str = ''
|
||||||
|
arr.forEach((item, index) => {
|
||||||
|
if (index === arr.length - 1) {
|
||||||
|
str += this.weekList[item - 1].label
|
||||||
|
} else {
|
||||||
|
str += this.weekList[item - 1].label + ', '
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return str
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -97,6 +97,7 @@ export default {
|
|||||||
alertName: '',
|
alertName: '',
|
||||||
linkObject: { id: '', name: '' },
|
linkObject: { id: '', name: '' },
|
||||||
expr: '',
|
expr: '',
|
||||||
|
state: 1,
|
||||||
type: 1,
|
type: 1,
|
||||||
unit: 2,
|
unit: 2,
|
||||||
operator: '>',
|
operator: '>',
|
||||||
@@ -104,7 +105,18 @@ export default {
|
|||||||
severityId: '',
|
severityId: '',
|
||||||
summary: '',
|
summary: '',
|
||||||
description: '',
|
description: '',
|
||||||
method: []
|
method: [],
|
||||||
|
name: '',
|
||||||
|
threshold: '',
|
||||||
|
receiver: [],
|
||||||
|
autoExpired: 1,
|
||||||
|
schedEnable: 0,
|
||||||
|
schedDays: '',
|
||||||
|
schedStime: '00:00',
|
||||||
|
schedEtime: '23:59',
|
||||||
|
notifyActive: 1,
|
||||||
|
notifyExpired: 1,
|
||||||
|
trbShot: ''
|
||||||
},
|
},
|
||||||
blankSilenceObject: {
|
blankSilenceObject: {
|
||||||
id: '',
|
id: '',
|
||||||
@@ -199,6 +211,7 @@ export default {
|
|||||||
this.object = {
|
this.object = {
|
||||||
...response.data,
|
...response.data,
|
||||||
method: response.data.method ? response.data.method.split(',').map(item => Number(item)) : [],
|
method: response.data.method ? response.data.method.split(',').map(item => Number(item)) : [],
|
||||||
|
schedDays: response.data.schedDays ? response.data.schedDays.split(',').map(item => Number(item)) : [],
|
||||||
receiverShow: response.data.receiver ? response.data.receiver.split(',').map(item => Number(item)) : []
|
receiverShow: response.data.receiver ? response.data.receiver.split(',').map(item => Number(item)) : []
|
||||||
}
|
}
|
||||||
if (copyFlag) {
|
if (copyFlag) {
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ export default {
|
|||||||
blankObject: {
|
blankObject: {
|
||||||
id: '',
|
id: '',
|
||||||
host: '',
|
host: '',
|
||||||
port: 9090,
|
port: 10090,
|
||||||
dc: { id: '', name: '', location: '' }
|
dc: { id: '', name: '', location: '' }
|
||||||
},
|
},
|
||||||
agent: agent,
|
agent: agent,
|
||||||
|
|||||||
@@ -610,6 +610,9 @@ export default {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
.no-resize{
|
||||||
|
background: rgba(255,255,255,0);
|
||||||
|
}
|
||||||
.promqlInput {
|
.promqlInput {
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|||||||
Reference in New Issue
Block a user