Appearance
Stepper 步骤器
展示流程进度并切换步骤。
命令行安装
bash
npx @loongship-kit/ui add stepper组件结构
| 角色 | 组件 | 职责 | 使用条件 |
|---|---|---|---|
| 根组件 | Stepper | 管理当前步骤和导航规则 | 必需 |
| 步骤容器 | StepperItem | 声明单个步骤及其状态 | 必需 |
| 交互与标记 | StepperTrigger、StepperIndicator | 切换步骤并展示步骤标记 | 触发器必需 |
| 连接组件 | StepperSeparator | 展示相邻步骤之间的连接线 | 按需 |
| 语义内容 | StepperTitle、StepperDescription | 提供步骤标题和辅助说明 | 标题建议,描述按需 |
基础用法
Step 1 of 0
查看代码
vue
<template>
<Stepper :default-value="1">
<StepperItem :step="1">
<StepperTrigger>
<StepperIndicator />
<StepperTitle>创建任务</StepperTitle>
<StepperDescription>填写基础信息</StepperDescription>
</StepperTrigger>
<StepperSeparator />
</StepperItem>
<StepperItem :step="2">
<StepperTrigger>
<StepperIndicator />
<StepperTitle>配置规则</StepperTitle>
<StepperDescription>设置执行条件</StepperDescription>
</StepperTrigger>
<StepperSeparator />
</StepperItem>
<StepperItem :step="3">
<StepperTrigger>
<StepperIndicator />
<StepperTitle>完成</StepperTitle>
<StepperDescription>确认并提交</StepperDescription>
</StepperTrigger>
<StepperSeparator />
</StepperItem>
</Stepper>
</template>自定义步骤图标
StepperIndicator 的默认插槽可替换步骤数字。使用 Loongship Icon 时同时安装 stepper 和 icon。
Step 3 of 0
查看代码
vue
<script setup lang="ts">
import { Icon } from '@/components/loongship/icon'
import {
Stepper,
StepperIndicator,
StepperItem,
StepperSeparator,
StepperTitle,
StepperTrigger
} from '@/components/loongship/stepper'
</script>
<template>
<Stepper :default-value="3">
<StepperItem :step="1">
<StepperTrigger>
<StepperIndicator><Icon name="document" size="md" /></StepperIndicator>
<StepperTitle>提交资料</StepperTitle>
</StepperTrigger>
<StepperSeparator />
</StepperItem>
<StepperItem :step="2">
<StepperTrigger>
<StepperIndicator><Icon name="shipping-truck" size="md" /></StepperIndicator>
<StepperTitle>运输中</StepperTitle>
</StepperTrigger>
<StepperSeparator />
</StepperItem>
<StepperItem :step="3">
<StepperTrigger>
<StepperIndicator><Icon name="file-done" size="md" /></StepperIndicator>
<StepperTitle>已完成</StepperTitle>
</StepperTrigger>
<StepperSeparator />
</StepperItem>
</Stepper>
</template>受控状态
Step 2 of 0
查看代码
vue
<script setup lang="ts">
import { ref } from 'vue'
const currentStep = ref(2)
</script>
<template>
<div class="vp-demo-showcase-column">
<Stepper v-model="currentStep">
<StepperItem v-for="step in 3" :key="step" :step="step">
<StepperTrigger>
<StepperIndicator />
<StepperTitle>步骤 {{ step }}</StepperTitle>
</StepperTrigger>
<StepperSeparator />
</StepperItem>
</Stepper>
<span>当前步骤:{{ currentStep }}</span>
</div>
</template>纵向与非线性流程
Step 1 of 0
查看代码
vue
<template>
<Stepper v-model="verticalStep" orientation="vertical" :linear="false">
<StepperItem :step="1">
<StepperTrigger>
<StepperIndicator />
<StepperTitle>申请已提交</StepperTitle>
<StepperDescription>可以自由返回此步骤</StepperDescription>
</StepperTrigger>
<StepperSeparator />
</StepperItem>
<StepperItem :step="2">
<StepperTrigger>
<StepperIndicator />
<StepperTitle>资料审核</StepperTitle>
<StepperDescription>非线性模式允许直接跳转</StepperDescription>
</StepperTrigger>
<StepperSeparator />
</StepperItem>
<StepperItem :step="3" disabled>
<StepperTrigger>
<StepperIndicator />
<StepperTitle>人工复核</StepperTitle>
<StepperDescription>此步骤当前不可用</StepperDescription>
</StepperTrigger>
<StepperSeparator />
</StepperItem>
</Stepper>
</template>线性模式与键盘操作
线性模式是默认行为,只允许返回已完成步骤或进入紧邻的下一步。设置 :linear="false" 后可以直接访问任意未禁用步骤。横向模式使用左右方向键,纵向模式使用上下方向键;Enter 或 Space 激活聚焦步骤。
内容由业务层渲染
步骤器只管理步骤状态。根据 v-model 在业务层渲染对应的表单或内容面板。
API
Stepper(主组件)
属性
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
v-model | number | - | 当前步骤编号 |
defaultValue | number | 1 | 非受控模式的初始步骤 |
orientation | 'horizontal' | 'vertical' | 'horizontal' | 排列方向和方向键导航方式 |
linear | boolean | true | 是否要求按顺序完成步骤 |
dir | 'ltr' | 'rtl' | 'ltr' | 阅读方向 |
as | string | Component | 'div' | 渲染元素 |
asChild | boolean | false | 合并到唯一子元素 |
class | ClassValue | - | 自定义类名 |
事件
| 事件 | 参数 | 说明 |
|---|---|---|
update:modelValue | value: number | undefined | 当前步骤改变时触发 |
插槽
| 插槽 | 参数 | 说明 |
|---|---|---|
default | { modelValue, totalSteps, goToStep, nextStep, prevStep, hasNext, hasPrev, isNextDisabled, isPrevDisabled, isFirstStep, isLastStep } | 步骤列表和流程控制内容 |
子组件
StepperItem — 单个步骤容器
属性
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
step | number | - | 步骤编号,必填 |
disabled | boolean | false | 是否禁止访问 |
completed | boolean | false | 是否显式标记为已完成 |
as | string | Component | 'div' | 渲染元素 |
asChild | boolean | false | 合并到唯一子元素 |
class | ClassValue | - | 自定义类名 |
插槽
| 插槽 | 参数 | 说明 |
|---|---|---|
default | { state: 'inactive' | 'active' | 'completed' } | 当前步骤状态内容 |
StepperTrigger — 步骤交互入口
属性
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
as | string | Component | 'button' | 渲染元素 |
asChild | boolean | false | 合并到唯一子元素 |
class | ClassValue | - | 自定义类名 |
插槽
| 插槽 | 参数 | 说明 |
|---|---|---|
default | — | 步骤标记、标题和说明 |
StepperIndicator — 步骤编号或状态图标
属性
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
as | string | Component | 'div' | 渲染元素 |
asChild | boolean | false | 合并到唯一子元素 |
class | ClassValue | - | 自定义类名 |
插槽
| 插槽 | 参数 | 说明 |
|---|---|---|
default | { step: number } | 替换步骤数字或渲染完成图标 |
StepperSeparator — 步骤连接线
属性
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
as | string | Component | 'div' | 渲染元素 |
asChild | boolean | false | 合并到唯一子元素 |
class | ClassValue | - | 自定义类名 |
插槽
| 插槽 | 参数 | 说明 |
|---|---|---|
default | — | 自定义连接线内容 |
StepperTitle / StepperDescription — 步骤标题与说明
属性
| 组件 | 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|---|
StepperTitle | as | string | Component | 'h4' | 渲染元素 |
StepperTitle | asChild | boolean | false | 合并到唯一子元素 |
StepperTitle | class | ClassValue | - | 自定义类名 |
StepperDescription | as | string | Component | 'p' | 渲染元素 |
StepperDescription | asChild | boolean | false | 合并到唯一子元素 |
StepperDescription | class | ClassValue | - | 自定义类名 |
插槽
| 组件 | 插槽 | 参数 | 说明 |
|---|---|---|---|
StepperTitle | default | — | 步骤标题 |
StepperDescription | default | — | 步骤辅助说明 |