| | |
| | | <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" |
| | |
| | | <i class="iconfont"></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"></i> |
| | | </div> |
| | |
| | | <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)"></i> |
| | | </el-tooltip> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | content="数据流传" |
| | | placement="top" |
| | | > |
| | | <el-tooltip class="item" effect="dark" content="数据流传" placement="top"> |
| | | <i class="iconfont"></i> |
| | | </el-tooltip> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | content="模板助手" |
| | | placement="top" |
| | | > |
| | | <el-tooltip class="item" effect="dark" content="模板助手" placement="top"> |
| | | <i class="iconfont"></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"> |
| | |
| | | <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"></i> |
| | | </el-tooltip> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | content="数据流传" |
| | | placement="top" |
| | | > |
| | | <el-tooltip class="item" effect="dark" content="数据流传" placement="top"> |
| | | <i class="iconfont"></i> |
| | | </el-tooltip> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | content="模板助手" |
| | | placement="top" |
| | | > |
| | | <el-tooltip class="item" effect="dark" content="模板助手" placement="top"> |
| | | <i class="iconfont"></i> |
| | | </el-tooltip> |
| | | </div> |
| | |
| | | <!-- 摄像机 --> |
| | | <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> |
| | | |
| | |
| | | </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="" /> |
| | |
| | | @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> |
| | | |
| | |
| | | </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: { |
| | |
| | | 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 { |
| | |
| | | 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, |
| | |
| | | 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: [], |
| | |
| | | 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) { |
| | |
| | | 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({ |
| | |
| | | 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({ |
| | | // 对应上述基本概念 |
| | |
| | | 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 |
| | | }, |
| | | |
| | | //添加算法回调 |
| | |
| | | //独立场景 |
| | | 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> |