mirror of
https://github.com/jxxghp/MoviePilot-Frontend.git
synced 2026-09-05 23:56:42 +08:00
Revert "Feat/virtualizarefactor: virtualization rework — unify Virtual components, fix memory leaks, migrate 15+ consumerstion rework (#472)"
This reverts commit 5953496d84.
This commit is contained in:
+9
-19
@@ -2,7 +2,6 @@
|
||||
import api from '@/api'
|
||||
import { RecommendSource } from '@/api/types'
|
||||
import MediaCardSlideView from '@/views/discover/MediaCardSlideView.vue'
|
||||
import VirtualList from '@/components/virtual/VirtualList.vue'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import { useDisplay } from 'vuetify'
|
||||
import { useDynamicHeaderTab } from '@/composables/useDynamicHeaderTab'
|
||||
@@ -270,25 +269,16 @@ onActivated(async () => {
|
||||
<template>
|
||||
<div class="mp-recommend">
|
||||
<!-- 滚动内容区域 -->
|
||||
<!--
|
||||
用 VirtualList 纵向虚拟化 13 个 SlideView:
|
||||
原先 TransitionGroup 把所有 SlideView 一直挂在 DOM 上,导致
|
||||
13 × ~15 visible cards = 195 张卡 + 195 张 decoded bitmap 常驻;
|
||||
虚拟化后只挂载视口附近 2-3 个 SlideView。
|
||||
estimate-size=320 ≈ 9rem 卡片高(216px) + 标题/边距(~100px)。
|
||||
-->
|
||||
<div class="recommend-content">
|
||||
<VirtualList
|
||||
:items="filteredViews"
|
||||
:estimate-size="320"
|
||||
key-field="title"
|
||||
:overscan="2"
|
||||
use-window-scroll
|
||||
>
|
||||
<template #item="{ item }">
|
||||
<MediaCardSlideView v-bind="item" :ready="isReady" class="content-group" />
|
||||
</template>
|
||||
</VirtualList>
|
||||
<TransitionGroup name="fade">
|
||||
<MediaCardSlideView
|
||||
v-for="item in filteredViews"
|
||||
:key="item.title"
|
||||
v-bind="item"
|
||||
:ready="isReady"
|
||||
class="content-group"
|
||||
/>
|
||||
</TransitionGroup>
|
||||
|
||||
<div v-if="isReady && filteredViews.length === 0" class="empty-category">
|
||||
<VIcon icon="mdi-alert-circle-outline" size="large" class="empty-icon" />
|
||||
|
||||
+17
-24
@@ -6,18 +6,13 @@ import api from '@/api'
|
||||
import type { Context } from '@/api/types'
|
||||
import TorrentCard from '@/components/cards/TorrentCard.vue'
|
||||
import TorrentItem from '@/components/cards/TorrentItem.vue'
|
||||
import VirtualGrid from '@/components/virtual/VirtualGrid.vue'
|
||||
import VirtualList from '@/components/virtual/VirtualList.vue'
|
||||
import { useBreakpointCols } from '@/composables/virtual/useBreakpointCols'
|
||||
import ProgressiveCardGrid from '@/components/misc/ProgressiveCardGrid.vue'
|
||||
import TorrentFilterBar from '@/components/filter/TorrentFilterBar.vue'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import { useGlobalSettingsStore } from '@/stores/global'
|
||||
import { useTorrentFilter, type FilterState } from '@/composables/useTorrentFilter'
|
||||
import { useToast } from 'vue-toastification'
|
||||
|
||||
// 列数:按视口断点(路由级全宽页)
|
||||
const cols = useBreakpointCols({ xs: 1, sm: 2, md: 2, lg: 3, xl: 4, xxl: 4 })
|
||||
|
||||
// 国际化
|
||||
const { t } = useI18n()
|
||||
|
||||
@@ -1171,19 +1166,17 @@ onUnmounted(() => {
|
||||
class="stream-result-item"
|
||||
/>
|
||||
</div>
|
||||
<VirtualGrid
|
||||
<ProgressiveCardGrid
|
||||
v-else-if="filteredCardDataList.length > 0"
|
||||
:items="filteredCardDataList"
|
||||
:columns="cols"
|
||||
:row-estimate-size="400"
|
||||
:gap="16"
|
||||
:overscan="3"
|
||||
use-window-scroll
|
||||
:get-item-key="getTorrentItemKey"
|
||||
:min-item-width="300"
|
||||
:estimated-item-height="400"
|
||||
>
|
||||
<template #item="{ item }">
|
||||
<template #default="{ item }">
|
||||
<TorrentCard :torrent="item" :more="item.more" />
|
||||
</template>
|
||||
</VirtualGrid>
|
||||
</ProgressiveCardGrid>
|
||||
<!-- 无结果时显示 -->
|
||||
<div v-if="!progressActive && filteredCardDataList.length === 0" class="no-results">
|
||||
<VIcon icon="mdi-file-search-outline" size="64" color="grey-lighten-1" />
|
||||
@@ -1210,19 +1203,19 @@ onUnmounted(() => {
|
||||
</div>
|
||||
</div>
|
||||
<div v-else-if="filteredRowDataList.length > 0" class="resource-list">
|
||||
<VirtualList
|
||||
<ProgressiveCardGrid
|
||||
:items="filteredRowDataList"
|
||||
:estimate-size="240"
|
||||
:overscan="5"
|
||||
use-window-scroll
|
||||
:columns="1"
|
||||
:gap="8"
|
||||
:estimated-item-height="240"
|
||||
:overscan-rows="6"
|
||||
:get-item-key="getTorrentItemKey"
|
||||
>
|
||||
<template #item="{ item, index }">
|
||||
<div :key="getTorrentItemKey(item, index)">
|
||||
<TorrentItem :torrent="item" />
|
||||
<VDivider v-if="index < filteredRowDataList.length - 1" class="my-2" />
|
||||
</div>
|
||||
<template #default="{ item, index }">
|
||||
<TorrentItem :torrent="item" />
|
||||
<VDivider v-if="index < filteredRowDataList.length - 1" class="my-2" />
|
||||
</template>
|
||||
</VirtualList>
|
||||
</ProgressiveCardGrid>
|
||||
</div>
|
||||
</VCard>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user