yuminge-app/yun-min-program-plugin-master/packageC/components/yz_specs/yz_specs.js

504 lines
17 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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============
}
});