diff --git a/schoolNewsServ/api/api-study/src/main/java/org/xyzh/api/study/record/LearningRecordService.java b/schoolNewsServ/api/api-study/src/main/java/org/xyzh/api/study/record/LearningRecordService.java index 071a0de..d6c2612 100644 --- a/schoolNewsServ/api/api-study/src/main/java/org/xyzh/api/study/record/LearningRecordService.java +++ b/schoolNewsServ/api/api-study/src/main/java/org/xyzh/api/study/record/LearningRecordService.java @@ -5,6 +5,7 @@ import org.xyzh.common.dto.study.TbLearningRecord; import java.math.BigDecimal; import java.util.List; +import java.util.Map; /** * @description 学习记录服务接口 @@ -110,4 +111,22 @@ public interface LearningRecordService { * @since 2025-10-24 */ ResultDomain getCourseLearningRecord(TbLearningRecord learningRecord); + + // ----------------学习记录统计相关-------------------------------- + + /** + * @description 获取学习记录统计图表数据 + * @return ResultDomain> 图表数据(本周课程和文章的总学习时长) + * @author yslg + * @since 2025-10-30 + */ + ResultDomain> getStudyRecordsCharts(); + + /** + * @description 获取学习记录排行榜数据 + * @return ResultDomain> 排行榜数据(学习时长排行榜、课程排行榜、文章排行榜、任务完成排行榜) + * @author yslg + * @since 2025-10-30 + */ + ResultDomain> getStudyRecordsRankings(); } diff --git a/schoolNewsServ/api/api-study/src/main/java/org/xyzh/api/study/task/LearningTaskService.java b/schoolNewsServ/api/api-study/src/main/java/org/xyzh/api/study/task/LearningTaskService.java index c29933c..7214809 100644 --- a/schoolNewsServ/api/api-study/src/main/java/org/xyzh/api/study/task/LearningTaskService.java +++ b/schoolNewsServ/api/api-study/src/main/java/org/xyzh/api/study/task/LearningTaskService.java @@ -9,6 +9,7 @@ import org.xyzh.common.vo.TaskVO; import org.xyzh.common.dto.study.TbTaskItem; import java.util.List; +import java.util.Map; /** * @description 学习任务服务接口 @@ -216,4 +217,24 @@ public interface LearningTaskService { * @since 2025-10-15 */ ResultDomain removeTaskResource(String taskID, String resourceID); + + // ----------------任务统计相关-------------------------------- + + /** + * @description 获取任务统计图表数据 + * @param taskID 任务ID + * @return ResultDomain> 图表数据(学习时长分布、学习进度分布) + * @author yslg + * @since 2025-10-30 + */ + ResultDomain> getTaskStatisticsCharts(String taskID); + + /** + * @description 获取任务排行榜数据 + * @param taskID 任务ID + * @return ResultDomain> 排行榜数据(完成时间排行榜、学习时长排行榜) + * @author yslg + * @since 2025-10-30 + */ + ResultDomain> getTaskStatisticsRankings(String taskID); } diff --git a/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningRecordController.java b/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningRecordController.java index 43fbe9d..e279863 100644 --- a/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningRecordController.java +++ b/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningRecordController.java @@ -11,6 +11,8 @@ import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.PathVariable; +import java.util.Map; + /** * @description 学习记录控制器 @@ -72,4 +74,22 @@ public class LearningRecordController { return learningRecordService.getCourseLearningRecord(learningRecord); } + + /** + * 获取学习记录统计图表数据 + * @return 图表数据(本周课程和文章的总学习时长) + */ + @GetMapping("/statistics/charts") + public ResultDomain> getStudyRecordsCharts() { + return learningRecordService.getStudyRecordsCharts(); + } + + /** + * 获取学习记录排行榜数据 + * @return 排行榜数据(学习时长排行榜、课程排行榜、文章排行榜、任务完成排行榜) + */ + @GetMapping("/statistics/rankings") + public ResultDomain> getStudyRecordsRankings() { + return learningRecordService.getStudyRecordsRankings(); + } } diff --git a/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningTaskController.java b/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningTaskController.java index a24c34e..88232cc 100644 --- a/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningTaskController.java +++ b/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningTaskController.java @@ -160,6 +160,24 @@ public class LearningTaskController { return learningTaskService.getUserProgress(userID); } + /** + * 获取任务统计图表数据 + * @param taskID 任务ID + * @return 包含学习时长分布和学习进度分布的Map数据 + */ + @GetMapping("/{taskID}/statistics/charts") + public ResultDomain> getTaskStatisticsCharts(@PathVariable("taskID") String taskID) { + return learningTaskService.getTaskStatisticsCharts(taskID); + } + /** + * 获取任务排行榜数据 + * @param taskID 任务ID + * @return 包含完成时间排行榜和学习时长排行榜的Map数据 + */ + @GetMapping("/{taskID}/statistics/rankings") + public ResultDomain> getTaskStatisticsRankings(@PathVariable("taskID") String taskID) { + return learningTaskService.getTaskStatisticsRankings(taskID); + } } diff --git a/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/LearningRecordMapper.java b/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/LearningRecordMapper.java index 6bd9fef..d75e7cd 100644 --- a/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/LearningRecordMapper.java +++ b/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/LearningRecordMapper.java @@ -5,8 +5,10 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.xyzh.common.core.page.PageParam; import org.xyzh.common.dto.study.TbLearningRecord; +import org.xyzh.common.vo.UserDeptRoleVO; import java.util.List; +import java.util.Map; /** * @description LearningRecordMapper.java文件描述 学习记录数据访问层 @@ -145,4 +147,51 @@ public interface LearningRecordMapper extends BaseMapper { * @since 2025-10-15 */ long countLearningRecords(@Param("filter") TbLearningRecord filter); + + // ----------------学习记录统计相关-------------------------------- + + /** + * @description 获取本周课程和文章的总学习时长统计 + * @param userDeptRoles 用户部门角色信息 + * @return List> 学习时长统计数据 + * @author yslg + * @since 2025-10-30 + */ + List> getWeeklyStudyDurationByType(@Param("userDeptRoles") List userDeptRoles); + + /** + * @description 获取本周学习时长排行榜 + * @param userDeptRoles 用户部门角色信息 + * @return List> 学习时长排行榜 + * @author yslg + * @since 2025-10-30 + */ + List> getWeeklyStudyDurationRanking(@Param("userDeptRoles") List userDeptRoles); + + /** + * @description 获取本周学习课程排行榜 + * @param userDeptRoles 用户部门角色信息 + * @return List> 课程学习排行榜 + * @author yslg + * @since 2025-10-30 + */ + List> getWeeklyCourseRanking(@Param("userDeptRoles") List userDeptRoles); + + /** + * @description 获取本周学习文章排行榜 + * @param userDeptRoles 用户部门角色信息 + * @return List> 文章学习排行榜 + * @author yslg + * @since 2025-10-30 + */ + List> getWeeklyArticleRanking(@Param("userDeptRoles") List userDeptRoles); + + /** + * @description 获取本周任务完成最多的排行榜 + * @param userDeptRoles 用户部门角色信息 + * @return List> 任务完成排行榜 + * @author yslg + * @since 2025-10-30 + */ + List> getWeeklyTaskCompletionRanking(@Param("userDeptRoles") List userDeptRoles); } diff --git a/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/TaskUserMapper.java b/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/TaskUserMapper.java index 14f1a86..b5e4b54 100644 --- a/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/TaskUserMapper.java +++ b/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/TaskUserMapper.java @@ -8,6 +8,7 @@ import org.xyzh.common.dto.study.TbTaskUser; import org.xyzh.common.vo.TaskItemVO; import java.util.List; +import java.util.Map; /** * @description TaskUserMapper.java文件描述 任务用户数据访问层 @@ -179,4 +180,40 @@ public interface TaskUserMapper extends BaseMapper { * @since 2025-10-15 */ long countTaskUsers(@Param("filter") TbTaskUser filter); + + /** + * @description 获取任务学习时长分布数据 + * @param taskId 任务ID + * @return List> 学习时长分布数据 + * @author yslg + * @since 2025-10-30 + */ + List> getStudyDurationDistribution(@Param("taskId") String taskId); + + /** + * @description 获取任务学习进度分布数据 + * @param taskId 任务ID + * @return List> 学习进度分布数据 + * @author yslg + * @since 2025-10-30 + */ + List> getStudyProgressDistribution(@Param("taskId") String taskId); + + /** + * @description 获取任务完成时间排行榜(前10名) + * @param taskId 任务ID + * @return List> 完成时间排行榜 + * @author yslg + * @since 2025-10-30 + */ + List> getCompletionTimeRanking(@Param("taskId") String taskId); + + /** + * @description 获取任务学习时长排行榜(前10名) + * @param taskId 任务ID + * @return List> 学习时长排行榜 + * @author yslg + * @since 2025-10-30 + */ + List> getStudyDurationRanking(@Param("taskId") String taskId); } diff --git a/schoolNewsServ/study/src/main/java/org/xyzh/study/service/impl/SCLearningRecordServiceImpl.java b/schoolNewsServ/study/src/main/java/org/xyzh/study/service/impl/SCLearningRecordServiceImpl.java index 5cc9c94..2195bcc 100644 --- a/schoolNewsServ/study/src/main/java/org/xyzh/study/service/impl/SCLearningRecordServiceImpl.java +++ b/schoolNewsServ/study/src/main/java/org/xyzh/study/service/impl/SCLearningRecordServiceImpl.java @@ -2,7 +2,9 @@ package org.xyzh.study.service.impl; import java.math.BigDecimal; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -15,6 +17,7 @@ import org.xyzh.common.dto.study.TbTaskItem; import org.xyzh.common.dto.study.TbTaskUser; import org.xyzh.common.dto.user.TbSysUser; import org.xyzh.common.vo.TaskItemVO; +import org.xyzh.common.vo.UserDeptRoleVO; import org.xyzh.api.study.record.LearningRecordService; import org.xyzh.study.mapper.LearningRecordMapper; import org.xyzh.study.mapper.TaskItemMapper; @@ -272,8 +275,57 @@ public class SCLearningRecordServiceImpl implements LearningRecordService { } } + @Override + public ResultDomain> getStudyRecordsCharts() { + ResultDomain> resultDomain = new ResultDomain<>(); + try { + Map chartsData = new HashMap<>(); + + // 获取当前用户的部门角色信息 + List userDeptRoles = LoginUtil.getCurrentDeptRole(); + + // 获取本周课程和文章的总学习时长统计 + List> durationByType = learningRecordMapper.getWeeklyStudyDurationByType(userDeptRoles); + chartsData.put("durationByType", durationByType); + + resultDomain.success("获取学习记录图表数据成功", chartsData); + } catch (Exception e) { + logger.error("获取学习记录图表数据失败", e); + resultDomain.fail("获取学习记录图表数据失败:" + e.getMessage()); + } + return resultDomain; + } - - - + @Override + public ResultDomain> getStudyRecordsRankings() { + ResultDomain> resultDomain = new ResultDomain<>(); + try { + Map rankingsData = new HashMap<>(); + + // 获取当前用户的部门角色信息 + List userDeptRoles = LoginUtil.getCurrentDeptRole(); + + // 获取本周学习时长排行榜 + List> durationRanking = learningRecordMapper.getWeeklyStudyDurationRanking(userDeptRoles); + rankingsData.put("durationRanking", durationRanking); + + // 获取本周学习课程排行榜 + List> courseRanking = learningRecordMapper.getWeeklyCourseRanking(userDeptRoles); + rankingsData.put("courseRanking", courseRanking); + + // 获取本周学习文章排行榜 + List> articleRanking = learningRecordMapper.getWeeklyArticleRanking(userDeptRoles); + rankingsData.put("articleRanking", articleRanking); + + // 获取本周任务完成最多的排行榜 + List> taskCompletionRanking = learningRecordMapper.getWeeklyTaskCompletionRanking(userDeptRoles); + rankingsData.put("taskCompletionRanking", taskCompletionRanking); + + resultDomain.success("获取学习记录排行榜数据成功", rankingsData); + } catch (Exception e) { + logger.error("获取学习记录排行榜数据失败", e); + resultDomain.fail("获取学习记录排行榜数据失败:" + e.getMessage()); + } + return resultDomain; + } } diff --git a/schoolNewsServ/study/src/main/java/org/xyzh/study/service/impl/SCLearningTaskServiceImpl.java b/schoolNewsServ/study/src/main/java/org/xyzh/study/service/impl/SCLearningTaskServiceImpl.java index 1893c2b..788337b 100644 --- a/schoolNewsServ/study/src/main/java/org/xyzh/study/service/impl/SCLearningTaskServiceImpl.java +++ b/schoolNewsServ/study/src/main/java/org/xyzh/study/service/impl/SCLearningTaskServiceImpl.java @@ -3,6 +3,7 @@ package org.xyzh.study.service.impl; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -690,4 +691,48 @@ public class SCLearningTaskServiceImpl implements LearningTaskService { resultDomain.success("获取用户整体学习进度成功", taskVO); return resultDomain; } + + @Override + public ResultDomain> getTaskStatisticsCharts(String taskID) { + ResultDomain> resultDomain = new ResultDomain<>(); + try { + Map chartsData = new HashMap<>(); + + // 获取学习时长分布数据 + List> durationDistribution = taskUserMapper.getStudyDurationDistribution(taskID); + chartsData.put("durationDistribution", durationDistribution); + + // 获取学习进度分布数据 + List> progressDistribution = taskUserMapper.getStudyProgressDistribution(taskID); + chartsData.put("progressDistribution", progressDistribution); + + resultDomain.success("获取任务统计图表数据成功", chartsData); + } catch (Exception e) { + logger.error("获取任务统计图表数据失败", e); + resultDomain.fail("获取任务统计图表数据失败:" + e.getMessage()); + } + return resultDomain; + } + + @Override + public ResultDomain> getTaskStatisticsRankings(String taskID) { + ResultDomain> resultDomain = new ResultDomain<>(); + try { + Map rankingsData = new HashMap<>(); + + // 获取完成时间排行榜(前10名) + List> completionTimeRanking = taskUserMapper.getCompletionTimeRanking(taskID); + rankingsData.put("completionTimeRanking", completionTimeRanking); + + // 获取学习时长排行榜(前10名) + List> durationRanking = taskUserMapper.getStudyDurationRanking(taskID); + rankingsData.put("durationRanking", durationRanking); + + resultDomain.success("获取任务排行榜数据成功", rankingsData); + } catch (Exception e) { + logger.error("获取任务排行榜数据失败", e); + resultDomain.fail("获取任务排行榜数据失败:" + e.getMessage()); + } + return resultDomain; + } } diff --git a/schoolNewsServ/study/src/main/resources/mapper/LearningRecordMapper.xml b/schoolNewsServ/study/src/main/resources/mapper/LearningRecordMapper.xml index 968a90f..366792d 100644 --- a/schoolNewsServ/study/src/main/resources/mapper/LearningRecordMapper.xml +++ b/schoolNewsServ/study/src/main/resources/mapper/LearningRecordMapper.xml @@ -204,4 +204,157 @@ + + + + + + + + + + + + + + + diff --git a/schoolNewsServ/study/src/main/resources/mapper/TaskUserMapper.xml b/schoolNewsServ/study/src/main/resources/mapper/TaskUserMapper.xml index a9aab47..02796ca 100644 --- a/schoolNewsServ/study/src/main/resources/mapper/TaskUserMapper.xml +++ b/schoolNewsServ/study/src/main/resources/mapper/TaskUserMapper.xml @@ -263,4 +263,84 @@ + + + + + + + + + + + + diff --git a/schoolNewsWeb/src/apis/study/learning-record.ts b/schoolNewsWeb/src/apis/study/learning-record.ts index c7ad533..cd5ac52 100644 --- a/schoolNewsWeb/src/apis/study/learning-record.ts +++ b/schoolNewsWeb/src/apis/study/learning-record.ts @@ -74,4 +74,22 @@ export const learningRecordApi = { const response = await api.post('/study/records/course/records', filter); return response.data; }, + + /** + * 获取学习记录统计图表数据 + * @returns Promise> 图表数据(本周课程和文章的总学习时长) + */ + async getStudyRecordsCharts(): Promise> { + const response = await api.get('/study/records/statistics/charts'); + return response.data; + }, + + /** + * 获取学习记录排行榜数据 + * @returns Promise> 排行榜数据(学习时长排行榜、课程排行榜、文章排行榜、任务完成排行榜) + */ + async getStudyRecordsRankings(): Promise> { + const response = await api.get('/study/records/statistics/rankings'); + return response.data; + }, }; diff --git a/schoolNewsWeb/src/apis/study/learning-task.ts b/schoolNewsWeb/src/apis/study/learning-task.ts index 8f665d6..98e80f0 100644 --- a/schoolNewsWeb/src/apis/study/learning-task.ts +++ b/schoolNewsWeb/src/apis/study/learning-task.ts @@ -152,4 +152,24 @@ export const learningTaskApi = { const response = await api.post(`${this.learningTaskPrefix}/user/progress/${userID}`); return response.data; }, + + /** + * 获取任务统计图表数据 + * @param taskID 任务ID + * @returns Promise> 图表数据(学习时长分布、学习进度分布) + */ + async getTaskStatisticsCharts(taskID: string): Promise> { + const response = await api.get(`${this.learningTaskPrefix}/${taskID}/statistics/charts`); + return response.data; + }, + + /** + * 获取任务排行榜数据 + * @param taskID 任务ID + * @returns Promise> 排行榜数据(完成时间排行榜、学习时长排行榜) + */ + async getTaskStatisticsRankings(taskID: string): Promise> { + const response = await api.get(`${this.learningTaskPrefix}/${taskID}/statistics/rankings`); + return response.data; + }, }; diff --git a/schoolNewsWeb/src/assets/styles/common.scss b/schoolNewsWeb/src/assets/styles/common.scss index 65b2cac..c2578d3 100644 --- a/schoolNewsWeb/src/assets/styles/common.scss +++ b/schoolNewsWeb/src/assets/styles/common.scss @@ -40,7 +40,6 @@ $spacing-xxl: 24px; // 主要操作按钮 .btn-primary { - display: flex; align-items: center; gap: $spacing-xs; padding: $spacing-sm $spacing-xl; diff --git a/schoolNewsWeb/src/views/admin/manage/study/StudyRecordsView.vue b/schoolNewsWeb/src/views/admin/manage/study/StudyRecordsView.vue index 5fdba33..13755ac 100644 --- a/schoolNewsWeb/src/views/admin/manage/study/StudyRecordsView.vue +++ b/schoolNewsWeb/src/views/admin/manage/study/StudyRecordsView.vue @@ -1,137 +1,252 @@ @@ -140,15 +255,95 @@ function handleCurrentChange(val: number) { padding: 20px; } -.filter-bar { - display: flex; - gap: 16px; +.statistics-section { margin-bottom: 20px; - align-items: center; + + .chart-card { + .card-header { + font-weight: 600; + font-size: 16px; + } + + .chart-container { + width: 100%; + height: 400px; + } + } } -.el-table { - margin-bottom: 20px; +.rankings-section { + .ranking-card { + .card-header { + font-weight: 600; + font-size: 16px; + } + + .ranking-list { + max-height: 400px; + overflow-y: auto; + + .ranking-item { + display: flex; + align-items: center; + padding: 12px; + margin-bottom: 8px; + background: #f5f7fa; + border-radius: 8px; + transition: all 0.3s; + + &:hover { + background: #e8edf3; + transform: translateX(5px); + } + + .rank { + display: inline-flex; + align-items: center; + justify-content: center; + width: 32px; + height: 32px; + margin-right: 12px; + font-weight: bold; + border-radius: 50%; + background: #909399; + color: #fff; + font-size: 14px; + + &.rank-first { + background: linear-gradient(135deg, #ffd700, #ffed4e); + color: #333; + box-shadow: 0 2px 8px rgba(255, 215, 0, 0.4); + } + + &.rank-second { + background: linear-gradient(135deg, #c0c0c0, #e8e8e8); + color: #333; + box-shadow: 0 2px 8px rgba(192, 192, 192, 0.4); + } + + &.rank-third { + background: linear-gradient(135deg, #cd7f32, #e09856); + color: #fff; + box-shadow: 0 2px 8px rgba(205, 127, 50, 0.4); + } + } + + .username { + flex: 1; + font-size: 14px; + color: #333; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + .value { + font-size: 14px; + font-weight: 600; + color: #409eff; + } + } + } + } } - diff --git a/schoolNewsWeb/src/views/admin/manage/study/TaskManageView.vue b/schoolNewsWeb/src/views/admin/manage/study/TaskManageView.vue index bb5f7a2..d4013df 100644 --- a/schoolNewsWeb/src/views/admin/manage/study/TaskManageView.vue +++ b/schoolNewsWeb/src/views/admin/manage/study/TaskManageView.vue @@ -61,6 +61,17 @@ @success="handleFormSuccess" @cancel="handleFormCancel" /> + + +
+
+ +

