zhangzengfei
2022-08-04 a6119509e09abadc65f020f594ae446883567bd5
src/views/hashrate/CameraManage/CameraRules/index.vue
@@ -71,19 +71,10 @@
        <div class="draw-box" v-else>
          <div class="title">查看区域</div>
          <div class="img-box">
            <span class="camera-tip" v-show="swipercanvasData.length == 0"
              >暂无区域,请至少选择2个摄像机</span
            >
            <span class="camera-tip" v-show="swipercanvasData.length == 0">暂无区域,请至少选择2个摄像机</span>
            <!-- swiper 展示 -->
            <swiper
              ref="swiper"
              :options="swiperOption"
              class="swiper-box-container2"
            >
              <swiper-slide
                v-for="(data, index) in swipercanvasData"
                :key="index"
              >
            <swiper ref="swiper" :options="swiperOption" class="swiper-box-container2">
              <swiper-slide v-for="(data, index) in swipercanvasData" :key="index">
                <!--  <b
                  class="video-title"
                  style="font-size: 14px; margin-top: -10px"
@@ -112,10 +103,7 @@
                <i class="iconfont">&#xe618;</i>
              </div>
            </div>
            <div
              class="swiper-next-border"
              v-show="swipercanvasData.length > 1"
            >
            <div class="swiper-next-border" v-show="swipercanvasData.length > 1">
              <div class="icon-btn" slot="button-next">
                <i class="iconfont">&#xe623;</i>
              </div>
@@ -129,39 +117,20 @@
    <div class="SeparateRules" @click="selectMultiple(false)">
      <div class="title">独立场景</div>
      <div class="control">
        <el-tooltip
          class="item"
          effect="dark"
          content="算法事件"
          placement="top"
        >
        <el-tooltip class="item" effect="dark" content="算法事件" placement="top">
          <i class="iconfont" @click="openSdkBox($event)">&#xe650;</i>
        </el-tooltip>
        <el-tooltip
          class="item"
          effect="dark"
          content="数据流传"
          placement="top"
        >
        <el-tooltip class="item" effect="dark" content="数据流传" placement="top">
          <i class="iconfont">&#xe64e;</i>
        </el-tooltip>
        <el-tooltip
          class="item"
          effect="dark"
          content="模板助手"
          placement="top"
        >
        <el-tooltip class="item" effect="dark" content="模板助手" placement="top">
          <i class="iconfont">&#xe64f;</i>
        </el-tooltip>
      </div>
      <div class="content">
        <!-- 摄像机 -->
        <CameraBox
          :camera="Camera"
          id="separate_camera"
          @addSeparateRule="addSeparateRule"
        ></CameraBox>
        <CameraBox :camera="Camera" id="separate_camera" @addSeparateRule="addSeparateRule"></CameraBox>
        <!-- 场景区域 -->
        <div class="RuleArea" v-if="show">
@@ -192,28 +161,13 @@
    <div class="linkageRule" @click="selectMultiple(true)">
      <div class="title">联动场景</div>
      <div class="control">
        <el-tooltip
          class="item"
          effect="dark"
          content="算法事件"
          placement="top"
        >
        <el-tooltip class="item" effect="dark" content="算法事件" placement="top">
          <i class="iconfont" @click="showSdkBox = true">&#xe650;</i>
        </el-tooltip>
        <el-tooltip
          class="item"
          effect="dark"
          content="数据流传"
          placement="top"
        >
        <el-tooltip class="item" effect="dark" content="数据流传" placement="top">
          <i class="iconfont">&#xe64e;</i>
        </el-tooltip>
        <el-tooltip
          class="item"
          effect="dark"
          content="模板助手"
          placement="top"
        >
        <el-tooltip class="item" effect="dark" content="模板助手" placement="top">
          <i class="iconfont">&#xe64f;</i>
        </el-tooltip>
      </div>
@@ -222,9 +176,7 @@
          <!-- 摄像机 -->
          <LinkageCameraBox
            :cameras="item.cameraIds"
            @addLinkageRule="
              addLinkageRule(item.cameraIds, item.camera_polygons)
            "
            @addLinkageRule="addLinkageRule(item.cameraIds, item.camera_polygons)"
          ></LinkageCameraBox>
          <div class="Anchor" :id="'linkage_camera' + index"></div>
