Files
36-character-flower/src/constants/system.ts
JiaJun 72b6de499e fix(auth): 解决认证错误处理和会话管理问题
- 替换 AUTH_INVALID_TOKEN_CODE 为 AUTH_RELOGIN_REQUIRED_CODES 数组支持多种错误码
- 实现 hasClearableSessionState 和 hasRecordedUnauthorizedSession 函数优化会话清理逻辑
- 添加 clearQueryCache 选项控制查询缓存清理行为
- 修复马来西亚手机号正则验证模式导致的用户名验证问题
- 更新 API 错误消息处理优先级,优先使用服务端返回的消息
- 添加服务器消息检查函数 hasServerMessage 避免重复错误提示
- 在登录表单中实现密码可见性切换功能
- 添加密码可见性国际化文案支持
- 实现页面历史记录抽屉组件和相关动效
- 优化模态框背景遮罩样式和键盘事件处理
- 调整多个组件的 z-index 层级避免显示冲突
2026-06-01 17:46:01 +08:00

131 lines
4.1 KiB
TypeScript

import enUS from '@/assets/system/en-US.png'
import idID from '@/assets/system/id-ID.webp'
import msMY from '@/assets/system/ms-MY.png'
import zhCN from '@/assets/system/zh-CN.png'
/** @description 应用启动阶段使用的根节点 ID。 */
export const APP_ROOT_ELEMENT_ID = 'root'
/** @description 应用名称,用于文档标题和分享元信息。 */
export const APP_NAME = '36字花'
/** @description 应用默认页面描述,用于 SEO 和分享卡片。 */
export const APP_DEFAULT_DESCRIPTION =
'36-character-flower real-time game portal built with React, TanStack Router, TanStack Query, and Zustand.'
/** @description 应用偏好持久化到浏览器时使用的存储键。 */
export const APP_PREFERENCES_STORAGE_KEY = 'app-preferences'
/** @description 音频偏好持久化到浏览器时使用的存储键。 */
export const AUDIO_PREFERENCES_STORAGE_KEY = 'audio-preferences'
/** @description 接口请求默认超时时间,单位为毫秒。 */
export const DEFAULT_REQUEST_TIMEOUT_MS = 15_000
/** @description 请求默认声明可接收的响应内容类型。 */
export const DEFAULT_REQUEST_ACCEPT_HEADER = 'application/json'
/** @description 请求层统一使用的错误提示文案。 */
export const API_ERROR_MESSAGES = {
timeout: 'Request timed out',
unexpected: 'Unexpected request error',
} as const
/** @description TanStack Query 默认缓存新鲜时间,单位为毫秒。 */
export const QUERY_DEFAULT_STALE_TIME_MS = 30_000
/** @description TanStack Query 默认缓存回收时间,单位为毫秒。 */
export const QUERY_DEFAULT_GC_TIME_MS = 5 * 60_000
/** @description 查询请求默认允许的最大重试次数。 */
export const QUERY_RETRY_LIMIT = 2
/** @description 可被视为瞬时失败并允许重试的 HTTP 状态码集合。 */
export const QUERY_RETRYABLE_STATUS_CODES = [
408, 429, 500, 502, 503, 504,
] as const
/** @description 桌面端布局切换起始断点,单位为像素。 */
export const DESKTOP_LAYOUT_MIN_WIDTH_PX = 1024
/** @description 应用支持的语言代码列表。 */
export const SUPPORTED_LANGUAGES = ['zh-CN', 'en-US', 'ms-MY', 'id-ID'] as const
/** @description 应用无法解析用户语言时使用的默认语言。 */
export const DEFAULT_APP_LANGUAGE = 'en-US'
/** @description 语言切换面板展示的语言选项配置。 */
export const LANGUAGE_OPTIONS: Array<{
code: (typeof SUPPORTED_LANGUAGES)[number]
icon: string
labelKey: string
}> = [
{
code: 'zh-CN',
icon: zhCN,
labelKey: 'language.zhCN',
},
{
code: 'en-US',
icon: enUS,
labelKey: 'language.enUS',
},
{
code: 'ms-MY',
icon: msMY,
labelKey: 'language.msMY',
},
{
code: 'id-ID',
icon: idID,
labelKey: 'language.idID',
},
]
/** @description 按语言代码快速取得国旗图标资源的映射表。 */
export const LANGUAGE_ICON_MAP = new Map(
LANGUAGE_OPTIONS.map((language) => [language.code, language.icon] as const),
)
/** @description 浏览器全屏状态变更事件名,包含 WebKit/Firefox/IE 兼容事件。 */
export const FULLSCREEN_CHANGE_EVENTS = [
'fullscreenchange',
'webkitfullscreenchange',
'mozfullscreenchange',
'MSFullscreenChange',
] as const
/** @description 通知弹窗默认停留时间,单位为毫秒。 */
export const DEFAULT_ALERT_DURATION_MS = 2600
/** @description 通知弹窗关闭动画持续时间,单位为毫秒。 */
export const NOTIFICATION_EXIT_DURATION_MS = 220
/** @description 全局弹窗注册键列表,用于统一控制弹窗开关状态。 */
export const MODAL_KEYS = [
'desktopLogin',
'desktopRegister',
'desktopLanguage',
'desktopRules',
'desktopUserInfo',
'desktopNotice',
'desktopAutoSetting',
'desktopProcedures',
'desktopWithdrawTopup',
'desktopPeriodHistory',
] as const
/** @description 全局弹窗默认可见状态。 */
export const INITIAL_MODAL_VISIBILITY = {
desktopLogin: false,
desktopRegister: false,
desktopLanguage: false,
desktopRules: false,
desktopUserInfo: false,
desktopNotice: false,
desktopAutoSetting: false,
desktopProcedures: false,
desktopWithdrawTopup: false,
desktopPeriodHistory: false,
} as const