From 02dfa15e7508df07c095ad67e85f0fbbf038a2d8 Mon Sep 17 00:00:00 2001 From: yuk255 Date: Mon, 1 Sep 2025 20:51:13 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=AF=BE=E7=A8=8B=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E4=B8=8B=E7=9A=84=E9=A1=B5=E9=9D=A2=E6=A0=B7=E5=BC=8F=E5=92=8C?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E8=A1=A5=E5=85=A8=E4=BC=98=E5=8C=96=E5=B9=B6?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E6=96=87=E4=BB=B6=E9=A2=84=E8=A7=88?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/CourseComponents/CourseCategory.vue | 413 ++++---- .../admin/CourseComponents/CourseCreate.vue | 148 ++- src/components/common/MoveFileContent.vue | 136 +-- src/router/index.ts | 18 +- .../teacher/certificate/CertificateDetail.vue | 4 +- .../teacher/course/AddCoursewareModal.vue | 198 ++-- src/views/teacher/course/AddHomework.vue | 10 +- src/views/teacher/course/ChapterEditor.vue | 23 +- .../teacher/course/ChapterManagement.vue | 41 +- src/views/teacher/course/CourseEditor.vue | 15 +- .../teacher/course/CoursewareManagement.vue | 141 ++- src/views/teacher/course/FileViewer.vue | 800 +++++++++++++++ src/views/teacher/course/FolderBrowser.vue | 630 ++++++++++++ src/views/teacher/course/HomeworkLibrary.vue | 153 +-- src/views/teacher/course/HomeworkReview.vue | 967 ++++++++++-------- .../teacher/course/HomeworkReviewDetail.vue | 86 +- .../teacher/course/HomeworkTemplateImport.vue | 18 +- .../teacher/course/ResourceSelectionModal.vue | 34 +- src/views/teacher/course/UploadFileModal.vue | 222 ++-- 19 files changed, 2844 insertions(+), 1213 deletions(-) create mode 100644 src/views/teacher/course/FileViewer.vue create mode 100644 src/views/teacher/course/FolderBrowser.vue diff --git a/src/components/admin/CourseComponents/CourseCategory.vue b/src/components/admin/CourseComponents/CourseCategory.vue index daae8d2..a96f490 100644 --- a/src/components/admin/CourseComponents/CourseCategory.vue +++ b/src/components/admin/CourseComponents/CourseCategory.vue @@ -2,23 +2,21 @@
- + + + + +
- + 创建课程
- - + + 搜索
-
-
@@ -26,23 +24,21 @@
{{ course.status }}
-
- -
- - + +
+ + + + +
-
+
@@ -76,32 +72,196 @@ @@ -125,10 +285,9 @@ const navigateToCreateCourse = () => { } .top { - padding: 20px; + padding: 10px 20px; white-space: nowrap; /* 进一步减少左右padding */ - height: 60px; display: flex; align-items: center; justify-content: space-between; @@ -139,94 +298,21 @@ const navigateToCreateCourse = () => { } .nav-links { - display: flex; - align-items: center; - + flex: 1; } .actions { display: flex; align-items: center; flex-shrink: 0; + gap: 12px; } - .top a { - margin-right: 74px; - display: inline-block; - height: 60px; - line-height: 60px; - font-family: 'PingFang SC', 'Microsoft YaHei', sans-serif; - font-size: 16px; - color: #333333; - text-decoration: none; - position: relative; - } - - .top a.active { - color: #1890ff; - } - - .top a.active::after { - content: ''; - position: absolute; - bottom: 0; - left: 0; - width: 100%; - height: 3px; - background-color: #1890ff; - } - - .create-btn { - background-color: #0288D1; - color: white; - border: none; - padding: 7px 16px; - border-radius: 2px; - font-size: 14px; - cursor: pointer; - margin-right: 24px; - /* 增加按钮与搜索框间距 */ - transition: background-color 0.3s; - } - - .create-btn:hover { - background-color: #40a9ff; - } + .search-container { display: flex; align-items: center; - border: 1px solid #d9d9d9; - border-radius: 2px; - overflow: hidden; - } - - .search-container input { - border: none; - padding: 7px 12px; - outline: none; - font-size: 14px; - width: 240px; - /* 增加搜索框宽度 */ - } - - .search-btn { - background-color: #0288D1; - border: none; - border-left: 1px solid #d9d9d9; - padding: 8px 16px; - cursor: pointer; - font-size: 16px; - color: #FFFFFF; - transition: background-color 0.3s; - line-height: 18px; - text-align: left; - font-style: normal; - text-transform: none; - } - - .search-btn:hover { - background-color: #e8e8e8; } .course-container { @@ -266,7 +352,7 @@ const navigateToCreateCourse = () => { .course-card:hover { box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); - transform: translateY(-5px); + /* transform: translateY(-5px); */ } .course-image-container { @@ -307,10 +393,12 @@ const navigateToCreateCourse = () => { font-size: 18px; font-weight: bold; color: #333; - display: block; - padding: 0; - margin: 0; + display: flex; line-height: 1; + width: 32px; + height: 32px; + justify-content: center; + align-items: center; } .course-image-container img { @@ -318,83 +406,6 @@ const navigateToCreateCourse = () => { height: 13px; } - /* 添加更多选项按钮样式 */ - .more-options { - position: relative; - cursor: pointer; - } - - .more-icon { - font-size: 18px; - font-weight: bold; - color: #333; - display: block; - padding: 5px; - margin: 0; - line-height: 1; - } - - .options-menu { - position: absolute; - top: 100%; - right: 0; - background: white; - border: 1px solid #eee; - border-radius: 4px; - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); - display: none; - z-index: 10; - width: auto; - min-width: 59px; - height: auto; - } - - .more-options:hover .options-menu { - display: block; - } - - .option-item { - display: flex; - align-items: center; - padding: 5px 8px; - color: #333; - text-decoration: none; - font-size: 12px; - text-align: center; - height: 24px; - line-height: 14px; - box-sizing: border-box; - border-bottom: 1px solid #f0f0f0; - } - - .icon-edit, - .icon-view, - .icon-delete, - .icon-more { - margin-right: 4px; - color: #1890ff; - } - - .icon-view { - color: #52c41a; - } - - .icon-delete { - color: #f5222d; - } - - .icon-more { - color: #faad14; - } - - .option-item:last-child { - border-bottom: none; - } - - .option-item:hover { - background-color: #f5f5f5; - } - .course-info { display: flex; flex-direction: column; @@ -523,12 +534,15 @@ const navigateToCreateCourse = () => { border-color: #1890ff; } +:deep(.n-tabs.n-tabs--top .n-tab-pane){ + padding: 0; +} + /* 响应式设计 - 让卡片图片和文字响应式放大 */ /* 超大屏幕 (≥1920px) - 图片和文字放大 */ @media (min-width: 1920px) { .course-category { - max-width: 1800px; margin: 0 auto; background: #fff; border-radius: 8px; @@ -575,7 +589,6 @@ const navigateToCreateCourse = () => { /* 超大屏幕 (1600px+) */ @media (min-width: 1600px) { .course-category { - max-width: 1500px; margin: 0 auto; } diff --git a/src/components/admin/CourseComponents/CourseCreate.vue b/src/components/admin/CourseComponents/CourseCreate.vue index ab51118..6f5b35c 100644 --- a/src/components/admin/CourseComponents/CourseCreate.vue +++ b/src/components/admin/CourseComponents/CourseCreate.vue @@ -3,6 +3,17 @@
+
+ + + +

{{ pageTitle }}

+
+
@@ -163,9 +174,10 @@ diff --git a/src/router/index.ts b/src/router/index.ts index da3f645..12b23d5 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -48,6 +48,8 @@ import CourseEditor from '@/views/teacher/course/CourseEditor.vue' import CoursewareManagement from '@/views/teacher/course/CoursewareManagement.vue' import ChapterManagement from '@/views/teacher/course/ChapterManagement.vue' import QuestionBankManagement from '@/views/teacher/course/QuestionBankManagement.vue' +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 StatisticsManagement from '@/views/teacher/course/StatisticsManagement.vue' @@ -123,7 +125,7 @@ const routes: RouteRecordRaw[] = [ ] }, { - path: 'course-create', + path: 'course-create/:id?', name: 'CourseCreate', component: CourseCreate, meta: { title: '创建课程' } @@ -265,7 +267,19 @@ const routes: RouteRecordRaw[] = [ name: 'GeneralManagement', component: GeneralManagement, meta: { title: '综合管理' } - } + }, + { + path: 'file-viewer/:fileId', + name: 'FileViewer', + component: FileViewer, + meta: { title: '文件查看' } + }, + { + path: 'folder-browser/:folderId', + name: 'FolderBrowser', + component: FolderBrowser, + meta: { title: '文件夹浏览' } + }, ] }, { diff --git a/src/views/teacher/certificate/CertificateDetail.vue b/src/views/teacher/certificate/CertificateDetail.vue index c31d8d0..8161922 100644 --- a/src/views/teacher/certificate/CertificateDetail.vue +++ b/src/views/teacher/certificate/CertificateDetail.vue @@ -234,13 +234,13 @@ const columns = [ h(NButton, { size: 'small', type: 'primary', - class: 'revoke-btn', + ghost: true, onClick: () => handleRevoke(row) }, { default: () => '撤回' }), h(NButton, { size: 'small', type: 'error', - class: 'delete-btn', + ghost: true, onClick: () => handleDelete(row) }, { default: () => '删除' }) ]) diff --git a/src/views/teacher/course/AddCoursewareModal.vue b/src/views/teacher/course/AddCoursewareModal.vue index 46b35ef..9dd0c98 100644 --- a/src/views/teacher/course/AddCoursewareModal.vue +++ b/src/views/teacher/course/AddCoursewareModal.vue @@ -1,52 +1,53 @@ @@ -565,6 +582,10 @@ const removeLessonSection = (sectionId: number) => { height: auto !important; } +.back-button{ + margin: 10px 0 0 10px; +} + :deep(.n-button.mobile-close) { position: absolute; top: 15px; @@ -579,8 +600,6 @@ const removeLessonSection = (sectionId: number) => { } :deep(.n-button.header-section) { - width: 194px !important; - height: 48px !important; background-color: #0288D1 !important; border-radius: 4px !important; margin: 31px 0 0 40px !important; diff --git a/src/views/teacher/course/ChapterManagement.vue b/src/views/teacher/course/ChapterManagement.vue index eefdbdb..0331e51 100644 --- a/src/views/teacher/course/ChapterManagement.vue +++ b/src/views/teacher/course/ChapterManagement.vue @@ -4,24 +4,29 @@

全部章节

- - - - - + + 添加章节 + 导入 + 导出 + 删除 +
+ + + 搜索 +
+
- -
@@ -51,7 +56,7 @@ 尾页 - +
@@ -61,7 +66,7 @@ diff --git a/src/views/teacher/course/FolderBrowser.vue b/src/views/teacher/course/FolderBrowser.vue new file mode 100644 index 0000000..8341618 --- /dev/null +++ b/src/views/teacher/course/FolderBrowser.vue @@ -0,0 +1,630 @@ + + + + + diff --git a/src/views/teacher/course/HomeworkLibrary.vue b/src/views/teacher/course/HomeworkLibrary.vue index 5e6fdfb..ac2b9df 100644 --- a/src/views/teacher/course/HomeworkLibrary.vue +++ b/src/views/teacher/course/HomeworkLibrary.vue @@ -3,24 +3,22 @@

作业库

- - - - + 添加作业 + 导入 + 导出 + 删除
- -
@@ -64,7 +62,7 @@ > \ No newline at end of file + .big-number { + font-size: 30px; + font-weight: bold; + color: #062333; + line-height: 0.9; + } + + + + .label { + font-size: 12px; + line-height: 1.2; + } + + .label.primary { + color: #062333; + font-weight: 500; + } + + .label.secondary { + color: #999; + } + + /* 操作按钮 */ + .action-button { + background: #0288D1; + color: white; + border: none; + padding: 6px 24px; + border-radius: 2px; + font-size: 16px; + cursor: pointer; + transition: background 0.3s ease; + min-width: 92px; + } + + .action-button:hover { + background: #0288D1; + } + + .action-button.review {} + + .action-button.view { + background: #0288D1; + } + + /* 发布中状态特殊布局调整 */ + .homework-card.publishing .content-right { + position: relative; + } + + .homework-card.publishing .stats-area { + margin-top: 20px; + } + + /* 响应式样式 */ + @media (max-width: 1200px) { + .top-section { + flex-direction: column; + gap: 20px; + align-items: flex-start; + padding: 20px 0 0 20px; + } + + .filter-tabs { + gap: 30px; + } + + .tab-item { + font-size: 16px; + } + + .class-select { + width: 100%; + } + + :deep(.class-select .n-base-selection) { + width: 100%; + } + + /* 作业卡片在小屏幕下的优化 */ + .homework-card { + margin: 15px 20px; + } + + .card-content { + flex-direction: column; + gap: 20px; + } + + .content-right { + align-self: flex-start; + } + } + + @media (max-width: 768px) { + .top-section { + padding: 15px 0 0 15px; + } + + .filter-tabs { + gap: 20px; + } + + .tab-item { + font-size: 14px; + padding-bottom: 15px; + } + + .class-select { + width: 100%; + } + + :deep(.class-select .n-base-selection) { + width: 100%; + font-size: 13px; + } + + /* 作业卡片在移动端的优化 */ + .homework-card { + margin: 10px 15px; + padding: 15px; + } + + .card-header { + flex-direction: column; + gap: 10px; + align-items: flex-start; + } + + .homework-title { + font-size: 16px; + } + + .status-badge { + font-size: 12px; + padding: 4px 8px; + } + + .homework-desc { + font-size: 14px; + line-height: 1.4; + } + + .info-item { + gap: 8px; + } + + .info-item .text { + font-size: 12px; + } + + .stats-area { + flex-direction: column; + gap: 8px; + align-items: flex-start; + } + + .big-number { + font-size: 24px; + } + + .label { + font-size: 12px; + } + + .action-button { + width: 100%; + margin-top: 10px; + } + } + + @media (max-width: 480px) { + .top-section { + padding: 10px 0 0 10px; + } + + .filter-tabs { + gap: 15px; + } + + .tab-item { + font-size: 13px; + padding-bottom: 10px; + } + + /* 作业卡片在超小屏幕下的优化 */ + .homework-card { + margin: 8px 10px; + padding: 12px; + } + + .homework-title { + font-size: 14px; + } + + .homework-desc { + font-size: 13px; + } + + .info-item .text { + font-size: 11px; + } + + .big-number { + font-size: 20px; + } + + .label { + font-size: 11px; + } + + .delete-link { + font-size: 12px; + } + } + + /* 确保内容不会溢出 */ + .homework-card { + word-break: break-word; + overflow-wrap: break-word; + } + + .homework-title { + word-break: break-word; + overflow-wrap: break-word; + } + + .homework-desc { + word-break: break-word; + overflow-wrap: break-word; + } + \ No newline at end of file diff --git a/src/views/teacher/course/HomeworkReviewDetail.vue b/src/views/teacher/course/HomeworkReviewDetail.vue index 9b04b7d..cbc2526 100644 --- a/src/views/teacher/course/HomeworkReviewDetail.vue +++ b/src/views/teacher/course/HomeworkReviewDetail.vue @@ -3,6 +3,16 @@
+
+ + + +
+
@@ -13,35 +23,23 @@
- 导出 - 移除 -
- - - - 搜索 - - -
+ 导出 + 移除 +
+ + + + 搜索 + + +
- +
@@ -49,14 +47,15 @@