public/images/desktop/header-icon/close-hover.png
public/images/desktop/header-icon/close.png
public/images/desktop/header-icon/max.png
public/images/desktop/header-icon/min.png
public/images/desktop/header-icon/mini.png
public/index.html
@@ -1,33 +1,50 @@ <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width,initial-scale=1.0" /> <link rel="icon" type="image/png" href="<%= BASE_URL %>favicon.png" sizes="32x32" /> <link rel="stylesheet" href="/fonts/alibaba/iconfont.css"> <title><%= htmlWebpackPlugin.options.title %></title> <style> html, body, h2, p, ul, li { margin: 0; padding: 0; } <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <link rel="icon" type="image/png" href="<%= BASE_URL %>favicon.png" sizes="32x32"> <link rel="stylesheet" href="/fonts/alibaba/iconfont.css"> <title><%= htmlWebpackPlugin.options.title %></title> <style> html, body, h2, p, ul, li { margin: 0; padding: 0; } </style> </head> <body> <noscript> <strong>We're sorry but multiple-pages doesn't work properly without JavaScript enabled. Please enable it to continue.</strong> </noscript> <div id="app"></div> <!-- built files will be auto injected --> </body> </html> .clearfix::after{ content: ''; display: block; height: 0; clear: both; } .ml10{ margin-left: 10px; } .mr10{ margin-right: 10px; } </style> </head> <body> <noscript> <strong >We're sorry but multiple-pages doesn't work properly without JavaScript enabled. Please enable it to continue.</strong > </noscript> <div id="app"></div> <!-- built files will be auto injected --> </body> </html> src/Pool/TaskMange.ts
@@ -63,7 +63,6 @@ async findAllSdk(params) { let res:any = await findAllSdk(params) if (res && res.success) { debugger this.list1 = res.data } } src/components/LeftNav.vue
@@ -180,13 +180,13 @@ ></i> </el-input> <!-- 隐藏树按钮 --> <div class="dev-tree-close"> <!-- <div class="dev-tree-close"> <i class="el-icon-s-fold" style="color: #3D68E1;line-height: 22px;font-size: 27px;" @click="closeTree" ></i> </div> </div> --> </div> <!-- 本地视频源列表 --> src/pages/cameraAccess/components/SceneRule.vue
@@ -48,74 +48,7 @@ </el-form-item> </div> </div> <!-- <el-row> <el-col :span="8">--> <!-- <el-form-item label="场景模板"> <el-select v-model="sceneForm.template_id" placeholder="请选择" @change="selectTemplate" size="mini" style="width:200px" > <el-option v-for="item in sceneTemplates" :key="item.id" :label="item.name" :value="item.id" ></el-option> </el-select> </el-form-item>--> <!-- </el-col> <el-col :span="8"> <el-form-item label="时间段"> <el-select v-model="sceneForm.time_rule_id" placeholder="请选择" size="mini" style="width:200px" > <el-option v-for="item in VideoManageData.TimeRules" :key="item.id" :label="item.name" :value="item.id" ></el-option> </el-select> </el-form-item> </el-col> </el-row>--> <!-- <el-row> <el-col :span="8"> <el-form-item label="场景名称"> <el-input v-model="sceneForm.scene_name" size="mini" style="width:200px"></el-input> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label="场景描述"> <el-input v-model="sceneForm.desc" type="textarea" size="mini" style="width:200px;height:180px;"></el-input> </el-form-item> </el-col> </el-row>--> <!-- <el-row> <el-col :span="8"> <el-form-item label="事件等级"> <el-select v-model="sceneForm.alarm_level" placeholder="请选择" size="mini" style="width:200px" > <el-option label="一级" :value="1"></el-option> <el-option label="二级" :value="2"></el-option> <el-option label="三级" :value="3"></el-option> <el-option label="四级" :value="4"></el-option> <el-option label="五级" :value="5"></el-option> </el-select> </el-form-item> </el-col> </el-row>--> <scene-editor ref="sceneEditor" :isLinkRule="linkRule" src/pages/cameraAccess/components/SeparateRules.vue
@@ -2,114 +2,104 @@ <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 >算法快速通道</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;"> <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 @@ -120,55 +110,10 @@ /> </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"> @@ -252,8 +197,8 @@ 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"; @@ -525,28 +470,42 @@ <style lang="scss"> .s-separate-rules { width: 100%; height: 100%; position: relative; .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{ line-height: 30px; height: 30px; } .ai-select>div{ display: inline-block; vertical-align: middle; margin-right: 30px; .channel{ display: inline-block; } } } } .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; @@ -653,9 +612,7 @@ } .bottom { width: 100%; height: calc(100% - 234px); position: absolute; top: 234px; .bottom-side { height: 100%; width: 250px; @@ -681,11 +638,7 @@ } } .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; src/pages/cameraAccess/index/App.vue
@@ -63,10 +63,9 @@ } .column-right { height: 100%; padding: 16px; background-color: #eee; background-color: #fff; box-sizing: border-box; overflow: hidden; overflow: auto; } .resize-save { position: absolute; src/pages/cameraAccess/index/VideoManage.vue
@@ -250,6 +250,8 @@ height: 100%; width: 100%; .el-tabs__header { position: fixed; top: 16px; .is-active { color: #3d68e1 !important; } @@ -278,9 +280,10 @@ } .el-tabs__content { width: 100%; height: calc(100% - 52px); margin-top: 52px; //height: calc(100% - 52px); box-sizing: border-box; padding: 13px 38px; padding: 13px 0; } .el-tab-pane { width: 100%; src/pages/cameraVideo/index/App.vue
@@ -52,8 +52,7 @@ } .column-right { height: 100%; padding: 16px; background-color: #eee; background-color: #fff; box-sizing: border-box; overflow: hidden; } src/pages/cameraVideo/index/Video.vue
@@ -147,7 +147,6 @@ }, created() { console.log("befor created") debugger // this.TreeDataPool.clean(); // this.TreeDataPool.fetchTreeData(); // this.guid = sessionStorage.guid ? Number(sessionStorage.guid) : this.guid; @@ -559,7 +558,7 @@ float: right; box-sizing: border-box; padding: 10px; background-color: #e9ebf2; background-color: #fff; .monitoring-video { width: 70.5%; //min-width: 800px; @@ -567,9 +566,7 @@ max-width: 1208px; height: 75%; float: left; padding: 0px, 10px 10px 10px; box-sizing: border-box; border: 1px solid #e4e7ed; // box-shadow: #e4e7ed 0px 0px 9px inset; border-radius: 5px; .activeItem { src/pages/desktop/index/components/DFrame.vue
@@ -7,9 +7,16 @@ > <div class="d-frame-title" v-drag @click="frameClick()"> <div class="d-frame-title-operation"> <i class="el-icon-error d-frame-operation-close" @click="closeFrame()"></i> <i class="el-icon-remove d-frame-operation-minus" @click="minFrame(data)"></i> <i class="el-icon-circle-plus d-frame-operation-full" @click="changeFullScreen()"></i> <i class="icon-minus d-frame-operation-minus" @click="minFrame(data,$event)"> <img :src="`${publicPath}images/desktop/header-icon/min.png`" alt=""> </i> <i class="icon-screen-toggle d-frame-operation-full" @click="changeFullScreen($event)"> <img :src="fullScreen?`${publicPath}images/desktop/header-icon/mini.png`:`${publicPath}images/desktop/header-icon/max.png`" alt=""> </i> <i class="icon-close d-frame-operation-close" @click="closeFrame($event)"> </i> </div> <slot name="d-frame-title-content"> <div class="d-frame-title-content"> @@ -42,6 +49,7 @@ }, data() { return { publicPath: process.env.BASE_URL, fullScreen: false, width: this.data.width || 1024, height: this.data.height || 512, @@ -64,7 +72,6 @@ methods: { //resize mousedown(e) { debugger this.resizeObj.mouX = e.clientX; this.resizeObj.mouY = e.clientY; this.resizeObj.startW = this.width; @@ -97,7 +104,8 @@ frameClick: function () { this.$store.commit('desktop/refreshFrame', this.data); }, minFrame: function (data) { minFrame (data,e) { //e.stopPropagation() //找到当前的iframe let curIframe = Array.from(document.querySelectorAll('iframe')).find(iframe => iframe.src.indexOf(data.url) >= 0); //保存当前应用快照 @@ -154,8 +162,8 @@ toLeft = document.body.getBoundingClientRect().width-40; } el.parentElement.style.left = toLeft + 'px'; if(toTop <= 0 ){ toTop = 0 if(toTop <= 40 ){ toTop = 40 }else if(toTop >= document.body.getBoundingClientRect().height-40){ toTop = document.body.getBoundingClientRect().height-40; } @@ -218,21 +226,33 @@ border-top: 1px solid #d0d0d0; border-left: 1px solid #d0d0d0; border-right: 1px solid #d0d0d0; } } .d-frame-title .icon-close{ border-radius: 0 4px 0 0; background:url('/images/desktop/header-icon/close.png') no-repeat 50%; } .d-frame-title-operation { position: absolute; line-height: 30px; left: 5px; top: 0; right: 0; height: 30px; } .d-frame-title-operation i { margin: 0 3px; font-size: 18px; display: inline-block; height: 100%; width: 46px; text-align: center; vertical-align: middle; } .d-frame-operation-close { color: red; .d-frame-title-operation i:hover{ background-color: #c7cacf; } .d-frame-title-operation .icon-close:hover{ background-color: red; background-image: url('/images/desktop/header-icon/close-hover.png') } /* .d-frame-title-operation:hover .d-frame-operation-close::before { @@ -258,19 +278,22 @@ .d-frame-title-content { line-height: 30px; text-align: center; background: #dee1e6; } .d-frame-title-content img { width: auto; height: 18px; position: relative; top: 3px; top: 2px; margin-right: 6px; } .d-frame-title-content span { position: relative; top: -1px; font-size: 15px; color: #777; /* font-family: '黑体'; */ } src/pages/desktop/index/components/NoticeTip.vue
@@ -47,7 +47,7 @@ .notice-tip { position: absolute; right: 10px; top: 40px; top: 50px; height: 60px; width: 250px; background-color: rgba(200, 200, 200, 0.7); src/pages/desktop/index/components/Tools.vue
@@ -7,7 +7,7 @@ > <img class="system" :src="`${publicPath}images/desktop/header-icon/system.png`" /> </div> <div class="tools-icon"> <div class="tools-icon no-hover-style"> <img class="smart-ai" :src="`${publicPath}images/desktop/header-icon/SmartAI.png`" alt /> </div> </div> @@ -90,6 +90,7 @@ }) }, dockClick(dock) { debugger if (dock.type === "1") { window.open(dock.url); } else if (dock.type === "2") { @@ -157,7 +158,6 @@ color: white; background-color: #98aabe; border-color: #40c3ff; cursor: pointer; } .dock-item-wrap a { height: 100%; @@ -187,8 +187,8 @@ padding: 0 15px; } .tools .tools-icon:hover, .tools .tools-icon.clicked { .tools .tools-icon:not(.no-hover-style):hover, .tools .tools-icon:not(.no-hover-style).clicked { color: white; background-color: #98aabe; cursor: pointer; src/pages/desktop/index/components/ToolsEntry.vue
@@ -30,22 +30,18 @@ }, methods: { dockClick(dock) { debugger if (dock.type === '1') { window.open(dock.url); } else if (dock.type === '2') { let ids = this.$store.getters["desktop/frames"].map(item => item.id); if (ids.indexOf(dock.id) > -1) { this.$store.commit('desktop/resetMinFrame', dock.id); this.resetDockItem(); return; } let ret = this.$store.dispatch('desktop/addFrame', { } else if (dock.type === '2' && !dock.isOpen) { this.$store.dispatch('desktop/addFrame', { id: dock.id, icon: dock.src, title: dock.name, url: dock.url }); } else if (dock.type === '2' && dock.isOpen) { this.$store.commit('desktop/resetMinFrame', dock.id); } }, resetDockItem() { src/pages/desktop/index/mock/userData.json
@@ -9,7 +9,9 @@ "alt": "GB28181配置", "type": "2", "url": "/view/gb28181", "name": "GB28181配置" "name": "GB28181配置", "width": 600, "height": 900 }, { "id": "12", src/pages/gb28181/index/App.vue
@@ -1,7 +1,7 @@ <template> <div class="s-basic-setting"> <!-- GB28181设置 --> <el-form :model="gb28181" :rules="rules" label-width="140px" class="alarmSetting" ref="gb28181"> <el-form :model="gb28181" :rules="rules" label-width="130px" class="alarmSetting" ref="gb28181"> <!-- <el-form-item label="国际服务器IP" prop="ServerIp"> <ip-input :ip="gb28181.ServerIp" @on-blur="gb28181.ServerIp = arguments[0]"></ip-input> </el-form-item>--> @@ -84,11 +84,9 @@ <el-input v-model="gb28181.Password" placeholder="请输入" size="small"></el-input> </el-form-item> <el-col :span="12"> <el-form-item> <el-button type="primary" @click="submitGB28281" size="small">保存</el-button> </el-form-item> </el-col> <el-form-item> <el-button type="primary" @click="submitGB28281" size="small">保存</el-button> </el-form-item> </el-form> </div> </template> @@ -114,8 +112,10 @@ }, data() { return { gb28181: {}, gb28181: { }, idType: 1, rules: { ip: [ { @@ -161,16 +161,17 @@ }; }, mounted() { this.$nextTick(() => { //this.$nextTick(()=>{ this.initGB28181Conf(); }); //}) }, methods: { initGB28181Conf() { getGB28181Config().then(rsp => { if (rsp && rsp.success) { this.gb28181 = rsp.data; this.gb28181.idType = 0; //this.gb28181.idType = 0; this.$set(this.gb28181,'idType',0); } }); getGb28181AreaList().then(rsp => { @@ -231,7 +232,6 @@ height: 100%; padding: 0 30px; .el-form { width: 1000px; margin-top: 30px; // margin-left: -80px; .el-form-item { src/pages/library/index/App.vue
@@ -1,6 +1,6 @@ <template> <div class="s-base-manage"> <div class="flex-box base-overflow" style="margin-top: 10px;height: calc(100% - 20px);"> <div class="flex-box base-overflow" > <div class="pl20 data-left-box"> <base-list ref="baseSync" @@ -123,9 +123,7 @@ </script> <style lang="scss" scoped> .s-base-manage { width: 100% !important; box-sizing: border-box; padding: 5px; background-color: #e9ebf2; } .base-overflow {