From 4f717dc8d70e5ca424dae668e2e60e3f3f29b600 Mon Sep 17 00:00:00 2001 From: zhonghua Date: Wed, 11 Mar 2026 18:19:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=89=8D=E7=AB=AF=E6=8E=A5=E5=8F=A3=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reading-platform-frontend/src/api/teacher.ts | 9 +- reading-platform-frontend/src/components.d.ts | 7 ++ .../src/views/school/ReportView.vue | 83 ++++++++--------- .../views/school/feedback/FeedbackView.vue | 63 +++++-------- .../school-courses/SchoolCourseListView.vue | 81 ++++------------ .../src/views/teacher/DashboardView.vue | 69 ++++++-------- .../views/teacher/courses/CourseListView.vue | 92 +++++++------------ .../views/teacher/feedback/FeedbackView.vue | 51 ++++------ 8 files changed, 176 insertions(+), 279 deletions(-) diff --git a/reading-platform-frontend/src/api/teacher.ts b/reading-platform-frontend/src/api/teacher.ts index be42eb6..43f61bb 100644 --- a/reading-platform-frontend/src/api/teacher.ts +++ b/reading-platform-frontend/src/api/teacher.ts @@ -420,10 +420,11 @@ export interface FeedbackQueryParams { } export interface FeedbackStats { - totalFeedbacks: number; - avgDesignQuality: number; - avgParticipation: number; - avgGoalAchievement: number; + totalFeedbacks?: number; + avgDesignQuality?: number; + avgParticipation?: number; + avgGoalAchievement?: number; + courseStats: Record; } diff --git a/reading-platform-frontend/src/components.d.ts b/reading-platform-frontend/src/components.d.ts index dd3bf50..e4e3360 100644 --- a/reading-platform-frontend/src/components.d.ts +++ b/reading-platform-frontend/src/components.d.ts @@ -17,6 +17,7 @@ declare module 'vue' { ADatePicker: typeof import('ant-design-vue/es')['DatePicker'] ADescriptions: typeof import('ant-design-vue/es')['Descriptions'] ADescriptionsItem: typeof import('ant-design-vue/es')['DescriptionsItem'] + ADivider: typeof import('ant-design-vue/es')['Divider'] ADrawer: typeof import('ant-design-vue/es')['Drawer'] ADropdown: typeof import('ant-design-vue/es')['Dropdown'] AEmpty: typeof import('ant-design-vue/es')['Empty'] @@ -25,6 +26,7 @@ declare module 'vue' { AImage: typeof import('ant-design-vue/es')['Image'] AImagePreviewGroup: typeof import('ant-design-vue/es')['ImagePreviewGroup'] AInput: typeof import('ant-design-vue/es')['Input'] + AInputNumber: typeof import('ant-design-vue/es')['InputNumber'] AInputPassword: typeof import('ant-design-vue/es')['InputPassword'] AInputSearch: typeof import('ant-design-vue/es')['InputSearch'] ALayout: typeof import('ant-design-vue/es')['Layout'] @@ -50,14 +52,19 @@ declare module 'vue' { ASelectOption: typeof import('ant-design-vue/es')['SelectOption'] ASpace: typeof import('ant-design-vue/es')['Space'] ASpin: typeof import('ant-design-vue/es')['Spin'] + AStatistic: typeof import('ant-design-vue/es')['Statistic'] ASubMenu: typeof import('ant-design-vue/es')['SubMenu'] + ASwitch: typeof import('ant-design-vue/es')['Switch'] ATable: typeof import('ant-design-vue/es')['Table'] + ATabPane: typeof import('ant-design-vue/es')['TabPane'] + ATabs: typeof import('ant-design-vue/es')['Tabs'] ATag: typeof import('ant-design-vue/es')['Tag'] ATextarea: typeof import('ant-design-vue/es')['Textarea'] ATimeRangePicker: typeof import('ant-design-vue/es')['TimeRangePicker'] ATooltip: typeof import('ant-design-vue/es')['Tooltip'] ATypographyText: typeof import('ant-design-vue/es')['TypographyText'] AUpload: typeof import('ant-design-vue/es')['Upload'] + AUploadDragger: typeof import('ant-design-vue/es')['UploadDragger'] FilePreviewModal: typeof import('./components/FilePreviewModal.vue')['default'] FileUploader: typeof import('./components/course/FileUploader.vue')['default'] LessonConfigPanel: typeof import('./components/course/LessonConfigPanel.vue')['default'] diff --git a/reading-platform-frontend/src/views/school/ReportView.vue b/reading-platform-frontend/src/views/school/ReportView.vue index 169c15a..e9effd0 100644 --- a/reading-platform-frontend/src/views/school/ReportView.vue +++ b/reading-platform-frontend/src/views/school/ReportView.vue @@ -13,11 +13,7 @@
- + 导出报告 @@ -71,13 +67,8 @@
-
+
@@ -143,8 +134,9 @@
{{ teacher.name }}
- - {{ teacher.avgRating.toFixed(1) }} + + {{ (teacher.avgRating || 0).toFixed(1) }}
@@ -187,14 +179,20 @@
{{ course.name }}
- 授课{{ course.lessonCount }}次 - {{ course.teacherCount }}位教师 - {{ course.studentCount }}名学生 + + 授课{{ course.lessonCount }}次 + + + {{ course.teacherCount }}位教师 + + + {{ course.studentCount }}名学生 +
- {{ course.avgRating.toFixed(1) }} + {{ (course.avgRating || 0).toFixed(1) }}
@@ -221,18 +219,24 @@
- 参与课程 + + 参与课程 + {{ student.lessonCount }} 次
- 专注度 + + 专注度 +
{{ student.avgFocus }}/5
- 参与度 + + 参与度 +
@@ -247,12 +251,8 @@
- +
@@ -262,7 +262,7 @@

{{ selectedTeacher.name }}

- {{ selectedTeacher.avgRating.toFixed(1) }} 分 + {{ (selectedTeacher.avgRating || 0).toFixed(1) }} 分
@@ -283,14 +283,17 @@
-

教学概况

+

+ 教学概况 +

{{ selectedTeacher.name }} 老师共完成 {{ selectedTeacher.lessonCount }} 次授课, 使用了 {{ selectedTeacher.courseCount }} 门不同的课程, 累计获得 {{ selectedTeacher.feedbackCount }} 次教学反馈。