zhangqi
2 years ago
9 changed files with 366 additions and 174 deletions
-
BINdist.rar
-
5src/api/urls.js
-
22src/components/Map/ToiletMap.vue
-
2src/components/Map/components/Map.vue
-
81src/components/Map/components/Monitor.vue
-
153src/components/Map/components/Monitor0.vue
-
252src/components/Map/components/Monitor1.vue
-
18src/components/Map/components/ToiletDetail.vue
-
3src/views/Cockpit/Cockpit.vue
@ -1,153 +0,0 @@ |
|||
<template> |
|||
<el-dialog |
|||
:title="title" |
|||
:visible.sync="showMonitor" |
|||
:before-close="handleClose" |
|||
:modal-append-to-body="false"> |
|||
<div class="detail-content"> |
|||
<div id="monitor"> |
|||
<div class="tool"> |
|||
<el-date-picker |
|||
v-model="dateSection" |
|||
type="datetimerange" |
|||
range-separator="至" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
value-format="yyyy/M/d HH:mm:ss" |
|||
@change="handleChange"> |
|||
</el-date-picker> |
|||
|
|||
</div> |
|||
<video ref="video" controls v-if="type === 2"></video> |
|||
</div> |
|||
</div> |
|||
</el-dialog> |
|||
</template> |
|||
|
|||
<script> |
|||
import request from '@/api/request' |
|||
import { getM3u8Api, getImouApi } from '@/api/urls' |
|||
export default { |
|||
data () { |
|||
return { |
|||
title: '', |
|||
showMonitor: false, |
|||
type: 2, |
|||
m3u8Url: '', |
|||
imouUrl: '', |
|||
player: null, |
|||
Hls: null, |
|||
dateSection: [], |
|||
startTime: '', |
|||
endTime: '' |
|||
} |
|||
}, |
|||
methods: { |
|||
async viewMonitor (id, title) { |
|||
this.title = title + '视频' |
|||
this.showMonitor = true |
|||
// this.playMonitorToM3u8() |
|||
var res = await request.get(getM3u8Api, { |
|||
params: { |
|||
toiletId: 2 |
|||
} |
|||
}) |
|||
if (res.code === '200') { |
|||
this.m3u8Url = res.data.hls |
|||
this.playMonitorToM3u8() |
|||
// this.playMonitorToImou(res.data.url, res.data.kitToken) |
|||
} else { |
|||
this.$message.info(res.message) |
|||
} |
|||
// console.log(res) |
|||
}, |
|||
playMonitorToM3u8 () { |
|||
if (Hls.isSupported()) { |
|||
if (this.Hls) this.Hls.destroy() |
|||
this.Hls = new Hls(); |
|||
// this.Hls.loadSource('http://cmgw-vpc.lechange.com:8888/LCO/5L060F4PAAD53DB/0/1/20210719T080253/f741fbd46fe34fe3cd794c4931a05c8e.m3u8'); |
|||
this.Hls.loadSource(this.m3u8Url);//设置播放路径 |
|||
this.Hls.attachMedia(this.$refs.video); //解析到video标签上 |
|||
this.Hls.on(Hls.Events.MANIFEST_PARSED, () => { |
|||
this.$refs.video.play(); |
|||
console.log("加载成功"); |
|||
}); |
|||
this.Hls.on(Hls.Events.ERROR, (event, data) => { |
|||
// 监听出错事件 |
|||
console.log("加载失败"); |
|||
}) |
|||
} else { |
|||
this.$message.error("不支持的格式"); |
|||
return; |
|||
} |
|||
}, |
|||
playMonitorToImou (url, token) { |
|||
if (!this.player) this.player = new ImouPlayer('#monitor') |
|||
this.player.setup({ |
|||
src: [ |
|||
{ |
|||
url: url, |
|||
kitToken: token |
|||
} |
|||
], |
|||
width: 800, |
|||
height: 450, |
|||
poster: '', |
|||
autoplay: true, |
|||
controls: true, |
|||
}) |
|||
this.player.play() |
|||
}, |
|||
handleChange (val) { |
|||
if (val) { |
|||
this.startTime = val[0] |
|||
this.endTime = val[1] |
|||
} else { |
|||
this.loginStartTime = '' |
|||
this.loginEndTime = '' |
|||
} |
|||
}, |
|||
handleClose () { |
|||
if (this.type === 1 && this.player) { |
|||
this.player.stop() |
|||
this.player.destroy() |
|||
} |
|||
if (this.type === 2 && this.Hls) { |
|||
this.Hls.destroy() |
|||
this.Hls = null |
|||
this.$refs.video.pause() |
|||
this.$refs.video.removeAttribute('src') |
|||
this.$refs.video.load() |
|||
} |
|||
this.showMonitor = false |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
/deep/ .el-dialog { |
|||
width: 800px; |
|||
border-radius: 8px; |
|||
overflow: hidden; |
|||
.detail-content { |
|||
#monitor { |
|||
width: 800px; |
|||
// height: 450px; |
|||
.tool { |
|||
padding: 10px; |
|||
.el-date-editor { |
|||
.el-range__icon { |
|||
height: 14px; |
|||
line-height: 100%; |
|||
} |
|||
} |
|||
} |
|||
video { |
|||
width: 100%; |
|||
height: 450px; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</style> |
@ -0,0 +1,252 @@ |
|||
<template> |
|||
<el-dialog |
|||
:title="title" |
|||
:visible.sync="showMonitor" |
|||
:before-close="handleClose" |
|||
:modal-append-to-body="false"> |
|||
<div class="detail-content"> |
|||
<div class="tool"> |
|||
<span class="label">回放:</span> |
|||
<el-date-picker |
|||
v-model="date" |
|||
type="date" |
|||
value-format="yyyy/M/d" |
|||
placeholder="选择日期" |
|||
@change="handleChangeDate"> |
|||
</el-date-picker> |
|||
<el-time-picker |
|||
is-range |
|||
v-model="timeSection" |
|||
range-separator="至" |
|||
start-placeholder="开始时间" |
|||
end-placeholder="结束时间" |
|||
placeholder="选择时间范围" |
|||
value-format="HH:mm:ss" |
|||
@change="handleChangeTime"> |
|||
</el-time-picker> |
|||
<a class="bt_submit" @click="returnVideo">回放</a> |
|||
<a class="bt_submit" @click="resetPlay">监控</a> |
|||
</div> |
|||
<div id="monitor"> |
|||
<video ref="video" controls v-if="type === 2"></video> |
|||
</div> |
|||
<div class="auto-box"> |
|||
<el-switch |
|||
v-model="autoClose" |
|||
@change="autoCloseChange"> |
|||
</el-switch> |
|||
<span class="text">十分钟后自动关闭</span> |
|||
</div> |
|||
</div> |
|||
</el-dialog> |
|||
</template> |
|||
|
|||
<script> |
|||
import request from '@/api/request' |
|||
import { getImouApi, getImouReturnApi } from '@/api/urls' |
|||
export default { |
|||
data () { |
|||
return { |
|||
title: '', |
|||
id: '', |
|||
showMonitor: false, |
|||
type: 1, |
|||
m3u8Url: '', |
|||
imouUrl: '', |
|||
kitToken: '', |
|||
player: null, |
|||
Hls: null, |
|||
autoClose: true, |
|||
timer: null, |
|||
date: '', |
|||
timeSection: ['00:00:00', '23:59:59'], |
|||
startTime: '', |
|||
endTime: '' |
|||
} |
|||
}, |
|||
methods: { |
|||
async viewMonitor (id, title) { |
|||
this.id = id |
|||
this.title = title + '视频' |
|||
this.showMonitor = true |
|||
this.autoCloseChange() |
|||
// this.playMonitorToM3u8() |
|||
this.getUrl() |
|||
// console.log(res) |
|||
}, |
|||
async getUrl () { |
|||
var res = await request.get(getImouApi, { |
|||
params: { |
|||
toiletId: this.id |
|||
} |
|||
}) |
|||
if (res.code === '200') { |
|||
// this.m3u8Url = res.data.videoUrl |
|||
// this.playMonitorToM3u8() |
|||
this.imouUrl = res.data.url |
|||
this.kitToken = res.data.kitToken |
|||
this.playMonitorToImou(res.data.url, res.data.kitToken) |
|||
} else { |
|||
this.$message.info(res.message) |
|||
} |
|||
}, |
|||
playMonitorToM3u8 () { |
|||
if (Hls.isSupported()) { |
|||
this.Hls = new Hls(); |
|||
// this.Hls.loadSource('http://cmgw-vpc.lechange.com:8888/LCO/5L060F4PAAD53DB/0/1/20210719T080253/f741fbd46fe34fe3cd794c4931a05c8e.m3u8'); |
|||
this.Hls.loadSource(this.m3u8Url);//设置播放路径 |
|||
this.Hls.attachMedia(this.$refs.video); //解析到video标签上 |
|||
this.Hls.on(Hls.Events.MANIFEST_PARSED, () => { |
|||
this.$refs.video.play(); |
|||
console.log("加载成功"); |
|||
}); |
|||
this.Hls.on(Hls.Events.ERROR, (event, data) => { |
|||
// 监听出错事件 |
|||
console.log("加载失败"); |
|||
}) |
|||
} else { |
|||
this.$message.error("不支持的格式"); |
|||
return; |
|||
} |
|||
}, |
|||
playMonitorToImou (url, token) { |
|||
if (!this.player) this.player = new ImouPlayer('#monitor') |
|||
this.player.setup({ |
|||
src: [ |
|||
{ |
|||
url: url, |
|||
kitToken: token |
|||
} |
|||
], |
|||
width: 800, |
|||
height: 450, |
|||
poster: '', |
|||
autoplay: true, |
|||
controls: true, |
|||
}) |
|||
this.player.play() |
|||
}, |
|||
autoCloseChange () { |
|||
var _that = this |
|||
if (this.autoClose) { |
|||
this.timer = setTimeout(() => { |
|||
_that.handleClose() |
|||
}, 1000 * 60 * 10); |
|||
} else { |
|||
clearTimeout(this.timer) |
|||
} |
|||
}, |
|||
handleChangeDate (val) { |
|||
if (val && this.timeSection) { |
|||
this.startTime = val + ' ' + this.timeSection[0] |
|||
this.endTime = val + ' ' + this.timeSection[1] |
|||
} else { |
|||
this.startTime = '' |
|||
this.endTime = '' |
|||
} |
|||
}, |
|||
handleChangeTime (val) { |
|||
if (val) { |
|||
this.startTime = this.date + ' ' + val[0] |
|||
this.endTime = this.date + ' ' + val[1] |
|||
} else { |
|||
this.startTime = '' |
|||
this.endTime = '' |
|||
} |
|||
}, |
|||
async returnVideo () { |
|||
if (!this.date) { |
|||
this.$message.info('请选择日期') |
|||
return |
|||
} |
|||
if (!this.timeSection) { |
|||
this.$message.info('请选择时间段') |
|||
return |
|||
} |
|||
var res = await request.get(getImouReturnApi, { |
|||
params: { |
|||
toiletId: this.id, |
|||
startTime: this.startTime, |
|||
endTime: this.endTime |
|||
} |
|||
}) |
|||
if (res.code === '200') { |
|||
this.player && this.player.destroy() |
|||
this.player = null |
|||
this.playMonitorToImou(res.data.url, res.data.kitToken) |
|||
} else { |
|||
this.$message.info(res.message) |
|||
} |
|||
console.log(res) |
|||
}, |
|||
resetPlay () { |
|||
this.player && this.player.destroy() |
|||
this.player = null |
|||
this.playMonitorToImou(this.imouUrl, this.kitToken) |
|||
}, |
|||
handleClose () { |
|||
clearTimeout(this.timer) |
|||
if (this.type === 1 && this.player) { |
|||
this.player.stop() |
|||
this.player.destroy() |
|||
this.player = null |
|||
} |
|||
if (this.type === 2 && this.Hls) { |
|||
this.Hls && this.Hls.destroy() |
|||
this.Hls = null |
|||
this.$refs.video.pause() |
|||
this.$refs.video.removeAttribute('src') |
|||
this.$refs.video.load() |
|||
} |
|||
this.showMonitor = false |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
/deep/ .el-dialog { |
|||
width: 800px; |
|||
border-radius: 8px; |
|||
overflow: hidden; |
|||
.detail-content { |
|||
.tool { |
|||
padding: 10px; |
|||
display: flex; |
|||
.label { |
|||
line-height: 30px; |
|||
} |
|||
.el-date-editor { |
|||
.el-range__icon { |
|||
height: 14px; |
|||
line-height: 100%; |
|||
} |
|||
.el-icon-date { |
|||
height: 14px; |
|||
line-height: 30px; |
|||
} |
|||
} |
|||
a { |
|||
margin-left: 10px; |
|||
margin-right: 0 !important; |
|||
} |
|||
} |
|||
#monitor { |
|||
width: 800px; |
|||
height: 450px; |
|||
video { |
|||
width: 100%; |
|||
height: 100%; |
|||
} |
|||
} |
|||
.auto-box { |
|||
padding: 10px; |
|||
@include lineHeight(40px); |
|||
.text { |
|||
margin-left: 10px; |
|||
font-size: 12px; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</style> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue