feat: 添加 wd-drop-menu 和 wd-drop-menu-item 组件

This commit is contained in:
Timothy Yin 2024-09-21 18:32:25 +08:00
parent 5cd49bfa4c
commit 215318e29e
2 changed files with 20 additions and 1 deletions

2
components.d.ts vendored
View File

@ -14,6 +14,8 @@ declare module 'vue' {
WdCellGroup: typeof import('wot-design-uni/components/wd-cell-group/wd-cell-group.vue')['default'] WdCellGroup: typeof import('wot-design-uni/components/wd-cell-group/wd-cell-group.vue')['default']
WdCollapse: typeof import('wot-design-uni/components/wd-collapse/wd-collapse.vue')['default'] WdCollapse: typeof import('wot-design-uni/components/wd-collapse/wd-collapse.vue')['default']
WdCollapseItem: typeof import('wot-design-uni/components/wd-collapse-item/wd-collapse-item.vue')['default'] WdCollapseItem: typeof import('wot-design-uni/components/wd-collapse-item/wd-collapse-item.vue')['default']
WdDropMenu: typeof import('wot-design-uni/components/wd-drop-menu/wd-drop-menu.vue')['default']
WdDropMenuItem: typeof import('wot-design-uni/components/wd-drop-menu-item/wd-drop-menu-item.vue')['default']
WdForm: typeof import('wot-design-uni/components/wd-form/wd-form.vue')['default'] WdForm: typeof import('wot-design-uni/components/wd-form/wd-form.vue')['default']
WdIcon: typeof import('wot-design-uni/components/wd-icon/wd-icon.vue')['default'] WdIcon: typeof import('wot-design-uni/components/wd-icon/wd-icon.vue')['default']
WdInput: typeof import('wot-design-uni/components/wd-input/wd-input.vue')['default'] WdInput: typeof import('wot-design-uni/components/wd-input/wd-input.vue')['default']

View File

@ -6,11 +6,24 @@ import { calcLessonProgress } from '@/utils/lesson';
import { useRouter } from 'uni-mini-router'; import { useRouter } from 'uni-mini-router';
import { onMounted, ref } from 'vue'; import { onMounted, ref } from 'vue';
import { useToast } from 'wot-design-uni'; import { useToast } from 'wot-design-uni';
import type { DropMenuItemBeforeToggle } from 'wot-design-uni/components/wd-drop-menu-item/types';
import WdTag from 'wot-design-uni/components/wd-tag/wd-tag.vue'; import WdTag from 'wot-design-uni/components/wd-tag/wd-tag.vue';
const toast = useToast() const toast = useToast()
const router = useRouter() const router = useRouter()
const teacherFilterValue = ref<number>(0)
const teacherFilterOptions = ref<Record<string, any>[]>([
{ label: '老师1', value: 0 },
{ label: '老师2', value: 1 },
{ label: '老师3', value: 2 }
])
const handleBeforeToggle: DropMenuItemBeforeToggle = ({ status, resolve }) => {
resolve(true)
}
const expandedCourse = ref(['lesson']) const expandedCourse = ref(['lesson'])
const groupedLessons = ref<{ [key: string]: Lesson[] }>({}) const groupedLessons = ref<{ [key: string]: Lesson[] }>({})
@ -50,6 +63,10 @@ onMounted(() => {
<template> <template>
<page-wrapper> <page-wrapper>
<div> <div>
<!-- todo teacher filter [for role B] -->
<wd-drop-menu>
<wd-drop-menu-item v-model="teacherFilterValue" :options="teacherFilterOptions" :before-toggle="handleBeforeToggle" />
</wd-drop-menu>
<wd-collapse v-model="expandedCourse"> <wd-collapse v-model="expandedCourse">
<wd-status-tip v-if="Object.keys(groupedLessons).length === 0" image="content" tip="没有微课" /> <wd-status-tip v-if="Object.keys(groupedLessons).length === 0" image="content" tip="没有微课" />
<wd-collapse-item v-else v-for="(courses, courseName) in groupedLessons" :name="`${courseName}`" <wd-collapse-item v-else v-for="(courses, courseName) in groupedLessons" :name="`${courseName}`"
@ -80,7 +97,7 @@ onMounted(() => {
<div class="w-1.5 aspect-square rounded-full bg-blue"></div> <div class="w-1.5 aspect-square rounded-full bg-blue"></div>
<span class="text-xs text-blue font-bold font-mono"> <span class="text-xs text-blue font-bold font-mono">
{{ courses.filter(lesson => calcLessonProgress(lesson) !== 0 && calcLessonProgress(lesson) !== {{ courses.filter(lesson => calcLessonProgress(lesson) !== 0 && calcLessonProgress(lesson) !==
100).length }} 100).length }}
</span> </span>
</div> </div>
<div class="flex items-center gap-0.5"> <div class="flex items-center gap-0.5">