# vue3-tabor **Repository Path**: git_discovery/vue3-tabor ## Basic Information - **Project Name**: vue3-tabor - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-01-20 - **Last Updated**: 2026-01-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

vue3-tabor

🚀 基于 Vue 3 的强大标签页路由解决方案,支持标签页导航与 keepAlive 缓存功能
兼容多种组件库样式,提供丰富的自定义选项
中文 | English

Version License GitHub Stars Last Commit Size Monthly Downloads Vue Version Vue Router Version TypeScript
## ✨ 特点 - **🔥 简单易上手**:零学习成本,引入即用 - **🎨 高度定制化**:提供丰富API和配置,满足从基础到复杂的各类需求 - **📦 轻量高效**:基于Vue 3和Vue Router 4优化设计,性能出色,体积小巧 - **💪 类型支持**:使用TypeScript开发,提供完整类型定义,开发体验卓越 ## 🛠️ 功能特性 - ### 基础功能 - ✅ **路由响应**:自动响应路由变化,打开、切换页签 - ✅ **标签管理**: - ✅ 打开/替换页签 - ✅ 关闭页签 - ✅ 关闭其他页签 - ✅ 刷新页签 - ✅ 右键菜单操作 - ✅ **缓存控制**:支持页签内容缓存,提升用户体验 - ⏳ **全局配置**:支持全局及个性化配置(开发中) - ⏳ **生命周期钩子**:提供丰富的生命周期事件(开发中) - ### 高级特性 - ✅ **iframe支持**:内置iframe路由支持,轻松集成外部页面 - ⏳ **动画效果**:页签切换动画(开发中) - ⏳ **国际化**:多语言支持(开发中) - ⏳ **埋点统计**:页签访问数据统计(开发中) ## 📦 安装 ```bash npm install vue3-tabor ``` ## 🚀 快速开始 ### 1. 在入口文件中引入并注册插件 ```js import { createApp } from "vue"; import Tabor from "vue3-tabor"; // 必须引入样式文件 import "vue3-tabor/dist/assets/index.css"; import router from "./router"; import App from "./App.vue"; const app = createApp(App); app.use(router); app.use(Tabor, { router, // 传入router实例 maxCache: 10 // 可选:最大缓存数量 }); app.mount("#app"); ``` ### 2. 在布局组件中使用标签页组件 ```html ``` ## 📖 API 文档 ### 全局配置 在安装插件时,可以传入以下配置选项: ```js app.use(Tabor, { router: router, // 必需:Vue Router 实例 maxCache: 10, // 可选:最大缓存数量,默认为10 }); ``` ### 组件属性 (Props) `` 组件支持以下属性: | 属性 | 类型 | 默认值 | 说明 | |------|------|--------|------| | maxAlive | Number | 10 | 最大缓存数量 | | hideClose | Boolean | false | 是否隐藏关闭按钮 | | beforeClose | Function | - | 关闭标签前的钩子函数,返回Promise | | tabClass | String | - | 标签的自定义CSS类名 | | pageClass | String | - | 页面的自定义CSS类名 | | dropdownClass | String | - | 下拉菜单的自定义CSS类名 | | tabType | String | 'line' | 标签类型,可选值:'line'、'card' | | style | Object | - | 自定义样式变量 | | tabPrefix | Component | - | 标签前缀组件 | | language | String | 'zh' | 界面语言,可选值:'zh'、'en' | ### 国际化支持 vue3-tabor 支持中文和英文两种语言,可以通过以下方式进行配置: ```html ``` ### 样式变量 vue3-tabor 提供了以下 CSS 变量,可以通过 style 属性或全局 CSS 自定义主题样式: #### 基础配置 ```html ``` #### 标签外观 ```html ``` #### 内容区域 ```html ``` #### 预设主题示例 **默认主题 (浅色)** ```html ``` **暗色主题** ```html ``` **亮蓝主题** ```html ``` #### 通过全局 CSS 自定义样式 除了使用组件的 style 属性外,您还可以通过全局 CSS 变量设置来自定义样式: ```css /* 在您的全局样式文件中 */ :root { --primary-color: #5a67d8; --tab-height: 40px; --tab-background-color: rgba(248, 249, 250, 0.5); /* 其他变量... */ } ``` #### 高级样式定制 对于需要更深层次自定义的场景,您可以使用以下方法: 1. **使用提供的类名添加自定义样式**: ```css /* 自定义标签样式 */ .tabor-tab { /* 自定义样式 */ } /* 自定义激活标签样式 */ .tabor-tab-active { /* 自定义样式 */ } ``` 2. **使用 tabPrefix 属性添加前缀内容**: ```html ``` ### 实例方法 可以通过注入的 `tabStore` 访问以下方法: ```js // 在组件中使用 import { useTabor } from 'vue3-tabor' export default { setup() { const tabor = useTabor(); // 使用tabor方法 return { tabor }; } } ``` | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | open | (to: RouteLocationRaw, options?: OpenProps) | Promise\ | 打开新标签 | | close | (item?: TabGetter, toOptions?: ToOptions) | Promise\ | 关闭标签 | | closeOthers | (tabId?: TabId) | void | 关闭其他标签 | | refresh | (tabId?: TabId) | void | 刷新标签 | | find | (tabId: TabId) | Tab \| undefined | 查找标签 | | has | (tabId?: TabId) | boolean | 检查标签是否存在 | | setActive | (tab: Tab) | void | 设置活动标签 | | remove | (item: { id?: TabId; fullPath?: string }) | void | 移除标签 | ### Tab相关类型 ```typescript // 标签配置 interface TabConfig { key?: "path" | "fullPath" | ((route) => string); name?: string | (route:RouteLocationNormalized) => string; keepAlive?: boolean; icon?: string; iframeAttributes?: IframeAttributes; hideClose?: boolean | ((tab: Tab) => boolean); } // 标签信息 interface Tab { id: string; name: string | symbol | (route:RouteLocationNormalized) => string; icon?: string; keepAlive?: boolean; fullPath: string; allowClose?: boolean; iframeAttributes?: IframeAttributes; routeName?: string; } // 打开标签的选项 interface OpenProps { replace?: boolean; // 是否替换当前标签 refresh?: boolean; // 是否刷新 tabConfig?: TabConfig; // 标签配置 } ``` ### iframe 支持 vue3-tabor 支持在标签中打开外部页面: ```js // 打开iframe标签 tabStore.open({ path: '/iframe', query: { src: 'https://example.com', title: '外部页面' } }, { tabConfig: { iframeAttributes: { src: 'https://example.com', width: '100%', height: '100%' } } }); ``` ### 路由配置 在路由配置中,可以通过 `meta.tabConfig` 来设置标签页的配置。使用 `satisfies TabConfig` 可以确保类型安全: ```typescript const routes = [ { path: '/home', component: Home, meta: { tabConfig: { hideClose: true, // 隐藏关闭按钮 keepAlive: true, // 启用缓存 name: '首页' } satisfies TabConfig } } ] ``` ## 🔧 技术栈 - **💻 Vue 3**:基于最新的Vue 3.x版本开发 - **🔄 Vue Router 4**:与Vue Router深度集成 - **💪 TypeScript**:类型安全的代码开发体验 - **👬 Vitest**:可靠的单元测试保障 ## 📚 更多资源 - [问题反馈](https://github.com/daylenjeez/vue3-tabor/issues)