diff --git a/src/api/types.ts b/src/api/types.ts index 2f4e7d7a..93b33605 100644 --- a/src/api/types.ts +++ b/src/api/types.ts @@ -41,6 +41,8 @@ export interface Subscribe { last_update: string; // 订阅用户 username: string; + // 订阅站点 + sites: number[], } // 历史记录 diff --git a/src/components/cards/SubscribeCard.vue b/src/components/cards/SubscribeCard.vue index 3cf8666b..deb7ab81 100644 --- a/src/components/cards/SubscribeCard.vue +++ b/src/components/cards/SubscribeCard.vue @@ -3,7 +3,7 @@ import { calculateTimeDifference } from "@/@core/utils"; import { formatSeason } from "@/@core/utils/formatters"; import { numberValidator } from "@/@validators"; import api from "@/api"; -import { Subscribe } from "@/api/types"; +import { Site, Subscribe } from "@/api/types"; import { useToast } from "vue-toast-notification"; // 输入参数 @@ -23,6 +23,12 @@ const imageLoaded = ref(false); // 订阅弹窗 const subscribeInfoDialog = ref(false); +// 站点数据列表 +const siteList = ref([]); + +// 站点选择下载框 +const selectSitesOptions = ref<{ [key: number]: string }[]>([]); + // 上一次更新时间 const lastUpdateText = ref( `${ @@ -115,6 +121,38 @@ const updateSubscribeInfo = async () => { } }; +// 获取站点列表数据 +const loadSites = async () => { + try { + const data: Site[] = await api.get("site"); + // 过滤站点,只有启用的站点才显示 + siteList.value = data.filter((item) => item.is_active); + } catch (error) { + console.error(error); + } +}; + +// 获取站点列表选择框数据 +const getSiteList = async () => { + // 加载订阅站点列表 + if (!siteList.value.length) { + await loadSites(); + } + const maps = siteList.value.map((item) => { + return { + title: item.name, + value: item.id, + }; + }); + selectSitesOptions.value = maps.flat(); +}; + +// 编辑订阅响应 +const editSubscribeDialog = async () => { + await getSiteList(); + subscribeInfoDialog.value = true; +}; + // 弹出菜单 const dropdownItems = ref([ { @@ -122,9 +160,7 @@ const dropdownItems = ref([ value: 1, props: { prependIcon: "mdi-file-edit-outline", - click: () => { - subscribeInfoDialog.value = true; - }, + click: editSubscribeDialog, }, }, { @@ -161,11 +197,13 @@ const subscribeForm = reactive({ total_episode: props.media?.total_episode, // 开始集数 start_episode: props.media?.start_episode, + // 订阅站点 + sites: props.media?.sites, });