This commit is contained in:
jxxghp
2023-07-02 11:18:34 +08:00
parent c5bb4a115c
commit 8ee6b0900f
5 changed files with 22 additions and 40 deletions
+1 -1
View File
@@ -151,7 +151,7 @@ onMounted(checkSubscribe);
variant="elevated" variant="elevated"
size="small" size="small"
v-if="props.media?.vote_average" v-if="props.media?.vote_average"
:class="getChipColor('')" :class="getChipColor('rating')"
class="absolute right-2 top-2 bg-opacity-80 shadow-md text-white font-bold" class="absolute right-2 top-2 bg-opacity-80 shadow-md text-white font-bold"
> >
{{ props.media?.vote_average }} {{ props.media?.vote_average }}
+3 -3
View File
@@ -12,16 +12,16 @@ const props = defineProps({
const siteIcon = ref<string>(""); const siteIcon = ref<string>("");
// 查询站点图标 // 查询站点图标
const getSiteIcon = async (siteid: number) => { const getSiteIcon = async () => {
try { try {
siteIcon.value = (await api.get("site/icon/" + siteid)).data.icon; siteIcon.value = (await api.get("site/icon/" + props.site?.id)).data.icon;
} catch (error) { } catch (error) {
console.error(error); console.error(error);
} }
}; };
onMounted(() => { onMounted(() => {
getSiteIcon(props.site?.id ?? 0); getSiteIcon();
}); });
</script> </script>
+16 -36
View File
@@ -8,10 +8,10 @@ const props = defineProps({
}); });
// 根据 type 返回不同的图标 // 根据 type 返回不同的图标
const getIcon = (type: string) => { const getIcon = () => {
if (type === "电影") { if (props.media?.type === "电影") {
return "mdi-movie"; return "mdi-movie";
} else if (type === "电视剧") { } else if (props.media?.type === "电视剧") {
return "mdi-television-classic"; return "mdi-television-classic";
} else { } else {
return "mdi-help-circle"; return "mdi-help-circle";
@@ -19,23 +19,22 @@ const getIcon = (type: string) => {
}; };
// 计算百分比 // 计算百分比
const getPercentage = (total: number, lack: number) => { const getPercentage = () => {
if (total === 0) { if (props.media?.total_episode === 0) {
return 0; return 0;
} }
return Math.round(((total - lack) / total) * 100); return Math.round((((props.media?.total_episode || 0) - (props.media?.lack_episode || 0)) / (props.media?.total_episode || 1)) * 100);
}; };
</script> </script>
<template> <template>
<VCard <VCard :key="props.media?.id">
:key="props.media?.id" <template #image>
:image="props.media?.backdrop || props.media?.poster" <VImg :src="props.media?.backdrop || props.media?.poster" aspect-ratio="2/3" cover class="brightness-50" />
class="card-with-overlay" </template>
>
<VCardItem> <VCardItem>
<template #prepend> <template #prepend>
<VIcon size="1.9rem" color="white" :icon="getIcon(props.media?.type || '')" /> <VIcon size="1.9rem" color="white" :icon="getIcon()" />
</template> </template>
<VCardTitle class="text-white"> <VCardTitle class="text-white">
{{ props.media?.name }} {{ props.media?.name }}
@@ -59,32 +58,13 @@ const getPercentage = (total: number, lack: number) => {
<IconBtn icon="mdi-star" color="white" class="me-1" /> <IconBtn icon="mdi-star" color="white" class="me-1" />
<span class="text-subtitle-2 text-white me-4">{{ props.media?.vote }}</span> <span class="text-subtitle-2 text-white me-4">{{ props.media?.vote }}</span>
<IconBtn <IconBtn icon="mdi-progress-clock" color="white" class="me-1" v-if="props.media?.total_episode" />
icon="mdi-progress-clock" <span class="text-subtitle-2 text-white" v-if="props.media?.season">{{ (props.media?.total_episode || 0) -
color="white" (props.media?.lack_episode || 0) }} /
class="me-1" {{ props.media?.total_episode }}</span>
v-if="props.media?.total_episode"
/>
<span class="text-subtitle-2 text-white" v-if="props.media?.season"
>{{ (props.media?.total_episode || 0) - (props.media?.lack_episode || 0) }} /
{{ props.media?.total_episode }}</span
>
</div> </div>
</VCardText> </VCardText>
<VProgressLinear <VProgressLinear v-if="getPercentage() > 0" :model-value="getPercentage()" bg-color="success" color="success" />
v-if="props.media?.lack_episode || 0 > 0"
:model-value="
getPercentage(props.media?.total_episode || 0, props.media?.lack_episode || 0)
"
bg-color="success"
color="success"
/>
</VCard> </VCard>
</template> </template>
<style lang="scss">
.card-with-overlay img {
@apply brightness-50;
}
</style>
+1
View File
@@ -28,5 +28,6 @@ onMounted(fetchData);
<style type="scss"> <style type="scss">
.grid-site-card { .grid-site-card {
grid-template-columns: repeat(auto-fill, minmax(20rem, 1fr)); grid-template-columns: repeat(auto-fill, minmax(20rem, 1fr));
padding-block-end: 1rem;
} }
</style> </style>
@@ -51,5 +51,6 @@ const filteredDataList = computed(() => {
<style type="scss"> <style type="scss">
.grid-subscribe-card { .grid-subscribe-card {
grid-template-columns: repeat(auto-fill, minmax(20rem, 1fr)); grid-template-columns: repeat(auto-fill, minmax(20rem, 1fr));
padding-block-end: 1rem;
} }
</style> </style>