|
@@ -1,51 +1,120 @@
|
|
|
<template>
|
|
|
- <div class="bar-list"
|
|
|
- v-if="show && !((metadata.catalogRoot && metadata.catalogRoot.length == 1) && scenes.length == 1 && secondaryList.length == 1)"
|
|
|
- :class="{ barshow: isShowScenesList }">
|
|
|
+ <div
|
|
|
+ class="bar-list"
|
|
|
+ v-if="
|
|
|
+ show &&
|
|
|
+ !(
|
|
|
+ metadata.catalogRoot &&
|
|
|
+ metadata.catalogRoot.length == 1 &&
|
|
|
+ scenes.length == 1 &&
|
|
|
+ secondaryList.length == 1
|
|
|
+ )
|
|
|
+ "
|
|
|
+ :class="{ barshow: isShowScenesList }"
|
|
|
+ >
|
|
|
<div class="top-con">
|
|
|
- <div class="swiper-container" id="swScenes" :style="`width:${Math.min(scenesListW, innerW)}px;
|
|
|
- padding:${scenesListW > innerW ? '0 15px' : '0'}`" v-if="currentScenesList.length > 0">
|
|
|
+ <div
|
|
|
+ class="swiper-container"
|
|
|
+ id="swScenes"
|
|
|
+ :style="`width:${Math.min(scenesListW, innerW)}px;
|
|
|
+ padding:${scenesListW > innerW ? '0 15px' : '0'}`"
|
|
|
+ v-if="currentScenesList.length > 0"
|
|
|
+ >
|
|
|
<ul class="swiper-wrapper">
|
|
|
- <li @click="tabCurrentScene(item)" class="swiper-slide" :class="{
|
|
|
- active: currentScene.sceneCode == item.sceneCode,
|
|
|
- loopspan: item.sceneTitle.length > spanlength && currentScene.id == item.id,
|
|
|
- }" :style="{ backgroundImage: `url(${item.icon})` }" v-for="(item, i) in currentScenesList" :key="i">
|
|
|
- <i class="iconfont " :class="item.type == '4dkk' ? 'icon-editor_3d' : 'icon-editor_panoramic'"></i>
|
|
|
+ <li
|
|
|
+ @click="tabCurrentScene(item)"
|
|
|
+ class="swiper-slide"
|
|
|
+ :class="{
|
|
|
+ active: currentScene.sceneCode == item.sceneCode,
|
|
|
+ loopspan:
|
|
|
+ item.sceneTitle.length > spanlength &&
|
|
|
+ currentScene.id == item.id,
|
|
|
+ }"
|
|
|
+ :style="{ backgroundImage: `url(${item.icon})` }"
|
|
|
+ v-for="(item, i) in currentScenesList"
|
|
|
+ :key="i"
|
|
|
+ >
|
|
|
+ <i
|
|
|
+ class="iconfont"
|
|
|
+ :class="
|
|
|
+ item.type == '4dkk' ? 'icon-editor_3d' : 'icon-editor_panoramic'
|
|
|
+ "
|
|
|
+ ></i>
|
|
|
<div>
|
|
|
- <span v-if="currentScene.id == item.id">{{ item.sceneTitle }}</span>
|
|
|
- <span v-else>{{ item.sceneTitle.length > spanlength ? item.sceneTitle.slice(0, spanlength) :
|
|
|
- item.sceneTitle
|
|
|
+ <span v-if="currentScene.id == item.id">{{
|
|
|
+ item.sceneTitle
|
|
|
+ }}</span>
|
|
|
+ <span v-else>{{
|
|
|
+ item.sceneTitle.length > spanlength
|
|
|
+ ? item.sceneTitle.slice(0, spanlength)
|
|
|
+ : item.sceneTitle
|
|
|
}}</span>
|
|
|
</div>
|
|
|
</li>
|
|
|
</ul>
|
|
|
</div>
|
|
|
|
|
|
- <div class="swiper-container" id="swSecondary" :style="`width:${Math.min(secondaryW, innerW)}px;
|
|
|
- padding:${secondaryW > innerW ? '0 15px' : '0'}`" v-if="secondaryList.length > 1">
|
|
|
+ <div
|
|
|
+ class="swiper-container"
|
|
|
+ id="swSecondary"
|
|
|
+ :style="`width:${Math.min(secondaryW, innerW)}px;
|
|
|
+ padding:${secondaryW > innerW ? '0 15px' : '0'}`"
|
|
|
+ v-if="secondaryList.length > 1"
|
|
|
+ >
|
|
|
<ul class="swiper-wrapper">
|
|
|
- <li class="swiper-slide" @click="tabSecondary(item)" :class="{
|
|
|
- active: currentSecondary.id == item.id,
|
|
|
- loopspan: fixTitle(item.name).length > spanlength && currentSecondary.id == item.id,
|
|
|
- }" v-for="(item, i) in secondaryList" :key="i">
|
|
|
- <span v-if="currentSecondary.id == item.id">{{ fixTitle(item.name) }}</span>
|
|
|
- <span v-else>{{ fixTitle(item.name).length > spanlength ? fixTitle(item.name).slice(0, spanlength) : fixTitle(item.name) }}</span>
|
|
|
+ <li
|
|
|
+ class="swiper-slide"
|
|
|
+ @click="tabSecondary(item)"
|
|
|
+ :class="{
|
|
|
+ active: currentSecondary.id == item.id,
|
|
|
+ loopspan:
|
|
|
+ fixTitle(item.name).length > spanlength &&
|
|
|
+ currentSecondary.id == item.id,
|
|
|
+ }"
|
|
|
+ v-for="(item, i) in secondaryList"
|
|
|
+ :key="i"
|
|
|
+ >
|
|
|
+ <span v-if="currentSecondary.id == item.id">{{
|
|
|
+ fixTitle(item.name)
|
|
|
+ }}</span>
|
|
|
+ <span v-else>{{
|
|
|
+ fixTitle(item.name).length > spanlength
|
|
|
+ ? fixTitle(item.name).slice(0, spanlength)
|
|
|
+ : fixTitle(item.name)
|
|
|
+ }}</span>
|
|
|
</li>
|
|
|
</ul>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
- <div class="swiper-container" id="swcatalogRoot" :style="`width:${Math.min(catalogRootW, innerW)}px;
|
|
|
+ <div
|
|
|
+ class="swiper-container"
|
|
|
+ id="swcatalogRoot"
|
|
|
+ :style="`width:${Math.min(catalogRootW, innerW)}px;
|
|
|
padding:${catalogRootW > innerW ? '0 15px' : '0'}`"
|
|
|
- v-if="metadata.catalogRoot.length > 0 && metadata.catalogs.length > 1">
|
|
|
+ v-if="metadata.catalogRoot.length > 0 && metadata.catalogs.length > 1"
|
|
|
+ >
|
|
|
<ul class="swiper-wrapper" v-show="metadata.catalogRoot.length > 1">
|
|
|
- <li class="swiper-slide" :class="{
|
|
|
- active: currentCatalogRoot.id == item.id,
|
|
|
- loopspan: fixTitle(item.name).length > spanlength && currentCatalogRoot.id == item.id,
|
|
|
- }" @click="tabRoot(item)" v-for="(item, i) in metadata.catalogRoot" :key="i">
|
|
|
- <span v-if="currentCatalogRoot.id == item.id">{{ fixTitle(item.name) }}</span>
|
|
|
- <span v-else>{{ fixTitle(item.name).length > spanlength ? fixTitle(item.name).slice(0, spanlength) : fixTitle(item.name) }}</span>
|
|
|
-
|
|
|
+ <li
|
|
|
+ class="swiper-slide"
|
|
|
+ :class="{
|
|
|
+ active: currentCatalogRoot.id == item.id,
|
|
|
+ loopspan:
|
|
|
+ fixTitle(item.name).length > spanlength &&
|
|
|
+ currentCatalogRoot.id == item.id,
|
|
|
+ }"
|
|
|
+ @click="tabRoot(item)"
|
|
|
+ v-for="(item, i) in metadata.catalogRoot"
|
|
|
+ :key="i"
|
|
|
+ >
|
|
|
+ <span v-if="currentCatalogRoot.id == item.id">{{
|
|
|
+ fixTitle(item.name)
|
|
|
+ }}</span>
|
|
|
+ <span v-else>{{
|
|
|
+ fixTitle(item.name).length > spanlength
|
|
|
+ ? fixTitle(item.name).slice(0, spanlength)
|
|
|
+ : fixTitle(item.name)
|
|
|
+ }}</span>
|
|
|
</li>
|
|
|
</ul>
|
|
|
</div>
|
|
@@ -56,8 +125,8 @@
|
|
|
import { ref, watch, computed, onMounted, nextTick } from "vue";
|
|
|
import { useStore } from "vuex";
|
|
|
import { useApp } from "@/app";
|
|
|
-import { useI18n, getLocale } from '@/i18n'
|
|
|
-const { t } = useI18n({ useScope: 'global' })
|
|
|
+import { useI18n, getLocale } from "@/i18n";
|
|
|
+const { t } = useI18n({ useScope: "global" });
|
|
|
|
|
|
const store = useStore();
|
|
|
|
|
@@ -67,29 +136,42 @@ const metadata = computed(() => store.getters["scene/metadata"]);
|
|
|
const scenes = computed(() => store.getters["scene/list"]);
|
|
|
const currentScene = computed(() => store.getters["scene/currentScene"]);
|
|
|
|
|
|
-const currentCatalogRoot = computed(() => store.getters["scene/currentCatalogRoot"]);
|
|
|
-const currentSecondary = computed(() => store.getters["scene/currentSecondary"]);
|
|
|
+const currentCatalogRoot = computed(
|
|
|
+ () => store.getters["scene/currentCatalogRoot"]
|
|
|
+);
|
|
|
+const currentSecondary = computed(
|
|
|
+ () => store.getters["scene/currentSecondary"]
|
|
|
+);
|
|
|
|
|
|
const secondaryList = computed(() => store.getters["scene/secondaryList"]);
|
|
|
|
|
|
-const isShowScenesList = computed(() => store.getters["functions/isShowScenesList"]);
|
|
|
-
|
|
|
-const currentScenesList = computed(() => store.getters["scene/currentScenesList"]);
|
|
|
+const isShowScenesList = computed(
|
|
|
+ () => store.getters["functions/isShowScenesList"]
|
|
|
+);
|
|
|
|
|
|
+const currentScenesList = computed(
|
|
|
+ () => store.getters["scene/currentScenesList"]
|
|
|
+);
|
|
|
|
|
|
const swidth = ref({
|
|
|
- "swcatalogRoot": 104,
|
|
|
- "swSecondary": 84,
|
|
|
- "swScenes": 72,
|
|
|
-})
|
|
|
-
|
|
|
-const innerW = computed(() => window.innerWidth)
|
|
|
-
|
|
|
-const scenesListW = computed(() => currentScenesList.value.length * (swidth.value['swScenes'] + 10) - 10)
|
|
|
-const secondaryW = computed(() => secondaryList.value.length * (swidth.value['swSecondary'] + 10) - 10)
|
|
|
-const catalogRootW = computed(() => metadata.value.catalogRoot.length * (swidth.value['swcatalogRoot'] + 10) - 10)
|
|
|
+ swcatalogRoot: 104,
|
|
|
+ swSecondary: 84,
|
|
|
+ swScenes: 72,
|
|
|
+});
|
|
|
|
|
|
+const innerW = computed(() => window.innerWidth);
|
|
|
|
|
|
+const scenesListW = computed(
|
|
|
+ () => currentScenesList.value.length * (swidth.value["swScenes"] + 10) - 10
|
|
|
+);
|
|
|
+const secondaryW = computed(
|
|
|
+ () => secondaryList.value.length * (swidth.value["swSecondary"] + 10) - 10
|
|
|
+);
|
|
|
+const catalogRootW = computed(
|
|
|
+ () =>
|
|
|
+ metadata.value.catalogRoot.length * (swidth.value["swcatalogRoot"] + 10) -
|
|
|
+ 10
|
|
|
+);
|
|
|
|
|
|
const show = ref(false);
|
|
|
|
|
@@ -106,15 +188,15 @@ const tabRoot = (data) => {
|
|
|
};
|
|
|
|
|
|
const fixTitle = (name) => {
|
|
|
- if (name == '默认二级分组') {
|
|
|
- name = t('navigation.default_group_two')
|
|
|
- } else if (name == '一级分组') {
|
|
|
- name = t('navigation.group_one')
|
|
|
+ if (name == "默认二级分组") {
|
|
|
+ name = t("navigation.default_group_two");
|
|
|
+ } else if (name == "一级分组") {
|
|
|
+ name = t("navigation.group_one");
|
|
|
} else {
|
|
|
- name = name
|
|
|
+ name = name;
|
|
|
}
|
|
|
- return name
|
|
|
-}
|
|
|
+ return name;
|
|
|
+};
|
|
|
|
|
|
const loadList = () => {
|
|
|
nextTick(() => {
|
|
@@ -129,11 +211,13 @@ const loadList = () => {
|
|
|
centeredSlidesBounds: true,
|
|
|
freeMode: true,
|
|
|
observer: true,
|
|
|
- observeParents:true
|
|
|
+ observeParents: true,
|
|
|
});
|
|
|
- if (item == '#swScenes') {
|
|
|
+ if (item == "#swScenes") {
|
|
|
setTimeout(() => {
|
|
|
- tmp && tmp.slideTo(0, 80, false)
|
|
|
+ if (tmp && "slideTo" in tmp) {
|
|
|
+ // tmp.slideTo(0, 80, false);
|
|
|
+ }
|
|
|
}, 0);
|
|
|
}
|
|
|
|
|
@@ -168,7 +252,7 @@ onMounted(() => {
|
|
|
text-align: center;
|
|
|
overflow: hidden;
|
|
|
max-height: 0;
|
|
|
- transition: .3s all ease;
|
|
|
+ transition: 0.3s all ease;
|
|
|
z-index: 9;
|
|
|
width: 100%;
|
|
|
|
|
@@ -177,29 +261,27 @@ onMounted(() => {
|
|
|
position: relative;
|
|
|
margin: 0 auto;
|
|
|
|
|
|
- >ul {
|
|
|
- >li {
|
|
|
+ > ul {
|
|
|
+ > li {
|
|
|
white-space: nowrap;
|
|
|
|
|
|
- >span,
|
|
|
- >div>span {
|
|
|
+ > span,
|
|
|
+ > div > span {
|
|
|
cursor: pointer;
|
|
|
display: inline-block;
|
|
|
color: rgba(255, 255, 255, 0.6);
|
|
|
}
|
|
|
|
|
|
&.loopspan {
|
|
|
-
|
|
|
- >span,
|
|
|
- >div>span {
|
|
|
+ > span,
|
|
|
+ > div > span {
|
|
|
animation: 5s wordsLoop linear infinite normal;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
&.active {
|
|
|
-
|
|
|
- >span,
|
|
|
- >div>span {
|
|
|
+ > span,
|
|
|
+ > div > span {
|
|
|
color: rgba(255, 255, 255, 1);
|
|
|
}
|
|
|
}
|
|
@@ -217,8 +299,8 @@ onMounted(() => {
|
|
|
#swcatalogRoot {
|
|
|
padding: 0 15px;
|
|
|
|
|
|
- >ul {
|
|
|
- >li {
|
|
|
+ > ul {
|
|
|
+ > li {
|
|
|
width: 104px;
|
|
|
background: rgba(0, 0, 0, 0.5);
|
|
|
border-radius: 4px;
|
|
@@ -227,7 +309,7 @@ onMounted(() => {
|
|
|
box-sizing: border-box;
|
|
|
overflow: hidden;
|
|
|
|
|
|
- >span {
|
|
|
+ > span {
|
|
|
width: 100%;
|
|
|
word-break: keep-all;
|
|
|
}
|
|
@@ -243,14 +325,14 @@ onMounted(() => {
|
|
|
margin: 20px auto 10px;
|
|
|
padding: 0 15px;
|
|
|
|
|
|
- >ul {
|
|
|
- >li {
|
|
|
+ > ul {
|
|
|
+ > li {
|
|
|
width: 84px;
|
|
|
box-sizing: border-box;
|
|
|
overflow: hidden;
|
|
|
padding-bottom: 6px;
|
|
|
|
|
|
- >span {
|
|
|
+ > span {
|
|
|
width: 100%;
|
|
|
word-break: keep-all;
|
|
|
}
|
|
@@ -276,10 +358,9 @@ onMounted(() => {
|
|
|
}
|
|
|
|
|
|
#swScenes {
|
|
|
-
|
|
|
// padding: 0 15px;
|
|
|
- >ul {
|
|
|
- >li {
|
|
|
+ > ul {
|
|
|
+ > li {
|
|
|
cursor: pointer;
|
|
|
width: 72px;
|
|
|
height: 72px;
|
|
@@ -310,7 +391,7 @@ onMounted(() => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- >div {
|
|
|
+ > div {
|
|
|
position: absolute;
|
|
|
bottom: 0;
|
|
|
left: 0;
|
|
@@ -319,7 +400,7 @@ onMounted(() => {
|
|
|
width: 100%;
|
|
|
overflow: hidden;
|
|
|
|
|
|
- >span {
|
|
|
+ > span {
|
|
|
width: 100%;
|
|
|
line-height: 20px;
|
|
|
word-break: keep-all;
|
|
@@ -329,8 +410,9 @@ onMounted(() => {
|
|
|
&.active {
|
|
|
border: 1px solid var(--colors-primary-base);
|
|
|
|
|
|
- >div {
|
|
|
- >span {}
|
|
|
+ > div {
|
|
|
+ > span {
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|