|
|
@@ -1,81 +1,43 @@
|
|
|
<template>
|
|
|
<div class="edu-training-edit">
|
|
|
- <DialogCom title="新增告警规则" :visible.sync="isShow" width="60%">
|
|
|
- <el-form
|
|
|
- :model="formData"
|
|
|
- size="small"
|
|
|
- ref="form"
|
|
|
- :inline="true"
|
|
|
- label-position="right"
|
|
|
- label-width="160px"
|
|
|
- label-suffix=":"
|
|
|
- >
|
|
|
- <el-form-item label="规则名称" prop="taskName">
|
|
|
- <el-input
|
|
|
- v-model="formData.taskName"
|
|
|
- placeholder="请输入规则名称"
|
|
|
- clearable
|
|
|
- maxlength="50"
|
|
|
- />
|
|
|
+ <DialogCom title="新增告警规则" :visible.sync="isShow" width="67%">
|
|
|
+ <el-form :model="formData" size="small" ref="form" :inline="true" label-position="right" label-width="160px"
|
|
|
+ label-suffix=":" :rules="rules">
|
|
|
+ <el-form-item label="规则名称" prop="ruleName">
|
|
|
+ <el-input v-model="formData.ruleName" placeholder="请输入规则名称" clearable maxlength="50" />
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="规则类型" prop="taskName">
|
|
|
- <el-select
|
|
|
- v-model="formData.taskName"
|
|
|
- clearable
|
|
|
- label="规则类型"
|
|
|
- placeholder="请选择规则类型"
|
|
|
- prop="orgType"
|
|
|
- >
|
|
|
- <el-option
|
|
|
- v-for="item in dict.type.sys_org_type"
|
|
|
- :key="item.value"
|
|
|
- :label="item.label"
|
|
|
- :value="item.value"
|
|
|
- >
|
|
|
- </el-option>
|
|
|
- </el-select>
|
|
|
+ <el-form-item label="描述" prop="taskName">
|
|
|
+ <el-input v-model="formData.ruleDesc" placeholder="请输入描述" clearable maxlength="50" />
|
|
|
</el-form-item>
|
|
|
<el-form-item label="启用" prop="taskName">
|
|
|
- <el-switch v-model="formData.taskName"> </el-switch>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="描述" prop="taskName">
|
|
|
- <el-input
|
|
|
- v-model="formData.taskName"
|
|
|
- placeholder="请输入描述"
|
|
|
- clearable
|
|
|
- maxlength="50"
|
|
|
- />
|
|
|
+ <el-switch v-model="formData.enabled"> </el-switch>
|
|
|
</el-form-item>
|
|
|
- <el-tabs type="border-card">
|
|
|
- <el-tab-pane label="报警防区"></el-tab-pane>
|
|
|
- <el-tab-pane label="UPS"></el-tab-pane>
|
|
|
- <el-tab-pane label="烟感"></el-tab-pane>
|
|
|
- <el-tab-pane label="回路"></el-tab-pane>
|
|
|
- <el-tab-pane label="温湿度"></el-tab-pane>
|
|
|
- <el-tab-pane label="智能电表"></el-tab-pane>
|
|
|
- <el-tab-pane label="水浸"></el-tab-pane>
|
|
|
- <el-tab-pane label="门磁"></el-tab-pane>
|
|
|
- <el-tab-pane label="卷帘门"></el-tab-pane>
|
|
|
- <el-tab-pane label="地磁"></el-tab-pane>
|
|
|
- <el-tab-pane label="燃气"></el-tab-pane>
|
|
|
-
|
|
|
+ <el-tabs type="border-card" v-model="selectType" @tab-click="onTabClick">
|
|
|
+ <el-tab-pane v-for="item in sourceTypeList" :label="item.sourceTypeDes" :key="item.sourceType + ''"
|
|
|
+ :name="item.sourceType + ''"></el-tab-pane>
|
|
|
+
|
|
|
<!-- 列表组件 -->
|
|
|
- <addCom></addCom>
|
|
|
+ <addCom ref="soruceRlueCom" :sourceType="selectType" :sourceTypeList="selectSystemFields"
|
|
|
+ :datas="ruleExpresses"></addCom>
|
|
|
</el-tabs>
|
|
|
</el-form>
|
|
|
<div slot="footer" class="dialog-footer">
|
|
|
- <el-button @click="onHide">关闭</el-button>
|
|
|
+ <br />
|
|
|
+ <el-button @click="onHide">关闭</el-button>
|
|
|
+ <el-button @click="onOk">确认</el-button>
|
|
|
</div>
|
|
|
</DialogCom>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
+import * as iotApi from "@/api/iot/alarmRule.js";
|
|
|
import { mapState, mapMutations } from "vuex";
|
|
|
import addCom from '@/views/warnRule/addDialogCom.vue'
|
|
|
import DataRangePicker from "@/components/dateTime/daterange.picker.vue";
|
|
|
+import { getAddAlarmRuleInit } from "../../api/iot/alarmRule";
|
|
|
export default {
|
|
|
- components: { DataRangePicker,addCom },
|
|
|
+ components: { DataRangePicker, addCom },
|
|
|
dicts: [
|
|
|
"core_registration_project",
|
|
|
"core_check_type",
|
|
|
@@ -85,8 +47,22 @@ export default {
|
|
|
data() {
|
|
|
const params = this.$route.params;
|
|
|
return {
|
|
|
- formData: {},
|
|
|
- falg: false,
|
|
|
+ formData: {
|
|
|
+ id:"",
|
|
|
+ ruleName: "",
|
|
|
+ ruleDesc: "",
|
|
|
+ enabled: true,
|
|
|
+ },
|
|
|
+ ruleExpresses: {},
|
|
|
+ rules: {
|
|
|
+ ruleName: [
|
|
|
+ { required: true, message: "请输入规则名称", trigger: 'blur' }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ sourceTypeList: [],
|
|
|
+ sourceTypeDics: {},
|
|
|
+ selectType: "0",
|
|
|
+ selectSystemFields: [],
|
|
|
labelStyle: {
|
|
|
color: "#000",
|
|
|
"text-align": "center",
|
|
|
@@ -108,9 +84,18 @@ export default {
|
|
|
computed: {
|
|
|
...mapState(["loginUser"]),
|
|
|
},
|
|
|
+ created() {
|
|
|
+
|
|
|
+ },
|
|
|
methods: {
|
|
|
...mapMutations([]),
|
|
|
|
|
|
+ async getAlarmRule() {
|
|
|
+
|
|
|
+ },
|
|
|
+ addComChanged(sourceType) {
|
|
|
+ alert(sourceType);
|
|
|
+ },
|
|
|
async refresh(id, other) {
|
|
|
if (!id) {
|
|
|
// this.reset(other);
|
|
|
@@ -122,43 +107,202 @@ export default {
|
|
|
// });
|
|
|
}
|
|
|
},
|
|
|
- async show(id, other = {}) {
|
|
|
- // this.id = id;
|
|
|
- // await this.refresh(id, other);
|
|
|
- this.isShow = true;
|
|
|
+ async show(isAdd, ruleObj) {
|
|
|
+ let initData = await iotApi.getAddAlarmRuleInit();
|
|
|
+ if (initData.code != 200) {
|
|
|
+ this.$message("获取初始化数据失败");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ this.sourceTypeList = initData.data.sourceTypeList;
|
|
|
+ this.initSourceTypeDics();
|
|
|
+ this.selectType = initData.data.sourceTypeList[0].sourceType + '';
|
|
|
+ this.selectSystemFields = initData.data.sourceTypeList[0].systemFields;
|
|
|
+ if (isAdd) {
|
|
|
+ if (initData.data.sourceTypeList.length > 0) {
|
|
|
+ this.ruleExpresses = {};
|
|
|
+ }
|
|
|
+ this.isShow = true;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ if (ruleObj.iotAlarmRule == undefined) {
|
|
|
+ this.$message("未获取到报警规则");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ this.formData.id =ruleObj.iotAlarmRule.id;
|
|
|
+ this.formData.ruleName = ruleObj.iotAlarmRule.name;
|
|
|
+ this.formData.ruleDesc = ruleObj.iotAlarmRule.remark;
|
|
|
+ this.formData.enabled = ruleObj.iotAlarmRule.enabled == 1 ? true : false;
|
|
|
+ this.ruleExpresses = this.convertToRuleExpresses(ruleObj.iotAlarmRuleExpressEditVosBySourceType);
|
|
|
+ console.log("ruleExpresses",this.ruleExpresses);
|
|
|
+ this.isShow = true;
|
|
|
+
|
|
|
+ console.log(ruleObj);
|
|
|
+ }
|
|
|
+
|
|
|
+ },
|
|
|
+ convertToRuleExpresses(ruleExpresFromServer) {
|
|
|
+ let ruleExpress = {};
|
|
|
+ console.log(ruleExpresFromServer);
|
|
|
+ if (ruleExpresFromServer == undefined)
|
|
|
+ return ruleExpress;
|
|
|
+ ruleExpresFromServer.forEach(i => {
|
|
|
+ if (ruleExpress[i.sourceType] == undefined) {
|
|
|
+ ruleExpress[i.sourceType] = {};
|
|
|
+ }
|
|
|
+
|
|
|
+ i.appAlarmRuleExpressList.forEach(ruleItem => {
|
|
|
+ if (ruleExpress[i.sourceType][ruleItem.weekDay + ""] == undefined) {
|
|
|
+ ruleExpress[i.sourceType][ruleItem.weekDay + ""] = [];
|
|
|
+ }
|
|
|
+ ruleItem.sourceType = ruleItem.sourceType + "";
|
|
|
+ ruleItem.weekDay = ruleItem.weekDay + "";
|
|
|
+ ruleItem.times = [ruleItem.startTime, ruleItem.endTime];
|
|
|
+ this.initDataItem(ruleItem, ruleItem.sourceType)
|
|
|
+ ruleExpress[i.sourceType][ruleItem.weekDay + ""].push(ruleItem);
|
|
|
+ })
|
|
|
+ })
|
|
|
+ return ruleExpress;
|
|
|
+ },
|
|
|
+ initDataItem(item, type) {
|
|
|
+ console.log("initDataItem");
|
|
|
+ let exist = this.sourceTypeList.find(i => `${i.sourceType}` == type)
|
|
|
+ if (exist == undefined) {
|
|
|
+ item.operators = [];
|
|
|
+ item.sourceValues = [];
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ if(exist.systemFields!=undefined && exist.systemFields.length>0)
|
|
|
+ {
|
|
|
+
|
|
|
+ let existField = exist.systemFields.find(fieldItem=>fieldItem.sysFieldCode == item.fieldcode);
|
|
|
+ if(existField!=undefined)
|
|
|
+ {
|
|
|
+ item.operators = existField.operatorsList;
|
|
|
+ item.sourceValues = existField.specsList;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return item;
|
|
|
+ },
|
|
|
+ initSourceTypeDics() {
|
|
|
+ debugger;
|
|
|
+
|
|
|
+ this.sourceTypeList.forEach(i => {
|
|
|
+ if (this.sourceTypeDics[i.sourceType + ""] == undefined) {
|
|
|
+ i.operatorsListDic = {};
|
|
|
+ i.specsListDic = {};
|
|
|
+ i.systemFieldDic = {};
|
|
|
+ this.sourceTypeDics[i.sourceType + ""] = i;
|
|
|
+ i.systemFields.forEach(systemFieldItem => {
|
|
|
+ let systemFieldItemKey = `${i.sourceType}_${systemFieldItem.sysFieldCode}`;
|
|
|
+ if (i.systemFieldDic[systemFieldItemKey] = undefined) {
|
|
|
+ i.systemFieldDic[systemFieldItemKey] = systemFieldItem;
|
|
|
+ }
|
|
|
+
|
|
|
+ systemFieldItem.operatorsList.forEach(operator => {
|
|
|
+ let operatorKey = `${i.sourceType}_${systemFieldItem.sysFieldCode}_${operator.key}`;
|
|
|
+ if (i.operatorsListDic[operatorKey] == undefined) {
|
|
|
+ i.operatorsListDic[operatorKey] = operator;
|
|
|
+ }
|
|
|
+ })
|
|
|
+ systemFieldItem.specsList.forEach(specItem => {
|
|
|
+ let sysFieldValueKey = `${i.sourceType}_${systemFieldItem.sysFieldCode}_${specItem.key}`;
|
|
|
+ if (i.specsListDic[sysFieldValueKey] == undefined) {
|
|
|
+ i.specsListDic[sysFieldValueKey] = specItem;
|
|
|
+ }
|
|
|
+ })
|
|
|
+ })
|
|
|
+ }
|
|
|
+ });
|
|
|
+ console.log(this.sourceTypeDics);
|
|
|
+ },
|
|
|
+ onTabClick(e) {
|
|
|
+ this.selectSystemFields = this.sourceTypeList[new Number(e.index)].systemFields
|
|
|
},
|
|
|
// 事件
|
|
|
onHide() {
|
|
|
this.isShow = false;
|
|
|
},
|
|
|
+ onOk() {
|
|
|
+ console.log("rules", this.ruleExpresses);
|
|
|
+ this.$refs["form"].validate((valid) => {
|
|
|
+ if (valid) {
|
|
|
+ let submit = async () => {
|
|
|
+ let submitData = {};
|
|
|
+ submitData.id = this.formData.id;
|
|
|
+ submitData.name = this.formData.ruleName;
|
|
|
+ submitData.remark = this.formData.ruleDesc;
|
|
|
+ submitData.enabled = this.formData.enabled ? 1 : 0;
|
|
|
+ submitData.isdeleted = 0;
|
|
|
+ submitData.type = "alarm";
|
|
|
+ submitData.iotAlarmRuleExpressDtoList = [];
|
|
|
+
|
|
|
+ for (let sourceTypeKey in this.ruleExpresses) {
|
|
|
+ for (let weekDicKey in this.ruleExpresses[sourceTypeKey]) {
|
|
|
+ let weekDatas = this.ruleExpresses[sourceTypeKey][weekDicKey];
|
|
|
+ weekDatas.forEach(i => {
|
|
|
+ i.startTime = i.times[0];
|
|
|
+ i.endTime = i.times[1];
|
|
|
+ let specItem = `${i.sourceType}_${i.fieldcode}_${i.value}`
|
|
|
+ i.valueText = this.sourceTypeDics[i.sourceType].specsListDic[specItem].value;
|
|
|
+ submitData.iotAlarmRuleExpressDtoList.push(i);
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ console.log(submitData);
|
|
|
+ let rh = await iotApi.saveAlarmRule(submitData);
|
|
|
+ if (rh.code != 200) {
|
|
|
+ this.$message("添加失败");
|
|
|
+ }
|
|
|
+ console.log(rh);
|
|
|
+ this.isShow = false;
|
|
|
+ this.$emit("success");
|
|
|
+ }
|
|
|
+
|
|
|
+ submit();
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ alert("error");
|
|
|
+ this.isShow = false;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
// 事件
|
|
|
//apimark//
|
|
|
},
|
|
|
- mounted() {},
|
|
|
+
|
|
|
+ mounted() {
|
|
|
+
|
|
|
+
|
|
|
+ },
|
|
|
};
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss">
|
|
|
-.edu-training-edit {
|
|
|
-}
|
|
|
+.edu-training-edit {}
|
|
|
+
|
|
|
.titleDiv {
|
|
|
margin-top: 20px;
|
|
|
margin-bottom: 20px;
|
|
|
border-left: 5px solid #008cd6;
|
|
|
padding-left: 10px;
|
|
|
-
|
|
|
+
|
|
|
}
|
|
|
+
|
|
|
.divCls {
|
|
|
display: flex;
|
|
|
flex-flow: wrap;
|
|
|
align-items: center;
|
|
|
+
|
|
|
.Fatherprogress {
|
|
|
width: 400px;
|
|
|
margin-bottom: 20px;
|
|
|
margin-top: 20px;
|
|
|
+
|
|
|
.progressName {
|
|
|
font-size: 17px;
|
|
|
}
|
|
|
+
|
|
|
.progressMain {
|
|
|
font-size: 14px;
|
|
|
color: #8c8c8c;
|
|
|
@@ -166,11 +310,13 @@ export default {
|
|
|
margin-left: 20px;
|
|
|
// margin: 0 auto;
|
|
|
}
|
|
|
+
|
|
|
.el-progress__text {
|
|
|
display: none;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
.el-dialog__body {
|
|
|
padding-top: 0px;
|
|
|
}
|