@@ -244,22 +196,13 @@
        </div>
      </template>
      <div
        class="empty"
        v-if="linkageRule.length <= 0 && !TreeDataPool.multiple"
      >
      <div class="empty" v-if="linkageRule.length <= 0 && !TreeDataPool.multiple">
        <img src="/images/hashrate/l_empty.png" alt="" />
        <div class="des">暂无联动场景</div>
      </div>
      <div
        class="newCameraArea"
        v-if="linkageRule.length <= 0 && TreeDataPool.multiple"
      >
        <LinkageCameraBox
          :cameras="CarmerasId"
          @addLinkageRule="addLinkageRule(CarmerasId)"
        ></LinkageCameraBox>
      <div class="newCameraArea" v-if="linkageRule.length <= 0 && TreeDataPool.multiple">
        <LinkageCameraBox :cameras="CarmerasId" @addLinkageRule="addLinkageRule(CarmerasId)"></LinkageCameraBox>
        <div class="empty">
          <img src="/images/hashrate/l_empty.png" alt="" />
@@ -285,9 +228,7 @@
      @getNewSdk="getNewSdk"
      @getEditSdk="getEditSdk"
      :editSdk="editSdkObj.sdk"
      :linkEditCamera="
        ruleType === 'linkage' && editSdkObj ? editSdkObj.camera_polygons : null
      "
      :linkEditCamera="ruleType === 'linkage' && editSdkObj ? editSdkObj.camera_polygons : null"
      :Cameras="ruleType === 'linkage' ? addData.cameras : [Camera]"
    ></SdkSettingBox>
@@ -297,29 +238,29 @@
</template>
<script>
import { jsPlumb } from "jsplumb";
import { jsPlumb } from "jsplumb"
import { savePolygon } from "@/api/polygon";
import { savePolygon } from "@/api/polygon"
import { pasteRules } from "@/api/task";
import { getCameraSceneRule } from "@/api/scene";
import { pasteRules } from "@/api/task"
import { getCameraSceneRule } from "@/api/scene"
import { saveCameraScene, getLinkSceneRule } from "@/api/scene";
import { saveCameraScene, getLinkSceneRule } from "@/api/scene"
import { changeRunType } from "@/api/pollConfig";
import { findAllFileByStackId } from "@/api/localVedio";
import VideoRuleData from "@/Pool/VideoRuleData";
import { changeRunType } from "@/api/pollConfig"
import { findAllFileByStackId } from "@/api/localVedio"
import VideoRuleData from "@/Pool/VideoRuleData"
import polygonCanvas from "@/components/canvas";
import Sysinfo from "@/components/subComponents/SystemInfo";
import SlideScene from "./components/scene/SlideScene";
import HashrateCard from "@/views/hashrate/CameraManage/CameraRules/components/HashrateCard";
import CameraBox from "@/views/hashrate/CameraManage/CameraRules/components/CameraBox";
import LinkageCameraBox from "@/views/hashrate/CameraManage/CameraRules/components/LinkageCameraBox";
import RuleItem from "@/views/hashrate/CameraManage/CameraRules/components/RuleItem";
import AddRuleBox from "@/views/hashrate/CameraManage/CameraRules/components/AddRuleBox";
import SdkBox from "@/views/hashrate/CameraManage/CameraRules/components/SdkBox";
import SdkSettingBox from "@/views/hashrate/CameraManage/CameraRules/components/SdkSettingBox";
import polygonCanvas from "@/components/canvas"
import Sysinfo from "@/components/subComponents/SystemInfo"
import SlideScene from "./components/scene/SlideScene"
import HashrateCard from "@/views/hashrate/CameraManage/CameraRules/components/HashrateCard"
import CameraBox from "@/views/hashrate/CameraManage/CameraRules/components/CameraBox"
import LinkageCameraBox from "@/views/hashrate/CameraManage/CameraRules/components/LinkageCameraBox"
import RuleItem from "@/views/hashrate/CameraManage/CameraRules/components/RuleItem"
import AddRuleBox from "@/views/hashrate/CameraManage/CameraRules/components/AddRuleBox"
import SdkBox from "@/views/hashrate/CameraManage/CameraRules/components/SdkBox"
import SdkSettingBox from "@/views/hashrate/CameraManage/CameraRules/components/SdkSettingBox"
export default {
  components: {
@@ -332,31 +273,29 @@
    AddRuleBox,
    SdkBox,
    SdkSettingBox,
    LinkageCameraBox,
    LinkageCameraBox
  },
  directives: {
    focus: {
      inserted: function (el) {
        el.querySelector("input").focus();
      },
    },
      inserted: function(el) {
        el.querySelector("input").focus()
      }
    }
  },
  computed: {
    cameraType() {
      return this.TreeDataPool.treeActiveName === "camera"
        ? "camera"
        : "dataStack";
      return this.TreeDataPool.treeActiveName === "camera" ? "camera" : "dataStack"
    },
    selectedCameraIds() {
      return this.TreeDataPool.selectedNodes;
      return this.TreeDataPool.selectedNodes
    },
    CarmerasId() {
      let arr = [];
      let arr = []
      this.Carmeras.forEach((item) => {
        arr.push(item.cameraId);
      });
      return arr;
    },
        arr.push(item.cameraId)
      })
      return arr
    }
  },
  data() {
    return {
@@ -370,12 +309,12 @@
        grabCursor: true,
        pagination: {
          el: ".swiper-pagination",
          type: "fraction",
          type: "fraction"
        },
        navigation: {
          nextEl: ".swiper-local-next",
          prevEl: ".swiper-local-prev",
        },
          prevEl: ".swiper-local-prev"
        }
      },
      plumbIns: null,
      plumbIns2: null,
