504 lines
17 KiB
JavaScript
504 lines
17 KiB
JavaScript
var app = getApp();
|
||
|
||
Component({
|
||
// 目前组件,只接受时间戳,其他的没有做
|
||
// 现在的时间,和结束时间,都必须从后台获取,因为客户端时间不一致
|
||
properties: {
|
||
goodsInfo: {
|
||
type: Object
|
||
},
|
||
cartList:{
|
||
type:Object
|
||
}
|
||
},
|
||
data: {
|
||
language: '',
|
||
|
||
// 规格 -------
|
||
optionsId: 0, //选择后的 规格ID
|
||
cartid:0, //选择后的 购物车ID
|
||
goodsCount: 1,
|
||
optionsMaxCount: 1,
|
||
popupSpecs1: false,
|
||
popupSpecs2: false, //无规格选择商品数量
|
||
popThumb: "",
|
||
popStock: 0,
|
||
popPrice: 0,
|
||
specsManage: [], //选择池 用于排序
|
||
goodsDescription: "",
|
||
popupModeshow: true, //动态模糊框
|
||
// 规格end
|
||
|
||
skuImages: [],
|
||
showSkuImages: false,
|
||
activeSkuIndex: 0,
|
||
activeSkuIndex_1: '',//用于关闭时保存点击预览前的序号,在预览关闭时重新设置预览起始位置
|
||
activeSkuIndex_2: '',
|
||
},
|
||
lifetimes: {
|
||
attached: function() {
|
||
// 在组件实例进入页面节点树时执行
|
||
let language = wx.getStorageSync('langIndex');
|
||
this.setData({
|
||
'language': language.en,
|
||
specsManage: [],
|
||
optionsId: 0,
|
||
popupSpecs1: true
|
||
});
|
||
this.initPopView();
|
||
},
|
||
detached: function() {
|
||
// 在组件实例被从页面节点树移除时执行
|
||
},
|
||
},
|
||
methods: {
|
||
//提交确认
|
||
submitAction() {
|
||
if (this.data.goodsInfo.has_option == 1 && !this.data.optionsId) {
|
||
wx.showToast({
|
||
icon: 'none',
|
||
title: '规格id不可为空,请选择规格!',
|
||
duration: 1500
|
||
});
|
||
return;
|
||
}
|
||
//点击关闭 clicktype为1:确认按钮 ,为0:关闭弹窗操作
|
||
this.triggerEvent('closeSpecsPopup',{optionsId: this.data.optionsId,cartid:this.data.cartid,goodsId:this.data.goodsInfo.id, goodsCount: this.data.goodsCount, clicktype: 1});
|
||
|
||
},
|
||
//关闭popupSpecs
|
||
popupSpecsbtn() {
|
||
this.setData({
|
||
popupSpecs1: false,
|
||
popupModeshow: true
|
||
});
|
||
this.triggerEvent('closeSpecsPopup',{clicktype: 0});
|
||
},
|
||
//初始化弹窗view
|
||
initPopView() {
|
||
if (this.data.goodsInfo.has_option == 1) {
|
||
this.setData({
|
||
popPrice: this.data.goodsInfo.min_price + "-" + this.data.goodsInfo.max_price, //设置默认价格
|
||
popThumb: this.data.goodsInfo.thumb, //设置默认图片
|
||
popStock: this.data.goodsInfo.stock, //设置默认库存
|
||
goodsDescription: "选择"
|
||
});
|
||
for (let i = 0; i < this.data.goodsInfo.has_many_specs.length; i++) {
|
||
this.setData({
|
||
goodsDescription: this.data.goodsDescription + " " + this.data.goodsInfo.has_many_specs[i].title
|
||
});
|
||
}
|
||
let _optionArr = [];
|
||
this.data.goodsInfo.has_many_options.forEach((val, index) => {
|
||
let _thumb = val.thumb !='' ? val.thumb : this.data.goodsInfo.thumb;
|
||
_optionArr.push(_thumb);
|
||
});
|
||
this.setData({
|
||
skuImages: _optionArr
|
||
});
|
||
if (!this.data.optionsId) {
|
||
// 默认选择第一个
|
||
for (let i = 0; i < this.data.goodsInfo.has_many_specs.length; i++) {
|
||
this.data.goodsInfo.has_many_specs[i].description = this.data.goodsInfo.has_many_specs[i].specitem[0].id;
|
||
|
||
this.selectSpecs(this.data.goodsInfo.has_many_specs[i].specitem[0], 'first', i);
|
||
}
|
||
}
|
||
|
||
} else {
|
||
console.log("单规格",this.data.goodsInfo);
|
||
let __optionArr2 = [];
|
||
__optionArr2.push(this.data.goodsInfo.thumb);
|
||
this.setData({
|
||
popThumb: this.data.goodsInfo.thumb, //设置默认图片
|
||
popStock: this.data.goodsInfo.stock, //设置默认库存
|
||
popPrice: this.data.goodsInfo.price, //设置默认价格
|
||
goodsDescription: '',
|
||
optionsMaxCount: this.data.goodsInfo.stock,
|
||
skuImages: __optionArr2
|
||
});
|
||
|
||
let {cartList,goodsInfo} = this.data;
|
||
if (cartList && cartList.length > 0) {
|
||
for (let i = 0; i < cartList.length; i++) {
|
||
if (cartList[i].goods_id === goodsInfo.id) {
|
||
this.setData({
|
||
goodsCount: cartList[i].total,
|
||
cartid:cartList[i].id
|
||
});
|
||
break;
|
||
}else {
|
||
this.data.cartid=0;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
// 输入数量
|
||
inputGoodsNum: function(e) {
|
||
var num = parseInt(e.detail.value);
|
||
var lastgoodsCount = this.data.goodsCount;
|
||
if (e.detail.keyCode == 8) {
|
||
if (app._isTextEmpty(e.detail.value)) {
|
||
this.setData({
|
||
goodsCount: ''
|
||
});
|
||
return;
|
||
}
|
||
}
|
||
if (num) {
|
||
this.setData({
|
||
goodsCount: num
|
||
});
|
||
} else {
|
||
this.setData({
|
||
goodsCount: lastgoodsCount
|
||
});
|
||
}
|
||
},
|
||
//减少
|
||
reduceGoods() {
|
||
let lastgoodsCount = this.data.goodsCount;
|
||
if (this.data.goodsCount == 1 || this.data.goodsCount == 0) {
|
||
return;
|
||
}
|
||
this.setData({
|
||
goodsCount: lastgoodsCount - 1
|
||
});
|
||
|
||
},
|
||
//增加
|
||
addGoods() {
|
||
let lastgoodsCount = this.data.goodsCount;
|
||
let specsManage = this.data.specsManage;
|
||
let optionsMaxCount = this.data.optionsMaxCount;
|
||
console.log("增加");
|
||
if (specsManage.length == this.data.goodsInfo.has_many_specs.length && this.data.goodsCount == optionsMaxCount) {
|
||
console.log("数量超出范围");
|
||
wx.showToast({
|
||
icon: 'none',
|
||
title: '数量超出范围',
|
||
duration: 1500
|
||
});
|
||
console.log("max=" + this.data.goodsCount);
|
||
return;
|
||
}
|
||
this.setData({
|
||
goodsCount: lastgoodsCount + 1
|
||
});
|
||
|
||
},
|
||
//界面选择规格触发事件
|
||
selectSpecs(e, str, i) {
|
||
let data = {};
|
||
let specsIdex = 0;
|
||
if (str == 'first') {
|
||
specsIdex = i;
|
||
data = e;
|
||
} else if(str =="sku_swiper"){
|
||
data = e;
|
||
} else {
|
||
specsIdex = e.currentTarget.dataset.specsidex;
|
||
data = e.currentTarget.dataset.specitem;
|
||
}
|
||
console.log(data);
|
||
if (data.c) {
|
||
return false;
|
||
}
|
||
this.setData({
|
||
["goodsInfo.has_many_specs[" + specsIdex + "].description"]: data.id
|
||
});
|
||
// let specid = data.specid; //对其他数据筛选 不筛选同级
|
||
//处理选择池
|
||
this.manageSpecs(data);
|
||
//处理规格组合选择状态
|
||
this.setGoodsSpecs(data);
|
||
//设置选择规格后的 价格、照片、库存
|
||
this.setGoodsSpecsChangeInfo();
|
||
//判断当前购买总量与库存的关系
|
||
this.getMaxCount();
|
||
},
|
||
//处理选择池
|
||
manageSpecs(data) {
|
||
let specsObject = new Object();
|
||
let specsManage = this.data.specsManage;
|
||
specsObject.id = data.id;
|
||
specsObject.specid = data.specid;
|
||
specsObject.title = data.title;
|
||
|
||
if (specsManage.length > 0) {
|
||
for (let i = 0; i < specsManage.length; i++) {
|
||
if (specsManage[i].specid == specsObject.specid) {
|
||
specsManage.splice(i, 1);
|
||
}
|
||
}
|
||
specsManage.push(specsObject);
|
||
} else {
|
||
specsManage.push(specsObject);
|
||
}
|
||
|
||
//排序
|
||
if (specsManage.length == this.data.goodsInfo.has_many_specs.length) {
|
||
var newSpecsManage = [];
|
||
for (let i = 0; i < this.data.goodsInfo.has_many_specs.length; i++) {
|
||
for (let j = 0; j < specsManage.length; j++) {
|
||
if (this.data.goodsInfo.has_many_specs[i].id == specsManage[j].specid) {
|
||
newSpecsManage.push(specsManage[j]);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
specsManage = newSpecsManage;
|
||
}
|
||
this.setData({
|
||
specsManage: specsManage
|
||
});
|
||
this.setGoodsDescription();
|
||
},
|
||
//处理goodsDescription 数据
|
||
setGoodsDescription() {
|
||
let description = "";
|
||
let specsManage = this.data.specsManage;
|
||
//相等代表全选了 体现语句
|
||
if (specsManage.length == this.data.goodsInfo.has_many_specs.length) {
|
||
description = "已选择 ";
|
||
for (let i = 0; i < specsManage.length; i++) {
|
||
description += specsManage[i].title + " ";
|
||
}
|
||
this.setData({
|
||
goodsDescription: description
|
||
});
|
||
} else {
|
||
description = "请选择 ";
|
||
for (let i = 0; i < this.data.goodsInfo.has_many_specs.length; i++) {
|
||
for (let j = 0; j < specsManage.length; j++) {
|
||
if (this.data.goodsInfo.has_many_specs[i].id != specsManage[j].specid) {
|
||
description += this.data.goodsInfo.has_many_specs[i].title + " ";
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
this.setData({
|
||
goodsDescription: description
|
||
});
|
||
}
|
||
},
|
||
//处理规格组合选择状态 过滤数据
|
||
setGoodsSpecs(specs) {
|
||
// let goodsInfo = this.data.goodsInfo;
|
||
for (let i = 0; i < this.data.goodsInfo.has_many_specs.length; i++) {
|
||
if (specs.specid != this.data.goodsInfo.has_many_specs[i].id) {
|
||
// let specitem = this.setGoodsSpecsStatus(this.data.goodsInfo.has_many_specs[i].specitem, specs.id);
|
||
// this.setData({
|
||
// ["goodsInfo.has_many_specs[" + i + "].specitem"]: specitem
|
||
// })
|
||
}
|
||
}
|
||
},
|
||
//处理规格组合选择状态 处理状态 specitem 组合数组(未选中的) id当前选中的ID 根据ID 组合算是否有当前组合
|
||
setGoodsSpecsStatus(specitem, id) {
|
||
let options = []; //数据池
|
||
for (let i = 0; i < this.data.goodsInfo.has_many_options.length; i++) {
|
||
let _specs = this.data.goodsInfo.has_many_options[i].specs.split("_");
|
||
//console.log(_specs);
|
||
//判断是否包含
|
||
for (let j = 0; j < _specs.length; j++) {
|
||
if (_specs[j] == id) {
|
||
options.push(this.data.goodsInfo.has_many_options[i]);
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
//关键处理方式 后期要优化 效率低
|
||
for (let m = 0; m < options.length; m++) {
|
||
let _specs = options[m].specs.split("_");
|
||
for (let y = 0; y < _specs.length; y++) {
|
||
if (_specs[y] != id && options[m].stock == 0) {
|
||
for (let n = 0; n < specitem.length; n++) {
|
||
if (_specs[y] == specitem[n].id) {
|
||
specitem[n].c = true;
|
||
}
|
||
}
|
||
} else if (_specs[y] != id && options[m].stock > 0) {
|
||
for (let n = 0; n < specitem.length; n++) {
|
||
if (_specs[y] == specitem[n].id) {
|
||
specitem[n].c = false;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return specitem;
|
||
},
|
||
//设置选择规格后的 价格、照片、库存
|
||
setGoodsSpecsChangeInfo() {
|
||
let specsManage = this.data.specsManage;
|
||
//根据ID 排序 specsManage.sort();
|
||
specsManage.sort(function(a, b) {
|
||
return a.id - b.id;
|
||
});
|
||
if (specsManage.length == this.data.goodsInfo.has_many_specs.length) {
|
||
let goodsSpecs = "";
|
||
for (let j = 0; j < specsManage.length; j++) {
|
||
goodsSpecs += specsManage[j].id + "_";
|
||
}
|
||
goodsSpecs = goodsSpecs.substring(0, goodsSpecs.length - 1); //处理"_"
|
||
for (let i = 0; i < this.data.goodsInfo.has_many_options.length; i++) {
|
||
if (goodsSpecs == this.setGoodsSpecsBySort(this.data.goodsInfo.has_many_options[i].specs)) {
|
||
this.setData({
|
||
activeSkuIndex:i,
|
||
popPrice: this.data.goodsInfo.has_many_options[i].product_price, //设置价格
|
||
popThumb: app._isTextEmpty(this.data.goodsInfo.has_many_options[i].thumb) ? this.data.goodsInfo.thumb : this
|
||
.data.goodsInfo.has_many_options[i].thumb, //设置图片
|
||
popStock: this.data.goodsInfo.has_many_options[i].stock, //设置库存
|
||
optionsId: this.data.goodsInfo.has_many_options[i].id //设置规格ID,用于生成订单
|
||
});
|
||
this.data.optionsMaxCount = this.data.goodsInfo.has_many_options[i].stock; //库存最大数 用于切换更改买家购买数量
|
||
if (this.data.optionsMaxCount > 0) {
|
||
this.setData({
|
||
goodsCount: 1
|
||
});
|
||
}
|
||
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
this.setData({
|
||
specsManage: specsManage
|
||
});
|
||
},
|
||
//处理商品goodsSpecs 并排序 新方法
|
||
setGoodsSpecsBySort(specs) {
|
||
let _specs = specs.split("_"); //先变成数组
|
||
//_specs.sort();//排序
|
||
_specs.sort(function(a, b) {
|
||
return a - b;
|
||
});
|
||
// 在组装回去
|
||
let goodsSpecs = "";
|
||
for (let j = 0; j < _specs.length; j++) {
|
||
goodsSpecs += _specs[j] + "_";
|
||
}
|
||
goodsSpecs = goodsSpecs.substring(0, goodsSpecs.length - 1); //处理"_"
|
||
return goodsSpecs;
|
||
},
|
||
//判断当前购买总量与库存的关系
|
||
getMaxCount() {
|
||
let specsManage = this.data.specsManage;
|
||
let optionsMaxCount = this.data.optionsMaxCount;
|
||
console.log(specsManage,optionsMaxCount,this.data.optionsId);
|
||
|
||
if (specsManage.length == this.data.goodsInfo.has_many_specs.length) {
|
||
if (optionsMaxCount == 0) //库存不足
|
||
{
|
||
this.setData({
|
||
goodsCount: 0
|
||
});
|
||
}
|
||
if (this.data.goodsCount > optionsMaxCount) {
|
||
this.setData({
|
||
goodsCount: optionsMaxCount
|
||
});
|
||
}
|
||
}
|
||
let {cartList,goodsInfo,optionsId} = this.data;
|
||
|
||
console.log("666",cartList);
|
||
if (cartList && cartList.length > 0) {
|
||
for (let i = 0; i < cartList.length; i++) {
|
||
if (cartList[i].goods_id === goodsInfo.id && cartList[i].option_id === optionsId) {
|
||
console.log(cartList[i]);
|
||
this.setData({
|
||
goodsCount: cartList[i].total,
|
||
cartid:cartList[i].id
|
||
});
|
||
break;
|
||
}else {
|
||
this.data.cartid=0;
|
||
}
|
||
}
|
||
}
|
||
},
|
||
//============ 处理规格图片点击放大 start============
|
||
showSkuImages_Methob() {
|
||
this.setData({
|
||
popupSpecs1: false,
|
||
popupSpecs2: false,
|
||
popupModeshow: true,
|
||
showSkuImages: true
|
||
});
|
||
if (this.data.goodsInfo.has_option != 1) {
|
||
return;
|
||
}
|
||
this.setData({
|
||
activeSkuIndex_1: this.data.goodsInfo.has_many_options[this.data.activeSkuIndex].specs
|
||
});
|
||
|
||
},
|
||
onChangeSkuImagesIndex(e) {
|
||
let _index = e.detail.current;
|
||
this.setData({
|
||
activeSkuIndex: _index
|
||
});
|
||
if (this.data.goodsInfo.has_option != 1) {
|
||
return;
|
||
}
|
||
this.setData({
|
||
activeSkuIndex_2: this.data.goodsInfo.has_many_options[_index].specs
|
||
});
|
||
|
||
},
|
||
onCloseSkuImages() {
|
||
if (this.data.goodsInfo.has_option != 1) {
|
||
this.setData({
|
||
popupSpecs2: true,
|
||
popupModeshow: false,
|
||
showSkuImages: false
|
||
});
|
||
return;
|
||
}
|
||
let that = this;
|
||
let _lastOption = that.data.activeSkuIndex_1.split("_");
|
||
let goodsInfo = that.data.goodsInfo;
|
||
let _activeSkuIndex = that.data.activeSkuIndex;
|
||
|
||
if (that.data.activeSkuIndex_1 != that.data.goodsInfo.has_many_options[_activeSkuIndex].specs) {
|
||
let _activeOption = that.data.activeSkuIndex_2.split("_");//如果没有滑动直接取值是取不到报错的
|
||
for (let i = 0; i < _lastOption.length; i++) {
|
||
if (_lastOption[i] != _activeOption[i]) {
|
||
let _specs = Number(_activeOption[i]);
|
||
for (let ind = 0; ind < that.data.goodsInfo.has_many_specs.length; ind++) {
|
||
for (let index = 0; index < that.data.goodsInfo.has_many_specs[ind].specitem.length; index++) {
|
||
if (that.data.goodsInfo.has_many_specs[ind].specitem[index].id == _specs) {
|
||
goodsInfo.has_many_specs[ind].description = that.data.goodsInfo.has_many_specs[ind].specitem[index].id;
|
||
// that.selectSpecs(that.data.goodsInfo.has_many_specs[ind].specitem[index],"sku_swiper")
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
console.log(that.data.activeSkuIndex_1,"that.data.activeSkuIndex_1");
|
||
|
||
this.setData({
|
||
goodsInfo: goodsInfo,
|
||
showSkuImages: false,
|
||
popupSpecs1: true,
|
||
popupModeshow: false,
|
||
|
||
popPrice: this.data.goodsInfo.has_many_options[_activeSkuIndex].product_price, //设置价格
|
||
popThumb: app._isTextEmpty(this.data.goodsInfo.has_many_options[_activeSkuIndex].thumb) ? this.data.goodsInfo.thumb : this
|
||
.data.goodsInfo.has_many_options[_activeSkuIndex].thumb, //设置图片
|
||
popStock: this.data.goodsInfo.has_many_options[_activeSkuIndex].stock, //设置库存
|
||
optionsId: this.data.goodsInfo.has_many_options[_activeSkuIndex].id //设置规格ID,用于生成订单
|
||
});
|
||
|
||
},
|
||
//============ 处理规格图片点击放大 end============
|
||
}
|
||
});
|