fix: 系统公告与尊享额度明细

This commit is contained in:
Gsh
2025-11-12 23:08:52 +08:00
parent eecdf442fb
commit d21f61646a
15 changed files with 2739 additions and 1628 deletions

View File

@@ -1,80 +1,65 @@
import { defineStore } from 'pinia'
import type { Activity, Announcement, CarouselItem } from '@/api'
import type { AnnouncementLogDto } from '@/api';
import { defineStore } from 'pinia';
export type CloseType = 'today' | 'week' | 'permanent'
export type CloseType = 'today' | 'permanent';
export const useAnnouncementStore = defineStore(
'announcement',
() => {
// 弹窗显示状态
const isDialogVisible = ref(false)
const isDialogVisible = ref(false);
// 公告数据
const carousels = ref<CarouselItem[]>([])
const activities = ref<Activity[]>([])
const announcements = ref<Announcement[]>([])
// 公告数据(统一存储所有公告)
const announcements = ref<AnnouncementLogDto[]>([]);
// 关闭记录
const closeType = ref<CloseType | null>(null)
const closedAt = ref<number | null>(null)
const closeType = ref<CloseType | null>(null);
const closedAt = ref<number | null>(null);
// 打开弹窗
const openDialog = () => {
isDialogVisible.value = true
}
isDialogVisible.value = true;
};
// 关闭弹窗
const closeDialog = (type: CloseType) => {
isDialogVisible.value = false
closeType.value = type
closedAt.value = Date.now()
}
isDialogVisible.value = false;
closeType.value = type;
closedAt.value = Date.now();
};
// 检查是否应该显示弹窗
const shouldShowDialog = computed(() => {
if (!closedAt.value || !closeType.value)
return true
return true;
const now = Date.now()
const elapsed = now - closedAt.value
const now = Date.now();
const elapsed = now - closedAt.value;
if (closeType.value === 'permanent')
return false
return false;
if (closeType.value === 'today') {
// 检查是否已过去一天24小时
return elapsed > 24 * 60 * 60 * 1000
return elapsed > 24 * 60 * 60 * 1000;
}
if (closeType.value === 'week') {
// 检查是否已过去一周7天
return elapsed > 7 * 24 * 60 * 60 * 1000
}
return true
})
return true;
});
// 设置公告数据
const setAnnouncementData = (data: {
carousels: CarouselItem[]
activities: Activity[]
announcements: Announcement[]
}) => {
carousels.value = data.carousels
activities.value = data.activities
announcements.value = data.announcements
}
const setAnnouncementData = (data: AnnouncementLogDto[]) => {
announcements.value = data;
};
// 重置关闭状态(用于测试或管理员重置)
const resetCloseStatus = () => {
closeType.value = null
closedAt.value = null
}
closeType.value = null;
closedAt.value = null;
};
return {
isDialogVisible,
carousels,
activities,
announcements,
closeType,
closedAt,
@@ -83,7 +68,7 @@ export const useAnnouncementStore = defineStore(
closeDialog,
setAnnouncementData,
resetCloseStatus,
}
};
},
{
persist: {
@@ -91,4 +76,4 @@ export const useAnnouncementStore = defineStore(
paths: ['closeType', 'closedAt'],
},
},
)
);