Files
crmeb_java/app/pages/index/index.vue
2025-06-24 14:43:09 +08:00

927 lines
25 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<view id="home" :data-theme="theme" :style="[pageStyle]">
<tui-skeleton v-if="showSkeleton"></tui-skeleton>
<!-- 有网内容 -->
<view v-if="!errorNetwork">
<view class="page-index tui-skeleton page_count" :class="{'bgf':navIndex >0}"
:style="{visibility: showSkeleton ? 'hidden' : 'visible'}">
<!-- 组合组件 -->
<homeComb v-if="showHomeComb" :bgInfo="bgInfo" :dataConfig="homeCombData" @changeTab="changeTab" :isScrolled="isScrolled"
:navIndex="navIndex"></homeComb>
<!-- 顶部搜索框 -->
<headerSearch :isScrolled="isScrolled" v-if="showHeaderSerch" :dataConfig="headerSerchCombData"></headerSearch>
<!-- 分类 -->
<cateNav v-if="showCateNav" :dataConfig="cateNavData" @changeTab="changeTab"></cateNav>
<view class="page_content skeleton">
<view v-if="navIndex === 0">
<view v-for="(item, index) in styleConfig" :key="index">
<!-- 新闻简报 -->
<news v-if="item.name == 'news'&&!item.isHide" :dataConfig="item"></news>
<!-- 导航组 -->
<menus v-if="item.name == 'menus'&&!item.isHide" :dataConfig="item"></menus>
<!-- 文章列表 -->
<articleList v-if="item.name == 'homeArticle'&&!item.isHide" :dataConfig="item"></articleList>
<!-- 秒杀 -->
<seckill-data v-if="item.name == 'seckill'&&!item.isHide" :dataConfig="item"></seckill-data>
<!-- 优惠券 -->
<coupon v-if="item.name == 'homeCoupons'&&!item.isHide" :dataConfig="item"></coupon>
<!-- 图片魔方 -->
<pictureCube v-if="item.name == 'pictureCube'&&!item.isHide" :dataConfig="item"></pictureCube>
<!-- 热区 -->
<hotSpot v-if="item.name == 'homeHotspot'&&!item.isHide" :dataConfig="item"></hotSpot>
<!-- 轮播图 -->
<swiperBg v-if="item.name == 'swiperBg'&&!item.isHide" :dataConfig="item"></swiperBg>
<!-- 视频 -->
<shortVideo v-if="item.name == 'video'&&!item.isHide" :dataConfig="item"></shortVideo>
<!-- 拼团 -->
<group v-if="item.name == 'group'&&!item.isHide" :dataConfig="item"></group>
<!-- 砍价 -->
<bargain v-if="item.name == 'bargain'&&!item.isHide" :dataConfig="item"></bargain>
<!-- 辅助线 -->
<guide v-if="item.name == 'guide'&&!item.isHide" :dataConfig="item"></guide>
<!-- 富文本-->
<rich-text-editor v-if="item.name == 'richTextEditor'&&!item.isHide"
:dataConfig="item"></rich-text-editor>
<!-- 辅助空白-->
<blank-page v-if="item.name == 'blankPage'&&!item.isHide" :dataConfig="item"></blank-page>
<!-- 标题 -->
<home-title v-if="item.name == 'titles'&&!item.isHide" :dataConfig="item"></home-title>
<!-- 商品列表 -->
<goodList v-if="item.name == 'goodList'&&!item.isHide" :dataConfig="item" @detail="goDetail"></goodList>
<!-- 选项卡商品列表-->
<homeTab v-if="item.name == 'homeTab'&&!item.isHide" :dataConfig="item" @detail="goDetail"></homeTab>
</view>
</view>
<!-- 分类页-->
<view class="productList" v-if="navIndex === 1 && sortList.length>0">
<view class="sort acea-row" :class="sortList.length ? '' : 'no_pad'"
:style="{ marginTop: sortMarTop + 'px' }">
<navigator hover-class="none"
:url="'/pages/goods/goods_list/index?cid=' + item.id + '&title=' + item.name"
class="item" v-for="(item, index) in sortList" :key="index" v-if="index<9">
<view class="pictrue">
<image :src="item.extra" class='slide-image tui-skeleton-rect'></image>
</view>
<view class="text">{{ item.name }}</view>
</navigator>
<view class="item" @click="bindMore()" v-if="sortList.length >= 9">
<view class="pictrues acea-row row-center-wrapper">
<text class="iconfont icon-gengduo2"></text>
</view>
<view class="text">更多</view>
</view>
</view>
</view>
<!-- 推荐商品分类商品列表-->
<recommend v-if="categoryId>0" ref="recommendIndex" :categoryId='categoryId'
:isShowTitle="isShowTitle" @getRecommendLength="getRecommendLength"></recommend>
<view class='noCommodity' v-if="isNoCommodity&& navIndex > 0">
<view class='pictrue'>
<image :src="urlDomain+'crmebimage/perset/staticImg/noShopper.png'"></image>
</view>
<text class="text-ccc">暂无商品</text>
</view>
<!-- 备案设置 -->
<!-- #ifdef H5 -->
<copyRight></copyRight>
<!-- #endif -->
<!-- 底部导航距离做兼容处理的-->
<view class="footerBottom-h10"></view>
<view class="footerBottom"></view>
</view>
<!-- #ifdef MP -->
<aTip :isCustom="true" :text="wxText" :borderR="5"></aTip>
<!-- #endif -->
</view>
</view>
<!-- 断网内容 -->
<view v-else>
<view class="error-network">
<image class="img" src="./error-network.png"></image>
<view class="title">网络连接断开</view>
<view class="con">
<view class="label">请检查情况</view>
<view class="item">· 在设置中是否已开启网络权限</view>
<view class="item">· 当前是否处于弱网环境</view>
<view class="item">· 版本是否过低升级试试吧</view>
</view>
<view class="btn" @click="reconnect">重新连接</view>
</view>
</view>
<!-- 底部 -->
<pageFooter></pageFooter>
</view>
</template>
<script>
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
import tuiSkeleton from '@/components/base/tui-skeleton.vue';
import Cache from '../../utils/cache';
import homeComb from '@/components/homeIndex/homeComb';
import recommend from "@/components/base/recommend.vue";
import seckillData from "@/components/homeIndex/seckill.vue";
import aTip from './components/addTips.vue';
import coupon from "@/components/homeIndex/coupon.vue";
import menus from "@/components/homeIndex/menus.vue";
import pictureCube from '@/components/homeIndex/pictureCube'
import news from '@/components/homeIndex/news'
import goodList from '@/components/homeIndex/goodList'
import guide from '@/components/homeIndex/guide';
import articleList from '@/components/homeIndex/articleList'
import swiperBg from '@/components/homeIndex/swiperBg'
import headerSearch from '@/components/homeIndex/headerSearch';
import cateNav from '@/components/homeIndex/cateNav';
import richTextEditor from '@/components/homeIndex/richTextEditor';
import shortVideo from '@/components/homeIndex/video';
import homeTab from '@/components/homeIndex/homeTab';
import blankPage from '@/components/homeIndex/blankPage';
import homeTitle from '@/components/homeIndex/title';
import hotSpot from '@/components/homeIndex/hotSpot.vue';
import group from "@/components/homeIndex/group.vue";
import bargain from "@/components/homeIndex/bargain.vue";
import pageFooter from "@/components/pageFooter/index.vue";
import copyRight from './components/copyRight.vue';
import {
getIndexData,
getTheme,
getAppVersion,
getCategoryTwo,
pagediyInfoApi
} from '@/api/api.js';
// #ifdef MP-WEIXIN || APP-PLUS
import {
getTemlIds
} from '@/api/api.js';
// #endif
import {
getShare
} from '@/api/public.js';
import {
mapGetters
} from "vuex";
import {
silenceBindingSpread,
} from '@/utils/index.js';
import animationType from '@/utils/animationType.js'
import {
goProductDetail
} from "../../libs/order";
const arrTemp = ["beforePay", "afterPay", "createBargain", "pink"];
var statusBarHeight = uni.getSystemInfoSync().statusBarHeight + 'px';
let app = getApp();
export default {
computed: mapGetters(['isLogin', 'uid', 'bottomNavigationIsCustom']),
components: {
tuiSkeleton,
aTip,
homeComb,
recommend,
seckillData,
pageFooter,
coupon,
menus,
pictureCube,
news,
goodList,
articleList,
swiperBg,
headerSearch,
cateNav,
guide,
richTextEditor,
shortVideo,
homeTab,
blankPage,
homeTitle,
hotSpot,
group,
bargain,
copyRight
},
data() {
return {
urlDomain: this.$Cache.get("imgHost"),
isNoCommodity: false,
isScrolled: false, //是否开始滚动
categoryId: 0,
showSkeleton: true, //骨架屏显示隐藏
isNodes: 0, //控制什么时候开始抓取元素节点,只要数值改变就重新抓取
statusBarHeight: statusBarHeight,
navIndex: 0, //判断首页显示内容1显示分类页和商品0首页
ProductNavindex: 0,
sortProduct: [],
site_name: '', //首页title
configApi: {}, //分享类容配置
listActive: 0, // 当前选中项
theme: app.globalData.theme,
imgHost: '', //图片域名地址
appUpdate: {},
wxText: "点击添加到我的小程序,微信首页下拉即可访问商城。",
locationContent: '授权位置信息,提供完整服务',
sortMpTop: 0,
// #ifdef APP-PLUS || MP
isFixed: true,
// #endif
// #ifdef H5
isFixed: false,
// #endif
domOffsetTop: 50,
prodeuctTop: 30,
sortList: [],
sortMarTop: 0,
navHeight: 38,
domHeight: 0,
cateNavActive: 0,
couponModal: false,
styleConfig: [], //DIY数据
diyId: 0, //DIYID
smallPage: false, //是否微页面
isHeaderSerch: false,
homeCombData: {}, //组合组件数据
showCateNav: false, //是否显示分类导航组件
cateNavData: {}, //分类导航组件数据
showHomeComb: false, //是否显示组合
showHeaderSerch: false, //是否显示搜索框
headerSerchCombData: {}, //搜索框对象
isShowTitle: false, //是否显示头部标题,同时也判断是否展示分类下的商品列表
bgColor: '', //背景颜色
bgPic: '', //背景图片
bgTabVal: '', //背景图片样式
windowHeight: 0,
pageStyle: {},
isDefault: 1, //是否首页1是0不是
errorNetwork: false, //是否有网络
bgInfo:{
colorPicker:'#f5f5f5',
isBgColor:1,
},
}
},
//下拉刷新
onPullDownRefresh() {
// #ifdef APP-PLUS
setTimeout(() => {
uni.reLaunch({
url: "/pages/index/index"
});
uni.stopPullDownRefresh();
}, 1000)
// #endif
},
onLoad(options) {
// #ifdef APP-PLUS
//app刚进入检测有无网络
this.snycNetWork();
this.getInitTheme();
//APP版本检测
this.appVersionConfig();
// #endif
if (options.spread) this.$Cache.set('spread',options.spread);
if (options.scene) {
let qrCodeValue = this.$util.getUrlParams(decodeURIComponent(options.scene));
let mapeMpQrCodeValue = this.$util.formatMpQrCodeData(qrCodeValue);
app.globalData.spread = mapeMpQrCodeValue.spread;
}
//获取浏览器id
let diyid = 0;
//check
diyid = options.id ? options.id : 0;
//diy数据加载
this.diyData(diyid, false);
//首页数据加载
this.getIndexConfig();
let that = this;
this.$nextTick(function() {
uni.getSystemInfo({
success: function(res) {
that.windowHeight = res.windowHeight;
}
});
})
},
onShow() {
// 分类样式3、4跳回首页tabbar处理
!this.bottomNavigationIsCustom&&uni.showTabBar()
let self = this;
// #ifdef APP-PLUS
setTimeout(() => {
if (self.appUpdate.openUpgrade == 'true') {
self.appVersionConfig();
}
}, 1000)
// #endif
//分销关系绑定,分享需要开启分销员开关,才能绑定成功
this.getTokenIsExist();
},
// 滚动监听
onPageScroll(e) {
// 传入scrollTop值并触发所有easy-loadimage组件下的滚动监听事件
uni.$emit('scroll');
if (e.scrollTop > this.domOffsetTop) {
this.isScrolled = true;
}
if (e.scrollTop < this.domOffsetTop) {
this.$nextTick(() => {
this.isScrolled = false;
});
}
},
methods: {
//校验token是否有效,true为有效false为无效
getTokenIsExist() {
this.$LoginAuth.getTokenIsExist().then(data => {
if (data) {
//绑定关系
silenceBindingSpread();
}
});
},
getInitTheme() {
let that = this;
// 主题变色
getTheme().then(resP => {
this.$Cache.set('theme', `theme${Number(resP.data.value)}`);
})
},
//app刚进入检测有无网络
snycNetWork() {
uni.getNetworkType({
success: res => {
//res.networkType === 'none'无网络
this.errorNetwork = res.networkType === 'none';
//如果没有网络,清除骨架屏
if (this.errorNetwork) this.reloadData();
}
});
},
// 断网后重新链接
reconnect() {
uni.getNetworkType({
success: res => {
this.errorNetwork = res.networkType === 'none';
if (!this.errorNetwork) {
setTimeout(() => {
uni.reLaunch({
url: "/pages/index/index"
});
}, 1000)
}
}
});
},
/**
* 获取DIY
* @param {number} id
* @param {boolean} type 区分是否是微页面
*/
diyData(id, type) {
let that = this;
that.styleConfig = []
uni.showLoading({
title: '加载中...'
});
pagediyInfoApi(id).then(res => {
that.errorNetwork = false;
uni.setNavigationBarTitle({
title: res.data.title
});
uni.setNavigationBarColor({
//必须要16进制小写
frontColor: res.data.titleColor,
backgroundColor: res.data.titleBgColor.toString().toLowerCase(),
})
let data = res.data;
that.diyId = res.data.id;
that.isDefault = data.isDefault; //是否是首页1是0不是
that.styleConfig = that.$util.objToArr(res.data.value);
this.bgInfo.isBgColor=data.isBgColor
this.bgInfo.colorPicker=data.colorPicker
that.pageStyle = {
'background-color': data.isBgColor === 1 ? res.data.colorPicker : '',
'background-image': data.isBgPic === 1 ? `url(${res.data.bgPic})` : '',
'background-repeat': res.data.bgTabVal === 1 ? 'repeat-y' : 'no-repeat',
'background-size': res.data.bgTabVal === 2 ? 'cover' : 'contain'
};
uni.hideLoading();
if (type) {
that.styleConfig.forEach((item) => {
if (item.name == 'headerSerch' || item.name == 'homeComb' || item.name ==
'tabNav') {
that.styleConfig.splice(index, 1);
}
});
} else {
that.styleConfig.forEach((item) => {
if (item.name === 'tabNav'&&!item.isHide) {
that.showCateNav = true;
that.cateNavData = item;
}
if (item.name === 'homeComb'&&!item.isHide) {
that.showHomeComb = true
that.homeCombData = item;
}
if (item.name === 'headerSerch'&&!item.isHide) {
that.showHeaderSerch = true
that.headerSerchCombData = item;
}
});
}
setTimeout(() => {
that.isNodes++;
}, 100);
}).catch(err => {
return that.$util.Tips({
title: err
});
uni.hideLoading();
});
},
bindMore() {
uni.setStorageSync('categoryId', this.categoryId);
uni.switchTab({
url: `/pages/goods_cate/goods_cate`
})
},
getRecommendLength(e) {
this.isNoCommodity = e == 0 ? true : false;
},
// 导航分类切换
changeTab(index, item) {
//type=0微页面1分类2首页
this.cateNavActive = index;
if (item.type == 1) {
this.navIndex = 1;
if (!item.val) {
this.sortList = [];
this.categoryId = 0;
this.$util.Tips({
title: "请在平台端选择商品分类!确保加载商品分类数据。"
});
return;
} else {
getCategoryTwo(item.val).then(res => {
this.sortList = res.data;
// #ifdef H5
self.sortMarTop = 10;
// #endif
});
this.categoryId = item.val;
this.isShowTitle = false;
}
} else if (item.type == 0) {
this.navIndex = 0;
this.isShowTitle = true;
this.categoryId = 0;
if (!item.val) {
return this.$util.Tips({
title: "请在平台端选择微页面链接!确保加载微页面数据。"
});
} else {
this.styleConfig = [];
this.diyData(item.val, true);
}
} else {
this.categoryId = 0;
this.navIndex = 0;
this.styleConfig = [];
this.diyData(item.val, false);
}
},
toNewsList() {
uni.navigateTo({
animationType: animationType.type,
animationDuration: animationType.duration,
url: '/pages/goods/news_list/index'
})
},
//清除骨架屏
reloadData() {
this.showSkeleton = false;
},
getElementData(el, callback) {
uni.createSelectorQuery().in(this).selectAll(el).boundingClientRect().exec((data) => {
callback(data[0]);
});
},
xieyiApp() {
uni.navigateTo({
url: '/pages/users/web_page/index?webUel=https://admin.java.crmeb.net/useragreement/xieyi.html&title=协议内容'
})
},
// #ifdef APP-PLUS
xieyiApp() {
uni.navigateTo({
animationType: animationType.type,
animationDuration: animationType.duration,
url: '/pages/users/web_page/index?webUel=https://admin.java.crmeb.net/useragreement/xieyi.html&title=协议内容'
})
},
// #endif
// #ifdef MP || APP-PLUS
getTemlIds() {
for (var i in arrTemp) {
this.getTem(arrTemp[i]);
}
},
getTem(data) {
getTemlIds({
type: data
}).then(res => {
if (res.data) {
let arr = res.data.map((item) => {
return item.tempId
})
wx.setStorageSync('tempID' + data, arr);
}
});
},
// #endif
// 首页数据
getIndexConfig: function() {
let that = this;
getIndexData().then(res => {
let imgHost = res.data.logoUrl.split('crmebimage')[0];
that.imgHost = imgHost;
that.$Cache.set('imgHost', imgHost );
// #ifdef H5 || APP-PLUS
that.$store.commit("SET_CHATURL", res.data.yzfUrl);
Cache.set('chatUrl', res.data.yzfUrl);
// #endif
that.$Cache.setItem({
name: 'categoryConfig',
value: {
categoryConfig: res.data.categoryPageConfig,
isShowCategory: res.data.isShowCategory
}
});
Cache.setItem({
name: 'chatConfig',
value: {
consumer_hotline: res.data.consumerHotline,
telephone_service_switch: res.data.telephoneServiceSwitch,
wx_chant_independent:res.data.wxChatIndependent
}
});
this.reloadData();
}).catch(err => {
return this.$util.Tips({
title: err
});
});
},
appVersionConfig() {
var that = this;
//app升级
// 获取本地应用资源版本号
getAppVersion().then(res => {
that.$set(that.appUpdate, 'androidAddress', res.data.androidAddress);
that.$set(that.appUpdate, 'appVersion', res.data.appVersion);
that.$set(that.appUpdate, 'iosAddress', res.data.iosAddress);
that.$set(that.appUpdate, 'openUpgrade', res.data.openUpgrade);
plus.runtime.getProperty(plus.runtime.appid, function(inf) {
let nowVersion = (inf.version).split('.').join('');
let appVersion = (res.data.appVersion).split('.').join('');
uni.getSystemInfo({
success: (res) => {
if (appVersion > nowVersion) {
uni.showModal({
title: '更新提示',
content: '发现新版本,是否前去下载?',
showCancel: that.appUpdate.openUpgrade == '1' ?
true : false,
cancelColor: '#eeeeee',
confirmColor: '#FF0000',
success(response) {
if (response.confirm) {
switch (res.platform) {
case "android":
plus.runtime.openURL(that
.appUpdate
.androidAddress);
break;
case "ios":
plus.runtime.openURL(encodeURI(
that.appUpdate
.iosAddress));
break;
}
}
}
});
}
}
})
});
})
},
shareApi: function() {
getShare().then(res => {
this.$set(this, 'configApi', res.data);
this.$set(this, "site_name", res.data.title);
uni.setNavigationBarTitle({
title: this.site_name
})
// #ifdef H5
this.setOpenShare(res.data);
// #endif
})
},
// 微信分享;
setOpenShare: function(data) {
let that = this;
if (that.$wechat.isWeixin()) {
let configAppMessage = {
desc: data.synopsis,
title: data.title,
link: location.href,
imgUrl: data.img
};
that.$wechat.wechatEvevt(["updateAppMessageShareData", "updateTimelineShareData"],
configAppMessage);
}
},
stopTouchMove() {
return true //禁止新闻swiper手动滑动
},
closeDialog() {
this.couponModal = false;
this.$Cache.clear('newGift');
},
goDetail(item) {
goProductDetail(item.id, 0, '')
},
},
mounted() {
let query = uni.createSelectorQuery().in(this);
query.select("#home").boundingClientRect();
query.exec(res => {
this.domHeight = res[0].height;
})
},
/**
* 用户点击右上角分享
*/
// #ifdef MP
onShareAppMessage: function() {
return {
title: this.configApi.title,
imageUrl: this.configApi.img,
desc: this.configApi.synopsis,
path: '/pages/index/index'
};
}
// #endif
}
</script>
<style>
page {
height: auto;
display: flex;
flex-direction: column;
height: 100%;
/* #ifdef H5 */
background-color: #fff;
/* #endif */
}
</style>
<style lang="scss" scoped>
.error-network {
position: fixed;
left: 0;
top: 0;
display: flex;
flex-direction: column;
align-items: center;
width: 100%;
height: 100%;
padding-top: 40rpx;
background: #fff;
padding-top: 30%;
.img {
width: 414rpx;
height: 336rpx;
}
.title {
position: relative;
top: -40rpx;
font-size: 32rpx;
color: #666;
}
.con {
font-size: 24rpx;
color: #999;
.label {
margin-bottom: 20rpx;
}
.item {
margin-bottom: 20rpx;
}
}
.btn {
display: flex;
align-items: center;
justify-content: center;
width: 508rpx;
height: 86rpx;
margin-top: 100rpx;
border: 1px solid #d74432;
color: #e93323;
font-size: 30rpx;
border-radius: 120rpx;
}
}
.ysize {
background-size: 100%;
}
.fullsize {
background-size: 100% 100%;
}
.repeat {
background-repeat: repeat;
}
.noRepeat {
background-repeat: no-repeat;
}
.noCommodity {
margin-top: 30%;
}
.icon-gengduo1 {
color: #F8F8F8;
}
.pageIndex {
padding: 0 24rpx;
}
.productList {
background-color: #F5F5F5;
margin-top: 20rpx;
// min-height: 70vh;
.sort {
width: 710rpx;
max-height: 380rpx;
background: rgba(255, 255, 255, 1);
border-radius: 16rpx;
padding: 0rpx 0rpx 20rpx 0rpx !important;
flex-wrap: wrap;
margin: 25rpx auto 0 auto;
&.no_pad {
padding: 0;
}
.item {
width: 20%;
margin-top: 20rpx;
text-align: center;
.pictrues {
width: 90rpx;
height: 90rpx;
background: #F5F5F5;
border-radius: 50%;
margin: 0 auto;
}
.pictrue {
width: 90rpx;
height: 90rpx;
background: #F5F5F5;
border-radius: 50%;
margin: 0 auto;
}
.slide-image {
width: 90rpx;
height: 90rpx;
border-radius: 50%;
overflow: hidden;
}
/deep/ .easy-loadimage,
uni-image,
.easy-loadimage {
width: 90rpx;
height: 90rpx;
display: inline-block;
}
.text {
color: #272727;
font-size: 24rpx;
margin-top: 10rpx;
// overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
}
}
}
.productList .list {
padding: 0 20rpx;
}
.productList .list.on {
background-color: #fff;
border-top: 1px solid #f6f6f6;
}
.productList .list .item {
width: 345rpx;
margin-top: 20rpx;
background-color: #fff;
border-radius: 10rpx;
.name {
display: flex;
align-items: center;
.name_text {
display: inline-block;
max-width: 200rpx;
}
}
}
.page-index {
display: flex;
flex-direction: column;
min-height: 100%;
.page_content {
overflow: hidden;
// background-color: #f5f5f5;
.swiper {
position: relative;
width: 100%;
height: 246rpx;
margin: 0 auto;
border-radius: 10rpx;
overflow: hidden;
margin-bottom: 25rpx;
/* #ifdef MP */
margin-top: 20rpx;
/* #endif */
swiper,
swiper-item,
.slide-image,
image {
width: 100%;
height: 246rpx;
border-radius: 10rpx;
}
}
}
}
.fixed {
z-index: 100;
position: fixed;
left: 0;
top: 0;
background: linear-gradient(90deg, red 50%, #ff5400 100%);
}
.menu-txt {
font-size: 24rpx;
color: #454545;
}
.footerBottom-h10 {
height: 20rpx;
}
</style>