TUI

SwitchTabs 标签卡切换
用于视图切换、内容分类的轻量组件,支持多种样式
基础用法
用于在多个分类或状态之间切换,支持绑定选中项和变更事件
待支付
已支付
待发货
已发货
待处理
已退款
示例代码
vue
<template>
  <TsSwitchTabs :tabs="tabList" v-model="activeKey" @change="handleCurrentChange" />
</template>

<script setup lang="ts">

  const activeKey = ref('paying');
  const tabList = [
    { name: '待支付', key: 'paying' },
    { name: '已支付', key: 'payed' },
    { name: '待发货', key: 'pending' },
    { name: '已发货', key: 'send' },
    { name: '待处理', key: 'process' },
    { name: '已退款', key: 'refund' },
  ];
  const handleCurrentChange = (key: string) => {
    activeKey.value = key;
  };

</script>
卡片风格
设置 `variant="card"` 属性,切换为更具边界感的卡片样式
待支付
已支付
待发货
已发货
待处理
已退款
示例代码
vue
<template>
    <TsSwitchTabs :tabs="tabList" v-model="activeKey" variant="card" />
</template>
<script setup lang="ts">
  const activeKey = ref('paying');
  const tabList = [
    { name: '待支付', key: 'paying' },
    { name: '已支付', key: 'payed' },
    { name: '待发货', key: 'pending' },
    { name: '已发货', key: 'send' },
    { name: '待处理', key: 'process' },
    { name: '已退款', key: 'refund' },
  ];
  const handleCurrentChange = (key: string) => {
    activeKey.value = key;
  };

</script>
禁用效果展示
通过配置 disabled="true" 属性,来禁用不希望交互的标签
待支付
已支付
待发货
已发货
待处理
已退款
待支付
已支付
待发货
已发货
待处理
已退款
示例代码
vue
<template>
  <TsSwitchTabs :tabs="tabList" v-model="activeKey" @change="handleCurrentChange" />
</template>

<script setup lang="ts">
  const activeKey = ref('paying');
  const tabList = [
    { name: '待支付', key: 'paying' },
    { name: '已支付', key: 'payed' },
    { name: '待发货', key: 'pending' },
    { name: '已发货', key: 'send' },
    { name: '待处理', key: 'process' },
    { name: '已退款', key: 'refund' },
  ];
  const handleCurrentChange = (key: string) => {
    activeKey.value = key;
  };

</script>
可滚动的禁用标签页示例
本示例展示了 TsSwitchTabs 组件在 scroll 模式下的应用,适用于标签项较多时的水平滚动切换。
通过配置 layout="scrollable" ,组件将启用横向滚动功能。
支持同时控制标签的禁用状态,可用于功能开关类场景。
下方分别演示了默认样式与 variant="card" 卡片样式的使用效果。
待支付
已支付
待发货
已发货
待处理
已退款
待支付
已支付
待发货
已发货
待处理
已退款
示例代码
vue
<template>
  <div style="width: 380px; display: flex; flex-direction: column; row-gap: 36px">
    <TsSwitchTabs :tabs="tabDisabledList" v-model="disabledKey" layout="scrollable" minWidth="auto"/>
    <TsSwitchTabs :tabs="tabDisabledList" v-model="disabledKey" layout="scrollable" variant="card" />
  </div>
</template>

<script setup lang="ts">
  const activeKey = ref('paying');
  const tabList = [
    { name: '待支付', key: 'paying' },
    { name: '已支付', key: 'payed', disabled: true  },
    { name: '待发货', key: 'pending'},
    { name: '已发货', key: 'send' },
    { name: '待处理', key: 'process' },
    { name: '已退款', key: 'refund' },
  ];
  const handleCurrentChange = (key: string) => {
    activeKey.value = key;
  };
</script>
基础标签切换
最基础的 TsSwitchTabs 用法,支持 v-model 双向绑定,默认填充宽度布局。
待支付
已支付
安全设置
已发货
待处理
已退款
示例代码
vue
<template>
  <TsSwitchTabs :tabs="tabList" v-model="activeKey" layout="scrollable">
    <template #pending>安全设置</template>
  </TsSwitchTabs>
</template>
滑动动画切换
在基础用法上增加 switchEffect="slide",切换时带有滑动过渡动画。
待支付
已支付
待发货
已发货
待处理
已退款
示例代码
vue
<template>
  <TsSwitchTabs :tabs="tabList" v-model="activeKey" layout="scrollable" switchEffect="slide" />
</template>
属性 Props
属性名
说明
类型
可选值
默认值
版本说明
v-model
激活tab的key
String
-
tabs
tab列表
Array<TabItem>
-
[]
variant
外观风格,控制 tab 是卡片型还是文本型
String
text / card
text
layout
布局方式,控制 tab 的宽度布局(平均分 or 滚动)
String
full-width / scrollable
full-width
minWidth
最小宽度, 仅在 layout="scrollable" 时生效,控制每个 tab 的最小宽度
String
- / auto
150px
switchEffect
切换行为:点击 tab 后内容区域的滑动方式, 仅在 layout="scrollable" 时生效
String
slide / fade
fade
事件 Events
事件名
说明
回调参数
版本说明
change
切换tab
key: string
TabItem Expand
属性名
说明
类型
可选值
默认值
name
选项名称
string
-
key
选项key
string
-
disabled
是否禁用
boolean
-
false