修复红点问题

This commit is contained in:
张成
2025-11-21 13:25:32 +08:00
parent 623692d9f3
commit 27264011a1
4 changed files with 104 additions and 62 deletions

75
src/store/messageStore.ts Normal file
View File

@@ -0,0 +1,75 @@
import { create } from "zustand";
import messageService, { ReddotInfo } from "@/services/messageService";
interface MessageState {
// 红点信息
reddotInfo: ReddotInfo | null;
// 是否正在加载
loading: boolean;
}
interface MessageActions {
// 获取红点信息
fetchReddotInfo: () => Promise<void>;
// 重置红点信息
resetReddotInfo: () => void;
// 更新红点信息的某个字段
updateReddotInfo: (info: Partial<ReddotInfo>) => void;
}
// 完整的 Store 类型
type MessageStore = MessageState & MessageActions;
// 创建 store
export const useMessageStore = create<MessageStore>()((set, get) => ({
// 初始状态
reddotInfo: null,
loading: false,
// 获取红点信息
fetchReddotInfo: async () => {
const { loading } = get();
// 防止重复请求
if (loading) return;
set({ loading: true });
try {
const res = await messageService.getReddotInfo();
if (res.code === 0) {
set({
reddotInfo: res.data,
loading: false
});
} else {
set({ loading: false });
}
} catch (e) {
console.error("获取红点信息失败:", e);
set({ loading: false });
}
},
// 重置红点信息
resetReddotInfo: () => {
set({
reddotInfo: null
});
},
// 更新红点信息的某个字段
updateReddotInfo: (info: Partial<ReddotInfo>) => {
const { reddotInfo } = get();
if (reddotInfo) {
set({
reddotInfo: { ...reddotInfo, ...info }
});
}
},
}));
// 导出便捷的 hooks
export const useMessageState = () => useMessageStore((state) => state);
export const useReddotInfo = () => useMessageStore((state) => state.reddotInfo);
export const useFetchReddotInfo = () => useMessageStore((state) => state.fetchReddotInfo);