添加管理后台公告管理功能
## 新增功能 - 管理后台公告管理页面(/admin/announcements) - 公告 CRUD 操作(创建、编辑、删除) - 公告发布和归档功能 - 按状态和分类筛选 - 在侧边栏添加公告管理入口 ## 功能特性 - 支持设置优先级、置顶、重要标记 - 富文本编辑器(支持 Markdown/HTML) - 实时查看浏览次数 - 权限控制(announcement:view 和 announcement:manage) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
import { apiClient } from '@/shared/api/client'
|
||||
import type { ApiResponse } from '@/shared/types/types'
|
||||
import type { Announcement, PaginatedResult } from './announcements'
|
||||
|
||||
export interface CreateAnnouncementRequest {
|
||||
title: string
|
||||
content: string
|
||||
category: 'notice' | 'tutorial' | 'rule' | 'faq'
|
||||
priority?: number
|
||||
is_pinned?: boolean
|
||||
is_important?: boolean
|
||||
}
|
||||
|
||||
export interface UpdateAnnouncementRequest {
|
||||
title?: string
|
||||
content?: string
|
||||
category?: 'notice' | 'tutorial' | 'rule' | 'faq'
|
||||
priority?: number
|
||||
is_pinned?: boolean
|
||||
is_important?: boolean
|
||||
}
|
||||
|
||||
export async function fetchAdminAnnouncements(params: {
|
||||
status?: string
|
||||
category?: string
|
||||
page?: number
|
||||
page_size?: number
|
||||
}): Promise<PaginatedResult<Announcement>> {
|
||||
const { data } = await apiClient.get<ApiResponse<PaginatedResult<Announcement>>>('/admin/announcements', { params })
|
||||
return data.data
|
||||
}
|
||||
|
||||
export async function fetchAdminAnnouncementDetail(id: number): Promise<Announcement> {
|
||||
const { data } = await apiClient.get<ApiResponse<Announcement>>(`/admin/announcements/${id}`)
|
||||
return data.data
|
||||
}
|
||||
|
||||
export async function createAnnouncement(req: CreateAnnouncementRequest): Promise<Announcement> {
|
||||
const { data } = await apiClient.post<ApiResponse<Announcement>>('/admin/announcements', req)
|
||||
return data.data
|
||||
}
|
||||
|
||||
export async function updateAnnouncement(id: number, req: UpdateAnnouncementRequest): Promise<Announcement> {
|
||||
const { data } = await apiClient.put<ApiResponse<Announcement>>(`/admin/announcements/${id}`, req)
|
||||
return data.data
|
||||
}
|
||||
|
||||
export async function publishAnnouncement(id: number): Promise<void> {
|
||||
await apiClient.post(`/admin/announcements/${id}/publish`)
|
||||
}
|
||||
|
||||
export async function archiveAnnouncement(id: number): Promise<void> {
|
||||
await apiClient.post(`/admin/announcements/${id}/archive`)
|
||||
}
|
||||
|
||||
export async function deleteAnnouncement(id: number): Promise<void> {
|
||||
await apiClient.delete(`/admin/announcements/${id}`)
|
||||
}
|
||||
Reference in New Issue
Block a user