/** * @description 资源API接口 * @filename resource.ts * @author yslg * @copyright xyzh * @since 2025-10-15 */ import { api } from '@/apis'; import type { ResultDomain, Resource, PageParam, ResourceVO, UserCollection, TaskItemVO } from '@/types'; /** * 资源API服务 */ export const resourceApi = { // ==================== 资源基础操作 ==================== /** * 获取资源列表 * @param filter 筛选条件 * @returns Promise> */ async getResourceList(filter?: Resource): Promise> { const response = await api.get('/news/resources/list', filter); return response.data; }, /** * 获取资源分页列表 * @param filter 筛选条件 * @param pageParam 分页参数 * @returns Promise> */ async getResourcePage(pageParam: PageParam, filter?: Resource): Promise> { const response = await api.post('/news/resources/page', { pageParam, filter, }); return response.data; }, /** * 获取资源分页列表(按浏览次数排序,包含推荐信息) * @param filter 筛选条件 * @param pageParam 分页参数 * @returns Promise> */ async getResourcePageOrderByViewCount(pageParam: PageParam, filter?: Resource): Promise> { const response = await api.post('/news/resources/page/view-count', { pageParam, filter, }); return response.data; }, /** * 根据ID获取资源详情 * @param resourceID 资源ID * @returns Promise> */ async getResourceById(resourceID: string): Promise> { const response = await api.get(`/news/resources/resource/${resourceID}`); return response.data; }, /** * 创建资源 * @param resource 资源信息 * @returns Promise> */ async createResource(resource: ResourceVO): Promise> { const response = await api.post('/news/resources/resource', resource); return response.data; }, /** * 更新资源 * @param resource 资源信息 * @returns Promise> */ async updateResource(resource: ResourceVO): Promise> { const response = await api.put('/news/resources/resource', resource); return response.data; }, /** * 删除资源 * @param resourceID 资源ID * @returns Promise> */ async deleteResource(resourceID: string): Promise> { const response = await api.delete(`/news/resources/resource/${resourceID}`); return response.data; }, // ==================== 资源状态操作 ==================== /** * 更新资源状态 * @param resourceID 资源ID * @param status 状态值(0草稿 1已发布 2下架) * @returns Promise> */ async updateResourceStatus(resourceID: string, status: number): Promise> { const response = await api.put(`/news/resources/resource/${resourceID}/status`, null, { params: { status } }); return response.data; }, /** * 发布资源 * @param resourceID 资源ID * @returns Promise> */ async publishResource(resourceID: string): Promise> { const response = await api.post(`/news/resources/resource/${resourceID}/publish`); return response.data; }, /** * 下架资源 * @param resourceID 资源ID * @returns Promise> */ async unpublishResource(resourceID: string): Promise> { const response = await api.post(`/news/resources/resource/${resourceID}/unpublish`); return response.data; }, // ==================== 资源统计操作 ==================== /** * 增加浏览次数 * @param resourceID 资源ID * @returns Promise> */ async incrementViewCount(resourceID: string): Promise> { const response = await api.post(`/news/resources/resource/${resourceID}/view`); return response.data; }, /** * 增加点赞次数 * @param resourceID 资源ID * @returns Promise> */ async incrementLikeCount(resourceID: string): Promise> { const response = await api.post(`/news/resources/resource/${resourceID}/like`); return response.data; }, // ==================== 资源推荐和轮播操作 ==================== /** * 设置资源推荐 * @param resourceID 资源ID * @param isRecommend 是否推荐 * @returns Promise> */ async setResourceRecommend(resourceID: string, isRecommend: boolean): Promise> { const response = await api.put(`/news/resources/resource/${resourceID}/recommend`, null, { params: { isRecommend } }); return response.data; }, /** * 设置资源轮播 * @param resourceID 资源ID * @param isBanner 是否轮播 * @returns Promise> */ async setResourceBanner(resourceID: string, isBanner: boolean): Promise> { const response = await api.put(`/news/resources/resource/${resourceID}/banner`, null, { params: { isBanner } }); return response.data; }, // ==================== 资源查询操作 ==================== /** * 获取推荐资源列表 * @param limit 限制数量 * @returns Promise> */ async getRecommendResources(limit?: number): Promise> { const response = await api.get('/news/resources/recommend', { limit }); return response.data; }, /** * 获取轮播资源列表 * @param limit 限制数量 * @returns Promise> */ async getBannerResources(limit?: number): Promise> { const response = await api.get('/news/resources/banner', { limit }); return response.data; }, /** * 搜索资源 * @param keyword 搜索关键词 * @param tagID 分类ID(可选) * @param status 状态(可选) * @returns Promise> */ async searchResources( keyword: string, tagID?: string, status?: number ): Promise> { const params: any = { keyword }; if (tagID) params.tagID = tagID; if (status !== undefined) params.status = status; const response = await api.get('/news/resources/search', params); return response.data; }, /** * 联合搜索文章和课程 * @param request 搜索请求参数(包含pageParam和filter) * @returns Promise> */ async searchItems(request: { pageParam: PageParam; filter: Resource }): Promise> { const response = await api.post('/news/resources/search', request); return response.data; }, // ==================== 知识库操作 ==================== /** * 将文章导入知识库 * @param resourceID 资源ID * @returns Promise> */ async importToKnowledge(resourceID: string): Promise> { const response = await api.post(`/news/article-knowledge/import/${resourceID}`); return response.data; }, /** * 批量将文章导入知识库 * @param resourceIds 资源ID列表 * @returns Promise> */ async batchImportToKnowledge(resourceIds: string[]): Promise> { const response = await api.post('/news/article-knowledge/import/batch', { resourceIds }); return response.data; }, /** * 从知识库移除文章 * @param resourceID 资源ID * @returns Promise> */ async removeFromKnowledge(resourceID: string): Promise> { const response = await api.delete(`/news/article-knowledge/remove/${resourceID}`); return response.data; } }; export default resourceApi;