Compare commits

...

9 Commits

  1. 2
      .gitignore
  2. 12
      CHANGELOG.md
  3. 4
      package-lock.json
  4. 3
      package.json
  5. 2
      public/static/offline/JSON/GetMapInfo.json
  6. 16
      public/static/offline/JSON/config.json
  7. 6
      public/static/qm/MainMap_QM.js
  8. 4
      src/App.vue
  9. 8
      src/components/Map/Map.vue
  10. 21
      src/components/PublicComponent/PublicComponent.vue
  11. 3
      src/components/Recommend/Recommend.vue
  12. 21
      src/components/ShopDetail/ShopDetail.vue
  13. 3
      src/components/ShopItem/ShopItem.vue
  14. 25
      src/composables/useGuideFilterShop.ts
  15. 4
      src/composables/useGuideMapOperation.ts
  16. 1
      src/composables/useInitMap.ts
  17. 2
      src/composables/useStartNavi.ts
  18. 4
      src/types/activity.d.ts
  19. 2
      src/types/art.d.ts
  20. 8
      src/views/Activity/Activity.vue
  21. 9
      src/views/Brand/filterFormatAndFloor.vue
  22. 4
      src/views/Brand/recommendShop.vue
  23. 3
      src/views/Brand/shopList.vue
  24. 7
      src/views/Guide/ArtList.vue
  25. 3
      src/views/Guide/Floor.vue
  26. 3
      src/views/Guide/FloorPicList.vue
  27. 50
      src/views/Guide/Guide.vue
  28. 6
      src/views/Guide/list.ts
  29. 24
      src/views/Nav/Nav.vue
  30. 41
      src/views/Service/Service.vue

2
.gitignore

@ -1,7 +1,7 @@
.DS_Store .DS_Store
node_modules node_modules
/dist /dist
*.zip
# local env files # local env files
.env.local .env.local

12
CHANGELOG.md

