Browse Source

监控接入

master
mk 2 years ago
parent
commit
5b2382fe88
  1. 3
      .gitignore
  2. 11
      package-lock.json
  3. 2
      package.json
  4. 2
      public/index.html
  5. 1
      public/js/jsencrypt.min.js
  6. 2
      public/js/web-control_1.2.5.min.js
  7. 22
      src/api/screen-content-right.js
  8. 0
      src/assets/fonts/PingFang-regular.ttf
  9. BIN
      src/assets/images/changMap.png
  10. BIN
      src/assets/next-images/left-border.png
  11. BIN
      src/assets/next-images/right-border.png
  12. 48
      src/style/font.scss
  13. 56
      src/style/index.scss
  14. 18
      src/style/layout6144.scss
  15. 76
      src/style/mixin.scss
  16. 14
      src/style/variables.scss
  17. 229
      src/views/next/dialog-module/monitor-detail/index.vue
  18. 73
      src/views/next/dialog-module/monitor-list/index.vue
  19. 8
      src/views/next/index.vue
  20. 3
      src/views/next/screen-content-left/index.vue
  21. 69
      src/views/next/screen-content-map/index.vue
  22. 69
      src/views/next/screen-content-right/emergencyCommand/index.vue
  23. 2
      src/views/next/screen-content-right/events-analysis/index.vue
  24. 2
      src/views/next/screen-content-right/events-analysis/option.js
  25. 5
      src/views/next/screen-content-right/index.vue
  26. 7
      src/views/screen/screen-content-center/index.vue
  27. 2
      vue.config.js

3
.gitignore

@ -1,7 +1,8 @@
.DS_Store
node_modules
/dist
/jinshui-screen
/jinshui-screen.zip
# local env files
.env.local

11
package-lock.json

@ -11,6 +11,7 @@
"@amap/amap-jsapi-loader": "^1.0.1",
"axios": "^1.4.0",
"core-js": "^3.6.5",
"jquery.js": "^0.0.2-security",
"js-cookie": "^3.0.5",
"swiper": "^9.4.1",
"vue": "^2.6.11",
@ -9434,6 +9435,11 @@
"integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==",
"dev": true
},
"node_modules/jquery.js": {
"version": "0.0.2-security",
"resolved": "https://registry.npmmirror.com/jquery.js/-/jquery.js-0.0.2-security.tgz",
"integrity": "sha512-ezUV4Jx39k9jyZjKQEkvno0JDSICSixlXEEJP7QlH2g0FS+nPinvunuI2sWHTikXq6fr44JOgEnCAIsfLZufcg=="
},
"node_modules/js-base64": {
"version": "2.6.4",
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
@ -24540,6 +24546,11 @@
"integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==",
"dev": true
},
"jquery.js": {
"version": "0.0.2-security",
"resolved": "https://registry.npmmirror.com/jquery.js/-/jquery.js-0.0.2-security.tgz",
"integrity": "sha512-ezUV4Jx39k9jyZjKQEkvno0JDSICSixlXEEJP7QlH2g0FS+nPinvunuI2sWHTikXq6fr44JOgEnCAIsfLZufcg=="
},
"js-base64": {
"version": "2.6.4",
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",

2
package.json

@ -4,6 +4,7 @@
"private": true,
"scripts": {
"serve": "vue-cli-service serve --mode development",
"dev": "vue-cli-service serve --mode development",
"build:beta": "vue-cli-service build --mode beta",
"build:prod": "vue-cli-service build --mode production",
"lint": "vue-cli-service lint"
@ -12,6 +13,7 @@
"@amap/amap-jsapi-loader": "^1.0.1",
"axios": "^1.4.0",
"core-js": "^3.6.5",
"jquery.js": "^0.0.2-security",
"js-cookie": "^3.0.5",
"swiper": "^9.4.1",
"vue": "^2.6.11",

2
public/index.html

@ -14,6 +14,8 @@
<div id="app"></div>
<!-- built files will be auto injected -->
<script src="./js/gcoord.global.js"></script>
<script src="./js/jsencrypt.min.js"></script>
<script src="./js/web-control_1.2.5.min.js"></script>
<script src="https://unpkg.com/@turf/turf/turf.min.js"></script>
<!-- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css" /> -->
<link rel="stylesheet" href="./css/animate.min-4.1.1.css">

1
public/js/jsencrypt.min.js

File diff suppressed because one or more lines are too long

2
public/js/web-control_1.2.5.min.js

File diff suppressed because one or more lines are too long

22
src/api/screen-content-right.js

@ -247,3 +247,25 @@ export function getEventDetail ({ eventId }) {
method: 'GET'
})
}
export function getArtemicList (id) {
return request({
baseURL:intranetApiUrl,
url: `gov/org/artemis/screenJinShui/getArtemicList/${id}`,
method: 'GET'
})
}
export function getOrgList () {
return request({
baseURL:intranetApiUrl,
url: `gov/org/artemis/screenJinShui/getAgencyList`,
method: 'GET'
})
}
export function getVideo (id) {
return request({
baseURL:intranetApiUrl,
url: `gov/org/artemis/screenJinShui/getArtemicById/${id}`,
method: 'GET'
})
}