任务统计 - {{ currentTaskName }}

+
+ +
@@ -243,7 +254,7 @@ import { ref, onMounted } from 'vue'; import { ElPagination, ElMessage, ElMessageBox } from 'element-plus'; import { AdminLayout } from '@/views/admin'; -import { TaskCard } from './index'; +import { TaskCard, TaskStatics } from './components'; import { GenericSelector } from '@/components/base'; import { LearningTaskAdd } from '@/views/public/task'; import type { TaskVO, UserVO } from '@/types'; @@ -255,8 +266,9 @@ defineOptions({ }); // 视图控制 -const currentView = ref<'list' | 'add' | 'edit'>('list'); +const currentView = ref<'list' | 'add' | 'edit' | 'statistics'>('list'); const currentTaskId = ref(undefined); +const currentTaskName = ref(''); const loading = ref(false); const taskList = ref([]); @@ -411,9 +423,9 @@ async function handleUnpublish(task: TaskVO) { * 统计 */ function handleStatistics(task: TaskVO) { - ElMessage.info('统计功能待开发'); - // TODO: 显示统计弹窗或其他实现 - console.log('查看统计:', task); + currentView.value = 'statistics'; + currentTaskId.value = task.learningTask.taskID; + currentTaskName.value = task.learningTask.name || ''; } /** @@ -804,6 +816,15 @@ function handleFormCancel() { currentView.value = 'list'; currentTaskId.value = undefined; } + +/** + * 从统计页面返回列表 + */ +function handleStatisticsBack() { + currentView.value = 'list'; + currentTaskId.value = undefined; + currentTaskName.value = ''; +} diff --git a/schoolNewsWeb/src/views/admin/manage/study/components/index.ts b/schoolNewsWeb/src/views/admin/manage/study/components/index.ts new file mode 100644 index 0000000..446eab9 --- /dev/null +++ b/schoolNewsWeb/src/views/admin/manage/study/components/index.ts @@ -0,0 +1,2 @@ +export { default as TaskCard } from './TaskCard.vue'; +export { default as TaskStatics } from './TaskStatics.vue'; \ No newline at end of file diff --git a/schoolNewsWeb/src/views/admin/manage/study/index.ts b/schoolNewsWeb/src/views/admin/manage/study/index.ts deleted file mode 100644 index c4dee2a..0000000 --- a/schoolNewsWeb/src/views/admin/manage/study/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as TaskCard } from './TaskCard.vue'; \ No newline at end of file