Files
fengjie-datascreen/src/views/scenic/components/box-1.vue
2025-01-16 19:41:46 +08:00

269 lines
6.9 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div class="box-1">
<div class="header">
<div class="header__left">
<img src="@/assets/images/ticket.png" />
<div
class="header__left-item"
v-for="(item, index) in scenicStore.scenicSpotData"
:key="index"
>
<div class="label">{{ item.name }}</div>
<countup :end-val="item.value" />
</div>
</div>
<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 error">排队</p>
</div>
<div>
<div class="label">通景交通</div>
<p class="value">安全</p>
</div>
<div>
<div class="label">停车场负荷度</div>
<p class="value error">超负荷</p>
</div>
</div>
</div>
<div class="main"> </div>
<div class="footer">
<div class="flex">
<div class="item">
<CircleProgress :width="170" :height="90" />
<div>
<div class="bg">
<span class="label">今日工单总条数</span>
<span class="value"> <countup :endVal="1234" /></span>
</div>
<div class="bg">
<span class="label">工单完成数</span>
<span class="value"> <countup :endVal="1234" /></span>
</div>
</div>
</div>
<div class="item">
<CircleProgress :width="170" :height="90" />
<div>
<div class="bg">
<span class="label">今日工单总条数</span>
<span class="value"> <countup :endVal="1234" /></span>
</div>
<div class="bg">
<span class="label">工单完成数</span>
<span class="value"> <countup :endVal="1234" /></span>
</div>
</div>
</div>
</div>
<div class="flex align-center justify-between">
<div>
<vue3-seamless-scroll
class="list"
:list="scenicStore.wordkOrderList"
:limitScrollNum="3"
:hover="true"
:step="0.2"
:wheel="true"
:isWatch="true"
>
<div class="cell" v-for="(item, index) in scenicStore.wordkOrderList" :key="index">
<span :class="`tag--${item.level}`">{{ item.level_text }}</span>
<p class="content">
{{ item.title }}
</p>
</div>
</vue3-seamless-scroll>
</div>
<img class="more" src="@/assets/images/more-col.png" alt="查看更多" @click="handleMore" />
</div>
</div>
</div>
</template>
<script setup>
import countup from 'vue-countup-v3'
import { Vue3SeamlessScroll } from 'vue3-seamless-scroll'
import { useScenicStore } from '@/stores/scenic'
import { useRouter } from 'vue-router'
const router = useRouter()
const scenicStore = useScenicStore()
const handleMore = () => {
router.push('/workOrder')
}
</script>
<style scoped lang="scss">
.box-1 {
margin-top: vh(120);
width: vw(900);
height: vh(950);
padding: vw(10);
box-sizing: border-box;
background-image: url('@/assets/images/bg-3.png');
background-size: 100% 100%;
.header {
display: flex;
margin-top: vh(10);
&__left {
display: flex;
align-items: center;
> img {
width: vw(74);
height: auto;
}
}
&__left-item {
position: relative;
width: vw(120);
height: vh(58);
padding-left: vw(10);
display: flex;
flex-direction: column;
justify-content: center;
background-image: url('@/assets/images/ticket-item-bg.png');
background-size: 100% 100%;
.label {
position: absolute;
top: vh(-4);
font-weight: 400;
font-size: vw(14);
color: #ffffff;
}
}
& > div:nth-child(2) {
flex: 1;
display: flex;
justify-content: space-between;
.label {
font-weight: 400;
font-size: vw(16);
color: #ffffff;
}
.value {
font-weight: bold;
font-size: vw(28);
color: #02f9fa;
text-align: center;
line-height: vh(60);
}
.error {
color: #ff4400;
}
}
.countup-wrap {
color: #02f9fa;
font-size: vw(28);
font-weight: bold;
}
}
.main {
width: 100%;
height: vh(600);
}
.footer {
.item {
flex: 1;
height: vh(140);
display: flex;
align-items: center;
background-image: url('@/assets/images/bg-3.png');
background-size: 100% 100%;
&:nth-child(1) {
margin-right: vw(10);
}
.bg {
padding-left: vw(20);
width: vw(243);
height: vh(40);
display: flex;
align-items: center;
background: linear-gradient(90deg, rgba(0, 150, 255, 0.34) 0%, rgba(0, 150, 255, 0) 100%);
&:nth-child(1) {
margin-bottom: vh(4);
}
.label {
width: vw(120);
font-weight: 400;
font-size: vw(14);
color: #fff;
}
.value {
font-weight: bold;
font-size: vw(28);
color: #02f9fa;
}
}
}
.list {
margin-top: vh(4);
height: vh(116);
overflow: hidden;
}
.cell {
display: flex;
margin-left: vw(4);
margin-top: vh(12);
&:nth-last-child(1) {
margin-bottom: 0;
}
.tag {
padding: 0 vw(16);
font-weight: bold;
font-size: vw(14);
color: #fff;
display: flex;
align-items: center;
justify-content: center;
border-radius: vw(2);
}
.tag--important {
@extend .tag;
background: #feae00;
}
.tag--warn {
@extend .tag;
background: #d9011b;
}
.tag--normal {
@extend .tag;
background: #2380fb;
}
.content {
margin-left: vw(4);
padding: 0 vw(10);
width: vw(760);
height: vh(24);
line-height: vh(24);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
font-weight: 400;
font-size: vw(14);
color: #ffffff;
border-radius: vw(2);
background: rgba(0, 150, 255, 0.28);
}
}
.more {
cursor: pointer;
width: auto;
height: vh(100);
margin-top: vh(12);
}
}
}
</style>