captain-ui
Version:
有赞vue wap业务组件库
148 lines (132 loc) • 4.45 kB
JavaScript
import "vant/es/toast/style";
import _Toast from "vant/es/toast";
import _extends from "@babel/runtime/helpers/esm/extends";
/* eslint-disable camelcase */
import Vue from 'vue';
import ajax from '../../../common/ajax';
import Config from '../config';
import FailGoodsDialog from './FailGoodsDialog';
var instance;
var alertFailGoods = function alertFailGoods(goods) {
if (!instance) {
instance = new (Vue.extend(FailGoodsDialog))({
el: document.createElement('div')
});
instance.$on('input', function (value) {
instance.value = value;
});
document.body.appendChild(instance.$el);
}
return new Promise(function (resolve, reject) {
return _extends(instance, {
value: true,
goods: goods,
resolve: resolve,
reject: reject
});
});
};
var BuyAgain =
/*#__PURE__*/
function () {
function BuyAgain(options) {
if (options === void 0) {
options = {};
}
this.url = options.url || Config.BUY_AGAIN.BUY_AGAIN_URL;
this.cartUrl = options.cartUrl || Config.BUY_AGAIN.CART_URL;
this.data = options.data || {};
this.orderNo = this.data.order_no || '';
this.kdtId = this.data.kdt_id || '';
this.goodsList = this.data.goodsList || [];
this.callback = options.callback;
this.isBuying = false;
/* this.unsupportBuyAgainIntance = options.unsupportBuyAgainIntance; */
}
var _proto = BuyAgain.prototype;
_proto.buyAgain = function buyAgain() {
var _this = this;
ajax({
url: this.url,
method: 'POST',
data: {
order_no: this.orderNo,
kdt_id: this.kdtId
}
}).then(function (resp) {
if (resp.code === 0) {
var data = Array.isArray(resp.data) ? resp.data : [];
var cartUrl = _this.cartUrl + '?kdt_id=' + _this.kdtId; // 返回的数据是添加到购物车失败的商品数组,全部成功时返回空数组
if (data.length === 0) {
_this._saveSessionStorage(_this.goodsList, _this.kdtId);
window.location.href = cartUrl;
} else {
// 商品sku与数量信息需要从订单商品列表中获取,然后构造一个新的数组
var parsedGoodsList = _this._buildGoodsList(_this.goodsList, data);
_this._saveSessionStorage(parsedGoodsList.successList, _this.kdtId);
alertFailGoods(parsedGoodsList.failList).then(function () {
// 商品全部添加失败时直接隐藏弹层,不跳转
if (_this.goodsList.length === data.length) {// 关闭什么都不做
} else {
window.location.href = cartUrl;
}
});
}
} else {
_Toast(resp.msg);
}
}).catch(function () {
_Toast('再来一单请求失败。');
});
};
_proto._saveSessionStorage = function _saveSessionStorage(goodsList, kdtId) {
try {
var parsedList = goodsList.map(function (goods) {
var goods_id = goods.goods_id,
sku_id = goods.sku_id,
num = goods.num,
_goods$activity_id = goods.activity_id,
activity_id = _goods$activity_id === void 0 ? 0 : _goods$activity_id;
return {
goods_id: goods_id,
sku_id: sku_id,
num: num,
activity_id: activity_id
};
});
window.sessionStorage.setItem('buyAgain', JSON.stringify({
kdtId: kdtId,
goodsList: parsedList
}));
} catch (e) {
console.log('e');
}
};
_proto._buildGoodsList = function _buildGoodsList(goodsList, failGoodsList) {
var failList = failGoodsList.map(function (failGoods) {
var goodsArr = goodsList.filter(function (goods) {
return goods.sku_id === failGoods.sku_id && goods.goods_id === failGoods.goods_id;
});
var findedGoods = goodsArr[0] || {};
var sku = findedGoods.sku.map(function (item) {
return item.v;
}).join(' ');
return {
title: findedGoods.title || findedGoods.goods_info.title || '',
num: findedGoods.num,
sku: sku
};
});
var successList = goodsList.filter(function (goods) {
return !failGoodsList.some(function (failGoods) {
return goods.sku_id === failGoods.sku_id && goods.goods_id === failGoods.goods_id;
});
});
return {
failList: failList,
successList: successList
};
};
return BuyAgain;
}();
export default BuyAgain;