|
@@ -1,7 +1,7 @@
|
|
|
<!-- 报警规则添加列表 -->
|
|
|
<template>
|
|
|
<div class="layout-pd">
|
|
|
- <el-dialog v-model="Data.isShowDialog" style="width: 60%;">
|
|
|
+ <el-dialog v-model="Data.isShowDialog" style="width: 75%;">
|
|
|
<!--操作-->
|
|
|
<div style="width: 100%;display: flex;justify-content: left;align-items: center;">
|
|
|
<h1 style="margin-bottom: 10px;font-size: 30px;">报警推送规则</h1>
|
|
@@ -19,7 +19,7 @@
|
|
|
<div style="width: 100%;display: flex;justify-content: center;align-items: center;">
|
|
|
<el-form :inline="true" @submit.stop.prevent>
|
|
|
<el-form-item label="推送用户:" style="width: 100%;">
|
|
|
- <el-select v-model="Data.Filter.roleMappingId" multiple placeholder="请选择角色">
|
|
|
+ <el-select v-model="Data.Filter.roleMappingId" multiple placeholder="请选择用户">
|
|
|
<el-option v-for="item in Data.roleList" :key="item.id" :label="item.name" :value="item.id" />
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
@@ -85,11 +85,17 @@
|
|
|
</div>
|
|
|
<div style="width: 100%;display: flex;justify-content: center;align-items: center;">
|
|
|
<el-form :inline="true" @submit.stop.prevent>
|
|
|
- <el-form-item label="优先 级:" style="width: 100%;">
|
|
|
+ <el-form-item label=" 优先级:" style="width: 100%;">
|
|
|
<el-input-number v-model="Data.Filter.taskPriority" :controls="false" :min=1 :max=9 />
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
</div>
|
|
|
+ <div style="width: 100%;display: flex;justify-content: center;align-items: center;">
|
|
|
+ <el-form :inline="true" @submit.stop.prevent>
|
|
|
+ <el-form-item label="报警条件配置" style="width: 100%;">
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ </div>
|
|
|
<div style="width: 100%;display: flex;justify-content: center;align-items: center;">
|
|
|
<el-form :inline="true" @submit.stop.prevent>
|
|
|
<el-form-item label="触发方式:" style="width: 100%;">
|
|
@@ -100,35 +106,130 @@
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
</div>
|
|
|
- <div v-for="(index) in Data.num" :key="index"
|
|
|
- style="width: 100%;display: flex;justify-content: center;align-items: center;">
|
|
|
- <el-form :inline="true" @submit.stop.prevent>
|
|
|
- <el-form-item label="条  件:" style="width: 100%;">
|
|
|
- <el-select v-model="Data.selectValue1[index]" class="m-2" placeholder="Select" style="width: 20%;">
|
|
|
- <el-option v-for="item in Data.condition" :key="item" :label="item" :value="item"
|
|
|
- @click="selectChange(Data.selectValue1[index])" />
|
|
|
- </el-select>
|
|
|
- <!-- 符号 -->
|
|
|
- <el-select class="sign" style="width: 7%;" suffix-icon="" v-model="Data.seDefault">
|
|
|
- <el-option v-for="(item, index) in Data.selectList" :key="index" :value="item" selectd />
|
|
|
- </el-select>
|
|
|
- <el-select v-model="Data.selectValue2[index]" class="m-2" placeholder="Select" style="width: 20%;">
|
|
|
- <el-option v-for="item in Data.selectCondition" :key="item" :label="item" :value="item" />
|
|
|
- </el-select>
|
|
|
- <label style="margin-left: 5%;">报警等级</label>
|
|
|
- <!-- 符号 -->
|
|
|
- <el-select class="sign" style="width: 7%;" suffix-icon="" v-model="Data.seDefault">
|
|
|
- <el-option v-for="(item, index) in Data.selectList" :key="index" :value="item" selectd />
|
|
|
- </el-select>
|
|
|
- <el-select v-model="Data.selectValue3[index]" class="m-2" placeholder="Select" style="width: 20%;">
|
|
|
- <el-option v-for="item in Data.alarmLevel" :key="item" :label="item" :value="item" />
|
|
|
+
|
|
|
+<!-- 条件部分 -->
|
|
|
+<div v-for="(condition, index) in Data.condition" :key="index"
|
|
|
+ style="width: 100%;display: flex;justify-content: center;align-items: center; margin-top: 10px;">
|
|
|
+ <el-form :inline="true" @submit.stop.prevent>
|
|
|
+ <el-form-item :label="index === 0 ? '条  件:' : '附加条件:'" style="width: 100%;">
|
|
|
+ <el-row :gutter="20" style="width: 140%;">
|
|
|
+ <!-- 报警设备 -->
|
|
|
+ <el-col :span="8">
|
|
|
+ <div style="display: flex; align-items: center;">
|
|
|
+ <span style="margin-right: 13px;">报警设备:</span>
|
|
|
+ <el-select v-model="condition.equipment" placeholder="请选择" style="flex: 1;">
|
|
|
+ <el-option
|
|
|
+ v-for="item in Data.alarmEquipment"
|
|
|
+ :key="item"
|
|
|
+ :label="item"
|
|
|
+ :value="item"
|
|
|
+ />
|
|
|
+ </el-select> &
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+
|
|
|
+ <!-- 报警类型 -->
|
|
|
+ <el-col :span="8">
|
|
|
+ <div style="display: flex; align-items: center;">
|
|
|
+ <span style="margin-right: 13px;">报警类型:</span>
|
|
|
+ <el-select v-model="condition.type" placeholder="请选择" style="flex: 1;">
|
|
|
+ <el-option
|
|
|
+ v-for="item in Data.alarmType"
|
|
|
+ :key="item"
|
|
|
+ :label="item"
|
|
|
+ :value="item"
|
|
|
+ />
|
|
|
+ </el-select> &
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+
|
|
|
+ <!-- 报警来源 -->
|
|
|
+ <el-col :span="8">
|
|
|
+ <div style="display: flex; align-items: center;">
|
|
|
+ <span style="margin-right: 13px;">报警来源:</span>
|
|
|
+ <el-select v-model="condition.source" placeholder="请选择" style="flex: 1;">
|
|
|
+ <el-option
|
|
|
+ v-for="item in Data.alarmSource"
|
|
|
+ :key="item"
|
|
|
+ :label="item"
|
|
|
+ :value="item"
|
|
|
+ />
|
|
|
</el-select>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+</div>
|
|
|
+<!-- 添加按钮 -->
|
|
|
+<div style="width: 100%;display: flex;justify-content: center;align-items: center;">
|
|
|
+ <el-button type="primary" icon="ele-Plus" style="font-size: large" @click="addCondition" />
|
|
|
+ <el-button v-if="Data.condition.length > 1" type="primary" icon="ele-Minus" style="font-size: large" @click="removeCondition" />
|
|
|
+</div>
|
|
|
+
|
|
|
+ <div style="width: 100%;display: flex;justify-content: center;align-items: center;">
|
|
|
+ <el-form :inline="true" @submit.stop.prevent>
|
|
|
+ <el-form-item label="维修条件配置" style="width: 100%;">
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
</div>
|
|
|
<div style="width: 100%;display: flex;justify-content: center;align-items: center;">
|
|
|
- <el-button :icon="CirclePlusFilled" style="font-size: large" @click="add" />
|
|
|
+ <el-form :inline="true" @submit.stop.prevent>
|
|
|
+ <el-form-item label="触发方式:" style="width: 100%;">
|
|
|
+ <el-radio-group v-model="Data.Filter.triggerMethod">
|
|
|
+ <el-radio :label="0">其中之一条件满足即触发</el-radio>
|
|
|
+ <el-radio :label="1">全部满足时触发</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
</div>
|
|
|
+<!-- 条件部分 -->
|
|
|
+<div v-for="(condition2, index) in Data.condition2" :key="index"
|
|
|
+ style="width: 100%;display: flex;justify-content: center;align-items: center; margin-top: 10px;">
|
|
|
+ <el-form :inline="true" @submit.stop.prevent>
|
|
|
+ <el-form-item :label="index === 0 ? '条  件:' : '附加条件:'" style="width: 100%;">
|
|
|
+ <el-row :gutter="20" style="width: 140%;">
|
|
|
+ <el-col :span="8">
|
|
|
+ <div style="display: flex; align-items: center;">
|
|
|
+ <span style="margin-right: 13px;">维修类型:</span>
|
|
|
+ <el-select v-model="condition2.proType" placeholder="请选择" style="flex: 1;">
|
|
|
+ <el-option
|
|
|
+ v-for="item in Data.alarmproType"
|
|
|
+ :key="item"
|
|
|
+ :label="item"
|
|
|
+ :value="item"
|
|
|
+ />
|
|
|
+ </el-select> &
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+
|
|
|
+ <el-col :span="8">
|
|
|
+ <div style="display: flex; align-items: center;">
|
|
|
+ <span style="margin-right: 13px;">维修状态:</span>
|
|
|
+ <el-select v-model="condition2.proStatus" placeholder="请选择" style="flex: 1;">
|
|
|
+ <el-option
|
|
|
+ v-for="item in Data.alarmproStatus"
|
|
|
+ :key="item"
|
|
|
+ :label="item"
|
|
|
+ :value="item"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+</div>
|
|
|
+<!-- 添加按钮 -->
|
|
|
+<div style="width: 100%;display: flex;justify-content: center;align-items: center;">
|
|
|
+ <el-button type="primary" icon="ele-Plus" style="font-size: large" @click="add" />
|
|
|
+ <el-button v-if="Data.condition2.length > 1" type="primary" icon="ele-Minus" style="font-size: large" @click="removeCondition2" />
|
|
|
+</div>
|
|
|
+
|
|
|
+ <!-- <div style="width: 100%;display: flex;justify-content: center;align-items: center;">
|
|
|
+ <el-button :icon="CirclePlusFilled" style="font-size: large" @click="add" />
|
|
|
+ </div> -->
|
|
|
<div style="width: 100%;display: flex;justify-content: center;align-items: center;">
|
|
|
<el-form :inline="true" @submit.stop.prevent style="width: 60%;">
|
|
|
<el-row justify="end" style="margin-top: 30px;">
|
|
@@ -195,12 +296,24 @@ const Data = reactive({
|
|
|
mode2: '',
|
|
|
/** 条件选择 */
|
|
|
selectCondition: [] as Array<string>,
|
|
|
- condition: ['报警设备', '报警类型', '报警来源'],
|
|
|
- alarmEquipment: ['加油枪', '编码器', '加密显示屏', '监控微处理器'],
|
|
|
- alarmType: ['绑定错误'],
|
|
|
+ condition: [ { // 初始条件
|
|
|
+ equipment: '',
|
|
|
+ type: '',
|
|
|
+ source: ''
|
|
|
+ }],
|
|
|
+ condition2: [ { // 初始条件
|
|
|
+ proType:'',
|
|
|
+ proStatus:''
|
|
|
+ }],
|
|
|
+ alarmEquipment: ["安全装置","编码器","计控主板","监控微处理器","智能型控制阀","油气回收控制板","显示屏","计量器","加油机","油枪"
|
|
|
+],
|
|
|
+ alarmType: [ "加油机离线","通信异常","非法部件","厂商不符","绑定错误","监控微处理器报警","安全装置报警","加油机报警","检定"
|
|
|
+],
|
|
|
alarmSource: ['云平台', '安全监督装置'],
|
|
|
alarmLevel: [1, 2],
|
|
|
|
|
|
+ alarmproType:["油机维修","装置维修"],
|
|
|
+ alarmproStatus:["正在维修","结束维修"]
|
|
|
})
|
|
|
|
|
|
const templateData = reactive({
|
|
@@ -218,12 +331,6 @@ const templateData = reactive({
|
|
|
emailList: [] as any
|
|
|
})
|
|
|
|
|
|
-// 数量增加 - 实现dom节点的增加
|
|
|
-const add = (() => {
|
|
|
- Data.num += 1
|
|
|
-
|
|
|
-})
|
|
|
-
|
|
|
const radioChange = (() => {
|
|
|
if (Data.radioValue1 == true) {
|
|
|
Data.Filter.pushMethod = 'wx'
|
|
@@ -239,16 +346,6 @@ const radioChange = (() => {
|
|
|
}
|
|
|
})
|
|
|
|
|
|
-const selectChange = ((key: any) => {
|
|
|
- if (key == '报警设备') {
|
|
|
- Data.selectCondition = Data.alarmEquipment
|
|
|
- } else if (key == '报警类型') {
|
|
|
- Data.selectCondition = Data.alarmType
|
|
|
- } else if (key == '报警来源') {
|
|
|
- Data.selectCondition = Data.alarmSource
|
|
|
- }
|
|
|
-})
|
|
|
-
|
|
|
// 获取角色列表
|
|
|
const getRole = async () => {
|
|
|
const res = await new RoleApi().getList()
|
|
@@ -262,12 +359,12 @@ const funSelect = async () => {
|
|
|
const res = await new pushTemplateApi().getData(templateData.Filter)
|
|
|
const data = res?.data
|
|
|
templateData.wxList = (data as any)?.filter((item: any) => {
|
|
|
- if (item.templateType == "wx") {
|
|
|
+ if (item.templateType == "微信") {
|
|
|
return { 'id': item.id, 'name': item.templateName }
|
|
|
}
|
|
|
})
|
|
|
templateData.emailList = (data as any)?.filter((item: any) => {
|
|
|
- if (item.templateType == "email") {
|
|
|
+ if (item.templateType == "邮箱") {
|
|
|
return { 'id': item.id, 'name': item.templateName }
|
|
|
}
|
|
|
})
|
|
@@ -304,15 +401,15 @@ watch([() => [...Data.selectValue1], () => [...Data.selectValue2], () => [...Dat
|
|
|
|
|
|
// 保存提交内容
|
|
|
const toSave = async () => {
|
|
|
- console.log('提交数据')
|
|
|
- console.log(Data.Filter)
|
|
|
+ // 将条件数组赋值给Filter
|
|
|
+ Data.Filter.conditionsJson = JSON.stringify(Data.condition);
|
|
|
+
|
|
|
+ console.log('提交数据', Data.Filter);
|
|
|
await new alarmRulesApi().addForm(Data.Filter).then((res) => {
|
|
|
- console.log(res)
|
|
|
- eventBus.emit('refreshView')
|
|
|
- })
|
|
|
- Data.isShowDialog = false
|
|
|
- // reset()
|
|
|
-
|
|
|
+ console.log(res);
|
|
|
+ eventBus.emit('refreshView');
|
|
|
+ });
|
|
|
+ Data.isShowDialog = false;
|
|
|
}
|
|
|
|
|
|
// 重置
|
|
@@ -394,6 +491,35 @@ defineExpose({
|
|
|
})
|
|
|
|
|
|
|
|
|
+// 添加条件
|
|
|
+const addCondition = () => {
|
|
|
+ Data.condition.push({
|
|
|
+ equipment: '',
|
|
|
+ type: '',
|
|
|
+ source: ''
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+const add = () => {
|
|
|
+ Data.condition2.push({
|
|
|
+ proStatus: '',
|
|
|
+ proType: ''
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+// 删除条件
|
|
|
+const removeCondition = (index: number) => {
|
|
|
+ if (Data.condition.length > 1) { // 至少保留一个条件
|
|
|
+ Data.condition.pop();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 删除条件
|
|
|
+const removeCondition2 = (index: number) => {
|
|
|
+ if (Data.condition2.length > 1) { // 至少保留一个条件
|
|
|
+ Data.condition2.pop();
|
|
|
+ }
|
|
|
+}
|
|
|
</script>
|
|
|
|
|
|
<style scoped lang="scss">
|
|
@@ -436,4 +562,25 @@ defineExpose({
|
|
|
.el-select-dropdown__item {
|
|
|
text-align: center;
|
|
|
}
|
|
|
+
|
|
|
+/* 添加或修改以下样式 */
|
|
|
+.el-row {
|
|
|
+ margin-bottom: 20px;
|
|
|
+}
|
|
|
+.el-col {
|
|
|
+ padding: 0 10px;
|
|
|
+}
|
|
|
+.condition-label {
|
|
|
+ min-width: 80px;
|
|
|
+ text-align: right;
|
|
|
+ margin-right: 10px;
|
|
|
+}
|
|
|
+/* 添加以下样式 */
|
|
|
+.dynamic-condition {
|
|
|
+ margin-top: 15px;
|
|
|
+ padding: 10px;
|
|
|
+ border: 1px solid #ebeef5;
|
|
|
+ border-radius: 4px;
|
|
|
+ background-color: #fafafa;
|
|
|
+}
|
|
|
</style>
|