/** 模拟流程跨页上下文(sessionStorage) */ const JOB_KEY = 'aitori.simJobId' const RESULT_KEY = 'aitori.simResultId' const CUSTOMER_KEY = 'aitori.simCustomerId' const SOURCE_PHOTO_KEY = 'aitori.simSourcePhoto' export const simulationSession = { setJob(jobId: number, extras?: { customerId?: string; sourcePhoto?: string }) { sessionStorage.setItem(JOB_KEY, String(jobId)) if (extras?.customerId) { sessionStorage.setItem(CUSTOMER_KEY, extras.customerId) } else { sessionStorage.removeItem(CUSTOMER_KEY) } if (extras?.sourcePhoto) { sessionStorage.setItem(SOURCE_PHOTO_KEY, extras.sourcePhoto) } else { sessionStorage.removeItem(SOURCE_PHOTO_KEY) } }, setCustomerId(customerId: string) { sessionStorage.setItem(CUSTOMER_KEY, customerId) }, getJobId(): number | null { const raw = sessionStorage.getItem(JOB_KEY) return raw ? Number(raw) : null }, setResultId(resultId: string) { sessionStorage.setItem(RESULT_KEY, resultId) }, getResultId(): string | null { return sessionStorage.getItem(RESULT_KEY) }, getCustomerId(): string | null { return sessionStorage.getItem(CUSTOMER_KEY) }, getSourcePhoto(): string | null { return sessionStorage.getItem(SOURCE_PHOTO_KEY) }, clear() { sessionStorage.removeItem(JOB_KEY) sessionStorage.removeItem(RESULT_KEY) sessionStorage.removeItem(CUSTOMER_KEY) sessionStorage.removeItem(SOURCE_PHOTO_KEY) }, } export const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms))