From 0d05a104c41f5e024cd479f34945c8eff802badd Mon Sep 17 00:00:00 2001 From: jxxghp Date: Sat, 9 May 2026 18:37:16 +0800 Subject: [PATCH] refactor: migrate site management actions to dynamic floating menu and update sort mode exit buttons --- src/views/plugin/PluginCardListView.vue | 2 +- src/views/site/SiteCardListView.vue | 137 +++++++++++++--------- src/views/subscribe/SubscribeListView.vue | 2 +- 3 files changed, 81 insertions(+), 60 deletions(-) diff --git a/src/views/plugin/PluginCardListView.vue b/src/views/plugin/PluginCardListView.vue index 4afce8ed..7641123c 100644 --- a/src/views/plugin/PluginCardListView.vue +++ b/src/views/plugin/PluginCardListView.vue @@ -1525,7 +1525,7 @@ function onDragStartPlugin(evt: any) {
{{ t('common.sortModeHint') }} - + {{ t('common.exit') }}
diff --git a/src/views/site/SiteCardListView.vue b/src/views/site/SiteCardListView.vue index 506e78a9..fdfaa4ad 100644 --- a/src/views/site/SiteCardListView.vue +++ b/src/views/site/SiteCardListView.vue @@ -8,7 +8,6 @@ import SiteAddEditDialog from '@/components/dialog/SiteAddEditDialog.vue' import SiteStatisticsDialog from '@/components/dialog/SiteStatisticsDialog.vue' import SiteImportDialog from '@/components/dialog/SiteImportDialog.vue' import VirtualCardGrid from '@/components/misc/VirtualCardGrid.vue' -import { useDisplay } from 'vuetify' import { useDynamicButton } from '@/composables/useDynamicButton' import { useI18n } from 'vue-i18n' import { usePWA } from '@/composables/usePWA' @@ -23,9 +22,7 @@ const $toast = useToast() // 路由 const route = useRoute() -// APP -const display = useDisplay() -// PWA模式检测 +// APP 模式检测 const { appMode } = usePWA() // 站点列表 @@ -232,6 +229,18 @@ function toggleSortMode() { sortMode.value = !sortMode.value } +function openSiteAddDialog() { + siteAddDialog.value = true +} + +function openSiteImportDialog() { + siteImportDialog.value = true +} + +function openSiteStatisticsDialog() { + siteStatsDialog.value = true +} + // 导出站点数据 async function exportSites() { try { @@ -306,71 +315,55 @@ watch( { immediate: true }, ) +const shouldShowFloatingActions = computed(() => route.path === '/site' && isRefreshed.value) + +// App 模式下将站点操作收纳到 Footer 动态菜单中,和插件页保持一致。 +const siteDynamicMenuItems = computed(() => [ + { + titleKey: 'site.actions.add', + icon: 'mdi-web-plus', + action: openSiteAddDialog, + }, + { + titleKey: 'site.actions.import', + icon: 'mdi-import', + action: openSiteImportDialog, + }, + { + titleKey: 'site.actions.export', + icon: 'mdi-export', + action: exportSites, + }, + { + titleKey: 'site.statistics', + icon: 'mdi-chart-line', + action: openSiteStatisticsDialog, + }, +]) + // 使用动态按钮钩子 useDynamicButton({ icon: 'mdi-web-plus', - onClick: () => { - siteAddDialog.value = true - }, + onClick: openSiteAddDialog, + menuItems: siteDynamicMenuItems, + show: computed(() => appMode.value && shouldShowFloatingActions.value), })