-
Notifications
You must be signed in to change notification settings - Fork 7.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: add demo for modify menu badge data
- Loading branch information
Showing
5 changed files
with
135 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,4 @@ | ||
export { default as MenuBadge } from './components/menu-badge.vue'; | ||
export * from './components/normal-menu'; | ||
export { default as Menu } from './menu.vue'; | ||
export type * from './types'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,116 @@ | ||
<script lang="ts" setup> | ||
import { Fallback } from '@vben/common-ui'; | ||
import { reactive } from 'vue'; | ||
import { useRoute } from 'vue-router'; | ||
import { Page } from '@vben/common-ui'; | ||
import { useAccessStore } from '@vben/stores'; | ||
import { MenuBadge } from '@vben-core/menu-ui'; | ||
import { Button, Card, Radio, RadioGroup } from 'ant-design-vue'; | ||
import { useVbenForm } from '#/adapter/form'; | ||
const colors = [ | ||
{ label: '预设:默认', value: 'default' }, | ||
{ label: '预设:关键', value: 'destructive' }, | ||
{ label: '预设:主要', value: 'primary' }, | ||
{ label: '预设:成功', value: 'success' }, | ||
{ label: '自定义', value: 'bg-gray-200 text-black' }, | ||
]; | ||
const route = useRoute(); | ||
const accessStore = useAccessStore(); | ||
const menu = accessStore.getMenuByPath(route.path); | ||
const badgeProps = reactive({ | ||
badge: menu?.badge as string, | ||
badgeType: menu?.badge ? 'normal' : (menu?.badgeType as 'dot' | 'normal'), | ||
badgeVariants: menu?.badgeVariants as string, | ||
}); | ||
const [Form] = useVbenForm({ | ||
handleValuesChange(values) { | ||
badgeProps.badge = values.badge; | ||
badgeProps.badgeType = values.badgeType; | ||
badgeProps.badgeVariants = values.badgeVariants; | ||
}, | ||
schema: [ | ||
{ | ||
component: 'RadioGroup', | ||
componentProps: { | ||
buttonStyle: 'solid', | ||
options: [ | ||
{ label: '点徽标', value: 'dot' }, | ||
{ label: '文字徽标', value: 'normal' }, | ||
], | ||
optionType: 'button', | ||
}, | ||
defaultValue: badgeProps.badgeType, | ||
fieldName: 'badgeType', | ||
label: '类型', | ||
}, | ||
{ | ||
component: 'Input', | ||
componentProps: { | ||
maxLength: 4, | ||
placeholder: '请输入徽标内容', | ||
style: { width: '200px' }, | ||
}, | ||
defaultValue: badgeProps.badge, | ||
fieldName: 'badge', | ||
label: '徽标内容', | ||
}, | ||
{ | ||
component: 'RadioGroup', | ||
defaultValue: badgeProps.badgeVariants, | ||
fieldName: 'badgeVariants', | ||
label: '颜色', | ||
}, | ||
{ | ||
component: 'Input', | ||
fieldName: 'action', | ||
}, | ||
], | ||
showDefaultActions: false, | ||
}); | ||
function updateMenuBadge() { | ||
if (menu) { | ||
menu.badge = badgeProps.badge; | ||
menu.badgeType = badgeProps.badgeType; | ||
menu.badgeVariants = badgeProps.badgeVariants; | ||
} | ||
} | ||
</script> | ||
|
||
<template> | ||
<Fallback description="用于徽标示例" status="coming-soon" title="徽标示例" /> | ||
<Page | ||
description="菜单项上可以显示徽标,这些徽标可以主动更新" | ||
title="菜单徽标" | ||
> | ||
<Card title="徽标更新"> | ||
<Form> | ||
<template #badgeVariants="slotProps"> | ||
<RadioGroup v-bind="slotProps"> | ||
<Radio | ||
v-for="color in colors" | ||
:key="color.value" | ||
:value="color.value" | ||
> | ||
<div | ||
:title="color.label" | ||
class="flex h-[14px] w-[50px] items-center justify-start" | ||
> | ||
<MenuBadge | ||
v-bind="{ ...badgeProps, badgeVariants: color.value }" | ||
/> | ||
</div> | ||
</Radio> | ||
</RadioGroup> | ||
</template> | ||
<template #action> | ||
<Button type="primary" @click="updateMenuBadge">更新徽标</Button> | ||
</template> | ||
</Form> | ||
</Card> | ||
</Page> | ||
</template> |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.