From 9e67929ee786b204358a556119976dd2b79acbbb Mon Sep 17 00:00:00 2001 From: anyup <85225562+anyup@users.noreply.github.com> Date: Sat, 10 May 2025 22:33:31 +0800 Subject: [PATCH 001/798] feat: support to refresh the tab page by route name (#6153) Co-authored-by: anyup --- packages/effects/hooks/src/use-tabs.ts | 4 ++-- packages/stores/src/modules/tabbar.ts | 17 ++++++++++++++++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/packages/effects/hooks/src/use-tabs.ts b/packages/effects/hooks/src/use-tabs.ts index 60f70f14..25bc4883 100644 --- a/packages/effects/hooks/src/use-tabs.ts +++ b/packages/effects/hooks/src/use-tabs.ts @@ -41,8 +41,8 @@ export function useTabs() { await tabbarStore.toggleTabPin(tab || route); } - async function refreshTab() { - await tabbarStore.refresh(router); + async function refreshTab(name?: string) { + await tabbarStore.refresh(name || router); } async function openTabInNewWindow(tab?: RouteLocationNormalized) { diff --git a/packages/stores/src/modules/tabbar.ts b/packages/stores/src/modules/tabbar.ts index ec64bdc4..234bb02f 100644 --- a/packages/stores/src/modules/tabbar.ts +++ b/packages/stores/src/modules/tabbar.ts @@ -334,7 +334,13 @@ export const useTabbarStore = defineStore('core-tabbar', { /** * 刷新标签页 */ - async refresh(router: Router) { + async refresh(router: Router | string) { + // 如果是Router路由,那么就根据当前路由刷新 + // 如果是string字符串,为路由名称,则定向刷新指定标签页,不能是当前路由名称,否则不会刷新 + if (typeof router === 'string') { + return await this.refreshByName(router); + } + const { currentRoute } = router; const { name } = currentRoute.value; @@ -349,6 +355,15 @@ export const useTabbarStore = defineStore('core-tabbar', { stopProgress(); }, + /** + * 根据路由名称刷新指定标签页 + */ + async refreshByName(name: string) { + this.excludeCachedTabs.add(name); + await new Promise((resolve) => setTimeout(resolve, 200)); + this.excludeCachedTabs.delete(name); + }, + /** * @zh_CN 重置标签页标题 */ From e89cf400c0da2f2369dfbd8963cb83ec2eb4fa29 Mon Sep 17 00:00:00 2001 From: Netfan Date: Mon, 12 May 2025 23:34:08 +0800 Subject: [PATCH 002/798] fix: refresh command of tabbar issue, fixed: #6162 (#6169) --- packages/effects/layouts/src/basic/tabbar/use-tabbar.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/effects/layouts/src/basic/tabbar/use-tabbar.ts b/packages/effects/layouts/src/basic/tabbar/use-tabbar.ts index b0146ef6..f254a6d3 100644 --- a/packages/effects/layouts/src/basic/tabbar/use-tabbar.ts +++ b/packages/effects/layouts/src/basic/tabbar/use-tabbar.ts @@ -158,7 +158,7 @@ export function useTabbar() { }, { disabled: disabledRefresh, - handler: refreshTab, + handler: () => refreshTab(), icon: RotateCw, key: 'reload', text: $t('preferences.tabbar.contextMenu.reload'), From b46ebe756e6abe3b683ae8512a414fa376c56614 Mon Sep 17 00:00:00 2001 From: chewenye <15818182980@163.com> Date: Fri, 16 May 2025 09:36:49 +0800 Subject: [PATCH 003/798] =?UTF-8?q?types:=20=E5=AF=BC=E5=87=BAauthenticati?= =?UTF-8?q?on=E7=BB=84=E4=BB=B6=E7=9A=84type=EF=BC=8C=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89toolbarList=E6=97=B6=E7=B1=BB=E5=9E=8B=E4=BD=BF?= =?UTF-8?q?=E7=94=A8ToolbarType=20(#6158)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 车文烨 --- packages/effects/layouts/src/authentication/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/effects/layouts/src/authentication/index.ts b/packages/effects/layouts/src/authentication/index.ts index 6c684d11..d7c1c293 100644 --- a/packages/effects/layouts/src/authentication/index.ts +++ b/packages/effects/layouts/src/authentication/index.ts @@ -1 +1,2 @@ export { default as AuthPageLayout } from './authentication.vue'; +export * from './types'; From cf17a45d8dffdbe71f5bfb826f277da80c47e941 Mon Sep 17 00:00:00 2001 From: XiaoHetitu <38452227+XiaoHeitu@users.noreply.github.com> Date: Fri, 16 May 2025 09:37:50 +0800 Subject: [PATCH 004/798] =?UTF-8?q?feat(tabs):=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=E5=B1=9E=E6=80=A7=E4=BD=9C=E4=B8=BA=E6=A0=87?= =?UTF-8?q?=E7=AD=BE=E6=A0=87=E9=A2=98=EF=BC=8C=E8=A7=A3=E5=86=B3=20#6170?= =?UTF-8?q?=20=E7=9A=84=E9=97=AE=E9=A2=98=20(#6163)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(tabs): 支持动态函数作为标签标题 修改 `setTabTitle` 和 `tabsView` 逻辑,允许传入函数作为标签标题,以便动态生成标题内容 * feat(tabbar): 添加动态设置标签页标题功能 允许设置静态字符串或动态函数作为标签标题,支持根据状态或语言变化动态更新标题 * refactor(tabs): 移除冗余的newTabTitle2变量并优化标题设置逻辑 移除tabs组件中冗余的newTabTitle2变量,直接使用newTabTitle作为标题来源。同时,优化use-tabs和tabbar模块的标题设置逻辑,支持ComputedRef作为动态标题,提升代码简洁性和可维护性。 --------- Co-authored-by: yuanwj --- packages/effects/hooks/src/use-tabs.ts | 20 +++++++++++++++++++- packages/stores/src/modules/tabbar.ts | 20 +++++++++++++++++--- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/packages/effects/hooks/src/use-tabs.ts b/packages/effects/hooks/src/use-tabs.ts index 25bc4883..52672112 100644 --- a/packages/effects/hooks/src/use-tabs.ts +++ b/packages/effects/hooks/src/use-tabs.ts @@ -1,3 +1,4 @@ +import type { ComputedRef } from 'vue'; import type { RouteLocationNormalized } from 'vue-router'; import { useRoute, useRouter } from 'vue-router'; @@ -53,7 +54,24 @@ export function useTabs() { await tabbarStore.closeTabByKey(key, router); } - async function setTabTitle(title: string) { + /** + * 设置当前标签页的标题 + * + * @description 支持设置静态标题字符串或动态计算标题 + * @description 动态标题会在每次渲染时重新计算,适用于多语言或状态相关的标题 + * + * @param title - 标题内容 + * - 静态标题: 直接传入字符串 + * - 动态标题: 传入 ComputedRef + * + * @example + * // 静态标题 + * setTabTitle('标签页') + * + * // 动态标题(多语言) + * setTabTitle(computed(() => t('page.title'))) + */ + async function setTabTitle(title: ComputedRef | string) { tabbarStore.setUpdateTime(); await tabbarStore.setTabTitle(route, title); } diff --git a/packages/stores/src/modules/tabbar.ts b/packages/stores/src/modules/tabbar.ts index 234bb02f..924af83c 100644 --- a/packages/stores/src/modules/tabbar.ts +++ b/packages/stores/src/modules/tabbar.ts @@ -1,3 +1,4 @@ +import type { ComputedRef } from 'vue'; import type { Router, RouteRecordNormalized } from 'vue-router'; import type { TabDefinition } from '@vben-core/typings'; @@ -401,10 +402,23 @@ export const useTabbarStore = defineStore('core-tabbar', { /** * @zh_CN 设置标签页标题 - * @param tab - * @param title + * + * @zh_CN 支持设置静态标题字符串或计算属性作为动态标题 + * @zh_CN 当标题为计算属性时,标题会随计算属性值变化而自动更新 + * @zh_CN 适用于需要根据状态或多语言动态更新标题的场景 + * + * @param {TabDefinition} tab - 标签页对象 + * @param {ComputedRef | string} title - 标题内容,支持静态字符串或计算属性 + * + * @example + * // 设置静态标题 + * setTabTitle(tab, '新标签页'); + * + * @example + * // 设置动态标题 + * setTabTitle(tab, computed(() => t('common.dashboard'))); */ - async setTabTitle(tab: TabDefinition, title: string) { + async setTabTitle(tab: TabDefinition, title: ComputedRef | string) { const findTab = this.tabs.find( (item) => getTabPath(item) === getTabPath(tab), ); From a23bc4cb5c56985d7de8619244af3041afed7a3c Mon Sep 17 00:00:00 2001 From: panda7 Date: Fri, 16 May 2025 09:40:05 +0800 Subject: [PATCH 005/798] fix: the mobile terminal can wrap lines and expand slot attributes (#6165) Co-authored-by: sqchen --- .../shadcn-ui/src/components/button/button.ts | 2 +- .../src/components/button/check-button-group.vue | 16 +++++++++++++++- .../src/views/examples/button-group/index.vue | 5 +++-- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/packages/@core/ui-kit/shadcn-ui/src/components/button/button.ts b/packages/@core/ui-kit/shadcn-ui/src/components/button/button.ts index f91e9d05..01394caa 100644 --- a/packages/@core/ui-kit/shadcn-ui/src/components/button/button.ts +++ b/packages/@core/ui-kit/shadcn-ui/src/components/button/button.ts @@ -36,7 +36,7 @@ export interface VbenButtonGroupProps btnClass?: any; gap?: number; multiple?: boolean; - options?: { label: CustomRenderType; value: ValueType }[]; + options?: { [key: string]: any; label: CustomRenderType; value: ValueType }[]; showIcon?: boolean; size?: 'large' | 'middle' | 'small'; } diff --git a/packages/@core/ui-kit/shadcn-ui/src/components/button/check-button-group.vue b/packages/@core/ui-kit/shadcn-ui/src/components/button/check-button-group.vue index c29cea5a..6e937891 100644 --- a/packages/@core/ui-kit/shadcn-ui/src/components/button/check-button-group.vue +++ b/packages/@core/ui-kit/shadcn-ui/src/components/button/check-button-group.vue @@ -119,7 +119,7 @@ async function onBtnClick(value: ValueType) { - + @@ -127,6 +127,9 @@ async function onBtnClick(value: ValueType) { diff --git a/playground/src/views/examples/button-group/index.vue b/playground/src/views/examples/button-group/index.vue index 47388963..2bc350c8 100644 --- a/playground/src/views/examples/button-group/index.vue +++ b/playground/src/views/examples/button-group/index.vue @@ -19,7 +19,7 @@ const checkValue = ref(['a', 'b']); const options = [ { label: '选项1', value: 'a' }, - { label: '选项2', value: 'b' }, + { label: '选项2', value: 'b', num: 999 }, { label: '选项3', value: 'c' }, { label: '选项4', value: 'd' }, { label: '选项5', value: 'e' }, @@ -168,10 +168,11 @@ function onBtnClick(value: any) { :options="options" v-bind="compProps" > -