| | |
| | | </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="{ init: index == 0 }" |
| | | v-cloak |
| | | v-for="(sdkItem, index) in sdkGroup" |
| | | :key="sdkItem.id" |
| | | :key="index"
|
| | | > |
| | | <div class="connection" v-if="index !== 0"> |
| | | <el-select |
| | |
| | | <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" |
| | |
| | | </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" |
| | |
| | | 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] |
| | | |
| | |
| | | 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 |
| | | } |
| | | // 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; |
| | | } |
| | | |
| | | |
| | | } |
| | | }) |
| | |
| | | }, |
| | | deep: true |
| | | } |
| | | // ruleList: {
|
| | | // handler(newVal, oldVal) {
|
| | | // debugger
|
| | | // this.editHandle(newVal)
|
| | | // }
|
| | |
|
| | | // }
|
| | | }, |
| | | mounted() { |
| | | this.TaskMange.findAllSdk() |
| | | this.TaskMange.findAllSdk({installed:true})
|
| | | //this.TaskMange.list1 = sdkJson.data;
|
| | |
|
| | | //this.editHandle(this.ruleList)
|
| | | }, |
| | | data() { |
| | | return { |
| | | // rule: {
|
| | | // sdk_id:'',
|
| | | // sdkObj: {},
|
| | | // polygonObj: {},
|
| | | // argDef: []
|
| | | // },
|
| | | hideDel: true, |
| | | //isAddable: true, |
| | | allPolygonData: [], |
| | |
| | | }, |
| | | methods: { |
| | | selConnection(sdkItem) { |
| | | |
| | | debugger
|
| | | |
| | | }, |
| | | addSdkItem() { |
| | |
| | | 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)) |
| | |
| | | this.selectPolygonOption(itemTemp) |
| | | this.sdkGroup.splice(index, 1, itemTemp) |
| | | } else { |
| | | this.sdkGroup.splice(index, 1) |
| | | if(this.sdkGroup[index+1] && this.sdkGroup[index+1].rule_with_pre){
|
| | | this.sdkGroup[index+1].rule_with_pre = '';
|
| | | }
|
| | | |
| | | 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 => { |
| | |
| | | |
| | | 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) |
| | | } |
| | | |
| | |
| | | } |
| | | }, |
| | | selOptionalArg(sdkItem, optArgItem) { |
| | | |
| | | debugger
|
| | | let newSort = 0 |
| | | sdkItem.optNames.forEach(name => { |
| | | if (name.name == optArgItem.name) { |
| | |
| | | if (argObj.type == 'option') { |
| | | this.setOptArgValueOptions(argObj); |
| | | } |
| | | |
| | | debugger
|
| | | //替换新的参数配置对象 |
| | | sdkItem.optArg.forEach((arg, index) => { |
| | | if (arg.sort == optArgItem.sort) { |
| | |
| | | }); |
| | | }, |
| | | validateArgVal(sdkArgItem, e) { |
| | | |
| | | debugger
|
| | | if (typeof (sdkArgItem.sdk_arg_value) == 'string' && sdkArgItem.sdk_arg_value == '') { |
| | | this.$notify({ |
| | | type: 'warning', |
| | |
| | | let res = sdkArgItem.range.match(reg) |
| | | let min = Number(res[1]), |
| | | max = Number(res[2]) |
| | | |
| | | debugger
|
| | | |
| | | //判断非区间类 |
| | | if (sdkArgItem.sdk_arg_value && sdkArgItem.operator != 'range') { |
| | |
| | | this.valideArgValue(rule) |
| | | }, |
| | | selectPolygonOption(rule) { |
| | | |
| | | debugger
|
| | | rule.polygon_id = rule.polygonObj.polygonId |
| | | ? rule.polygonObj.polygonId |
| | | : rule.polygon_id |
| | |
| | | }, |
| | | //选择算法 resetArgs为true是添加为false是初始化编辑 |
| | | selectSDKOption(sdkItem, resetArgs) { |
| | | |
| | | debugger
|
| | | //sdkItem.sdk_id = sdkItem.sdkObj.id; |
| | | if (resetArgs) { |
| | | sdkItem.argDef = JSON.parse(sdkItem.sdkObj.argDef) |
| | |
| | | |
| | | 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)); |
| | | } |
| | |
| | | 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) |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | 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 = ""; |
| | |
| | | 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 = '' |
| | | ruleGroup.forEach(rule => { |
| | | |
| | | // 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 != '') { |
| | |
| | | |
| | | rule.sdk_set.forEach(arg => { |
| | | let optItem = optionalArg.find(oarg => { |
| | | |
| | | if (oarg.sort == arg.sort) { |
| | | return oarg |
| | | } |
| | |
| | | tempObj.optArg.length == 0 && tempObj.optionalArg.length > 0 |
| | | ? true |
| | | : false; |
| | | |
| | | debugger
|
| | | //回显是否显示可选参数添加按钮 |
| | | if (tempObj.optArg.length < tempObj.optionalArg.length) { |
| | | tempObj.isAddable = true; |
| | |
| | | tempObj.isAddable = false; |
| | | } |
| | | //this.selectSDKOption(tempObj, false) |
| | | |
| | | debugger
|
| | | this.sdkGroup.push(tempObj) |
| | | //设置算法 |
| | | }) |
| | |
| | | .catch(() => { }) |
| | | }, |
| | | submitRule() { |
| | | |
| | | debugger
|
| | | let groupRule = { rules: [] } |
| | | |
| | | let group_text = '' |
| | |
| | | } else { |
| | | //校验必填项 |
| | | let undefinished = this.sdkGroup.some((sdk, index) => { |
| | | |
| | | debugger
|
| | | //没有配置算法 |
| | | if (Object.keys(sdk.sdkObj).length == 0) { |
| | | return sdk |
| | |
| | | } else { |
| | | //区间类参数值最小,最大值是否都设置 |
| | | if (arg.operator == 'range') { |
| | | |
| | | debugger
|
| | | if (!arg.min.trim() && arg.max.trim()) { |
| | | return arg |
| | | } |
| | |
| | | return sdk |
| | | } |
| | | }); |
| | |
|
| | | if (undefinished) { |
| | | this.$notify({ |
| | | type: 'error', |
| | | message: '算法参数未完善,请完善后再保存' |
| | | }); |
| | | return |
| | | return false
|
| | | } |
| | | |
| | | //校验区间左侧值是否小于右侧值
|
| | | let illegalRange = this.sdkGroup.some((sdk,index)=>{
|
| | | let rangeArg = sdk.defaultArg.find(arg=>arg.operator=='range');
|
| | | if(rangeArg){
|
| | | if (Number(rangeArg.max) <= Number(rangeArg.min)) {
|
| | | return sdk
|
| | | }
|
| | | }
|
| | | });
|
| | | if(illegalRange){
|
| | | this.$notify({
|
| | | type: 'error',
|
| | | message: '区间左侧不能大于或等于区间右侧的值'
|
| | | });
|
| | | return false
|
| | | }
|
| | | //校验若算法关系为触发,则算法名不能重 |
| | | 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 |
| | | } |
| | |
| | | type: 'error', |
| | | message: '算法关系为触发时,算法名不能重复' |
| | | }); |
| | | return |
| | | return false
|
| | | } |
| | | |
| | | if (!validateFlag && !sameSdk) { |
| | |
| | | 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 { |
| | |
| | | } |
| | | |
| | | }); |
| | | ; |
| | | 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); |
| | |
| | | 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> ${ |
| | |
| | | group_text.substring(0, group_text.length - 3) + |
| | | group_text.substring(group_text.length - 2, group_text.length) |
| | | } |
| | | |
| | | debugger
|
| | | }) |
| | | console.log(group_text) |
| | | } |
| | |
| | | }) |
| | | return |
| | | } |
| | |
|
| | | // 联动规则编辑后,恢复之前选中的摄像机
|
| | | // if (this.VideoRuleData.treeSelectedNodesBackupOnEditLinkRule.length) {
|
| | | // this.TreeDataPool.selectedNodes = this.VideoRuleData.treeSelectedNodesBackupOnEditLinkRule
|
| | | // this.VideoRuleData.treeSelectedNodesBackupOnEditLinkRule = []
|
| | | // }
|
| | | } |
| | | //if(validateFlag){ |
| | | this.onSubmitRule(payload) |
| | |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | body{
|
| | | font-size: 12px;
|
| | | }
|
| | | .edit-rules-box { |
| | | width: 100%; |
| | | padding: 0px; |