You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

707 lines
20 KiB
Vue

2 years ago
<template>
2 years ago
<div class="monitorBox" v-loading="loadingBg">
<div class="monitor-container">
<!-- 左侧数据列表树 -->
<div class="sideBar">
<el-tree
:data="lineTreeData"
:props="defaultProps"
ref="tree"
node-key="id"
highlight-current
:default-expand-all="true"
@node-click="handleNodeClick"
:current-node-key="currentNodekey"
>
<span class="custom-tree-node" slot-scope="{ node, data }">
2 years ago
<span v-if="node.level === 1" class="iconfont icon-dianli"></span>
<span
2 years ago
v-else-if="data.list && node.level !== 1"
class="iconfont icon-dianlihangye"
2 years ago
>
</span>
<span
v-else
class="iconfont icon-video-camera"
style="margin-right: 6px"
></span>
<span :class="data.onlinestatus == 0 ? 'disconnect' : ''">{{
node.label
}}</span>
</span>
</el-tree>
2 years ago
</div>
<!-- 带参数的中心内容右侧参数区 -->
2 years ago
<div class="picSetBox">
<div class="swiperBox" v-loading="loading">
2 years ago
<carouselChart
:terminalPhoto="terminalPhoto"
2 years ago
v-if="terminalPhoto.length > 0"
2 years ago
></carouselChart>
2 years ago
<!-- <div class="totalPic" v-if="totalPic !== 0">
2 years ago
图片总数{{ totalPic }}
2 years ago
</div> -->
2 years ago
</div>
<div class="parameterArea">
<div class="paramsDate">
2 years ago
<h3>日历快速查询</h3>
<el-date-picker
v-model="dateValue"
type="date"
placeholder="选择日期"
value-format="timestamp"
@change="changedate"
2 years ago
>
</el-date-picker>
</div>
2 years ago
<div class="monitorItemBox" v-if="channelOption.length !== 0">
2 years ago
<h3>选择通道监拍点</h3>
<el-select
v-model="channelValue"
placeholder="请选择"
@change="changeChannelId"
2 years ago
multiple
ref="multiSelect"
>
<el-option
v-for="item in channelOption"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</div>
2 years ago
<div class="setTimebtn">
2 years ago
<h3>操作项</h3>
2 years ago
<div class="buttonGroup">
<el-button type="primary" @click.native.stop="handleSetSchedule()"
>时间表设置</el-button
>
2 years ago
<!-- <el-button type="primary" v-debounce="handleShowPic"
2 years ago
>手动拍照</el-button
2 years ago
> -->
<el-dropdown @command="handleCommandpic">
<el-button type="primary">
手动拍照<i class="el-icon-arrow-down el-icon--right"></i>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item
:command="item.value"
v-for="(item, index) in channelOption"
>{{ item.label }}</el-dropdown-item
>
</el-dropdown-menu>
</el-dropdown>
<el-dropdown @command="handleCommandvideo">
<el-button type="primary">
手动拍视频<i class="el-icon-arrow-down el-icon--right"></i>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item
:command="item.value"
v-for="(item, index) in channelOption"
>{{ item.label }}</el-dropdown-item
>
</el-dropdown-menu>
</el-dropdown>
<!-- <el-button type="primary" @click="handleShowPic"
>手动拍视频</el-button
> -->
2 years ago
<el-button type="primary" v-debounce="handleShowGPS"
2 years ago
>获取GPS位置</el-button
2 years ago
>
2 years ago
<el-button type="primary" @click="handleShowInfo">
2 years ago
装置信息</el-button
>
<el-dropdown
class="dropgps"
trigger="click"
@command="handleCommand"
>
<el-button type="primary">
GPS开关<i class="el-icon-arrow-down el-icon--right"></i>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="open">开启GPS</el-dropdown-item>
<el-dropdown-item command="close">关闭GPS</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
2 years ago
<el-button type="primary" v-debounce="handleShowErr"
2 years ago
>声光报警</el-button
>
2 years ago
<!-- <el-button type="primary" @click="handlehistoryPic"
2 years ago
>历史图片</el-button
> -->
2 years ago
</div>
</div>
2 years ago
</div>
</div>
2 years ago
<setschedule ref="setschedule_ref"></setschedule>
2 years ago
<info-dialog ref="infodialog_ref"></info-dialog>
</div>
</div>
2 years ago
</template>
<script>
import {
2 years ago
getdyTreeListJoggle,
2 years ago
getChannelByTermidJoggle,
getTerminalPhotoListJoggle,
2 years ago
getTermGPSJoggle,
setTermGPSJoggle,
getLatestPhotoJoggle,
getReturnedPhotoJoggle,
} from "@/utils/api/index";
import carouselChart from "../components/carouselChart.vue";
import setschedule from "./components/setschedule.vue";
import deviceUpgrade from "./components/deviceUpgrade.vue";
import pictureTags from "./components/pictureTags.vue";
2 years ago
import infoDialog from "./components/infoDialog.vue";
2 years ago
export default {
components: {
carouselChart,
setschedule,
deviceUpgrade,
pictureTags,
2 years ago
infoDialog,
},
data() {
return {
2 years ago
flag: true,
onlinestatus: "", //设备状态
showBigPic: true,
defaultKey: "",
lineTreeData: [],
defaultProps: {
//指定参数格式回显数据
children: "list",
label: "name",
},
currentNodekey: "", //默认选中的节点树,
2 years ago
cmdid: "", //装置id,
channelId: "", //通道装置id
2 years ago
channelList: "", //通道数据
channelOption: [], //通道分类
channelValue: [], //选中的通道
2 years ago
terminalPhoto: [], //获取拍照装置当前数据
2 years ago
totalPic: "",
2 years ago
dateValue: "", //日期
2 years ago
nopicPath: require("@/assets/img/nopic.jpg"),
2 years ago
loadingBg: true,
loading: true,
2 years ago
GPSValue: "",
GpsOption: [
{
value: "1",
label: "开启",
},
{
value: "0",
label: "关闭",
},
],
newPicData: "",
timer: null,
i: 0,
newTermId: "",
};
},
watch: {
// channelValue() {
// setTimeout(() => {
// this.$refs.multiSelect.blur();
// }, 50);
// },
},
2 years ago
mounted() {},
created() {
this.getLineTreeList();
2 years ago
this.getDateTime();
console.log(this.dateValue);
},
methods: {
2 years ago
//获取当前时间
getDateTime() {
this.dateValue = new Date().getTime();
},
//选择时间
changedate() {
console.log(this.dateValue);
console.log(this.channelList);
this.getTerminalPhotoList(
2 years ago
this.channelValue,
this.dateValue,
this.channelList[0].termId
);
2 years ago
},
//获取左侧树结构
2 years ago
getLineTreeList() {
2 years ago
this.loadingBg = true;
2 years ago
getdyTreeListJoggle()
.then((res) => {
console.log(res);
this.lineTreeData = res.data.list;
console.log(this.lineTreeData);
2 years ago
console.log(this.lineTreeData[0].list[0].list);
if (this.lineTreeData[0].list[0].list.length > 0) {
this.currentNodekey = this.lineTreeData[0].list[0].list[0].id; //第一个数据
this.newTermId = this.lineTreeData[0].list[0].list[0].id;
2 years ago
this.cmdid = this.lineTreeData[0].list[0].list[0].cmdid;
2 years ago
this.$nextTick(() => {
this.$refs.tree.setCurrentKey(this.currentNodekey); //一定要加这个选中了否则样式没有出来
this.channelId = this.currentNodekey;
this.getChannelList(this.channelId); //获取通道id接口
});
}
2 years ago
this.loadingBg = false;
})
.catch((err) => {
console.log(err); //代码错误、请求失败捕获
2 years ago
});
},
2 years ago
//点击获取当前点击的tree数据
handleNodeClick(data, node) {
console.log(data, node);
if (data.list) {
this.$refs.tree.setCurrentKey(data.list[0].id);
}
this.channelId = data.id; //获取当前点击的id
2 years ago
this.cmdid = data.cmdid;
this.newTermId = data.id; //获取当前点击的id
2 years ago
console.log(data);
this.channelValue = [];
2 years ago
this.channelOption = [];
2 years ago
this.getChannelList(this.channelId); //获取通道id接口
},
2 years ago
//获取通道的接口
2 years ago
getChannelList(id) {
2 years ago
getChannelByTermidJoggle({ termid: id })
2 years ago
.then((res) => {
console.log(res);
this.channelList = res.data.list;
2 years ago
console.log(this.channelList);
2 years ago
this.channelOption = [];
2 years ago
this.channelList.forEach((item) => {
this.channelOption.push({
2 years ago
label: item.channelname,
value: item.channelid,
2 years ago
termid: item.termId,
});
this.channelValue.push(item.channelid); //默认选中所有通道
2 years ago
}); // 选择通道一通道二select框
console.log(this.channelOption);
console.log(this.channelValue);
// console.log(JSON.parse(JSON.stringify(this.channelValue)));
// this.channelValue = JSON.parse(JSON.stringify(this.channelValue));
2 years ago
console.log(this.channelOption.length);
if (this.channelOption.length == 0) {
console.log("没有绑定通道");
this.terminalPhoto = [
{
path: this.nopicPath,
},
];
console.log(this.terminalPhoto);
return;
} else {
this.getTerminalPhotoList(
this.channelValue,
this.dateValue,
this.channelList[0].termId
); //获取图片列表是传当前设备的 id 和termid
}
2 years ago
})
.catch((err) => {
console.log(err); //代码错误、请求失败捕获
});
},
//获取图片
getTerminalPhotoList(id, date, termId) {
2 years ago
this.loading = true;
this.terminalPhoto = [];
console.log(id, date, termId);
2 years ago
getTerminalPhotoListJoggle({
channelid: id,
time: date,
2 years ago
terminalid: termId,
})
.then((res) => {
console.log(res);
if (res.data.list.length == 0) {
this.terminalPhoto = [
{
path: this.nopicPath,
},
];
2 years ago
this.totalPic = 0;
} else {
this.terminalPhoto = res.data.list;
}
2 years ago
console.log(this.terminalPhoto.length);
this.totalPic = res.data.num;
//this.$refs.a.getphotodata(this.terminalPhoto);
2 years ago
this.loading = false;
2 years ago
console.log(this.terminalPhoto);
})
.catch((err) => {
console.log(err); //代码错误、请求失败捕获
});
},
//切换通道
changeChannelId(val) {
console.log(val);
let channelObj = {};
channelObj = this.channelOption.find(function (i) {
return i.value;
2 years ago
});
console.log(channelObj);
this.getTerminalPhotoList(val, this.dateValue, channelObj.termid);
2 years ago
},
2 years ago
//设置时间表
handleSetSchedule() {
this.$refs.setschedule_ref.display();
this.$refs.setschedule_ref.getSingleAccess(this.channelId);
this.$refs.setschedule_ref.deviceList();
2 years ago
console.log();
},
2 years ago
handleShowErr() {
this.$message({
message: "该功能暂未开发,敬请期待",
type: "warning",
});
},
2 years ago
2 years ago
//切换gps开启关闭
changeGPS(val) {
console.log(val);
setTermGPSJoggle({ gpsstatus: val, termid: this.channelId })
.then((res) => {
console.log(res);
if (val == 0) {
this.$message("关闭GPS");
} else {
this.$message({
message: "成功开启GPS",
type: "success",
});
}
})
.catch((err) => {
console.log(err); //代码错误、请求失败捕获
});
},
handleCommand(command) {
switch (command) {
case "open": //开启
this.changeGPS(1);
break;
case "close": //关闭
this.changeGPS(0);
break;
}
},
2 years ago
//获取GPS位置
handleShowGPS() {
2 years ago
getTermGPSJoggle({ termId: this.channelId })
.then((res) => {
console.log(res);
this.$alert(
"<p><label>经度:</label><span>" +
`${res.data.longitude}` +
"</span></p><p><label>纬度:</label><span>" +
`${res.data.latitude}` +
"</span></p><p><label>半径:</label><span>" +
`${res.data.radius}` +
"</span></p>",
"GPS位置",
{
dangerouslyUseHTMLString: true,
customClass: "messageGps",
}
);
})
.catch((err) => {
console.log(err); //代码错误、请求失败捕获
});
},
//手动拍照
2 years ago
handleCommandpic(command) {
console.log(command);
2 years ago
getLatestPhotoJoggle({
captureType: 0,
2 years ago
channel: command,
2 years ago
cmdid: this.cmdid,
preset: 255,
})
.then((res) => {
2 years ago
this.$message({
message: "自动拍照请求成功!",
type: "success",
});
2 years ago
console.log(res);
this.newPicData = res.data;
console.log(this.newPicData);
console.log(this.newTermId);
2 years ago
this.timer = window.setInterval(() => {
this.newPicApi();
this.i++;
2 years ago
}, 5000);
2 years ago
})
.catch((err) => {
console.log(err); //代码错误、请求失败捕获
});
2 years ago
},
2 years ago
//手动拍视频
handleCommandvideo(command) {
console.log(command);
getLatestPhotoJoggle({
captureType: 1,
channel: command,
cmdid: this.cmdid,
preset: 255,
})
.then((res) => {
this.$message({
message: "自动拍视频请求成功!",
type: "success",
});
console.log(res);
this.newPicData = res.data;
console.log(this.newPicData);
console.log(this.newTermId);
this.timer = window.setInterval(() => {
this.newPicApi();
this.i++;
}, 5000);
})
.catch((err) => {
console.log(err); //代码错误、请求失败捕获
});
},
//手动拍照
// handleShowPic() {
// console.log(this.channelValue[0]);
// console.log(this.cmdid);
// getLatestPhotoJoggle({
// captureType: 0,
// channel: this.channelValue[0],
// cmdid: this.cmdid,
// preset: 255,
// })
// .then((res) => {
// this.$message({
// message: "自动拍照请求成功!",
// type: "success",
// });
// console.log(res);
// this.newPicData = res.data;
// console.log(this.newPicData);
// console.log(this.newTermId);
// this.timer = window.setInterval(() => {
// this.newPicApi();
// this.i++;
// }, 10000);
// })
// .catch((err) => {
// console.log(err); //代码错误、请求失败捕获
// });
// },
//获取最新图片
newPicApi() {
getReturnedPhotoJoggle({
photoTime: this.newPicData,
termId: this.newTermId,
}).then((res) => {
console.log(res.data);
console.log(this.i);
//console.log(this.newPicData, this.currentNodekey);
if (res.data == true && this.i < 10) {
console.log(res.data);
clearInterval(this.timer);
this.timer = null;
this.getTerminalPhotoList(
this.channelValue,
this.dateValue,
this.channelList[0].termId
);
console.log("返回最新图片");
2 years ago
this.i = 0;
} else if (res.data == false && this.i > 10) {
2 years ago
this.i = 0;
clearInterval(this.timer);
this.timer = null;
this.$message({
2 years ago
message: "装置暂无响应,请稍后再试!",
type: "warning",
});
}
console.log("2222222222222222");
});
},
stop() {
clearInterval(this.timer);
this.timer = null;
},
2 years ago
//装置信息handleShowInfo
handleShowInfo() {
this.$refs.infodialog_ref.display();
2 years ago
this.$refs.infodialog_ref.getListData(this.channelId);
2 years ago
},
2 years ago
//历史图片
2 years ago
// handlehistoryPic() {
// this.$router.push({ path: "/realTimeSearch" });
// // sessionStorage.setItem("keyPath", " realTimeSearch");
// },
},
destroyed() {
//离开页面是销毁
2 years ago
if (this.timer) {
console.log(this.timer);
clearInterval(this.timer);
this.timer = null;
} //利用vue的生命周期函数
},
2 years ago
};
</script>
<style lang="less">
.monitorBox {
2 years ago
width: calc(100% - 0px);
2 years ago
height: calc(100% - 16px);
padding: 16px 0px 0px 0px;
background: #ffffff;
.monitor-container {
2 years ago
display: flex;
height: 100%;
box-sizing: border-box;
background: @color-white;
border: 1px solid #dddddd;
border-radius: 4px;
.sideBar {
width: 300px;
border-right: 1px solid @border-color-base;
overflow: auto;
padding: 16px 0px;
.el-tree {
.el-tree-node__content {
height: 40px;
2 years ago
font-size: 12px;
}
.custom-tree-node {
color: #333;
}
}
.el-tree--highlight-current
.el-tree-node.is-current
> .el-tree-node__content {
// 设置颜色
color: #fff;
background: #2d8cf0;
.custom-tree-node {
color: #fff;
}
}
.disconnect {
color: #d3d3d3;
}
}
.picSetBox {
display: flex;
width: 100%;
height: 100%;
//background: #fcc;
flex: 1;
overflow: hidden;
.swiperBox {
-webkit-box-flex: 1;
-ms-flex: 1;
flex: 1;
width: auto;
overflow: hidden;
2 years ago
display: flex;
flex-direction: column;
}
.totalPic {
width: 100%;
2 years ago
height: 16px;
2 years ago
margin-bottom: 8px;
2 years ago
text-align: right;
2 years ago
font-size: 12px;
2 years ago
color: #2d8cf0;
font-weight: bold;
2 years ago
line-height: 16px;
2 years ago
}
}
.parameterArea {
width: 220px;
padding: 16px 16px;
border-left: 1px solid #dcdfe6;
2 years ago
position: relative;
.monitorItemBox,
.paramsDate,
2 years ago
.setTimebtn,
.GPSItemBox {
margin-bottom: 16px;
h3 {
2 years ago
font-size: 14px;
font-weight: normal;
color: @color-text-primary;
margin-bottom: 8px;
}
.el-date-editor.el-input {
width: 215px;
}
2 years ago
}
2 years ago
.setTimebtn {
2 years ago
// position: absolute;
// bottom: 0px;
2 years ago
.buttonGroup {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
.el-button {
margin-bottom: 8px;
width: 104px;
}
.el-button + .el-button {
margin-left: 0px;
}
}
}
2 years ago
}
}
2 years ago
}
2 years ago
.messageGps {
.el-message-box__message {
p {
line-height: 32px;
font-size: 16px;
label {
margin-right: 4px;
}
span {
color: #333;
}
}
}
}
2 years ago
.el-loading-mask {
z-index: 9999;
}
</style>