101 lines
3.4 KiB
JavaScript
101 lines
3.4 KiB
JavaScript
export function isTui(item){
|
|
return item.status=='return'||item.status=='refund'||item.status=='refunding'
|
|
}
|
|
|
|
//计算商品券优惠价格
|
|
export function returnProductCouponPrice(coup, goodsArr, vipUser) {
|
|
const item = goodsArr.find(v => v.productId == coup.proId);
|
|
if(!item){
|
|
return 0
|
|
}
|
|
const memberPrice = item.memberPrice ? item.memberPrice : item.price;
|
|
const price = item ? (vipUser.isVip ? memberPrice : item.price) : 0;
|
|
return price*coup.num
|
|
|
|
}
|
|
//返回新的商品列表,过滤掉退菜的,退单的商品
|
|
export function returnNewGoodsList(arr) {
|
|
let goodsMap={}
|
|
return arr.filter(v => !isTui(v))
|
|
}
|
|
//根据当前购物车商品以及数量,已选券对应商品数量,判断该商品券是否可用
|
|
export function returnCoupCanUse(goodsArr=[],coup,selCoupArr=[]) {
|
|
// if(!coup.use){
|
|
// return false
|
|
// }
|
|
const findGoods=goodsArr.filter(v=>v.productId==coup.proId)
|
|
if(!findGoods.length){
|
|
return false
|
|
}
|
|
const findGoodsTotalNumber=findGoods.reduce((prve,cur)=>{
|
|
return prve+cur.num*1
|
|
},0)
|
|
const selCoupNumber=selCoupArr.filter(v=>v.proId==coup.proId).reduce((prve,cur)=>{
|
|
return prve+cur.num*1
|
|
},0)
|
|
if(selCoupNumber>=findGoodsTotalNumber){
|
|
return false
|
|
}
|
|
return findGoodsTotalNumber<(coup.num+selCoupNumber)?false:true
|
|
}
|
|
//查找购物车商品根据购物车商品数据返回商品券信息(抵扣价格以及是否满足可用需求)
|
|
export function returnProductCoupon(coup, goodsArr, vipUser,selCoupArr=[]) {
|
|
const newGoodsArr = returnNewGoodsList(goodsArr)
|
|
const item = newGoodsArr.find(v => v.productId == coup.proId);
|
|
if(!item){
|
|
return {...coup, discountAmount: 0,use:false}
|
|
}
|
|
const memberPrice = item.memberPrice ? item.memberPrice : item.price;
|
|
const price = item ? (vipUser.isVip ? memberPrice : item.price) : 0;
|
|
const discountAmount=(price*coup.num).toFixed(2)
|
|
console.log(discountAmount);
|
|
|
|
const canUse=!coup.use?false:(discountAmount>0&&returnCoupCanUse(goodsArr,coup,selCoupArr))
|
|
// const canUse=discountAmount>0
|
|
return { ...coup, discountAmount: discountAmount,use:canUse}
|
|
|
|
}
|
|
/**
|
|
* 根据购物车商品计算商品券抵扣价格以及是否满足可用需求
|
|
* 1.商品券对应商品数量大于购物车对应商品数量不可用
|
|
* 2.未在购物车找到相关商品不可用
|
|
* @param {*} coupArr
|
|
* @param {*} goodsArr
|
|
* @param {*} vipUser
|
|
* @returns
|
|
*/
|
|
export function returnProductAllCoup(coupArr, goodsArr, vipUser){
|
|
return coupArr.map((v) => {
|
|
return returnProductCoupon(v, goodsArr, vipUser)
|
|
})
|
|
|
|
}
|
|
|
|
//计算商品券总优惠价格
|
|
export function returnProductCouponAllPrice(coupArr, goodsArr, vipUser) {
|
|
if(coupArr.length == 0){
|
|
return 0;
|
|
}
|
|
return coupArr.reduce((a, b) => {
|
|
const price = returnProductCouponPrice(b, goodsArr, vipUser)
|
|
return a + price;
|
|
}, 0).toFixed(2);
|
|
|
|
}
|
|
//计算满减券总优惠价格
|
|
export function returnFullReductionCouponAllPrice(coupArr) {
|
|
if(coupArr.length == 0){
|
|
return 0;
|
|
}
|
|
return coupArr.filter(v => v.type == 1).reduce((a, b) => {
|
|
const price = b.discountAmount
|
|
return a + price;
|
|
}, 0).toFixed(2);
|
|
|
|
}
|
|
//计算优惠券总价格
|
|
export function returnCouponAllPrice(coupArr, goodsArr, vipUser) {
|
|
const poductAllprice=returnProductCouponAllPrice(coupArr, goodsArr, vipUser)
|
|
const pointAllPrice=returnFullReductionCouponAllPrice(coupArr)
|
|
return (poductAllprice*1+pointAllPrice*1).toFixed(2);
|
|
} |