123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- 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)
- }
|