web-学习任务

This commit is contained in:
2025-10-23 18:57:31 +08:00
parent 042209b98d
commit 6f5603dd8b
17 changed files with 1156 additions and 189 deletions

View File

@@ -108,23 +108,27 @@
<script setup lang="ts">
import { ref, onMounted, computed } from 'vue';
import { useRouter } from 'vue-router';
import { ElMessage } from 'element-plus';
import { DocumentCopy, DocumentChecked } from '@element-plus/icons-vue';
import { useStore } from 'vuex';
import { learningTaskApi } from '@/apis/study';
import type { LearningTask } from '@/types';
import type { LearningTask, TaskItemVO } from '@/types';
import { StudyPlanLayout } from '@/views/study-plan';
defineOptions({
name: 'StudyTasksView'
});
const router = useRouter();
const store = useStore();
const loading = ref(false);
const taskList = ref<LearningTask[]>([]);
// 统计数据
const totalCount = ref(16);
const completedCount = ref(10);
const pendingCount = ref(6);
const totalCount = ref(0);
const completedCount = ref(0);
const pendingCount = ref(0);
const userLevel = ref('Level1');
// 计算进度百分比
@@ -134,119 +138,90 @@ const progressPercent = computed(() => {
});
onMounted(() => {
loadUserProgress();
loadTaskList();
loadStatistics();
});
// ==================== MOCK 数据(临时使用,后续删除) ====================
const useMock = true; // 改为 false 即可使用真实接口
// 获取当前用户ID
const getUserID = () => {
const userInfo = store.getters['auth/user'];
return userInfo?.id || '';
};
function getMockTaskList(): LearningTask[] {
return [
{
taskID: '1',
name: '新时代中国特色社会主义发展历程',
description: '习近平新时代中国特色社会主义思想是当代中国马克思主义、二十一世纪马克思主义,是中华文化和中国精神的时代精华,其核心要义与实践要求内涵丰富、意义深远。',
startTime: '2025-10-01',
endTime: '2025-10-25',
status: 0,
},
{
taskID: '2',
name: '党的二十大精神学习',
description: '深入学习贯彻党的二十大精神,全面把握新时代新征程党和国家事业发展的目标任务,为全面建设社会主义现代化国家、全面推进中华民族伟大复兴而团结奋斗。',
startTime: '2025-09-15',
endTime: '2025-11-30',
status: 1,
},
{
taskID: '3',
name: '党史学习教育',
description: '学习党的百年奋斗历程,从党的历史中汲取智慧和力量,做到学史明理、学史增信、学史崇德、学史力行。',
startTime: '2025-08-01',
endTime: '2025-10-15',
status: 2,
},
{
taskID: '4',
name: '红色经典阅读',
description: '阅读红色经典著作,传承革命精神,赓续红色血脉,坚定理想信念。',
startTime: '2025-10-10',
endTime: '2025-12-31',
status: 0,
},
];
}
function getMockStatistics() {
return {
totalCount: 16,
completedCount: 10,
pendingCount: 6,
level: 'Level1'
};
}
// ==================== MOCK 数据结束 ====================
// 加载任务列表
// 加载任务列表(用户视角)
async function loadTaskList() {
loading.value = true;
try {
// MOCK: 使用模拟数据(临时)
if (useMock) {
await new Promise(resolve => setTimeout(resolve, 500)); // 模拟加载延迟
taskList.value = getMockTaskList();
const userID = getUserID();
if (!userID) {
ElMessage.warning('请先登录');
loading.value = false;
return;
}
// 调用用户任务分页接口
const pageParam = {
page: 1,
size: 100 // 获取所有任务,不做分页
};
// TODO: 真实接口调用useMock 改为 false 后生效)
const res = await learningTaskApi.getTaskList();
const filter: TaskItemVO = {
userID
};
const res = await learningTaskApi.getUserTaskPage(pageParam, filter);
if (res.success) {
taskList.value = res.dataList || [];
if (res.success && res.dataList) {
taskList.value = res.dataList;
} else {
ElMessage.error('加载学习任务失败');
ElMessage.error(res.message || '加载学习任务失败');
}
} catch (error) {
} catch (error: any) {
console.error('加载学习任务失败:', error);
ElMessage.error('加载学习任务失败');
ElMessage.error(error?.message || '加载学习任务失败');
} finally {
loading.value = false;
}
}
// 加载统计数据
async function loadStatistics() {
// 加载用户进度统计数据
async function loadUserProgress() {
try {
// MOCK: 使用模拟数据(临时)
if (useMock) {
const mockData = getMockStatistics();
totalCount.value = mockData.totalCount;
completedCount.value = mockData.completedCount;
pendingCount.value = mockData.pendingCount;
userLevel.value = mockData.level;
const userID = getUserID();
if (!userID) {
return;
}
const res = await learningTaskApi.getUserProgress(userID);
// TODO: 真实接口调用useMock 改为 false 后生效)
// const res = await learningTaskApi.getStatistics();
// if (res.success && res.data) {
// totalCount.value = res.data.totalCount;
// completedCount.value = res.data.completedCount;
// pendingCount.value = res.data.pendingCount;
// userLevel.value = res.data.level;
// }
if (res.success && res.data) {
const progressData = res.data;
const pending = (progressData.notStartTaskNum || 0) + (progressData.learningTaskNum || 0);
// 设置统计数据
totalCount.value = progressData.totalTaskNum || 0;
pendingCount.value = pending;
}
} catch (error) {
console.error('加载统计数据失败:', error);
console.error('加载用户进度失败:', error);
// 不显示错误消息,使用从任务列表计算的统计数据即可
}
}
// 点击任务卡片
function handleTaskClick(task: LearningTask) {
// TODO: 跳转到任务详情或开始任务
console.log('点击任务:', task);
if (!task.taskID) {
ElMessage.warning('任务ID不存在');
return;
}
// 使用路由跳转到任务详情页
router.push({
path: '/study-plan/task-detail',
query: {
taskId: task.taskID
}
});
}
// 格式化日期