feat: 增加本地测评档案与长期追踪

This commit is contained in:
2026-06-23 00:21:07 +02:00
parent fdfbfa063f
commit c8d5a918cf
19 changed files with 1509 additions and 14 deletions
+13 -4
View File
@@ -1,19 +1,28 @@
const RESULT_STORAGE_KEY = 'questionnaire_result';
interface StoredResult {
export interface StoredResult {
answers: string[];
savedAt: string;
profileId?: string;
recordId?: string;
}
function resultKey(questionnaireId: string) {
return `${RESULT_STORAGE_KEY}_${questionnaireId}`;
}
export function saveResult(questionnaireId: string, answers: string[]) {
export function saveResult(
questionnaireId: string,
answers: string[],
profileId?: string,
recordId?: string,
) {
try {
const result: StoredResult = {
answers,
savedAt: new Date().toISOString(),
profileId,
recordId,
};
sessionStorage.setItem(resultKey(questionnaireId), JSON.stringify(result));
return true;
@@ -23,7 +32,7 @@ export function saveResult(questionnaireId: string, answers: string[]) {
}
}
export function loadResult(questionnaireId: string): string[] | null {
export function loadResult(questionnaireId: string): StoredResult | null {
try {
const raw = sessionStorage.getItem(resultKey(questionnaireId));
if (!raw) {
@@ -31,7 +40,7 @@ export function loadResult(questionnaireId: string): string[] | null {
}
const parsed = JSON.parse(raw) as Partial<StoredResult>;
return Array.isArray(parsed.answers) ? parsed.answers : null;
return Array.isArray(parsed.answers) ? parsed as StoredResult : null;
} catch (error) {
console.error('Failed to load result:', error);
return null;