|
|
|
@ -8,6 +8,7 @@ |
|
|
|
class="shop-logo" |
|
|
|
/> |
|
|
|
</div> |
|
|
|
<img v-if="pics" src="./pictag.png" class="pictag" alt="" /> |
|
|
|
<p class="name"> |
|
|
|
<span class="shop-name">{{ switchLanguage(shop, 'shopName') }}</span> |
|
|
|
<span class="name-right" v-if="path === '/guide'"> {{ shop.distance ? shop.distance + '米' : '' }}<img v-if="shop.dir" class="dir" :src="shop.dir" /> </span> |
|
|
|
@ -33,7 +34,7 @@ |
|
|
|
|
|
|
|
<Teleport to="body"> |
|
|
|
<Transition appear enter-active-class="animate__animated animate__fadeIn" leave-active-class="animate__animated animate__fadeOut"> |
|
|
|
<div v-if="isActive && isRow" class="qrcode-modal" @click="deactivate"> |
|
|
|
<div v-if="isActive && isRow && !(pics && pics.length)" class="qrcode-modal" @click="deactivate"> |
|
|
|
<div class="content" @click.stop="void 0"> |
|
|
|
<div |
|
|
|
class="close" |
|
|
|
@ -52,6 +53,32 @@ |
|
|
|
</div> |
|
|
|
</Transition></Teleport |
|
|
|
> |
|
|
|
|
|
|
|
<Teleport to="body"> |
|
|
|
<Transition appear enter-active-class="animate__animated animate__fadeIn" leave-active-class="animate__animated animate__fadeOut"> |
|
|
|
<div v-if="isActive && pics && pics.length" class="pic-modal" @click="deactivate"> |
|
|
|
<div class="content" @click.stop="void 0"> |
|
|
|
<img loading="lazy" :src="'./static/offline' + shop.logoUrl" alt="" class="logo" /> |
|
|
|
<div class="name">{{ switchLanguage(shop, 'shopName') }}</div> |
|
|
|
<div class="meta"><img src="./loc.png" class="loc" />{{ shop.floor }}</div> |
|
|
|
<img class="close" src="./close.png" @click="deactivate" /> |
|
|
|
<QRCodeFromText |
|
|
|
class="qrcode" |
|
|
|
:size="135" |
|
|
|
:text="`${config.mobileNav}?code=${currentFloor.projectCode}&s=${currentFloor.floorOrder}_${currentFloor.location}_屏幕的位置&e=${shop.houseNumber}`" |
|
|
|
></QRCodeFromText> |
|
|
|
<div class="qrcode-meta">扫码导航<img src="./arrow.png" class="arrow" /></div> |
|
|
|
<div class="pics"> |
|
|
|
<EffectFade :list="pics || []"> |
|
|
|
<template v-slot="{ item }"> |
|
|
|
<div class="pics-wrapper"> |
|
|
|
<img class="banner" :src="item" alt="" /> |
|
|
|
</div> |
|
|
|
</template> |
|
|
|
</EffectFade> |
|
|
|
</div> |
|
|
|
</div></div></Transition |
|
|
|
></Teleport> |
|
|
|
</div> |
|
|
|
</template> |
|
|
|
|
|
|
|
@ -60,9 +87,11 @@ import QRCodeFromText from '@/components/QRCodeFromText/QRCodeFromText.vue' |
|
|
|
import { storeToRefs } from 'pinia' |
|
|
|
import { useStore } from '@/store/root' |
|
|
|
import { computed } from 'vue' |
|
|
|
import EffectFade from '@/components/EffectFade/EffectFade.vue' |
|
|
|
const store = useStore() |
|
|
|
const { currentFloor, config, theme, showMap, path } = storeToRefs(store) |
|
|
|
const { currentFloor, config, theme, showMap, path, shopPicsMap } = storeToRefs(store) |
|
|
|
const isBrandShowMap = computed(() => showMap.value && (path.value === '/brand' || path.value === '/foods')) |
|
|
|
const pics = computed(() => shopPicsMap.value[props.shop.shopCode]) |
|
|
|
|
|
|
|
const props = defineProps({ |
|
|
|
shop: Object, |
|
|
|
@ -82,11 +111,19 @@ const deactivate = () => store.SET_SHOP(null) |
|
|
|
|
|
|
|
<style lang="scss" scoped> |
|
|
|
.group-item { |
|
|
|
position: relative; |
|
|
|
width: 230px; |
|
|
|
height: 200px; |
|
|
|
background: var(--brand-background); |
|
|
|
border-radius: var(--global-radius, 8px); |
|
|
|
overflow: hidden; |
|
|
|
.pictag { |
|
|
|
position: absolute; |
|
|
|
left: 4px; |
|
|
|
top: 4px; |
|
|
|
width: 24px; |
|
|
|
height: 24px; |
|
|
|
} |
|
|
|
.logo-wrapper { |
|
|
|
width: 100%; |
|
|
|
height: 160px; |
|
|
|
@ -186,6 +223,7 @@ const deactivate = () => store.SET_SHOP(null) |
|
|
|
background: var(--food-background); |
|
|
|
border-radius: var(--global-radius, 40px); |
|
|
|
align-items: center; |
|
|
|
overflow: visible; |
|
|
|
.logo-wrapper { |
|
|
|
width: 180px; |
|
|
|
height: 180px; |
|
|
|
@ -310,6 +348,7 @@ const deactivate = () => store.SET_SHOP(null) |
|
|
|
display: flex; |
|
|
|
flex-direction: column; |
|
|
|
align-items: center; |
|
|
|
border-radius: var(--global-radius, 40px); |
|
|
|
} |
|
|
|
.qrcode { |
|
|
|
height: 180px; |
|
|
|
@ -378,6 +417,141 @@ const deactivate = () => store.SET_SHOP(null) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
.pic-modal { |
|
|
|
position: fixed; |
|
|
|
top: 0; |
|
|
|
left: 0; |
|
|
|
right: 0; |
|
|
|
bottom: 0; |
|
|
|
z-index: 1000; |
|
|
|
.content { |
|
|
|
position: absolute; |
|
|
|
bottom: 0; |
|
|
|
left: 0; |
|
|
|
width: 100%; |
|
|
|
height: 870px; |
|
|
|
background: #fff; |
|
|
|
box-shadow: 0px 15px 24px 0px rgba(0, 0, 0, 0.05); |
|
|
|
.logo { |
|
|
|
position: absolute; |
|
|
|
top: 20px; |
|
|
|
left: 68px; |
|
|
|
width: 80px; |
|
|
|
height: 80px; |
|
|
|
border-radius: 12px; |
|
|
|
border: 1px solid var(--b-10, rgba(0, 0, 0, 0.1)); |
|
|
|
background: var(--w-100, #fff); |
|
|
|
padding: 4px; |
|
|
|
} |
|
|
|
.name { |
|
|
|
position: absolute; |
|
|
|
top: 30px; |
|
|
|
left: 172px; |
|
|
|
color: var(--b-80, rgba(0, 0, 0, 0.8)); |
|
|
|
font-size: 24px; |
|
|
|
font-style: normal; |
|
|
|
font-weight: 700; |
|
|
|
line-height: 28px; |
|
|
|
} |
|
|
|
.meta { |
|
|
|
position: absolute; |
|
|
|
top: 66px; |
|
|
|
left: 172px; |
|
|
|
height: 23px; |
|
|
|
display: inline-flex; |
|
|
|
color: var(--b-60, rgba(0, 0, 0, 0.6)); |
|
|
|
font-size: 20px; |
|
|
|
font-style: normal; |
|
|
|
font-weight: 700; |
|
|
|
align-items: center; |
|
|
|
.loc { |
|
|
|
width: 20px; |
|
|
|
height: 20px; |
|
|
|
margin-right: 8px; |
|
|
|
} |
|
|
|
} |
|
|
|
.qrcode { |
|
|
|
position: absolute; |
|
|
|
top: -50px; |
|
|
|
right: 168px; |
|
|
|
width: 150px; |
|
|
|
height: 150px; |
|
|
|
display: flex; |
|
|
|
justify-content: center; |
|
|
|
align-items: center; |
|
|
|
border-radius: 12px; |
|
|
|
border: 1px solid var(--b-10, rgba(0, 0, 0, 0.1)); |
|
|
|
background: var(--w-100, #fff); |
|
|
|
} |
|
|
|
.qrcode-meta { |
|
|
|
position: absolute; |
|
|
|
display: inline-flex; |
|
|
|
top: 65px; |
|
|
|
right: 334px; |
|
|
|
color: var(--b-60, rgba(0, 0, 0, 0.6)); |
|
|
|
font-size: 20px; |
|
|
|
font-style: normal; |
|
|
|
font-weight: 700; |
|
|
|
line-height: 24px; |
|
|
|
align-items: center; |
|
|
|
.arrow { |
|
|
|
width: 24px; |
|
|
|
height: 24px; |
|
|
|
margin-left: 4px; |
|
|
|
} |
|
|
|
} |
|
|
|
.close { |
|
|
|
position: absolute; |
|
|
|
width: 80px; |
|
|
|
height: 80px; |
|
|
|
top: 20px; |
|
|
|
right: 68px; |
|
|
|
} |
|
|
|
.pics { |
|
|
|
position: absolute; |
|
|
|
left: 68px; |
|
|
|
right: 68px; |
|
|
|
top: 120px; |
|
|
|
|
|
|
|
:deep(.swiper) { |
|
|
|
.swiper-pagination { |
|
|
|
top: auto; |
|
|
|
right: 0; |
|
|
|
bottom: 0; |
|
|
|
left: 0; |
|
|
|
width: auto; |
|
|
|
margin: auto; |
|
|
|
.swiper-pagination-bullet { |
|
|
|
width: 34px !important; |
|
|
|
height: 4px !important; |
|
|
|
background: var(--b-10, rgba(0, 0, 0, 0.1)); |
|
|
|
border-radius: 6px !important; |
|
|
|
opacity: inherit !important; |
|
|
|
margin: 0; |
|
|
|
|
|
|
|
&.swiper-pagination-bullet-active { |
|
|
|
background: var(--VI--, #516dd8); |
|
|
|
border-radius: 6px !important; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
.pics-wrapper { |
|
|
|
position: relative; |
|
|
|
width: 944px; |
|
|
|
height: 724px; |
|
|
|
border-radius: 16px; |
|
|
|
overflow: hidden; |
|
|
|
.banner { |
|
|
|
width: 100%; |
|
|
|
height: 708px; |
|
|
|
object-fit: cover; |
|
|
|
border-radius: 16px; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@media (min-aspect-ratio: 1/1) { |
|
|
|
.group-item { |
|
|
|
.logo-wrapper { |
|
|
|
@ -412,5 +586,72 @@ const deactivate = () => store.SET_SHOP(null) |
|
|
|
bottom: 280px; |
|
|
|
} |
|
|
|
} |
|
|
|
.pic-modal { |
|
|
|
.content { |
|
|
|
left: auto; |
|
|
|
right: 0; |
|
|
|
width: 610px; |
|
|
|
height: 914px; |
|
|
|
box-shadow: 0px 15px 24px 0px rgba(0, 0, 0, 0.05); |
|
|
|
border-radius: 24px; |
|
|
|
.logo { |
|
|
|
top: 40px; |
|
|
|
left: 40px; |
|
|
|
width: 150px; |
|
|
|
height: 150px; |
|
|
|
padding: 15px; |
|
|
|
} |
|
|
|
.name { |
|
|
|
top: 74px; |
|
|
|
left: 222px; |
|
|
|
} |
|
|
|
.meta { |
|
|
|
top: 128px; |
|
|
|
left: 222px; |
|
|
|
height: 28px; |
|
|
|
font-size: 24px; |
|
|
|
} |
|
|
|
.qrcode { |
|
|
|
left: 40px; |
|
|
|
bottom: 40px; |
|
|
|
top: auto; |
|
|
|
} |
|
|
|
.qrcode-meta { |
|
|
|
left: 222px; |
|
|
|
bottom: 40px; |
|
|
|
right: auto; |
|
|
|
top: auto; |
|
|
|
flex-direction: row-reverse; |
|
|
|
.arrow { |
|
|
|
margin-left: 0; |
|
|
|
margin-right: 4px; |
|
|
|
transform: rotate(180deg); |
|
|
|
} |
|
|
|
} |
|
|
|
.close { |
|
|
|
right: 40px; |
|
|
|
bottom: 40px; |
|
|
|
top: auto; |
|
|
|
} |
|
|
|
.pics { |
|
|
|
position: absolute; |
|
|
|
left: 15px; |
|
|
|
right: 15px; |
|
|
|
top: 230px; |
|
|
|
.pics-wrapper { |
|
|
|
width: 580px; |
|
|
|
height: 451px; |
|
|
|
border-radius: 16px; |
|
|
|
overflow: hidden; |
|
|
|
.banner { |
|
|
|
width: 100%; |
|
|
|
height: 435px; |
|
|
|
object-fit: cover; |
|
|
|
border-radius: 16px; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
</style> |
|
|
|
|