import { createPersistStore } from "@/store/createPersistStore"; import { CkChatState, CkUserInfo, CkTenant } from "./ckchat.data"; import { ContractData, GroupData, CkAccount, KfUserListData, } from "@/pages/pc/ckbox/data"; export const useCkChatStore = createPersistStore( set => ({ userInfo: null, isLoggedIn: false, contractList: [], //联系人列表 chatSessions: [], //聊天会话 kfUserList: [], //客服列表 kfSelected: 0, newContractList: [], //联系人分组 kfSelectedUser: () => { const state = useCkChatStore.getState(); return state.kfUserList.find(item => item.id === state.kfSelected); }, asyncKfSelected: (data: number) => { set({ kfSelected: data }); }, // 异步设置会话列表 asyncNewContractList: data => { set({ newContractList: data }); }, getNewContractList: () => { const state = useCkChatStore.getState(); return state.newContractList; }, // 异步设置会话列表 asyncChatSessions: data => { set({ chatSessions: data }); }, // 异步设置联系人列表 asyncContractList: data => { set({ contractList: data }); }, // 控制终端用户列表 getkfUserList: () => { const state = useCkChatStore.getState(); return state.kfUserList; }, asyncKfUserList: data => { set({ kfUserList: data }); }, // 删除控制终端用户 deleteCtrlUser: (userId: number) => { set(state => ({ kfUserList: state.kfUserList.filter(item => item.id !== userId), })); }, // 更新控制终端用户 updateCtrlUser: (user: KfUserListData) => { set(state => ({ kfUserList: state.kfUserList.map(item => item.id === user.id ? user : item, ), })); }, // 清空控制终端用户列表 clearkfUserList: () => { set({ kfUserList: [] }); }, // 获取聊天会话 getChatSessions: () => { const state = useCkChatStore.getState(); return state.chatSessions; }, // 添加聊天会话 addChatSession: (session: ContractData | GroupData) => { set(state => { // 检查是否已存在相同id的会话 const exists = state.chatSessions.some(item => item.id === session.id); // 如果已存在则不添加,否则添加到列表中 return { chatSessions: exists ? state.chatSessions : [...state.chatSessions, session as ContractData | GroupData], }; }); }, // 更新聊天会话 updateChatSession: (session: ContractData | GroupData) => { set(state => ({ chatSessions: state.chatSessions.map(item => item.id === session.id ? session : item, ), })); }, // 删除聊天会话 deleteChatSession: (sessionId: string) => { set(state => ({ chatSessions: state.chatSessions.filter(item => item.id !== sessionId), })); }, // 设置用户信息 setUserInfo: (userInfo: CkUserInfo) => { set({ userInfo, isLoggedIn: true }); }, // 清除用户信息 clearUserInfo: () => { set({ userInfo: null, isLoggedIn: false }); }, // 更新账户信息 updateAccount: (account: Partial) => { set(state => ({ userInfo: state.userInfo ? { ...state.userInfo, account: { ...state.userInfo.account, ...account }, } : null, })); }, // 更新租户信息 updateTenant: (tenant: Partial) => { set(state => ({ userInfo: state.userInfo ? { ...state.userInfo, tenant: { ...state.userInfo.tenant, ...tenant }, } : null, })); }, // 获取账户ID getAccountId: () => { const state = useCkChatStore.getState(); return Number(state.userInfo?.account?.id) || null; }, // 获取租户ID getTenantId: () => { const state = useCkChatStore.getState(); return state.userInfo?.tenant?.id || null; }, // 获取账户名称 getAccountName: () => { const state = useCkChatStore.getState(); return ( state.userInfo?.account?.realName || state.userInfo?.account?.userName || null ); }, // 获取租户名称 getTenantName: () => { const state = useCkChatStore.getState(); return state.userInfo?.tenant?.name || null; }, }), { name: "ckchat-store", partialize: state => ({ userInfo: state.userInfo, isLoggedIn: state.isLoggedIn, }), onRehydrateStorage: () => state => { // console.log("CkChat store hydrated:", state); }, }, ); // 导出便捷的获取方法 export const getCkAccountId = () => useCkChatStore.getState().getAccountId(); export const getCkTenantId = () => useCkChatStore.getState().getTenantId(); export const getCkAccountName = () => useCkChatStore.getState().getAccountName(); export const getCkTenantName = () => useCkChatStore.getState().getTenantName(); export const getChatSessions = () => useCkChatStore.getState().getChatSessions(); export const addChatSession = (session: ContractData | GroupData) => useCkChatStore.getState().addChatSession(session); export const updateChatSession = (session: ContractData | GroupData) => useCkChatStore.getState().updateChatSession(session); export const deleteChatSession = (sessionId: string) => useCkChatStore.getState().deleteChatSession(sessionId); export const getkfUserList = () => useCkChatStore.getState().kfUserList; export const addCtrlUser = (user: KfUserListData) => useCkChatStore.getState().addCtrlUser(user); export const deleteCtrlUser = (userId: number) => useCkChatStore.getState().deleteCtrlUser(userId); export const updateCtrlUser = (user: KfUserListData) => useCkChatStore.getState().updateCtrlUser(user); export const asyncKfUserList = (data: KfUserListData[]) => useCkChatStore.getState().asyncKfUserList(data); export const asyncContractList = (data: ContractData[]) => useCkChatStore.getState().asyncContractList(data); export const asyncChatSessions = (data: ContractData[]) => useCkChatStore.getState().asyncChatSessions(data); export const asyncNewContractList = ( data: { groupName: string; contacts: any[] }[], ) => useCkChatStore.getState().asyncNewContractList(data); export const asyncKfSelected = (data: number) => useCkChatStore.getState().asyncKfSelected(data);