ppms-uni-vue3-huertian/src/api/BussApi.ts
2024-12-23 15:22:59 +08:00

353 lines
9.0 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.

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);
}
}