From e3fa0b9daea6c0ee8a34f78ee61eb6102b7a2638 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Sun, 28 Jun 2026 13:47:13 +0800 Subject: [PATCH] Add batch selection support for subscriptions and history --- src/composables/useDynamicButton.ts | 1 + src/layouts/default/components/Footer.vue | 6 +- src/locales/en-US.ts | 9 + src/locales/zh-CN.ts | 9 + src/locales/zh-TW.ts | 9 + src/pages/subscribe.vue | 211 ++++++++++++++++-- src/views/reorganize/TransferHistoryView.vue | 220 ++++++++++++++++++- src/views/subscribe/SubscribeListView.vue | 151 ++++++------- 8 files changed, 504 insertions(+), 112 deletions(-) diff --git a/src/composables/useDynamicButton.ts b/src/composables/useDynamicButton.ts index c6db6fed..26d5aca8 100644 --- a/src/composables/useDynamicButton.ts +++ b/src/composables/useDynamicButton.ts @@ -31,6 +31,7 @@ export interface DynamicButtonMenuItem { icon?: string color?: string permission?: UserPermissionKey + disabled?: boolean action: () => void } diff --git a/src/layouts/default/components/Footer.vue b/src/layouts/default/components/Footer.vue index 54d0cfd9..07b0388a 100644 --- a/src/layouts/default/components/Footer.vue +++ b/src/layouts/default/components/Footer.vue @@ -187,6 +187,7 @@ const legacyDynamicMenuTitleKeyMap: Record = { 'components.pluginMarketSetting.title': 'dialog.pluginMarketSetting.title', } +// 解析动态按钮菜单项标题,兼容旧版直接传入 i18n key 的写法。 function resolveDynamicMenuItemTitle(item: DynamicButtonMenuItem) { if (item.titleKey) { return t(item.titleKey, item.titleParams as any) @@ -202,14 +203,16 @@ function resolveDynamicMenuItemTitle(item: DynamicButtonMenuItem) { return looksLikeI18nKey ? t(normalizedTitleKey, item.titleParams as any) : item.title } +// 处理页面注册的动态按钮主操作点击。 function handleDynamicButtonClick() { if (!dynamicButton.value || !hasItemPermission(dynamicButton.value, userPermissions.value)) return dynamicButton.value.action() } +// 处理页面注册的动态按钮菜单项点击。 function handleDynamicMenuItemClick(item: DynamicButtonMenuItem) { - if (!hasItemPermission(item, userPermissions.value)) return + if (item.disabled || !hasItemPermission(item, userPermissions.value)) return item.action() } @@ -292,6 +295,7 @@ function handleDynamicMenuItemClick(item: DynamicButtonMenuItem) { v-for="(item, index) in visibleDynamicButtonMenuItems" :key="item.titleKey || item.title || index" :base-color="item.color" + :disabled="item.disabled" @click="handleDynamicMenuItemClick(item)" >