2026-05-25 18:12:38 +08:00
|
|
|
|
import type { User } from "./user"
|
|
|
|
|
|
|
2026-03-27 15:51:40 +08:00
|
|
|
|
export type Coupon = {
|
|
|
|
|
|
id: number
|
2026-04-28 11:16:54 +08:00
|
|
|
|
name: string
|
2026-03-27 15:51:40 +08:00
|
|
|
|
user_id: number
|
|
|
|
|
|
code: string
|
|
|
|
|
|
remark: string
|
|
|
|
|
|
amount: number
|
|
|
|
|
|
min_amount: number
|
2026-04-28 11:16:54 +08:00
|
|
|
|
count: number
|
2026-03-27 15:51:40 +08:00
|
|
|
|
status: number
|
2026-04-28 11:16:54 +08:00
|
|
|
|
expire_type: number
|
|
|
|
|
|
created_at: Date
|
|
|
|
|
|
updated_at: Date
|
2026-03-27 15:51:40 +08:00
|
|
|
|
expire_at: Date
|
2026-04-28 11:16:54 +08:00
|
|
|
|
expire_in: number
|
2026-05-25 18:12:38 +08:00
|
|
|
|
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)}天)`
|
|
|
|
|
|
}
|
2026-03-27 15:51:40 +08:00
|
|
|
|
}
|