Task:点击购物车图标加入购物车
This commit is contained in:
@@ -0,0 +1,376 @@
|
||||
import {
|
||||
getCartCount,
|
||||
getProductCode,
|
||||
getProductDetail,
|
||||
postCartAdd,
|
||||
getProductSkuBySelected
|
||||
} from '@/api/store'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
isWenwan: 0,
|
||||
qualifications: [],
|
||||
source: '',
|
||||
isOpen: false,
|
||||
attrTxt: '',
|
||||
attrValue: '',
|
||||
id: null,
|
||||
productValueArr: [],
|
||||
attr: {
|
||||
cartAttr: false,
|
||||
cart_num: 1,
|
||||
defaultSku: [],
|
||||
defaultSkuIndex: [],
|
||||
productAttr: [],
|
||||
productSelect: {
|
||||
cart_num: 1,
|
||||
earnPoints: 0,
|
||||
image: '',
|
||||
otPrice: 0,
|
||||
price: 0,
|
||||
stock: 0,
|
||||
store_name: '',
|
||||
unique: ''
|
||||
}
|
||||
},
|
||||
cart_num: 1
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getSkuActiveStatus(selectedSku) {
|
||||
getProductSkuBySelected({ id: this.id, selectedSku }).then(res => {
|
||||
const { success, data } = res
|
||||
if (success) {
|
||||
for (const key in data) {
|
||||
if (data[key]) {
|
||||
this.attr.productAttr.map(item => {
|
||||
if (item.attrName === key) {
|
||||
item.attrValue.map(subItem => {
|
||||
data[key].map(dataItem => {
|
||||
if (dataItem.sku === subItem.attr) {
|
||||
subItem.canUsed = dataItem.canUsed
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
console.log(this.$refs);
|
||||
this.$refs.attrWindow.reRender(this.attr)
|
||||
}
|
||||
})
|
||||
},
|
||||
productCon() {
|
||||
getProductDetail(this.id).then(res => {
|
||||
const { data } = res
|
||||
this.storeInfo = {...data.storeInfo}
|
||||
if(data.storeInfo.stock === 0) {
|
||||
uni.showToast({
|
||||
title: "产品库存不足,请选择其他商品",
|
||||
icon: "none",
|
||||
duration: 5000
|
||||
})
|
||||
return
|
||||
}
|
||||
this.isWenwan = data.isWenwan
|
||||
this.qualifications = data.qualifications || []
|
||||
// 给 attr 赋值,将请求回来的规格赋值给 attr
|
||||
if (this.source !== 'pre' && this.source !== 'day' && this.source !== 'kill' && this.source !== 'spe') {
|
||||
// this.$set(this.attr, 'productAttr', data.productAttr)
|
||||
this.attr.productAttr = data.productAttr || []
|
||||
this.productValueArr = []
|
||||
for (const key in data.productValue) {
|
||||
this.productValueArr.push({
|
||||
attrItemkey: key,
|
||||
...data.productValue[key]
|
||||
})
|
||||
}
|
||||
// 初始化认为所有的规格都是可以选的
|
||||
this.attr.productAttr.map(item => {
|
||||
item.attrValue.map(subItem => {
|
||||
subItem.canUsed = true
|
||||
})
|
||||
})
|
||||
}
|
||||
this.attr.defaultSku = data.defaultSku
|
||||
this.attr.defaultSkuIndex = data.defaultSkuIndex
|
||||
this.DefaultSelect()
|
||||
// 是否单一规格
|
||||
const onlyOne = Object.keys(data.productValue).length === 1
|
||||
|
||||
if(onlyOne) {
|
||||
this.handleOk()
|
||||
return
|
||||
}
|
||||
this.attr.cartAttr = !this.isOpen ? true : false
|
||||
})
|
||||
},
|
||||
getAttrItemData(attr) {
|
||||
let result = {}
|
||||
this.productValueArr.map(item => {
|
||||
if (item.attrItemkey === attr) {
|
||||
result = item
|
||||
}
|
||||
})
|
||||
return result
|
||||
},
|
||||
// 默认选中属性
|
||||
DefaultSelect() {
|
||||
const productAttr = this.attr.productAttr
|
||||
const productAttrLength = productAttr.length
|
||||
this.attr.productAttr.map((item, index) => {
|
||||
item.attrValue.map((subItem, subIndex) => {
|
||||
if (this.attr.defaultSkuIndex[index] === subIndex) {
|
||||
subItem.check = true
|
||||
} else {
|
||||
subItem.check = false
|
||||
}
|
||||
})
|
||||
})
|
||||
const skuKey = (this.attr.defaultSku || []).join(',')
|
||||
if (!skuKey) {
|
||||
return
|
||||
}
|
||||
const productSelect = this.getAttrItemData(skuKey)
|
||||
this.attrValue = skuKey
|
||||
this.attrTxt = '已选择'
|
||||
if (productSelect && productAttrLength) {
|
||||
// this.$set(
|
||||
// this.attr.productSelect,
|
||||
// 'store_name',
|
||||
// this.storeInfo.storeName
|
||||
// )
|
||||
// this.$set(this.attr.productSelect, 'image', productSelect.image)
|
||||
// this.$set(this.attr.productSelect, 'price', productSelect.price)
|
||||
// this.$set(this.attr.productSelect, 'otPrice', productSelect.otPrice)
|
||||
// this.$set(this.attr.productSelect, 'stock', productSelect.stock)
|
||||
// this.$set(this.attr.productSelect, 'unique', productSelect.unique)
|
||||
// this.$set(this.attr.productSelect, 'earnPoints', productSelect.earnPoints)
|
||||
// this.$set(this.attr.productSelect, 'cart_num', 1)
|
||||
// this.$set(this, 'attrValue', value.sort().join(',')) // 作废
|
||||
// this.$set(this, 'attrValue', skuKey)
|
||||
// this.$set(this, 'attrTxt', '已选择')
|
||||
this.attr.productSelect = {
|
||||
image: productSelect.image,
|
||||
price: productSelect.price,
|
||||
otPrice: productSelect.otPrice,
|
||||
stock: productSelect.stock,
|
||||
earnPoints: productSelect.earnPoints,
|
||||
unique: productSelect.unique,
|
||||
store_name: this.storeInfo.storeName,
|
||||
cart_num: 1
|
||||
}
|
||||
|
||||
this.getSkuActiveStatus(skuKey)
|
||||
} else if (!productSelect && productAttrLength) {
|
||||
// this.$set(
|
||||
// this.attr.productSelect,
|
||||
// 'store_name',
|
||||
// this.storeInfo.storeName
|
||||
// )
|
||||
// this.$set(this.attr.productSelect, 'image', this.storeInfo.image)
|
||||
// this.$set(this.attr.productSelect, 'price', this.storeInfo.price)
|
||||
// this.$set(this.attr.productSelect, 'otPrice', this.storeInfo.otPrice)
|
||||
// this.$set(this.attr.productSelect, 'stock', 0)
|
||||
// this.$set(this.attr.productSelect, 'earnPoints', 0)
|
||||
// this.$set(this.attr.productSelect, 'unique', '')
|
||||
// this.$set(this.attr.productSelect, 'cart_num', 0)
|
||||
// this.$set(this, 'attrValue', '')
|
||||
// this.$set(this, 'attrTxt', '请选择')
|
||||
this.attr.productSelect = {
|
||||
image: this.storeInfo.image,
|
||||
price: this.storeInfo.price,
|
||||
otPrice: this.storeInfo.otPrice,
|
||||
stock: 0,
|
||||
earnPoints: 0,
|
||||
unique: '',
|
||||
store_name: this.storeInfo.storeName,
|
||||
cart_num: 1
|
||||
}
|
||||
} else if (!productSelect && !productAttrLength) {
|
||||
// this.$set(
|
||||
// this.attr.productSelect,
|
||||
// 'store_name',
|
||||
// this.storeInfo.storeName
|
||||
// )
|
||||
// this.$set(this.attr.productSelect, 'image', this.storeInfo.image)
|
||||
// this.$set(this.attr.productSelect, 'price', this.storeInfo.price)
|
||||
// this.$set(this.attr.productSelect, 'otPrice', this.storeInfo.otPrice)
|
||||
// this.$set(this.attr.productSelect, 'stock', this.storeInfo.stock)
|
||||
// this.$set(this.attr.productSelect, 'earnPoints', 0)
|
||||
// this.$set(
|
||||
// this.attr.productSelect,
|
||||
// 'unique',
|
||||
// this.storeInfo.unique || ''
|
||||
// )
|
||||
// this.$set(this.attr.productSelect, 'cart_num', 1)
|
||||
this.attr.productSelect = {
|
||||
image: this.storeInfo.image,
|
||||
price: this.storeInfo.price,
|
||||
otPrice: this.storeInfo.otPrice,
|
||||
stock: this.storeInfo.stock,
|
||||
earnPoints: 0,
|
||||
unique: this.storeInfo.unique || '',
|
||||
store_name: this.storeInfo.storeName,
|
||||
cart_num: 1
|
||||
}
|
||||
// this.$set(this, 'attrValue', '')
|
||||
// this.$set(this, 'attrTxt', '请选择')
|
||||
}
|
||||
},
|
||||
// 点击加入购物车按钮
|
||||
addToCart(item, id = 'id') {
|
||||
console.log(item, 'addToCart --------- item');
|
||||
this.id = item[id]
|
||||
|
||||
this.$nextTick(() => {
|
||||
this.productCon()
|
||||
})// if(this.attr.cartAttr && !this.isOpen){
|
||||
// return this.isOpen = true
|
||||
// }
|
||||
console.log(this.$refs.attrWindow, '--222--');
|
||||
|
||||
|
||||
},
|
||||
handleOk() {
|
||||
const productSelect = this.getAttrItemData(this.attrValue)
|
||||
// 如果有属性,没有选择,提示用户选择
|
||||
const hasNo = (this.attr.productAttr.length && productSelect === undefined && this.isOpen) || productSelect.stock === 0
|
||||
if (hasNo) {
|
||||
uni.showToast({
|
||||
title: "产品库存不足,请选择其他商品",
|
||||
icon: "none",
|
||||
duration: 5000
|
||||
})
|
||||
return
|
||||
}
|
||||
const q = {
|
||||
productId: this.id,
|
||||
cartNum: this.attr.productSelect.cart_num,
|
||||
new: 0,
|
||||
uniqueId: this.attr.productSelect !== undefined ? this.attr.productSelect.unique : ''
|
||||
}
|
||||
postCartAdd(q).then(res => {
|
||||
this.isOpen = false
|
||||
this.attr.cartAttr = false
|
||||
uni.showToast({
|
||||
title: "添加购物车成功",
|
||||
icon: "none",
|
||||
duration: 2000
|
||||
})
|
||||
})
|
||||
},
|
||||
ChangeCartNum(changeValue) {
|
||||
// changeValue:是否 加|减
|
||||
// 获取当前变动属性
|
||||
const productSelect = this.getAttrItemData(this.attrValue)
|
||||
// 如果没有属性,赋值给商品默认库存
|
||||
if (productSelect === undefined && !this.attr.productAttr.length) {
|
||||
productSelect = this.attr.productSelect
|
||||
}
|
||||
// 无属性值即库存为0;不存在加减
|
||||
if (productSelect === undefined) return
|
||||
let stock = productSelect.stock || 0
|
||||
let num = this.attr.productSelect
|
||||
if (changeValue) {
|
||||
num.cart_num++
|
||||
if (num.cart_num > stock) {
|
||||
if(stock < 1) {
|
||||
this.$set(this.attr.productSelect, 'cart_num', 1)
|
||||
this.$set(this, 'cart_num', 1)
|
||||
} else {
|
||||
this.$set(this.attr.productSelect, 'cart_num', stock)
|
||||
this.$set(this, 'cart_num', stock)
|
||||
}
|
||||
} else {
|
||||
if (num.cart_num < 1) {
|
||||
this.$set(this.attr.productSelect, 'cart_num', 1)
|
||||
this.$set(this, 'cart_num', 1)
|
||||
} else {
|
||||
this.$set(this.attr.productSelect, 'cart_num', num.cart_num)
|
||||
this.$set(this, 'cart_num', num.cart_num)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
num.cart_num--
|
||||
if (num.cart_num < 1) {
|
||||
this.$set(this.attr.productSelect, 'cart_num', 1)
|
||||
this.$set(this, 'cart_num', 1)
|
||||
} else {
|
||||
this.$set(this.attr.productSelect, 'cart_num', num.cart_num)
|
||||
this.$set(this, 'cart_num', num.cart_num)
|
||||
}
|
||||
}
|
||||
},
|
||||
// 关闭属性
|
||||
changeattr(msg) {
|
||||
// 修改了规格
|
||||
this.attr.cartAttr = msg
|
||||
this.$set(this.attr.productSelect, 'cart_num', 1)
|
||||
this.isOpen = false
|
||||
},
|
||||
// 打开属性插件
|
||||
selecAttrTap() {
|
||||
this.attr.cartAttr = true
|
||||
this.isOpen = true
|
||||
},
|
||||
ChangeAttr(res) {
|
||||
const { index, subIndex, value } = res
|
||||
// 修改了规格
|
||||
const productSelect = this.getAttrItemData(value)
|
||||
if (productSelect) {
|
||||
this.attr.productAttr[index].attrValue.map((subItem, subIdx) => {
|
||||
subItem.check= false
|
||||
if (subIndex === subIdx) {
|
||||
subItem.check = true
|
||||
}
|
||||
})
|
||||
this.$set(this.attr.productSelect, 'image', productSelect.image)
|
||||
this.$set(this.attr.productSelect, 'price', productSelect.price)
|
||||
this.$set(this.attr.productSelect, 'otPrice', productSelect.otPrice)
|
||||
this.$set(this.attr.productSelect, 'stock', productSelect.stock)
|
||||
this.$set(this.attr.productSelect, 'unique', productSelect.unique)
|
||||
this.$set(this.attr.productSelect, 'earnPoints', productSelect.earnPoints)
|
||||
this.$set(this.attr.productSelect, 'cart_num', 1)
|
||||
this.$set(this, 'attrValue', value)
|
||||
this.$set(this, 'attrTxt', '已选择')
|
||||
this.getSkuActiveStatus(value)
|
||||
} else {
|
||||
this.$set(this.attr.productSelect, 'image', this.storeInfo.image)
|
||||
this.$set(this.attr.productSelect, 'price', this.storeInfo.price)
|
||||
this.$set(this.attr.productSelect, 'otPrice', this.storeInfo.otPrice)
|
||||
this.$set(this.attr.productSelect, 'stock', 0)
|
||||
this.$set(this.attr.productSelect, 'unique', '')
|
||||
this.$set(this.attr.productSelect, 'earnPoints', 0)
|
||||
this.$set(this.attr.productSelect, 'cart_num', 0)
|
||||
this.$set(this, 'attrValue', '')
|
||||
this.$set(this, 'attrTxt', '请选择')
|
||||
}
|
||||
},
|
||||
changeFun(opt) {
|
||||
if (typeof opt !== 'object') opt = {}
|
||||
let action = opt.action || ''
|
||||
let value = opt.value === undefined ? '' : opt.value
|
||||
this.cart_num = 1
|
||||
this[action] && this[action](value)
|
||||
},
|
||||
// queryCartCount (isAnima) {
|
||||
// const isLogin = this.isLogin
|
||||
// if (isLogin) {
|
||||
// getCartCount({
|
||||
// numType: 0
|
||||
// }).then(res => {
|
||||
// this.CartCount = res.data.count
|
||||
// //加入购物车后重置属性
|
||||
// if (isAnima) {
|
||||
// this.animated = true
|
||||
// setTimeout(function () {
|
||||
// this.animated = false
|
||||
// }, 500)
|
||||
// }
|
||||
// })
|
||||
// }
|
||||
// },
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user