1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- 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(productIds, couponList) {
- const list = couponList.filter(coupon => coupon.productType === 1 || isIntersect(productIds, coupon.productIds
- .split(',')))
- return couponSort(list)
- }
- /**
- * 优惠券是否可用
- * 1 无门槛
- * 2 有门槛
- * 1 全部商品可用
- * 全部商品价格总计 >= 当前优惠券的触发金额
- * 2 指定商品可用
- * 当前优惠券可用的商品的价格总计 >= 当前优惠券的触发金额
- * */
- // 判断可用优惠券是否满足使用条件 返回抵扣金额最高的优惠券索引 -1:无可用优惠券
- 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)
- }
- // 对优惠券去重 过滤掉相同id的优惠券
- export function couponFilterRepeat(couponList) {
- const list = []
- couponList.forEach(coupon => {
- if (list.findIndex(v => v.couponId === coupon.couponId) === -1) list.push(coupon)
- })
- return list
- }
- // 为优惠券设置唯一ID
- export function setCouponUniqueId(couponList = []) {
- return couponList.map((coupon, index) => {
- coupon.uniqueId = index
- return coupon
- })
- }
|