diff --git a/components/productWindow/index.vue b/components/productWindow/index.vue index 014c93c0..efee37ac 100644 --- a/components/productWindow/index.vue +++ b/components/productWindow/index.vue @@ -42,13 +42,9 @@ + @input="bindCode(attr.productSelect.cart_num)" /> - + + - 我要参团 已售罄 diff --git a/pages/goods_details/index.vue b/pages/goods_details/index.vue index 0c14920f..b98463e7 100644 --- a/pages/goods_details/index.vue +++ b/pages/goods_details/index.vue @@ -85,8 +85,8 @@ - - {{attrTxt}}: + + {{ attrValue.length > 0 ? "已选择" : "请选择" }}: {{attrValue}} @@ -333,8 +333,6 @@ list: [], count: [] }, - attrTxt: '请选择', //属性页面提示 - attrValue: '', //已选属性 animated: false, //购物车动画 id: 0, //商品id replyCount: 0, //总评论数量 @@ -367,8 +365,9 @@ isDown: true, posters: false, weixinStatus: false, - attr: { // productWindow 组件,使用该属性 - cartAttr: false, // TODO 芋艿,还没搞懂 + attrValue: '', // 已选属性名的拼接,例如说 红色,大 这样的格式 + attr: { // productWindow 组件,使用该属性 + cartAttr: false, // 是否打开属性的选择弹出 // ↓↓↓ 属性数组,结构为:id = 属性编号;name = 属性编号的名字;values[].id = 属性值的编号,values[].name = 属性值的名字;index = 选中的属性值的名字 properties: [], productSelect: {} // 选中的 SKU @@ -671,23 +670,16 @@ * @param newSkuKey 新的 skuKey */ ChangeAttr: function(newSkuKey) { - let productSelect = this.skuMap[newSkuKey]; - if (productSelect) { - this.$set(this.attr.productSelect, "id", productSelect.id); - this.$set(this.attr.productSelect, "picUrl", productSelect.picUrl); - this.$set(this.attr.productSelect, "price", productSelect.price); - this.$set(this.attr.productSelect, "stock", productSelect.stock); - this.$set(this.attr.productSelect, "cart_num", 1); - this.$set(this, "attrValue", newSkuKey); - this.$set(this, "attrTxt", "已选择"); - } else { - this.$set(this.attr.productSelect, "image", this.spu.image); - this.$set(this.attr.productSelect, "price", this.spu.price); - this.$set(this.attr.productSelect, "stock", 0); - this.$set(this.attr.productSelect, "cart_num", 1); - this.$set(this, "attrValue", ""); - this.$set(this, "attrTxt", "请选择"); - } + let sku = this.skuMap[newSkuKey]; + if (!sku) { + return; + } + this.$set(this.attr.productSelect, "id", sku.id); + this.$set(this.attr.productSelect, "picUrl", sku.picUrl); + this.$set(this.attr.productSelect, "price", sku.price); + this.$set(this.attr.productSelect, "stock", sku.stock); + this.$set(this.attr.productSelect, "cart_num", 1); + this.$set(this, "attrValue", newSkuKey); }, /** * 领取完毕移除当前页面领取过的优惠券展示 @@ -778,12 +770,8 @@ // #ifndef H5 that.downloadFilestoreImage(); // #endif - that.DefaultSelect(); + that.selectDefaultSku(); }).catch(err => { - console.error(err) - if (true) { - return; - } //状态异常返回上级页面 return that.$util.Tips({ title: err.toString() @@ -855,59 +843,39 @@ /** * 查找默认选中的 sku,设置到 attr.productSelect 中 + * + * 先找有库存的 SKU,否则找第一个 SKU */ - DefaultSelect: function() { + selectDefaultSku: function() { let properties = this.attr.properties; // 获得选中的属性值的名字,例如说 "黑色,大",则 skuKey = ["黑色", "大"] - let skuKey = []; + let skuKey = undefined; for (let key in this.skuMap) { if (this.skuMap[key].stock > 0) { - skuKey = this.attr.properties.length ? key.split(",") : []; + skuKey = key.split(","); break; } } + if (!skuKey) { // 如果找不到,则选中第一个 + skuKey = Object.keys(this.skuMap)[0].split(","); + } // 使用 index 属性表示当前选中的,值为属性值的名字 for (let i = 0; i < properties.length; i++) { this.$set(properties[i], "index", skuKey[i]); } - // sort();排序函数:数字-英文-汉字; - let productSelect = this.skuMap[skuKey.join(",")]; - // 情况一:选中 SKU,并且有规格 - if (productSelect && properties.length) { - this.$set(this.attr.productSelect, "spuName", this.spu.name); - this.$set(this.attr.productSelect, "id", productSelect.id); - this.$set(this.attr.productSelect, "picUrl", productSelect.picUrl); - this.$set(this.attr.productSelect, "price", productSelect.price); - this.$set(this.attr.productSelect, "stock", productSelect.stock); - this.$set(this.attr.productSelect, "cart_num", 1); - this.$set(this, "attrValue", skuKey.join(",")); - this.$set(this, "attrTxt", "已选择"); - // 情况二:未选中 SKU,并且有规格 - } else if (!productSelect && properties.length) { - this.$set(this.attr.productSelect, "spuName", this.spu.name); - this.$set(this.attr.productSelect, "id", productSelect.id); - this.$set(this.attr.productSelect, "picUrl", productSelect.picUrl); - this.$set(this.attr.productSelect, "price", productSelect.price); - this.$set(this.attr.productSelect, "stock", 0); - this.$set(this.attr.productSelect, "cart_num", 1); - this.$set(this, "attrValue", ""); - this.$set(this, "attrTxt", "请选择"); - // TODO 芋艿:啥情况会出现呢? - } else if (!productSelect && !properties.length) { - this.$set(this.attr.productSelect, "storeName", this.productInfo.storeName); - this.$set(this.attr.productSelect, "image", this.productInfo.image); - this.$set(this.attr.productSelect, "price", this.productInfo.price); - this.$set(this.attr.productSelect, "stock", this.productInfo.stock); - this.$set( - this.attr.productSelect, - "unique", - this.productInfo.id || "" - ); - this.$set(this.attr.productSelect, "cart_num", 1); - this.$set(this, "attrValue", ""); - this.$set(this, "attrTxt", "请选择"); - } + let sku = this.skuMap[skuKey.join(",")]; + if (!sku) { + return + } + this.$set(this.attr.productSelect, "spuName", this.spu.name); + this.$set(this.attr.productSelect, "id", sku.id); + this.$set(this.attr.productSelect, "picUrl", sku.picUrl); + this.$set(this.attr.productSelect, "price", sku.price); + this.$set(this.attr.productSelect, "stock", sku.stock); + this.$set(this.attr.productSelect, "cart_num", 1); + this.$set(this, "attrValue", skuKey.join(",")); + this.$set(this, "attrTxt", "已选择"); }, /** * 获取优惠券 @@ -962,9 +930,9 @@ } }, /** - * 打开属性插件 + * 打开 SKU 属性的选择 */ - selecAttr: function() { + openAttr: function() { this.$set(this.attr, 'cartAttr', true); this.$set(this, 'isOpen', true); },