From 271d59ca51ae407efcd11eb8409694efeb03b91b Mon Sep 17 00:00:00 2001 From: jxxghp Date: Sun, 5 May 2024 11:54:20 +0800 Subject: [PATCH] Fix issues with MediaCard and SubscribeListView components --- src/components/cards/MediaCard.vue | 4 + src/views/discover/MediaDetailView.vue | 531 +++++++++++----------- src/views/subscribe/SubscribeListView.vue | 39 +- 3 files changed, 280 insertions(+), 294 deletions(-) diff --git a/src/components/cards/MediaCard.vue b/src/components/cards/MediaCard.vue index 809bf6a8..b5763b44 100644 --- a/src/components/cards/MediaCard.vue +++ b/src/components/cards/MediaCard.vue @@ -19,6 +19,8 @@ const props = defineProps({ height: String, }) +const store = useStore() + // 提示框 const $toast = useToast() @@ -288,6 +290,8 @@ async function getMediaSeasons() { // 查询订阅弹窗规则 async function queryDefaultSubscribeConfig() { + // 非管理员不显示 + if (!store.state.auth.superUser) return false try { let subscribe_config_url = '' if (props.media?.type === '电影') subscribe_config_url = 'system/setting/DefaultMovieSubscribeConfig' diff --git a/src/views/discover/MediaDetailView.vue b/src/views/discover/MediaDetailView.vue index c71f6784..3b87b49a 100644 --- a/src/views/discover/MediaDetailView.vue +++ b/src/views/discover/MediaDetailView.vue @@ -16,6 +16,8 @@ const mediaProps = defineProps({ type: String, }) +const store = useStore() + // 提示框 const $toast = useToast() @@ -51,8 +53,8 @@ function getMediaId() { return mediaDetail.value?.tmdb_id ? `tmdb:${mediaDetail.value?.tmdb_id}` : mediaDetail.value?.douban_id - ? `douban:${mediaDetail.value?.douban_id}` - : `bangumi:${mediaDetail.value?.bangumi_id}` + ? `douban:${mediaDetail.value?.douban_id}` + : `bangumi:${mediaDetail.value?.bangumi_id}` } // 调用API查询详情 @@ -64,31 +66,25 @@ async function getMediaDetail() { }, }) isRefreshed.value = true - if (!mediaDetail.value.tmdb_id && !mediaDetail.value.douban_id && !mediaDetail.value.bangumi_id) - return + if (!mediaDetail.value.tmdb_id && !mediaDetail.value.douban_id && !mediaDetail.value.bangumi_id) return // 检查存在状态 checkExists() - if (mediaDetail.value.type === '电视剧') - checkSeasonsNotExists() + if (mediaDetail.value.type === '电视剧') checkSeasonsNotExists() // 检查订阅状态 - if (mediaDetail.value.type === '电影') - checkMovieSubscribed() - else - checkSeasonsSubscribed() + if (mediaDetail.value.type === '电影') checkMovieSubscribed() + else checkSeasonsSubscribed() } } // 调用API加载季集信息 async function loadSeasonEpisodes(season: number) { - if (seasonEpisodesInfo.value[season]) - return + if (seasonEpisodesInfo.value[season]) return try { const result: TmdbEpisode[] = await api.get(`tmdb/${mediaDetail.value.tmdb_id}/${season}`) seasonEpisodesInfo.value[season] = result || [] - } - catch (error) { + } catch (error) { console.error(error) } } @@ -106,10 +102,8 @@ async function checkExists() { }, }) - if (result.success) - existsItemId.value = result.data.item.id - } - catch (error) { + if (result.success) existsItemId.value = result.data.item.id + } catch (error) { console.error(error) } } @@ -126,10 +120,8 @@ async function checkSubscribe(season = 0) { }, }) - if (result.id) - return true - } - catch (error) { + if (result.id) return true + } catch (error) { console.error(error) } @@ -138,31 +130,26 @@ async function checkSubscribe(season = 0) { // 检查所有季的缺失状态 async function checkSeasonsNotExists() { - if (mediaDetail.value.type !== '电视剧') - return + if (mediaDetail.value.type !== '电视剧') return try { const result: NotExistMediaInfo[] = await api.post('mediaserver/notexists', mediaDetail.value) if (result) { - result.forEach((item) => { + result.forEach(item => { // 0-已入库 1-部分缺失 2-全部缺失 let state = 0 - if (item.episodes.length === 0) - state = 2 - else if (item.episodes.length < item.total_episode) - state = 1 + if (item.episodes.length === 0) state = 2 + else if (item.episodes.length < item.total_episode) state = 1 seasonsNotExisted.value[item.season] = state }) } - } - catch (error) { + } catch (error) { console.error(error) } } // 检查电影订阅状态 async function checkMovieSubscribed() { - if (mediaDetail.value.type !== '电影') - return + if (mediaDetail.value.type !== '电影') return isSubscribed.value = await checkSubscribe() } @@ -173,14 +160,12 @@ const getMediaSeasons = computed(() => { // 检查所有季的订阅状态 async function checkSeasonsSubscribed() { - if (mediaDetail.value.type !== '电视剧') - return + if (mediaDetail.value.type !== '电视剧') return try { - mediaDetail.value?.season_info?.forEach(async (item) => { + mediaDetail.value?.season_info?.forEach(async item => { seasonsSubscribed.value[item.season_number ?? 0] = await checkSubscribe(item.season_number) }) - } - catch (error) { + } catch (error) { console.error(error) } } @@ -211,18 +196,11 @@ async function addSubscribe(season = 0) { if (result.success) { // 订阅成功 isSubscribed.value = true - if (season) - seasonsSubscribed.value[season] = true + if (season) seasonsSubscribed.value[season] = true } // 提示 - showSubscribeAddToast( - result.success, - mediaDetail.value?.title ?? '', - season, - result.message, - best_version, - ) + showSubscribeAddToast(result.success, mediaDetail.value?.title ?? '', season, result.message, best_version) // 显示编辑弹窗 if (result.success) { @@ -232,28 +210,20 @@ async function addSubscribe(season = 0) { subscribeEditDialog.value = true } } - } - catch (error) { + } catch (error) { console.error(error) } doneNProgress() } // 弹出添加订阅提示 -function showSubscribeAddToast(result: boolean, - title: string, - season: number, - message: string, - best_version: number) { - if (season) - title = `${title} ${formatSeason(season.toString())}` +function showSubscribeAddToast(result: boolean, title: string, season: number, message: string, best_version: number) { + if (season) title = `${title} ${formatSeason(season.toString())}` let subname = '订阅' - if (best_version > 0) - subname = '洗版订阅' + if (best_version > 0) subname = '洗版订阅' - if (!result) - $toast.error(`${title} 添加${subname}失败:${message}!`) + if (!result) $toast.error(`${title} 添加${subname}失败:${message}!`) } // 调用API取消订阅 @@ -263,26 +233,20 @@ async function removeSubscribe(season: number) { try { const mediaid = getMediaId() - const result: { [key: string]: any } = await api.delete( - `subscribe/media/${mediaid}`, - { - params: { - season, - }, + const result: { [key: string]: any } = await api.delete(`subscribe/media/${mediaid}`, { + params: { + season, }, - ) + }) if (result.success) { isSubscribed.value = false - if (season) - seasonsSubscribed.value[season] = false + if (season) seasonsSubscribed.value[season] = false $toast.success(`${mediaDetail.value?.title} 已取消订阅!`) - } - else { + } else { $toast.error(`${mediaDetail.value?.title} 取消订阅失败:${result.message}!`) } - } - catch (error) { + } catch (error) { console.error(error) } doneNProgress() @@ -290,10 +254,8 @@ async function removeSubscribe(season: number) { // 订阅按钮响应 function handleSubscribe(season = 0) { - if (isSubscribed.value) - removeSubscribe(season) - else - addSubscribe(season) + if (isSubscribed.value) removeSubscribe(season) + else addSubscribe(season) } // 从genres中获取name,使用、分隔 @@ -329,15 +291,13 @@ function getBangumiLink() { // 拼装集图片地址 function getEpisodeImage(stillPath: string) { - if (!stillPath) - return '' + if (!stillPath) return '' return `https://image.tmdb.org/t/p/w500${stillPath}` } // TMDB图片转换为w500大小 function getW500Image(url = '') { - if (!url) - return '' + if (!url) return '' return url.replace('original', 'w500') } @@ -354,45 +314,33 @@ const getProductionCompanies = computed(() => { // 计算存在状态的颜色 function getExistColor(season: number) { const state = seasonsNotExisted.value[season] - if (!state) - return 'success' + if (!state) return 'success' - if (state === 1) - return 'warning' - else if (state === 2) - return 'error' - else - return 'success' + if (state === 1) return 'warning' + else if (state === 2) return 'error' + else return 'success' } // 计算存在状态的文本 function getExistText(season: number) { const state = seasonsNotExisted.value[season] - if (!state) - return '已入库' + if (!state) return '已入库' - if (state === 1) - return '部分缺失' - else if (state === 2) - return '缺失' - else - return '已入库' + if (state === 1) return '部分缺失' + else if (state === 2) return '缺失' + else return '已入库' } // 计算订阅图标 const getSubscribeIcon = computed(() => { - if (isSubscribed.value) - return 'mdi-heart' - else - return 'mdi-heart-outline' + if (isSubscribed.value) return 'mdi-heart' + else return 'mdi-heart-outline' }) // 计算订阅按钮颜色 const getSubscribeColor = computed(() => { - if (isSubscribed.value) - return 'error' - else - return 'warning' + if (isSubscribed.value) return 'error' + else return 'warning' }) // 使用、拼装数组为字符串 @@ -418,36 +366,32 @@ function handleSearch(area: string) { async function handlePlay() { // 获取播放链接地址 try { - const result: { [key: string]: any } = await api.get( - `mediaserver/play/${existsItemId.value}`, - ) + const result: { [key: string]: any } = await api.get(`mediaserver/play/${existsItemId.value}`) if (result?.success) { // 打开链接地址 setTimeout(() => { window.open(result.data.url, '_blank') }, 100) + } else { + $toast.error(`获取播放链接失败:${result.message}!`) } - else { $toast.error(`获取播放链接失败:${result.message}!`) } - } - catch (error) { + } catch (error) { console.error(error) } } async function queryDefaultSubscribeConfig() { + // 非管理员不显示 + if (!store.state.auth.superUser) return false try { let subscribe_config_url = '' - if (mediaProps.type === '电影') - subscribe_config_url = 'system/setting/DefaultMovieSubscribeConfig' - else - subscribe_config_url = 'system/setting/DefaultTvSubscribeConfig' + if (mediaProps.type === '电影') subscribe_config_url = 'system/setting/DefaultMovieSubscribeConfig' + else subscribe_config_url = 'system/setting/DefaultTvSubscribeConfig' const result: { [key: string]: any } = await api.get(subscribe_config_url) - if (result.data?.value) - return result.data.value.show_edit_dialog - } - catch (error) { + if (result.data?.value) return result.data.value.show_edit_dialog + } catch (error) { console.log(error) } return false @@ -459,10 +403,7 @@ onBeforeMount(() => {