web-学习任务
This commit is contained in:
@@ -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
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 格式化日期
|
||||
|
||||
Reference in New Issue
Block a user