11 changed files with 952 additions and 243 deletions
After Width: | Height: | Size: 979 B |
After Width: | Height: | Size: 708 B |
@ -1,233 +0,0 @@ |
|||
<template> |
|||
<div class="container" ref="appRef" :class="{ red: name == '一曼村' }"> |
|||
<div class="main-title"> |
|||
<outsideTitle :title="title"></outsideTitle> |
|||
</div> |
|||
<div class="main"> |
|||
<div class="main-left"> |
|||
<div class="video"> |
|||
<LivePlayer |
|||
fluent |
|||
autoplay |
|||
:loop="true" |
|||
:videoUrl="videoUrl" |
|||
stretch |
|||
:hide-big-play-button="true" |
|||
:muted="false" |
|||
aspect="513:292" |
|||
alt="正在加载中..." |
|||
></LivePlayer> |
|||
</div> |
|||
<div class="card" @click="toPage('/out-pbService')"> |
|||
<img :src="require('@/assets/pbImage/card-icon1.png')" /> |
|||
<span>公共服务</span> |
|||
</div> |
|||
</div> |
|||
<div class="main-right"> |
|||
<div |
|||
class="card card2" |
|||
@click="toPage('/out-organization')" |
|||
> |
|||
<img :src="require('@/assets/pbImage/card-icon2.png')" /> |
|||
<span>组织振兴</span> |
|||
</div> |
|||
<div class="card card3" @click="toPage('/out-travel')"> |
|||
<img :src="require('@/assets/pbImage/card-icon3.png')" /> |
|||
<span>文化旅游</span> |
|||
</div> |
|||
<div class="card card4" @click="toPage('/out-industry')"> |
|||
<img :src="require('@/assets/pbImage/card-icon4.png')" /> |
|||
<span>产业发展</span> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import outsideTitle from "./components/outsideTitle.vue"; |
|||
import { useIndex } from "../../utils/utilsDramAdmin.js"; |
|||
import LivePlayer from "@liveqing/liveplayer"; |
|||
|
|||
export default { |
|||
name: "", |
|||
components: { |
|||
outsideTitle, |
|||
LivePlayer |
|||
}, |
|||
data() { |
|||
return { |
|||
title: "·" + this.$route.query.areaName + "公服代办点", |
|||
name: this.$route.query.areaName, |
|||
areaCode: this.$route.query.areaCode, |
|||
videoUrl: "" |
|||
}; |
|||
}, |
|||
created() {}, |
|||
mounted() { |
|||
const { calcRate, windowDraw } = useIndex(this.$refs.appRef); |
|||
calcRate(); |
|||
windowDraw(); |
|||
this.initData(); |
|||
}, |
|||
beforeDestroy() {}, |
|||
methods: { |
|||
initData() { |
|||
let params = { |
|||
areaCode: this.areaCode |
|||
}; |
|||
this.$http |
|||
.post("/area/info/getById", this.common.request(params)) |
|||
.then(res => { |
|||
if (res.data.code == 200) { |
|||
this.videoUrl = res.data.data.map4; |
|||
} else { |
|||
this.$Message.error("操作失败"); |
|||
} |
|||
}); |
|||
}, |
|||
toPage (path) { |
|||
this.$router.push( |
|||
{ |
|||
path: path, |
|||
query: { |
|||
areaName: this.name, |
|||
areaCode: this.areaCode |
|||
} |
|||
} |
|||
) |
|||
} |
|||
} |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="less" scoped> |
|||
/deep/ .video-wrapper { |
|||
border-radius: 12px; |
|||
} |
|||
|
|||
/deep/ .ivu-page { |
|||
color: #fff; |
|||
background-color: transparent; |
|||
} |
|||
|
|||
/deep/ .ivu-page-next, |
|||
/deep/ .ivu-page-prev, |
|||
/deep/ .ivu-page-item, |
|||
/deep/ .ivu-page-options-elevator input { |
|||
background-color: transparent; |
|||
color: #fff; |
|||
text-align: center; |
|||
} |
|||
|
|||
/deep/ .ivu-page-next a, |
|||
/deep/ .ivu-page-prev a, |
|||
/deep/ .ivu-page-item a { |
|||
color: #fff; |
|||
} |
|||
|
|||
.red { |
|||
background-image: url("../../assets/pbImage/red-bg.png") !important; |
|||
} |
|||
.container { |
|||
width: 1920px; |
|||
height: 1080px; |
|||
transform: scale(var(--scale)) translate(-50%, -50%); |
|||
transform-origin: 0 0; |
|||
position: absolute; |
|||
left: 50%; |
|||
top: 50%; |
|||
background-image: url("../../assets/pbImage/out-bg.png"); |
|||
background-size: 100% 100%; |
|||
display: flex; |
|||
flex-direction: column; |
|||
align-items: center; |
|||
|
|||
.main-title { |
|||
width: 1788px; |
|||
height: 100px; |
|||
position: absolute; |
|||
top: 30px; |
|||
} |
|||
|
|||
.main { |
|||
position: absolute; |
|||
top: 152px; |
|||
width: 1790px; |
|||
height: 890px; |
|||
display: flex; |
|||
justify-content: space-between; |
|||
|
|||
.main-left { |
|||
width: 1026px; |
|||
height: 100%; |
|||
display: flex; |
|||
flex-direction: column; |
|||
justify-content: space-between; |
|||
|
|||
.video { |
|||
width: 100%; |
|||
height: 584px; |
|||
} |
|||
.card { |
|||
width: 100%; |
|||
height: 280px; |
|||
background: url("../../assets/pbImage/card1.png") no-repeat; |
|||
background-size: 100% 100%; |
|||
display: flex; |
|||
justify-content: center; |
|||
align-items: center; |
|||
img { |
|||
width: 158px; |
|||
height: 158px; |
|||
} |
|||
span { |
|||
font-family: ShiShangZhongHeiJianTi; |
|||
font-size: 84px; |
|||
font-weight: 400; |
|||
text-align: center; |
|||
color: #ffffff; |
|||
margin-left: 45px; |
|||
} |
|||
} |
|||
} |
|||
.main-right { |
|||
width: 742px; |
|||
height: 100%; |
|||
display: flex; |
|||
flex-direction: column; |
|||
justify-content: space-between; |
|||
.card { |
|||
width: 100%; |
|||
height: 280px; |
|||
background-color: #fff; |
|||
background-size: 100% 100%; |
|||
display: flex; |
|||
justify-content: center; |
|||
align-items: center; |
|||
img { |
|||
width: 158px; |
|||
height: 158px; |
|||
} |
|||
span { |
|||
font-family: ShiShangZhongHeiJianTi; |
|||
font-size: 84px; |
|||
font-weight: 400; |
|||
text-align: center; |
|||
color: #ffffff; |
|||
margin-left: 45px; |
|||
} |
|||
} |
|||
.card2 { |
|||
background: url("../../assets/pbImage/card2.png") no-repeat; |
|||
} |
|||
.card3 { |
|||
background: url("../../assets/pbImage/card3.png") no-repeat; |
|||
} |
|||
.card4 { |
|||
background: url("../../assets/pbImage/card4.png") no-repeat; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</style> |
@ -0,0 +1,928 @@ |
|||
<template> |
|||
<!-- 智慧旅游态势 --> |
|||
<div class="eb-container" ref="appRef"> |
|||
<MainTitle class="mainTitle" :title="title"></MainTitle> |
|||
<div class="main-content"> |
|||
<div class="tree-box"> |
|||
<Tree :data="treeList" :render="renderContent"></Tree> |
|||
</div> |
|||
<div class="right-main"> |
|||
<div class="top-content"> |
|||
<div class="video-box"> |
|||
<div style="width: 1070px"> |
|||
<common-live-player |
|||
:videoUrl="videoUrl" |
|||
:live="true" |
|||
></common-live-player> |
|||
</div> |
|||
<div class="video-list" v-if="videoList.length > 0"> |
|||
<div |
|||
class="video-item" |
|||
@click="changeVideo(item, index)" |
|||
v-for="(item, index) in videoList" |
|||
:key="index" |
|||
> |
|||
<div class="icon-status"> |
|||
<img |
|||
style="width: 20px" |
|||
:src=" |
|||
require('@/assets/largeScreen/sxt.png') |
|||
" |
|||
/> |
|||
<img |
|||
style="width: 42px" |
|||
v-if="index == videoIndex" |
|||
:src=" |
|||
require('@/assets/largeScreen/bfz.png') |
|||
" |
|||
/> |
|||
</div> |
|||
<span class="video-name">{{ |
|||
item.deviceName |
|||
}}</span> |
|||
</div> |
|||
</div> |
|||
<div class="video-list" v-else style="display: flex;justify-content: center;align-items: center;font-size: 18px;color: #aaaaaa;"> |
|||
暂无监控资源 |
|||
</div> |
|||
</div> |
|||
<div class="top-right-data"> |
|||
<div |
|||
class="content-box" |
|||
style="width: 100%; height: 25%" |
|||
> |
|||
<div class="box-title">实时客流</div> |
|||
<div class="box-data"> |
|||
<div class="num"> |
|||
<CountTo |
|||
:startVal="0" |
|||
:endVal="count" |
|||
:duration="2000" |
|||
/> |
|||
<span |
|||
style=" |
|||
margin-left: 10px; |
|||
margin-bottom: 15px; |
|||
font-size: 20px; |
|||
" |
|||
>人</span |
|||
> |
|||
</div> |
|||
<!-- <div class="percent"> |
|||
<div style="width: 80%"> |
|||
<Progress :percent="dayvalue"></Progress> |
|||
</div> |
|||
<span style="font-size: 14px">人</span> |
|||
</div> --> |
|||
</div> |
|||
</div> |
|||
<div |
|||
class="content-box" |
|||
style="width: 100%; height: 25%" |
|||
> |
|||
<div class="box-title">实时累计客流</div> |
|||
<div class="box-data"> |
|||
<div class="num"> |
|||
<CountTo |
|||
:startVal="0" |
|||
:endVal="cumulative" |
|||
:duration="2000" |
|||
/> |
|||
<span |
|||
style=" |
|||
margin-left: 10px; |
|||
margin-bottom: 15px; |
|||
font-size: 20px; |
|||
" |
|||
>人</span |
|||
> |
|||
</div> |
|||
<!-- <div class="percent"> |
|||
<div style="width: 80%"> |
|||
<Progress :percent="dayLimit"></Progress> |
|||
</div> |
|||
<span style="font-size: 14px">人</span> |
|||
</div> --> |
|||
</div> |
|||
</div> |
|||
<div |
|||
class="content-box" |
|||
style="width: 100%; height: 48%" |
|||
> |
|||
<div class="box-title">实时客流来源</div> |
|||
<div class="tabs"> |
|||
<span |
|||
style="margin: 0 10px; cursor: pointer" |
|||
:style="{ |
|||
color: |
|||
tabIndex == index |
|||
? '#169bcf' |
|||
: '#aaaaaa', |
|||
}" |
|||
@click="tabIndex = index" |
|||
v-for="(item, index) in tabs" |
|||
:key="index" |
|||
>{{ item }}</span |
|||
> |
|||
</div> |
|||
<div class="content-list" v-if="tabIndex == 0"> |
|||
<div |
|||
class="content-item" |
|||
v-for="(item, index) in provinceList" |
|||
:key="index" |
|||
> |
|||
<div class="name"> |
|||
{{ index + 1 + "." + item.key }} |
|||
</div> |
|||
<div class="percent"> |
|||
<Progress |
|||
:stroke-width="20" |
|||
:percent="item.value" |
|||
></Progress> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="content-list" v-if="tabIndex == 1"> |
|||
<div |
|||
class="content-item" |
|||
v-for="(item, index) in cityList" |
|||
:key="index" |
|||
> |
|||
<div class="name"> |
|||
{{ index + 1 + "." + item.key }} |
|||
</div> |
|||
<div class="percent"> |
|||
<Progress |
|||
:stroke-width="20" |
|||
:percent="item.value" |
|||
></Progress> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="bottom-content"> |
|||
<div class="content-box" style="width: 33%"> |
|||
<div class="box-title">近七日客流趋势</div> |
|||
<div id="chart1" style="flex: 1"></div> |
|||
</div> |
|||
<div class="content-box" style="width: 33%"> |
|||
<div class="box-title">客流年龄结构</div> |
|||
<div id="chart2" style="flex: 1"></div> |
|||
</div> |
|||
<div class="content-box" style="width: 33%"> |
|||
<div class="box-title">停留时长分布</div> |
|||
<div id="chart3" style="flex: 1"></div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { useIndex } from "../../utils/utilsDramAdmin"; |
|||
import MainTitle from "./components/MainTitle.vue"; |
|||
import CommonLivePlayer from "@/views/common-components/common-live-player.vue"; |
|||
import * as echarts from "echarts"; |
|||
import { echartsFocus, echartsClear } from "@/utils/autoEcharts"; |
|||
import { format } from "@/libs/date"; |
|||
export default { |
|||
name: "SmartTravel", |
|||
components: { MainTitle, CommonLivePlayer }, |
|||
data() { |
|||
return { |
|||
title: "智慧旅游态势", |
|||
currentTreeItem: {}, |
|||
videoUrl: "", |
|||
tabs: ["省份", "城市"], |
|||
tabIndex: 0, |
|||
videoList: [ |
|||
{ |
|||
deviceName: "监控监控监控1111", |
|||
url: "", |
|||
}, |
|||
{ |
|||
deviceName: "监控监控监控1111", |
|||
url: "", |
|||
}, |
|||
], |
|||
videoIndex: 0, |
|||
treeList: [ |
|||
{ |
|||
title: "翠屏区全域", |
|||
code: "F511502", |
|||
expand: true, |
|||
children: [ |
|||
{ |
|||
title: "流杯池公园", |
|||
code: "F51150205", |
|||
expand: true, |
|||
}, |
|||
{ |
|||
title: "翠屏山景区", |
|||
code: "F51150204", |
|||
expand: true, |
|||
}, |
|||
{ |
|||
title: "李庄古镇", |
|||
code: "F51150203", |
|||
expand: true, |
|||
}, |
|||
{ |
|||
title: "合江门冠英街", |
|||
code: "F51150202", |
|||
expand: true, |
|||
}, |
|||
{ |
|||
title: "五粮液景区", |
|||
code: "F51150201", |
|||
expand: true, |
|||
}, |
|||
], |
|||
}, |
|||
], |
|||
count: 0, |
|||
cumulative: 0, |
|||
dayLimit: 0, |
|||
dayvalue: 0, |
|||
provinceList: [], |
|||
cityList: [], |
|||
}; |
|||
}, |
|||
computed: {}, |
|||
created() {}, |
|||
mounted() { |
|||
const { calcRate, windowDraw } = useIndex(this.$refs.appRef); |
|||
calcRate(); |
|||
windowDraw(); |
|||
this.changeTree(this.treeList[0].children[0]); |
|||
}, |
|||
beforeDestroy() { |
|||
echartsClear(); |
|||
}, |
|||
methods: { |
|||
renderContent(h, { root, node, data }) { |
|||
return h( |
|||
"span", |
|||
{ |
|||
style: { |
|||
display: "inline-block", |
|||
width: "100%", |
|||
height: "40px", |
|||
color: |
|||
this.currentTreeItem.code == data.code |
|||
? "#169bcf" |
|||
: "#aaaaaa", |
|||
fontSize: "20px", |
|||
cursor: "pointer", |
|||
}, |
|||
props: {}, |
|||
on: { |
|||
click: () => { |
|||
this.changeTree(data); |
|||
}, |
|||
}, |
|||
}, |
|||
data.title |
|||
); |
|||
}, |
|||
initChart1(xData, yData) { |
|||
let myChart = echarts.init(document.getElementById("chart1")); |
|||
let option = { |
|||
tooltip: { |
|||
trigger: "axis", |
|||
axisPointer: {}, |
|||
}, |
|||
grid: { |
|||
top: "15%", |
|||
left: "5%", |
|||
bottom: "5%", |
|||
rigth: 0, |
|||
containLabel: true, |
|||
}, |
|||
xAxis: [ |
|||
{ |
|||
type: "category", |
|||
boundaryGap: false, |
|||
axisLabel: { |
|||
textStyle: { |
|||
color: "#aaaaaa", |
|||
}, |
|||
}, |
|||
axisLine: { |
|||
lineStyle: { |
|||
color: "#aaaaaa", |
|||
}, |
|||
}, |
|||
data: xData, |
|||
}, |
|||
], |
|||
yAxis: [ |
|||
{ |
|||
type: "value", |
|||
name: "单位:人", |
|||
axisLabel: { |
|||
textStyle: { |
|||
color: "#aaaaaa", |
|||
}, |
|||
}, |
|||
nameTextStyle: { |
|||
color: "#aaaaaa", |
|||
fontSize: 12, |
|||
lineHeight: 40, |
|||
}, |
|||
splitLine: { |
|||
show: false, |
|||
}, |
|||
axisLine: { |
|||
show: false, |
|||
}, |
|||
axisTick: { |
|||
show: false, |
|||
}, |
|||
}, |
|||
], |
|||
series: [ |
|||
{ |
|||
name: "实时客流", |
|||
type: "line", |
|||
smooth: true, |
|||
symbolSize: 8, |
|||
zlevel: 3, |
|||
lineStyle: { |
|||
normal: { |
|||
color: "#169bcf", |
|||
shadowBlur: 3, |
|||
shadowColor: "#169bcf", |
|||
}, |
|||
}, |
|||
data: yData, |
|||
}, |
|||
], |
|||
}; |
|||
myChart.setOption(option); |
|||
echartsFocus(myChart, xData.length); |
|||
}, |
|||
initChart2(xData, yData) { |
|||
let myChart = echarts.init(document.getElementById("chart2")); |
|||
let option = { |
|||
tooltip: { |
|||
trigger: "axis", |
|||
formatter: (params) => { |
|||
let dataStr = `<div><p style="font-weight:bold;margin:0 8px 15px;">${params[0].name}</p></div>`; |
|||
params.forEach((item) => { |
|||
dataStr += `<div> |
|||
<div style="margin: 0 8px;"> |
|||
<span style="display:inline-block;margin-right:5px;width:10px;height:10px;background-color:${item.color};"></span> |
|||
<span style="float:right;color:#000000;margin-left:20px;">${item.data}%</span> |
|||
</div> |
|||
</div>`; |
|||
}); |
|||
return dataStr; |
|||
}, |
|||
axisPointer: { |
|||
type: "shadow", |
|||
}, |
|||
}, |
|||
grid: { |
|||
top: "15%", |
|||
left: "5%", |
|||
bottom: "5%", |
|||
rigth: 0, |
|||
containLabel: true, |
|||
}, |
|||
xAxis: { |
|||
type: "category", |
|||
boundaryGap: true, |
|||
axisLabel: { |
|||
textStyle: { |
|||
color: "#aaaaaa", |
|||
}, |
|||
}, |
|||
axisLine: { |
|||
lineStyle: { |
|||
color: "#aaaaaa", |
|||
}, |
|||
}, |
|||
data: xData, |
|||
}, |
|||
yAxis: { |
|||
type: "value", |
|||
name: "单位:%", |
|||
axisLabel: { |
|||
textStyle: { |
|||
color: "#aaaaaa", |
|||
}, |
|||
}, |
|||
nameTextStyle: { |
|||
color: "#aaaaaa", |
|||
fontSize: 12, |
|||
lineHeight: 40, |
|||
}, |
|||
splitLine: { |
|||
show: false, |
|||
}, |
|||
axisLine: { |
|||
show: false, |
|||
}, |
|||
axisTick: { |
|||
show: false, |
|||
}, |
|||
}, |
|||
series: [ |
|||
{ |
|||
data: yData, |
|||
xAxisIndex: 0, |
|||
yAxisIndex: 0, |
|||
type: "bar", |
|||
barWidth: "40%", |
|||
showBackground: true, |
|||
color: "#169bcf", |
|||
backgroundStyle: { |
|||
color: "rgba(180, 180, 180, 0.2)", |
|||
}, |
|||
label: { |
|||
show: true, |
|||
position: "top", |
|||
textStyle: { |
|||
color: "#aaaaaa", |
|||
}, |
|||
formatter: "{c}%", |
|||
}, |
|||
}, |
|||
], |
|||
}; |
|||
myChart.setOption(option); |
|||
echartsFocus(myChart, xData.length); |
|||
}, |
|||
initChart3(xData, yData) { |
|||
let myChart = echarts.init(document.getElementById("chart3")); |
|||
let option = { |
|||
tooltip: { |
|||
trigger: "axis", |
|||
formatter: (params) => { |
|||
let dataStr = `<div><p style="font-weight:bold;margin:0 8px 15px;">${params[0].name}</p></div>`; |
|||
params.forEach((item) => { |
|||
dataStr += `<div> |
|||
<div style="margin: 0 8px;"> |
|||
<span style="display:inline-block;margin-right:5px;width:10px;height:10px;background-color:${item.color};"></span> |
|||
<span style="float:right;color:#000000;margin-left:20px;">${item.data}%</span> |
|||
</div> |
|||
</div>`; |
|||
}); |
|||
return dataStr; |
|||
}, |
|||
axisPointer: { |
|||
type: "shadow", |
|||
barShadowWidth: "40%", |
|||
}, |
|||
}, |
|||
grid: { |
|||
top: "15%", |
|||
left: "5%", |
|||
bottom: "5%", |
|||
rigth: 0, |
|||
containLabel: true, |
|||
}, |
|||
xAxis: { |
|||
type: "category", |
|||
boundaryGap: true, |
|||
axisLabel: { |
|||
textStyle: { |
|||
color: "#aaaaaa", |
|||
}, |
|||
}, |
|||
axisLine: { |
|||
lineStyle: { |
|||
color: "#aaaaaa", |
|||
}, |
|||
}, |
|||
data: xData, |
|||
}, |
|||
yAxis: { |
|||
type: "value", |
|||
name: "单位:%", |
|||
axisLabel: { |
|||
textStyle: { |
|||
color: "#aaaaaa", |
|||
}, |
|||
}, |
|||
nameTextStyle: { |
|||
color: "#aaaaaa", |
|||
fontSize: 12, |
|||
lineHeight: 40, |
|||
}, |
|||
splitLine: { |
|||
show: false, |
|||
}, |
|||
axisLine: { |
|||
show: false, |
|||
}, |
|||
axisTick: { |
|||
show: false, |
|||
}, |
|||
}, |
|||
series: [ |
|||
{ |
|||
data: yData, |
|||
xAxisIndex: 0, |
|||
yAxisIndex: 0, |
|||
type: "bar", |
|||
barWidth: "20%", |
|||
showBackground: false, |
|||
color: "#169bcf", |
|||
backgroundStyle: { |
|||
color: "rgba(180, 180, 180, 0.2)", |
|||
}, |
|||
label: { |
|||
show: true, |
|||
position: "top", |
|||
textStyle: { |
|||
color: "#aaaaaa", |
|||
}, |
|||
formatter: "{c}%", |
|||
}, |
|||
}, |
|||
], |
|||
}; |
|||
myChart.setOption(option); |
|||
echartsFocus(myChart, xData.length); |
|||
}, |
|||
changeTree(data) { |
|||
this.videoIndex = 0; |
|||
this.videoList = []; |
|||
this.videoUrl = ""; |
|||
this.currentTreeItem = data; |
|||
echartsClear() |
|||
this.realtimeTourist(); |
|||
this.touristCumulative(); |
|||
this.beforeDaysTourist(); |
|||
this.durationRate(); |
|||
this.originProvince(); |
|||
this.portraitAge(); |
|||
this.originCity(); |
|||
this.queryDevice(); |
|||
}, |
|||
changeVideo(item, index) { |
|||
this.videoIndex = index; |
|||
this.videoUrl = item.url; |
|||
}, |
|||
// 查询监控 |
|||
queryDevice() { |
|||
let params = { |
|||
pageNum: 1, |
|||
pageSize: 20, |
|||
deviceType: this.currentTreeItem.title, |
|||
}; |
|||
if (this.currentTreeItem.title == "翠屏区全域") { |
|||
params = { |
|||
pageNum: 1, |
|||
pageSize: 100, |
|||
}; |
|||
} else if (this.currentTreeItem.title == "合江门冠英街") { |
|||
params = { |
|||
pageNum: 1, |
|||
pageSize: 100, |
|||
deviceName: "合江门", |
|||
}; |
|||
} |
|||
this.$http |
|||
.post("device/queryDeviceInfoPage", this.common.request(params)) |
|||
.then((res) => { |
|||
if (res.data.code == 200) { |
|||
this.videoList = res.data.data.records; |
|||
if (this.videoList.length > 0) { |
|||
this.changeVideo(this.videoList[0], 0); |
|||
} |
|||
} |
|||
}); |
|||
}, |
|||
// 查询实时客流 |
|||
realtimeTourist() { |
|||
let params = { |
|||
code: this.currentTreeItem.code, |
|||
}; |
|||
this.$http |
|||
.post( |
|||
"tourism/situation/realtimeTourist", |
|||
this.common.request(params) |
|||
) |
|||
.then((res) => { |
|||
if (res.data.code == 200) { |
|||
this.count = res.data.data; |
|||
// this.dayvalue = parseFloat((this.count / 100).toFixed(2)) |
|||
} |
|||
}); |
|||
}, |
|||
// 查询实时客流累计 |
|||
touristCumulative() { |
|||
let params = { |
|||
code: this.currentTreeItem.code, |
|||
}; |
|||
this.$http |
|||
.post( |
|||
"tourism/situation/touristCumulative", |
|||
this.common.request(params) |
|||
) |
|||
.then((res) => { |
|||
if (res.data.code == 200) { |
|||
this.cumulative = res.data.data; |
|||
// this.dayLimit = parseFloat((this.count / 200).toFixed(2)) |
|||
} |
|||
}); |
|||
}, |
|||
// 查询近七日游客数量 |
|||
beforeDaysTourist() { |
|||
let params = { |
|||
code: this.currentTreeItem.code, |
|||
beforeDays: "7", |
|||
}; |
|||
this.$http |
|||
.post( |
|||
"tourism/situation/beforeDaysTourist", |
|||
this.common.request(params) |
|||
) |
|||
.then((res) => { |
|||
if (res.data.code == 200) { |
|||
let xData = res.data.data.map( |
|||
(item) => item.beforeDayStr |
|||
); |
|||
let yData = res.data.data.map( |
|||
(item) => item.touristNum |
|||
); |
|||
this.initChart1(xData, yData); |
|||
} |
|||
}); |
|||
}, |
|||
// 停留时长分布 |
|||
durationRate() { |
|||
let params = { |
|||
code: this.currentTreeItem.code, |
|||
}; |
|||
this.$http |
|||
.post( |
|||
"tourism/situation/durationRate", |
|||
this.common.request(params) |
|||
) |
|||
.then((res) => { |
|||
if (res.data.code == 200) { |
|||
let xData = res.data.data.map((item) => { |
|||
if (item.key == "3") { |
|||
item.key = item.key + '日及以上' |
|||
} else { |
|||
item.key = item.key + '日' |
|||
} |
|||
return item.key |
|||
}); |
|||
let yData = res.data.data.map((item) => |
|||
parseFloat((item.value * 100).toFixed(2)) |
|||
); |
|||
this.initChart3(xData, yData); |
|||
} |
|||
}); |
|||
}, |
|||
// 实时客流来源省份 |
|||
originProvince() { |
|||
let params = { |
|||
code: this.currentTreeItem.code, |
|||
}; |
|||
this.$http |
|||
.post( |
|||
"tourism/situation/originProvince", |
|||
this.common.request(params) |
|||
) |
|||
.then((res) => { |
|||
if (res.data.code == 200) { |
|||
this.provinceList = res.data.data.map((item) => { |
|||
return { |
|||
...item, |
|||
value: parseFloat( |
|||
(item.value * 100).toFixed(2) |
|||
), |
|||
}; |
|||
}); |
|||
} |
|||
}); |
|||
}, |
|||
// 实时客流来源城市 |
|||
originCity() { |
|||
let params = { |
|||
code: this.currentTreeItem.code, |
|||
}; |
|||
this.$http |
|||
.post( |
|||
"tourism/situation/originCity", |
|||
this.common.request(params) |
|||
) |
|||
.then((res) => { |
|||
if (res.data.code == 200) { |
|||
this.cityList = res.data.data.map((item) => { |
|||
return { |
|||
...item, |
|||
value: parseFloat( |
|||
(item.value * 100).toFixed(2) |
|||
), |
|||
}; |
|||
}); |
|||
} |
|||
}); |
|||
}, |
|||
// 年龄结构占比 |
|||
portraitAge() { |
|||
let params = { |
|||
code: this.currentTreeItem.code, |
|||
}; |
|||
this.$http |
|||
.post( |
|||
"tourism/situation/portraitAge", |
|||
this.common.request(params) |
|||
) |
|||
.then((res) => { |
|||
if (res.data.code == 200) { |
|||
let xData = res.data.data.map((item) => item.key); |
|||
let yData = res.data.data.map((item) => |
|||
parseFloat((item.value * 100).toFixed(2)) |
|||
); |
|||
this.initChart2(xData, yData); |
|||
} |
|||
}); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="less" scoped> |
|||
@import "../../styles/pbStyle.less"; |
|||
/deep/ .ivu-tree-arrow { |
|||
color: #ffffff; |
|||
font-size: 18px; |
|||
margin-right: 5px; |
|||
} |
|||
/deep/ .ivu-progress-inner { |
|||
border-radius: 2px; |
|||
} |
|||
/deep/ .ivu-progress-bg { |
|||
border-radius: 2px; |
|||
} |
|||
.eb-container { |
|||
width: 1920px; |
|||
height: 1080px; |
|||
transform: scale(var(--scale)) translate(-50%, -50%); |
|||
transform-origin: 0 0; |
|||
position: absolute; |
|||
left: 50%; |
|||
top: 50%; |
|||
background-image: url("../../assets/largeScreen/page-bg.png"); |
|||
background-size: 100%; |
|||
} |
|||
::-webkit-scrollbar { |
|||
width: 0; |
|||
height: 0; |
|||
color: transparent; |
|||
} |
|||
.main-content { |
|||
position: absolute; |
|||
width: 1850px; |
|||
height: 930px; |
|||
left: 50%; |
|||
transform: translateX(-50%); |
|||
display: flex; |
|||
justify-content: space-between; |
|||
|
|||
.tree-box { |
|||
width: 250px; |
|||
height: 100%; |
|||
background-color: #3b3d43; |
|||
border-radius: 5px; |
|||
padding: 5px; |
|||
overflow: auto; |
|||
} |
|||
.right-main { |
|||
width: 1590px; |
|||
height: 100%; |
|||
display: flex; |
|||
flex-direction: column; |
|||
justify-content: space-between; |
|||
|
|||
.top-content { |
|||
width: 100%; |
|||
height: 600px; |
|||
display: flex; |
|||
justify-content: space-between; |
|||
.video-box { |
|||
width: 1220px; |
|||
height: 100%; |
|||
display: flex; |
|||
justify-content: space-between; |
|||
.video-list { |
|||
width: 140px; |
|||
height: 100%; |
|||
overflow-y: auto; |
|||
display: flex; |
|||
flex-direction: column; |
|||
|
|||
.video-item { |
|||
width: 100%; |
|||
display: flex; |
|||
flex-direction: column; |
|||
padding: 5px; |
|||
margin-bottom: 10px; |
|||
background-color: #3b3d43; |
|||
border-radius: 5px; |
|||
cursor: pointer; |
|||
|
|||
.icon-status { |
|||
width: 100%; |
|||
display: flex; |
|||
justify-content: space-between; |
|||
align-items: center; |
|||
} |
|||
.video-name { |
|||
margin-top: 10px; |
|||
font-size: 16px; |
|||
color: #aaaaaa; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
.top-right-data { |
|||
width: 360px; |
|||
height: 100%; |
|||
display: flex; |
|||
flex-direction: column; |
|||
justify-content: space-between; |
|||
} |
|||
} |
|||
.bottom-content { |
|||
width: 100%; |
|||
height: 310px; |
|||
display: flex; |
|||
justify-content: space-between; |
|||
} |
|||
} |
|||
} |
|||
.content-box { |
|||
width: 300px; |
|||
height: 100%; |
|||
background-color: #3b3d43; |
|||
border-radius: 5px; |
|||
display: flex; |
|||
flex-direction: column; |
|||
.box-title { |
|||
width: 100%; |
|||
height: 30px; |
|||
display: flex; |
|||
align-items: center; |
|||
padding-left: 10px; |
|||
color: #aaaaaa; |
|||
font-size: 16px; |
|||
} |
|||
.box-data { |
|||
flex: 1; |
|||
display: flex; |
|||
flex-direction: column; |
|||
padding: 5px 10px; |
|||
color: #169bcf; |
|||
.num { |
|||
font-size: 60px; |
|||
display: flex; |
|||
align-items: end; |
|||
} |
|||
.percent { |
|||
display: flex; |
|||
} |
|||
} |
|||
.tabs { |
|||
width: 100%; |
|||
height: 30px; |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: center; |
|||
font-size: 16px; |
|||
color: #aaaaaa; |
|||
} |
|||
.content-list { |
|||
flex: 1; |
|||
display: flex; |
|||
flex-direction: column; |
|||
overflow-y: auto; |
|||
padding: 5px 10px; |
|||
.content-item { |
|||
width: 100%; |
|||
display: flex; |
|||
align-items: center; |
|||
margin-bottom: 15px; |
|||
color: #aaaaaa; |
|||
font-size: 14px; |
|||
.name { |
|||
width: 25%; |
|||
} |
|||
.percent { |
|||
flex: 1; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</style> |
Loading…
Reference in new issue