Files
Yi.Admin/Yi.Ai.Vue3/src/stores/modules/announcement.ts

80 lines
1.9 KiB
TypeScript
Raw Normal View History

2025-11-12 23:08:52 +08:00
import type { AnnouncementLogDto } from '@/api';
import { defineStore } from 'pinia';
2025-11-05 23:12:23 +08:00
2025-11-12 23:08:52 +08:00
export type CloseType = 'today' | 'permanent';
2025-11-05 23:12:23 +08:00
export const useAnnouncementStore = defineStore(
'announcement',
() => {
// 弹窗显示状态
2025-11-12 23:08:52 +08:00
const isDialogVisible = ref(false);
2025-11-05 23:12:23 +08:00
2025-11-12 23:08:52 +08:00
// 公告数据(统一存储所有公告)
const announcements = ref<AnnouncementLogDto[]>([]);
2025-11-05 23:12:23 +08:00
// 关闭记录
2025-11-12 23:08:52 +08:00
const closeType = ref<CloseType | null>(null);
const closedAt = ref<number | null>(null);
2025-11-05 23:12:23 +08:00
// 打开弹窗
const openDialog = () => {
2025-11-12 23:08:52 +08:00
isDialogVisible.value = true;
};
2025-11-05 23:12:23 +08:00
// 关闭弹窗
const closeDialog = (type: CloseType) => {
2025-11-12 23:08:52 +08:00
isDialogVisible.value = false;
closeType.value = type;
closedAt.value = Date.now();
};
2025-11-05 23:12:23 +08:00
// 检查是否应该显示弹窗
const shouldShowDialog = computed(() => {
if (!closedAt.value || !closeType.value)
2025-11-12 23:08:52 +08:00
return true;
2025-11-05 23:12:23 +08:00
2025-11-12 23:08:52 +08:00
const now = Date.now();
const elapsed = now - closedAt.value;
2025-11-05 23:12:23 +08:00
if (closeType.value === 'permanent')
2025-11-16 22:39:42 +08:00
return true;
2025-11-05 23:12:23 +08:00
if (closeType.value === 'today') {
2025-11-16 22:39:42 +08:00
// 检查是否已过去一周7天
return elapsed > 7 * 24 * 60 * 60 * 1000;
2025-11-05 23:12:23 +08:00
}
2025-11-12 23:08:52 +08:00
return true;
});
2025-11-05 23:12:23 +08:00
// 设置公告数据
2025-11-12 23:08:52 +08:00
const setAnnouncementData = (data: AnnouncementLogDto[]) => {
announcements.value = data;
};
2025-11-05 23:12:23 +08:00
// 重置关闭状态(用于测试或管理员重置)
const resetCloseStatus = () => {
2025-11-12 23:08:52 +08:00
closeType.value = null;
closedAt.value = null;
};
2025-11-05 23:12:23 +08:00
return {
isDialogVisible,
announcements,
closeType,
closedAt,
shouldShowDialog,
openDialog,
closeDialog,
setAnnouncementData,
resetCloseStatus,
2025-11-12 23:08:52 +08:00
};
2025-11-05 23:12:23 +08:00
},
{
persist: {
2025-11-16 22:39:42 +08:00
// 只持久化关闭状态相关的数据,公告数据不缓存
2025-11-05 23:12:23 +08:00
paths: ['closeType', 'closedAt'],
},
},
2025-11-12 23:08:52 +08:00
);