diff --git a/src/components/admin/CourseComponents/CourseCategory.vue b/src/components/admin/CourseComponents/CourseCategory.vue index a96f490..63755a3 100644 --- a/src/components/admin/CourseComponents/CourseCategory.vue +++ b/src/components/admin/CourseComponents/CourseCategory.vue @@ -341,7 +341,7 @@ const handleMoveCourse = (course: any) => { .course-card { width: 100%; height: auto; - aspect-ratio: 190 / 201; + /* aspect-ratio: 190 / 201; */ background: #FFFFFF; border: 1px solid #D8D8D8; box-sizing: border-box; @@ -431,11 +431,10 @@ const handleMoveCourse = (course: any) => { .course-name { width: 80%; - height: 20px; font-family: AppleSystemUIFont; font-size: 14px; color: #333333; - line-height: 20px; + line-height: 1.5; text-align: center; font-style: normal; text-transform: none; @@ -566,8 +565,6 @@ const handleMoveCourse = (course: any) => { .course-name { font-size: 16px; - height: 24px; - line-height: 24px; width: 85%; margin-top: 1px; /* 文字往上移动 */ @@ -606,8 +603,6 @@ const handleMoveCourse = (course: any) => { .course-name { font-size: 15px; - height: 22px; - line-height: 22px; width: 82%; margin-top: -1px; /* 文字往上移动 */ @@ -686,8 +681,6 @@ const handleMoveCourse = (course: any) => { .course-name { font-size: 13px; - height: 18px; - line-height: 18px; width: 78%; margin-top: -5px; /* 文字往上移动 */ @@ -726,8 +719,6 @@ const handleMoveCourse = (course: any) => { .course-name { font-size: 12px; - height: 16px; - line-height: 16px; width: 75%; margin-top: -4px; /* 文字往上移动 */ @@ -789,8 +780,6 @@ const handleMoveCourse = (course: any) => { .course-name { font-size: 11px; - height: 14px; - line-height: 14px; width: 70%; margin-top: -3px; /* 文字往上移动 */ diff --git a/src/router/index.ts b/src/router/index.ts index e62c4be..6d2dc9d 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -36,6 +36,7 @@ import PersonalCenter from '@/components/admin/PersonalCenter.vue' import CourseManagement from '@/components/admin/CourseManagement.vue' import MyResources from '@/components/admin/MyResources.vue' import StudentManagement from '@/components/admin/StudentManagement.vue' +import MessageCenter from '@/views/teacher/message/MessageCenter.vue' // 课程管理子组件 import CourseCategory from '@/components/admin/CourseComponents/CourseCategory.vue' @@ -79,6 +80,7 @@ import StudentList from '@/views/teacher/ExamPages/StudentList.vue' import GradingPage from '@/views/teacher/ExamPages/GradingPage.vue' import ExamTaking from '@/views/teacher/ExamPages/ExamTaking.vue' import ExamNoticeBeforeStart from '@/views/teacher/ExamPages/ExamNoticeBeforeStart.vue' +import ExamAnalysis from '@/views/teacher/ExamPages/ExamAnalysis.vue' import ChapterEditor from '@/views/teacher/course/ChapterEditor.vue' @@ -294,6 +296,12 @@ const routes: RouteRecordRaw[] = [ component: MyResources, meta: { title: '我的资源' } }, + { + path: 'message-center', + name: 'MessageCenter', + component: MessageCenter, + meta: { title: '消息中心' } + }, { path: 'student-management', name: 'StudentManagement', @@ -364,6 +372,12 @@ const routes: RouteRecordRaw[] = [ component: ExamLibrary, meta: { title: '试卷管理' } }, + { + path: 'exam-analysis', + name: 'ExamAnalysis', + component: ExamAnalysis, + meta: { title: '试卷分析' } + }, { path: 'marking-center', name: 'MarkingCenter', diff --git a/src/views/teacher/AdminDashboard.vue b/src/views/teacher/AdminDashboard.vue index d79588e..66626e6 100644 --- a/src/views/teacher/AdminDashboard.vue +++ b/src/views/teacher/AdminDashboard.vue @@ -78,14 +78,13 @@ 我的资源 - + - 个人中心 @@ -131,7 +130,7 @@ const height = window.innerHeight; console.log(`当前屏幕宽度: ${width}px, 高度: ${height}px`); // 添加导航项激活状态管理 -const activeNavItem = ref(0); // 0: 课程管理, 1: 学员管理, 2: 我的资源, 3: 个人中心 +const activeNavItem = ref(0); // 0: 课程管理, 1: 学员管理, 2: 我的资源, 3: 个人中心, 4: 考试管理, 5: 消息中心 const activeSubNavItem = ref(''); // 子菜单激活状态 const examMenuExpanded = ref(false); // 考试管理菜单展开状态 const studentMenuExpanded = ref(false); // 学员中心菜单展开状态 @@ -609,6 +608,8 @@ const updateActiveNavItem = () => { const arr = ['question-bank', 'exam-library', 'marking-center']; const found = arr.find(item => path.includes(item)); activeSubNavItem.value = found || ''; + } else if(path.includes('message-center')){ + activeNavItem.value = 5; // 消息中心 } } diff --git a/src/views/teacher/ExamPages/ExamAnalysis.vue b/src/views/teacher/ExamPages/ExamAnalysis.vue new file mode 100644 index 0000000..320dbd7 --- /dev/null +++ b/src/views/teacher/ExamPages/ExamAnalysis.vue @@ -0,0 +1,883 @@ + + + + + + + + + + + 试卷分析 + + + + + {{ examInfo.name }} + + + + 考试分类: + {{ examInfo.category }} + + + 应考人数: + {{ examInfo.totalStudents }}人(参考率{{ examInfo.participationRate }}%) + + + + + 总分: + {{ examInfo.totalScore }}分 + + + 平均分: + {{ examInfo.averageScore }}分 + + + + + 及格分: + {{ examInfo.passScore }}分 + + + 最高分: + {{ examInfo.highestScore }}分 + + + + + 考题时长: + {{ examInfo.duration }}分钟(平均答题时长{{ examInfo.averageDuration }}分钟) + + + 最低分: + {{ examInfo.lowestScore }}分 + + + + + 考试时间: + {{ examInfo.startTime }} - {{ examInfo.endTime }} + + + 平均时长: + {{ examInfo.averageDuration }}分钟 + + + + + + + + + + + + + + + + + + + + + + + 分数分布 + + + + 及格率统计 + + + 及格人数: + {{ scoreStats.passCount }}人 + + + 不及格人数: + {{ scoreStats.failCount }}人 + + + 及格率: + {{ scoreStats.passRate }}% + + + + + + + + + + + + 学生成绩对比 + + + + 题型平均分 + + + {{ type.type }}: + {{ type.averageScore }}分 + (正确率{{ type.correctRate }}%) + + + + + + + + + + + + + + diff --git a/src/views/teacher/ExamPages/ExamLibrary.vue b/src/views/teacher/ExamPages/ExamLibrary.vue index a3d159d..4169ba1 100644 --- a/src/views/teacher/ExamPages/ExamLibrary.vue +++ b/src/views/teacher/ExamPages/ExamLibrary.vue @@ -108,6 +108,9 @@ const createColumns = ({ render(row) { const buttons: VNode[] = []; if (row.status === '发布中') { + buttons.push( + h(NButton, { size: 'small', type: 'primary', ghost: true, style: 'margin: 0 3px;', onClick: () => handleAction('试卷分析', row) }, { default: () => '试卷分析' }) + ); buttons.push( h(NButton, { size: 'small', type: 'primary', ghost: true, style: 'margin: 0 3px;', onClick: () => handleAction('批阅', row) }, { default: () => '批阅' }) ); @@ -146,6 +149,10 @@ const examData = ref([ const columns = createColumns({ handleAction: (action, row) => { + if(action === '试卷分析'){ + router.push({ name: 'ExamAnalysis', query: { examId: row.id } }); + return; + } message.info(`执行操作: ${action} on row ${row.id}`); }, }); diff --git a/src/views/teacher/message/MessageCenter.vue b/src/views/teacher/message/MessageCenter.vue new file mode 100644 index 0000000..9738df2 --- /dev/null +++ b/src/views/teacher/message/MessageCenter.vue @@ -0,0 +1,147 @@ + + + + + + + + + 即时消息 + + + + + + + + + + 评论和@ + + + + + + + + + + 赞和收藏 + + + + + + + + + + 系统消息 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/views/teacher/message/components/CommentLikes.vue b/src/views/teacher/message/components/CommentLikes.vue new file mode 100644 index 0000000..66f4801 --- /dev/null +++ b/src/views/teacher/message/components/CommentLikes.vue @@ -0,0 +1,550 @@ + + + + + + + + + + + + + + + + + {{ message.username }}评论了我: + + {{ message.content }} + + {{ message.timestamp }} + + + + + + {{ message.username }}@了我: + + {{ message.content }} + + {{ message.timestamp }} + + + 回复我的课程: {{ message.courseInfo }} + + + + + + + + + 回复 + + + + + + + + + 点赞 + + + + + + 删除 + + + + + + + 举报 + + + + + + + + 取消 + 发送 + + + + + + + + + 首页 + 上一页 + + + {{ page }} + + + ... + {{ totalPages }} + + 下一页 + 尾页 + + + + + + + \ No newline at end of file diff --git a/src/views/teacher/message/components/FavoriteMessages.vue b/src/views/teacher/message/components/FavoriteMessages.vue new file mode 100644 index 0000000..9b81b6e --- /dev/null +++ b/src/views/teacher/message/components/FavoriteMessages.vue @@ -0,0 +1,513 @@ + + + + + + + + + + + + + + + + + {{ message.username }}赞了我的评论: + + {{ message.content }} + + {{ message.timestamp }} + + + + + + + {{ message.username }}收藏了我的课程: + + {{ message.courseInfo }} + + {{ message.timestamp }} + + + + + + + + 课程: + {{ message.courseInfo }} + + + + + + + + 首页 + 上一页 + + + {{ page }} + + + ... + {{ totalPages }} + + 下一页 + 尾页 + + + + + + + \ No newline at end of file diff --git a/src/views/teacher/message/components/MessageInput.vue b/src/views/teacher/message/components/MessageInput.vue new file mode 100644 index 0000000..204afdb --- /dev/null +++ b/src/views/teacher/message/components/MessageInput.vue @@ -0,0 +1,208 @@ + + + + + + + 发送 + + + + + + + + + \ No newline at end of file diff --git a/src/views/teacher/message/components/NotificationMessages.vue b/src/views/teacher/message/components/NotificationMessages.vue new file mode 100644 index 0000000..9652687 --- /dev/null +++ b/src/views/teacher/message/components/NotificationMessages.vue @@ -0,0 +1,780 @@ + + + + + + + 全部信息 + + + + + + + + + + + + + + + + + {{ contact.name }} + {{ contact.lastMessageTime }} + + + {{ contact.lastMessage }} + + + + + + + + + + + + + + + 选择一个对话开始聊天 + + + + + + + + + + {{ activeContact?.name }} + + + + + + + + + + + + + + + + + + {{ message.dateText }} + + + + + + + + + + {{ message.senderName }} + + + + {{ message.content }} + + + + + + + + + + + + + + + {{ message.fileName }} + {{ message.fileSize }} + + + + {{ message.time }} + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/views/teacher/message/components/SystemMessages.vue b/src/views/teacher/message/components/SystemMessages.vue new file mode 100644 index 0000000..27d8fc1 --- /dev/null +++ b/src/views/teacher/message/components/SystemMessages.vue @@ -0,0 +1,407 @@ + + + + + + + + + + + + + + + + + + + + + + + {{ message.title }} + + {{ message.timestamp }} + + + + + {{ message.content }} + + 查看详情 + + + + + + + + + + + + + + + + 暂无系统消息 + + + + + + 首页 + 上一页 + + + {{ page }} + + + ... + {{ totalPages }} + + 下一页 + 尾页 + + + + + + + \ No newline at end of file
选择一个对话开始聊天
{{ message.content }}
暂无系统消息