diff --git a/components.d.ts b/components.d.ts index 18ec8fb..70efff9 100644 --- a/components.d.ts +++ b/components.d.ts @@ -27,6 +27,7 @@ declare module 'vue' { WdProgress: typeof import('wot-design-uni/components/wd-progress/wd-progress.vue')['default'] WdRadio: typeof import('wot-design-uni/components/wd-radio/wd-radio.vue')['default'] WdRadioGroup: typeof import('wot-design-uni/components/wd-radio-group/wd-radio-group.vue')['default'] + WdSortButton: typeof import('wot-design-uni/components/wd-sort-button/wd-sort-button.vue')['default'] WdStatusTip: typeof import('wot-design-uni/components/wd-status-tip/wd-status-tip.vue')['default'] WdStep: typeof import('wot-design-uni/components/wd-step/wd-step.vue')['default'] WdSteps: typeof import('wot-design-uni/components/wd-steps/wd-steps.vue')['default'] diff --git a/src/pages/index/index.vue b/src/pages/index/index.vue index 94d4150..9486aec 100644 --- a/src/pages/index/index.vue +++ b/src/pages/index/index.vue @@ -54,6 +54,7 @@ const handleBeforeToggle: DropMenuItemBeforeToggle = ({ status, resolve }) => { const expandedCourse = ref(['lesson']) const groupedLessons = ref<{ [key: string]: LessonTask[] }>({}) +const refreshKey = ref(0) const openLessonDetail = (courseId: number) => { router.push({ @@ -97,22 +98,47 @@ const loadLessons = async () => { return } - const groupData = res.data.content - .sort((a: LessonTask, b: LessonTask) => a.id - b.id) - .reduce((acc: { [key: string]: LessonTask[] }, cur: LessonTask) => { - if (!acc[cur.courseName]) { - acc[cur.courseName] = [] - } - acc[cur.courseName].push(cur) - return acc - }, {}) + // 先按 id 排序 + let sortedContent = [...res.data.content].sort((a: LessonTask, b: LessonTask) => a.id - b.id) + // 分组 + const groupData = sortedContent.reduce((acc: { [key: string]: LessonTask[] }, cur: LessonTask) => { + if (!acc[cur.courseName]) { + acc[cur.courseName] = [] + } + acc[cur.courseName].push(cur) + return acc + }, {}) + + // 如果不是默认排序,对每个组内的课程按进度排序 + if (value.value !== 0) { + Object.keys(groupData).forEach(courseName => { + groupData[courseName].sort((a: LessonTask, b: LessonTask) => { + const progressA = calcLessonProgress(a) + const progressB = calcLessonProgress(b) + return value.value === 1 + ? progressB - progressA // 完成度高的优先(降序) + : progressA - progressB // 完成度低的优先(升序) + }) + }) + } + + console.log('分组后的课程数据:', JSON.stringify(groupData, null, 2)) groupedLessons.value = groupData - expandedCourse.value = Object.keys(groupData).filter(courseName => { - return groupData[courseName].filter((lesson: LessonTask) => - calcLessonProgress(lesson) !== 0 && calcLessonProgress(lesson) !== 100 - ).length > 0 + + const expandedGroups = Object.keys(groupData).filter(courseName => { + const courses = groupData[courseName] + const hasCompleted = courses.some(lesson => calcLessonProgress(lesson) === 100) + const hasNotStarted = courses.some(lesson => calcLessonProgress(lesson) === 0) + const hasInProgress = courses.some(lesson => { + const progress = calcLessonProgress(lesson) + return progress > 0 && progress < 100 + }) + return (hasCompleted && hasNotStarted) || hasInProgress }) + + // 更新展开的课程组 + expandedCourse.value = expandedGroups } catch (err: unknown) { if (err instanceof Error) { toast.error({ msg: err.message }) @@ -163,19 +189,35 @@ onLoad(() => { loadLessons() }) +const value = ref(0) + +// 处理排序按钮点击 +const handleChange = ({ value: newValue }: { value: number }) => { + console.log('排序值:', newValue) + value.value = newValue + loadLessons().then(() => { + // 强制重新渲染组件 + refreshKey.value++ + }) +}