85 lines
1.8 KiB
Vue
85 lines
1.8 KiB
Vue
|
<docs>
|
|||
|
---
|
|||
|
order: 2
|
|||
|
title:
|
|||
|
zh-CN: 子菜单主题
|
|||
|
en-US: SubMenu theme
|
|||
|
---
|
|||
|
|
|||
|
## zh-CN
|
|||
|
|
|||
|
你可以通过 `theme` 属性来设置 SubMenu 的主题从而达到不同目录树下不同主题色的效果。该例子默认为根目录深色,子目录浅色效果。
|
|||
|
|
|||
|
## en-US
|
|||
|
|
|||
|
You can config SubMenu theme with `theme` prop to enable different theme color effect. This sample is dark for root and light for SubMenu.
|
|||
|
|
|||
|
</docs>
|
|||
|
|
|||
|
<template>
|
|||
|
<div>
|
|||
|
<a-switch
|
|||
|
:checked="theme === 'dark'"
|
|||
|
checked-children="dark"
|
|||
|
un-checked-children="light"
|
|||
|
@Change="changeTheme"
|
|||
|
/>
|
|||
|
<br />
|
|||
|
<br />
|
|||
|
<a-menu
|
|||
|
:style="{ width: '256px' }"
|
|||
|
:open-keys="openKeys"
|
|||
|
:selected-keys="selectedKeys"
|
|||
|
mode="vertical"
|
|||
|
theme="dark"
|
|||
|
:items="items"
|
|||
|
@click="handleClick"
|
|||
|
/>
|
|||
|
</div>
|
|||
|
</template>
|
|||
|
<script lang="ts" setup>
|
|||
|
import { computed, ref, VueElement, ComputedRef, h } from 'vue';
|
|||
|
import { MailOutlined } from '@ant-design/icons-vue';
|
|||
|
import type { MenuProps } from 'ant-design-vue';
|
|||
|
|
|||
|
const selectedKeys = ref<string[]>(['1']);
|
|||
|
const openKeys = ref<string[]>(['sub1']);
|
|||
|
const theme = ref<MenuProps['theme']>('light');
|
|||
|
|
|||
|
function getItem(
|
|||
|
label: VueElement | string,
|
|||
|
key: string,
|
|||
|
icon?: any,
|
|||
|
children?: MenuProps['items'],
|
|||
|
theme?: 'light' | 'dark',
|
|||
|
): MenuProps['items'][number] {
|
|||
|
return {
|
|||
|
key,
|
|||
|
icon,
|
|||
|
children,
|
|||
|
label,
|
|||
|
theme,
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
const items: ComputedRef<MenuProps['items']> = computed(() => [
|
|||
|
getItem(
|
|||
|
'Navigation One',
|
|||
|
'sub1',
|
|||
|
() => h(MailOutlined),
|
|||
|
[getItem('Option 1', '1'), getItem('Option 2', '2'), getItem('Option 3', '3')],
|
|||
|
theme.value,
|
|||
|
),
|
|||
|
getItem('Option 5', '5'),
|
|||
|
getItem('Option 6', '6'),
|
|||
|
]);
|
|||
|
|
|||
|
function handleClick(info: any) {
|
|||
|
console.log('click', info);
|
|||
|
}
|
|||
|
|
|||
|
function changeTheme(checked: boolean) {
|
|||
|
theme.value = checked ? 'dark' : 'light';
|
|||
|
}
|
|||
|
</script>
|