From 040fdcdbdb1aaabd04b7fdde1e915d6cdccd8175 Mon Sep 17 00:00:00 2001 From: Devil Date: Thu, 7 Oct 2021 22:16:34 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=82=E9=85=8D=E6=89=B9=E5=8F=91=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=E5=9F=BA=E7=A1=80=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App.vue | 2 +- pages/goods-detail/goods-detail.vue | 155 +++++++++++++++++----------- 2 files changed, 95 insertions(+), 62 deletions(-) diff --git a/App.vue b/App.vue index f8cb0723..deab99c4 100644 --- a/App.vue +++ b/App.vue @@ -61,7 +61,7 @@ }, // 请求地址 request_url: 'https://d1.shopxo.vip/', - //request_url: 'http://shopxo.com/', + request_url: 'http://shopxo.com/', // 静态资源地址 static_url: 'https://dev.shopxo.vip/', // 基础信息 diff --git a/pages/goods-detail/goods-detail.vue b/pages/goods-detail/goods-detail.vue index 705bd9c6..7c1b5254 100644 --- a/pages/goods-detail/goods-detail.vue +++ b/pages/goods-detail/goods-detail.vue @@ -328,7 +328,7 @@ 购买数量 - - + + @@ -457,7 +457,7 @@ goods_specifications_choose: [], goods_content_app: [], popup_status: false, - temp_buy_number: 1, + buy_number: 1, buy_event_type: 'buy', buy_button: {}, goods_spec_base_price: 0, @@ -689,7 +689,7 @@ goods_specifications_choose: data.goods.specifications.choose || [], goods_content_app: data.goods.content_app || [], - temp_buy_number: data.goods.buy_min_number || 1, + buy_number: data.goods.buy_min_number || 1, nav_favor_button_info: { "text": (data.goods.is_favor == 1 ? '已' : '') + '收藏', "status": data.goods.is_favor @@ -958,7 +958,7 @@ method: 'POST', data: { "goods_id": this.goods.id, - "stock": this.temp_buy_number, + "stock": this.buy_number, "spec": JSON.stringify(spec) }, dataType: 'json', @@ -1015,7 +1015,7 @@ this.setData({ goods_specifications_choose: temp_data, goods_spec_base_images: temp_images, - temp_buy_number: this.goods.buy_min_number || 1, + //buy_number: this.goods.buy_min_number || 1, }); // 不能选择规格处理 @@ -1079,7 +1079,8 @@ }, dataType: 'json', success: (res) => { - if (res.data.code == 0) { + if (res.data.code == 0) { + var spec_type = res.data.data.spec_type; var spec_count = spec.length; var index = spec_count > 0 ? spec_count : 0; if (index < sku_count) { @@ -1089,8 +1090,8 @@ temp_data[i]['value'][k]['is_dont'] = ''; var temp_value = temp_data[i]['value'][k]['name']; var temp_status = false; - for (var t in res.data.data) { - if (res.data.data[t] == temp_value) { + for (var t in spec_type) { + if (spec_type[t] == temp_value) { temp_status = true; break; } @@ -1118,27 +1119,13 @@ }, // 获取规格详情 - get_goods_specifications_detail() { - // 是否全部选中 - var temp_data = this.goods_specifications_choose; - var sku_count = temp_data.length; - var active_count = 0; - + get_goods_specifications_detail() { // 获取规格值 - var spec = []; - for (var i in temp_data) { - for (var k in temp_data[i]['value']) { - if ((temp_data[i]['value'][k]['is_active'] || null) != null) { - active_count++; - spec.push({ - "type": temp_data[i]['name'], - "value": temp_data[i]['value'][k]['name'] - }); - break; - } - } - } - + var spec = this.goods_selected_spec(); + + // 存在规格的时候是否已完全选择规格 + var sku_count = this.goods_specifications_choose.length; + var active_count = spec.length; if (spec.length <= 0 || active_count < sku_count) { this.setData({ goods_spec_base_price: this.goods.price, @@ -1154,16 +1141,13 @@ method: 'POST', data: { "id": this.goods.id, - "spec": JSON.stringify(spec) + "spec": JSON.stringify(spec), + "stock": this.buy_number, }, dataType: 'json', success: res => { - if (res.data.code == 0) { - this.setData({ - goods_spec_base_price: res.data.data.price, - goods_spec_base_original_price: res.data.data.original_price, - goods_spec_base_inventory: res.data.data.inventory - }); + if (res.data.code == 0) { + this.goods_spec_detail_back_handle(res.data.data); } else { app.globalData.showToast(res.data.msg); } @@ -1172,56 +1156,105 @@ app.globalData.showToast("服务器请求出错"); } }); + }, + + // 已选的商品规格 + goods_selected_spec() { + var spec = []; + var temp_data = this.goods_specifications_choose; + for (var i in temp_data) { + for (var k in temp_data[i]['value']) { + if ((temp_data[i]['value'][k]['is_active'] || null) != null) { + spec.push({ + "type": temp_data[i]['name'], + "value": temp_data[i]['value'][k]['name'] + }); + break; + } + } + } + return spec; + }, + + // 商品规格详情返回数据处理 + goods_spec_detail_back_handle(data) { + var spec_base = data.spec_base; + var data = { + goods_spec_base_price: spec_base.price, + goods_spec_base_original_price: spec_base.original_price, + goods_spec_base_inventory: spec_base.inventory, + }; + + // 已选数量是否超过规格库存 + if(this.buy_number > spec_base.inventory) { + data['buy_number'] = spec_base.inventory; + } + this.setData(data); }, // 数量输入事件 goods_buy_number_blur(e) { - var buy_number = parseInt(e.detail.value) || 1; - this.setData({ - temp_buy_number: buy_number - }); - this.goods_buy_number_func(buy_number); + var number = parseInt(e.detail.value) || 1; + if(isNaN(number)) { + number = this.goods.buy_min_number || 1; + } + this.goods_buy_number_func(number); }, // 数量操作事件 goods_buy_number_event(e) { var type = parseInt(e.currentTarget.dataset.type) || 0; - var temp_buy_number = parseInt(this.temp_buy_number); - if (type == 0) { - var buy_number = temp_buy_number - 1; - } else { - var buy_number = temp_buy_number + 1; - } - - this.goods_buy_number_func(buy_number); + var temp_number = parseInt(this.buy_number); + var number = (type == 0) ? (temp_number - 1) : (temp_number + 1); + this.goods_buy_number_func(number); }, // 数量处理方法 - goods_buy_number_func(buy_number) { + goods_buy_number_func(number) { var buy_min_number = parseInt(this.goods.buy_min_number) || 1; var buy_max_number = parseInt(this.goods.buy_max_number) || 0; var inventory = parseInt(this.goods_spec_base_inventory); var inventory_unit = this.goods.inventory_unit; - if (buy_number < buy_min_number) { - buy_number = buy_min_number; - if (buy_min_number > 1) { - app.globalData.showToast('起购' + buy_min_number + inventory_unit); - } + if (number < buy_min_number) { + number = buy_min_number; + app.globalData.showToast('起购' + buy_min_number + inventory_unit); } - if (buy_max_number > 0 && buy_number > buy_max_number) { - buy_number = buy_max_number; + if (buy_max_number > 0 && number > buy_max_number) { + number = buy_max_number; app.globalData.showToast('限购' + buy_max_number + inventory_unit); } - if (buy_number > inventory) { - buy_number = inventory; + if (number > inventory) { + number = inventory; app.globalData.showToast('库存数量' + inventory + inventory_unit); - } + } this.setData({ - temp_buy_number: buy_number + buy_number: number + }); + + // 获取数据 + uni.request({ + url: app.globalData.get_request_url('stock', 'goods'), + method: 'POST', + data: { + "id": this.goods.id, + "spec": this.goods_selected_spec(), + "stock": this.buy_number, + }, + dataType: 'json', + success: res => { + if (res.data.code == 0) { + this.goods_spec_detail_back_handle(res.data.data); + } else { + app.globalData.showToast(res.data.msg); + } + }, + fail: () => { + app.globalData.showToast("服务器请求出错"); + } }); }, @@ -1268,7 +1301,7 @@ var data = { "buy_type": "goods", "goods_id": this.goods.id, - "stock": this.temp_buy_number, + "stock": this.buy_number, "spec": JSON.stringify(spec) }; uni.navigateTo({