@ -2,6 +2,18 @@
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
## [1.0.0-B.9](https://git.1000my.com/project-chengduSKP/cd_SKP_H_base_daoshi_vue_ts/compare/v1.0.0-B.8...v1.0.0-B.9) (2023-07-26)
### Bug Fixes
* 🧩 区域等优化 ([14a9b7f](https://git.1000my.com/project-chengduSKP/cd_SKP_H_base_daoshi_vue_ts/commit/14a9b7f876ce9416fe7bb65c6fc345332dae9dc7))
* 🧩 相关优化 ([8ad9a29](https://git.1000my.com/project-chengduSKP/cd_SKP_H_base_daoshi_vue_ts/commit/8ad9a29ca3e44738f3811a5a3c3b2ceba1d86545))
* 🧩 艺术点位优化 ([42e1426](https://git.1000my.com/project-chengduSKP/cd_SKP_H_base_daoshi_vue_ts/commit/42e14268a4dea7fbe1f0e3c77c6e2395f00e9e7d))
* 🧩 优化艺术装置 ([32d7765](https://git.1000my.com/project-chengduSKP/cd_SKP_H_base_daoshi_vue_ts/commit/32d7765828016f7d0d533bd863b2a3234a68ff5d))
* 修改服务增加滚动条,修改品牌楼层菜单位置,修改推荐店铺的滑动速度 ([176c691](https://git.1000my.com/project-chengduSKP/cd_SKP_H_base_daoshi_vue_ts/commit/176c6918c51089da3027646d0976f2301c45dc3c))
* 修改问题 ([84833d4](https://git.1000my.com/project-chengduSKP/cd_SKP_H_base_daoshi_vue_ts/commit/84833d4c1845365c18f6cfb67ddaf3c60e48384c))
## [1.0.0-B.8](https://git.1000my.com/project-chengduSKP/cd_SKP_H_base_daoshi_vue_ts/compare/v1.0.0-B.7...v1.0.0-B.8) (2023-07-24) ## [1.0.0-B.8](https://git.1000my.com/project-chengduSKP/cd_SKP_H_base_daoshi_vue_ts/compare/v1.0.0-B.7...v1.0.0-B.8) (2023-07-24)

4
package-lock.json

@ -1,12 +1,12 @@
{ {
"name": "vue_cli_ts", "name": "vue_cli_ts",
"version": "1.0.0-B.8",
"version": "1.0.0-B.9",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "vue_cli_ts", "name": "vue_cli_ts",
"version": "1.0.0-B.8",
"version": "1.0.0-B.9",
"dependencies": { "dependencies": {
"@better-scroll/core": "^2.5.0", "@better-scroll/core": "^2.5.0",
"@better-scroll/observe-image": "^2.5.0", "@better-scroll/observe-image": "^2.5.0",

3
package.json

@ -1,6 +1,6 @@
{ {
"name": "vue_cli_ts", "name": "vue_cli_ts",
"version": "1.0.0-B.8",
"version": "1.0.0-B.9",
"private": true, "private": true,
"scripts": { "scripts": {
"serve": "vue-cli-service serve", "serve": "vue-cli-service serve",
@ -10,7 +10,6 @@
"stylelint": "stylelint \"./**/*.{css,scss,sass,vue,html}\"", "stylelint": "stylelint \"./**/*.{css,scss,sass,vue,html}\"",
"stylelint:fix": "stylelint \"./**/*.{css,scss,sass,vue,html}\" --fix", "stylelint:fix": "stylelint \"./**/*.{css,scss,sass,vue,html}\" --fix",
"prettier": "prettier --write .", "prettier": "prettier --write .",
"prepare": "husky install",
"commit": "git add . && git cz", "commit": "git add . && git cz",
"changelog": "standard-version", "changelog": "standard-version",
"release:first": "standard-version --release-as 1.0.0-B.1", "release:first": "standard-version --release-as 1.0.0-B.1",

2
public/static/offline/JSON/GetMapInfo.json

File diff suppressed because one or more lines are too long

16
public/static/offline/JSON/config.json

@ -1 +1,15 @@
{"code":200,"msg":"操作成功","data":[{"id":265,"title":"前端配置","content":{"interfaceUrl":"https://project-iot.test.1000my.com/api","mobileNav":"https://qianmu-iot.1000my.com/test-projects/project-ey_fpaur6s6fkgvszywana/index.html#/?","handWriteUrl":"http://saas.1000my.com:8014/words"}}]}
{
"code": 200,
"msg": "操作成功",
"data": [
{
"id": 265,
"title": "前端配置",
"content": {
"interfaceUrl": "http://192.168.1.137/api",
"mobileNav": "https://qianmu-iot.1000my.com/test-projects/project-ey_fpaur6s6fkgvszywana/index.html#/?",
"handWriteUrl": "http://saas.1000my.com:8014/words"
}
}
]
}

6
public/static/qm/MainMap_QM.js

@ -1783,7 +1783,7 @@ MainMap_QM.prototype = {
let floor = new FloorMap_QM(bIndex, fIndex, Map_QM.util.allMap[bIndex].buildArr[fIndex].name); let floor = new FloorMap_QM(bIndex, fIndex, Map_QM.util.allMap[bIndex].buildArr[fIndex].name);
floor.floorName = Map_QM.util.allMap[bIndex].buildArr[fIndex].name; floor.floorName = Map_QM.util.allMap[bIndex].buildArr[fIndex].name;
floor.initDraw(); floor.initDraw();
floor.allObj.position.set(bIndex * Map_QM.util.options.bSpace, 0, 0);
//floor.allObj.position.set(bIndex * Map_QM.util.options.bSpace, 0, 0);
if (fIndex != parseInt(Map_QM.util.deviceObj.floor)) { if (fIndex != parseInt(Map_QM.util.deviceObj.floor)) {
floor.allObj.visible = false; floor.allObj.visible = false;
} }
@ -5267,7 +5267,9 @@ FloorMap_QM = function (bIndex, fIndex, floorName) {
this.floorOrder = fIndex; this.floorOrder = fIndex;
this.buildOrder = bIndex this.buildOrder = bIndex
this.floorName = floorName; this.floorName = floorName;
if(fIndex==4){
this.allObj.position.x = -600;
}
//存放设施图标 //存放设施图标
this.serObj = new THREE.Object3D(); this.serObj = new THREE.Object3D();
//存放车位box //存放车位box

4
src/App.vue

@ -25,5 +25,9 @@ body,
:deep(.swiper-pagination-bullet) { :deep(.swiper-pagination-bullet) {
border-radius: 2px; border-radius: 2px;
} }
.animate__animated {
animation-duration: 0.3s !important;
animation-duration: 0.3s !important;
}
} }
</style> </style>

8
src/components/Map/Map.vue

@ -90,10 +90,10 @@ function handleDetail() {
<style lang="scss" scoped> <style lang="scss" scoped>
#mapContainer { #mapContainer {
position: absolute; position: absolute;
top: 152px;
right: 345px;
width: 1122px;
height: 676px;
top: 0;
right: 0;
width: 1432px;
height: 948px;
} }
.map-flex { .map-flex {
display: flex; display: flex;

21
src/components/PublicComponent/PublicComponent.vue

@ -11,9 +11,7 @@
<Search v-if="showSearch"></Search> <Search v-if="showSearch"></Search>
<!-- 推荐弹窗 --> <!-- 推荐弹窗 -->
<Transition enter-active-class="animate__animated animate__fadeIn" leave-active-class="animate__animated animate__fadeOut">
<RecommendDialog />
</Transition>
<RecommendDialog />
<shopdetail v-if="showDetail"></shopdetail> <shopdetail v-if="showDetail"></shopdetail>
@ -41,7 +39,7 @@ const RecommendDialog = defineAsyncComponent(() => import('@/components/Recommen
const router = useRouter() const router = useRouter()
const route = useRoute() const route = useRoute()
const store = useRootStore() const store = useRootStore()
const { language, showSearch, showDetail, shopList } = storeToRefs(store)
const { language, showSearch, showDetail, shopList, device } = storeToRefs(store)
const { checkHandleScreen, showCountDownDialog, title, toIndexTime, toWallpaperTime, isWallpaper } = useHandleScreen(handleScreen) const { checkHandleScreen, showCountDownDialog, title, toIndexTime, toWallpaperTime, isWallpaper } = useHandleScreen(handleScreen)
// //
@ -78,13 +76,16 @@ watch(route, to => {
if (to.fullPath === '/' || to.fullPath === '/nav') { if (to.fullPath === '/' || to.fullPath === '/nav') {
window?.Map_QM?.startRender() window?.Map_QM?.startRender()
if (to.fullPath === '/') { if (to.fullPath === '/') {
window?.Map_QM?.showFloor(6)
window?.Map_QM?.showFloor(device.value.floorOrder)
const art: any = document.getElementById('mapContainer') const art: any = document.getElementById('mapContainer')
art.style.width = '2244px'
art.style.height = '1352px'
art.style.right = '690px'
art.style.top = '304px'
window.Map_QM.changeWindowResize(2244, 1352)
art.style.width = '2864px'
art.style.height = '1896px'
art.style.right = '0'
art.style.top = '0'
window.Map_QM.changeWindowResize(2864, 1896)
if (store.currentArtName) {
store.SET_CURRENT_ART_NAME('')
}
} }
} else { } else {
window?.Map_QM?.cancelRender() window?.Map_QM?.cancelRender()

3
src/components/Recommend/Recommend.vue

@ -4,8 +4,7 @@
<div class="close-icon" @click="close"> <div class="close-icon" @click="close">
<img src="@/assets/images/shopDetail/close.svg" alt="" /> <img src="@/assets/images/shopDetail/close.svg" alt="" />
</div> </div>
<div class="content">
<div class="content animate__animated animate__fadeInUp">
<div class="name-container"> <div class="name-container">
<div class="name">{{ columnList[0].content.name }}</div> <div class="name">{{ columnList[0].content.name }}</div>
<div class="line">/</div> <div class="line">/</div>

21
src/components/ShopDetail/ShopDetail.vue

@ -32,12 +32,7 @@
<!-- logo 名称 属性--> <!-- logo 名称 属性-->
<div class="name-wrapper"> <div class="name-wrapper">
<div class="logo-wrapper"> <div class="logo-wrapper">
<img
v-if="shop.logoUrl"
class="shop-logo"
:src="shop.logoUrl.search(config.sourceUrl) >= 0 ? shop.logoUrl : config.sourceUrl + shop.logoUrl"
alt=""
/>
<img v-if="shop.logoUrl" class="shop-logo" :src="shop.logoUrl" alt="" />
<img v-else class="shop-logo" src="@/assets/images/empty_small.svg" alt="" /> <img v-else class="shop-logo" src="@/assets/images/empty_small.svg" alt="" />
</div> </div>
<div class="marquee-wrapper"> <div class="marquee-wrapper">
@ -110,29 +105,35 @@ import 'swiper/css/effect-fade'
import scrollView from '@/base/ScrollView/ScrollView.vue' import scrollView from '@/base/ScrollView/ScrollView.vue'
import masker from '@/base/Masker/Masker.vue' import masker from '@/base/Masker/Masker.vue'
import marquees from '@/base/Marquees/Marquees.vue' import marquees from '@/base/Marquees/Marquees.vue'
import { useRouter } from 'vue-router'
import { useRouter, useRoute } from 'vue-router'
import { useStatistics } from '@/composables/useStatistics' import { useStatistics } from '@/composables/useStatistics'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { useRootStore } from '@/store/root' import { useRootStore } from '@/store/root'
import { computed, ref } from 'vue'
import { ref, toRaw } from 'vue'
import { useSwitchLanguage } from '@/composables/useSwitchLanguage' import { useSwitchLanguage } from '@/composables/useSwitchLanguage'
const { switchLanguage } = useSwitchLanguage() const { switchLanguage } = useSwitchLanguage()
const store = useRootStore() const store = useRootStore()
const { shop, config } = storeToRefs(store)
const { shop, config, prevShop } = storeToRefs(store)
const router = useRouter() const router = useRouter()
const route = useRoute()
const modules = [Autoplay, Pagination, EffectFade] const modules = [Autoplay, Pagination, EffectFade]
const marqueesRef = ref() const marqueesRef = ref()
const activityList = computed(() => shop.value.activityList)
// const activityList = computed(() => shop.value.activityList)
// //
function close() { function close() {
if (route.fullPath === '/nav') {
console.log('prevShop.value.shopName :>> ', prevShop.value.shopName)
store.SET_SHOP(toRaw(prevShop.value))
}
store.SET_SHOW_DETAIL(false) store.SET_SHOW_DETAIL(false)
} }
// //
function handleGo() { function handleGo() {
store.SET_SHOW_DETAIL(false) store.SET_SHOW_DETAIL(false)
store.SET_SHOW_SEARCH(false) store.SET_SHOW_SEARCH(false)
store.SET_SHOW_COLUMNLIST(false)
router.push('/nav') router.push('/nav')
} }

3
src/components/ShopItem/ShopItem.vue

@ -29,7 +29,10 @@ defineProps<Prop>()
const { switchLanguage } = useSwitchLanguage() const { switchLanguage } = useSwitchLanguage()
const store = useRootStore() const store = useRootStore()
const { language } = storeToRefs(store) const { language } = storeToRefs(store)
import { hideMapDialog } from '@/composables/useInitMap'
function showDetail(shop: Shop) { function showDetail(shop: Shop) {
hideMapDialog()
store.SET_SHOP(shop) store.SET_SHOP(shop)
store.SET_SHOW_DETAIL(true) store.SET_SHOW_DETAIL(true)
} }

25
src/composables/useGuideFilterShop.ts

@ -1,13 +1,26 @@
import { ref, shallowRef, toRefs } from 'vue'
import { ref, shallowRef, toRefs, computed } from 'vue'
import { useRootStore } from '@/store/root' import { useRootStore } from '@/store/root'
import { hideMapDialog } from '@/composables/useInitMap' import { hideMapDialog } from '@/composables/useInitMap'
export const useGuideFilterShop = () => { export const useGuideFilterShop = () => {
const store = useRootStore() const store = useRootStore()
const { shopList, specialIndustryList } = toRefs(store)
const { shopList, specialIndustryList, device } = toRefs(store)
const areaName = ref('全部区域') //区域选中索引 const areaName = ref('全部区域') //区域选中索引
const floorIdx = ref(6) //楼层选中索引
const selectedShopList = shallowRef<Shop[]>([]) //选中楼层的店铺列表
const floorIdx = ref(device.value.floorOrder) //楼层选中索引
const selectedShopList = shallowRef<Shop[]>(shopList.value.filter(item => item.floorOrder === device.value.floorOrder)) //选中楼层的店铺列表
const showFoodIn = computed(() => {
const arr = selectedShopList.value.filter(item => {
let flag = false
for (let i = 0; i < specialIndustryList.value.length; i++) {
if (specialIndustryList.value[i].content.industry_id === item.industryFatherCode) {
flag = true
break
}
}
return flag
})
return arr.length
})
// 切换楼层 // 切换楼层
function changeFloor(floorOrder: number) { function changeFloor(floorOrder: number) {
@ -49,7 +62,7 @@ export const useGuideFilterShop = () => {
// 筛选美食业态 // 筛选美食业态
function changeFoodShopList() { function changeFoodShopList() {
selectedShopList.value = shopList.value.filter(item => {
selectedShopList.value = selectedShopList.value.filter(item => {
let flag = false let flag = false
for (let i = 0; i < specialIndustryList.value.length; i++) { for (let i = 0; i < specialIndustryList.value.length; i++) {
if (specialIndustryList.value[i].content.industry_id === item.industryFatherCode) { if (specialIndustryList.value[i].content.industry_id === item.industryFatherCode) {
@ -61,5 +74,5 @@ export const useGuideFilterShop = () => {
}) })
} }
return { areaName, floorIdx, selectedShopList, changeFloor, changeArea, changeFoodShopList }
return { areaName, floorIdx, selectedShopList, changeFloor, changeArea, changeFoodShopList, showFoodIn }
} }

4
src/composables/useGuideMapOperation.ts

@ -27,10 +27,10 @@ export const useGuideMapOperation = (callback: (index: number) => void, changeFo
switch (item.name) { switch (item.name) {
case MapControl.RESET: case MapControl.RESET:
callback(6)
callback(device.value.floorOrder)
onClickDeviceSite() onClickDeviceSite()
mapTimer.value = setTimeout(() => { mapTimer.value = setTimeout(() => {
mapIdx.value = -1
mapIdx.value = -2
mapTimer.value = -1 mapTimer.value = -1
clearTimeout(mapTimer.value) clearTimeout(mapTimer.value)
}, 300) }, 300)

1
src/composables/useInitMap.ts

@ -28,7 +28,6 @@ export const useInitMap = async function () {
}) })
}) })
store.SET_MAP_PARK_LIST(arr) store.SET_MAP_PARK_LIST(arr)
window.Map_QM.showFloor(6)
}, },
{ {
build: device.value?.buildingOrder ?? 0, build: device.value?.buildingOrder ?? 0,

2
src/composables/useStartNavi.ts

@ -16,7 +16,7 @@ export const useStartNavi = (shop: Ref<Shop>, device: Ref<Device>, setPauseRefFn
startNavi(shop.value) startNavi(shop.value)
onBeforeUnmount(() => { onBeforeUnmount(() => {
window.Map_QM.showFloor(6)
window.Map_QM.showFloor(device.value.floorOrder)
}) })
//导航动画 //导航动画

4
src/types/activity.d.ts

@ -11,14 +11,12 @@ declare interface Activity {
buildingCode?: string buildingCode?: string
startDate?: string //开始日期 startDate?: string //开始日期
endDate?: string //结束日期 endDate?: string //结束日期
limitStartDate?: string //上线开始日期
limitEndDate?: string //下线结束日期
fileUrl: string[] //封面 fileUrl: string[] //封面
fileUrls?: string[] //活动详情图片列表 fileUrls?: string[] //活动详情图片列表
floor?: string //楼层 floor?: string //楼层
floorOrder?: number floorOrder?: number
point: string // 导航点 point: string // 导航点
shopCode: string //关联店铺code shopCode: string //关联店铺code
logoCode?: string //一些地方用到这个字段
logo_code?: string //一些地方用到这个字段
facilityCode?: string //服务里需要这个字段 facilityCode?: string //服务里需要这个字段
} }

2
src/types/art.d.ts

@ -5,6 +5,8 @@ declare type Art = {
name: string name: string
nameEn: string nameEn: string
point: string point: string
pointNav: string
logoUrl: string
} }
} }

8
src/views/Activity/Activity.vue

@ -127,14 +127,8 @@ function getData(type: 'mall' | 'shop') {
const fun = type === 'mall' ? getMallActivity() : getShopActivity() const fun = type === 'mall' ? getMallActivity() : getShopActivity()
fun.then(res => { fun.then(res => {
// actList.value = res.data ?? [] // actList.value = res.data ?? []
const nowDate = new Date()
for (let t = 0; t < res.data.length; t++) { for (let t = 0; t < res.data.length; t++) {
const ele = res.data[t]
const limitStartDate = new Date(ele.content.limitStartDate)
const limitEndDate = new Date(ele.content.limitEndDate)
if (nowDate.getTime() >= limitStartDate.getTime() && nowDate.getTime() < limitEndDate.getTime()) {
actList.value.push({ id: ele.id, ...ele.content })
}
actList.value.push({ id: res.data[t].id, ...res.data[t].content })
} }
showList.value = true showList.value = true
}) })

9
src/views/Brand/filterFormatAndFloor.vue

@ -4,10 +4,11 @@
<div <div
v-for="(item, index) of copyList" v-for="(item, index) of copyList"
:key="item.industryCode" :key="item.industryCode"
:style="{ height: index === active ? 'fit-content' : '' }"
:style="{ height: index === active ? 'fit-content' : item.shopNum === 0 ? '0px' : '' }"
class="filter-div-f" class="filter-div-f"
> >
<div <div
v-show="item.shopNum > 0"
ref="filterDivEl" ref="filterDivEl"
class="filter-div" class="filter-div"
:class="{ 'filter-active': active == index && activeSon === -1 }" :class="{ 'filter-active': active == index && activeSon === -1 }"
@ -95,6 +96,10 @@ import { computed, ref, nextTick } from 'vue'
import scrollView from '@/base/ScrollView/ScrollView.vue' import scrollView from '@/base/ScrollView/ScrollView.vue'
import { useSwitchLanguage } from '@/composables/useSwitchLanguage' import { useSwitchLanguage } from '@/composables/useSwitchLanguage'
import { storeToRefs } from 'pinia'
import { useRootStore } from '@/store/root'
const store = useRootStore()
const { shopList } = storeToRefs(store)
const { switchLanguage } = useSwitchLanguage() const { switchLanguage } = useSwitchLanguage()
type Props = { type Props = {
list: Industry[] list: Industry[]
@ -120,7 +125,7 @@ const copyList = computed(() => {
industryCode: 0, industryCode: 0,
industryName: '全部品牌', industryName: '全部品牌',
industryNameEn: '', industryNameEn: '',
shopNum: 0,
shopNum: shopList.value.length,
industryList: [] industryList: []
}, },
...props.list ...props.list

4
src/views/Brand/recommendShop.vue

@ -28,7 +28,9 @@
: false : false
" "
:free-mode="{ :free-mode="{
enabled: true
enabled: true,
momentumRatio: 0.2,
momentumVelocityRatio: 0.2
}" }"
:enabled="recList.length > 3" :enabled="recList.length > 3"
:loop="recList.length > 3" :loop="recList.length > 3"

3
src/views/Brand/shopList.vue

@ -383,10 +383,11 @@ function myScrollEnd() {
padding-left: 0; padding-left: 0;
.right-control-area { .right-control-area {
position: absolute; position: absolute;
top: 134px;
right: 0; right: 0;
width: 230px; width: 230px;
height: 622px; height: 622px;
margin-top: 134px;
margin-top: 0;
margin-left: 28px; margin-left: 28px;
.format-items { .format-items {

7
src/views/Guide/ArtList.vue

@ -49,20 +49,21 @@ function show(item: Art, index: number) {
current.value = index current.value = index
// //
const poi = item.content.point.split('_') const poi = item.content.point.split('_')
const poi_nav = item.content.pointNav.split('_')
hideMapDialog() hideMapDialog()
window.Map_QM.addElementByNode(document.getElementById('artInfo'), Number(poi[2])) window.Map_QM.addElementByNode(document.getElementById('artInfo'), Number(poi[2]))
const art: any = document.getElementById('artInfo') const art: any = document.getElementById('artInfo')
art.style.visibility = 'visible' art.style.visibility = 'visible'
const floors = store.currentBuildingFloorsList.filter(item => item.floorOrder === Number(poi[1]))
const floors = store.currentBuildingFloorsList.filter(item => item.floorOrder === Number(poi_nav[1]))
const shop = { const shop = {
shopCode: index + 1, shopCode: index + 1,
shopName: item.content.name, shopName: item.content.name,
shopNameEn: item.content.nameEn, shopNameEn: item.content.nameEn,
floorOrder: floors[0].floorOrder, floorOrder: floors[0].floorOrder,
floor: floors[0].floor, floor: floors[0].floor,
logoUrl: '',
yaxis: Number(poi[2])
logoUrl: item.content.logoUrl,
yaxis: Number(poi_nav[2])
} }
store.SET_SHOP(shop) store.SET_SHOP(shop)
} }

3
src/views/Guide/Floor.vue

@ -69,6 +69,9 @@ function changeFloor(floorOrder: number) {
.ac { .ac {
color: #fff; color: #fff;
background: #e00068; background: #e00068;
img {
filter: brightness(0) invert(500%);
}
} }
} }
</style> </style>

3
src/views/Guide/FloorPicList.vue

@ -40,7 +40,7 @@ getFloorPicList().then(({ data }) => {
<style lang="scss" scoped> <style lang="scss" scoped>
.floor-pic-lists { .floor-pic-lists {
position: fixed; position: fixed;
top: 246px;
top: 247px;
right: 50px; right: 50px;
z-index: 998; z-index: 998;
.floor { .floor {
@ -49,7 +49,6 @@ getFloorPicList().then(({ data }) => {
padding: 3px 0; padding: 3px 0;
margin-bottom: 8px; margin-bottom: 8px;
background: linear-gradient(270deg, rgb(138 118 106 / 10%) 0%, rgb(138 118 106 / 0%) 100%); background: linear-gradient(270deg, rgb(138 118 106 / 10%) 0%, rgb(138 118 106 / 0%) 100%);
border: 2px solid #fff;
border-radius: 0 24px 24px 0; border-radius: 0 24px 24px 0;
img { img {
width: 208px; width: 208px;

50
src/views/Guide/Guide.vue

@ -6,8 +6,8 @@
</Transition> </Transition>
<!-- 区域列表 --> <!-- 区域列表 -->
<Transition appear enter-active-class="animate__animated animate__fadeIn">
<Area v-if="floorIdx !== 6" :area-name="areaName" @change-area="changeAreas" />
<Transition appear enter-active-class="animate__animated animate__fadeIn" leave-active-class="animate__animated animate__fadeOut">
<Area v-if="floorIdx === 3 || floorIdx === 5" :area-name="areaName" @change-area="changeAreas" />
</Transition> </Transition>
<!-- 店铺列表 --> <!-- 店铺列表 -->
@ -27,6 +27,14 @@
</div> </div>
</ScrollView> </ScrollView>
<div class="faclists"> <div class="faclists">
<Transition appear enter-active-class="animate__animated animate__fadeIn" leave-active-class="animate__animated animate__fadeOut">
<div v-if="showFoodIn" class="reset-dir" @click="handleMapIcon(foodIn, -1)">
<div class="top" :class="mapIdx === -1 && 'ac'">
<img :src="foodIn.icon" alt="" />
</div>
<div class="txt">{{ switchLanguage(foodIn, 'name') }}</div>
</div>
</Transition>
<div v-for="(item, index) in list" :key="item.name" class="reset-dir" @click="handleMapIcon(item, index)"> <div v-for="(item, index) in list" :key="item.name" class="reset-dir" @click="handleMapIcon(item, index)">
<div class="top" :class="mapIdx === index && 'ac'"> <div class="top" :class="mapIdx === index && 'ac'">
<img :src="item.icon" alt="" /> <img :src="item.icon" alt="" />
@ -73,7 +81,7 @@
<!-- 区域缩略图 --> <!-- 区域缩略图 -->
<Transition appear enter-active-class="animate__animated animate__fadeIn"> <Transition appear enter-active-class="animate__animated animate__fadeIn">
<img v-if="floorIdx !== 6" class="area" :src="areaPic[areaName]" alt="" />
<img v-if="floorIdx === 3 || floorIdx === 5" class="area" :src="areaPic[areaName]" alt="" />
</Transition> </Transition>
<!-- 人行道等 --> <!-- 人行道等 -->
@ -105,10 +113,11 @@ import ShopList from './ShopList.vue'
import Place from './Place.vue' import Place from './Place.vue'
import ArtList from './ArtList.vue' import ArtList from './ArtList.vue'
import FloorPicList from './FloorPicList.vue' import FloorPicList from './FloorPicList.vue'
import { MapControl } from './list'
const store = useRootStore() const store = useRootStore()
const { switchLanguage } = useSwitchLanguage() const { switchLanguage } = useSwitchLanguage()
const { language, facilityList, artPlaceList, currentArtName } = toRefs(store) const { language, facilityList, artPlaceList, currentArtName } = toRefs(store)
const { floorIdx, areaName, selectedShopList, changeFloor, changeArea, changeFoodShopList } = useGuideFilterShop() //
const { floorIdx, areaName, selectedShopList, changeFloor, changeArea, changeFoodShopList, showFoodIn } = useGuideFilterShop() //
const { handleMapIcon, list, mapIdx } = useGuideMapOperation(changeFloor, changeFoodShopList) // const { handleMapIcon, list, mapIdx } = useGuideMapOperation(changeFloor, changeFoodShopList) //
const { handleFacility } = useFacilityNav() // const { handleFacility } = useFacilityNav() //
@ -123,14 +132,15 @@ getAreaPicList().then(({ data }) => {
// //
function changeFloors(floorOrder: number) { function changeFloors(floorOrder: number) {
changeFloor(floorOrder) changeFloor(floorOrder)
mapIdx.value = -1
mapIdx.value = -2
areaName.value = '全部区域'
currentArtName.value && store.SET_CURRENT_ART_NAME('') currentArtName.value && store.SET_CURRENT_ART_NAME('')
} }
// //
function changeAreas(name: string) { function changeAreas(name: string) {
changeArea(name) changeArea(name)
mapIdx.value = -1
mapIdx.value = -2
currentArtName.value && store.SET_CURRENT_ART_NAME('') currentArtName.value && store.SET_CURRENT_ART_NAME('')
} }
@ -158,6 +168,13 @@ function show(item: ArtPlace) {
store.SET_CURRENT_ART_NAME(item.content.name) store.SET_CURRENT_ART_NAME(item.content.name)
store.SET_SHOP(shop) store.SET_SHOP(shop)
} }
const foodIn = {
name: MapControl.FOOD,
nameEn: 'food',
icon: require('@/assets/images/guide/food.svg'),
iconActive: require('@/assets/images/guide/brand_active.svg')
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@ -240,7 +257,7 @@ function show(item: ArtPlace) {
.line { .line {
width: 1px; width: 1px;
height: 32px; height: 32px;
margin: 0 32px 0 16px;
margin: 8px 32px 0 16px;
background: rgb(0 0 0 / 10%); background: rgb(0 0 0 / 10%);
} }
.myScroll { .myScroll {
@ -339,24 +356,5 @@ function show(item: ArtPlace) {
width: 256px; width: 256px;
height: 100px; height: 100px;
} }
.floor-pic-list {
position: fixed;
top: 232px;
right: 50px;
z-index: 998;
.floor {
width: 296px;
height: 86px;
padding: 3px 0;
margin-bottom: 8px;
background: linear-gradient(270deg, rgb(138 118 106 / 10%) 0%, rgb(138 118 106 / 0%) 100%);
border-radius: 0 24px 24px 0;
img {
width: 200px;
height: 80px;
}
}
}
} }
</style> </style>

6
src/views/Guide/list.ts

@ -12,12 +12,6 @@ export type Item = {
} }
export const list: Item[] = [ export const list: Item[] = [
{
name: MapControl.FOOD,
nameEn: 'food',
icon: require('@/assets/images/guide/food.svg'),
iconActive: require('@/assets/images/guide/brand_active.svg')
},
{ {
name: MapControl.RESET, name: MapControl.RESET,
nameEn: 'reset', nameEn: 'reset',

24
src/views/Nav/Nav.vue

@ -128,9 +128,7 @@
<div class="bottoms"> <div class="bottoms">
<div class="direction-container"> <div class="direction-container">
<div class="ma-top"> <div class="ma-top">
<div class="dir-img">
<img class="animate__animated animate__infinite" :class="directionInfo.class" :src="directionInfo.icon" alt="" />
</div>
<img class="dir-img animate__infinite" :class="directionInfo.class" :src="directionInfo.icon" alt="" />
<div class="direc-text" :class="{ 'd-en': language === 'en' }">{{ switchLanguage(directionInfo, 'text') }}</div> <div class="direc-text" :class="{ 'd-en': language === 'en' }">{{ switchLanguage(directionInfo, 'text') }}</div>
<div class="label">{{ $t('navs.tip') }}</div> <div class="label">{{ $t('navs.tip') }}</div>
</div> </div>
@ -147,7 +145,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { onUnmounted, ref, watch } from 'vue'
import { ref, watch } from 'vue'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { useRootStore } from '@/store/root' import { useRootStore } from '@/store/root'
import { useMapNavControl } from '@/composables/useMapNavControl' import { useMapNavControl } from '@/composables/useMapNavControl'
@ -188,7 +186,6 @@ function back() {
// 线 // 线
function changeControl(name: NavMethods, index: number) { function changeControl(name: NavMethods, index: number) {
console.log(name)
pathGroupRef.value.resetPlayIdx() pathGroupRef.value.resetPlayIdx()
pathGroupRef.value.myScroll.scrollTo(0, 0, 0) pathGroupRef.value.myScroll.scrollTo(0, 0, 0)
handleControl(name, index) handleControl(name, index)
@ -215,19 +212,8 @@ if (showSearch.value) {
watch(shop, newVal => { watch(shop, newVal => {
startNavi({ ...newVal }) startNavi({ ...newVal })
if (showColumnList.value) {
showColumnList.value = false
}
}) })
onUnmounted(() => {
const art: any = document.getElementById('mapContainer')
art.style.width = '2244px'
art.style.height = '1352px'
art.style.right = '690px'
art.style.top = '304px'
window.Map_QM.changeWindowResize(2244, 1352)
})
const art: any = document.getElementById('mapContainer') const art: any = document.getElementById('mapContainer')
art.style.width = '2528px' art.style.width = '2528px'
art.style.height = '1896px' art.style.height = '1896px'
@ -525,10 +511,12 @@ window.Map_QM.changeWindowResize(2528, 1896)
overflow: hidden; overflow: hidden;
width: 132px; width: 132px;
height: 206px; height: 206px;
img {
.dir-img {
width: 132px; width: 132px;
height: 132px; height: 132px;
animation-duration: 1s;
animation-fill-mode: both;
animation-iteration-count: infinite;
} }
.direc-text { .direc-text {
margin-top: 20px; margin-top: 20px;

41
src/views/Service/Service.vue

@ -18,22 +18,18 @@
<!-- 顧客心聲 --> <!-- 顧客心聲 -->
<PictureText v-if="switchIdx === 1" :ac-list="customerVoiceList" :qr-list="qrCodeList" /> <PictureText v-if="switchIdx === 1" :ac-list="customerVoiceList" :qr-list="qrCodeList" />
<!-- 服务 --> <!-- 服务 -->
<ScrollView v-else ref="actScroll" :list="serviceList" :refresh-delay="200" :scrollbar="true" class="service-scroll">
<ul class="act-list">
<serviceItem v-for="(item, index) in serviceList" :key="index" :service-item="item" @click="clickItem"></serviceItem>
</ul>
<ScrollView v-else ref="actScroll" :list="serviceList" :refresh-delay="200" :scrollbar="true" class="service-scroll" scroll-x>
<div style="display: inline-block">
<ul class="act-list">
<serviceItem v-for="(item, index) in serviceList" :key="index" :service-item="item" @click="clickItem"></serviceItem>
</ul>
</div>
</ScrollView> </ScrollView>
</transition> </transition>
<activityDetail v-if="showDetail" :act-info="currentItem" @close="showDetail = false"></activityDetail> <activityDetail v-if="showDetail" :act-info="currentItem" @close="showDetail = false"></activityDetail>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
// import { Autoplay, FreeMode, Pagination } from 'swiper'
// import { Swiper, SwiperSlide } from 'swiper/vue'
// import 'swiper/css'
// import 'swiper/css/free-mode'
// const modules = [Autoplay, FreeMode, Pagination]
import activityDetail from '@/components/ActivityDetail/ActivityDetail.vue' import activityDetail from '@/components/ActivityDetail/ActivityDetail.vue'
import ScrollView from '@/base/ScrollView/ScrollView.vue' import ScrollView from '@/base/ScrollView/ScrollView.vue'
import serviceItem from './ServiceItem.vue' import serviceItem from './ServiceItem.vue'
@ -118,14 +114,26 @@ function getData() {
getData() getData()
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
:deep(.bscroll-vertical-scrollbar) {
// :deep(.bscroll-vertical-scrollbar) {
// z-index: 3 !important;
// // width: 500px !important;
// background: rgb(0 0 0 / 10%);
// border-radius: 6px;
// opacity: 1 !important;
// .bscroll-indicator {
// background: #e0006891 !important;
// border: none !important;
// border-radius: 6px !important;
// }
// }
:deep(.bscroll-horizontal-scrollbar) {
z-index: 3 !important; z-index: 3 !important;
// width: 500px !important;
width: 500px !important;
background: rgb(0 0 0 / 10%); background: rgb(0 0 0 / 10%);
border-radius: 6px; border-radius: 6px;
opacity: 1 !important; opacity: 1 !important;
.bscroll-indicator { .bscroll-indicator {
background: #e0006891 !important;
background: #e00068 !important;
border: none !important; border: none !important;
border-radius: 6px !important; border-radius: 6px !important;
} }
@ -140,7 +148,7 @@ getData()
.service-scroll { .service-scroll {
position: relative; position: relative;
overflow: hidden; overflow: hidden;
width: 1828px;
width: 1860.5px;
height: 615px; height: 615px;
margin-top: 40px; margin-top: 40px;
margin-left: 0; margin-left: 0;
@ -151,8 +159,9 @@ getData()
.act-list { .act-list {
// display: flex; // display: flex;
display: grid; display: grid;
grid-template-columns: repeat(6, 288px);
gap: 16px 16px;
grid-template-rows: 1fr 1fr;
grid-auto-flow: column;
gap: 12px 12px;
} }
} }
} }

Loading…
Cancel
Save