|
|
@ -1,34 +1,23 @@ |
|
|
<template> |
|
|
<template> |
|
|
<View title="地图导览" sub-title="map guide" :show-input="false"> |
|
|
|
|
|
<img src="../../assets/images/map/hands.svg" class="hands" alt="" /> |
|
|
|
|
|
<div class="top-right-wrapper"> |
|
|
|
|
|
<Time /> |
|
|
|
|
|
<Temperature /> |
|
|
|
|
|
<img src="../../assets/images/nav/back.png" class="back-icon" @click="$router.back()" alt="" /> |
|
|
|
|
|
<!-- <QRCode />--> |
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
<View> |
|
|
<div class="nav-methods animate__animated animate__fadeInUp animate__faster"> |
|
|
<div class="nav-methods animate__animated animate__fadeInUp animate__faster"> |
|
|
<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> |
|
|
|
|
|
<p class="en" :class="'en-middle' + index">{{ item.nameEn }}</p> |
|
|
|
|
|
|
|
|
<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> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="box w-168 mr-8" @click="handleReplay"> |
|
|
|
|
|
<Refresh :size="34" fill="rgba(0, 0, 0, 0.6)" :class="{ rotate: replay }" class="box-icon z-index" /> |
|
|
|
|
|
</div> |
|
|
|
|
|
<div class="box w-168 mr-8" :class="{ active: pause }" @click="togglePause"> |
|
|
|
|
|
<img :src="pause ? require('../../assets/images/nav/trigle.svg') : require('../../assets/images/nav/double_line.svg')" class="box-icon z-index" alt="" /> |
|
|
|
|
|
</div> |
|
|
|
|
|
<div class="box w-168 mr-8" :class="{ active: speedUp }" @click="handleSpeedUp"> |
|
|
|
|
|
<img :src="!speedUp ? require('../../assets/images/nav/double_trigle.svg') : require('../../assets/images/nav/pause.svg')" class="box-icon z-index" alt="" /> |
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
<div class="box w-100" @click="setCameraViews"> |
|
|
|
|
|
<img :src="cameraViews.image" class="box-icon z-index" alt="" /> |
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="back" @click="$router.back()"></div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<PassShop :shop="shop" :current-floor="currentFloor" :direction="directionInfo" :config="config" :list="pathShopList" /> |
|
|
<PassShop :shop="shop" :current-floor="currentFloor" :direction="directionInfo" :config="config" :list="pathShopList" /> |
|
|
@ -36,7 +25,6 @@ |
|
|
</template> |
|
|
</template> |
|
|
|
|
|
|
|
|
<script setup> |
|
|
<script setup> |
|
|
import { onBeforeUnmount } from 'vue' |
|
|
|
|
|
import { storeToRefs } from 'pinia' |
|
|
import { storeToRefs } from 'pinia' |
|
|
import { useStore } from '@/store/root' |
|
|
import { useStore } from '@/store/root' |
|
|
import View from '@/layouts/View.vue' |
|
|
import View from '@/layouts/View.vue' |
|
|
@ -44,28 +32,17 @@ import { methodsList } from './methodsList' |
|
|
import { useMapNavControl } from '@/composables/useMapNavControl' |
|
|
import { useMapNavControl } from '@/composables/useMapNavControl' |
|
|
import { useChangeNavMethod } from '@/composables/useChangeNavMethod' |
|
|
import { useChangeNavMethod } from '@/composables/useChangeNavMethod' |
|
|
import { useStartNavi } from '@/composables/useStartNavi' |
|
|
import { useStartNavi } from '@/composables/useStartNavi' |
|
|
import { useSetCameraViews } from '@/composables/useSetCameraViews' |
|
|
|
|
|
import { Refresh } from '@/base/Svg' |
|
|
|
|
|
import PassShop from './children/PassShop.vue' |
|
|
import PassShop from './children/PassShop.vue' |
|
|
import Temperature from '@/base/Temperature/Temperature.vue' |
|
|
|
|
|
import Time from '@/base/Time/Time.vue' |
|
|
|
|
|
import { useStatistics } from '@/composables/useStatistics' |
|
|
import { useStatistics } from '@/composables/useStatistics' |
|
|
|
|
|
|
|
|
const store = useStore() |
|
|
const store = useStore() |
|
|
const { shop, currentFloor, config } = storeToRefs(store) |
|
|
const { shop, currentFloor, config } = storeToRefs(store) |
|
|
|
|
|
|
|
|
const { replay, pause, speedUp, handleReplay, togglePause, handleSpeedUp, setPause } = useMapNavControl() |
|
|
|
|
|
|
|
|
const { setPause } = useMapNavControl() |
|
|
const { directionInfo, pathShopList, backPathArray } = useStartNavi(shop, currentFloor, setPause) |
|
|
const { directionInfo, pathShopList, backPathArray } = useStartNavi(shop, currentFloor, setPause) |
|
|
const { methodIdx, handleControl } = useChangeNavMethod(backPathArray) |
|
|
const { methodIdx, handleControl } = useChangeNavMethod(backPathArray) |
|
|
const { cameraViews, setCameraViews } = useSetCameraViews(setPause) |
|
|
|
|
|
|
|
|
|
|
|
useStatistics('navigation') |
|
|
useStatistics('navigation') |
|
|
|
|
|
|
|
|
window.Map_QM.changeWindowResize(1366, 1080) |
|
|
|
|
|
|
|
|
|
|
|
onBeforeUnmount(() => { |
|
|
|
|
|
window.Map_QM.changeWindowResize(1486, 920) |
|
|
|
|
|
}) |
|
|
|
|
|
</script> |
|
|
</script> |
|
|
|
|
|
|
|
|
<style lang="scss" scoped> |
|
|
<style lang="scss" scoped> |
|
|
@ -99,18 +76,37 @@ onBeforeUnmount(() => { |
|
|
} |
|
|
} |
|
|
.nav-methods { |
|
|
.nav-methods { |
|
|
position: absolute; |
|
|
position: absolute; |
|
|
display: flex; |
|
|
|
|
|
left: 40px; |
|
|
|
|
|
bottom: 812px; |
|
|
|
|
|
|
|
|
width: 100vw; |
|
|
|
|
|
height: 260px; |
|
|
|
|
|
left: 0; |
|
|
|
|
|
background: linear-gradient(113.71deg, #435acd 0%, #749cf3 100%); |
|
|
|
|
|
bottom: 688px; |
|
|
z-index: 51; |
|
|
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 { |
|
|
.back { |
|
|
display: flex; |
|
|
|
|
|
align-items: center; |
|
|
|
|
|
justify-content: center; |
|
|
|
|
|
width: 132px; |
|
|
|
|
|
height: 80px; |
|
|
|
|
|
background: var(--color-linear-goldenyellow); |
|
|
|
|
|
border-radius: 12px; |
|
|
|
|
|
|
|
|
position: absolute; |
|
|
|
|
|
width: 180px; |
|
|
|
|
|
height: 180px; |
|
|
|
|
|
left: 832px; |
|
|
|
|
|
top: 40px; |
|
|
|
|
|
background: center / cover no-repeat url(./back.png); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.rotate { |
|
|
.rotate { |
|
|
@ -118,18 +114,15 @@ onBeforeUnmount(() => { |
|
|
animation-duration: 0.5s; |
|
|
animation-duration: 0.5s; |
|
|
} |
|
|
} |
|
|
.box { |
|
|
.box { |
|
|
display: flex; |
|
|
|
|
|
|
|
|
display: inline-flex; |
|
|
align-items: center; |
|
|
align-items: center; |
|
|
justify-content: center; |
|
|
justify-content: center; |
|
|
position: relative; |
|
|
position: relative; |
|
|
height: 80px; |
|
|
height: 80px; |
|
|
text-align: center; |
|
|
text-align: center; |
|
|
border-radius: 8px; |
|
|
border-radius: 8px; |
|
|
background: #ffffff; |
|
|
|
|
|
|
|
|
background: linear-gradient(180deg, rgba(255, 255, 255, 0.8) 0%, #ffffff 100%); |
|
|
|
|
|
|
|
|
&:nth-child(3) { |
|
|
|
|
|
margin-right: 14px; |
|
|
|
|
|
} |
|
|
|
|
|
.box-icon { |
|
|
.box-icon { |
|
|
position: relative; |
|
|
position: relative; |
|
|
display: block; |
|
|
display: block; |
|
|
@ -145,54 +138,19 @@ onBeforeUnmount(() => { |
|
|
} |
|
|
} |
|
|
.name { |
|
|
.name { |
|
|
font-weight: 700; |
|
|
font-weight: 700; |
|
|
font-family: 'font_bold'; |
|
|
|
|
|
font-size: 14px; |
|
|
|
|
|
color: var(--color-black-opacity-6); |
|
|
|
|
|
padding-bottom: 2px; |
|
|
|
|
|
padding-top: 5px; |
|
|
|
|
|
} |
|
|
|
|
|
.en { |
|
|
|
|
|
font-size: 12px; |
|
|
|
|
|
transform: scale(0.83); |
|
|
|
|
|
transform-origin: 0 0; |
|
|
|
|
|
text-transform: uppercase; |
|
|
|
|
|
color: var(--color-black-opacity-4); |
|
|
|
|
|
|
|
|
font-size: 16px; |
|
|
|
|
|
line-height: 19px; |
|
|
|
|
|
color: rgba(0, 0, 0, 0.8); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
&::before, |
|
|
|
|
|
&::after { |
|
|
|
|
|
position: absolute; |
|
|
|
|
|
left: 0; |
|
|
|
|
|
right: 0; |
|
|
|
|
|
top: 0; |
|
|
|
|
|
bottom: 0; |
|
|
|
|
|
content: ''; |
|
|
|
|
|
border-radius: 8px; |
|
|
|
|
|
transition: bottom 0.5s; |
|
|
|
|
|
} |
|
|
|
|
|
&::before { |
|
|
|
|
|
background-color: var(--color-white-opacity); |
|
|
|
|
|
z-index: 2; |
|
|
|
|
|
} |
|
|
|
|
|
&:after { |
|
|
|
|
|
background-color: #ffd360; |
|
|
|
|
|
z-index: 1; |
|
|
|
|
|
} |
|
|
|
|
|
&.active { |
|
|
&.active { |
|
|
&::before { |
|
|
|
|
|
bottom: 4px; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
background: linear-gradient(99.5deg, #f0b92b 0%, #f9d556 100%); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
.w-168 { |
|
|
|
|
|
width: 80px; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
.mr-8 { |
|
|
.mr-8 { |
|
|
margin-right: 8px; |
|
|
margin-right: 8px; |
|
|
} |
|
|
} |
|
|
.w-100 { |
|
|
|
|
|
width: 100px; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
.w-200 { |
|
|
.w-200 { |
|
|
width: 200px; |
|
|
width: 200px; |
|
|
|