<template> <view class="container"> <!-- 小程序头部兼容 --> <!-- #ifdef MP --> <view class="input-box flex" @click="clickSearch"> <view class=" input-content flex"> <view class="iconfont iconsearch"></view> <view class="input"><input type="text" disabled placeholder="请输入搜索内容" /></view> </view> </view> <view class="mp-height"></view> <!-- #endif --> <!-- 头部轮播 --> <view class="carousel-section"> <!-- 标题栏和状态栏占位符 --> <view class="titleNview-placing"></view> <!-- 背景色区域 --> <view class="titleNview-background" ></view> <swiper class="carousel" autoplay="true" duration="400" interval="5000" @change="swiperChange"> <swiper-item v-for="(item, index) in carouselList" :key="index" class="carousel-item"> <image :src="item.pic" /> </swiper-item> </swiper> <!-- 自定义swiper指示器 --> <!-- <view class="swiper-dots"> <text class="num">{{ swiperCurrent + 1 }}</text> <text class="sign">/</text> <text class="num">{{ swiperLength }}</text> </view> --> </view> <!-- 分类 --> <view class="cate-section"> <!-- <navigator url="/pages/product/newPeople" v-if="userInfo.is_whole == 0"> <view class="cate-item"> <image src="/static/img/index-nav1.png"></image> <text>新人专区</text> </view> </navigator> --> <navigator url="/pages/product/exchange"> <view class="cate-item"> <image src="/static/img/index-nav2.png"></image> <text>兑换专区</text> </view> </navigator> <navigator url="/pages/product/store"> <view class="cate-item"> <image src="/static/img/index-nav3.png"></image> <text>附近门店</text> </view> </navigator> <navigator url="/pages/user/shareQrCode"> <view class="cate-item"> <image src="/static/img/index-nav4.png"></image> <text>邀请有礼</text> </view> </navigator> <navigator url="/pages/index/cpzq"> <view class="cate-item"> <image src="../../static/icon/cpzq.png"></image> <text>公司简介</text> </view> </navigator> </view> <!-- 金豆专区 --> <golden-bean :data='jdList'></golden-bean> <!-- 批发专区 --> <!-- <wholesale></wholesale> --> <view class="wholesale"> <view class="title"> <view class="img"> <image src="../../static/img/list1.png" mode=""></image> </view> <view class="title-t"> 批发专区 </view> <view class="about"> 限时抢购 </view> </view> <view class="date" v-if="timeList.length > 0"> <view class="date-item" v-for="itemt in timeList" @click="navto('/pages/product/wholesale?bin=' + encodeURI(itemt.time) + '&stp=' + itemt.stop + '&status=' + itemt.status + '&state=' + itemt.state + '&wid=' + itemt.id)"> <image :src="itemt.slide"></image> <view class="item-name"> {{itemt.time < '12:00' ? '上午场':(itemt.time > '17:00' ? '晚上场' : '下午场') }} </view> <view class="item-time"> {{itemt.time}}~{{itemt.stop | timet}} </view> </view> <!-- <view class="date-item" @click="navto('/pages/product/wholesale?bin=' + encodeURI(timeList[1].time) + '&stp=' + timeList[1].stop + '&status=' + timeList[1].status + '&state=' + timeList[1].state + '&wid=' + timeList[1].id)"> <image src="../../static/img/aft.png"></image> <view class="item-name"> 下午场 </view> <view class="item-time"> {{timeList[1].time}}~{{timeList[1].stop | timet}} </view> </view> <view class="date-item" @click="navto('/pages/product/wholesale?bin=' + encodeURI(timeList[2].time) + '&stp=' + timeList[2].stop + '&status=' + timeList[2].status + '&state=' + timeList[2].state + '&wid=' + timeList[2].id)"> <image src="../../static/img/eve.png"></image> <view class="item-name"> 晚上场 </view> <view class="item-time"> {{timeList[2].time}}~{{timeList[2].stop | timet}} </view> </view> --> </view> </view> <!-- 公司简介 --> </view> </template> <script> import topTitle from '../../components/top-title/top-title.vue'; import { getProducts } from '@/api/product.js'; import goldenBean from './child/goldenBean.vue'; import wholesale from './child/wholesale.vue'; import recommend from './child/recommend.vue'; import { loadIndexs, getArticleList } from '@/api/index.js'; import { getUserInfo } from '@/api/user.js'; import { setCoupons } from '@/api/functionalUnit.js'; import { saveUrl, interceptor } from '@/utils/loginUtils'; import { mapState } from 'vuex'; import { getWholeTimeArea } from '@/api/whole.js' export default { components: { goldenBean, wholesale, recommend, topTitle }, data() { return { shareShow: false, //分享海报 pageProportion: 0, //保存页面基于750宽度的比例 swiperHeight: 0, checkid: 0, titleNViewBackground: '', swiperCurrent: 0, swiperLength: 0, carouselList: [], //轮播列表 bastList: [], //商品 jdList: [], //金豆商品 page: 1, limit: 3, gsjjList: [], cpjjList: [], timeList: [] }; }, computed: { ...mapState(['loginInterceptor']), ...mapState('user', ['hasLogin', 'userInfo']) }, filters: { timet(val) { let str = '' if (val) { let date = new Date(val * 1000); let h = date.getHours() >= 10 ? date.getHours() : ('0' + date.getHours()) let m = date.getMinutes() >= 10 ? date.getMinutes() : ('0' + date.getMinutes()) str = h + ':' + m } return str } }, onLoad: function(option) { console.log('binloading') // #ifndef MP if (option.spread) { // 存储其他邀请人 uni.setStorageSync('spread', option.spread); } // #endif // #ifdef MP if (option.scene) { // 存储小程序邀请人 uni.setStorage({ key: 'spread_code', data: option.scene }); } // #endif // this.getArticleList() }, onShow: function() { console.log('show') // 判断是否强制登录 if (this.loginInterceptor && !this.hasLogin) { console.log('show123') saveUrl() // 登录拦截 interceptor(); return } this.loadData(); this.getBargainList(); this.getTimeArea() }, //下拉刷新 onPullDownRefresh() { this.loadData(); }, // #ifndef MP // 监听导航栏输入框点击事件 onNavigationBarSearchInputClicked(e) { //跳转到搜索页面 this.clickSearch(); }, //点击导航栏 buttons 时触发 onNavigationBarButtonTap(e) { const index = e.index; if (index === 0) { this.$api.msg('点击了扫描'); } else if (index === 1) { // #ifdef APP-PLUS const pages = getCurrentPages(); const page = pages[pages.length - 1]; const currentWebview = page.$getAppWebview(); currentWebview.hideTitleNViewButtonRedDot({ index }); // #endif uni.navigateTo({ url: '/pages/user/notice' }); } }, // #endif methods: { getTimeArea() { getWholeTimeArea().then(({ data }) => { this.timeList = data.seckillTime }) }, navto(url) { console.log(url) uni.navigateTo({ url: url }) }, getArticleList() { getArticleList({ pages: 1, limit: 3 },2).then(({data}) => { console.log(data) this.cpjjList = data }) getArticleList({ pages: 1, limit: 3 },1).then(({data}) => { console.log(data) this.gsjjList = data }) }, getUserInfo() { getUserInfo().then(res => { console.log(res) this.setUserInfo(res.data); }) }, getBargainList() { let that = this; getProducts({ page: that.page, limit: that.limit, is_gold: 1 }) .then(function(res) { that.jdList = res.data }) .catch(res => {}); }, // 點擊搜索框 clickSearch() { uni.navigateTo({ url: '/pages/product/search' }); }, // 监听图片加载完成 onImageError(key, index) { this[key][index].image = '/static/error/errorImage.jpg'; }, // 请求载入数据 async loadData() { loadIndexs({}) .then(({ data }) => { let goods = data.info; this.carouselList = data.banner; this.swiperLength = this.carouselList.length; this.bastList = goods.bastList; //精品推荐 uni.stopPullDownRefresh(); }) .catch(e => { uni.stopPullDownRefresh(); }); }, //轮播图切换修改背景色 swiperChange(e) { const index = e.detail.current; this.swiperCurrent = index; this.titleNViewBackground = this.carouselList[index].background; }, //详情页 navToDetailPage(item) { let id = item.id; uni.navigateTo({ url: '/pages/product/product?id=' + id }); }, } }; </script> <style lang="scss"> .Mask { width: 100%; height: 100vh; position: fixed; z-index: 99999; background-color: rgba(0, 0, 0, 0.7); top: 0; image { width: 100%; height: 100vh; } } /* #ifdef MP */ .mp-height { height: 44px; } .input-box { position: fixed; top: 0; left: 0; width: 100%; padding: 25rpx; background-color: #ffffff; z-index: 999; height: 44px; .iconsearch { font-size: 50rpx; } .input-content { border-radius: 99rpx; flex-grow: 1; padding: 10rpx 30rpx; background-color: rgba(231, 231, 231, 0.7); .input { flex-grow: 1; input { font-size: $font-lg; } } } .input-button { padding-left: 20rpx; font-size: $font-lg; height: 100%; } } page { .cate-section { position: relative; z-index: 5; border-radius: 16rpx 16rpx 0 0; margin-top: -20rpx; } .carousel-section { padding: 0; .titleNview-placing { padding-top: 0; height: 0; } .carousel { .carousel-item { padding: 0; } } .swiper-dots { left: 45rpx; bottom: 40rpx; } } } /* #endif */ page { background: #f7f8f7; } .m-t { margin-top: 16rpx; } /* 头部 轮播图 */ // .carousel-section { // position: relative; // padding-top: 10px; // overflow: hidden; // .titleNview-placing { // height: var(--status-bar-height); // padding-top: 44px; // box-sizing: content-box; // } // .titleNview-background { // position: absolute; // top: 0; // left: 0; // width: 100%; // height: 426rpx; // transition: 0.4s; // } // .carousel { // width: 100%; // height: 240rpx; // .carousel-item { // width: 100%; // height: 100%; // padding: 0 28rpx; // overflow: hidden; // } // image { // width: 100%; // height: 100%; // border-radius: $border-radius-sm; // } // } // } .swiper-dots { display: flex; position: absolute; left: 60rpx; bottom: 15rpx; width: 72rpx; height: 36rpx; background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABkCAYAAADDhn8LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTk4MzlBNjE0NjU1MTFFOUExNjRFQ0I3RTQ0NEExQjMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTk4MzlBNjA0NjU1MTFFOUExNjRFQ0I3RTQ0NEExQjMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Q0E3RUNERkE0NjExMTFFOTg5NzI4MTM2Rjg0OUQwOEUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Q0E3RUNERkI0NjExMTFFOTg5NzI4MTM2Rjg0OUQwOEUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4Gh5BPAAACTUlEQVR42uzcQW7jQAwFUdN306l1uWwNww5kqdsmm6/2MwtVCp8CosQtP9vg/2+/gY+DRAMBgqnjIp2PaCxCLLldpPARRIiFj1yBbMV+cHZh9PURRLQNhY8kgWyL/WDtwujjI8hoE8rKLqb5CDJaRMJHokC6yKgSCR9JAukmokIknCQJpLOIrJFwMsBJELFcKHwM9BFkLBMKFxNcBCHlQ+FhoocgpVwwnv0Xn30QBJGMC0QcaBVJiAMiec/dcwKuL4j1QMsVCXFAJE4s4NQA3K/8Y6DzO4g40P7UcmIBJxbEesCKWBDg8wWxHrAiFgT4fEGsB/CwIhYE+AeBAAdPLOcV8HRmWRDAiQVcO7GcV8CLM8uCAE4sQCDAlHcQ7x+ABQEEAggEEAggEEAggEAAgQACASAQQCCAQACBAAIBBAIIBBAIIBBAIABe4e9iAe/xd7EAJxYgEGDeO4j3EODp/cOCAE4sYMyJ5cwCHs4rCwI4sYBxJ5YzC84rCwKcXxArAuthQYDzC2JF0H49LAhwYUGsCFqvx5EF2T07dMaJBetx4cRyaqFtHJ8EIhK0i8OJBQxcECuCVutxJhCRoE0cZwMRyRcFefa/ffZBVPogePihhyCnbBhcfMFFEFM+DD4m+ghSlgmDkwlOgpAl4+BkkJMgZdk4+EgaSCcpVX7bmY9kgXQQU+1TgE0c+QJZUUz1b2T4SBbIKmJW+3iMj2SBVBWz+leVfCQLpIqYbp8b85EskIxyfIOfK5Sf+wiCRJEsllQ+oqEkQfBxmD8BBgA5hVjXyrBNUQAAAABJRU5ErkJggg==); background-size: 100% 100%; .num { width: 36rpx; height: 36rpx; border-radius: 50px; font-size: 24rpx; color: #fff; text-align: center; line-height: 36rpx; } .sign { position: absolute; top: 0; left: 50%; line-height: 36rpx; font-size: 12rpx; color: #fff; transform: translateX(-50%); } } /* 分类 */ .cate-section { background-color: #fff; display: flex; justify-content: space-around; align-items: center; flex-wrap: wrap; padding: 30rpx 22rpx; .cate-item { display: flex; flex-direction: column; align-items: center; font-size: $font-sm + 2rpx; color: $font-color-dark; } /* 原图标颜色太深,不想改图了,所以加了透明度 */ image { width: 140rpx; height: 140rpx; // margin-bottom: 5rpx; border-radius: 50%; opacity: 0.7; } } /*公用边框样式*/ %icon { margin-right: 10rpx; display: inline-block; padding: 2rpx 10rpx; border: 1rpx solid $color-yellow; color: $color-yellow; line-height: 1; font-size: $font-base; border-radius: 10rpx; } .jj-tit { display: flex; // height: 50rpx; justify-content: space-between; background-color: #fff; padding-top: 20rpx; .left { padding-left: 20rpx; display: flex; .jj-log { width: 45rpx; height: 45rpx; } .jj-title { font-weight: bold; font-size: 32rpx; padding-left: 15rpx; } } .right { display: flex; width: 200rpx; font-size: 22rpx; // justify-content: sp; justify-content: flex-end; align-items: center; padding-right: 20rpx; color: #999; .jj-more { margin-left: 10rpx; width: 15rpx; height: 22rpx; } } } .jj-wrap { background-color: #fff; // margin: 20rpx 0; .jj { margin: auto; width: 689rpx; height: 202rpx; border-bottom: 1px solid #e5e5e5; padding: 20rpx; padding-left: 0; display: flex; &:last-of-type { border-bottom: none; } .jj-img { flex-shrink: 0; width: 222rpx; height: 158rpx; background-color: #bfa; border-radius: 10rpx; } .jj-info { width: 450rpx; // flex-shrink: 0; padding: 10rpx; padding-left: 15rpx; font-size: 32rpx; font-weight: bold; display: flex; flex-direction: column; justify-content: space-between; .jj-tit-tit { } .jj-val { padding-top: 20rpx; font-size: 28rpx; font-weight: 500; } } } } .carousel-section { position: relative; // padding-top: 10px; overflow: hidden; .titleNview-placing { height: var(--status-bar-height); // padding-top: 44px; box-sizing: content-box; } .titleNview-background { position: absolute; top: 0; left: 0; width: 100%; height: 426rpx; transition: 0.4s; } .carousel { width: 100%; height: 426rpx; .carousel-item { width: 100%; height: 100%; // padding: 0 28rpx; overflow: hidden; } image { width: 100%; height: 100%; // border-radius: $border-radius-sm; } } } $grey: #95A0B1; $text: #333333; $red: #FF4C4C; .wholesale { padding: 20rpx; background-color: #fff; margin: 20rpx 0; .title { display: flex; line-height: 40rpx; .title-t { color: $text; font-weight: bold; margin: 0 20rpx; font-size: 34rpx; } .about { font-size: 24rpx; color: $grey; } image { width: 40rpx; height: 40rpx; } } .date { padding: 30rpx 0; display: flex; justify-content: space-between; .date-item { width: 220rpx; height: 300rpx; position: relative; image { border-radius: 20rpx; // max-width: 32%; width: 220rpx; height: 300rpx; } .item-name { font-size: 32rpx; font-family: PingFang SC; font-weight: 500; color: #FFFFFF; position: absolute; top: 36rpx; padding-left: 30rpx; } .item-time { font-size: 22rpx; font-family: PingFang SC; font-weight: 500; color: #FFFFFF; position: absolute; top: 80rpx; padding-left: 30rpx; } } // image { // border-radius: 20rpx; // // max-width: 32%; // width: 220rpx; // height: 300rpx; // } } } </style>