import { isIntersect } from '@/common/util.js' // 获取选中商品 export function fetchSelectedProducts(goodsList) { const productList = [] goodsList.forEach(shop => productList.push(...shop.productList.filter(prod => prod.productsChecked))) return productList } // 根据选中商品筛选可用优惠券并排序 export function findCouponBySelected(ids, couponList) { const list = couponList.filter(coupon => coupon.productType === 1 || isIntersect(ids, coupon.productIds.split(','))) return couponSort(list) } /** * 优惠券是否可用 * 1 无门槛 * 2 有门槛 * 1 全部商品可用 * 全部商品价格总计 >= 当前优惠券的触发金额 * 2 指定商品可用 * 当前优惠券可用的商品的价格总计 >= 当前优惠券的触发金额 * */ // 判断可用优惠券是否满足使用条件 export function canUseCoupon(current, productIds, canUseCouponList, selectedPoducts) { if (productIds.length <= 0 || canUseCouponList.length <= 0) return -1 const len = canUseCouponList.length if (current >= len) return len const currentCoupon = canUseCouponList[current] if ( currentCoupon.noThresholdFlag === 1 || (currentCoupon.productType === 1 && allProdoceUseCheck(selectedPoducts, currentCoupon)) || (currentCoupon.productType === 2 && someProductUseCheck(selectedPoducts, currentCoupon)) ) { return current } else { return canUseCoupon(++current, productIds, canUseCouponList, selectedPoducts) } } // 判断全部商品可用 (全部商品价格总计 是否大于 当前优惠券的触发金额) export function allProdoceUseCheck(productList, coupon) { const countPrice = productList.reduce((countPrice, prod) => countPrice + prod.price * prod.productCount, 0) return countPrice >= coupon.touchPrice } // 判断指定商品可用 (当前优惠券可用的商品的价格总计 是否大于 当前优惠券的触发金额) export function someProductUseCheck(productList, coupon) { const countPrice = productList.reduce((countPrice, prod) => { // 当前优惠券可用的商品总价 const isIncludes = coupon.productIds.indexOf(prod.productId.toString()) > -1 return isIncludes ? countPrice + prod.price * prod.productCount : countPrice }, 0) return countPrice >= coupon.touchPrice } // 统计当前优惠券商品可用的价格 export function getCountPrice(productList, coupon) { let countPrice = 0 // 针对全部商品 if (coupon.productType === 1) { countPrice = productList.reduce((countPrice, prod) => countPrice + prod.price * prod.productCount, 0) } // 只针对优惠券可用商品 if (coupon.productType === 2) { countPrice = productList.reduce((countPrice, prod) => { // 当前优惠券可用的商品总价 const isIncludes = coupon.productIds.indexOf(prod.productId.toString()) > -1 return isIncludes ? countPrice + prod.price * prod.productCount : countPrice }, 0) } return countPrice } // 将优惠券按金额从大到小排序 export function couponSort(couponList) { return couponList.sort((a, b) => b.couponAmount - a.couponAmount) }