ZZJ
2021-11-09 ccee429d379e0108b7445f72ade8d97c110a6fb3
src/pages/cameraAccess/components/scene/Editor.vue
@@ -32,12 +32,19 @@
                  placeholder="选关系"
                  @change="selConnection(sdkItem)"
                >
                  <el-option value="&&" title="and/且" label="and/且"></el-option>
                  <el-option
                    :value="item.value"
                    :title="item.name"
                    :label="item.name"
                    v-for="item in sdkConnects"
                    :key="item.id"
                  ></el-option>
                  <!-- <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-option value="=>" title="—>/触发" label="—>/触发"></el-option>-->
                </el-select>
                <el-checkbox
                  v-show="sdkItem.rule_with_pre == '=>'"
                  v-show="sdkItem.rule_with_pre == '=>' || sdkItem.rule_with_pre == '!=>'"
                  v-model="sdkItem.is_save_anyhow"
                  style="margin-left:30px"
                >保存过程数据</el-checkbox>
@@ -99,7 +106,7 @@
              <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="argums-item" v-show="arg.config.isShow">
                    <div class="arg-name">
                      <!-- <el-input
                        v-model="arg.name"
@@ -148,9 +155,22 @@
                        <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
                          v-if="arg.type == 'option'"
                          v-model="arg.sdk_arg_value"
                          :multiple="arg.config.isMulti"
                          collapse-tags
                          size="mini"
                        >
                          <el-option
                            v-for="one in arg.valueOptions"
                            :key="one.value"
                            :value="one.value"
                            :label="one.name"
                            :title="one.name"
                          ></el-option>
                        </el-select>
                        <el-input
                          v-if="arg.type == 'value'"
                          v-model="arg.sdk_arg_value"
@@ -213,6 +233,7 @@
                    ></el-input>-->
                    <el-select
                      :disabled="optArgItem.operators.length==1"
                      v-model="optArgItem.operator"
                      size="mini"
                      @change="selOperator(optArgItem)"
