跳至内容

Segmented Control - 分段选择器 ​

更新日期

Demo ​

segmented-control/demo.vue

单选视图与筛选控件,基于 Reka UI ToggleGroup。保留方向键、Home / End 和禁用项处理,再次点击当前项不会清空选择。切换独立内容面板请使用 Tabs。

属性说明默认值
v-model当前选项,支持字符串联合类型必填
options{ value, label, disabled?, count?, ariaLabel? }[],支持只读数组必填
label组合控件的无障碍名称必填
sizesm:34px 工作台;md:44px 常规界面md
icon-only仅显示图标,并提供文字 Tooltipfalse
disabled禁用全部选项false

#icon="{ option, selected }" 插槽接收当前项及选中状态。应用通过完整的 UnoCSS / Iconify 类名映射渲染图标,公共组件不依赖应用的图标构建方式。没有图标插槽时仍显示标签。

vue
<script setup lang="ts">
import YlfSegmentedControl from '@yunlefun/vue/components/YlfSegmentedControl.vue'
import { shallowRef } from 'vue'

const view = shallowRef<'grid' | 'list'>('grid')
const options = [
  { value: 'grid', label: '网格视图' },
  { value: 'list', label: '列表视图' },
] as const
const icons = { grid: 'i-ri-grid-line', list: 'i-ri-list-check' }
</script>

<template>
  <YlfSegmentedControl v-model="view" :options="options" label="资源视图" size="sm" icon-only>
    <template #icon="{ option }">
      <i :class="icons[option.value]" />
    </template>
  </YlfSegmentedControl>
</template>

样式统一来自 --ylf-*:轻灰底座、表面色选中项、品牌色文字、细边框与焦点环。sm 与 YlfSelect size="sm" 对齐。触摸设备中选项至少 44px;减少动态效果时禁用过渡。不需要在业务页面覆盖选中态或圆角。