Skip to content

CardTabs 卡片页签 ​

简介 ​

CardTabs 是「页签条放在卡片头部」的组合组件:内部就是一张 co-card,头部渲染导航、内容区渲染面板,省掉「卡片标题 + 内容区里再套一层 el-tabs」的两层留白。

面板写成 co-card-tab-panel 的直接子节点即可,导航按书写顺序生成,label 就是页签文字。

vue
<co-card-tabs v-model="active" title="订单 A20241102001">
  <co-card-tab-panel name="base" label="基本信息">…</co-card-tab-panel>
  <co-card-tab-panel name="logs" label="操作日志" lazy>…</co-card-tab-panel>
</co-card-tabs>

ElTabs 把导航和面板都放在自己的 .el-tabs 里,没法分别塞进卡片的头部和主体,所以这里是自绘的导航(只借 el-tabs 的外观规范),不依赖 ElTabs。

代码演示 ​

基础用法 ​

详情页最常见:标题在左、页签紧随其后,右侧操作区放打印、导出这类按钮。没权限的页签用 disabled,内容较重的面板加 lazy,首次切过去才渲染。

默认的 line 样式里,激活下划线是一条共享的横条,切换页签时从左滑到右,宽度也跟着页签文字变化。

卡片带 collapsible 时折叠只收起面板区,页签留在头部;点页签不会触发折叠。

分段样式 ​

tab-type="segment" 把导航画成一组分段按钮,适合切换维度(时间范围、统计口径)而不是切换内容块的场景。

选中块和 line 的下划线一样是共享的一块,切换时滑到激活项上。

页签也可以由数据 v-for 生成,导航顺序跟渲染顺序一致。

卡片样式 ​

tab-type="card" 的页签做成贴着标题区下边框的标签块,激活项与内容区连成一片,适合「一个对象 + 几组并列信息」的详情卡。

API ​

CardTabsProps ​

继承 CardProps(title / sub-title / tooltip / extra / footer / size / variant / collapsible 等都可用),并有以下额外属性。

属性描述类型默认值
v-model当前激活的页签名,对应面板的 namestring | number-
tab-type导航样式:line 下划线 / segment 分段块 / card 卡片页签line | segment | cardline
before-leave切换前拦截,返回 false 则不切换(可返回 Promise)(newName, oldName) => boolean | Promise<boolean>-

collapsible 也可用:折叠只收起面板区,导航留在头部。

CardTabsSlots ​

继承 CardSlots(header 除外,头部由导航占用)。

插槽描述属性
default页签面板,必须是 co-card-tab-panel-
title自定义标题-
subTitle自定义副标题-
extra右侧操作区-
footer页脚-

CardTabsExpose ​

方法/属性描述类型
activeName当前激活的页签名string | number | undefined
activate激活指定页签(经过拦截)(name: string | number) => void
getTabNames所有页签名,按书写顺序() => (string | number)[]

CardTabsEmits ​

继承 CardEmits(click / update:collapsed),并有以下额外事件。

事件描述参数
update:modelValue激活页签变化(name: string | number) => void
tab-click点击页签时触发,点当前已激活的页签也会触发(name: string | number) => void
tab-change切换完成后触发(before-leave 拦下时不触发)(name: string | number, oldName?) => void

CardTabPanelProps ​

属性描述类型默认值
name页签名,与 v-model 对应;不传用面板序号string | number-
label导航上显示的文字string-
disabled禁用该页签booleanfalse
lazy首次激活时才渲染内容booleanfalse

CardTabPanelSlots ​

插槽描述属性
default面板内容-
label自定义导航文字,优先于 label-

说明 ​

  • 面板必须是 co-card-tabs 的直接子节点(v-for 生成的除外),中间不能包 <div>,否则扫不到、导航不显示。
  • 面板默认全部渲染后用 v-show 切换,切回来表单、滚动位置都还在;lazy 的面板首次激活后同样保留。
  • 导航支持左右方向键、Home / End 切换,禁用页签会被跳过。
  • 不给 title 时导航占满整个头部;页签过多时导航横向滚动,不会把标题和操作区挤走。
  • 没有可关闭页签、拖拽排序、四方位 tab-position:需要这些时直接用 el-tabs,不要把页签放进卡片头。

基于 MIT 许可发布