From d6bf6c38fe15510aac8e56569ca0450fb8656c89 Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@iotlink.com> Date: 星期四, 30 七月 2020 18:55:09 +0800 Subject: [PATCH] 调整摄像机接入页面 --- src/pages/cameraAccess/components/scene/Editor.vue | 3185 +++++++++++++++++++++++++++------------------------------- 1 files changed, 1,510 insertions(+), 1,675 deletions(-) diff --git a/src/components/scene/Editor.vue b/src/pages/cameraAccess/components/scene/Editor.vue similarity index 87% rename from src/components/scene/Editor.vue rename to src/pages/cameraAccess/components/scene/Editor.vue index 4497130..162733f 100644 --- a/src/components/scene/Editor.vue +++ b/src/pages/cameraAccess/components/scene/Editor.vue @@ -1,1675 +1,1510 @@ -<template> - <div class="edit-rules-box"> - <p style="padding: 0"> - <b style="font-size: 14px; line-height: 28px;">绛栫暐閰嶇疆</b> - </p> - <div class="sub-rules-box"> - <div style=" text-align: left;"> - <!-- <div style="margin-left:10px;margin-top: 4px;" v-show="index > 0"> - <el-select v-model="rule.rule_with_pre" placeholder="骞跺垪鍏崇郴" size="mini"> - <el-option - v-for="subitem in VideoManageData.Dictionary.RULECOMPUTEBETWEEN" - :key="subitem.id" - :label="subitem.name" - :value="subitem.value" - :title="subitem.name" - ></el-option> - </el-select> - </div>--> - <div class="sdk-group"> - <transition-group name="fade" mode="out-in" appear> - <div - class="config-item" - :class="{ init: index == 0 }" - v-cloak - v-for="(sdkItem, index) in sdkGroup" - :key="index" - > - <div class="connection" v-if="index !== 0"> - <el-select - v-model="sdkItem.rule_with_pre" - size="mini" - placeholder="閫夊叧绯�" - @change="selConnection(sdkItem)" - > - <el-option value="&&" title="and/涓�" label="and/涓�"></el-option> - <el-option value="||" title="or/鎴�" label="or/鎴�"></el-option> - <el-option value="=>" title="鈥�>/瑙﹀彂" label="鈥�>/瑙﹀彂"></el-option> - </el-select> - <el-checkbox - v-show="sdkItem.rule_with_pre == '=>'" - v-model="sdkItem.is_save_anyhow" - style="margin-left:30px" - >淇濆瓨杩囩▼鏁版嵁</el-checkbox> - </div> - <div class="top-line"> - <div class="left"> - <div class="init-sdk"> - <el-select - v-model="sdkItem.sdkObj" - value-key="id" - placeholder="閫夋嫨绠楁硶" - size="mini" - @change="selectSDKOption(sdkItem, true, index)" - > - <el-option - v-for="item in TaskMange.list1" - :key="item.id" - :label="item.sdk_name" - :value="item" - :title="item.sdk_name" - v-show="!item.del_flag" - ></el-option> - </el-select> - </div> - <div class="init-polygon"> - <el-select - v-model="sdkItem.polygonObj" - v-if="!isTemplate" - value-key="polygonId" - placeholder="閫夋嫨鍖哄煙" - size="mini" - @change="selectPolygonOption(sdkItem)" - > - <el-option - v-for="subitem in allPolygonData" - :key="subitem.id" - :label="subitem.name" - :value="subitem" - :title="subitem.name" - ></el-option> - </el-select> - </div> - </div> - <div class="right"> - <span class="del" v-show="!hideDel" @click="delConfigItem(index)"> - <i class="iconfont iconshanchu"></i> - </span> - <span class="collapse" @click="collapseLine(index)"> - <i - :class=" - sdkItem.isSpread - ? 'el-icon-arrow-up' - : 'el-icon-arrow-down' - " - ></i> - </span> - </div> - </div> - - <div class="argums derive-line" v-show="sdkItem.isSpread"> - <div v-for="(arg, index) in sdkItem.defaultArg" :key="arg.sort"> - <div class="argums-item" v-if="arg.config.isShow"> - <div class="arg-name"> - <!-- <el-input - v-model="arg.name" - size="mini" - :disabled="true" - ></el-input>--> - <el-select v-model="arg.name" size="mini" :disabled="true"> - <el-option :label="arg.name" :title="arg.name" :value="arg"></el-option> - </el-select> - </div> - <div class="operator-name"> - <!-- <el-input - v-if="arg.operators.length == 1" - v-model="arg.operators[0].operator" - :disabled="true" - size="mini" - ></el-input>--> - <el-select - :disabled="arg.operators.length==1" - v-model="arg.operator" - size="mini" - @change="selOperator(sdkItem)" - > - <el-option - v-for="operator in arg.operators" - :key="operator.operator" - :value="operator.operator" - :label="operator.name" - :title="operator.name" - ></el-option> - </el-select> - </div> - <div class="arg-val"> - <div v-if="arg.operator == 'range'"> - <el-input - class="range-min" - v-model="arg.min" - @blur="validateArgVal(arg, $event)" - ></el-input> - <span class="devide"></span> - <el-input - class="range-max" - v-model="arg.max" - @blur="validateArgVal(arg, $event)" - ></el-input> - <span>{{ arg.unit }}</span> - </div> - <div v-else> - <el-select v-if="arg.type == 'option'" v-model="arg.sdk_arg_value"> - <el-option>璇烽�夋嫨</el-option> - </el-select> - <el-input - v-if="arg.type == 'value'" - v-model="arg.sdk_arg_value" - :placeholder=" - arg.default_value ? arg.default_value : '' - " - size="mini" - :style="{ borderColor: tipColor }" - @blur="validateArgVal(arg, $event)" - ></el-input> - <span>{{ arg.unit }}</span> - </div> - </div> - <div - class="optional" - v-if=" - sdkItem.initAddOptional && - index == sdkItem.defaultArg.length - 1 - " - > - <span class="btn" @click="addOptionalArg(sdkItem)"> - <i class="iconfont iconhebingxingzhuang" style="font-size:16px"></i> - </span> - </div> - </div> - </div> - <div - class="argums-item optional-line" - v-for="optArgItem in sdkItem.optArg" - :key="optArgItem.sort" - > - <div class="arg-name"> - <el-input - v-if="sdkItem.optNames.length == 1" - v-model="sdkItem.optNames[0].name" - size="mini" - :disabled="true" - ></el-input> - <el-select - v-if="sdkItem.optNames.length > 1" - v-model="optArgItem.name" - size="mini" - @change="selOptionalArg(sdkItem, optArgItem)" - > - <el-option - v-for="optName in sdkItem.optNames" - :disabled="optName.isSelected" - :key="optName.sort" - :label="optName.name" - :title="optName.name" - :value="optName.name" - ></el-option> - </el-select> - </div> - <div class="operator-name"> - <!-- <el-input - v-model="optArgItem.operators[0].operator" - :disabled="true" - size="mini" - ></el-input>--> - - <el-select - v-model="optArgItem.operator" - size="mini" - @change="selOperator(optArgItem)" - > - <el-option - v-for="operatorItem in optArgItem.operators" - :key="operatorItem.operator" - :value="operatorItem.operator" - :label="operatorItem.name" - :title="operatorItem.name" - ></el-option> - </el-select> - </div> - <div class="arg-val"> - <el-select - v-if="optArgItem.type == 'option'" - v-model="optArgItem.sdk_arg_value" - :multiple="optArgItem.config.isMulti" - collapse-tags - size="mini" - > - <el-option - v-for="one in optArgItem.valueOptions" - :key="one.value" - :value="one.value" - :label="one.name" - :title="one.name" - ></el-option> - </el-select> - <el-input - v-if="optArgItem.type == 'value'" - v-model="optArgItem.sdk_arg_value" - size="mini" - @blur="$event => validateArgVal(optArgItem, $event)" - ></el-input> - <span>{{ optArgItem.unit }}</span> - </div> - <div class="optional"> - <span class="btn" @click="addOptionalArg(sdkItem)" v-show="sdkItem.isAddable"> - <i class="iconfont iconhebingxingzhuang" style="font-size:16px"></i> - </span> - <span class="btn" @click="delOptionalArg(sdkItem, optArgItem)"> - <i class="iconfont iconshanchu11" style="font-size:16px"></i> - </span> - </div> - </div> - </div> - </div> - </transition-group> - </div> - <div class="btn-add" v-show="isAdd && this.sdkGroup.length < 4"> - <el-button size="mini" @click="addSdkItem">+ 娣诲姞绠楁硶</el-button> - </div> - </div> - </div> - </div> -</template> -<script> -import { - deleteCameraRules, - updateRuleDefence, - updateAlarmLevel -} from '@/api/camera' - -export default { - name: 'SceneRuleEditor', - props: { - Cameras: { - type: Array, - default: () => { - return [] - } - }, - isTemplate: { - type: Boolean, - default: false - }, - isLinkRule: { - type: Boolean, - default: false - }, - includeSdks: { - type: Array - }, - ruleList: { - type: String, - default: '' - }, - onSubmitRule: { - type: Function, - default: () => false - } - }, - // computed: { - // allPolygonData() { - // let polygon = [] - // let cameras = [...this.Cameras] - - // for (let i = 0; i < cameras.length; i++) { - // let polyOpt = cameras[i].polygonData.map(p => { - // return { - // defence_state: p.defence_state, - // polygonId: p.id, - // name: this.isLinkRule - // ? cameras[i].cameraName + ':' + p.name - // : p.name, - - // cameraId: cameras[i].cameraId - // } - // }) - - // polygon = polygon.concat(polyOpt) - // } - // //娣诲姞鍦烘櫙鍒濆鍖栧尯鍩熼�夐」涓�'鍏ㄩ儴鍖哄煙' - // if (polygon.length > 0 && this.ruleList.length == 0) { - // this.polygonObj = polygon[0]; - // this.sdkGroup[0].polygonObj = JSON.parse(JSON.stringify(this.polygonObj)); - // this.selectPolygonOption(this.sdkGroup[0]) - // } - // return polygon - // } - // }, - watch: { - Cameras: { - handler(n, o) { - debugger - let polygon = [] - let cameras = [...n] - - for (let i = 0; i < cameras.length; i++) { - let polyOpt = cameras[i].polygonData.map(p => { - return { - defence_state: p.defence_state, - polygonId: p.id, - name: this.isLinkRule - ? cameras[i].cameraName + ':' + p.name - : p.name, - - cameraId: cameras[i].cameraId - } - }) - polygon = polygon.concat(polyOpt) - - this.allPolygonData = polygon - //娣诲姞鍦烘櫙鍒濆鍖栧尯鍩熼�夐」涓�'鍏ㄩ儴鍖哄煙' - debugger - // if (polygon.length > 0 && this.ruleList == '') { - // this.polygonObj = polygon[0] - // this.sdkGroup[0].polygonObj = JSON.parse( - // JSON.stringify(this.polygonObj) - // ) - - // this.selectPolygonOption(this.sdkGroup[0]) - // } - } - }, - deep: true - }, - sdkGroup: { - handler(newV, oldV) { - if (newV) { - debugger - newV.forEach(sdk => { - let rangeOne = sdk.defaultArg.find( - arg => arg.operators[0].operator == 'range' - ) - if (rangeOne) { - debugger - if (rangeOne.min.trim() && rangeOne.max.trim()) { - if (Number(rangeOne.min) >= Number(rangeOne.max)) { - this.$notify({ - type: 'error', - message: '鍖洪棿宸︿晶涓嶈兘澶т簬鎴栫瓑浜庡尯闂村彸渚х殑鍊�' - }) - rangeOne.valid = false - } - rangeOne.sdk_arg_value = rangeOne.min + ',' + rangeOne.max - } else { - rangeOne.sdk_arg_value = false; - } - - - } - }) - let res = newV.find(item => { - return JSON.stringify(item.sdkObj) == '{}' - }) - if (!res) { - this.isAdd = true - this.hideDel = false - } else { - this.isAdd = false - if (this.sdkGroup.length == 1) { - this.hideDel = true - } else { - this.hideDel = false - } - } - } - }, - deep: true - } - // ruleList: { - // handler(newVal, oldVal) { - // debugger - // this.editHandle(newVal) - // } - - // } - }, - mounted() { - this.TaskMange.findAllSdk() - //this.TaskMange.list1 = sdkJson.data; - - //this.editHandle(this.ruleList) - }, - data() { - return { - // rule: { - // sdk_id:'', - // sdkObj: {}, - // polygonObj: {}, - // argDef: [] - // }, - hideDel: true, - //isAddable: true, - allPolygonData: [], - group_id: '', - baseSdkItem: { - sdkObj: {}, - polygonObj: {}, - is_save_anyhow: true, - rule_with_pre: '', - isSpread: true, - argDef: [], - initAddOptional: false, - defaultArg: [], - optionalArg: [], - optArg: [], - optNames: [], - isAddable: true - }, - sdkGroup: [ - { - sdkObj: {}, - polygonObj: {}, - is_save_anyhow: true, - isSpread: true, - argDef: [], - initAddOptional: false, - defaultArg: [], - optionalArg: [], - optArg: [], - optNames: [], - isAddable: true - } - ], - polygonObj: {}, - isSpread: true, - isAdd: false, - tipColor: 'yellow', - tasksTable: {}, - groupRules: [], - sdksOption: [], - baseRule: { - camera_id: '', - id: '', - operator: '', - operator_type: '', - polygon_id: '', - rule_with_pre: '', - sdk_id: '', - sdk_arg_alias: '', - sdk_arg_value: '', - sdk_arg_defaultValue: '', - select_time_rule: '', - sdk_arg_type: '', - // task_id: "", - - polygonObj: {}, - taskObj: '', - - sdkObj: {}, - argObj: {}, - operatorObj: {}, - valueObj: {}, - - sdksOptions: [], - argsOptions: [], - argType: '', - computeOptions: [], - valueOptions: [], - - sdkDesc: '', - argDesc: '', - operatorDesc: '', - typeDesc: '', - valueDesc: '', - - unit: '', - value: '', - valid: true - } - } - }, - methods: { - selConnection(sdkItem) { - debugger - - }, - addSdkItem() { - let itemTemp = JSON.parse(JSON.stringify(this.baseSdkItem)); - //鍒濆鍖栧尯鍩� - itemTemp.polygonObj = JSON.parse(JSON.stringify(this.allPolygonData[0])) - this.selectPolygonOption(itemTemp) - this.sdkGroup.push(itemTemp) - }, - delConfigItem(index) { - debugger - // if(index != 0){ - // this.sdkGroup.splice(index,1); - // }else{ - // //this.sdkGroup[0] = JSON.parse(JSON.stringify(this.baseSdkItem)); - // this.sdkGroup.splice(0,1,JSON.parse(JSON.stringify(this.baseSdkItem))); - // } - - //鍒犻櫎閫昏緫锛氬綋鍙湁涓�涓畻娉曟椂锛屽垹闄や細鍥炲埌鍒濆鐘舵�侊紱鏈夊涓畻娉曟椂锛屽垹闄ゆ棦绉婚櫎鏁翠釜绠楁硶椤� - if (this.sdkGroup.length == 1) { - let itemTemp = JSON.parse(JSON.stringify(this.baseSdkItem)) - itemTemp.polygonObj = JSON.parse(JSON.stringify(this.allPolygonData[0])); - this.selectPolygonOption(itemTemp) - this.sdkGroup.splice(index, 1, itemTemp) - } else { - this.sdkGroup.splice(index, 1) - } - }, - collapseLine(index) { - // let one = this.sdkGroup.find(sdk=>{ - // return sdk.sdk_id == sdkId; - // }); - - this.sdkGroup[index].isSpread = !this.sdkGroup[index].isSpread - }, - addOptionalArg(sdkItem) { - debugger - sdkItem.initAddOptional = false - sdkItem.optArg.forEach(arg => { - sdkItem.optNames.forEach(name => { - if (arg.sort == name.sort) { - name.isSelected = true - } - }) - }) //鎵惧埌鍙�塻dkItem.optNames鐨勭涓�涓搴旂殑sdkItem.optionalArg聽push鍒皊dkItem.optArg - let oneNotSelected = sdkItem.optNames.find(name => !name.isSelected) - if (oneNotSelected) { - oneNotSelected.isSelected = true; - } - - let argTemp = sdkItem.optionalArg.find(arg => { - return arg.sort == oneNotSelected.sort - }) - - let copyArgTemp = JSON.parse(JSON.stringify(argTemp)) - if (copyArgTemp.type == 'option') { - // let alias = copyArgTemp.alias; - // console.log( this.VideoManageData.Dictionary[alias]) - // copyArgTemp.valueOptions = this.VideoManageData.Dictionary[alias].map(r => { - // return { - // name: r.name, - // value: r.value - // } - // }) - - this.setOptArgValueOptions(copyArgTemp) - } - - if (copyArgTemp.default_value) { - this.$set(copyArgTemp, 'sdk_arg_value', copyArgTemp.default_value) - } - sdkItem.optArg.push(copyArgTemp); - if (sdkItem.optArg.length < sdkItem.optionalArg.length) { - sdkItem.isAddable = true; - } else { - sdkItem.isAddable = false; - } - }, - delOptionalArg(sdkItem, optArgItem) { - let index = sdkItem.optArg.findIndex(arg => arg.sort == optArgItem.sort) - sdkItem.optArg.splice(index, 1) - sdkItem.optNames.forEach(name => { - if (name.sort == optArgItem.sort) { - name.isSelected = false - } - }) - sdkItem.initAddOptional = sdkItem.optArg.length == 0 ? true : false; - if (sdkItem.optArg.length < sdkItem.optionalArg.length) { - sdkItem.isAddable = true; - } else { - sdkItem.isAddable = false; - } - }, - selOptionalArg(sdkItem, optArgItem) { - debugger - let newSort = 0 - sdkItem.optNames.forEach(name => { - if (name.name == optArgItem.name) { - //鏂板垏鎹㈢殑鍙傛暟鍚� - name.isSelected = true - newSort = name.sort - } else if (name.sort == optArgItem.sort) { - //鍒囨崲鍓嶇殑鍙傛暟鍚� - name.isSelected = false - } - }) - //鏍规嵁鏂扮殑鍙傛暟sort鎵惧埌鍏跺搴旈厤缃璞� - let argObj = sdkItem.optionalArg.find(arg => arg.sort == newSort) - if (argObj.type == 'option') { - this.setOptArgValueOptions(argObj); - } - debugger - //鏇挎崲鏂扮殑鍙傛暟閰嶇疆瀵硅薄 - sdkItem.optArg.forEach((arg, index) => { - if (arg.sort == optArgItem.sort) { - this.$set(sdkItem.optArg, index, JSON.parse(JSON.stringify(argObj))) - } - }) - - console.log(argObj.valueOptions) - }, - setOptArgValueOptions(optArg) { - let alias = optArg.alias; - console.log(this.VideoManageData.Dictionary[alias]) - optArg.valueOptions = this.VideoManageData.Dictionary[alias].map(r => { - return { - name: r.name, - value: r.value - } - }); - }, - validateArgVal(sdkArgItem, e) { - debugger - if (typeof (sdkArgItem.sdk_arg_value) == 'string' && sdkArgItem.sdk_arg_value == '') { - this.$notify({ - type: 'warning', - message: '鍙傛暟璁惧畾鍊间笉鑳戒负绌�!' - }) - sdkArgItem.valid = false - - return false - } - //杈撳叆闈炴暟瀛� - - //鑼冨洿鏄惁鍚堟硶 - if (sdkArgItem.range) { - let leftHand = sdkArgItem.range.substr(0, 1) - let rightHand = sdkArgItem.range.substr(sdkArgItem.range.length - 1, 1) - let reg = /.*(\d+),(\d+).*/ - let res = sdkArgItem.range.match(reg) - let min = Number(res[1]), - max = Number(res[2]) - debugger - - //鍒ゆ柇闈炲尯闂寸被 - if (sdkArgItem.sdk_arg_value && sdkArgItem.operator != 'range') { - if (leftHand == '(' && rightHand == ')') { - if ( - Number(sdkArgItem.sdk_arg_value) <= min || - Number(sdkArgItem.sdk_arg_value) >= max - ) { - sdkArgItem.valid = false - - this.$notify({ - type: 'warning', - message: `鍙傛暟璁惧畾鍊奸』澶т簬${min},灏忎簬${max}` - }) - return false - } - } else if (leftHand == '[' && rightHand == ')') { - if ( - Number(sdkArgItem.sdk_arg_value) < min || - Number(sdkArgItem.sdk_arg_value) >= max - ) { - sdkArgItem.valid = false - - this.$notify({ - type: 'warning', - message: `鍙傛暟璁惧畾鍊奸』澶т簬绛変簬${min},灏忎簬${max}` - }) - return false - } - } else if (leftHand == '(' && rightHand == ']') { - if ( - Number(sdkArgItem.sdk_arg_value) <= min || - Number(sdkArgItem.sdk_arg_value) > max - ) { - sdkArgItem.valid = false - - this.$notify({ - type: 'warning', - message: `鍙傛暟璁惧畾鍊奸』澶т簬${min},灏忎簬绛変簬${max}` - }) - return false - } - } else if (leftHand == '[' && rightHand == ']') { - if ( - Number(sdkArgItem.sdk_arg_value) < min || - Number(sdkArgItem.sdk_arg_value) > max - ) { - sdkArgItem.valid = false - this.showErrorColor(e) - this.$notify({ - type: 'warning', - message: `鍙傛暟璁惧畾鍊奸』澶т簬绛変簬${min},灏忎簬绛変簬${max}` - }) - return false - } - } - } else if (sdkArgItem.min || sdkArgItem.max) { - //鍒ゆ柇鍖洪棿绫� - if (leftHand == '(' && rightHand == ')') { - if ( - Number(sdkArgItem.min) <= min || - Number(sdkArgItem.min) >= max - ) { - sdkArgItem.valid = false - - this.$notify({ - type: 'warning', - message: `鍙傛暟鍖洪棿璁惧畾鍊奸』澶т簬${min},灏忎簬${max}` - }); - return false - } - } else if (leftHand == '[' && rightHand == ')') { - if (Number(sdkArgItem.min) < min || Number(sdkArgItem.max) >= max) { - sdkArgItem.valid = false - - this.$notify({ - type: 'warning', - message: `鍙傛暟鍖洪棿璁惧畾鍊奸』澶т簬绛変簬${min},灏忎簬${max}` - }) - return false - } - } else if (leftHand == '(' && rightHand == ']') { - if (Number(sdkArgItem.min) <= min || Number(sdkArgItem.max) > max) { - sdkArgItem.valid = false - - this.$notify({ - type: 'warning', - message: `鍙傛暟鍖洪棿璁惧畾鍊奸』澶т簬${min},灏忎簬绛変簬${max}` - }) - return false - } - } else if (leftHand == '[' && rightHand == ']') { - if (Number(sdkArgItem.min) < min || Number(sdkArgItem.max) > max || Number(sdkArgItem.min) > max || Number(sdkArgItem.max) < min) { - sdkArgItem.valid = false - this.showErrorColor(e) - this.$notify({ - type: 'warning', - message: `鍙傛暟鍖洪棿璁惧畾鍊奸』澶т簬绛変簬${min},灏忎簬绛変簬${max}` - }) - return false - } - } - } - } - e.currentTarget.style.borderColor = '' - return true - }, - showErrorColor(e) { - this.$nextTick(() => { - e.currentTarget.style.borderColor = 'red' - }) - }, - setSdksOptions(rule) { - rule.sdksOptions = this.includeSdks - }, - setOperator(rule) { - rule.operator = rule.operatorObj.value - rule.operatorDesc = rule.operatorObj.name - }, - setValue(rule) { - rule.valid = true - - if (rule.operator_type === 'option') { - rule.sdk_arg_value = rule.valueObj.value ? rule.valueObj.value : '' - rule.typeDesc = '琚�夐」' - rule.valueDesc = rule.valueObj.name ? rule.valueObj.name : '' - } else { - rule.typeDesc = '鍊�' - rule.valueDesc = rule.sdk_arg_value - } - this.valideArgValue(rule) - }, - selectPolygonOption(rule) { - debugger - rule.polygon_id = rule.polygonObj.polygonId - ? rule.polygonObj.polygonId - : rule.polygon_id - rule.camera_id = rule.polygonObj.cameraId - ? rule.polygonObj.cameraId - : rule.camera_id - rule.group_id = this.group_id - }, - //閫夋嫨绠楁硶 resetArgs涓簍rue鏄坊鍔犱负false鏄垵濮嬪寲缂栬緫 - selectSDKOption(sdkItem, resetArgs) { - debugger - //sdkItem.sdk_id = sdkItem.sdkObj.id; - if (resetArgs) { - sdkItem.argDef = JSON.parse(sdkItem.sdkObj.argDef) - console.log(sdkItem.argDef) - //鍙栧嚭榛樿鍙傛暟 - sdkItem.defaultArg = sdkItem.argDef.filter( - arg => !arg.config.isOptional - ) - //璧嬮粯璁perator/鍊� - sdkItem.defaultArg.forEach(arg => { - if (arg.operators.length == 1) { - this.$set(arg, 'operator', arg.operators[0].operator) - - if (arg.operators[0].operator == 'range') { - //鍖洪棿鍊肩殑澶勭悊 - debugger - //this.$set(arg, 'sdk_arg_value', arg.min+','+arg.max) - //this.$set(arg, 'sdk_arg_value', arg.range.substring(1,arg.range.length-1)); - } - } - - if (arg.default_value) { - //arg.sdk_arg_value = arg.default_value - this.$set(arg, 'sdk_arg_value', arg.default_value) - } - }) - sdkItem.defaultArg - //鍙栧嚭鍙�夊弬鏁� - sdkItem.optionalArg = sdkItem.argDef.filter( - arg => arg.config.isOptional - ) - sdkItem.optNames = sdkItem.optionalArg.map(arg => ({ - name: arg.name, - sort: arg.sort, - isSelected: false - })) - debugger - sdkItem.initAddOptional = sdkItem.optionalArg.length > 0 ? true : false - sdkItem.optArg = [] - } - - //娣诲姞鍦烘櫙鏃�,濡傛灉鍦烘櫙鍚嶇О涓虹┖,灏卞皢閫夋嫨鐨勭涓�涓畻娉曞悕鍚屾鍒板満鏅悕绉� - if (this.sdkGroup[0] && resetArgs) { - debugger - this.$emit('sdkNameChange', this.sdkGroup[0].sdkObj.sdk_name) - } - - // 閫夐」鍒囨崲鏃堕渶瑕佸埛鏂癮rg鑿滃崟椤� - this.selectArgTypeOption(sdkItem, resetArgs) - }, - - selectArgTypeOption(rule, resetAlias) { - if (rule.sdk_arg_type == '') { - return - } - - if (resetAlias) { - rule.sdk_arg_alias = '' - } - - rule.argsOptions = rule.sdkObj.args - - // 鏍规嵁arg绫诲瀷鏄剧ず鍙傛暟, 褰撳墠鍏ㄩ儴褰掍负 target - // if (rule.sdkObj.args) { - // rule.argsOptions = rule.sdkObj.args.filter(ele => { - // return ele.arg_type === rule.sdk_arg_type - // }); - // } else { - // rule.argsOptions = []; - // } - - rule.argObj = {} - }, - //閫夋嫨绠楁硶閰嶇疆 - selOperator(rule) { - debugger - }, - selectArgsOption(rule, resetArgValue) { - // rule.operator_type = ""; - // console.log(rule, '閫夋嫨绠楁硶鍙傛暟') - rule.sdk_arg_alias = rule.argObj.alias - rule.argDesc = rule.argObj.name - rule.sdk_arg_defaultValue = rule.argObj.default_value - rule.unit = rule.argObj.unit ? rule.argObj.unit : '' - //rule.default_value = rule.argObj.default_value ? Number(rule.argObj.default_value) : 0; - - //console.log("缃俊搴︾殑榛樿鍊间负",rule.sdk_arg_defaultValue) - // 淇濆瓨鍊肩被鍨� - rule.argType = rule.argObj.type - if (rule.argType === 'option') { - rule.operator_type = 'option' - // 璁剧疆榛樿鏉′欢鍊� - this.VideoManageData.Dictionary.RULECOMPUTE.forEach(opt => { - if (opt.value == '==') { - rule.operatorObj = opt - } - }) - - this.setOperator(rule) - - this.selectValueOption(rule) - } else { - // 璁剧疆榛樿鏉′欢鍊� - rule.operator_type = 'value' - if (resetArgValue) { - rule.sdk_arg_value = '' - - this.VideoManageData.Dictionary.RULECOMPUTE.forEach(opt => { - if (opt.value == '>=') { - rule.operatorObj = opt - } - }) - } else { - // 缂栬緫瑙勫垯鍖归厤 - this.VideoManageData.Dictionary.RULECOMPUTE.forEach(opt => { - if (opt.value == rule.operator) { - rule.operatorObj = opt - } - }) - } - this.setOperator(rule) - } - }, - selectValueOption(rule) { - if (rule.sdk_arg_alias === 'time_rule') { - rule.valueOptions = this.VideoManageData.TimeRules.map(r => { - return { - name: r.name, - value: r.id - } - }) - } else if (rule.sdk_arg_alias === 'compareBase') { - rule.valueOptions = this.VideoManageData.TagList.map(r => { - return { - name: r.tableName, - value: r.id - } - }) - } else { - let ops = this.VideoManageData.Dictionary[rule.sdk_arg_alias] - if (ops && ops instanceof Array) { - rule.valueOptions = ops.map(r => { - return { - name: r.name, - value: r.value - } - }) - } - } - }, - - valideArgValue(rule) { - if (rule.sdk_arg_value == '') { - this.$notify({ - type: 'warning', - message: '鍙傛暟璁惧畾鍊间笉鑳戒负绌�!' - }) - rule.valid = false - return false - } - - if (rule.argObj && rule.argObj.range) { - // 濡傛灉璁剧疆浜嗙畻娉曢粯璁ゅ�硷紝鍒欏垽鏂笉鑳藉皬浜庤鍊� - if (rule.argObj.default_value) { - if ( - parseInt(rule.sdk_arg_value) < parseInt(rule.sdk_arg_defaultValue) - ) { - rule.valid = false - this.$notify({ - type: 'warning', - message: - '鍙傛暟璁惧畾鍊间笉鑳藉皬浜庣畻娉曞弬鏁伴粯璁ゅ�� ' + rule.sdk_arg_defaultValue - }) - rule.valueDesc = rule.sdk_arg_value = rule.argObj.default_value - rule.valid = false - return false - } - } - - // let re = /(?<=,).*?(?=]|\))/ - let re = /.*,(\d+)/ - let max = rule.argObj.range.match(re)[1] - // console.log(max,'鑾峰彇鑼冨洿鏈�澶у��') - if (Number(rule.sdk_arg_value) > Number(max)) { - rule.valid = false - this.$notify({ - type: 'warning', - message: '鍙傛暟璁惧畾鍊间笉鑳藉ぇ浜�' + max - }) - return false - } - } - - return true - }, - parataxis(rule_with_pre) { - let relation = '' - this.VideoManageData.Dictionary.RULECOMPUTEBETWEEN.forEach(pre => { - if (pre.value === rule_with_pre) { - relation = pre.name - } - }) - - return relation - }, - - generatDescription() { - let desc = '' - this.groupRules.forEach((r, index) => { - // console.log(r,index,'鎷兼帴') - if (index === 0) { - desc += r.sdkDesc + r.argDesc + r.operatorDesc + r.valueDesc + r.unit - } else { - desc += - ' ' + - this.parataxis(r.rule_with_pre) + - ' ' + - r.sdkDesc + - r.argDesc + - r.operatorDesc + - r.valueDesc + - r.unit - } - }) - // console.log(desc,'鎷兼帴') - return desc - }, - createRule() { - if (!this.isTemplate && this.Cameras.length > 0) { - // 鏈�変腑鎽勫儚鏈烘垨鑰呮湭閫変腑鎽勫儚鏈轰换鍔★紝涓嶆墽琛屽垱寤� - if (!this.Cameras[0].cameraId) return false - } - this.group_id = '' - //this.addRule(0); - }, - - //娓呯┖閰嶇疆骞跺垵濮嬪寲 - cleanRule() { - this.group_id = '' - this.sdkGroup.splice(0, this.sdkGroup.length) - this.addSdkItem(); - }, - addRule(index) { - let newRule = JSON.parse(JSON.stringify(this.baseRule)) - newRule.sdksOptions = this.includeSdks - if (!this.isLinkRule) { - // 璁剧疆榛樿鍏ㄩ儴鍖哄煙 - // if (!this.isTemplate) { - // newRule.polygonObj = this.allPolygonData[0]; - // this.selectPolygonOption(newRule) - // } - // 璁剧疆绠楁硶 - // newRule.sdksOptions = this.includeSdks; - // 璁剧疆榛樿绠楁硶 - // newRule.sdkObj = newRule.sdksOptions[0] - // this.selectSDKOption(newRule, false) - // newRule.sdk_arg_type = "target" - // this.selectArgTypeOption(newRule, true) - } - - // this.groupRules.push(newRule); - // 鎻掑叆鍒版寚瀹氫綅缃� - this.groupRules.splice(index + 1, 0, newRule) - }, - editHandle(ruleTxt) { - debugger - // if (ruleTxt.length < 1) { - // return - // } - let ruleInfo = JSON.parse(ruleTxt); - debugger; - - //let ruleInfo = JSON.parse(ruleTxt) - this.editRule(ruleInfo) - // 濡傛灉鏄仈鍔ㄤ换鍔�, 鏌ヨ鑱斿姩鎽勫儚鏈哄垪琛�, 灏嗘爲閫変腑鐨勫垪琛ㄦ洿鏀逛负璇ユ潯瑙勫垯鎵�闇�瑕佺殑鎽勫儚鏈�, 骞跺浠藉綋鍓嶇殑閫変腑鐘舵��, 瑙勫垯淇濆瓨鍚庢仮澶� - // if (this.isLinkRule) { - // this.VideoRuleData.treeSelectedNodesBackupOnEditLinkRule = [...this.TreeDataPool.selectedNodes] - // this.VideoRuleData.editLinkRuleRow = { ...ruleInfo } - - // this.TreeDataPool.selectedNodes = ruleInfo.group_rules.map(r => { - // return r.camera_id - // }) - // this.$nextTick(() => { - // setTimeout(() => { - // this.editRule(ruleInfo) - // }, 1000) - // }) - // } else { - // this.editRule(ruleInfo) - // } - }, - editRule(ruleGroup) { - debugger - this.sdkGroup = [] - this.group_id = '' - - // this.sdkGroup = ruleGroup; - // sdkGroup: [ - // { - // sdkObj: {}, - // polygonObj: {}, - // is_save_anyhow: true, - // isSpread: true, - // argDef: [], - // initAddOptional: false, - // defaultArg: [], - // optionalArg: [], - // optArg: [], - // optNames: [] - // } - // ], - ruleGroup.forEach(rule => { - debugger - let tempObj = {} - - if (rule.group_id && rule.group_id != '') { - this.group_id = rule.group_id - } - - // 濉厖鍖哄煙閫夐」鍒楄〃 - this.allPolygonData.forEach(p => { - if (p.polygonId === rule.polygon_id) { - rule.polygonObj = p - } - }) - - if (!rule.polygonObj) { - rule.polygonObj = { - cameraId: rule.camera_id, - defence_state: 1, - name: '鏈煡鍖哄煙', - polygonId: rule.polygon_id - } - } - console.log(rule) - - // 璁剧疆鍖哄煙 - this.selectPolygonOption(rule) - - //绠楁硶瀵硅薄,绠楁硶鍙傛暟閰嶇疆鏁扮粍,(鐢ㄤ簬鏁版嵁澶勭悊鐨�)榛樿鍙傛暟鏁扮粍, 鍙�夊弬鏁版暟缁�, 宸查厤缃殑鍙�夊弬鏁版暟缁�, (鐢ㄤ簬鍘婚噸鍒ゆ柇)瀛樻斁鍙�夊弬鏁板悕鐨勬暟缁� - let sdkObj = {}, - argDef = [], - defaultArg = [], - optionalArg = [], - optArg = [], - optNames = [] - - sdkObj = this.TaskMange.list1.find(sdk => sdk.id == rule.sdk_id) - - argDef = JSON.parse(sdkObj.argDef) - defaultArg = argDef.filter(arg => !arg.config.isOptional) - optionalArg = argDef.filter(arg => arg.config.isOptional) - - rule.sdk_set.forEach(arg => { - let optItem = optionalArg.find(oarg => { - debugger - if (oarg.sort == arg.sort) { - return oarg - } - }) - if (optItem) { - if (optItem.operators.length > 1) { - optItem.operator = arg.operator - //this.selOperator(optItem) - } - - //璧嬪�� - optItem.sdk_arg_value = arg.sdk_arg_value - //if(arg.sdk_arg_value.indexOf(',')>0){ - //鍒ゆ柇鏄惁鏄閫夊�肩被鍨嬬殑鍙傛暟 - let isMultiOne = optionalArg.find(oarg => oarg.sort == optItem.sort && optItem.config.isMulti) - if (isMultiOne) { - optItem.sdk_arg_value = arg.sdk_arg_value.split(','); - } - - if (optItem.type == 'option') { - this.setOptArgValueOptions(optItem) - } - optArg.push(optItem) - } else { - defaultArg.forEach(d => { - if (d.sort == arg.sort) { - if (arg.sdk_arg_value.indexOf(',') > 0) { - //鍖洪棿鍊� - d.min = arg.sdk_arg_value.split(',')[0]; - d.max = arg.sdk_arg_value.split(',')[1]; - d.operator = 'range' - } else { - d.sdk_arg_value = arg.sdk_arg_value - } - d.operator = arg.operator; - } - }) - } - }) - optNames = optionalArg.map(arg => ({ - name: arg.name, - sort: arg.sort, - isSelected: false - })) - - tempObj = { - sdkObj, - polygonObj: rule.polygonObj, - rule_with_pre: rule.rule_with_pre, - is_save_anyhow: rule.is_save_anyhow, - isSpread: true, - argDef, - initAddOptional: false, - optionalArg, - optArg, - defaultArg, - optNames, - isAddable: true, - camera_id: rule.camera_id, - polygon_id: rule.polygon_id - } - //鍥炴樉鏄惁鏄剧ず娣诲姞鍙�夊弬鏁� - tempObj.initAddOptional = - tempObj.optArg.length == 0 && tempObj.optionalArg.length > 0 - ? true - : false; - debugger - //鍥炴樉鏄惁鏄剧ず鍙�夊弬鏁版坊鍔犳寜閽� - if (tempObj.optArg.length < tempObj.optionalArg.length) { - tempObj.isAddable = true; - } else { - tempObj.isAddable = false; - } - //this.selectSDKOption(tempObj, false) - debugger - this.sdkGroup.push(tempObj) - //璁剧疆绠楁硶 - }) - //this.$nextTick(() => {}) - }, - delRule(rule) { - this.$confirm('鎻愮ず锛氬垹闄ゅ悗锛岃鏉¤鍒欏皢澶辨晥锛屾槸鍚﹀垹闄わ紵', { - center: true, - cancelButtonClass: 'comfirm-class-cancle', - confirmButtonClass: 'comfirm-class-sure' - }) - .then(() => { - deleteCameraRules({ groupId: rule.group_id }).then(res => { - if (res && res.success) { - this.$notify({ - type: 'success', - message: '鍒犻櫎鎴愬姛' - }) - this.$emit('delete-rule') - } else { - this.$notify({ - type: 'error', - message: '鍒犻櫎澶辫触锛�' - }) - } - }) - }) - .catch(() => { }) - }, - submitRule() { - debugger - let groupRule = { rules: [] } - - let group_text = '' - let validateFlag = false - - if (this.isTemplate) { - groupRule.rules = this.groupRules.map(r => { - return { - sdk_id: r.sdk_id, - sdk_arg_alias: r.sdk_arg_alias, - operator: r.operator, - operator_type: r.operator_type, - sdk_arg_value: r.sdk_arg_value, - sort: 1, - rule_with_pre: r.rule_with_pre - } - }) - } else { - //鏍¢獙蹇呭~椤� - let undefinished = this.sdkGroup.some((sdk, index) => { - debugger - //娌℃湁閰嶇疆绠楁硶 - if (Object.keys(sdk.sdkObj).length == 0) { - return sdk - } - //澶氫簬涓ら」绠楁硶鏃�,绠楁硶鍏崇郴涓嶈兘涓虹┖ - if (sdk.rule_with_pre === '' && index != 0) { - return sdk - } - //琛ㄥ崟鎻愪氦鍓嶆牎楠�:鎵�鏈夌畻娉曠殑鍙傛暟鍊间笉鑳戒负绌�,(鏈塺ange鐨�,瑕佸湪range鑼冨洿鍐�)澶辩劍鏃舵牎楠� - let defaultArgFlag = sdk.defaultArg.find(arg => !arg.sdk_arg_value) - if (defaultArgFlag) { - return sdk - } - //鏌ユ壘鍙�夊弬鏁板�兼槸鍚﹂兘璁剧疆(澶氶�夊�间负鏁扮粍绫诲瀷) - let optionalArgFlag = sdk.optArg.find(arg => { - if (arg.sdk_arg_value instanceof Array) { - if (arg.sdk_arg_value.length == 0) { - return arg - } - } else { - //鍖洪棿绫诲弬鏁板�兼渶灏�,鏈�澶у�兼槸鍚﹂兘璁剧疆 - if (arg.operator == 'range') { - debugger - if (!arg.min.trim() && arg.max.trim()) { - return arg - } - } - if (!arg.sdk_arg_value) { - return arg - } - } - }); - - if (optionalArgFlag) { - return sdk - } - }); - if (undefinished) { - this.$notify({ - type: 'error', - message: '绠楁硶鍙傛暟鏈畬鍠�,璇峰畬鍠勫悗鍐嶄繚瀛�' - }); - return - } - - //鏍¢獙鑻ョ畻娉曞叧绯讳负瑙﹀彂,鍒欑畻娉曞悕涓嶈兘閲� - let sameSdk = this.sdkGroup.some((sdk, index) => { - debugger - if (sdk.index != 0 && sdk.rule_with_pre == '=>') { - debugger - if (sdk.sdkObj.id == this.sdkGroup[index - 1].sdkObj.id) { - return sdk - } - } - }); - - if (sameSdk) { - this.$notify({ - type: 'error', - message: '绠楁硶鍏崇郴涓鸿Е鍙戞椂,绠楁硶鍚嶄笉鑳介噸澶�' - }); - return - } - - if (!validateFlag && !sameSdk) { - validateFlag = true - } - - this.sdkGroup.forEach(sdk => { - let tempObj = { - sdk_id: sdk.sdkObj.id, - camera_id: sdk.camera_id, - group_id: '', - is_save_anyhow: sdk.is_save_anyhow, - polygon_id: sdk.polygon_id, - rule_with_pre: sdk.rule_with_pre, - sdk_set: [] - } - - let defaultArgs = sdk.defaultArg.map(arg => ({ - operator: arg.operator, - operator_type: arg.type, - sdk_arg_alias: arg.alias, - sdk_arg_value: arg.sdk_arg_value, - sort: arg.sort - })) - - let defaultArgDesc = '( ' - sdk.defaultArg.forEach(arg => { - if (arg.operator == 'range') { - let valRange = ''; - debugger - valRange = arg.sdk_arg_value.replace(',', '-'); - defaultArgDesc += `${arg.name}${arg.operators[0].name}${valRange}${arg.unit || ''}, ` - } else { - defaultArgDesc += `${arg.name}${arg.operators[0].name}${ - arg.sdk_arg_value - }${arg.unit || ''}, ` - } - - }); - debugger; - defaultArgDesc = defaultArgDesc.substring(0, defaultArgDesc.length - 2) - //defaultArgDesc = defaultArgDesc.substring(0,defaultArgDesc.length-3)+defaultArgDesc.substring(defaultArgDesc.length-1,defaultArgDesc.length); - //defaultArgDesc = defaultArgDesc.substring(0,defaultArgDesc.length-1); - - //澶勭悊鍙�夐」鍙傛暟 - - let optArgs = sdk.optArg.map(arg => ({ - operator: arg.operator, - operator_type: arg.type, - sdk_arg_alias: arg.alias, - sdk_arg_value: arg.sdk_arg_value, - sort: arg.sort - })); - //灏嗗閫夐」鐨勫�兼嫾鎴愬瓧绗︿覆 - optArgs.forEach(one => { - if (one.sdk_arg_value instanceof Array) { - one.sdk_arg_value = one.sdk_arg_value.join(); - } - }); - let optArgDesc = ' ' - sdk.optArg.forEach(arg => { - let val = ''; - let valRange = ''; - - - //澶勭悊涓嬫媺閫夊�肩被鍨� - if (arg.type == 'option') { - if (arg.sdk_arg_value instanceof Array) { - //澶氶�夊�� - let multiNames = ''; - arg.sdk_arg_value.forEach(val => { - let opV = arg.valueOptions.find(opt => opt.value == val); - multiNames += opV.name + ' '; - }) - val = multiNames; - - } else { - let res = arg.valueOptions.find( - opt => opt.value == arg.sdk_arg_value - ); - - val = res.name; - } - //optArgDesc += `,${arg.name}${arg.operators[0].operator}${val}${arg.unit || ''}, ` - } else { - //optArgDesc += `,${arg.name}${arg.operators[0].operator}${ arg.sdk_arg_value }${arg.unit || ''}, ` - } - - let operatorSelected = arg.operators.find(opr => opr.operator == arg.operator) - optArgDesc += `,${arg.name}${operatorSelected.name}${ - arg.type == 'option' ? val : arg.sdk_arg_value - }${arg.unit || ''}, ` - }) - optArgDesc = optArgDesc.substring(0, optArgDesc.length - 2) + optArgDesc.substring(optArgDesc.length - 1, optArgDesc.length); - optArgDesc += ')' - tempObj.sdk_set = defaultArgs.concat(optArgs) - - groupRule.rules.push(tempObj) - - let rule_with_pre = '' - if (sdk.rule_with_pre) { - switch (sdk.rule_with_pre) { - case '&&': - rule_with_pre = ' and ' - break - case '||': - rule_with_pre = ' or ' - break - case '=>': - rule_with_pre = ' -> ' - break - default: - rule_with_pre = '' - } - } - debugger; - group_text += `${rule_with_pre ? "<br/>" + rule_with_pre + "<br/>" : ""} <span style="background-color:RGB(183,183,183);">${ - sdk.sdkObj.sdk_name - }</span> ${ - sdk.polygonObj.name - } ${defaultArgDesc}${optArgDesc}`; - - if ( - group_text.charAt(group_text.length - 3) == ',' && - group_text.charAt(group_text.length - 2) == ' ' && - group_text.charAt(group_text.length - 1) == ')' - ) { - group_text = - group_text.substring(0, group_text.length - 3) + - group_text.substring(group_text.length - 2, group_text.length) - } - debugger - }) - console.log(group_text) - } - - groupRule.text = group_text - groupRule.id = this.group_id - return groupRule - - if (this.isLinkRule) { - // 鍒ゆ柇瑙勫垯涓嚦灏戝寘鍚袱鎽勫儚鏈� - let cameraIds = Array.from( - new Set( - this.sdkGroup.map(r => { - return r.camera_id - }) - ) - ) - if (cameraIds.length < 2) { - this.$notify({ - type: 'error', - //message: '闇�瑕�2涓笉鍚屾憚鍍忔満鎵嶈兘缁勬垚鑱斿姩瑙勫垯' - message: '闇�瑕佽嚦灏�2涓笉鍚屾憚鍍忔満鎵嶈兘缁勬垚鑱斿姩鍦烘櫙' - }) - return - } - - // 鑱斿姩瑙勫垯缂栬緫鍚庯紝鎭㈠涔嬪墠閫変腑鐨勬憚鍍忔満 - // if (this.VideoRuleData.treeSelectedNodesBackupOnEditLinkRule.length) { - // this.TreeDataPool.selectedNodes = this.VideoRuleData.treeSelectedNodesBackupOnEditLinkRule - // this.VideoRuleData.treeSelectedNodesBackupOnEditLinkRule = [] - // } - } - //if(validateFlag){ - this.onSubmitRule(payload) - //} - } - } -} -</script> - -<style lang="scss"> -.edit-rules-box { - width: 100%; - padding: 0px; - box-sizing: border-box; - .sub-rules-box { - width: 71%; - min-width: 1127.4px; - min-height: 50px; - border-top: 1px solid #eee; - padding-top: 7px; - - box-sizing: border-box; - padding-bottom: 38px; - .task-rules-button { - text-align: right; - margin: 15px; - } - .config-item { - background: #f8f9f8; - padding: 15px 25px; - margin-bottom: 52px; - position: relative; - .el-select { - width: 225px !important; - } - .init-sdk { - margin-right: 30px; - } - .connection { - background: #fff; - position: absolute; - width: 100%; - top: -40px; - } - .top-line { - height: 30px; - .left { - float: left; - display: flex; - } - .right { - float: right; - cursor: pointer; - .del { - margin-right: 10px; - color: rgb(231, 76, 60); - } - .collapse { - font-size: 13px; - display: inline-block; - padding: 5px; - cursor: pointer; - } - } - } - .argums { - position: relative; - // width: calc(100% - 25px); - // top: 43px; - // left: 0; - // padding-left: 25px; - // background: #f8f9f8; - .argums-item { - display: flex; - align-items: center; - margin: 7px 0; - .arg-name, - .operator-name { - margin-right: 30px; - } - .arg-val { - width: 245px; - span { - margin-left: 6px; - } - .range-min, - .range-max { - width: 88px; - .el-input__inner { - height: 28px; - } - } - .devide { - display: inline-block; - width: 30px; - height: 1px; - background: #c5c5c5; - vertical-align: top; - margin: 14px 10px 0; - } - } - } - .el-input { - width: 225px; - } - } - } - .btn-add { - margin: 0 25px 15px; - margin-top: -38px; - .el-button { - width: 370px; - cursor: pointer; - } - } - } - - .el-button--text { - text-decoration: unset; - } - .el-input.is-disabled .el-input__inner { - background: #fafafa; - color: #606266; - } - p { - text-align: left; - // padding: 10px; - box-sizing: border-box; - } - - .task-blank { - float: left; - font-family: PingFangSC-Regular; - font-size: 12px; - color: #cccccc; - margin-top: 5px; - } - - .btn { - cursor: pointer; - color: #3d68e1; - margin-left: 10px; - font-size: 14px; - } -} -</style> +<template> + <div class="edit-rules-box"> + <p style="padding: 0"> + <b style="font-size: 14px; line-height: 28px;">绛栫暐閰嶇疆</b> + </p> + <div class="sub-rules-box"> + <div style=" text-align: left;"> + <div class="sdk-group"> + <transition-group name="fade" mode="out-in" appear> + <div + class="config-item" + :class="{ init: index == 0 }" + v-cloak + v-for="(sdkItem, index) in sdkGroup" + :key="sdkItem.id" + > + <div class="connection" v-if="index !== 0"> + <el-select + v-model="sdkItem.rule_with_pre" + size="mini" + placeholder="閫夊叧绯�" + @change="selConnection(sdkItem)" + > + <el-option value="&&" title="and/涓�" label="and/涓�"></el-option> + <el-option value="||" title="or/鎴�" label="or/鎴�"></el-option> + <el-option value="=>" title="鈥�>/瑙﹀彂" label="鈥�>/瑙﹀彂"></el-option> + </el-select> + <el-checkbox + v-show="sdkItem.rule_with_pre == '=>'" + v-model="sdkItem.is_save_anyhow" + style="margin-left:30px" + >淇濆瓨杩囩▼鏁版嵁</el-checkbox> + </div> + <div class="top-line"> + <div class="left"> + <div class="init-sdk"> + <el-select + v-model="sdkItem.sdkObj" + value-key="id" + placeholder="閫夋嫨绠楁硶" + size="mini" + @change="selectSDKOption(sdkItem, true, index)" + > + <el-option + v-for="item in TaskMange.list1" + :key="item.id" + :label="item.sdk_name" + :value="item" + :title="item.sdk_name" + v-show="!item.del_flag" + ></el-option> + </el-select> + </div> + <div class="init-polygon"> + <el-select + v-model="sdkItem.polygonObj" + v-if="!isTemplate" + value-key="polygonId" + placeholder="閫夋嫨鍖哄煙" + size="mini" + @change="selectPolygonOption(sdkItem)" + > + <el-option + v-for="subitem in allPolygonData" + :key="subitem.id" + :label="subitem.name" + :value="subitem" + :title="subitem.name" + ></el-option> + </el-select> + </div> + </div> + <div class="right"> + <span class="del" v-show="!hideDel" @click="delConfigItem(index)"> + <i class="iconfont iconshanchu"></i> + </span> + <span class="collapse" @click="collapseLine(index)"> + <i + :class=" + sdkItem.isSpread + ? 'el-icon-arrow-up' + : 'el-icon-arrow-down' + " + ></i> + </span> + </div> + </div> + + <div class="argums derive-line" v-show="sdkItem.isSpread"> + <div v-for="(arg, index) in sdkItem.defaultArg" :key="arg.sort"> + <div class="argums-item" v-if="arg.config.isShow"> + <div class="arg-name"> + <el-select v-model="arg.name" size="mini" :disabled="true"> + <el-option :label="arg.name" :title="arg.name" :value="arg"></el-option> + </el-select> + </div> + <div class="operator-name"> + <el-select + :disabled="arg.operators.length==1" + v-model="arg.operator" + size="mini" + @change="selOperator(sdkItem)" + > + <el-option + v-for="operator in arg.operators" + :key="operator.operator" + :value="operator.operator" + :label="operator.name" + :title="operator.name" + ></el-option> + </el-select> + </div> + <div class="arg-val"> + <div v-if="arg.operator == 'range'"> + <el-input + class="range-min" + v-model="arg.min" + @blur="validateArgVal(arg, $event)" + ></el-input> + <span class="devide"></span> + <el-input + class="range-max" + v-model="arg.max" + @blur="validateArgVal(arg, $event)" + ></el-input> + <span>{{ arg.unit }}</span> + </div> + <div v-else> + <el-select v-if="arg.type == 'option'" v-model="arg.sdk_arg_value"> + <el-option>璇烽�夋嫨</el-option> + </el-select> + <el-input + v-if="arg.type == 'value'" + v-model="arg.sdk_arg_value" + :placeholder=" + arg.default_value ? arg.default_value : '' + " + size="mini" + :style="{ borderColor: tipColor }" + @blur="validateArgVal(arg, $event)" + ></el-input> + <span>{{ arg.unit }}</span> + </div> + </div> + <div + class="optional" + v-if=" + sdkItem.initAddOptional && + index == sdkItem.defaultArg.length - 1 + " + > + <span class="btn" @click="addOptionalArg(sdkItem)"> + <i class="iconfont iconhebingxingzhuang" style="font-size:16px"></i> + </span> + </div> + </div> + </div> + <div + class="argums-item optional-line" + v-for="optArgItem in sdkItem.optArg" + :key="optArgItem.sort" + > + <div class="arg-name"> + <el-input + v-if="sdkItem.optNames.length == 1" + v-model="sdkItem.optNames[0].name" + size="mini" + :disabled="true" + ></el-input> + <el-select + v-if="sdkItem.optNames.length > 1" + v-model="optArgItem.name" + size="mini" + @change="selOptionalArg(sdkItem, optArgItem)" + > + <el-option + v-for="optName in sdkItem.optNames" + :disabled="optName.isSelected" + :key="optName.sort" + :label="optName.name" + :title="optName.name" + :value="optName.name" + ></el-option> + </el-select> + </div> + <div class="operator-name"> + <el-select + v-model="optArgItem.operator" + size="mini" + @change="selOperator(optArgItem)" + > + <el-option + v-for="operatorItem in optArgItem.operators" + :key="operatorItem.operator" + :value="operatorItem.operator" + :label="operatorItem.name" + :title="operatorItem.name" + ></el-option> + </el-select> + </div> + <div class="arg-val"> + <el-select + v-if="optArgItem.type == 'option'" + v-model="optArgItem.sdk_arg_value" + :multiple="optArgItem.config.isMulti" + collapse-tags + size="mini" + > + <el-option + v-for="one in optArgItem.valueOptions" + :key="one.value" + :value="one.value" + :label="one.name" + :title="one.name" + ></el-option> + </el-select> + <el-input + v-if="optArgItem.type == 'value'" + v-model="optArgItem.sdk_arg_value" + size="mini" + @blur="$event => validateArgVal(optArgItem, $event)" + ></el-input> + <span>{{ optArgItem.unit }}</span> + </div> + <div class="optional"> + <span class="btn" @click="addOptionalArg(sdkItem)" v-show="sdkItem.isAddable"> + <i class="iconfont iconhebingxingzhuang" style="font-size:16px"></i> + </span> + <span class="btn" @click="delOptionalArg(sdkItem, optArgItem)"> + <i class="iconfont iconshanchu11" style="font-size:16px"></i> + </span> + </div> + </div> + </div> + </div> + </transition-group> + </div> + <div class="btn-add" v-show="isAdd && this.sdkGroup.length < 4"> + <el-button size="mini" @click="addSdkItem">+ 娣诲姞绠楁硶</el-button> + </div> + </div> + </div> + </div> +</template> +<script> +import { + deleteCameraRules, + updateRuleDefence, + updateAlarmLevel +} from '@/api/camera' + +export default { + name: 'SceneRuleEditor', + props: { + Cameras: { + type: Array, + default: () => { + return [] + } + }, + isTemplate: { + type: Boolean, + default: false + }, + isLinkRule: { + type: Boolean, + default: false + }, + includeSdks: { + type: Array + }, + ruleList: { + type: String, + default: '' + }, + onSubmitRule: { + type: Function, + default: () => false + } + }, + + watch: { + Cameras: { + handler(n, o) { + + let polygon = [] + let cameras = [...n] + + for (let i = 0; i < cameras.length; i++) { + let polyOpt = cameras[i].polygonData.map(p => { + return { + defence_state: p.defence_state, + polygonId: p.id, + name: this.isLinkRule + ? cameras[i].cameraName + ':' + p.name + : p.name, + + cameraId: cameras[i].cameraId + } + }) + polygon = polygon.concat(polyOpt) + + this.allPolygonData = polygon + } + }, + deep: true + }, + sdkGroup: { + handler(newV, oldV) { + if (newV) { + + newV.forEach(sdk => { + let rangeOne = sdk.defaultArg.find( + arg => arg.operators[0].operator == 'range' + ) + if (rangeOne) { + + if (rangeOne.min.trim() && rangeOne.max.trim()) { + if (Number(rangeOne.min) >= Number(rangeOne.max)) { + this.$notify({ + type: 'error', + message: '鍖洪棿宸︿晶涓嶈兘澶т簬鎴栫瓑浜庡尯闂村彸渚х殑鍊�' + }) + rangeOne.valid = false + } + rangeOne.sdk_arg_value = rangeOne.min + ',' + rangeOne.max + } else { + rangeOne.sdk_arg_value = false; + } + + + } + }) + let res = newV.find(item => { + return JSON.stringify(item.sdkObj) == '{}' + }) + if (!res) { + this.isAdd = true + this.hideDel = false + } else { + this.isAdd = false + if (this.sdkGroup.length == 1) { + this.hideDel = true + } else { + this.hideDel = false + } + } + } + }, + deep: true + } + }, + mounted() { + this.TaskMange.findAllSdk() + }, + data() { + return { + hideDel: true, + //isAddable: true, + allPolygonData: [], + group_id: '', + baseSdkItem: { + sdkObj: {}, + polygonObj: {}, + is_save_anyhow: true, + rule_with_pre: '', + isSpread: true, + argDef: [], + initAddOptional: false, + defaultArg: [], + optionalArg: [], + optArg: [], + optNames: [], + isAddable: true + }, + sdkGroup: [ + { + sdkObj: {}, + polygonObj: {}, + is_save_anyhow: true, + isSpread: true, + argDef: [], + initAddOptional: false, + defaultArg: [], + optionalArg: [], + optArg: [], + optNames: [], + isAddable: true + } + ], + polygonObj: {}, + isSpread: true, + isAdd: false, + tipColor: 'yellow', + tasksTable: {}, + groupRules: [], + sdksOption: [], + baseRule: { + camera_id: '', + id: '', + operator: '', + operator_type: '', + polygon_id: '', + rule_with_pre: '', + sdk_id: '', + sdk_arg_alias: '', + sdk_arg_value: '', + sdk_arg_defaultValue: '', + select_time_rule: '', + sdk_arg_type: '', + // task_id: "", + + polygonObj: {}, + taskObj: '', + + sdkObj: {}, + argObj: {}, + operatorObj: {}, + valueObj: {}, + + sdksOptions: [], + argsOptions: [], + argType: '', + computeOptions: [], + valueOptions: [], + + sdkDesc: '', + argDesc: '', + operatorDesc: '', + typeDesc: '', + valueDesc: '', + + unit: '', + value: '', + valid: true + } + } + }, + methods: { + selConnection(sdkItem) { + + + }, + addSdkItem() { + let itemTemp = JSON.parse(JSON.stringify(this.baseSdkItem)); + //鍒濆鍖栧尯鍩� + itemTemp.polygonObj = JSON.parse(JSON.stringify(this.allPolygonData[0])) + this.selectPolygonOption(itemTemp) + this.sdkGroup.push(itemTemp) + }, + delConfigItem(index) { + //鍒犻櫎閫昏緫锛氬綋鍙湁涓�涓畻娉曟椂锛屽垹闄や細鍥炲埌鍒濆鐘舵�侊紱鏈夊涓畻娉曟椂锛屽垹闄ゆ棦绉婚櫎鏁翠釜绠楁硶椤� + if (this.sdkGroup.length == 1) { + let itemTemp = JSON.parse(JSON.stringify(this.baseSdkItem)) + itemTemp.polygonObj = JSON.parse(JSON.stringify(this.allPolygonData[0])); + this.selectPolygonOption(itemTemp) + this.sdkGroup.splice(index, 1, itemTemp) + } else { + this.sdkGroup.splice(index, 1) + } + }, + collapseLine(index) { + this.sdkGroup[index].isSpread = !this.sdkGroup[index].isSpread + }, + addOptionalArg(sdkItem) { + + sdkItem.initAddOptional = false + sdkItem.optArg.forEach(arg => { + sdkItem.optNames.forEach(name => { + if (arg.sort == name.sort) { + name.isSelected = true + } + }) + }) //鎵惧埌鍙�塻dkItem.optNames鐨勭涓�涓搴旂殑sdkItem.optionalArg聽push鍒皊dkItem.optArg + let oneNotSelected = sdkItem.optNames.find(name => !name.isSelected) + if (oneNotSelected) { + oneNotSelected.isSelected = true; + } + + let argTemp = sdkItem.optionalArg.find(arg => { + return arg.sort == oneNotSelected.sort + }) + + let copyArgTemp = JSON.parse(JSON.stringify(argTemp)) + if (copyArgTemp.type == 'option') { + this.setOptArgValueOptions(copyArgTemp) + } + + if (copyArgTemp.default_value) { + this.$set(copyArgTemp, 'sdk_arg_value', copyArgTemp.default_value) + } + sdkItem.optArg.push(copyArgTemp); + if (sdkItem.optArg.length < sdkItem.optionalArg.length) { + sdkItem.isAddable = true; + } else { + sdkItem.isAddable = false; + } + }, + delOptionalArg(sdkItem, optArgItem) { + let index = sdkItem.optArg.findIndex(arg => arg.sort == optArgItem.sort) + sdkItem.optArg.splice(index, 1) + sdkItem.optNames.forEach(name => { + if (name.sort == optArgItem.sort) { + name.isSelected = false + } + }) + sdkItem.initAddOptional = sdkItem.optArg.length == 0 ? true : false; + if (sdkItem.optArg.length < sdkItem.optionalArg.length) { + sdkItem.isAddable = true; + } else { + sdkItem.isAddable = false; + } + }, + selOptionalArg(sdkItem, optArgItem) { + + let newSort = 0 + sdkItem.optNames.forEach(name => { + if (name.name == optArgItem.name) { + //鏂板垏鎹㈢殑鍙傛暟鍚� + name.isSelected = true + newSort = name.sort + } else if (name.sort == optArgItem.sort) { + //鍒囨崲鍓嶇殑鍙傛暟鍚� + name.isSelected = false + } + }) + //鏍规嵁鏂扮殑鍙傛暟sort鎵惧埌鍏跺搴旈厤缃璞� + let argObj = sdkItem.optionalArg.find(arg => arg.sort == newSort) + if (argObj.type == 'option') { + this.setOptArgValueOptions(argObj); + } + + //鏇挎崲鏂扮殑鍙傛暟閰嶇疆瀵硅薄 + sdkItem.optArg.forEach((arg, index) => { + if (arg.sort == optArgItem.sort) { + this.$set(sdkItem.optArg, index, JSON.parse(JSON.stringify(argObj))) + } + }) + + console.log(argObj.valueOptions) + }, + setOptArgValueOptions(optArg) { + let alias = optArg.alias; + console.log(this.VideoManageData.Dictionary[alias]) + optArg.valueOptions = this.VideoManageData.Dictionary[alias].map(r => { + return { + name: r.name, + value: r.value + } + }); + }, + validateArgVal(sdkArgItem, e) { + + if (typeof (sdkArgItem.sdk_arg_value) == 'string' && sdkArgItem.sdk_arg_value == '') { + this.$notify({ + type: 'warning', + message: '鍙傛暟璁惧畾鍊间笉鑳戒负绌�!' + }) + sdkArgItem.valid = false + + return false + } + //杈撳叆闈炴暟瀛� + + //鑼冨洿鏄惁鍚堟硶 + if (sdkArgItem.range) { + let leftHand = sdkArgItem.range.substr(0, 1) + let rightHand = sdkArgItem.range.substr(sdkArgItem.range.length - 1, 1) + let reg = /.*(\d+),(\d+).*/ + let res = sdkArgItem.range.match(reg) + let min = Number(res[1]), + max = Number(res[2]) + + + //鍒ゆ柇闈炲尯闂寸被 + if (sdkArgItem.sdk_arg_value && sdkArgItem.operator != 'range') { + if (leftHand == '(' && rightHand == ')') { + if ( + Number(sdkArgItem.sdk_arg_value) <= min || + Number(sdkArgItem.sdk_arg_value) >= max + ) { + sdkArgItem.valid = false + + this.$notify({ + type: 'warning', + message: `鍙傛暟璁惧畾鍊奸』澶т簬${min},灏忎簬${max}` + }) + return false + } + } else if (leftHand == '[' && rightHand == ')') { + if ( + Number(sdkArgItem.sdk_arg_value) < min || + Number(sdkArgItem.sdk_arg_value) >= max + ) { + sdkArgItem.valid = false + + this.$notify({ + type: 'warning', + message: `鍙傛暟璁惧畾鍊奸』澶т簬绛変簬${min},灏忎簬${max}` + }) + return false + } + } else if (leftHand == '(' && rightHand == ']') { + if ( + Number(sdkArgItem.sdk_arg_value) <= min || + Number(sdkArgItem.sdk_arg_value) > max + ) { + sdkArgItem.valid = false + + this.$notify({ + type: 'warning', + message: `鍙傛暟璁惧畾鍊奸』澶т簬${min},灏忎簬绛変簬${max}` + }) + return false + } + } else if (leftHand == '[' && rightHand == ']') { + if ( + Number(sdkArgItem.sdk_arg_value) < min || + Number(sdkArgItem.sdk_arg_value) > max + ) { + sdkArgItem.valid = false + this.showErrorColor(e) + this.$notify({ + type: 'warning', + message: `鍙傛暟璁惧畾鍊奸』澶т簬绛変簬${min},灏忎簬绛変簬${max}` + }) + return false + } + } + } else if (sdkArgItem.min || sdkArgItem.max) { + //鍒ゆ柇鍖洪棿绫� + if (leftHand == '(' && rightHand == ')') { + if ( + Number(sdkArgItem.min) <= min || + Number(sdkArgItem.min) >= max + ) { + sdkArgItem.valid = false + + this.$notify({ + type: 'warning', + message: `鍙傛暟鍖洪棿璁惧畾鍊奸』澶т簬${min},灏忎簬${max}` + }); + return false + } + } else if (leftHand == '[' && rightHand == ')') { + if (Number(sdkArgItem.min) < min || Number(sdkArgItem.max) >= max) { + sdkArgItem.valid = false + + this.$notify({ + type: 'warning', + message: `鍙傛暟鍖洪棿璁惧畾鍊奸』澶т簬绛変簬${min},灏忎簬${max}` + }) + return false + } + } else if (leftHand == '(' && rightHand == ']') { + if (Number(sdkArgItem.min) <= min || Number(sdkArgItem.max) > max) { + sdkArgItem.valid = false + + this.$notify({ + type: 'warning', + message: `鍙傛暟鍖洪棿璁惧畾鍊奸』澶т簬${min},灏忎簬绛変簬${max}` + }) + return false + } + } else if (leftHand == '[' && rightHand == ']') { + if (Number(sdkArgItem.min) < min || Number(sdkArgItem.max) > max || Number(sdkArgItem.min) > max || Number(sdkArgItem.max) < min) { + sdkArgItem.valid = false + this.showErrorColor(e) + this.$notify({ + type: 'warning', + message: `鍙傛暟鍖洪棿璁惧畾鍊奸』澶т簬绛変簬${min},灏忎簬绛変簬${max}` + }) + return false + } + } + } + } + e.currentTarget.style.borderColor = '' + return true + }, + showErrorColor(e) { + this.$nextTick(() => { + e.currentTarget.style.borderColor = 'red' + }) + }, + setSdksOptions(rule) { + rule.sdksOptions = this.includeSdks + }, + setOperator(rule) { + rule.operator = rule.operatorObj.value + rule.operatorDesc = rule.operatorObj.name + }, + setValue(rule) { + rule.valid = true + + if (rule.operator_type === 'option') { + rule.sdk_arg_value = rule.valueObj.value ? rule.valueObj.value : '' + rule.typeDesc = '琚�夐」' + rule.valueDesc = rule.valueObj.name ? rule.valueObj.name : '' + } else { + rule.typeDesc = '鍊�' + rule.valueDesc = rule.sdk_arg_value + } + this.valideArgValue(rule) + }, + selectPolygonOption(rule) { + + rule.polygon_id = rule.polygonObj.polygonId + ? rule.polygonObj.polygonId + : rule.polygon_id + rule.camera_id = rule.polygonObj.cameraId + ? rule.polygonObj.cameraId + : rule.camera_id + rule.group_id = this.group_id + }, + //閫夋嫨绠楁硶 resetArgs涓簍rue鏄坊鍔犱负false鏄垵濮嬪寲缂栬緫 + selectSDKOption(sdkItem, resetArgs) { + + //sdkItem.sdk_id = sdkItem.sdkObj.id; + if (resetArgs) { + sdkItem.argDef = JSON.parse(sdkItem.sdkObj.argDef) + console.log(sdkItem.argDef) + //鍙栧嚭榛樿鍙傛暟 + sdkItem.defaultArg = sdkItem.argDef.filter( + arg => !arg.config.isOptional + ) + //璧嬮粯璁perator/鍊� + sdkItem.defaultArg.forEach(arg => { + if (arg.operators.length == 1) { + this.$set(arg, 'operator', arg.operators[0].operator) + + if (arg.operators[0].operator == 'range') { + //鍖洪棿鍊肩殑澶勭悊 + + //this.$set(arg, 'sdk_arg_value', arg.min+','+arg.max) + //this.$set(arg, 'sdk_arg_value', arg.range.substring(1,arg.range.length-1)); + } + } + + if (arg.default_value) { + //arg.sdk_arg_value = arg.default_value + this.$set(arg, 'sdk_arg_value', arg.default_value) + } + }) + sdkItem.defaultArg + //鍙栧嚭鍙�夊弬鏁� + sdkItem.optionalArg = sdkItem.argDef.filter( + arg => arg.config.isOptional + ) + sdkItem.optNames = sdkItem.optionalArg.map(arg => ({ + name: arg.name, + sort: arg.sort, + isSelected: false + })) + + sdkItem.initAddOptional = sdkItem.optionalArg.length > 0 ? true : false + sdkItem.optArg = [] + } + + //娣诲姞鍦烘櫙鏃�,濡傛灉鍦烘櫙鍚嶇О涓虹┖,灏卞皢閫夋嫨鐨勭涓�涓畻娉曞悕鍚屾鍒板満鏅悕绉� + if (this.sdkGroup[0] && resetArgs) { + + this.$emit('sdkNameChange', this.sdkGroup[0].sdkObj.sdk_name) + } + + // 閫夐」鍒囨崲鏃堕渶瑕佸埛鏂癮rg鑿滃崟椤� + this.selectArgTypeOption(sdkItem, resetArgs) + }, + + selectArgTypeOption(rule, resetAlias) { + if (rule.sdk_arg_type == '') { + return + } + + if (resetAlias) { + rule.sdk_arg_alias = '' + } + + rule.argsOptions = rule.sdkObj.args + rule.argObj = {} + }, + //閫夋嫨绠楁硶閰嶇疆 + selOperator(rule) { + + }, + selectArgsOption(rule, resetArgValue) { + // rule.operator_type = ""; + // console.log(rule, '閫夋嫨绠楁硶鍙傛暟') + rule.sdk_arg_alias = rule.argObj.alias + rule.argDesc = rule.argObj.name + rule.sdk_arg_defaultValue = rule.argObj.default_value + rule.unit = rule.argObj.unit ? rule.argObj.unit : '' + //rule.default_value = rule.argObj.default_value ? Number(rule.argObj.default_value) : 0; + + //console.log("缃俊搴︾殑榛樿鍊间负",rule.sdk_arg_defaultValue) + // 淇濆瓨鍊肩被鍨� + rule.argType = rule.argObj.type + if (rule.argType === 'option') { + rule.operator_type = 'option' + // 璁剧疆榛樿鏉′欢鍊� + this.VideoManageData.Dictionary.RULECOMPUTE.forEach(opt => { + if (opt.value == '==') { + rule.operatorObj = opt + } + }) + + this.setOperator(rule) + + this.selectValueOption(rule) + } else { + // 璁剧疆榛樿鏉′欢鍊� + rule.operator_type = 'value' + if (resetArgValue) { + rule.sdk_arg_value = '' + + this.VideoManageData.Dictionary.RULECOMPUTE.forEach(opt => { + if (opt.value == '>=') { + rule.operatorObj = opt + } + }) + } else { + // 缂栬緫瑙勫垯鍖归厤 + this.VideoManageData.Dictionary.RULECOMPUTE.forEach(opt => { + if (opt.value == rule.operator) { + rule.operatorObj = opt + } + }) + } + this.setOperator(rule) + } + }, + selectValueOption(rule) { + if (rule.sdk_arg_alias === 'time_rule') { + rule.valueOptions = this.VideoManageData.TimeRules.map(r => { + return { + name: r.name, + value: r.id + } + }) + } else if (rule.sdk_arg_alias === 'compareBase') { + rule.valueOptions = this.VideoManageData.TagList.map(r => { + return { + name: r.tableName, + value: r.id + } + }) + } else { + let ops = this.VideoManageData.Dictionary[rule.sdk_arg_alias] + if (ops && ops instanceof Array) { + rule.valueOptions = ops.map(r => { + return { + name: r.name, + value: r.value + } + }) + } + } + }, + + valideArgValue(rule) { + if (rule.sdk_arg_value == '') { + this.$notify({ + type: 'warning', + message: '鍙傛暟璁惧畾鍊间笉鑳戒负绌�!' + }) + rule.valid = false + return false + } + + if (rule.argObj && rule.argObj.range) { + // 濡傛灉璁剧疆浜嗙畻娉曢粯璁ゅ�硷紝鍒欏垽鏂笉鑳藉皬浜庤鍊� + if (rule.argObj.default_value) { + if ( + parseInt(rule.sdk_arg_value) < parseInt(rule.sdk_arg_defaultValue) + ) { + rule.valid = false + this.$notify({ + type: 'warning', + message: + '鍙傛暟璁惧畾鍊间笉鑳藉皬浜庣畻娉曞弬鏁伴粯璁ゅ�� ' + rule.sdk_arg_defaultValue + }) + rule.valueDesc = rule.sdk_arg_value = rule.argObj.default_value + rule.valid = false + return false + } + } + + // let re = /(?<=,).*?(?=]|\))/ + let re = /.*,(\d+)/ + let max = rule.argObj.range.match(re)[1] + // console.log(max,'鑾峰彇鑼冨洿鏈�澶у��') + if (Number(rule.sdk_arg_value) > Number(max)) { + rule.valid = false + this.$notify({ + type: 'warning', + message: '鍙傛暟璁惧畾鍊间笉鑳藉ぇ浜�' + max + }) + return false + } + } + + return true + }, + parataxis(rule_with_pre) { + let relation = '' + this.VideoManageData.Dictionary.RULECOMPUTEBETWEEN.forEach(pre => { + if (pre.value === rule_with_pre) { + relation = pre.name + } + }) + + return relation + }, + + generatDescription() { + let desc = '' + this.groupRules.forEach((r, index) => { + // console.log(r,index,'鎷兼帴') + if (index === 0) { + desc += r.sdkDesc + r.argDesc + r.operatorDesc + r.valueDesc + r.unit + } else { + desc += + ' ' + + this.parataxis(r.rule_with_pre) + + ' ' + + r.sdkDesc + + r.argDesc + + r.operatorDesc + + r.valueDesc + + r.unit + } + }) + // console.log(desc,'鎷兼帴') + return desc + }, + createRule() { + if (!this.isTemplate && this.Cameras.length > 0) { + // 鏈�変腑鎽勫儚鏈烘垨鑰呮湭閫変腑鎽勫儚鏈轰换鍔★紝涓嶆墽琛屽垱寤� + if (!this.Cameras[0].cameraId) return false + } + this.group_id = '' + //this.addRule(0); + }, + + //娓呯┖閰嶇疆骞跺垵濮嬪寲 + cleanRule() { + this.group_id = '' + this.sdkGroup.splice(0, this.sdkGroup.length) + this.addSdkItem(); + }, + addRule(index) { + let newRule = JSON.parse(JSON.stringify(this.baseRule)) + newRule.sdksOptions = this.includeSdks + + // this.groupRules.push(newRule); + // 鎻掑叆鍒版寚瀹氫綅缃� + this.groupRules.splice(index + 1, 0, newRule) + }, + editHandle(ruleTxt) { + + // if (ruleTxt.length < 1) { + // return + // } + let ruleInfo = JSON.parse(ruleTxt); + ; + + //let ruleInfo = JSON.parse(ruleTxt) + this.editRule(ruleInfo) + }, + editRule(ruleGroup) { + + this.sdkGroup = [] + this.group_id = '' + ruleGroup.forEach(rule => { + + let tempObj = {} + + if (rule.group_id && rule.group_id != '') { + this.group_id = rule.group_id + } + + // 濉厖鍖哄煙閫夐」鍒楄〃 + this.allPolygonData.forEach(p => { + if (p.polygonId === rule.polygon_id) { + rule.polygonObj = p + } + }) + + if (!rule.polygonObj) { + rule.polygonObj = { + cameraId: rule.camera_id, + defence_state: 1, + name: '鏈煡鍖哄煙', + polygonId: rule.polygon_id + } + } + console.log(rule) + + // 璁剧疆鍖哄煙 + this.selectPolygonOption(rule) + + //绠楁硶瀵硅薄,绠楁硶鍙傛暟閰嶇疆鏁扮粍,(鐢ㄤ簬鏁版嵁澶勭悊鐨�)榛樿鍙傛暟鏁扮粍, 鍙�夊弬鏁版暟缁�, 宸查厤缃殑鍙�夊弬鏁版暟缁�, (鐢ㄤ簬鍘婚噸鍒ゆ柇)瀛樻斁鍙�夊弬鏁板悕鐨勬暟缁� + let sdkObj = {}, + argDef = [], + defaultArg = [], + optionalArg = [], + optArg = [], + optNames = [] + + sdkObj = this.TaskMange.list1.find(sdk => sdk.id == rule.sdk_id) + + argDef = JSON.parse(sdkObj.argDef) + defaultArg = argDef.filter(arg => !arg.config.isOptional) + optionalArg = argDef.filter(arg => arg.config.isOptional) + + rule.sdk_set.forEach(arg => { + let optItem = optionalArg.find(oarg => { + + if (oarg.sort == arg.sort) { + return oarg + } + }) + if (optItem) { + if (optItem.operators.length > 1) { + optItem.operator = arg.operator + //this.selOperator(optItem) + } + + //璧嬪�� + optItem.sdk_arg_value = arg.sdk_arg_value + //if(arg.sdk_arg_value.indexOf(',')>0){ + //鍒ゆ柇鏄惁鏄閫夊�肩被鍨嬬殑鍙傛暟 + let isMultiOne = optionalArg.find(oarg => oarg.sort == optItem.sort && optItem.config.isMulti) + if (isMultiOne) { + optItem.sdk_arg_value = arg.sdk_arg_value.split(','); + } + + if (optItem.type == 'option') { + this.setOptArgValueOptions(optItem) + } + optArg.push(optItem) + } else { + defaultArg.forEach(d => { + if (d.sort == arg.sort) { + if (arg.sdk_arg_value.indexOf(',') > 0) { + //鍖洪棿鍊� + d.min = arg.sdk_arg_value.split(',')[0]; + d.max = arg.sdk_arg_value.split(',')[1]; + d.operator = 'range' + } else { + d.sdk_arg_value = arg.sdk_arg_value + } + d.operator = arg.operator; + } + }) + } + }) + optNames = optionalArg.map(arg => ({ + name: arg.name, + sort: arg.sort, + isSelected: false + })) + + tempObj = { + sdkObj, + polygonObj: rule.polygonObj, + rule_with_pre: rule.rule_with_pre, + is_save_anyhow: rule.is_save_anyhow, + isSpread: true, + argDef, + initAddOptional: false, + optionalArg, + optArg, + defaultArg, + optNames, + isAddable: true, + camera_id: rule.camera_id, + polygon_id: rule.polygon_id + } + //鍥炴樉鏄惁鏄剧ず娣诲姞鍙�夊弬鏁� + tempObj.initAddOptional = + tempObj.optArg.length == 0 && tempObj.optionalArg.length > 0 + ? true + : false; + + //鍥炴樉鏄惁鏄剧ず鍙�夊弬鏁版坊鍔犳寜閽� + if (tempObj.optArg.length < tempObj.optionalArg.length) { + tempObj.isAddable = true; + } else { + tempObj.isAddable = false; + } + //this.selectSDKOption(tempObj, false) + + this.sdkGroup.push(tempObj) + //璁剧疆绠楁硶 + }) + //this.$nextTick(() => {}) + }, + delRule(rule) { + this.$confirm('鎻愮ず锛氬垹闄ゅ悗锛岃鏉¤鍒欏皢澶辨晥锛屾槸鍚﹀垹闄わ紵', { + center: true, + cancelButtonClass: 'comfirm-class-cancle', + confirmButtonClass: 'comfirm-class-sure' + }) + .then(() => { + deleteCameraRules({ groupId: rule.group_id }).then(res => { + if (res && res.success) { + this.$notify({ + type: 'success', + message: '鍒犻櫎鎴愬姛' + }) + this.$emit('delete-rule') + } else { + this.$notify({ + type: 'error', + message: '鍒犻櫎澶辫触锛�' + }) + } + }) + }) + .catch(() => { }) + }, + submitRule() { + + let groupRule = { rules: [] } + + let group_text = '' + let validateFlag = false + + if (this.isTemplate) { + groupRule.rules = this.groupRules.map(r => { + return { + sdk_id: r.sdk_id, + sdk_arg_alias: r.sdk_arg_alias, + operator: r.operator, + operator_type: r.operator_type, + sdk_arg_value: r.sdk_arg_value, + sort: 1, + rule_with_pre: r.rule_with_pre + } + }) + } else { + //鏍¢獙蹇呭~椤� + let undefinished = this.sdkGroup.some((sdk, index) => { + + //娌℃湁閰嶇疆绠楁硶 + if (Object.keys(sdk.sdkObj).length == 0) { + return sdk + } + //澶氫簬涓ら」绠楁硶鏃�,绠楁硶鍏崇郴涓嶈兘涓虹┖ + if (sdk.rule_with_pre === '' && index != 0) { + return sdk + } + //琛ㄥ崟鎻愪氦鍓嶆牎楠�:鎵�鏈夌畻娉曠殑鍙傛暟鍊间笉鑳戒负绌�,(鏈塺ange鐨�,瑕佸湪range鑼冨洿鍐�)澶辩劍鏃舵牎楠� + let defaultArgFlag = sdk.defaultArg.find(arg => !arg.sdk_arg_value) + if (defaultArgFlag) { + return sdk + } + //鏌ユ壘鍙�夊弬鏁板�兼槸鍚﹂兘璁剧疆(澶氶�夊�间负鏁扮粍绫诲瀷) + let optionalArgFlag = sdk.optArg.find(arg => { + if (arg.sdk_arg_value instanceof Array) { + if (arg.sdk_arg_value.length == 0) { + return arg + } + } else { + //鍖洪棿绫诲弬鏁板�兼渶灏�,鏈�澶у�兼槸鍚﹂兘璁剧疆 + if (arg.operator == 'range') { + + if (!arg.min.trim() && arg.max.trim()) { + return arg + } + } + if (!arg.sdk_arg_value) { + return arg + } + } + }); + + if (optionalArgFlag) { + return sdk + } + }); + if (undefinished) { + this.$notify({ + type: 'error', + message: '绠楁硶鍙傛暟鏈畬鍠�,璇峰畬鍠勫悗鍐嶄繚瀛�' + }); + return + } + + //鏍¢獙鑻ョ畻娉曞叧绯讳负瑙﹀彂,鍒欑畻娉曞悕涓嶈兘閲� + let sameSdk = this.sdkGroup.some((sdk, index) => { + + if (sdk.index != 0 && sdk.rule_with_pre == '=>') { + + if (sdk.sdkObj.id == this.sdkGroup[index - 1].sdkObj.id) { + return sdk + } + } + }); + + if (sameSdk) { + this.$notify({ + type: 'error', + message: '绠楁硶鍏崇郴涓鸿Е鍙戞椂,绠楁硶鍚嶄笉鑳介噸澶�' + }); + return + } + + if (!validateFlag && !sameSdk) { + validateFlag = true + } + + this.sdkGroup.forEach(sdk => { + let tempObj = { + sdk_id: sdk.sdkObj.id, + camera_id: sdk.camera_id, + group_id: '', + is_save_anyhow: sdk.is_save_anyhow, + polygon_id: sdk.polygon_id, + rule_with_pre: sdk.rule_with_pre, + sdk_set: [] + } + + let defaultArgs = sdk.defaultArg.map(arg => ({ + operator: arg.operator, + operator_type: arg.type, + sdk_arg_alias: arg.alias, + sdk_arg_value: arg.sdk_arg_value, + sort: arg.sort + })) + + let defaultArgDesc = '( ' + sdk.defaultArg.forEach(arg => { + if (arg.operator == 'range') { + let valRange = ''; + + valRange = arg.sdk_arg_value.replace(',', '-'); + defaultArgDesc += `${arg.name}${arg.operators[0].name}${valRange}${arg.unit || ''}, ` + } else { + defaultArgDesc += `${arg.name}${arg.operators[0].name}${ + arg.sdk_arg_value + }${arg.unit || ''}, ` + } + + }); + ; + defaultArgDesc = defaultArgDesc.substring(0, defaultArgDesc.length - 2) + //defaultArgDesc = defaultArgDesc.substring(0,defaultArgDesc.length-3)+defaultArgDesc.substring(defaultArgDesc.length-1,defaultArgDesc.length); + //defaultArgDesc = defaultArgDesc.substring(0,defaultArgDesc.length-1); + + //澶勭悊鍙�夐」鍙傛暟 + + let optArgs = sdk.optArg.map(arg => ({ + operator: arg.operator, + operator_type: arg.type, + sdk_arg_alias: arg.alias, + sdk_arg_value: arg.sdk_arg_value, + sort: arg.sort + })); + //灏嗗閫夐」鐨勫�兼嫾鎴愬瓧绗︿覆 + optArgs.forEach(one => { + if (one.sdk_arg_value instanceof Array) { + one.sdk_arg_value = one.sdk_arg_value.join(); + } + }); + let optArgDesc = ' ' + sdk.optArg.forEach(arg => { + let val = ''; + let valRange = ''; + + + //澶勭悊涓嬫媺閫夊�肩被鍨� + if (arg.type == 'option') { + if (arg.sdk_arg_value instanceof Array) { + //澶氶�夊�� + let multiNames = ''; + arg.sdk_arg_value.forEach(val => { + let opV = arg.valueOptions.find(opt => opt.value == val); + multiNames += opV.name + ' '; + }) + val = multiNames; + + } else { + let res = arg.valueOptions.find( + opt => opt.value == arg.sdk_arg_value + ); + + val = res.name; + } + //optArgDesc += `,${arg.name}${arg.operators[0].operator}${val}${arg.unit || ''}, ` + } else { + //optArgDesc += `,${arg.name}${arg.operators[0].operator}${ arg.sdk_arg_value }${arg.unit || ''}, ` + } + + let operatorSelected = arg.operators.find(opr => opr.operator == arg.operator) + optArgDesc += `,${arg.name}${operatorSelected.name}${ + arg.type == 'option' ? val : arg.sdk_arg_value + }${arg.unit || ''}, ` + }) + optArgDesc = optArgDesc.substring(0, optArgDesc.length - 2) + optArgDesc.substring(optArgDesc.length - 1, optArgDesc.length); + optArgDesc += ')' + tempObj.sdk_set = defaultArgs.concat(optArgs) + + groupRule.rules.push(tempObj) + + let rule_with_pre = '' + if (sdk.rule_with_pre) { + switch (sdk.rule_with_pre) { + case '&&': + rule_with_pre = ' and ' + break + case '||': + rule_with_pre = ' or ' + break + case '=>': + rule_with_pre = ' -> ' + break + default: + rule_with_pre = '' + } + } + ; + group_text += `${rule_with_pre ? "<br/>" + rule_with_pre + "<br/>" : ""} <span style="background-color:RGB(183,183,183);">${ + sdk.sdkObj.sdk_name + }</span> ${ + sdk.polygonObj.name + } ${defaultArgDesc}${optArgDesc}`; + + if ( + group_text.charAt(group_text.length - 3) == ',' && + group_text.charAt(group_text.length - 2) == ' ' && + group_text.charAt(group_text.length - 1) == ')' + ) { + group_text = + group_text.substring(0, group_text.length - 3) + + group_text.substring(group_text.length - 2, group_text.length) + } + + }) + console.log(group_text) + } + + groupRule.text = group_text + groupRule.id = this.group_id + return groupRule + + if (this.isLinkRule) { + // 鍒ゆ柇瑙勫垯涓嚦灏戝寘鍚袱鎽勫儚鏈� + let cameraIds = Array.from( + new Set( + this.sdkGroup.map(r => { + return r.camera_id + }) + ) + ) + if (cameraIds.length < 2) { + this.$notify({ + type: 'error', + //message: '闇�瑕�2涓笉鍚屾憚鍍忔満鎵嶈兘缁勬垚鑱斿姩瑙勫垯' + message: '闇�瑕佽嚦灏�2涓笉鍚屾憚鍍忔満鎵嶈兘缁勬垚鑱斿姩鍦烘櫙' + }) + return + } + } + //if(validateFlag){ + this.onSubmitRule(payload) + //} + } + } +} +</script> + +<style lang="scss"> +.edit-rules-box { + width: 100%; + padding: 0px; + box-sizing: border-box; + .sub-rules-box { + width: 71%; + min-width: 1127.4px; + min-height: 50px; + border-top: 1px solid #eee; + padding-top: 7px; + + box-sizing: border-box; + padding-bottom: 38px; + .task-rules-button { + text-align: right; + margin: 15px; + } + .config-item { + background: #f8f9f8; + padding: 15px 25px; + margin-bottom: 52px; + position: relative; + .el-select { + width: 225px !important; + } + .init-sdk { + margin-right: 30px; + } + .connection { + background: #fff; + position: absolute; + width: 100%; + top: -40px; + } + .top-line { + height: 30px; + .left { + float: left; + display: flex; + } + .right { + float: right; + cursor: pointer; + .del { + margin-right: 10px; + color: rgb(231, 76, 60); + } + .collapse { + font-size: 13px; + display: inline-block; + padding: 5px; + cursor: pointer; + } + } + } + .argums { + position: relative; + // width: calc(100% - 25px); + // top: 43px; + // left: 0; + // padding-left: 25px; + // background: #f8f9f8; + .argums-item { + display: flex; + align-items: center; + margin: 7px 0; + .arg-name, + .operator-name { + margin-right: 30px; + } + .arg-val { + width: 245px; + span { + margin-left: 6px; + } + .range-min, + .range-max { + width: 88px; + .el-input__inner { + height: 28px; + } + } + .devide { + display: inline-block; + width: 30px; + height: 1px; + background: #c5c5c5; + vertical-align: top; + margin: 14px 10px 0; + } + } + } + .el-input { + width: 225px; + } + } + } + .btn-add { + margin: 0 25px 15px; + margin-top: -38px; + .el-button { + width: 370px; + cursor: pointer; + } + } + } + + .el-button--text { + text-decoration: unset; + } + .el-input.is-disabled .el-input__inner { + background: #fafafa; + color: #606266; + } + p { + text-align: left; + // padding: 10px; + box-sizing: border-box; + } + + .task-blank { + float: left; + font-family: PingFangSC-Regular; + font-size: 12px; + color: #cccccc; + margin-top: 5px; + } + + .btn { + cursor: pointer; + color: #3d68e1; + margin-left: 10px; + font-size: 14px; + } +} +</style> -- Gitblit v1.8.0