视图修改、接口修改

This commit is contained in:
2025-10-28 19:04:35 +08:00
parent 98c73632bd
commit c5c134fbb3
96 changed files with 7122 additions and 4194 deletions

View File

@@ -1,41 +0,0 @@
/**
* @description 轮播图相关API
* @author yslg
* @since 2025-10-15
*/
import { api } from '@/apis/index';
import type { Banner, Resource, ResultDomain } from '@/types';
/**
* 轮播图API服务
*/
export const bannerApi = {
/**
* 获取轮播组件数据
* @returns Promise<ResultDomain<Banner>>
*/
async getBannerList(): Promise<ResultDomain<Banner>> {
const response = await api.get<Banner>('/homepage/banner/list');
return response.data;
},
/**
* 点击轮播跳转新闻详情
* @param bannerID Banner ID
* @returns Promise<ResultDomain<Resource>>
*/
async getBannerNewsDetail(bannerID: string): Promise<ResultDomain<Resource>> {
const response = await api.get<Resource>(`/homepage/banner/click/${bannerID}`);
return response.data;
},
/**
* 获取活跃轮播列表
* @returns Promise<ResultDomain<Banner>>
*/
async getActiveBanners(): Promise<ResultDomain<Banner>> {
const response = await api.get<Banner>('/homepage/banner/active');
return response.data;
}
};

View File

@@ -5,7 +5,6 @@
*/
// 重新导出各个子模块
export { bannerApi } from './banner';
export { recommendApi } from './recommend';
export { newsApi } from './news';
export { menuApi } from './menu';

View File

@@ -0,0 +1,124 @@
/**
* @description Banner 管理 API 接口
* @filename banner-manage.ts
* @author yslg
* @copyright xyzh
* @since 2025-10-28
*/
import { api } from '@/apis';
import type { ResultDomain, Banner, PageParam } from '@/types';
/**
* Banner 管理 API 服务
*/
export const bannerApi = {
/**
* 获取横幅列表
* @param filter 筛选条件
* @returns Promise<ResultDomain<Banner>>
*/
async getBannerList(filter?: Partial<Banner>): Promise<ResultDomain<Banner>> {
const response = await api.get<Banner>('/news/banners/list', filter);
return response.data;
},
/**
* 获取横幅分页列表
* @param pageParam 分页参数
* @param filter 筛选条件
* @returns Promise<ResultDomain<Banner>>
*/
async getBannerPage(pageParam: PageParam, filter?: Partial<Banner>): Promise<ResultDomain<Banner>> {
const response = await api.post<Banner>('/news/banners/banner/page', {
pageParam,
filter,
});
return response.data;
},
/**
* 创建横幅
* @param banner 横幅信息
* @returns Promise<ResultDomain<Banner>>
*/
async createBanner(banner: Banner): Promise<ResultDomain<Banner>> {
const response = await api.post<Banner>('/news/banners/banner', banner);
return response.data;
},
/**
* 更新横幅
* @param banner 横幅信息
* @returns Promise<ResultDomain<Banner>>
*/
async updateBanner(banner: Banner): Promise<ResultDomain<Banner>> {
const response = await api.put<Banner>('/news/banners/banner', banner);
return response.data;
},
/**
* 删除横幅
* @param banner 横幅信息(包含 bannerID
* @returns Promise<ResultDomain<boolean>>
*/
async deleteBanner(banner: Banner): Promise<ResultDomain<boolean>> {
const response = await api.delete<boolean>('/news/banners/banner', {
data: banner
});
return response.data;
},
/**
* 根据 ID 删除横幅
* @param bannerID 横幅ID
* @returns Promise<ResultDomain<boolean>>
*/
async deleteBannerById(bannerID: string): Promise<ResultDomain<boolean>> {
return this.deleteBanner({ id: bannerID });
},
/**
* 更新横幅状态
* @param bannerID 横幅ID
* @param status 状态值0禁用 1启用
* @returns Promise<ResultDomain<Banner>>
*/
async updateBannerStatus(bannerID: string, status: number): Promise<ResultDomain<Banner>> {
const response = await api.put<Banner>('/news/banners/banner/status', {
id: bannerID,
status,
});
return response.data;
},
/**
* 启用横幅
* @param bannerID 横幅ID
* @returns Promise<ResultDomain<Banner>>
*/
async enableBanner(bannerID: string): Promise<ResultDomain<Banner>> {
return this.updateBannerStatus(bannerID, 1);
},
/**
* 禁用横幅
* @param bannerID 横幅ID
* @returns Promise<ResultDomain<Banner>>
*/
async disableBanner(bannerID: string): Promise<ResultDomain<Banner>> {
return this.updateBannerStatus(bannerID, 0);
},
/**
* 获取首页横幅列表
* @returns Promise<ResultDomain<Banner>>
*/
async getHomeBannerList(): Promise<ResultDomain<Banner>> {
const response = await api.get<Banner>('/news/banners/home');
return response.data;
},
};
export default bannerApi;

