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 this.$set(this.attr.productSelect, 'cart_num', 1) this.cart_num = 1 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) { if(changeValue > 1) { num.cart_num = changeValue } else { 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.$forceUpdate() this.isOpen = false }, // 打开属性插件 selecAttrTap() { this.$set(this.attr.productSelect, 'cart_num', 1) this.attr.cartAttr = true this.isOpen = true this.$forceUpdate() }, 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) // } // }) // } // }, } }