|
|
@@ -1,328 +1,333 @@
|
|
|
-<template>
|
|
|
- <div class="picture">
|
|
|
- <div class="picture-sidebar">
|
|
|
- <h3>{{ currentItem?.name || "加载中..." }}</h3>
|
|
|
- <el-scrollbar>
|
|
|
- <p>{{ currentItem?.desc || "" }}</p>
|
|
|
- </el-scrollbar>
|
|
|
- </div>
|
|
|
-
|
|
|
- <div class="picture-content">
|
|
|
- <div class="picture-banner">
|
|
|
- <el-image v-if="currentItem?.imgName" :src="bannerImgSrc" fit="cover" />
|
|
|
- <div v-else class="picture-banner-placeholder" />
|
|
|
- <div v-if="currentItem?.scene" class="scene-btn" @click="goToScene">
|
|
|
- 全景漫游
|
|
|
- </div>
|
|
|
- </div>
|
|
|
-
|
|
|
- <swiper
|
|
|
- :modules="modules"
|
|
|
- :slides-per-view="'auto'"
|
|
|
- :space-between="10"
|
|
|
- :mousewheel="{
|
|
|
- enabled: true,
|
|
|
- forceToAxis: false,
|
|
|
- }"
|
|
|
- :free-mode="true"
|
|
|
- :scrollbar="{
|
|
|
- hide: false,
|
|
|
- draggable: true,
|
|
|
- }"
|
|
|
- class="picture-swiper"
|
|
|
- @swiper="onSwiper"
|
|
|
- >
|
|
|
- <swiper-slide
|
|
|
- v-for="(slideItem, idx) in areaItems"
|
|
|
- :key="slideItem.id"
|
|
|
- class="picture-slide"
|
|
|
- :class="{ 'picture-slide--active': slideItem.id === currentItem?.id }"
|
|
|
- @click="selectItem(slideItem)"
|
|
|
- >
|
|
|
- <el-image
|
|
|
- v-if="slideItem.imgName"
|
|
|
- :src="getThumbSrc(slideItem.imgName)"
|
|
|
- fit="cover"
|
|
|
- lazy
|
|
|
- />
|
|
|
- <div v-else class="picture-slide-placeholder" />
|
|
|
- <p>{{ slideItem.name }}</p>
|
|
|
- </swiper-slide>
|
|
|
- </swiper>
|
|
|
-
|
|
|
- <img
|
|
|
- class="picture-content-back"
|
|
|
- src="@/assets/images/icon-fanhui.png"
|
|
|
- @click="$router.push({ name: 'Home' })"
|
|
|
- />
|
|
|
- </div>
|
|
|
-
|
|
|
- <div
|
|
|
- class="picture-temp"
|
|
|
- :class="{ 'picture-temp--hidden': !sidebarVisible }"
|
|
|
- />
|
|
|
- </div>
|
|
|
-</template>
|
|
|
-
|
|
|
-<script setup>
|
|
|
-import { ref, computed, watch, onMounted } from "vue";
|
|
|
-import { useRoute, useRouter } from "vue-router";
|
|
|
-import { storeToRefs } from "pinia";
|
|
|
-import { useSidebarStore } from "@/stores/sidebar";
|
|
|
-import { Swiper, SwiperSlide } from "swiper/vue";
|
|
|
-import { FreeMode, Mousewheel, Scrollbar } from "swiper/modules";
|
|
|
-import "swiper/css";
|
|
|
-import "swiper/css/free-mode";
|
|
|
-import "swiper/css/scrollbar";
|
|
|
-
|
|
|
-const modules = [FreeMode, Mousewheel, Scrollbar];
|
|
|
-const { visible: sidebarVisible } = storeToRefs(useSidebarStore());
|
|
|
-const route = useRoute();
|
|
|
-const router = useRouter();
|
|
|
-
|
|
|
-const rawData = ref([]);
|
|
|
-const swiperInstance = ref(null);
|
|
|
-
|
|
|
-/** 从 URL 或默认取当前 item */
|
|
|
-const currentItem = computed(() => {
|
|
|
- const list = rawData.value || [];
|
|
|
- if (!list.length) return null;
|
|
|
- const id = route.query.id;
|
|
|
- if (id) {
|
|
|
- const found = list.find((i) => i.id === id);
|
|
|
- if (found) return found;
|
|
|
- }
|
|
|
- return list[0];
|
|
|
-});
|
|
|
-
|
|
|
-/** 当前 item 所在区的列表(用于 swiper) */
|
|
|
-const areaItems = computed(() => {
|
|
|
- const item = currentItem.value;
|
|
|
- if (!item?.area) return [];
|
|
|
- return (rawData.value || []).filter((i) => i.area === item.area);
|
|
|
-});
|
|
|
-
|
|
|
-/** 当前 item 在 areaItems 中的索引 */
|
|
|
-const currentSlideIndex = computed(() => {
|
|
|
- const item = currentItem.value;
|
|
|
- if (!item) return 0;
|
|
|
- const idx = areaItems.value.findIndex((i) => i.id === item.id);
|
|
|
- return idx >= 0 ? idx : 0;
|
|
|
-});
|
|
|
-
|
|
|
-/** Banner 大图路径:/images/resource/ + imgName */
|
|
|
-const bannerImgSrc = computed(() => {
|
|
|
- const name = currentItem.value?.imgName;
|
|
|
- if (!name?.trim()) return "";
|
|
|
- return `./images/resource/${name.trim()}`;
|
|
|
-});
|
|
|
-
|
|
|
-/** 缩略图路径:/images/thumb/ + imgName */
|
|
|
-function getThumbSrc(imgName) {
|
|
|
- if (!imgName?.trim()) return "";
|
|
|
- return `./images/thumb/${imgName.trim()}`;
|
|
|
-}
|
|
|
-
|
|
|
-function onSwiper(swiper) {
|
|
|
- swiperInstance.value = swiper;
|
|
|
-}
|
|
|
-
|
|
|
-/** 点击 swiper slide 切换 item */
|
|
|
-function selectItem(item) {
|
|
|
- router.replace({ name: "Picture", query: { ...route.query, id: item.id } });
|
|
|
-}
|
|
|
-
|
|
|
-/** 跳转到全景漫游 */
|
|
|
-function goToScene() {
|
|
|
- const url = currentItem.value?.scene?.trim();
|
|
|
- if (!url) return;
|
|
|
- router.push({ name: "Scene", query: { url } });
|
|
|
-}
|
|
|
-
|
|
|
-/** 无 id 时用第一个 item 的 id 写入 URL,便于刷新恢复 */
|
|
|
-watch(
|
|
|
- () => [rawData.value, route.query.id],
|
|
|
- () => {
|
|
|
- const list = rawData.value || [];
|
|
|
- if (!list.length || route.query.id) return;
|
|
|
- const first = list[0];
|
|
|
- if (first) {
|
|
|
- router.replace({ name: "Picture", query: { id: first.id } });
|
|
|
- }
|
|
|
- },
|
|
|
- { immediate: true },
|
|
|
-);
|
|
|
-
|
|
|
-/** 当前 item 变化时,swiper 滚动到对应位置 */
|
|
|
-watch(
|
|
|
- () => [currentSlideIndex.value, swiperInstance.value, areaItems.value.length],
|
|
|
- () => {
|
|
|
- const swiper = swiperInstance.value;
|
|
|
- if (!swiper || areaItems.value.length === 0) return;
|
|
|
- const idx = currentSlideIndex.value;
|
|
|
- swiper.slideTo(idx, 300);
|
|
|
- },
|
|
|
- { immediate: true },
|
|
|
-);
|
|
|
-
|
|
|
-onMounted(async () => {
|
|
|
- try {
|
|
|
- const res = await fetch("./data.json");
|
|
|
- rawData.value = await res.json();
|
|
|
- } catch (e) {
|
|
|
- console.error("加载 data.json 失败:", e);
|
|
|
- }
|
|
|
-});
|
|
|
-</script>
|
|
|
-
|
|
|
-<style scoped lang="scss">
|
|
|
-@use "@/assets/utils.scss";
|
|
|
-
|
|
|
-.picture {
|
|
|
- position: absolute;
|
|
|
- inset: 0;
|
|
|
- display: flex;
|
|
|
- justify-content: stretch;
|
|
|
- overflow: hidden;
|
|
|
- background: url("./images/bg.jpg") no-repeat center / cover;
|
|
|
-
|
|
|
- .el-image {
|
|
|
- width: 100%;
|
|
|
- height: 100%;
|
|
|
- }
|
|
|
- &-sidebar {
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
- padding: utils.vh-calc(110) 0 utils.vh-calc(170);
|
|
|
- flex: 0 0 utils.vh-calc(382);
|
|
|
- height: 100%;
|
|
|
- background: linear-gradient(to left, transparent, rgba(197, 166, 123, 0.8));
|
|
|
-
|
|
|
- h3 {
|
|
|
- padding: 0 40px;
|
|
|
- margin-bottom: utils.vh-calc(10);
|
|
|
- font-size: utils.vh-calc(36);
|
|
|
- color: #98382e;
|
|
|
- font-family: "SourceHanSerifSC-Bold";
|
|
|
- text-align: center;
|
|
|
- }
|
|
|
- .el-scrollbar {
|
|
|
- flex: 1;
|
|
|
- height: 0;
|
|
|
- padding: 0 40px;
|
|
|
- }
|
|
|
- p {
|
|
|
- text-indent: 2em;
|
|
|
- font-size: utils.vh-calc(18);
|
|
|
- color: #4e1a00;
|
|
|
- line-height: utils.vh-calc(30);
|
|
|
- }
|
|
|
- }
|
|
|
- &-content {
|
|
|
- position: relative;
|
|
|
- padding: utils.vh-calc(90) 105px utils.vh-calc(75) 23px;
|
|
|
- flex: 1;
|
|
|
- width: 0;
|
|
|
-
|
|
|
- &-back {
|
|
|
- position: absolute;
|
|
|
- right: utils.vw-calc(20);
|
|
|
- bottom: utils.vh-calc(30);
|
|
|
- width: utils.vh-calc(50);
|
|
|
- height: utils.vh-calc(50);
|
|
|
- cursor: pointer;
|
|
|
- }
|
|
|
- }
|
|
|
- &-swiper {
|
|
|
- margin-top: utils.vh-calc(30);
|
|
|
- width: 100%;
|
|
|
-
|
|
|
- :deep(.swiper-scrollbar) {
|
|
|
- position: relative;
|
|
|
- margin-top: utils.vh-calc(20);
|
|
|
- height: utils.vh-calc(4);
|
|
|
- border-radius: 50px;
|
|
|
- background: transparent;
|
|
|
-
|
|
|
- .swiper-scrollbar-drag {
|
|
|
- background: #98382e;
|
|
|
- border-radius: 50px;
|
|
|
- cursor: pointer;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- &-slide {
|
|
|
- position: relative;
|
|
|
- width: 220px;
|
|
|
- height: 150px;
|
|
|
- border-radius: 10px;
|
|
|
- overflow: hidden;
|
|
|
- cursor: pointer;
|
|
|
-
|
|
|
- &--active {
|
|
|
- border: 2px solid #98382e;
|
|
|
-
|
|
|
- p {
|
|
|
- background: #98382e !important;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- p {
|
|
|
- position: absolute;
|
|
|
- left: 0;
|
|
|
- right: 0;
|
|
|
- bottom: 0;
|
|
|
- padding: 0 10px;
|
|
|
- height: utils.vh-calc(30);
|
|
|
- line-height: utils.vh-calc(30);
|
|
|
- font-size: utils.vh-calc(16);
|
|
|
- color: #f7e8d4;
|
|
|
- background: rgba(151, 92, 64, 0.9);
|
|
|
- }
|
|
|
- }
|
|
|
- &-slide-placeholder {
|
|
|
- width: 100%;
|
|
|
- height: 100%;
|
|
|
- background: #c0c0c0;
|
|
|
- }
|
|
|
- &-banner {
|
|
|
- position: relative;
|
|
|
- height: utils.vh-calc(644);
|
|
|
- box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.25);
|
|
|
- border-radius: 30px;
|
|
|
- overflow: hidden;
|
|
|
-
|
|
|
- &-placeholder {
|
|
|
- width: 100%;
|
|
|
- height: 100%;
|
|
|
- background: #c0c0c0;
|
|
|
- }
|
|
|
-
|
|
|
- .scene-btn {
|
|
|
- position: absolute;
|
|
|
- bottom: utils.vh-calc(14);
|
|
|
- left: 50%;
|
|
|
- transform: translateX(-50%);
|
|
|
- width: utils.vh-calc(233);
|
|
|
- height: utils.vh-calc(66);
|
|
|
- text-align: center;
|
|
|
- font-size: utils.vh-calc(24);
|
|
|
- color: #744e2e;
|
|
|
- padding-left: utils.vh-calc(35);
|
|
|
- line-height: utils.vh-calc(66);
|
|
|
- font-family: "SourceHanSerifSC-Bold";
|
|
|
- cursor: pointer;
|
|
|
- background: url("@/assets/images/scene-btn.png") no-repeat center /
|
|
|
- contain;
|
|
|
- }
|
|
|
- }
|
|
|
- &-temp {
|
|
|
- flex: 0 0 utils.vh-calc(300);
|
|
|
- transition: flex 0.3s ease;
|
|
|
-
|
|
|
- &--hidden {
|
|
|
- flex: 0 0 0;
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-</style>
|
|
|
+<template>
|
|
|
+ <div class="picture">
|
|
|
+ <div class="picture-sidebar">
|
|
|
+ <h3>{{ currentItem?.name || "加载中..." }}</h3>
|
|
|
+ <el-scrollbar>
|
|
|
+ <p>{{ currentItem?.desc || "" }}</p>
|
|
|
+ </el-scrollbar>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="picture-content">
|
|
|
+ <div class="picture-banner">
|
|
|
+ <el-image v-if="currentItem?.imgName" :src="bannerImgSrc" fit="cover" />
|
|
|
+ <div v-else class="picture-banner-placeholder" />
|
|
|
+ <div v-if="currentItem?.scene" class="scene-btn" @click="goToScene">
|
|
|
+ 全景漫游
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <swiper
|
|
|
+ :modules="modules"
|
|
|
+ :slides-per-view="'auto'"
|
|
|
+ :space-between="10"
|
|
|
+ :mousewheel="{
|
|
|
+ enabled: true,
|
|
|
+ forceToAxis: false,
|
|
|
+ }"
|
|
|
+ :free-mode="true"
|
|
|
+ :scrollbar="{
|
|
|
+ hide: false,
|
|
|
+ draggable: true,
|
|
|
+ }"
|
|
|
+ class="picture-swiper"
|
|
|
+ @swiper="onSwiper"
|
|
|
+ >
|
|
|
+ <swiper-slide
|
|
|
+ v-for="(slideItem, idx) in areaItems"
|
|
|
+ :key="slideItem.id"
|
|
|
+ class="picture-slide"
|
|
|
+ :class="{ 'picture-slide--active': slideItem.id === currentItem?.id }"
|
|
|
+ @click="selectItem(slideItem)"
|
|
|
+ >
|
|
|
+ <el-image
|
|
|
+ v-if="slideItem.imgName"
|
|
|
+ :src="getThumbSrc(slideItem.imgName)"
|
|
|
+ fit="cover"
|
|
|
+ lazy
|
|
|
+ />
|
|
|
+ <div v-else class="picture-slide-placeholder" />
|
|
|
+ <p>{{ slideItem.name }}</p>
|
|
|
+ </swiper-slide>
|
|
|
+ </swiper>
|
|
|
+
|
|
|
+ <img
|
|
|
+ class="picture-content-back"
|
|
|
+ src="@/assets/images/icon-fanhui.png"
|
|
|
+ @click="$router.push({ name: 'Home' })"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div
|
|
|
+ class="picture-temp"
|
|
|
+ :class="{ 'picture-temp--hidden': !sidebarVisible }"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup>
|
|
|
+import { ref, computed, watch, onMounted } from "vue";
|
|
|
+import { useRoute, useRouter } from "vue-router";
|
|
|
+import { storeToRefs } from "pinia";
|
|
|
+import { useSidebarStore } from "@/stores/sidebar";
|
|
|
+import { Swiper, SwiperSlide } from "swiper/vue";
|
|
|
+import { FreeMode, Mousewheel, Scrollbar } from "swiper/modules";
|
|
|
+import "swiper/css";
|
|
|
+import "swiper/css/free-mode";
|
|
|
+import "swiper/css/scrollbar";
|
|
|
+
|
|
|
+const modules = [FreeMode, Mousewheel, Scrollbar];
|
|
|
+const { visible: sidebarVisible } = storeToRefs(useSidebarStore());
|
|
|
+const route = useRoute();
|
|
|
+const router = useRouter();
|
|
|
+
|
|
|
+const rawData = ref([]);
|
|
|
+const swiperInstance = ref(null);
|
|
|
+
|
|
|
+/** 从 URL 或默认取当前 item */
|
|
|
+const currentItem = computed(() => {
|
|
|
+ const list = rawData.value || [];
|
|
|
+ if (!list.length) return null;
|
|
|
+ const id = route.query.id;
|
|
|
+ if (id) {
|
|
|
+ const found = list.find((i) => i.id === id);
|
|
|
+ if (found) return found;
|
|
|
+ }
|
|
|
+ return list[0];
|
|
|
+});
|
|
|
+
|
|
|
+/** 当前 item 所在区的列表(用于 swiper) */
|
|
|
+const areaItems = computed(() => {
|
|
|
+ const item = currentItem.value;
|
|
|
+ if (!item?.area) return [];
|
|
|
+ return (rawData.value || []).filter((i) => i.area === item.area);
|
|
|
+});
|
|
|
+
|
|
|
+/** 当前 item 在 areaItems 中的索引 */
|
|
|
+const currentSlideIndex = computed(() => {
|
|
|
+ const item = currentItem.value;
|
|
|
+ if (!item) return 0;
|
|
|
+ const idx = areaItems.value.findIndex((i) => i.id === item.id);
|
|
|
+ return idx >= 0 ? idx : 0;
|
|
|
+});
|
|
|
+
|
|
|
+/** Banner 大图路径:/images/resource/ + imgName */
|
|
|
+const bannerImgSrc = computed(() => {
|
|
|
+ const name = currentItem.value?.imgName;
|
|
|
+ if (!name?.trim()) return "";
|
|
|
+ return `./images/resource/${name.trim()}`;
|
|
|
+});
|
|
|
+
|
|
|
+/** 缩略图路径:/images/thumb/ + imgName */
|
|
|
+function getThumbSrc(imgName) {
|
|
|
+ if (!imgName?.trim()) return "";
|
|
|
+ return `./images/thumb/${imgName.trim()}`;
|
|
|
+}
|
|
|
+
|
|
|
+function onSwiper(swiper) {
|
|
|
+ swiperInstance.value = swiper;
|
|
|
+}
|
|
|
+
|
|
|
+/** 点击 swiper slide 切换 item */
|
|
|
+function selectItem(item) {
|
|
|
+ router.replace({ name: "Picture", query: { ...route.query, id: item.id } });
|
|
|
+}
|
|
|
+
|
|
|
+/** 跳转到全景漫游 */
|
|
|
+function goToScene() {
|
|
|
+ const item = currentItem.value;
|
|
|
+ const url = item?.scene?.trim();
|
|
|
+ if (!url) return;
|
|
|
+ const query = { url };
|
|
|
+ if (item.batch != null && item.batch !== "") {
|
|
|
+ query.batch = String(item.batch);
|
|
|
+ }
|
|
|
+ router.push({ name: "Scene", query });
|
|
|
+}
|
|
|
+
|
|
|
+/** 无 id 时用第一个 item 的 id 写入 URL,便于刷新恢复 */
|
|
|
+watch(
|
|
|
+ () => [rawData.value, route.query.id],
|
|
|
+ () => {
|
|
|
+ const list = rawData.value || [];
|
|
|
+ if (!list.length || route.query.id) return;
|
|
|
+ const first = list[0];
|
|
|
+ if (first) {
|
|
|
+ router.replace({ name: "Picture", query: { id: first.id } });
|
|
|
+ }
|
|
|
+ },
|
|
|
+ { immediate: true },
|
|
|
+);
|
|
|
+
|
|
|
+/** 当前 item 变化时,swiper 滚动到对应位置 */
|
|
|
+watch(
|
|
|
+ () => [currentSlideIndex.value, swiperInstance.value, areaItems.value.length],
|
|
|
+ () => {
|
|
|
+ const swiper = swiperInstance.value;
|
|
|
+ if (!swiper || areaItems.value.length === 0) return;
|
|
|
+ const idx = currentSlideIndex.value;
|
|
|
+ swiper.slideTo(idx, 300);
|
|
|
+ },
|
|
|
+ { immediate: true },
|
|
|
+);
|
|
|
+
|
|
|
+onMounted(async () => {
|
|
|
+ try {
|
|
|
+ const res = await fetch("./data.json");
|
|
|
+ rawData.value = await res.json();
|
|
|
+ } catch (e) {
|
|
|
+ console.error("加载 data.json 失败:", e);
|
|
|
+ }
|
|
|
+});
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped lang="scss">
|
|
|
+@use "@/assets/utils.scss";
|
|
|
+
|
|
|
+.picture {
|
|
|
+ position: absolute;
|
|
|
+ inset: 0;
|
|
|
+ display: flex;
|
|
|
+ justify-content: stretch;
|
|
|
+ overflow: hidden;
|
|
|
+ background: url("./images/bg.jpg") no-repeat center / cover;
|
|
|
+
|
|
|
+ .el-image {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ }
|
|
|
+ &-sidebar {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ padding: utils.vh-calc(110) 0 utils.vh-calc(170);
|
|
|
+ flex: 0 0 utils.vh-calc(382);
|
|
|
+ height: 100%;
|
|
|
+ background: linear-gradient(to left, transparent, rgba(197, 166, 123, 0.8));
|
|
|
+
|
|
|
+ h3 {
|
|
|
+ padding: 0 40px;
|
|
|
+ margin-bottom: utils.vh-calc(10);
|
|
|
+ font-size: utils.vh-calc(36);
|
|
|
+ color: #98382e;
|
|
|
+ font-family: "SourceHanSerifSC-Bold";
|
|
|
+ text-align: center;
|
|
|
+ }
|
|
|
+ .el-scrollbar {
|
|
|
+ flex: 1;
|
|
|
+ height: 0;
|
|
|
+ padding: 0 40px;
|
|
|
+ }
|
|
|
+ p {
|
|
|
+ text-indent: 2em;
|
|
|
+ font-size: utils.vh-calc(18);
|
|
|
+ color: #4e1a00;
|
|
|
+ line-height: utils.vh-calc(30);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ &-content {
|
|
|
+ position: relative;
|
|
|
+ padding: utils.vh-calc(90) 105px utils.vh-calc(75) 23px;
|
|
|
+ flex: 1;
|
|
|
+ width: 0;
|
|
|
+
|
|
|
+ &-back {
|
|
|
+ position: absolute;
|
|
|
+ right: utils.vw-calc(20);
|
|
|
+ bottom: utils.vh-calc(30);
|
|
|
+ width: utils.vh-calc(50);
|
|
|
+ height: utils.vh-calc(50);
|
|
|
+ cursor: pointer;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ &-swiper {
|
|
|
+ margin-top: utils.vh-calc(30);
|
|
|
+ width: 100%;
|
|
|
+
|
|
|
+ :deep(.swiper-scrollbar) {
|
|
|
+ position: relative;
|
|
|
+ margin-top: utils.vh-calc(20);
|
|
|
+ height: utils.vh-calc(4);
|
|
|
+ border-radius: 50px;
|
|
|
+ background: transparent;
|
|
|
+
|
|
|
+ .swiper-scrollbar-drag {
|
|
|
+ background: #98382e;
|
|
|
+ border-radius: 50px;
|
|
|
+ cursor: pointer;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ &-slide {
|
|
|
+ position: relative;
|
|
|
+ width: 220px;
|
|
|
+ height: 150px;
|
|
|
+ border-radius: 10px;
|
|
|
+ overflow: hidden;
|
|
|
+ cursor: pointer;
|
|
|
+
|
|
|
+ &--active {
|
|
|
+ border: 2px solid #98382e;
|
|
|
+
|
|
|
+ p {
|
|
|
+ background: #98382e !important;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ p {
|
|
|
+ position: absolute;
|
|
|
+ left: 0;
|
|
|
+ right: 0;
|
|
|
+ bottom: 0;
|
|
|
+ padding: 0 10px;
|
|
|
+ height: utils.vh-calc(30);
|
|
|
+ line-height: utils.vh-calc(30);
|
|
|
+ font-size: utils.vh-calc(16);
|
|
|
+ color: #f7e8d4;
|
|
|
+ background: rgba(151, 92, 64, 0.9);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ &-slide-placeholder {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ background: #c0c0c0;
|
|
|
+ }
|
|
|
+ &-banner {
|
|
|
+ position: relative;
|
|
|
+ height: utils.vh-calc(644);
|
|
|
+ box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.25);
|
|
|
+ border-radius: 30px;
|
|
|
+ overflow: hidden;
|
|
|
+
|
|
|
+ &-placeholder {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ background: #c0c0c0;
|
|
|
+ }
|
|
|
+
|
|
|
+ .scene-btn {
|
|
|
+ position: absolute;
|
|
|
+ bottom: utils.vh-calc(14);
|
|
|
+ left: 50%;
|
|
|
+ transform: translateX(-50%);
|
|
|
+ width: utils.vh-calc(233);
|
|
|
+ height: utils.vh-calc(66);
|
|
|
+ text-align: center;
|
|
|
+ font-size: utils.vh-calc(24);
|
|
|
+ color: #744e2e;
|
|
|
+ padding-left: utils.vh-calc(35);
|
|
|
+ line-height: utils.vh-calc(66);
|
|
|
+ font-family: "SourceHanSerifSC-Bold";
|
|
|
+ cursor: pointer;
|
|
|
+ background: url("@/assets/images/scene-btn.png") no-repeat center /
|
|
|
+ contain;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ &-temp {
|
|
|
+ flex: 0 0 utils.vh-calc(300);
|
|
|
+ transition: flex 0.3s ease;
|
|
|
+
|
|
|
+ &--hidden {
|
|
|
+ flex: 0 0 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|