@@ -338,7 +359,6 @@
  watch: {
    Cameras: {
      handler(n, o) {
        debugger
        let polygon = []
        let cameras = [...n]
@@ -358,7 +378,6 @@
          this.allPolygonData = polygon
          //添加场景初始化区域选项为'全部区域'
          debugger
          // if (polygon.length > 0 && this.ruleList == '') {
          //   this.polygonObj = polygon[0]
          //   this.sdkGroup[0].polygonObj = JSON.parse(
@@ -374,22 +393,14 @@
    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
                rangeOne.sdk_arg_value = rangeOne.min + '|' + rangeOne.max
              } else {
                rangeOne.sdk_arg_value = false;
              }
@@ -414,30 +425,16 @@
      },
      deep: true
    }
    // ruleList: {
    //   handler(newVal, oldVal) {
    //     debugger
    //     this.editHandle(newVal)
    //   }
    // }
  },
  mounted() {
    this.TaskMange.findAllSdk({installed:true})
    //this.TaskMange.list1 = sdkJson.data;
    this.TaskMange.findAllSdk({ installed: true })
    //this.editHandle(this.ruleList)
  },
  data() {
    return {
      // rule: {
      //   sdk_id:'',
      //   sdkObj: {},
      //   polygonObj: {},
      //   argDef: []
      // },
      hideDel: true,
      //isAddable: true,
      allPolygonData: [],
      group_id: '',
      baseSdkItem: {
@@ -518,8 +515,17 @@
    }
  },
  methods: {
    getSdkConnection() {
      this.sdkConnects = this.VideoManageData.Dictionary['RULECOMPUTEBETWEEN'].map(r => {
        return {
          name: r.name,
          value: r.value
        }
      });
    },
    selConnection(sdkItem) {
      debugger
    },
    addSdkItem() {
@@ -528,9 +534,9 @@
      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{
@@ -545,10 +551,10 @@
        this.selectPolygonOption(itemTemp)
        this.sdkGroup.splice(index, 1, itemTemp)
      } else {
        if(this.sdkGroup[index+1] && this.sdkGroup[index+1].rule_with_pre){
          this.sdkGroup[index+1].rule_with_pre = '';
        if (this.sdkGroup[index + 1] && this.sdkGroup[index + 1].rule_with_pre) {
          this.sdkGroup[index + 1].rule_with_pre = '';
        }
        this.sdkGroup.splice(index, 1);
      }
    },
@@ -560,7 +566,6 @@
      this.sdkGroup[index].isSpread = !this.sdkGroup[index].isSpread
    },
    addOptionalArg(sdkItem) {
      debugger
      sdkItem.initAddOptional = false
      sdkItem.optArg.forEach(arg => {
        sdkItem.optNames.forEach(name => {
@@ -591,6 +596,10 @@
        this.setOptArgValueOptions(copyArgTemp)
      }
      //默认选中第一个operator
      //if (copyArgTemp.operators.length == 1) {
      this.$set(copyArgTemp, 'operator', copyArgTemp.operators[0].operator)
      //}
      if (copyArgTemp.default_value) {
        this.$set(copyArgTemp, 'sdk_arg_value', copyArgTemp.default_value)
@@ -618,7 +627,7 @@
      }
    },
    selOptionalArg(sdkItem, optArgItem) {
      debugger
      let newSort = 0
      sdkItem.optNames.forEach(name => {
        if (name.name == optArgItem.name) {
@@ -635,7 +644,10 @@
      if (argObj.type == 'option') {
        this.setOptArgValueOptions(argObj);
      }
      debugger
      //默认选中第一个operator
      //if (argObj.operators.length == 1) {
      this.$set(argObj, 'operator', argObj.operators[0].operator)
      //}
      //替换新的参数配置对象
      sdkItem.optArg.forEach((arg, index) => {
        if (arg.sort == optArgItem.sort) {
@@ -643,11 +655,10 @@
        }
      })
      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,
@@ -656,7 +667,7 @@
      });
    },
    validateArgVal(sdkArgItem, e) {
      debugger
      if (typeof (sdkArgItem.sdk_arg_value) == 'string' && sdkArgItem.sdk_arg_value == '') {
        this.$notify({
          type: 'warning',
@@ -676,7 +687,7 @@
        let res = sdkArgItem.range.match(reg)
        let min = Number(res[1]),
          max = Number(res[2])
        debugger
        //判断非区间类
        if (sdkArgItem.sdk_arg_value && sdkArgItem.operator != 'range') {
@@ -810,7 +821,7 @@
      this.valideArgValue(rule)
    },
    selectPolygonOption(rule) {
      debugger
      rule.polygon_id = rule.polygonObj.polygonId
        ? rule.polygonObj.polygonId
        : rule.polygon_id
@@ -821,11 +832,10 @@
    },
    //选择算法 resetArgs为true是添加为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
@@ -837,12 +847,15 @@
            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.type == 'option') {
            this.setOptArgValueOptions(arg)
          }
          if (arg.default_value) {
            //arg.sdk_arg_value = arg.default_value
            this.$set(arg, 'sdk_arg_value', arg.default_value)
@@ -858,14 +871,14 @@
          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)
      }
@@ -897,7 +910,7 @@
    },
    //选择算法配置
    selOperator(rule) {
      debugger
    },
    selectArgsOption(rule, resetArgValue) {
      // rule.operator_type = "";
@@ -1087,14 +1100,12 @@
      this.groupRules.splice(index + 1, 0, newRule)
    },
    editHandle(ruleTxt) {
      debugger
      this.getSdkConnection();
      // if (ruleTxt.length < 1) {
      //   return
      // }
      let ruleInfo = JSON.parse(ruleTxt);
      debugger;
      //let ruleInfo = JSON.parse(ruleTxt)
      this.editRule(ruleInfo)
      // 如果是联动任务, 查询联动摄像机列表, 将树选中的列表更改为该条规则所需要的摄像机, 并备份当前的选中状态, 规则保存后恢复
      // if (this.isLinkRule) {
@@ -1114,27 +1125,12 @@
      // }
    },
    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 != '') {
@@ -1170,8 +1166,9 @@
          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)
@@ -1182,10 +1179,10 @@
            }
          })
          if (optItem) {
            if (optItem.operators.length > 1) {
              optItem.operator = arg.operator
              //this.selOperator(optItem)
            }
            //if (optItem.operators.length > 1) {
            optItem.operator = arg.operator
            //this.selOperator(optItem)
            //}
            //赋值
            optItem.sdk_arg_value = arg.sdk_arg_value
@@ -1199,15 +1196,28 @@
            if (optItem.type == 'option') {
              this.setOptArgValueOptions(optItem)
            }
            if (optItem.alias == "bForceSend") {
            }
            //在push之前,需要判断是否配置了这个可选项  在sdk_set配置数组里,
            optArg.push(optItem)
          } else {
            defaultArg.forEach(d => {
              if (d.sort == arg.sort) {
                if (arg.sdk_arg_value.indexOf(',') > 0) {
                if (arg.sdk_arg_value.indexOf('|') > 0) {
                  //区间值
                  d.min = arg.sdk_arg_value.split(',')[0];
                  d.max = arg.sdk_arg_value.split(',')[1];
                  d.min = arg.sdk_arg_value.split('|')[0];
                  d.max = arg.sdk_arg_value.split('|')[1];
                  d.operator = 'range'
                  //} else if(arg.sdk_arg_value.indexOf(',') > 0){
                } else if (arg.operator_type == 'option') {
                  //多选类型的值
                  d.sdk_arg_value = arg.sdk_arg_value.split(',');
                  this.setOptArgValueOptions(d)
                } else {
                  d.sdk_arg_value = arg.sdk_arg_value
                }
@@ -1243,7 +1253,6 @@
          tempObj.optArg.length == 0 && tempObj.optionalArg.length > 0
            ? true
            : false;
        debugger
        //回显是否显示可选参数添加按钮
        if (tempObj.optArg.length < tempObj.optionalArg.length) {
          tempObj.isAddable = true;
@@ -1251,7 +1260,7 @@
          tempObj.isAddable = false;
        }
        //this.selectSDKOption(tempObj, false)
        debugger
        this.sdkGroup.push(tempObj)
        //设置算法
      })
@@ -1282,7 +1291,7 @@
        .catch(() => { })
    },
    submitRule() {
      debugger
      let groupRule = { rules: [] }
      let group_text = ''
@@ -1303,17 +1312,38 @@
      } else {
        //校验必填项
        let undefinished = this.sdkGroup.some((sdk, index) => {
          debugger
          //没有配置算法
          if (Object.keys(sdk.sdkObj).length == 0) {
            return sdk
          }
          //复制算法时检测区域不能为空
          if (!sdk.polygon_id) {
            return sdk
          }
          //多于两项算法时,算法关系不能为空
          if (sdk.rule_with_pre === '' && index != 0) {
            return sdk
          }
          //处理未展示的参数的值
          sdk.defaultArg.forEach(arg => {
            if (!arg.config.isShow) {
              arg.sdk_arg_value = arg.default_value
            }
          })
          //表单提交前校验:所有算法的参数值不能为空,(有range的,要在range范围内)失焦时校验
          let defaultArgFlag = sdk.defaultArg.find(arg => !arg.sdk_arg_value)
          let defaultArgFlag = sdk.defaultArg.find(arg => {
            if (arg.sdk_arg_value instanceof Array) {
              if (arg.sdk_arg_value.length == 0) {
                return arg
              }
            } else if (!arg.sdk_arg_value) {
              return arg
            }
          });
          if (defaultArgFlag) {
            return sdk
          }
@@ -1326,7 +1356,7 @@
            } else {
              //区间类参数值最小,最大值是否都设置
              if (arg.operator == 'range') {
                debugger
                if (!arg.min.trim() && arg.max.trim()) {
                  return arg
                }
@@ -1350,15 +1380,15 @@
          return false
        }
        //校验区间左侧值是否小于右侧值
        let illegalRange = this.sdkGroup.some((sdk,index)=>{
          let rangeArg = sdk.defaultArg.find(arg=>arg.operator=='range');
          if(rangeArg){
        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){
        if (illegalRange) {
          this.$notify({
            type: 'error',
            message: '区间左侧不能大于或等于区间右侧的值'
@@ -1367,9 +1397,9 @@
        }
        //校验若算法关系为触发,则算法名不能重
        let sameSdk = this.sdkGroup.some((sdk, index) => {
          debugger
          if (sdk.index != 0 && sdk.rule_with_pre == '=>') {
            debugger
          if (sdk.index != 0 && (sdk.rule_with_pre == '=>' || sdk.rule_with_pre == '!=>')) {
            if (sdk.sdkObj.id == this.sdkGroup[index - 1].sdkObj.id) {
              return sdk
            }
@@ -1409,20 +1439,44 @@
          let defaultArgDesc = '( '
          sdk.defaultArg.forEach(arg => {
            //不显示隐藏的参数配置
            if (!arg.config.isShow) {
              return
            }
            let val = '';
            //处理下拉选值类型
            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;
              }
            }
            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.type == 'option' ? val : arg.sdk_arg_value
                }${arg.unit || ''}, `
            }
          });
          debugger;
          defaultArgDesc = defaultArgDesc.substring(0, defaultArgDesc.length - 2)
          ;
          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);
@@ -1446,7 +1500,6 @@
            let val = '';
            let valRange = '';
            //处理下拉选值类型
            if (arg.type == 'option') {
              if (arg.sdk_arg_value instanceof Array) {
@@ -1465,16 +1518,20 @@
                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 || ''}, `
          })
          });
          //将多选项的值拼成字符串
          defaultArgs.forEach(one => {
            if (one.sdk_arg_value instanceof Array) {
              one.sdk_arg_value = one.sdk_arg_value.join();
            }
          });
          optArgDesc = optArgDesc.substring(0, optArgDesc.length - 2) + optArgDesc.substring(optArgDesc.length - 1, optArgDesc.length);
          optArgDesc += ')'
          tempObj.sdk_set = defaultArgs.concat(optArgs)
@@ -1493,11 +1550,14 @@
              case '=>':
                rule_with_pre = ' -> '
                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>  ${
@@ -1513,9 +1573,8 @@
              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
@@ -1555,7 +1614,7 @@
</script>
<style lang="scss">
body{
body {
  font-size: 12px;
}
.edit-rules-box {