diff --git a/public/images/teacher/@-ash.png b/public/images/teacher/@-ash.png new file mode 100644 index 0000000..2ed1314 Binary files /dev/null and b/public/images/teacher/@-ash.png differ diff --git a/public/images/teacher/@.png b/public/images/teacher/@.png new file mode 100644 index 0000000..0c36e96 Binary files /dev/null and b/public/images/teacher/@.png differ diff --git a/public/images/teacher/Image-ash.png b/public/images/teacher/Image-ash.png new file mode 100644 index 0000000..a6dc13c Binary files /dev/null and b/public/images/teacher/Image-ash.png differ diff --git a/public/images/teacher/Image.png b/public/images/teacher/Image.png new file mode 100644 index 0000000..5283732 Binary files /dev/null and b/public/images/teacher/Image.png differ diff --git a/public/images/teacher/delete2.png b/public/images/teacher/delete2.png new file mode 100644 index 0000000..71326f7 Binary files /dev/null and b/public/images/teacher/delete2.png differ diff --git a/public/images/teacher/expression-ash.png b/public/images/teacher/expression-ash.png new file mode 100644 index 0000000..089a29f Binary files /dev/null and b/public/images/teacher/expression-ash.png differ diff --git a/public/images/teacher/expression.png b/public/images/teacher/expression.png new file mode 100644 index 0000000..1c0652b Binary files /dev/null and b/public/images/teacher/expression.png differ diff --git a/public/images/teacher/like.png b/public/images/teacher/like.png new file mode 100644 index 0000000..232ef6a Binary files /dev/null and b/public/images/teacher/like.png differ diff --git a/public/images/teacher/reply.png b/public/images/teacher/reply.png new file mode 100644 index 0000000..0e19319 Binary files /dev/null and b/public/images/teacher/reply.png differ diff --git a/public/images/teacher/路径(1).png b/public/images/teacher/箭头-蓝.png similarity index 100% rename from public/images/teacher/路径(1).png rename to public/images/teacher/箭头-蓝.png diff --git a/src/router/index.ts b/src/router/index.ts index 6d2dc9d..ba3ca80 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -53,9 +53,12 @@ import FileViewer from '@/views/teacher/course/FileViewer.vue' import FolderBrowser from '@/views/teacher/course/FolderBrowser.vue' import CertificateManagement from '@/views/teacher/certificate/CertificateManagement.vue' import DiscussionManagement from '@/views/teacher/course/DiscussionManagement.vue' +import CommentView from '@/views/teacher/course/CommentView.vue' +import AddDiscussion from '@/views/teacher/course/AddDiscussion.vue' import StatisticsManagement from '@/views/teacher/statistics/StatisticsManagement.vue' import NotificationManagement from '@/views/teacher/course/NotificationManagement.vue' import GeneralManagement from '@/views/teacher/course/GeneralManagement.vue' +import UserAgreement from '@/views/UserAgreement.vue' // 作业子组件 import HomeworkLibrary from '@/views/teacher/course/HomeworkLibrary.vue' @@ -258,6 +261,18 @@ const routes: RouteRecordRaw[] = [ component: DiscussionManagement, meta: { title: '讨论管理' } }, + { + path: 'discussion/add', + name: 'AddDiscussion', + component: AddDiscussion, + meta: { title: '添加讨论' } + }, + { + path: 'comment/:id', + name: 'CommentView', + component: CommentView, + meta: { title: '评论详情' } + }, { path: 'statistics', name: 'StatisticsManagement', @@ -449,6 +464,14 @@ const routes: RouteRecordRaw[] = [ meta: { title: '帮助中心' } }, + // 用户协议 + { + path: '/agreement', + name: 'UserAgreement', + component: UserAgreement, + meta: { title: '用户协议' } + }, + // 学习中心(积分中心) { path: '/learning-center', diff --git a/src/views/Resources.vue b/src/views/Resources.vue index fff4931..ac2efb4 100644 --- a/src/views/Resources.vue +++ b/src/views/Resources.vue @@ -119,10 +119,7 @@ + + diff --git a/src/views/teacher/AdminDashboard.vue b/src/views/teacher/AdminDashboard.vue index 66626e6..a59db7a 100644 --- a/src/views/teacher/AdminDashboard.vue +++ b/src/views/teacher/AdminDashboard.vue @@ -434,6 +434,22 @@ const breadcrumbPathItems = computed(() => { path: currentPath } ); + } else if (currentPath.includes('discussion/add')) { + // 添加讨论页面:课程管理 > 讨论 > 添加讨论 + breadcrumbs.push( + { + title: '课程管理', + path: '/teacher/course-management' + }, + { + title: '讨论', + path: `/teacher/course-editor/${courseId}/discussion` + }, + { + title: '添加讨论', + path: currentPath + } + ); } else if (currentPath.includes('discussion')) { breadcrumbs.push( { @@ -445,6 +461,22 @@ const breadcrumbPathItems = computed(() => { path: `/teacher/course-editor/${courseId}` } ); + } else if (currentPath.includes('comment/')) { + // 查看评论页面:课程管理 > 讨论 > 查看讨论 + breadcrumbs.push( + { + title: '课程管理', + path: '/teacher/course-management' + }, + { + title: '讨论', + path: `/teacher/course-editor/${courseId}/discussion` + }, + { + title: '查看讨论', + path: currentPath + } + ); } else if (currentPath.includes('statistics')) { breadcrumbs.push( { diff --git a/src/views/teacher/course/AddDiscussion.vue b/src/views/teacher/course/AddDiscussion.vue new file mode 100644 index 0000000..cac3f04 --- /dev/null +++ b/src/views/teacher/course/AddDiscussion.vue @@ -0,0 +1,406 @@ + + + + + diff --git a/src/views/teacher/course/CommentView.vue b/src/views/teacher/course/CommentView.vue new file mode 100644 index 0000000..73532d0 --- /dev/null +++ b/src/views/teacher/course/CommentView.vue @@ -0,0 +1,863 @@ + + + + + \ No newline at end of file diff --git a/src/views/teacher/course/CourseEditor.vue b/src/views/teacher/course/CourseEditor.vue index 4a3176c..c2d8006 100644 --- a/src/views/teacher/course/CourseEditor.vue +++ b/src/views/teacher/course/CourseEditor.vue @@ -151,7 +151,9 @@ const hideSidebar = computed(() => { 'template-import', 'review/', 'certificate/detail/', - 'certificate/add' + 'certificate/add', + 'comment/', // 查看讨论页面 + 'discussion/add' ] // 检查当前路径是否包含需要隐藏侧边栏的路径 diff --git a/src/views/teacher/course/DiscussionManagement.vue b/src/views/teacher/course/DiscussionManagement.vue index 6287afc..b7eb97a 100644 --- a/src/views/teacher/course/DiscussionManagement.vue +++ b/src/views/teacher/course/DiscussionManagement.vue @@ -1,36 +1,586 @@ diff --git a/src/views/teacher/statistics/tab/BasicData.vue b/src/views/teacher/statistics/tab/BasicData.vue index c6bd68c..9eecef1 100644 --- a/src/views/teacher/statistics/tab/BasicData.vue +++ b/src/views/teacher/statistics/tab/BasicData.vue @@ -60,7 +60,8 @@

