dengrui/pagesA/productDetail/productDetail.vue

363 lines
14 KiB
Vue
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view class="padding-x120">
<status-nav :statusBackw="true" :whereCome="whereCome*1" :statusTitle="true" :title-val="titleVal" :tabcolor="'#ffffff'"></status-nav>
<view v-if="pageShow">
<!-- 使用标题栏 -->
<view class="bacb padding-x20" :style="{paddingTop:(statusHNH+10)+'px'}">
<!-- 图片 -->
<image :src="zhuImg" mode="aspectFit" style="height: 682rpx;width: 100%;margin-top: 20rpx;"></image>
<view class="margin20">
<view class="disba">
<!-- 现价、原价 -->
<view v-if="user_type!='personal'">
<view class="colorf78 fon24 bold">¥<text class="fon36">{{proDetailTwo.cur_price/100}}</text>.00</view>
<view class="color9 fon24 dis" v-if="proDetailTwo.cur_price!=proDetailTwo.price">原价<text style="text-decoration: line-through;">¥{{proDetailTwo.price/100}}.00</text></view>
</view>
<view v-if="user_type=='personal'" class="colorf78 fon24 bold">¥<text class="fon36">{{proDetailTwo.price/100}}</text>.00</view>
<!-- 收藏 -->
<view class="discc" @tap="collection(proDetail.id)">
<image v-if="isCollection" style="width: 40rpx; height: 38rpx;" src="/static/img/public/shouc.png" mode=""></image>
<image v-else class="animated bounceIn" style="width: 40rpx; height: 38rpx;" src="/static/img/public/shoucactive.png" mode=""></image>
<view class="fon24 color9 margin-s10">收藏</view>
</view>
</view>
<view class="color33 fon32 margin-sx16 clips2">{{proDetail.name}}</view>
<view class="fon24 color9">{{proDetail.sub_title}}</view>
</view>
</view>
<!-- 商品评价 -->
<view v-if="user_type!='personal'" class="margin-s20 bacb">
<view class="disba padding-sx20 padding-zy20">
<view class="fon32 bold">商品评价({{evalTotal}})</view>
<view class="disac">
<view @tap="checkAllp(proDetail.id)" class="fon26 color9 margin-y10">查看全部</view>
<image style="width: 12rpx;height: 22rpx;" src="/static/img/my/youj.png" mode=""></image>
</view>
</view>
<!-- 评价列表 -->
<evaluateList :eval-arr="evalArr" :isEval="true" :isShow="false" :len="2"></evaluateList>
</view>
<!-- 商品详情 -->
<view class="disbcac padding-sx40">
<view class="gouwcxian "></view>
<image class="margin-zy20 margin-s10 gouwchh" src="/static/img/gouwc/heh.png" mode=""></image>
<view class="bold fon32">商品详情</view>
<view class="gouwcxian margin-z20"></view>
</view>
<!-- 详情 -->
<view class="padding20 bacb">
<view class="fon32 bold margin-sx10" style="color: #353535;">规格与包装</view>
<view class="disba fon24 color6 flw">
<view class="disac margin-x10" style="width: 50%;" v-if="proDetail.brand_name!=''"><view style="width: 32%;" class="flexs"><text>品牌</text></view><view class="flexs clips1"> {{proDetail.brand_name}} </view></view>
<view class="disac margin-x10" style="width: 50%;"><view style="width: 32%;" class="flexs">商品编号</view><view class="clips1"> {{proDetailTwo.coding}}</view></view>
<view class="disac margin-x10" style="width: 50%;"><view style="width: 32%;" class="flexs">商品名称</view><view class="clips1"> {{proDetail.name}}</view></view>
<view class="disac margin-x10" style="width: 50%;"><view style="width: 32%;" class="flexs">类别</view><view class="flexs clips1"> {{proDetail.category_name}}</view></view>
<block v-for="(itemspec,indexspec) in proDetailTwo.own_spec" :key="indexspec">
<view class="disac margin-x10" style="width: 50%;"><view style="width: 32%;" class="flexs">{{itemspec.name}}</view><view class="flexs clips1">{{itemspec.value}}{{itemspec.unit}}</view></view>
</block>
<!-- <view class="disac margin-x10" style="width: 50%;"><view style="width: 32%;" class="flexs">容量(L)</view><view class="flexs clips1"> 其他</view></view>
<view class="disac margin-x10" style="width: 50%;"><view style="width: 32%;" class="flexs">商品毛重</view><view class="flexs clips1"> 11.6kg</view></view> -->
</view>
<view class="margin-s20">
<rich-text :nodes="detailCon"></rich-text>
<!-- <image :src="itemimg.src" mode="widthFix" style="width: 100%;" v-for="(itemimg,indeximg) in detailImg" :key="indeximg"></image> -->
</view>
</view>
<!-- 猜你喜欢 -->
<view class="disbcac padding-sx40">
<view class="gouwcxian "></view>
<image class="margin-zy20 margin-s10 gouwchh" src="/static/img/gouwc/heh.png" mode=""></image>
<view class="bold fon32">猜你喜欢</view>
<view class="gouwcxian margin-z20"></view>
</view>
<!-- 喜欢列表 -->
<twocoluList @addChe="addChe" :dataList="dataList"></twocoluList>
<!-- 分享 -->
<button v-if="showShare" data-name="shareBtn" open-type="share" plain="true" style="border: none;">
<image class="zIn5 share animated pulse infinite" src="/static/img/product/share.png" mode=""></image>
</button>
<!-- 底部 -->
<bottomkf :detail="proDetail" @diaoq="proDetailEv" :sku_img="sku_img"></bottomkf>
<!-- -->
<backTop :showTop="showTop" @backTop="backTop"></backTop>
</view>
<view v-if="xiaj" class="zanwu"></view>
</view>
</template>
<script>
import twocoluList from '@/components/twocoluList.vue';
import bottomkf from '@/components/bottomkf.vue';
import evaluateList from '@/components/evaluateList.vue';
import backTop from '@/components/backTop.vue';
export default {
components:{
twocoluList,
bottomkf,
evaluateList,
backTop
},
data(){
return {
whereCome:0,
dataInfo:{},
dataList:[],
guigArr:[],
guigCurrent:0,
num:1,
isBtn:false,
evalArr:[],
showTop:false,
isCollection:true,
proDetail:{},
zhuImg:'',
detailImg:[],
proDetailTwo:{},
detailCon:'',
order_sku_id:'',
evalTotal:0,
sku_img:'',
page:1,
size:10,
total:'',
isZanw:true,
only_image:0,
statusHNH:uni.getStorageSync('statusHNH'),
pageShow:false,
titleVal:'',
xiaj:false,//是否下架
showShare:true,
user_type:uni.getStorageSync('user_type')//权限
}
},
onPageScroll(e) {
e.scrollTop > 360 ? this.showTop = true : this.showTop = false
},
onShareAppMessage(options) {
var ya = this;
  var shareObj = {
    title: ya.proDetail.name, // 默认是小程序的名称(可以写slogan等)
    path: '/pagesA/productDetail/productDetail?id='+ya.proDetail.id+"&index=2", // 默认是当前页面,必须是以‘/’开头的完整路径
    imageUrl: ya.zhuImg, //自定义图片路径可以是本地文件路径、代码包文件路径或者网络图片路径支持PNG及JPG不传入 imageUrl 则使用默认截图。显示图片长宽比是 5:4
    success: function(res){
      // 转发成功之后的回调
      if(res.errMsg == 'shareAppMessage:ok'){
      }
    },
    fail: function(res){
      // 转发失败之后的回调
      if(res.errMsg == 'shareAppMessage:fail cancel'){
        // 用户取消转发
      }else if(res.errMsg == 'shareAppMessage:fail'){
        // 转发失败,其中 detail message 为详细失败信息
      }
    }
  };
  // 来自页面内的按钮的转发
  if( options.from == 'button' ){
    var eData = options.target.dataset;
//console.log( eData.name ); // shareBtn
    // 此处可以修改 shareObj 中的内容
    shareObj.path = '/pages/tabbar/my/my';
  }
  return shareObj;
},
onShow() {
this.$toolAll.tools.guoq()
if(uni.getStorageSync('is_active')==0) {
this.showShare = false
}
uni.removeStorageSync('orderInfo')
},
onLoad(options) {
let ya = this
if(uni.getStorageSync('token')!=''){
let whereNum = options.index
if(whereNum!=undefined) this.whereCome = whereNum
this.checkDetail(options.id)
this.like()
} else {
this.$toolAll.tools.showToast('您目前是游客,请登录')
setTimeout(function(){
uni.navigateTo({
url:'/pages/login/login'
})
},2000)
}
// this.proDetail = uni.getStorageSync('proDetail')
// this.zhuImg = this.$http + this.proDetail.main_sku.main_image
// if(this.proDetail.main_sku.images.length!=0){
// this.proDetail.main_sku.images.forEach(item=>{
// let detailImgObj = {
// src:this.$http+item.src
// }
// this.detailImg.push(detailImgObj)
// })
// }
},
onReachBottom() {
if(this.total!=this.dataList.length && this.total>=this.dataList.length){
this.page++
this.like()//调用自主预约列表事件
} else {
if(this.isZanw) this.$toolAll.tools.showToast('暂无更多商品列表','none',1000)
this.isZanw = false
}
},
methods:{
like(){//查询猜你喜欢列表
this.$requst.post('product/spu/guess',{page:this.page,size:this.size}).then(res=>{
// console.log('猜你喜欢',res);
if(res.code==0){
if(this.page==1) this.page = []
this.total = res.data.total
if(res.data.list.length!=0){
res.data.list.forEach(item=>{
let likeObj = {
id:item.main_sku.id,
spu_id:item.id,
src:this.$http + item.main_sku.main_image,
title:item.name,
price:item.main_sku.cur_price/100,
tags:item.tags
}
this.dataList.push(likeObj)
})
}
}
},error=>{})
},
proDetailEv(){
this.sku_img = this.$http + this.proDetail.sku_list[0].main_image
},
checkDetail(id){//详情接口
this.$requst.post('product/spu/detail',{id:id}).then(res=>{
if(res.code==0){
this.pageShow = true
this.proDetail = res.data
this.titleVal = this.proDetail.name
if(res.data.is_collected==0) this.isCollection = true
if(res.data.is_collected==1) this.isCollection = false
if(res.data.sku_list.length!=0){
for (let i = 0; i < res.data.sku_list.length; i++) {
if(res.data.sku_list[i].is_main==1){
this.proDetailTwo = res.data.sku_list[i]
this.zhuImg = this.$http + res.data.sku_list[i].main_image
this.order_sku_id = res.data.sku_list[i].id
break;
} else {
this.proDetailTwo = res.data.sku_list[i]
this.zhuImg = this.$http + res.data.sku_list[0].main_image
this.order_sku_id = res.data.sku_list[0].id
}
}
}
this.detailCon = this.$toolAll.tools.escape2Html(this.proDetail.spu_detail.description)
this.checkEval(this.proDetail.id)
}
// if(res.code==4004){
// }
},error=>{
this.xiaj = true
setTimeout(function(){
uni.navigateBack({delta:1})
},1500)
})
},
checkEval(id){//评论接口
let allEvaluateObj = {
spu_id:id,
page:this.page,
size:this.size,
only_image:this.only_image
}
let pingArr = []
this.$requst.post('product/spu/comment-list',allEvaluateObj).then(res=>{
if(res.code==0){
this.evalTotal = res.data.total
if(res.data.list.length!=0){
res.data.list.forEach((item,index)=>{
let imgArr = []
item.images.forEach(itemimg=>{
let imgObj = {
src:this.$http + itemimg
}
imgArr.push(imgObj)
})
let haveH = item.account.headimgurl.slice(0,4)
if(haveH!='http') {
haveH = this.$http
} else haveH = ''
let newname = this.$toolAll.tools.hideName(item.account.nickname)//隐藏姓名中间几位
let evalObj = {
src:haveH + item.account.headimgurl,
name:newname,
xingj:item.grade,
content:item.content,
title:item.orderSku.spu_name,
time:item.created_at,
imgList:imgArr
}
if(index<2){
this.evalArr.push(evalObj)
}
pingArr.push(evalObj)
})
}
}
// console.log('pingArr:',pingArr);
// console.log(res);
},error=>{})
},
checkAllp(id){
uni.setStorageSync('plOrder',this.proDetail)
uni.navigateTo({url:'/pagesB/allEvaluate/allEvaluate?id='+id})
},
backTop(){
uni.pageScrollTo({
scrollTop: 0,
duration: 300
});
},
addChe(e){//加入购物车事件
// console.log('加入购物车:'+e)
this.$toolAll.tools.showToast('加入购物车'+e)
},
collection(id){
if(uni.getStorageSync('is_active')==0) {
this.$toolAll.tools.showToast('您目前是游客,请授权登录')
setTimeout(()=>{
uni.navigateTo({url:'/pages/login/login'})
},1500)
} else {
// console.log('收藏商品ID',id);
let newApi = ''
if(this.isCollection==true){//添加收藏事件
this.$requst.post('user/collection-add',{spu_id:id}).then(res=>{
// console.log(res);
if(res.code==0){
this.isCollection = false
uni.showToast({title:'收藏成功',icon:'none'})
}
},error=>{})
} else {//取消收藏事件
// console.log('信息',this.proDetail);
this.$requst.post('user/collection-del',{spu_id:id}).then(res=>{
// console.log(res);
if(res.code==0){
this.isCollection = true
uni.showToast({title:'取消成功',icon:'none'})
}
},error=>{})
}
}
}
}
}
</script>
<style>
</style>