Компонент Steps служит для отображения пошагового процесса, где каждый шаг визуализируется отдельной ячейкой с индикатором состояния. Он часто применяется в формах, процессах регистрации, оформлении заказов или других сценариях, где необходимо показать последовательность действий.
Базовая структура компонента выглядит следующим образом:
<template>
<el-steps :active="activeStep" finish-status="success">
<el-step title="Шаг 1" description="Описание шага 1"></el-step>
<el-step title="Шаг 2" description="Описание шага 2"></el-step>
<el-step title="Шаг 3" description="Описание шага 3"></el-step>
</el-steps>
</template>
<script setup>
import { ref } from 'vue'
const activeStep = ref(1)
</script>
Пояснения:
el-steps — контейнер для всех шагов.active — текущий активный шаг (индексация с 0).finish-status — статус завершённого шага
(success, error, warning).el-step — отдельный шаг с заголовком title
и необязательным описанием description.Компонент Steps поддерживает несколько вариантов отображения:
horizontal) —
стандартный вид, шаги располагаются слева направо.vertical) — шаги
располагаются сверху вниз.Пример вертикального отображения:
<el-steps direction="vertical" :active="activeStep">
<el-step title="Шаг 1" description="Первый этап"></el-step>
<el-step title="Шаг 2" description="Второй этап"></el-step>
<el-step title="Шаг 3" description="Третий этап"></el-step>
</el-steps>
Каждый шаг может иметь индивидуальный статус, который влияет на визуальное отображение:
wait — ожидает выполнения (по умолчанию).process — выполняется в данный момент.finish — выполнен успешно.error — произошла ошибка.Пример задания статусов:
<el-steps :active="1">
<el-step title="Шаг 1" status="finish"></el-step>
<el-step title="Шаг 2" status="process"></el-step>
<el-step title="Шаг 3" status="wait"></el-step>
</el-steps>
Можно использовать пользовательские иконки для каждого шага через
слот icon:
<el-steps :active="activeStep">
<el-step title="Регистрация">
<template #icon>
<i class="el-icon-user"></i>
</template>
</el-step>
<el-step title="Оплата">
<template #icon>
<i class="el-icon-credit-card"></i>
</template>
</el-step>
</el-steps>
Компонент Steps позволяет управлять расстоянием между шагами и их выравниванием:
align-center — выравнивание по центру.space — можно задать через CSS кастомное расстояние
между шагами.Пример центрирования:
<el-steps :active="2" align-center>
<el-step title="Шаг 1"></el-step>
<el-step title="Шаг 2"></el-step>
<el-step title="Шаг 3"></el-step>
</el-steps>
Для динамического изменения активного шага используется реактивная переменная:
<template>
<el-steps :active="activeStep">
<el-step title="Шаг 1"></el-step>
<el-step title="Шаг 2"></el-step>
<el-step title="Шаг 3"></el-step>
</el-steps>
<el-button @click="nextStep">Следующий шаг</el-button>
</template>
<script setup>
import { ref } from 'vue'
const activeStep = ref(0)
function nextStep() {
if (activeStep.value < 2) activeStep.value++
}
</script>
Чаще всего Steps комбинируется с компонентами форм или интерактивными
панелями (el-form, el-card) для создания
пошаговых процессов:
<el-steps :active="activeStep" finish-status="success">
<el-step title="Ввод данных"></el-step>
<el-step title="Подтверждение"></el-step>
<el-step title="Завершение"></el-step>
</el-steps>
<component :is="currentForm"></component>
<script setup>
import { ref, computed } from 'vue'
import StepOneForm from './StepOneForm.vue'
import StepTwoForm from './StepTwoForm.vue'
import StepThreeForm from './StepThreeForm.vue'
const activeStep = ref(0)
const currentForm = computed(() => {
switch (activeStep.value) {
case 0: return StepOneForm
case 1: return StepTwoForm
case 2: return StepThreeForm
}
})
</script>
Такой подход позволяет полностью контролировать переход между этапами, подгружать нужные формы и отображать их в зависимости от текущего шага.
step-width) — для задания
фиксированной ширины каждого шага.title и description
— для кастомизации заголовков и описаний с HTML или компонентами.Эти возможности делают компонент Steps гибким инструментом для визуализации процессов и улучшения UX в интерфейсах на Vue с использованием библиотеки Element Plus.