export function isTui(item) { // console.log("isTui",item.status); return item.status == 'return' || item.status == 'refund' || item.status == 'refunding' } //是否使用会员价 export function isUseVipPrice(vipUser,goods){ return vipUser.id&&vipUser.isVip&&uni.getStorageSync("shopInfo").isMemberPrice } //计算商品券优惠价格 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 ? (isUseVipPrice(vipUser,item) ? memberPrice : item.price) : 0; return price * coup.num } //返回新的商品列表,过滤掉退菜的,退单的商品 export function returnNewGoodsList(arr) { return uni.$utils.objToArrary(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 }, 0) const selCoupNumber = selCoupArr.filter(v => v.proId == coup.proId).reduce((prve, cur) => { return prve + 1 }, 0) if (selCoupNumber >= findGoodsTotalNumber) { return false } return findGoodsTotalNumber < 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 } } let memberPrice = item.memberPrice ? item.memberPrice : item.price; let price = item ? (isUseVipPrice(vipUser,item) ? memberPrice : item.price) : 0; price = item.discountSaleAmount ? item.discountSaleAmount : price const discountAmount = (price * 1).toFixed(2) // const canUse = !coup.use ? false : (discountAmount > 0 && returnCoupCanUse(goodsArr, coup, selCoupArr)) // const canUse=discountAmount>0 const canUse=coup.use 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 returnProductPayPrice(goods,vipUser){ console.log(goods) let memberPrice = goods.memberPrice ? goods.memberPrice : goods.price; let price = isUseVipPrice(vipUser,goods) ? memberPrice : goods.price; price = goods.discountSaleAmount ? goods.discountSaleAmount : price return price } //返回商品券抵扣的商品价格 export function returnProductCoupAllPrice(productPriceArr,startIndex,num,isMember=true){ return productPriceArr.slice(startIndex,startIndex+num).reduce((prve,cur)=>{ let curPrice=0 if(typeof cur==='object'){ curPrice=isMember?cur.memberPrice*1:cur.price }else{ curPrice = cur*1 } return prve + curPrice },0) } //返回商品券可抵扣的商品数量 export function returnProductCanUseNum(productPriceArr,startIndex,num){ let n=0; for(let i=0;i{ return prve+cur.num*1 },0) } //返回商品数量从0到n每一个对应的价格对照表 export function returnGoodsPayPriceMap(goodsArr){ return goodsArr.reduce((prve,cur)=>{ if(!prve.hasOwnProperty(cur.productId)){ prve[cur.productId]=[] } let arr = new Array(Math.ceil(cur.num)).fill(cur).map(v=>{ return { memberPrice:v.memberPrice?v.memberPrice:v.price, price:v.price } }) prve[cur.productId].push(...arr) return prve },{}) } //计算商品券总优惠价格 export function returnProductCouponAllPrice(coupArr, goodsArr, vipUser) { if (coupArr.length == 0) { return 0; } //商品分组 const goodsMap={} //商品数量从0到n每一个对应的价格 const goodsPayPriceMap={} //商品券分组 let coupMap={} for(let i in coupArr){ const coup=coupArr[i] if(coupMap.hasOwnProperty(coup.proId)){ coupMap[coup.proId].push(coup) }else{ coupMap[coup.proId]=[coup] } } let total=0 for(let key in coupMap){ const arr=coupMap[key] for(let i in arr){ const coup=arr[i] if(!goodsMap.hasOwnProperty(coup.proId)){ goodsMap[coup.proId]= goodsArr.filter(v=>v.productId==coup.proId).map((v,i)=>{ return { ...v, payPrice: returnProductPayPrice(v,vipUser) } }).sort((a,b)=>{ let aPrice=a.payPrice let bPrice=b.payPrice return aPrice-bPrice }) goodsPayPriceMap[coup.proId] = goodsMap[coup.proId].reduce((prve,cur)=>{ const arr=new Array(cur.num).fill(cur.payPrice) prve.push(...arr) return prve },[]) } const proCoupStartIndex=returnProCoupStartIndex(arr,i) const coupNum = Math.min(coupMap[coup.proId].length) total+=returnProductCoupAllPrice(goodsPayPriceMap[coup.proId],proCoupStartIndex,coupNum) } } return total.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); } //返回当前满减券列表可用状态 export function returnCanUseFullReductionCoupon(coupArr, payPrice, selCoup) { return coupArr.map(v => { if (v.id == selCoup.id) { return v } const isfullAmount = payPrice >= v.fullAmount * 1 if(payPrice<=0){ return { ...v, use: false } } return { ...v, use: isfullAmount } }) } //根据商品数量还有商品券数量返回优惠券可以使用的数量数组 export function returnCanUseNumProductCoup(coupArr,){ let productCoup = coupArr.filter(v => v.type == 2) //商品券分组 let coupMap={} for(let i in productCoup){ const coup=productCoup[i] if(coupMap.hasOwnProperty(coup.proId)){ coupMap[coup.proId].push(coup) }else{ coupMap[coup.proId]=[coup] } } return arr }