diff --git a/frontend/src/views/public/mine/Favorites.vue b/frontend/src/views/public/mine/Favorites.vue index cf0eb94..1ef44c1 100644 --- a/frontend/src/views/public/mine/Favorites.vue +++ b/frontend/src/views/public/mine/Favorites.vue @@ -17,27 +17,24 @@
- +
-

{{ item.work.title }}

-
- - {{ item.work.creator?.nickname?.charAt(0) }} - - {{ item.work.creator?.nickname }} +

{{ item.title }}

+
+ {{ formatFavoriteTime(item.favoriteTime) }}
- {{ item.work.likeCount || 0 }} - {{ item.work.viewCount || 0 }} + {{ item.likeCount ?? 0 }} + {{ item.viewCount ?? 0 }}
@@ -61,12 +58,30 @@ import { message } from 'ant-design-vue' import { PictureOutlined, HeartOutlined, EyeOutlined } from '@ant-design/icons-vue' import { publicInteractionApi } from '@/api/public' -const list = ref([]) +/** 与后端 /public/mine/favorites 返回结构一致(扁平字段,无嵌套 work) */ +interface FavoriteListItem { + favoriteId: number + favoriteTime?: string + workId: number + title: string + coverUrl?: string | null + likeCount?: number + viewCount?: number +} + +const list = ref([]) const loading = ref(true) const page = ref(1) const pageSize = 12 const total = ref(0) +/** 收藏时间展示 */ +const formatFavoriteTime = (iso: string) => { + const d = new Date(iso) + if (Number.isNaN(d.getTime())) return '' + return `收藏于 ${d.toLocaleString('zh-CN', { month: 'numeric', day: 'numeric', hour: '2-digit', minute: '2-digit' })}` +} + const fetchList = async () => { loading.value = true try { @@ -123,9 +138,8 @@ $primary: #6366f1; .card-body { padding: 10px 12px; h3 { font-size: 13px; font-weight: 600; color: #1e1b4b; margin: 0 0 6px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .card-author { - display: flex; align-items: center; gap: 6px; margin-bottom: 6px; - span { font-size: 11px; color: #6b7280; } + .card-meta { + font-size: 11px; color: #9ca3af; margin-bottom: 6px; } .card-stats { display: flex; gap: 12px;