Ход бизнес-процесса без навигации по шагам степпер показывает сам: без пропа
interactiveшаги некликабельны, а шапка безitemsработает как трекер статуса — см. сценарий «Статус заявки». Компонент CdsStages, решавший ту же задачу, устарел. Для равнозначных разделов, между которыми переключаются в любом порядке, — CdsTabs.
Анатомия
Степпер состоит из шапки с шагами, контентной части и кнопок навигации — последние две появляются, когда шаги заданы через items. Каждый шаг — это индикатор состояния с линией прогресса до следующего шага, заголовок и описание.
Вариации
Шаги из массива
Передайте в items массив объектов — заголовок, описание и значение шага читаются по ключам item-title, item-text и item-value (по умолчанию title, text, значение — порядковый номер шага, начиная с единицы). Контент шага задают слоты item.{value} или общий item, а кнопки «Назад» / «Далее» рендерятся автоматически: тексты меняются пропами prev-text / next-text, скрыть кнопки — hide-actions.
Состояния
Шаги можно объявить и вручную — компонентами CdsStepsItem в слоте по умолчанию: рендерится только шапка, контент и навигация остаются за вами. У шага три состояния: error — завершён с ошибкой, warning — требует внимания, disabled — недоступен.
Интерактивные шаги
Проп interactive разрешает переходить на любой шаг кликом или с клавиатуры — прогресс анимируется каскадно, disabled-шаги пропускаются. Проп readonly отключает переходы, сохраняя внешний вид.
Вертикальная компоновка
Проп vertical разворачивает шапку в столбец — подходит для трекеров статуса и узких панелей.
Слоты
Слоты дают контроль над каждой зоной степпера:
| Слот | Описание |
|---|---|
default | Свои CdsStepsItem, когда items не задан |
title, text | Заголовок и описание каждого шага |
header-item, header-item.{value} | Полная замена контента шага в шапке |
item, item.{value} | Контент шага в контентной части |
actions | Свои кнопки навигации (получает методы prev / next) |
prev, next | Замена отдельной кнопки внутри стандартного блока навигации |
Слоты title и text получают состояние шага (selected, complete, error, first, last…) — удобно дорисовывать теги и подсказки.
Модель
Активный шаг управляется через v-model. У шагов из items значение по умолчанию — порядковый номер с единицы, у объявленных вручную — индекс с нуля; своё значение задаётся ключом item-value или пропом value у CdsStepsItem. Методы prev / next доступны через ref компонента.
Рекомендации
Сценарии использования
Мастер оформления
Классический мастер: каждому шагу — свой слот item.{value} с формой. Встроенные кнопки листают шаги, а поля привязаны к общему состоянию через v-model, поэтому данные не теряются при переходах.
Подтверждение перед переходом
Слот actions заменяет встроенные кнопки и получает методы prev и next — условия перехода вы определяете сами. Здесь кнопка «Далее» заблокирована, пока пользователь не примет условия обслуживания.
Статус заявки
Шапка без items работает как трекер процесса: только шаги, без контента и кнопок. Пройденные этапы отмечены индикаторами, а описания подсказывают даты и сроки. Проп vertical укладывает историю в столбец.
API
CdsSteps
Пропсы
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
disabled | boolean | null | undefined | null | Заблокированное состояние |
hideActions | boolean | undefined | — | Скрыть кнопки навигации по шагам |
interactive | boolean | undefined | — | Возможность перехода на шаг по клику |
itemProps | SelectItemKey | 'props' | Свойство объекта, содержащее пропсы для элемента, либо функция для их получения |
items | any[] | undefined | [] | Массив элементов для отображения |
itemText | SelectItemKey | 'text' | Ключ описания шага в объекте элемента items |
itemTitle | SelectItemKey | 'title' | Свойство объекта, используемое как заголовок элемента, либо функция для его получения |
itemValue | SelectItemKey | 'value' | Свойство объекта, используемое как значение элемента, либо функция для его получения |
mandatory | boolean | "force" | undefined | 'force' | Обязательный выбор хотя бы одного элемента |
max | number | undefined | — | Максимальное количество выбираемых элементов |
modelValue | any | — | Значение выбранных элементов группы |
multiple | boolean | undefined | — | Разрешить множественный выбор |
nextText | string | undefined | '$cds.steps.next' | Текст кнопки перехода на следующий шаг |
prevText | string | undefined | '$cds.steps.prev' | Текст кнопки перехода на предыдущий шаг |
readonly | boolean | null | undefined | null | Только для чтения |
required | boolean | "force" | undefined | 'force' | Обязательный выбор хотя бы одного элемента |
selectedClass | string | undefined | 'cds-steps-item--current' | CSS класс для выбранного состояния |
tag | string | JSXComponent<any> | undefined | 'div' | Пользовательский HTML-тег для отображения |
theme | string | undefined | — | Тема компонента |
vertical | boolean | undefined | — | Вертикальное отображение |
События
| Имя | Тип | Описание |
|---|---|---|
update:modelValue | [value: unknown] | Событие изменения v-model |
Слоты
| Имя | Тип | Описание |
|---|---|---|
actions | CdsStepsSlot | Кастомные кнопки навигации |
default | CdsStepsSlot | Контент шапки: кастомные CdsStepsItem (используется, если не задан items) |
header-item | CdsStepsItemSlot | Кастомный рендер контента каждого шага в шапке |
item | CdsStepsInternalItem | Контент шага в контентной части |
next | CdsStepsActionsSlot | Кастомная кнопка перехода на следующий шаг |
prev | CdsStepsActionsSlot | Кастомная кнопка перехода на предыдущий шаг |
text | CdsStepsItemSlot | Кастомное описание каждого шага |
title | CdsStepsItemSlot | Кастомный заголовок каждого шага |
Exposed
| Имя | Тип | Описание |
|---|---|---|
next | () => void | Переходит к следующему шагу. |
prev | () => void | Переходит к предыдущему шагу. |
CdsStepsActions
Пропсы
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
disabled | boolean | "next" | "prev" | undefined | false | Блокировка кнопок навигации: обеих или конкретной |
nextText | string | undefined | '$cds.steps.next' | Текст кнопки перехода на следующий шаг |
prevText | string | undefined | '$cds.steps.prev' | Текст кнопки перехода на предыдущий шаг |
События
| Имя | Тип | Описание |
|---|---|---|
click:next | [] | Клик по кнопке перехода на следующий шаг |
click:prev | [] | Клик по кнопке перехода на предыдущий шаг |
Слоты
| Имя | Тип | Описание |
|---|---|---|
next | CdsStepsActionsSlot | Кастомная кнопка перехода на следующий шаг |
prev | CdsStepsActionsSlot | Кастомная кнопка перехода на предыдущий шаг |
CdsStepsItem
Пропсы
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
disabled | boolean | null | undefined | null | Заблокированное состояние |
error | boolean | undefined | — | Шаг завершен с ошибкой |
interactive | boolean | undefined | — | Возможность перехода на шаг по клику |
readonly | boolean | null | undefined | null | Только для чтения |
selectedClass | string | undefined | — | CSS класс для выбранного состояния |
text | string | undefined | — | Описание шага |
title | string | undefined | — | Заголовок шага |
value | any | — | Значение компонента в группе |
warning | boolean | undefined | — | Шаг требует внимания |
События
| Имя | Тип | Описание |
|---|---|---|
group:selected | [value: { value: boolean; }] | Событие изменения выбранного состояния шага в группе |
Слоты
| Имя | Тип | Описание |
|---|---|---|
default | CdsStepsItemSlot | Дополнительный контент шага после заголовка и описания |
text | CdsStepsItemSlot | Кастомное описание шага |
title | CdsStepsItemSlot | Кастомный заголовок шага |
CdsStepsView
Пропсы
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
crossfade | boolean | undefined | — | Слайды сменяются плавным перекрестным затуханием вместо сдвига |
direction | "horizontal" | "vertical" | undefined | 'horizontal' | Переключение между горизонтальным или вертикальным отображением. |
disabled | boolean | null | undefined | null | Заблокированное состояние |
max | number | undefined | — | Максимальное количество выбираемых элементов |
modelValue | any | — | Значение выбранных элементов группы |
multiple | boolean | undefined | — | Разрешить множественный выбор |
reverse | boolean | undefined | — | Инвертирует направление анимации перехода между слайдами |
selectedClass | string | undefined | — | CSS класс для выбранного состояния |
tag | string | JSXComponent<any> | undefined | 'div' | Пользовательский HTML-тег для отображения |
theme | string | undefined | — | Тема компонента |
transitionDuration | number | undefined | — | Длительность анимации перехода между слайдами в миллисекундах |
verticalArrows | boolean | "left" | "right" | undefined | — | Размещает стрелки навигации вертикально: 'left' или 'right' — сторона, true — сторона по умолчанию |
События
| Имя | Тип | Описание |
|---|---|---|
update:modelValue | [value: any] | Событие изменения v-model |
Слоты
| Имя | Тип | Описание |
|---|---|---|
additional | { group: GroupProvide; } | Дополнительный контент поверх слайдов — например точки-индикаторы или собственная навигация |
default | { group: GroupProvide; } | Слайды. В параметрах — состояние группы для управления активным слайдом |
next | { props: ControlProps; } | Кнопка перехода к следующему слайду. В параметрах — готовые пропсы для своей кнопки |
prev | { props: ControlProps; } | Кнопка перехода к предыдущему слайду. В параметрах — готовые пропсы для своей кнопки |
CdsStepsViewItem
Пропсы
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
disabled | boolean | null | undefined | null | Заблокированное состояние |
eager | boolean | undefined | — | Принудительно рендерит содержимое компонента при его использовании. Это полезно, если у вас есть контент, который не отображается в DOM, но который необходимо проиндексировать для SEO. |
reverseTransition | string | boolean | undefined | — | Переход при показе слайда в обратном направлении. Имя transition-компонента или false, чтобы отключить анимацию |
selectedClass | string | undefined | — | CSS класс для выбранного состояния |
transition | string | boolean | undefined | — | Переход при показе слайда в прямом направлении. Имя transition-компонента или false, чтобы отключить анимацию |
value | any | — | Значение компонента в группе |
Слоты
| Имя | Тип | Описание |
|---|---|---|
default | any | Контент слайда |