@@ -392,12 +331,12 @@
        grabCursor: true,
        pagination: {
          el: ".swiper-pagination",
          type: "fraction",
          type: "fraction"
        },
        navigation: {
          nextEl: ".swiper-pre-border",
          prevEl: ".swiper-next-border",
        },
          prevEl: ".swiper-next-border"
        }
      },
      showNewLinkage: false,
      newLinkageIds: [],
@@ -426,281 +365,276 @@
      stackId: "",
      swiperIndex: 0,
      stackFilesPage: 1,
      stackFilesSize: 5,
    };
      stackFilesSize: 5
    }
  },
  created() {
    document.querySelector("html").style["min-width"] = "1920px";
    document.querySelector("html").style["min-width"] = "1920px"
    // 初始化连线变量
    this.plumbIns = jsPlumb.getInstance();
    this.plumbIns = jsPlumb.getInstance()
  },
  mounted() {
    // this.PollData.statistics();
    this.TaskMange.findAllSdk();
    this.TaskMange.findAllSdk()
  },
  destroyed() {
    document.querySelector("html").style["min-width"] = "1280px";
    document.querySelector("html").style["min-width"] = "1280px"
  },
  watch: {
    "Camera.cameraId": {
      handler(n, o) {
        if (n) {
          if (this.TreeDataPool.treeActiveName == "dataStack") {
            this.stackFilesPage = 1;
            this.stackFilesSize = 5;
            this.stackId = n;
            this.stackFilesPage = 1
            this.stackFilesSize = 5
            this.stackId = n
            if (this.stackId) {
              this.swipercanvasData = [];
              this.getStackFiles();
              this.swipercanvasData = []
              this.getStackFiles()
            }
          }
        }
      },
      }
    },
    Carmeras: {
      handler(newVal, oldVal) {
        this.setSwiperData();
        this.setSwiperData()
      },
      deep: true,
    },
      deep: true
    }
  },
  methods: {
    prevClick() {
      if (this.swiperIndex == 0) {
        if (this.stackFilesPage > 1) {
          this.stackFilesPage--;
          this.getStackFiles(true);
          this.stackFilesPage--
          this.getStackFiles(true)
        } else {
          this.$message({
            type: "info",
            message: "当前已是第一页",
          });
            message: "当前已是第一页"
          })
        }
      }
    },
    nextClick() {
      if (this.swiperIndex == this.swipercanvasData.length - 1) {
        this.stackFilesPage++;
        this.getStackFiles(true);
        this.stackFilesPage++
        this.getStackFiles(true)
      }
    },
    getStackFiles(onClick = false) {
      this.getStackFileLoading = true;
      let _this = this;
      this.getStackFileLoading = true
      let _this = this
      findAllFileByStackId({
        name: "",
        stackId: this.stackId,
        page: this.stackFilesPage,
        size: this.stackFilesSize,
        type: 0,
        type: 0
      })
        .then((res) => {
          if (res && res.success) {
            if (res.data.dataList.length > 0) {
              this.swipercanvasData = [];
              this.swipercanvasData = []
              this.swipercanvasData = res.data.dataList.map((item) => {
                return {
                  name: item.name,
                  stackId: item.stack_id,
                  baseImg:
                    item.type == 2
                      ? `/files/${item.path.substr(
                          item.path.lastIndexOf("/") + 1
                        )}`
                      : item.snapshot_url,
                    item.type == 2 ? `/files/${item.path.substr(item.path.lastIndexOf("/") + 1)}` : item.snapshot_url,
                  type: item.type,
                  id: item.id,
                  loading: false,
                };
              });
              this.swiperIndex = 0;
              this.$refs.swiper.swiper.activeIndex = 0;
                  loading: false
                }
              })
              this.swiperIndex = 0
              this.$refs.swiper.swiper.activeIndex = 0
            } else {
              if (onClick) {
                this.$message({
                  type: "warning",
                  message: "已无更多数据!",
                });
                  message: "已无更多数据!"
                })
              }
            }
          } else {
            this.$message({
              type: "error",
              message: "数据请求失败,请稍后重试!",
            });
              message: "数据请求失败,请稍后重试!"
            })
          }
          this.getStackFileLoading = false;
          this.getStackFileLoading = false
        })
        .catch((e) => {
          this.getStackFileLoading = false;
        });
          this.getStackFileLoading = false
        })
    },
    drawBaseImg() {
      if (Array.isArray(this.$refs.canvas)) {
        if (this.$refs.canvas.length > 0) {
          this.$refs.canvas[0].showModal();
          this.$refs.canvas[0].showModal()
        }
      } else {
        this.$refs.canvas.showModal();
        this.$refs.canvas.showModal()
      }
    },
    getCanvasData(data) {
      let polyon = { ...data };
      polyon.camera_id = this.Camera.cameraId;
      let polyon = { ...data }
      polyon.camera_id = this.Camera.cameraId
      savePolygon(polyon).then((rsp) => {
        this.Camera.getPolygon();
        this.Camera.getPolygon()
        //this.Camera.getCameraTask();
      });
      })
    },
    setSwiperData() {
      let swipers = [];
      let carmeras = this.Carmeras;
      let swipers = []
      let carmeras = this.Carmeras
      for (let i = 0; i < carmeras.length; i++) {
        swipers = swipers.concat({
          camera: {
            cameraId: carmeras[i].cameraId,
            cameraName: carmeras[i].cameraName,
            type: carmeras[i].type,
            rtsp: carmeras[i].rtsp,
            rtsp: carmeras[i].rtsp
          },
          baseImg: carmeras[i].baseImg ? carmeras[i].baseImg : undefined,
          canvasData: carmeras[i].canvasData,
          loading: carmeras[i].loading,
        });
          loading: carmeras[i].loading
        })
      }
      this.swipercanvasData = swipers;
      this.swipercanvasData = swipers
    },
    refresh(url) {
      console.log(url);
      this.Camera.baseImg = url;
      this.Camera.baseImg = url
    },
    refresh2(url, id) {
      this.swipercanvasData.forEach((data) => {
        if (data.cameraId == id) {
          data.baseImg = url;
          data.baseImg = url
        }
      });
      })
    },
    // 初始化摄像机信息,父组件调用
    async initCameraData(id) {
      if (!id) {
        return;
        return
      }
      this.plumbIns.deleteEveryConnection();
      this.plumbIns.deleteEveryConnection()
      this.connectArr.forEach((item) => {
        item.deleteEveryConnection();
      });
        item.deleteEveryConnection()
      })
      //获取独立场景
      let newCamera = new VideoRuleData();
      let newCamera = new VideoRuleData()
      if (id && id !== "") {
        this.loading = false;
        newCamera.cameraId = id;
        await newCamera.update();
        this.loading = false
        newCamera.cameraId = id
        await newCamera.update()
      }
      this.Camera = newCamera;
      this.SeparateRules = this.Camera.rules;
      this.Camera = newCamera
      this.SeparateRules = this.Camera.rules
      this.$nextTick(() => {
        this.connectLine();
      });
        this.connectLine()
      })
      this.showSysInfo = true;
      this.showSysInfo = true
      // 判断正在执行实时或者轮询任务
      this.PollData.CameraList.forEach((element) => {
        if (element.id === newCamera.cameraId) {
          this.runType = element.run_type;
          this.runType = element.run_type
        }
      });
      })
    },
    // 获取混合场景
    showRules(id) {
      if (!id) {
        return;
        return
      }
      if (typeof id === "string") {
        id = [id];
        id = [id]
      }
      let rules = [];
      let rules = []
      getLinkSceneRule({ cameraIds: id })
        .then((rsp) => {
          if (rsp && rsp.success) {
            rules = rsp.data.rules;
            rules = rsp.data.rules
            this.linkageRule = rules;
            this.linkageRule = rules
            this.$nextTick(() => {
              this.connectLine2();
            });
              this.connectLine2()
            })
          }
        })
        .catch(() => {});
        .catch(() => {})
    },
    saveSceneRule(groupRule) {
      const payload = { ...groupRule };
      payload.cameraIds = [this.Camera.cameraId];
      let _this = this;
      const payload = { ...groupRule }
      payload.cameraIds = [this.Camera.cameraId]
      let _this = this
      saveCameraScene(payload).then((rsp) => {
        if (rsp && rsp.success) {
          this.Camera.update();
          this.Camera.update()
          this.$notify({
            type: "success",
            message: "策略保存成功!",
          });
            message: "策略保存成功!"
          })
          //刷新左侧树
          _this.$root.$children[0].$children[0].querySearchAsync("camera");
          _this.$root.$children[0].$children[0].querySearchAsync("camera")
        }
      });
      })
    },
    delScenRule() {
      this.Camera.update();
      this.Camera.update()
    },
    changeLoading(params) {
      this.loading = params;
      this.loading = params
    },
    //是否进行视频分析处理
    pollEnable(row) {
      let val = 0;
      let val = 0
      if (row) {
        if (this.PollData.RealTimeSum < this.PollData.channelTotal) {
          this.Camera.dealWay = true;
          val = 1;
          this.Camera.dealWay = true
          val = 1
        } else {
          this.Camera.dealWay = false;
          val = 0;
          this.Camera.dealWay = false
          val = 0
        }
      } else {
        this.Camera.dealWay = false;
        val = -1;
        this.Camera.dealWay = false
        val = -1
      }
      if (this.Camera.cameraId && this.Camera.cameraId !== undefined) {
        changeRunType({
          camera_ids: [this.Camera.cameraId],
          run_type: val,
          run_type: val
        }).then((rsp) => {
          if (rsp && rsp.success) {
            this.$notify({
              type: "success",
              message: "配置成功",
            });
              message: "配置成功"
            })
          } else {
            this.$notify({
              type: "error",
              message: "配置失败",
            });
              message: "配置失败"
            })
          }
          this.TreeDataPool.fetchTreeData();
        });
          this.TreeDataPool.fetchTreeData()
        })
      }
      this.PollData.statisticTaskInfo();
      this.PollData.statisticTaskInfo()
    },
    //实时、轮询切换
    changePoll(row) {
@@ -708,98 +642,98 @@
      if (this.Camera.cameraId && this.Camera.cameraId !== undefined) {
        if (this.PollData.RealTimeSum < this.PollData.channelTotal) {
          if (row.value) {
            this.Camera.dealWay = true;
            this.Camera.dealWay = true
          } else {
            this.Camera.dealWay = false;
            this.Camera.dealWay = false
          }
          changeRunType({
            camera_ids: [this.Camera.cameraId],
            run_type: this.Camera.dealWay ? 1 : 0,
            run_type: this.Camera.dealWay ? 1 : 0
          }).then((rsp) => {
            if (rsp && rsp.success) {
              this.$notify({
                type: "success",
                message: "配置成功",
              });
                message: "配置成功"
              })
            } else {
              this.$notify({
                type: "error",
                message: "配置失败",
              });
                message: "配置失败"
              })
            }
          });
          })
        } else {
          if (this.Camera.dealWay) {
            this.Camera.dealWay = false;
            this.Camera.dealWay = false
            changeRunType({
              camera_ids: [this.Camera.cameraId],
              run_type: this.Camera.dealWay ? 1 : 0,
              run_type: this.Camera.dealWay ? 1 : 0
            }).then((rsp) => {
              if (rsp && rsp.success) {
                this.$notify({
                  type: "success",
                  message: "配置成功",
                });
                  message: "配置成功"
                })
              } else {
                this.$notify({
                  type: "error",
                  message: "配置失败",
                });
                  message: "配置失败"
                })
              }
            });
            })
          }
        }
        this.TreeDataPool.fetchTreeData();
        this.PollData.statisticTaskInfo();
        this.TreeDataPool.fetchTreeData()
        this.PollData.statisticTaskInfo()
      }
    },
    //复制
    ctrlC() {
      this.TreeDataPool.ctrlCameraId = this.Camera.cameraId;
      this.TreeDataPool.ctrlCameraName = this.Camera.cameraName;
      this.TreeDataPool.ctrlCameraId = this.Camera.cameraId
      this.TreeDataPool.ctrlCameraName = this.Camera.cameraName
      this.$notify({
        type: "success",
        message: "复制算法成功!",
      });
        message: "复制算法成功!"
      })
    },
    ctrlV() {
      if (this.Camera.cameraId === this.TreeDataPool.ctrlCameraId) {
        this.$notify({
          type: "warning",
          message: "不能粘贴本摄像机的算法到本摄像机!",
        });
        return false;
          message: "不能粘贴本摄像机的算法到本摄像机!"
        })
        return false
      }
      pasteRules({
        sourceId: this.TreeDataPool.ctrlCameraId,
        targetIds: [this.Camera.cameraId],
        targetIds: [this.Camera.cameraId]
      })
        .then((res) => {
          if (res && res.success) {
            this.$notify({
              type: "success",
              message: "粘贴算法成功!",
            });
            this.initCameraData(this.Camera.cameraId);
              message: "粘贴算法成功!"
            })
            this.initCameraData(this.Camera.cameraId)
          } else {
            this.$notify({
              type: "error",
              message: "粘贴算法失败!",
            });
              message: "粘贴算法失败!"
            })
          }
        })
        .catch((err) => {
          this.$notify({
            type: "error",
            message: "粘贴算法失败!",
          });
        });
            message: "粘贴算法失败!"
          })
        })
    },
    //连接独立场景连线
    connectLine() {
      //清除之前的连线
      this.plumbIns.deleteEveryConnection();
      this.plumbIns.deleteEveryConnection()
      for (let index = 0; index < this.SeparateRules.length; index++) {
        this.plumbIns.connect({
@@ -814,19 +748,19 @@
          paintStyle: { stroke: "#0065FF", strokeWidth: 2 }, // connector
          endpointStyle: {
            fill: "#fff",
            outlineStroke: "#0065FF",
          }, // endpoint
        });
            outlineStroke: "#0065FF"
          } // endpoint
        })
      }
    },
    connectLine2() {
      this.connectArr.forEach((item) => {
        item.deleteEveryConnection();
      });
        item.deleteEveryConnection()
      })
      for (let index = 0; index < this.linkageRule.length; index++) {
        const plumbIns = jsPlumb.getInstance();
        const plumbIns = jsPlumb.getInstance()
        plumbIns.connect({
          // 对应上述基本概念
@@ -840,149 +774,134 @@
          paintStyle: { stroke: "#0065FF", strokeWidth: 2 }, // connector
          endpointStyle: {
            fill: "#fff",
            outlineStroke: "#0065FF",
          }, // endpoint
        });
            outlineStroke: "#0065FF"
          } // endpoint
        })
        this.connectArr.push(plumbIns);
        this.connectArr.push(plumbIns)
      }
    },
    //添加独立场景
    addSeparateRule() {
      this.ruleType = "separate";
      this.showAddBox = true;
      this.ruleType = "separate"
      this.showAddBox = true
    },
    addLinkageRule(ids, camera_polygons) {
      console.log(7979);
      console.log(camera_polygons);
      if (ids.length < 2) {
        this.$message({
          message: "请至少选择两台摄像机",
          type: "warning",
        });
        return;
          type: "warning"
        })
        return
      }
      this.newLinkageIds = ids;
      this.ruleType = "linkage";
      this.showAddBox = true;
      this.newLinkPlg = camera_polygons;
      this.newLinkageIds = ids
      this.ruleType = "linkage"
      this.showAddBox = true
      this.newLinkPlg = camera_polygons
    },
    //回填新的独立场景
    getNewRule(newRule) {
      //新增场景
      if (newRule.action === "add") {
        newRule.data.rules = [];
        newRule.data.cameraIds = [this.Camera.cameraId];
        newRule.data.enable = true;
        newRule.data.rules = []
        newRule.data.cameraIds = [this.Camera.cameraId]
        newRule.data.enable = true
        //独立场景
        if (this.ruleType == "separate") {
          this.SeparateRules.push(newRule.data);
          this.SeparateRules.push(newRule.data)
          this.$nextTick(() => {
            this.connectLine();
          });
            this.connectLine()
          })
        } else {
          //联动场景
          if (this.newLinkPlg) {
            newRule.data.camera_polygons = this.newLinkPlg;
            newRule.data.camera_polygons = this.newLinkPlg
          }
          newRule.data.cameraIds = this.newLinkageIds;
          this.linkageRule.push(newRule.data);
          newRule.data.cameraIds = this.newLinkageIds
          this.linkageRule.push(newRule.data)
          this.$nextTick(() => {
            this.connectLine2();
          });
            this.connectLine2()
          })
        }
        this.showAddBox = false;
        this.showAddBox = false
        //编辑场景
      } else if (newRule.action === "edit") {
        //独立场景
        if (this.ruleType == "separate") {
          this.SeparateRules[newRule.data.index].alarm_level =
            newRule.data.alarm_level;
          this.SeparateRules[newRule.data.index].scene_name =
            newRule.data.scene_name;
          this.SeparateRules[newRule.data.index].desc = newRule.data.desc;
          this.SeparateRules[newRule.data.index].template_id =
            newRule.data.template_id;
          this.SeparateRules[newRule.data.index].time_rule_id =
            newRule.data.time_rule_id;
          this.SeparateRules[newRule.data.index].voiceId = newRule.data.voiceId;
          this.SeparateRules[newRule.data.index].alarm_level = newRule.data.alarm_level
          this.SeparateRules[newRule.data.index].scene_name = newRule.data.scene_name
          this.SeparateRules[newRule.data.index].desc = newRule.data.desc
          this.SeparateRules[newRule.data.index].template_id = newRule.data.template_id
          this.SeparateRules[newRule.data.index].time_rule_id = newRule.data.time_rule_id
          this.SeparateRules[newRule.data.index].voiceId = newRule.data.voiceId
        } else {
          //联动场景
          console.log(this.linkageRule[newRule.data.index]);
          this.linkageRule[newRule.data.index].alarm_level =
            newRule.data.alarm_level;
          this.linkageRule[newRule.data.index].scene_name =
            newRule.data.scene_name;
          this.linkageRule[newRule.data.index].desc = newRule.data.desc;
          this.linkageRule[newRule.data.index].template_id =
            newRule.data.template_id;
          this.linkageRule[newRule.data.index].time_rule_id =
            newRule.data.time_rule_id;
          this.linkageRule[newRule.data.index].voiceId = newRule.data.voiceId;
          this.linkageRule[newRule.data.index].alarm_level = newRule.data.alarm_level
          this.linkageRule[newRule.data.index].scene_name = newRule.data.scene_name
          this.linkageRule[newRule.data.index].desc = newRule.data.desc
          this.linkageRule[newRule.data.index].template_id = newRule.data.template_id
          this.linkageRule[newRule.data.index].time_rule_id = newRule.data.time_rule_id
          this.linkageRule[newRule.data.index].voiceId = newRule.data.voiceId
        }
        this.showAddBox = false;
        this.$forceUpdate();
        this.showAddBox = false
        this.$forceUpdate()
      }
      this.editData = {};
      this.editData = {}
    },
    //修改独立场景
    editRules(item, index, type) {
      this.ruleType == type;
      this.ruleType = type
      this.editData = {
        type,
        rule: item,
        index,
      };
      this.showAddBox = true;
        index
      }
      this.showAddBox = true
    },
    //添加算法
    addSdk(type, index) {
      this.editSdkObj = {};
      this.ruleType = type;
      this.editSdkObj = {}
      this.ruleType = type
      this.addData = {
        type,
        index,
      };
        index
      }
      if (this.addData.type === "linkage") {
        this.addData.cameras = [];
        if (
          this.linkageRule[index].camera_polygons &&
          this.linkageRule[index].camera_polygons.length > 0
        ) {
        this.addData.cameras = []
        if (this.linkageRule[index].camera_polygons && this.linkageRule[index].camera_polygons.length > 0) {
          this.linkageRule[index].camera_polygons.forEach((camera) => {
            this.addData.cameras.push({
              polygonData: camera.polygon,
              cameraName: camera.camera_name,
              cameraId: camera.camera_id,
            });
          });
              cameraId: camera.camera_id
            })
          })
        } else {
          this.linkageRule[index].camera_polygons = [];
          this.linkageRule[index].camera_polygons = []
          this.Carmeras.forEach((camera) => {
            this.addData.cameras.push({
              polygonData: camera.polygonData,
              cameraName: camera.cameraName,
              cameraId: camera.cameraId,
            });
              cameraId: camera.cameraId
            })
            this.linkageRule[index].camera_polygons.push({
              polygon: camera.polygonData,
              camera_name: camera.cameraName,
              camera_id: camera.cameraId,
            });
          });
              camera_id: camera.cameraId
            })
          })
        }
      }
      this.showSdkBox = false;
      this.showSdkSettingBox = true;
      this.showSdkBox = false
      this.showSdkSettingBox = true
    },
    //添加算法回调
