Files
xuan_wechat/pages/mall/details/details.js
2024-03-04 15:13:17 +08:00

420 lines
11 KiB
JavaScript

/*
* 手太欠
* 愿这世界都如故事里一样 美好而动人~
*/
Page({
/**
* 页面的初始数据
*/
data: {
isFixedTop : 0,
barHeight : getApp().globalData.barHeight, // 状态栏高度
goodsId : '', // 商品id
goodsData : '', // 商品数据
mallContent : '', // 商品详情
skus : [], // 显示的规格-提交
skuid : '',
specselect : '', // 确认购买的规格
selectSkusValues: '', // 默认选项
valueId : '', // 选中规格id
valueIndex : '', // 选中规格下标index
specselectIndex : '',
qtyNumber : 1, // 产品数量
goodsSize : false,
invite : '',
isParent : false, // 绑定邀请码
buyType : null // 购物方式
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
this.setData({
goodsId: options.id,
})
if(getApp().globalData.invite == '' && options.invite){
getApp().globalData.invite = options.invite
}
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
// 获取商品详情
this.goodsInfo();
},
/**
* 输入产品数量
*/
goodsNumberInput(e){
let inventory = this.data.selectSkusValues.stock
if(inventory < e.detail.value ){
wx.showToast({
title: '超出库存数量',
icon : 'none',
})
this.setData({
qtyNumber: Math.min(inventory, e.detail.value)
})
return
}
this.setData({
qtyNumber: e.detail.value
})
},
/**
* 离开产品数量
*/
goodsNumberBlur(e){
let { value } = e.detail
if(value == '' || value <= 0){
this.setData({
qtyNumber: 1
})
}
},
/**
* 商品详情
*/
goodsInfo() {
// 因分享朋友圈启动时未挂载全局接口方法,故这里只能使用微信原生方法
wx.showLoading({
title: '加载中...',
mask : true
})
wx.request({
url : 'https://api.xhtest.douhuofalv.com/api/mall/goods/' + this.data.goodsId,
// url : 'https://api.xuanhuojk.com/api/mall/goods/' + this.data.goodsId,
header : {
"Accept" : "application/json",
"channel" : "client",
"Authorization" : wx.getStorageSync("token") || ""
},
success: res => {
wx.hideLoading()
let { statusCode, data } = res
if(statusCode == 200){
let dataOBJ = data.data
this.setData({
goodsData : dataOBJ,
mallContent : dataOBJ.content.replace(/\<img/gi, '<img style="max-width:100%;height:auto;display:block;"'),
skus : dataOBJ.skus,
skuid : dataOBJ.skus[0].sku_id,
selectSkusValues: dataOBJ.skus[0],
specselect : dataOBJ.skus[0].unit.split('|'),
invite : dataOBJ.invite
})
return
}
wx.showToast({
title: data.message,
icon : 'none'
})
},
fail: err => {
wx.showToast({
title: err.errMsg,
icon : 'none'
})
}
})
},
/**
* 选规格
*/
selectSize(e) {
this.setData({
qtyNumber: 1
})
let valueid = e.currentTarget.dataset.valueid,
index = e.currentTarget.dataset.index
var temp1 = 'specselect['+index+']'
this.setData({
[temp1]: valueid
})
let newlist = []
let str = ''
for (var i in this.data.specselect) {
console.log(this.data.specselect)
if (i == index) {
newlist.push(valueid);
if (i == 0) {
str = valueid
} else {
str = str + '|' + valueid
}
} else {
newlist.push(this.data.specselect[i])
if (i == 0) {
str = this.data.specselect[i]
} else {
str = str + '|' + this.data.specselect[i]
}
}
}
for (var i in this.data.skus) {
if (this.data.skus[i].unit == str) {
this.setData({
selectSkusValues: this.data.skus[i]
})
break;
}
console.log(this.data.selectSkusValues)
}
this.setData({
specselect: newlist
})
},
/**
* 产品数量加减
*/
goodsNumber(e){
let num = this.data.qtyNumber,
val = e.currentTarget.dataset.type,
stock = this.data.selectSkusValues.stock
if (val == 'plus'){
num ++;
if(num > stock) {
wx.showToast({
title : '商品数量不能大于库存量',
icon : 'none'
})
this.setData({
qtyNumber: stock
})
} else {
this.setData({
qtyNumber: num
})
}
}else{
if (num > 1){
num --;
if(num < this.data.qtyNumber) {
this.setData({
qtyNumber: num
})
}
}else{
wx.showToast({
title : '商品数量不能小于1',
icon : 'none'
})
}
this.setData({
qtyNumber: num
})
}
},
/**
* 规格弹出
*/
buyPop(e) {
this.setData({
goodsSize : !this.data.goodsSize,
buyType : e.currentTarget.dataset.type
})
},
/**
* 规格关闭
*/
closeTap() {
this.setData({
goodsSize: false,
buyType : null
})
},
/**
* 检查登录状态
*/
buyTap() {
let token = wx.getStorageSync("token") || null
if(token != null){
switch (this.data.buyType) {
case 'card':
this.orderCard()
break;
default:
this.orderBuy()
break;
}
}else{
wx.navigateTo({
url: "/pages/login/index"
})
}
},
/**
* 立即购买
*/
orderBuy(){
let { sku_id, stock } = this.data.selectSkusValues;
if (stock > 0) {
this.setData({
skuid : sku_id,
goodsSize : false
})
// 是否有推荐人
if(this.data.goodsData.has_parent) {
wx.navigateTo({
url: '/pages/mall/confirm/confirm?skuId=' + sku_id + '&qty=' + this.data.qtyNumber || 1
})
return
}
// 显示绑定手机号弹窗
this.setData({
isParent: true
})
} else {
uni.showToast({
title: '当前商品库存不足',
icon: 'none',
mask: true,
duration: 2000
})
}
},
/**
* 加入购物车
*/
orderCard(){
let { sku_id, stock } = this.data.selectSkusValues;
let qty = this.data.qtyNumber || 1
if (stock <= 0) {
uni.showToast({
title: '当前商品库存不足',
icon : 'none',
})
return
}
wx.showLoading({
title: '加载中...',
mask : true
})
wx.$api.bag.add({ sku_id, qty }).then(res => {
wx.showToast({
title: "已加入",
icon: "success"
})
this.closeTap()
})
},
/**
* 监听页面滑动事件
*/
onPageScroll(e) {
this.setData({
isFixedTop: parseInt(e.scrollTop)
});
},
/**
* 返回上一页
*/
returnGo() {
wx.navigateBack({
delta: 1,
fail: () => {
wx.switchTab({
url: '/pages/mall/index?invite=' + getApp().globalData.inviteText
})
}
})
},
/**
* 回到首页
*/
returnHome() {
wx.switchTab({
url: '/pages/mall/index?invite=' + getApp().globalData.inviteText
})
},
/*
获取邀请码
*/
bindinput(e) {
this.setData({
nameValue: e.detail.value
})
},
/**
* 关闭绑定邀请码弹窗
*/
nameCancel() {
this.setData({
isParent: !this.data.isParent
})
},
/**
* 绑定邀请码
*/
nameTrue() {
let {
sku_id
} = this.data.selectSkusValues;
wx.$api.mall.userBind({
username: this.data.nameValue
}).then(res => {
wx.navigateTo({
url: '/pages/mall/confirm/confirm?skuId=' + sku_id + '&qty=' + this.data.qtyNumber || 1
})
this.setData({
isParent: false
})
})
},
/**
* 放大轮播相册图片
*/
opneBanner(e){
let imgs = [],
index = e.currentTarget.dataset.index
for (let img of e.currentTarget.dataset.imgs){
imgs.push(img)
}
wx.previewImage({
urls : imgs,
current : imgs[index]
})
},
/**
* 分享给朋友
*/
onShareAppMessage(){
return{
title : this.data.goodsData.name,
path : '/pages/mall/details/details?id=' + this.data.goodsId + '&invite=' + this.data.invite,
imageUrl: this.data.goodsData.cover
}
},
/**
* 分享朋友圈
*/
onShareTimeline(){
return{
title : this.data.goodsData.name,
query : 'id=' + this.data.goodsId + '&invite=' + this.data.invite,
imageUrl : this.data.goodsData.cover
}
}
})