From 62f49b60870f4718abddb377b895fd65ff69f962 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Wed, 28 May 2025 08:49:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=8F=92=E4=BB=B6=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=A4=B9=E5=86=85=E6=8F=92=E4=BB=B6=E7=9A=84=E7=AD=9B?= =?UTF-8?q?=E9=80=89=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/plugin/PluginCardListView.vue | 75 ++++++++++++++++--------- 1 file changed, 50 insertions(+), 25 deletions(-) diff --git a/src/views/plugin/PluginCardListView.vue b/src/views/plugin/PluginCardListView.vue index f8915c9d..b18f7776 100644 --- a/src/views/plugin/PluginCardListView.vue +++ b/src/views/plugin/PluginCardListView.vue @@ -175,6 +175,33 @@ const newFolderDialog = ref(false) // 新文件夹名称 const newFolderName = ref('') +// 获取文件夹内筛选后的插件 +const getFilteredFolderPlugins = (folderName: string) => { + const folderData = pluginFolders.value[folderName] + const folderPluginIds = Array.isArray(folderData) ? folderData : folderData?.plugins || [] + + // 获取文件夹内的插件并应用筛选条件 + const folderPlugins: Plugin[] = [] + folderPluginIds.forEach((pluginId: string) => { + const plugin = dataList.value.find(p => p.id === pluginId) + if (plugin) { + folderPlugins.push(plugin) + } + }) + + // 应用筛选条件 + return folderPlugins.filter(plugin => { + if (!installedFilter.value && !hasUpdateFilter.value) return true + if (hasUpdateFilter.value) { + return plugin.has_update + } + if (installedFilter.value) { + return plugin.plugin_name?.toLowerCase().includes((installedFilter.value as string).toLowerCase()) + } + return true + }) +} + // 显示的插件列表(考虑文件夹筛选) const displayedPlugins = computed(() => { if (!currentFolder.value) { @@ -186,20 +213,8 @@ const displayedPlugins = computed(() => { }) return filteredDataList.value.filter(plugin => !folderedPluginIds.has(plugin.id)) } else { - // 文件夹内:按照文件夹内保存的顺序显示插件 - const folderData = pluginFolders.value[currentFolder.value] - const folderPluginIds = Array.isArray(folderData) ? folderData : folderData?.plugins || [] - - // 按照文件夹内的顺序排列插件 - const orderedPlugins: Plugin[] = [] - folderPluginIds.forEach((pluginId: string) => { - const plugin = filteredDataList.value.find(p => p.id === pluginId) - if (plugin) { - orderedPlugins.push(plugin) - } - }) - - return orderedPlugins + // 文件夹内:返回筛选后的插件 + return getFilteredFolderPlugins(currentFolder.value) } }) @@ -232,17 +247,27 @@ const displayedFolders = computed(() => { const unsortedFolders = folderNames.filter(name => !folderOrder.value.includes(name)) sortedFolderNames.push(...unsortedFolders) - return sortedFolderNames.map(folderName => { - const folderData = pluginFolders.value[folderName] - const plugins = Array.isArray(folderData) ? folderData : folderData?.plugins || [] - const config = Array.isArray(folderData) ? {} : folderData + return sortedFolderNames + .map(folderName => { + const folderData = pluginFolders.value[folderName] + const config = Array.isArray(folderData) ? {} : folderData - return { - name: folderName, - pluginCount: plugins.length, - config: config, - } - }) + // 获取筛选后的插件数量 + const filteredPlugins = getFilteredFolderPlugins(folderName) + + return { + name: folderName, + pluginCount: filteredPlugins.length, + config: config, + } + }) + .filter(folder => { + // 当有筛选条件时,只显示包含筛选后插件的文件夹 + if (installedFilter.value || hasUpdateFilter.value) { + return folder.pluginCount > 0 + } + return true + }) }) // 更新混合排序列表 @@ -305,7 +330,7 @@ function updateMixedSortList() { // 监听相关数据变化,更新混合排序列表 watch( - [displayedPlugins, displayedFolders, orderConfig, folderOrder], + [displayedPlugins, displayedFolders, orderConfig, folderOrder, installedFilter, hasUpdateFilter], () => { // 只有在非拖拽状态下才更新 if (!isDraggingSortMode.value) {