补充医护随身报警页面,视频回放补充接口联调

main
zhangqun 2 years ago
parent 64c414117f
commit 1d704ea7f8
  1. 17
      src/api/wirelessintrusion/wirelessintrusion.js
  2. 4
      src/views/alarmcenter/index.vue
  3. 326
      src/views/alarmcenter/sosAlarm/list.vue
  4. 21
      src/views/components/video/video.vue
  5. 2
      src/views/wirelessintrusion/warn/record.vue
  6. 3
      vocalldemo/index.html
  7. 4
      vue.config.js

@ -178,4 +178,21 @@ export const coordinateToWGS84 = (params) => {
method: 'get',
params: params
})
}
///海康报警视频/////////////////////////////////////////////////////////////////////////////////////////////
//实时报警摄像头
export const queryLivePreview = (params) => {
return request({
url: '/api/alarmInformation/preview',
method: 'get',
params: params
})
}
//报警摄像头回放
export const queryLiveBack = (params) => {
return request({
url: '/api/alarmInformation/playback',
method: 'get',
params: params
})
}

@ -15,13 +15,13 @@
</template>
</avue-crud>
<!-- 视频联动弹窗 -->
<el-dialog title="视频联动" :visible.sync="dialogVisible" :append-to-body="true" :close-on-click-modal="false"
<el-dialog title="视频联动" :visible.sync="dialogVisible" v-if="dialogVisible" :append-to-body="true" :close-on-click-modal="false"
:close-on-press-escape="false" custom-class="video_dia" fullscreen>
<div class="video_box">
<el-row :gutter="20">
<el-col :span="6" v-for="item in videoData" :key="item.id">
<VideoPlayer :name="item.name" :id="item.id"
<VideoPlayer :name="item.name" :id="item.id" :code="item.cameraIndexCode"
:url="'https://sf1-hscdn-tos.pstatp.com/obj/media-fe/xgplayer_doc_video/flv/xgplayer-demo-360p.flv'"
:playbackUrl="'https://sf1-hscdn-tos.pstatp.com/obj/media-fe/xgplayer_doc_video/flv/xgplayer-demo-360p.flv'" />
</el-col>

