108 lines
2.5 KiB
TypeScript
108 lines
2.5 KiB
TypeScript
import { http } from '@/utils/request'
|
|
import type {
|
|
NewsDto,
|
|
NewsCreateDto,
|
|
NewsUpdateDto,
|
|
NewsQueryDto,
|
|
PageResult,
|
|
NewsStatistics
|
|
} from '@/types/api'
|
|
|
|
/**
|
|
* 新闻 API
|
|
*/
|
|
export const newsApi = {
|
|
/**
|
|
* 获取新闻列表
|
|
* @param params 查询参数
|
|
* @returns 分页新闻列表
|
|
*/
|
|
getList(params?: NewsQueryDto): Promise<PageResult<NewsDto>> {
|
|
return http.get('/v1/news/list', { params })
|
|
},
|
|
|
|
/**
|
|
* 获取新闻详情
|
|
* @param id 新闻ID
|
|
* @returns 新闻详情
|
|
*/
|
|
getById(id: number): Promise<NewsDto> {
|
|
return http.get(`/v1/news/${id}`)
|
|
},
|
|
|
|
/**
|
|
* 创建新闻(管理员权限)
|
|
* @param data 创建新闻请求参数
|
|
* @returns 创建的新闻
|
|
*/
|
|
create(data: NewsCreateDto): Promise<NewsDto> {
|
|
return http.post('/v1/news', data)
|
|
},
|
|
|
|
/**
|
|
* 更新新闻(管理员权限)
|
|
* @param data 更新新闻请求参数
|
|
* @returns 更新后的新闻
|
|
*/
|
|
update(data: NewsUpdateDto): Promise<NewsDto> {
|
|
return http.put('/v1/news', data)
|
|
},
|
|
|
|
/**
|
|
* 删除新闻(管理员权限)
|
|
* @param id 新闻ID
|
|
*/
|
|
delete(id: number): Promise<void> {
|
|
return http.delete(`/v1/news/${id}`)
|
|
},
|
|
|
|
/**
|
|
* 批量删除新闻(管理员权限)
|
|
* @param ids 新闻ID数组
|
|
*/
|
|
batchDelete(ids: number[]): Promise<void> {
|
|
return http.delete('/v1/news/batch', { data: ids })
|
|
},
|
|
|
|
/**
|
|
* 搜索新闻
|
|
* @param keyword 搜索关键词
|
|
* @param page 页码
|
|
* @param size 每页大小
|
|
* @returns 分页搜索结果
|
|
*/
|
|
search(keyword: string, page = 1, size = 20): Promise<PageResult<NewsDto>> {
|
|
return http.get('/v1/news/search', { params: { keyword, page, size } })
|
|
},
|
|
|
|
/**
|
|
* 按分类获取新闻
|
|
* @param categoryId 分类ID
|
|
* @param page 页码
|
|
* @param size 每页大小
|
|
* @returns 分页新闻列表
|
|
*/
|
|
getByCategory(categoryId: number, page = 1, size = 20): Promise<PageResult<NewsDto>> {
|
|
return http.get(`/v1/news/category/${categoryId}`, { params: { page, size } })
|
|
},
|
|
|
|
/**
|
|
* 获取最新新闻
|
|
* @param page 页码
|
|
* @param size 每页大小
|
|
* @returns 分页新闻列表
|
|
*/
|
|
getLatest(params: { page?: number; size?: number } = {}): Promise<PageResult<NewsDto>> {
|
|
const { page = 1, size = 20 } = params
|
|
return http.get('/v1/news/latest', { params: { page, size } })
|
|
},
|
|
|
|
/**
|
|
* 获取新闻统计数据
|
|
* @returns 新闻统计数据
|
|
*/
|
|
getStatistics(): Promise<NewsStatistics> {
|
|
return http.get('/v1/news/statistics')
|
|
}
|
|
}
|