Files
admin/src/models/coupon.ts
2026-05-25 18:12:38 +08:00

112 lines
2.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type { User } from "./user"
export type Coupon = {
id: number
name: string
user_id: number
code: string
remark: string
amount: number
min_amount: number
count: number
status: number
expire_type: number
created_at: Date
updated_at: Date
expire_at: Date
expire_in: number
coupon: useCoupon
user: User
}
type useCoupon = {
id: number
name: string
expire_type: number
status: number
created_at: Date
}
// 优惠券使用状态
export const couponUseStatusMap = {
0: { text: "未使用", color: "text-green-600" },
1: { text: "已使用", color: "text-blue-600" },
2: { text: "已禁用", color: "text-green-600" },
} as const
// 优惠券状态
export const couponStatusMap = {
0: { text: "禁用", color: "text-yellow-600" },
1: { text: "正常", color: "text-green-600" },
} as const
// 优惠券过期类型
export const expireTypeMap = {
0: "不过期",
1: "固定日期",
2: "相对日期",
} as const
// 优惠券状态 & 使用状态
export const getStatus = (status: number, type: "coupon" | "use") => {
if (type === "coupon") {
return (
couponStatusMap[status as keyof typeof couponStatusMap] || {
text: "",
color: "text-gray-400",
}
)
}
return (
couponUseStatusMap[status as keyof typeof couponUseStatusMap] || {
text: "",
color: "text-gray-400",
}
)
}
export const getDaysToExpire = (expireAt: Date | string): number => {
if (!expireAt) return 0
const targetDate = new Date(expireAt)
const now = new Date()
const targetDay = new Date(
targetDate.getFullYear(),
targetDate.getMonth(),
targetDate.getDate(),
)
const today = new Date(now.getFullYear(), now.getMonth(), now.getDate())
const diffTime = targetDay.getTime() - today.getTime()
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24))
return diffDays
}
// 过期类型
export const getExpireType = (expireType: number): string => {
return expireTypeMap[expireType as keyof typeof expireTypeMap] || ""
}
// 获取过期类型显示(带天数)
export const getExpireTypeText = (
expireType: number,
expireAt: Date,
): string => {
const typeText = getExpireType(expireType)
console.log(typeText, "typeText")
if (expireType === 0) return typeText
const days = getDaysToExpire(expireAt)
console.log(days, "days")
if (days === 0) {
return `${typeText}`
} else if (days > 0) {
return `${typeText}${days}天后)`
} else {
return `${typeText}(已过期${Math.abs(days)}天)`
}
}