diff --git a/packages/app/src/components/TodayLessonsCard.vue b/packages/app/src/components/TodayLessonsCard.vue
new file mode 100644
index 0000000..d481e51
--- /dev/null
+++ b/packages/app/src/components/TodayLessonsCard.vue
@@ -0,0 +1,180 @@
+
+
+
+ 今日课程
+ ›
+
+
+
+
+
+
+
+
+
+ 暂未更新
+ 轻点重试
+
+
+
+
+ {{ stats.completed }}
+ / {{ stats.total }} 节
+
+
+
+
+
+
+
+
+
+ {{ hint }}
+
+
+
+
+
+
+
diff --git a/packages/app/src/components/UserCard.vue b/packages/app/src/components/UserCard.vue
index 12c9825..9878796 100644
--- a/packages/app/src/components/UserCard.vue
+++ b/packages/app/src/components/UserCard.vue
@@ -32,7 +32,8 @@
{{ maskedPhone || '完善个人资料' }}
- 资料 ›
+
+ 资料 ›
@@ -69,6 +70,7 @@ import { ref, computed, watch } from 'vue'
import type { UserProfileResponse, MembershipWithCardType } from '@mp-pilates/shared'
import { MembershipStatus } from '@mp-pilates/shared'
import { getCardTypeLabel, getMembershipTotalTimes, getMembershipUsedTimes } from '../utils/format'
+import TodayLessonsCard from './TodayLessonsCard.vue'
const props = defineProps<{
loggedIn: boolean
@@ -80,6 +82,8 @@ const props = defineProps<{
membershipsError?: boolean
memberships?: readonly MembershipWithCardType[]
loading?: boolean
+ showTodayLessons?: boolean
+ todayLessonsRefreshKey?: number
}>()
const emit = defineEmits<{
diff --git a/packages/app/src/pages/profile/index.vue b/packages/app/src/pages/profile/index.vue
index 88c6bd8..9bd5bf9 100644
--- a/packages/app/src/pages/profile/index.vue
+++ b/packages/app/src/pages/profile/index.vue
@@ -7,6 +7,7 @@