|
|
@@ -1,184 +1,480 @@
|
|
|
<template>
|
|
|
- <div class="home-pages">
|
|
|
- <!-- 头部 -->
|
|
|
- <comHead v-if="headData.show" :row="headData" :datas="realList"></comHead>
|
|
|
- <!-- 导航 -->
|
|
|
- <div class="nav-bos">
|
|
|
- <div v-for="(item, index) in navList" :key="index" class="nav-list" @click="onPath(item.url)">
|
|
|
- <img class="nav-image" :src="item.img" alt="" />
|
|
|
- <div class="flex-row-between">
|
|
|
- <div>
|
|
|
- <div class="name1">{{ item.name1 }}</div>
|
|
|
- <div class="name2">{{ item.name2 }}</div>
|
|
|
+ <div class="jd-app">
|
|
|
+ <JDHeader />
|
|
|
+ <!-- 2. 核心 Banner 区域 -->
|
|
|
+ <section class="banner-area w">
|
|
|
+ <!-- 极简而纯粹的悬挂式广告大图,挂于 1600px 外部左侧 -->
|
|
|
+ <!-- 悬停时通过 CSS 自动扩宽并享有绝对最高层级 9999 -->
|
|
|
+ <div class="expand-ad-layer">
|
|
|
+ <img src="@/assets/jd/banner_green_ad.png" alt="促销大图" class="expand-img-full" />
|
|
|
+
|
|
|
+ <!-- 作为大图一部分直接漂浮在上面的文案,不破坏图片的整体性 -->
|
|
|
+ <div class="ad-left-text">
|
|
|
+ <div class="deco-inner-white">
|
|
|
+ <span class="d-txt">企业专享低至</span>
|
|
|
+ <span class="d-num">5</span>
|
|
|
+ <span class="d-txt">折</span>
|
|
|
+ </div>
|
|
|
+ <div class="play-btn">
|
|
|
+ <div class="triangle"></div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 右侧主内容区域,霸占 1600px 全宽 -->
|
|
|
+ <div class="banner-layout flex">
|
|
|
+ <!-- 左侧大列 (导航 + 分类与广告) -->
|
|
|
+ <div class="main-column flex-1 flex-column">
|
|
|
+ <!-- 顶部的导航条 -->
|
|
|
+ <div class="nav-bar flex-between relative">
|
|
|
+ <!-- 小屏时固定的场景化类目 -->
|
|
|
+ <div class="scene-cat-toggle" v-if="!isLargeScreen" @mouseenter="showSceneCat = true" @mouseleave="showSceneCat = false">
|
|
|
+ <span>场景化类目 <i class="arr-down"></i></span>
|
|
|
+ </div>
|
|
|
+ <div class="divider" v-if="!isLargeScreen">|</div>
|
|
|
+
|
|
|
+ <!-- 导航滚动包装器 (按钮贴靠视口两端) -->
|
|
|
+ <div class="nav-scroll-wrapper flex-1 relative">
|
|
|
+ <!-- 左滑按钮 -->
|
|
|
+ <div class="scroll-btn-wrap prev" v-show="showPrev">
|
|
|
+ <div class="more-btn prev-btn" @click="slide(-300)">
|
|
|
+ <svg
|
|
|
+ width="12"
|
|
|
+ height="12"
|
|
|
+ viewBox="0 0 24 24"
|
|
|
+ fill="none"
|
|
|
+ stroke="currentColor"
|
|
|
+ stroke-width="3"
|
|
|
+ stroke-linecap="round"
|
|
|
+ stroke-linejoin="round"
|
|
|
+ >
|
|
|
+ <polyline points="15 18 9 12 15 6"></polyline>
|
|
|
+ </svg>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 导航滚动视口 -->
|
|
|
+ <ul class="nav-list flex" ref="navListRef" @scroll="checkScroll">
|
|
|
+ <li v-for="(item, index) in navItems" :key="index" :class="{ active: index === 0 }">
|
|
|
+ <img :src="`../../assets/jd/icons/icon_${item.icon}.svg`" class="n-ic-img" />
|
|
|
+ {{ item.name }}
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+
|
|
|
+ <!-- 右滑按钮 -->
|
|
|
+ <div class="scroll-btn-wrap next" v-show="showNext">
|
|
|
+ <div class="more-btn next-btn" @click="slide(300)">
|
|
|
+ <svg
|
|
|
+ width="12"
|
|
|
+ height="12"
|
|
|
+ viewBox="0 0 24 24"
|
|
|
+ fill="none"
|
|
|
+ stroke="currentColor"
|
|
|
+ stroke-width="3"
|
|
|
+ stroke-linecap="round"
|
|
|
+ stroke-linejoin="round"
|
|
|
+ >
|
|
|
+ <polyline points="9 18 15 12 9 6"></polyline>
|
|
|
+ </svg>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- <div class="nav-more flex-row-center">
|
|
|
- <el-icon><ArrowRight /></el-icon>
|
|
|
+ <!-- 下方:分类与广告栏并排 -->
|
|
|
+ <div class="banner-bottom flex flex-1">
|
|
|
+ <!-- 左侧分类菜单 (大屏常驻,小屏悬停显示) -->
|
|
|
+ <aside
|
|
|
+ class="side-category"
|
|
|
+ v-show="isLargeScreen || showSceneCat"
|
|
|
+ :class="{ 'is-dropdown': !isLargeScreen }"
|
|
|
+ @mouseenter="showSceneCat = true"
|
|
|
+ @mouseleave="showSceneCat = false"
|
|
|
+ >
|
|
|
+ <JDCategory />
|
|
|
+ </aside>
|
|
|
+
|
|
|
+ <!-- 右侧广告组合 -->
|
|
|
+ <div class="ad-group flex-1">
|
|
|
+ <JDBannerCards />
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
+ <!-- 右侧大列:用户面板 (撑满高度) -->
|
|
|
+ <div class="user-col">
|
|
|
+ <JDUserPanel class="user-col" />
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- <!-- 猜你喜欢 -->
|
|
|
- <indexMorTitle :datas="{ title1: '猜你喜欢' }"></indexMorTitle>
|
|
|
- <comGoods :row="{ styleType: 1, goodsShow: [1, 2, 3], goodsTitleType: 3 }" :datas="recommendList"></comGoods>
|
|
|
+ </section>
|
|
|
+
|
|
|
+ <!-- 3. 下方模块 -->
|
|
|
+ <JDScene />
|
|
|
+ <JDProducts />
|
|
|
+
|
|
|
+ <!-- 4. 页脚 -->
|
|
|
+ <JDFooter />
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
-import indexMorTitle from '@/views/home/pccomponents/pages/indexMorTitle.vue';
|
|
|
-import comHead from '@/views/home/pccomponents/pages/headData.vue';
|
|
|
-import comGoods from '@/views/home/pccomponents/pages/goods.vue';
|
|
|
-import { onPath } from '@/utils/siteConfig';
|
|
|
-import { getSearchTitle, getHomeNav } from '@/api/home/index';
|
|
|
-import {
|
|
|
- getEnterpriseRightsMemberEquityList,
|
|
|
- getEnterpriseHomeAdList,
|
|
|
- getCustomerProductPage,
|
|
|
- customerMessageList
|
|
|
-} from '@/api/home/index-enterprise';
|
|
|
-import enterprise1 from '@/assets/images/home/enterprise1.png';
|
|
|
-import enterprise2 from '@/assets/images/home/enterprise2.png';
|
|
|
-import enterprise3 from '@/assets/images/home/enterprise3.png';
|
|
|
-import enterprise4 from '@/assets/images/home/enterprise4.png';
|
|
|
-
|
|
|
-const headData = ref<any>({});
|
|
|
-const realList = ref<any>([]);
|
|
|
-const recommendList = ref<any>([]);
|
|
|
-//导航
|
|
|
-const navList = ref<any>([
|
|
|
- { name1: '采购日历', name2: '提前制定和管理月度采购计划', url: '/enterprise/purchaseHistory', img: enterprise1 },
|
|
|
- { name1: '自助开票', name2: '灵活自助开票 换开管票服务', url: '/enterprise/invoiceManage', img: enterprise2 },
|
|
|
- { name1: '下载中心', name2: '批量订单打印', url: '/order/orderManage', img: enterprise3 },
|
|
|
- { name1: '批量下单', name2: '智能识别多商品多地址一键下单', url: '/cart', img: enterprise4 }
|
|
|
+import JDHeader from '@/views/home/jdcomponents/JDHeader.vue';
|
|
|
+import JDCategory from '@/views/home/jdcomponents/JDCategory.vue';
|
|
|
+import JDBannerCards from '@/views/home/jdcomponents/JDBannerCards.vue';
|
|
|
+import JDUserPanel from '@/views/home/jdcomponents/JDUserPanel.vue';
|
|
|
+import JDScene from '@/views/home/jdcomponents/JDScene.vue';
|
|
|
+import JDProducts from '@/views/home/jdcomponents/JDProducts.vue';
|
|
|
+import JDFooter from '@/views/home/jdcomponents/JDFooter.vue';
|
|
|
+import '@/views/home/jdcomponents/jd-repro.css';
|
|
|
+
|
|
|
+const isLargeScreen = ref(window.innerWidth >= 1600);
|
|
|
+const adHovered = ref(false);
|
|
|
+const check = () => {
|
|
|
+ isLargeScreen.value = window.innerWidth >= 1600;
|
|
|
+ setTimeout(checkScroll, 0);
|
|
|
+};
|
|
|
+
|
|
|
+const navItems = ref([
|
|
|
+ { name: '公共采购', icon: '1' },
|
|
|
+ { name: '跟买指南', icon: '2' },
|
|
|
+ { name: '五金城', icon: '3' },
|
|
|
+ { name: '电脑数码', icon: '4' },
|
|
|
+ { name: '企业超市', icon: '5' },
|
|
|
+ { name: '企业服务', icon: '6' },
|
|
|
+ { name: '家电家居', icon: '7' },
|
|
|
+ { name: '京东京造', icon: '8' },
|
|
|
+ { name: '企业养车', icon: '9' },
|
|
|
+ { name: '员工福利', icon: '10' },
|
|
|
+ { name: '商用家电', icon: '11' },
|
|
|
+ { name: '办公设备', icon: '12' },
|
|
|
+ { name: '耗材采购', icon: '13' },
|
|
|
+ { name: '员工团建', icon: '14' },
|
|
|
+ { name: '防暑降温', icon: '15' }
|
|
|
]);
|
|
|
|
|
|
-onMounted(() => {
|
|
|
- document.documentElement.style.setProperty('--hover-color', '#E7000B');
|
|
|
- getHead();
|
|
|
-});
|
|
|
+const navListRef = ref(null);
|
|
|
+const showPrev = ref(false);
|
|
|
+const showNext = ref(true);
|
|
|
+const showSceneCat = ref(false);
|
|
|
|
|
|
-//头部
|
|
|
-const getHead = async () => {
|
|
|
- headData.value.topStyle = 1;
|
|
|
- headData.value.toplabel = [];
|
|
|
- headData.value.classifyShow = true;
|
|
|
- headData.value.headType = 3;
|
|
|
- headData.value.leftStyle = 1;
|
|
|
- headData.value.carouselList = [];
|
|
|
- headData.value.advertList = [];
|
|
|
- headData.value.realDataType = 1;
|
|
|
- headData.value.realNumber = 6;
|
|
|
- headData.value.navlList = [];
|
|
|
- try {
|
|
|
- const datas1 = await getSearchTitle(5);
|
|
|
- if (datas1.code == 200) {
|
|
|
- datas1.data.forEach((item: any) => {
|
|
|
- headData.value.toplabel.push({
|
|
|
- title: item.navigationName
|
|
|
- });
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- const datas2 = await getHomeNav(5);
|
|
|
- headData.value.topNav = [];
|
|
|
- datas2.data.forEach((item: any) => {
|
|
|
- headData.value.topNav.push({
|
|
|
- title: item.navigationName,
|
|
|
- url: item.url ? item.url : ''
|
|
|
- });
|
|
|
- });
|
|
|
-
|
|
|
- const datas3 = await getEnterpriseHomeAdList({});
|
|
|
- if (datas3.code == 200) {
|
|
|
- datas3.data.forEach((item: any) => {
|
|
|
- headData.value.carouselList.push({
|
|
|
- imageUrl: item.imageUrl
|
|
|
- });
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- const datas5 = await customerMessageList({ status: '0', pageSize: 20 });
|
|
|
- if (datas5.code == 200) realList.value = datas5.rows;
|
|
|
-
|
|
|
- const datas6 = await getEnterpriseRightsMemberEquityList({});
|
|
|
- if (datas6.code == 200) {
|
|
|
- datas6.data.forEach((item: any) => {
|
|
|
- headData.value.navlList.push({
|
|
|
- imageUrl: item.imageUrl,
|
|
|
- title: item.title,
|
|
|
- url: item.link ? item.link : ''
|
|
|
- });
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- headData.value.show = true;
|
|
|
- } catch (error) {}
|
|
|
+const checkScroll = () => {
|
|
|
+ if (!navListRef.value) return;
|
|
|
+ const { scrollLeft, scrollWidth, clientWidth } = navListRef.value;
|
|
|
+ showPrev.value = scrollLeft > 0;
|
|
|
+ // 给定一个容差值 2px,防止小数四舍五入导致判断失败
|
|
|
+ showNext.value = Math.ceil(scrollLeft + clientWidth) < scrollWidth - 2;
|
|
|
};
|
|
|
|
|
|
-//猜你喜欢
|
|
|
-getCustomerProductPage({}).then((res) => {
|
|
|
- if (res.code == 200) {
|
|
|
- recommendList.value = res.rows;
|
|
|
+const slide = (amount) => {
|
|
|
+ if (navListRef.value) {
|
|
|
+ navListRef.value.scrollBy({ left: amount, behavior: 'smooth' });
|
|
|
}
|
|
|
+};
|
|
|
+
|
|
|
+onMounted(() => {
|
|
|
+ window.addEventListener('resize', check);
|
|
|
+ setTimeout(checkScroll, 100); // 初始化时检查滚动状态
|
|
|
});
|
|
|
+onUnmounted(() => window.removeEventListener('resize', check));
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
-.home-pages {
|
|
|
+.jd-app {
|
|
|
width: 100%;
|
|
|
- padding-bottom: 30px;
|
|
|
+ background: #f8f8f8;
|
|
|
+ min-height: 100vh;
|
|
|
+}
|
|
|
|
|
|
- :deep(.hover-color) {
|
|
|
- cursor: pointer;
|
|
|
+.banner-area {
|
|
|
+ margin-top: 10px;
|
|
|
+ position: relative;
|
|
|
+ background: #fff;
|
|
|
+ border-radius: 12px;
|
|
|
+ z-index: 5;
|
|
|
+ display: flex;
|
|
|
+ height: 460px;
|
|
|
+}
|
|
|
|
|
|
- &:hover {
|
|
|
- color: var(--hover-color) !important;
|
|
|
+/* 极简式大图广告容器,初始 84px 宽,高度撑满 */
|
|
|
+.expand-ad-layer {
|
|
|
+ position: absolute;
|
|
|
+ left: -84px;
|
|
|
+ top: 0;
|
|
|
+ width: 84px;
|
|
|
+ height: 100%;
|
|
|
+ z-index: 100; /* 未展开时层级一般 */
|
|
|
+ overflow: hidden;
|
|
|
+ border-radius: 12px 0 0 12px;
|
|
|
+ transition:
|
|
|
+ width 0.3s cubic-bezier(0.4, 0, 0.2, 1),
|
|
|
+ z-index 0s 0.3s;
|
|
|
+ cursor: pointer;
|
|
|
+ background: transparent;
|
|
|
+}
|
|
|
+/* 悬停时跃升为 9999 皇帝级图层,完美盖死右侧任何弹窗! */
|
|
|
+.expand-ad-layer:hover {
|
|
|
+ width: 790px;
|
|
|
+ z-index: 9999;
|
|
|
+ border-radius: 12px;
|
|
|
+ box-shadow: 6px 10px 30px rgba(0, 0, 0, 0.3);
|
|
|
+ transition:
|
|
|
+ width 0.3s cubic-bezier(0.4, 0, 0.2, 1),
|
|
|
+ z-index 0s 0s;
|
|
|
+}
|
|
|
|
|
|
- .zi-hover {
|
|
|
- color: var(--hover-color) !important;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- // 导航
|
|
|
- .nav-bos {
|
|
|
- margin: 0 auto;
|
|
|
- width: 100%;
|
|
|
- max-width: 1500px;
|
|
|
- min-width: 1200px;
|
|
|
- display: flex;
|
|
|
- gap: 0 10px;
|
|
|
- .nav-list {
|
|
|
- margin-top: 15px;
|
|
|
- flex: 0 0 calc((100% - 30px) / 4);
|
|
|
- height: 150px;
|
|
|
- background: #ffffff;
|
|
|
- border-radius: 5px;
|
|
|
- padding: 20px;
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
- justify-content: space-between;
|
|
|
- cursor: pointer;
|
|
|
- .nav-image {
|
|
|
- width: 50px;
|
|
|
- height: 50px;
|
|
|
- background: #ffeeea;
|
|
|
- border-radius: 6px 6px 6px 6px;
|
|
|
- }
|
|
|
- .name1 {
|
|
|
- font-size: 15px;
|
|
|
- margin-bottom: 5px;
|
|
|
- color: #101828;
|
|
|
- }
|
|
|
- .name2 {
|
|
|
- font-size: 13px;
|
|
|
- color: #6a7282;
|
|
|
- }
|
|
|
- .nav-more {
|
|
|
- width: 20px;
|
|
|
- height: 20px;
|
|
|
- border-radius: 20px;
|
|
|
- border: 1px solid #3d3e3f;
|
|
|
- }
|
|
|
- }
|
|
|
+/* 一整张原生的大图片,定死 790px 宽 */
|
|
|
+.expand-img-full {
|
|
|
+ position: absolute;
|
|
|
+ left: 0;
|
|
|
+ top: 0;
|
|
|
+ width: 790px;
|
|
|
+ height: 460px;
|
|
|
+ object-fit: cover;
|
|
|
+ z-index: 1;
|
|
|
+}
|
|
|
+
|
|
|
+/* 悬浮在图片最左侧的透明文案区,等同于图片本身 */
|
|
|
+.ad-left-text {
|
|
|
+ position: absolute;
|
|
|
+ left: 0;
|
|
|
+ top: 0;
|
|
|
+ width: 84px;
|
|
|
+ height: 100%;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ z-index: 5;
|
|
|
+ pointer-events: none;
|
|
|
+}
|
|
|
+.deco-inner-white {
|
|
|
+ background: #fff;
|
|
|
+ width: 60px;
|
|
|
+ border-radius: 30px;
|
|
|
+ padding: 20px 0;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ margin-bottom: 15px;
|
|
|
+}
|
|
|
+.d-txt {
|
|
|
+ writing-mode: vertical-lr;
|
|
|
+ color: #2cb356;
|
|
|
+ font-weight: bold;
|
|
|
+ font-size: 16px;
|
|
|
+ letter-spacing: 2px;
|
|
|
+}
|
|
|
+.d-num {
|
|
|
+ font-size: 26px;
|
|
|
+ color: #2cb356;
|
|
|
+ font-weight: 900;
|
|
|
+ margin: 5px 0;
|
|
|
+}
|
|
|
+.play-btn {
|
|
|
+ width: 30px;
|
|
|
+ height: 30px;
|
|
|
+ background: #e1251b;
|
|
|
+ border-radius: 50%;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+}
|
|
|
+.triangle {
|
|
|
+ width: 0;
|
|
|
+ height: 0;
|
|
|
+ border-top: 5px solid transparent;
|
|
|
+ border-bottom: 5px solid transparent;
|
|
|
+ border-left: 8px solid #fff;
|
|
|
+ margin-left: 3px;
|
|
|
+}
|
|
|
+
|
|
|
+.banner-layout {
|
|
|
+ height: 100%;
|
|
|
+ width: 100%;
|
|
|
+ display: flex;
|
|
|
+}
|
|
|
+
|
|
|
+/* 主体列 */
|
|
|
+.main-column {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ overflow: visible;
|
|
|
+ min-width: 0;
|
|
|
+}
|
|
|
+
|
|
|
+/* 导航条样式 */
|
|
|
+.nav-bar {
|
|
|
+ height: 60px;
|
|
|
+ line-height: 60px;
|
|
|
+ padding: 0 20px;
|
|
|
+ background: #fff;
|
|
|
+ border-radius: 12px 12px 0 0;
|
|
|
+ position: relative;
|
|
|
+ box-sizing: border-box;
|
|
|
+ width: 100%;
|
|
|
+}
|
|
|
+.nav-scroll-wrapper {
|
|
|
+ display: flex;
|
|
|
+ overflow: hidden;
|
|
|
+ height: 100%;
|
|
|
+ align-items: center;
|
|
|
+}
|
|
|
+.nav-list {
|
|
|
+ overflow-x: auto;
|
|
|
+ overflow-y: hidden;
|
|
|
+ flex-wrap: nowrap;
|
|
|
+ flex: 1;
|
|
|
+ height: 100%;
|
|
|
+ scrollbar-width: none;
|
|
|
+ -ms-overflow-style: none; /* 隐藏原生滚动条 */
|
|
|
+}
|
|
|
+.nav-list::-webkit-scrollbar {
|
|
|
+ display: none;
|
|
|
+} /* Chrome 隐藏原生滚动条 */
|
|
|
+
|
|
|
+.nav-list li {
|
|
|
+ padding: 0 14px;
|
|
|
+ font-weight: bold;
|
|
|
+ cursor: pointer;
|
|
|
+ font-size: 18px;
|
|
|
+ white-space: nowrap;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ color: #333;
|
|
|
+ height: 100%;
|
|
|
+}
|
|
|
+.nav-list li.active {
|
|
|
+ color: #e1251b;
|
|
|
+}
|
|
|
+.n-ic-img {
|
|
|
+ width: 22px;
|
|
|
+ height: 22px;
|
|
|
+ margin-right: 6px;
|
|
|
+}
|
|
|
+
|
|
|
+/* 场景化类目下拉 (仅小屏) */
|
|
|
+.scene-cat-toggle {
|
|
|
+ position: relative;
|
|
|
+ font-weight: bold;
|
|
|
+ font-size: 18px;
|
|
|
+ cursor: pointer;
|
|
|
+ color: #333;
|
|
|
+}
|
|
|
+.scene-cat-toggle span {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ height: 60px;
|
|
|
+ padding: 0 8px 0 10px;
|
|
|
+}
|
|
|
+.arr-down {
|
|
|
+ display: inline-block;
|
|
|
+ width: 6px;
|
|
|
+ height: 6px;
|
|
|
+ border-right: 2px solid #666;
|
|
|
+ border-bottom: 2px solid #666;
|
|
|
+ transform: rotate(45deg);
|
|
|
+ margin-left: 6px;
|
|
|
+ margin-bottom: 3px;
|
|
|
+ transition: transform 0.2s;
|
|
|
+}
|
|
|
+.scene-cat-toggle:hover .arr-down {
|
|
|
+ transform: rotate(225deg);
|
|
|
+}
|
|
|
+.divider {
|
|
|
+ color: #ccc;
|
|
|
+ padding: 0 4px;
|
|
|
+ font-weight: normal;
|
|
|
+ font-size: 16px;
|
|
|
+}
|
|
|
+
|
|
|
+/* 导航左右滚动控制 */
|
|
|
+.scroll-btn-wrap {
|
|
|
+ position: absolute;
|
|
|
+ top: 0;
|
|
|
+ bottom: 0;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ z-index: 10;
|
|
|
+}
|
|
|
+.scroll-btn-wrap.prev {
|
|
|
+ left: 0;
|
|
|
+ padding-right: 24px;
|
|
|
+ background: linear-gradient(90deg, #fff 50%, rgba(255, 255, 255, 0));
|
|
|
+}
|
|
|
+.scroll-btn-wrap.next {
|
|
|
+ right: 0;
|
|
|
+ padding-left: 24px;
|
|
|
+ background: linear-gradient(270deg, #fff 50%, rgba(255, 255, 255, 0));
|
|
|
+}
|
|
|
+
|
|
|
+.more-btn {
|
|
|
+ width: 28px;
|
|
|
+ height: 28px;
|
|
|
+ border-radius: 50%;
|
|
|
+ background: rgba(0, 0, 0, 0.08);
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ cursor: pointer;
|
|
|
+ color: #666;
|
|
|
+ font-size: 14px;
|
|
|
+ font-weight: bold;
|
|
|
+ flex-shrink: 0;
|
|
|
+}
|
|
|
+.more-btn:hover {
|
|
|
+ background: rgba(0, 0, 0, 0.15);
|
|
|
+}
|
|
|
+
|
|
|
+/* 下方分类与广告 */
|
|
|
+.banner-bottom {
|
|
|
+ display: flex;
|
|
|
+ flex: 1;
|
|
|
+ overflow: visible;
|
|
|
+ padding: 0 10px 10px;
|
|
|
+ gap: 12px;
|
|
|
+ background: transparent;
|
|
|
+ position: relative;
|
|
|
+}
|
|
|
+.side-category {
|
|
|
+ width: 280px;
|
|
|
+ background: transparent;
|
|
|
+ overflow: visible;
|
|
|
+ position: relative;
|
|
|
+ z-index: 1000;
|
|
|
+}
|
|
|
+.side-category.is-dropdown {
|
|
|
+ position: absolute;
|
|
|
+ top: 0;
|
|
|
+ bottom: 10px; /* 补偿 banner-bottom 的 10px 底部 padding */
|
|
|
+ left: 10px; /* 补偿 banner-bottom 的 10px 左侧 padding */
|
|
|
+ z-index: 9999;
|
|
|
+ box-shadow: 4px 8px 24px rgba(0, 0, 0, 0.15);
|
|
|
+}
|
|
|
+
|
|
|
+.ad-group {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ overflow: hidden;
|
|
|
+ height: 100%;
|
|
|
+}
|
|
|
+
|
|
|
+/* 用户列 */
|
|
|
+.user-col {
|
|
|
+ width: 230px;
|
|
|
+ background: #fff;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ flex-shrink: 0;
|
|
|
+ margin: 10px 10px 10px 0;
|
|
|
+ height: calc(100% - 20px);
|
|
|
+ border-radius: 12px;
|
|
|
+ overflow: hidden;
|
|
|
+}
|
|
|
+
|
|
|
+@media screen and (max-width: 1599px) {
|
|
|
+ .banner-layout {
|
|
|
+ height: auto;
|
|
|
+ min-height: 394px;
|
|
|
}
|
|
|
}
|
|
|
</style>
|