diff --git a/src/locales/en-US.ts b/src/locales/en-US.ts index fcef8955..2e556340 100644 --- a/src/locales/en-US.ts +++ b/src/locales/en-US.ts @@ -872,6 +872,7 @@ export default { batchEnableError: 'Batch enable operation failed', batchPauseError: 'Batch pause operation failed', batchDeleteError: 'Batch delete operation failed', + minSubscribers: 'Min Subscribers', }, recommend: { all: 'All', diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts index 80253e69..e907df9d 100644 --- a/src/locales/zh-CN.ts +++ b/src/locales/zh-CN.ts @@ -869,6 +869,7 @@ export default { batchEnableError: '批量启用操作失败', batchPauseError: '批量暂停操作失败', batchDeleteError: '批量删除操作失败', + minSubscribers: '最小订阅人数', }, recommend: { all: '全部', diff --git a/src/views/subscribe/SubscribePopularView.vue b/src/views/subscribe/SubscribePopularView.vue index afa8602e..d79762ac 100644 --- a/src/views/subscribe/SubscribePopularView.vue +++ b/src/views/subscribe/SubscribePopularView.vue @@ -34,13 +34,96 @@ const isRefreshed = ref(false) const dataList = ref([]) const currData = ref([]) +// 筛选参数 +const filterParams = reactive({ + genre_id: '', + min_rating: 0, + max_rating: 10, + min_sub: 1, +}) + +// 当前Key(用于重新加载数据) +const currentKey = ref(0) + +// TMDB电影风格字典 +const tmdbMovieGenreDict: Record = { + '28': t('tmdb.genreType.action'), + '12': t('tmdb.genreType.adventure'), + '16': t('tmdb.genreType.animation'), + '35': t('tmdb.genreType.comedy'), + '80': t('tmdb.genreType.crime'), + '99': t('tmdb.genreType.documentary'), + '18': t('tmdb.genreType.drama'), + '10751': t('tmdb.genreType.family'), + '14': t('tmdb.genreType.fantasy'), + '36': t('tmdb.genreType.history'), + '27': t('tmdb.genreType.horror'), + '10402': t('tmdb.genreType.music'), + '9648': t('tmdb.genreType.mystery'), + '10749': t('tmdb.genreType.romance'), + '878': t('tmdb.genreType.scienceFiction'), + '10770': t('tmdb.genreType.tvMovie'), + '53': t('tmdb.genreType.thriller'), + '10752': t('tmdb.genreType.war'), + '37': t('tmdb.genreType.western'), +} + +// TMDB电视剧风格字典 +const tmdbTvGenreDict: Record = { + '10759': t('tmdb.genreType.actionAdventure'), + '16': t('tmdb.genreType.animation'), + '35': t('tmdb.genreType.comedy'), + '80': t('tmdb.genreType.crime'), + '99': t('tmdb.genreType.documentary'), + '18': t('tmdb.genreType.drama'), + '10751': t('tmdb.genreType.family'), + '10762': t('tmdb.genreType.kids'), + '9648': t('tmdb.genreType.mystery'), + '10763': t('tmdb.genreType.news'), + '10764': t('tmdb.genreType.reality'), + '10765': t('tmdb.genreType.sciFiFantasy'), + '10766': t('tmdb.genreType.soap'), + '10767': t('tmdb.genreType.talk'), + '10768': t('tmdb.genreType.warPolitics'), + '37': t('tmdb.genreType.western'), +} + +// 获取当前类型对应的风格字典 +const currentGenreDict = computed(() => { + return props.type === '电影' ? tmdbMovieGenreDict : tmdbTvGenreDict +}) + +// 监听筛选参数变化 +watch(filterParams, () => { + // 重置数据 + dataList.value = [] + page.value = 1 + isRefreshed.value = false + currentKey.value++ +}, { deep: true }) + // 拼装参数 function getParams() { - let params = { + let params: { [key: string]: any } = { stype: props.type, page: page.value, count: 30, } + + // 添加筛选参数 + if (filterParams.genre_id) { + params.genre_id = parseInt(filterParams.genre_id) + } + if (filterParams.min_rating > 0) { + params.min_rating = filterParams.min_rating + } + if (filterParams.max_rating < 10) { + params.max_rating = filterParams.max_rating + } + if (filterParams.min_sub > 1) { + params.min_sub = filterParams.min_sub + } + return params } @@ -110,8 +193,78 @@ async function fetchData({ done }: { done: any }) {