feat(admin): add announcement preview action

This commit is contained in:
weiness
2026-07-24 15:44:34 +08:00
parent 7b387e479d
commit 972a4a471e
5 changed files with 123 additions and 10 deletions
+20 -1
View File
@@ -114,12 +114,19 @@
<template #cell-actions="{ row }">
<div class="flex items-center space-x-1">
<button
@click="openPreview(row)"
class="flex flex-col items-center gap-0.5 rounded-lg p-1.5 text-gray-500 transition-colors hover:bg-blue-50 hover:text-blue-600 dark:hover:bg-blue-900/20 dark:hover:text-blue-400"
:title="t('admin.announcements.preview')"
>
<Icon name="eye" size="sm" />
</button>
<button
@click="openReadStatus(row)"
class="flex flex-col items-center gap-0.5 rounded-lg p-1.5 text-gray-500 transition-colors hover:bg-blue-50 hover:text-blue-600 dark:hover:bg-blue-900/20 dark:hover:text-blue-400"
:title="t('admin.announcements.readStatus')"
>
<Icon name="eye" size="sm" />
<Icon name="chartBar" size="sm" />
</button>
<button
@click="openEditDialog(row)"
@@ -240,6 +247,12 @@
:announcement-id="readStatusAnnouncementId"
@close="showReadStatusDialog = false"
/>
<AnnouncementPopup
:announcement="previewAnnouncement"
preview
@close="previewAnnouncement = null"
/>
</AppLayout>
</template>
@@ -265,6 +278,7 @@ import Icon from '@/components/icons/Icon.vue'
import AnnouncementTargetingEditor from '@/components/admin/announcements/AnnouncementTargetingEditor.vue'
import AnnouncementReadStatusDialog from '@/components/admin/announcements/AnnouncementReadStatusDialog.vue'
import AnnouncementPopup from '@/components/common/AnnouncementPopup.vue'
const { t } = useI18n()
const appStore = useAppStore()
@@ -588,6 +602,11 @@ async function confirmDelete() {
// ===== Read status =====
const showReadStatusDialog = ref(false)
const readStatusAnnouncementId = ref<number | null>(null)
const previewAnnouncement = ref<Announcement | null>(null)
function openPreview(row: Announcement) {
previewAnnouncement.value = row
}
function openReadStatus(row: Announcement) {
readStatusAnnouncementId.value = row.id