Skip to content

XtfSegmented

组件说明

xtf-segmented 是用于局部视图切换的分段器,适合卡片内的订单、用户等轻量筛选。它以选项索引作为当前状态,并提供按钮和文字两种样式。


基础用法

1. 字符串选项

vue
<template>
  <xtf-segmented
    :current="current"
    :values="['日', '周', '月']"
    @change="current = $event.currentIndex"
  />
</template>
<script>
export default {
  data() {
    return { current: 0 }
  }
}
</script>

2. 对象选项和事件

vue
<template>
  <xtf-segmented :current="current" :options="options" block @clickItem="select" />
</template>
<script>
export default {
  data() {
    return {
      current: 0,
      options: [
        { label: '订单', value: 'order' },
        { label: '用户', value: 'user' }
      ]
    }
  },
  methods: {
    select(payload) {
      this.current = payload.currentIndex
      uni.showToast({ title: payload.value, icon: 'none' })
    }
  }
}
</script>

3. 文字样式和禁用项

vue
<template>
  <xtf-segmented
    :current="current"
    style-type="text"
    active-color="#d946ef"
    size="lg"
    :options="options"
    @update:current="current = $event"
  />
</template>
<script>
export default {
  data() {
    return {
      current: 0,
      options: [
        { label: '全部', value: 'all' },
        { label: '待审核', value: 'pending', disabled: true },
        { label: '已完成', value: 'done' }
      ]
    }
  }
}
</script>

全部属性

属性类型默认值作用描述适用范围
currentNumber | String0当前激活项的索引,可用 v-model:current受控切换
valuesArray[]字符串或对象选项数组;options 有值时忽略简单选项
optionsArray[]优先级更高的选项数组带值或禁用项
styleTypeString'button'buttontext切换外观
activeColorString'var(--xtf-color-primary)'激活颜色品牌色定制
sizeString'md'sm/md/lg 尺寸不同密度布局
blockBooleanfalse是否撑满父容器并均分全宽切换栏
customClassString''根节点类名局部定制
customStyleString | Object''根节点样式局部定制

values / options 每项支持的字段

字段类型默认值说明
labelString自动推导显示文本;也支持 text
textString自动推导label 的兼容显示字段
valueString | Number索引事件 payload 中的业务值
disabledBooleanfalse禁用点击和事件发送

事件

事件名称触发时机回调参数参数说明
update:current选择新项时(index: Number)新激活项索引
change选择新项时(payload: Object){ currentIndex, current, value, item }
clickItem选择新项时(payload: Object)change;禁用或重复点击不触发

事件使用示例

vue
<template>
  <xtf-segmented
    :current="current"
    :values="['全部', '进行中']"
    @update:current="current = $event"
    @change="changed"
    @clickItem="clicked"
  />
</template>
<script>
export default {
  data() {
    return { current: 0 }
  },
  methods: {
    changed(p) {
      console.log('change', p.value)
    },
    clicked(p) {
      uni.showToast({ title: '索引 ' + p.currentIndex, icon: 'none' })
    }
  }
}
</script>

主题说明

  • 激活背景使用 var(--xtf-segmented-active-color),由 activeColor 写入。
  • 容器使用 var(--xtf-color-surface-muted)var(--xtf-color-border),普通文字使用 var(--xtf-color-text-secondary)
  • xtf-config-provider 覆盖全局颜色,或传入 activeColor 调整单个组件。

MIT Licensed