|
|
<template> <view :data-theme="theme"> <skeleton :show="showSkeleton" :isNodes="isNodes" ref="skeleton" loading="chiaroscuro" selector="skeleton" bgcolor="#FFF"></skeleton> <view class="skeleton" :style="{visibility: showSkeleton ? 'hidden' : 'visible'}"> <!-- 头部 --> <view class='navbar' :class="opacity>0.6?'bgwhite':''"> <view class='navbarH' :style='"height:"+navH+"rpx;"'> <view class='navbarCon acea-row' :style="{ paddingRight: navbarRight + 'px' }"> <!-- #ifdef MP --> <view class="select_nav flex justify-center align-center" id="home" :style="{ top: homeTop + 'rpx' }"> <text class="iconfont icon-fanhui2 px-20" @tap="returns"></text> <text class="iconfont icon-gengduo5 px-20" @tap="showNav"></text> <text class="nav_line"></text> </view> <!-- #endif --> <!-- #ifdef H5 || APP-PLUS --> <view id="home" class="home acea-row row-center-wrapper iconfont icon-xiangzuo h5_back" :class="opacity>0.5?'on':''" :style="{ top: homeTop + 'rpx' }" v-if="returnShow" @tap="returns"> </view> <!-- #endif --> <view class="header flex justify-between align-center"> <view class="item" :class="navActive === index ? 'on' : ''" v-for="(item,index) in navList" :key='index' @tap="tap(item,index)"> {{ item }} </view> </view> <!-- #ifdef H5 || APP-PLUS --> <view class="right_select" :style="{ top: homeTop + 'rpx' }" @tap="showNav"> <text class="iconfont icon-gengduo2"></text> </view> <!-- #endif --> </view> </view> </view> <view class="dialog_nav" :style='"top:"+navH+"rpx;"' v-show="currentPage"> <view class="dialog_nav_item" :class="item.after" v-for="(item,index) in selectNavList" :key="index" @click="linkPage(item.url)"> <text class="iconfont" :class="item.icon"></text> <text class="pl-20">{{item.name}}</text> </view> </view> <view class='product-con'> <scroll-view :scroll-top="scrollTop" scroll-y='true' scroll-with-animation="true" :style="'height:'+height+'px;'" @scroll="scroll"> <view id="past0"> <productConSwiper :imgUrls='imgUrls' class="skeleton-rect" :videoline="videoLink" ></productConSwiper> <view class='nav acea-row row-between-wrapper mb30 skeleton-rect'> <view class='money'>¥<text class='num'>{{storeInfo.price}}</text><text class='y-money'>¥{{storeInfo.otPrice}}</text></view> <view class='acea-row row-middle'> <view class='time flex' v-if="status == 2"> <view> <text class="iconfont icon-miaosha1"></text> <text class="pl-06" style="font-size: 26rpx;">距结束:</text> </view> <countDown :bgColor="bgColor" :is-day="false" :tip-text="' '" :day-text="' '" :hour-text="' : '" :minute-text="' : '" :second-text="' '" :datatime="datatime"></countDown> </view> </view> </view> <view class="pad30 mb30"> <view class='wrapper borRadius14 mb30'> <view class='introduce acea-row row-between'> <view class='infor skeleton-rect'> {{storeInfo.storeName}}</view> <view class='iconfont icon-fenxiang' @click="listenerActionSheet"></view> </view> <view class='label acea-row row-middle'> <view class='stock skeleton-rect'>累计销售:{{parseFloat(storeInfo.sales) + parseFloat(storeInfo.ficti) || 0}}{{storeInfo.unitName}}</view> <view class="skeleton-rect">限量: {{ attribute.productSelect.quota ? attribute.productSelect.quota : 0 }} {{storeInfo.unitName}}</view> </view> </view> <view class='attribute mb30 borRadius14' @click="selecAttr"> <view class="acea-row row-between-wrapper"> <view class="line1 skeleton-rect">{{attrTxt}}: <text class='atterTxt'>{{attrValue}}</text> </view> <view class='iconfont icon-jiantou'></view> </view> <view class="acea-row row-between-wrapper" style="margin-top:7px;padding-left:55px;" v-if="skuArr.length > 1"> <view class="flex"> <image :src="item.image" v-for="(item,index) in skuArr.slice(0,4)" :key="index" class="attrImg"></image> </view> <view class="switchTxt">共{{skuArr.length}}种规格可选</view> </view> </view> <view class='userEvaluation' id="past1"> <view class='title acea-row row-between-wrapper' :style="replyCount==0?'border-bottom-left-radius:14rpx;border-bottom-right-radius:14rpx;':''"> <view>用户评价({{replyCount}})</view> <navigator class='praise' hover-class='none' :url="'/pages/goods/goods_comment_list/index?productId='+ storeInfo.productId"> <text class='font_color'>{{replyChance}}%</text>好评率 <text class='iconfont icon-jiantou'></text> </navigator> </view> <userEvaluation :reply="reply" v-if="replyCount"></userEvaluation> </view> </view> </view> <view class='product-intro' id="past2"> <view class='title'> <image :src="urlDomain+'crmebimage/perset/staticImg/xzuo.png'"></image> <span class="sp">产品详情</span> <image :src="urlDomain+'crmebimage/perset/staticImg/xyou.png'"></image> </view> <view class='conter'> <jyf-parser :html="storeInfo.content" ref="article" :tag-style="tagStyle"></jyf-parser> </view> </view> <view style='height:120rpx;'></view> </scroll-view> <view class='footer acea-row row-between-wrapper'> <!-- #ifdef MP --> <button hover-class='none' class='item skeleton-rect' @click="onClickService" v-if="chatConfig.telephone_service_switch === 'open'"> <view class='iconfont icon-kefu'></view> <view>客服</view> </button> <template v-else> <button open-type="contact" hover-class='none' class='item skeleton-rect' v-if="chatConfig.wx_chant_independent=='open'"> <view class='iconfont icon-kefu'></view> <view>客服</view> </button> <button class="item" hover-class='none' @click="wxChatService" v-else> <view class='iconfont icon-kefu'></view> <text>联系客服</text> </button> </template> <!-- #endif --> <!-- #ifndef MP --> <navigator hover-class="none" class="item skeleton-rect" @click="onClickService"> <view class="iconfont icon-kefu"></view> <view>客服</view> </navigator> <!-- #endif --> <view @tap='setCollect' class='item skeleton-rect'> <view class='iconfont icon-shoucang1' v-if="userCollect"></view> <view class='iconfont icon-shoucang' v-else></view> <view>收藏</view> </view> <view class="bnt acea-row skeleton-rect" v-if="dataShow == 0"> <view class="joinCart bnts" @tap="openAlone" v-if="masterStatus !=='soldOut'">单独购买</view> <view class="bg-color-hui bnts radius" v-if="masterStatus =='soldOut'">单独购买</view> <view class="buy bnts">立即购买</view> </view> <view class="bnt acea-row skeleton-rect" v-if="status == 2 && attribute.productSelect.quota>0 && datatime > new Date().getTime()/1000"> <view class="joinCart bnts" @tap="openAlone" v-if="masterStatus !=='soldOut'">单独购买</view> <view class="bg-color-hui bnts radius" v-if="masterStatus =='soldOut'">单独购买</view> <view class="buy bnts" @tap="goCat">立即购买</view> </view> <view class="bnt acea-row skeleton-rect" v-if="status == 2 && (attribute.productSelect.quota <= 0) && datatime > new Date().getTime()/1000"> <view class="joinCart bnts" @tap="openAlone" v-if="masterStatus !=='soldOut'">单独购买</view> <view class="bg-color-hui bnts radius" v-if="masterStatus =='soldOut'">单独购买</view> <view class="bnts bg-color-hui">已售罄</view> </view> <view class="bnt acea-row skeleton-rect" v-if="status == 0"> <view class="joinCart bnts" @tap="openAlone" v-if="masterStatus !=='soldOut'">单独购买</view> <view class="bg-color-hui bnts radius" v-if="masterStatus =='soldOut'">单独购买</view> <view class="buy bnts bg-color-hui">已关闭</view> </view> <view class="bnt acea-row skeleton-rect" v-if="status == 1"> <view class="joinCart bnts" @tap="openAlone" v-if="masterStatus !=='soldOut'">单独购买</view> <view class="bg-color-hui bnts radius" v-if="masterStatus =='soldOut'">单独购买</view> <view class="buy bnts bg-color-hui">未开始</view> </view> <view class="bnt acea-row skeleton-rect" v-if="status == 2 && new Date().getTime()/1000 - datatime >=0"> <view class="joinCart bnts" @tap="openAlone" v-if="masterStatus !=='soldOut'">单独购买</view> <view class="bg-color-hui bnts radius" v-if="masterStatus =='soldOut'">单独购买</view> <view class="buy bnts bg-color-hui">已结束</view> </view> </view> </view> <!-- <shareRedPackets :sharePacket="sharePacket" @listenerActionSheet="listenerActionSheet" @closeChange="closeChange"></shareRedPackets> --> <product-window :attr='attribute' :limitNum='1' @myevent="onMyEvent" @ChangeAttr="ChangeAttr" @ChangeCartNum="ChangeCartNum" @attrVal="attrVal" @iptCartNum="iptCartNum" @getImg="showImg"></product-window> <!-- 分享按钮 --> <view class="generate-posters" :class="posters ? 'on' : ''"> <view class="generateCon acea-row row-middle"> <!-- #ifndef MP --> <button class="item" hover-class="none" v-if="weixinStatus === true" @click="H5ShareBox = true"> <view class="pictrue"> <image :src="urlDomain+'crmebimage/perset/staticImg/weixin.png'"></image> </view> <view class="">分享给好友</view> </button> <!-- #endif --> <!-- #ifdef MP --> <button class="item" open-type="share" hover-class="none"> <view class="pictrue"> <image :src="urlDomain+'crmebimage/perset/staticImg/weixin.png'"></image> </view> <view class="">分享给好友</view> </button> <!-- #endif --> <!-- #ifdef APP-PLUS --> <view class="item" @click="appShare('WXSceneSession')"> <view class="iconfont icon-weixin3"></view> <view class="">微信好友</view> </view> <view class="item" @click="appShare('WXSenceTimeline')"> <view class="iconfont icon-pengyouquan"></view> <view class="">微信朋友圈</view> </view> <!-- #endif --> <!-- #ifdef H5 || MP --> <view class="item" @click="getpreviewImage"> <view class="pictrue"> <image :src="urlDomain+'crmebimage/perset/staticImg/changan.png'"></image> </view> <view class="">预览发图</view> </view> <!-- #endif --> <!-- #ifdef MP --> <button class="item" hover-class="none" @click="savePosterPath"> <view class="pictrue"> <image :src="urlDomain+'crmebimage/perset/staticImg/haibao.png'"></image> </view> <view class="">保存海报</view> </button> <!-- #endif --> </view> <view class="generateClose acea-row row-center-wrapper" @click="posterImageClose">取消</view> </view> <cus-previewImg ref="cusPreviewImg" :list="skuArr" @changeSwitch="changeSwitch" /> <view class="mask" v-if="posters" @click="closePosters"></view> <view class="mask" v-if="canvasStatus" @click="listenerActionClose"></view> <view class="mask_transparent" v-if="currentPage" @touchmove="hideNav" @click="hideNav()"></view> <!-- 海报展示 --> <view class='poster-pop' v-if="canvasStatus"> <image :src='posterImage'></image> </view> <view class="canvas" v-else> <canvas style="width:750px;height:1190px;" canvas-id="firstCanvas"></canvas> <canvas canvas-id="qrcode" :style="{width: `${qrcodeSize}px`, height: `${qrcodeSize}px`}"/> </view> <!-- 发送给朋友图片 --> <view class="share-box" v-if="H5ShareBox"> <image :src="urlDomain+'crmebimage/perset/staticImg/share-info.png'" @click="H5ShareBox = false"></image> </view> </view>
</view></template>
<script> const app = getApp(); import uQRCode from '@/js_sdk/Sansnn-uQRCode/uqrcode.js' import { HTTP_H5_URL } from '@/config/app.js'; import { mapGetters } from "vuex"; import { getSeckillDetail, seckillCode } from '@/api/activity.js'; import { collectAdd, collectDel, getReplyList, getReplyConfig } from '@/api/store.js'; import productConSwiper from '@/components/productConSwiper/index.vue' import productWindow from '@/components/productWindow/index.vue' import userEvaluation from '@/components/userEvaluation/index.vue' import cusPreviewImg from '@/components/cus-previewImg/cus-previewImg.vue' // #ifdef MP
import { base64src } from '@/utils/base64src.js' import { getQrcode } from '@/api/api.js'; // #endif
import parser from "@/components/jyf-parser/jyf-parser"; import countDown from '@/components/countDown'; import shareRedPackets from '@/components/shareRedPackets'; import { imageBase64 } from "@/api/public"; import { toLogin } from '@/libs/login.js'; import { silenceBindingSpread } from "@/utils"; import { spread } from "@/api/user"; export default { data() { return { urlDomain: this.$Cache.get("imgHost"), showSkeleton: true, //骨架屏显示隐藏
isNodes: 0, //控制什么时候开始抓取元素节点,只要数值改变就重新抓取
bgColor: { 'bgColor': '#333333', 'Color': '#fff', 'isDay': true, 'width': '44rpx', 'timeTxtwidth': '16rpx', }, dataShow: 0, id: 0, time: 0, countDownHour: "00", countDownMinute: "00", countDownSecond: "00", storeInfo: {}, imgUrls: [], parameter: { 'navbar': '1', 'return': '1', 'title': '抢购详情页', 'color': false }, attribute: { cartAttr: false, productAttr: [], productSelect: {} }, productValue: [], isOpen: false, attr: '请选择', attrValue: '', status: 1, isAuto: false, isShowAuth: false, iShidden: false, limitNum: 1, //限制本属性产品的个数;
personNum: 0, //限制用户购买的个数;
iSplus: false, replyCount: 0, //总评论数量
reply: [], //评论列表
replyChance: 0, navH: "", navList: ['商品', '评价', '详情'], opacity: 0, scrollY: 0, topArr: [], toView: '', height: 0, heightArr: [], lock: false, scrollTop: 0, tagStyle: { img: 'width:100%;display:block;', table: 'width:100%', video: 'width:100%' }, datatime: 0, navActive: 0, meunHeight: 0, backH: '', posters: false, weixinStatus: false, posterImageStatus: false, canvasStatus: false, //海报绘图标签
storeImage: '', //海报产品图
PromotionCode: '', //二维码图片
posterImage: '', //海报路径
posterbackgd: `${this.$Cache.get("imgHost")}crmebimage/perset/staticImg/posterbackgd.png`, actionSheetHidden: false, cart_num:'', attrTxt: '', qrcodeSize: 600, imagePath:'',//海报路径
imgTop:'', H5ShareBox: false, //公众号分享图片
sharePacket: { isState: true, //默认不显示
}, buyNum: 1, errT: '', returnShow: true, homeTop: 20, navbarRight: 0, userCollect: false, theme:app.globalData.theme, skuArr:[], currentPage:false, selectSku:{}, selectNavList:[ {name:'首页',icon:'icon-shouye8',url:'/pages/index/index',after:'dialog_after'}, {name:'搜索',icon:'icon-sousuo6',url:'/pages/goods/goods_search/index',after:'dialog_after'}, {name:'购物车',icon:'icon-gouwuche7',url:'/pages/order_addcart/order_addcart',after:'dialog_after'}, {name:'我的收藏',icon:'icon-shoucang3',url:'/pages/users/user_goods_collection/index',after:'dialog_after'}, {name:'个人中心',icon:'icon-gerenzhongxin1',url:'/pages/user/index'}, ], chatConfig:{ consumer_hotline:'', telephone_service_switch:'close', wx_chant_independent:'open' }, //客服配置
masterStatus:'', openPages: '' ,//分享地址
videoLink: '', } }, components: { shareRedPackets, productConSwiper, 'productWindow': productWindow, userEvaluation, cusPreviewImg , "jyf-parser": parser, countDown }, computed: mapGetters(['isLogin','uid','chatUrl']), watch:{ isLogin:{ handler:function(newV,oldV){ if(newV){ this.getSeckillDetail(); } }, deep:true } }, onLoad(options) { setTimeout(() => { this.isNodes++; }, 500); let that = this; that.$store.commit("PRODUCT_TYPE", 'normal'); let statusBarHeight = ''; var pages = getCurrentPages(); that.$set(that,'chatConfig',that.$Cache.getItem('chatConfig')); //that.returnShow = pages.length === 1 ? false : true;
//设置商品列表高度
uni.getSystemInfo({ success: function(res) { that.height = res.windowHeight statusBarHeight = res.statusBarHeight //res.windowHeight:获取整个窗口高度为px,*2为rpx;98为头部占据的高度;
}, }); // #ifndef APP-PLUS
this.navH = app.globalData.navHeight // #endif
// #ifdef APP-PLUS
this.navH = 90 // #endif
// #ifdef MP
let menuButtonInfo = uni.getMenuButtonBoundingClientRect() this.meunHeight = menuButtonInfo.height this.backH = (that.navH / 2) + (this.meunHeight / 2) that.$set(that,'theme',that.$Cache.get('theme')); //用户从分享卡片进入的场景下获取主题色配置
// #endif
if (!options.scene && !options.id){ this.showSkeleton = false; this.$util.Tips({ title: '缺少参数无法查看商品' }, { url: '/pages/index/index' }); return; } if (options.id) this.id = options.id; // 仅仅小程序扫码进入获取商品id,商品类型
if (options.scene) { let qrCodeValue = this.$util.getUrlParams(decodeURIComponent(options.scene)); let mapeMpQrCodeValue = this.$util.formatMpQrCodeData(qrCodeValue); this.id = mapeMpQrCodeValue.id ? mapeMpQrCodeValue.id : ''; app.globalData.spread = mapeMpQrCodeValue.spread; } if(options.spread) app.globalData.spread = options.spread; this.getSeckillDetail(); this.$nextTick(() => { // #ifdef MP
const menuButton = uni.getMenuButtonBoundingClientRect(); const query = uni.createSelectorQuery().in(this); query .select('#home') .boundingClientRect(data => { this.homeTop = menuButton.top * 2 + menuButton.height - data.height; }) .exec(); // #endif
}) if(this.isLogin && parseInt(app.globalData.spread)>0){ silenceBindingSpread() } }, methods: { wxChatService(){ let chatUrlArr = this.chatUrl.split('?') uni.navigateTo({ url:`/pages/users/web_page/index?webUel=${chatUrlArr[0]}&title=客服&${chatUrlArr[1]}` }) }, // app分享
// #ifdef APP-PLUS
appShare(scene){ let that = this let routes = getCurrentPages(); // 获取当前打开过的页面路由数组
let curRoute = routes[routes.length - 1].$page.fullPath // 获取当前页面路由,也就是最后一个打开的页面路由
uni.share({ provider: "weixin", scene: scene, type: 0, href: `${HTTP_H5_URL}${curRoute}&spread=${that.uid}`, title: that.storeInfo.storeName, summary:app.globalData.companyName, imageUrl: that.storeInfo.image, success: function (res) { that.posters = false; }, fail: function (err) { uni.showToast({ title:'分享失败', icon:'none', duration:2000 }) that.posters = false; } }); }, // #endif
onClickService(){ if(this.chatConfig.telephone_service_switch === 'open'){ uni.makePhoneCall({ phoneNumber: this.chatConfig.consumer_hotline //仅为示例
}); }else{ // #ifdef APP-PLUS
uni.navigateTo({ url: '/pages/users/web_page/index?webUel=' + this.chatUrl + '&title=客服' }) // #endif
// #ifndef APP-PLUS
location.href = this.chatUrl; // #endif
} }, closePosters:function(){ this.posters = false; }, getProductReplyList: function() { getReplyList(this.storeInfo.productId, { page: 1, limit: 3, type: 0, }).then(res => { this.reply = res.data.list ? [res.data.list[0]] : []; }) }, getProductReplyCount: function() { let that = this; getReplyConfig(that.storeInfo.productId).then(res => { that.$set(that, 'replyChance', res.data.replyChance * 100); that.$set(that, 'replyCount', res.data.sumCount); }); }, /** * 购物车手动填写 * */ iptCartNum: function (e) { this.$set(this.attribute.productSelect, 'cart_num', e?e:1); this.$set(this, "cart_num", e); if (e > 1) { return this.$util.Tips({ title: `该商品每次限购1${this.storeInfo.unitName}` }); } }, // 后退
returns: function() { uni.navigateBack() }, getSeckillDetail: function() { let that = this; getSeckillDetail(that.id).then(res => { this.dataShow = 1; this.masterStatus = res.data.masterStatus; this.storeInfo = res.data.storeSeckill; this.userCollect = res.data.userCollect; this.status = this.storeInfo.seckillStatus; this.datatime = Number(this.storeInfo.timeSwap); let sliderImage = JSON.parse(res.data.storeSeckill.sliderImage); if (that.getFileType(sliderImage[0]) == 'video') { //判断轮播图第一张是否是视频,如果是,就赋值给videoLink,并且将其在轮播图中删除
this.$set(this, 'videoLink', sliderImage[0]); sliderImage.splice(0, 1); } this.imgUrls = sliderImage || []; this.attribute.productAttr = res.data.productAttr; this.productValue = res.data.productValue; this.personNum = res.data.storeSeckill.quota; this.attribute.productSelect.num = res.data.storeSeckill.num; for(let key in res.data.productValue){ let obj = res.data.productValue[key]; that.skuArr.push(obj) } this.$set(this, "selectSku", that.skuArr[0]); this.getProductReplyList(); this.getProductReplyCount(); let productAttr = res.data.productAttr.map(item => { return { attrName : item.attrName, attrValues: item.attrValues.split(','), id:item.id, isDel:item.isDel, productId:item.productId, type:item.type } }); this.$set(this.attribute,'productAttr',productAttr); // #ifdef H5
that.storeImage = that.storeInfo.image; that.make(); that.setShare(); that.getImageBase64(that.storeInfo.image); // #endif
// #ifdef MP
that.getQrcode(); that.imgTop = res.data.storeSeckill.image // #endif
// #ifndef H5
that.downloadFilestoreImage(); // #endif
that.DefaultSelect(); setTimeout(function() { that.infoScroll(); }, 1000); that.openPages = '/pages/activity/goods_seckill_details/index?id=' + that.id + '&spread=' + that.uid ; setTimeout(() => { that.showSkeleton = false }, 1000) }).catch(err => { that.$util.Tips({ title:err },{ tab:3 }) }); }, getFileType(fileName) { // 后缀获取
let suffix = ''; // 获取类型结果
let result = ''; try { const flieArr = fileName.split('.'); suffix = flieArr[flieArr.length - 1]; } catch (err) { suffix = ''; } // fileName无后缀返回 false
if (!suffix) { return false; } suffix = suffix.toLocaleLowerCase(); // 图片格式
const imglist = ['png', 'jpg', 'jpeg', 'bmp', 'gif']; // 进行图片匹配
result = imglist.find(item => item === suffix); if (result) { return 'image'; } // 匹配 视频
const videolist = ['mp4', 'm2v', 'mkv', 'rmvb', 'wmv', 'avi', 'flv', 'mov', 'm4v']; result = videolist.find(item => item === suffix); if (result) { return 'video'; } // 其他 文件类型
return 'other'; }, setShare: function() { this.$wechat.isWeixin() && this.$wechat.wechatEvevt([ "updateAppMessageShareData", "updateTimelineShareData", "onMenuShareAppMessage", "onMenuShareTimeline" ], { desc: app.globalData.companyName, title: this.storeInfo.storeName, link: location.href, imgUrl: this.storeInfo.image }).then(res => { }).catch(err => { console.log(err); }); }, /** * 默认选中属性 * */ DefaultSelect: function() { let self = this, productAttr = self.attribute.productAttr,value = []; for (var key in self.productValue) { if (self.productValue[key].quota > 0) { value = productAttr.length ? key.split(",") : []; break; } } for (let i = 0; i < value.length; i++) { self.$set(productAttr[i], "index", value[i]); } //sort();排序函数:数字-英文-汉字;
let productSelect = this.productValue[value.join(",")]; if (productSelect && productAttr.length) { self.$set( self.attribute.productSelect, "storeName", self.storeInfo.storeName ); self.$set(self.attribute.productSelect, "image", productSelect.image); self.$set(self.attribute.productSelect, "price", productSelect.price); self.$set(self.attribute.productSelect, "stock", productSelect.stock); self.$set(self.attribute.productSelect, "unique", productSelect.id); self.$set(self.attribute.productSelect, "quota", productSelect.quota); self.$set(self.attribute.productSelect, "quotaShow", productSelect.quotaShow); self.$set(self.attribute.productSelect, "cart_num", 1); self.$set(self, "attrValue", value.join(",")); this.$set(self, "attrTxt", "已选择") self.attrValue = value.join(",") } else if (!productSelect && productAttr.length) { self.$set( self.attribute.productSelect, "storeName", self.storeInfo.storeName ); self.$set(self.attribute.productSelect, "image", self.storeInfo.image); self.$set(self.attribute.productSelect, "price", self.storeInfo.price); self.$set(self.attribute.productSelect, "quota", 0); self.$set(self.attribute.productSelect, "quota", 0); self.$set(self.attribute.productSelect, "stock", 0); self.$set(self.attribute.productSelect, "unique", ""); self.$set(self.attribute.productSelect, "cart_num", 0); self.$set(self, "attrValue", ""); self.$set(self, "attrTxt", "请选择"); } else if (!productSelect && !productAttr.length) { self.$set( self.attribute.productSelect, "storeName", self.storeInfo.storeName ); self.$set(self.attribute.productSelect, "image", self.storeInfo.image); self.$set(self.attribute.productSelect, "price", self.storeInfo.price); self.$set(self.attribute.productSelect, "quota", self.storeInfo.quota); self.$set(self.attribute.productSelect, "quotaShow", self.storeInfo.quotaShow); self.$set(self.attribute.productSelect, "stock", self.storeInfo.stock); self.$set( self.attribute.productSelect, "unique", "" ); self.$set(self.attribute.productSelect, "cart_num", 1); self.$set(self, "attrValue", ""); self.$set(self, "attrTxt", "请选择"); } }, selecAttr: function() { this.attribute.cartAttr = true }, showNav(){ this.currentPage = !this.currentPage; }, onMyEvent: function() { this.$set(this.attribute, 'cartAttr', false); this.$set(this, 'isOpen', false); }, /** * 购物车数量加和数量减 * */ ChangeCartNum: function(changeValue) { //changeValue:是否 加|减
//获取当前变动属性
let productSelect = this.productValue[this.attrValue]; if (this.cart_num) { productSelect.cart_num = this.cart_num; this.attribute.productSelect.cart_num = this.cart_num; } //如果没有属性,赋值给商品默认库存
if (productSelect === undefined && !this.attribute.productAttr.length) productSelect = this.attribute.productSelect; //无属性值即库存为0;不存在加减;
if (productSelect === undefined) return; let stock = productSelect.stock || 0; let quota = productSelect.quota || 0; let num = this.attribute.productSelect; let nums = this.storeInfo.num || 0; //设置默认数据
if (productSelect.cart_num == undefined) productSelect.cart_num = 1; if (changeValue) { if (num.cart_num === 1) { return this.$util.Tips({ title: `该商品每次限购1${this.storeInfo.unitName}` }); } num.cart_num++; let arrMin = []; arrMin.push(nums); arrMin.push(quota); arrMin.push(stock); let minN = Math.min.apply(null, arrMin); if (num.cart_num >= minN) { this.$set(this.attribute.productSelect, "cart_num", minN ? minN : 1); this.$set(this, "cart_num", minN ? minN : 1); } this.$set(this, "cart_num", num.cart_num); this.$set(this.attribute.productSelect, "cart_num", num.cart_num); } else { num.cart_num--; if (num.cart_num < 1) { this.$set(this.attribute.productSelect, "cart_num", 1); this.$set(this, "cart_num", 1); } this.$set(this, "cart_num", num.cart_num); this.$set(this.attribute.productSelect, "cart_num", num.cart_num); } }, attrVal(val) { this.attribute.productAttr[val.indexw].index = this.attribute.productAttr[val.indexw].attrValues[val.indexn]; }, /** * 属性变动赋值 * */ ChangeAttr: function(res) { this.$set(this,'cart_num',1); let productSelect = this.productValue[res]; this.$set(this, "selectSku", productSelect); if (productSelect) { this.$set(this.attribute.productSelect, "image", productSelect.image); this.$set(this.attribute.productSelect, "price", productSelect.price); this.$set(this.attribute.productSelect, "stock", productSelect.stock); this.$set(this.attribute.productSelect, "unique", productSelect.id); this.$set(this.attribute.productSelect, "cart_num", 1); this.$set(this.attribute.productSelect, "quota", productSelect.quota); this.$set(this.attribute.productSelect, "quotaShow", productSelect.quotaShow); this.$set(this, "attrValue", res); this.attrTxt = "已选择" } else { this.$set(this.attribute.productSelect, "image", this.storeInfo.image); this.$set(this.attribute.productSelect, "price", this.storeInfo.price); this.$set(this.attribute.productSelect, "stock", 0); this.$set(this.attribute.productSelect, "unique", ""); this.$set(this.attribute.productSelect, "cart_num", 0); this.$set(this.attribute.productSelect, "quota", 0); this.$set(this.attribute.productSelect, "quotaShow", 0); this.$set(this, "attrValue", ""); this.attrTxt = "已选择"
} }, scroll: function(e) { var that = this, scrollY = e.detail.scrollTop; var opacity = scrollY / 500; opacity = opacity > 1 ? 1 : opacity; that.opacity = opacity that.scrollY = scrollY if (that.lock) { that.lock = false return; } for (var i = 0; i < that.topArr.length; i++) { if (scrollY < that.topArr[i] - (app.globalData.navHeight / 2) + that.heightArr[i]) { that.navActive = i break } } if(that.currentPage == true){ that.$set(that,'currentPage',false); } }, tap: function(item, index) { var id = item.id; var index = index; var that = this; // if (!this.data.good_list.length && id == "past2") {
// id = "past3"
// }
this.toView = id; this.navActive = index; this.lock = true; this.scrollTop = index > 0 ? that.topArr[index] - (app.globalData.navHeight / 2) : that.topArr[index] }, infoScroll: function() { var that = this, topArr = [], heightArr = []; for (var i = 0; i < that.navList.length; i++) { //productList
//获取元素所在位置
var query = wx.createSelectorQuery().in(this); var idView = "#past" + i; // if (!that.data.good_list.length && i == 2) {
// var idView = "#past" + 3;
// }
query.select(idView).boundingClientRect(); query.exec(function(res) { var top = res[0].top; var height = res[0].height; topArr.push(top); heightArr.push(height); that.topArr = topArr that.heightArr = heightArr }); }; }, /** * 收藏商品 */ setCollect: function() { var that = this; if (this.userCollect) { collectDel(this.storeInfo.productId).then(res => { that.userCollect = !that.userCollect }) } else { collectAdd(this.storeInfo.productId).then(res => { that.userCollect = !that.userCollect }) } }, /* * 单独购买 */ openAlone: function() { uni.navigateTo({ url: `/pages/goods/goods_details/index?id=${this.storeInfo.productId}` }) }, /* * 下订单 */ goCat: function() { var that = this; var productSelect = this.productValue[this.attrValue]; var productSelect = this.productValue[this.attrValue]; if (that.cart_num > 1) { return this.$util.Tips({ title: `该商品每人限购1${this.storeInfo.unitName}` }); } //打开属性
if (this.isOpen) this.attribute.cartAttr = true else this.attribute.cartAttr = !this.attribute.cartAttr //只有关闭属性弹窗时进行加入购物车
if (this.attribute.cartAttr === true && this.isOpen == false) return this.isOpen = true //如果有属性,没有选择,提示用户选择
if (this.attribute.productAttr.length && productSelect === undefined && this.isOpen == true) return app.$util.Tips({ title: '请选择属性' }); this.$Order.getPreOrder("buyNow",[{ "attrValueId": parseFloat(this.attribute.productSelect.unique), "seckillId": parseFloat(this.id), "productNum": parseFloat(this.cart_num ? this.cart_num : this.attribute.productSelect.cart_num), "productId": parseFloat(this.storeInfo.productId) }]); }, /** * 分享打开 * */ listenerActionSheet: function() { // #ifdef H5
if (this.$wechat.isWeixin() === true) { this.weixinStatus = true; } // #endif
// #ifndef APP-PLUS
this.goPoster() // #endif
this.posters = true; }, // 分享关闭
listenerActionClose: function() { this.posters = false; }, //隐藏海报
posterImageClose: function() { this.canvasStatus = false; this.posters = false; }, //替换安全域名
setDomain: function(url) { url = url ? url.toString() : ''; //本地调试打开,生产请注销
if (url.indexOf("https://") > -1) return url; else return url.replace('http://', 'https://'); }, //获取海报产品图
downloadFilestoreImage: function() { let that = this; uni.downloadFile({ url: that.setDomain(that.storeInfo.image), success: function(res) { that.storeImage = res.tempFilePath; }, fail: function() { return that.$util.Tips({ title: '' }); that.storeImage = ''; }, }); }, getImageBase64:function(images){ let that = this; imageBase64({url:images}).then(res=>{ that.$set(that,'imgTop',res.data.code); }) }, // 小程序关闭分享弹窗;
goFriend: function() { this.posters = false; }, /** * 生成海报 */ goPoster: function() { let that = this; uni.showLoading({ title: '海报生成中', mask: true }); that.posters = false; let arrImagesUrl = ''; let arrImagesUrlTop = ''; if(!that.PromotionCode){ uni.hideLoading(); that.$util.Tips({ title: that.errT }); return } setTimeout(() => { if (!that.imgTop) { uni.hideLoading(); that.$util.Tips({ title: '无法生成商品海报!' }); return } }, 2000); uni.downloadFile({ url: that.imgTop, //仅为示例,并非真实的资源
success: (res) => { arrImagesUrlTop = res.tempFilePath; let arrImages = [that.posterbackgd, arrImagesUrlTop, that.PromotionCode]; let storeName = that.storeInfo.storeName; let price = that.storeInfo.price; setTimeout(() => { that.$util.PosterCanvas(arrImages, storeName, price, that.storeInfo.otPrice,function(tempFilePath) { that.posterImage = tempFilePath; that.canvasStatus = true; uni.hideLoading(); }); }, 500); } }); }, // 小程序二维码
getQrcode(){ let that = this; let data = { pid: that.uid, id: that.id, path: 'pages/activity/goods_seckill_details/index' } getQrcode(data).then(res=>{ base64src(res.data.code,Date.now(), res => { that.PromotionCode = res; }); }).catch(err => { that.errT = err; }); }, // 生成二维码;
make() { let href = location.href.split('?')[0] + "?id="+ this.id + "&spread=" + this.uid; uQRCode.make({ canvasId: 'qrcode', text: href, size: this.qrcodeSize, margin: 10, success: res => { this.PromotionCode = res; }, complete: (res) => { }, fail:res=>{ this.$util.Tips({ title: '海报二维码生成失败!' }); } }) }, // 图片预览;
getpreviewImage: function() { if (this.posterImage) { let photoList = []; photoList.push(this.posterImage) uni.previewImage({ urls: photoList, current: this.posterImage }); } else { this.$util.Tips({ title: '您的海报尚未生成' }); } }, /* * 保存到手机相册 */ // #ifdef MP
savePosterPath: function() { let that = this; uni.getSetting({ success(res) { if (!res.authSetting['scope.writePhotosAlbum']) { uni.authorize({ scope: 'scope.writePhotosAlbum', success() { uni.saveImageToPhotosAlbum({ filePath: that.posterImage, success: function(res) { that.posterImageClose(); that.$util.Tips({ title: '保存成功', icon: 'success' }); }, fail: function(res) { that.$util.Tips({ title: '保存失败' }); } }) } }) } else { uni.saveImageToPhotosAlbum({ filePath: that.posterImage, success: function(res) { that.posterImageClose(); that.$util.Tips({ title: '保存成功', icon: 'success' }); }, fail: function(res) { that.$util.Tips({ title: '保存失败' }); }, }) } } }) }, // #endif
setShareInfoStatus: function() { let data = this.storeInfo; let href = location.href; if (this.$wechat.isWeixin()) { href = href.indexOf("?") === -1 ? href + "?spread=" + this.uid : href + "&spread=" + this.uid; let configAppMessage = { desc: app.globalData.companyName, title: data.storeName, link: href, imgUrl: data.image }; this.$wechat.wechatEvevt(["updateAppMessageShareData", "updateTimelineShareData"], configAppMessage) } }, hideNav(){ this.currentPage = false; }, //下拉导航页面跳转
linkPage(url){ if(url == '/pages/index/index' || url == '/pages/order_addcart/order_addcart' || url == '/pages/user/index'){ uni.switchTab({ url }) }else{ uni.navigateTo({ url }) } this.currentPage = false }, showImg(index){ this.$refs.cusPreviewImg.open(this.selectSku.suk) }, changeSwitch(e){ let productSelect = this.skuArr[e]; this.$set(this,'selectSku',productSelect); var skuList = productSelect.suk.split(','); skuList.forEach((i,index)=>{ this.$set(this.attribute.productAttr[index],'index',skuList[index]); }) if (productSelect) { this.$set(this.attribute.productSelect, "image", productSelect.image); this.$set(this.attribute.productSelect, "price", productSelect.price); this.$set(this.attribute.productSelect, "stock", productSelect.stock); this.$set(this.attribute.productSelect, "unique", productSelect.id); this.$set(this.attribute.productSelect, "quota", productSelect.quota); this.$set(this.attribute.productSelect, "quotaShow", productSelect.quotaShow); this.$set(this.attribute.productSelect, "cart_num", 1); this.$set(this, "attrTxt", "已选择") this.$set(this, "attrValue", productSelect.suk) } } }, //#ifdef MP
onShareAppMessage() { let that = this; return { title: that.storeInfo.title, path: app.globalData.openPages, imageUrl: that.storeInfo.image }; }, //#endif
}</script>
<style scoped lang="scss"> .pl-06{ padding-left: 6rpx; } .pr-14{ padding-right: 14rpx; } .select_nav{ width: 170rpx !important; height: 60rpx !important; border-radius: 33rpx; background: rgba(255, 255, 255, 0.3); border: 1px solid rgba(0,0,0,0.07); color: #000; position: fixed; font-size: 18px; line-height: 58rpx; z-index: 1000; left: 14rpx; } .px-20{ padding: 0 20rpx 0; } .nav_line{ content: ''; display: inline-block; width: 1px; height: 34rpx; background: rgba(0, 0, 0, 0.2); position: absolute; left: 0; right: 0; margin: auto; } .bgwhite{ background: #fff; } .input { display: flex; align-items: center; /* #ifdef MP */ width: 300rpx; /* #endif */ /* #ifndef MP */ width: 460rpx; /* #endif */ height: 58rpx; padding: 0 0 0 30rpx; border: 1px solid #E0E0E0; border-radius: 29rpx; color: #BBBBBB; font-size: 26rpx; position: fixed; left: 0; right: 0; margin: auto; background: #fff; .iconfont { margin-right: 20rpx; font-size: 26rpx; color: #666666; } } .container_detail{ /* #ifdef MP */ margin-top:32rpx; /* #endif */ } .tab_nav{ width: 100%; height: 48px; padding:0 30rpx 0; } .h5_back { color: #000; position: fixed; left:20rpx; font-size: 32rpx; text-align: center; width: 58rpx; height: 58rpx; background: rgba(255, 255, 255, 0.3); border: 1px solid rgba(0,0,0,0.1); border-radius: 50%; } .right_select{ width: 58rpx; height: 58rpx; background: rgba(255, 255, 255, 0.3); border: 1px solid rgba(0,0,0,0.1); border-radius: 50%; position: fixed; right: 20rpx; text-align: center; line-height: 58rpx; } .dialog_nav{ position: absolute; /* #ifdef MP */ left: 14rpx; /* #endif */ /* #ifdef H5 || APP-PLUS*/ right: 14rpx; /* #endif */ width: 240rpx; background: #FFFFFF; box-shadow: 0px 0px 16rpx rgba(0, 0, 0, 0.08); z-index: 310; border-radius: 14rpx; &::before{ content: ''; width: 0; height: 0; position: absolute; /* #ifdef MP */ left: 0; right: 0; margin:auto; /* #endif */ /* #ifdef H5 || APP-PLUS */ right: 8px; /* #endif */ top:-9px; border-bottom: 10px solid #F5F5F5; border-left: 10px solid transparent; /*transparent 表示透明*/ border-right: 10px solid transparent; } } .dialog_nav_item{ width: 100%; height: 84rpx; line-height: 84rpx; padding: 0 20rpx 0; box-sizing: border-box; border-bottom: #eee; font-size: 28rpx; color: #333; position: relative; .iconfont{ font-size: 32rpx; } } .dialog_after{ ::after{ content: ''; position: absolute; width:86px; height: 1px; background-color: #EEEEEE; bottom: 0; right: 0; } } .justify-center{ justify-content: center; } .align-center { align-items: center; } .pl-20{ padding-left: 20rpx; } .userEvaluation{ i{ display: inline-block; } } .product-con{ .line1{ width: 600rpx; } } .share-box { z-index: 1000; position: fixed; left: 0; top: 0; width: 100%; height: 100%; image { width: 100%; height: 100%; } } .generate-posters { width: 100%; height: 318rpx; background-color: #fff; position: fixed; left: 0; bottom: 0; z-index: 388; transform: translate3d(0, 100%, 0); transition: all 0.3s cubic-bezier(0.25, 0.5, 0.5, 0.9); border-top: 1rpx solid #eee; .generateCon { height: 220rpx; } .generateClose { height: 98rpx; font-size: 28rpx; color: #333333; border-top: 1px solid #eee; } .item { .pictrue { width: 96rpx; height: 96rpx; border-radius: 50%; margin: 0 auto 6rpx auto; image { width: 100%; height: 100%; border-radius: 50%; } } } } .generate-posters.on { transform: translate3d(0, 0, 0); } .generate-posters .item { flex: 1; text-align: center; font-size: 30rpx; } .generate-posters .item .iconfont { font-size: 80rpx; color: #5eae72; } .generate-posters .item .iconfont.icon-haibao { color: #5391f1; } .generate-posters .item .iconfont.icon-haowuquan1 { color: #ff954d; }
.navbar .header { font-size: 30rpx; color: #050505; display: flex; align-items: center; /* #ifndef MP */ width: 460rpx; /* #endif */ /* #ifdef MP */ width: 360rpx; /* #endif */ height: 100rpx; position: fixed; left: 0; right: 0; margin: auto; }
.icon-xiangzuo { /* #ifdef H5 */ top: 20rpx !important; /* #endif */ }
.navbar .header .item { position: relative; margin: 0 25rpx; }
.navbar .header .item.on:before { position: absolute; width: 60rpx; height: 5rpx; background-repeat: no-repeat; content: ""; background-image: linear-gradient(to right, #ff3366 0%, #ff6533 100%); bottom: -10rpx; left: 50%; margin-left: -28rpx; }
.navbar { position: fixed; // background-color: #fff;
top: 0; left: 0; z-index: 98; width: 100%; }
.navbar .navbarH { position: relative; }
.navbar .navbarH .navbarCon { position: absolute; bottom: 0; height: 100rpx; width: 100%; }
.product-con .nav { background-image: url('data:image/png;base64,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
background-repeat: no-repeat; background-size: 100% 100%; width: 100%; height: 110rpx; padding: 0 30rpx; box-sizing: border-box; @include main_bg_color(theme); }
.product-con .nav .money { font-size: 28rpx; color: #fff; font-weight: 700; }
.product-con .nav .money .num { font-size: 48rpx; }
.product-con .nav .money .y-money { font-size: 26rpx; margin-left: 10rpx; text-decoration: line-through; }
.product-con .nav .time { font-size: 20rpx; color: #fff; text-align: center; }
.product-con .nav .time .timeCon { margin-top: 10rpx; }
.product-con .nav .time .timeCon .num { padding: 0 7rpx; font-size: 22rpx; color: #ff3d3d; background-color: #fff; border-radius: 2rpx; }
.product-con .nav .timeState { font-size: 28RPX; color: #FFF; }
.product-con .nav .iconfont { color: #fff; font-size: 30rpx; margin-left: 20rpx; }
.product-con .wrapper .introduce { margin: 0; }
.product-con .wrapper .introduce .infor { width: 570rpx; }
.product-con .wrapper .introduce .iconfont { font-size: 36rpx; color: #999999; }
.product-con .wrapper .label { margin: 18rpx 0 0 0; font-size: 24rpx; color: #82848f; }
.product-con .wrapper .label .stock { width: 255rpx; margin-right: 28rpx; }
.product-con .footer { padding: 0 20rpx 0 30rpx; position: fixed; bottom: 0; width: 100%; box-sizing: border-box; background-color: #fff; z-index: 99; border-top: 1rpx solid #f0f0f0; height: 100rpx; height: calc(100rpx+ constant(safe-area-inset-bottom)); ///兼容 IOS<11.2/
height: calc(100rpx + env(safe-area-inset-bottom)); ///兼容 IOS>11.2/
}
.product-con .footer .item { font-size: 18rpx; color: #666; }
.product-con .footer .item .iconfont { text-align: center; font-size: 40rpx; }
.product-con .footer .item .iconfont.icon-shoucang1 { @include main-color(theme); }
.product-con .footer .item .iconfont.icon-gouwuche1 { font-size: 40rpx; position: relative; }
.product-con .footer .item .iconfont.icon-gouwuche1 .num { color: #fff; position: absolute; font-size: 18rpx; padding: 2rpx 8rpx 3rpx; border-radius: 200rpx; top: -10rpx; right: -10rpx; }
.product-con .footer .bnt { width: 540rpx; height: 76rpx; }
.product-con .footer .bnt .bnts { width: 270rpx; text-align: center; line-height: 76rpx; color: #fff; font-size: 28rpx; }
.product-con .footer .bnt .joinCart { border-radius: 50rpx 0 0 50rpx; @include left_color(theme); } .radius{ border-radius: 50rpx 0 0 50rpx !important; } .bg_color{ @include main_bg_color(theme); } .font_color{ @include main_color(theme); } .product-con .footer .bnt .buy { border-radius: 0 50rpx 50rpx 0; // background-image: linear-gradient(to right, #fa6514 0%, #e93323 100%);
@include main_bg_color(theme); }
.setCollectBox { font-size: 18rpx; color: #666; }
.bg-color-hui { background: #bbbbbb !important; border-radius: 0 50rpx 50rpx 0; } .canvas { position:fixed; z-index: -5; opacity: 0; } .poster-pop { width: 450rpx; height: 714rpx; position: fixed; left: 50%; transform: translateX(-50%); z-index: 99; top: 50%; margin-top: -357rpx; } .poster-pop image { width: 100%; height: 100%; display: block; } .poster-pop .close { width: 46rpx; height: 75rpx; position: fixed; right: 0; top: -73rpx; display: block; } .poster-pop .save-poster { background-color: #df2d0a; font-size: :22rpx; color: #fff; text-align: center; height: 76rpx; line-height: 76rpx; width: 100%; } .poster-pop .keep { color: #fff; text-align: center; font-size: 25rpx; margin-top: 10rpx; } .mask { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0, 0, 0, 0.6); z-index: 9; } .mask_transparent{ position: fixed; top: 0; left: 0; right: 0; bottom: 0; background:transparent; z-index: 300; } .home-nav { /* #ifdef H5 */ top: 20rpx !important; /* #endif */ } .home-nav { color: #fff; position: fixed; font-size: 33rpx; width: 56rpx; height: 56rpx; z-index: 999; left: 33rpx; background: rgba(190, 190, 190, 0.5); border-radius: 50%; &.on{ background: unset; color: #333; } } .home-nav .line { width: 1rpx; height: 24rpx; background: rgba(255, 255, 255, 0.25); } .home-nav .icon-xiangzuo { width: auto; font-size: 28rpx; } .attrImg{ width: 66rpx; height: 66rpx; border-radius: 6rpx; display: block; margin-right: 14rpx; } .switchTxt{ height: 60rpx; flex: 1; line-height: 60rpx; box-sizing: border-box; background: #EEEEEE; padding-right: 0 24rpx 0; border-radius: 8rpx; text-align: center; }</style>
|