上海市东方医院导视
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

162 lines
3.7 KiB

<template>
<View>
<div class="nav-methods animate__animated animate__fadeInUp animate__faster">
<div class="r1">导航到</div>
<div class="r2">{{ shop.shopName }}</div>
<div class="r3">
<div
class="box w-200 mr-8"
@click="handleControl(item.name, index)"
v-for="(item, index) of methodsList"
:key="item.name"
:class="{ active: methodIdx === index }"
>
<img :src="item.icon" class="box-icon mr-20 z-index" alt="" />
<div class="box-right z-index">
<p class="name">{{ item.name }}</p>
</div>
</div>
</div>
<div class="back" @click="$router.back()"></div>
</div>
<PassShop :shop="shop" :current-floor="currentFloor" :direction="directionInfo" :config="config" :list="pathShopList" />
</View>
</template>
<script setup>
import { storeToRefs } from 'pinia'
import { useStore } from '@/store/root'
import View from '@/layouts/View.vue'
import { methodsList } from './methodsList'
import { useMapNavControl } from '@/composables/useMapNavControl'
import { useChangeNavMethod } from '@/composables/useChangeNavMethod'
import { useStartNavi } from '@/composables/useStartNavi'
import PassShop from './children/PassShop.vue'
import { useStatistics } from '@/composables/useStatistics'
const store = useStore()
const { shop, currentFloor, config } = storeToRefs(store)
const { setPause } = useMapNavControl()
const { directionInfo, pathShopList, backPathArray } = useStartNavi(shop, currentFloor, setPause)
const { methodIdx, handleControl } = useChangeNavMethod(backPathArray)
useStatistics('navigation')
</script>
<style lang="scss" scoped>
.top-right-wrapper {
position: fixed;
display: flex;
flex-direction: column;
align-items: center;
width: 130px;
height: 499px;
left: 0;
top: 0px;
background: linear-gradient(180deg, rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0) 100%);
z-index: 51;
backdrop-filter: blur(20px);
}
.mr-20 {
margin-right: 20px;
}
.hands {
position: fixed;
top: 37px;
right: 170px;
width: 246px;
z-index: 51;
}
.back-icon {
width: 132px;
margin-left: 22px;
margin-bottom: 16px;
}
.nav-methods {
position: absolute;
width: 100vw;
height: 260px;
left: 0;
background: linear-gradient(113.71deg, #435acd 0%, #749cf3 100%);
bottom: 688px;
z-index: 51;
padding-top: 30px;
padding-left: 68px;
.r1 {
font-weight: 700;
font-size: 24px;
line-height: 28px;
color: rgba(255, 255, 255, 0.8);
margin-bottom: 10px;
}
.r2 {
font-weight: 700;
font-size: 40px;
line-height: 47px;
color: #ffffff;
margin-bottom: 25px;
}
.r3 {
}
.back {
position: absolute;
width: 180px;
height: 180px;
left: 832px;
top: 40px;
background: center / cover no-repeat url(./back.png);
}
.rotate {
@include rotate(-360deg, 1);
animation-duration: 0.5s;
}
.box {
display: inline-flex;
align-items: center;
justify-content: center;
position: relative;
height: 80px;
text-align: center;
border-radius: 8px;
background: linear-gradient(180deg, rgba(255, 255, 255, 0.8) 0%, #ffffff 100%);
.box-icon {
position: relative;
display: block;
width: 34px;
height: 34px;
flex-shrink: 0;
}
.box-right {
display: flex;
flex-direction: column;
align-items: flex-start;
justify-content: center;
}
.name {
font-weight: 700;
font-size: 16px;
line-height: 19px;
color: rgba(0, 0, 0, 0.8);
}
&.active {
background: linear-gradient(99.5deg, #f0b92b 0%, #f9d556 100%);
}
}
.mr-8 {
margin-right: 8px;
}
.w-200 {
width: 200px;
}
.z-index {
z-index: 5;
}
}
</style>