ZZJ
2022-07-27 88078aa63c669cffc2d91e1269d460436427d09d
src/views/hashrate/CameraManage/CameraRules/components/SdkSettingBox.vue
@@ -61,14 +61,14 @@
              <el-input
                class="range-min"
                v-model="arg.min"
                @input="forceUpdate"
                @input="rangeInput(arg)"
                @blur="validateArgVal(arg, $event)"
              ></el-input>
              <span class="devide"></span>
              <el-input
                class="range-max"
                v-model="arg.max"
                @input="forceUpdate"
                @input="rangeInput(arg)"
                @blur="validateArgVal(arg, $event)"
              ></el-input>
              <span class="font">{{ arg.unit }}</span>
@@ -206,7 +206,9 @@
    <div class="btns">
      <div class="cancelBtn button" @click="close">取消</div>
      <div class="confirmBtn button" @click="save">添加</div>
      <div class="confirmBtn button" @click="save">
        {{ editSdk ? "保存" : "添加" }}
      </div>
    </div>
  </div>
</template>
@@ -224,14 +226,18 @@
      type: Boolean,
      default: false,
    },
    isLinkRule: {
      type: Boolean,
      default: false,
    editSdk: {},
    linkEditCamera: {},
  },
  computed: {
    isLinkRule() {
      return this.Cameras.length > 1;
    },
  },
  created() {
    this.initOption();
    this.initPolygon();
  },
  data() {
    return {
@@ -251,6 +257,10 @@
    };
  },
  methods: {
    rangeInput(arg) {
      arg.sdk_arg_value = arg.min + "|" + arg.max;
      this.$forceUpdate();
    },
    selectPolygonOption(rule) {
      rule.polygon_id = rule.polygonObj.polygonId
        ? rule.polygonObj.polygonId
@@ -258,14 +268,36 @@
      rule.camera_id = rule.polygonObj.cameraId
        ? rule.polygonObj.cameraId
        : rule.camera_id;
      rule.group_id = this.group_id;
    },
    close() {
      this.$emit("close");
    },
    initOption() {
      let sdkItem = this.$store.state.newSdk;
      sdkItem.argDef = JSON.parse(sdkItem.argDef);
      this.initPolygon();
      let sdkItem = null;
      if (this.editSdk) {
        this.TaskMange.list1.forEach((item) => {
          if (item.id === this.editSdk.sdk_id) {
            sdkItem = item;
          }
        });
        if (typeof sdkItem.argDef === "string") {
          sdkItem.argDef = JSON.parse(sdkItem.argDef);
        }
        this.sdkItem = sdkItem;
        this.sdkItem.sdk_set = JSON.parse(JSON.stringify(this.editSdk.sdk_set));
        this.sdkItem.polygon_id = this.editSdk.polygon_id;
        this.editRule();
        return;
      } else {
        sdkItem = this.$store.state.newSdk;
      }
      if (typeof sdkItem.argDef === "string") {
        sdkItem.argDef = JSON.parse(sdkItem.argDef);
      }
      //取出默认参数
      sdkItem.defaultArg = sdkItem.argDef.filter(
        (arg) => !arg.config.isOptional
@@ -304,29 +336,170 @@
      this.sdkItem = sdkItem;
    },
    initPolygon() {
      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,
          };
      let cameras = [];
      if (this.linkEditCamera) {
        this.allPolygonData = [];
        cameras = this.linkEditCamera;
        this.linkEditCamera.forEach((camera) => {
          camera.polygon.forEach((polygon) => {
            this.allPolygonData.push({
              defence_state: polygon.defenceState,
              polygonId: polygon.id,
              name: camera.camera_name + ":" + polygon.name,
              cameraId: camera.camera_id,
            });
          });
        });
        polygon = polygon.concat(polyOpt);
      } else {
        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 || this.linkEditCamera
                  ? cameras[i].cameraName + ":" + p.name
                  : p.name,
        this.allPolygonData = polygon;
              cameraId: cameras[i].cameraId,
            };
          });
          this.allPolygonData = this.allPolygonData.concat(polyOpt);
        }
      }
      this.$forceUpdate();
    },
    editRule() {
      let tempObj = {};
      // 填充区域选项列表
      this.allPolygonData.forEach((p) => {
        if (p.polygonId === this.sdkItem.polygon_id) {
          this.sdkItem.polygonObj = p;
        }
      });
      if (!this.sdkItem.polygonObj) {
        this.sdkItem.polygonObj = {
          cameraId: this.sdkItem.camera_id,
          defence_state: 1,
          name: "未知区域",
          polygonId: this.sdkItem.polygon_id,
        };
      }
      // 设置区域
      this.selectPolygonOption(this.sdkItem);
      //算法对象,算法参数配置数组,(用于数据处理的)默认参数数组, 可选参数数组, 已配置的可选参数数组, (用于去重判断)存放可选参数名的数组
      let argDef = [],
        defaultArg = [],
        optionalArg = [],
        optArg = [],
        optNames = [];
      argDef = this.sdkItem.argDef;
      defaultArg = argDef.filter((arg) => !arg.config.isOptional);
      optionalArg = argDef.filter((arg) => arg.config.isOptional);
      this.sdkItem.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);
          }
          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) {
                //区间值
                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;
              }
              d.operator = arg.operator;
            }
          });
        }
      });
      optNames = optionalArg.map((arg) => ({
        name: arg.name,
        sort: arg.sort,
        isSelected: false,
      }));
      tempObj = {
        polygonObj: this.sdkItem.polygonObj,
        rule_with_pre: this.sdkItem.rule_with_pre,
        is_save_anyhow: this.sdkItem.is_save_anyhow,
        isSpread: true,
        argDef,
        initAddOptional: false,
        optionalArg,
        optArg,
        defaultArg,
        optNames,
        isAddable: true,
        camera_id: this.sdkItem.camera_id,
        polygon_id: this.sdkItem.polygon_id,
        sdk_id: this.editSdk.sdk_id,
        rule_with_pre: this.editSdk.rule_with_pre,
        is_save_anyhow: this.editSdk.is_save_anyhow,
        icon_blob: this.editSdk.icon_blob,
      };
      //回显是否显示添加可选参数
      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.sdkItem = tempObj;
      this.$forceUpdate();
    },
    validateArgVal(sdkArgItem, e) {
      console.log(sdkArgItem);
      if (
        typeof sdkArgItem.sdk_arg_value == "string" &&
        sdkArgItem.sdk_arg_value == ""
@@ -560,6 +733,8 @@
    setOptArgValueOptions(optArg) {
      let alias = optArg.alias;
      console.log(121212);
      console.log(alias);
      optArg.valueOptions = this.VideoManageData.Dictionary[alias].map((r) => {
        return {
          name: r.name,
@@ -645,9 +820,8 @@
      console.log(this.sdkItem);
      let tempObj = {
        sdk_id: this.sdkItem.id,
        sdk_id: this.editSdk ? this.sdkItem.sdk_id : this.sdkItem.id,
        camera_id: this.sdkItem.camera_id,
        group_id: "",
        is_save_anyhow: this.sdkItem.is_save_anyhow,
        polygon_id: this.sdkItem.polygon_id,
        rule_with_pre: this.sdkItem.rule_with_pre,
@@ -720,6 +894,11 @@
        }
      });
      let optArgDesc = " ";
      //新增
      //新增
      this.sdkItem.optArg.forEach((arg) => {
        let val = "";
        let valRange = "";
@@ -761,9 +940,21 @@
        optArgDesc.substring(optArgDesc.length - 1, optArgDesc.length);
      optArgDesc += ")";
      tempObj.sdk_set = defaultArgs.concat(optArgs);
      tempObj.icon_blob = this.$store.state.newSdk.iconBlob;
      tempObj.ruleDes = defaultArgDesc + optArgDesc;
      console.log(tempObj.ruleDes);
      this.$emit("getNewSdk", tempObj);
      if (this.editSdk) {
        tempObj.icon_blob = this.editSdk.icon_blob;
        tempObj.group_id = this.editSdk.group_id;
        tempObj.sort = this.editSdk.sort;
        tempObj.id = this.editSdk.id;
        tempObj.icon_blob = this.editSdk.icon_blob;
        tempObj.icon_blob2 = this.editSdk.icon_blob2;
        this.$emit("getEditSdk", tempObj);
      } else {
        tempObj.icon_blob = this.$store.state.newSdk.iconBlob;
        this.$emit("getNewSdk", tempObj);
      }
    },
  },
  watch: {
@@ -902,17 +1093,17 @@
      }
      .el-input ::v-deep {
        width: 50px;
        width: 100px;
        height: 32px;
        input {
          width: 50px;
          width: 100px;
          height: 32px;
        }
      }
      .el-select {
        width: 68px;
        width: 100px;
      }
      .font {
@@ -939,7 +1130,7 @@
  .btns {
    position: absolute;
    display: flex;
    justify-content: end;
    justify-content: flex-end;
    align-items: center;
    left: 0;
    right: 0;