feat: 添加上下文菜单演示,添加菜单项隐藏性 (#7057)

Co-authored-by: luoqiz <851092732@qq.com>
This commit is contained in:
luoqiz 2026-01-02 14:22:19 +08:00 committed by GitHub
parent a1bb132233
commit 89b237f6b4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 2234 additions and 2011 deletions

View File

@ -73,6 +73,7 @@ function handleClick(menu: IContextMenuItem) {
>
<template v-for="menu in menusView" :key="menu.key">
<ContextMenuItem
v-if="!menu.hidden"
:class="itemClass"
:disabled="menu.disabled"
:inset="menu.inset || !menu.icon"

View File

@ -10,6 +10,10 @@ interface IContextMenuItem {
* @param data
*/
handler?: (data: any) => void;
/**
* @zh_CN
*/
hidden?: boolean;
/**
* @zh_CN
*/

View File

@ -20,6 +20,7 @@ export {
VbenButtonGroup,
VbenCheckbox,
VbenCheckButtonGroup,
VbenContextMenu,
VbenCountToAnimator,
VbenFullScreen,
VbenInputPassword,

View File

@ -31,6 +31,7 @@
"dependencies": {
"@tanstack/vue-query": "catalog:",
"@vben-core/menu-ui": "workspace:*",
"@vben-core/shadcn-ui": "workspace:*",
"@vben/access": "workspace:*",
"@vben/common-ui": "workspace:*",
"@vben/constants": "workspace:*",

View File

@ -72,5 +72,8 @@
},
"button-group": {
"title": "Button Group"
},
"function": {
"contentMenu": "Content Menu"
}
}

View File

@ -72,5 +72,8 @@
},
"button-group": {
"title": "按钮组"
},
"function": {
"contentMenu": "上下文菜单"
}
}

View File

@ -328,6 +328,15 @@ const routes: RouteRecordRaw[] = [
title: $t('examples.button-group.title'),
},
},
{
name: 'ContextMenu',
path: '/examples/context-menu',
component: () => import('#/views/examples/context-menu/index.vue'),
meta: {
icon: 'mdi:menu',
title: $t('examples.function.contentMenu'),
},
},
],
},
];

View File

@ -0,0 +1,60 @@
<script setup lang="ts">
import { Page } from '@vben/common-ui';
import { VbenContextMenu } from '@vben-core/shadcn-ui';
import { Button, Card, message } from 'ant-design-vue';
const needHidden = (role: string) => {
return role === 'user';
};
const contextMenus = () => {
return [
{
text: '刷新',
key: 'refresh',
handler: (data: any) => {
message.success('刷新成功', data);
},
hidden: needHidden('admin'),
},
{
text: '关闭当前',
key: 'close-current',
handler: (data: any) => {
message.success('关闭当前', data);
},
hidden: needHidden('user'),
},
{
text: '关闭其他',
key: 'close-other',
handler: (data: any) => {
message.success('关闭其他', data);
},
},
{
text: '关闭所有',
key: 'close-all',
handler: (data: any) => {
message.success('关闭所有', data);
},
},
];
};
</script>
<template>
<Page title="Context Menu 上下文菜单">
<Card title="基本使用">
<div>一共四个菜单刷新关闭当前关闭其他关闭所有</div>
<br/>
<br/>
<VbenContextMenu :menus="contextMenus" :modal="true" item-class="pr-6">
<Button> 右键点击我打开上下文菜单(有隐藏项) </Button>
</VbenContextMenu>
</Card>
</Page>
</template>

File diff suppressed because it is too large Load Diff