@@ -990,139 +909,134 @@
      //独立场景
      if (this.addData.type === "separate") {
        if (this.SeparateRules[this.addData.index].rules.length > 0) {
          newRule.rule_with_pre = "&&";
          newRule.is_save_anyhow = true;
          newRule.rule_with_pre = "&&"
          newRule.is_save_anyhow = true
        }
        this.SeparateRules[this.addData.index].rules.push(newRule);
        this.SeparateRules[this.addData.index].rules.push(newRule)
      }
      //联动场景
      else {
        if (this.linkageRule[this.addData.index].rules.length > 0) {
          newRule.rule_with_pre = "&&";
          newRule.is_save_anyhow = true;
          newRule.rule_with_pre = "&&"
          newRule.is_save_anyhow = true
        }
        this.linkageRule[this.addData.index].rules.push(newRule);
        this.linkageRule[this.addData.index].rules.push(newRule)
      }
      this.addData = {};
      this.showSdkSettingBox = false;
      this.TaskMange.findAllSdk({ installed: true });
      this.addData = {}
      this.showSdkSettingBox = false
      this.TaskMange.findAllSdk({ installed: true })
      this.show = false;
      this.show = false
      this.$nextTick(() => {
        this.show = true;
      });
        this.show = true
      })
    },
    //取消修改
    async backToOrigin(type, index, ids) {
      if (type === "separate") {
        const rsp = await getCameraSceneRule({
          cameraId: this.Camera.cameraId,
        });
          cameraId: this.Camera.cameraId
        })
        if (rsp && rsp.success) {
          let rules = rsp.data.rules ? rsp.data.rules : [];
          let rules = rsp.data.rules ? rsp.data.rules : []
          rules.forEach((item) => {
            item.cameraIds = rsp.data.cameraInfo.id;
          });
            item.cameraIds = rsp.data.cameraInfo.id
          })
          if (rules[index]) {
            this.SeparateRules[index] = rules[index];
            this.SeparateRules[index] = rules[index]
          } else {
            this.SeparateRules.splice(index, 1);
            this.SeparateRules.splice(index, 1)
          }
        }
        this.$forceUpdate();
        this.connectLine();
        this.$forceUpdate()
        this.connectLine()
      } else {
        getLinkSceneRule({ cameraIds: ids }).then((rsp) => {
          if (rsp && rsp.success) {
            let rules = rsp.data.rules ? rsp.data.rules : [];
            let rules = rsp.data.rules ? rsp.data.rules : []
            if (rules[index]) {
              this.linkageRule[index] = rules[index];
              this.linkageRule[index] = rules[index]
            } else {
              this.linkageRule.splice(index, 1);
              this.linkageRule.splice(index, 1)
            }
            this.$forceUpdate();
            this.connectLine2();
            this.$forceUpdate()
            this.connectLine2()
          }
          console.log("失败");
        });
          console.log("失败")
        })
      }
    },
    // 编辑算法
    editSdk(sdkIndex, type, ruleIndex) {
      this.addData = {};
      this.ruleType = type;
      this.addData = {}
      this.ruleType = type
      if (type === "separate") {
        this.editSdkObj = {
          ruleIndex,
          sdkIndex,
          type,
          sdk: this.SeparateRules[ruleIndex].rules[sdkIndex],
        };
          sdk: this.SeparateRules[ruleIndex].rules[sdkIndex]
        }
      } else {
        this.editSdkObj = {
          ruleIndex,
          sdkIndex,
          type,
          camera_polygons: this.linkageRule[ruleIndex].camera_polygons,
          sdk: this.linkageRule[ruleIndex].rules[sdkIndex],
        };
          sdk: this.linkageRule[ruleIndex].rules[sdkIndex]
        }
      }
      this.showSdkBox = false;
      this.showSdkSettingBox = true;
      this.showSdkBox = false
      this.showSdkSettingBox = true
    },
    deletRule(type, index) {
      if (type === "separate") {
        this.SeparateRules.splice(index, 1);
        this.SeparateRules.splice(index, 1)
      } else {
        this.linkageRule.splice(index, 1);
        this.linkageRule.splice(index, 1)
      }
    },
    getEditSdk(newRule) {
      console.log(newRule);
      if (this.editSdkObj.type === "separate") {
        this.SeparateRules[this.editSdkObj.ruleIndex].rules[
          this.editSdkObj.sdkIndex
        ] = newRule;
        this.SeparateRules[this.editSdkObj.ruleIndex].rules[this.editSdkObj.sdkIndex] = newRule
      } else {
        this.linkageRule[this.editSdkObj.ruleIndex].rules[
          this.editSdkObj.sdkIndex
        ] = newRule;
        this.linkageRule[this.editSdkObj.ruleIndex].rules[this.editSdkObj.sdkIndex] = newRule
      }
      this.editSdkObj = {};
      this.showSdkSettingBox = false;
      this.editSdkObj = {}
      this.showSdkSettingBox = false
    },
    closeAddBox() {
      this.showAddBox = false;
      this.editData = {};
      this.showAddBox = false
      this.editData = {}
    },
    closeSettingBox() {
      this.showSdkSettingBox = false;
      this.editSdkObj = {};
      this.showSdkSettingBox = false
      this.editSdkObj = {}
    },
    openSdkBox(e) {
      e.stopPropagation();
      this.showSdkBox = true;
      e.stopPropagation()
      this.showSdkBox = true
    },
    selectMultiple(val) {
      if (!val) {
        this.Carmeras = [];
        this.Carmeras = []
      }
      this.TreeDataPool.multiple = val;
    },
  },
};
      this.TreeDataPool.multiple = val
    }
  }
}
</script>
<style lang="scss" scoped>