0
src/assets/fonts/PingFang Regular.ttf → src/assets/fonts/PingFang-regular.ttf

BIN
src/assets/images/changMap.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

BIN
src/assets/next-images/left-border.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 214 KiB

BIN
src/assets/next-images/right-border.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 215 KiB

48
src/style/font.scss

@ -1,27 +1,27 @@
@font-face {
font-family: 'PingFang Regular';
src: url('../assets/fonts/PingFang Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
// @font-face {
// font-family: 'PingFang Regular';
// src: url('../assets/fonts/PingFang-regular.ttf') format('truetype');
// font-weight: normal;
// font-style: normal;
// }
@font-face {
font-family: 'PingFang Simple Thin';
src: url('../assets/fonts/pingfang-simple-thin.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
// @font-face {
// font-family: 'PingFang Simple Thin';
// src: url('../assets/fonts/pingfang-simple-thin.ttf') format('truetype');
// font-weight: normal;
// font-style: normal;
// }
@font-face {
font-family: 'PingFang Simple Bold';
src: url('../assets/fonts/pingfang-simple-bold.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
// @font-face {
// font-family: 'PingFang Simple Bold';
// src: url('../assets/fonts/pingfang-simple-bold.ttf') format('truetype');
// font-weight: normal;
// font-style: normal;
// }
@font-face {
font-family: 'FZZhengHeiS-B-GB';
src: url('../assets/fonts/fzzhengheis-el-gb.ttf') format('truetype');
font-weight: bolder;
font-style: normal;
}
// @font-face {
// font-family: 'FZZhengHeiS-B-GB';
// src: url('../assets/fonts/fzzhengheis-el-gb.ttf') format('truetype');
// font-weight: bolder;
// font-style: normal;
// }

56
src/style/index.scss

@ -1,3 +1,59 @@
@import './font.scss';
@import './page.scss';
@import './transition.scss';
@import './variables.scss';
@import './mixin.scss';
body {
height: 100%;
}
#app {
// background-color: rgba($color: #00113F, $alpha: 1);
// color: $fontColor;
// width: $width;
// height: $height;
// max-width: $width;
// max-height: $height;
// position: relative;
.body {
flex: 1;
overflow: hidden;
}
.copyright {
position: absolute;
left: 50%;
bottom: 0;
height: 30px;
transform: translateX(-50%);
line-height: 2;
color: rgba($color: white, $alpha: 0.7);
font-size: 16px;
}
}
.amap-logo{
display: none;
opacity:0 !important;
}
.amap-copyright {
opacity:0;
}
.tooltip{
display: none;
}
.container {
height: 100%;
position: relative;
}
.home {
position: relative;
height: 100%;
}
.hide-bg-progress {
.el-progress-bar .el-progress-bar__outer {
background-color: transparent;
}
}
.chart {
width: 100%;
height: 100%;
}

18
src/style/layout6144.scss

@ -0,0 +1,18 @@
// 大屏幕
$height: 1152PX;
$width: 6144PX;
$barWidth: 3035px;
// 大屏 Header 高度
$headerHeight: 137px;
$smallFontSize: 20px;
$baseFontSize: 20px;
$midFontSize: 30px;
$bigFontSize: 45px;
// 配置地图infodash
$iconPadding: 30px;
$iconWidth: 85px;
// 配置支部共建联合共建
$leftWidth: 100px;

76
src/style/mixin.scss

@ -0,0 +1,76 @@
@mixin clearfix {
&:after {
content: "";
display: table;
clear: both;
}
}
@mixin scrollBar {
&::-webkit-scrollbar-track-piece {
background: #d3dce6;
}
&::-webkit-scrollbar {
width: 6px;
}
&::-webkit-scrollbar-thumb {
background: #99a9bf;
border-radius: 20px;
}
}
@mixin relative {
position: relative;
width: 100%;
height: 100%;
}
@mixin pct($pct) {
width: #{$pct};
position: relative;
margin: 0 auto;
}
@mixin triangle($width, $height, $color, $direction) {
$width: $width/2;
$color-border-style: $height solid $color;
$transparent-border-style: $width solid transparent;
height: 0;
width: 0;
@if $direction==up {
border-bottom: $color-border-style;
border-left: $transparent-border-style;
border-right: $transparent-border-style;
}
@else if $direction==right {
border-left: $color-border-style;
border-top: $transparent-border-style;
border-bottom: $transparent-border-style;
}
@else if $direction==down {
border-top: $color-border-style;
border-left: $transparent-border-style;
border-right: $transparent-border-style;
}
@else if $direction==left {
border-right: $color-border-style;
border-top: $transparent-border-style;
border-bottom: $transparent-border-style;
}
}
@mixin flex($direction:row) {
display: flex;
flex-direction: $direction;
}
@mixin shadowInset($width:3px, $color:#0E3AAA, $opacity:0.7) {
// background-color: #040409;
box-shadow: inset 0 0 20px $width rgba($color: $color, $alpha: $opacity);
}

14
src/style/variables.scss

@ -0,0 +1,14 @@
// base color
$black: #00013B;
$white: #FFFFFF;
$blue: #8EC6D8;
$lightblue: #0C81FE;
$green: #3eeef0;
$purple: #9A05F5;
$fontColor:#9ACCFF;
$titleColor:#fefefe;
$progressTitleColor:#70c0c5;
$progressNumColor:#fefefe;
// 加载不同的配置文件
// @import './layout9216.scss';
// @import './layout6144.scss';

229
src/views/next/dialog-module/monitor-detail/index.vue

@ -8,13 +8,15 @@
<div class="monitor-icon">
<img src="@/assets/images/camera.png" alt="摄像头" />
</div>
<div class="name">摄像头{{ monitorOrder }}</div>
<div class="name">{{ cameraName }}</div>
<div class="state"></div>
</div>
</div>
<div class="detail-content">
<div class="monitor-container">
<img :src="monitorImg" alt="" />
<!-- v-resize="DomResize" -->
<video id="playWnd" ref="playWndBox" autoplay></video>
</div>
</div>
</div>
@ -22,34 +24,229 @@
<script>
import { mapGetters, mapActions } from 'vuex'
import { getVideo } from 'api/screen-content-right'
import Bus from 'utils/eventBus'
export default {
name: 'monitor-detail',
data() {
return {
dialogTitle: '监控画面',
monitorImg: '',
monitorOrder: 0
initCount: 0,
pubKey: '',
oWebControl2: '',
cameraName: ''
}
},
created() {
Bus.$off('emitMonitorDetailData', this.emitMonitorDetailData.bind(this))
Bus.$on('emitMonitorDetailData', this.emitMonitorDetailData.bind(this))
},
computed: {
...mapGetters(['monitorDetailVisible'])
...mapGetters(['monitorDetailVisible', 'scale'])
},
methods: {
...mapActions({
set_monitorDetailVisible: 'SET_MONITORDETAILVISIBLE'
}),
emitMonitorDetailData (index) {
this.monitorImg = require(`assets/next-images/emergency-command/${index}.png`)
this.monitorOrder = index
initPlugin() {
let _that = this;
const oWebControl = new window.WebControl({
szPluginContainer: 'playWnd', // id
iServicePortStart: 15900, // 使
iServicePortEnd: 15909,
szClassId: '23BF3B0A-2C56-4D97-9C03-0CB103AA8F11', // IE10使ActiveXclsid
cbConnectSuccess() {
console.log('创建WebControl实例成功');
oWebControl.JS_StartService('window', {
// WebControl
dllPath: './VideoPluginConnect.dll', // "./VideoPluginConnect.dll"
})
.then(
() => {
// //
oWebControl.JS_SetWindowControlCallback({
//
cbIntegrationCallBack: _that.cbIntegrationCallBack,
});
oWebControl.JS_CreateWnd('playWnd').then(() => {
//JS_CreateWnd
// console.log(111111);
_that.init(); //
});
},
(err) => {
//
}
)
.catch((err) => {
console.log(err);
});
},
cbConnectError() {
// WebControl
oWebControl = null;
$('#playWnd').html('插件未启动,正在尝试启动,请稍候...');
console.log($('#playWnd'));
window.WebControl.JS_WakeUp('VideoWebPlugin://'); // errorwakeup
this.initCount++;
if (this.initCount < 3) {
setTimeout(function () {
this.initPlugin();
}, 3000);
} else {
$('#playWnd').html('插件启动失败,请检查插件是否安装!');
}
},
cbConnectClose(bNormalClose) {
// bNormalClose = false
// JS_DisconnectbNormalClose = true
console.log('cbConnectClose');
oWebControl = null;
},
});
console.log(oWebControl);
this.oWebControl2 = oWebControl;
},
init() {
let _that = this;
this.getPubKey(function () {
//
var appkey = "23210205"; //appkey
var secret = _that.setEncrypt("DPg2pDiF5wCsGme3a05a"); //secret
var ip = "120.224.52.75"; //IP
var playMode = 0; //0-1-
var port = 554; //HTTPS443
var snapDir = ""; //
var videoDir = "D:\\VideoDir"; //
var layout = "1x1"; //playMode
var enableHTTPS = 1; //HTTPS1
var encryptedFields = "secret"; //secret
var showToolbar = 0; //0-0-
var showSmart = 0; //线0-0-
var buttonIDs = "0,16,256,257,258,259,260,512,513,514,515,516,517,768,769"; //
//
// console.log(22222);
_that.oWebControl2.JS_RequestInterface({
funcName: "init",
argument: JSON.stringify({
appkey: appkey, //APIappkey
secret: secret, //APIsecret
ip: ip, //APIIP
playMode: playMode, //
port: port, //
snapDir: snapDir, //
videoDir: videoDir, //
layout: layout, //
// enableHTTPS: enableHTTPS, //HTTPS
encryptedFields: encryptedFields, //
showToolbar: showToolbar, //
showSmart: showSmart, //
buttonIDs: buttonIDs, //
}),
})
.then((oData) => {
// console.log(oData);
// let width = document.querySelector("#playWnd").offsetWidth;
// let height = document.querySelector("#playWnd").offsetHeight;
// _that.oWebControl2.JS_Resize(width, height); // resize
let rect = document.querySelector("#playWnd").getBoundingClientRect();
let width = rect.width;
let height = rect.height;
_that.oWebControl2.JS_Resize(width, height);
});
});
},
cbIntegrationCallBack(oData) {
//
console.log(oData);
},
destroyVideoDiv() {
this.oWebControl2.JS_DestroyWnd()
.then((data) => {
console.log("销毁窗口成功");
})
.catch((err) => {
console.log("销毁窗口失败");
});
},
getPubKey(callback) {
this.oWebControl2.JS_RequestInterface({
funcName: "getRSAPubKey",
argument: JSON.stringify({
keyLength: 1024,
}),
})
.then((oData) => {
if (oData.responseMsg.data) {
this.pubKey = oData.responseMsg.data;
callback();
}
});
},
setEncrypt(value) {
var encrypt = new window.JSEncrypt();
encrypt.setPublicKey(this.pubKey);
return encrypt.encrypt(value);
},
getVideoFun(Code) {
var cameraIndexCode = Code; //
var streamMode = 0; //0-1-
var transMode = 0; //0-UDP1-TCP
var gpuMode = 0; //GPU0-1-
var wndId = -1; //2x2
cameraIndexCode = cameraIndexCode.replace(/(\s*$)/g, "")
// console.log(44444);
this.oWebControl2.JS_RequestInterface({
funcName: "startPreview",
argument: JSON.stringify({
cameraIndexCode: cameraIndexCode, //
streamMode: streamMode, //
transMode: transMode, //
gpuMode: gpuMode, //GPU
wndId: wndId, //
}),
})
.then((res) => {
console.log(res, "res=================");
}).catch(err => {
console.log(err, '报错了-----------------');
});
// console.log(555555);
},
emitMonitorDetailData(data) {
const { cameraName, cameraIndexCode } = data
getVideo(cameraIndexCode).then(res => {
if (this.oWebControl2) {
this.destroyVideoDiv()
}
this.initPlugin();
setTimeout(() => {
console.log(this.oWebControl2, 'this.oWebControl2');
this.getVideoFun(cameraIndexCode)
let _that = this
window.addEventListener('resize', function () {
//
let rect = document.querySelector("#playWnd").getBoundingClientRect();
let width = rect.width;
let height = rect.height;
_that.oWebControl2.JS_Resize(width, height);
});
}, 2000)
}).catch(err => {
console.log(err);
})
this.cameraName = cameraName
},
//
closeDialog() {
this.set_monitorDetailVisible(false)
this.destroyVideoDiv()
}
}
}
@ -59,13 +256,13 @@ export default {
.monitor-detail {
width: 1018px;
height: 734px;
background: url("~@/assets/next-images/community-detail-dialog-bg.png")
no-repeat;
background: url("~@/assets/next-images/community-detail-dialog-bg.png") no-repeat;
background-size: 100% 100%;
position: absolute;
top: calc(50% - 734px / 2);
left: calc(50% - 1018px / 2);
z-index: 200;
.close-icon {
width: 26px;
height: 26px;
@ -74,6 +271,7 @@ export default {
right: -2px;
cursor: pointer;
}
.title-container {
width: 100%;
height: 30px;
@ -82,13 +280,16 @@ export default {
box-sizing: border-box;
padding-left: 26px;
margin-top: 14px;
.info {
display: flex;
align-items: center;
.monitor-icon {
width: 16px;
height: 16px;
}
.name {
font-size: 16px;
font-family: "PingFang Regular";
@ -96,6 +297,7 @@ export default {
color: #fff;
margin: 0 3px 0 8px;
}
.state {
width: 6px;
height: 6px;
@ -104,16 +306,23 @@ export default {
}
}
}
.detail-content {
width: calc(100% - 20px);
height: calc(100% - 30px - 14px - 30px);
box-sizing: border-box;
padding: 25px 12px 0px 32px;
.monitor-container {
width: 100%;
height: 100%;
background: rgba(255, 255, 255, 0.8);
}
#playWnd {
width: 100%;
height: 100%;
}
}
}
</style>

73
src/views/next/dialog-module/monitor-list/index.vue

@ -14,9 +14,9 @@
<el-select v-model="currentOrg" @change="orgChange">
<el-option
v-for="item in orgList"
:key="item.value"
:label="item.label"
:value="item.value"
:key="item.indexCode"
:label="item.name"
:value="item.indexCode"
></el-option>
</el-select>
</div>
@ -47,15 +47,15 @@
<div class="monitor-icon">
<img src="@/assets/images/camera.png" alt="摄像头" />
</div>
<div class="name">摄像头{{ index + 1 }}</div>
<div class="name">{{item.cameraName}}</div>
<div class="state"></div>
</div>
<div class="operation" @click="showMonitorDetail(index + 1)">
<div class="operation" @click="showMonitorDetail(item)">
<img src="@/assets/images/full-screen.png" alt="操作按钮" />
</div>
</div>
<div class="monitor-video">
<img :src="item.monitor" alt="" />
<img src="../../../../assets/next-images/emergency-command/2.png" alt="" />
</div>
</div>
</div>
@ -82,6 +82,8 @@
<script>
import { mapGetters, mapActions } from 'vuex'
import Bus from 'utils/eventBus'
import {
getArtemicList,getOrgList} from 'api/screen-content-right'
export default {
name: 'monitor-list',
data () {
@ -94,9 +96,9 @@ export default {
preloadVisible: true,
currentOrg: '1',
orgList: [
{ label: '全部', value: '1' },
{ label: '锦祥园社区', value: '2' },
{ label: '玫瑰苑社区', value: '3' }
// { label: '', value: '1' },
// { label: '', value: '2' },
// { label: '', value: '3' }
]
}
},
@ -106,23 +108,43 @@ export default {
watch: {
monitorListVisible (val) {
if (val) {
setTimeout(() => {
for (let i = 1; i <= 8; i++) {
this.monitorList.push({ monitor: require(`assets/next-images/emergency-command/${i}.png`) })
}
this.preloadVisible = false
}, 1000)
// setTimeout(() => {
// for (let i = 1; i <= 8; i++) {
// this.monitorList.push({ monitor: require(`assets/next-images/emergency-command/${i}.png`) })
// }
// this.preloadVisible = false
// }, 1000)
} else {
this.monitorList = []
this.preloadVisible = true
}
}
},
mounted () {
this.getOrgList()
// this.$nextTick(()=>{
// this.getArtemicList()
// })
Bus.$on('handelClickvideo', (e)=>{
this.currentOrg = e
this.getArtemicList()
})
},
methods: {
...mapActions({
set_monitorListVisible: 'SET_MONITORLISTVISIBLE',
showGlobalDialog: 'showGlobalDialog'
}),
async getOrgList(){
await getOrgList().then( res => {
this.orgList.push(...res.data)
this.currentOrg = res.data[0].indexCode
}).catch(err=>{
console.log(err);
})
},
//
closeDialog () {
this.set_monitorListVisible(false)
@ -137,16 +159,27 @@ export default {
this.monitorList = []
this.preloadVisible = true
this.pageNo = 1
setTimeout(() => {
this.monitorList = [1, 2, 3, 4, 5, 6, 7, 8]
this.preloadVisible = false
}, 1000)
this.getArtemicList()
},
//
showMonitorDetail (index) {
this.showGlobalDialog('monitorDetail')
Bus.$emit('emitMonitorDetailData', index)
}
},
async getArtemicList(){
console.log(this.currentOrg);
await getArtemicList(this.currentOrg).then(res => {
this.monitorList = []
this.monitorList.push(...res.data.list);
this.preloadVisible = true
setTimeout(() => {
this.preloadVisible = false
// this.getArtemicList()
}, 1000)
}).catch(err=>{
console.log(err);
})
},
}
}
</script>

8
src/views/next/index.vue

@ -157,20 +157,20 @@ export default {
transform-origin: 0 0;
overflow: hidden;
.left-border {
width: 167px;
width: 660px;
height: 100%;
background: url("~@/assets/next-images/left-border.png") no-repeat;
background-size: 167px 100%;
background-size: 100% 100%;
position: absolute;
left: 0px;
top: 0;
z-index: 10;
}
.right-border {
width: 167px;
width: 660px;
height: 100%;
background: url("~@/assets/next-images/right-border.png") no-repeat;
background-size: 167px 100%;
background-size: 100% 100%;
position: absolute;
right: 0px;
top: 0;

3
src/views/next/screen-content-left/index.vue

@ -132,6 +132,9 @@ export default {
.rest-content {
width: 100%;
height: calc(100% - 30px - 30px);
border-radius:10px;
padding: 10px;
box-sizing: border-box;
.change-container {
width: 100%;
height: calc(100% - 250px - 32px);

69
src/views/next/screen-content-map/index.vue

@ -1,5 +1,9 @@
<template>
<div class="screen-content-map">
<div class="top" style="position: absolute; top: 0; left: 0; width: 100%; height: 100px;background: linear-gradient(to bottom, #081c2f, rgba(0, 0, 0, 0)); z-index: 8;"></div>
<div class="bot" style="position: absolute; bottom: 0; left: 0; width: 100%; height: 100px;background: linear-gradient(to top, #081c2f, rgba(0, 0, 0, 0)); z-index: 8;"></div>
<div v-if="!show3D">
<div
id="amap-container"
:style="{ transform: `scale(${mapScale}) translate(-50%, -50%)`}"
@ -58,6 +62,18 @@
<img src="@/assets/images/search-icon.png" alt="" />
</div>
</div>
<div class="map-chang" v-if="!show3D">
<img src="@/assets/images/changMap.png" alt="" width="35px" height="35px" @click="changMap">
</div>
</div>
<div v-if="show3D" style="height: 100%; width: 100%;">
<div class="map-changs" @click="changMapS">
<img src="@/assets/images/changMap.png" alt="" width="50px" height="50px" >
</div>
<!-- http://localhost:8085/#/ -->
<!-- http://172.22.68.29/emergency-dashboard-jinshui/#/ -->
<iframe src="http://172.22.68.29/emergency-dashboard-jinshui/#/" style="height: 100%;width: 100%; z-index: 30;"></iframe>
</div>
</div>
</template>
@ -96,7 +112,8 @@ export default {
],
searchSelect: '1',
searchValue: '',
collapse: true
collapse: true,
show3D:false
}
},
computed: {
@ -120,6 +137,19 @@ export default {
Bus.$on('drowDownToGrid', this.drowDownToGrid.bind(this))
},
mounted () {
this.initMap()
window.addEventListener('click', this.handleWindowClick.bind(this))
},
beforeDestroy () {
window.removeEventListener('click', this.handleWindowClick.bind(this))
},
methods: {
...mapActions({
set_mapLevel: 'SET_MAPLEVEL',
set_communityId: 'SET_COMMUNITYID',
showGlobalDialog: 'showGlobalDialog'
}),
initMap(){
this.getMapStatistics()
/* eslint-disable */
Promise.all([
@ -134,17 +164,14 @@ export default {
gridGeoJson
})
})
window.addEventListener('click', this.handleWindowClick.bind(this))
},
beforeDestroy () {
window.removeEventListener('click', this.handleWindowClick.bind(this))
changMap(){
this.show3D = true
},
changMapS(){
this.show3D = false
this.initMap()
},
methods: {
...mapActions({
set_mapLevel: 'SET_MAPLEVEL',
set_communityId: 'SET_COMMUNITYID',
showGlobalDialog: 'showGlobalDialog'
}),
//
getMapStatistics () {
if (this.mapLevel === 'community' || (this.mapLevel === 'grid' && !this.communityId)) {
@ -354,14 +381,34 @@ img {
cursor: pointer;
}
}
.map-chang{
position: absolute;
bottom: 124px;
right: calc(560px + 32px + 10px);
left: calc(64% - 32px - 560px - 10px - 44px - 360px);
z-index: 30;
width: 80px;
height: 80px;
cursor: pointer;
}
.map-changs{
position: absolute;
bottom: 124px;
right: calc(560px + 32px + 10px);
left: calc(64% - 32px - 560px - 10px - 44px - 360px);
z-index: 30;
width: 80px;
height: 80px;
cursor: pointer;
}
</style>
<style lang="scss" scoped>
.screen-content-map {
width: 100%;
height: 100%;
position: relative;
overflow: hidden;
#amap-container {
width: 100%;
height: 100%;

69
src/views/next/screen-content-right/emergencyCommand/index.vue

@ -11,9 +11,9 @@
<el-select v-model="currentOrg" @change="orgChange">
<el-option
v-for="item in orgList"
:key="item.value"
:label="item.label"
:value="item.value"
:key="item.indexCode"
:label="item.name"
:value="item.indexCode"
></el-option>
</el-select>
</div>
@ -46,15 +46,15 @@
<div class="monitor-icon">
<img src="@/assets/images/camera.png" alt="摄像头" />
</div>
<div class="name">摄像头{{ index + 1 }}</div>
<div class="name">{{item.cameraName}}</div>
<div class="state"></div>
</div>
<div class="operation" @click="showMonitorDetail(index + 1)">
<div class="operation" @click="showMonitorDetail(item)">
<img src="@/assets/images/full-screen.png" alt="操作按钮" />
</div>
</div>
<div class="monitor">
<img :src="item.monitor" alt="" />
<img src="../../../../assets/next-images/emergency-command/2.png" alt="" />
</div>
</div>
</div>
@ -77,15 +77,13 @@
<script>
import { mapActions } from 'vuex'
import Bus from 'utils/eventBus'
import {
getArtemicList,getOrgList} from 'api/screen-content-right'
export default {
name: 'screen-content-right',
data () {
return {
orgList: [
{ label: '全部', value: '' },
{ label: '锦祥园社区', value: '1' },
{ label: '玫瑰苑社区', value: '2' }
],
orgList: [],
currentOrg: '',
monitorList: [],
preloadVisible: true, //
@ -93,14 +91,18 @@ export default {
loadingType: 'more' // more- none-
}
},
mounted () {
setTimeout(() => {
this.preloadVisible = false
this.monitorList = []
for (let i = 1; i <= 8; i++) {
this.monitorList.push({ monitor: require(`assets/next-images/emergency-command/${i}.png`) })
}
}, 1000)
async mounted () {
// setTimeout(() => {
// this.preloadVisible = false
// this.monitorList = []
// for (let i = 1; i <= 8; i++) {
// this.monitorList.push({ monitor: require(`assets/next-images/emergency-command/${i}.png`) })
// }
// }, 1000)
await this.getOrgList()
this.$nextTick(()=>{
this.getArtemicList()
})
this.$refs['monitor-list'].addEventListener('scroll', this.handleScroll)
},
beforeDestroy () {
@ -111,10 +113,33 @@ export default {
set_monitorListVisible: 'SET_MONITORLISTVISIBLE',
showGlobalDialog: 'showGlobalDialog'
}),
async getArtemicList(){
await getArtemicList(this.currentOrg).then(res => {
this.monitorList = []
this.monitorList.push(...res.data.list);
this.preloadVisible = true
setTimeout(() => {
this.preloadVisible = false
// this.getArtemicList()
}, 1000)
}).catch(err=>{
console.log(err);
})
},
async getOrgList(){
await getOrgList().then( res => {
this.orgList.push(...res.data)
this.currentOrg = res.data[0].indexCode
}).catch(err=>{
console.log(err);
})
},
//
showMonitorListDialog () {
this.showGlobalDialog('')
this.set_monitorListVisible(true)
Bus.$emit('handelClickvideo', this.currentOrg)
},
//
handleScroll (e) {
@ -136,13 +161,13 @@ export default {
this.monitorList = []
setTimeout(() => {
this.preloadVisible = false
this.monitorList = [1, 2, 3, 4, 5, 6, 7, 8]
this.getArtemicList()
}, 1000)
},
//
showMonitorDetail (index) {
showMonitorDetail (item) {
this.showGlobalDialog('monitorDetail')
Bus.$emit('emitMonitorDetailData', index)
Bus.$emit('emitMonitorDetailData', item)
}
}
}

2
src/views/next/screen-content-right/events-analysis/index.vue

@ -270,6 +270,8 @@ export default {
width: 100%;
height: 100%;
box-sizing: border-box;
border-radius:10px;
padding: 10px;
.events-analysis-statistics {
width: 100%;
height: 25.53%;

2
src/views/next/screen-content-right/events-analysis/option.js

@ -116,7 +116,7 @@ export function getEventsAnalysisChartOption ({ data } = { data: [] }) {
hoverAnimation: true,
itemStyle: {
normal: {
borderWidth: 5,
// borderWidth: 5,
borderColor: '#011742'
}
},

5
src/views/next/screen-content-right/index.vue

@ -86,7 +86,7 @@ export default {
this.showGlobalDialog('theRedCross')
}
this.collapse = !this.collapse
}
},
}
}
</script>
@ -158,6 +158,9 @@ export default {
width: 100%;
height: calc(100% - 30px - 30px);
overflow: hidden;
border-radius:10px;
padding: 10px;
box-sizing: border-box;
}
.confilct-mediation {
width: 100px;

7
src/views/screen/screen-content-center/index.vue

@ -2,6 +2,7 @@
<!-- eslint-disable indent -->
<template>
<div class="screen-content-center">
<div v-if="!show3D">
<div
id="amap-container"
:style="{ transform: `scale(${mapScale}) translate(-50%, -50%)` }"
@ -61,6 +62,9 @@
</div>
</div>
</div>
<iframe v-else src="http://localhost:8085/#/mapBg" frameborder="0" style="width: 100%; height: 100%;"></iframe>
</div>
</template>
<script>
@ -96,7 +100,8 @@ export default {
],
searchSelect: '1',
searchValue: '',
collapse: true
collapse: true,
show3D:true
}
},
computed: {

2
vue.config.js

@ -32,7 +32,7 @@ module.exports = {
assetsDir: 'static',
// 保存时是否使用 eslint-loader
lintOnSave: process.env.NODE_ENV === 'development' ? 'error' : true,
lintOnSave:false,
// 生产环境 source map
productionSourceMap: false,

Loading…
Cancel
Save