gaoluyang
2026-06-24 712aa51536236d43e87273e4ce45ac5691dffad8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/*  eslint-disable vue/one-component-per-file */
import type { MallCouponTemplateApi } from '#/api/mall/promotion/coupon/couponTemplate';
 
import { defineComponent } from 'vue';
 
import {
  CouponTemplateValidityTypeEnum,
  PromotionDiscountTypeEnum,
} from '..\..\..\..\..\..\..\..\packages\constants\src';
import { floatToFixed2, formatDate } from '..\..\..\..\..\..\..\..\packages\utils\src';
 
/** 有效期 */
export const CouponValidTerm = defineComponent({
  name: 'CouponValidTerm',
  props: {
    coupon: {
      type: Object as () => MallCouponTemplateApi.CouponTemplate,
      required: true,
    },
  },
  setup(props) {
    const coupon = props.coupon as MallCouponTemplateApi.CouponTemplate;
    const text =
      coupon.validityType === CouponTemplateValidityTypeEnum.DATE.type
        ? `有效期:${formatDate(coupon.validStartTime, 'YYYY-MM-DD')} 至 ${formatDate(
            coupon.validEndTime,
            'YYYY-MM-DD',
          )}`
        : `领取后第 ${coupon.fixedStartTerm} - ${coupon.fixedEndTerm} 天内可用`;
    return () => <div>{text}</div>;
  },
});
 
/** 优惠值 */
export const CouponDiscount = defineComponent({
  name: 'CouponDiscount',
  props: {
    coupon: {
      type: Object as () => MallCouponTemplateApi.CouponTemplate,
      required: true,
    },
  },
  setup(props) {
    const coupon = props.coupon as MallCouponTemplateApi.CouponTemplate;
    // 折扣
    let value = `${(coupon.discountPercent ?? 0) / 10}`;
    let suffix = ' 折';
    // 满减
    if (coupon.discountType === PromotionDiscountTypeEnum.PRICE.type) {
      value = floatToFixed2(coupon.discountPrice);
      suffix = ' 元';
    }
    return () => (
      <div>
        <span class={'text-20px font-bold'}>{value}</span>
        <span>{suffix}</span>
      </div>
    );
  },
});
 
/** 优惠描述 */
export const CouponDiscountDesc = defineComponent({
  name: 'CouponDiscountDesc',
  props: {
    coupon: {
      type: Object as () => MallCouponTemplateApi.CouponTemplate,
      required: true,
    },
  },
  setup(props) {
    const coupon = props.coupon as MallCouponTemplateApi.CouponTemplate;
    // 使用条件
    const useCondition =
      coupon.usePrice > 0 ? `满${floatToFixed2(coupon.usePrice)}元,` : '';
    // 优惠描述
    const discountDesc =
      coupon.discountType === PromotionDiscountTypeEnum.PRICE.type
        ? `减${floatToFixed2(coupon.discountPrice)}元`
        : `打${(coupon.discountPercent ?? 0) / 10}折`;
    return () => (
      <div>
        <span>{useCondition}</span>
        <span>{discountDesc}</span>
      </div>
    );
  },
});