mall-uniapp/pages/index/index.vue

1330 lines
30 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view>
<view class="page-index" :class="{'bgf':navIndex >0}">
<!-- #ifdef H5 -->
<view class="header">
<view class="serch-wrapper flex">
<view class="logo">
<image :src="logoUrl" mode="" />
</view>
<navigator url="/pages/goods_search/index" class="input" hover-class="none">
<text class="iconfont icon-xiazai5" /> 搜索商品
</navigator>
</view>
</view>
<!-- #endif -->
<!-- #ifdef MP -->
<view class="mp-header">
<view class="sys-head" :style="{ height: statusBarHeight }"></view>
<view class="serch-box" style="height: 40px;">
<view class="serch-wrapper flex">
<view class="logo">
<image :src="logoUrl" mode=""></image>
</view>
<navigator url="/pages/goods_search/index" class="input" hover-class="none"><text
class="iconfont icon-xiazai5"></text>
搜索商品</navigator>
</view>
</view>
</view>
<!-- #endif -->
<!-- 首页展示 -->
<view class="page_content" :style="'margin-top:'+(marTop)+'px;'" v-if="navIndex == 0">
<view class="mp-bg"></view>
<!-- banner -->
<view class="swiper" v-if="imgUrls.length">
<swiper indicator-dots="true" :autoplay="true" :circular="circular" :interval="interval"
:duration="duration" indicator-color="rgba(255,255,255,0.6)" indicator-active-color="#fff">
<block v-for="(item,index) in imgUrls" :key="index">
<swiper-item>
<navigator :url='item.url' class='slide-navigator acea-row row-between-wrapper'
hover-class='none'>
<image :src="item.pic" class="slide-image" lazy-load></image>
</navigator>
</swiper-item>
</block>
</swiper>
</view>
<!-- 新闻简报 -->
<view class='notice acea-row row-middle row-between' v-if="roll.length">
<view class="pic">
<image src="/static/images/xinjian.png"></image>
</view>
<text class='line'>|</text>
<view class='swipers'>
<swiper :indicator-dots="indicatorDots" :autoplay="autoplay" interval="2500" duration="500" vertical="true"
circular="true">
<block v-for="(item,index) in roll" :key='index'>
<swiper-item>
<navigator class='item' :url='item.url' hover-class='none'>
<view class='line1'>{{item.info}}</view>
</navigator>
</swiper-item>
</block>
</swiper>
</view>
<view class="iconfont icon-xiangyou"></view>
</view>
<!-- menu -->
<view class='nav acea-row' v-if="menus.length">
<block v-for="(item,index) in menus" :key="index">
<navigator class='item' v-if="item.show == '1'" :url='item.url' open-type='switchTab'
hover-class='none'>
<view class='pictrue'>
<image :src='item.pic'></image>
</view>
<view class="menu-txt">{{item.name}}</view>
</navigator>
<navigator class='item' v-else :url='item.url' hover-class='none'>
<view class='pictrue'>
<image :src='item.pic'></image>
</view>
<view class="menu-txt">{{item.name}}</view>
</navigator>
</block>
</view>
<!-- 优惠券 -->
<view class="couponIndex" v-if="couponList.length>0">
<view class="acea-row" style="height: 100%;">
<view class="titBox">
<view class="tit1">领取优惠券</view>
<view class="tit2">福利大礼包,省了又省</view>
<navigator class='item' url='/pages/users/user_get_coupon/index' hover-class='none'>
<view class="tit3">查看全部 <text class="iconfont icon-xiangyou"></text></view>
</navigator>
</view>
<view class="listBox acea-row">
<view class="list" :class='item.isUse ? "listHui" : "listActive" ' v-for="(item, index) in couponList.slice(0,2)" :key="index">
<view class="tit line1" :class='item.isUse ? "pricehui" : "titActive" '>{{item.name}}</view>
<view class="price" :class='item.isUse ? "pricehui" : "icon-color" '>{{item.money?Number(item.money):''}}<text class="yuan"></text></view>
<view class="ling" v-if="!item.isUse" :class='item.isUse ? "pricehui" : "icon-color" ' @click="getCoupon(item.id,index)">领取</view>
<view class="ling" v-else :class='item.isUse ? "pricehui fonthui" : "icon-color" '>已领取</view>
<view class="priceM">满{{item.minPrice?Number(item.minPrice):''}}元可用</view>
</view>
</view>
</view>
</view>
<!-- 营销活动 -->
<a_seckill />
<b_combination />
<c_bargain />
<!-- 首页推荐 -->
<view class="sticky-box" :style="'top:'+(marTop)+'px;'">
<scroll-view class="scroll-view_H" style="width: 100%;" scroll-x="true" scroll-with-animation
:scroll-left="tabsScrollLeft" @scroll="scroll">
<view class="tab nav-bd" id="tab_list">
<view id="tab_item" :class="{ 'active': listActive == index}" class="item"
v-for="(item, index) in explosiveMoney" :key="index" @click="ProductNavTab(item,index)">
<view class="txt">{{item.name}}</view>
<view class="label">{{item.info}}</view>
</view>
</view>
</scroll-view>
</view>
<!-- 首发新品 -->
<view class="index-product-wrapper" :class="iSshowH?'on':''">
<view class="list-box animated" :class='tempArr.length > 0?"fadeIn on":""'>
<view class="item" v-for="(item,index) in tempArr" :key="index" @click="goDetail(item)">
<view class="pictrue">
<span class="pictrue_log pictrue_log_class"
v-if="item.activityList && item.activityList[0] && item.activityList[0].type === 1">秒杀</span>
<span class="pictrue_log pictrue_log_class"
v-if="item.activityList && item.activityList[0] && item.activityList[0].type === 2">砍价</span>
<span class="pictrue_log pictrue_log_class"
v-if="item.activityList && item.activityList[0] && item.activityList[0].type === 3">拼团</span>
<image :src="item.picUrl" mode="" />
</view>
<view class="text-info">
<view class="title line1">{{ item.name }}</view>
<view class="old-price"><text>¥{{ fen2yuan(item.marketPrice) }}</text></view>
<view class="price">
<text>¥</text>{{ fen2yuan(item.price) }}
</view>
</view>
</view>
</view>
<view class='loadingicon acea-row row-center-wrapper' v-if="goodScroll">
<text class='loading iconfont icon-jiazai' :hidden='!loading' />
</view>
<view class="mores-txt flex" v-if="!goodScroll">
<text>我是有底线的</text>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import Cache from '../../utils/cache';
var statusBarHeight = uni.getSystemInfoSync().statusBarHeight + 'px';
let app = getApp();
import {
getIndexData,
getCoupons,
setCouponReceive
} from '@/api/api.js';
// #ifdef MP-WEIXIN
import { getTemlIds } from '@/api/api.js';
// #endif
import {
getShare
} from '@/api/public.js';
import a_seckill from './components/a_seckill';
import b_combination from './components/b_combination';
import c_bargain from './components/c_bargain';
import goodList from '@/components/goodList';
import promotionGood from '@/components/promotionGood';
import { goShopDetail } from '@/libs/order.js'
import {
mapGetters
} from "vuex";
import tabNav from '@/components/tabNav.vue'
import countDown from '@/components/countDown';
import { getProductHot, } from '@/api/store.js';
import recommend from '@/components/recommend';
import {
silenceBindingSpread
} from '@/utils';
import Loading from '@/components/Loading/index.vue';
import * as ProductSpuApi from '@/api/product/spu.js';
import * as PromotionActivityApi from '@/api/promotion/activity.js';
import * as ProductUtil from '@/utils/product.js';
import * as Util from '@/utils/util.js';
const arrTemp = ["beforePay", "afterPay", "refundApply", "beforeRecharge", "createBargain", "pink"];
export default {
computed: mapGetters(['isLogin', 'uid']),
components: {
tabNav,
goodList,
promotionGood,
countDown,
a_seckill,
b_combination,
c_bargain,
recommend,
Loading
},
data() {
return {
loaded: false,
loading: false,
statusBarHeight: statusBarHeight,
navIndex: 0,
navTop: [],
logoUrl: "",
imgUrls: [],
itemNew: [],
menus: [],
bastInfo: '',
fastInfo: '',
fastList: [],
firstInfo: '',
salesInfo: '',
indicatorDots: false,
circular: true,
autoplay: true,
interval: 3000,
duration: 500,
window: false,
iShidden: false,
navH: "",
newGoodsBananr: '',
couponList: [],
liveList: [],
hotList: [{
pic: '/static/images/hot_001.png'
}, {
pic: '/static/images/hot_002.png'
}, {
pic: '/static/images/hot_003.png'
}],
marTop: 0,
loadend: false,
loadTitle: '加载更多',
sortProduct: [],
where: {
cid: 0,
page: 1,
limit: 10,
},
is_switch: true,
hotPage: 1,
hotLimit: 10,
hotScroll: false,
explosiveMoney: [],
prodeuctTop: 0,
searchH: 0,
isFixed: false,
roll: [], // 新闻简报
site_name: '', //首页title
iSshowH: false,
configApi: {}, //分享类容配置
spikeList: [], // 秒杀
point: '',
privacyStatus: false, // 隐私政策是否同意过
tabsScrollLeft: 0, // tabs当前偏移量
scrollLeft: 0,
lineColor: 'red',
lineStyle: {}, // 下划线位置--动态甲酸
listActive: 0, // 当前选中项
duration: 0.2, // 下划线动画时长
// ========== 精品推荐 ===========
goodScroll: true, // 精品推荐开关
ProductNavindex: 0,
goodType: 1, //精品推荐 Type
params: { //精品推荐分页
page: 1,
limit: 10,
},
tempArr: [], // 精品推荐临时数组
}
},
watch: {
ProductNavindex(newVal) { // 监听当前选中项
this.setTabList()
},
listActive(newVal) { // 监听当前选中项
this.setTabList()
}
},
mounted() {
this.setTabList()
},
onLoad() {
var that = this;
// 获取系统信息
uni.getSystemInfo({
success(res) {
that.$store.commit("SYSTEM_PLATFORM", res.platform);
}
});
uni.getLocation({
type: 'gcj02',
altitude: true,
geocode: true,
success: function(res) {
try {
uni.setStorageSync('user_latitude', res.latitude);
uni.setStorageSync('user_longitude', res.longitude);
} catch {}
}
});
let self = this
// #ifdef MP
// 获取小程序头部高度
this.navH = app.globalData.navHeight;
let info = uni.createSelectorQuery().select(".mp-header");
info.boundingClientRect(function(data) {
self.marTop = data.height
self.poTop = Number(data.height) + 84
}).exec()
// #endif
// #ifndef MP
this.navH = 0;
// #endif
this.isLogin && silenceBindingSpread();
// Promise.all([this.getAllCategory(), this.getIndexConfig()
// // , this.setVisit()
// ]);
this.getIndexConfig();
// #ifdef MP
this.getTemlIds()
// #endif
},
onShow() {
let self = this
uni.setNavigationBarTitle({
title: self.site_name
})
},
methods: {
getCoupon: function(id, index) {
let that = this;
//领取优惠券
setCouponReceive(id).then(function(res) {
that.$set(that.couponList[index], 'isUse', true);
that.$util.Tips({
title: '领取成功'
});
}, function(res) {
return that.$util.Tips({
title: res
});
})
},
clickSort(index) {
this.listActive = index
},
// scroll-view滑动事件
scroll(e) {
this.scrollLeft = e.detail.scrollLeft;
},
setTabList() {
this.$nextTick(() => {
//this.setLine()
this.scrollIntoView()
})
},
// 计算tabs位置
scrollIntoView() { // item滚动
let lineLeft = 0;
this.getElementData('#tab_list', (data) => {
let list = data[0]
this.getElementData(`#tab_item`, (data) => {
let el = data[this.listActive]
lineLeft = el.width / 2 + (-list.left) + el.left - list.width / 2 - this.scrollLeft
this.tabsScrollLeft = this.scrollLeft + lineLeft
})
})
},
// 计算下划线位置
setLine() {
let lineWidth = 0,
lineLeft = 0
this.getElementData(`#tab_item`, (data) => {
let el = data[this.listActive]
lineWidth = el.width / 2
// lineLeft = el.width * (this.currentIndex + 0.5) // 此种只能针对每个item长度一致的
lineLeft = el.width / 2 + (-data[0].left) + el.left
this.lineStyle = {
width: `${lineWidth}px`,
transform: `translateX(${lineLeft}px) translateX(-50%)`,
transitionDuration: `${this.duration}s`
};
})
},
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 MP
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 => {
uni.setNavigationBarTitle({
title: '首页'
})
that.$set(that, "logoUrl", res.data.logoUrl);
that.$set(that, "site_name", '首页');
that.$set(that, "imgUrls", res.data.banner);
that.$set(that, "menus", res.data.menus);
that.$set(that, "roll", res.data.roll ? res.data.roll : []);
// #ifdef H5
that.$store.commit("SET_CHATURL", res.data.yzfUrl);
Cache.set('chatUrl', res.data.yzfUrl);
// #endif
that.$set(that, "explosiveMoney", res.data.explosiveMoney);
that.goodType = parseInt(res.data.explosiveMoney[0].type)
this.getGroomList();
this.shareApi();
this.getcouponList();
// #ifdef H5
// that.subscribe = res.data.subscribe;
// #endif
})
},
getcouponList() {
let that = this;
getCoupons({
page: 1,
limit: 6
}).then(res => {
that.$set(that, "couponList", res.data);
// 小程序判断用户是否授权;
// #ifdef MP
uni.getSetting({
success(res) {
if (!res.authSetting['scope.userInfo']) {
that.window = that.couponList.length ? true : false;
} else {
that.window = false;
that.iShidden = true;
}
}
});
// #endif
// #ifndef MP
if (that.isLogin) {
that.window = false;
} else {
that.window = res.data.length ? true : false;
}
// #endif
}).catch(err => {
return this.$util.Tips({
title: err
});
});
},
shareApi: function() {
getShare().then(res => {
this.$set(this, 'configApi', res.data);
// #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);
}
},
// ========== 精品推荐 ===========
/**
* 首发新品切换
*/
ProductNavTab(item, index) {
this.listActive = index
this.goodType = parseInt(item.type)
this.listActive = index
this.ProductNavindex = index
this.tempArr = []
this.params.page = 1
this.goodScroll = true
let onloadH = true
this.getGroomList(onloadH)
},
/**
* 商品精品推荐
*/
getGroomList(onloadH) {
if (!this.goodScroll) {
return
}
if (onloadH) {
this.iSshowH = true
}
this.loading = true
const type = this.goodType === 1 ? 'best' :
this.goodType === 2 ? 'hot' :
this.goodType === 3 ? 'new' :
this.goodType === 4 ? 'benefit':
this.goodType === 5 ? 'good': ''
ProductSpuApi.getSpuPage({
recommendType: type,
pageNo: this.params.page,
pageSize: this.params.limit
}).then(res => {
const good_list = res.data.list;
this.iSshowH = false
this.loading = false
this.goodScroll = good_list.length >= this.params.limit
this.params.page++
// 设置营销活动
const spuIds = good_list.map(item => item.id);
if (spuIds.length > 0) {
PromotionActivityApi.getActivityListBySpuIds(spuIds).then(res => {
ProductUtil.setActivityList(good_list, res.data);
this.tempArr = this.tempArr.concat(good_list); // 放在此处,避免 Vue 监控不到数组里的元素变化
});
}
})
},
/**
* 前往商品详情
*/
goDetail(item) {
goShopDetail(item, this.uid).then(res => {
uni.navigateTo({
url: `/pages/goods_details/index?id=${item.id}`
})
})
},
/**
* 获取我的推荐 TODO 芋艿:没实现
*/
get_host_product: function() {
let that = this;
that.loading = true;
if (that.hotScroll) return
getProductHot(
that.hotPage,
that.hotLimit,
).then(res => {
that.hotPage++
that.hotScroll = res.data.list.length < that.hotLimit
that.hostProduct = that.hostProduct.concat(res.data.list)
});
},
fen2yuan(price) {
return Util.fen2yuan(price)
}
},
mounted() {
let self = this
// #ifdef H5
// 获取H5 搜索框高度
let appSearchH = uni.createSelectorQuery().select(".serch-wrapper");
appSearchH.boundingClientRect(function(data) {
self.searchH = data.height
}).exec()
// #endif
},
/**
* 用户点击右上角分享
*/
// #ifdef MP
onShareAppMessage: function() {
return {
title: this.configApi.title,
imageUrl: this.configApi.img,
desc: this.configApi.synopsis,
path: '/pages/index/index'
};
},
// #endif
onReachBottom() {
if (this.navIndex == 0) {
// 首页加载更多
if (this.params.page != 1) {
this.getGroomList();
}
} else {
// 分类栏目加载更多
if (this.sortProduct.length > 0) {
//this.get_product_list();
} else {
this.get_host_product();
}
}
},
}
</script>
<style>
page {
display: flex;
flex-direction: column;
height: 100%;
/* #ifdef H5 */
background-color: #fff;
/* #endif */
}
</style>
<style lang="scss">
.notice{
width: 100%;
height: 70rpx;
border-radius: 10rpx;
background-color: #fff;
margin-bottom: 25rpx;
line-height: 70rpx;
padding: 0 14rpx;
.line {
color: #CCCCCC;
}
.pic{
width: 130rpx;
height: 36rpx;
image{
width: 100%;
height: 100%;
display: block !important;
}
}
.swipers {
height: 100%;
width: 444rpx;
overflow: hidden;
swiper {
height: 100%;
width: 100%;
overflow: hidden;
font-size: 22rpx;
color: #333333;
}
}
.iconfont {
color: #999999;
font-size: 20rpx;
}
}
.couponIndex {
width: auto;
height: 238rpx;
background-image: url('~@/static/images/yhjsy.png');
background-size: 100% 100%;
padding-left: 42rpx;
margin-bottom: 30rpx;
.titBox {
padding: 47rpx 0;
text-align: center;
height: 100%;
.tit1 {
color: #FFEBD2;
font-size: 34rpx;
font-weight: 600;
}
.tit2 {
color: #FFEBD2;
font-size: 22rpx;
margin:10rpx 0 26rpx 0;
}
.tit3 {
color: #FFDAAF;
font-size: 24rpx;
.iconfont {
font-size: 20rpx;
}
}
}
.listBox {
padding: 14rpx 0;
.listActive {
background-image: url('~@/static/images/lingyhj.png');
background-size: 100% 100%;
}
.listHui {
background-image: url('~@/static/images/weiling.png');
background-size: 100% 100%;
}
.list {
width: 170rpx;
height: 210rpx;
padding: 16rpx 0;
text-align: center;
margin-left: 24rpx;
.tit {
font-size: 18rpx;
padding: 0 26rpx;
}
.titActive {
color: #C99959;
}
.price {
font-size: 46rpx;
font-weight: 900;
margin-top: 4rpx;
}
.pricehui {
color: #B2B2B2;
}
.fonthui{
background-color: #F5F5F5 !important;
}
.yuan {
font-size: 24rpx;
}
.ling {
font-size: 24rpx;
margin-top: 9.5rpx;
width: 102rpx;
height: 36rpx;
line-height: 36rpx;
background-color: #FFE5C7;
border-radius: 28rpx;
margin: auto;
}
.priceM {
color: #FFDAAF;
font-size: 22rpx;
margin-top: 14rpx;
}
}
}
}
.sticky-box {
/* #ifndef APP-PLUS-NVUE */
display: flex;
position: -webkit-sticky;
/* #endif */
position: sticky;
/* #ifdef H5*/
top: var(--window-top);
/* #endif */
z-index: 99;
flex-direction: row;
margin: 0px;
background: #f5f5f5;
padding: 30rpx 0;
}
.listAll {
width: 20%;
text-indent: 62rpx;
font-size: 30rpx;
border-left: 1px #eee solid;
margin: 1% 0;
padding: 5rpx;
position: relative;
image {
position: absolute;
left: 20rpx;
top: 8rpx;
}
}
.tab {
position: relative;
display: flex;
font-size: 28rpx;
white-space: nowrap;
&__item {
flex: 1;
padding: 0 20rpx;
text-align: center;
height: 60rpx;
line-height: 60rpx;
color: #666;
&.active {
color: #09C2C9;
}
}
}
.tab__line {
display: block;
height: 6rpx;
position: absolute;
bottom: 0;
left: 0;
z-index: 1;
border-radius: 3rpx;
position: relative;
background: #2FC6CD;
}
.scroll-view_H {
/* <br> 标签为止 */
white-space: nowrap;
width: 100%;
}
.privacy-wrapper {
z-index: 999;
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 100%;
background: #7F7F7F;
.privacy-box {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
width: 560rpx;
padding: 50rpx 45rpx 0;
background: #fff;
border-radius: 20rpx;
.title {
text-align: center;
font-size: 32rpx;
text-align: center;
color: #333;
font-weight: 700;
}
.content {
margin-top: 20rpx;
line-height: 1.5;
font-size: 26rpx;
color: #666;
text-indent: 54rpx;
i {
font-style: normal;
color: $theme-color;
}
}
.btn-box {
margin-top: 40rpx;
text-align: center;
font-size: 30rpx;
.btn-item {
height: 82rpx;
line-height: 82rpx;
background: linear-gradient(90deg, #F67A38 0%, #F11B09 100%);
color: #fff;
border-radius: 41rpx;
}
.btn {
padding: 30rpx 0;
}
}
}
}
.page-index {
display: flex;
flex-direction: column;
min-height: 100%;
background: linear-gradient(180deg, #fff 0%, #f5f5f5 100%);
.header {
width: 100%;
background-color: $theme-color;
padding: 28rpx 30rpx;
.serch-wrapper {
align-items: center;
.logo {
width: 118rpx;
height: 42rpx;
margin-right: 24rpx;
}
image {
width: 118rpx;
height: 42rpx;
}
.input {
display: flex;
align-items: center;
width: 546rpx;
height: 58rpx;
padding: 0 0 0 30rpx;
background: rgba(247, 247, 247, 1);
border: 1px solid rgba(241, 241, 241, 1);
border-radius: 29rpx;
color: #BBBBBB;
font-size: 26rpx;
.iconfont {
margin-right: 20rpx;
font-size: 26rpx;
color: #666666;
}
}
}
.tabNav {
padding-top: 24rpx;
}
}
/* #ifdef MP */
.mp-header {
z-index: 999;
position: fixed;
left: 0;
top: 0;
width: 100%;
/* #ifdef H5 */
padding-bottom: 20rpx;
/* #endif */
background-color: $theme-color;
.serch-wrapper {
height: 100%;
align-items: center;
padding: 0 50rpx 0 53rpx;
image {
width: 118rpx;
height: 42rpx;
margin-right: 30rpx;
}
.input {
display: flex;
align-items: center;
/* #ifdef MP */
width: 305rpx;
/* #endif */
height: 50rpx;
padding: 0 0 0 30rpx;
background: rgba(247, 247, 247, 1);
border: 1px solid rgba(241, 241, 241, 1);
border-radius: 29rpx;
color: #BBBBBB;
font-size: 28rpx;
.iconfont {
margin-right: 20rpx;
}
}
}
}
/* #endif */
.page_content {
background-color: #f5f5f5;
/* #ifdef H5 */
// margin-top: 20rpx !important;
/* #endif */
padding: 0 30rpx;
.swiper {
position: relative;
width: 100%;
height: 280rpx;
margin: 0 auto;
border-radius: 10rpx;
overflow: hidden;
margin-bottom: 25rpx;
/* #ifdef MP */
z-index: 10;
margin-top: 20rpx;
/* #endif */
swiper,
.swiper-item,
image {
width: 100%;
height: 280rpx;
border-radius: 10rpx;
}
}
.nav {
padding-bottom: 26rpx;
background: #fff;
opacity: 1;
border-radius: 14rpx;
width: 100%;
margin-bottom: 30rpx;
.item {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
width: 20%;
margin-top: 30rpx;
image {
width: 82rpx;
height: 82rpx;
}
}
}
.nav-bd {
display: flex;
align-items: center;
justify-content: space-between;
.item {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
.txt {
font-size: 32rpx;
color: #282828;
}
.label {
display: flex;
align-items: center;
justify-content: center;
width: 124rpx;
height: 32rpx;
margin-top: 5rpx;
font-size: 24rpx;
color: #999;
}
&.active {
color: $theme-color;
.txt {
color: $theme-color;
}
.label {
background: linear-gradient(90deg, $bg-star 0%, $bg-end 100%);
border-radius: 16rpx;
color: #fff;
}
}
}
}
.index-product-wrapper {
margin-bottom: 110rpx;
&.on {
min-height: 1500rpx;
}
.list-box {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
.item {
width: 335rpx;
margin-bottom: 20rpx;
background-color: #fff;
border-radius: 10rpx;
overflow: hidden;
image {
width: 100%;
height: 330rpx;
}
.text-info {
padding: 10rpx 20rpx 15rpx;
.title {
color: #222222;
}
.old-price {
margin-top: 8rpx;
font-size: 26rpx;
color: #AAAAAA;
text-decoration: line-through;
text {
margin-right: 2px;
font-size: 20rpx;
}
}
.price {
display: flex;
align-items: flex-end;
color: $theme-color;
font-size: 34rpx;
font-weight: 800;
text {
padding-bottom: 4rpx;
font-size: 24rpx;
font-weight: 800;
}
.txt {
display: flex;
align-items: center;
justify-content: center;
width: 28rpx;
height: 28rpx;
margin-left: 15rpx;
margin-bottom: 10rpx;
border: 1px solid $theme-color;
border-radius: 4rpx;
font-size: 22rpx;
font-weight: normal;
}
}
}
}
&.on {
display: flex;
}
}
}
}
}
.productList {
/* #ifdef H5 */
padding-bottom: 140rpx;
/* #endif */
}
.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;
}
.productList .list .item.on {
width: 100%;
display: flex;
border-bottom: 1rpx solid #f6f6f6;
padding: 30rpx 0;
margin: 0;
}
.productList .list .item .pictrue {
position: relative;
width: 100%;
height: 345rpx;
}
.productList .list .item .pictrue.on {
width: 180rpx;
height: 180rpx;
}
.productList .list .item .pictrue image {
width: 100%;
height: 100%;
border-radius: 20rpx 20rpx 0 0;
}
.productList .list .item .pictrue image.on {
border-radius: 6rpx;
}
.productList .list .item .text {
padding: 20rpx 17rpx 26rpx 17rpx;
font-size: 30rpx;
color: #222;
}
.productList .list .item .text.on {
width: 508rpx;
padding: 0 0 0 22rpx;
}
.productList .list .item .text .money {
font-size: 26rpx;
font-weight: bold;
margin-top: 8rpx;
}
.productList .list .item .text .money.on {
margin-top: 50rpx;
}
.productList .list .item .text .money .num {
font-size: 34rpx;
}
.productList .list .item .text .vip {
font-size: 22rpx;
color: #aaa;
margin-top: 7rpx;
}
.productList .list .item .text .vip.on {
margin-top: 12rpx;
}
.productList .list .item .text .vip .vip-money {
font-size: 24rpx;
color: #282828;
font-weight: bold;
}
.productList .list .item .text .vip .vip-money image {
width: 46rpx;
height: 21rpx;
margin-left: 4rpx;
}
.pictrue {
position: relative;
}
.fixed {
z-index: 100;
position: fixed;
left: 0;
top: 0;
background: linear-gradient(90deg, red 50%, #ff5400 100%);
}
.mores-txt {
width: 100%;
align-items: center;
justify-content: center;
height: 70rpx;
color: #999;
font-size: 24rpx;
.iconfont {
margin-top: 2rpx;
font-size: 20rpx;
}
}
.menu-txt {
font-size: 24rpx;
color: #454545;
}
.mp-bg {
position: absolute;
left: 0;
/* #ifdef H5 */
top: 98rpx;
/* #endif */
width: 100%;
height: 304rpx;
background: linear-gradient(180deg, #E93323 0%, #F5F5F5 100%, #751A12 100%);
// border-radius: 0 0 30rpx 30rpx;
}
</style>