diff --git a/api/course.ts b/api/course.ts
index cac151f..87703b1 100644
--- a/api/course.ts
+++ b/api/course.ts
@@ -19,6 +19,8 @@ export interface ITeacher {
employeeId: string;
schoolId: number;
collegeId: number;
+ schoolName: string;
+ collegeName: string;
sex: number;
email: string;
phonenumber: string;
@@ -143,6 +145,22 @@ export const deleteCourseResource = async (resourceId: number) => {
});
};
+export const addTeacherToCourse = async (params: {
+ courseId: number;
+ teacherId: number;
+}) => {
+ return await http(`/system/teacherteam`, {
+ method: "POST",
+ body: params,
+ });
+};
+
+export const deleteTeacherTeamRecord = async (recordId: number) => {
+ return await http(`/system/teacherteam/${recordId}`, {
+ method: "DELETE",
+ });
+};
+
export const getTeacherTeamByCourse = async (courseId: number) => {
return await http<
IResponse<{
diff --git a/api/user.ts b/api/user.ts
index c1dc0cc..7314232 100644
--- a/api/user.ts
+++ b/api/user.ts
@@ -35,3 +35,17 @@ export const userProfile = async () => {
method: "GET",
});
};
+
+export const userSearch = async (pararms: {
+ searchType: "student" | "teacher";
+ keyword: string;
+}) => {
+ return await http<
+ IResponse & {
+ data: IUser[];
+ }
+ >(`/system/user/search`, {
+ method: "GET",
+ query: pararms,
+ });
+};
diff --git a/components/course/team/Member.vue b/components/course/team/Member.vue
index 2497c16..c46781e 100644
--- a/components/course/team/Member.vue
+++ b/components/course/team/Member.vue
@@ -7,7 +7,7 @@ defineProps<{
}>();
const emit = defineEmits<{
- delete: [teacherId: number];
+ delete: [recordId: number];
}>();
@@ -17,11 +17,12 @@ const emit = defineEmits<{
class="absolute top-0 right-0 flex flex-col gap-1 invisible group-hover/member-card:visible"
>
@@ -46,10 +47,10 @@ const emit = defineEmits<{
工号:{{ member.teacher.employeeId || "未知" }}
- {{ member.teacher.schoolId || "未知学校" }}
+ {{ member.teacher.schoolName || "未知学校" }}
- {{ member.teacher.collegeId || "未知学院" }}
+ {{ member.teacher.collegeName || "未知学院" }}
diff --git a/nuxt.config.ts b/nuxt.config.ts
index 9e64de0..9306c72 100644
--- a/nuxt.config.ts
+++ b/nuxt.config.ts
@@ -23,6 +23,7 @@ export default defineNuxtConfig({
"pinia-plugin-persistedstate",
"dayjs-nuxt",
"@formkit/auto-animate",
+ "@vueuse/nuxt",
],
icon: {
diff --git a/package.json b/package.json
index 7a8bb4f..1b04d1a 100644
--- a/package.json
+++ b/package.json
@@ -41,6 +41,7 @@
"@nuxtjs/color-mode": "^3.5.2",
"@nuxtjs/tailwindcss": "^6.13.2",
"@pinia/nuxt": "^0.10.1",
+ "@vueuse/nuxt": "^13.0.0",
"dayjs": "^1.11.13",
"dayjs-nuxt": "^2.1.11",
"pinia-plugin-persistedstate": "^4.2.0",
diff --git a/pages/course/[id]/classes.vue b/pages/course/[id]/classes.vue
index 936c22b..221ffb2 100644
--- a/pages/course/[id]/classes.vue
+++ b/pages/course/[id]/classes.vue
@@ -1,7 +1,43 @@
-
+
- Classes
+
+
+
+ 课程班级管理
+
+ 课程负责人:{{ course.data.teacherName || "未知" }}
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/course/[id]/team.vue b/pages/course/[id]/team.vue
index 39f62ae..0cdb9b4 100644
--- a/pages/course/[id]/team.vue
+++ b/pages/course/[id]/team.vue
@@ -1,21 +1,99 @@
@@ -28,12 +106,106 @@ const { data: teacherTeam } = useAsyncData(() =>
-
+
+
+
+
+
+
+
+
+ 搜索教师
+
+
+
+
+
+ 搜索教师工号/姓名/手机号,然后添加到团队中
+
+
+
+
+
+
+
+
搜索结果
+
+
+
+
+
+
+ {{ user.userName.slice(0, 2).toUpperCase() }}
+
+
+
+
+
+ {{ user.userName || "未知教师" }}
+
+
+ 工号:{{ user.employeeId || "未知" }}
+
+
+ {{ user.collegeName || "未知学院" }}
+
+
+
+
+
+
+
+
+
+
+
+
:key="member.teacherId"
:is-current-user="loginState.user?.userId === member.teacherId"
:member
+ @delete="onDeleteTeacher"
/>
description="请添加教师作为团队成员"
icon="fluent-color:people-list-24"
/>
-
- {{ teacherTeam }}
-
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 04f34d6..5284869 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -93,6 +93,9 @@ importers:
'@pinia/nuxt':
specifier: ^0.10.1
version: 0.10.1(magicast@0.3.5)(pinia@3.0.1(typescript@5.8.2)(vue@3.5.13(typescript@5.8.2)))
+ '@vueuse/nuxt':
+ specifier: ^13.0.0
+ version: 13.0.0(magicast@0.3.5)(nuxt@3.16.1(@parcel/watcher@2.5.1)(db0@0.3.1)(eslint@9.23.0(jiti@2.4.2))(ioredis@5.6.0)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.37.0)(terser@5.39.0)(typescript@5.8.2)(vite@6.2.3(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0))(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))
dayjs:
specifier: ^1.11.13
version: 1.11.13
@@ -1412,6 +1415,12 @@ packages:
'@vueuse/metadata@13.0.0':
resolution: {integrity: sha512-TRNksqmvtvqsuHf7bbgH9OSXEV2b6+M3BSN4LR5oxWKykOFT9gV78+C2/0++Pq9KCp9KQ1OQDPvGlWNQpOb2Mw==}
+ '@vueuse/nuxt@13.0.0':
+ resolution: {integrity: sha512-tVb57PW0aUGMHwvzp4uH2mo8ut3D/3c7DA936E4ValhQq2VMZMCMxaKGz1nE8etFC7p18fVypyzpe8o6CBAYFw==}
+ peerDependencies:
+ nuxt: ^3.0.0 || ^4.0.0-0
+ vue: ^3.5.0
+
'@vueuse/shared@12.8.2':
resolution: {integrity: sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==}
@@ -6162,6 +6171,17 @@ snapshots:
'@vueuse/metadata@13.0.0': {}
+ '@vueuse/nuxt@13.0.0(magicast@0.3.5)(nuxt@3.16.1(@parcel/watcher@2.5.1)(db0@0.3.1)(eslint@9.23.0(jiti@2.4.2))(ioredis@5.6.0)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.37.0)(terser@5.39.0)(typescript@5.8.2)(vite@6.2.3(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0))(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))':
+ dependencies:
+ '@nuxt/kit': 3.16.1(magicast@0.3.5)
+ '@vueuse/core': 13.0.0(vue@3.5.13(typescript@5.8.2))
+ '@vueuse/metadata': 13.0.0
+ local-pkg: 1.1.1
+ nuxt: 3.16.1(@parcel/watcher@2.5.1)(db0@0.3.1)(eslint@9.23.0(jiti@2.4.2))(ioredis@5.6.0)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.37.0)(terser@5.39.0)(typescript@5.8.2)(vite@6.2.3(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0))(yaml@2.7.0)
+ vue: 3.5.13(typescript@5.8.2)
+ transitivePeerDependencies:
+ - magicast
+
'@vueuse/shared@12.8.2(typescript@5.8.2)':
dependencies:
vue: 3.5.13(typescript@5.8.2)
diff --git a/types/index.ts b/types/index.ts
index b6f5e94..55e2691 100644
--- a/types/index.ts
+++ b/types/index.ts
@@ -1,2 +1,4 @@
export * from "./user";
export * from "./course";
+
+export type { FetchError } from "ofetch";
diff --git a/types/user.ts b/types/user.ts
index 88a1ef0..398d7dc 100644
--- a/types/user.ts
+++ b/types/user.ts
@@ -1,6 +1,7 @@
export type LoginType = "admin" | "teacher" | "student";
export interface IUser {
+ id?: number;
createBy: number;
createTime: Date;
updateBy: string;
@@ -8,6 +9,11 @@ export interface IUser {
remark: string;
userId: number;
deptId: number;
+ collegeName: string;
+ schoolName: string;
+ employeeId: string;
+ schoolId: number;
+ collegeId: number;
userName: string;
nickName: string;
email: string;