import http from "@/http/HttpClient"; import { useUser } from "@/stores/useUser"; import type { PagedData } from "@/types/api/common"; import type { CreateLessonTaskRequest, LessonTask, UpdateLessonTaskRequest } from "@/types/api/lesson"; import type { LoginRequest } from "@/types/api/auth"; import type { CreateUserRequest, User } from "@/types/api/user"; /** * 业务API类 */ export default class BussApi { /** * 用户登录 * @param params - 登录请求参数 * @param params.email - 用户邮箱 * @param params.password - 用户密码 * @param params.remember - 是否记住登录状态 * @returns Promise<{token: string}> 返回包含token的对象 */ static login(params: LoginRequest): Promise<{ token: string }> { return http .server() .post("users/login", params) .then((res) => res.data.data); } /** * 获取当前用户信息 * @param token - 用户认证token * @returns Promise 返回用户信息 */ static profile(token: string): Promise { return http .server() .get("users/current", { headers: { Authorization: `Bearer ${token}`, }, }) .then((res) => res.data.data); } /** * 用户登出 * @returns Promise 返回登出结果 */ static logout(): Promise { const user = useUser(); return http .server() .post("users/logout", null, { headers: { Authorization: `Bearer ${user.token}`, }, }) .then((res) => res.data.data); } /** * 获取课程任务列表 * @param page - 页码,默认为1 * @param size - 每页数量,默认为10 * @param userId - 可选的用户ID,用于筛选特定用户的课程任务 * @returns Promise<{ code: number; message: string; data: { content: LessonTask[]; pageable: { pageNumber: number; pageSize: number; sort: { empty: boolean; unsorted: boolean; sorted: boolean; }; offset: number; paged: boolean; unpaged: boolean; }; totalElements: number; totalPages: number; last: boolean; first: boolean; empty: boolean; number: number; size: number; numberOfElements: number; }; }> 返回分页的课程任务数据 */ static getLessonTasks( page: number = 1, size: number = 20, userId?: number ): Promise<{ code: number; message: string; data: { content: LessonTask[]; pageable: { pageNumber: number; pageSize: number; sort: { empty: boolean; unsorted: boolean; sorted: boolean; }; offset: number; paged: boolean; unpaged: boolean; }; totalElements: number; totalPages: number; last: boolean; first: boolean; empty: boolean; number: number; size: number; numberOfElements: number; }; }> { const user = useUser(); const params: any = { page, size, }; if (userId) { params.userId = userId; } return http .server() .get("lesson-tasks", { params, headers: { Authorization: `Bearer ${user.token}`, }, }) .then((res) => res.data); } /** * 获取单个课程任务详情 * @param id - 课程任务ID * @returns Promise 返回课程任务详情 */ static getLessonTask(id: number): Promise { const user = useUser(); return http .server() .get(`lesson-tasks/${id}`, { headers: { Authorization: `Bearer ${user.token}`, }, }) .then((res) => res.data.data); } /** * 获取课程详情 * @param lessonId - 课程ID * @returns Promise 返回课程详情 */ static getLessonDetail(lessonId: number): Promise { const user = useUser(); return http .server() .get(`lesson/${lessonId}`, { headers: { Authorization: `Bearer ${user.token}`, }, }) .then((res) => res.data.data); } /** * 更新课程进度 * @param lessonId - 课程ID * @returns Promise */ static updateLessonProgress(lessonId: number): Promise { const user = useUser(); return http .server() .post(`lesson/${lessonId}/progress`, null, { headers: { Authorization: `Bearer ${user.token}`, }, }) .then((res) => res.data.data); } /** * 更新课程任务 * @param id - 课程任务ID * @param params - 更新参数,所有字段都是可选的 * @returns Promise 返回更新后的课程任务 */ static updateLessonTask(id: number, params: UpdateLessonTaskRequest): Promise { const user = useUser(); console.log("params: " + JSON.stringify(params)) return http .server() .put(`lesson-tasks/${id}`, params, { headers: { Authorization: `Bearer ${user.token}`, }, }) .then((res) => res.data.data); } /** * 删除课程任务 * @param id - 课程任务ID * @returns Promise */ static deleteLessonTask(id: number): Promise { const user = useUser(); return http .server() .delete(`lesson-tasks/${id}`, { headers: { Authorization: `Bearer ${user.token}`, }, }) .then((res) => res.data.data); } /** * 获取部门课程任务列表 * @param departmentId - 部门ID * @param page - 页码,默认为1 * @param size - 每页数量,默认为20 * @returns Promise<{ * code: number; // 响应状态码 * message: string; // 响应消息 * data: { * list: Array<{ * id: number; // 用户ID * username: string; // 用户名 * email: string; // 邮箱 * departmentId: number; // 部门ID * roles: number; // 角色 * jobs: number; // 岗位 * avatar: string; // 头像 * creatorId: number; // 创建者ID * status: number; // 状态 * createdAt: number; // 创建时间 * updatedAt: number; // 更新时间 * }>; * total: number; // 总数 * currentPage: number; // 当前页 * pageSize: number; // 每页数量 * }; * }> 返回分页的课程任务数据 */ static getDepartmentLessonTasks( departmentId: number, page: number = 1, size: number = 20 ): Promise<{ code: number; message: string; data: { content: LessonTask[]; // 课程任务列表 pageable: { pageNumber: number; // 当前页码 pageSize: number; // 每页大小 sort: { empty: boolean; // 是否无排序 unsorted: boolean; // 是否未排序 sorted: boolean; // 是否已排序 }; offset: number; // 偏移量 paged: boolean; // 是否分页 unpaged: boolean; // 是否不分页 }; totalElements: number; // 总记录数 totalPages: number; // 总页数 last: boolean; // 是否最后一页 first: boolean; // 是否第一页 empty: boolean; // 是否为空 number: number; // 当前页码 size: number; // 每页大小 numberOfElements: number; // 当前页记录数 }; }> { const user = useUser(); const params: any = { page, size, departmentId }; return http .server() .get("lesson-tasks/department", { params, headers: { Authorization: `Bearer ${user.token}`, }, }) .then((res) => res.data); } /** * 获取部门下的所有教师 * @param departmentId - 部门ID * @returns Promise<{ * code: number; // 响应状态码 * message: string; // 响应消息 * data: { * list: Array<{ * id: number; // 用户ID * username: string; // 用户名 * email: string; // 邮箱 * departmentId: number; // 部门ID * roles: number; // 角色 * jobs: number; // 岗位 * status: number; // 状态 * createdAt: number; // 创建时间 * updatedAt: number; // 更新时间 * }>; * total: number; // 总数 * }; * }> */ static getDepartmentTeachers(departmentId: number): Promise<{ code: number; message: string; data: Array<{ id: number; username: string; email: string; departmentId: number; roles: number; jobs: number; status: number; createdAt: number; updatedAt: number; }>; }> { const user = useUser(); return http .server() .get(`users/department/${departmentId}`, { headers: { Authorization: `Bearer ${user.token}`, }, }) .then((res) => res.data); } }