教学建设

-
+
课件/视频
@@ -71,7 +72,8 @@
-
+
资料/文档
@@ -82,7 +84,8 @@
-
+
题库总数
@@ -93,7 +96,8 @@
-
+
试卷总数
@@ -118,7 +122,7 @@ console.log('BasicData component loaded') /* 顶部统计卡片区域 */ .stats-cards { - margin-bottom: 0; + margin-bottom: 0; } .stats-row { @@ -205,6 +209,8 @@ console.log('BasicData component loaded') overflow: hidden; min-height: 95px; padding: 40px; + max-width: 100%; + box-sizing: border-box; } .construction-card:hover { @@ -227,13 +233,17 @@ console.log('BasicData component loaded') .card-icon img { width: 20px; height: 20px; - filter: brightness(0) invert(1); /* 使图标变为白色 */ + filter: brightness(0) invert(1); + /* 使图标变为白色 */ } .card-content { text-align: left; position: relative; z-index: 2; + flex: 1; + min-width: 0; + overflow: hidden; } .card-number { @@ -242,12 +252,19 @@ console.log('BasicData component loaded') color: #646464; margin-bottom: 10px; line-height: 1; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } .card-label { font-size: 14px; color: #646464; line-height: 1.2; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 100%; } @@ -270,6 +287,73 @@ console.log('BasicData component loaded') } /* 响应式设计 */ +@media (min-width: 1400px) { + .construction-grid { + max-width: 1420px; + margin: 0 auto; + } + + .construction-card { + padding: 30px; + gap: 30px; + } + + .card-number { + font-size: 20px; + } + + .card-label { + font-size: 13px; + } +} + +@media (max-width: 1200px) { + .construction-card { + padding: 20px; + gap: 16px; + } + + .card-number { + font-size: 18px; + } + + .card-label { + font-size: 12px; + } +} + +@media (max-width: 1000px) { + .construction-grid { + grid-template-columns: repeat(2, 1fr); + gap: 20px; + } + + .construction-card { + padding: 16px; + gap: 12px; + min-height: 80px; + } + + .card-icon { + width: 40px; + height: 40px; + } + + .card-icon img { + width: 18px; + height: 18px; + } + + .card-number { + font-size: 16px; + margin-bottom: 6px; + } + + .card-label { + font-size: 11px; + } +} + @media (max-width: 768px) { .stats-row { flex-wrap: wrap; @@ -284,6 +368,32 @@ console.log('BasicData component loaded') .construction-grid { grid-template-columns: repeat(2, 1fr); max-width: 100%; + gap: 16px; + } + + .construction-card { + padding: 12px; + gap: 10px; + min-height: 70px; + } + + .card-icon { + width: 36px; + height: 36px; + } + + .card-icon img { + width: 16px; + height: 16px; + } + + .card-number { + font-size: 14px; + margin-bottom: 4px; + } + + .card-label { + font-size: 10px; } } @@ -291,5 +401,35 @@ console.log('BasicData component loaded') .stat-card { flex: 1 1 100%; } + + .construction-grid { + grid-template-columns: 1fr; + gap: 12px; + } + + .construction-card { + padding: 10px; + gap: 8px; + min-height: 60px; + } + + .card-icon { + width: 32px; + height: 32px; + } + + .card-icon img { + width: 14px; + height: 14px; + } + + .card-number { + font-size: 12px; + margin-bottom: 3px; + } + + .card-label { + font-size: 9px; + } } diff --git a/src/views/teacher/statistics/tab/LearningMonitor.vue b/src/views/teacher/statistics/tab/LearningMonitor.vue index cd0dfc2..b5b2bc7 100644 --- a/src/views/teacher/statistics/tab/LearningMonitor.vue +++ b/src/views/teacher/statistics/tab/LearningMonitor.vue @@ -1,34 +1,603 @@ \ No newline at end of file + +.option-item { + display: flex; + align-items: flex-start; + gap: 12px; +} + +/* 自定义多选:隐藏原生复选框,使用蓝色圆点 */ +.custom-checkbox { + display: none; +} + +.option-label { + display: flex; + align-items: flex-start; + gap: 12px; + cursor: pointer; +} + +.dot { + width: 12px; + height: 12px; + border-radius: 50%; + border: 2px solid #ccc; + margin-top: 6px; + flex-shrink: 0; + position: relative; +} + +.dot-icon { + position: absolute; + top: 50%; + left: 50%; + width: 5px; + height: 5px; + border-radius: 50%; + background: #ccc; + transform: translate(-50%, -50%); +} + +.dot.active { + border: 2px solid #0288D1; +} + +.dot.active .dot-icon { + background: #0288D1; +} + +.option-text { + font-size: 14px; + color: #333; + line-height: 1.5; +} + +.modal-footer { + display: flex; + justify-content: flex-end; + gap: 12px; +} + +/* 响应式设计 */ +@media (max-width: 768px) { + .header-section { + flex-direction: column; + align-items: flex-start; + gap: 16px; + } + + .header-right { + width: 100%; + } + + .table-section { + padding: 16px; + } + + .header-right { + flex-wrap: wrap; + gap: 12px; + } + + .tab-item { + padding: 8px 16px; + font-size: 13px; + } + + :deep(.monitor-data-table .n-data-table-td), + :deep(.monitor-data-table .n-data-table-th) { + padding: 8px 4px; + font-size: 12px; + } +} + diff --git a/src/views/teacher/statistics/tab/LearningStatistics.vue b/src/views/teacher/statistics/tab/LearningStatistics.vue index 5f27f29..7888710 100644 --- a/src/views/teacher/statistics/tab/LearningStatistics.vue +++ b/src/views/teacher/statistics/tab/LearningStatistics.vue @@ -29,16 +29,16 @@
章节学习总人次
- 0 - -
+ 0 + +
章节平均学习次数
- 0 - -
+ 0 + +
@@ -66,134 +66,134 @@
- + - -
- -
-

- 考试 - (共5场) -

-
- -
-
-
参与人数
-
- 70 - -
-
-
-
平均成绩
-
- 60 - -
+ +
+ +
+

+ 考试 + (共5场) +

+
+ +
+
+
参与人数
+
+ 70 +
- -
-

成绩占比

-
- +
+
平均成绩
+
+ 60 +
-
- - -
-

- 练习 - (共5场) -

-
- -
-
-
参与人数
-
- 70 - -
-
-
-
平均成绩
-
- 60 - -
-
-
- -
-

成绩占比

-
- -
+ +
+

成绩占比

+
+
- -
- -
-

- 证书 - (共1个) -

-
-
-

证书获取率

-
- + +
+

+ 练习 + (共5场) +

+
+ +
+
+
参与人数
+
+ 70 + +
+
+
+
平均成绩
+
+ 60 +
-
- - -
-

- 讨论 - (共5个) -

-
- -
-
-
讨论话题
-
- 7 - -
-
-
-
回复数量
-
- 60 - -
-
-
- -
-

讨论活跃度

-
- -
+ +
+

成绩占比

+
+
- + + +
+ +
+

+ 证书 + (共1个) +

+
+
+

证书获取率

+
+ +
+
+
+
+ + +
+

+ 讨论 + (共5个) +

+
+ +
+
+
讨论话题
+
+ 7 + +
+
+
+
回复数量
+
+ 60 + +
+
+
+ +
+

讨论活跃度

+
+ +
+
+
+
+
+
+