// 全局配置与常量 // 后端服务域名(不含 /api/v1 前缀、不含结尾斜杠) export const BASE_URL = 'https://zt-closet-backend.lzcwy.cn' // API 统一前缀 export const API_PREFIX = '/api/v1' // 本地存储 key export const STORAGE_KEYS = { ACCESS_TOKEN: 'zt_closet_access_token', REFRESH_TOKEN: 'zt_closet_refresh_token', EXPIRE_TIME: 'zt_closet_expire_time', USER_INFO: 'zt_closet_user_info', UNREAD: 'zt_closet_unread', OPEN_COLLECT: 'zt_open_collect', OPEN_PROFILE_EDIT: 'zt_open_profile_edit', } // 衣物图片处理状态 export enum ProcessStatus { MATTING = 1, // 抠图中 CLASSIFYING = 2, // 分类中 QUEUED = 3, // 排队中 SUCCESS = 4, // 成功 FAILED = 5, // 失败 } // 订单状态 export enum OrderStatus { PENDING = 1, // 待支付 PAID = 2, // 已支付 CANCELLED = 3, // 已取消 EXPIRED = 4, // 已过期 REFUNDED = 5, // 已退款 } // 额度类型 export enum QuotaType { UPLOAD = 1, // 上传 AI = 2, // AI 推荐 OUTFIT_SHARE = 3, // 社区分享(搭配分享) CLOSET_SHARE = 4, // 衣柜分享 } // 通知类型 export enum MsgType { LIKE = 1, // 点赞通知 ORDER = 2, // 订单通知 SYSTEM = 3, // 系统通知 } // 穿搭来源 export enum OutfitSource { USER = 1, // 用户创建 AI = 2, // AI 推荐 } // 公开状态 export enum IsPublic { PRIVATE = 1, // 不公开 PUBLIC = 2, // 公开 } // 穿搭审核状态 export enum AuditStatus { PENDING = 1, // 待审核 PASS = 2, // 审核通过 REJECT = 3, // 审核不通过 } // 衣柜分享状态 export enum ShareStatus { NORMAL = 1, // 正常 CANCELLED = 2, // 已取消 EXPIRED = 3, // 已过期 BANNED = 4, // 已封禁 } // 分享类型 export enum ShareType { PARTIAL = 1, // 部分衣物 FULL = 2, // 全量快照 } // 商品类型 export enum GoodsType { MEMBER = 1, // 会员包 UPLOAD = 2, // 上传包 AI = 3, // AI 推荐包 CLOSET_SHARE = 4, // 衣柜分享包 OUTFIT_SHARE = 5, // 搭配分享包 } // 额度名称映射 export const QUOTA_NAMES: Record = { [QuotaType.UPLOAD]: '上传额度', [QuotaType.AI]: 'AI 推荐额度', [QuotaType.OUTFIT_SHARE]: '社区分享额度', [QuotaType.CLOSET_SHARE]: '衣柜分享额度', } // 商品类型名称映射 export const GOODS_TYPE_NAMES: Record = { [GoodsType.MEMBER]: '会员', [GoodsType.UPLOAD]: '上传', [GoodsType.AI]: 'AI 推荐', [GoodsType.CLOSET_SHARE]: '衣柜分享', [GoodsType.OUTFIT_SHARE]: '搭配分享', } // 错误码统一文案(兜底,优先展示服务端 details[0]) export const ERROR_MESSAGES: Record = { // 通用 10000: '请求参数错误', 10001: '资源不存在', 10002: '请求方式错误', 10003: '操作过于频繁,请稍后重试', // 鉴权 / 用户 11000: '请先登录', 11001: '登录状态已失效', 11002: '登录状态已过期', 11003: '登录失败,请重试', 11004: '请先登录', 12000: '无权限操作', 20000: '用户参数错误', 21000: '用户名或密码错误', 21001: '账号已被禁用', 21002: '微信登录失败,请重试', 21003: '微信登录凭证无效', 21004: '注册暂未开放', 22000: '用户不存在', 23000: '用户已存在', 23001: '邮箱已被注册', // 上传 30000: '上传文件为空', 30001: '不支持的文件类型', 30002: '文件大小超过限制', 30004: '文件不存在', 30005: '文件不是公开的', 30006: '文件权限不足', 30007: '文件处理中', 39000: '文件保存失败', 39001: '图片抠图处理失败', 39002: '图片分类处理失败', // 穿搭 40000: '穿搭不存在', 40001: '创建穿搭失败', 40002: '删除穿搭失败', 40003: '更新穿搭失败', 40004: '无权操作该穿搭', // 衣物 50000: '衣物不存在', 50001: '该衣物已被搭配使用,无法删除', 50002: '创建衣物失败', 50003: '删除衣物失败', 50004: '更新衣物失败', 50005: '无权操作该衣物', // 商品 60000: '商品不存在', 60001: '商品已下架', // 订单 / 退款 70000: '订单不存在', 70001: '订单状态不正确', 70002: '订单已支付', 70003: '订单已取消', 70004: '订单已过期', 70005: '虚拟支付未开通', 70006: '商品尚未发布为虚拟支付道具', 70007: '虚拟支付订单不支持取消', 70008: 'iOS 虚拟支付最低 1 元', 70009: '订单真实性校验失败', 71000: '退款记录不存在', 71001: '当前状态不允许退款', 71002: '退款金额不合法', 71003: '退款申请失败', 71004: 'iOS 订单请通过 App Store 申请退款', 79000: '创建订单失败', 79001: '取消订单失败', 79002: '更新订单失败', 79003: '创建虚拟支付订单失败', // 额度 / 会员 80000: '额度不足', 80001: '额度记录不存在', 80002: '广告激励已领取', 80003: '无效的激励类型', 80004: '广告激励未开启', 81000: '会员记录不存在', 81001: '会员已过期', 81002: '会员开通失败', 89000: '额度更新失败', // 通知 / 分享 / 社区 / 星座 / AI 90000: '通知不存在', 90100: '分享不存在', 90101: '分享已过期', 90102: '分享已取消', 90103: '穿搭分享不存在', 90104: '穿搭分享已取消', 90200: '目标内容不存在', 90201: '点赞操作失败', 90202: '收藏操作失败', 90300: '运势生成中,请稍后重试', 90400: 'AI 推荐失败', 90401: 'AI 推荐次数已达上限', // 服务端 19000: '服务繁忙,请稍后重试', 19001: '服务繁忙,请稍后重试', 19002: '服务繁忙,请稍后重试', 19003: '服务繁忙,请稍后重试', 19999: '服务繁忙,请稍后重试', } // ===== 日志配置 ===== // 注意:本文件保持零 import(纯常量),LogLevel 定义在此以避免 config→logger→config 循环依赖 // 日志级别:数值越大越严重,低于当前级别的日志不输出 export enum LogLevel { DEBUG = 0, INFO = 1, WARN = 2, ERROR = 3, SILENT = 4, // 全部关闭 } // 全局日志级别开关: // null = 按运行环境自动判定(develop=DEBUG / trial=INFO / release=WARN) // LogLevel.DEBUG = 手动写死,临时调级用(调试完记得改回 null) export const LOG_LEVEL: LogLevel | null = null // 是否写入微信实时日志(真机可在小程序后台「实时日志」查看线上问题) // 仅 WARN 及以上写入,避免击穿实时日志配额 export const LOG_TO_REALTIME = true