定制 mrshanebarron/tabs 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

mrshanebarron/tabs

Composer 安装命令:

composer require mrshanebarron/tabs

包简介

Tabs component for Laravel - supports Livewire and Vue

README 文档

README

A flexible tabbed interface component for Laravel applications. Supports multiple visual styles and accessibility features. Works with Livewire and Vue 3.

Installation

composer require mrshanebarron/tabs

Livewire Usage

Basic Usage

<livewire:sb-tabs :tabs="['tab1' => 'Overview', 'tab2' => 'Details', 'tab3' => 'Settings']">
    <div x-show="$wire.active === 'tab1'">
        Overview content here.
    </div>
    <div x-show="$wire.active === 'tab2'">
        Details content here.
    </div>
    <div x-show="$wire.active === 'tab3'">
        Settings content here.
    </div>
</livewire:sb-tabs>

With Default Active Tab

<livewire:sb-tabs
    :tabs="['info' => 'Information', 'history' => 'History']"
    default-active="history"
/>

Different Variants

<!-- Default underline style -->
<livewire:sb-tabs :tabs="$tabs" variant="default" />

<!-- Pill buttons -->
<livewire:sb-tabs :tabs="$tabs" variant="pills" />

<!-- Boxed/segmented style -->
<livewire:sb-tabs :tabs="$tabs" variant="boxed" />

Livewire Props

Prop Type Default Description
tabs array required Key-value pairs of tab keys and labels
default-active string first tab Initially active tab key
variant string 'default' Style: default, pills, boxed

Vue 3 Usage

Setup

import { SbTabs, SbTabPanel } from './vendor/sb-tabs';
app.component('SbTabs', SbTabs);
app.component('SbTabPanel', SbTabPanel);

Basic Usage

<template>
  <SbTabs :tabs="{ tab1: 'Overview', tab2: 'Details', tab3: 'Settings' }">
    <template #default="{ active }">
      <div v-show="active === 'tab1'">
        Overview content here.
      </div>
      <div v-show="active === 'tab2'">
        Details content here.
      </div>
      <div v-show="active === 'tab3'">
        Settings content here.
      </div>
    </template>
  </SbTabs>
</template>

Variants

<template>
  <!-- Default: underline style -->
  <SbTabs :tabs="tabs" variant="default">
    ...
  </SbTabs>

  <!-- Pills: button style -->
  <SbTabs :tabs="tabs" variant="pills">
    ...
  </SbTabs>

  <!-- Boxed: segmented control style -->
  <SbTabs :tabs="tabs" variant="boxed">
    ...
  </SbTabs>
</template>

<script setup>
const tabs = {
  overview: 'Overview',
  features: 'Features',
  pricing: 'Pricing'
};
</script>

With Change Event

<template>
  <SbTabs
    :tabs="tabs"
    default-active="features"
    @change="handleTabChange"
  >
    <template #default="{ active }">
      <div v-show="active === 'overview'">Overview</div>
      <div v-show="active === 'features'">Features</div>
    </template>
  </SbTabs>
</template>

<script setup>
const handleTabChange = (tabKey) => {
  console.log('Active tab:', tabKey);
};
</script>

Dynamic Tabs

<template>
  <SbTabs :tabs="dynamicTabs">
    <template #default="{ active }">
      <div v-for="(tab, key) in dynamicTabs" :key="key">
        <div v-show="active === key">
          Content for {{ tab }}
        </div>
      </div>
    </template>
  </SbTabs>
</template>

<script setup>
import { computed } from 'vue';

const items = ref([
  { id: 'item1', name: 'First Item' },
  { id: 'item2', name: 'Second Item' }
]);

const dynamicTabs = computed(() => {
  return items.value.reduce((acc, item) => {
    acc[item.id] = item.name;
    return acc;
  }, {});
});
</script>

Vue Props

Prop Type Default Description
tabs Object required { key: 'Label' } pairs
defaultActive String first key Initially active tab
variant String 'default' Style variant

Events

Event Payload Description
change string Emitted when active tab changes

Scoped Slot

The default slot receives:

  • active: Current active tab key

Variants

Default (Underline)

Traditional tab style with underline indicator on active tab.

Pills

Button-style tabs with background color on active tab.

Boxed

Segmented control style with contained background.

Accessibility

  • Proper role="tablist" and role="tab" attributes
  • aria-selected indicates active state
  • aria-controls links tabs to panels
  • Keyboard navigation support

Styling

Uses Tailwind CSS:

  • Border-based underline for default
  • Rounded backgrounds for pills
  • Gray background container for boxed

Requirements

  • PHP 8.1+
  • Laravel 10, 11, or 12
  • Tailwind CSS 3.x

License

MIT License

mrshanebarron/tabs 适用场景与选型建议

mrshanebarron/tabs 是一款 基于 Blade 开发的 Composer 扩展包,目前已累计 12 次下载、GitHub Stars 达 0, 最近一次更新时间为 2025 年 12 月 16 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「navigation」 「laravel」 「tabs」 「vue」 「livewire」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 mrshanebarron/tabs 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 mrshanebarron/tabs 我们能提供哪些服务?
定制开发 / 二次开发

基于 mrshanebarron/tabs 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 12
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 24
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: Blade

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-12-16