import type { TagProps } from 'element-plus' /** 枚举映射项:value=后端数值 label=中文文案 tagType=Tag 颜色 */ export interface EnumMapItem { value: number label: string tagType?: TagProps['type'] } function enumMap(items: EnumMapItem[]): Record { const map: Record = {} for (const item of items) { map[item.value] = item } return map } /* ---------------- 管理员 ---------------- */ export const ADMIN_ROLE = enumMap([ { value: 1, label: '超级管理员', tagType: 'danger' }, { value: 2, label: '普通管理员', tagType: 'info' }, ]) export const ADMIN_STATUS = enumMap([ { value: 1, label: '启用', tagType: 'success' }, { value: 2, label: '禁用', tagType: 'info' }, ]) /* ---------------- 用户 ---------------- */ export const USER_STATUS = enumMap([ { value: 1, label: '正常', tagType: 'success' }, { value: 2, label: '临时禁用', tagType: 'warning' }, { value: 3, label: '永久禁用', tagType: 'danger' }, { value: 4, label: '已注销', tagType: 'info' }, ]) export const USER_SEX = enumMap([ { value: 1, label: '男' }, { value: 2, label: '女' }, ]) export const VIP_TYPE = enumMap([ { value: 1, label: '非会员', tagType: 'info' }, { value: 2, label: '月度会员', tagType: 'warning' }, { value: 3, label: '年度会员', tagType: 'danger' }, { value: 4, label: '体验会员', tagType: 'success' }, ]) export const QUOTA_TYPE = enumMap([ { value: 1, label: '上传额度' }, { value: 2, label: 'AI 推荐额度' }, { value: 3, label: '社区分享额度' }, { value: 4, label: '衣柜分享额度' }, ]) export const BAN_TYPE = enumMap([ { value: 1, label: '临时封禁' }, { value: 2, label: '永久封禁' }, ]) export const GRANT_SOURCE = enumMap([ { value: 1, label: '会员包' }, { value: 2, label: '加量包' }, { value: 3, label: '广告激励' }, ]) /* ---------------- 商品 ---------------- */ export const GOODS_TYPE = enumMap([ { value: 1, label: '会员包', tagType: 'warning' }, { value: 2, label: '上传包' }, { value: 3, label: 'AI 推荐包' }, { value: 4, label: '衣柜分享包' }, { value: 5, label: '搭配分享包' }, ]) export const GOODS_STATUS = enumMap([ { value: 1, label: '上架', tagType: 'success' }, { value: 2, label: '下架', tagType: 'info' }, ]) export const PRODUCT_STATUS = enumMap([ { value: 0, label: '未发布', tagType: 'info' }, { value: 1, label: '发布中', tagType: 'warning' }, { value: 2, label: '已发布', tagType: 'success' }, { value: 3, label: '发布失败', tagType: 'danger' }, ]) /* ---------------- 订单 / 退款 ---------------- */ export const ORDER_STATUS = enumMap([ { value: 1, label: '待支付', tagType: 'warning' }, { value: 2, label: '已支付', tagType: 'success' }, { value: 3, label: '已取消', tagType: 'info' }, { value: 4, label: '已过期', tagType: 'info' }, { value: 5, label: '已退款', tagType: 'danger' }, ]) export const PAY_CHANNEL = enumMap([ { value: 1, label: '微信支付' }, { value: 2, label: '微信虚拟支付' }, ]) export const XPAY_ENV = enumMap([ { value: 0, label: '现网' }, { value: 1, label: '沙箱', tagType: 'warning' }, ]) export const REFUND_STATUS = enumMap([ { value: 0, label: '待处理', tagType: 'warning' }, { value: 1, label: '退款中', tagType: 'primary' }, { value: 2, label: '退款成功', tagType: 'success' }, { value: 3, label: '退款失败', tagType: 'danger' }, ]) /* ---------------- 内容审核 ---------------- */ export const OUTFIT_SOURCE = enumMap([ { value: 1, label: '用户创建' }, { value: 2, label: 'AI 推荐', tagType: 'primary' }, ]) export const OUTFIT_PUBLIC = enumMap([ { value: 1, label: '不公开', tagType: 'info' }, { value: 2, label: '公开', tagType: 'success' }, ]) export const OUTFIT_AUDIT_STATUS = enumMap([ { value: 1, label: '待审核', tagType: 'warning' }, { value: 2, label: '已通过', tagType: 'success' }, { value: 3, label: '未通过', tagType: 'danger' }, ]) export const OUTFIT_STATUS = enumMap([ { value: 1, label: '正常', tagType: 'success' }, { value: 2, label: '已封禁', tagType: 'danger' }, { value: 3, label: '待用户保存', tagType: 'warning' }, ]) export const SHARE_TYPE = enumMap([ { value: 1, label: '部分衣物' }, { value: 2, label: '全量快照' }, ]) export const SHARE_STATUS = enumMap([ { value: 1, label: '正常', tagType: 'success' }, { value: 2, label: '已取消', tagType: 'info' }, { value: 3, label: '已过期', tagType: 'info' }, { value: 4, label: '已封禁', tagType: 'danger' }, ]) export const IMAGE_PROCESS_STATUS = enumMap([ { value: 1, label: '抠图中', tagType: 'warning' }, { value: 2, label: '分类中', tagType: 'warning' }, { value: 3, label: '排队中', tagType: 'info' }, { value: 4, label: '处理成功', tagType: 'success' }, { value: 5, label: '处理失败', tagType: 'danger' }, ]) /* ---------------- 工具函数 ---------------- */ /** 根据枚举表取文案,未匹配返回 '-' */ export function enumLabel(map: Record, value?: number | null): string { if (value === undefined || value === null) return '-' const item = map[value] return item ? item.label : '-' } /** 根据枚举表取 Tag 颜色 */ export function enumTag(map: Record, value?: number | null): TagProps['type'] { if (value === undefined || value === null) return 'info' const item = map[value] return item?.tagType ?? 'info' } /** 枚举表转下拉选项(数字值) */ export function enumOptions(map: Record): { value: number; label: string }[] { return Object.values(map).map((item) => ({ value: item.value, label: item.label })) }