Меню
Компонент ui.system.menu
представляет собой выпадающее меню (попап), которое предназначено для отображения списка действий: настройки, дополнительные опции или контекстные команды. Меню может содержать пункты с иконками, подзаголовками, счетчиками, блокировкой, подменю, секциями и расширенным заголовком. Компонент поддерживает использование как в чистом JavaScript, так и во Vue 3 через расширение.
Подключение
import { Menu, MenuItemDesign } from 'ui.system.menu'; const menu = new Menu({ bindElement: document.getElementById('menu-button'), items: [ { title: 'Открыть', onClick: () => console.log('Открыто'), }, { title: 'Удалить', design: MenuItemDesign.Alert, onClick: () => console.log('Удалено'), }, ], }); menu.show();
Использование в Vue 3
Компонент меню можно использовать в Vue 3 приложениях с помощью расширения ui.vue3.components.menu
. Доступен компонент BMenu
и тип MenuOptions
.
import { BMenu, type MenuOptions } from 'ui.vue3.components.menu'; // @vue/component export const MyComponent = { components: { BMenu, }, data() { return { isMenuShown: false, }; }, computed: { menuOptions() { return { bindElement: this.$refs.button, items: [ { title: 'Пункт 1', onClick: () => { console.log('Выбран пункт 1'); }, }, { title: 'Подменю', subMenu: { items: [ { title: 'Вложенная опция', onClick: () => { console.log('Подменю выбрано'); }, }, ], }, }, ], }; }, }, template: ` <button ref="button" @click="isMenuShown = true"> Открыть меню </button> <BMenu v-if="isMenuShown" :options="menuOptions" @close="isMenuShown = false"/> `, };
Параметры компонента
MenuOptions — основные параметры меню, наследуют PopupOptions
из main.popup
и расширяют их специфичными полями.
Параметртип | Описание |
---|---|
sectionsMenuSectionOptions[] |
Массив секций, по которым группируются пункты меню. Список секций, нужен для отделения групп пунктов друг от друга. Все элементы без секции отрисовываются в начале меню. Секции отделяются разделителем, у которого может быть заголовок. |
itemsMenuItemOptions[] |
Массив пунктов меню. Каждый пункт может иметь подменю, иконку, счетчик и так далее. |
richHeaderRichHeader |
Расширенный заголовок меню с иконкой, названием, подзаголовком и кнопкой. |
closeOnItemClickboolean |
Закрывать ли меню при клике на пункт, если у пункта нет подменю. |
MenuItemOptions — параметры отдельного пункта меню.
Параметртип | Описание |
---|---|
idstring |
Уникальный идентификатор пункта. |
sectionCodestring |
Код секции, к которой принадлежит пункт. |
designstring |
Стилевое оформление пункта. |
onClickFunction |
Функция, вызываемая при клике на пункт. |
titlestring |
Основной текст пункта. |
subtitlestring |
Дополнительный текст под заголовком. |
badgeText{title: string, color: string} |
Текст бейджа справа от заголовка. |
isSelectedboolean |
Отображать ли галочку выбора слева. |
iconstring |
Код иконки слева, из иконок ui.icon-set . |
svgSVGElement |
Кастомный SVG-элемент вместо иконки. |
extraIconobject |
Иконка-действие справа, например, звезда. |
counterCounterOptions |
Счетчик справа, из ui.cnt . |
subMenuMenuOptions[] |
Подменю, отображается при наведении. |
isLockedboolean |
Показывать значок замка слева. |
closeOnSubItemClickboolean |
Закрывать ли основное меню при клике во вложенном меню. |
MenuSectionOptions — параметры секции меню.
Параметртип | Описание |
---|---|
codestring |
Уникальный код секции, используется для группировки пунктов. |
titlestring |
Заголовок секции, отображается над группой пунктов. Если передать пустым, то секция будет отделена только разделительной чертой. |
design'default' | 'accent' |
Стиль оформления секции. |
RichHeader — параметры богатого заголовка.
Параметртип | Описание |
---|---|
design'default' | 'copilot' |
Дизайн заголовка. |
titlestring |
Текст заголовка. |
subtitlestring |
Текст подзаголовка. |
iconstring |
Иконка из ui.icon-set.api.core . |
onClickfunction |
Функция, вызываемая при клике на заголовок. |
Методы компонента
Класс Menu
предоставляет следующие публичные методы:
Метод | Описание | Параметры | Возвращаемое значение |
---|---|---|---|
show(bindElement: HTMLElement): void |
Отображает меню. Если передан bindElement , привязывает попап к нему. |
bindElement — DOM-элемент, к которому привязывается меню |
— |
updateItems(itemsOptions: MenuItemOptions[]): void |
Обновляет список пунктов меню. Сохраняет состояние открытых подменю, если это возможно. | itemsOptions — новый массив пунктов |
— |
close(): void |
Закрывает меню программно. | — | — |
destroy(): void |
Уничтожает меню, удаляет все обработчики и подменю. Вызывается автоматически при закрытии, если установлен closeByEsc . |
— | — |
getOptions(): MenuOptions |
Возвращает текущие параметры меню. | — | MenuOptions |
getPopup(): Popup |
Возвращает внутренний экземпляр Popup из main.popup . |
— | Popup |
getPopupContainer(): HTMLElement |
Возвращает контейнер попапа (DOM-элемент). | — | HTMLElement |
Примеры использования
Меню с секциями и расширенным заголовком
new BX.UI.System.Menu({ richHeader: { design: 'copilot', title: 'AI Assistant', subtitle: 'Готов помочь', icon: 'main-copilot-ai', onClick: () => console.log('Header clicked') }, sections: [ { code: 'actions', title: 'Действия', design: BX.UI.System.MenuSectionDesign.Accent }, { code: 'settings', title: 'Настройки' } ], items: [ { title: 'Создать', sectionCode: 'actions', icon: ‘outline-add-l', }, { title: 'Редактировать', sectionCode: ‘actions', }, { title: 'Темная тема', sectionCode: 'settings', isSelected: true, }, ], }).show();
Меню с подменю
new BX.UI.System.Menu({ items: [ { title: 'Экспорт', subMenu: { items: [ { title: 'PDF', onClick: () => console.log('PDF') }, { title: 'Excel', onClick: () => console.log('Excel') }, ], }, }, { title: 'Удалить', design: BX.UI.System.MenuItemDesign.Alert, onClick: () => confirm(‘Удалить?'), }, ], }).show();
Пользовательские комментарии
Помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.