353 lines
9.0 KiB
TypeScript
353 lines
9.0 KiB
TypeScript
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<User> 返回用户信息
|
||
*/
|
||
static profile(token: string): Promise<User> {
|
||
return http
|
||
.server()
|
||
.get("users/current", {
|
||
headers: {
|
||
Authorization: `Bearer ${token}`,
|
||
},
|
||
})
|
||
.then((res) => res.data.data);
|
||
}
|
||
|
||
/**
|
||
* 用户登出
|
||
* @returns Promise<string> 返回登出结果
|
||
*/
|
||
static logout(): Promise<string> {
|
||
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<LessonTask> 返回课程任务详情
|
||
*/
|
||
static getLessonTask(id: number): Promise<LessonTask> {
|
||
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<LessonTask> 返回课程详情
|
||
*/
|
||
static getLessonDetail(lessonId: number): Promise<LessonTask> {
|
||
const user = useUser();
|
||
return http
|
||
.server()
|
||
.get(`lesson/${lessonId}`, {
|
||
headers: {
|
||
Authorization: `Bearer ${user.token}`,
|
||
},
|
||
})
|
||
.then((res) => res.data.data);
|
||
}
|
||
|
||
/**
|
||
* 更新课程进度
|
||
* @param lessonId - 课程ID
|
||
* @returns Promise<void>
|
||
*/
|
||
static updateLessonProgress(lessonId: number): Promise<void> {
|
||
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<LessonTask> 返回更新后的课程任务
|
||
*/
|
||
static updateLessonTask(id: number, params: UpdateLessonTaskRequest): Promise<LessonTask> {
|
||
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<void>
|
||
*/
|
||
static deleteLessonTask(id: number): Promise<void> {
|
||
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);
|
||
}
|
||
}
|