Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Z
ZiBoYingJI
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Kimber
ZiBoYingJI
Commits
de4c405f
Commit
de4c405f
authored
Sep 20, 2024
by
xinzhedeai
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
降水、风速内页
parent
04f65f09
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
1517 additions
and
1074 deletions
+1517
-1074
babel.config.js
babel.config.js
+1
-1
people-monitor copy.html
public/datav/detail/people-monitor copy.html
+0
-1071
water-monitor.html
public/datav/detail/water-monitor.html
+992
-0
wind-monitor.html
public/datav/detail/wind-monitor.html
+522
-0
index.html
public/datav/index.html
+2
-2
No files found.
babel.config.js
View file @
de4c405f
public/datav/detail/people-monitor copy.html
deleted
100644 → 0
View file @
04f65f09
<!doctype html>
<html>
<head>
<meta
charset=
"utf-8"
>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1.0,maximum-scale=1,user-scalable=no"
/>
<title>
地下矿山数据总览
</title>
<link
rel=
"stylesheet"
href=
"../css/base.css"
>
<link
rel=
"stylesheet"
href=
"../css/index.css"
>
<!-- 引入样式 -->
<link
rel=
"stylesheet"
href=
"../css/element-ui.css"
>
<!-- 引入样式文件 -->
<link
rel=
"stylesheet"
href=
"../css/vant@4.css"
/>
<!-- 先引入 Vue -->
<script
src=
"../js/vue.min.js"
></script>
<!-- 引入 Vue 和 Vant 的 JS 文件 -->
<script
src=
"../js/vue@2.6.14"
></script>
<script
src=
"../js/vant.min.js"
></script>
<style>
.amap-logo
{
z-index
:
-10
;
}
.amap-copyright
{
z-index
:
-10
;
}
.el-autocomplete-suggestion
{
width
:
330px
!important
;
}
.buttons-box
{
width
:
100%
;
height
:
28px
;
background-color
:
rgba
(
43
,
51
,
63
,
0.7
);
position
:
absolute
;
display
:
-webkit-box
;
display
:
-ms-flexbox
;
display
:
flex
;
left
:
0
;
bottom
:
0
;
user-select
:
none
;
z-index
:
10
;
}
.jessibuca-btn
{
width
:
20px
;
color
:
rgb
(
255
,
255
,
255
);
line-height
:
27px
;
margin
:
0px
10px
;
padding
:
0px
2px
;
cursor
:
pointer
;
text-align
:
center
;
font-size
:
0.8rem
!important
;
}
.buttons-box-right
{
position
:
absolute
;
right
:
0
;
}
</style>
</head>
<body
style=
"background-image: url('../static/bg-img.png');background-size: 100% 100%;"
>
<div
id=
"app"
>
<div
class=
"fixed wp100 hv100"
style=
"background-color: #000000;left: 0;top: 0;z-index: 1999;"
v-show=
"!isReady"
></div>
<!-- title -->
<!--<div style="height: 80px;">
<div class="flex-text color-theme f30 wp100 relative maxIndex fixed"
style="height: 80px;background-image: url('../static/title-bg.png');background-size: 100% 100%;">
<div style="margin-top: -10px;">{{selectedMine.name || ''}}</div>
</div>
</div>-->
<div
style=
"height: 80px;"
>
<div
class=
"flex-text color-theme f30 wp100 relative maxIndex fixed"
style=
"height: 80px;"
>
<div
class=
"flex-1"
style=
"background-image: url('../static/title-bg-left.png');background-size: 100% 100%;height: 80px;"
>
</div>
<div
class=
"flex-text"
style=
"background-image: url('../static/title-bg-center.png');background-size: 100% 100%;height: 80px;"
>
<div
style=
"margin-top: -10px;"
>
{{selectedMine.name || ''}}
</div>
</div>
<div
class=
"flex-1"
style=
"background-image: url('../static/title-bg-right.png');background-size: 100% 100%;height: 80px;"
>
</div>
</div>
</div>
<div
class=
"fixed flex-text maxIndex pointer"
style=
"left: 30px;top: 45px;"
@
click=
"history.back()"
>
<img
style=
"width: 24px;height: 24px;"
src=
"../static/backPage.png"
alt=
""
>
<div
class=
"f20 color-theme ml10"
>
返回
</div>
</div>
<div
class=
"fixed flex-text maxIndex pointer"
style=
"right: 30px;top: 45px;"
@
click=
"gotoManagement()"
>
<img
style=
"width: 24px;height: 24px;"
src=
"../static/backstage.png"
alt=
""
>
<div
class=
"f20 color-theme ml10"
>
后台管理
</div>
</div>
<!-- mask -->
<!-- <div class="fixed wp100 hv100" style="z-index: 199;" @click="showMask = false" v-show="showMask"></div> -->
<div
class=
"flex-text ml10 mr10 relative mt15"
>
<div
class=
"flex-1 mr15 flex-text flex-column ovh"
:style=
"{height: 970 * heightScale + 'px'}"
>
<div
class=
"flex-1 wp100 relative"
style=
"margin-bottom: 25px;"
>
<div
class=
"poa-cover"
id=
"map"
v-show=
"isGIS"
></div>
<img
class=
"poa-cover"
:src=
"planImg"
alt=
""
v-show=
"!isGIS"
>
<div
class=
"absolute flex align-center"
style=
"left: 20px;top: 20px;"
>
<div
class=
"bg-mask round h44 flex-text f16"
style=
"padding: 0 20px;"
>
<div>
当前带班领导:
<span
class=
"color-theme"
>
{{ info.department }}--{{ info.userName }}
</span>
</div>
<div
class=
"ml20 mr20"
style=
"width: 1px;background-color: rgba(171,238,255,.2);height: 18px;"
></div>
<div>
当前状态:
<span
class=
"color-theme"
>
{{ info.status }}
</span></div>
<div
class=
"ml20 mr20"
style=
"width: 1px;background-color: rgba(171,238,255,.2);height: 18px;"
></div>
<div>
下井人数:
<span
class=
"color-theme"
>
{{ info.people }}
</span></div>
<div
class=
"ml20 mr20"
style=
"width: 1px;background-color: rgba(171,238,255,.2);height: 18px;"
></div>
<div>
报警:
<span
class=
"color-yellow"
>
{{ info.alarm }}
</span></div>
<div
class=
"ml20 mr20"
style=
"width: 1px;background-color: rgba(171,238,255,.2);height: 18px;"
></div>
<div>
求救:
<span
class=
"color-red"
>
{{ info.help }}
</span></div>
</div>
<div
class=
"bg-mask ml20 h44 round flex-text pointer"
@
click=
"isGIS = !isGIS"
style=
"padding: 0 20px;"
>
<img
style=
"width: 20px;height: 14px;"
src=
"../static/change-icon.png"
alt=
""
>
<div
class=
"ml10 color-theme"
>
{{ isGIS ? '切换平面图' : '切换GIS地图' }}
</div>
</div>
</div>
<div
class=
"absolute flex align-center"
style=
"left: 20px;top: 74px;"
>
<div
class=
"h44 bg-mask round flex-text pointer underground"
style=
"width: 500px;"
>
<div
class=
"flex-1"
v-if=
"isReady"
>
<van-notice-bar
background=
"none"
left-icon=
"volume-o"
color=
"#ffffff"
:speed=
"80"
:text=
"notice.title"
@
click=
"noticeMask = true"
/>
</div>
</div>
</div>
</div>
<div
class=
"flex-text wp100"
>
<!-- 区域人数统计 -->
<div
class=
"flex-1 mr15 ovh"
>
<div
class=
"relative"
>
<img
class=
"wp100"
style=
"height: 52px;"
src=
"../static/sub-title-1.png"
alt=
""
>
<div
class=
"poa-cover"
>
<div
class=
"ml40 f20 color-theme"
style=
"margin-top: -4px;"
>
区域人数统计
</div>
</div>
</div>
<div
class=
"h44 f18 flex-text mt5"
style=
"background: linear-gradient(to bottom, rgba(171,238,255,.15), rgba(171,238,255,.3));border-bottom: 1px solid #abeeff;"
>
<div
class=
"flex-1"
>
<div
class=
"ml25"
>
区域名称
</div>
</div>
<div
class=
"text-center"
style=
"width: 140px;"
>
定员(人)
</div>
<div
class=
"text-center"
style=
"width: 140px;"
>
当前(人)
</div>
<div
class=
"text-center"
style=
"width: 140px;"
>
状态
</div>
<div
style=
"width: 3px;"
class=
"h44"
></div>
</div>
<div
class=
""
style=
"height: 182px;overflow-y: scroll;"
>
<div
class=
"h44 color-theme flex-text f17"
:class=
"'bg-list-' + (index % 2)"
:style=
"{ marginTop: index == 0 ? '' : '2px' }"
v-for=
"(item,index) in areaPeople"
:key=
"index"
>
<div
class=
"ovh flex-1"
>
<div
class=
"ml25 mr15 ellipsis"
>
{{ item.name }}
</div>
</div>
<div
class=
"ovh text-center"
style=
"width: 140px;"
>
{{ item.people }}
</div>
<div
class=
"text-center"
style=
"width: 140px;"
>
{{ item.current }}
</div>
<div
class=
"text-center"
style=
"width: 140px;"
:class=
"item.status == 0?'':'color-red'"
>
{{ item.statusTxt }}
</div>
</div>
</div>
</div>
<!-- 井下人员实时状态 -->
<div
class=
"flex-1 ovh"
>
<div
class=
"relative"
>
<img
class=
"wp100"
style=
"height: 52px;"
src=
"../static/sub-title-1.png"
alt=
""
>
<div
class=
"poa-cover"
>
<div
class=
"ml40 f20 color-theme"
style=
"margin-top: -4px;"
>
井下人员实时状态
</div>
</div>
</div>
<div
class=
"h44 f18 flex-text mt5"
style=
"background: linear-gradient(to bottom, rgba(171,238,255,.15), rgba(171,238,255,.3));border-bottom: 1px solid #abeeff;"
>
<div
class=
"text-center ml25 mr25"
style=
"width: 100px;"
>
姓名
</div>
<div
class=
"flex-1 ml15"
>
基站位置
</div>
<div
class=
""
style=
"width: 140px;"
>
下井时间
</div>
<div
class=
"text-center"
style=
"width: 140px;"
>
部门
</div>
<div
style=
"width: 3px;"
class=
"h44"
></div>
</div>
<div
class=
""
style=
"height: 182px;overflow-y: scroll;"
>
<div
class=
"h44 color-theme flex-text f17"
:class=
"'bg-list-' + (index % 2)"
:style=
"{ marginTop: index == 0 ? '' : '2px' }"
v-for=
"(item,index) in pitPeople"
:key=
"index"
>
<div
class=
"ml25 mr25 text-center"
style=
"width: 100px;"
>
{{ item.userName }}
</div>
<div
class=
"ovh flex-1 ml15 mr20"
>
<div
class=
"ellipsis mr15"
>
{{ item.position }}
</div>
</div>
<div
class=
""
style=
"width: 140px;"
>
{{ item.time }}
</div>
<div
class=
"text-center"
style=
"width: 140px;"
>
{{ item.department }}
</div>
</div>
</div>
</div>
</div>
</div>
<div
class=
"flex-text flex-column"
:style=
"{height: 970 * heightScale + 'px', width: 710 * heightScale + 'px'}"
>
<div
style=
"transform-origin: right top;right: 0;top: 0;width: 710px;"
class=
"absolute"
:style=
"{transform: 'scale(' + (heightScale) + ')'}"
>
<div
class=
"wp100 flex-text"
>
<!-- 区域类型人数分布图 -->
<div
class=
"flex-1"
>
<div
class=
"relative"
>
<img
class=
"wp100"
style=
"height: 52px;"
src=
"../static/sub-title-1-s.png"
alt=
""
>
<div
class=
"poa-cover"
>
<div
class=
"ml40 f20 color-theme"
style=
"margin-top: -4px;"
>
区域类型人数分布图
</div>
</div>
</div>
<div
class=
"relative"
style=
"height: 210px;"
>
<img
class=
"wp100 absolute"
style=
"height: 140px;left: 0;bottom: 0;"
src=
"../static/content-box-bg.png"
alt=
""
>
<div
class=
"poa-cover"
id=
"bar"
></div>
</div>
</div>
<!-- 报警统计 -->
<div
class=
"flex-1 ml15"
>
<div
class=
"relative"
>
<img
class=
"wp100"
style=
"height: 52px;"
src=
"../static/sub-title-1-s.png"
alt=
""
>
<div
class=
"poa-cover"
>
<div
class=
"ml40 f20 color-theme"
style=
"margin-top: -4px;"
>
报警统计
</div>
</div>
</div>
<div
class=
"relative"
style=
"height: 210px;"
>
<img
class=
"wp100 absolute"
style=
"height: 140px;left: 0;bottom: 0;"
src=
"../static/content-box-bg.png"
alt=
""
>
<div
class=
"poa-cover"
id=
"pie"
></div>
<div
class=
"absolute"
style=
"right: 20px;bottom: 40px;"
>
<div
class=
"flex-text"
>
<div
class=
"round"
style=
"width: 10px;height: 10px;background-color: #3ceaed;"
>
</div>
<div
class=
"f14 ml10"
>
已处置
</div>
</div>
<div
class=
"flex-text mt5"
>
<div
class=
"round"
style=
"width: 10px;height: 10px;background-color: #f9b65e;"
>
</div>
<div
class=
"f14 ml10"
>
未处置
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 视频监控 -->
<div
class=
"wp100 relative"
style=
"margin: 25px 0;height: 388px;"
>
<div
class=
"relative"
>
<img
class=
"wp100"
style=
"height: 52px;"
src=
"../static/sub-title-1.png"
alt=
""
>
<div
class=
"poa-cover"
>
<div
class=
"ml40 f20 color-theme"
style=
"margin-top: -4px;"
>
视频监控
</div>
</div>
</div>
<div
class=
"absolute wp100"
style=
"height: calc(100% - 52px);left: 0;top: 52px;"
>
<!-- video -->
<div
ref=
"container"
@
dblclick=
"fullscreenSwich"
style=
"width:100%;height:100%;background-color: #000000;margin:0 auto;"
>
<div
class=
"buttons-box"
id=
"buttonsBox"
>
<div
class=
"buttons-box-left"
>
<i
v-if=
"!playing"
class=
"iconfont icon-play jessibuca-btn"
@
click=
"playBtnClick"
></i>
<i
v-if=
"playing"
class=
"iconfont icon-pause jessibuca-btn"
@
click=
"pause"
></i>
<i
class=
"iconfont icon-stop jessibuca-btn"
@
click=
"destroy"
></i>
<i
v-if=
"isNotMute"
class=
"iconfont icon-audio-high jessibuca-btn"
@
click=
"mute()"
></i>
<i
v-if=
"!isNotMute"
class=
"iconfont icon-audio-mute jessibuca-btn"
@
click=
"cancelMute()"
></i>
</div>
<div
class=
"buttons-box-right"
>
<span
class=
"jessibuca-btn"
>
{{ kBps }} kb/s
</span>
<!-- <i class="iconfont icon-file-record1 jessibuca-btn"></i>-->
<!-- <i class="iconfont icon-xiangqing2 jessibuca-btn" ></i>-->
<i
class=
"iconfont icon-camera1196054easyiconnet jessibuca-btn"
@
click=
"screenshot"
style=
"font-size: 1rem !important"
></i>
<i
class=
"iconfont icon-shuaxin11 jessibuca-btn"
@
click=
"playBtnClick"
></i>
<i
v-if=
"!fullscreen"
class=
"iconfont icon-weibiaoti10 jessibuca-btn"
@
click=
"fullscreenSwich"
></i>
<i
v-if=
"fullscreen"
class=
"iconfont icon-weibiaoti11 jessibuca-btn"
@
click=
"fullscreenSwich"
></i>
</div>
</div>
</div>
<!-- video end -->
<div
class=
"h40 flex-text pointer absolute"
style=
"background-image: url('../static/button-bg.png');background-size: 100% 100%;z-index: 200;right: 20px;top: 20px;padding: 0 20px;"
@
click=
"showMask = !showMask"
>
<div
class=
"f16"
>
{{ videos
&&
videos[TabCur]
&&
videos[TabCur].name }}
</div>
<img
class=
"ml5"
style=
"width: 8px;height: 8px;"
src=
"../static/drop-down.png"
alt=
""
>
<div
class=
"absolute selece-box wp100"
style=
"left: 0;bottom: 0;transform: translateY(calc(100% + 10px)); z-index: 200;"
v-show=
"showMask"
>
<div
class=
""
style=
"background-color: rgba(13,27,48,.7);border-radius: 5px;overflow-y: scroll;max-height: 185px;"
>
<div
style=
"padding: 5px 0;"
>
<div
class=
"f15 h35 flex-text select"
:class=
"index == TabCur?'color-light':''"
style=
"padding: 0 10px;"
v-for=
"(item,index) in videos"
:key=
"index"
@
click.stop=
"chickVideo(item,index)"
>
<div
class=
"flex-1 ellipsis"
>
{{ item.name }}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 井下24小时人数变化趋势 -->
<div
class=
"wp100"
>
<div
class=
"relative"
>
<img
class=
"wp100"
style=
"height: 52px;"
src=
"../static/sub-title-1.png"
alt=
""
>
<div
class=
"poa-cover"
>
<div
class=
"ml40 f20 color-theme"
style=
"margin-top: -4px;"
>
井下24小时人数变化趋势
</div>
</div>
</div>
<div
class=
"flex space-end"
style=
"height: 14px;"
>
<div
class=
"flex-text"
>
<div
class=
"round"
style=
"width: 10px;height: 10px;background-color: #6dd1b9;"
></div>
<div
class=
"color-theme ml10 f14"
>
井下人数
</div>
</div>
<div
class=
"flex-text ml20"
>
<div
class=
"round"
style=
"width: 10px;height: 10px;background-color: #fca83b;"
></div>
<div
class=
"color-theme ml10 f14"
>
入井
</div>
</div>
<div
class=
"flex-text ml20 mr15"
>
<div
class=
"round"
style=
"width: 10px;height: 10px;background-color: #0a9fca;"
></div>
<div
class=
"color-theme ml10 f14"
>
出井
</div>
</div>
</div>
<div
class=
"mt5"
id=
"line"
style=
"width: 100%;height:213px;"
></div>
</div>
</div>
</div>
</div>
<!-- 公告弹窗 -->
<div
class=
"fixed maxIndex wp100 hv100 flex-text"
style=
"left: 0;top: 0;"
v-if=
"noticeMask && isReady"
>
<div
class=
"bg-mask relative"
style=
"border-radius: 10px;width: 1200px;height: 55vh;padding: 30px;"
>
<div
class=
"flex align-center space-between"
>
<div></div>
<img
class=
"pointer mr10"
style=
"width: 35px;height: 35px;"
src=
"../static/close-icon.png"
alt=
""
@
click=
"noticeMask = false"
>
</div>
<div
class=
"absolute"
style=
"line-height: 1.6;max-height: calc(100% - 125px);overflow-y: auto;margin-top: 30px;width: calc(100% - 80px);"
>
<div
class=
"flex align-start f18"
>
<div
class=
"text-right color-theme"
style=
"width: 10%;"
>
标题:
</div>
<div
class=
"flex-1 ml20"
style=
"margin-right: 100px;"
>
{{ notice.title }}
</div>
</div>
<div
class=
"flex align-start f18 mt20"
>
<div
class=
"text-right color-theme"
style=
"width: 10%;"
>
类型:
</div>
<div
class=
"flex-1 ml20"
style=
"margin-right: 100px;"
>
{{ notice.type }}
</div>
</div>
<div
class=
"flex align-start f18 mt20"
>
<div
class=
"text-right color-theme"
style=
"width: 10%;"
>
描述:
</div>
<div
class=
"flex-1 ml20"
style=
"margin-right: 100px;"
>
{{ notice.desc }}
</div>
</div>
<div
class=
"flex align-start f18 mt20"
>
<div
class=
"text-right color-theme"
style=
"width: 10%;"
>
通知矿山:
</div>
<div
class=
"flex-1 ml20"
style=
"margin-right: 100px;"
>
{{ notice.mine }}
</div>
</div>
<div
class=
"flex align-start f18 mt20"
>
<div
class=
"text-right color-theme"
style=
"width: 10%;"
>
附件:
</div>
<div
class=
"flex-1 ml20"
style=
"margin-right: 100px;"
>
<a
class=
"color-white"
:href=
"notice.annexLink"
target=
"_blank"
>
{{ notice.annexName }}
</a>
</div>
</div>
</div>
</div>
</div>
</body>
<!-- 引入echarts -->
<script
src=
"../js/echarts.min.js"
></script>
<script
src=
"../js/echarts-gl.js"
></script>
<!-- 引入组件库 -->
<script
src=
"../js/element-ui.js"
></script>
<!-- 引入高德js -->
<script
src=
"../js/maps.js"
></script>
<script
src=
"../js/loca.js"
></script>
<script
src=
"../js/es5.min.js"
></script>
<script
src=
"../js/maps-MouseTool.js"
></script>
<!-- axios -->
<script
src=
"../js/axios.min.js"
></script>
<!-- cookie -->
<script
src=
"../js/js.cookie.js"
></script>
<script
type=
"text/javascript"
src=
"../static/js/jessibuca/jessibuca.js"
></script>
<script
type=
"text/javascript"
src=
"../static/js/EasyWasmPlayer.js"
></script>
<script
type=
"text/javascript"
src=
"../static/js/liveplayer-lib.min.js"
></script>
<script
type=
"text/javascript"
src=
"../static/js/ZLMRTCClient.js"
></script>
<script
type=
"text/javascript"
src=
"../static/js/config.js"
></script>
<script>
let
jessibucaPlayer
=
{};
const
host
=
location
.
protocol
+
'
//
'
+
window
.
location
.
host
;
const
token
=
Cookies
.
get
(
'
ELADMIN-TOEKN
'
);
axios
=
axios
.
create
({
headers
:
{
'
Authorization
'
:
token
}
});
axios
.
interceptors
.
response
.
use
(
response
=>
{
return
response
},
error
=>
{
console
.
error
(
error
)
let
code
=
0
try
{
code
=
error
.
response
.
data
.
status
}
catch
(
e
)
{
if
(
error
.
toString
().
indexOf
(
'
Error: timeout
'
)
!==
-
1
)
{
console
.
error
(
'
当前网络不佳
'
)
return
}
}
if
(
!
code
)
{
console
.
error
(
'
当前网络不佳
'
)
return
}
if
(
code
===
401
)
{
alert
(
'
登录信息失效,请重新登录
'
)
window
.
open
(
host
+
'
/#/login
'
,
'
_self
'
)
return
}
if
(
code
===
400
&&
message
===
'
不允许访问
'
)
{
alert
(
'
您没有权限使用此功能,请联系管理员开通
'
)
return
}
});
var
map
;
// 地图
new
Vue
({
el
:
'
#app
'
,
data
()
{
return
{
// video
videoUrl
:
null
,
error
:
null
,
hasAudio
:
false
,
height
:
null
,
playing
:
false
,
isNotMute
:
false
,
quieting
:
false
,
fullscreen
:
false
,
loaded
:
false
,
// mute
speed
:
0
,
performance
:
""
,
// 工作情况
kBps
:
0
,
btnDom
:
null
,
videoInfo
:
null
,
volume
:
1
,
rotate
:
0
,
vod
:
true
,
// 点播
forceNoOffscreen
:
false
,
// video end
selectedMine
:
{},
isReady
:
false
,
// 页面是否准备好 请求完接口变为true
clientHeight
:
document
.
body
.
clientHeight
,
clientWidth
:
document
.
body
.
clientWidth
,
heightScale
:
1
,
widthScale
:
1
,
// 公告信息
notice
:
{
title
:
'
【应急公告】通知各矿山,10点之前停止应急作业,通知各矿山,10点之前停止应急作业,通知各矿山,10点之前停止应急作业!
'
,
type
:
'
应急公告
'
,
desc
:
'
由于气象原因,通知各矿山,10点之前停止应急作业。开放时间另行通知!由于气象原因,通知各矿山,10点之前停止应急作业。开放时间另行通知!由于气象原因,通知各矿山,10点之前停止应急作业。开放时间另行通知!由于气象原因,通知各矿山,10点之前停止应急作业。开放时间另行通知!
'
,
mine
:
'
所有矿山
'
,
annexName
:
'
无
'
},
noticeMask
:
false
,
// 地图marker
marker
:
[
// { id: 1, longitude: '119.970118', latitude: '36.754381', name: '青岛豪杰矿业有限公司平度市新河铁矿' },
// { id: 2, longitude: '119.93651', latitude: '36.73896', name: '山东黄金矿业(鑫汇) 有限公司矿山' },
// { id: 3, longitude: '119.986807', latitude: '36.791217', name: '青岛平度市旧店金矿二号脉矿区' }
],
info
:
{
department
:
'
生产部
'
,
userName
:
'
某某某
'
,
status
:
'
下井
'
,
people
:
'
10000
'
,
alarm
:
'
10
'
,
help
:
'
10
'
},
isGIS
:
true
,
// 是否是卫星地图
planImg
:
'
https://s3.bmp.ovh/imgs/2023/03/02/4164f9300321b7da.png
'
,
// 平面图
// 区域人数统计
areaPeople
:
[
{
id
:
1
,
name
:
'
矿石开采加工区
'
,
people
:
'
60
'
,
current
:
'
30
'
,
statusTxt
:
'
正常
'
,
status
:
0
},
{
id
:
2
,
name
:
'
2号开采区
'
,
people
:
'
50
'
,
current
:
'
52
'
,
statusTxt
:
'
报警
'
,
status
:
1
},
{
id
:
3
,
name
:
'
矿石开采加工区
'
,
people
:
'
60
'
,
current
:
'
30
'
,
statusTxt
:
'
正常
'
,
status
:
0
},
{
id
:
4
,
name
:
'
2号开采区
'
,
people
:
'
50
'
,
current
:
'
52
'
,
statusTxt
:
'
报警
'
,
status
:
1
},
{
id
:
5
,
name
:
'
矿石开采加工区
'
,
people
:
'
60
'
,
current
:
'
30
'
,
statusTxt
:
'
正常
'
,
status
:
0
},
{
id
:
6
,
name
:
'
2号开采区
'
,
people
:
'
50
'
,
current
:
'
52
'
,
statusTxt
:
'
报警
'
,
status
:
1
},
],
// 井下人员实时状态
pitPeople
:
[
{
id
:
1
,
userName
:
'
某某某
'
,
position
:
'
青岛豪杰矿业矿区开采区
'
,
time
:
'
2023-02-14 09:57
'
,
department
:
'
开采部
'
},
{
id
:
2
,
userName
:
'
某某
'
,
position
:
'
青岛豪杰矿业矿区生产区
'
,
time
:
'
2023-02-14 09:57
'
,
department
:
'
生产部
'
},
{
id
:
3
,
userName
:
'
某某某
'
,
position
:
'
青岛豪杰矿业矿区开采区
'
,
time
:
'
2023-02-14 09:57
'
,
department
:
'
开采部
'
},
{
id
:
4
,
userName
:
'
某某
'
,
position
:
'
青岛豪杰矿业矿区生产区
'
,
time
:
'
2023-02-14 09:57
'
,
department
:
'
生产部
'
},
{
id
:
5
,
userName
:
'
某某某
'
,
position
:
'
青岛豪杰矿业矿区开采区
'
,
time
:
'
2023-02-14 09:57
'
,
department
:
'
开采部
'
},
{
id
:
6
,
userName
:
'
某某
'
,
position
:
'
青岛豪杰矿业矿区生产区
'
,
time
:
'
2023-02-14 09:57
'
,
department
:
'
生产部
'
},
],
// 视频监控
videos
:
[
{
id
:
1
,
videoUrl
:
'
https://stream7.iqilu.com/10339/upload_transcode/202002/18/20200218093206z8V1JuPlpe.mp4
'
,
name
:
'
视频点名称
'
},
],
TabCur
:
0
,
showMask
:
false
}
},
watch
:
{
videoUrl
(
newData
,
oldData
)
{
this
.
play
(
newData
)
},
immediate
:
true
},
mounted
()
{
if
(
!
token
)
{
window
.
open
(
host
+
'
/#/login
'
,
'
_self
'
)
return
}
let
mapCenter
=
[
119.970118
,
36.754381
]
// 当前矿山
const
selectedMineJson
=
window
.
localStorage
.
getItem
(
'
kd.selected.mine
'
)
let
noMine
=
false
if
(
!
selectedMineJson
)
{
noMine
=
true
}
else
{
const
selectedMine
=
JSON
.
parse
(
selectedMineJson
)
// if (!selectedMine || selectedMine.enterpriseId !== this.user.enterpriseId) {
// noMine = true
// } else {
console
.
log
(
selectedMine
)
if
(
selectedMine
&&
selectedMine
.
name
&&
selectedMine
.
longitude
&&
selectedMine
.
latitude
){
this
.
marker
=
[{
id
:
1
,
longitude
:
selectedMine
.
longitude
,
latitude
:
selectedMine
.
latitude
,
name
:
selectedMine
.
name
}]
mapCenter
=
[
selectedMine
.
longitude
,
selectedMine
.
latitude
]
}
this
.
selectedMine
=
selectedMine
// }
}
if
(
noMine
)
{
alert
(
'
您当前还未选择矿山,请先选择矿山再查看此大屏
'
)
window
.
history
.
go
(
-
1
)
return
}
if
(
this
.
selectedMine
.
mineType
!=
1
)
{
alert
(
'
您当前选择的不是地下矿山,请先选择地下矿山,再查看此大屏
'
)
window
.
history
.
go
(
-
1
)
return
}
this
.
heightScale
=
(
this
.
clientHeight
-
110
)
/
970
this
.
widthScale
=
this
.
clientWidth
/
1920
window
.
onresize
=
()
=>
{
location
.
reload
()
}
map
=
new
AMap
.
Map
(
'
map
'
,
{
zoom
:
14
,
// 缩放级别
zooms
:
[
3
,
16
],
layers
:
[
// 卫星
new
AMap
.
TileLayer
.
Satellite
(),
],
viewMode
:
'
3D
'
,
// 地图模式
pitch
:
40
,
//设置俯仰角
center
:
mapCenter
// 中心经纬度
})
// 循环绘制marker
for
(
var
i
=
0
;
i
<
this
.
marker
.
length
;
i
++
)
{
var
marker
=
new
AMap
.
Marker
({
position
:
[
Number
(
this
.
marker
[
i
].
longitude
),
Number
(
this
.
marker
[
i
].
latitude
)],
icon
:
new
AMap
.
Icon
({
image
:
'
https://s3.bmp.ovh/imgs/2023/02/28/a3be161800e3f011.png
'
,
size
:
new
AMap
.
Size
(
50
,
50
),
//图标大小
imageSize
:
new
AMap
.
Size
(
50
,
50
)
}),
offset
:
new
AMap
.
Pixel
(
-
25
,
-
25
)
});
marker
.
setLabel
({
offset
:
new
AMap
.
Pixel
(
0
,
-
10
),
//设置文本标注偏移量
content
:
`<div class="bg-mask h30 flex-text f16 mask-box-s" style="padding: 0 15px;border-radius: 6px;">
${
this
.
marker
[
i
].
name
}
</div>`
,
//设置文本标注内容
direction
:
'
top
'
//设置文本标注方位
})
map
.
add
(
marker
)
}
map
.
resize
()
this
.
getData
()
axios
.
get
(
'
/api/video/link-mine
'
,
{
params
:
{
mineType
:
this
.
selectedMine
.
mineType
,
mineId
:
this
.
selectedMine
.
id
,
}
}).
then
(
resopnse
=>
{
this
.
videos
=
[]
let
firstVideo
=
null
resopnse
.
data
.
results
.
forEach
(
vm
=>
{
let
video
=
{
'
id
'
:
vm
.
id
,
'
videoUrl
'
:
null
,
'
name
'
:
vm
.
name
,
'
videoId
'
:
vm
.
videoId
,
'
deviceId
'
:
vm
.
deviceId
}
firstVideo
=
firstVideo
||
video
this
.
videos
.
push
(
video
)
})
if
(
firstVideo
)
{
this
.
chickVideo
(
firstVideo
,
0
)
}
})
},
methods
:
{
// video
updatePlayerDomSize
()
{
let
dom
=
this
.
$refs
.
container
;
let
width
=
dom
.
parentNode
.
clientWidth
let
height
=
(
9
/
16
)
*
width
const
clientHeight
=
Math
.
min
(
document
.
body
.
clientHeight
,
document
.
documentElement
.
clientHeight
)
if
(
height
>
clientHeight
)
{
height
=
clientHeight
width
=
(
16
/
9
)
*
height
}
dom
.
style
.
width
=
width
+
'
px
'
;
dom
.
style
.
height
=
height
+
"
px
"
;
},
create
()
{
let
options
=
{};
console
.
log
(
"
hasAudio
"
+
this
.
hasAudio
)
jessibucaPlayer
[
this
.
_uid
]
=
new
window
.
Jessibuca
(
Object
.
assign
(
{
container
:
this
.
$refs
.
container
,
autoWasm
:
true
,
background
:
""
,
controlAutoHide
:
false
,
debug
:
false
,
decoder
:
"
static/js/jessibuca/decoder.js
"
,
forceNoOffscreen
:
true
,
hasAudio
:
typeof
(
this
.
hasAudio
)
==
"
undefined
"
?
true
:
this
.
hasAudio
,
hasVideo
:
true
,
heartTimeout
:
5
,
heartTimeoutReplay
:
true
,
heartTimeoutReplayTimes
:
3
,
hiddenAutoPause
:
false
,
hotKey
:
false
,
isFlv
:
false
,
isFullResize
:
false
,
isNotMute
:
this
.
isNotMute
,
isResize
:
false
,
keepScreenOn
:
false
,
loadingText
:
"
请稍等, 视频加载中......
"
,
loadingTimeout
:
10
,
loadingTimeoutReplay
:
true
,
loadingTimeoutReplayTimes
:
3
,
openWebglAlignment
:
false
,
operateBtns
:
{
fullscreen
:
false
,
screenshot
:
false
,
play
:
false
,
audio
:
false
,
record
:
false
},
recordType
:
"
webm
"
,
rotate
:
0
,
showBandwidth
:
false
,
supportDblclickFullscreen
:
false
,
timeout
:
10
,
useMSE
:
location
.
hostname
!==
"
localhost
"
&&
location
.
protocol
!==
"
https:
"
,
useOffscreen
:
false
,
useWCS
:
location
.
hostname
===
"
localhost
"
||
location
.
protocol
===
"
https
"
,
useWebFullScreen
:
false
,
videoBuffer
:
0
,
wasmDecodeAudioSyncVideo
:
true
,
wasmDecodeErrorReplay
:
true
,
wcsUseVideoRender
:
true
},
options
));
let
jessibuca
=
jessibucaPlayer
[
this
.
_uid
];
let
_this
=
this
;
jessibuca
.
on
(
"
load
"
,
function
()
{
console
.
log
(
"
on load init
"
);
});
jessibuca
.
on
(
"
log
"
,
function
(
msg
)
{
console
.
log
(
"
on log
"
,
msg
);
});
jessibuca
.
on
(
"
record
"
,
function
(
msg
)
{
console
.
log
(
"
on record:
"
,
msg
);
});
jessibuca
.
on
(
"
pause
"
,
function
()
{
_this
.
playing
=
false
;
});
jessibuca
.
on
(
"
play
"
,
function
()
{
_this
.
playing
=
true
;
});
jessibuca
.
on
(
"
fullscreen
"
,
function
(
msg
)
{
console
.
log
(
"
on fullscreen
"
,
msg
);
_this
.
fullscreen
=
msg
});
jessibuca
.
on
(
"
mute
"
,
function
(
msg
)
{
console
.
log
(
"
on mute
"
,
msg
);
_this
.
isNotMute
=
!
msg
;
});
jessibuca
.
on
(
"
audioInfo
"
,
function
(
msg
)
{
console
.
log
(
"
audioInfo
"
,
msg
);
});
jessibuca
.
on
(
"
bps
"
,
function
(
bps
)
{
// console.log('bps', bps);
});
let
_ts
=
0
;
jessibuca
.
on
(
"
timeUpdate
"
,
function
(
ts
)
{
// console.log('timeUpdate,old,new,timestamp', _ts, ts, ts - _ts);
_ts
=
ts
;
});
jessibuca
.
on
(
"
videoInfo
"
,
function
(
info
)
{
console
.
log
(
"
videoInfo
"
,
info
);
});
jessibuca
.
on
(
"
error
"
,
function
(
error
)
{
console
.
log
(
"
error
"
,
error
);
});
jessibuca
.
on
(
"
timeout
"
,
function
()
{
console
.
log
(
"
timeout
"
);
});
jessibuca
.
on
(
'
start
'
,
function
()
{
console
.
log
(
'
start
'
);
})
jessibuca
.
on
(
"
performance
"
,
function
(
performance
)
{
let
show
=
"
卡顿
"
;
if
(
performance
===
2
)
{
show
=
"
非常流畅
"
;
}
else
if
(
performance
===
1
)
{
show
=
"
流畅
"
;
}
_this
.
performance
=
show
;
});
jessibuca
.
on
(
'
buffer
'
,
function
(
buffer
)
{
// console.log('buffer', buffer);
})
jessibuca
.
on
(
'
stats
'
,
function
(
stats
)
{
// console.log('stats', stats);
})
jessibuca
.
on
(
'
kBps
'
,
function
(
kBps
)
{
_this
.
kBps
=
Math
.
round
(
kBps
);
});
// 显示时间戳 PTS
jessibuca
.
on
(
'
videoFrame
'
,
function
()
{
})
//
jessibuca
.
on
(
'
metadata
'
,
function
()
{
});
},
playBtnClick
:
function
(
event
)
{
this
.
play
(
this
.
videoUrl
)
},
play
:
function
(
url
)
{
console
.
log
(
url
)
if
(
jessibucaPlayer
[
this
.
_uid
])
{
this
.
destroy
();
}
this
.
create
();
jessibucaPlayer
[
this
.
_uid
].
on
(
"
play
"
,
()
=>
{
this
.
playing
=
true
;
this
.
loaded
=
true
;
this
.
quieting
=
jessibuca
.
quieting
;
});
if
(
jessibucaPlayer
[
this
.
_uid
].
hasLoaded
())
{
jessibucaPlayer
[
this
.
_uid
].
play
(
url
);
}
else
{
jessibucaPlayer
[
this
.
_uid
].
on
(
"
load
"
,
()
=>
{
console
.
log
(
"
load 播放
"
)
jessibucaPlayer
[
this
.
_uid
].
play
(
url
);
});
}
},
pause
:
function
()
{
if
(
jessibucaPlayer
[
this
.
_uid
])
{
jessibucaPlayer
[
this
.
_uid
].
pause
();
}
this
.
playing
=
false
;
this
.
err
=
""
;
this
.
performance
=
""
;
},
screenshot
:
function
()
{
if
(
jessibucaPlayer
[
this
.
_uid
])
{
jessibucaPlayer
[
this
.
_uid
].
screenshot
();
}
},
mute
:
function
()
{
if
(
jessibucaPlayer
[
this
.
_uid
])
{
jessibucaPlayer
[
this
.
_uid
].
mute
();
}
},
cancelMute
:
function
()
{
if
(
jessibucaPlayer
[
this
.
_uid
])
{
jessibucaPlayer
[
this
.
_uid
].
cancelMute
();
}
},
destroy
:
function
()
{
if
(
jessibucaPlayer
[
this
.
_uid
])
{
jessibucaPlayer
[
this
.
_uid
].
destroy
();
}
if
(
document
.
getElementById
(
"
buttonsBox
"
)
==
null
)
{
this
.
$refs
.
container
.
appendChild
(
this
.
btnDom
)
}
jessibucaPlayer
[
this
.
_uid
]
=
null
;
this
.
playing
=
false
;
this
.
err
=
""
;
this
.
performance
=
""
;
},
eventcallbacK
:
function
(
type
,
message
)
{
// console.log("player 事件回调")
// console.log(type)
// console.log(message)
},
fullscreenSwich
:
function
()
{
let
isFull
=
this
.
isFullscreen
()
jessibucaPlayer
[
this
.
_uid
].
setFullscreen
(
!
isFull
)
this
.
fullscreen
=
!
isFull
;
},
isFullscreen
:
function
()
{
return
document
.
fullscreenElement
||
document
.
msFullscreenElement
||
document
.
mozFullScreenElement
||
document
.
webkitFullscreenElement
||
false
;
},
// video end
// 点击选中一路视频
chickVideo
(
video
,
index
)
{
console
.
log
(
'
video====
'
,
video
,
index
)
if
(
video
.
videoUrl
==
null
)
{
axios
.
get
(
'
/wvp/api/play/start/
'
+
video
.
deviceId
+
'
/
'
+
video
.
videoId
).
then
(
res
=>
{
console
.
log
(
'
res====
'
,
res
)
if
(
res
.
status
&&
res
.
status
>=
200
&&
res
.
status
-
200
<
100
)
{
if
(
res
.
data
.
code
==
0
)
{
console
.
log
(
'
videos===
'
,
this
.
videos
)
this
.
videoUrl
=
res
.
data
.
data
.
ws_flv
}
}
})
}
this
.
TabCur
=
index
this
.
showMask
=
false
},
// 跳转到后台管理
gotoManagement
()
{
window
.
open
(
location
.
protocol
+
'
//
'
+
window
.
location
.
host
+
'
/#/home4Mine
'
,
'
_self
'
)
},
async
getData
(
e
)
{
var
loading
if
(
!
e
)
{
loading
=
this
.
$loading
({
lock
:
true
,
text
:
'
加载中
'
,
// spinner: 'el-icon-loading',
background
:
'
rgba(0, 0, 0, 0.7)
'
});
}
// 模拟请求
setTimeout
(()
=>
{
setTimeout
(()
=>
this
.
getData
(
'
refesh
'
),
5000
);
// 柱状图
// 基于准备好的dom,初始化echarts实例
var
barChart
=
echarts
.
init
(
document
.
getElementById
(
"
bar
"
));
barChart
.
clear
()
// 定时刷新 实际不刷新 演示用
// 绘制图表
barChart
.
setOption
({
xAxis
:
{
data
:
[
"
重点区域
"
,
"
井口区域
"
,
"
其他区域
"
,
"
限制区域
"
],
axisLine
:
{
lineStyle
:
{
color
:
'
#a3e4f5
'
}
},
axisTick
:
{
show
:
false
}
},
yAxis
:
{
splitLine
:
{
show
:
false
},
axisLabel
:
{
textStyle
:
{
color
:
'
#a3e4f5
'
}
}
},
grid
:
{
bottom
:
35
,
top
:
15
,
left
:
35
,
right
:
15
},
series
:
[
{
name
:
"
人数
"
,
type
:
"
bar
"
,
data
:
[
60
,
32
,
46
,
13
],
itemStyle
:
{
normal
:
{
color
:
new
echarts
.
graphic
.
LinearGradient
(
0
,
1
,
0
,
0
,
[{
// 四个数字分别对应 数组中颜色的开始位置,分别为 右,下,左,上。例如(1,0,0,0 )代表从右边开始渐
// 变。offset取值为0~1,0代表开始时的颜色,1代表结束时的颜色,柱子表现为这两种颜色的渐变。
offset
:
0
,
color
:
'
#0ee3f9
'
},
{
offset
:
1
,
color
:
'
#09f1f6
'
}]),
//这里设置柱形图圆角 [左上角,右上角,右下角,左下角]
barBorderRadius
:
[
100
,
100
,
0
,
0
]
}
},
barWidth
:
'
25%
'
}
]
});
// 圆环图
// 基于准备好的dom,初始化echarts实例
var
pieChart
=
echarts
.
init
(
document
.
getElementById
(
"
pie
"
));
pieChart
.
clear
()
// 定时刷新 实际不刷新 演示用
// 绘制图表
pieChart
.
setOption
({
color
:
[
'
#38d6d9
'
,
'
#ebb963
'
],
graphic
:
[
{
type
:
'
text
'
,
left
:
'
center
'
,
top
:
'
52%
'
,
style
:
{
text
:
'
500
'
,
// 中间总数
textAlign
:
'
center
'
,
fill
:
'
#37d6da
'
,
fontSize
:
24
,
}
},
{
type
:
'
text
'
,
left
:
'
center
'
,
top
:
'
40%
'
,
style
:
{
text
:
'
报警总数
'
,
textAlign
:
'
center
'
,
fill
:
'
#ffffff
'
,
fontSize
:
13
,
}
}
],
series
:
[
{
type
:
"
pie
"
,
startAngle
:
0
,
// center: ['40%', '50%'],
data
:
[
{
value
:
300
,
name
:
'
已处置:300
'
,
label
:
{
color
:
'
#ffffff
'
}
},
{
value
:
200
,
name
:
'
未处置:200
'
,
label
:
{
color
:
'
#ffffff
'
}
}
],
radius
:
[
'
50%
'
,
'
70%
'
],
itemStyle
:
{
normal
:
{
borderWidth
:
2
,
borderColor
:
'
rgba(0,0,0,.5)
'
}
}
}
]
});
// 曲线图
// 基于准备好的dom,初始化echarts实例
var
myChart
=
echarts
.
init
(
document
.
getElementById
(
"
line
"
));
myChart
.
clear
()
// 定时刷新 实际不刷新 演示用
// 绘制图表
myChart
.
setOption
({
xAxis
:
{
data
:
[
"
01时
"
,
"
02时
"
,
"
03时
"
,
"
04时
"
,
"
05时
"
,
"
06时
"
,
"
07时
"
,
"
08时
"
,
"
09时
"
,
"
10时
"
,
"
11时
"
,
"
12时
"
,
"
13时
"
,
"
14时
"
,
"
15时
"
,
"
16时
"
,
"
17时
"
,
"
18时
"
,
"
19时
"
,
"
20时
"
,
"
21时
"
,
"
22时
"
,
"
23时
"
,
"
24时
"
],
axisLine
:
{
lineStyle
:
{
color
:
'
#a3e4f5
'
}
},
axisTick
:
{
show
:
false
}
},
yAxis
:
{
splitLine
:
{
show
:
false
},
axisLabel
:
{
textStyle
:
{
color
:
'
#a3e4f5
'
}
}
},
grid
:
{
right
:
15
,
top
:
10
,
left
:
40
,
bottom
:
25
},
dataZoom
:
[
{
type
:
"
slider
"
,
show
:
false
,
startValue
:
14
,
endValue
:
23
,
// 一次性展示9个
textStyle
:
{
color
:
"
#ffffff
"
},
height
:
0
,
zoomLock
:
true
,
// 是否只平移不缩放
},
{
type
:
"
inside
"
,
//内置型数据区域缩放组件
moveOnMouseMove
:
true
// 开启鼠标移动窗口平移
}
],
series
:
[
{
name
:
"
人数
"
,
type
:
"
line
"
,
smooth
:
true
,
data
:
[
180
,
210
,
150
,
280
,
235
,
500
,
390
,
410
,
150
,
180
,
210
,
150
,
280
,
235
,
500
,
390
,
410
,
150
,
180
,
210
,
150
,
280
,
235
,
500
],
itemStyle
:
{
color
:
'
#6dd1b9
'
}
},
{
name
:
"
人数
"
,
type
:
"
line
"
,
smooth
:
true
,
data
:
[
60
,
90
,
80
,
100
,
60
,
65
,
45
,
50
,
48
,
60
,
90
,
80
,
100
,
60
,
65
,
45
,
50
,
48
,
60
,
90
,
80
,
100
,
60
,
65
],
itemStyle
:
{
color
:
'
#0a9fca
'
}
},
{
name
:
"
人数
"
,
type
:
"
line
"
,
smooth
:
true
,
data
:
[
55
,
48
,
40
,
60
,
50
,
55
,
58
,
63
,
50
,
55
,
48
,
40
,
60
,
50
,
55
,
58
,
63
,
50
,
55
,
48
,
40
,
60
,
50
,
55
],
itemStyle
:
{
color
:
'
#fca83b
'
}
}
]
});
loading
&&
loading
.
close
();
this
.
isReady
=
true
},
800
);
}
},
destroyed
()
{
if
(
jessibucaPlayer
[
this
.
_uid
])
{
jessibucaPlayer
[
this
.
_uid
].
destroy
();
}
this
.
playing
=
false
;
this
.
loaded
=
false
;
this
.
performance
=
""
;
},
})
</script>
</html>
\ No newline at end of file
public/datav/detail/water-monitor.html
0 → 100644
View file @
de4c405f
<!doctype html>
<html>
<head>
<meta
charset=
"utf-8"
>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1.0,maximum-scale=1,user-scalable=no"
/>
<title>
露天矿山数据总览
</title>
<link
rel=
"stylesheet"
href=
"../css/base.css"
>
<link
rel=
"stylesheet"
href=
"../css/index.css"
>
<!-- 引入样式 -->
<link
rel=
"stylesheet"
href=
"../css/element-ui.css"
>
<!-- 引入样式文件 -->
<link
rel=
"stylesheet"
href=
"../css/vant@4.css"
/>
<!-- 先引入 Vue -->
<script
src=
"../js/vue.min.js"
></script>
<!-- 引入 Vue 和 Vant 的 JS 文件 -->
<script
src=
"../js/vue@2.6.14"
></script>
<script
src=
"../js/vant.min.js"
></script>
<style>
.amap-logo
{
z-index
:
-10
;
}
.amap-copyright
{
z-index
:
-10
;
}
.el-autocomplete-suggestion
{
width
:
330px
!important
;
}
.buttons-box
{
width
:
100%
;
height
:
28px
;
background-color
:
rgba
(
43
,
51
,
63
,
0.7
);
position
:
absolute
;
display
:
-webkit-box
;
display
:
-ms-flexbox
;
display
:
flex
;
left
:
0
;
bottom
:
0
;
user-select
:
none
;
z-index
:
10
;
}
.jessibuca-btn
{
width
:
20px
;
color
:
rgb
(
255
,
255
,
255
);
line-height
:
27px
;
margin
:
0px
10px
;
padding
:
0px
2px
;
cursor
:
pointer
;
text-align
:
center
;
font-size
:
0.8rem
!important
;
}
.buttons-box-right
{
position
:
absolute
;
right
:
0
;
}
.mineInfo
{
padding-left
:
10px
;
}
.mineInfo
p
{
margin-top
:
6px
;
margin-bottom
:
6px
;
}
.menuInfo
{
overflow
:
hidden
;
margin-top
:
28px
;
margin-left
:
10px
;
}
.menuInfo
li
{
float
:
left
;
margin-right
:
16px
;
margin-bottom
:
16px
;
width
:
100px
;
height
:
30px
;
text-align
:
center
;
line-height
:
30px
;
cursor
:
pointer
;
background-image
:
url('./static/detail/menuBtnBg.png')
;
background-size
:
cover
;
}
.menuInfo
li
:hover
{
background-color
:
#084291
;
}
.menuInfo
li
.active
{
background-color
:
#084291
;
}
/*elementui 样式重写*/
.el-range-editor
.el-range-input
{
background
:
transparent
;
color
:
#dbdbdb
;
}
.el-range-editor.el-input__inner
{
border
:
1px
solid
#7c7e7f
!important
;
}
.el-input--small
.el-input__inner
{
color
:
#bababa
!important
;
}
.el-date-editor
.el-range__icon
{
margin-left
:
5px
;
}
section
{
width
:
440px
;
}
section
.header
{
height
:
40px
;
background-color
:
#b8b1b266
;
line-height
:
40px
;
border-bottom
:
1px
solid
#9797ac
;
cursor
:
pointer
;
}
section
.header
.el-icon-caret-right
:before
,
section
.header
.el-icon-caret-down
:before
{
content
:
"\e791"
;
color
:
#a5a4a4
;
font-size
:
22px
;
}
section
.list-wrapper
{
max-height
:
300px
;
overflow-y
:
auto
;
}
section
.list-item
{
height
:
40px
;
margin-left
:
20px
;
line-height
:
40px
;
border-bottom
:
1px
solid
#fff
;
cursor
:
pointer
;
}
section
.list-item
.el-icon-caret-right
:before
{
content
:
"\e791"
;
color
:
#a5a4a4
;
font-size
:
18px
;
}
</style>
</head>
<body
style=
"background-image: url('../static/bg-img.png');background-size: 100% 100%;"
>
<div
id=
"app"
>
<div
class=
"fixed wp100 hv100"
style=
"background-color: #000000;left: 0;top: 0;z-index: 1999;"
v-show=
"!isReady"
></div>
<!-- title -->
<!--<div style="height: 80px;">
<div class="flex-text color-theme f30 wp100 relative maxIndex fixed"
style="height: 80px;background-image: url('../static/title-bg.png');background-size: 100% 100%;">
<div style="margin-top: -10px;">{{selectedMine.name || ''}}</div>
</div>
</div>-->
<div
style=
"height: 80px;"
>
<div
class=
"flex-text color-theme f30 wp100 relative maxIndex fixed"
style=
"height: 80px;"
>
<div
class=
"flex-1"
style=
"background-image: url('../static/title-bg-left.png');background-size: 100% 100%;height: 80px;"
>
</div>
<div
class=
"flex-text"
style=
"background-image: url('../static/title-bg-center.png');background-size: 100% 100%;height: 80px;"
>
<div
style=
"margin-top: -10px;"
>
{{selectedMine.name || ''}}
</div>
</div>
<div
class=
"flex-1"
style=
"background-image: url('../static/title-bg-right.png');background-size: 100% 100%;height: 80px;"
>
</div>
</div>
</div>
<div
class=
"fixed flex-text maxIndex pointer"
style=
"left: 30px;top: 45px;"
@
click=
"history.back()"
>
<img
style=
"width: 24px;height: 24px;"
src=
"../static/backPage.png"
alt=
""
>
<div
class=
"f20 color-theme ml10"
>
返回
</div>
</div>
<div
class=
"fixed flex-text maxIndex pointer"
style=
"right: 30px;top: 45px;"
@
click=
"gotoManagement()"
>
<img
style=
"width: 24px;height: 24px;"
src=
"../static/backstage.png"
alt=
""
>
<div
class=
"f20 color-theme ml10"
>
后台管理
</div>
</div>
<div
class=
"flex-text ml10 mr10 mt15"
>
<div
style=
"width: 490px;height: calc(100vh - 110px);"
>
<!-- 通知公告 -->
<div
style=
"background: linear-gradient(to bottom, rgba(13,27,48,.7), rgba(13,27,48,0));"
>
<!-- <div class="h50 flex-text pointer"
style="background: linear-gradient(to bottom, rgba(171,238,255,0), rgba(171,238,255,.2));border-bottom: 1px solid rgba(171,238,255,.5);">
<div class="flex-1" v-if="isReady">
<van-notice-bar background="none" left-icon="volume-o" color="#ffffff" :speed="80"
:text="notice.title" @click="noticeMask = true" />
</div>
</div> -->
<div
class=
"mineInfo"
>
<p>
矿山名称: 淄博红圈石料厂
</p>
<p>
矿山地质:谁看得见风离开世界的副卡时刻记得发
</p>
<p>
联系人:开始对
</p>
<p>
联系方式:xxx
</p>
</div>
<div
class=
"menuInfo"
>
<ul>
<li
@
click=
"changeMenu('video')"
:class=
"{active: bigScreenDetailMenu==='video'}"
>
视频监控
</li>
<li
@
click=
"changeMenu('shape')"
:class=
"{active: bigScreenDetailMenu==='shape'}"
>
变形监测
</li>
<li
@
click=
"changeMenu('temprate')"
:class=
"{active: bigScreenDetailMenu==='temprate'}"
>
温度监测
</li>
<li
@
click=
"changeMenu('wind')"
:class=
"{active: bigScreenDetailMenu==='wind'}"
>
风速监测
</li>
<li
@
click=
"changeMenu('water')"
:class=
"{active: bigScreenDetailMenu==='water'}"
>
降水监测
</li>
<li
@
click=
"changeMenu('people')"
:class=
"{active: bigScreenDetailMenu==='people'}"
>
人员定位
</li>
</ul>
</div>
</div>
<!-- 视频监控列表 -->
<div
class=
"relative mt20"
style=
"width: 490px;height: calc(100vh - 170px);"
>
<section>
<div
class=
"list-wrapper"
v-show=
"showMenu4bianpo"
>
<div
class=
"list-item"
><i
class=
"el-icon-caret-right"
></i><span>
xxxxx监测点
</span></div>
<div
class=
"list-item"
><i
class=
"el-icon-caret-right"
></i><span>
xxxxx监测点
</span></div>
<div
class=
"list-item"
><i
class=
"el-icon-caret-right"
></i><span>
xxxxx监测点
</span></div>
</div>
</section>
</div>
</div>
<div
class=
"flex-1 ml15 flex-text flex-column ovh"
style=
"height: calc(100vh - 110px);"
>
<!-- 视频监控 -->
<div
class=
"flex-1 wp100 relative"
style=
"margin-bottom: 25px;"
>
<!-- 井下24小时人数变化趋势 -->
<div
class=
"wp100"
>
<div
class=
"relative"
>
<el-date-picker
style=
"width: 290px !important;"
v-model=
"createTime"
type=
"datetimerange"
range-separator=
"至"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
align=
"right"
>
</el-date-picker>
</div>
<div
class=
"flex-text"
style=
"height: 0px;"
>
<div
class=
"flex-text"
>
<div
class=
"round"
style=
"width: 10px;height: 10px;background-color: #6dd1b9;"
></div>
<div
class=
"color-theme ml10 f14"
>
井下人数
</div>
</div>
<div
class=
"flex-text ml20"
>
<div
class=
"round"
style=
"width: 10px;height: 10px;background-color: #fca83b;"
></div>
<div
class=
"color-theme ml10 f14"
>
入井
</div>
</div>
<div
class=
"flex-text ml20 mr15"
>
<div
class=
"round"
style=
"width: 10px;height: 10px;background-color: #0a9fca;"
></div>
<div
class=
"color-theme ml10 f14"
>
出井
</div>
</div>
</div>
<div
class=
"mt5"
id=
"line"
style=
"width: 100%;height:313px;"
></div>
</div>
<!-- video end -->
</div>
<div
class=
"flex-text wp100"
>
<!-- 视频ai报警 列表 -->
<div
class=
"flex-1 ml15 ovh"
>
<div
class=
"h44 f18 flex-text"
style=
"background: linear-gradient(to bottom, rgba(171,238,255,.15), rgba(171,238,255,.3));border-bottom: 1px solid #abeeff;"
>
<div
class=
"flex-1"
>
<div
class=
"ml25"
>
视频名称
</div>
</div>
<div
class=
"text-center flex-1 ml30"
>
报警类型
</div>
<div
class=
"text-center"
style=
"width: 300px;"
>
报警时间
</div>
<div
class=
"text-center"
style=
"width: 140px;"
>
图片
</div>
<div
style=
"width: 3px;"
class=
"h44"
></div>
</div>
<div
class=
""
style=
"height: 247px;overflow-y: scroll;"
>
<div
class=
"h44 color-theme flex-text f17 ovh"
:class=
"'bg-list-' + (index % 2)"
:style=
"{ marginTop: index == 0 ? '' : '2px' }"
v-for=
"(item,index) in aiList"
:key=
"index"
>
<div
class=
"ovh flex-1"
>
<div
class=
"ellipsis ml25"
>
{{ item.videoName }}
</div>
</div>
<div
class=
"ovh text-center flex-1 ml30"
>
<div
class=
"ellipsis"
>
{{ item.warnTypeName }}
</div>
</div>
<div
class=
"text-center"
style=
"width: 300px;"
>
{{ item.warnDatetime }}
</div>
<div
class=
"flex-text"
style=
"width: 140px;"
>
<div
class=
"pointer flex-text"
style=
"border-bottom: 1px solid #abeeff;height: 28px;box-sizing: border-box;"
@
click=
"imageMaskUrl = '/file'+item.warnImg"
>
查看图片
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 图片 mask -->
<div
class=
"fixed wp100 hv100 flex-text maxIndex"
style=
"left: 0;top: 0;background-color: rgba(0,0,0,1);"
v-if=
"imageMaskUrl"
>
<div
class=
""
style=
"width: 1200px;max-height: 100vh;overflow-y: auto;"
>
<img
class=
"wp100"
:src=
"imageMaskUrl"
alt=
""
>
</div>
<img
class=
"absolute pointer"
style=
"width: 35px;height: 35px;top: 30px;right: 30px;"
src=
"../static/close-icon.png"
alt=
""
@
click=
"imageMaskUrl = ''"
>
</div>
<!-- 公告弹窗 -->
<div
class=
"fixed maxIndex wp100 hv100 flex-text"
style=
"left: 0;top: 0;"
v-if=
"noticeMask && isReady"
>
<div
class=
"bg-mask relative"
style=
"border-radius: 10px;width: 1200px;height: 55vh;padding: 30px;"
>
<div
class=
"flex align-center space-between"
>
<div></div>
<img
class=
"pointer mr10"
style=
"width: 35px;height: 35px;"
src=
"../static/close-icon.png"
alt=
""
@
click=
"noticeMask = false"
>
</div>
<div
class=
"absolute"
style=
"line-height: 1.6;max-height: calc(100% - 125px);overflow-y: auto;margin-top: 30px;width: calc(100% - 80px);"
>
<div
class=
"flex align-start f18"
>
<div
class=
"text-right color-theme"
style=
"width: 10%;"
>
标题:
</div>
<div
class=
"flex-1 ml20"
style=
"margin-right: 100px;"
>
{{ notice.title }}
</div>
</div>
<div
class=
"flex align-start f18 mt20"
>
<div
class=
"text-right color-theme"
style=
"width: 10%;"
>
类型:
</div>
<div
class=
"flex-1 ml20"
style=
"margin-right: 100px;"
>
{{ notice.type }}
</div>
</div>
<div
class=
"flex align-start f18 mt20"
>
<div
class=
"text-right color-theme"
style=
"width: 10%;"
>
描述:
</div>
<div
class=
"flex-1 ml20"
style=
"margin-right: 100px;"
>
{{ notice.desc }}
</div>
</div>
<div
class=
"flex align-start f18 mt20"
>
<div
class=
"text-right color-theme"
style=
"width: 10%;"
>
通知矿山:
</div>
<div
class=
"flex-1 ml20"
style=
"margin-right: 100px;"
>
{{ notice.mine }}
</div>
</div>
<div
class=
"flex align-start f18 mt20"
>
<div
class=
"text-right color-theme"
style=
"width: 10%;"
>
附件:
</div>
<div
class=
"flex-1 ml20"
style=
"margin-right: 100px;"
>
<a
class=
"color-white"
:href=
"notice.annexLink"
target=
"_blank"
>
{{ notice.annexName
}}
</a>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
<!-- 引入echarts -->
<script
src=
"../js/echarts.min.js"
></script>
<script
src=
"../js/echarts-gl.js"
></script>
<!-- 引入组件库 -->
<script
src=
"../js/element-ui.js"
></script>
<!-- 引入高德js -->
<script
src=
"../js/maps.js"
></script>
<script
src=
"../js/loca.js"
></script>
<script
src=
"../js/es5.min.js"
></script>
<script
src=
"../js/maps-MouseTool.js"
></script>
<!-- axios -->
<script
src=
"../js/axios.min.js"
></script>
<!-- cookie -->
<script
src=
"../js/js.cookie.js"
></script>
<!-- <script type="text/javascript" src="../static/js/jessibuca/jessibuca.js"></script>
<script type="text/javascript" src="../static/js/EasyWasmPlayer.js"></script>
<script type="text/javascript" src="../static/js/liveplayer-lib.min.js"></script>
<script type="text/javascript" src="../static/js/ZLMRTCClient.js"></script> -->
<script
type=
"text/javascript"
src=
"../static/ezuikit-js/ezuikit.js"
></script>
<script
type=
"text/javascript"
src=
"../static/js/config.js"
></script>
<script>
let
jessibucaPlayer
=
{};
//const host = location.protocol + '//' + window.location.host;
const
token
=
Cookies
.
get
(
'
ELADMIN-TOEKN
'
);
const
Axiosx
=
axios
.
create
({
headers
:
{
'
Authorization
'
:
token
}
});
Axiosx
.
interceptors
.
response
.
use
(
response
=>
{
return
response
},
error
=>
{
console
.
error
(
error
)
let
code
=
0
try
{
code
=
error
.
response
.
data
.
status
}
catch
(
e
)
{
if
(
error
.
toString
().
indexOf
(
'
Error: timeout
'
)
!==
-
1
)
{
console
.
error
(
'
当前网络不佳
'
)
return
}
}
if
(
!
code
)
{
console
.
error
(
'
当前网络不佳
'
)
return
}
if
(
code
===
401
)
{
alert
(
'
登录信息失效,请重新登录
'
)
window
.
open
(
host
+
'
/#/login
'
,
'
_self
'
)
return
}
if
(
code
===
400
&&
message
===
'
不允许访问
'
)
{
alert
(
'
您没有权限使用此功能,请联系管理员开通
'
)
return
}
}
);
const
host
=
location
.
protocol
+
'
//
'
+
(
location
.
hostname
===
'
192.168.3.226
'
?
'
192.168.3.37
'
:
'
192.168.13.200
'
)
+
'
:8013
'
;
const
selfHost
=
location
.
hostname
===
'
192.168.3.226
'
?
'
http://192.168.3.226:8057
'
:
location
.
protocol
+
'
//
'
+
window
.
location
.
host
;
// 请求 token 用
const
request
=
axios
.
create
({});
request
.
defaults
.
headers
[
'
Content-Type
'
]
=
'
application/x-www-form-urlencoded; charset=UTF-8
'
;
var
map
;
// 地图
new
Vue
({
el
:
'
#app
'
,
data
()
{
return
{
showMenu4bianpo
:
true
,
showMenu4weikuangku
:
true
,
showMenu4chenjiang
:
true
,
showMenu4diya
:
true
,
createTime
:
''
,
bigScreenDetailMenu
:
''
,
// video
aiWarnCount
:
0
,
videoUrl
:
null
,
error
:
null
,
hasAudio
:
false
,
height
:
null
,
playing
:
false
,
isNotMute
:
false
,
quieting
:
false
,
fullscreen
:
false
,
loaded
:
false
,
// mute
speed
:
0
,
performance
:
""
,
// 工作情况
kBps
:
0
,
btnDom
:
null
,
videoInfo
:
null
,
volume
:
1
,
rotate
:
0
,
vod
:
true
,
// 点播
forceNoOffscreen
:
false
,
// video end
selectedMine
:
{},
isReady
:
false
,
// 页面是否准备好 请求完接口变为true
// 公告信息
notice
:
{
title
:
'
【应急公告】通知各矿山,10点之前停止应急作业,通知各矿山,10点之前停止应急作业,通知各矿山,10点之前停止应急作业!
'
,
type
:
'
应急公告
'
,
desc
:
'
由于气象原因,通知各矿山,10点之前停止应急作业。开放时间另行通知!由于气象原因,通知各矿山,10点之前停止应急作业。开放时间另行通知!由于气象原因,通知各矿山,10点之前停止应急作业。开放时间另行通知!由于气象原因,通知各矿山,10点之前停止应急作业。开放时间另行通知!
'
,
mine
:
'
所有矿山
'
,
annexName
:
'
无
'
},
noticeMask
:
false
,
// 视频监控列表
// 视频监控
videos
:
[
{
id
:
1
,
video
:
'
https://stream7.iqilu.com/10339/upload_transcode/202002/18/20200218093206z8V1JuPlpe.mp4
'
,
name
:
'
青岛豪杰矿业有限公司平度市新
'
},
],
TabCur
:
0
,
// 视频ai报警 列表
aiList
:
[],
imageMaskUrl
:
''
}
},
watch
:
{
videoUrl
(
newData
,
oldData
)
{
this
.
play
(
newData
)
},
immediate
:
true
},
mounted
()
{
if
(
!
token
)
{
window
.
open
(
host
+
'
/#/login
'
,
'
_self
'
)
return
}
this
.
bigScreenDetailMenu
=
window
.
localStorage
.
getItem
(
'
bigScreenDetailMenu
'
)
// 当前矿山
const
selectedMineJson
=
window
.
localStorage
.
getItem
(
'
kd.selected.mine
'
)
let
noMine
=
false
if
(
!
selectedMineJson
)
{
noMine
=
true
}
else
{
const
selectedMine
=
JSON
.
parse
(
selectedMineJson
)
// if (!selectedMine || selectedMine.enterpriseId !== this.user.enterpriseId) {
// noMine = true
// } else {
this
.
selectedMine
=
selectedMine
// }
}
if
(
noMine
)
{
alert
(
'
您当前还未选择矿山,请先选择矿山再查看此大屏
'
)
window
.
history
.
go
(
-
1
)
return
}
if
(
this
.
selectedMine
.
mineType
!=
2
)
{
alert
(
'
您当前选择的不是露天矿山,请先选择露天矿山,再查看此大屏
'
)
window
.
history
.
go
(
-
1
)
return
}
this
.
getData
();
// 视频列表
Axiosx
.
get
(
host
+
'
/api/video-mine/mineId
'
,
{
params
:
{
//mineType: this.selectedMine.mineType,
mineId
:
this
.
selectedMine
.
id
,
}
}).
then
(
res
=>
{
res
=
res
.
data
.
body
;
this
.
info
=
{
appKey
:
res
.
appKey
,
appSecret
:
res
.
appSecret
,
};
this
.
videos
=
res
.
videoChannelList
||
[];
this
.
createVideo
(
res
.
videoChannelList
[
0
]);
});
},
methods
:
{
menuChange
(
type
)
{
[
'
showMenu4bianpo
'
,
'
showMenu4weikuangku
'
,
'
showMenu4chenjiang
'
,
'
showMenu4diya
'
].
forEach
((
item
)
=>
{
if
(
item
===
type
)
{
this
[
type
]
=
!
this
[
type
]
}
else
{
this
[
item
]
=
false
}
})
},
async
getData
(
e
)
{
var
loading
if
(
!
e
)
{
loading
=
this
.
$loading
({
lock
:
true
,
text
:
'
加载中
'
,
// spinner: 'el-icon-loading',
background
:
'
rgba(0, 0, 0, 0.7)
'
});
}
// 模拟请求
setTimeout
(()
=>
{
setTimeout
(()
=>
this
.
getData
(
'
refesh
'
),
5000
);
// 曲线图
// 基于准备好的dom,初始化echarts实例
var
myChart
=
echarts
.
init
(
document
.
getElementById
(
"
line
"
));
myChart
.
clear
()
// 定时刷新 实际不刷新 演示用
// 绘制图表
myChart
.
setOption
({
tooltip
:
{
trigger
:
'
axis
'
,
axisPointer
:
{
type
:
'
cross
'
,
crossStyle
:
{
color
:
'
#999
'
}
}
},
toolbox1
:
{
feature
:
{
dataView
:
{
show
:
true
,
readOnly
:
false
},
magicType
:
{
show
:
true
,
type
:
[
'
line
'
,
'
bar
'
]
},
restore
:
{
show
:
true
},
saveAsImage
:
{
show
:
true
}
}
},
legend1
:
{
data
:
[
'
Precipitation
'
,
'
Temperature
'
]
},
xAxis
:
[
{
type
:
'
category
'
,
data
:
[
'
Mon
'
,
'
Tue
'
,
'
Wed
'
,
'
Thu
'
,
'
Fri
'
,
'
Sat
'
,
'
Sun
'
],
axisPointer
:
{
type
:
'
shadow
'
}
}
],
yAxis
:
[
{
type
:
'
value
'
,
name
:
'
Precipitation
'
,
min
:
0
,
max
:
250
,
interval
:
50
,
splitLine
:
{
show
:
false
},
axisLabel
:
{
formatter
:
'
{value} ml
'
,
textStyle
:
{
color
:
'
#a3e4f5
'
}
},
nameTextStyle
:
{
color
:
'
#a3e4f5
'
,
// 设置 Y 轴标题颜色为红色
fontSize
:
16
},
},
{
type
:
'
value
'
,
name
:
'
Temperature
'
,
min
:
0
,
max
:
25
,
interval
:
5
,
splitLine
:
{
show
:
false
},
axisLabel
:
{
formatter
:
'
{value} °C
'
,
textStyle
:
{
color
:
'
#a3e4f5
'
}
},
nameTextStyle
:
{
color
:
'
#a3e4f5
'
,
// 设置 Y 轴标题颜色为红色
fontSize
:
16
},
}
],
series
:
[
{
name
:
'
Evaporation
'
,
type
:
'
bar
'
,
tooltip
:
{
valueFormatter
:
function
(
value
)
{
return
value
+
'
ml
'
;
}
},
data
:
[
2.0
,
4.9
,
7.0
,
23.2
,
25.6
,
76.7
,
135.6
,
162.2
,
32.6
,
20.0
,
6.4
,
3.3
]
},
{
name
:
'
Temperature
'
,
type
:
'
line
'
,
yAxisIndex
:
1
,
tooltip
:
{
valueFormatter
:
function
(
value
)
{
return
value
+
'
°C
'
;
}
},
data
:
[
2.0
,
2.2
,
3.3
,
4.5
,
6.3
,
10.2
,
20.3
,
23.4
,
23.0
,
16.5
,
12.0
,
6.2
]
}
]
});
loading
&&
loading
.
close
();
this
.
isReady
=
true
},
800
);
}
},
changeMenu
(
menuName
)
{
localStorage
.
setItem
(
'
bigScreenDetailMenu
'
,
menuName
)
this
.
bigScreenDetailMenu
=
menuName
},
createVideo
:
function
(
item
)
{
this
.
getAccessToken
(
this
.
info
.
appKey
,
this
.
info
.
appSecret
).
then
(
accessToken
=>
{
var
url
=
this
.
getUrl
(
item
);
var
video
=
document
.
getElementById
(
"
video-container
"
);
video
.
innerHTML
=
''
;
this
.
player
=
new
EZUIKit
.
EZUIKitPlayer
({
autoplay
:
true
,
id
:
"
video-container
"
,
accessToken
:
accessToken
,
url
:
url
,
template
:
"
standard
"
,
// simple - 极简版;standard-标准版;security - 安防版(预览回放);voice-语音版;
// 视频上方头部控件
//header: ["capturePicture", "save", "zoom"], // 如果templete参数不为simple,该字段将被覆盖
//plugin: ['talk'], // 加载插件,talk-对讲
// 视频下方底部控件
// footer: ["talk", "broadcast", "hd", "fullScreen"], // 如果template参数不为simple,该字段将被覆盖
// audio: 1, // 是否默认开启声音 0 - 关闭 1 - 开启
// openSoundCallBack: data => console.log("开启声音回调", data),
// closeSoundCallBack: data => console.log("关闭声音回调", data),
// startSaveCallBack: data => console.log("开始录像回调", data),
// stopSaveCallBack: data => console.log("录像回调", data),
// capturePictureCallBack: data => console.log("截图成功回调", data),
// fullScreenCallBack: data => console.log("全屏回调", data),
// getOSDTimeCallBack: data => console.log("获取OSDTime回调", data),
});
})
},
getAccessToken
(
appKey
,
appSecret
)
{
var
dataJson
=
'
appKey=
'
+
appKey
+
'
&appSecret=
'
+
appSecret
;
return
request
.
post
(
"
/ys7com
"
,
dataJson
).
then
(
res
=>
{
var
data
=
res
.
data
||
{};
if
(
data
[
'
code
'
]
==
'
200
'
)
{
return
data
[
'
data
'
][
'
accessToken
'
]
}
else
{
return
null
}
}).
catch
(
err
=>
{
console
.
log
(
err
);
return
err
})
},
getUrl
(
item
)
{
var
captcha
=
item
.
captcha
?
item
.
captcha
+
'
@
'
:
''
;
var
id
=
item
.
id
||
this
.
info
.
id
||
''
;
return
'
ezopen://
'
+
captcha
+
'
open.ys7.com/
'
+
id
+
'
/
'
+
item
.
channel
;
},
chickVideo
(
video
,
index
)
{
this
.
createVideo
(
video
);
this
.
TabCur
=
index
;
this
.
showMask
=
false
;
},
// video -----------------------------------
updatePlayerDomSize
()
{
let
dom
=
this
.
$refs
.
container
;
let
width
=
dom
.
parentNode
.
clientWidth
let
height
=
(
9
/
16
)
*
width
const
clientHeight
=
Math
.
min
(
document
.
body
.
clientHeight
,
document
.
documentElement
.
clientHeight
)
if
(
height
>
clientHeight
)
{
height
=
clientHeight
width
=
(
16
/
9
)
*
height
}
dom
.
style
.
width
=
width
+
'
px
'
;
dom
.
style
.
height
=
height
+
"
px
"
;
},
create
()
{
let
options
=
{};
console
.
log
(
"
hasAudio
"
+
this
.
hasAudio
)
jessibucaPlayer
[
this
.
_uid
]
=
new
window
.
Jessibuca
(
Object
.
assign
(
{
container
:
this
.
$refs
.
container
,
autoWasm
:
true
,
background
:
""
,
controlAutoHide
:
false
,
debug
:
false
,
decoder
:
"
static/js/jessibuca/decoder.js
"
,
forceNoOffscreen
:
true
,
hasAudio
:
typeof
(
this
.
hasAudio
)
==
"
undefined
"
?
true
:
this
.
hasAudio
,
hasVideo
:
true
,
heartTimeout
:
5
,
heartTimeoutReplay
:
true
,
heartTimeoutReplayTimes
:
3
,
hiddenAutoPause
:
false
,
hotKey
:
false
,
isFlv
:
false
,
isFullResize
:
false
,
isNotMute
:
this
.
isNotMute
,
isResize
:
false
,
keepScreenOn
:
false
,
loadingText
:
"
请稍等, 视频加载中......
"
,
loadingTimeout
:
10
,
loadingTimeoutReplay
:
true
,
loadingTimeoutReplayTimes
:
3
,
openWebglAlignment
:
false
,
operateBtns
:
{
fullscreen
:
false
,
screenshot
:
false
,
play
:
false
,
audio
:
false
,
record
:
false
},
recordType
:
"
webm
"
,
rotate
:
0
,
showBandwidth
:
false
,
supportDblclickFullscreen
:
false
,
timeout
:
10
,
useMSE
:
location
.
hostname
!==
"
localhost
"
&&
location
.
protocol
!==
"
https:
"
,
useOffscreen
:
false
,
useWCS
:
location
.
hostname
===
"
localhost
"
||
location
.
protocol
===
"
https
"
,
useWebFullScreen
:
false
,
videoBuffer
:
0
,
wasmDecodeAudioSyncVideo
:
true
,
wasmDecodeErrorReplay
:
true
,
wcsUseVideoRender
:
true
},
options
));
let
jessibuca
=
jessibucaPlayer
[
this
.
_uid
];
let
_this
=
this
;
jessibuca
.
on
(
"
load
"
,
function
()
{
console
.
log
(
"
on load init
"
);
});
jessibuca
.
on
(
"
log
"
,
function
(
msg
)
{
console
.
log
(
"
on log
"
,
msg
);
});
jessibuca
.
on
(
"
record
"
,
function
(
msg
)
{
console
.
log
(
"
on record:
"
,
msg
);
});
jessibuca
.
on
(
"
pause
"
,
function
()
{
_this
.
playing
=
false
;
});
jessibuca
.
on
(
"
play
"
,
function
()
{
_this
.
playing
=
true
;
});
jessibuca
.
on
(
"
fullscreen
"
,
function
(
msg
)
{
console
.
log
(
"
on fullscreen
"
,
msg
);
_this
.
fullscreen
=
msg
});
jessibuca
.
on
(
"
mute
"
,
function
(
msg
)
{
console
.
log
(
"
on mute
"
,
msg
);
_this
.
isNotMute
=
!
msg
;
});
jessibuca
.
on
(
"
audioInfo
"
,
function
(
msg
)
{
console
.
log
(
"
audioInfo
"
,
msg
);
});
jessibuca
.
on
(
"
bps
"
,
function
(
bps
)
{
// console.log('bps', bps);
});
let
_ts
=
0
;
jessibuca
.
on
(
"
timeUpdate
"
,
function
(
ts
)
{
// console.log('timeUpdate,old,new,timestamp', _ts, ts, ts - _ts);
_ts
=
ts
;
});
jessibuca
.
on
(
"
videoInfo
"
,
function
(
info
)
{
console
.
log
(
"
videoInfo
"
,
info
);
});
jessibuca
.
on
(
"
error
"
,
function
(
error
)
{
console
.
log
(
"
error
"
,
error
);
});
jessibuca
.
on
(
"
timeout
"
,
function
()
{
console
.
log
(
"
timeout
"
);
});
jessibuca
.
on
(
'
start
'
,
function
()
{
console
.
log
(
'
start
'
);
})
jessibuca
.
on
(
"
performance
"
,
function
(
performance
)
{
let
show
=
"
卡顿
"
;
if
(
performance
===
2
)
{
show
=
"
非常流畅
"
;
}
else
if
(
performance
===
1
)
{
show
=
"
流畅
"
;
}
_this
.
performance
=
show
;
});
jessibuca
.
on
(
'
buffer
'
,
function
(
buffer
)
{
// console.log('buffer', buffer);
})
jessibuca
.
on
(
'
stats
'
,
function
(
stats
)
{
// console.log('stats', stats);
})
jessibuca
.
on
(
'
kBps
'
,
function
(
kBps
)
{
_this
.
kBps
=
Math
.
round
(
kBps
);
});
// 显示时间戳 PTS
jessibuca
.
on
(
'
videoFrame
'
,
function
()
{
})
//
jessibuca
.
on
(
'
metadata
'
,
function
()
{
});
},
playBtnClick
:
function
(
event
)
{
this
.
play
(
this
.
videoUrl
)
},
play
:
function
(
url
)
{
console
.
log
(
url
)
if
(
jessibucaPlayer
[
this
.
_uid
])
{
this
.
destroy
();
}
this
.
create
();
jessibucaPlayer
[
this
.
_uid
].
on
(
"
play
"
,
()
=>
{
this
.
playing
=
true
;
this
.
loaded
=
true
;
this
.
quieting
=
jessibuca
.
quieting
;
});
if
(
jessibucaPlayer
[
this
.
_uid
].
hasLoaded
())
{
jessibucaPlayer
[
this
.
_uid
].
play
(
url
);
}
else
{
jessibucaPlayer
[
this
.
_uid
].
on
(
"
load
"
,
()
=>
{
console
.
log
(
"
load 播放
"
)
jessibucaPlayer
[
this
.
_uid
].
play
(
url
);
});
}
},
pause
:
function
()
{
if
(
jessibucaPlayer
[
this
.
_uid
])
{
jessibucaPlayer
[
this
.
_uid
].
pause
();
}
this
.
playing
=
false
;
this
.
err
=
""
;
this
.
performance
=
""
;
},
screenshot
:
function
()
{
if
(
jessibucaPlayer
[
this
.
_uid
])
{
jessibucaPlayer
[
this
.
_uid
].
screenshot
();
}
},
mute
:
function
()
{
if
(
jessibucaPlayer
[
this
.
_uid
])
{
jessibucaPlayer
[
this
.
_uid
].
mute
();
}
},
cancelMute
:
function
()
{
if
(
jessibucaPlayer
[
this
.
_uid
])
{
jessibucaPlayer
[
this
.
_uid
].
cancelMute
();
}
},
destroy
:
function
()
{
if
(
jessibucaPlayer
[
this
.
_uid
])
{
jessibucaPlayer
[
this
.
_uid
].
destroy
();
}
if
(
document
.
getElementById
(
"
buttonsBox
"
)
==
null
)
{
this
.
$refs
.
container
.
appendChild
(
this
.
btnDom
)
}
jessibucaPlayer
[
this
.
_uid
]
=
null
;
this
.
playing
=
false
;
this
.
err
=
""
;
this
.
performance
=
""
;
},
eventcallbacK
:
function
(
type
,
message
)
{
// console.log("player 事件回调")
// console.log(type)
// console.log(message)
},
isFullscreen
:
function
()
{
return
document
.
fullscreenElement
||
document
.
msFullscreenElement
||
document
.
mozFullScreenElement
||
document
.
webkitFullscreenElement
||
false
;
},
// video end
// 点击选中一路视频
chickVideo222
(
video
,
index
)
{
console
.
log
(
'
video====
'
,
video
,
index
)
if
(
video
.
videoUrl
==
null
)
{
Axiosx
.
get
(
'
/wvp/api/play/start/
'
+
video
.
deviceId
+
'
/
'
+
video
.
videoId
).
then
(
res
=>
{
console
.
log
(
'
res====
'
,
res
)
if
(
res
.
status
&&
res
.
status
>=
200
&&
res
.
status
-
200
<
100
)
{
if
(
res
.
data
.
code
==
0
)
{
console
.
log
(
'
videos===
'
,
this
.
videos
)
this
.
videoUrl
=
res
.
data
.
data
.
ws_flv
}
}
})
}
this
.
TabCur
=
index
this
.
showMask
=
false
},
// 跳转到后台管理
gotoManagement
()
{
window
.
open
(
location
.
protocol
+
'
//
'
+
window
.
location
.
host
+
'
/#/home4Mine
'
,
'
_self
'
)
},
destroyed
()
{
if
(
jessibucaPlayer
[
this
.
_uid
])
{
jessibucaPlayer
[
this
.
_uid
].
destroy
();
}
this
.
playing
=
false
;
this
.
loaded
=
false
;
this
.
performance
=
""
;
},
})
</script>
</html>
\ No newline at end of file
public/datav/detail/wind-monitor.html
0 → 100644
View file @
de4c405f
<!doctype html>
<html>
<head>
<meta
charset=
"utf-8"
>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1.0,maximum-scale=1,user-scalable=no"
/>
<title>
露天矿山数据总览
</title>
<link
rel=
"stylesheet"
href=
"../css/base.css"
>
<link
rel=
"stylesheet"
href=
"../css/index.css"
>
<!-- 引入样式 -->
<link
rel=
"stylesheet"
href=
"../css/element-ui.css"
>
<!-- 引入样式文件 -->
<link
rel=
"stylesheet"
href=
"../css/vant@4.css"
/>
<!-- 先引入 Vue -->
<script
src=
"../js/vue.min.js"
></script>
<!-- 引入 Vue 和 Vant 的 JS 文件 -->
<script
src=
"../js/vue@2.6.14"
></script>
<script
src=
"../js/vant.min.js"
></script>
<style>
.el-autocomplete-suggestion
{
width
:
330px
!important
;
}
.mineInfo
{
padding-left
:
10px
;
}
.mineInfo
p
{
margin-top
:
6px
;
margin-bottom
:
6px
;
}
.menuInfo
{
overflow
:
hidden
;
margin-top
:
28px
;
margin-left
:
10px
;
}
.menuInfo
li
{
float
:
left
;
margin-right
:
16px
;
margin-bottom
:
16px
;
width
:
100px
;
height
:
30px
;
text-align
:
center
;
line-height
:
30px
;
cursor
:
pointer
;
background-image
:
url('./static/detail/menuBtnBg.png')
;
background-size
:
cover
;
}
.menuInfo
li
:hover
{
background-color
:
#084291
;
}
.menuInfo
li
.active
{
background-color
:
#084291
;
}
/*elementui 样式重写*/
.el-range-editor
.el-range-input
{
background
:
transparent
;
color
:
#dbdbdb
;
}
.el-date-editor.el-range-editor.el-input__inner.el-date-editor--datetimerange
{
background
:
transparent
;
}
.el-range-editor.el-input__inner
{
border
:
1px
solid
#7c7e7f
!important
;
}
.el-date-editor
.el-range-separator
{
color
:
#bababa
;
margin-top
:
6px
;
}
.el-input--small
.el-input__inner
{
color
:
#bababa
!important
;
font-size
:
16px
!important
;
border
:
1px
solid
#efdada
!important
;
text-align
:
center
;
}
.el-date-editor
.el-range__icon
{
margin-left
:
5px
;
}
section
{
width
:
440px
;
}
section
.header
{
height
:
40px
;
background-color
:
#b8b1b266
;
line-height
:
40px
;
border-bottom
:
1px
solid
#9797ac
;
cursor
:
pointer
;
}
section
.header
.el-icon-caret-right
:before
,
section
.header
.el-icon-caret-down
:before
{
content
:
"\e791"
;
color
:
#a5a4a4
;
font-size
:
22px
;
}
section
.list-wrapper
{
max-height
:
300px
;
overflow-y
:
auto
;
}
section
.list-item
{
height
:
40px
;
margin-left
:
20px
;
line-height
:
40px
;
border-bottom
:
1px
solid
#fff
;
cursor
:
pointer
;
}
section
.list-item
.el-icon-caret-right
:before
{
content
:
"\e791"
;
color
:
#a5a4a4
;
font-size
:
18px
;
}
/*列表list*/
.tableList
.bg-list-item
{
background
:
transparent
;
}
</style>
</head>
<body
style=
"background-image: url('../static/bg-img.png');background-size: 100% 100%;"
>
<div
id=
"app"
>
<div
class=
"fixed wp100 hv100"
style=
"background-color: #000000;left: 0;top: 0;z-index: 1999;"
v-show=
"!isReady"
></div>
<div
style=
"height: 80px;"
>
<div
class=
"flex-text color-theme f30 wp100 relative maxIndex fixed"
style=
"height: 80px;"
>
<div
class=
"flex-1"
style=
"background-image: url('../static/title-bg-left.png');background-size: 100% 100%;height: 80px;"
>
</div>
<div
class=
"flex-text"
style=
"background-image: url('../static/title-bg-center.png');background-size: 100% 100%;height: 80px;"
>
<div
style=
"margin-top: -10px;"
>
{{selectedMine.name || ''}}
</div>
</div>
<div
class=
"flex-1"
style=
"background-image: url('../static/title-bg-right.png');background-size: 100% 100%;height: 80px;"
>
</div>
</div>
</div>
<div
class=
"fixed flex-text maxIndex pointer"
style=
"left: 30px;top: 45px;"
@
click=
"history.back()"
>
<img
style=
"width: 24px;height: 24px;"
src=
"../static/backPage.png"
alt=
""
>
<div
class=
"f20 color-theme ml10"
>
返回
</div>
</div>
<div
class=
"flex-text ml10 mr10 mt15"
>
<div
style=
"width: 490px;height: calc(100vh - 110px);"
>
<!-- 通知公告 -->
<div
style=
"background: linear-gradient(to bottom, rgba(13,27,48,.7), rgba(13,27,48,0));"
>
<div
class=
"mineInfo"
>
<p>
矿山名称: 淄博红圈石料厂
</p>
<p>
矿山地质:谁看得见风离开世界的副卡时刻记得发
</p>
<p>
联系人:开始对
</p>
<p>
联系方式:xxx
</p>
</div>
<div
class=
"menuInfo"
>
<ul>
<li
@
click=
"changeMenu('video')"
:class=
"{active: bigScreenDetailMenu==='video'}"
>
视频监控
</li>
<li
@
click=
"changeMenu('shape')"
:class=
"{active: bigScreenDetailMenu==='shape'}"
>
变形监测
</li>
<li
@
click=
"changeMenu('temprate')"
:class=
"{active: bigScreenDetailMenu==='temprate'}"
>
温度监测
</li>
<li
@
click=
"changeMenu('wind')"
:class=
"{active: bigScreenDetailMenu==='wind'}"
>
风速监测
</li>
<li
@
click=
"changeMenu('water')"
:class=
"{active: bigScreenDetailMenu==='water'}"
>
降水监测
</li>
<li
@
click=
"changeMenu('people')"
:class=
"{active: bigScreenDetailMenu==='people'}"
>
人员定位
</li>
</ul>
</div>
</div>
<!-- 视频监控列表 -->
<div
class=
"relative mt20"
style=
"width: 490px;height: calc(100vh - 170px);"
>
<section>
<div
class=
"list-wrapper"
v-show=
"showMenu4bianpo"
>
<div
class=
"list-item"
><i
class=
"el-icon-caret-right"
></i><span
class=
"ml10"
>
xxxxx监测点
</span></div>
<div
class=
"list-item"
><i
class=
"el-icon-caret-right"
></i><span
class=
"ml10"
>
xxxxx监测点
</span></div>
<div
class=
"list-item"
><i
class=
"el-icon-caret-right"
></i><span
class=
"ml10"
>
xxxxx监测点
</span></div>
</div>
</section>
</div>
</div>
<div
class=
"flex-1 ml15 flex-text flex-column ovh"
style=
"height: calc(100vh - 110px); justify-content: space-between"
>
<!-- 视频监控 -->
<div
class=
"wp100 relative"
>
<!-- 井下24小时人数变化趋势 -->
<div
class=
"wp100"
>
<div
class=
"relative"
>
<el-date-picker
style=
"width: 350px !important;"
v-model=
"createTime"
type=
"datetimerange"
range-separator=
"至"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
align=
"right"
>
</el-date-picker>
</div>
<div
class=
"flex-text"
style=
"height: 0px;"
>
<div
class=
"flex-text"
>
<div
class=
"round"
style=
"width: 10px;height: 10px;background-color: #6dd1b9;"
></div>
<div
class=
"color-theme ml10 f14"
>
井下人数
</div>
</div>
<div
class=
"flex-text ml20"
>
<div
class=
"round"
style=
"width: 10px;height: 10px;background-color: #fca83b;"
></div>
<div
class=
"color-theme ml10 f14"
>
入井
</div>
</div>
<div
class=
"flex-text ml20 mr15"
>
<div
class=
"round"
style=
"width: 10px;height: 10px;background-color: #0a9fca;"
></div>
<div
class=
"color-theme ml10 f14"
>
出井
</div>
</div>
</div>
<div
class=
"mt5"
id=
"line"
style=
"width: 100%;height:400px;"
></div>
</div>
<!-- video end -->
</div>
<div
class=
"flex-text wp100"
>
<!-- 视频ai报警 列表 -->
<div
class=
"flex-1 ml15 ovh tableList"
>
<div
class=
"h44 f18 flex-text"
style=
"background: linear-gradient(to bottom, rgba(171,238,255,.15), rgba(171,238,255,.3));border-bottom: 1px solid #abeeff;"
>
<div
class=
"text-center"
style=
"width: 50%;"
>
监测时间
</div>
<div
class=
"text-center"
style=
"width: 50%;"
>
风速(m/s)
</div>
</div>
<div
class=
""
style=
"height: 300px;overflow-y: scroll;"
>
<div
class=
"h44 color-theme flex-text f17 ovh bg-list-item"
:class=
"'bg-list-' + (index % 2)"
:style=
"{ marginTop: index == 0 ? '' : '2px' }"
v-for=
"(item,index) in aiList"
:key=
"index"
>
<div
class=
"text-center"
style=
"width: 50%;"
>
{{ item.warnDatetime }}
</div>
<div
class=
"text-center"
style=
"width: 50%;"
>
{{ item.warnDatetime }}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
<!-- 引入echarts -->
<script
src=
"../js/echarts.min.js"
></script>
<script
src=
"../js/echarts-gl.js"
></script>
<!-- 引入组件库 -->
<script
src=
"../js/element-ui.js"
></script>
<!-- axios -->
<script
src=
"../js/axios.min.js"
></script>
<!-- cookie -->
<script
src=
"../js/js.cookie.js"
></script>
<script>
let
jessibucaPlayer
=
{};
//const host = location.protocol + '//' + window.location.host;
const
token
=
Cookies
.
get
(
'
ELADMIN-TOEKN
'
);
const
Axiosx
=
axios
.
create
({
headers
:
{
'
Authorization
'
:
token
}
});
Axiosx
.
interceptors
.
response
.
use
(
response
=>
{
return
response
},
error
=>
{
console
.
error
(
error
)
let
code
=
0
try
{
code
=
error
.
response
.
data
.
status
}
catch
(
e
)
{
if
(
error
.
toString
().
indexOf
(
'
Error: timeout
'
)
!==
-
1
)
{
console
.
error
(
'
当前网络不佳
'
)
return
}
}
if
(
!
code
)
{
console
.
error
(
'
当前网络不佳
'
)
return
}
if
(
code
===
401
)
{
alert
(
'
登录信息失效,请重新登录
'
)
window
.
open
(
host
+
'
/#/login
'
,
'
_self
'
)
return
}
if
(
code
===
400
&&
message
===
'
不允许访问
'
)
{
alert
(
'
您没有权限使用此功能,请联系管理员开通
'
)
return
}
}
);
const
host
=
location
.
protocol
+
'
//
'
+
(
location
.
hostname
===
'
192.168.3.226
'
?
'
192.168.3.37
'
:
'
192.168.13.200
'
)
+
'
:8013
'
;
const
selfHost
=
location
.
hostname
===
'
192.168.3.226
'
?
'
http://192.168.3.226:8057
'
:
location
.
protocol
+
'
//
'
+
window
.
location
.
host
;
// 请求 token 用
const
request
=
axios
.
create
({});
request
.
defaults
.
headers
[
'
Content-Type
'
]
=
'
application/x-www-form-urlencoded; charset=UTF-8
'
;
var
map
;
// 地图
new
Vue
({
el
:
'
#app
'
,
data
()
{
return
{
// 菜单折叠显隐
showMenu4bianpo
:
true
,
showMenu4weikuangku
:
true
,
showMenu4chenjiang
:
true
,
showMenu4diya
:
true
,
// 菜单折叠显隐 - 结束
createTime
:
''
,
bigScreenDetailMenu
:
''
,
selectedMine
:
{},
isReady
:
false
,
// 页面是否准备好 请求完接口变为true
// 表格数据
aiList
:
[]
}
},
mounted
()
{
for
(
var
i
=
0
;
i
<
10
;
i
++
){
this
.
aiList
.
push
({
videoName
:
'
sdfksdfxxxxx
'
,
warnTypeName
:
'
扣税的交流方
'
,
warnDatetime
:
'
ksdlfsdf
'
})
}
if
(
!
token
)
{
window
.
open
(
host
+
'
/#/login
'
,
'
_self
'
)
return
}
this
.
bigScreenDetailMenu
=
window
.
localStorage
.
getItem
(
'
bigScreenDetailMenu
'
)
// 当前矿山
const
selectedMineJson
=
window
.
localStorage
.
getItem
(
'
kd.selected.mine
'
)
let
noMine
=
false
if
(
!
selectedMineJson
)
{
noMine
=
true
}
else
{
const
selectedMine
=
JSON
.
parse
(
selectedMineJson
)
// if (!selectedMine || selectedMine.enterpriseId !== this.user.enterpriseId) {
// noMine = true
// } else {
this
.
selectedMine
=
selectedMine
// }
}
if
(
noMine
)
{
alert
(
'
您当前还未选择矿山,请先选择矿山再查看此大屏
'
)
window
.
history
.
go
(
-
1
)
return
}
if
(
this
.
selectedMine
.
mineType
!=
2
)
{
alert
(
'
您当前选择的不是露天矿山,请先选择露天矿山,再查看此大屏
'
)
window
.
history
.
go
(
-
1
)
return
}
this
.
getData
();
// 视频列表
Axiosx
.
get
(
host
+
'
/api/video-mine/mineId
'
,
{
params
:
{
//mineType: this.selectedMine.mineType,
mineId
:
this
.
selectedMine
.
id
,
}
}).
then
(
res
=>
{
res
=
res
.
data
.
body
;
this
.
info
=
{
appKey
:
res
.
appKey
,
appSecret
:
res
.
appSecret
,
};
this
.
videos
=
res
.
videoChannelList
||
[];
this
.
createVideo
(
res
.
videoChannelList
[
0
]);
});
},
methods
:
{
menuChange
(
type
)
{
[
'
showMenu4bianpo
'
,
'
showMenu4weikuangku
'
,
'
showMenu4chenjiang
'
,
'
showMenu4diya
'
].
forEach
((
item
)
=>
{
if
(
item
===
type
)
{
this
[
type
]
=
!
this
[
type
]
}
else
{
this
[
item
]
=
false
}
})
},
async
getData
(
e
)
{
var
loading
if
(
!
e
)
{
loading
=
this
.
$loading
({
lock
:
true
,
text
:
'
加载中
'
,
// spinner: 'el-icon-loading',
background
:
'
rgba(0, 0, 0, 0.7)
'
});
}
// 模拟请求
setTimeout
(()
=>
{
setTimeout
(()
=>
this
.
getData
(
'
refesh
'
),
5000
);
// 曲线图
// 基于准备好的dom,初始化echarts实例
var
myChart
=
echarts
.
init
(
document
.
getElementById
(
"
line
"
));
myChart
.
clear
()
// 定时刷新 实际不刷新 演示用
// 绘制图表
myChart
.
setOption
({
xAxis
:
{
data
:
[
"
01时
"
,
"
02时
"
,
"
03时
"
,
"
04时
"
,
"
05时
"
,
"
06时
"
,
"
07时
"
,
"
08时
"
,
"
09时
"
,
"
10时
"
,
"
11时
"
,
"
12时
"
,
"
13时
"
,
"
14时
"
,
"
15时
"
,
"
16时
"
,
"
17时
"
,
"
18时
"
,
"
19时
"
,
"
20时
"
,
"
21时
"
,
"
22时
"
,
"
23时
"
,
"
24时
"
],
axisLine
:
{
lineStyle
:
{
color
:
'
#a3e4f5
'
}
},
axisTick
:
{
show
:
false
}
},
yAxis
:
{
name
:
'
Precipitation
'
,
splitLine
:
{
show
:
false
},
axisLabel
:
{
textStyle
:
{
color
:
'
#a3e4f5
'
}
}
},
yAxis22
:
[
{
type
:
'
value
'
,
name
:
'
Precipitation
'
,
interval
:
40
,
splitLine
:
{
show
:
false
},
axisLabel
:
{
textStyle
:
{
color
:
'
#a3e4f5
'
}
},
nameTextStyle
:
{
color
:
'
#a3e4f5
'
,
// 设置 Y 轴标题颜色为红色
fontSize
:
16
},
},
],
grid
:
{
right
:
15
,
top
:
10
,
left
:
40
,
bottom
:
25
},
dataZoom
:
[
{
type
:
"
slider
"
,
show
:
false
,
startValue
:
14
,
endValue
:
23
,
// 一次性展示9个
textStyle
:
{
color
:
"
#ffffff
"
},
height
:
0
,
zoomLock
:
true
,
// 是否只平移不缩放
},
{
type
:
"
inside
"
,
//内置型数据区域缩放组件
moveOnMouseMove
:
true
// 开启鼠标移动窗口平移
}
],
series
:
[
{
name
:
"
人数
"
,
type
:
"
line
"
,
smooth
:
true
,
data
:
[
180
,
210
,
150
,
280
,
235
,
500
,
390
,
410
,
150
,
180
,
210
,
150
,
280
,
235
,
500
,
390
,
410
,
150
,
180
,
210
,
150
,
280
,
235
,
500
],
itemStyle
:
{
color
:
'
#6dd1b9
'
}
},
{
name
:
"
人数
"
,
type
:
"
line
"
,
smooth
:
true
,
data
:
[
60
,
90
,
80
,
100
,
60
,
65
,
45
,
50
,
48
,
60
,
90
,
80
,
100
,
60
,
65
,
45
,
50
,
48
,
60
,
90
,
80
,
100
,
60
,
65
],
itemStyle
:
{
color
:
'
#0a9fca
'
}
},
{
name
:
"
人数
"
,
type
:
"
line
"
,
smooth
:
true
,
data
:
[
55
,
48
,
40
,
60
,
50
,
55
,
58
,
63
,
50
,
55
,
48
,
40
,
60
,
50
,
55
,
58
,
63
,
50
,
55
,
48
,
40
,
60
,
50
,
55
],
itemStyle
:
{
color
:
'
#fca83b
'
}
}
]
});
loading
&&
loading
.
close
();
this
.
isReady
=
true
},
800
);
}
},
changeMenu
(
menuName
)
{
localStorage
.
setItem
(
'
bigScreenDetailMenu
'
,
menuName
)
this
.
bigScreenDetailMenu
=
menuName
},
getAccessToken
(
appKey
,
appSecret
)
{
var
dataJson
=
'
appKey=
'
+
appKey
+
'
&appSecret=
'
+
appSecret
;
return
request
.
post
(
"
/ys7com
"
,
dataJson
).
then
(
res
=>
{
var
data
=
res
.
data
||
{};
if
(
data
[
'
code
'
]
==
'
200
'
)
{
return
data
[
'
data
'
][
'
accessToken
'
]
}
else
{
return
null
}
}).
catch
(
err
=>
{
console
.
log
(
err
);
return
err
})
},
create
()
{
let
options
=
{};
console
.
log
(
"
hasAudio
"
+
this
.
hasAudio
)
},
})
</script>
</html>
\ No newline at end of file
public/datav/index.html
View file @
de4c405f
...
@@ -900,9 +900,9 @@
...
@@ -900,9 +900,9 @@
const
host
=
location
.
protocol
+
'
//
'
+
(
location
.
hostname
===
'
192.168.3.226
'
?
'
192.168.3.37
'
:
'
192.168.13.200
'
)
+
'
:8013
'
;
const
host
=
location
.
protocol
+
'
//
'
+
(
location
.
hostname
===
'
192.168.3.226
'
?
'
192.168.3.37
'
:
'
192.168.13.200
'
)
+
'
:8013
'
;
// 小黄
// 小黄
//const host = location.protocol + '//' + (location.hostname === '192.168.3.
226
' ? '192.168.2.200' : '192.168.13.200') + ':8013';
//const host = location.protocol + '//' + (location.hostname === '192.168.3.
38
' ? '192.168.2.200' : '192.168.13.200') + ':8013';
const
selfHost
=
location
.
hostname
===
'
192.168.3.
226
'
?
'
http://192.168.3.226
:8057
'
:
location
.
protocol
+
'
//
'
+
window
.
location
.
host
;
const
selfHost
=
location
.
hostname
===
'
192.168.3.
38
'
?
'
http://192.168.3.38
:8057
'
:
location
.
protocol
+
'
//
'
+
window
.
location
.
host
;
const
token
=
Cookies
.
get
(
'
ELADMIN-TOEKN
'
);
const
token
=
Cookies
.
get
(
'
ELADMIN-TOEKN
'
);
axios
=
axios
.
create
({
axios
=
axios
.
create
({
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment