import type { AlertType, CargoType } from "@/lib/frontend/types"; import { QUOTE_TIMEOUT_MS } from "@/lib/constants/quote"; export const CARGO_TYPE_OPTIONS: { value: CargoType; label: string }[] = [ { value: "general_freight", label: "普通货物" }, { value: "machinery", label: "机械设备" }, { value: "furniture", label: "家具" }, { value: "electronics", label: "电子产品" }, { value: "building_materials", label: "建材" }, { value: "auto_parts", label: "汽车配件" }, { value: "food_nonperishable", label: "非生鲜食品" }, { value: "apparel", label: "服装" }, { value: "other", label: "其他" }, ]; export { US_STATES } from "@/lib/frontend/us-states"; export const ALERT_TYPE_LABEL: Record = { PRICE_DEVIATION: "价格偏差", STALE_FALLBACK: "降级使用旧报价", RPA_FAILED: "RPA 抓取失败", RPA_CAPTCHA: "RPA 触发验证码", STRUCT_CHANGE: "页面结构变更", SESSION_EXPIRED: "会话过期", SECURITY: "安全事件", MANUAL_FALLBACK: "人工兜底", }; export const ALERT_TYPE_TONE: Record< AlertType, "warning" | "error" | "neutral" > = { PRICE_DEVIATION: "warning", STALE_FALLBACK: "warning", RPA_FAILED: "error", RPA_CAPTCHA: "error", STRUCT_CHANGE: "error", SESSION_EXPIRED: "error", SECURITY: "error", MANUAL_FALLBACK: "warning", }; export const POLL_INTERVAL_MS = 2_000; /** 与后端 QUOTE_TIMEOUT_MS 对齐,避免 RPA 未完成前端先报超时 */ export const POLL_TIMEOUT_MS = QUOTE_TIMEOUT_MS; /** 由超时窗口推导,供展示/测试参考 */ export const POLL_MAX_ATTEMPTS = Math.ceil( POLL_TIMEOUT_MS / POLL_INTERVAL_MS, ); export const SUBMIT_LOCK_MS = 3_000; /** 地址候选 API 前端等待上限(毫秒):与后端 ADDRESS_CANDIDATES_TIMEOUT_MS 对齐 */ export const CANDIDATES_FETCH_TIMEOUT_MS = 300_000; export const METRICS_THRESHOLDS = { api_success_rate: 99, rpa_success_rate: 95, realtime_rate: 90, cache_hit_rate: 30, } as const; export const AUTH_TOKEN_KEY = "chajia_admin_token"; export const AUTH_USER_KEY = "chajia_admin_user";