You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
151 lines
2.9 KiB
151 lines
2.9 KiB
<docs>
|
|
---
|
|
order: 2
|
|
title:
|
|
zh-CN: 缩起内嵌菜单
|
|
en-US: Collapsed inline menu
|
|
---
|
|
|
|
## zh-CN
|
|
|
|
内嵌菜单可以被缩起/展开。
|
|
|
|
你可以在 [Layout](/components/layout-cn/#components-layout-demo-side) 里查看侧边布局结合的完整示例。
|
|
|
|
## en-US
|
|
|
|
Inline menu could be collapsed.
|
|
|
|
Here is [a complete demo](/components/layout/#components-layout-demo-side) with sider layout.
|
|
|
|
</docs>
|
|
|
|
<template>
|
|
<div style="width: 256px">
|
|
<a-button type="primary" style="margin-bottom: 16px" @click="toggleCollapsed">
|
|
<MenuUnfoldOutlined v-if="state.collapsed" />
|
|
<MenuFoldOutlined v-else />
|
|
</a-button>
|
|
<a-menu
|
|
v-model:openKeys="state.openKeys"
|
|
v-model:selectedKeys="state.selectedKeys"
|
|
mode="inline"
|
|
theme="dark"
|
|
:inline-collapsed="state.collapsed"
|
|
:items="items"
|
|
></a-menu>
|
|
</div>
|
|
</template>
|
|
|
|
<script lang="ts" setup>
|
|
import { reactive, watch, h } from 'vue';
|
|
import {
|
|
MenuFoldOutlined,
|
|
MenuUnfoldOutlined,
|
|
PieChartOutlined,
|
|
MailOutlined,
|
|
DesktopOutlined,
|
|
InboxOutlined,
|
|
AppstoreOutlined,
|
|
} from '@ant-design/icons-vue';
|
|
const state = reactive({
|
|
collapsed: false,
|
|
selectedKeys: ['1'],
|
|
openKeys: ['sub1'],
|
|
preOpenKeys: ['sub1'],
|
|
});
|
|
const items = reactive([
|
|
{
|
|
key: '1',
|
|
icon: () => h(PieChartOutlined),
|
|
label: 'Option 1',
|
|
title: 'Option 1',
|
|
},
|
|
{
|
|
key: '2',
|
|
icon: () => h(DesktopOutlined),
|
|
label: 'Option 2',
|
|
title: 'Option 2',
|
|
},
|
|
{
|
|
key: '3',
|
|
icon: () => h(InboxOutlined),
|
|
label: 'Option 3',
|
|
title: 'Option 3',
|
|
},
|
|
{
|
|
key: 'sub1',
|
|
icon: () => h(MailOutlined),
|
|
label: 'Navigation One',
|
|
title: 'Navigation One',
|
|
children: [
|
|
{
|
|
key: '5',
|
|
label: 'Option 5',
|
|
title: 'Option 5',
|
|
},
|
|
{
|
|
key: '6',
|
|
label: 'Option 6',
|
|
title: 'Option 6',
|
|
},
|
|
{
|
|
key: '7',
|
|
label: 'Option 7',
|
|
title: 'Option 7',
|
|
},
|
|
{
|
|
key: '8',
|
|
label: 'Option 8',
|
|
title: 'Option 8',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
key: 'sub2',
|
|
icon: () => h(AppstoreOutlined),
|
|
label: 'Navigation Two',
|
|
title: 'Navigation Two',
|
|
children: [
|
|
{
|
|
key: '9',
|
|
label: 'Option 9',
|
|
title: 'Option 9',
|
|
},
|
|
{
|
|
key: '10',
|
|
label: 'Option 10',
|
|
title: 'Option 10',
|
|
},
|
|
{
|
|
key: 'sub3',
|
|
label: 'Submenu',
|
|
title: 'Submenu',
|
|
children: [
|
|
{
|
|
key: '11',
|
|
label: 'Option 11',
|
|
title: 'Option 11',
|
|
},
|
|
{
|
|
key: '12',
|
|
label: 'Option 12',
|
|
title: 'Option 12',
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
]);
|
|
watch(
|
|
() => state.openKeys,
|
|
(_val, oldVal) => {
|
|
state.preOpenKeys = oldVal;
|
|
},
|
|
);
|
|
const toggleCollapsed = () => {
|
|
state.collapsed = !state.collapsed;
|
|
state.openKeys = state.collapsed ? [] : state.preOpenKeys;
|
|
};
|
|
</script>
|