feat:完善首页 景区功能

This commit is contained in:
张先生
2025-03-14 15:56:54 +08:00
parent 15b119a994
commit 641753aee8
6 changed files with 81 additions and 141 deletions

View File

@@ -3,13 +3,21 @@ import { defineStore } from 'pinia'
export const useScenicStore = defineStore('scenic', () => { export const useScenicStore = defineStore('scenic', () => {
// 门票销售数据 // 门票销售数据
let scenicSpotData = ref([ let scenicSpotData = ref({
{ name: '今日购票数', value: 0 }, data: [
{ name: '今日购票数', value: 0 },
{ name: '未来三天购票数', value: 0 }, { name: '未来三天购票数', value: 0 },
{ name: '三天后购票数', value: 0 } { name: '三天后购票数', value: 0 }
]) ],
infoList: [
{ name: '游玩舒适度', type: 0, value: '空闲' },
{ name: '景区安全', type: 0, value: '安全' },
{ name: '通景交通', type: 0, value: '通畅' },
{ name: '停车场负荷', type: 0, value: '空闲' }
]
})
// 景区排队信息 // 景区排队信息
let scenicQueueData = ref({ dataList: [], header: { jrcp: 0, jrjdrs: 0, pdcxsj: 0, pdrs: 0 } }) let scenicQueueData = ref({ dataList: [], header: { jrcp: 0, jrjdrs: 0, pdcxsj: 0, pdrs: 0 } })
// 景区负载信息 // 景区负载信息

View File

@@ -21,20 +21,10 @@
</div> </div>
<div class="right"> <div class="right">
<div class="item" v-for="(item, index) in homeStore.visitorInfoList" :key="index"> <div class="item" v-for="(item, index) in homeStore.visitorInfoList" :key="index">
<template v-if="index == 2"> <div class="label">{{ item.name }}</div>
<div class="label">接待情况</div> <div :class="[item.type == 4 ? 'value--error' : 'value--primary']">{{
<div class="value--primary">平稳</div> item.value
</template> }}</div>
<template v-else-if="index == 4">
<div class="label">停车场负荷</div>
<div class="value--primary">空闲</div>
</template>
<template v-else>
<div class="label">{{ item.name }}</div>
<div :class="[item.type == 1 ? 'value--error' : 'value--primary']">{{
item.value
}}</div>
</template>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -5,7 +5,7 @@
<img src="@/assets/images/ticket.png" /> <img src="@/assets/images/ticket.png" />
<div <div
class="header__left-item" class="header__left-item"
v-for="(item, index) in scenicStore.scenicSpotData" v-for="(item, index) in scenicStore.scenicSpotData.data"
:key="index" :key="index"
> >
<div class="label">{{ item.name }}</div> <div class="label">{{ item.name }}</div>
@@ -13,22 +13,9 @@
</div> </div>
</div> </div>
<div> <div>
<div> <div v-for="(item, index) in scenicStore.scenicSpotData.infoList" :key="index">
<div class="label">游览舒适度</div> <div class="label">{{ item.name }}</div>
<p class="value">舒适</p> <p class="value" :class="{ error: item.type == 4 }">{{ item.value }}</p>
</div>
<div>
<div class="label">景区安全</div>
<p class="value">安全</p>
</div>
<div>
<div class="label">通景交通</div>
<p class="value">畅通</p>
</div>
<div>
<div class="label">停车场负荷度</div>
<p class="value">空闲</p>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -4,11 +4,6 @@
<div class="box mr-8"> <div class="box mr-8">
<Title1 title="排队信息" /> <Title1 title="排队信息" />
<div class="count-box flex justify-between"> <div class="count-box flex justify-between">
<!-- <count-item-->
<!-- label="今日出票"-->
<!-- :count="scenicStore.scenicQueueData.header.jrcp"-->
<!-- suffix="张"-->
<!-- />-->
<count-item <count-item
label="今日接待人数" label="今日接待人数"
:count="scenicStore.scenicQueueData.header.jrjdrs" :count="scenicStore.scenicQueueData.header.jrjdrs"
@@ -134,7 +129,7 @@
</div> </div>
<PieRow <PieRow
label="告警总数" label="告警总数"
:dataList="list" :dataList="scenicStore.secureData.dataList"
:total="alarmTotal" :total="alarmTotal"
:width="440" :width="440"
:height="300" :height="300"
@@ -173,7 +168,7 @@
:width="220" :width="220"
:height="300" :height="300"
sub-title="拥堵总时长" sub-title="拥堵总时长"
:list="scenicStore.trafficData.data.countRate" :list="scenicStore.trafficData.data.timeRate"
/> />
</div> </div>
</div> </div>
@@ -335,44 +330,6 @@
let carOverlays = ref([]) let carOverlays = ref([])
let shipOverlays = ref([]) let shipOverlays = ref([])
let list = ref([
{
name: '人群聚集识别',
count: 0,
value: 0
},
{
name: '人群计数识别',
count: 0,
value: 0
},
{
name: '游客跌倒',
count: 0,
value: 0
},
{
name: '游客攀爬',
count: 0,
value: 0
},
{
name: '违法吸烟',
count: 0,
value: 0
},
{
name: '烟火焚烧',
count: 0,
value: 0
},
{
name: '人员离岗',
count: 0,
value: 0
}
])
const garageList = computed(() => { const garageList = computed(() => {
return scenicStore.stopCarData.headList return scenicStore.stopCarData.headList
}) })

View File

@@ -56,7 +56,7 @@
return props.list.map((item) => { return props.list.map((item) => {
return { return {
...item, ...item,
value: parseFloat(item.value) value: item.count
} }
}) })
} }
@@ -71,68 +71,66 @@
return () => `{value|${getTotal()}}` + '\n' + `{name|${props.subTitle}}` return () => `{value|${getTotal()}}` + '\n' + `{name|${props.subTitle}}`
} }
let defaultCofig = { const init = () => {
color: ['#A665F1', '#0063FF', '#00D0FF', '#01FEFE', '#FC2638', '#FED958'], if (!params) {
legend: { params = {
x: 'left', color: ['#A665F1', '#0063FF', '#00D0FF', '#01FEFE', '#FC2638', '#FED958'],
y: '74%', legend: {
itemHeight: fitChartSize(12), x: 'left',
itemWidth: fitChartSize(12), y: '74%',
itemGap: fitChartSize(10), itemHeight: fitChartSize(12),
formatter: function (name) { itemWidth: fitChartSize(12),
return '{name|' + name + '}' itemGap: fitChartSize(10),
}, formatter: function (name) {
textStyle: { return '{name|' + name + '}'
rich: {
name: {
color: '#fff',
fontSize: fitChartSize(14)
}, },
value: { textStyle: {
color: '#00D5F6', rich: {
fontSize: fitChartSize(14) name: {
} color: '#fff',
} fontSize: fitChartSize(14)
} },
}, value: {
series: [ color: '#00D5F6',
{ fontSize: fitChartSize(14)
type: 'pie', }
center: ['50%', '40%'],
radius: ['55%', '70%'],
itemStyle: {
borderWidth: fitChartSize(4),
borderColor: '#093672'
},
label: {
show: true,
position: 'center',
fontWeight: 'bold',
formatter: formatLabel(),
rich: {
value: {
color: '#fff',
fontSize: fitChartSize(24),
fontWeight: 'bold',
padding: [0, 0, 5, 0]
},
name: {
color: '#fff',
fontSize: fitChartSize(12)
} }
} }
}, },
labelLine: { series: [
show: false {
}, type: 'pie',
data: getSeriesData() center: ['50%', '40%'],
radius: ['55%', '70%'],
itemStyle: {
borderWidth: fitChartSize(4),
borderColor: '#093672'
},
label: {
show: true,
position: 'center',
fontWeight: 'bold',
formatter: formatLabel(),
rich: {
value: {
color: '#fff',
fontSize: fitChartSize(24),
fontWeight: 'bold',
padding: [0, 0, 5, 0]
},
name: {
color: '#fff',
fontSize: fitChartSize(12)
}
}
},
labelLine: {
show: false
},
data: getSeriesData()
}
]
} }
]
}
const init = () => {
if (!params) {
params = defaultCofig
} else { } else {
params.series[0].label.formatter = formatLabel() params.series[0].label.formatter = formatLabel()
params.series[0].data = getSeriesData() params.series[0].data = getSeriesData()

View File

@@ -46,7 +46,7 @@
scenicStore.setWordkOrderData(val) scenicStore.setWordkOrderData(val)
break break
case 'scenicSpotData': case 'scenicSpotData':
scenicStore.setScenicSpotData(val.data) scenicStore.setScenicSpotData(val)
break break
case 'scenicSppotLineUp': case 'scenicSppotLineUp':
scenicStore.setScenicQueueData(val) scenicStore.setScenicQueueData(val)
@@ -70,7 +70,7 @@
scenicStore.setCarShipData(val.data) scenicStore.setCarShipData(val.data)
break break
} }
if (!timer) sendCarShip() // if (!timer) sendCarShip()
} }
} }
) )