【秒杀活动列表】
							parent
							
								
									cf23ffbbfe
								
							
						
					
					
						commit
						7f976681e4
					
				|  | @ -1,12 +1,26 @@ | |||
| import request from "@/utils/request.js"; | ||||
| 
 | ||||
| // 获得秒杀时间段列表
 | ||||
| export function getSeckillConfigList() { | ||||
|   return request.get("app-api/promotion/seckill-config/list", {}, { | ||||
|     noAuth: true // TODO 芋艿:后续要做调整
 | ||||
|   }); | ||||
| } | ||||
| 
 | ||||
| // 获得当前秒杀活动
 | ||||
| export function getNowSeckillActivity(id) { | ||||
| export function getNowSeckillActivity() { | ||||
|   return request.get("app-api/promotion/seckill-activity/get-now", {}, { | ||||
|     noAuth: true // TODO 芋艿:后续要做调整
 | ||||
|   }); | ||||
| } | ||||
| 
 | ||||
| // 获得秒杀活动分页
 | ||||
| export function getSeckillActivityPage(data) { | ||||
|   return request.get("app-api/promotion/seckill-activity/page", data, { | ||||
|     noAuth: true // TODO 芋艿:后续要做调整
 | ||||
|   }); | ||||
| } | ||||
| 
 | ||||
| // 获得秒杀活动明细
 | ||||
| export function getSeckillActivity(id) { | ||||
|   return request.get("app-api/promotion/seckill-activity/get-detail", { | ||||
|  |  | |||
|  | @ -5,18 +5,21 @@ | |||
| 			<view class='iconfont icon-xiangzuo' @tap='goBack' :style="'top:'+ (navH/2) +'rpx'" v-if="returnShow"></view> | ||||
| 			<!-- #endif --> | ||||
| 			<view class="saleBox"></view> | ||||
| 
 | ||||
|       <!-- 当前秒杀时间段的轮播图 --> | ||||
| 			<view class="header" v-if="dataList.length"> | ||||
| 				<swiper indicator-dots="true" autoplay="true" :circular="circular" interval="3000" duration="1500" | ||||
| 					indicator-color="rgba(255,255,255,0.6)" indicator-active-color="#fff"> | ||||
| 					<block v-for="(items,index) in dataList[active].slide" :key="index"> | ||||
| 					<block v-for="(items, index) in dataList[active].sliderPicUrls" :key="index"> | ||||
| 						<swiper-item class="borRadius14"> | ||||
| 							<image :src="items.sattDir" class="slide-image borRadius14" lazy-load></image> | ||||
| 							<image :src="items" class="slide-image borRadius14" lazy-load /> | ||||
| 						</swiper-item> | ||||
| 					</block> | ||||
| 				</swiper> | ||||
| 
 | ||||
| 			</view> | ||||
| 			<view class="seckillList acea-row row-between-wrapper"> | ||||
| 
 | ||||
|       <!-- 秒杀时间段 --> | ||||
|       <view class="seckillList acea-row row-between-wrapper"> | ||||
| 				<view class="priceTag"> | ||||
| 					<image src="/static/images/priceTag.png"></image> | ||||
| 				</view> | ||||
|  | @ -24,41 +27,45 @@ | |||
| 					<scroll-view class="scroll-view_x" scroll-x scroll-with-animation :scroll-left="scrollLeft" | ||||
| 						style="width:auto;overflow:hidden;"> | ||||
| 						<block v-for="(item,index) in dataList" :key='index'> | ||||
| 							<view @tap='settimeList(item,index)' class='item' :class="active == index?'on':''"> | ||||
| 								<view class='time'>{{item.time.split(',')[0]}}</view> | ||||
| 								<view class="state">{{item.statusName}}</view> | ||||
| 							<view @tap='settimeList(item,index)' class='item' :class="active === index?'on':''"> | ||||
| 								<view class='time'>{{ item.startTime }}</view> | ||||
| 								<view class="state" v-if="item.status === 1">即将开始</view> | ||||
| 								<view class="state" v-if="item.status === 2">进行中</view> | ||||
| 								<view class="state" v-if="item.status === 3">已结束</view> | ||||
| 							</view> | ||||
| 						</block> | ||||
| 					</scroll-view> | ||||
| 				</view> | ||||
| 			</view> | ||||
| 
 | ||||
|       <!-- 秒杀活动 --> | ||||
| 			<view class='list pad30' v-if='seckillList.length>0'> | ||||
| 				<block v-for="(item,index) in seckillList" :key='index'> | ||||
| 					<view class='item acea-row row-between-wrapper' @tap='goDetails(item)'> | ||||
| 						<view class='pictrue'> | ||||
| 							<image :src='item.image'></image> | ||||
| 							<image :src='item.picUrl' /> | ||||
| 						</view> | ||||
| 						<view class='text acea-row row-column-around'> | ||||
| 							<view class='name line1'>{{item.title}}</view> | ||||
| 							<view class='name line1'>{{item.name}}</view> | ||||
| 							<view class='money'><text class="font-color">¥</text> | ||||
| 								<text class='num font-color'>{{item.price}}</text> | ||||
| 								<text class="y_money">¥{{item.otPrice}}</text> | ||||
| 								<text class='num font-color'>{{ fen2yuan(item.seckillPrice ) }}</text> | ||||
| 								<text class="y_money">¥{{ fen2yuan(item.marketPrice) }}</text> | ||||
| 							</view> | ||||
| 							<view class="limit">限量 <text class="limitPrice">{{item.quota}} {{item.unitName}}</text> | ||||
| 							<view class="limit">限量 <text class="limitPrice">{{ item.stock}} {{item.unitName}}</text> | ||||
| 							</view> | ||||
| 							<view class="progress"> | ||||
| 								<view class='bg-reds' :style="'width:'+item.percent+'%;'"></view> | ||||
| 								<view class='piece'>已抢{{item.percent}}%</view> | ||||
| 								<view class='bg-reds' :style="'width:' + item.percent +'%;'"></view> | ||||
| 								<view class='piece'>已抢{{ item.percent }}%</view> | ||||
| 							</view> | ||||
| 						</view> | ||||
| 						<view class='grab bg-color' v-if="status == 2">马上抢</view> | ||||
| 						<view class='grab bg-color' v-else-if="status == 1">未开始</view> | ||||
| 						<view class='grab bg-color' v-if="dataList[active].status === 2">马上抢</view> | ||||
| 						<view class='grab bg-color' v-else-if="dataList[active].status === 1">未开始</view> | ||||
| 						<view class='grab bg-color-hui' v-else>已结束</view> | ||||
| 					</view> | ||||
| 				</block> | ||||
| 			</view> | ||||
| 		</view> | ||||
| 		<view class='noCommodity' v-if="seckillList.length == 0 && (page != 1 || active== 0)"> | ||||
| 		<view class='noCommodity' v-if="seckillList.length === 0 && (page !== 1 || active === 0)"> | ||||
| 			<view class='pictrue'> | ||||
| 				<image src='../../../static/images/noShopper.png'></image> | ||||
| 			</view> | ||||
|  | @ -66,114 +73,125 @@ | |||
| 		<home></home> | ||||
| 	</div> | ||||
| </template> | ||||
| 
 | ||||
| <script> | ||||
| 	import { | ||||
| 		getSeckillHeaderApi, | ||||
| 		getSeckillList | ||||
| 	} from '../../../api/activity.js'; | ||||
| 	import home from '@/components/home/index.vue'; | ||||
| 	let app = getApp(); | ||||
|   import * as SeckillApi from '@/api/promotion/seckill.js'; | ||||
|   import * as Util from '@/utils/util.js'; | ||||
|   let app = getApp(); | ||||
| 	export default { | ||||
| 		components: { | ||||
| 			home | ||||
| 		}, | ||||
| 		data() { | ||||
| 			return { | ||||
| 				circular: true, | ||||
| 				autoplay: true, | ||||
| 				interval: 500, | ||||
| 				topImage: '', | ||||
| 				seckillList: [], | ||||
| 				timeList: [], | ||||
| 				active: 0, | ||||
| 				scrollLeft: 0, | ||||
| 				interval: 0, | ||||
| 				status: 1, | ||||
| 				countDownHour: "00", | ||||
| 				countDownMinute: "00", | ||||
| 				countDownSecond: "00", | ||||
| 				page: 1, | ||||
| 				limit: 4, | ||||
| 				loading: false, | ||||
| 				loadend: false, | ||||
| 				pageloading: false, | ||||
| 				dataList: [], | ||||
| 				returnShow: true, | ||||
| 				navH: '' | ||||
| 			} | ||||
|         // ========== 秒杀时间段相关变量 ========== | ||||
|         dataList: [], // 时间段数组 | ||||
|         active: 0, // 选中的 dataList 下标 | ||||
|         circular: true, | ||||
|         autoplay: true, | ||||
|         interval: 500, | ||||
|         scrollLeft: 0, | ||||
|         status: 1, | ||||
| 
 | ||||
|         // ========== 秒杀活动相关变量 ========== | ||||
|         seckillList: [], | ||||
|         loading: false, | ||||
|         loadend: false, | ||||
|         page: 1, | ||||
|         limit: 4, | ||||
|         pageloading: false, | ||||
| 
 | ||||
|         // ========== 导航相关变量 ========== | ||||
|         returnShow: true, | ||||
|         navH: '' | ||||
|       } | ||||
| 		}, | ||||
| 		onLoad() { | ||||
| 			var pages = getCurrentPages(); | ||||
| 			this.returnShow = pages.length===1?false:true; | ||||
| 			const pages = getCurrentPages(); | ||||
| 			this.returnShow = pages.length !== 1; | ||||
| 			// #ifdef H5 | ||||
| 			this.navH = app.globalData.navHeight-18; | ||||
| 			// #endif | ||||
| 			this.getSeckillConfig(); | ||||
| 		}, | ||||
| 		methods: { | ||||
| 			goBack: function() { | ||||
| 				uni.navigateBack(); | ||||
| 			}, | ||||
|       /** | ||||
|        * 获得时间段 | ||||
|        */ | ||||
| 			getSeckillConfig: function() { | ||||
| 				let that = this; | ||||
| 				getSeckillHeaderApi().then(res => { | ||||
| 					res.data.map(item => { | ||||
| 						item.slide = JSON.parse(item.slide) | ||||
| 					}) | ||||
| 					that.dataList = res.data; | ||||
| 					that.getSeckillList(); | ||||
| 					that.seckillList = []; | ||||
| 					that.page = 1; | ||||
| 					that.status = that.dataList[that.active].status; | ||||
| 					that.getSeckillList(); | ||||
|         SeckillApi.getSeckillConfigList().then(res => { | ||||
|           this.dataList = res.data; | ||||
|           this.dataList.forEach(config => { | ||||
|             const startTimeInt = parseInt(config.startTime.split(':')[0]) * 60 + parseInt(config.startTime.split(':')[1]); | ||||
|             const endTimeInt = parseInt(config.endTime.split(':')[0]) * 60 + parseInt(config.endTime.split(':')[1]); | ||||
|             const nowInt = new Date().getHours() * 60 + new Date().getMinutes(); | ||||
|             if (nowInt < startTimeInt) { | ||||
|               config.status = 1; | ||||
|             } else if (nowInt > endTimeInt) { | ||||
|               config.status = 3; | ||||
|             } else { | ||||
|               config.status = 2; | ||||
|             } | ||||
|           }) | ||||
|           // 加载秒杀活动 | ||||
|           this.getSeckillList(); | ||||
|         }); | ||||
| 			}, | ||||
|       /** | ||||
|        * 选择一个拼团时间段 | ||||
|        * | ||||
|        * @param item 时间段 | ||||
|        * @param index 下标 | ||||
|        */ | ||||
|       settimeList: function(item, index) { | ||||
|         this.active = index | ||||
|         if (this.interval) { | ||||
|           clearInterval(this.interval); | ||||
|           this.interval = null | ||||
|         } | ||||
|         this.interval = 0; | ||||
| 
 | ||||
| 				}); | ||||
| 			}, | ||||
|         // 加载活动列表 | ||||
|         this.loadend = false; | ||||
|         this.page = 1; | ||||
|         this.seckillList = []; | ||||
|         this.getSeckillList(); | ||||
|       }, | ||||
|       /** | ||||
|        * 获得拼团活动列表 | ||||
|        */ | ||||
| 			getSeckillList: function() { | ||||
| 				var that = this; | ||||
| 				var data = { | ||||
| 					page: that.page, | ||||
| 					limit: that.limit | ||||
| 				}; | ||||
| 				if (that.loadend) return; | ||||
| 				if (that.pageloading) return; | ||||
| 				this.pageloading = true | ||||
| 				getSeckillList(that.dataList[that.active].id, data).then(res => { | ||||
| 					var seckillList = res.data.list; | ||||
| 					var loadend = seckillList.length < that.limit; | ||||
| 					that.page++; | ||||
| 					that.seckillList = that.seckillList.concat(seckillList), | ||||
| 						that.page = that.page; | ||||
| 					that.pageloading = false; | ||||
| 					that.loadend = loadend; | ||||
| 				}).catch(err => { | ||||
| 					that.pageloading = false | ||||
| 				}); | ||||
| 			}, | ||||
| 			settimeList: function(item, index) { | ||||
| 				var that = this; | ||||
| 				this.active = index | ||||
| 				if (that.interval) { | ||||
| 					clearInterval(that.interval); | ||||
| 					that.interval = null | ||||
| 				} | ||||
| 				that.interval = 0, | ||||
| 					that.countDownHour = "00"; | ||||
| 				that.countDownMinute = "00"; | ||||
| 				that.countDownSecond = "00"; | ||||
| 				that.status = that.dataList[that.active].status; | ||||
| 				that.loadend = false; | ||||
| 				that.page = 1; | ||||
| 				that.seckillList = []; | ||||
| 				// wxh.time(e.currentTarget.dataset.stop, that); | ||||
| 				that.getSeckillList(); | ||||
| 				if (this.loadend || this.pageloading) { | ||||
|           return; | ||||
|         } | ||||
|         SeckillApi.getSeckillActivityPage({ | ||||
|           id: this.dataList[this.active].id, | ||||
|           pageNo: this.page, | ||||
|           pageSize: this.limit | ||||
|         }).then(res => { | ||||
| 					const seckillList = res.data.list; | ||||
|           seckillList.forEach(item => { | ||||
|             item.percent = parseInt(100 * (item.totalStock - item.stock) / item.totalStock); | ||||
|           }) | ||||
| 					this.page++; | ||||
|           this.seckillList = this.seckillList.concat(seckillList); | ||||
| 					this.loadend = seckillList.length < this.limit; | ||||
| 				}).finally(() => { | ||||
|           this.pageloading = false; | ||||
|         }) | ||||
| 			}, | ||||
| 			goDetails(item) { | ||||
| 				uni.navigateTo({ | ||||
| 					url: '/pages/activity/goods_seckill_details/index?id=' + item.id | ||||
| 				}) | ||||
| 			} | ||||
| 			}, | ||||
|       goBack: function() { | ||||
|         uni.navigateBack(); | ||||
|       }, | ||||
| 
 | ||||
|       fen2yuan(price) { | ||||
|         return Util.fen2yuan(price) | ||||
|       } | ||||
| 		}, | ||||
| 		/** | ||||
| 		 * 页面上拉触底事件的处理函数 | ||||
|  |  | |||
|  | @ -187,9 +187,7 @@ | |||
| 	import userEvaluation from '@/components/userEvaluation/index.vue' | ||||
| 	// #ifdef MP | ||||
| 	import { base64src } from '@/utils/base64src.js' | ||||
| 	import { | ||||
| 		getQrcode | ||||
| 	} from '@/api/api.js'; | ||||
| 	import { getQrcode } from '@/api/api.js'; | ||||
| 	// #endif | ||||
| 	import parser from "@/components/jyf-parser/jyf-parser"; | ||||
| 	import home from '@/components/home/index.vue' | ||||
|  | @ -201,7 +199,7 @@ | |||
|   import * as ProductSpuApi from '@/api/product/spu.js'; | ||||
|   import * as ProductFavoriteApi from '@/api/product/favorite.js'; | ||||
|   import * as ProductCommentApi from '@/api/product/comment.js'; | ||||
|   import * as SeckillActivityApi from '@/api/promotion/seckill.js'; | ||||
|   import * as SeckillApi from '@/api/promotion/seckill.js'; | ||||
|   import * as Util from '@/utils/util.js'; | ||||
|   import * as ProductUtil from '@/utils/product.js'; | ||||
| 	export default { | ||||
|  | @ -372,7 +370,7 @@ | |||
| 		methods: { | ||||
|       // ========== 秒杀活动相关 ========== | ||||
|       getSeckillDetail: function() { | ||||
|         SeckillActivityApi.getSeckillActivity(this.id).then(res => { | ||||
|         SeckillApi.getSeckillActivity(this.id).then(res => { | ||||
|           this.activity = res.data; | ||||
|           // 计算活动状态 | ||||
|           const now = new Date().getTime(); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 YunaiV
						YunaiV