- 前端
- AI 技能
【免费下载链接】basic
⭐⭐⭐⭐⭐ 面向 AI 编程的管理系统框架,兼容PC、移动端。AI-oriented management system framework, compatible with PC and mobile device.
FaBadge 是 Fantastic Admin 管理系统框架内置的基础徽章组件,用于在图标、头像等内容旁展示消息数量、未读状态或 NEW/HOT 等文本标记。本文基于 FaBadge 官方文档 并结合其源码实现,系统讲解该组件的 Props、Slots、自动隐藏逻辑、三种展示模式与颜色变体,帮助你在实际页面中快速落地通知角标、状态指示器等常见交互场景。
组件定位与适用场景
FaBadge 是一个典型的"角标 + 包裹内容"型复合组件:外层容器通过默认插槽包裹任意内容(如图标、头像),右上角(实际实现为start-[50%]定位、向上偏移 50%)叠加显示徽章本体。官方文档明确了五类典型使用场景:
- 消息通知数量提示
- 未读消息数显示
- 状态指示器(在线 / 离线)
- 新内容标记(NEW、HOT 等)
- 购物车商品数量
组件支持数字、文本和点状三种展示模式,且自带淡入淡出入场动画,可平滑覆盖绝大多数后台管理系统的"计数角标"需求。
快速上手:自动导入与基础用法
在 Fantastic Admin 框架内,FaBadge 无需手动注册。框架通过unplugin-vue-components提供的组件解析器实现按需自动导入——resolver.ts 的BASIC_COMPONENT_NAMES中声明了FaBadge,凡以Fa前缀开头的组件名都会被自动解析并导入;同时 packages/components/src/index.ts 也将其作为Badge as FaBadge从基础组件包导出,便于手动引入或类型推导。在各 app 的types/components.d.ts中同样可以找到FaBadge的全局类型声明。
模板中直接书写标签即可:
<template> <div class="flex gap-8"> <!-- 点状模式:value 为 true --> <FaBadge :value="true"> <FaIcon name="i-ri:notification-3-line" /> </FaBadge> <!-- 数字模式:99 --> <FaBadge :value="99"> <FaIcon name="i-ri:notification-3-line" /> </FaBadge> <!-- 文本模式:"噢" --> <FaBadge value="噢"> <FaIcon name="i-ri:notification-3-line" /> </FaBadge> </div> </template>以上示例取自仓库自带的演示文件 _examples/_basic.vue,它通过FaIcon(如i-ri:notification-3-line通知铃铛图标)与 FaBadge 组合,直观展示了点状、数字、文本三种形态。组件在模板中使用时无需手动导入(框架会自动导入),上述示例中手写 import 仅为演示代码的可读性考虑。
Props 完整说明
官方文档给出的 Props 表如下,其中value是唯一必传的驱动属性,决定了徽章的展示内容与显隐状态:
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
value | string \| number \| boolean | - | 徽章显示内容,为空/0/false 时自动隐藏 |
variant | 'default' \| 'secondary' \| 'destructive' | 'default' | 徽章颜色变体 |
class | HTMLAttributes['class'] | - | 容器 CSS 类 |
badgeClass | HTMLAttributes['class'] | - | 徽章本身的 CSS 类 |
对应源码声明位于 index.vue:外层容器类通过class注入,徽章本体的样式则通过badgeClass追加,二者互不干扰,方便分别控制角标位置与徽章外观。
自动隐藏逻辑:源码级解析
文档特别强调的"自动隐藏"是 FaBadge 最实用的特性之一,其判断逻辑在源码中由show计算属性集中实现(index.vue),按value的类型分派:
- 字符串:长度大于 0 才显示(空字符串隐藏)
- 数字:大于 0 才显示(
0隐藏) - 布尔:
true才显示 - 其他类型(如
null、undefined):非空才显示
据此可以归纳出四条实用规则:
value为0、false、空字符串、null或undefined时,徽章自动隐藏;- 布尔值
true会渲染为一个小圆点(点状模式); - 数字会原样显示(如
99); - 字符串按文本展示(如
"噢"、"NEW")。
这意味着业务层无需手动判断"是否有未读/是否为零",直接把消息数量传给value即可,数量归零时角标自动消失,减少重复的条件渲染代码。
三种展示模式与变体(variant)
点状模式
当value为布尔值true时,组件渲染一个绝对定位的小圆点,其样式由badgeDotVariant(cva 变体)控制:index.vue。点状样式包含animate-ping的脉冲扩散伪元素与ring-1 ring-background描边,视觉上类似"在线状态灯",适合在线/离线等状态指示场景。
数字与文本模式
当value不是true时,渲染基于基础Badge组件的徽章本体,通过start-[50%]横向居中、-translate-y-[50%]向上偏移并带z-20层级的定位方案叠加在内容右上角(index.vue)。数字(如99、9)与文本(如"噢"、"NEW")共用同一套渲染管线,传入什么就显示什么。
颜色变体
官方文档定义的三种变体为:
default:主色(蓝色),对应bg-primary text-primary-foregroundsecondary:次要色(灰色),对应bg-secondary text-secondary-foregrounddestructive:危险色(红色),对应bg-destructive text-white
这些样式来自底层badgeVariants的 cva 定义(badge/index.ts)。从源码看,底层 Badge 实际还额外支持第 4 种outline(描边)变体(text-foreground透明底),同时所有变体都内建了链接悬停态([a&]:hover:bg-*/90)与焦点可见态(focus-visible:ring-*)样式;不过 FaBadge 外层组件按文档约束只暴露default | secondary | destructive三种,outline可通过直接使用底层FaBadge对应的Badge导出或自定义样式实现。
示例中三种变体的典型写法(取自 _examples/_basic.vue):
<FaBadge value="9" variant="secondary"> <FaIcon name="i-ri:notification-3-line" /> </FaBadge> <FaBadge value="9" variant="destructive"> <FaIcon name="i-ri:notification-3-line" /> </FaBadge>Slots 与包裹能力
FaBadge 仅提供 1 个插槽:
| 名称 | 说明 |
|---|---|
default | 被包裹的内容(如图标、头像等) |
插槽内容渲染在外层relative inline-flex容器内(index.vue),徽章通过绝对定位悬浮其上,因此任何元素——图标、头像、按钮、甚至一张图片——都可以被包裹成带角标的形式。演示代码中即使用了FaIcon作为包裹内容。
入场动画机制
徽章显示/隐藏时的淡入淡出动画由 Vue 内置<Transition>组件驱动,动画类配置定义在transitionClass中(index.vue):
- 进入/离开均使用
ease-in-out缓动,时长500ms; - 透明度从
0过渡到1(进入),从1过渡到0(离开)。
结合v-if="show"与<Transition>,当value由非空变为空(或反向变化)时,角标会平滑淡入淡出,而非生硬闪现,这也正是文档"带有入场动画"描述的实现来源。
组件源码结构一览
FaBadge 的实现是"复合组件 + 底层基础组件"的分层结构,位于 packages/components/src/basic/badge 目录下:
| 文件 | 职责 |
|---|---|
| index.vue | 外层BuiltInBadge复合组件:负责包裹插槽、自动隐藏判断、点状模式、过渡动画与定位 |
| badge/Badge.vue | 底层基础徽章:基于 reka-ui 的Primitive渲染,合并 cva 变体类与自定义 class |
| badge/index.ts | 导出Badge与badgeVariants(cva 变体定义) |
| _examples/_basic.vue | 组件演示源码,覆盖点状/数字/文本三种形态 |
| index.ts | 目录级导出,将index.vue作为Badge抛出 |
其中底层Badge.vue通过reactiveOmit(props, 'class')剥离class后将剩余属性透传给Primitive,并以data-slot="badge"标记,保证了组件的可访问性语义与样式注入灵活性。
在实际框架应用中,你可以在各示例应用的组件演示页查看 FaBadge 的运行效果,如 apps/example/src/views/component_example/badge.vue 通过import { badge } from '@fantastic-admin/components/examples'挂载了 "基础" 演示块;组件类型全局声明见各 app 的 types/components.d.ts,确认FaBadge已被自动导入体系覆盖。
注意事项与最佳实践
- 自动隐藏依赖类型:
value的类型决定判空规则,传0、false、''、null、undefined均会隐藏徽章;不要用"0"字符串(长度 1 > 0,会显示文本0)来"表示隐藏"。 - 点状模式仅限
true:只有严格等于布尔true才渲染小圆点;1会按数字显示为1。 - 文本模式适合短文本:徽章本体使用
whitespace-nowrap防止换行,并带overflow-hidden,适合NEW、HOT、99+这类短标记,长文本需自行通过badgeClass调整样式。 - 样式定制入口:容器用
class,徽章本体用badgeClass,两者独立;如需自定义颜色可在variant基础上追加 CSS 类覆盖。 - 自动导入免注册:模板中直接写
<FaBadge>即可,无需手动 import;若在非框架环境使用,可从@fantastic-admin/components包显式导入FaBadge(见 packages/components/src/index.ts)。
- 前端
- AI 技能
【免费下载链接】basic
⭐⭐⭐⭐⭐ 面向 AI 编程的管理系统框架,兼容PC、移动端。AI-oriented management system framework, compatible with PC and mobile device.
相关推荐
FaTag 标签组件实战指南:在 fantastic-admin 中实现状态标记与可关闭标签
FaTag 标签组件实战指南:在 fantastic admin 中实现状态标记与可关闭标签 导读 FaTag 是 fantastic admin(GitHub
前端AI 技能TOMLKit完全指南:Python中最强大的风格保持TOML库
TOMLKit完全指南:Python中最强大的风格保持TOML库 TOMLKit是Python生态中一个革命性的TOML处理库,它完美解决了传统TOML解析器的
序列化uni-app x 数字角标 uni-badge-view 组件完全指南:红点、文字徽章与容器角标的实现原理与实战
uni app x 数字角标 uni badge view 组件完全指南:红点、文字徽章与容器角标的实现原理与实战 本文以 uni app x(Vue3 + u
示例工程前端移动开发跨平台
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考