From fce10b6dcafd80d45190cebb58f752f79d6865fb Mon Sep 17 00:00:00 2001 From: jxxghp Date: Sat, 27 Apr 2024 18:16:05 +0800 Subject: [PATCH] media card icon --- src/assets/images/logos/bangumi.png | Bin 0 -> 18274 bytes src/assets/images/logos/douban-black.png | Bin 0 -> 1059 bytes src/components/cards/MediaCard.vue | 240 ++++++++--------------- 3 files changed, 86 insertions(+), 154 deletions(-) create mode 100644 src/assets/images/logos/bangumi.png create mode 100644 src/assets/images/logos/douban-black.png diff --git a/src/assets/images/logos/bangumi.png b/src/assets/images/logos/bangumi.png new file mode 100644 index 0000000000000000000000000000000000000000..d04574fcdbaa9d852b11664b3ca638a683a91bae GIT binary patch literal 18274 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 Nf~*Rn_>t+${{!r0{BHmN literal 0 HcmV?d00001 diff --git a/src/assets/images/logos/douban-black.png b/src/assets/images/logos/douban-black.png new file mode 100644 index 0000000000000000000000000000000000000000..084c37ce63e3deceb30f87df7b75d2732c0e91d2 GIT binary patch literal 1059 zcmV+;1l;?HP)GYdQdb6L4qd{58fo;#e-l(J;a!oyBpnALXveeD-B;SWid0Eot>Ud3W^zK`tem) zb#+xW5KLJB9cVvw5KB{}JLCcMrOdqwhk4KJ23$6{3}6bt9DoG?%K(;A;$;Be0K5Zm z7r;aS#z6450eArFdx-A?=nSxs|7ccpssgA1*l82jh`}!AYXDt-n#hWkHx0K%Cr@yi zEAA-_+kBtaTF45UmmTD@o$QI{4&NswcIzsqgxP5DdJvcFh0JfUJ@DHLbNpEgSot)y z;RSrN8u+Bos61U|U9Ey1(ER%epyY_x1xP;(_TMj_6%Fd6?+p^bb~NCx02lx;4q!AP z9s_U!z(oLSYEC~KWdMU(fTai>i=4<69f^n|wg4rrm@Dd0mJo!a5?26YqZa@i;ABS= z;v9g(G^G_60?19gN-iYKt6cqBh$o6IfS-HY0I-=5Z>TwfTy{$W*p+z+;4FY+^hU>9 zl@Ou)hG#!5xhP`0a8N7r4YSH+$h zZnp+XEoh+9ZVi|{FwX&tO@z%w24r7VaF~h!(hFs10%I{l=wX#rIrl>P97u{XLIY0D z0ecdg%D@?)$t^bn*ssqJO)GH$WGpmG)%S=RjioMr&joNkq|X3=C$3{5nGu=1^qDdz zvmrmy)Rr0Bukd}1dG~3ywMqFy#y{(7u6oh}cuEu2q%@#cApqVgfro_2=&_w>z*Yv# zL|goJlVcp@^9H|fv7KytOSQc&7Q&V=!-{Gx?SUZGzEP_>B0^%xG8DH(+80gEmB=1g z=Rs6p9JIh>M4Hi4W?F0HO@ftznk426_fkO|gh6$omIRP>p{umrlROi~nUF)B(Dwfr z-;D>7WXwp8VLaQVh;^Zgi@K2Y>0#%=Zf&|F;;8KRx=`6qfG8b}{h#OIlS{ZRbchaM zC5`~SypxJj+%3{he>mVmNL|QN0+=+mL0Mj??U(ZUXW@z)uJ6u1y5M*u7QW$^Cq(1D zcE#k8t$AIO0?3zpA(wpZ0$%6Sh9ff?y!6YRyvnp2wwi*;?Ciq!s<+N-ux^FfSBU97 zU^;chGXi{IHYk5g@-}du@k*Ioam;1G#@jp=HXjOJYC<;Z;6XQ-GWSbY8K)L&IwYC6 d$E8pl{{V8Mft+7+6TJWc002ovPDHLkV1oRK)Cd3o literal 0 HcmV?d00001 diff --git a/src/components/cards/MediaCard.vue b/src/components/cards/MediaCard.vue index 663eefdc..edf082b6 100644 --- a/src/components/cards/MediaCard.vue +++ b/src/components/cards/MediaCard.vue @@ -8,6 +8,9 @@ import { doneNProgress, startNProgress } from '@/api/nprogress' import type { MediaInfo, NotExistMediaInfo, Subscribe, TmdbSeason } from '@/api/types' import router from '@/router' import noImage from '@images/no-image.jpeg' +import tmdbImage from '@images/logos/tmdb.png' +import doubanImage from '@images/logos/douban-black.png' +import bangumiImage from '@images/logos/bangumi.png' // 输入参数 const props = defineProps({ @@ -52,31 +55,35 @@ const seasonInfos = ref([]) // 选中的订阅季 const seasonsSelected = ref([]) +// 来源角标字典 +const sourceIconDict = { + themoviedb: tmdbImage, + douban: doubanImage, + bangumi: bangumiImage, +} + // 获得mediaid function getMediaId() { return props.media?.tmdb_id ? `tmdb:${props.media?.tmdb_id}` : props.media?.douban_id - ? `douban:${props.media?.douban_id}` - : `bangumi:${props.media?.bangumi_id}` + ? `douban:${props.media?.douban_id}` + : `bangumi:${props.media?.bangumi_id}` } // 订阅弹窗选择的多季 function subscribeSeasons() { subscribeSeasonDialog.value = false - seasonsSelected.value.forEach((season) => { + seasonsSelected.value.forEach(season => { addSubscribe(season.season_number) }) } // 角标颜色 function getChipColor(type: string) { - if (type === '电影') - return 'border-blue-500 bg-blue-600' - else if (type === '电视剧') - return ' bg-indigo-500 border-indigo-600' - else - return 'border-purple-600 bg-purple-600' + if (type === '电影') return 'border-blue-500 bg-blue-600' + else if (type === '电视剧') return ' bg-indigo-500 border-indigo-600' + else return 'border-purple-600 bg-purple-600' } // 添加订阅处理 @@ -93,26 +100,22 @@ async function handleAddSubscribe() { // 检查各季的缺失状态 await checkSeasonsNotExists() - if (!tmdbFlag.value) - return + if (!tmdbFlag.value) return if (seasonInfos.value.length === 1) { // 添加订阅 addSubscribe(1) - } - else { + } else { // 弹出季选择列表,支持多选 seasonsSelected.value = [] subscribeSeasonDialog.value = true } - } - else if (props.media?.type === '电视剧') { + } else if (props.media?.type === '电视剧') { // 豆瓣电视剧,只会有一季 const season = props.media?.season ?? 1 // 添加订阅 addSubscribe(season) - } - else { + } else { // 电影 addSubscribe() } @@ -147,13 +150,7 @@ async function addSubscribe(season = 0) { } // 提示 - showSubscribeAddToast( - result.success, - props.media?.title ?? '', - season, - result.message, - best_version, - ) + showSubscribeAddToast(result.success, props.media?.title ?? '', season, result.message, best_version) // 弹出订阅编辑弹窗 if (result.success && seasonsSelected.value.length <= 1) { @@ -163,8 +160,7 @@ async function addSubscribe(season = 0) { subscribeEditDialog.value = true } } - } - catch (error) { + } catch (error) { console.error(error) } finally { doneNProgress() @@ -172,22 +168,14 @@ async function addSubscribe(season = 0) { } // 弹出添加订阅提示 -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 && seasonsSelected.value.length > 1) - $toast.success(`${title} 添加${subname}成功!`) - else if (!result) - $toast.error(`${title} 添加${subname}失败:${message}!`) + if (result && seasonsSelected.value.length > 1) $toast.success(`${title} 添加${subname}成功!`) + else if (!result) $toast.error(`${title} 添加${subname}失败:${message}!`) } // 调用API取消订阅 @@ -197,24 +185,19 @@ async function removeSubscribe() { try { const mediaid = getMediaId() - const result: { [key: string]: any } = await api.delete( - `subscribe/media/${mediaid}`, - { - params: { - season: props.media?.season, - }, + const result: { [key: string]: any } = await api.delete(`subscribe/media/${mediaid}`, { + params: { + season: props.media?.season, }, - ) + }) if (result.success) { isSubscribed.value = false $toast.success(`${props.media?.title} 已取消订阅!`) - } - else { + } else { $toast.error(`${props.media?.title} 取消订阅失败:${result.message}!`) } - } - catch (error) { + } catch (error) { console.error(error) } doneNProgress() @@ -224,10 +207,8 @@ async function removeSubscribe() { async function handleCheckSubscribe() { try { const result = await checkSubscribe(props.media?.season) - if (result) - isSubscribed.value = true - } - catch (error) { + if (result) isSubscribed.value = true + } catch (error) { console.error(error) } } @@ -245,10 +226,8 @@ async function handleCheckExists() { }, }) - if (result.success) - isExists.value = true - } - catch (error) { + if (result.success) isExists.value = true + } catch (error) { console.error(error) } } @@ -266,8 +245,7 @@ async function checkSubscribe(season = 0) { }) return result.id || null - } - catch (error) { + } catch (error) { console.error(error) } @@ -281,19 +259,16 @@ async function checkSeasonsNotExists() { try { const result: NotExistMediaInfo[] = await api.post('mediaserver/notexists', props.media) 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) { $toast.error(`${props.media?.title}无法识别TMDB媒体信息!`) tmdbFlag.value = false } @@ -306,8 +281,7 @@ async function checkSeasonsNotExists() { async function getMediaSeasons() { try { seasonInfos.value = await api.get(`tmdb/seasons/${props.media?.tmdb_id}`) - } - catch (error) { + } catch (error) { console.error(error) } } @@ -316,17 +290,13 @@ async function getMediaSeasons() { async function queryDefaultSubscribeConfig() { try { let subscribe_config_url = '' - if (props.media?.type === '电影') - subscribe_config_url = 'system/setting/DefaultMovieSubscribeConfig' - else - subscribe_config_url = 'system/setting/DefaultTvSubscribeConfig' + if (props.media?.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 @@ -334,38 +304,28 @@ async function queryDefaultSubscribeConfig() { // 爱心订阅按钮响应 function handleSubscribe() { - if (isSubscribed.value) - removeSubscribe() - else - handleAddSubscribe() + if (isSubscribed.value) removeSubscribe() + else handleAddSubscribe() } // 计算存在状态的颜色 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 '已入库' } // 打开详情页 @@ -402,8 +362,7 @@ onBeforeMount(() => { // 计算图片地址 const getImgUrl: Ref = computed(() => { - if (imageLoadError.value) - return noImage + if (imageLoadError.value) return noImage const url = props.media?.poster_path?.replace('original', 'w500') ?? noImage // 如果地址中包含douban则使用中转代理 if (url.includes('doubanio.com')) @@ -414,22 +373,19 @@ const getImgUrl: Ref = computed(() => { // 拼装季图片地址 function getSeasonPoster(posterPath: string) { - if (!posterPath) - return '' + if (!posterPath) return '' return `https://image.tmdb.org/t/p/w500${posterPath}` } // 将yyyy-mm-dd转换为yyyy年mm月dd日 function formatAirDate(airDate: string) { - if (!airDate) - return '' + if (!airDate) return '' const date = new Date(airDate.replaceAll(/-/g, '/')) return `${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}日` } // 从yyyy-mm-dd中提取年份 function getYear(airDate: string) { - if (!airDate) - return '' + if (!airDate) return '' const date = new Date(airDate.replaceAll(/-/g, '/')) return date.getFullYear() } @@ -499,43 +455,30 @@ function getYear(airDate: string) { {{ props.media?.overview }}

- - + +
+ + + - + - - 订阅 - {{ props.media?.title }} - + 订阅 - {{ props.media?.title }} - - + + - - 第 {{ item.season_number }} 季 - + 第 {{ item.season_number }} 季 - + {{ item.vote_average }} {{ getYear(item.air_date || '') }} • {{ item.episode_count }} 集 @@ -570,12 +506,7 @@ function getYear(airDate: string) { 《{{ media?.title }}》第 {{ item.season_number }} 季于 {{ formatAirDate(item.air_date || '') }} 首播。 - + {{ getExistText(item.season_number || 0) }} @@ -588,11 +519,7 @@ function getYear(airDate: string) {
- + {{ seasonsSelected.length === 0 ? '请选择订阅季' : '提交订阅' }}
@@ -605,7 +532,12 @@ function getYear(airDate: string) { :subid="subscribeId" @close="subscribeEditDialog = false" @save="subscribeEditDialog = false" - @remove="() => { subscribeEditDialog = false; handleCheckSubscribe(); }" + @remove=" + () => { + subscribeEditDialog = false + handleCheckSubscribe() + } + " />