View File

@@ -4,6 +4,6 @@
* @since 2025-10-15
*/
export * from './resourceCategory';
export * from './resourceTag';
export * from './resource';
export * from './resource';
export { bannerApi} from './banner';

View File

@@ -1,117 +0,0 @@
/**
* @description 资源分类API接口
* @filename resourceCategory.ts
* @author yslg
* @copyright xyzh
* @since 2025-10-15
*
* ⚠️ 注意此API已废弃
*
* 从2025-10-27起资源分类功能已迁移到标签系统Tag中。
*
* 迁移说明:
* - 原 tb_resource_category 表已废弃
* - 改为使用 tb_tag 表的 tag_type=1 表示文章分类标签
* - 请使用 resourceTagApi.getTagsByType(1) 替代本 API 的方法
*
* API 迁移对照:
* - getCategoryList() → resourceTagApi.getTagsByType(1)
* - getCategoryById(id) → resourceTagApi.getTagById(id)
* - createCategory(category) → resourceTagApi.createTag({...category, tagType: 1})
* - updateCategory(category) → resourceTagApi.updateTag(category)
* - deleteCategory(id) → resourceTagApi.deleteTag(id)
*
* @deprecated 请使用 resourceTagApi 代替
*/
import { api } from '@/apis';
import type { ResultDomain, ResourceCategory } from '@/types';
/**
* 资源分类API服务
* @deprecated 已废弃,请使用 resourceTagApi.getTagsByType(1) 获取文章分类标签
*/
export const resourceCategoryApi = {
/**
* 获取分类列表
* @returns Promise<ResultDomain<ResourceCategory>>
*/
async getCategoryList(): Promise<ResultDomain<ResourceCategory>> {
const response = await api.get<ResourceCategory>('/news/categorys/list');
return response.data;
},
/**
* 根据ID获取分类详情
* @param tagID 分类ID
* @returns Promise<ResultDomain<ResourceCategory>>
*/
async getCategoryById(tagID: string): Promise<ResultDomain<ResourceCategory>> {
const response = await api.get<ResourceCategory>(`/news/categorys/category/${tagID}`);
return response.data;
},
/**
* 创建分类
* @param category 分类信息
* @returns Promise<ResultDomain<ResourceCategory>>
*/
async createCategory(category: ResourceCategory): Promise<ResultDomain<ResourceCategory>> {
const response = await api.post<ResourceCategory>('/news/categorys/category', category);
return response.data;
},
/**
* 更新分类
* @param category 分类信息
* @returns Promise<ResultDomain<ResourceCategory>>
*/
async updateCategory(category: ResourceCategory): Promise<ResultDomain<ResourceCategory>> {
const response = await api.put<ResourceCategory>('/news/categorys/category', category);
return response.data;
},
/**
* 删除分类
* @param tagID 分类ID
* @returns Promise<ResultDomain<boolean>>
*/
async deleteCategory(tagID: string): Promise<ResultDomain<boolean>> {
const response = await api.delete<boolean>(`/news/categorys/category/${tagID}`);
return response.data;
},
/**
* 更新分类状态
* @param tagID 分类ID
* @param status 状态值
* @returns Promise<ResultDomain<ResourceCategory>>
*/
async updateCategoryStatus(tagID: string, status: number): Promise<ResultDomain<ResourceCategory>> {
const response = await api.put<ResourceCategory>(`/news/categorys/category/${tagID}/status`, null, {
params: { status }
});
return response.data;
},
/**
* 获取分类树
* @returns Promise<ResultDomain<ResourceCategory>>
*/
async getCategoryTree(): Promise<ResultDomain<ResourceCategory>> {
const response = await api.get<ResourceCategory>('/news/categorys/tree');
return response.data;
},
/**
* 获取子分类
* @param parentID 父分类ID
* @returns Promise<ResultDomain<ResourceCategory>>
*/
async getChildCategories(parentID: string): Promise<ResultDomain<ResourceCategory>> {
const response = await api.get<ResourceCategory>(`/news/categorys/category/${parentID}/children`);
return response.data;
}
};
export default resourceCategoryApi;

