/** * 本地存储工具函数 */ const TOKEN_KEY = 'token' const USER_ID_KEY = 'user_id' const USER_INFO_KEY = 'user_info' const REMEMBER_KEY = 'remember' const CURRENT_TAB_KEY = 'current_tab' const CONTACT_LEFT_PANEL_MODE_KEY = 'contact_left_panel_mode' const CONTACT_LIST_TAB_KEY = 'contact_list_tab' const SELECTED_CONVERSATION_KEY = 'selected_conversation' const SELECTED_ROOM_ID_KEY = 'selected_room_id' export const storage = { // Token setToken(token: string) { localStorage.setItem(TOKEN_KEY, token) }, getToken(): string | null { return localStorage.getItem(TOKEN_KEY) }, removeToken() { localStorage.removeItem(TOKEN_KEY) }, // User ID setUserId(userId: string) { localStorage.setItem(USER_ID_KEY, userId) }, getUserId(): string | null { return localStorage.getItem(USER_ID_KEY) }, removeUserId() { localStorage.removeItem(USER_ID_KEY) }, // User Info setUserInfo(userInfo: any) { localStorage.setItem(USER_INFO_KEY, JSON.stringify(userInfo)) }, getUserInfo(): any | null { const info = localStorage.getItem(USER_INFO_KEY) return info ? JSON.parse(info) : null }, removeUserInfo() { localStorage.removeItem(USER_INFO_KEY) }, // Remember setRemember(remember: boolean) { localStorage.setItem(REMEMBER_KEY, String(remember)) }, getRemember(): boolean { return localStorage.getItem(REMEMBER_KEY) === 'true' }, // Current Tab (chat/contact/moment) setCurrentTab(tab: 'chat' | 'contact' | 'moment') { localStorage.setItem(CURRENT_TAB_KEY, tab) // 触发自定义事件通知 UI 更新 window.dispatchEvent(new CustomEvent('app-tab-change', { detail: { tab } })) }, getCurrentTab(): 'chat' | 'contact' | 'moment' { const tab = localStorage.getItem(CURRENT_TAB_KEY) return (tab === 'chat' || tab === 'contact' || tab === 'moment') ? tab : 'chat' }, // Contact Left Panel Mode setContactLeftPanelMode(mode: string) { localStorage.setItem(CONTACT_LEFT_PANEL_MODE_KEY, mode) }, getContactLeftPanelMode(): string { return localStorage.getItem(CONTACT_LEFT_PANEL_MODE_KEY) || 'default' }, // Contact List Tab setContactListTab(tab: 'friends' | 'groups') { localStorage.setItem(CONTACT_LIST_TAB_KEY, tab) }, getContactListTab(): 'friends' | 'groups' { const tab = localStorage.getItem(CONTACT_LIST_TAB_KEY) return (tab === 'friends' || tab === 'groups') ? tab : 'friends' }, // Selected Conversation setSelectedConversation(targetId: string | null) { if (targetId) { localStorage.setItem(SELECTED_CONVERSATION_KEY, targetId) } else { localStorage.removeItem(SELECTED_CONVERSATION_KEY) } }, getSelectedConversation(): string | null { return localStorage.getItem(SELECTED_CONVERSATION_KEY) }, // Selected Room ID setSelectedRoomId(roomId: string | null) { if (roomId) { localStorage.setItem(SELECTED_ROOM_ID_KEY, roomId) } else { localStorage.removeItem(SELECTED_ROOM_ID_KEY) } }, getSelectedRoomId(): string | null { return localStorage.getItem(SELECTED_ROOM_ID_KEY) }, // Clear all clear() { this.removeToken() this.removeUserId() this.removeUserInfo() this.setRemember(false) // 不清除 UI 状态,让用户刷新后保持界面状态 }, }