Files
zt-closet-wxmini-frontend/miniprogram/utils/config.ts
T

255 lines
7.4 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.
// 全局配置与常量
// 后端服务域名(不含 /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',
// AI 推荐为异步任务:存 task_id,退出页面再进来可继续轮询结果
AI_TASK: 'zt_ai_recommend_task',
// 衣物上传后 AI 处理为异步任务:存待核对的 clothes_uuid 列表,
// 退出小程序再进来时据此补齐「处理成功/失败」的结果告知
PENDING_CLOTHES: 'zt_pending_clothes',
}
// 衣物图片处理状态
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, // 衣柜分享
}
// 会员类型(与后端 UserInfo.vip_type 对齐)
export enum VipType {
NONE = 1, // 非会员
MONTHLY = 2, // 月度会员
YEARLY = 3, // 年度会员
TRIAL = 4, // 体验会员(新用户注册赠送,固定有效期,不随续费延长)
}
// 会员标签映射:非会员不在资料区展示标签,故意不提供 NONE 的文案
export const VIP_TYPE_NAMES: Record<number, string> = {
[VipType.MONTHLY]: '月度会员',
[VipType.YEARLY]: '年度会员',
[VipType.TRIAL]: '体验会员',
}
// 通知类型
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<number, string> = {
[QuotaType.UPLOAD]: '上传额度',
[QuotaType.AI]: 'AI 推荐额度',
[QuotaType.OUTFIT_SHARE]: '社区分享额度',
[QuotaType.CLOSET_SHARE]: '衣柜分享额度',
}
// 商品类型名称映射
export const GOODS_TYPE_NAMES: Record<number, string> = {
[GoodsType.MEMBER]: '会员',
[GoodsType.UPLOAD]: '上传',
[GoodsType.AI]: 'AI 推荐',
[GoodsType.CLOSET_SHARE]: '衣柜分享',
[GoodsType.OUTFIT_SHARE]: '搭配分享',
}
// 错误码统一文案(兜底,优先展示服务端 details[0])
export const ERROR_MESSAGES: Record<number, string> = {
// 通用
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 推荐次数已达上限',
90402: '生成任务不存在或已过期,请重新生成',
90403: '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