feat(frontend): Align admin and user API integration

This commit is contained in:
2026-04-18 18:21:31 +08:00
parent 3adb088eca
commit 2247d235ec
74 changed files with 8626 additions and 647 deletions
@@ -1,31 +1,31 @@
<template>
<div class="favorite-page">
<van-nav-bar title="我的收藏" fixed placeholder left-arrow @click-left="router.back()" />
<div class="favorite-shell">
<section class="favorite-header">
<h2>我的收藏</h2>
<p>整理日常浏览中想反复观看的内容与专题合集。</p>
</section>
<van-pull-refresh v-model="refreshing" @refresh="onRefresh">
<van-list
v-model:loading="loading"
:finished="finished"
finished-text="没有更多了"
@load="loadMore"
>
<van-cell-group v-if="favorites.length" inset>
<van-cell
v-for="fav in favorites"
:key="fav.id"
:title="fav.name"
:label="`${fav.videoCount}个视频`"
is-link
@click="goToFavorite(fav.id)"
>
<template #icon>
<van-icon name="star" class="fav-icon" />
</template>
</van-cell>
</van-cell-group>
<van-empty v-else description="暂无收藏夹" />
</van-list>
</van-pull-refresh>
<van-pull-refresh v-model="refreshing" @refresh="onRefresh">
<van-list v-model:loading="loading" :finished="finished" finished-text="没有更多了" @load="loadMore">
<van-cell-group v-if="favorites.length" inset>
<van-cell
v-for="fav in favorites"
:key="fav.id"
:title="fav.name"
:label="`${fav.videoCount}个视频`"
is-link
@click="goToFavorite(fav.id)"
>
<template #icon>
<van-icon name="star" class="fav-icon" />
</template>
</van-cell>
</van-cell-group>
<van-empty v-else description="暂无收藏夹" />
</van-list>
</van-pull-refresh>
</div>
</div>
</template>
@@ -51,7 +51,7 @@ const loadFavorites = async (isRefresh = false) => {
loading.value = true
try {
const data = await favoriteApi.getList()
const data = await favoriteApi.getFavoriteList()
favorites.value = data
finished.value = true
} catch (error) {
@@ -71,7 +71,7 @@ const onRefresh = () => {
}
const goToFavorite = (id: number) => {
router.push(`/favorite/${id}`)
router.push(`/my/favorites/${id}`)
}
onMounted(() => {
@@ -82,13 +82,44 @@ onMounted(() => {
<style scoped lang="scss">
.favorite-page {
min-height: 100vh;
background: #f5f5f5;
background: #f6f7fb;
padding-bottom: 60px;
}
.fav-icon {
color: #f7ba2a;
margin-right: 8px;
font-size: 20px;
.favorite-shell {
max-width: 980px;
margin: 0 auto;
padding: 20px 12px 28px;
}
.favorite-header {
padding: 24px 26px;
border-radius: 28px;
background: linear-gradient(135deg, #fb7185, #8b5cf6);
color: #fff;
margin-bottom: 18px;
h2 {
margin: 0 0 8px;
font-size: 28px;
}
p {
margin: 0;
color: rgba(255, 255, 255, 0.82);
}
}
.favorite-shell :deep(.van-cell-group) {
margin: 0;
border-radius: 24px;
overflow: hidden;
box-shadow: 0 18px 42px rgba(15, 23, 42, 0.08);
}
.fav-icon {
color: #f7ba2a;
margin-right: 8px;
font-size: 20px;
}
</style>