| | |
| | | <!-- 场景及规则 --> |
| | | <div class="left-top-left"> |
| | | <div class="title">场景</div> |
| | | <slide-scene :sceneData="Camera.rules"></slide-scene> |
| | | <slide-scene :sceneData="Camera.allSceneRule"></slide-scene> |
| | | </div> |
| | | |
| | | <!-- 算力信息进度条 --> |
| | |
| | | :InValidCount="`${PollData.RealTimeInvalid}`" |
| | | :RunningCount="`${PollData.RealTimeRun}`" |
| | | :NoDeal="`${PollData.RealTimeNoDeal}`" |
| | | image="realTime (2).png" |
| | | ></HashrateCard> |
| | | |
| | | <!-- 轮询算力信息 --> |
| | |
| | | :InValidCount="`${PollData.PollInvalid}`" |
| | | :RunningCount="`${PollData.PollRun}`" |
| | | :NoDeal="`${PollData.PollNoDeal}`" |
| | | image="polling.png" |
| | | ></HashrateCard> |
| | | </div> |
| | | </div> |
| | |
| | | :disabled="false" |
| | | :snapshot_url="Camera.baseImg" |
| | | :canvasDataShow="Camera.canvasData" |
| | | :currentCameraId="Camera.cameraId" |
| | | :currentCamera="Camera" |
| | | :loading="Camera.loading" |
| | | :canvasWidth="canvasWidth" |
| | | :canvasHeight="canvasHeight" |
| | |
| | | v-for="(data, index) in swipercanvasData" |
| | | :key="index" |
| | | > |
| | | <b |
| | | <!-- <b |
| | | class="video-title" |
| | | style="font-size: 14px; margin-top: -10px" |
| | | >{{ data.name }}</b |
| | | > |
| | | > --> |
| | | <polygon-canvas |
| | | ref="canvas" |
| | | v-loading="loading" |
| | | element-loading-text="刷新中,请稍等..." |
| | | element-loading-background="rgba(0, 0, 0, 0.8)" |
| | | :divId="data.cameraId" |
| | | :divId="data.camera.cameraId" |
| | | :isShowDrawArrow="true" |
| | | :isLink="true" |
| | | :disabled="false" |
| | | :loading="data.loading" |
| | | :snapshot_url="data.baseImg" |
| | | :canvasDataShow="data.canvasData" |
| | | :currentCameraId="data.cameraId" |
| | | :currentCamera="data.camera" |
| | | @changeLoading="changeLoading" |
| | | @refresh="refresh2" |
| | | ></polygon-canvas> |
| | |
| | | <div class="SeparateRules" @click="selectMultiple(false)"> |
| | | <div class="title">独立场景</div> |
| | | <div class="control"> |
| | | <i class="iconfont" @click="openSdkBox($event)"></i> |
| | | <i class="iconfont"></i> |
| | | <i class="iconfont"></i> |
| | | <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" |
| | | > |
| | | <i class="iconfont"></i> |
| | | </el-tooltip> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | content="模板助手" |
| | | placement="top" |
| | | > |
| | | <i class="iconfont"></i> |
| | | </el-tooltip> |
| | | </div> |
| | | |
| | | <div class="content"> |
| | |
| | | :rule="item" |
| | | :id="'rule_' + index" |
| | | :ruleType="'separate'" |
| | | :cameraId="Camera.cameraId" |
| | | @edit="editRules(item, index, 'separate')" |
| | | @addSdk="addSdk('separate', index)" |
| | | @backToOrigin="backToOrigin('separate', index)" |
| | | @editSdk="editSdk($event, 'separate', index)" |
| | | @deletRule="deletRule('separate', index)" |
| | | ></RuleItem> |
| | | </template> |
| | | |
| | | <div class="empty" v-else> |
| | | <img src="/images/hashrate/独立场景空页面.png" alt="" /> |
| | | <img src="/images/hashrate/s_empty.png" alt="" /> |
| | | <div class="des">暂无独立场景</div> |
| | | </div> |
| | | </div> |
| | |
| | | <div class="linkageRule" @click="selectMultiple(true)"> |
| | | <div class="title">联动场景</div> |
| | | <div class="control"> |
| | | <i class="iconfont" @click="showSdkBox = true"></i> |
| | | <i class="iconfont"></i> |
| | | <i class="iconfont"></i> |
| | | <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" |
| | | > |
| | | <i class="iconfont"></i> |
| | | </el-tooltip> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | content="模板助手" |
| | | placement="top" |
| | | > |
| | | <i class="iconfont"></i> |
| | | </el-tooltip> |
| | | </div> |
| | | <template v-if="linkageRule.length > 0"> |
| | | <div class="content" v-for="(item, index) in linkageRule" :key="index"> |
| | | <!-- 摄像机 --> |
| | | <LinkageCameraBox |
| | | :cameras="item.cameraIds" |
| | | @addLinkageRule="addLinkageRule" |
| | | @addLinkageRule=" |
| | | addLinkageRule(item.cameraIds, item.camera_polygons) |
| | | " |
| | | ></LinkageCameraBox> |
| | | <div class="Anchor" :id="'linkage_camera' + index"></div> |
| | | |
| | |
| | | :rule="item" |
| | | @edit="editRules(item, index, 'linkage')" |
| | | @addSdk="addSdk('linkage', index)" |
| | | @backToOrigin="backToOrigin('linkage', index)" |
| | | @editSdk="editSdk($event, 'linkage', index, item.Cameras)" |
| | | @backToOrigin="backToOrigin('linkage', index, item.cameraIds)" |
| | | @editSdk="editSdk($event, 'linkage', index)" |
| | | @deletRule="deletRule('linkage', index)" |
| | | :id="'linkage_' + index" |
| | | ></RuleItem> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <div class="empty" @click="addLinkageRule" v-else> |
| | | <img src="/images/hashrate/联动场景空页面.png" alt="" /> |
| | | <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="empty"> |
| | | <img src="/images/hashrate/l_empty.png" alt="" /> |
| | | <div class="des">暂无联动场景</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | |
| | | @getEditSdk="getEditSdk" |
| | | :editSdk="editSdkObj.sdk" |
| | | :linkEditCamera=" |
| | | ruleType === 'linkage' && editSdkObj ? editSdkObj.cameras : null |
| | | ruleType === 'linkage' && editSdkObj ? editSdkObj.camera_polygons : null |
| | | " |
| | | :Cameras="ruleType === 'linkage' ? Carmeras : [Camera]" |
| | | :Cameras="ruleType === 'linkage' ? addData.cameras : [Camera]" |
| | | ></SdkSettingBox> |
| | | |
| | | <!-- 遮罩层 --> |
| | |
| | | selectedCameraIds() { |
| | | return this.TreeDataPool.selectedNodes; |
| | | }, |
| | | CarmerasId() { |
| | | let arr = []; |
| | | this.Carmeras.forEach((item) => { |
| | | arr.push(item.cameraId); |
| | | }); |
| | | return arr; |
| | | }, |
| | | }, |
| | | data() { |
| | | return { |
| | |
| | | prevEl: ".swiper-next-border", |
| | | }, |
| | | }, |
| | | showNewLinkage: false, |
| | | newLinkageIds: [], |
| | | newLinkPlg: null, |
| | | |
| | | // swiperOption: { |
| | | // slidesPerView: 5, |
| | |
| | | SeparateRules: [], //独立场景 |
| | | linkageRule: [], //联动场景 |
| | | cameraId: "", |
| | | showSysInfo: false, |
| | | showSysInfo: true, |
| | | showCanvas: true, |
| | | canvasWidth: 568, |
| | | canvasHeight: 320, |
| | |
| | | this.plumbIns = jsPlumb.getInstance(); |
| | | }, |
| | | mounted() { |
| | | this.PollData.statistics(); |
| | | this.TaskMange.findAllSdk({ installed: true }); |
| | | // this.PollData.statistics(); |
| | | this.TaskMange.findAllSdk(); |
| | | }, |
| | | destroyed() { |
| | | document.querySelector("html").style["min-width"] = "1280px"; |
| | |
| | | this.$refs.canvas.showModal(); |
| | | } |
| | | }, |
| | | |
| | | getCanvasData(data) { |
| | | let polyon = { ...data }; |
| | | polyon.camera_id = this.Camera.cameraId; |
| | |
| | | let carmeras = this.Carmeras; |
| | | for (let i = 0; i < carmeras.length; i++) { |
| | | swipers = swipers.concat({ |
| | | cameraId: carmeras[i].cameraId, |
| | | name: carmeras[i].camearInfo.name, |
| | | camera: { |
| | | cameraId: carmeras[i].cameraId, |
| | | cameraName: carmeras[i].cameraName, |
| | | type: carmeras[i].type, |
| | | rtsp: carmeras[i].rtsp, |
| | | }, |
| | | baseImg: carmeras[i].baseImg ? carmeras[i].baseImg : undefined, |
| | | canvasData: carmeras[i].canvasData, |
| | | loading: carmeras[i].loading, |
| | |
| | | this.swipercanvasData = swipers; |
| | | }, |
| | | refresh(url) { |
| | | console.log(url); |
| | | this.Camera.baseImg = url; |
| | | }, |
| | | refresh2(url, id) { |
| | |
| | | return; |
| | | } |
| | | |
| | | console.log("init"); |
| | | |
| | | this.plumbIns.deleteEveryConnection(); |
| | | this.connectArr.forEach((item) => { |
| | | item.deleteEveryConnection(); |
| | |
| | | |
| | | this.Camera = newCamera; |
| | | this.SeparateRules = this.Camera.rules; |
| | | |
| | | this.$nextTick(() => { |
| | | this.connectLine(); |
| | | }); |
| | |
| | | this.runType = element.run_type; |
| | | } |
| | | }); |
| | | |
| | | // 获取混合场景 |
| | | this.showRules(id); |
| | | }, |
| | | |
| | | // 获取混合场景 |
| | | showRules(id) { |
| | | if (!id) { |
| | | return; |
| | | } |
| | | if (typeof id === "string") { |
| | | id = [id]; |
| | | } |
| | | let rules = []; |
| | | |
| | | getLinkSceneRule({ cameraIds: [id] }) |
| | | getLinkSceneRule({ cameraIds: id }) |
| | | .then((rsp) => { |
| | | if (rsp && rsp.success) { |
| | | rules = rsp.data; |
| | | // 统一规则编辑的数据结构 |
| | | for (let i = 0; i < rules.length; i++) { |
| | | rules[i].group_rules = rules[i].rules; |
| | | } |
| | | rules = rsp.data.rules; |
| | | |
| | | this.linkageRule = rules; |
| | | |
| | | this.$set(this.Camera, "rules", this.Camera.rules.concat(rules)); |
| | | |
| | | this.$nextTick(() => { |
| | | this.connectLine2(); |
| | | }); |
| | | |
| | | this.linkageRule.forEach((rule) => { |
| | | rule.Cameras = []; |
| | | rule.cameraIds.forEach((id) => { |
| | | let newCamera = new VideoRuleData(id); |
| | | rule.Cameras.push(newCamera); |
| | | }); |
| | | }); |
| | | } |
| | | }) |
| | |
| | | this.showAddBox = true; |
| | | }, |
| | | |
| | | addLinkageRule() { |
| | | if (this.Carmeras.length < 2) { |
| | | addLinkageRule(ids, camera_polygons) { |
| | | console.log(7979); |
| | | console.log(camera_polygons); |
| | | if (ids.length < 2) { |
| | | this.$message({ |
| | | message: "请至少选择两台摄像机", |
| | | type: "warning", |
| | | }); |
| | | return; |
| | | } |
| | | this.newLinkageIds = ids; |
| | | this.ruleType = "linkage"; |
| | | this.showAddBox = true; |
| | | this.newLinkPlg = camera_polygons; |
| | | }, |
| | | |
| | | //回填新的独立场景 |
| | |
| | | }); |
| | | } else { |
| | | //联动场景 |
| | | let arr = [this.Camera.cameraId]; |
| | | this.Carmeras.forEach((item) => { |
| | | if (item.cameraId != this.Camera.cameraId) { |
| | | arr.push(item.cameraId); |
| | | } |
| | | }); |
| | | newRule.data.cameraIds = arr; |
| | | if (this.newLinkPlg) { |
| | | newRule.data.camera_polygons = this.newLinkPlg; |
| | | } |
| | | newRule.data.cameraIds = this.newLinkageIds; |
| | | this.linkageRule.push(newRule.data); |
| | | this.$nextTick(() => { |
| | | this.connectLine2(); |
| | |
| | | } |
| | | |
| | | this.showAddBox = false; |
| | | this.$forceUpdate(); |
| | | } |
| | | this.editData = {}; |
| | | }, |
| | |
| | | type, |
| | | index, |
| | | }; |
| | | if (this.addData.type === "linkage") { |
| | | 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, |
| | | }); |
| | | }); |
| | | } else { |
| | | this.linkageRule[index].camera_polygons = []; |
| | | this.Carmeras.forEach((camera) => { |
| | | this.addData.cameras.push({ |
| | | polygonData: camera.polygonData, |
| | | cameraName: camera.cameraName, |
| | | cameraId: camera.cameraId, |
| | | }); |
| | | this.linkageRule[index].camera_polygons.push({ |
| | | polygon: camera.polygonData, |
| | | camera_name: camera.cameraName, |
| | | camera_id: camera.cameraId, |
| | | }); |
| | | }); |
| | | } |
| | | } |
| | | this.showSdkBox = false; |
| | | this.showSdkSettingBox = true; |
| | | }, |
| | |
| | | newRule.rule_with_pre = "&&"; |
| | | newRule.is_save_anyhow = true; |
| | | } |
| | | |
| | | this.SeparateRules[this.addData.index].rules.push(newRule); |
| | | } |
| | | |
| | |
| | | }, |
| | | |
| | | //取消修改 |
| | | async backToOrigin(type, index) { |
| | | async backToOrigin(type, index, ids) { |
| | | if (type === "separate") { |
| | | const rsp = await getCameraSceneRule({ |
| | | cameraId: this.Camera.cameraId, |
| | | }); |
| | | if (rsp && rsp.success) { |
| | | let rules = rsp.data.rules ? rsp.data.rules : []; |
| | | rules.forEach((item) => { |
| | | item.cameraIds = rsp.data.cameraInfo.id; |
| | | }); |
| | | if (rules[index]) { |
| | | this.SeparateRules[index] = rules[index]; |
| | | } else { |
| | |
| | | this.$forceUpdate(); |
| | | this.connectLine(); |
| | | } else { |
| | | getLinkSceneRule({ cameraIds: [this.Camera.cameraId] }) |
| | | .then((rsp) => { |
| | | if (rsp && rsp.success) { |
| | | let rules = rsp.data; |
| | | console.log(rules); |
| | | if (rules[index]) { |
| | | console.log(1111); |
| | | this.linkageRule[index] = rules[index]; |
| | | this.linkageRule.group_rules = this.linkageRule.rules; |
| | | } else { |
| | | console.log(2222); |
| | | this.linkageRule.splice(index, 1); |
| | | } |
| | | this.$forceUpdate(); |
| | | this.connectLine2(); |
| | | getLinkSceneRule({ cameraIds: ids }).then((rsp) => { |
| | | if (rsp && rsp.success) { |
| | | let rules = rsp.data.rules ? rsp.data.rules : []; |
| | | if (rules[index]) { |
| | | this.linkageRule[index] = rules[index]; |
| | | } else { |
| | | this.linkageRule.splice(index, 1); |
| | | } |
| | | console.log("失败"); |
| | | }) |
| | | .catch((err) => { |
| | | console.log(err); |
| | | }); |
| | | this.$forceUpdate(); |
| | | this.connectLine2(); |
| | | } |
| | | console.log("失败"); |
| | | }); |
| | | } |
| | | }, |
| | | |
| | | // 编辑算法 |
| | | editSdk(sdkIndex, type, ruleIndex, Cameras) { |
| | | editSdk(sdkIndex, type, ruleIndex) { |
| | | this.addData = {}; |
| | | this.ruleType = type; |
| | | if (type === "separate") { |
| | |
| | | ruleIndex, |
| | | sdkIndex, |
| | | type, |
| | | cameras: Cameras, |
| | | camera_polygons: this.linkageRule[ruleIndex].camera_polygons, |
| | | sdk: this.linkageRule[ruleIndex].rules[sdkIndex], |
| | | }; |
| | | } |
| | | |
| | | this.showSdkBox = false; |
| | | this.showSdkSettingBox = true; |
| | | }, |
| | | |
| | | deletRule(type, index) { |
| | | if (type === "separate") { |
| | | this.SeparateRules.splice(index, 1); |
| | | } else { |
| | | this.linkageRule.splice(index, 1); |
| | | } |
| | | }, |
| | | |
| | | getEditSdk(newRule) { |
| | |
| | | .control { |
| | | position: absolute; |
| | | display: flex; |
| | | justify-content: end; |
| | | justify-content: flex-end; |
| | | top: 20px; |
| | | right: 20px; |
| | | |
| | |
| | | .control { |
| | | position: absolute; |
| | | display: flex; |
| | | justify-content: end; |
| | | justify-content: flex-end; |
| | | top: 20px; |
| | | right: 20px; |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | .newCameraArea { |
| | | display: flex; |
| | | .empty { |
| | | margin-left: 60px; |
| | | width: 1220px; |
| | | height: 198px; |
| | | border: 1px solid #c0c5cc; |
| | | border-radius: 5px; |
| | | text-align: center; |
| | | background: #f0f5fa; |
| | | img { |
| | | margin-top: 14px; |
| | | width: 250px; |
| | | height: 150px; |
| | | } |
| | | |
| | | .des { |
| | | margin-top: 2px; |
| | | color: #666; |
| | | } |
| | | } |
| | | } |
| | | |
| | | ::v-deep .sourcePoint { |
| | | margin-top: -4px; |
| | | margin-left: -6px; |
| | |
| | | } |
| | | |
| | | .swiper-box-container2 { |
| | | margin: 0; |
| | | margin-top: -13px; |
| | | width: 568px; |
| | | } |
| | | |
| | |
| | | .swiper-next-border ::v-deep { |
| | | position: absolute; |
| | | bottom: 146px; |
| | | right: 10px; |
| | | right: 58px; |
| | | cursor: pointer; |
| | | z-index: 1; |
| | | |