Files
happy-life-star/PncyssD/state.js
T
2025-12-21 16:57:54 +08:00

79 lines
2.1 KiB
JavaScript

export const state = {
isLoggedIn: false,
phone: '',
view: 'login', // 'login' | 'onboarding' | 'dashboard'
currentStep: 1,
registrationData: {
nickname: '',
gender: '',
zodiac: '',
mbti: '',
profession: '',
hobbies: [],
childhood: { date: '', text: '' },
joy: { date: '', text: '' },
low: { date: '', text: '' },
future: { vision: '', ideal: '' }
},
lifeEvents: [],
scripts: [], // Array of { id, theme, style, length, content, date, character }
selectedScriptId: null,
selectedPath: null,
save() {
const dataToSave = {
isLoggedIn: this.isLoggedIn,
phone: this.phone,
registrationData: this.registrationData,
lifeEvents: this.lifeEvents,
scripts: this.scripts,
selectedScriptId: this.selectedScriptId,
selectedPath: this.selectedPath,
view: this.view
};
localStorage.setItem('life_trajectory_v3', JSON.stringify(dataToSave));
},
load() {
const saved = localStorage.getItem('life_trajectory_v3');
if (saved) {
try {
const parsed = JSON.parse(saved);
Object.assign(this, parsed);
} catch (e) {
console.error("Failed to load state:", e);
}
}
},
updateRegistration(data) {
this.registrationData = { ...this.registrationData, ...data };
this.save();
},
addLifeEvent(event) {
this.lifeEvents.push({ ...event, id: Date.now() });
this.save();
},
addScript(script) {
this.scripts.unshift({ ...script, id: Date.now(), date: new Date().toLocaleDateString() });
this.selectedScriptId = this.scripts[0].id;
this.save();
},
getSelectedScript() {
return this.scripts.find(s => s.id === this.selectedScriptId);
},
setPath(path) {
this.selectedPath = path;
this.save();
},
clear() {
localStorage.removeItem('life_trajectory_v3');
window.location.reload();
}
};