4 changed files with 482 additions and 144 deletions
@ -1,5 +1,464 @@ |
|||
<template> |
|||
<div></div> |
|||
<transition appear enter-active-class="animate__animated animate__fadeIn" leave-active-class="animate__animated animate__zoomOut"> |
|||
<div class="traffic-container"> |
|||
<div class="left"> |
|||
<img class="bg" src="@/assets/images/traffic.png" alt="" /> |
|||
<div class="qing_1"> |
|||
<svg width="637" height="242" viewBox="0 0 637 242" fill="none" xmlns="http://www.w3.org/2000/svg"> |
|||
<path d="M626.5 0H637L25.5 241.5L0 237L626.5 0Z" :fill="roadList[6].color" /> |
|||
</svg> |
|||
</div> |
|||
<div class="qing_2"> |
|||
<svg width="659" height="234" viewBox="0 0 659 234" fill="none" xmlns="http://www.w3.org/2000/svg"> |
|||
<path d="M649 0.5H658.5L25.5 234L0 229L649 0.5Z" :fill="roadList[7].color" /> |
|||
</svg> |
|||
</div> |
|||
<div class="qing_bg"> |
|||
<svg width="700" height="246" viewBox="0 0 700 246" fill="none" xmlns="http://www.w3.org/2000/svg"> |
|||
<path d="M657 0L700 1L94.9994 245.5L0 226.5L657 0Z" fill="white" /> |
|||
</svg> |
|||
</div> |
|||
<div class="label qing">青年大桥</div> |
|||
<div class="bo_1"> |
|||
<svg width="805" height="174" viewBox="0 0 805 174" fill="none" xmlns="http://www.w3.org/2000/svg"> |
|||
<path d="M0 2.5L9 0.5L804.5 165L782 174L0 2.5Z" :fill="roadList[5].color" /> |
|||
</svg> |
|||
</div> |
|||
<div class="bo_2"> |
|||
<svg width="819" height="163" viewBox="0 0 819 163" fill="none" xmlns="http://www.w3.org/2000/svg"> |
|||
<path d="M0.5 1.5L7 0L818.5 155.5L801.5 162.5L0.5 1.5Z" :fill="roadList[4].color" /> |
|||
</svg> |
|||
</div> |
|||
<div class="bo_bg"> |
|||
<svg width="856" height="185" viewBox="0 0 856 185" fill="none" xmlns="http://www.w3.org/2000/svg"> |
|||
<path d="M0 8.5L34.5 0.5L855.5 152L773 184.5L0 8.5Z" fill="white" /> |
|||
</svg> |
|||
</div> |
|||
<div class="label bo">博览路</div> |
|||
<div class="jiu_1"> |
|||
<svg width="669" height="147" viewBox="0 0 669 147" fill="none" xmlns="http://www.w3.org/2000/svg"> |
|||
<path d="M659.5 0L668.5 0.5L17.5 147L0.5 144L659.5 0Z" :fill="roadList[2].color" /> |
|||
</svg> |
|||
</div> |
|||
<div class="jiu_2"> |
|||
<svg width="681" height="145" viewBox="0 0 681 145" fill="none" xmlns="http://www.w3.org/2000/svg"> |
|||
<path d="M672.5 0.5L680.5 1L18.5 144.5L0 141L672.5 0.5Z" :fill="roadList[1].color" /> |
|||
</svg> |
|||
</div> |
|||
<div class="jiu_bg"> |
|||
<svg width="718" height="151" viewBox="0 0 718 151" fill="none" xmlns="http://www.w3.org/2000/svg"> |
|||
<path d="M681.5 0L717.473 3.23145L68.5 151L0 139L681.5 0Z" fill="white" /> |
|||
</svg> |
|||
</div> |
|||
<div class="label jiu">九龙街</div> |
|||
<div class="shen_1"> |
|||
<svg width="622" height="72" viewBox="0 0 622 72" fill="none" xmlns="http://www.w3.org/2000/svg"> |
|||
<path d="M0.5 1.5L6.5 0.5L622 67.5L611.5 72L0.5 1.5Z" :fill="roadList[1].color" /> |
|||
</svg> |
|||
</div> |
|||
<div class="shen_2"> |
|||
<svg width="626" height="67" viewBox="0 0 626 67" fill="none" xmlns="http://www.w3.org/2000/svg"> |
|||
<path d="M0 1L5 0L625.5 62.5L616.5 66.5L0 1Z" :fill="roadList[0].color" /> |
|||
</svg> |
|||
</div> |
|||
<div class="shen_bg"> |
|||
<svg width="650" height="78" viewBox="0 0 650 78" fill="none" xmlns="http://www.w3.org/2000/svg"> |
|||
<path d="M0.5 5.5L26.5169 0.5L649.504 61L611 78L0.5 5.5Z" fill="white" /> |
|||
</svg> |
|||
</div> |
|||
<div class="label shen">沈水路</div> |
|||
</div> |
|||
<div class="right"> |
|||
<div class="title">{{ $t('road') + ':' }}</div> |
|||
<div class="road-list"> |
|||
<div v-for="item in statusList" :key="item.name" class="road"> |
|||
<div class="w" :style="'background:' + item.color"></div> |
|||
<div class="type">{{ switchLanguage(item, 'name') }}</div> |
|||
</div> |
|||
</div> |
|||
<div class="info-container"> |
|||
<div class="item"> |
|||
<div class="name">博览路:</div> |
|||
<div class="road" style="margin-right: 24px"> |
|||
<div class="w" :style="'background:' + roadList[4].color"></div> |
|||
<div class="type">{{ switchLanguage(roadList[4], 'status') }}</div> |
|||
</div> |
|||
<div class="road"> |
|||
<div class="w" :style="'background:' + roadList[5].color"></div> |
|||
<div class="type">{{ switchLanguage(roadList[5], 'status') }}</div> |
|||
</div> |
|||
</div> |
|||
<div class="item"> |
|||
<div class="name">九龙街:</div> |
|||
<div class="road" style="margin-right: 24px"> |
|||
<div class="w" :style="'background:' + roadList[2].color"></div> |
|||
<div class="type">{{ switchLanguage(roadList[2], 'status') }}</div> |
|||
</div> |
|||
<div class="road"> |
|||
<div class="w" :style="'background:' + roadList[3].color"></div> |
|||
<div class="type">{{ switchLanguage(roadList[3], 'status') }}</div> |
|||
</div> |
|||
</div> |
|||
<div class="item"> |
|||
<div class="name">沈水路:</div> |
|||
<div class="road" style="margin-right: 24px"> |
|||
<div class="w" :style="'background:' + roadList[0].color"></div> |
|||
<div class="type">{{ switchLanguage(roadList[0], 'status') }}</div> |
|||
</div> |
|||
<div class="road"> |
|||
<div class="w" :style="'background:' + roadList[1].color"></div> |
|||
<div class="type">{{ switchLanguage(roadList[1], 'status') }}</div> |
|||
</div> |
|||
</div> |
|||
<div class="item"> |
|||
<div class="name">青年大桥:</div> |
|||
<div class="road" style="margin-right: 24px"> |
|||
<div class="w" :style="'background:' + roadList[6].color"></div> |
|||
<div class="type">{{ switchLanguage(roadList[6], 'status') }}</div> |
|||
</div> |
|||
<div class="road"> |
|||
<div class="w" :style="'background:' + roadList[7].color"></div> |
|||
<div class="type">{{ switchLanguage(roadList[7], 'status') }}</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</transition> |
|||
</template> |
|||
|
|||
<script setup lang="ts"></script> |
|||
<script setup lang="ts"> |
|||
import { ref } from 'vue' |
|||
|
|||
const statusList = [ |
|||
{ |
|||
name: '畅通', |
|||
nameEn: 'Clear', |
|||
color: '#68B753' |
|||
}, |
|||
{ |
|||
name: '缓行', |
|||
nameEn: 'Slow', |
|||
color: '#F5BD44' |
|||
}, |
|||
{ |
|||
name: '拥堵', |
|||
nameEn: 'Jam', |
|||
color: '#E53F3B' |
|||
}, |
|||
{ |
|||
name: '非常拥堵', |
|||
nameEn: 'Congested', |
|||
color: '#A91A1F' |
|||
} |
|||
] |
|||
|
|||
const roadList = ref([ |
|||
{ |
|||
roadName: '沈水路', |
|||
direction: '东向西', |
|||
color: '#68B753', |
|||
status: '畅通', |
|||
statusEn: 'Clear' |
|||
}, |
|||
{ |
|||
roadName: '沈水路', |
|||
direction: '西向东', |
|||
color: '#68B753', |
|||
status: '畅通', |
|||
statusEn: 'Clear' |
|||
}, |
|||
{ |
|||
roadName: '九龙街', |
|||
direction: '南向北', |
|||
color: '#68B753', |
|||
status: '畅通', |
|||
statusEn: 'Clear' |
|||
}, |
|||
{ |
|||
roadName: '九龙街', |
|||
direction: '北向南', |
|||
color: '#68B753', |
|||
status: '畅通', |
|||
statusEn: 'Clear' |
|||
}, |
|||
{ |
|||
roadName: '博览路', |
|||
direction: '东向西', |
|||
color: '#68B753', |
|||
status: '畅通', |
|||
statusEn: 'Clear' |
|||
}, |
|||
{ |
|||
roadName: '博览路', |
|||
direction: '西向东', |
|||
color: '#68B753', |
|||
status: '畅通', |
|||
statusEn: 'Clear' |
|||
}, |
|||
{ |
|||
roadName: '青年大街', |
|||
direction: '南向北', |
|||
color: '#68B753', |
|||
status: '畅通', |
|||
statusEn: 'Clear' |
|||
}, |
|||
{ |
|||
roadName: '青年大街', |
|||
direction: '北向南', |
|||
color: '#68B753', |
|||
status: '畅通', |
|||
statusEn: 'Clear' |
|||
} |
|||
]) |
|||
|
|||
const resList = [ |
|||
{ |
|||
roadName: '九龙街', |
|||
sectionDesc: '南向北', |
|||
status: '拥堵', |
|||
speed: 21.37, |
|||
distance: 740 |
|||
}, |
|||
{ |
|||
roadName: '青年大街', |
|||
sectionDesc: '南向北', |
|||
status: '拥堵', |
|||
speed: 21.38, |
|||
distance: 730 |
|||
} |
|||
] |
|||
|
|||
resList.forEach(item => { |
|||
switch (item.roadName) { |
|||
case '沈水路': |
|||
item.sectionDesc === '东向西' ? changeStatus(item.status, roadList.value[0]) : changeStatus(item.status, roadList.value[1]) |
|||
break |
|||
case '九龙街': |
|||
item.sectionDesc === '南向北' ? changeStatus(item.status, roadList.value[2]) : changeStatus(item.status, roadList.value[3]) |
|||
break |
|||
case '博览路': |
|||
item.sectionDesc === '东向西' ? changeStatus(item.status, roadList.value[4]) : changeStatus(item.status, roadList.value[5]) |
|||
break |
|||
case '青年大街': |
|||
item.sectionDesc === '南向北' ? changeStatus(item.status, roadList.value[6]) : changeStatus(item.status, roadList.value[7]) |
|||
break |
|||
|
|||
default: |
|||
break |
|||
} |
|||
}) |
|||
|
|||
function changeStatus(status: string, item: any) { |
|||
switch (status) { |
|||
case '畅通': |
|||
item.status = '畅通' |
|||
item.statusEn = 'Clear' |
|||
item.color = '#68B753' |
|||
break |
|||
case '缓行': |
|||
item.status = '缓行' |
|||
item.statusEn = 'Slow' |
|||
item.color = '#F5BD44' |
|||
break |
|||
case '拥堵': |
|||
item.status = '拥堵' |
|||
item.statusEn = 'Jam' |
|||
item.color = '#E53F3B' |
|||
break |
|||
case '严重拥堵': |
|||
item.status = '非常拥堵' |
|||
item.statusEn = 'Congested' |
|||
item.color = '#A91A1F' |
|||
break |
|||
|
|||
default: |
|||
break |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.traffic-container { |
|||
@include fl(flex-start, flex-start); |
|||
|
|||
position: fixed; |
|||
top: 306px; |
|||
left: 112px; |
|||
.left { |
|||
position: relative; |
|||
width: 1218px; |
|||
height: 600px; |
|||
.bg { |
|||
position: absolute; |
|||
top: 0; |
|||
left: 236px; |
|||
z-index: 10; |
|||
width: 693px; |
|||
height: 420px; |
|||
} |
|||
.qing { |
|||
position: absolute; |
|||
top: 350px; |
|||
left: 890px; |
|||
transform: rotate(-23.66deg); |
|||
} |
|||
.qing_1 { |
|||
position: absolute; |
|||
top: 249px; |
|||
left: 545px; |
|||
z-index: 15; |
|||
} |
|||
.qing_2 { |
|||
position: absolute; |
|||
top: 249px; |
|||
left: 502px; |
|||
z-index: 15; |
|||
} |
|||
.qing_bg { |
|||
position: absolute; |
|||
top: 248px; |
|||
left: 488px; |
|||
z-index: 14; |
|||
} |
|||
.bo { |
|||
position: absolute; |
|||
top: 390px; |
|||
left: 279px; |
|||
transform: rotate(13.14deg); |
|||
} |
|||
.bo_1 { |
|||
position: absolute; |
|||
top: 308.5px; |
|||
left: 29px; |
|||
z-index: 7; |
|||
} |
|||
.bo_2 { |
|||
position: absolute; |
|||
top: 304px; |
|||
left: 49.5px; |
|||
z-index: 7; |
|||
} |
|||
.bo_bg { |
|||
position: absolute; |
|||
top: 303.5px; |
|||
left: 24px; |
|||
z-index: 6; |
|||
} |
|||
.jiu { |
|||
position: absolute; |
|||
top: 245px; |
|||
left: 155px; |
|||
transform: rotate(-12.85deg); |
|||
} |
|||
.jiu_1 { |
|||
position: absolute; |
|||
top: 206px; |
|||
left: 41.5px; |
|||
z-index: 9; |
|||
} |
|||
.jiu_2 { |
|||
position: absolute; |
|||
top: 204.5px; |
|||
left: 13px; |
|||
z-index: 9; |
|||
} |
|||
.jiu_bg { |
|||
position: absolute; |
|||
top: 204px; |
|||
left: 0; |
|||
z-index: 8; |
|||
} |
|||
.shen { |
|||
position: absolute; |
|||
top: 205px; |
|||
left: 950px; |
|||
transform: rotate(6.52deg); |
|||
} |
|||
.shen_1 { |
|||
position: absolute; |
|||
top: 212px; |
|||
left: 574.5px; |
|||
z-index: 5; |
|||
} |
|||
.shen_2 { |
|||
position: absolute; |
|||
top: 210px; |
|||
left: 586px; |
|||
z-index: 5; |
|||
} |
|||
.shen_bg { |
|||
position: absolute; |
|||
top: 209.5px; |
|||
left: 568.5px; |
|||
z-index: 4; |
|||
} |
|||
.label { |
|||
font-size: 36px; |
|||
font-family: 'font_regular'; |
|||
color: #595447; |
|||
font-style: normal; |
|||
font-weight: 400; |
|||
line-height: 44px; |
|||
} |
|||
} |
|||
.right { |
|||
margin-top: 80px; |
|||
margin-left: 59px; |
|||
.title { |
|||
margin-bottom: 24px; |
|||
font-size: 28px; |
|||
font-family: 'font_bold'; |
|||
color: #736661; |
|||
font-style: normal; |
|||
font-weight: 700; |
|||
line-height: 36px; |
|||
} |
|||
.road-list { |
|||
@include fl(); |
|||
|
|||
margin-bottom: 48px; |
|||
} |
|||
.road { |
|||
@include fl(); |
|||
|
|||
margin-right: 40px; |
|||
.w { |
|||
width: 20px; |
|||
height: 20px; |
|||
margin-right: 8px; |
|||
} |
|||
.type { |
|||
font-size: 20px; |
|||
font-family: 'font_regular'; |
|||
color: #9b8c85; |
|||
font-style: normal; |
|||
font-weight: 400; |
|||
line-height: 28px; |
|||
} |
|||
} |
|||
.info-container { |
|||
width: 452px; |
|||
height: 356px; |
|||
padding: 40px 48px 12px; |
|||
background: #fff; |
|||
border-radius: 16px; |
|||
.item { |
|||
@include fl(); |
|||
|
|||
margin-bottom: 48px; |
|||
.name { |
|||
width: 100px; |
|||
margin-right: 40px; |
|||
font-size: 20px; |
|||
font-family: 'font_bold'; |
|||
color: #736661; |
|||
font-style: normal; |
|||
font-weight: 700; |
|||
line-height: 28px; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</style> |
|||
|
|||
@ -1,135 +0,0 @@ |
|||
<template> |
|||
<transition appear enter-active-class="animate__animated animate__fadeIn" leave-active-class="animate__animated animate__zoomOut"> |
|||
<div class="traffic-container"> |
|||
<div class="left"> |
|||
<img class="bg" src="@/assets/images/traffic.png" alt="" /> |
|||
</div> |
|||
<div class="right"> |
|||
<div class="title">{{ $t('road') + ':' }}</div> |
|||
<div class="road-list"> |
|||
<div v-for="item in list" :key="item.name" class="road"> |
|||
<div class="w" :style="'background:' + item.color"></div> |
|||
<div class="type">{{ switchLanguage(item, 'name') }}</div> |
|||
</div> |
|||
</div> |
|||
<div class="info-container"> |
|||
<div class="item"> |
|||
<div class="name">博览路:</div> |
|||
<div class="road" style="margin-right: 24px"> |
|||
<div class="w" style="background: #68b753"></div> |
|||
<div>{{ switchLanguage(item, 'name') }}</div> |
|||
</div> |
|||
<div class="road"> |
|||
<div class="w" style="background: #f5bd44"></div> |
|||
<div>{{ switchLanguage(item, 'name') }}</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</transition> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { switchLanguage } from '@/plugins/switchLanguage' |
|||
|
|||
const list = [ |
|||
{ |
|||
name: '畅通', |
|||
nameEn: 'Clear', |
|||
color: '#68B753' |
|||
}, |
|||
{ |
|||
name: '缓行', |
|||
nameEn: 'Slow', |
|||
color: '#F5BD44' |
|||
}, |
|||
{ |
|||
name: '拥堵', |
|||
nameEn: 'Jam', |
|||
color: '#E53F3B' |
|||
}, |
|||
{ |
|||
name: '非常拥堵', |
|||
nameEn: 'Very Congested', |
|||
color: '#A91A1F' |
|||
} |
|||
] |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.traffic-container { |
|||
@include fl(flex-start, flex-start); |
|||
|
|||
position: fixed; |
|||
top: 306px; |
|||
left: 112px; |
|||
.left { |
|||
position: relative; |
|||
width: 1218px; |
|||
height: 600px; |
|||
.bg { |
|||
position: absolute; |
|||
top: 0; |
|||
left: 236px; |
|||
z-index: 10; |
|||
width: 693px; |
|||
height: 420px; |
|||
} |
|||
} |
|||
.right { |
|||
margin-left: 59px; |
|||
.title { |
|||
margin-bottom: 24px; |
|||
font-size: 28px; |
|||
font-family: 'font_bold'; |
|||
color: #736661; |
|||
font-style: normal; |
|||
font-weight: 700; |
|||
line-height: 36px; |
|||
} |
|||
.road-list { |
|||
@include fl(); |
|||
|
|||
margin-bottom: 48px; |
|||
} |
|||
.road { |
|||
@include fl(); |
|||
|
|||
margin-right: 40px; |
|||
.w { |
|||
width: 20px; |
|||
height: 20px; |
|||
margin-right: 8px; |
|||
} |
|||
.type { |
|||
font-size: 20px; |
|||
font-family: 'font_regular'; |
|||
color: #9b8c85; |
|||
font-style: normal; |
|||
font-weight: 400; |
|||
line-height: 28px; |
|||
} |
|||
} |
|||
.info-container { |
|||
width: 452px; |
|||
height: 356px; |
|||
padding: 40px 48px 12px; |
|||
background: #fff; |
|||
border-radius: 16px; |
|||
.item { |
|||
margin-bottom: 48px; |
|||
.name { |
|||
margin-right: 40px; |
|||
font-size: 20px; |
|||
font-family: 'font_bold'; |
|||
color: #736661; |
|||
font-style: normal; |
|||
font-weight: 700; |
|||
line-height: 28px; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</style> |
|||
Loading…
Reference in new issue