Files
nl-um-vue-ts/src/utils/storage.ts
2025-12-08 14:56:02 +08:00

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 状态,让用户刷新后保持界面状态
},
}