Files
hfb_sys/frontend/src/features/admin/api/adminAnnouncements.ts
T
ymlandClaude Opus 4.6 29d7648a2b 添加管理后台公告管理功能
## 新增功能
- 管理后台公告管理页面(/admin/announcements)
- 公告 CRUD 操作(创建、编辑、删除)
- 公告发布和归档功能
- 按状态和分类筛选
- 在侧边栏添加公告管理入口

## 功能特性
- 支持设置优先级、置顶、重要标记
- 富文本编辑器(支持 Markdown/HTML)
- 实时查看浏览次数
- 权限控制(announcement:view 和 announcement:manage)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-05 20:52:12 +08:00

59 lines
1.9 KiB
TypeScript

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}`)
}