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()
+ }
+ "
/>