| | |
| | | <div class="s-separate-rules"> |
| | | <div class="ai"> |
| | | <div class="check-area"> |
| | | <el-row class="mt5"> |
| | | <el-col :span="24"> |
| | | <div class="ai-select"> |
| | | <div style="float:left;" v-show="cameraType === 'camera'"> |
| | | <span> |
| | | <span class="label">视频分析处理</span> |
| | | <el-switch |
| | | style="margin-left: 10px;" |
| | | v-model="Camera.analytics" |
| | | @change="pollEnable" |
| | | :disabled="!Camera.cameraId" |
| | | ></el-switch> |
| | | </span> |
| | | </div> |
| | | <div class="ai-select"> |
| | | <div v-show="cameraType === 'camera'"> |
| | | <span> |
| | | <span class="label">视频分析处理</span> |
| | | <el-switch |
| | | style="margin-left: 10px;" |
| | | v-model="Camera.analytics" |
| | | @change="pollEnable" |
| | | :disabled="!Camera.cameraId" |
| | | ></el-switch> |
| | | </span> |
| | | </div> |
| | | |
| | | <div |
| | | v-if="Camera.analytics" |
| | | style="float:left;margin-left: 5%;" |
| | | class="flex-box" |
| | | v-show="cameraType === 'camera'" |
| | | <div |
| | | v-if="Camera.analytics" |
| | | class="flex-box" |
| | | v-show="cameraType === 'camera'" |
| | | > |
| | | <span class="label" >处理方式</span> |
| | | <toggle-button |
| | | :value="Camera.dealWay" |
| | | :width="60" |
| | | :labels="{checked: '实时', unchecked: '轮询'}" |
| | | :color="{checked: '#3D68E1', unchecked: '#FF7733', disabled: '#CCCCCC'}" |
| | | :sync="true" |
| | | @change="changePoll" |
| | | /> |
| | | </div> |
| | | |
| | | <div |
| | | v-if="Camera.analytics" |
| | | class="flex-box" |
| | | v-show="cameraType === 'camera'" |
| | | > |
| | | <span class="label" >分辨率</span> |
| | | <el-select |
| | | v-model="Camera.selectResolution" |
| | | placeholder="请选择" |
| | | size="mini" |
| | | style="width: 134px; |
| | | margin-left:10px;" |
| | | > |
| | | <el-option |
| | | v-for="item in Camera.resolutionOption" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | ></el-option> |
| | | </el-select> |
| | | </div> |
| | | |
| | | <div v-if="Camera.analytics" class="flex-box"> |
| | | <span class="label" >智能计算节点: {{ Camera.runServerName}}</span> |
| | | </div> |
| | | |
| | | <div |
| | | v-if="Camera.analytics" |
| | | class="flex-box" |
| | | > |
| | | <span class="label">算法快速通道</span> |
| | | <div class="channel flex-box" > |
| | | <el-tooltip |
| | | effect="dark" |
| | | content="复制此摄像机算法规则" |
| | | placement="bottom" |
| | | popper-class="atooltip" |
| | | > |
| | | <span class="label" style="margin-right:10px;line-height: 22px;">处理方式</span> |
| | | <toggle-button |
| | | :value="Camera.dealWay" |
| | | :width="60" |
| | | :labels="{checked: '实时', unchecked: '轮询'}" |
| | | :color="{checked: '#3D68E1', unchecked: '#FF7733', disabled: '#CCCCCC'}" |
| | | :sync="true" |
| | | @change="changePoll" |
| | | /> |
| | | </div> |
| | | |
| | | <div |
| | | v-if="Camera.analytics" |
| | | style="float:left;margin-left:5%;" |
| | | class="flex-box" |
| | | v-show="cameraType === 'camera'" |
| | | <span |
| | | style="color:#3D68E1;cursor: pointer;font-size:23px;" |
| | | @click="ctrlC" |
| | | class="iconfont iconfuzhiguize" |
| | | ></span> |
| | | </el-tooltip> |
| | | <el-tooltip |
| | | effect="dark" |
| | | :content="!TreeDataPool.ctrlCameraId?'粘贴算法规则':`粘贴算法规则,来源:${TreeDataPool.ctrlCameraName}`" |
| | | placement="bottom" |
| | | popper-class="atooltip" |
| | | > |
| | | <span class="label" style="line-height:25px">分辨率</span> |
| | | <el-select |
| | | v-model="Camera.selectResolution" |
| | | placeholder="请选择" |
| | | size="mini" |
| | | style="width: 134px;height: 30px; |
| | | margin-left:10px;position: relative;bottom: 3px;" |
| | | > |
| | | <el-option |
| | | v-for="item in Camera.resolutionOption" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | ></el-option> |
| | | </el-select> |
| | | </div> |
| | | |
| | | <div v-if="Camera.analytics" style="float:left;margin-left:5%;" class="flex-box"> |
| | | <span class="label" style="line-height:22px">智能计算节点: {{ Camera.runServerName}}</span> |
| | | </div> |
| | | |
| | | <div |
| | | v-if="Camera.analytics" |
| | | style="float:left;margin-left: 5%;line-height: 22px;" |
| | | class="flex-box" |
| | | > |
| | | <span style="float:left;">算法快速通道</span> |
| | | <div class="flex-box" style="float: left; |
| | | margin-left: 5px;"> |
| | | <el-tooltip |
| | | effect="dark" |
| | | content="复制此摄像机算法规则" |
| | | placement="bottom" |
| | | popper-class="atooltip" |
| | | > |
| | | <span |
| | | style="color:#3D68E1;cursor: pointer;font-size:23px;" |
| | | @click="ctrlC" |
| | | class="iconfont iconfuzhiguize" |
| | | ></span> |
| | | </el-tooltip> |
| | | <el-tooltip |
| | | effect="dark" |
| | | :content="!TreeDataPool.ctrlCameraId?'粘贴算法规则':`粘贴算法规则,来源:${TreeDataPool.ctrlCameraName}`" |
| | | placement="bottom" |
| | | popper-class="atooltip" |
| | | > |
| | | <span |
| | | :style="!TreeDataPool.ctrlCameraId?'cursor: not-allowed;font-size:23px;':'color:#3D68E1;font-size:23px;cursor: pointer;'" |
| | | @click="ctrlV" |
| | | class="iconfont iconniantie ml5" |
| | | ></span> |
| | | </el-tooltip> |
| | | </div> |
| | | </div> |
| | | <span |
| | | :style="!TreeDataPool.ctrlCameraId?'cursor: not-allowed;font-size:23px;':'color:#3D68E1;font-size:23px;cursor: pointer;'" |
| | | @click="ctrlV" |
| | | class="iconfont iconniantie ml5" |
| | | ></span> |
| | | </el-tooltip> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div |
| | | style="width: calc(100% + 76px);position: absolute;left: -38px;top:38px;height: 10px;background-color: #E9EBF2;" |
| | | ></div> |
| | | <div class="devide"></div> |
| | | |
| | | <div class="top" style="top:60px;"> |
| | | <div class="top" > |
| | | <p class="task-css"> |
| | | <b style="font-size: 14px; line-height: 18px;">场景</b> |
| | | </p> |
| | | <div> |
| | | <div class="clearfix"> |
| | | <slide-scene :sceneData="Camera.rules"></slide-scene> |
| | | <div class="top-right"> |
| | | <sysinfo |
| | | :showRealPoll="cameraType === 'camera'" |
| | | :ShowLocalVedio="cameraType === 'dataStack'" |
| | | v-if="showSysInfo" |
| | | style="margin-left: 25px;margin-top:-10px" |
| | | style="margin-top:-10px" |
| | | /> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- <swiper :options="swiperOption" class="swiper-box-container"> |
| | | |
| | | <swiper-slide v-for="(item, index) in 10" :key="index"> |
| | | <div class="item-card"> |
| | | <p style="color: #0066EB;padding-top: 20px;"> |
| | | <b>{{ item }}</b> |
| | | </p> |
| | | </div> |
| | | </swiper-slide> |
| | | </swiper> |
| | | <div class="swiper-pre-border" > |
| | | <div class="icon-btn" slot="button-prev"> |
| | | <i class="iconfont iconzuo"></i> |
| | | </div> |
| | | </div> |
| | | <div class="swiper-next-border" > |
| | | <div class="icon-btn" slot="button-next"> |
| | | <i class="iconfont iconyou1"></i> |
| | | </div> |
| | | </div>--> |
| | | <!-- <swiper :options="swiperOption" class="swiper-box-container"> |
| | | <span class="task-tip" v-show="Camera.rules.length == 0 ">暂无场景,请开始创建</span> |
| | | <swiper-slide v-for="(item, index) in Camera.rules" :key="index"> |
| | | <div class="item-card"> |
| | | <p style="color: #0066EB;padding-top: 20px;"> |
| | | <b>{{ item.scene_name }}</b> |
| | | </p> |
| | | </div> |
| | | </swiper-slide> |
| | | </swiper> |
| | | <div class="swiper-pre-border" v-show="Camera.rules.length > 4 "> |
| | | <div class="icon-btn" slot="button-prev"> |
| | | <i class="iconfont iconzuo"></i> |
| | | </div> |
| | | </div> |
| | | <div class="swiper-next-border" v-show="Camera.rules.length > 4 "> |
| | | <div class="icon-btn" slot="button-next"> |
| | | <i class="iconfont iconyou1"></i> |
| | | </div> |
| | | </div>--> |
| | | |
| | | <!-- 系统信息 --> |
| | | </div> |
| | | |
| | | <div class="bottom" style="top:254px;"> |
| | | <div |
| | | style="width: calc(100% + 100px);height: 10px;background-color: #E9EBF2;position:relative;left:-40px" |
| | | ></div> |
| | | <div class="bottom" > |
| | | <div class="devide"></div> |
| | | <div class="bottom-right"> |
| | | <div class="draw-and-time-box"> |
| | | <div class="draw-box"> |
| | |
| | | } from '@/api/task'; |
| | | |
| | | import { |
| | | getAllTemplate, |
| | | saveCameraScene, |
| | | getCameraSceneRule, |
| | | } from '@/api/scene' |
| | |
| | | |
| | | import TimeSlider from "./TimeSlider"; |
| | | import polygonCanvas from "@/components/canvas"; |
| | | import Sysinfo from "./SystemInfo"; |
| | | //import Sysinfo from "./SystemInfo"; |
| | | import Sysinfo from "@/components/subComponents/SystemInfo"; |
| | | import SceneRule from "./SceneRule"; |
| | | import SlideScene from "./scene/SlideScene"; |
| | | |
| | |
| | | }; |
| | | }, |
| | | mounted() { |
| | | this.mockAsync() |
| | | this.mockAsync(); |
| | | this.PollData.statistics(); |
| | | }, |
| | | |
| | | methods: { |
| | |
| | | saveSceneRule(groupRule) { |
| | | const payload = { ...groupRule } |
| | | payload.cameraIds = [this.Camera.cameraId]; |
| | | let _this = this; |
| | | saveCameraScene(payload).then(rsp => { |
| | | if (rsp && rsp.success) { |
| | | this.Camera.update(); |
| | |
| | | type: "success", |
| | | message: "策略保存成功!" |
| | | }); |
| | | //刷新左侧树 |
| | | debugger |
| | | _this.$root.$children[0].$children[0].querySearchAsync('camera') |
| | | |
| | | } |
| | | }); |
| | | }, |
| | |
| | | <style lang="scss"> |
| | | .s-separate-rules { |
| | | width: 100%; |
| | | height: 100%; |
| | | position: relative; |
| | | padding: 13px 0 20px; |
| | | .ai { |
| | | width: calc(100% + 76px); |
| | | height: 38px; |
| | | position: absolute; |
| | | left: -38px; |
| | | //width: calc(100% + 76px); |
| | | // height: 38px; |
| | | // position: absolute; |
| | | // left: -38px; |
| | | height:40px; |
| | | .check-area { |
| | | width: 100%; |
| | | height: 100%; |
| | | float: left; |
| | | overflow: auto; |
| | | padding: 0 38px; |
| | | padding: 0 20px; |
| | | -webkit-box-sizing: border-box; |
| | | box-sizing: border-box; |
| | | .ai-select{ |
| | | text-align: left; |
| | | line-height: 30px; |
| | | height: 30px; |
| | | .flex-box{ |
| | | .label{ |
| | | &+label,&+div{ |
| | | margin-left: 10px; |
| | | line-height: 1; |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | | .ai-select>div{ |
| | | display: inline-block; |
| | | vertical-align: middle; |
| | | margin-right: 30px; |
| | | |
| | | .channel{ |
| | | display: inline-block; |
| | | vertical-align: middle; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | .devide{ |
| | | height: 10px; |
| | | background: #E9EBF2; |
| | | } |
| | | .top { |
| | | width: 100%; |
| | | height: 174px; |
| | | position: relative; |
| | | top: 60px; |
| | | padding: 10px 20px; |
| | | box-sizing: border-box; |
| | | .swiper-box { |
| | | height: 100%; |
| | | float: left; |
| | | width: 48%; |
| | | width: 46%; |
| | | margin-top: -10px; |
| | | position: relative; |
| | | } |
| | | .swiper-container { |
| | | position: initial; |
| | | min-width: 472px; |
| | | width: 80%; |
| | | |
| | | // height: 124px; |
| | | width: 86%; |
| | | } |
| | | .swiper-slide { |
| | | position: relative; |
| | |
| | | backdrop-filter: blur(1px) brightness(100%); |
| | | display: none; |
| | | } |
| | | |
| | | // @media screen and(max-width: 1280px) { |
| | | // max-width: 110px; |
| | | // } |
| | | @media screen and(max-width: 1440px) { |
| | | max-width: 110px; |
| | | } |
| | |
| | | } |
| | | .top-right { |
| | | float: right; |
| | | width: 52%; |
| | | width: 54%; |
| | | height: 144px; |
| | | .card-box{ |
| | | width: 54%!important; |
| | | } |
| | | .eCharts-box{ |
| | | width: 45%; |
| | | canvas{ |
| | | width: 98%!important; |
| | | } |
| | | } |
| | | } |
| | | .task-css { |
| | | text-align: left; |
| | |
| | | } |
| | | .bottom { |
| | | width: 100%; |
| | | height: calc(100% - 234px); |
| | | position: absolute; |
| | | top: 234px; |
| | | margin-bottom: 15px; |
| | | .bottom-side { |
| | | height: 100%; |
| | | width: 250px; |
| | |
| | | } |
| | | } |
| | | .bottom-right { |
| | | width: calc(100% + 30px); |
| | | height: 100%; |
| | | float: left; |
| | | overflow: auto; |
| | | padding: 10px 0px; |
| | | padding: 10px 20px; |
| | | box-sizing: border-box; |
| | | .draw-and-time-box { |
| | | height: 400px; |
| | |
| | | margin-left: 10px; |
| | | font-size: 14px; |
| | | } |
| | | .task-tip { |
| | | font-family: PingFangSC-Regular; |
| | | font-size: 12px; |
| | | color: #cccccc; |
| | | margin-top: 10%; |
| | | margin-left: 38%; |
| | | } |
| | | |
| | | .marker { |
| | | display: inline-block; |
| | |
| | | } |
| | | } |
| | | .el-loading-spinner { |
| | | background: url("../../../assets/gif/loading.gif") no-repeat; |
| | | background: url("/images/cameraAccess/loading.gif") no-repeat; |
| | | top: 50%; |
| | | margin-top: -21px; |
| | | width: calc(100% - 260px) !important; |