View File

@@ -5,7 +5,7 @@
*/
import { api } from '@/apis/index';
import type { Course, CourseChapter, ResultDomain,CourseVO,PageRequest, PageParam, CourseNode } from '@/types';
import type { Course, CourseChapter, ResultDomain, CourseItemVO, PageParam, CourseNode } from '@/types';
/**
* 课程API服务
@@ -38,30 +38,40 @@ export const courseApi = {
/**
* 根据ID获取课程详情
* @param courseID 课程ID
* @returns Promise<ResultDomain<Course>>
* @returns Promise<ResultDomain<CourseItemVO>>
*/
async getCourseById(courseID: string): Promise<ResultDomain<CourseVO>> {
const response = await api.get<CourseVO>(`${this.prefixCourse}/${courseID}`);
async getCourseById(courseID: string): Promise<ResultDomain<CourseItemVO>> {
const response = await api.get<CourseItemVO>(`${this.prefixCourse}/${courseID}`);
return response.data;
},
/**
* 获取课程学习进度
* @param courseID 课程ID
* @returns Promise<ResultDomain<CourseItemVO>>
*/
async getCourseProgress(courseID: string): Promise<ResultDomain<CourseItemVO>> {
const response = await api.get<CourseItemVO>(`${this.prefixCourse}/${courseID}/progress`);
return response.data;
},
/**
* 创建课程
* @param course 课程数据
* @returns Promise<ResultDomain<Course>>
* @param courseItemVO 课程数据
* @returns Promise<ResultDomain<CourseItemVO>>
*/
async createCourse(course: CourseVO): Promise<ResultDomain<CourseVO>> {
const response = await api.post<CourseVO>(`${this.prefixCourse}/course`, course);
async createCourse(courseItemVO: CourseItemVO): Promise<ResultDomain<CourseItemVO>> {
const response = await api.post<CourseItemVO>(`${this.prefixCourse}/course`, courseItemVO);
return response.data;
},
/**
* 更新课程
* @param course 课程数据
* @returns Promise<ResultDomain<Course>>
* @param courseItemVO 课程数据
* @returns Promise<ResultDomain<CourseItemVO>>
*/
async updateCourse(courseVO: CourseVO): Promise<ResultDomain<CourseVO>> {
const response = await api.put<CourseVO>(`${this.prefixCourse}/course`, courseVO);
async updateCourse(courseItemVO: CourseItemVO): Promise<ResultDomain<CourseItemVO>> {
const response = await api.put<CourseItemVO>(`${this.prefixCourse}/course`, courseItemVO);
return response.data;
},

View File

@@ -78,7 +78,7 @@ export const learningTaskApi = {
* @returns Promise<ResultDomain<boolean>>
*/
async deleteTask(taskID: string): Promise<ResultDomain<boolean>> {
const response = await api.delete<boolean>(`${this.learningTaskPrefix}/task/${taskID}`);
const response = await api.delete<boolean>(`${this.learningTaskPrefix}/task`, {taskID});
return response.data;
},