1630 lines
45 KiB
Vue
1630 lines
45 KiB
Vue
<template>
|
||
<view class="whole">
|
||
<view class="home">
|
||
<!-- 搜索框 -->
|
||
<view class="tou">
|
||
<view style="background: #fff;padding: 0 0 2rpx 0;box-sizing: border-box;">
|
||
<view class="searchBox flex1">
|
||
<view class="box" @click="toSearch">
|
||
<up-icon name="search" size="18" color="#656565"></up-icon>
|
||
<text> 请输入搜索关键词</text>
|
||
</view>
|
||
</view>
|
||
|
||
<template v-if="loading1">
|
||
<view style="display: flex;align-items: center;height: 60rpx;justify-content: space-between;padding: 0 20rpx;">
|
||
<view style="display: flex;">
|
||
<view class="skeleton" style="width: 120rpx;height: 40rpx;margin-right: 20rpx;"></view>
|
||
<view class="skeleton" style="width: 120rpx;height: 40rpx;margin-right: 20rpx;"></view>
|
||
<view class="skeleton" style="width: 120rpx;height: 40rpx;margin-right: 20rpx;"></view>
|
||
</view>
|
||
<view class="skeleton" style="width: 120rpx;height: 40rpx;margin-left: 20rpx;"></view>
|
||
</view>
|
||
</template>
|
||
<view v-if="home_page_rule === 0 && !loading1" class="home-top table">
|
||
<view class="bbox">
|
||
<view class="adbox" id="adbox">
|
||
<view @click="onClickTab(0)" class="li" :class="active === 0 ? 'border' : ''">首页</view>
|
||
<view v-for="(item, index) in adList" :key="index" :class="active === index + 1 ? 'border' : ''" @click="onClickAd(item.link, item.top_bar_title, item.id, index)" class="li">
|
||
{{item.top_bar_title}}
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="assort flex" @click="openTabs()" v-if="showArrow">
|
||
<up-icon v-if="showDown" name="arrow-up" color="#BFBFBF"></up-icon>
|
||
<up-icon v-else name="arrow-down" color="#BFBFBF"></up-icon>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
<!-- 工厂好货-团购商品 -->
|
||
<view v-if="active == 0">
|
||
<view class="skeleton" v-if="loading2" style="width: 100%;height: 285rpx;"></view>
|
||
<view class="home-top" v-else>
|
||
<swiper v-if="swiperList.length !== 0" :style="{'height': swiperH + 'px'}" class="home-top-swiper" :autoplay="true" :interval="5000" :duration="500" :indicator-dots="true" :circular="true">
|
||
<swiper-item v-for="(item, index) in swiperList" :key="index">
|
||
<image class="item_img" mode="widthFix" :src="item.pic_url + '?x-oss-process=image/format,webp'"
|
||
:webp="true" @click="onSwiperItem(item.link, item.id)" @load="computeHeight">
|
||
</image>
|
||
</swiper-item>
|
||
</swiper>
|
||
</view>
|
||
|
||
<view class="shop" v-if="home_page_rule === 0">
|
||
<view v-if="loading3" style="display: flex;padding: 28rpx 20rpx;justify-content:space-around">
|
||
<view v-for="i in 5" :key="i"
|
||
style="display: flex;align-items: center;justify-content: center;flex-direction: column;">
|
||
<view class="skeleton" style="width: 50px;height: 50px;margin-bottom: 7px;border-radius: 50%;"></view>
|
||
<view class="skeleton" style="width: 90rpx;height: 30rpx;"></view>
|
||
</view>
|
||
</view>
|
||
<view class="shop-group" v-if="groupList.length !== 0 && !loading3" :class="banner_icon == 1 ? 'per20' : ''">
|
||
<view class="shop-group-item" v-for="(item, index) in groupList" :key="index" @click="toRemmend(item.link, item.top_bar_title, item.id)">
|
||
<image :src="item.pic_url + '?x-oss-process=image/format,webp'" :webp="true" class="img" mode="aspectFill"></image>
|
||
<view class="tit">{{item.top_bar_title}}</view>
|
||
</view>
|
||
</view>
|
||
|
||
<view v-if="loading4" style="display: flex;padding: 16rpx 0;flex-wrap: wrap;">
|
||
<view v-for="i in 4" :key="i" style="width: 50%;height: 97px;padding: 5px;box-sizing: border-box;">
|
||
<view class="skeleton" style="width: 100%;height: 100%;"></view>
|
||
</view>
|
||
</view>
|
||
<view class="salebox" v-if="rankList.length !== 0 && !loading4">
|
||
<template v-for="(item, index) in rankList" :key="index">
|
||
<view class="row" :class="banner_rank == 0 ? 'per100' : banner_rank == 1 ? '' : 'per33'" @click="hanleRank(item.link, item.id)">
|
||
<image :src="item.pic_url + '?x-oss-process=image/format,webp'" :webp="true" mode="widthFix" class="img"></image>
|
||
</view>
|
||
</template>
|
||
</view>
|
||
|
||
<!-- 日期推荐位 -->
|
||
<view style="padding: 0 16rpx;" v-if="loading5">
|
||
<view class="skeleton" style="width: 100%;height: 75px;"></view>
|
||
<view style="display: flex;padding: 20rpx 16rpx;flex-wrap: wrap;justify-content:space-between">
|
||
<view v-for="i in 6" :key="i"
|
||
style="display: flex;align-items: center;justify-content: center;width: 30%;flex-direction: column;margin-bottom: 20rpx;">
|
||
<view class="skeleton" style="width: 200rpx;height: 200rpx;margin-bottom: 10rpx;"></view>
|
||
<view class="skeleton" style="width: 100rpx;height: 30rpx;"></view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="dateRecom" v-if="dateList.length !== 0 && !loading5">
|
||
<scroll-view :scroll-x="true" class="dateBox" :scroll-left="scrollLeft" :scroll-with-animation="true">
|
||
<view class="box" v-for="(it, index) in dateList" :key="index" :class="index === curIndex ? 'active' : ''" @click="changeDateTab(index)">
|
||
<view class="date">{{ it.day }}</view>
|
||
<text class="text">{{ it.desc }}</text>
|
||
</view>
|
||
</scroll-view>
|
||
<view class="shop-recommend-item">
|
||
<view class="shop-recommend-item-goods">
|
||
<template v-for="(goods, inx) in dateList[curIndex].items" :key="goods.id">
|
||
<view @click="toGoods(goods)" class="goods">
|
||
<view class="goods-img">
|
||
<image v-if="goods.pivot" :src="goods.pivot.image + '?x-oss-process=image/format,webp'" :webp="true" mode="aspectFill" class="img"></image>
|
||
<image v-else :src="goods.face_img + '?x-oss-process=image/format,webp'" mode="aspectFill" :webp="true" class="img"></image>
|
||
|
||
<view class="out" v-if="goods.sold_status === 2">
|
||
<img src="https://ct-upimg.yx090.com/ju8hn6/shop/image/2024/01/16/Cr6cRRhhqYNhScigxIyumyV9hXXMI3vKvsE1jgt0.png" class="out_img" />
|
||
</view>
|
||
<view class="out" v-else-if="goods.sold_status === 0">
|
||
<img src="https://ct-upimg.yx090.com/ju8hn6/shop/image/2024/08/21/QBhUheeYWSJ3OGM27fkAufJAlFSA8GBhWjpY5oNy.png" class="out_img" />
|
||
</view>
|
||
<view class="out" v-else-if="goods.total_stock === 0">
|
||
<img src="https://ct-upimg.yx090.com/ju8hn6/shop/image/2024/08/21/pMTv6QiZZEpSqkJmk7hMcbEzIuNzMyp7YVBbe42H.png" class="out_img" />
|
||
</view>
|
||
</view>
|
||
<view class="goods-info">
|
||
<view class="goods-info-name">
|
||
<text class="name">{{goods.pivot && goods.pivot.title || goods.title}}</text>
|
||
</view>
|
||
<view class="goods-info-price">
|
||
<view class="goods-info-price-left">
|
||
<text class="icon">¥</text>
|
||
<text class="price">
|
||
<template v-if="goods.pivot && goods.pivot.path_type === 1">
|
||
<text v-if="goods.pivot.max_price === goods.pivot.min_price">{{goods.pivot.min_price}}</text>
|
||
<text v-else>{{goods.pivot.min_price * 1}}~{{goods.pivot.max_price}}</text>
|
||
</template>
|
||
<template v-else>
|
||
<text v-if="goods.max_price === goods.min_price">{{goods.min_price}}</text>
|
||
<text v-else>{{goods.min_price * 1}}~{{goods.max_price}}</text>
|
||
</template>
|
||
</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</template>
|
||
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
<!-- 首页推荐位 -->
|
||
<view class="shop-recommend" v-if="recommendList.length !== 0">
|
||
<!-- 普通推荐位 -->
|
||
<template v-for="(item, index) in recommendList" :key="item.id">
|
||
<view class="shop-recommend-item" v-if="item.shop_goods.length !== 0">
|
||
<view class="shop-recommend-item-title" v-if="item.type === 1">
|
||
<text class="title">{{item.title}}</text>
|
||
<text v-if="item.show_more === 1" @click="toMoreGroup(item)">更多</text>
|
||
</view>
|
||
<view class="shop-recommend-item-img" v-else-if="item.type === 2" @click="toMoreGroup(item)">
|
||
<image :src="item.image + '?x-oss-process=image/format,webp'" :webp="true" mode="widthFix" class="img" v-if="item.shop_goods.length"></image>
|
||
</view>
|
||
<view class="shop-recommend-item-goods" :class="item.show_type == 2 ? 'two' : ''">
|
||
<template v-for="(goods, inx) in item.shop_goods" :key="goods.id">
|
||
<view v-if="item.show_type === 1" @click="toGoods(goods)" class="goods per100">
|
||
<view class="face_img">
|
||
|
||
<image v-if="goods.pivot" :src="goods.pivot.image + '?x-oss-process=image/format,webp'" :webp="true" mode="aspectFill" class="img"></image>
|
||
<image v-else :src="goods.face_img + '?x-oss-process=image/format,webp'" mode="aspectFill" :webp="true" class="img"></image>
|
||
|
||
<!-- sold_status 0:未销售、1:销售中、2:已结束 -->
|
||
<view class="out" v-if="goods.sold_status === 2">
|
||
<img src="https://ct-upimg.yx090.com/ju8hn6/shop/image/2024/01/16/Cr6cRRhhqYNhScigxIyumyV9hXXMI3vKvsE1jgt0.png" class="out_img" />
|
||
</view>
|
||
<view class="out" v-else-if="goods.sold_status === 0">
|
||
<img src="https://ct-upimg.yx090.com/ju8hn6/shop/image/2024/08/21/QBhUheeYWSJ3OGM27fkAufJAlFSA8GBhWjpY5oNy.png" class="out_img" />
|
||
</view>
|
||
<view class="out" v-else-if="goods.total_stock === 0">
|
||
<img src="https://ct-upimg.yx090.com/ju8hn6/shop/image/2024/08/21/pMTv6QiZZEpSqkJmk7hMcbEzIuNzMyp7YVBbe42H.png" class="out_img" />
|
||
</view>
|
||
</view>
|
||
<view class="infotext">
|
||
<text class="tit">{{goods.pivot && goods.pivot.title || goods.title}}</text>
|
||
|
||
<view class="qiang">
|
||
<view class="priceB">
|
||
<text>¥</text>
|
||
<block v-if="goods.group_goods.length === 1">
|
||
<text v-if="goods.group_goods[0].specs_type === 0">{{goods.group_goods[0].price}}</text>
|
||
<text v-else>
|
||
<text v-if="goods.group_goods[0].max_price === goods.group_goods[0].min_price">{{goods.group_goods[0].min_price}}</text>
|
||
<text v-else>{{goods.group_goods[0].min_price * 1}}~{{goods.group_goods[0].max_price}}</text>
|
||
</text>
|
||
</block>
|
||
<text class="price" v-else>
|
||
<template v-if="goods.pivot && goods.pivot.path_type === 1">
|
||
<text v-if="goods.pivot.max_price === goods.pivot.min_price">{{goods.pivot.min_price}}</text>
|
||
<text v-else>{{goods.pivot.min_price * 1}}~{{goods.pivot.max_price}}</text>
|
||
</template>
|
||
<template v-else>
|
||
<text v-if="goods.max_price === goods.min_price">{{goods.min_price}}</text>
|
||
<text v-else>{{goods.min_price * 1}}~{{goods.max_price}}</text>
|
||
</template>
|
||
</text>
|
||
</view>
|
||
<view class="txt">抢购</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view v-else @click="toGoods(goods)" class="goods">
|
||
<view class="goods-img">
|
||
|
||
<image v-if="goods.pivot" :src="goods.pivot.image + '?x-oss-process=image/format,webp'" :webp="true" mode="aspectFill" class="img"></image>
|
||
<image v-else :src="goods.face_img + '?x-oss-process=image/format,webp'" mode="aspectFill" :webp="true" class="img"></image>
|
||
|
||
<view class="out" v-if="goods.sold_status === 2">
|
||
<img src="https://ct-upimg.yx090.com/ju8hn6/shop/image/2024/01/16/Cr6cRRhhqYNhScigxIyumyV9hXXMI3vKvsE1jgt0.png" class="out_img" />
|
||
</view>
|
||
<view class="out" v-else-if="goods.sold_status === 0">
|
||
<img src="https://ct-upimg.yx090.com/ju8hn6/shop/image/2024/08/21/QBhUheeYWSJ3OGM27fkAufJAlFSA8GBhWjpY5oNy.png" class="out_img" />
|
||
</view>
|
||
<view class="out" v-else-if="goods.total_stock === 0">
|
||
<img src="https://ct-upimg.yx090.com/ju8hn6/shop/image/2024/08/21/pMTv6QiZZEpSqkJmk7hMcbEzIuNzMyp7YVBbe42H.png" class="out_img" />
|
||
</view>
|
||
</view>
|
||
<view class="goods-info">
|
||
<view class="goods-info-name">
|
||
<text class="name">{{goods.pivot && goods.pivot.title || goods.title}}</text>
|
||
</view>
|
||
<view class="goods-info-price">
|
||
<view class="goods-info-price-left">
|
||
<text class="icon">¥</text>
|
||
<block v-if="goods.group_goods.length === 1">
|
||
<text v-if="goods.group_goods[0].specs_type === 0">{{goods.group_goods[0].price}}</text>
|
||
<text v-else>
|
||
<text v-if="goods.group_goods[0].max_price === goods.group_goods[0].min_price">{{goods.group_goods[0].min_price}}</text>
|
||
<text v-else>{{goods.group_goods[0].min_price * 1}}~{{goods.group_goods[0].max_price}}</text>
|
||
</text>
|
||
</block>
|
||
<text class="price" v-else>
|
||
<template v-if="goods.pivot && goods.pivot.path_type === 1">
|
||
<text v-if="goods.pivot.max_price === goods.pivot.min_price">{{goods.pivot.min_price}}</text>
|
||
<text v-else>{{goods.pivot.min_price * 1}}~{{goods.pivot.max_price}}</text>
|
||
</template>
|
||
<template v-else>
|
||
<text v-if="goods.max_price === goods.min_price">{{goods.min_price}}</text>
|
||
<text v-else>{{goods.min_price * 1}}~{{goods.max_price}}</text>
|
||
</template>
|
||
</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</template>
|
||
|
||
</view>
|
||
|
||
<text v-if="item.show_more === 1 && (item.shop_group_id || item.shop_group_id === 0)" class="viewMore" @click="toMoreGroup(item)">查看更多</text>
|
||
</view>
|
||
|
||
</template>
|
||
</view>
|
||
</view>
|
||
|
||
<portrait v-if="home_page_rule === 1" :group-list="remmendList" @getnum="getNum" :vip-on="vip_on" />
|
||
|
||
<view class="zonghe" v-if="showZongHe" id="goods">
|
||
<scroll-view :scroll-x="true" class="titBox" :class="showDown ? 'z98' : ''" :scroll-with-animation="true">
|
||
<view class="row" @click="changeSort(sort1, '')">
|
||
<view class="tit">臻品推荐</view>
|
||
<view class="desc" :class="sortType == sort1 ? 'on' : ''">严选好货</view>
|
||
</view>
|
||
<view class="row" @click="changeSort('startTime', '')">
|
||
<view class="tit">本月上新</view>
|
||
<view class="desc" :class="sortType == 'startTime' ? 'on' : ''">新品发布</view>
|
||
</view>
|
||
<view class="row" v-for="it in classifyList" :key="it.id" @click="changeSort(it.id, 'group')">
|
||
<view class="tit">{{it.name}}</view>
|
||
<view class="desc" v-if="it.describe" :class="sortType == it.id ? 'on' : ''">{{it.describe}}</view>
|
||
</view>
|
||
</scroll-view>
|
||
|
||
<view class="content">
|
||
<template v-for="i in 2" :key="i">
|
||
<view class="left">
|
||
<template v-for="(item, index) in zongheList" :key="item.id">
|
||
<view class="row" @click="toPage(item.id)" v-if="index % 2 == i - 1">
|
||
<view class="face_img">
|
||
<image :src="item.face_img" mode="widthFix" class="img"></image>
|
||
<view class="out flex" v-if="item.sold_status === 2">
|
||
<image src="https://ct-upimg.yx090.com/ju8hn6/shop/image/2024/01/16/Cr6cRRhhqYNhScigxIyumyV9hXXMI3vKvsE1jgt0.png" class="out_img" mode="widthFix"></image>
|
||
</view>
|
||
<view class="out flex" v-else-if="item.sold_status === 0">
|
||
<image src="https://ct-upimg.yx090.com/ju8hn6/shop/image/2024/08/21/QBhUheeYWSJ3OGM27fkAufJAlFSA8GBhWjpY5oNy.png" class="out_img" mode="widthFix"></image>
|
||
</view>
|
||
<view class="out flex" v-else-if="item.total_stock === 0">
|
||
<image src="https://ct-upimg.yx090.com/ju8hn6/shop/image/2024/08/21/pMTv6QiZZEpSqkJmk7hMcbEzIuNzMyp7YVBbe42H.png" class="out_img" mode="widthFix"></image>
|
||
</view>
|
||
</view>
|
||
<view class="padd">
|
||
<view class="desc">{{item.characteristic}}</view>
|
||
<view class="tit">{{item.title}}</view>
|
||
<view class="price">
|
||
<text v-if="parseFloat(item.min_price) == parseFloat(item.max_price)">¥{{item.min_price}}</text>
|
||
<text v-else>¥{{item.min_price * 1}}~{{item.max_price}}</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</template>
|
||
</view>
|
||
</template>
|
||
</view>
|
||
|
||
<view class="noMore" v-if="zongheList.length && page >= lastPage && !loading1">— 没有更多了 —</view>
|
||
<view v-if="loading1" class="loadbox">
|
||
<up-loading-icon text="加载中..." textSize="18"></up-loading-icon>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
<!-- 品牌特卖-小店商品 -->
|
||
<view v-else-if="barType == 'brand'">
|
||
<brand-buy></brand-buy>
|
||
</view>
|
||
|
||
<!-- 团购分组推荐位 -->
|
||
<view v-else-if="barType == 'recom'">
|
||
<group-classify :groupId="groupId" @handleShareInfo="handleShareInfo"></group-classify>
|
||
</view>
|
||
|
||
<!-- 所有团购 -->
|
||
<view v-else-if="barType == 'all'">
|
||
<all-group></all-group>
|
||
</view>
|
||
|
||
<!-- 视频 -->
|
||
<view v-else-if="barType == 'video'">
|
||
<video-list></video-list>
|
||
</view>
|
||
|
||
</view>
|
||
|
||
<!-- 返回顶部 -->
|
||
<view @click="backTop" v-if="showTop" class="topBox flex">
|
||
<up-icon name="arrow-upward" color="#000" size="24" />
|
||
</view>
|
||
|
||
<!-- 新人优惠券 -->
|
||
<new-vip :show-van="showVan" @close="showVan = false" :coupon-info="couponInfo"></new-vip>
|
||
|
||
<!-- 赠送会员 -->
|
||
<gifts-vip :show-gifts="showGifts" @close="showGifts = false" :info="giftsInfo"></gifts-vip>
|
||
|
||
<tabbar :chooseIndex="0" :num="cartNum" :msgNum="msgNum" />
|
||
|
||
<up-popup :show="showDown" mode="top" @close="showDown = false" :zIndex="98">
|
||
<view class="itemBox">
|
||
<view @click="onClickTab(0)" class="row flex" :class="active === 0 ? 'active' : ''">首页</view>
|
||
<view class="row flex" v-for="(item, index) in adList" :key="index" :class="active === index + 1 ? 'active' : ''" @click="onClickAd(item.link, item.top_bar_title, item.id, index)">{{item.top_bar_title}}</view>
|
||
</view>
|
||
</up-popup>
|
||
|
||
</view>
|
||
|
||
</template>
|
||
|
||
<script>
|
||
import { ref, reactive, toRefs } from 'vue'
|
||
import Portrait from '@/components/homeList/Portrait.vue'
|
||
import { get, post } from '@/api/request.js'
|
||
import tabbar from '@/components/tabbar/index.vue'
|
||
import brandBuy from '@/components/homeList/index.vue'
|
||
import groupClassify from '@/components/homeList/groupClassify.vue'
|
||
import allGroup from '@/components/homeList/allGroup.vue'
|
||
import videoList from '@/components/homeList/videoList.vue'
|
||
import { getShopInfo, showToast, uvRecord, whetherLogin, getOldDay, userBind } from '@/components/common.js'
|
||
import newVip from '@/components/newVip/index.vue'
|
||
import giftsVip from '@/components/giftsVip/index.vue'
|
||
import { Style } from '@/utils/list.js'
|
||
import { func } from '../../uni_modules/uview-plus/libs/function/test'
|
||
|
||
export default {
|
||
components: { Portrait, tabbar, brandBuy, groupClassify, allGroup, newVip, giftsVip, videoList },
|
||
setup() {
|
||
const data = reactive({
|
||
showTop: false,
|
||
active: 0,
|
||
home_page_rule: 0,
|
||
swiperList: [],
|
||
vip_on: 0,
|
||
cartNum: 0,
|
||
adList: [],
|
||
showVan: false,
|
||
couponInfo: [],
|
||
showGifts: false,
|
||
giftsInfo: {},
|
||
from: 0,
|
||
s: 0,
|
||
u: 0,
|
||
company_id: '',
|
||
has_multi_group: true,
|
||
msgNum: 0,
|
||
Color: '',
|
||
bgColor: '',
|
||
Theme: '',
|
||
groupId: 0,
|
||
barType: '',
|
||
groupShareImg: '',
|
||
groupShareTit: '',
|
||
banner_icon: 0,
|
||
banner_rank: 0,
|
||
showArrow: false,
|
||
showDown: false,
|
||
lastPage: 0,
|
||
page: 1,
|
||
zongheList: [],
|
||
classifyList: [],
|
||
showZongHe: false,
|
||
sortType: '',
|
||
sortVal: '',
|
||
loading6: false,
|
||
priceColor: '',
|
||
sort1: '',
|
||
isReachBottom: true,
|
||
sort3: '',
|
||
loading1: true,
|
||
loading2: true,
|
||
loading3: true,
|
||
loading4: true,
|
||
loading5: true,
|
||
scrollRight: 0,
|
||
scrollLeft: 0,
|
||
curIndex: 0,
|
||
today: '',
|
||
dateList: [],
|
||
swiperH: 150
|
||
})
|
||
const groupList = ref([]) // 分组
|
||
const remmendList = ref([])
|
||
const rankList = ref([]) // 分组
|
||
const recommendList = ref([]) // 推荐位
|
||
|
||
const backTop = () => {
|
||
uni.pageScrollTo({
|
||
scrollTop: 0,
|
||
duration: 300
|
||
})
|
||
}
|
||
|
||
const onClickTab = (e) => {
|
||
data.showDown = false
|
||
data.active = e
|
||
data.barType = ''
|
||
}
|
||
|
||
const onClickAd = (url, title, id, index) => {
|
||
data.showDown = false
|
||
if (url && id) {
|
||
if(url.indexOf('type=category') !== -1) { // 自定义分类推荐位
|
||
uni.navigateTo({ url: '/pages/lotRecom/index?' + url.split('?')[1] })
|
||
} else if(url.indexOf('type=shop_group') !== -1) { // 团购分组推荐位
|
||
data.groupId = url.split('&id=')[1].split('&')[0]
|
||
data.active = index + 1
|
||
data.barType = 'recom'
|
||
} else if(url.indexOf('presale/index') !== -1) { // 新品预告
|
||
uni.navigateTo({ url: url + '?title=' + title })
|
||
} else if(url.indexOf('type=brand') !== -1) { // 品牌特卖
|
||
data.barType = 'brand'
|
||
data.active = index + 1
|
||
} else if(url.indexOf('classify/all') !== -1) { // 所有团购
|
||
data.barType = 'all'
|
||
data.active = index + 1
|
||
} else if(url.indexOf('groups/videolist') !== -1) { // 视频
|
||
data.barType = 'video'
|
||
data.active = index + 1
|
||
} else {
|
||
uni.navigateTo({ url: url }) // 其他
|
||
}
|
||
// uvRecord(id)
|
||
}
|
||
}
|
||
|
||
// 获取店铺信息
|
||
async function getStoreInfo() {
|
||
let res = await getShopInfo()
|
||
data.has_multi_group = res.has_multi_group
|
||
data.home_page_rule = res.home_page_rule
|
||
data.vip_on = res.vip_on
|
||
data.Color = Style[res.show_style_type].color
|
||
data.bgColor = Style[res.show_style_type].bgColor
|
||
data.priceColor = Style[res.show_style_type].priceColor
|
||
data.Theme = res.show_style_type
|
||
data.banner_icon = res.banner_icon
|
||
data.banner_rank = res.banner_rank
|
||
}
|
||
|
||
// 轮播图,首页推荐位
|
||
const getList = async () => {
|
||
await get('/api/app/index', { shop_id: 1, from: 1 }).then((res) => {
|
||
data.swiperList = res.data.banners
|
||
data.loading2 = false
|
||
|
||
recommendList.value = res.data.showcases
|
||
remmendList.value = res.data.groups
|
||
remmendList.value.unshift({
|
||
id: '',
|
||
name: '全部商品'
|
||
})
|
||
})
|
||
}
|
||
|
||
const getSubsetList = async () => {
|
||
await get('/api/app/banner', { channel: 4 }).then((res) => {
|
||
groupList.value = res.data
|
||
data.loading3 = false
|
||
})
|
||
}
|
||
|
||
// 轮播图跳转
|
||
function onSwiperItem(url, id) {
|
||
if (url) {
|
||
if(url.indexOf('type=category') !== -1) {
|
||
uni.navigateTo({ url: '/pages/lotRecom/index?' + url.split('?')[1] })
|
||
}else if(url.indexOf('type=shop_group') !== -1) {
|
||
uni.navigateTo({ url: '/pages/subset/index?' + url.split('?')[1] })
|
||
} else {
|
||
uni.navigateTo({ url: url })
|
||
}
|
||
// uvRecord(id)
|
||
}
|
||
}
|
||
|
||
// 搜索
|
||
function toSearch() {
|
||
uni.navigateTo({
|
||
url: '/pages/search/index'
|
||
})
|
||
}
|
||
|
||
function openTabs() {
|
||
data.showDown = !data.showDown
|
||
}
|
||
|
||
// 记录访客
|
||
const recordVisitor = () => {
|
||
get('/api/app/user/visitor', {
|
||
from: 0
|
||
}).then(() => {
|
||
})
|
||
}
|
||
|
||
async function getNum() {
|
||
await get('/api/v1/carts/num').then((res) => {
|
||
data.cartNum = Number(res.data.num)
|
||
uni.setStorageSync('cartNum', res.data.num)
|
||
})
|
||
}
|
||
|
||
// 获取广告列表
|
||
const getAdList = async() => {
|
||
await get('/api/app/banner', {channel: 2}).then((res) => {
|
||
data.adList = res.data
|
||
if(data.shareAdId) {
|
||
res.data.forEach((it, index) => {
|
||
if(it.id == data.shareAdId) {
|
||
onClickAd(it.link, it.top_bar_title, it.id, index)
|
||
}
|
||
})
|
||
}
|
||
data.loading1 = false
|
||
})
|
||
}
|
||
|
||
// 排行榜单
|
||
const getRankList = async() => {
|
||
await get('/api/app/banner', {channel: 3}).then((res) => {
|
||
rankList.value = res.data
|
||
data.loading4 = false
|
||
})
|
||
}
|
||
|
||
async function getTypeDateList() {
|
||
await get('/api/app/showcase/type/date').then((res) => {
|
||
res.forEach((item, index) => {
|
||
if(item.day === data.today) {
|
||
data.curIndex = index
|
||
}
|
||
})
|
||
data.dateList = res
|
||
data.loading5 = false
|
||
wx.getSystemInfo({
|
||
success(res) {
|
||
let width = res.screenWidth
|
||
data.scrollRight = res.screenWidth
|
||
data.scrollLeft = data.dateList.length * 85 - width
|
||
}
|
||
})
|
||
})
|
||
}
|
||
|
||
function changeDateTab(index) {
|
||
data.curIndex = index
|
||
data.scrollLeft = index < 3 ? 0 : data.scrollRight
|
||
}
|
||
|
||
const isShowArrow = () => {
|
||
uni.getSystemInfo({
|
||
success(req) {
|
||
let width = req.screenWidth - 20
|
||
let query = uni.createSelectorQuery();
|
||
query.select('#adbox').boundingClientRect(ress => {
|
||
if (ress && ress.width > width) {
|
||
data.showArrow = true
|
||
} else {
|
||
data.showArrow = false
|
||
}
|
||
}).exec()
|
||
}
|
||
})
|
||
}
|
||
|
||
function judgeHasNewVip() {
|
||
let is_new = uni.getStorageSync('is_new')
|
||
if(is_new) {
|
||
uni.setStorageSync('is_new', false)
|
||
get('/api/v1/shopCoupon', { type: 30 }).then((res) => {
|
||
if(res.data.length !== 0) {
|
||
data.showVan = true
|
||
data.couponInfo = res.data
|
||
}
|
||
})
|
||
}
|
||
}
|
||
|
||
function getGiftsInfo() {
|
||
get('/api/v1/user/vip/getNoCheckList').then((res) => {
|
||
if(res.data.length != 0) {
|
||
data.showGifts = true
|
||
data.giftsInfo = res.data[0]
|
||
}
|
||
})
|
||
}
|
||
|
||
function handleShareInfo(e) {
|
||
if(e.split('&&')) {
|
||
data.groupShareImg = e.split('&&')[0]
|
||
data.groupShareTit = e.split('&&')[1]
|
||
}
|
||
}
|
||
|
||
function getZongHe() {
|
||
get('/api/app/comprehensive/showcase').then((ress) => {
|
||
data.showZongHe = ress.data ? true : false
|
||
if(ress.data) {
|
||
data.sortType = ress.data.sort_type
|
||
data.sort1 = ress.data.sort_type
|
||
data.sort3 = ress.data.group_sort_type
|
||
getAllGroup()
|
||
get('/api/app/group', {parent_id: 0}).then((res) => {
|
||
data.classifyList = res.data
|
||
})
|
||
}
|
||
})
|
||
}
|
||
|
||
async function getAllGroup(val = 1) {
|
||
data.loading6 = true
|
||
let params = {
|
||
page: data.page,
|
||
pageSize: 20,
|
||
sortType: data.sortType
|
||
}
|
||
await get('/api/app/groupGoods/all', params).then((res) => {
|
||
data.zongheList = val == 1 ? data.zongheList.concat(res.data) : res.data
|
||
data.lastPage = res.meta.last_page
|
||
data.loading6 = false
|
||
data.isReachBottom = false
|
||
setTimeout(() => {
|
||
data.isReachBottom = true
|
||
}, 500)
|
||
}).catch(() => {
|
||
data.loading6 = false
|
||
})
|
||
}
|
||
|
||
async function getShopGroup(val = 1) {
|
||
data.loading6 = true
|
||
let params = {
|
||
page: data.page,
|
||
pageSize: 20,
|
||
sortType: data.sort3,
|
||
shop_group_id: data.sortType
|
||
}
|
||
await get('/api/app/groupGoods/all', params).then((res) => {
|
||
data.zongheList = val == 1 ? data.zongheList.concat(res.data) : res.data
|
||
data.lastPage = res.meta.last_page
|
||
data.loading6 = false
|
||
data.isReachBottom = false
|
||
setTimeout(() => {
|
||
data.isReachBottom = true
|
||
}, 500)
|
||
}).catch(() => {
|
||
data.loading6 = false
|
||
})
|
||
}
|
||
|
||
const toPage = (id) => {
|
||
uni.navigateTo({ url: '/pages/groups/index?id=' + id })
|
||
}
|
||
|
||
async function changeSort(type, val) {
|
||
if(data.sortType != type) {
|
||
data.isReachBottom = false
|
||
data.sortType = type
|
||
data.sortVal = val
|
||
data.page = 1
|
||
uni.showLoading({
|
||
title: '加载中...',
|
||
mask: true
|
||
})
|
||
if(val == 'group') {
|
||
await getShopGroup(0)
|
||
uni.hideLoading()
|
||
uni.pageScrollTo({
|
||
selector: '#goods',
|
||
offsetTop: 0,
|
||
duration: 0
|
||
})
|
||
} else {
|
||
await getAllGroup(0)
|
||
uni.hideLoading()
|
||
uni.pageScrollTo({
|
||
selector: '#goods',
|
||
offsetTop: 0,
|
||
duration: 0
|
||
})
|
||
}
|
||
}
|
||
}
|
||
|
||
function toRemmend(url, title, id) {
|
||
if (url) {
|
||
if(url.indexOf('type=category') !== -1) {
|
||
uni.navigateTo({ url: '/pages/lotRecom/index?' + url.split('?')[1] })
|
||
}else if(url.indexOf('type=shop_group') !== -1) {
|
||
uni.navigateTo({ url: '/pages/subset/index?' + url.split('?')[1] })
|
||
} else if(url.indexOf('presale/index') !== -1) {
|
||
uni.navigateTo({ url: url + '?title=' + title })
|
||
} else if(url.indexOf('search-result') !== -1 && url.indexOf('groupId=') !== -1) {
|
||
let classId = url.split('groupId=')[1].split('&')[0]
|
||
uni.reLaunch({ url: '/pages/classify/new?classId=' + classId })
|
||
} else if(url.indexOf('classify/new') !== -1) {
|
||
uni.switchTab({ url: url })
|
||
} else {
|
||
uni.navigateTo({ url: url })
|
||
}
|
||
// uvRecord(id)
|
||
}
|
||
}
|
||
|
||
function hanleRank(link, id) {
|
||
if(link) {
|
||
if(link.indexOf('type=category') !== -1) {
|
||
uni.navigateTo({ url: '/pages/lotRecom/index?' + link.split('?')[1] })
|
||
} else if(link.indexOf('type=shop_group') !== -1) {
|
||
uni.navigateTo({ url: '/pages/subset/index?' + link.split('?')[1] })
|
||
} else {
|
||
uni.navigateTo({ url: link })
|
||
}
|
||
// uvRecord(id)
|
||
}
|
||
}
|
||
|
||
function toGoods(goods) {
|
||
if (goods.pivot && goods.pivot.path) {
|
||
if(goods.pivot.path.indexOf('http') !== -1) {
|
||
uni.navigateTo({ url: '/pages/index/link?advUrl=' + encodeURIComponent(goods.pivot.path) })
|
||
} else {
|
||
uni.navigateTo({ url: goods.pivot.path })
|
||
}
|
||
} else {
|
||
uni.navigateTo({
|
||
url: '/pages/groups/index?id=' + goods.id
|
||
})
|
||
}
|
||
}
|
||
|
||
function toMoreGroup(item) {
|
||
if(item.show_more && item.link) {
|
||
if(item.link.indexOf('type=category') !== -1) {
|
||
uni.navigateTo({ url: '/pages/lotRecom/index?' + item.link.split('?')[1] })
|
||
} else if(item.link.indexOf('type=shop_group') !== -1) {
|
||
uni.navigateTo({ url: '/pages/subset/index?' + item.link.split('?')[1] })
|
||
} else if(item.link.indexOf('classify/new') !== -1 || item.link.indexOf('classify/index') !== -1) {
|
||
uni.switchTab({ url: item.link })
|
||
} else {
|
||
uni.navigateTo({ url: item.link })
|
||
}
|
||
}
|
||
}
|
||
|
||
async function onNetworkStatusChange(res) {
|
||
if(res.isConnected) {
|
||
await getStoreInfo()
|
||
await getAdList()
|
||
await getList()
|
||
await getSubsetList()
|
||
await getRankList()
|
||
await getTypeDateList()
|
||
|
||
if(whetherLogin()) {
|
||
getNum()
|
||
// 判断是否有新人优惠券
|
||
judgeHasNewVip()
|
||
getGiftsInfo()
|
||
}
|
||
|
||
isShowArrow()
|
||
getZongHe()
|
||
}
|
||
}
|
||
|
||
function computeHeight(e) {
|
||
var winWid = wx.getSystemInfoSync().windowWidth
|
||
var imgh = e.detail.height
|
||
var imgw = e.detail.width
|
||
var swiperH = (winWid * imgh / imgw).toFixed(2)
|
||
data.swiperH = swiperH
|
||
}
|
||
|
||
return {
|
||
userBind,
|
||
getOldDay,
|
||
remmendList,
|
||
whetherLogin,
|
||
...toRefs(data),
|
||
getStoreInfo,
|
||
getList,
|
||
groupList,
|
||
rankList,
|
||
recommendList,
|
||
toSearch,
|
||
onSwiperItem,
|
||
recordVisitor,
|
||
getNum,
|
||
onClickTab,
|
||
backTop,
|
||
getAdList,
|
||
isShowArrow,
|
||
onClickAd,
|
||
judgeHasNewVip,
|
||
getSubsetList,
|
||
handleShareInfo,
|
||
getGiftsInfo,
|
||
openTabs,
|
||
getZongHe,
|
||
getAllGroup,
|
||
getShopGroup,
|
||
toPage,
|
||
changeSort,
|
||
toRemmend,
|
||
getTypeDateList,
|
||
changeDateTab,
|
||
hanleRank,
|
||
toMoreGroup,
|
||
getRankList,
|
||
getTypeDateList,
|
||
toGoods,
|
||
onNetworkStatusChange,
|
||
computeHeight
|
||
}
|
||
},
|
||
|
||
async onLoad(options) {
|
||
// await this.$onLaunched
|
||
this.Color = uni.getStorageSync('theme_color')
|
||
this.bgColor = Style[uni.getStorageSync('theme_index') * 1].bgColor
|
||
this.Theme = uni.getStorageSync('theme_index') * 1
|
||
|
||
uni.onNetworkStatusChange(this.onNetworkStatusChange)
|
||
|
||
let dayObj = getOldDay('y-m-d', 0)
|
||
this.today = Number(dayObj.split('-')[1]) + '/' + Number(dayObj.split('-')[2])
|
||
await this.getStoreInfo()
|
||
await this.getAdList()
|
||
await this.getList()
|
||
await this.getSubsetList()
|
||
await this.getRankList()
|
||
await this.getTypeDateList()
|
||
|
||
if(whetherLogin()) {
|
||
this.getNum()
|
||
// 判断是否有新人优惠券
|
||
this.judgeHasNewVip()
|
||
this.getGiftsInfo()
|
||
var parmas = {
|
||
from: 0,
|
||
s: 0,
|
||
u: 0,
|
||
scene: '',
|
||
company_id: ''
|
||
}
|
||
this.userBind(parmas)
|
||
}
|
||
|
||
this.isShowArrow()
|
||
this.getZongHe()
|
||
},
|
||
onPullDownRefresh() {
|
||
this.getStoreInfo()
|
||
this.getList()
|
||
this.getSubsetList()
|
||
setTimeout(() => {
|
||
uni.stopPullDownRefresh()
|
||
}, 1000)
|
||
},
|
||
onPageScroll(e) {
|
||
if (e.scrollTop > 300) {
|
||
this.showTop = true
|
||
} else {
|
||
this.showTop = false
|
||
}
|
||
},
|
||
async onShow() {
|
||
this.cartNum = Number(uni.getStorageSync('cartNum'))
|
||
setTimeout(() => {
|
||
this.msgNum = uni.getStorageSync('msgNum') || 0
|
||
}, 1500)
|
||
this.msgNum = uni.getStorageSync('msgNum') || 0
|
||
},
|
||
onUnload() {
|
||
uni.offNetworkStatusChange(this.onNetworkStatusChange)
|
||
},
|
||
onReachBottom() {
|
||
if(!this.isReachBottom) {
|
||
return
|
||
}
|
||
if (this.page < this.lastPage && this.showZongHe) {
|
||
this.page++
|
||
if(this.sortVal) {
|
||
this.getShopGroup()
|
||
} else {
|
||
this.getAllGroup()
|
||
}
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
.flex{
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
}
|
||
.flex1{
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
}
|
||
.tou {
|
||
position: sticky;
|
||
top: 0;
|
||
width: 100%;
|
||
left: 0;
|
||
background: #fff;
|
||
z-index: 99;
|
||
.searchBox{
|
||
padding: 0 20rpx;
|
||
margin-bottom: 10rpx;
|
||
font-size: 28rpx;
|
||
color: #C7C7C7;
|
||
box-sizing: border-box;
|
||
.box{
|
||
display: flex;
|
||
align-items: center;
|
||
padding: 0 20rpx;
|
||
box-sizing: border-box;
|
||
background-color: #F7F8FA;
|
||
border-radius: 60rpx;
|
||
height: 60rpx;
|
||
width: 100%;
|
||
}
|
||
}
|
||
}
|
||
|
||
.topBox{
|
||
position: fixed;
|
||
bottom: 15%;
|
||
right: 5%;
|
||
background: #fff;
|
||
width: 80rpx;
|
||
height: 80rpx;
|
||
border-radius: 50%;
|
||
box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.2);
|
||
z-index: 101;
|
||
}
|
||
|
||
.border{
|
||
position: relative;
|
||
font-weight: 600;
|
||
&::after{
|
||
content: '';
|
||
position: absolute;
|
||
bottom: -10rpx;
|
||
left: 50%;
|
||
margin-left: -18rpx;
|
||
width: 36rpx;
|
||
height: 3px;
|
||
background: v-bind('Color');
|
||
}
|
||
}
|
||
|
||
.table{
|
||
display: flex;
|
||
align-items: center;
|
||
height: 60rpx;
|
||
padding-left: 20rpx;
|
||
box-sizing: border-box;
|
||
width: calc(100% - 20rpx);
|
||
position: relative;
|
||
overflow: hidden;
|
||
.bbox{
|
||
width: calc(100% - 30px);
|
||
height: 100%;
|
||
overflow-x: auto;
|
||
&.man{
|
||
width: 100%;
|
||
}
|
||
}
|
||
.adbox{
|
||
display: flex;
|
||
flex-wrap: nowrap;
|
||
white-space: nowrap;
|
||
width: fit-content;
|
||
height: 100%;
|
||
align-items: center;
|
||
}
|
||
.li {
|
||
font-size: 30rpx;
|
||
margin-right: 20rpx;
|
||
color: #000;
|
||
display: inline-block;
|
||
}
|
||
.assort{
|
||
width: 50px;
|
||
position: absolute;
|
||
padding-left: 10px;
|
||
box-sizing: border-box;
|
||
right: 0;
|
||
height: 100%;
|
||
top: 0;
|
||
background: linear-gradient(to right, rgba(255, 255, 255, 0.5), #fff 30%);
|
||
z-index: 1;
|
||
}
|
||
}
|
||
|
||
@keyframes fade {
|
||
from {
|
||
opacity: 1;
|
||
}
|
||
50% {
|
||
opacity: 0.5;
|
||
}
|
||
to {
|
||
opacity: 1;
|
||
}
|
||
}
|
||
|
||
.skeleton {
|
||
background: #e1e1e1;
|
||
animation: fade 2s infinite;
|
||
}
|
||
.whole{
|
||
background-color: #f5f5f5;
|
||
}
|
||
.home {
|
||
padding-bottom: calc(110rpx + env(safe-area-inset-bottom));
|
||
.home-top {
|
||
.home-top-swiper {
|
||
width: 100%;
|
||
.item_img {
|
||
width: 100%;
|
||
}
|
||
}
|
||
}
|
||
.home-img {
|
||
padding: 8rpx 0;
|
||
image {
|
||
width: 100%;
|
||
}
|
||
}
|
||
|
||
.home-text {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
padding: 8rpx 30rpx;
|
||
background-color: #fff3f4;
|
||
font-size: 0;
|
||
.home-text-item {
|
||
height: 28rpx;
|
||
}
|
||
}
|
||
}
|
||
.noMore{
|
||
text-align: center;
|
||
font-size: 24rpx;
|
||
color: #999;
|
||
margin: auto;
|
||
padding: 0 0 60rpx;
|
||
width: 100%;
|
||
}
|
||
.loadbox {
|
||
padding: 30rpx 0;
|
||
text-align: center;
|
||
color: #666;
|
||
}
|
||
.itemBox{
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
padding-top: 156rpx;
|
||
.row{
|
||
color: #393939;
|
||
font-size: 24rpx;
|
||
background-color: #f2f2f2;
|
||
border: 1px solid #f2f2f2;
|
||
width: 22%;
|
||
height: 56rpx;
|
||
margin: 0 0 24rpx 2%;
|
||
border-radius: 56rpx;
|
||
&.active{
|
||
background-color: v-bind('bgColor');
|
||
border: 1px solid v-bind('Color');
|
||
color: v-bind('Color');
|
||
}
|
||
}
|
||
}
|
||
.zonghe{
|
||
font-size: 28rpx;
|
||
margin-top: 16rpx;
|
||
.titBox{
|
||
display: flex;
|
||
align-items: center;
|
||
padding: 0 14rpx;
|
||
box-sizing: border-box;
|
||
position: sticky;
|
||
top: 60rpx;
|
||
z-index: 100;
|
||
white-space: nowrap;
|
||
background-color: #fff;
|
||
height: 140rpx;
|
||
&.z98{
|
||
z-index: 98;
|
||
}
|
||
.row{
|
||
text-align: center;
|
||
display: inline-block;
|
||
height: 100%;
|
||
color: #000;
|
||
font-size: 30rpx;
|
||
padding: 24rpx 0;
|
||
box-sizing: border-box;
|
||
.tit{
|
||
padding: 0 24rpx;
|
||
}
|
||
.desc{
|
||
color: #898989;
|
||
font-size: 24rpx;
|
||
padding: 0 18rpx;
|
||
border-radius: 40rpx;
|
||
line-height: 40rpx;
|
||
margin-top: 10rpx;
|
||
display: inline-block;
|
||
&.on{
|
||
background-color: v-bind('Color');
|
||
color: #fff;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
.content{
|
||
padding: 16rpx 1.5%;
|
||
box-sizing: border-box;
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
.left{
|
||
width: 50%;
|
||
padding: 0 1.5%;
|
||
box-sizing: border-box;
|
||
}
|
||
.row{
|
||
background-color: #fff;
|
||
border-radius: 10rpx;
|
||
width: 100%;
|
||
margin-bottom: 24rpx;
|
||
overflow: hidden;
|
||
.face_img{
|
||
position: relative;
|
||
.img{
|
||
width: 100%;
|
||
height: auto;
|
||
vertical-align: bottom;
|
||
}
|
||
.out{
|
||
position: absolute;
|
||
width: 100%;
|
||
height: 100%;
|
||
left: 0;
|
||
top: 0;
|
||
.out_img{
|
||
width: 140rpx;
|
||
height: 140rpx;
|
||
}
|
||
}
|
||
}
|
||
.padd{
|
||
padding: 14rpx 24rpx 24rpx;
|
||
box-sizing: border-box;
|
||
}
|
||
.desc{
|
||
color: #BF9E6B;
|
||
margin-bottom: 10rpx;
|
||
font-size: 24rpx;
|
||
}
|
||
.tit{
|
||
overflow: hidden !important;
|
||
text-overflow: ellipsis !important;
|
||
display: -webkit-box !important;
|
||
-webkit-line-clamp: 2 !important;
|
||
-webkit-box-orient: vertical !important;
|
||
white-space: break-spaces !important;
|
||
margin-bottom: 10rpx;
|
||
}
|
||
.price{
|
||
font-size: 30rpx;
|
||
color: v-bind('priceColor');
|
||
}
|
||
}
|
||
}
|
||
}
|
||
.viewMore{
|
||
text-align: center;
|
||
display: block;
|
||
padding: 16rpx 0;
|
||
border-top: 1px solid #ddd;
|
||
border-bottom: 1px solid #ddd;
|
||
font-size: 28rpx;
|
||
color: #000;
|
||
}
|
||
.shop-recommend-item-goods .goods-info {
|
||
height: auto !important;
|
||
}
|
||
|
||
.shop-recommend-item-goods .goods-info-price {
|
||
margin-top: 15rpx !important;
|
||
}
|
||
|
||
.shop-recommend-item-goods .goods-info-name .name{
|
||
white-space: normal !important;
|
||
height: 80rpx;
|
||
line-height: 40rpx;
|
||
}
|
||
|
||
.shop-recommend-item-goods .goods {
|
||
margin-bottom: 20rpx;
|
||
&.per100{
|
||
width: 100%;
|
||
margin-right: 0;
|
||
margin-bottom: 50rpx;
|
||
.face_img{
|
||
width: 100%;
|
||
height: 300rpx;
|
||
margin-bottom: 16rpx;
|
||
position: relative;
|
||
.img{
|
||
width: 100%;
|
||
height: 100%;
|
||
border-radius: 10rpx;
|
||
}
|
||
.out{
|
||
position: absolute;
|
||
width: 100%;
|
||
height: 100%;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
top: 0;
|
||
left: 0;
|
||
.out_img{
|
||
width: 180rpx;
|
||
height: 180rpx;
|
||
}
|
||
}
|
||
}
|
||
.infotext{
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
width: 100%;
|
||
.tit{
|
||
font-size: 30rpx;
|
||
font-weight: bold;
|
||
color: #2C2C2C;
|
||
width: calc(100% - 300rpx);
|
||
white-space: nowrap;
|
||
text-overflow: ellipsis;
|
||
overflow: hidden;
|
||
}
|
||
.qiang{
|
||
height: 28px;
|
||
border-radius: 28px;
|
||
box-sizing: border-box;
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
border: 1px solid v-bind('Color');
|
||
font-size: 12px;
|
||
.priceB{
|
||
height: 100%;
|
||
padding-left: 10px;
|
||
background-color: v-bind('bgColor');
|
||
color: v-bind('Color');
|
||
border-radius: 26px 0 0 26px;
|
||
line-height: 26px;
|
||
font-weight: bold;
|
||
}
|
||
.txt{
|
||
display: inline-block;
|
||
height: 26px;
|
||
padding: 0 10px 0 34px;
|
||
border-radius: 0 26px 26px 0;
|
||
color: #fff;
|
||
background-color: v-bind('Color');
|
||
line-height: 26px;
|
||
position: relative;
|
||
&::after{
|
||
position: absolute;
|
||
content: '';
|
||
left: 0;
|
||
top: 0;
|
||
width: 26px;
|
||
height: 26px;
|
||
background-color: v-bind('bgColor');
|
||
border-radius: 0 0 26px 0;
|
||
}
|
||
&::before{
|
||
position: absolute;
|
||
content: '';
|
||
left: 6px;
|
||
bottom: 0;
|
||
width: 0;
|
||
height: 0;
|
||
border-top: 4px solid transparent;
|
||
border-right: 4px solid transparent;
|
||
border-left: 4px solid transparent;
|
||
border-bottom: 4px solid v-bind('Color');
|
||
z-index: 2;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
::v-deep .shop-recommend-item-goods .goods-info-name .name{
|
||
overflow: hidden !important;
|
||
text-overflow: ellipsis !important;
|
||
display: -webkit-box !important;
|
||
-webkit-line-clamp: 2 !important;
|
||
-webkit-box-orient: vertical !important;
|
||
white-space: break-spaces !important;
|
||
height: 76rpx;
|
||
}
|
||
|
||
::v-deep .shop-recommend-item-goods .goods-info-name{
|
||
overflow: inherit !important;
|
||
}
|
||
.shop-recommend-item-goods{
|
||
padding: 10rpx 24rpx;
|
||
}
|
||
.shop{
|
||
background-color: #fff;
|
||
&-group {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
width: 100%;
|
||
padding: 14rpx 0;
|
||
&.per20{
|
||
padding: 14rpx 20rpx;
|
||
box-sizing: border-box;
|
||
.shop-group-item{
|
||
width: 20%;
|
||
}
|
||
.img{
|
||
width: 90rpx;
|
||
height: 90rpx;
|
||
}
|
||
.tit{
|
||
font-size: 26rpx;
|
||
}
|
||
}
|
||
&-item{
|
||
width: 25%;
|
||
text-align: center;
|
||
padding: 14rpx 0;
|
||
.img{
|
||
width: 100rpx;
|
||
height: 100rpx;
|
||
border-radius: 10rpx;
|
||
margin-bottom: 7rpx;
|
||
}
|
||
.tit{
|
||
font-size: 28rpx;
|
||
color: #2c2c2c;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
.shop-recommend-item{
|
||
padding: 20rpx 0;
|
||
&-title{
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
color: #555;
|
||
font-size: 24rpx;
|
||
padding: 30rpx;
|
||
.title{
|
||
color: v-bind('Color');
|
||
font-size: 32rpx;
|
||
font-weight: bold;
|
||
}
|
||
}
|
||
&-img{
|
||
.img{
|
||
width: 100%;
|
||
}
|
||
}
|
||
&-goods{
|
||
display: flex;
|
||
justify-content: flex-start;
|
||
flex-wrap: wrap;
|
||
.goods{
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
box-sizing: border-box;
|
||
width: 31%;
|
||
margin-right: 3.5%;
|
||
&:nth-child(3n+3){
|
||
margin-right: 0;
|
||
}
|
||
&-img {
|
||
width: 100%;
|
||
height: 0;
|
||
padding-bottom: 100%;
|
||
position: relative;
|
||
.img{
|
||
width: 100%;
|
||
height: 100%;
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
}
|
||
.out{
|
||
position: absolute;
|
||
width: 100%;
|
||
height: 100%;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
.out_img{
|
||
width: 110rpx;
|
||
height: 110rpx;
|
||
}
|
||
}
|
||
}
|
||
&-info{
|
||
display: flex;
|
||
flex-direction: column;
|
||
justify-content: space-between;
|
||
width: 100%;
|
||
padding: 15rpx;
|
||
box-sizing: border-box;
|
||
height: 120rpx;
|
||
&-name{
|
||
display: flex;
|
||
align-items: center;
|
||
overflow: hidden;
|
||
|
||
.tag{
|
||
font-size: 24rpx;
|
||
color: #fff;
|
||
background-color: v-bind('Color');
|
||
padding: 0 8rpx;
|
||
border-radius: 5rpx;
|
||
margin-right: 10rpx;
|
||
height: 30rpx;
|
||
line-height: 30rpx;
|
||
}
|
||
.name{
|
||
font-size: 28rpx;
|
||
flex: 1;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
white-space: nowrap;
|
||
}
|
||
}
|
||
|
||
&-tag {
|
||
display: flex;
|
||
overflow: auto;
|
||
|
||
&-item {
|
||
font-size: 24rpx;
|
||
color: v-bind('Color');
|
||
background-color: #fff3f4;
|
||
padding: 0 15rpx;
|
||
margin-right: 5rpx;
|
||
border-radius: 15rpx;
|
||
flex-shrink: 0;
|
||
}
|
||
}
|
||
|
||
&-price {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: flex-end;
|
||
font-size: 28rpx;
|
||
color: #999999;
|
||
|
||
&-left {
|
||
color: v-bind('priceColor');
|
||
align-items: center;
|
||
text-overflow: ellipsis;
|
||
overflow: hidden;
|
||
.price {
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
white-space: nowrap;
|
||
}
|
||
.icon {
|
||
font-size: 24rpx;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
&.two{
|
||
.goods{
|
||
width: 48%;
|
||
margin-right: 4%;
|
||
&:nth-child(3n+3){
|
||
margin-right: 4%;
|
||
}
|
||
&:nth-child(2n+2){
|
||
margin-right: 0;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
.salebox{
|
||
display: flex;
|
||
border-top: 16rpx solid #f5f5f5;
|
||
border-bottom: 16rpx solid #f5f5f5;
|
||
justify-content: space-between;
|
||
flex-wrap: wrap;
|
||
.row {
|
||
width: 50%;
|
||
&.per100{
|
||
width: 100%;
|
||
}
|
||
&.per33{
|
||
width: 33.33%;
|
||
}
|
||
.img{
|
||
width: 100%;
|
||
vertical-align: bottom;
|
||
display: block;
|
||
}
|
||
}
|
||
}
|
||
|
||
.dateRecom{
|
||
.dateBox{
|
||
display: flex;
|
||
align-items: center;
|
||
white-space: nowrap;
|
||
height: 140rpx;
|
||
border-bottom: 1px solid #f5f5f5;
|
||
.box{
|
||
font-size: 28rpx;
|
||
color: #333;
|
||
position: relative;
|
||
padding: 30rpx 0;
|
||
text-align: center;
|
||
display: inline-block;
|
||
width: 170rpx;
|
||
.date{
|
||
font-weight: bold;
|
||
margin-bottom: 8rpx;
|
||
line-height: 1;
|
||
font-family: '黑体';
|
||
font-size: 32rpx;
|
||
}
|
||
.text{
|
||
line-height: 1;
|
||
}
|
||
&:after{
|
||
content: "";
|
||
position: absolute;
|
||
display: block;
|
||
width: 80rpx;
|
||
height: 8rpx;
|
||
background-color: v-bind('Color');
|
||
bottom: 10rpx;
|
||
left: 50%;
|
||
margin-left: -40rpx;
|
||
border-radius: 6rpx;
|
||
opacity: 0;
|
||
transform: scaleX(0);
|
||
transition: all .3s cubic-bezier(.18,.89,.17,.88),opacity .2s ease;
|
||
}
|
||
&.active{
|
||
&:after{
|
||
opacity: 1;
|
||
transform: scaleX(1);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
</style>
|