feat(admin): 新增后台公告管理与发布归档

This commit is contained in:
yml2213
2026-10-30 13:25:24 +08:00
parent 4239bec519
commit d46636c3d2
8 changed files with 661 additions and 4 deletions
+60
View File
@@ -1,6 +1,10 @@
import { adminClient } from '@/shared/api/adminClient'
import type { ApiResponse } from '@/shared/api/types'
import type {
AdminAnnouncement,
AdminAnnouncementPage,
AdminAnnouncementPayload,
AdminAnnouncementQuery,
AdminCaptcha,
AdminDispute,
AdminDisputePage,
@@ -345,3 +349,59 @@ export async function fetchFinanceDetails(
page_size: data.data.page_size ?? query.page_size ?? 20,
}
}
export async function fetchAdminAnnouncements(query: AdminAnnouncementQuery) {
const { data } = await adminClient.get<ApiResponse<Partial<AdminAnnouncementPage>>>(
'/admin/announcements',
{ params: compactParams(query) }
)
return {
items: data.data.items ?? [],
total: data.data.total ?? 0,
page: data.data.page ?? query.page ?? 1,
page_size: data.data.page_size ?? query.page_size ?? 20,
}
}
export async function createAdminAnnouncement(payload: AdminAnnouncementPayload) {
const { data } = await adminClient.post<ApiResponse<AdminAnnouncement>>(
'/admin/announcements',
payload
)
return data.data
}
export async function updateAdminAnnouncement(
id: number | string,
payload: AdminAnnouncementPayload
) {
const { data } = await adminClient.put<ApiResponse<AdminAnnouncement>>(
`/admin/announcements/${id}`,
{
title: payload.title,
content: payload.content,
category: payload.category,
priority: payload.priority,
is_pinned: payload.is_pinned,
is_important: payload.is_important,
is_popup: payload.is_popup,
}
)
return data.data
}
export async function publishAdminAnnouncement(id: number | string) {
await adminClient.post(`/admin/announcements/${id}/publish`)
}
export async function archiveAdminAnnouncement(id: number | string) {
await adminClient.post(`/admin/announcements/${id}/archive`)
}
export async function unarchiveAdminAnnouncement(id: number | string) {
await adminClient.post(`/admin/announcements/${id}/unarchive`)
}
export async function deleteAdminAnnouncement(id: number | string) {
await adminClient.delete(`/admin/announcements/${id}`)
}