<template> <view class="wrapper" v-if="flage"> <div class='goods' v-if="selectedGoods"> <image class="goods-image" :src="selectedGoods.thumbnail" alt=""> <p class="goodsName">{{selectedGoods.goodsName}}</p> <div class="goodsPrice">{{(selectedGoods.promotionPrice || selectedGoods.price ) | unitPrice('¥')}}</div> </div> <div> <div class="tips"> <span v-if="master.toBeGroupedNum"> 还差<span class="num">{{master.toBeGroupedNum || 0}}</span>人,赶快邀请好友拼单吧 </span> <span v-if="isBuy &&!master.toBeGroupedNum >0"> 已成功拼团 </span> </div> <div v-if="isMaster && !isOver"> <div class="share-user" v-if="master.toBeGroupedNum" @click="share()"> 邀请好友拼团 </div> <div class="home" @click="handleClickHome()"> 去首页逛逛 </div> </div> <div v-if="!isMaster && !isOver && !isBuy"> <div class="share-user" @click="toBuy"> 参与拼团 </div> </div> <div v-if="!isMaster && !isOver && isBuy"> <div class="share-user disabled"> 已购买该商品 </div> </div> <div v-if="isOver"> <!-- <div class="share-user disabled"> 拼团已结束 </div> --> <div class="home" @click="handleClickHome()"> 去首页逛逛 </div> </div> </div> <!-- 倒计时 --> <div class="count-down" v-if="!isOver"> <u-count-down bg-color="#ededed" :hide-zero-day="true" @end="isOver" :timestamp="timeStamp"></u-count-down> </div> <div class="user-list" v-if="data.pintuanMemberVOS"> <div class="user-item" v-for="(item,index) in data.pintuanMemberVOS" :key="index"> <span class="master" v-if="item.orderSn == ''">团长</span> <image class="img" :src="item.face" alt=""> </div> </div> <popupGoods :addr="addr" ref="popupGoods" :buyMask="maskFlag" @closeBuy="closePopupBuy" :goodsDetail="goodsDetail" :goodsSpec="goodsSpec" v-if="goodsDetail.id " @handleClickSku="getGoodsDetail" /> <shares @close="closeShare" :link="'/pages/cart/payment/shareOrderGoods?sn='+this.routers.sn+'&sku='+this.routers.sku+'&goodsId='+this.routers.goodsId" type="pintuan" :thumbnail="data.promotionGoods.thumbnail" :goodsName="data.promotionGoods.goodsName" v-if="shareFlage " /> </view> </template> <script> import { getGoods } from "@/api/goods.js"; import { getPinTuanShare } from "@/api/order"; import shares from "@/components/m-share/index"; import storage from "@/utils/storage.js"; import popupGoods from "@/components/m-buy/goods"; //购物车商品的模块 export default { data() { return { flage: false, //判断接口是否正常请求 addr: { id: "", }, maskFlag: false, //商品弹框 timeStamp: 0, shareFlage: false, data: "", isMaster: true, selectedGoods: "", //选择的商品规格昵称 routers: "", //传参数据 goodsDetail: "", //商品详情 goodsSpec: "", master: "", // 团长 PromotionList: "", //优惠集合 isGroup: false, //是否拼团 isOver: false, //是否结束活动 isBuy: false, //当前用户是是否购买 }; }, components: { shares, popupGoods, }, watch: { isGroup(val) { if (val) { let timer = setInterval(() => { this.$refs.popupGoods.buyType = "PINTUAN"; clearInterval(timer); }, 100); } else { this.$refs.popupGoods.buyType = ""; } }, }, onLoad(options) { this.routers = options; }, mounted() { this.init(this.routers.sn, this.routers.sku); }, methods: { closeShare() { this.shareFlage = false; }, // 这里的话得先跳到商品详情才能购买商品 toBuy() { this.maskFlag = true; this.$refs.popupGoods.parentOrder = { ...this.master, orderSn: this.routers.sn, }; this.$refs.popupGoods.isMask = true; this.$refs.popupGoods.isClose = true; this.$refs.popupGoods.buyType = "PINTUAN"; }, // 分享 share() { this.shareFlage = true; }, closePopupBuy(val) { this.maskFlag = false; }, // 实例化本页面 async init(sn, sku) { let res = await getPinTuanShare(sn, sku); if (res.data.success && res.data.result.promotionGoods) { this.flage = true; this.data = res.data.result; this.selectedGoods = res.data.result.promotionGoods; let endTime = Date.parse( res.data.result.promotionGoods.endTime.replace(/-/g, "/") ); // 获取当前剩余的拼团商品时间 let timeStamp = Date.parse(new Date(endTime)) / 1000; // 获取当前时间时间戳 let dateTime = Date.parse(new Date()) / 1000; this.timeStamp = parseInt(timeStamp - dateTime); this.timeStamp <= 0 ? (this.isOver = true) : (this.isOver = false); // 获取剩余拼团人数 this.master = res.data.result.pintuanMemberVOS.length != 0 && res.data.result.pintuanMemberVOS.filter((item) => { return item.orderSn == ""; })[0]; // 获取当前是否是拼团本人 if ( storage.getUserInfo(this.routers.sku, this.routers.goodsId).id == this.master.memberId ) { this.isMaster = true; } else { this.isMaster = false; // 获取商品详情 this.getGoodsDetail({ id: this.routers.sku, goodsId: this.routers.goodsId, }); } // 获取当前商品是否已经购买 if (storage.getUserInfo().id) { let isBuy = res.data.result.pintuanMemberVOS.filter((item) => { return item.memberId == storage.getUserInfo().id; }); isBuy.length != 0 ? (this.isBuy = true) : (this.isBuy = false); } } else { uni.showToast({ title: "当前拼团单有误!请联系管理员重试", duration: 2000, icon: "none", }); } }, // 获取商品详情 getGoodsDetail(val) { let { id, goodsId } = val; uni.showLoading({ title: "加载中", mask: true, }); getGoods(id, goodsId).then((response) => { this.goodsDetail = response.data.result.data; this.selectedGoods = response.data.result.data; this.goodsSpec = response.data.result.specs; uni.hideLoading(); this.PromotionList = response.data.result.promotionMap; // 判断是否拼团活动 如果有则显示拼团活动信息 this.PromotionList && Object.keys(this.PromotionList).forEach((item) => { if (item.indexOf("PINTUAN") == 0) { this.isGroup = true; } }); }); }, handleClickHome() { uni.switchTab({ url: "/pages/tabbar/home/index", }); }, }, }; </script> <style lang="scss" scoped> page { background: #fff; } .over { margin: 10% 0; } .goods { display: flex; align-content: center; justify-content: center; flex-direction: column; text-align: center; width: 80%; margin: 0 auto; } .goods-image { margin: 40rpx auto; width: 400rpx; height: 400rpx; } .goodsName { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; font-size: 30rpx; font-weight: bold; } .goodsPrice { margin-top: 10rpx; font-weight: bold; font-size: 40rpx; color: $main-color; } .master { z-index: 99; position: absolute; top: 0; left: 0; background: $light-color; padding: 0 8rpx; border-radius: 10rpx; color: #fff; } .user-item { position: relative; margin: 20rpx; } .count-down { margin: 40rpx 0; text-align: center; } .img { border-radius: 50%; border: 2rpx solid $light-color; width: 100rpx; height: 100rpx; } .user-list { width: 80%; margin: 0 auto; display: flex; flex-wrap: wrap; justify-content: flex-start; } .tips { margin-top: 10%; text-align: center; font-size: 40rpx; font-weight: bold; margin-bottom: 100rpx; } .num { color: $main-color; font-size: 60rpx; margin: 0 10rpx; } .home, .share-user { height: 80rpx; line-height: 80rpx; text-align: center; width: 80%; margin: 30rpx auto 0 auto; color: #fff; border-radius: 0.4em; } .share-user { background: $main-color; } .disabled { background: rgba($main-color, $alpha: 0.2); } .home { color: $main-color; border: 2rpx solid $main-color; } </style>