优化插件文件夹内插件的筛选逻辑

This commit is contained in:
jxxghp
2025-05-28 08:49:53 +08:00
parent e9ddbf9962
commit 62f49b6087
+50 -25
View File
@@ -175,6 +175,33 @@ const newFolderDialog = ref(false)
// 新文件夹名称 // 新文件夹名称
const newFolderName = ref('') 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(() => { const displayedPlugins = computed(() => {
if (!currentFolder.value) { if (!currentFolder.value) {
@@ -186,20 +213,8 @@ const displayedPlugins = computed(() => {
}) })
return filteredDataList.value.filter(plugin => !folderedPluginIds.has(plugin.id)) return filteredDataList.value.filter(plugin => !folderedPluginIds.has(plugin.id))
} else { } else {
// 文件夹内:按照文件夹内保存的顺序显示插件 // 文件夹内:返回筛选后的插件
const folderData = pluginFolders.value[currentFolder.value] return getFilteredFolderPlugins(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
} }
}) })
@@ -232,17 +247,27 @@ const displayedFolders = computed(() => {
const unsortedFolders = folderNames.filter(name => !folderOrder.value.includes(name)) const unsortedFolders = folderNames.filter(name => !folderOrder.value.includes(name))
sortedFolderNames.push(...unsortedFolders) sortedFolderNames.push(...unsortedFolders)
return sortedFolderNames.map(folderName => { return sortedFolderNames
const folderData = pluginFolders.value[folderName] .map(folderName => {
const plugins = Array.isArray(folderData) ? folderData : folderData?.plugins || [] const folderData = pluginFolders.value[folderName]
const config = Array.isArray(folderData) ? {} : folderData const config = Array.isArray(folderData) ? {} : folderData
return { // 获取筛选后的插件数量
name: folderName, const filteredPlugins = getFilteredFolderPlugins(folderName)
pluginCount: plugins.length,
config: config, 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( watch(
[displayedPlugins, displayedFolders, orderConfig, folderOrder], [displayedPlugins, displayedFolders, orderConfig, folderOrder, installedFilter, hasUpdateFilter],
() => { () => {
// 只有在非拖拽状态下才更新 // 只有在非拖拽状态下才更新
if (!isDraggingSortMode.value) { if (!isDraggingSortMode.value) {