diff --git a/api/course.ts b/api/course.ts new file mode 100644 index 0000000..cac151f --- /dev/null +++ b/api/course.ts @@ -0,0 +1,154 @@ +import type { ICourse, ICourseChapter, ICourseResource } from "~/types"; +import type { IResponse } from "."; + +export interface ICourseTeamMember { + id: number; + teacherId: number; + courseId: number; + teacher: ITeacher; + createTime: Date; + updateTime: Date; + createBy: Date; + updateBy: number; + remark: string | null; +} + +export interface ITeacher { + id: number; + userName: string; + employeeId: string; + schoolId: number; + collegeId: number; + sex: number; + email: string; + phonenumber: string; + avatar: string; + status: number; + delFlag: number; + loginIp: string; + loginDate: Date; + createBy: number; + createTime: Date; + updateBy: number; + updateTime: Date; + remark: string | null; +} + +export const listCourses = async () => { + return await http< + IResponse<{ + rows: ICourse[]; + }> + >("/system/manage/list", { + method: "GET", + }); +}; + +export const listUserCourses = async (userId: number) => { + return await http< + IResponse<{ + rows: ICourse[]; + }> + >(`/system/manage/leader/${userId}`, { + method: "GET", + }); +}; + +export const getCourseDetail = async (courseId: string) => { + return await http< + IResponse<{ + data: ICourse; + }> + >(`/system/manage/${courseId}`, { + method: "GET", + }); +}; + +export const createCourse = async ( + params: Pick< + ICourse, + | "courseName" + | "profile" + | "schoolName" + | "teacherName" + | "semester" + | "previewUrl" + > +) => { + return await http(`/system/manage`, { + method: "POST", + body: params, + }); +}; + +export const deleteCourse = async (courseId: number) => { + return await http(`/system/manage/${courseId}`, { + method: "DELETE", + }); +}; + +export const getCourseChatpers = async (courseId: number) => { + return await http< + IResponse<{ + total: number; + rows: ICourseChapter[]; + }> + >(`/system/chapter/details/${courseId}`, { + method: "GET", + }); +}; + +export const createCourseChatper = async (params: { + courseId: number; + title: string; +}) => { + return await http(`/system/chapter`, { + method: "POST", + body: params, + }); +}; + +export const deleteCourseChatper = async (chapterId: number) => { + return await http(`/system/chapter/${chapterId}`, { + method: "DELETE", + }); +}; + +export const createCourseSection = async (params: { + chapterId: number; + title: string; +}) => { + return await http(`/system/section`, { + method: "POST", + body: params, + }); +}; + +export const deleteCourseSection = async (sectionId: number) => { + return await http(`/system/section/${sectionId}`, { + method: "DELETE", + }); +}; + +export const createCourseResource = async (params: ICourseResource) => { + return await http(`/system/resource`, { + method: "POST", + body: params, + }); +}; + +export const deleteCourseResource = async (resourceId: number) => { + return await http(`/system/resource/${resourceId}`, { + method: "DELETE", + }); +}; + +export const getTeacherTeamByCourse = async (courseId: number) => { + return await http< + IResponse<{ + data: ICourseTeamMember[]; + }> + >(`/system/teacherteam/course/${courseId}`, { + method: "GET", + }); +}; diff --git a/api/index.ts b/api/index.ts new file mode 100644 index 0000000..7482521 --- /dev/null +++ b/api/index.ts @@ -0,0 +1,6 @@ +export * from "./user"; + +export type IResponse = { + msg: string; + code: number; +} & T; diff --git a/api/user.ts b/api/user.ts new file mode 100644 index 0000000..c1dc0cc --- /dev/null +++ b/api/user.ts @@ -0,0 +1,37 @@ +import type { IUser, LoginType } from "~/types"; +import { http } from "~/utils/http"; +import type { IResponse } from "."; + +export interface LoginParams { + account: string; + password: string; + loginType: LoginType; +} + +export type LoginResponse = IResponse & { + loginType: LoginType; + token: string; +}; + +export type UserProfileResponse = IResponse & { + user: IUser; +}; + +/** + * 用户登录 + * @param params 登录参数 + * + * @see {@link LoginParams} + */ +export const userLogin = async (params: LoginParams) => { + return await http("/login", { + method: "POST", + body: params, + }); +}; + +export const userProfile = async () => { + return await http("/getInfo", { + method: "GET", + }); +}; diff --git a/app.vue b/app.vue index 3111e4f..5b8b514 100644 --- a/app.vue +++ b/app.vue @@ -1,5 +1,40 @@ diff --git a/components/CourseCard.vue b/components/CourseCard.vue index 26877d0..7f26623 100644 --- a/components/CourseCard.vue +++ b/components/CourseCard.vue @@ -3,17 +3,32 @@ import type { ICourse } from "~/types"; defineProps<{ data: ICourse; + deleteMode?: boolean; }>(); -const openCourse = (id: string) => { +const emit = defineEmits<{ + "delete-course": [courseId: number]; +}>(); + +const openCourse = (id: number) => { window.open(`/course/${id}`, "_blank", "noopener,noreferrer"); };