Merge branch 'master' of http://192.168.124.50:80/wuhongjian/qd-changjing
|
@ -232,7 +232,7 @@ export default {
|
||||||
selectByAreaEvent(params).then((res) => {
|
selectByAreaEvent(params).then((res) => {
|
||||||
this.eventListData = res.data.data.events;
|
this.eventListData = res.data.data.events;
|
||||||
this.total = res.data.data.sum;
|
this.total = res.data.data.sum;
|
||||||
this.$parent.allListDataNum = res.data.data.sum;
|
// this.$parent.allListDataNum = res.data.data.sum;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
beforeCreate() {}, //生命周期 - 创建之前
|
beforeCreate() {}, //生命周期 - 创建之前
|
||||||
|
|
|
@ -2,14 +2,14 @@
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<div class="list4">
|
<div class="list4">
|
||||||
<div class="inner-title">
|
<div class="inner-title">
|
||||||
重点点位视频监控
|
<p style="width:170px">重点点位视频监控</p>
|
||||||
<span
|
<span
|
||||||
@click="openVideoList"
|
@click="openVideoList"
|
||||||
style="float: right;
|
style="float: right;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
color: rgb(0 255 255); cursor: pointer;
|
color: rgb(0 255 255); cursor: pointer; margin-top: -27px;
|
||||||
"
|
"
|
||||||
>查看点位列表>
|
>查看点位列表>
|
||||||
<!-- <span style="color: #1296db; font-size: 18px; font-weight: bold;cursor: pointer;"
|
<!-- <span style="color: #1296db; font-size: 18px; font-weight: bold;cursor: pointer;"
|
||||||
|
@ -17,40 +17,28 @@
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="video-List">
|
<div class="video-List">
|
||||||
<div id="video1" class="monitor">
|
<video-play v-if="openVideo" :channel-id="channelCode"></video-play>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<!--视频列表弹出框-->
|
|
||||||
<!-- <dialog :visible.sync="this.listVisible">>
|
|
||||||
<video-list></video-list>
|
|
||||||
</dialog> -->
|
|
||||||
<!-- <el-dialog
|
|
||||||
title="提示"
|
|
||||||
:visible.sync="dialogVisible"
|
|
||||||
width="30%"
|
|
||||||
:before-close="handleClose">
|
|
||||||
<video-list></video-list>
|
|
||||||
</el-dialog> -->
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import bus from "@/views/layout/bus";
|
import bus from "@/views/layout/bus";
|
||||||
import * as echarts from "echarts";
|
import * as echarts from "echarts";
|
||||||
import VideoList from "./VideoList";
|
import VideoPlay from './VideoPlay'
|
||||||
// 大华监控配置
|
|
||||||
const DHWsInstance = DHWs.getInstance({
|
|
||||||
reConnectCount: 0,
|
|
||||||
connectionTimeout: 100
|
|
||||||
})
|
|
||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
openVideo:true,
|
||||||
|
channelCode: ['37020220001321113922'],
|
||||||
videoVisible: false,
|
videoVisible: false,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
components: {VideoList},
|
components: {VideoPlay},
|
||||||
created() {},
|
created() {},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
|
||||||
|
@ -79,17 +67,25 @@ export default {
|
||||||
.box {
|
.box {
|
||||||
position: relative;
|
position: relative;
|
||||||
.inner-title {
|
.inner-title {
|
||||||
margin-top: 5px;
|
margin-top: 8px;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 8px;
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
|
color: #ffffff;
|
||||||
|
p{
|
||||||
|
line-height: 27px;
|
||||||
|
background: linear-gradient(90deg, #0873c1 0, rgba(8, 115, 193, 0) 100%) ;
|
||||||
|
color: #1ffefd;
|
||||||
|
width: auto;
|
||||||
|
padding-left: 5px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.list4 {
|
.list4 {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
.video-List {
|
.video-List {
|
||||||
// background: red;
|
//background: red;
|
||||||
height: 146px;
|
height: 146px;
|
||||||
margin-left: 40px;
|
margin-left: 40px;
|
||||||
margin-right: 40px;
|
margin-right: 40px;
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
<!--人员聚集高发区域Top5-->
|
<!--人员聚集高发区域Top5-->
|
||||||
<div class="list1-people">
|
<div class="list1-people">
|
||||||
<div class="people-left">
|
<div class="people-left">
|
||||||
<div class="inner-title">人员聚集高发区域Top5</div>
|
<div class="inner-title"><p style="width:180px">人员聚集高发区域Top5</p></div>
|
||||||
<div class="left-list" v-for="item in top5AreaList">
|
<div class="left-list" v-for="item in top5AreaList">
|
||||||
<div class="left-list1">{{ item.title }}</div>
|
<div class="left-list1"><img :src="item.img"></div>
|
||||||
<div
|
<div
|
||||||
:class="selectArea === item.areaId ? 'active-item' : 'left-list2'"
|
:class="selectArea === item.areaId ? 'active-item' : 'left-list2'"
|
||||||
@click="chooseSelectArea(item)"
|
@click="chooseSelectArea(item)"
|
||||||
|
@ -29,7 +29,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="people-right">
|
<div class="people-right">
|
||||||
<div class="inner-title">高发事件Top5</div>
|
<div class="inner-title"><p style="width:150px">高发事件Top5</p></div>
|
||||||
<div class="top5EventStyle" id="top5-event-chart"></div>
|
<div class="top5EventStyle" id="top5-event-chart"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -37,8 +37,9 @@
|
||||||
<!--相关性分析-->
|
<!--相关性分析-->
|
||||||
<div class="list2">
|
<div class="list2">
|
||||||
<div class="inner-title">
|
<div class="inner-title">
|
||||||
相关性分析
|
<p style="width:120px">
|
||||||
<span
|
相关性分析</p>
|
||||||
|
<!-- <span
|
||||||
style="
|
style="
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
margin-left: 8px;
|
margin-left: 8px;
|
||||||
|
@ -47,10 +48,10 @@
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
"
|
"
|
||||||
>分析过程</span
|
>分析过程</span
|
||||||
>
|
> -->
|
||||||
</div>
|
</div>
|
||||||
<div class="list2-conclusion">
|
<div class="list2-conclusion">
|
||||||
结论:<span>{{ relevanceName1 }}</span
|
<img src="../image/zongjie.png"> 结论:<span>{{ relevanceName1 }}</span
|
||||||
>、<span>{{ relevanceName2 }}</span
|
>、<span>{{ relevanceName2 }}</span
|
||||||
>、<span>{{ relevanceName1 }}</span> 与<span>{{ areaName }}</span
|
>、<span>{{ relevanceName1 }}</span> 与<span>{{ areaName }}</span
|
||||||
>人员聚集较强相关。
|
>人员聚集较强相关。
|
||||||
|
@ -59,7 +60,7 @@
|
||||||
</div>
|
</div>
|
||||||
<!--管理力量分析建议-->
|
<!--管理力量分析建议-->
|
||||||
<div class="list3">
|
<div class="list3">
|
||||||
<div class="inner-title">管理力量分析建议</div>
|
<div class="inner-title"><p style="width:160px">管理力量分析建议</p></div>
|
||||||
<div class="list3-analysis">
|
<div class="list3-analysis">
|
||||||
<div class="analysis-item">
|
<div class="analysis-item">
|
||||||
<div class="item-div">
|
<div class="item-div">
|
||||||
|
@ -88,7 +89,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="analysis-advice">
|
<div class="analysis-advice">
|
||||||
<span style="font-size: 14px; color: #fff">决策建议:</span>
|
<span style="font-size: 14px; color: #fff"><img src="../image/jianyi.png"> 决策建议:</span>
|
||||||
预测<span
|
预测<span
|
||||||
style="
|
style="
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
|
@ -98,18 +99,19 @@
|
||||||
"
|
"
|
||||||
>{{ analysis.area }}</span
|
>{{ analysis.area }}</span
|
||||||
>
|
>
|
||||||
下周人流量较高,建议增加环卫人员数量、垃圾收运频次
|
本周末人流量较高,建议增加管理人员数量、环卫人员数量。
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import bus from "@/views/layout/bus";
|
import bus from "@/views/layout/bus";
|
||||||
|
|
||||||
import * as echarts from "echarts";
|
import * as echarts from "echarts";
|
||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
daterange: null,
|
daterange: ['2022-11-18','2022-11-25'],
|
||||||
dataForm: {
|
dataForm: {
|
||||||
title: "",
|
title: "",
|
||||||
startDate: "",
|
startDate: "",
|
||||||
|
@ -127,15 +129,16 @@ export default {
|
||||||
//管理力量分析
|
//管理力量分析
|
||||||
analysis: {
|
analysis: {
|
||||||
manageNum: 3,
|
manageNum: 3,
|
||||||
sanitationNum: 14,
|
sanitationNum: 5,
|
||||||
garbageNum: 2,
|
garbageNum: 2,
|
||||||
mechanNum: 1,
|
mechanNum: 1,
|
||||||
advice: "",
|
advice: "",
|
||||||
area: "第一海水浴场",
|
area: "台东商圈",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
components: {},
|
components: {
|
||||||
|
},
|
||||||
created() {},
|
created() {},
|
||||||
mounted() {
|
mounted() {
|
||||||
//获取高发区域
|
//获取高发区域
|
||||||
|
@ -155,33 +158,38 @@ export default {
|
||||||
this.top5AreaList = [
|
this.top5AreaList = [
|
||||||
{
|
{
|
||||||
title: "TOP1",
|
title: "TOP1",
|
||||||
areaName: "第一海水浴场",
|
img:require("../image/one.png"),
|
||||||
|
areaName: "台东商圈",
|
||||||
areaId: "1",
|
areaId: "1",
|
||||||
num: "223",
|
num: "12",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "TOP2",
|
title: "TOP2",
|
||||||
areaName: "石老人海水浴场",
|
img:require("../image/two.png"),
|
||||||
|
areaName: "李村商圈",
|
||||||
areaId: "2",
|
areaId: "2",
|
||||||
num: "123",
|
num: "8",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "TOP3",
|
title: "TOP3",
|
||||||
areaName: "金沙滩海水浴场",
|
img:require("../image/three.png"),
|
||||||
|
areaName: "五四广场",
|
||||||
areaId: "3",
|
areaId: "3",
|
||||||
num: "111",
|
num: "7",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "4",
|
title: "4",
|
||||||
|
img:require("../image/four.png"),
|
||||||
areaName: "第一海水浴场",
|
areaName: "第一海水浴场",
|
||||||
areaId: "4",
|
areaId: "4",
|
||||||
num: "65",
|
num: "5",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "5",
|
title: "5",
|
||||||
areaName: "第一海水浴场",
|
img:require("../image/five.png"),
|
||||||
|
areaName: "石老人海水浴场",
|
||||||
areaId: "5",
|
areaId: "5",
|
||||||
num: "32",
|
num: "4",
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
},
|
},
|
||||||
|
@ -214,7 +222,7 @@ export default {
|
||||||
},
|
},
|
||||||
xAxis: {
|
xAxis: {
|
||||||
type: "category",
|
type: "category",
|
||||||
data: ["人员聚集", "违规停车", "路面不洁", "违章", "占道经营"],
|
data: ["违章停车", "垃圾桶满溢", "占道经营", "道路不洁", "垃圾收运不及时"],
|
||||||
axisLine: {
|
axisLine: {
|
||||||
show: false, // 不显示坐标轴线
|
show: false, // 不显示坐标轴线
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
|
@ -254,7 +262,8 @@ export default {
|
||||||
},
|
},
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
data: [250, 200, 150, 110, 100, 50],
|
name:"事件数量",
|
||||||
|
data: [31, 24, 17, 13, 12],
|
||||||
type: "bar",
|
type: "bar",
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
|
@ -308,7 +317,7 @@ export default {
|
||||||
},
|
},
|
||||||
xAxis: {
|
xAxis: {
|
||||||
type: "category",
|
type: "category",
|
||||||
data: ["11.04", "11.05", "11.06", "11.07", "11.08", "11.09", "11.10"],
|
data: ["11/18", "11/19", "11/20", "11/21", "11/22", "11/23", "11/24"],
|
||||||
axisLine: {
|
axisLine: {
|
||||||
show: false, // 不显示坐标轴线
|
show: false, // 不显示坐标轴线
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
|
@ -374,8 +383,8 @@ export default {
|
||||||
],
|
],
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
name: "人员数量",
|
name: "人流量",
|
||||||
data: [14, 10, 4, 11, 10, 12, 6, 13],
|
data: [2500, 5600, 6500, 1200, 2300, 2400, 1900, 1800],
|
||||||
type: "bar",
|
type: "bar",
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
|
@ -394,10 +403,10 @@ export default {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "路面不洁",
|
name: "违章停车数量",
|
||||||
type: "line",
|
type: "line",
|
||||||
yAxisIndex: 1,
|
yAxisIndex: 1,
|
||||||
data: [150, 165, 160, 150, 130, 140, 160],
|
data: [1, 10, 12, 2, 2, 3, 2,1],
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
color: "#faa12f", //圆点颜色
|
color: "#faa12f", //圆点颜色
|
||||||
|
@ -414,10 +423,10 @@ export default {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "违规停车",
|
name: "垃圾桶满溢事件数量",
|
||||||
type: "line",
|
type: "line",
|
||||||
yAxisIndex: 1,
|
yAxisIndex: 1,
|
||||||
data: [140, 155, 126, 172, 130, 120, 150],
|
data: [1,7,8,1,2,2,1,2],
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
color: "#eff20c", //圆点颜色
|
color: "#eff20c", //圆点颜色
|
||||||
|
@ -434,10 +443,10 @@ export default {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "垃圾桶满溢",
|
name: "占道经营事件数量",
|
||||||
type: "line",
|
type: "line",
|
||||||
yAxisIndex: 1,
|
yAxisIndex: 1,
|
||||||
data: [170, 155, 110, 120, 110, 120, 110],
|
data: [1,4,5,1,1,2,1,2],
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
color: "#08e715", //圆点颜色
|
color: "#08e715", //圆点颜色
|
||||||
|
@ -453,6 +462,46 @@ export default {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "道路不洁事件数量",
|
||||||
|
type: "line",
|
||||||
|
yAxisIndex: 1,
|
||||||
|
data: [1,2,1,1,2,2,3,1],
|
||||||
|
itemStyle: {
|
||||||
|
normal: {
|
||||||
|
color: "#e51b4d", //圆点颜色
|
||||||
|
borderColor: "rgba(251,222,153,0.5)",
|
||||||
|
borderWidth: 4,
|
||||||
|
lineStyle: {
|
||||||
|
//折线颜色大小
|
||||||
|
type: "solid", //'dotted'虚线 'solid'实线
|
||||||
|
color: "#e51b4d",
|
||||||
|
width: 1,
|
||||||
|
borderColor: "#e51b4d", //拐点边框颜色
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "垃圾收运不及时事件数量",
|
||||||
|
type: "line",
|
||||||
|
yAxisIndex: 1,
|
||||||
|
data: [2,1,1,2,1,3,1,1],
|
||||||
|
itemStyle: {
|
||||||
|
normal: {
|
||||||
|
color: "#d63ac3", //圆点颜色
|
||||||
|
borderColor: "rgba(251,222,153,0.5)",
|
||||||
|
borderWidth: 4,
|
||||||
|
lineStyle: {
|
||||||
|
//折线颜色大小
|
||||||
|
type: "solid", //'dotted'虚线 'solid'实线
|
||||||
|
color: "#d63ac3",
|
||||||
|
width: 1,
|
||||||
|
borderColor: "#d63ac3", //拐点边框颜色
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
eventChart.setOption(option);
|
eventChart.setOption(option);
|
||||||
|
@ -503,22 +552,32 @@ export default {
|
||||||
line-height: 14px;
|
line-height: 14px;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
}
|
}
|
||||||
|
::v-deep .el-date-editor .el-range__close-icon {
|
||||||
|
line-height: 14px;
|
||||||
|
}
|
||||||
::v-deep .el-date-editor .el-range-input {
|
::v-deep .el-date-editor .el-range-input {
|
||||||
background: #9000;
|
background: #9000;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
.inner-title {
|
.inner-title {
|
||||||
margin-top: 5px;
|
margin-top: 10px;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 10px;
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
// background: linear-gradient(90deg, #0873c1 0, rgba(8, 115, 193, 0) 100%);
|
p{
|
||||||
|
line-height: 27px;
|
||||||
|
background: linear-gradient(90deg, #0873c1 0, rgba(8, 115, 193, 0) 100%) ;
|
||||||
|
color: #1ffefd;
|
||||||
|
width: auto;
|
||||||
|
padding-left: 5px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.list1 {
|
.list1 {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
margin-bottom:10px;
|
||||||
.list1-people {
|
.list1-people {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
||||||
|
@ -549,6 +608,7 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.active-item {
|
.active-item {
|
||||||
|
cursor: pointer;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
float: left;
|
float: left;
|
||||||
width: 50%;
|
width: 50%;
|
||||||
|
@ -579,6 +639,7 @@ export default {
|
||||||
}
|
}
|
||||||
.list2 {
|
.list2 {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
margin-bottom: 10px;
|
||||||
.list2-conclusion {
|
.list2-conclusion {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
border-color: #107bb0;
|
border-color: #107bb0;
|
||||||
|
@ -617,9 +678,13 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.analysis-advice {
|
.analysis-advice {
|
||||||
|
border-color: #107bb0;
|
||||||
|
box-shadow: 1px 1px 5px 1px RGB(16, 123, 176, 0.8) inset;
|
||||||
color: rgb(0 255 255);
|
color: rgb(0 255 255);
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
|
margin-right: 10px;
|
||||||
|
margin-top: 8px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.list4 {
|
.list4 {
|
||||||
|
|
|
@ -0,0 +1,376 @@
|
||||||
|
<template>
|
||||||
|
<div class="box">
|
||||||
|
|
||||||
|
<div class="tabs-button">
|
||||||
|
<div class="tabs-button-box">
|
||||||
|
<div class="tabs-button-btn"
|
||||||
|
@click="tabHandleClick(item)"
|
||||||
|
v-for="item in tabsButton"
|
||||||
|
:key="item"
|
||||||
|
:class="tabsActiveName == item ? 'tabs-button-btn-active' : '' "
|
||||||
|
>
|
||||||
|
{{item}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div v-show="tabsActiveName == '视频标签'" class="label-content">
|
||||||
|
<el-input
|
||||||
|
placeholder="请输入关键词"
|
||||||
|
prefix-icon="el-icon-search"
|
||||||
|
v-model="labelSearch"
|
||||||
|
@input="searchLabel"
|
||||||
|
>
|
||||||
|
</el-input>
|
||||||
|
<el-checkbox-group v-model="checkboxGroup">
|
||||||
|
<el-checkbox-button
|
||||||
|
v-for="item in tabList"
|
||||||
|
:label="item.labelName"
|
||||||
|
:key="item.id"
|
||||||
|
@change="tabChange(item)"
|
||||||
|
>
|
||||||
|
{{item.labelName}}
|
||||||
|
</el-checkbox-button>
|
||||||
|
</el-checkbox-group>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div v-show="tabsActiveName == '视频列表'" class="label-content">
|
||||||
|
<el-input
|
||||||
|
placeholder="请输入关键词"
|
||||||
|
suffix-icon="el-icon-search"
|
||||||
|
v-model="labelSearch"
|
||||||
|
@input="searchCameraTree"
|
||||||
|
>
|
||||||
|
</el-input>
|
||||||
|
<el-tree
|
||||||
|
v-show="cameraTreeIsShow"
|
||||||
|
id="tree"
|
||||||
|
:data="cameraTree"
|
||||||
|
:props="{label:'name',children:'children',isLeaf:'leaf',}"
|
||||||
|
:load="loadNode"
|
||||||
|
node-key="id"
|
||||||
|
@node-click="treeCameraClick"
|
||||||
|
empty-text="暂无数据"
|
||||||
|
:filter-node-method="filterNode"
|
||||||
|
lazy>
|
||||||
|
<!-- 是否离线checkStatus -->
|
||||||
|
<!-- <span :style="{backgroundColor: data.checkStatus == 0 ?'#ccc' : ''}" slot-scope="{ node, data }" class="custom-tree-node"> -->
|
||||||
|
<!-- <span>{{ data.channelName || '' }}</span> -->
|
||||||
|
<!-- </span> -->
|
||||||
|
</el-tree>
|
||||||
|
<el-tree
|
||||||
|
v-show="!cameraTreeIsShow"
|
||||||
|
ref="tree"
|
||||||
|
:data="cameraTreeSingle"
|
||||||
|
:props="{label:'channelName',children:'children'}"
|
||||||
|
:filter-node-method="filterNode"
|
||||||
|
@node-click="treeCameraClick"
|
||||||
|
>
|
||||||
|
<!-- <span :style="{backgroundColor: data.checkStatus == 0 ?'#ccc' : ''}" slot-scope="{ node, data }" class="custom-tree-node"> -->
|
||||||
|
<!-- <span>{{ data.channelName || '' }}</span> -->
|
||||||
|
<!-- </span> -->
|
||||||
|
</el-tree>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
|
||||||
|
import { getCameraAll,getCameraLabel,getCameraAllLabel,searchCamera,getCameraAllOrgan,getCameraByParentId,selectByLabelName,selectByChannelName } from '@/api/videoSurveillance/index'
|
||||||
|
import bus from "@/views/layout/bus";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
tabsButton: ["视频标签","视频列表"],
|
||||||
|
tabsActiveName: "视频标签",
|
||||||
|
tabList:[],
|
||||||
|
labelSearch:'',
|
||||||
|
checkboxGroup: [],
|
||||||
|
cameraAllData:[],
|
||||||
|
cameraTreeIsShow:true,
|
||||||
|
cameraTreeSingle: [],
|
||||||
|
checkStatus: '2',
|
||||||
|
cameraTree:[],
|
||||||
|
};
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
getCameraAllLabel().then((res) => {
|
||||||
|
this.tabList = res.data.data
|
||||||
|
});
|
||||||
|
getCameraAll().then((res) => {
|
||||||
|
this.cameraAllData = res.data
|
||||||
|
// this.addResourceTomap('cameraAll',res.data);
|
||||||
|
})
|
||||||
|
getCameraAllOrgan({parentId:'S4NbecfYB1DBH8HNULGS34'}).then((res) => {
|
||||||
|
this.cameraTree = res.data.data
|
||||||
|
console.log(this.cameraTree)
|
||||||
|
res.data.data.forEach((item) => {
|
||||||
|
this.cameraTreeSingle.push({
|
||||||
|
channelName: item.name,
|
||||||
|
children: []
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
checkStatus(newV,oldV) {
|
||||||
|
console.log(newV)
|
||||||
|
this.$refs.tree.filter(newV)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
tabHandleClick(item) {
|
||||||
|
this.tabsActiveName = item
|
||||||
|
},
|
||||||
|
tabChange(item){
|
||||||
|
if(this.checkboxGroup.indexOf(item.labelName) !== -1){
|
||||||
|
bus.$emit("removeCameraLayer",'全部')
|
||||||
|
getCameraLabel({labelCode:item.labelCode}).then((res) => {
|
||||||
|
bus.$emit("CameraSingleDataOnMap",item.labelName,res.data.data)
|
||||||
|
|
||||||
|
// this.addResourceTomap(item.labelName,res.data.data);
|
||||||
|
// res.data.data.forEach((item) => {
|
||||||
|
// this.cameraTreeSingle.forEach((val) => {
|
||||||
|
// if(item.nodeName == val.channelName){
|
||||||
|
// val.children.push(item)
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
// })
|
||||||
|
// this.cameraTreeIsShow = false;
|
||||||
|
})
|
||||||
|
}else {
|
||||||
|
bus.$emit("removeCameraLayer",item.labelName)
|
||||||
|
// this.checkStatus = "2"
|
||||||
|
// this.cameraTreeIsShow = true
|
||||||
|
// getCameraAllOrgan({parentId:'S4NbecfYB1DBH8HNULGS34'}).then((res) => {
|
||||||
|
// this.cameraTree = res.data.data
|
||||||
|
// })
|
||||||
|
}
|
||||||
|
},
|
||||||
|
searchLabel(value) {
|
||||||
|
const params = {
|
||||||
|
labelName:value
|
||||||
|
}
|
||||||
|
selectByLabelName(params).then((res) => {
|
||||||
|
console.log(res)
|
||||||
|
this.tabList = res.data.data
|
||||||
|
})
|
||||||
|
},
|
||||||
|
searchCameraTree(value) {
|
||||||
|
if(value.length > 0){
|
||||||
|
const params = {
|
||||||
|
channelName:value
|
||||||
|
}
|
||||||
|
selectByChannelName(params).then((res) => {
|
||||||
|
console.log(res)
|
||||||
|
this.cameraTree = []
|
||||||
|
res.data.data.forEach((item) => {
|
||||||
|
this.cameraTree.push({
|
||||||
|
name: item.channelName,
|
||||||
|
gpsX: item.gpsX,
|
||||||
|
gpsY: item.gpsY,
|
||||||
|
channelCode:item.channelCode,
|
||||||
|
leaf:true,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}else {
|
||||||
|
getCameraAllOrgan({parentId:'S4NbecfYB1DBH8HNULGS34'}).then((res) => {
|
||||||
|
this.cameraTree = res.data.data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
reset() {
|
||||||
|
this.checkboxGroup = []
|
||||||
|
this.checkStatus = "2";
|
||||||
|
this.cameraTreeIsShow = true
|
||||||
|
getCameraAllOrgan({parentId:'S4NbecfYB1DBH8HNULGS34'}).then((res) => {
|
||||||
|
this.cameraTree = res.data.data
|
||||||
|
})
|
||||||
|
document.getElementById("tree").scrollTop = 0;
|
||||||
|
},
|
||||||
|
loadNode(node, resolve) {
|
||||||
|
// if (node.level === 0) {
|
||||||
|
// return resolve([{ name: 'region' }]);
|
||||||
|
// }
|
||||||
|
console.log(node)
|
||||||
|
if (node.level > 0) {
|
||||||
|
let subData = []
|
||||||
|
getCameraAllOrgan({parentId:node.data.id}).then((res) => {
|
||||||
|
if(res.data.data.length == 0){
|
||||||
|
const params = {
|
||||||
|
parentId:node.data.id,
|
||||||
|
checkStatus: this.checkStatus=='2'?["0","1"]:this.checkStatus,
|
||||||
|
}
|
||||||
|
getCameraByParentId(params).then((res) => {
|
||||||
|
res.data.data.forEach((item) => {
|
||||||
|
subData.push({
|
||||||
|
name: item.channelName,
|
||||||
|
gpsX: item.gpsX,
|
||||||
|
gpsY: item.gpsY,
|
||||||
|
channelCode:item.channelCode,
|
||||||
|
checkStatus:item.checkStatus,
|
||||||
|
leaf:true,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
return resolve(subData);
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
subData = res.data.data
|
||||||
|
return resolve(subData);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
treeCameraClick(data) {
|
||||||
|
console.log(data)
|
||||||
|
if(data.channelCode){
|
||||||
|
const cameraTree = [{
|
||||||
|
latLng: { lat: data.gpsY, lng: data.gpsX },
|
||||||
|
data: data,
|
||||||
|
type:'cameraTree'
|
||||||
|
}]
|
||||||
|
this.$parent.hiMapFun.removeLayerByLayerName("cameraTree");
|
||||||
|
this.$parent.hiMapFun.openPopupVideoSurveillance(cameraTree[0])
|
||||||
|
const arr = [0,0.0,'','0','0.0']
|
||||||
|
if(arr.indexOf(data.gpsX) == -1){
|
||||||
|
this.$parent.hiMapFun.addResourceOnMapWithoutSuperMapCluster(cameraTree,"poi-red.png", "cameraTree");
|
||||||
|
this.$parent.hiMap.mapObj.map.flyTo({ lat: data.gpsY, lng: data.gpsX });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
filterNode(value, data) {
|
||||||
|
if (value == "2") return true;
|
||||||
|
if (value == "0") {
|
||||||
|
return data.checkStatus == 0;
|
||||||
|
}
|
||||||
|
if (value == "1") {
|
||||||
|
return data.checkStatus == 1;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang='scss' scoped>
|
||||||
|
.box {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: url(../../../../assets/construction/listTopBg.png) no-repeat,
|
||||||
|
url(../../../../assets/construction/videoTag.png) no-repeat 324px 17px;
|
||||||
|
padding: 30px 0 18px 18px;
|
||||||
|
|
||||||
|
.tabs-button {
|
||||||
|
position: relative;
|
||||||
|
.tabs-button-box {
|
||||||
|
width: 445px;
|
||||||
|
padding-bottom: 11px;
|
||||||
|
border-bottom: 3px solid #2c619c;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
.tabs-button-btn {
|
||||||
|
font-size: 18px;
|
||||||
|
color: rgba($color: #fff, $alpha: 0.6);
|
||||||
|
position: relative;
|
||||||
|
cursor: pointer;
|
||||||
|
margin-right: 28px;
|
||||||
|
}
|
||||||
|
.tabs-button-btn-active {
|
||||||
|
font-size: 20px;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.tabs-button-btn-active::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
bottom: -15px;
|
||||||
|
right: 6%;
|
||||||
|
width: 64px;
|
||||||
|
height: 5px;
|
||||||
|
border-radius: 5px;
|
||||||
|
background-color: #1ffffc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .label-content {
|
||||||
|
margin-top: 16px;
|
||||||
|
.el-input {
|
||||||
|
width: 358px;
|
||||||
|
}
|
||||||
|
.el-input__inner {
|
||||||
|
border: 1px solid rgba(31,254,253,.9);
|
||||||
|
color: #fff;
|
||||||
|
border-radius: unset;
|
||||||
|
background: rgba($color: #203b5d, $alpha: .8);
|
||||||
|
&::placeholder {
|
||||||
|
color: rgba($color: #fff, $alpha: 0.6);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.el-input__prefix {
|
||||||
|
color: rgba(31,254,253,.9);
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-checkbox-group {
|
||||||
|
height: 425px;
|
||||||
|
width: 444px;
|
||||||
|
overflow-y: auto;
|
||||||
|
margin-top: 6px;
|
||||||
|
&::-webkit-scrollbar {
|
||||||
|
width: 8px;
|
||||||
|
background-color: #10335e;
|
||||||
|
}
|
||||||
|
&::-webkit-scrollbar-thumb {
|
||||||
|
background-color: #446dac !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.el-checkbox-button {
|
||||||
|
border-radius: 15px;
|
||||||
|
margin: 10px;
|
||||||
|
.el-checkbox-button__inner {
|
||||||
|
height: 30px;
|
||||||
|
line-height: 6px;
|
||||||
|
border-radius: 15px;
|
||||||
|
background: linear-gradient(0deg, rgba($color: #24517b, $alpha: 1) 0, rgba($color: #24517b, $alpha: 0) 100%);
|
||||||
|
border: 1px solid #1d98a0;
|
||||||
|
font-size: 16px;
|
||||||
|
color: #1ffefd;
|
||||||
|
}
|
||||||
|
.el-checkbox-button__inner:hover {
|
||||||
|
border: 1px solid #1ffefd;
|
||||||
|
background: linear-gradient(0deg, #1577d3 0%, #1251ab 100%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.el-checkbox-button.is-checked {
|
||||||
|
.el-checkbox-button__inner{
|
||||||
|
color: #fff;
|
||||||
|
border: 1px solid #1ffefd;
|
||||||
|
background: linear-gradient(0deg, #1577d3 0%, #1251ab 100%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-tree {
|
||||||
|
width: 444px;
|
||||||
|
height:460px;
|
||||||
|
overflow-y: auto;
|
||||||
|
margin-top: 10px;
|
||||||
|
background: transparent;
|
||||||
|
color: #fff;
|
||||||
|
|
||||||
|
&::-webkit-scrollbar {
|
||||||
|
width: 8px;
|
||||||
|
background-color: #10335e;
|
||||||
|
}
|
||||||
|
&::-webkit-scrollbar-thumb {
|
||||||
|
background-color: #446dac !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-tree-node__content:hover {
|
||||||
|
background: rgba(27,255,255,.2);
|
||||||
|
}
|
||||||
|
.el-tree-node:focus > .el-tree-node__content {
|
||||||
|
background-color: rgba(27,255,255,.2);
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
After Width: | Height: | Size: 317 B |
After Width: | Height: | Size: 272 B |
After Width: | Height: | Size: 325 B |
After Width: | Height: | Size: 747 B |
After Width: | Height: | Size: 836 B |
After Width: | Height: | Size: 766 B |
After Width: | Height: | Size: 449 B |
|
@ -8,7 +8,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<header>
|
<header>
|
||||||
<div class="title">重点区域监控平台</div>
|
<div class="title">重点区域精细化管理</div>
|
||||||
<div></div>
|
<div></div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
|
@ -36,13 +36,13 @@
|
||||||
</el-autocomplete>
|
</el-autocomplete>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="eventNum">
|
<!-- <div class="eventNum">
|
||||||
累计事件数量(2022.05.25-至今)
|
累计事件数量(2022.05.25-至今)
|
||||||
<p>
|
<p>
|
||||||
<span>{{ allListDataNum }}</span
|
<span>{{ allListDataNum }}</span
|
||||||
>件
|
>件
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div> -->
|
||||||
|
|
||||||
<!-- 事件感知 -->
|
<!-- 事件感知 -->
|
||||||
<div class="complaintContent">
|
<div class="complaintContent">
|
||||||
|
@ -54,7 +54,7 @@
|
||||||
|
|
||||||
<div class="complaintContent1">
|
<div class="complaintContent1">
|
||||||
|
|
||||||
<video-list-right></video-list-right>
|
<video-list-right ></video-list-right>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 重点视频列表 -->
|
<!-- 重点视频列表 -->
|
||||||
|
@ -71,14 +71,14 @@
|
||||||
|
|
||||||
<!--视频列表弹出框-->
|
<!--视频列表弹出框-->
|
||||||
<div class="siteList1" v-if="videoVisible">
|
<div class="siteList1" v-if="videoVisible">
|
||||||
<video-list></video-list>
|
<video-lists></video-lists>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 热力图图例 -->
|
<!-- 热力图图例 -->
|
||||||
<div class="legend"></div>
|
<!-- <div class="legend"></div> -->
|
||||||
|
|
||||||
<!-- 时间轴 -->
|
<!-- 时间轴 -->
|
||||||
<div class="timerShaft">
|
<!-- <div class="timerShaft">
|
||||||
<HorizonTimeLine
|
<HorizonTimeLine
|
||||||
:timelineData="timelineData"
|
:timelineData="timelineData"
|
||||||
@timeId="timeIdData"
|
@timeId="timeIdData"
|
||||||
|
@ -86,7 +86,7 @@
|
||||||
@hotName="hotName"
|
@hotName="hotName"
|
||||||
/>
|
/>
|
||||||
<span>时</span>
|
<span>时</span>
|
||||||
</div>
|
</div> -->
|
||||||
<div class="changeLayer">
|
<div class="changeLayer">
|
||||||
<div class="title">地图显示</div>
|
<div class="title">地图显示</div>
|
||||||
<div class="change-btn-box">
|
<div class="change-btn-box">
|
||||||
|
@ -126,6 +126,7 @@
|
||||||
<el-radio label="all">全市</el-radio>
|
<el-radio label="all">全市</el-radio>
|
||||||
<el-radio label="local">本地</el-radio>
|
<el-radio label="local">本地</el-radio>
|
||||||
<el-radio label="noLocal">外地</el-radio>
|
<el-radio label="noLocal">外地</el-radio>
|
||||||
|
<el-radio label="clear">清除</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -147,7 +148,7 @@ import EarlyWarning from "./components/EarlyWarning";
|
||||||
import VideoPlay from "./components/VideoPlay";
|
import VideoPlay from "./components/VideoPlay";
|
||||||
import VideoListRight from "./components/VideoListRight";
|
import VideoListRight from "./components/VideoListRight";
|
||||||
import VideoListLeft from "./components/VideoListLeft";
|
import VideoListLeft from "./components/VideoListLeft";
|
||||||
import VideoList from "./components/VideoList";
|
import VideoLists from "./components/VideoLists";
|
||||||
import SiteListMore from "./components/SiteListMore";
|
import SiteListMore from "./components/SiteListMore";
|
||||||
import { selectByJdWd } from "@/api/construction/index";
|
import { selectByJdWd } from "@/api/construction/index";
|
||||||
import {
|
import {
|
||||||
|
@ -205,7 +206,7 @@ export default {
|
||||||
complaintEvent,
|
complaintEvent,
|
||||||
VideoListRight,
|
VideoListRight,
|
||||||
VideoListLeft,
|
VideoListLeft,
|
||||||
VideoList,
|
VideoLists,
|
||||||
SiteListMore,
|
SiteListMore,
|
||||||
VideoPlay,
|
VideoPlay,
|
||||||
HorizonTimeLine,
|
HorizonTimeLine,
|
||||||
|
@ -481,6 +482,7 @@ export default {
|
||||||
},
|
},
|
||||||
|
|
||||||
layerHandleChange(item) {
|
layerHandleChange(item) {
|
||||||
|
console.log("地图显示等",item);
|
||||||
if (this.changeLayerBtnGroup.indexOf(item) !== -1) {
|
if (this.changeLayerBtnGroup.indexOf(item) !== -1) {
|
||||||
switch (item) {
|
switch (item) {
|
||||||
case "AI事件":
|
case "AI事件":
|
||||||
|
@ -704,6 +706,11 @@ export default {
|
||||||
"thermodynamic"
|
"thermodynamic"
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
|
case "clear":
|
||||||
|
this.hiMapFun.removeLayerByLayerName("types");
|
||||||
|
this.hiMapFun.removeLayerByLayerName("thermodynamic");
|
||||||
|
this.thermodynamicPeopleType = "";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
removeRoadCauseAnalysis() {
|
removeRoadCauseAnalysis() {
|
||||||
|
@ -769,7 +776,7 @@ export default {
|
||||||
font-family: 'Tensentype-ZhiHeiJ-W5';
|
font-family: 'Tensentype-ZhiHeiJ-W5';
|
||||||
}
|
}
|
||||||
.title::before {
|
.title::before {
|
||||||
content: '重点区域监控平台';
|
content: '重点区域精细化管理';
|
||||||
text-shadow: 0px 3px 10px rgba(0,0,0,.9);
|
text-shadow: 0px 3px 10px rgba(0,0,0,.9);
|
||||||
position: absolute;
|
position: absolute;
|
||||||
z-index: -1;
|
z-index: -1;
|
||||||
|
@ -838,7 +845,7 @@ export default {
|
||||||
z-index: 1000;
|
z-index: 1000;
|
||||||
right: 10px;
|
right: 10px;
|
||||||
top: 90px;
|
top: 90px;
|
||||||
height:660px;
|
height:700px;
|
||||||
width: 478px;
|
width: 478px;
|
||||||
background: rgba($color: #05213b, $alpha: .85)
|
background: rgba($color: #05213b, $alpha: .85)
|
||||||
}
|
}
|
||||||
|
@ -846,9 +853,9 @@ export default {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
right: 10px;
|
right: 10px;
|
||||||
top: 760px;
|
top: 800px;
|
||||||
width: 478px;
|
width: 478px;
|
||||||
height:200px;
|
height:270px;
|
||||||
background: rgba($color: #05213b, $alpha: .85);
|
background: rgba($color: #05213b, $alpha: .85);
|
||||||
}
|
}
|
||||||
.eventNum {
|
.eventNum {
|
||||||
|
@ -914,12 +921,12 @@ export default {
|
||||||
}
|
}
|
||||||
.siteList1 {
|
.siteList1 {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
z-index: 10;
|
z-index: 1151;
|
||||||
right: 498px;
|
right: 10px;
|
||||||
top: 185px;
|
top: 89px;
|
||||||
width: 374px;
|
width: 477px;
|
||||||
height:500px;
|
height:700px;
|
||||||
background: rgba($color: #05213b, $alpha: .85);
|
background: rgba(5, 33, 59, 1);
|
||||||
}
|
}
|
||||||
.legend {
|
.legend {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
|