From 4d4c9516c69bf5276c0ea89a2989e8aa02beb132 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Mon, 27 Jan 2025 21:08:52 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=E5=8F=91=E7=8E=B0=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=EF=BC=8C=E6=B7=BB=E5=8A=A0=E8=B1=86=E7=93=A3=E5=92=8C?= =?UTF-8?q?TheMovieDb=E8=BF=87=E6=BB=A4=E9=80=89=E9=A1=B9=EF=BC=8C?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AA=92=E4=BD=93=E5=8D=A1=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/cards/MediaCard.vue | 2 +- src/views/discover/BangumiView.vue | 73 ++++++++- src/views/discover/DoubanView.vue | 181 ++++++++++++++++++++++- src/views/discover/MediaCardListView.vue | 10 +- src/views/discover/TheMovieDbView.vue | 149 +++++++++++++++++-- 5 files changed, 392 insertions(+), 23 deletions(-) diff --git a/src/components/cards/MediaCard.vue b/src/components/cards/MediaCard.vue index ca1f3cfb..32121da4 100644 --- a/src/components/cards/MediaCard.vue +++ b/src/components/cards/MediaCard.vue @@ -535,7 +535,7 @@ function onRemoveSubscribe() { density="compact" class="absolute bottom-1 right-1" tile - v-if="!hover.isHovering && isImageLoaded && props.media?.source" + v-if="!hover.isHovering && isImageLoaded && props.media?.source && !imageLoadError" > diff --git a/src/views/discover/BangumiView.vue b/src/views/discover/BangumiView.vue index 3f94f77f..2221c43e 100644 --- a/src/views/discover/BangumiView.vue +++ b/src/views/discover/BangumiView.vue @@ -1,20 +1,83 @@ diff --git a/src/views/discover/DoubanView.vue b/src/views/discover/DoubanView.vue index 487f0f1b..2999017a 100644 --- a/src/views/discover/DoubanView.vue +++ b/src/views/discover/DoubanView.vue @@ -5,14 +5,189 @@ import MediaCardListView from '@/views/discover/MediaCardListView.vue' const type = ref('movies') // 过滤参数 -const filterParams = ref({ - 'sort': 'R', +const filterParams = reactive({ + 'sort': 'U', 'tags': '', }) + +// 豆瓣风格类型 +const doubanCategory = ref('') + +// 地区 +const doubanZone = ref('') + +// 年代 +const doubanYear = ref('') + +// 豆瓣风格字典 +const categoryDict = { + '喜剧': '喜剧', + '爱情': '爱情', + '动作': '动作', + '科幻': '科幻', + '动画': '动画', + '悬疑': '悬疑', + '犯罪': '犯罪', + '惊悚': '惊悚', + '冒险': '冒险', + '音乐': '音乐', + '历史': '历史', + '奇幻': '奇幻', + '恐怖': '恐怖', + '战争': '战争', + '传记': '传记', + '歌舞': '歌舞', + '武侠': '武侠', + '情色': '情色', + '灾难': '灾难', + '西部': '西部', + '纪录片': '纪录片', + '短片': '短片', +} + +// 地区字典 +const zoneDict = { + '华语': '华语', + '欧美': '欧美', + '韩国': '韩国', + '日本': '日本', + '中国大陆': '中国大陆', + '美国': '美国', + '中国香港': '中国香港', + '中国台湾': '中国台湾', + '英国': '英国', + '法国': '法国', + '德国': '德国', + '意大利': '意大利', + '西班牙': '西班牙', + '印度': '印度', + '泰国': '泰国', + '俄罗斯': '俄罗斯', + '加拿大': '加拿大', + '澳大利亚': '澳大利亚', + '爱尔兰': '爱尔兰', + '瑞典': '瑞典', + '巴西': '巴西', + '丹麦': '丹麦', +} + +// 年代字典 +const yearDict = { + '2020年代': '2020年代', + '2010年代': '2010年代', + '2000年代': '2000年代', + '90年代': '90年代', + '80年代': '80年代', + '70年代': '70年代', + '60年代': '60年代', +} + +// 豆瓣过滤参数 +const doubanSortDict = { + 'U': '综合排序', + 'R': '首播时间', + 'T': '近期热度', + 'S': '高分优先', +} + +// 风格、年代、地区变化时,以,分隔拼接到tags参数 +watch([doubanCategory, doubanZone, doubanYear], () => { + filterParams.tags = [doubanCategory.value, doubanZone.value, doubanYear.value].filter(Boolean).join(',') +}) + +// 当前Key +const currentKey = ref(0) + +// 类型和过滤参数变化后重新刷新列表 +watch([type, filterParams], () => { + if (!type.value) { + type.value = 'movies' + } + currentKey.value++ +}) diff --git a/src/views/discover/MediaCardListView.vue b/src/views/discover/MediaCardListView.vue index a686105e..7c24d179 100644 --- a/src/views/discover/MediaCardListView.vue +++ b/src/views/discover/MediaCardListView.vue @@ -27,6 +27,7 @@ const isRefreshed = ref(false) // 数据列表 const dataList = ref([]) const currData = ref([]) + // 拼装参数 function getParams() { let params = { @@ -77,7 +78,6 @@ async function fetchData({ done }: { done: any }) { } else { // 加载一次 // 设置加载中 - loading.value = true // 请求API currData.value = await api.get(props.apipath, { @@ -115,7 +115,11 @@ async function fetchData({ done }: { done: any }) {
- + diff --git a/src/views/discover/TheMovieDbView.vue b/src/views/discover/TheMovieDbView.vue index cfe14677..30b0334d 100644 --- a/src/views/discover/TheMovieDbView.vue +++ b/src/views/discover/TheMovieDbView.vue @@ -5,20 +5,147 @@ import MediaCardListView from '@/views/discover/MediaCardListView.vue' const type = ref('movies') // 过滤参数 -const filterParams = ref({ - 'sort_by': 'popularity.desc', - 'with_genres': '', - 'with_original_language': '', - 'with_keywords': '', - 'with_watch_providers': '', - 'vote_average.gte': 0, - 'vote_count.gte': 0, - 'release_date.gte': '', - }) +const filterParams = reactive({ + sort_by: 'popularity.desc', + with_genres: '', + with_original_language: '', + with_keywords: '', + with_watch_providers: '', + vote_average: 0, + vote_count: 0, + release_date: '', +}) + +// TMDB排序字典 +const tmdbSortDict = { + 'popularity.desc': '热度降序', + 'popularity.asc': '热度升序', + 'release_date.desc': '上映日期降序', + 'release_date.asc': '上映日期升序', + 'vote_average.desc': '评分降序', + 'vote_average.asc': '评分升序', +} + +// TMDB风格字典 +const tmdbGenreDict = { + '28': '动作', + '12': '冒险', + '16': '动画', + '35': '喜剧', + '80': '犯罪', + '99': '纪录片', + '18': '剧情', + '10751': '家庭', + '14': '奇幻', + '36': '历史', + '27': '恐怖', + '10402': '音乐', + '9648': '悬疑', + '10749': '爱情', + '878': '科幻', + '10770': '电视电影', + '53': '惊悚', + '10752': '战争', + '37': '西部', +} + +// TMDB原始语言字典(主要语言) +const tmdbLanguageDict = { + 'zh': '中文', + 'en': '英语', + 'ja': '日语', + 'ko': '韩语', + 'fr': '法语', + 'de': '德语', + 'es': '西班牙语', + 'it': '意大利语', + 'ru': '俄语', + 'pt': '葡萄牙语', + 'ar': '阿拉伯语', + 'hi': '印地语', + 'th': '泰语', +} + +// 当前Key +const currentKey = ref(0) + +// 类型和过滤参数变化后重新刷新列表 +watch([type, filterParams], () => { + if (!type.value) { + type.value = 'movies' + } + if (!filterParams.sort_by) { + filterParams.sort_by = 'popularity.desc' + } + currentKey.value++ +})