54 lines
2.1 KiB
TypeScript
54 lines
2.1 KiB
TypeScript
/**
|
|
* 演示数据的本地持久化(仅 Mock 模式使用)。
|
|
*
|
|
* 文档库与签署任务的演示数据原本只存在模块内存里,刷新页面就回到初始状态,
|
|
* 自测「文档库建文书 → 发起签署 → 签署 → 查看留痕」每次都要重来一遍。
|
|
* 这里把这份数据镜像到 localStorage,刷新后可以接着测。
|
|
*
|
|
* 只存演示数据,不涉及登录态、权限或真实患者信息;写入失败(容量超限、
|
|
* 浏览器禁用存储)时静默降级为纯内存数据,不打断正在进行的操作。
|
|
*/
|
|
|
|
const STORAGE_PREFIX = 'medical-sign:mock:'
|
|
|
|
/** 演示数据键名:清空演示数据时按这里的清单统一清理 */
|
|
export const MOCK_STORAGE_KEYS = {
|
|
/**
|
|
* 键里带种子版本号。
|
|
*
|
|
* 演示文库的种子内容换过一轮(原来 7 份示例文书,现在只保留「麻醉药品、精神药品
|
|
* 知情同意书」),旧键里的数据不会再被读到,浏览器不必手工清缓存就能看到新种子。
|
|
* 之后每次改种子结构,把版本号 +1 即可,代价只是旧键留在 localStorage 里不参与读取。
|
|
*/
|
|
documentLibrary: `${STORAGE_PREFIX}document-library:v2`,
|
|
signingTasks: `${STORAGE_PREFIX}signing-tasks`,
|
|
} as const
|
|
|
|
export function readMockState<T>(key: string): T | null {
|
|
try {
|
|
const raw = window.localStorage.getItem(key)
|
|
|
|
return raw ? (JSON.parse(raw) as T) : null
|
|
} catch {
|
|
// 存储被禁用,或存量数据与当前结构不兼容:按「没有本地数据」处理,页面照常初始化
|
|
return null
|
|
}
|
|
}
|
|
|
|
export function writeMockState(key: string, value: unknown): void {
|
|
try {
|
|
window.localStorage.setItem(key, JSON.stringify(value))
|
|
} catch {
|
|
// 容量超限或存储被禁用:退化为纯内存演示数据,不打扰使用者
|
|
}
|
|
}
|
|
|
|
/** 清空全部演示数据,调用方负责重新加载数据或刷新页面 */
|
|
export function clearMockState(): void {
|
|
try {
|
|
Object.values(MOCK_STORAGE_KEYS).forEach((key) => window.localStorage.removeItem(key))
|
|
} catch {
|
|
// 存储不可用时本来就无需清理
|
|
}
|
|
}
|