This commit is contained in:
jxxghp
2023-06-30 10:17:17 +08:00
parent b654aaa9b1
commit 0517a580ad
3 changed files with 48 additions and 13 deletions
+6 -2
View File
@@ -6,6 +6,9 @@ const props = defineProps({
media: Object as PropType<MediaInfo> media: Object as PropType<MediaInfo>
}); });
// 图片加载状态
const isImageLoaded = ref(false);
const getChipColor = (type: string) => { const getChipColor = (type: string) => {
if (type === "电影") { if (type === "电影") {
return "border-blue-500 bg-blue-600"; return "border-blue-500 bg-blue-600";
@@ -23,8 +26,8 @@ const getChipColor = (type: string) => {
<template #default="hover" > <template #default="hover" >
<VCard <VCard
v-bind="hover.props" v-bind="hover.props"
class="outline-none ring-1 transition duration-300 shadow ring-gray-500" class="outline-none shadow ring-gray-500"
:class="hover.isHovering ? 'scale-105 shadow-lg' : ''" :class="{ 'scale-105 shadow-lg': hover.isHovering, 'ring-1 transition duration-300 ': isImageLoaded }"
> >
<VImg <VImg
aspect-ratio="3/2" aspect-ratio="3/2"
@@ -32,6 +35,7 @@ const getChipColor = (type: string) => {
class="h-full w-full object-cover" class="h-full w-full object-cover"
:class="hover.isHovering ? 'on-hover' : ''" :class="hover.isHovering ? 'on-hover' : ''"
cover cover
@load="isImageLoaded = true"
> >
<template #placeholder> <template #placeholder>
<div class="relative animate-pulse bg-gray-300 w-full"><div class="w-full" style="padding-bottom: 150%;"></div></div> <div class="relative animate-pulse bg-gray-300 w-full"><div class="w-full" style="padding-bottom: 150%;"></div></div>
+33 -3
View File
@@ -3,15 +3,45 @@ import MediaCardListView from '@/views/discover/MediaCardListView.vue';
// 输入参数 // 输入参数
const props = defineProps({ const props = defineProps({
type: Array as PropType<string[]>, type: Array as PropType<string[]> | PropType<string>,
}); });
console.log(props.type); const titles: { [key: string]: any } = {
tmdb: {
trending: '流行趋势',
movies: '热门电影',
tvs: '热门电视剧',
},
douban: {
movies: '最新电影',
tvs: '最新电视剧',
tv_weekly_chinese: '国产剧集榜',
tv_weekly_global: '全球剧集榜',
},
};
const getApiPath = (types: string[] | string) => {
if (Array.isArray(types)) {
return types.join('/')
} else {
return types
}
};
const getTitle = (types: string[] | string) => {
if (Array.isArray(types)) {
return ['发现', titles[types[0]][types[1]]]
} else {
return ["发现"]
}
};
</script> </script>
<template> <template>
<div> <div>
<MediaCardListView :apipath="props.type?.join('/')"/> <VBreadcrumbs :items="getTitle(props.type||'')"></VBreadcrumbs>
<MediaCardListView :apipath="getApiPath(props.type||'')"/>
</div> </div>
</template> </template>
+9 -8
View File
@@ -10,7 +10,7 @@ import MediaCardSlideView from "@/views/discover/MediaCardSlideView.vue";
<VIcon icon="mdi-arrow-right-circle-outline" class="ms-1" /> <VIcon icon="mdi-arrow-right-circle-outline" class="ms-1" />
</RouterLink> </RouterLink>
</div> </div>
<MediaCardSlideView apipath="tmdb/trending" /> <MediaCardSlideView apipath="tmdb/trending" class="mb-3" />
<div class="slider-header"> <div class="slider-header">
<RouterLink to="/browse/tmdb/movies" class="slider-title"> <RouterLink to="/browse/tmdb/movies" class="slider-title">
@@ -18,7 +18,7 @@ import MediaCardSlideView from "@/views/discover/MediaCardSlideView.vue";
<VIcon icon="mdi-arrow-right-circle-outline" class="ms-1" /> <VIcon icon="mdi-arrow-right-circle-outline" class="ms-1" />
</RouterLink> </RouterLink>
</div> </div>
<MediaCardSlideView apipath="tmdb/movies" /> <MediaCardSlideView apipath="tmdb/movies" class="mb-3" />
<div class="slider-header"> <div class="slider-header">
<RouterLink to="/browse/tmdb/tvs" class="slider-title"> <RouterLink to="/browse/tmdb/tvs" class="slider-title">
@@ -26,7 +26,7 @@ import MediaCardSlideView from "@/views/discover/MediaCardSlideView.vue";
<VIcon icon="mdi-arrow-right-circle-outline" class="ms-1" /> <VIcon icon="mdi-arrow-right-circle-outline" class="ms-1" />
</RouterLink> </RouterLink>
</div> </div>
<MediaCardSlideView apipath="tmdb/tvs" /> <MediaCardSlideView apipath="tmdb/tvs" class="mb-3" />
<div class="slider-header"> <div class="slider-header">
<RouterLink to="/browse/douban/movies" class="slider-title"> <RouterLink to="/browse/douban/movies" class="slider-title">
@@ -34,7 +34,7 @@ import MediaCardSlideView from "@/views/discover/MediaCardSlideView.vue";
<VIcon icon="mdi-arrow-right-circle-outline" class="ms-1" /> <VIcon icon="mdi-arrow-right-circle-outline" class="ms-1" />
</RouterLink> </RouterLink>
</div> </div>
<MediaCardSlideView apipath="douban/movies" /> <MediaCardSlideView apipath="douban/movies" class="mb-3" />
<div class="slider-header"> <div class="slider-header">
<RouterLink to="/browse/douban/tvs" class="slider-title"> <RouterLink to="/browse/douban/tvs" class="slider-title">
@@ -42,7 +42,7 @@ import MediaCardSlideView from "@/views/discover/MediaCardSlideView.vue";
<VIcon icon="mdi-arrow-right-circle-outline" class="ms-1" /> <VIcon icon="mdi-arrow-right-circle-outline" class="ms-1" />
</RouterLink> </RouterLink>
</div> </div>
<MediaCardSlideView apipath="douban/tvs" /> <MediaCardSlideView apipath="douban/tvs" class="mb-3" />
<div class="slider-header"> <div class="slider-header">
<RouterLink to="/browse/douban/tv_weekly_chinese" class="slider-title"> <RouterLink to="/browse/douban/tv_weekly_chinese" class="slider-title">
@@ -50,7 +50,7 @@ import MediaCardSlideView from "@/views/discover/MediaCardSlideView.vue";
<VIcon icon="mdi-arrow-right-circle-outline" class="ms-1" /> <VIcon icon="mdi-arrow-right-circle-outline" class="ms-1" />
</RouterLink> </RouterLink>
</div> </div>
<MediaCardSlideView apipath="douban/tv_weekly_chinese" /> <MediaCardSlideView apipath="douban/tv_weekly_chinese" class="mb-3" />
<div class="slider-header"> <div class="slider-header">
<RouterLink to="/browse/douban/tv_weekly_global" class="slider-title"> <RouterLink to="/browse/douban/tv_weekly_global" class="slider-title">
@@ -58,7 +58,7 @@ import MediaCardSlideView from "@/views/discover/MediaCardSlideView.vue";
<VIcon icon="mdi-arrow-right-circle-outline" class="ms-1" /> <VIcon icon="mdi-arrow-right-circle-outline" class="ms-1" />
</RouterLink> </RouterLink>
</div> </div>
<MediaCardSlideView apipath="douban/tv_weekly_global" /> <MediaCardSlideView apipath="douban/tv_weekly_global" class="mb-3" />
</div> </div>
</template> </template>
@@ -66,7 +66,8 @@ import MediaCardSlideView from "@/views/discover/MediaCardSlideView.vue";
.slider-header { .slider-header {
position: relative; position: relative;
display: flex; display: flex;
margin-block: 1.5rem 1rem;
@apply mb-3;
} }
.slider-title { .slider-title {