132 lines
3.3 KiB
TypeScript
132 lines
3.3 KiB
TypeScript
/**
|
|
* 本地存储工具函数
|
|
*/
|
|
|
|
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 状态,让用户刷新后保持界面状态
|
|
},
|
|
}
|
|
|