Files
schoolNews/schoolNewsWeb/src/apis/resource/resource.ts
2026-01-12 14:46:53 +08:00

277 lines
8.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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