From 67b9fbbe935fb47c3b3c7434a1be7b25e72d00fb Mon Sep 17 00:00:00 2001
From: heyujie <516346543@qq.com>
Date: 星期四, 27 一月 2022 17:55:28 +0800
Subject: [PATCH] 增加身份证校验
---
src/pages/datapush/index/RightEvent.vue | 1598 ++++++++++++++++++++++++++++++++++++----------------------
1 files changed, 990 insertions(+), 608 deletions(-)
diff --git a/src/pages/datapush/index/RightEvent.vue b/src/pages/datapush/index/RightEvent.vue
index 8448884..0edd147 100644
--- a/src/pages/datapush/index/RightEvent.vue
+++ b/src/pages/datapush/index/RightEvent.vue
@@ -1,608 +1,990 @@
-<template>
- <div class="s-event-push-right">
- <div class="s-right-config">
- <el-form>
- <el-form-item label="鍚嶇О">
- <el-input v-model="eventData.name" placeholder="璇疯緭鍏ュ悕绉�" size="small" style="width:400px"></el-input>
- </el-form-item>
-
- <el-form-item label="鏃堕棿">
- <el-date-picker
- v-model="eventData.time"
- format="yyyy-MM-dd HH:mm:ss"
- value-format="yyyy-MM-dd HH:mm:ss"
- type="datetimerange"
- range-separator="鑷�"
- start-placeholder="寮�濮嬫棩鏈�"
- end-placeholder="缁撴潫鏃ユ湡"
- size="small"
- ></el-date-picker>
- </el-form-item>
-
- <span style="line-height: 38px;">鎺ㄩ�佹湇鍔″櫒</span>
- <div class="icon-btn" v-if="urls.length < 1" @click="addUrl()">
- <i class="el-icon-circle-plus-outline"></i>
- <span> 娣诲姞鎺ュ彛鍦板潃</span>
- </div>
- <div v-for="(item,index) in urls" :key="item.hash" class="flex-box server-url">
- <div>
- <el-checkbox v-model="item.enable"></el-checkbox>
- <span class="ml20">{{'URL '}}</span>
- <el-input v-model="item.url" style="width:360px;margin-left:0px;" size="small"></el-input>
- </div>
- <div class="server-add">
- <i
- class="el-icon-remove-outline"
- @click="delUrl(index)"
- style="color:red;margin-right:10px"
- />
- <i class="el-icon-circle-plus-outline" @click="addUrl()"></i>
- </div>
- </div>
-
- <el-form-item label="鑱斿姩鏂瑰紡" style="margin-top: 20px;width:100">
- <el-select v-model="eventData.lineWay" placeholder="璇烽�夋嫨" size="small">
- <el-option
- v-for="item in eventData.lineOptions"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- ></el-option>
- </el-select>
- </el-form-item>
-
- <el-form-item label="鏍囩">
- <el-radio v-model="eventData.radioValue" label="1">婊¤冻鍏ㄩ儴</el-radio>
- <el-radio v-model="eventData.radioValue" label="2">婊¤冻浠绘剰涓�涓�</el-radio>
- </el-form-item>
- </el-form>
- </div>
- <div class="s-right-mid"></div>
- <div class="s-right-rule">
- <div class="rule-title">
- <b style="margin-right:20px">浠诲姟閰嶇疆</b>
- <div class="icon-btn" v-if="dataList.length === 0" @click="createSet">
- <i class="el-icon-circle-plus-outline"></i>
- <span> 鏂板</span>
- </div>
- <div class="icon-btn" v-if="dataList.length > 0" @click="cleanSet">
- <i class="el-icon-remove-outline"></i>
- <span> 娓呯┖</span>
- </div>
- </div>
-
- <div v-for="(rule,index) in dataList" :key="index" style="margin-top:10px">
- <el-row :gutter="20">
- <!-- 涓婚 -->
- <el-col :span="4">
- <el-select
- v-model="rule.topic_type"
- placeholder="璇烽�夋嫨"
- @change="selectTopic(rule, true)"
- size="small"
- >
- <el-option
- v-for="item in rule.topicTypeOptions"
- :key="item.id"
- :label="item.name"
- :value="item.value"
- ></el-option>
- </el-select>
- </el-col>
-
- <!-- 杩囨护鍊� -->
- <el-col :span="4">
- <el-select
- v-model="rule.topic_arg"
- placeholder="璇烽�夋嫨"
- @change="selectArg(rule, true)"
- size="small"
- >
- <el-option
- v-for="item in rule.topicArgOptions"
- :key="item.id"
- :label="item.name"
- :value="item.value"
- ></el-option>
- </el-select>
- </el-col>
-
- <!-- 鎿嶄綔绗� -->
- <el-col :span="4">
- <el-select v-model="rule.operator" placeholder="璇烽�夋嫨" size="small">
- <el-option label="==" value="="></el-option>
- </el-select>
- </el-col>
-
- <!-- 鍊肩被鍨� -->
- <el-col :span="4">
- <el-select
- v-model="rule.operator_type"
- placeholder="璇烽�夋嫨"
- @change="selectOperator(rule, true)"
- size="small"
- >
- <el-option
- v-for="item in rule.operatorTypeOpionts"
- :key="item.id"
- :label="item.name"
- :value="item.value"
- ></el-option>
- </el-select>
- </el-col>
-
- <!-- 杩囨护鍊� -->
- <el-col :span="4">
- <div v-if="rule.operator_type === 'custom'">
- <el-input v-model="rule.rule_value" placeholder="璇疯緭鍏ュ唴瀹�" size="small"></el-input>
- </div>
- <div v-else>
- <el-select
- v-model="rule.rule_values"
- multiple
- collapse-tags
- placeholder="璇烽�夋嫨"
- size="small"
- @change="selectValue( rule, $event)"
- >
- <el-option
- v-for="item in rule.ruleValueOptions"
- :key="item.id"
- :label="item.name"
- :disabled="item.disabled"
- :value="item.value"
- ></el-option>
- </el-select>
- </div>
- </el-col>
- <el-col :span="4">
- <div class="rule-edit-btn">
- <i
- v-show="dataList.length > 1"
- class="el-icon-remove-outline"
- @click="delRule(index)"
- style="color:red;margin-right:10px"
- />
- <i
- v-show="index === dataList.length -1"
- class="el-icon-circle-plus-outline"
- @click="addRule()"
- style="color:#3D68E1"
- ></i>
- </div>
- </el-col>
- </el-row>
- <el-row></el-row>
- </div>
-
- <div class="rule-title2">
- <b>瑙勫垯</b>
- <div class="div-border" v-html="eventData.eventTxt"></div>
- </div>
- <div class="save-btn">
- <el-button type="info" size="small" @click="onCancle" style="color:#222">鍙栨秷</el-button>
- <el-button type="primary" @click="eventPushsSave" size="small">淇濆瓨</el-button>
- </div>
- </div>
- </div>
-</template>
-<script>
-
-import { eventPushsSave, findByEventTopic } from "@/api/event";
-import { findDictionaryByType, findDictionaryByID } from "@/api/dictionary";
-import { getTaskList } from "@/api/search";
-
-export default {
- name: "rightEvent",
- props: {
- eventObject: {
- type: Object,
- default: () => {
- return {};
- }
- }
- },
- computed: {
- urls() {
- return this.eventData.urls
- },
- ips() {
- return this.eventData.urls.filter(item => {
- return item.type === 'ip';
- })
- },
- domains() {
- return this.eventData.urls.filter(item => {
- return item.type === 'domain';
- })
- }
- },
- watch: {
- eventObject: {
- handler(newVal, oldVal) {
- this.eventData.enable = this.eventObject.enable;
- if (newVal !== oldVal) {
- if (this.eventData.id !== newVal.id) {
- this.dataList = [];
-
- this.eventData.id = newVal.id;
- this.eventData.name = newVal.name;
- this.eventData.time = [
- this.eventObject.time_start,
- this.eventObject.time_end
- ];
- this.eventData.serverIp = newVal.ip_ports;
- this.eventData.urls = newVal.urls;
- this.eventData.lineWay = newVal.link_type;
- this.eventData.eventTxt = newVal.rule_text;
- this.eventData.radioValue = newVal.is_satisfy_all ? "1" : "2";
-
- if (!this.eventData.urls) {
- this.$set(this.eventData, "urls", [])
- }
- if (newVal.rules) {
- newVal.rules.forEach(element => {
- let newRule = Object.assign(JSON.parse(JSON.stringify(this.baseRule)), element)
- this.dataList.push(newRule)
- this.selectTopic(newRule);
- this.selectOperator(newRule);
- })
- }
- }
- }
- },
- deep: true
- }
- },
- data() {
- return {
- eventData: {},
- dataList: [],
- dictionary: [],
- cameras: [],
- tasks: [],
- tables: [],
- baseRule: {
- event_push_id: "",
- id: "",
- operator: "==",
- operator_type: "",
- rule_value: "",
- rule_values: [],
- topic_arg: "",
- topic_type: "",
-
- topicTypeOptions: {},
- topicArgOptions: {},
- operatorOptions: {},
- operatorTypeOpionts: {},
- ruleValueOptions: []
- },
- };
- },
- created() {
- this.reAdd();
- },
- mounted() {
- // 鍔犺浇瀛楀吀瀛楀吀
- this.findByType();
- this.getCameras();
- this.getTasks();
- },
- methods: {
- addUrl() {
- this.eventData.urls.push({
- checked: true,
- hash: Math.random().toString(36).substr(2),
- url: "",
- });
- },
- delUrl(index) {
- this.$set(this.eventData.urls, index, this.baseRule)
- this.eventData.urls.splice(index, 1)
- },
- // 淇濆瓨
- async eventPushsSave() {
- // 鍒ゆ柇淇濆瓨鐨刬p鏄惁绗﹀悎鏍煎紡瑕佹眰
- if (this.eventData.urls.length < 1) {
- this.$notify({
- type: "warning",
- message: "璇烽厤缃嚦灏戜竴鍙版帹閫佹湇鍔″櫒"
- });
- return;
- }
- for (let i = 0; i < this.eventData.urls.length; i++) {
- if (this.eventData.urls[i].url.length < 1) {
- this.$notify({
- type: "warning",
- message: "鎺ュ彛URL鍦板潃涓嶅厑璁镐负绌�"
- });
- return;
- }
- }
-
- // 鎷兼帴瀛楃涓�
- let ruleDesc = []
- this.dataList.forEach(i => {
- let str = "";
- if (i.topic_type) {
- str += this.getNameByValue(i.topicTypeOptions, i.topic_type);
- }
- if (i.topic_arg) {
- str += this.getNameByValue(i.topicArgOptions, i.topic_arg);
- }
- if (i.operator === '==') {
- str += ' = ';
- }
-
- str += i.rule_value;
-
- if (str.length > 0) {
- ruleDesc.push(str)
- }
- });
- // 澶勭悊瑙勫垯鍒楄〃鏁版嵁缁撴瀯
- let ruleList = this.dataList.map(i => {
- return {
- topic_type: i.topic_type,
- topic_arg: i.topic_arg,
- operator: i.operator,
- operator_type: i.operator_type,
- rule_value: i.rule_value
- }
- });
-
- let json = {
- enable: this.eventData.enable,
- id: this.eventData.id,
- ip_ports: this.eventData.serverIp,
- name: this.eventData.name,
- rule_text: ruleDesc.join("<br/>"),
- rules: ruleList,
- time_start: this.eventData.time[0],
- time_end: this.eventData.time[1],
- urls: this.eventData.urls,
- is_satisfy_all: this.eventData.radioValue === "1",
- link_type: this.eventData.lineWay
- };
-
- let res = await eventPushsSave(json);
- if (res && res.success) {
- this.eventData.eventTxt = ruleDesc.join("<br/>");
- this.$emit("updateList", res.data.id);
- this.$notify({
- type: "success",
- message: "淇濆瓨鎴愬姛"
- });
- }
- },
- // 鏌ユ壘瀛楀吀
- async findByType() {
- let res = await findDictionaryByType();
- if (res && res.success) {
- this.dictionary = Object.assign(this.dictionary, res.data)
- this.baseRule.topicTypeOptions = this.dictionary.EVENTRULETOPIC
- this.baseRule.operatorTypeOpionts = this.dictionary.EVENTTYPECOMPUTE
- this.dictionary['alarmLevel'] = this.dictionary.ALARMLEVEL
- }
- },
- async getCameras() {
- let rsp = await findByEventTopic({ topic: 'camera', type: 'name' });
- if (rsp && rsp.success) {
- this.dictionary['camera'] = rsp.data
- }
-
- rsp = await findByEventTopic({ topic: 'dbtable' });
- if (rsp && rsp.success) {
- this.dictionary['dbtable'] = rsp.data.map(el => {
- return {
- name: el.name,
- value: el.name
- }
- })
- }
- },
- async getTasks() {
- this.dictionary['task'] = []
- let rsp = await getTaskList();
- if (rsp && rsp.success) {
- let hash = {}
- rsp.data.forEach(task => {
- if (!task.isDelete && !hash[task.name]) {
- this.dictionary['task'].push({
- value: task.name,
- name: task.name
- })
- hash[task.name] = true
- }
- })
- }
- },
- // 鏂板缓閰嶇疆
- createSet() {
- this.dataList.push(JSON.parse(JSON.stringify(this.baseRule)));
- },
- cleanSet() {
- this.dataList.splice(0, this.dataList.length);
- },
- // 娣诲姞瀛愯鍒�
- addRule() {
- this.dataList.push(JSON.parse(JSON.stringify(this.baseRule)));
- },
- // 鍒犻櫎瀛愯鍒�
- delRule(index) {
- this.dataList.splice(index, 1);
- },
- // 瑙勫垯涓笅鎷夋鐨勯�夋嫨鍥炶皟
- selectTopic(rule, resetNext = false) {
- rule.topicTypeOptions.forEach(element => {
- if (element.value === rule.topic_type) {
- rule.topicArgOptions = element.children;
- if (resetNext) {
- rule.topic_arg = rule.topicArgOptions[0].value
- this.selectArg(rule, resetNext)
- }
- }
- });
- },
- selectArg(rule, resetNext = false) {
- let argInfo = rule.topicArgOptions.filter(arg => {
- return arg.value === rule.topic_arg
- })
-
- if (argInfo.length > 0) {
- let desc = argInfo[0].description.split(",")
- if (desc.length > 0) {
- rule.operatorTypeOpionts = this.dictionary.EVENTTYPECOMPUTE.filter(el => {
- return desc.indexOf(el.value) >= 0
- })
- }
- }
-
- if (resetNext) {
- rule.operator_type = rule.operatorTypeOpionts[rule.operatorTypeOpionts.length - 1].value
- this.selectOperator(rule, resetNext)
- }
- },
- selectOperator(rule, resetNext = false) {
- if (rule.operator_type === "option") {
- rule.ruleValueOptions = this.dictionary[rule.topic_type] ? this.dictionary[rule.topic_type] : []
- rule.rule_values = rule.rule_value.split(",")
- }
-
- if (resetNext) {
- rule.rule_value = "";
- rule.rule_values = [];
- }
- },
- selectValue(rule, val) {
- rule.rule_value = val.join(",")
- },
- // 鏍规嵁value杩斿洖瀵瑰簲鐨刵ame
- getNameByValue(arr, value) {
- let s = arr.find(item => {
- return item.value === value;
- });
-
- return s.name;
- },
- // 娓呯┖閲嶆柊鏂板
- reAdd() {
- this.eventData = {
- id: "",
- name: "",
- time: [
- this.$moment().format("YYYY-MM-DD 00:00:00"),
- this.$moment().format("YYYY-MM-DD HH:mm:ss")
- ],
- serverIp: [
- {
- enable: true,
- server_ip: "",
- port: 0
- }
- ],
- urls: [
- ],
- lineWay: "",
- lineOptions: [
- {
- value: "001",
- label: "IP骞挎挱"
- }
- ],
- radioValue: "1",
- eventTxt: ""
- };
- this.dataList = [];
- },
- onCancle() {
- this.$emit('onCancle')
- }
- }
-};
-</script>
-<style lang="scss">
-.s-event-push-right {
- text-align: left;
- font-size: 14px;
- i {
- cursor: pointer;
- }
- .s-right-config {
- padding: 10px 40px;
- }
-
- .el-form-item__label {
- text-align: left;
- }
-
- .s-right-mid {
- height: 10px;
- background-color: #e9ebf2;
- width: 100%;
- //position: absolute;
- }
-
- .s-right-rule {
- padding: 20px 40px;
- margin-top: 17px;
- .rule-title {
- border-bottom: 1px solid #e0e0e0;
- }
- .rule-title2 {
- margin-top: 20px;
- }
-
- .div-border {
- width: 995px;
- padding: 10px;
- margin-top: 15px;
- min-height: 80px;
- background: #fafafa;
- border: 1px solid #f2f2f2;
- }
-
- .rule-edit-btn {
- font-size: 18px;
- line-height: 38px;
- }
-
- .save-btn {
- // float: right;
- margin-top: 20px;
- margin-left: 895px;
- }
- }
-
- .el-button--text {
- text-decoration: unset;
- }
-
- .icon-btn {
- i {
- font-size: 18px;
- position: relative;
- top: 2px;
- }
- span {
- font-size: 14px;
- }
- display: inline;
- color: #3d68e1;
- line-height: 38px;
- margin-left: 10px;
- cursor: pointer;
- }
-
- .server-url {
- padding-top: 25px;
- }
- .server-add {
- font-size: 18px;
- margin-left: 8px;
- color: #3d68e1;
- line-height: 39px;
- }
-}
-</style>
+<template>
+ <div class="s-event-push-right">
+ <div class="s-right-config">
+ <el-form>
+ <el-form-item label="鍚嶇О">
+ <el-input
+ v-model="taskEditData.name"
+ placeholder="璇疯緭鍏ュ悕绉�"
+ size="small"
+ style="width: 400px"
+ ></el-input>
+ </el-form-item>
+
+ <el-form-item label="鏃堕棿">
+ <el-date-picker
+ v-model="taskEditData.time"
+ format="yyyy-MM-dd HH:mm:ss"
+ value-format="yyyy-MM-dd HH:mm:ss"
+ type="datetimerange"
+ range-separator="鑷�"
+ start-placeholder="寮�濮嬫棩鏈�"
+ end-placeholder="缁撴潫鏃ユ湡"
+ size="small"
+ ></el-date-picker>
+ </el-form-item>
+
+ <span style="line-height: 38px">鎺ㄩ�佹湇鍔″櫒</span>
+ <div class="icon-btn" v-if="urls.length < 1" @click="addUrl()">
+ <i class="el-icon-circle-plus-outline"></i>
+ <span> 娣诲姞鎺ュ彛鍦板潃</span>
+ </div>
+ <div
+ v-for="(item, index) in urls"
+ :key="item.hash"
+ class="flex-box server-url"
+ >
+ <div>
+ <el-checkbox v-model="item.enable"></el-checkbox>
+ <span class="ml20">{{ "URL " }}</span>
+ <el-input
+ v-model="item.url"
+ style="width: 360px; margin-left: 0px"
+ size="small"
+ ></el-input>
+ </div>
+ <div class="server-add">
+ <i
+ class="el-icon-remove-outline"
+ @click="delUrl(index)"
+ style="color: red; margin-right: 10px"
+ />
+ <i class="el-icon-circle-plus-outline" @click="addUrl()"></i>
+ </div>
+ </div>
+
+ <el-form-item label="鑱斿姩鏂瑰紡" style="margin-top: 20px; width: 100">
+ <el-select
+ v-model="taskEditData.lineWay"
+ placeholder="璇烽�夋嫨"
+ size="small"
+ >
+ <el-option
+ v-for="item in taskEditData.lineOptions"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ ></el-option>
+ </el-select>
+ </el-form-item>
+
+ <el-form-item label="鏍囩">
+ <el-radio v-model="taskEditData.radioValue" label="1"
+ >婊¤冻鍏ㄩ儴</el-radio
+ >
+ <el-radio v-model="taskEditData.radioValue" label="2"
+ >婊¤冻浠绘剰涓�涓�</el-radio
+ >
+ </el-form-item>
+ </el-form>
+ </div>
+ <div class="s-right-mid"></div>
+ <div class="s-right-rule">
+ <div class="rule-title">
+ <b style="margin-right: 20px">浠诲姟閰嶇疆</b>
+ <div class="icon-btn" v-if="dataList.length === 0" @click="createSet">
+ <i class="el-icon-circle-plus-outline"></i>
+ <span> 鏂板</span>
+ </div>
+ <div class="icon-btn" v-if="dataList.length > 0" @click="cleanSet">
+ <i class="el-icon-remove-outline"></i>
+ <span> 娓呯┖</span>
+ </div>
+ </div>
+
+ <div
+ v-for="(rule, index) in dataList"
+ :key="index"
+ style="margin-top: 10px"
+ >
+ <el-row :gutter="20">
+ <!-- 涓婚 -->
+ <el-col :span="4">
+ <el-select
+ v-model="rule.topic_type"
+ placeholder="璇烽�夋嫨"
+ @change="selectTopic(rule, true)"
+ size="small"
+ >
+ <el-option
+ v-for="item in rule.topicTypeOptions"
+ :key="item.id"
+ :label="item.name"
+ :value="item.value"
+ ></el-option>
+ </el-select>
+ </el-col>
+
+ <!-- 杩囨护鍊� -->
+ <el-col :span="4">
+ <el-select
+ v-model="rule.topic_arg"
+ placeholder="璇烽�夋嫨"
+ @change="selectArg(rule, true)"
+ size="small"
+ >
+ <el-option
+ v-for="item in rule.topicArgOptions"
+ :key="item.id"
+ :label="item.name"
+ :value="item.value"
+ ></el-option>
+ </el-select>
+ </el-col>
+
+ <!-- 鎿嶄綔绗� -->
+ <el-col :span="4">
+ <el-select
+ v-model="rule.operator"
+ placeholder="璇烽�夋嫨"
+ size="small"
+ >
+ <el-option label="==" value="="></el-option>
+ </el-select>
+ </el-col>
+
+ <!-- 鍊肩被鍨� -->
+ <el-col :span="4">
+ <el-select
+ v-model="rule.operator_type"
+ placeholder="璇烽�夋嫨"
+ @change="selectOperator(rule, true)"
+ size="small"
+ >
+ <el-option
+ v-for="item in rule.operatorTypeOpionts"
+ :key="item.id"
+ :label="item.name"
+ :value="item.value"
+ ></el-option>
+ </el-select>
+ </el-col>
+
+ <!-- 杩囨护鍊� -->
+ <el-col :span="4">
+ <div v-if="rule.operator_type === 'custom'">
+ <el-input
+ v-model="rule.rule_value"
+ placeholder="璇疯緭鍏ュ唴瀹�"
+ size="small"
+ ></el-input>
+ </div>
+ <div v-else>
+ <el-select
+ v-model="rule.rule_values"
+ multiple
+ collapse-tags
+ placeholder="璇烽�夋嫨"
+ size="small"
+ @change="selectValue(rule, $event)"
+ >
+ <el-option
+ v-for="item in rule.ruleValueOptions"
+ :key="item.id"
+ :label="item.name"
+ :disabled="item.disabled"
+ :value="item.value"
+ ></el-option>
+ </el-select>
+ </div>
+ </el-col>
+ <el-col :span="4">
+ <div class="rule-edit-btn">
+ <i
+ v-show="dataList.length > 1"
+ class="el-icon-remove-outline"
+ @click="delRule(index)"
+ style="color: red; margin-right: 10px"
+ />
+ <i
+ v-show="index === dataList.length - 1"
+ class="el-icon-circle-plus-outline"
+ @click="addRule()"
+ style="color: #3d68e1"
+ ></i>
+ </div>
+ </el-col>
+ </el-row>
+ <el-row></el-row>
+ </div>
+
+ <div class="rule-title2">
+ <b>瑙勫垯</b>
+ <div class="div-border" v-html="taskEditData.eventTxt"></div>
+ </div>
+ <div class="config-item">
+ <b>鎺ㄩ�佸瓧娈�</b>
+ <el-button type="primary" size="mini" @click="openPushSetDialog"
+ >璁剧疆</el-button
+ >
+ </div>
+ <div class="save-btn">
+ <el-button
+ type="info"
+ size="small"
+ @click="onCancle"
+ style="color: #222"
+ >鍙栨秷</el-button
+ >
+ <el-button type="primary" @click="eventPushsSave" size="small"
+ >淇濆瓨</el-button
+ >
+ </div>
+ </div>
+ <el-dialog
+ :visible="pushFieldDialog"
+ :append-to-body="false"
+ :close-on-click-modal="false"
+ class="dialog-push-field"
+ @close="pushFieldDialog = false"
+ >
+ <div slot="title" class="slot-title">
+ <p>璇烽�夋嫨鎯宠鎺ㄩ�佺殑瀛楁</p>
+ <div class="right">
+ <el-checkbox
+ v-model="allFieldChecked"
+ @change="allCheckChange"
+ ></el-checkbox>
+ </div>
+ </div>
+ <div
+ class="check-area"
+ v-for="configObj in tempPushSet"
+ :key="configObj.id"
+ >
+ <div class="header">
+ <div class="title">{{ configObj.name }}</div>
+ <div class="right">
+ <el-checkbox
+ v-model="configObj.checked"
+ @change="toggleConfigCheck(configObj)"
+ >鍏ㄩ��</el-checkbox
+ >
+ </div>
+ </div>
+ <div class="flex-box flex-wrap">
+ <div
+ class="param flex-box"
+ v-for="param in configObj.children"
+ :key="param.id"
+ >
+ <el-checkbox
+ v-model="param.checked"
+ @change="checkChildren"
+ ></el-checkbox>
+ <span class="param-name">{{ param.name }}</span>
+ <el-input
+ v-model="param.alias"
+ size="mini"
+ :ref="`input_${param.id}`"
+ @input="varifyField(param)"
+ :style="{
+ color: param.error ? 'red' : '',
+ borderColor: param.error ? 'red' : '',
+ }"
+ ></el-input>
+ </div>
+ </div>
+ </div>
+ <div slot="footer" class="text-center">
+ <el-button size="small" @click="canclePushFieldSet">鍙栨秷</el-button>
+ <el-button
+ size="small"
+ type="primary"
+ :disabled="disabledPushFieldSet"
+ @click="submitPushFieldSet"
+ >淇濆瓨</el-button
+ >
+ </div>
+ </el-dialog>
+ </div>
+</template>
+<script>
+import { eventPushsSave, findByEventTopic, getPushSet } from "@/api/event";
+import { findDictionaryByType, findDictionaryByID } from "@/api/dictionary";
+import { getTaskList } from "@/api/search";
+
+export default {
+ name: "rightEvent",
+ props: {
+ eventObject: {
+ type: Object,
+ default: () => {
+ return {};
+ },
+ },
+ },
+ computed: {
+ urls() {
+ return this.taskEditData.urls;
+ },
+ },
+ data() {
+ return {
+ taskEditData: {},
+ dataList: [],
+ dictionary: [],
+ cameras: [],
+ tasks: [],
+ tables: [],
+ baseRule: {
+ event_push_id: "",
+ id: "",
+ operator: "==",
+ operator_type: "",
+ rule_value: "",
+ rule_values: [],
+ topic_arg: "",
+ topic_type: "",
+ topicTypeOptions: {},
+ topicArgOptions: {},
+ operatorOptions: {},
+ operatorTypeOpionts: {},
+ ruleValueOptions: [],
+ },
+ pushFieldDialog: false,
+ tempPushSet: [],
+ pushFields: [],
+ allFieldChecked: false,
+ disabledPushFieldSet: true,
+ };
+ },
+ watch: {
+ eventObject: {
+ handler(newVal, oldVal) {
+ this.taskEditData.enable = this.eventObject.enable;
+ if (newVal !== oldVal) {
+ if (this.taskEditData.id !== newVal.id) {
+ this.dataList = [];
+
+ this.taskEditData.id = newVal.id;
+ this.taskEditData.name = newVal.name;
+ this.taskEditData.time = [
+ this.eventObject.time_start,
+ this.eventObject.time_end,
+ ];
+ this.taskEditData.serverIp = newVal.ip_ports;
+ this.taskEditData.urls = newVal.urls;
+ this.taskEditData.lineWay = newVal.link_type;
+ this.taskEditData.eventTxt = newVal.rule_text;
+ this.taskEditData.radioValue = newVal.is_satisfy_all ? "1" : "2";
+
+ if (!this.taskEditData.urls) {
+ this.$set(this.taskEditData, "urls", []);
+ }
+ //this.taskEditData.push_set = this.eventObject.push_set;
+ if (!this.eventObject.push_set.length) {
+ this.$set(this.taskEditData, "push_set", this.pushFields);
+ } else {
+ this.$set(
+ this.taskEditData,
+ "push_set",
+ this.eventObject.push_set
+ );
+ }
+ if (newVal.rules) {
+ newVal.rules.forEach((element) => {
+ let newRule = Object.assign(
+ JSON.parse(JSON.stringify(this.baseRule)),
+ element
+ );
+ this.dataList.push(newRule);
+ this.selectTopic(newRule);
+ this.selectOperator(newRule);
+ });
+ }
+ }
+ }
+ },
+ deep: true,
+ },
+ tempPushSet: {
+ handler(n, o) {
+ let _this = this;
+ let flag = false;
+ n.forEach((configObj) => {
+ let notChecked = configObj.children.find((param) => !param.checked);
+ if (!notChecked) {
+ configObj.checked = true;
+ } else {
+ configObj.checked = false;
+ }
+ let someoneChecked = configObj.children.find(
+ (param) => param.checked
+ );
+ if (someoneChecked) {
+ flag = true;
+ }
+ });
+ if (flag) {
+ this.disabledPushFieldSet = false;
+ } else {
+ this.disabledPushFieldSet = true;
+ }
+ },
+ deep: true,
+ },
+ },
+ created() {
+ this.reAdd();
+ },
+ mounted() {
+ // 鍔犺浇瀛楀吀
+ this.findByType();
+ this.getCameras();
+ this.getTasks();
+ this.getPushFields();
+ },
+ methods: {
+ openPushSetDialog() {
+ this.pushFieldDialog = true;
+ this.tempPushSet = JSON.parse(JSON.stringify(this.taskEditData.push_set));
+ this.checkFlag();
+ },
+ checkFlag() {
+ // debugger
+ let flag = true;
+ this.tempPushSet.forEach((item) => {
+ if (item.checked == false) {
+ flag = false;
+ }
+ });
+ this.allFieldChecked = flag;
+ },
+ checkChildren(val) {
+ console.log(val, 12121);
+ if (val == false) {
+ this.allFieldChecked = false;
+ } else if (val == true && this.allFieldChecked == false) {
+ this.$nextTick(() => {
+ this.checkFlag();
+ });
+ }
+ },
+ varifyField(param) {
+ var reg = /^[A-Za-z]+[0-9-_]?$/;
+ if (!reg.test(param.alias)) {
+ this.$message("璇疯緭鍏ュ悎娉曞瓧娈靛悕");
+ param.error = true;
+ } else {
+ param.error = false;
+ }
+ // this.pushFields.forEach(configObj => {
+ // configObj.children.find(param => param.error)
+ // })
+ },
+ canclePushFieldSet() {
+ this.pushFieldDialog = false;
+ },
+ allCheckChange(val) {
+ this.tempPushSet.forEach(function (item) {
+ item.checked = val;
+ item.children.forEach(function (child) {
+ child.checked = val;
+ });
+ });
+ },
+ submitPushFieldSet() {
+ let flag = false;
+ //this.pushFields.forEach(configObj => {
+ this.tempPushSet.forEach((configObj) => {
+ let errorOne = configObj.children.find(
+ (param) => param.checked && param.error
+ );
+ if (errorOne) {
+ this.$notify({
+ type: "error",
+ message: "璇峰皢閫変腑瀛楁杈撳叆鍚堟硶瀛楁鍚�",
+ });
+ flag = true;
+ }
+ });
+ if (flag) {
+ //NO SUBMIT
+ return;
+ }
+
+ this.taskEditData.push_set = this.tempPushSet;
+ this.pushFieldDialog = false;
+
+ // 淇濆瓨瑙勫垯
+ this.eventPushsSave();
+ },
+ toggleConfigCheck(configObj) {
+ configObj.children.forEach((child) => {
+ child.checked = configObj.checked;
+ });
+ this.checkFlag();
+ },
+ getPushFields() {
+ let _this = this;
+ getPushSet().then((res) => {
+ _this.pushFields = res.data;
+ });
+ // this.pushFields = [
+ // { id: 'sxjxx', name: '鎽勫儚鏈轰俊鎭�', checked: false, alias: '',
+ // children: [
+ // { name: '鎽勫儚鏈篒D', checked: false, alias: 'cameraID', id: 'cameraID', children: null },
+ // { name: '鎽勫儚鏈哄悕绉�', checked: false, alias: 'cameraName', id: 'cameraName', children: null },
+ // { name: '鎽勫儚鏈哄湴鍧�', checked: false, alias: 'cameraAddr', id: 'cameraAddr', children: null },
+ // { name: '鎽勫儚鏈哄潃', checked: false, alias: 'cameraAdr', id: 'cameraAdr', children: null }
+ // ] },
+ // { id: 'cjxx', name: '鍦烘櫙淇℃伅', checked: false, alias: '',
+ // children: [{ name: '鍦烘櫙ID', checked: false, alias: 'taskId', id: 'tskId', children: null }] },
+ // ];
+ },
+ addUrl() {
+ this.taskEditData.urls.push({
+ checked: true,
+ hash: Math.random().toString(36).substr(2),
+ url: "",
+ });
+ },
+ delUrl(index) {
+ this.$set(this.taskEditData.urls, index, this.baseRule);
+ this.taskEditData.urls.splice(index, 1);
+ },
+ // 淇濆瓨
+ async eventPushsSave() {
+ // 鍒ゆ柇淇濆瓨鐨刬p鏄惁绗﹀悎鏍煎紡瑕佹眰
+ if (this.taskEditData.urls.length < 1) {
+ this.$notify({
+ type: "warning",
+ message: "璇烽厤缃嚦灏戜竴鍙版帹閫佹湇鍔″櫒",
+ });
+ return;
+ }
+ for (let i = 0; i < this.taskEditData.urls.length; i++) {
+ if (this.taskEditData.urls[i].url.length < 1) {
+ this.$notify({
+ type: "warning",
+ message: "鎺ュ彛URL鍦板潃涓嶅厑璁镐负绌�",
+ });
+ return;
+ }
+ }
+
+ // 鎷兼帴瀛楃涓�
+ let ruleDesc = [];
+ this.dataList.forEach((i) => {
+ let str = "";
+ if (i.topic_type) {
+ str += this.getNameByValue(i.topicTypeOptions, i.topic_type);
+ }
+ if (i.topic_arg) {
+ str += this.getNameByValue(i.topicArgOptions, i.topic_arg);
+ }
+ if (i.operator === "==") {
+ str += " = ";
+ }
+
+ if (i.rule_value === "all*all") {
+ str += "鍏ㄩ儴";
+ } else if (i.rule_value === "null*null") {
+ str += "绌�";
+ } else {
+ str += i.rule_value;
+ }
+
+ if (str.length > 0) {
+ ruleDesc.push(str);
+ }
+ });
+ // 澶勭悊瑙勫垯鍒楄〃鏁版嵁缁撴瀯
+ let ruleList = this.dataList.map((i) => {
+ return {
+ topic_type: i.topic_type,
+ topic_arg: i.topic_arg,
+ operator: i.operator,
+ operator_type: i.operator_type,
+ rule_value: i.rule_value,
+ };
+ });
+
+ let json = {
+ enable: this.taskEditData.enable,
+ id: this.taskEditData.id,
+ ip_ports: this.taskEditData.serverIp,
+ name: this.taskEditData.name,
+ rule_text: ruleDesc.join("<br/>"),
+ rules: ruleList,
+ time_start: this.taskEditData.time[0],
+ time_end: this.taskEditData.time[1],
+ urls: this.taskEditData.urls,
+ is_satisfy_all: this.taskEditData.radioValue === "1",
+ link_type: this.taskEditData.lineWay,
+ push_set: this.taskEditData.push_set,
+ };
+
+ let res = await eventPushsSave(json);
+ if (res && res.success) {
+ this.taskEditData.eventTxt = ruleDesc.join("<br/>");
+ this.$emit("updateList", res.data.id);
+ this.$notify({
+ type: "success",
+ message: "淇濆瓨鎴愬姛",
+ });
+ }
+ },
+ // 鏌ユ壘瀛楀吀
+ async findByType() {
+ let res = await findDictionaryByType();
+ if (res && res.success) {
+ this.dictionary = Object.assign(this.dictionary, res.data);
+ this.baseRule.topicTypeOptions = this.dictionary.EVENTRULETOPIC;
+ this.baseRule.operatorTypeOpionts = this.dictionary.EVENTTYPECOMPUTE;
+ this.dictionary["alarmLevel"] = this.dictionary.ALARMLEVEL.map((el) => {
+ return {
+ name: el.name,
+ value: el.name,
+ };
+ });
+ }
+ },
+ async getCameras() {
+ let rsp = await findByEventTopic({ topic: "camera", type: "name" });
+ if (rsp && rsp.success) {
+ this.dictionary["camera"] = rsp.data;
+ }
+
+ rsp = await findByEventTopic({ topic: "dbtable" });
+ if (rsp && rsp.success) {
+ this.dictionary["dbtable"] = rsp.data.map((el) => {
+ return {
+ name: el.name,
+ value: el.name,
+ };
+ });
+ }
+ },
+ async getTasks() {
+ this.dictionary["task"] = [];
+ let rsp = await getTaskList();
+ if (rsp && rsp.success) {
+ let hash = {};
+ rsp.data.forEach((task) => {
+ if (!task.isDelete && !hash[task.name]) {
+ this.dictionary["task"].push({
+ value: task.name,
+ name: task.name,
+ });
+ hash[task.name] = true;
+ }
+ });
+ }
+ },
+ // 鏂板缓閰嶇疆
+ createSet() {
+ this.dataList.push(JSON.parse(JSON.stringify(this.baseRule)));
+ },
+ cleanSet() {
+ this.dataList.splice(0, this.dataList.length);
+ },
+ // 娣诲姞瀛愯鍒�
+ addRule() {
+ this.dataList.push(JSON.parse(JSON.stringify(this.baseRule)));
+ },
+ // 鍒犻櫎瀛愯鍒�
+ delRule(index) {
+ this.dataList.splice(index, 1);
+ },
+ // 瑙勫垯涓笅鎷夋鐨勯�夋嫨鍥炶皟
+ selectTopic(rule, resetNext = false) {
+ rule.topicTypeOptions.forEach((element) => {
+ if (element.value === rule.topic_type) {
+ rule.topicArgOptions = element.children;
+ if (resetNext) {
+ rule.topic_arg = rule.topicArgOptions[0].value;
+ this.selectArg(rule, resetNext);
+ }
+ }
+ });
+ },
+ selectArg(rule, resetNext = false) {
+ debugger;
+ let argInfo = rule.topicArgOptions.filter((arg) => {
+ return arg.value === rule.topic_arg;
+ });
+
+ if (argInfo.length > 0) {
+ let desc = argInfo[0].description.split(",");
+ if (desc.length > 0) {
+ rule.operatorTypeOpionts = this.dictionary.EVENTTYPECOMPUTE.filter(
+ (el) => {
+ return desc.indexOf(el.value) >= 0;
+ }
+ );
+ }
+ }
+
+ if (resetNext) {
+ rule.operator_type =
+ rule.operatorTypeOpionts[rule.operatorTypeOpionts.length - 1].value;
+ this.selectOperator(rule, resetNext);
+ }
+ },
+ selectOperator(rule, resetNext = false) {
+ if (rule.operator_type === "option") {
+ rule.ruleValueOptions = this.dictionary[rule.topic_type]
+ ? this.dictionary[rule.topic_type]
+ : [];
+
+ if (rule.rule_value != "") {
+ rule.rule_values = rule.rule_value.split(",");
+ }
+
+ // 澶勭悊 鍏ㄩ儴/绌�
+ for (let i = 0; i < rule.rule_values.length; i++) {
+ if (rule.rule_values[i] === "all*all") {
+ rule.rule_values[i] = "鍏ㄩ儴";
+ }
+
+ if (rule.rule_values[i] === "null*null") {
+ rule.rule_values[i] = "绌�";
+ }
+ }
+ console.log("-----------");
+ this.setOptionsDisable(rule);
+ }
+
+ if (resetNext) {
+ rule.rule_value = "";
+ rule.rule_values = [];
+ }
+ },
+ selectValue(rule, val) {
+ if (rule.operator_type === "option") {
+ this.setOptionsDisable(rule);
+
+ if (val.indexOf("鍏ㄩ儴") >= 0) {
+ rule.rule_value = "all*all";
+ return;
+ }
+
+ if (val.indexOf("绌�") >= 0) {
+ rule.rule_value = "null*null";
+ return;
+ }
+ }
+
+ rule.rule_value = val.join(",");
+ },
+ setOptionsDisable(rule) {
+ let isAllSelect = rule.rule_values.indexOf("鍏ㄩ儴") >= 0;
+ let isNullSelect = rule.rule_values.indexOf("绌�") >= 0;
+ console.log(rule.rule_values);
+
+ rule.ruleValueOptions.forEach((opt) => {
+ if (!rule.rule_values.length) {
+ opt.disabled = false;
+ return;
+ }
+
+ if (opt.name === "绌�") {
+ opt.disabled = !isNullSelect;
+ return;
+ }
+
+ opt.disabled = isAllSelect || isNullSelect;
+ });
+ },
+ // 鏍规嵁value杩斿洖瀵瑰簲鐨刵ame
+ getNameByValue(arr, value) {
+ let s = arr.find((item) => {
+ return item.value === value;
+ });
+
+ return s.name;
+ },
+ // 娓呯┖閲嶆柊鏂板
+ reAdd() {
+ this.taskEditData = {
+ id: "",
+ name: "",
+ time: [
+ this.$moment().format("YYYY-MM-DD 00:00:00"),
+ this.$moment().format("YYYY-MM-DD HH:mm:ss"),
+ ],
+ serverIp: [
+ {
+ enable: true,
+ server_ip: "",
+ port: 0,
+ },
+ ],
+ urls: [],
+ lineWay: "",
+ lineOptions: [
+ {
+ value: "001",
+ label: "IP骞挎挱",
+ },
+ ],
+ radioValue: "1",
+ eventTxt: "",
+ push_set: this.pushFields,
+ };
+ this.dataList = [];
+ },
+ onCancle() {
+ this.$emit("onCancle");
+ },
+ },
+};
+</script>
+<style lang="scss">
+.s-event-push-right {
+ text-align: left;
+ font-size: 14px;
+ i {
+ cursor: pointer;
+ }
+ .s-right-config {
+ padding: 10px 40px;
+ }
+
+ .el-form-item__label {
+ text-align: left;
+ }
+
+ .s-right-mid {
+ height: 10px;
+ background-color: #e9ebf2;
+ width: 100%;
+ //position: absolute;
+ }
+
+ .s-right-rule {
+ padding: 20px 40px;
+ margin-top: 17px;
+ .rule-title {
+ border-bottom: 1px solid #e0e0e0;
+ }
+ .rule-title2 {
+ margin-top: 20px;
+ }
+
+ .div-border {
+ width: 995px;
+ padding: 10px;
+ margin-top: 15px;
+ min-height: 80px;
+ background: #fafafa;
+ border: 1px solid #f2f2f2;
+ }
+
+ .rule-edit-btn {
+ font-size: 18px;
+ line-height: 38px;
+ }
+
+ .save-btn {
+ // float: right;
+ margin-top: 20px;
+ margin-left: 895px;
+ }
+ }
+ .config-item {
+ margin: 20px 0;
+ b {
+ margin-right: 10px;
+ }
+ }
+ .el-button--text {
+ text-decoration: unset;
+ }
+
+ .icon-btn {
+ i {
+ font-size: 18px;
+ position: relative;
+ top: 2px;
+ }
+ span {
+ font-size: 14px;
+ }
+ display: inline;
+ color: #3d68e1;
+ line-height: 38px;
+ margin-left: 10px;
+ cursor: pointer;
+ }
+
+ .server-url {
+ padding-top: 25px;
+ }
+ .server-add {
+ font-size: 18px;
+ margin-left: 8px;
+ color: #3d68e1;
+ line-height: 39px;
+ }
+ .dialog-push-field {
+ .el-button--primary.is-disabled,
+ .el-button--primary.is-disabled:hover {
+ background-color: #9eb4f0 !important;
+ border-color: #9eb4f0 !important;
+ }
+ .el-dialog {
+ width: 910px;
+ height: 700px;
+ .el-dialog__body {
+ padding-top: 14px;
+ height: 540px;
+ overflow-y: auto;
+ }
+ }
+ .text-center {
+ text-align: center;
+ }
+ .slot-title {
+ position: relative;
+ .right {
+ position: absolute;
+ top: 0;
+ right: 30px;
+ }
+ }
+ .check-area {
+ padding-bottom: 10px;
+ .header {
+ position: relative;
+ background: #efefef;
+ line-height: 30px;
+ margin-bottom: 14px;
+ font-weight: bold;
+ .title {
+ border-left: 3px solid #2481fa;
+ padding-left: 10px;
+ }
+ .right {
+ position: absolute;
+ top: 0;
+ right: 30px;
+ }
+ }
+ .flex-box.flex-wrap {
+ flex-wrap: wrap;
+ }
+ .param.flex-box {
+ word-break: keep-all;
+ align-items: center;
+ margin: 0 10px;
+ min-width: 260px;
+ margin-bottom: 10px;
+ .param-name {
+ margin: 0 5px;
+ }
+ .el-input {
+ border-color: #dcdfe6;
+ color: #606266;
+ .el-input__inner {
+ color: inherit;
+ border-color: inherit;
+ }
+ }
+ }
+ }
+ }
+}
+</style>
--
Gitblit v1.8.0