import React from 'react' import { View, Text } from '@tarojs/components' import { Button } from '@nutui/nutui-react-taro' import './CouponCard.scss' export interface CouponCardProps { /** 优惠券金额 */ amount: number /** 最低消费金额 */ minAmount?: number /** 优惠券类型:1-满减券 2-折扣券 3-免费券 */ type?: 1 | 2 | 3 /** 优惠券状态:0-未使用 1-已使用 2-已过期 */ status?: 0 | 1 | 2 /** 优惠券标题 */ title?: string /** 有效期开始时间 */ startTime?: string /** 有效期结束时间 */ endTime?: string /** 是否显示领取按钮 */ showReceiveBtn?: boolean /** 是否显示使用按钮 */ showUseBtn?: boolean /** 领取按钮点击事件 */ onReceive?: () => void /** 使用按钮点击事件 */ onUse?: () => void /** 优惠券样式主题:red | orange | blue | purple | green */ theme?: 'red' | 'orange' | 'blue' | 'purple' | 'green' } const CouponCard: React.FC = ({ amount, minAmount, type = 1, status = 0, title, startTime, endTime, showReceiveBtn = false, showUseBtn = false, onReceive, onUse, theme = 'red' }) => { // 获取主题颜色类名 const getThemeClass = () => { return `theme-${theme}` } // 格式化优惠券金额显示 // @ts-ignore const formatAmount = () => { switch (type) { case 1: // 满减券 return `¥${amount}` case 2: // 折扣券 return `${amount}折` case 3: // 免费券 return '免费' default: return `¥${amount}` } } // 获取优惠券状态文本 const getStatusText = () => { switch (status) { case 0: return '未使用' case 1: return '已使用' case 2: return '已过期' default: return '未使用' } } // 获取使用条件文本 const getConditionText = () => { if (type === 3) return '无门槛' if (minAmount && minAmount > 0) { return `满${minAmount}可用` } return '无门槛' } // 格式化日期 const formatDate = (dateStr?: string) => { if (!dateStr) return '' const date = new Date(dateStr) return `${date.getMonth() + 1}.${date.getDate()}` } // 获取有效期文本 const getValidityText = () => { if (startTime && endTime) { return `${formatDate(startTime)}-${formatDate(endTime)}` } return '' } const themeClass = getThemeClass() return ( {/* 左侧金额区域 */} ¥ {amount} {getConditionText()} {/* 中间分割线 */} {/* 右侧信息区域 */} {title || (type === 1 ? '满减券' : type === 2 ? '折扣券' : '免费券')} 有效期:{getValidityText()} {/* 按钮区域 */} {showReceiveBtn && status === 0 && ( )} {showUseBtn && status === 0 && ( )} {status !== 0 && ( {getStatusText()} )} {/* 状态遮罩 */} {status !== 0 && ( {getStatusText()} )} ) } export default CouponCard