This commit is contained in:
dap 2025-05-08 09:28:52 +08:00
commit 12d0ba24e5
44 changed files with 173 additions and 59 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/docs", "name": "@vben/docs",
"version": "5.5.5", "version": "5.5.6",
"private": true, "private": true,
"scripts": { "scripts": {
"build": "vitepress build", "build": "vitepress build",

View File

@ -60,6 +60,29 @@ VITE_INJECT_APP_LOADING=true
VITE_ARCHIVER=true VITE_ARCHIVER=true
``` ```
```bash [.env.production]
# Public Path for Resources, must start and end with /
VITE_BASE=/
# API URL
VITE_GLOB_API_URL=https://mock-napi.vben.pro/api
# Whether to enable compression, can be set to none, brotli, gzip
VITE_COMPRESS=gzip
# Whether to enable PWA
VITE_PWA=false
# vue-router mode
VITE_ROUTER_HISTORY=hash
# Whether to inject global loading
VITE_INJECT_APP_LOADING=true
# Whether to generate dist.zip after packaging
VITE_ARCHIVER=true
```
::: :::
## Dynamic Configuration in Production Environment ## Dynamic Configuration in Production Environment
@ -142,6 +165,7 @@ import { defineOverridesPreferences } from '@vben/preferences';
/** /**
* @description Project configuration file * @description Project configuration file
* Only a part of the configuration in the project needs to be covered, and unnecessary configurations do not need to be covered. The default configuration will be automatically used * Only a part of the configuration in the project needs to be covered, and unnecessary configurations do not need to be covered. The default configuration will be automatically used
* !!! Please clear the cache after changing the configuration, otherwise it may not take effect
*/ */
export const overridesPreferences = defineOverridesPreferences({ export const overridesPreferences = defineOverridesPreferences({
// overrides // overrides
@ -172,7 +196,7 @@ const defaultPreferences: Preferences = {
isMobile: false, isMobile: false,
layout: 'sidebar-nav', layout: 'sidebar-nav',
locale: 'zh-CN', locale: 'zh-CN',
loginExpiredMode: 'modal', loginExpiredMode: 'page',
name: 'Vben Admin', name: 'Vben Admin',
preferencesButtonPosition: 'auto', preferencesButtonPosition: 'auto',
watermark: false, watermark: false,
@ -191,14 +215,16 @@ const defaultPreferences: Preferences = {
enable: true, enable: true,
icp: '', icp: '',
icpLink: '', icpLink: '',
settingShow: true,
}, },
footer: { footer: {
enable: true, enable: false,
fixed: false, fixed: false,
}, },
header: { header: {
enable: true, enable: true,
hidden: false, hidden: false,
menuAlign: 'start',
mode: 'fixed', mode: 'fixed',
}, },
logo: { logo: {
@ -220,23 +246,28 @@ const defaultPreferences: Preferences = {
sidebar: { sidebar: {
autoActivateChild: false, autoActivateChild: false,
collapsed: false, collapsed: false,
collapsedButton: true,
collapsedShowTitle: false, collapsedShowTitle: false,
enable: true, enable: true,
expandOnHover: true, expandOnHover: true,
extraCollapse: true, extraCollapse: false,
fixedButton: true,
hidden: false, hidden: false,
width: 230, width: 224,
}, },
tabbar: { tabbar: {
draggable: true, draggable: true,
enable: true, enable: true,
height: 36, height: 38,
keepAlive: true, keepAlive: true,
maxCount: 0,
middleClickToClose: false,
persist: true, persist: true,
showIcon: true, showIcon: true,
showMaximize: true, showMaximize: true,
showMore: true, showMore: true,
styleType: 'chrome', styleType: 'chrome',
wheelable: true,
}, },
theme: { theme: {
builtinType: 'default', builtinType: 'default',
@ -247,7 +278,7 @@ const defaultPreferences: Preferences = {
mode: 'dark', mode: 'dark',
radius: '0.5', radius: '0.5',
semiDarkHeader: false, semiDarkHeader: false,
semiDarkSidebar: true, semiDarkSidebar: false,
}, },
transition: { transition: {
enable: true, enable: true,
@ -261,9 +292,9 @@ const defaultPreferences: Preferences = {
languageToggle: true, languageToggle: true,
lockScreen: true, lockScreen: true,
notification: true, notification: true,
refresh: true,
sidebarToggle: true, sidebarToggle: true,
themeToggle: true, themeToggle: true,
refresh: true,
}, },
}; };
``` ```
@ -345,6 +376,8 @@ interface CopyrightPreferences {
icp: string; icp: string;
/** Link to the ICP */ /** Link to the ICP */
icpLink: string; icpLink: string;
/** Whether to show in settings panel */
settingShow?: boolean;
} }
interface FooterPreferences { interface FooterPreferences {
@ -359,6 +392,8 @@ interface HeaderPreferences {
enable: boolean; enable: boolean;
/** Whether the header is hidden, css-hidden */ /** Whether the header is hidden, css-hidden */
hidden: boolean; hidden: boolean;
/** Header menu alignment */
menuAlign: LayoutHeaderMenuAlignType;
/** Header display mode */ /** Header display mode */
mode: LayoutHeaderModeType; mode: LayoutHeaderModeType;
} }
@ -379,8 +414,12 @@ interface NavigationPreferences {
styleType: NavigationStyleType; styleType: NavigationStyleType;
} }
interface SidebarPreferences { interface SidebarPreferences {
/** Automatically activate child menu when clicking on directory */
autoActivateChild: boolean;
/** Whether the sidebar is collapsed */ /** Whether the sidebar is collapsed */
collapsed: boolean; collapsed: boolean;
/** Whether the sidebar collapse button is visible */
collapsedButton: boolean;
/** Whether to show title when sidebar is collapsed */ /** Whether to show title when sidebar is collapsed */
collapsedShowTitle: boolean; collapsedShowTitle: boolean;
/** Whether the sidebar is visible */ /** Whether the sidebar is visible */
@ -389,6 +428,8 @@ interface SidebarPreferences {
expandOnHover: boolean; expandOnHover: boolean;
/** Whether the sidebar extension area is collapsed */ /** Whether the sidebar extension area is collapsed */
extraCollapse: boolean; extraCollapse: boolean;
/** Whether the sidebar fixed button is visible */
fixedButton: boolean;
/** Whether the sidebar is hidden - css */ /** Whether the sidebar is hidden - css */
hidden: boolean; hidden: boolean;
/** Sidebar width */ /** Sidebar width */
@ -417,6 +458,10 @@ interface TabbarPreferences {
height: number; height: number;
/** Whether tab caching is enabled */ /** Whether tab caching is enabled */
keepAlive: boolean; keepAlive: boolean;
/** Maximum number of tabs */
maxCount: number;
/** Whether to close tab when middle-clicked */
middleClickToClose: boolean;
/** Whether tabs are persistent */ /** Whether tabs are persistent */
persist: boolean; persist: boolean;
/** Whether icons in multiple tabs are enabled */ /** Whether icons in multiple tabs are enabled */
@ -427,6 +472,8 @@ interface TabbarPreferences {
showMore: boolean; showMore: boolean;
/** Tab style */ /** Tab style */
styleType: TabsStyleType; styleType: TabsStyleType;
/** Whether mouse wheel response is enabled */
wheelable: boolean;
} }
interface ThemePreferences { interface ThemePreferences {
/** Built-in theme name */ /** Built-in theme name */
@ -514,5 +561,6 @@ interface Preferences {
- The `overridesPreferences` method only needs to override a part of the configurations in the project. There's no need to override configurations that are not needed; they will automatically use the default settings. - The `overridesPreferences` method only needs to override a part of the configurations in the project. There's no need to override configurations that are not needed; they will automatically use the default settings.
- Any configuration item can be overridden. You just need to override it within the `overridesPreferences` method. Do not modify the default configuration file. - Any configuration item can be overridden. You just need to override it within the `overridesPreferences` method. Do not modify the default configuration file.
- Please clear the cache after changing the configuration, otherwise it may not take effect.
::: :::

View File

@ -195,7 +195,7 @@ const defaultPreferences: Preferences = {
isMobile: false, isMobile: false,
layout: 'sidebar-nav', layout: 'sidebar-nav',
locale: 'zh-CN', locale: 'zh-CN',
loginExpiredMode: 'modal', loginExpiredMode: 'page',
name: 'Vben Admin', name: 'Vben Admin',
preferencesButtonPosition: 'auto', preferencesButtonPosition: 'auto',
watermark: false, watermark: false,
@ -214,14 +214,16 @@ const defaultPreferences: Preferences = {
enable: true, enable: true,
icp: '', icp: '',
icpLink: '', icpLink: '',
settingShow: true,
}, },
footer: { footer: {
enable: true, enable: false,
fixed: false, fixed: false,
}, },
header: { header: {
enable: true, enable: true,
hidden: false, hidden: false,
menuAlign: 'start',
mode: 'fixed', mode: 'fixed',
}, },
logo: { logo: {
@ -243,23 +245,28 @@ const defaultPreferences: Preferences = {
sidebar: { sidebar: {
autoActivateChild: false, autoActivateChild: false,
collapsed: false, collapsed: false,
collapsedButton: true,
collapsedShowTitle: false, collapsedShowTitle: false,
enable: true, enable: true,
expandOnHover: true, expandOnHover: true,
extraCollapse: true, extraCollapse: false,
fixedButton: true,
hidden: false, hidden: false,
width: 230, width: 224,
}, },
tabbar: { tabbar: {
draggable: true, draggable: true,
enable: true, enable: true,
height: 36, height: 38,
keepAlive: true, keepAlive: true,
maxCount: 0,
middleClickToClose: false,
persist: true, persist: true,
showIcon: true, showIcon: true,
showMaximize: true, showMaximize: true,
showMore: true, showMore: true,
styleType: 'chrome', styleType: 'chrome',
wheelable: true,
}, },
theme: { theme: {
builtinType: 'default', builtinType: 'default',
@ -270,7 +277,7 @@ const defaultPreferences: Preferences = {
mode: 'dark', mode: 'dark',
radius: '0.5', radius: '0.5',
semiDarkHeader: false, semiDarkHeader: false,
semiDarkSidebar: true, semiDarkSidebar: false,
}, },
transition: { transition: {
enable: true, enable: true,
@ -369,6 +376,8 @@ interface CopyrightPreferences {
icp: string; icp: string;
/** 备案号链接 */ /** 备案号链接 */
icpLink: string; icpLink: string;
/** 设置面板是否显示*/
settingShow?: boolean;
} }
interface FooterPreferences { interface FooterPreferences {
@ -383,6 +392,8 @@ interface HeaderPreferences {
enable: boolean; enable: boolean;
/** 顶栏是否隐藏,css-隐藏 */ /** 顶栏是否隐藏,css-隐藏 */
hidden: boolean; hidden: boolean;
/** 顶栏菜单位置 */
menuAlign: LayoutHeaderMenuAlignType;
/** header显示模式 */ /** header显示模式 */
mode: LayoutHeaderModeType; mode: LayoutHeaderModeType;
} }
@ -404,8 +415,12 @@ interface NavigationPreferences {
} }
interface SidebarPreferences { interface SidebarPreferences {
/** 点击目录时自动激活子菜单 */
autoActivateChild: boolean;
/** 侧边栏是否折叠 */ /** 侧边栏是否折叠 */
collapsed: boolean; collapsed: boolean;
/** 侧边栏折叠按钮是否可见 */
collapsedButton: boolean;
/** 侧边栏折叠时是否显示title */ /** 侧边栏折叠时是否显示title */
collapsedShowTitle: boolean; collapsedShowTitle: boolean;
/** 侧边栏是否可见 */ /** 侧边栏是否可见 */
@ -414,6 +429,8 @@ interface SidebarPreferences {
expandOnHover: boolean; expandOnHover: boolean;
/** 侧边栏扩展区域是否折叠 */ /** 侧边栏扩展区域是否折叠 */
extraCollapse: boolean; extraCollapse: boolean;
/** 侧边栏固定按钮是否可见 */
fixedButton: boolean;
/** 侧边栏是否隐藏 - css */ /** 侧边栏是否隐藏 - css */
hidden: boolean; hidden: boolean;
/** 侧边栏宽度 */ /** 侧边栏宽度 */
@ -442,6 +459,10 @@ interface TabbarPreferences {
height: number; height: number;
/** 开启标签页缓存功能 */ /** 开启标签页缓存功能 */
keepAlive: boolean; keepAlive: boolean;
/** 限制最大数量 */
maxCount: number;
/** 是否点击中键时关闭标签 */
middleClickToClose: boolean;
/** 是否持久化标签 */ /** 是否持久化标签 */
persist: boolean; persist: boolean;
/** 是否开启多标签页图标 */ /** 是否开启多标签页图标 */
@ -452,6 +473,8 @@ interface TabbarPreferences {
showMore: boolean; showMore: boolean;
/** 标签页风格 */ /** 标签页风格 */
styleType: TabsStyleType; styleType: TabsStyleType;
/** 是否开启鼠标滚轮响应 */
wheelable: boolean;
} }
interface ThemePreferences { interface ThemePreferences {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/commitlint-config", "name": "@vben/commitlint-config",
"version": "5.5.5", "version": "5.5.6",
"private": true, "private": true,
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/stylelint-config", "name": "@vben/stylelint-config",
"version": "5.5.5", "version": "5.5.6",
"private": true, "private": true,
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/node-utils", "name": "@vben/node-utils",
"version": "5.5.5", "version": "5.5.6",
"private": true, "private": true,
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/tailwind-config", "name": "@vben/tailwind-config",
"version": "5.5.5", "version": "5.5.6",
"private": true, "private": true,
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",

View File

@ -1,6 +1,9 @@
{ {
"$schema": "https://json.schemastore.org/tsconfig", "$schema": "https://json.schemastore.org/tsconfig",
"extends": "@vben/tsconfig/node.json", "extends": "@vben/tsconfig/node.json",
"compilerOptions": {
"moduleResolution": "bundler"
},
"include": ["src"], "include": ["src"],
"exclude": ["node_modules"] "exclude": ["node_modules"]
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/tsconfig", "name": "@vben/tsconfig",
"version": "5.5.5", "version": "5.5.6",
"private": true, "private": true,
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/vite-config", "name": "@vben/vite-config",
"version": "5.5.5", "version": "5.5.6",
"private": true, "private": true,
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",

View File

@ -1,6 +1,6 @@
{ {
"name": "vben-admin-monorepo", "name": "vben-admin-monorepo",
"version": "5.5.5", "version": "5.5.6",
"private": true, "private": true,
"keywords": [ "keywords": [
"monorepo", "monorepo",

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben-core/design", "name": "@vben-core/design",
"version": "5.5.5", "version": "5.5.6",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben-core/icons", "name": "@vben-core/icons",
"version": "5.5.5", "version": "5.5.6",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben-core/shared", "name": "@vben-core/shared",
"version": "5.5.5", "version": "5.5.6",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben-core/typings", "name": "@vben-core/typings",
"version": "5.5.5", "version": "5.5.6",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben-core/composables", "name": "@vben-core/composables",
"version": "5.5.5", "version": "5.5.6",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben-core/preferences", "name": "@vben-core/preferences",
"version": "5.5.5", "version": "5.5.6",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben-core/form-ui", "name": "@vben-core/form-ui",
"version": "5.5.5", "version": "5.5.6",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben-core/layout-ui", "name": "@vben-core/layout-ui",
"version": "5.5.5", "version": "5.5.6",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben-core/menu-ui", "name": "@vben-core/menu-ui",
"version": "5.5.5", "version": "5.5.6",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -9,6 +9,7 @@ import {
h, h,
inject, inject,
nextTick, nextTick,
onDeactivated,
provide, provide,
reactive, reactive,
ref, ref,
@ -70,6 +71,14 @@ export function useVbenDrawer<
inheritAttrs: false, inheritAttrs: false,
}, },
); );
/**
* keepAlive情况下 /
*/
onDeactivated(() => {
(extendedApi as ExtendedDrawerApi)?.close?.();
});
return [Drawer, extendedApi as ExtendedDrawerApi] as const; return [Drawer, extendedApi as ExtendedDrawerApi] as const;
} }

View File

@ -5,6 +5,7 @@ import {
h, h,
inject, inject,
nextTick, nextTick,
onDeactivated,
provide, provide,
reactive, reactive,
ref, ref,
@ -69,6 +70,14 @@ export function useVbenModal<TParentModalProps extends ModalProps = ModalProps>(
inheritAttrs: false, inheritAttrs: false,
}, },
); );
/**
* keepAlive情况下 /
*/
onDeactivated(() => {
(extendedApi as ExtendedModalApi)?.close?.();
});
return [Modal, extendedApi as ExtendedModalApi] as const; return [Modal, extendedApi as ExtendedModalApi] as const;
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben-core/shadcn-ui", "name": "@vben-core/shadcn-ui",
"version": "5.5.5", "version": "5.5.6",
"#main": "./dist/index.mjs", "#main": "./dist/index.mjs",
"#module": "./dist/index.mjs", "#module": "./dist/index.mjs",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben-core/tabs-ui", "name": "@vben-core/tabs-ui",
"version": "5.5.5", "version": "5.5.6",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/constants", "name": "@vben/constants",
"version": "5.5.5", "version": "5.5.6",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/access", "name": "@vben/access",
"version": "5.5.5", "version": "5.5.6",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/common-ui", "name": "@vben/common-ui",
"version": "5.5.5", "version": "5.5.6",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,7 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import type { VNode } from 'vue'; import type { VNode } from 'vue';
import { computed, ref, watch, watchEffect } from 'vue'; import { computed, ref, useAttrs, watch, watchEffect } from 'vue';
import { usePagination } from '@vben/hooks'; import { usePagination } from '@vben/hooks';
import { EmptyIcon, Grip, listIcons } from '@vben/icons'; import { EmptyIcon, Grip, listIcons } from '@vben/icons';
@ -22,8 +22,9 @@ import {
VbenIconButton, VbenIconButton,
VbenPopover, VbenPopover,
} from '@vben-core/shadcn-ui'; } from '@vben-core/shadcn-ui';
import { isFunction } from '@vben-core/shared/utils';
import { refDebounced, watchDebounced } from '@vueuse/core'; import { objectOmit, refDebounced, watchDebounced } from '@vueuse/core';
import { fetchIconsData } from './icons'; import { fetchIconsData } from './icons';
@ -64,6 +65,8 @@ const emit = defineEmits<{
change: [string]; change: [string];
}>(); }>();
const attrs = useAttrs();
const modelValue = defineModel({ default: '', type: String }); const modelValue = defineModel({ default: '', type: String });
const visible = ref(false); const visible = ref(false);
@ -167,7 +170,14 @@ const searchInputProps = computed(() => {
function updateCurrentSelect(v: string) { function updateCurrentSelect(v: string) {
currentSelect.value = v; currentSelect.value = v;
const eventKey = `onUpdate:${props.modelValueProp}`;
if (attrs[eventKey] && isFunction(attrs[eventKey])) {
attrs[eventKey](v);
}
} }
const getBindAttrs = computed(() => {
return objectOmit(attrs, [`onUpdate:${props.modelValueProp}`]);
});
defineExpose({ toggleOpenState, open, close }); defineExpose({ toggleOpenState, open, close });
</script> </script>
@ -189,7 +199,7 @@ defineExpose({ toggleOpenState, open, close });
:aria-label="$t('ui.iconPicker.placeholder')" :aria-label="$t('ui.iconPicker.placeholder')"
aria-expanded="visible" aria-expanded="visible"
:[`onUpdate:${modelValueProp}`]="updateCurrentSelect" :[`onUpdate:${modelValueProp}`]="updateCurrentSelect"
v-bind="$attrs" v-bind="getBindAttrs"
> >
<template #[iconSlot]> <template #[iconSlot]>
<VbenIcon <VbenIcon

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/hooks", "name": "@vben/hooks",
"version": "5.5.5", "version": "5.5.6",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/layouts", "name": "@vben/layouts",
"version": "5.5.5", "version": "5.5.6",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/plugins", "name": "@vben/plugins",
"version": "5.5.5", "version": "5.5.6",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/request", "name": "@vben/request",
"version": "5.5.5", "version": "5.5.6",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/icons", "name": "@vben/icons",
"version": "5.5.5", "version": "5.5.6",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/locales", "name": "@vben/locales",
"version": "5.5.5", "version": "5.5.6",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/preferences", "name": "@vben/preferences",
"version": "5.5.5", "version": "5.5.6",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/stores", "name": "@vben/stores",
"version": "5.5.5", "version": "5.5.6",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/styles", "name": "@vben/styles",
"version": "5.5.5", "version": "5.5.6",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/types", "name": "@vben/types",
"version": "5.5.5", "version": "5.5.6",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/utils", "name": "@vben/utils",
"version": "5.5.5", "version": "5.5.6",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -51,7 +51,7 @@ function generateMenus(
// 处理子菜单 // 处理子菜单
const resultChildren = hideChildrenInMenu const resultChildren = hideChildrenInMenu
? [] ? []
: (children as MenuRecordRaw[]); : ((children as MenuRecordRaw[]) ?? []);
// 设置子菜单的父子关系 // 设置子菜单的父子关系
if (resultChildren.length > 0) { if (resultChildren.length > 0) {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/playground", "name": "@vben/playground",
"version": "5.5.5", "version": "5.5.6",
"homepage": "https://vben.pro", "homepage": "https://vben.pro",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -208,22 +208,34 @@ setupVbenVxeTable({
} }
function renderConfirm(opt: Recordable<any>) { function renderConfirm(opt: Recordable<any>) {
let viewportWrapper: HTMLElement | null = null;
return h( return h(
Popconfirm, Popconfirm,
{ {
/**
* popconfirm用在固定列中时
*
* body或者表格视口区域作为弹窗容器时又会导致弹窗无法跟随表格滚动
*
*
*/
getPopupContainer(el) { getPopupContainer(el) {
return ( viewportWrapper = el.closest('.vxe-table--viewport-wrapper');
el return document.body;
.closest('.vxe-table--viewport-wrapper')
?.querySelector('.vxe-table--main-wrapper')
?.querySelector('tbody') || document.body
);
}, },
placement: 'topLeft', placement: 'topLeft',
title: $t('ui.actionTitle.delete', [attrs?.nameTitle || '']), title: $t('ui.actionTitle.delete', [attrs?.nameTitle || '']),
...props, ...props,
...opt, ...opt,
icon: undefined, icon: undefined,
onOpenChange: (open: boolean) => {
// 当弹窗打开时,禁止表格的滚动
if (open) {
viewportWrapper?.style.setProperty('pointer-events', 'none');
} else {
viewportWrapper?.style.removeProperty('pointer-events');
}
},
onConfirm: () => { onConfirm: () => {
attrs?.onClick?.({ attrs?.onClick?.({
code: opt.code, code: opt.code,

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/turbo-run", "name": "@vben/turbo-run",
"version": "5.5.5", "version": "5.5.6",
"private": true, "private": true,
"license": "MIT", "license": "MIT",
"type": "module", "type": "module",

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/vsh", "name": "@vben/vsh",
"version": "5.5.5", "version": "5.5.6",
"private": true, "private": true,
"license": "MIT", "license": "MIT",
"type": "module", "type": "module",