mirror of
https://github.com/jxxghp/MoviePilot-Frontend.git
synced 2026-09-05 23:56:42 +08:00
fix
This commit is contained in:
@@ -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 }}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user