@ -0,0 +1,326 @@
<template>
<basic-container>
<avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" ref="crud" @row-del="rowDel"
v-model="form" :before-open="beforeOpen" @search-change="searchChange" @search-reset="searchReset" @current-change="currentChange" @size-change="sizeChange"
@refresh-change="refreshChange" @on-load="onLoad">
<template slot="menuLeft">
<el-button @click="handleExport" type="warning" size="small" icon="el-icon-download" plain>导出
</el-button>
</template>
<template slot-scope="{ row, index }" slot="menu">
<el-button @click="linkVideo(row, index)" type="text" icon="el-icon-video-camera-solid" size="small"
:disabled="row.cancelTime == ''">
视频联动
</el-button>
</template>
</avue-crud>
<!-- 视频联动弹窗 -->
<el-dialog title="视频联动" :visible.sync="dialogVisible" v-if="dialogVisible" :append-to-body="true" :close-on-click-modal="false"
:close-on-press-escape="false" custom-class="video_dia" fullscreen>
<div class="video_box">
<el-row :gutter="20">
<el-col :span="6" v-for="item in videoData" :key="item.id">
<VideoPlayer :name="item.name" :id="item.id" :code="item.cameraIndexCode"
:url="'https://sf1-hscdn-tos.pstatp.com/obj/media-fe/xgplayer_doc_video/flv/xgplayer-demo-360p.flv'"
:playbackUrl="'https://sf1-hscdn-tos.pstatp.com/obj/media-fe/xgplayer_doc_video/flv/xgplayer-demo-360p.flv'" />
</el-col>
</el-row>
</div>
</el-dialog>
</basic-container>
</template>
<script>
import { getList } from "@/api/alarm/alarm";
import { bizLogin, bizDeviceList } from "@/api/wirelessintrusion/wirelessintrusion";
import { exportBlob } from "@/api/common";
import { downloadXls } from "@/util/util";
import { dateNow } from "@/util/date";
import { getToken } from "@/util/auth";
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';
import func from "@/util/func";
import VideoPlayer from "../../components/video/video"
export default {
components: {
VideoPlayer
},
data() {
return {
form: {},
query: {},
loading: true,
dialogVisible: false,
page: {
pageSize: 10,
currentPage: 1,
total: 0
},
selectionList: [],
option: {
height: 'auto',
calcHeight: 30,
tip: false,
border: true,
searchShow: true,
searchMenuSpan: 6,
menuWidth: 200,
viewBtn: true,
addBtn: false,
editBtn: false,
delBtn: false,
selection: false,
index: true,
dialogClickModal: false,
column: [
{
label: "设备名称",
prop: "deviceName",
},
{
label: "设备编号",
prop: "deviceId",
row: true,
},
{
label: "设备类型",
prop: "productName",
},
{
label: "报警类型",
type: "select",
dicUrl: "/api/blade-system/dict-biz/dictionary?code=alarm_message_condition",
props: {
label: "dictValue",
value: "dictKey"
},
dataType: "number",
slot: true,
prop: "type",
search: true,
},
{
label: "楼号",
prop: "buildId",
width: 80
},
{
label: "楼层",
prop: "floorNo",
width: 80
},
{
label: "经纬度",
prop: "xy",
span: 24,
hide: true
},
{
label: "报警信息",
prop: "content",
overHidden: true,
width: '200'
},
{
label: "上报时间",
prop: "reportTime",
width: '150'
},
]
},
data: [],
videoData: []
};
},
computed: {
ids() {
let ids = [];
this.selectionList.forEach(ele => {
let tags = JSON.parse(ele.tags)
ids.push(tags.sectorNo);
});
return ids.join(",");
}
},
mounted() {
// socket
window.addEventListener('onmessageWS', this.getSocketData)
},
methods: {
//
getSocketData (res) {
console.log('websocket', res);
if (res.detail.data === 'success' || res.detail.data === 'heartBath') return
// ...
},
searchReset() {
this.query = {};
this.onLoad(this.page);
},
searchChange(params, done) {
this.query = params;
this.page.currentPage = 1;
this.onLoad(this.page, params);
done();
},
selectionChange(list) {
this.selectionList = list;
},
selectionClear() {
this.selectionList = [];
this.$refs.crud.toggleSelection();
},
handleDelete() {
if (this.selectionList.length === 0) {
this.$message.warning("请选择至少一条数据");
return;
}
this.$confirm("确定将选择数据删除?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
.then(() => {
return remove(this.ids);
})
.then(() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!"
});
this.$refs.crud.toggleSelection();
});
},
beforeOpen(done, type) {
done();
},
currentChange(currentPage) {
this.page.currentPage = currentPage;
},
sizeChange(pageSize) {
this.page.pageSize = pageSize;
},
refreshChange() {
this.onLoad(this.page, this.query);
},
onLoad(page, params = {}) {
const { releaseTimeRange } = this.query;
let values = {
...params,
...this.query
};
if (releaseTimeRange) {
values = {
...values,
startTime: releaseTimeRange[0],
endTime: releaseTimeRange[1],
};
values.releaseTimeRange = null;
}
this.loading = true;
getList(page.currentPage, page.pageSize, values).then(res => {
const data = res.data.data;
this.page.total = data.total;
data.records.map(item => {
item.xy = item.longidute + ',' + item.latidute;
})
this.data = data.records;
this.loading = false;
this.selectionClear();
});
},
//
linkVideo(row) {
let token = window.sessionStorage.getItem('bizToken');
if (token == 'undefined' || !token) {
bizLogin({ appKey: 'Arf7bd4f26', appSecret: 'kb207044c8' }).then(res => {
window.sessionStorage.setItem('bizToken', res.data.data.token);
bizDeviceList(res.data.data.token, { 'params[pmac]': row.deviceId }).then(res2 => {
const data = res2.data;
this.videoData = data.rows;
if(this.videoData.length === 0){
this.$message.warning('未查询到该报警点摄像头');
}
else{
this.dialogVisible = true;
}
});
})
} else {
bizDeviceList(token, { 'params[pmac]': row.deviceId }).then(res2 => {
if (res2.data.code == 401) {
window.sessionStorage.removeItem('bizToken');
this.linkVideo(row);
}
else if (res2.data.code == 200) {
const data = res2.data;
this.videoData = data.rows;
if(this.videoData.length === 0){
this.$message.warning('未查询到该报警点摄像头');
}
else{
this.dialogVisible = true;
}
}
});
}
},
//
handleExport() {
let values = {
deviceType: func.toStr(this.query.type)
};
if (this.query.releaseTimeRange) {
values = {
...values,
startTime: this.queryreleaseTimeRange[0],
endTime: this.queryreleaseTimeRange[1],
};
}
let params = '';
Object.keys(values).map(key => {
params = '&' + key + '=' + values[key];
})
this.$confirm("是否导出报警数据?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
NProgress.start();
exportBlob(`/api/alarmInformation/export?${this.website.tokenHeader}=${getToken()}${params}`).then(res => {
downloadXls(res.data, `报警数据表${dateNow()}.xlsx`);
NProgress.done();
})
});
},
}
};
</script>
<style lang="scss" scoped>
.dialog-footer {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
.video_dia {
.video_box {
width: 100%;
.grid-content {
width: 100%;
height: 200px;
margin-bottom: 18px;
video {
width: 100%;
height: 100%;
}
}
}
}
</style>

@ -23,6 +23,7 @@
<script>
import { dateFormat } from "../../../util/date";
import { queryLivePreview, queryLiveBack } from "@/api/wirelessintrusion/wirelessintrusion";
import flvjs from 'flv.js';
export default {
name: 'videoPlayer',
@ -60,8 +61,9 @@ export default {
},
mounted() {
this.dateRange = [dateFormat(new Date(), 'yyyy-MM-dd') + ' 00:00:00', dateFormat(new Date(), 'yyyy-MM-dd') + ' 23:59:59'];
// this.init();
this.createPlayer(this.url);
this.init();
this.queryLive();
// this.createPlayer(this.url);
},
methods: {
init() {
@ -70,6 +72,14 @@ export default {
this.player.JS_Resize()
})
},
//
queryLive() {
if(this.code) {
queryLivePreview({cameraIndexCode: this.code}).then(res => {
this.createPlayer(res.data.url);
})
}
},
//
createPlayer(url) {
if (flvjs.isSupported) {
@ -119,7 +129,12 @@ export default {
},
/* 回放 */
playbackStart() {
this.createPlayer(this.playbackUrl);
// this.createPlayer(this.playbackUrl);
if(this.code) {
queryLivePreview({cameraIndexCode: this.code, beginTime: this.dateRange[0], endTime: this.dateRange[1]}).then(res => {
this.createPlayer(res.data.url);
})
}
},
}
}

@ -29,7 +29,7 @@
<div class="video_box">
<el-row :gutter="20">
<el-col :span="6" v-for="item in videoData" :key="item.id">
<VideoPlayer :name="item.name" :id="item.id"
<VideoPlayer :name="item.name" :id="item.id" :code="item.cameraIndexCode"
:url="'https://sf1-hscdn-tos.pstatp.com/obj/media-fe/xgplayer_doc_video/flv/xgplayer-demo-360p.flv'"
:playbackUrl="'https://sf1-hscdn-tos.pstatp.com/obj/media-fe/xgplayer_doc_video/flv/xgplayer-demo-360p.flv'" />
</el-col>

@ -254,7 +254,7 @@
<script>
// const baseUrl = "http://152.136.119.150:81";//外网测试环境
const baseUrl = "http://171.16.8.51:81";//"http://192.168.1.102:81";//本地测试环境
const iotBaseUrl = "http://171.16.8.58:8080"//"http://182.139.182.190:60032";//物联网平台外网测试环境
const iotBaseUrl = "http://171.16.8.58:8080"//"http://182.139.182.190:60032";//物联网平台外网测试环境
if (!('speechSynthesis' in window)) {
throw alert("对不起,您的浏览器不支持")
}
@ -331,6 +331,7 @@
alert('播报内容不能为空')
return;
}
console.log(txt)
speak(txt);
reportSaveIot(txt);//本地存储 =》 上报
}

@ -39,8 +39,8 @@ module.exports = {
proxy: {
"/api": {
//本地服务接口地址
// target: 'http://192.168.1.34:81',
target: 'http://192.168.3.32:81',
target: 'http://192.168.1.34:81',
// target: 'http://192.168.3.32:81',
// target: 'http://192.168.1.102:81',
ws: true,
pathRewrite: {

Loading…
Cancel
Save