You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

207 lines
5.2 KiB

const productUtil = require('../../utils/product.js')
var app = getApp()
Page({
data: {
title: '',
id: 0,
quantity: 1,
product: {},
windowWidth: 375,
windowHeight: 667,
pixelRatio: 2,
accountType: '',
from_share: false,
codeFloating: {
data: {},
style: {
width: 100,
height: 100
},
pos: {
left: 650,
top: 650
},
state: 'small',
url: '',
imgStyle: ''
}
},
onShareAppMessage: function () {
return {
title: this.data.product.name,
desc: "巴爷供销社 - 高品质购物",
path: `pages/show_product/show_product?id=${this.data.product.id}&share=1`
}
},
onLoad (params) {
var that = this
var id = params.id
try {
var res = wx.getSystemInfoSync()
this.setData({
windowWidth: res.windowWidth,
windowHeight: res.windowHeight,
pixelRatio: res.pixelRatio
})
app.globalData.windowWidth = res.windowWidth
app.globalData.windowHeight = res.windowHeight
app.globalData.pixelRatio = res.pixelRatio
} catch (e) {
}
if (params.share) {
productUtil.getProduct(id, function(result){
var data = app.store.sync(result.data)
that.setData({
from_share: true,
id: data.id,
product: data,
title: data.name
})
})
} else {
var allProducts
if (params.type) {
allProducts = wx.getStorageSync(`cate_${params.type}`)
} else {
allProducts = wx.getStorageSync('products')
}
var id = params.id
var product = allProducts.filter(function(i){
return i.id === id
})[0]
this.setData({
from_share: false,
id: id,
product: product,
title: product.name
})
}
var reqPath = {path: `pages/show_product/show_product?id=${this.data.product.id}&share=1`}
productUtil.getProductPageQrCode(reqPath, function(resp){
that.setData({'codeFloating.url': resp.data.url})
})
},
onShow() {
if (app.globalData.currentCustomer) {
var accountType = app.globalData.currentCustomer.account_type
this.setData({accountType: accountType})
}
},
onReady() {
wx.setNavigationBarTitle({ title: this.data.title })
},
bindAddToCart (e) {
var that = this
//管到屏蔽
if (!app.globalData.featureManager.enableGuanDao) {
if (this.data.product && (parseInt(this.data.product['category-id']) === 18)) {
wx.showModal({
title: '管到商品暂未开放',
content: '目前无法在小程序上购买管到商品,如有需要,可以在巴爷微信商城上进行购买。',
showCancel: false,
success: function(res) {}
})
return
}
}
var cartItems = wx.getStorageSync('cartItems') || []
var exist = cartItems.filter(function(ele){
return ele.id === that.data.id
})[0]
if (exist) {
exist.quantity = parseInt(exist.quantity) + 1
} else {
cartItems.push({
id: this.data.id,
quantity: 1,
product: this.data.product
})
}
wx.showToast({
title: '成功加入',
icon: 'success',
duration: 1000
})
wx.setStorage({
key: 'cartItems',
data: cartItems
})
if (this.data.from_share) {
wx.switchTab({
url: '../cart/cart'
})
}
},
changeCodeState: function (e) {
var ratio = 750 / this.data.windowWidth
var eleStyle = this.data.codeFloating.style
var pos = e.touches[0]
var eleLeft = pos.clientX - eleStyle.width / ratio / 2
var eleTop = pos.clientY - eleStyle.height / ratio / 2
if (pos.clientX <= eleStyle.width / ratio / 2) {
eleLeft = 0
} else if (pos.clientX + eleStyle.width / ratio / 2 > this.data.windowWidth) {
eleLeft = this.data.windowWidth - eleStyle.width / 2
} else if (pos.clientY + eleStyle.height / ratio / 2 > this.data.windowHeight) {
eleTop = this.data.windowHeight - eleStyle.height / 2
} else if (pos.clientY <= eleStyle.height / ratio / 2) {
eleTop = 0
}
eleLeft = eleLeft * ratio
eleTop = eleTop * ratio
var animation = wx.createAnimation({
duration: 500,
timingFunction: 'step-start',
})
animation.left(`${eleLeft}rpx`).top(`${eleTop}rpx`).step()
this.setData({
'codeFloating.data': animation.export(),
'codeFloating.pos': {left: eleLeft, top: eleTop}
})
},
catchScaleCode: function (e) {
var animation = wx.createAnimation({
duration: 800,
timingFunction: 'ease',
})
var state, width
if (this.data.codeFloating.state == "small") {
width = "750rpx"
state = 'big'
animation.left(0).top('100rpx').width(width).height(width).step()
} else {
width = "100rpx"
let pos = this.data.codeFloating.pos
state = 'small'
animation.left(`${pos.left}rpx`).top(`${pos.top}rpx`).width(width).height(width).step()
}
this.setData({
'codeFloating.data': animation.export(),
'codeFloating.state': state,
'codeFloating.imgStyle': `width: ${width}; height: ${width};`
})
}
})