Skip to content
API 风格:

Badge 徽標 ​

LhBadge 用於顯示未讀訊息數量或狀態標記。

基礎用法 ​

基礎用法
5
vue
<script setup lang="ts">
</script>

<template>
  <LhBadge :value="5">
    <div>目标内容</div>
  </LhBadge>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhBadge :value="5">
    <div>目标内容</div>
  </LhBadge>
</template>

自訂最大值 ​

自訂最大值
99+
vue
<script setup lang="ts">
</script>

<template>
  <LhBadge
    :value="100"
    :max="99"
  >
    <div>目标内容</div>
  </LhBadge>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhBadge
    :value="100"
    :max="99"
  >
    <div>目标内容</div>
  </LhBadge>
</template>

紅點 ​

is-dot 只顯示小紅點、不展示具體數值,適合「有更新」類提示,可用 type 換色。

紅點
消息
待辦
vue
<script setup lang="ts">
</script>

<template>
  <!-- 紅點 -->
  <LhBadge is-dot>
    <div>目标内容</div>
  </LhBadge>
  <!-- 紅點(警告色) -->
  <LhBadge is-dot type="warning">
    <div>目标内容</div>
  </LhBadge>
</template>
vue
<script>
export default {}
</script>

<template>
  <!-- 紅點 -->
  <LhBadge is-dot>
    <div>目标内容</div>
  </LhBadge>
  <!-- 紅點(警告色) -->
  <LhBadge is-dot type="warning">
    <div>目标内容</div>
  </LhBadge>
</template>

偏移、零值與自訂內容 ​

offset 微調徽標位置([x, y] 像素偏移);show-zero 讓零值也顯示;content 用自訂文案代替數字。

偏移 / 零值 / 自訂內容
offset
5
show-zero
0
content
新
vue
<script setup lang="ts">
</script>

<template>
  <!-- 偏移 -->
  <LhBadge :value="5" :offset="[6, 6]">
    <div>目标内容</div>
  </LhBadge>
  <!-- 零值也顯示 -->
  <LhBadge :value="0" show-zero>
    <div>目标内容</div>
  </LhBadge>
  <!-- 自訂內容 -->
  <LhBadge value="新" content="新">
    <div>目标内容</div>
  </LhBadge>
</template>
vue
<script>
export default {}
</script>

<template>
  <!-- 偏移 -->
  <LhBadge :value="5" :offset="[6, 6]">
    <div>目标内容</div>
  </LhBadge>
  <!-- 零值也顯示 -->
  <LhBadge :value="0" show-zero>
    <div>目标内容</div>
  </LhBadge>
  <!-- 自訂內容 -->
  <LhBadge value="新" content="新">
    <div>目标内容</div>
  </LhBadge>
</template>
紅點
vue
<script setup lang="ts">
</script>

<template>
  <LhBadge is-dot>
    <div>目标内容</div>
  </LhBadge>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhBadge is-dot>
    <div>目标内容</div>
  </LhBadge>
</template>

類型 ​

類型
2
1
1
1
vue
<script setup lang="ts">
</script>

<template>
  <LhBadge
    type="primary"
    :value="2"
  >
    <div>Primary</div>
  </LhBadge>
  <LhBadge
    type="success"
    :value="1"
  >
    <div>Success</div>
  </LhBadge>
  <LhBadge
    type="warning"
    :value="1"
  >
    <div>Warning</div>
  </LhBadge>
  <LhBadge
    type="info"
    :value="1"
  >
    <div>Info</div>
  </LhBadge>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhBadge
    type="primary"
    :value="2"
  >
    <div>Primary</div>
  </LhBadge>
  <LhBadge
    type="success"
    :value="1"
  >
    <div>Success</div>
  </LhBadge>
  <LhBadge
    type="warning"
    :value="1"
  >
    <div>Warning</div>
  </LhBadge>
  <LhBadge
    type="info"
    :value="1"
  >
    <div>Info</div>
  </LhBadge>
</template>

尺寸 ​

尺寸
5
5
5
vue
<script setup lang="ts">
</script>

<template>
  <LhBadge
    size="small"
    :value="5"
  >
    <div>Small</div>
  </LhBadge>
  <LhBadge
    size="medium"
    :value="5"
  >
    <div>Medium</div>
  </LhBadge>
  <LhBadge
    size="large"
    :value="5"
  >
    <div>Large</div>
  </LhBadge>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhBadge
    size="small"
    :value="5"
  >
    <div>Small</div>
  </LhBadge>
  <LhBadge
    size="medium"
    :value="5"
  >
    <div>Medium</div>
  </LhBadge>
  <LhBadge
    size="large"
    :value="5"
  >
    <div>Large</div>
  </LhBadge>
</template>

控制顯示與隱藏 ​

控制顯示與隱藏
10
vue
<script setup lang="ts">
import { ref } from 'vue'

const badgeValue = ref(10)
const isHidden = ref(false)
</script>

<template>
  <LhBadge
    :value="badgeValue"
    :hidden="isHidden"
  >
    <div>目标内容</div>
  </LhBadge>
  <LhButton @click="isHidden = !isHidden">
    {{ isHidden ? '显示' : '隐藏' }}
  </LhButton>
</template>
vue
<script>
import { ref } from 'vue'

const badgeValue = ref(10)
const isHidden = ref(false)
</script>

<template>
  <LhBadge
    :value="badgeValue"
    :hidden="isHidden"
  >
    <div>目标内容</div>
  </LhBadge>
  <LhButton @click="isHidden = !isHidden">
    {{ isHidden ? '显示' : '隐藏' }}
  </LhButton>
</template>

類型定義 ​

本元件對外匯出的 TypeScript 類型結構如下(自動提取自 packages/components/badge/src/types.ts 與 @lh-ui/share/core/* 原始碼,點選各條目展開檢視完整定義;屬性說明見上方 Props 表):

LhBadgeProps
ts
export interface LhBadgeProps {
  type?: LhBadgeType
  value?: string | number
  size?: LhBadgeSize
  max?: number
  isDot?: boolean
  hidden?: boolean
  offset?: [number, number]
  showZero?: boolean
  content?: string
  /** sx 快速版面配置屬性 */
  sx?: LhSxProps
}
LhBadgeSize
ts
export type LhBadgeSize = LhComponentSize
LhBadgeOffset
ts
export type LhBadgeOffset = [number, number]
LhBadgeType (來自 @lh-ui/share/core/badge)
ts
export type LhBadgeType = 'primary' | 'success' | 'warning' | 'danger' | 'info' | 'default'
LhComponentSize (來自 @lh-ui/share/core/shared)
ts
export type LhComponentSize = (typeof LH_SIZE_CONST)[keyof typeof LH_SIZE_CONST]

國際化 ​

徽標文字可以透過 LhConfigProvider 配合語言包實現國際化切換。

國際化
訊息
5
vue
<script setup lang="ts">
import { ref } from 'vue'
import { LhConfigProvider, LhBadge, LhButton } from '@lh-ui/vue3'
import { zhCN } from '@lh-ui/vue3'
import { enUS } from '@lh-ui/vue3'

const locale = ref('zh-CN')
</script>

<template>
  <!-- 透過 ConfigProvider 切換語言包 -->
  <LhConfigProvider :locale="locale === 'zh-CN' ? zhCN : enUS">
    <LhBadge :value="5">
      <div>{{ locale === 'zh-CN' ? '消息' : 'Messages' }}</div>
    </LhBadge>
    <LhButton @click="locale = locale === 'zh-CN' ? 'en-US' : 'zh-CN'">
      {{ locale === 'zh-CN' ? '切换英文' : 'Switch to Chinese' }}
    </LhButton>
  </LhConfigProvider>
</template>
vue
<script>
import { LhConfigProvider, LhBadge, LhButton } from '@lh-ui/vue3'
import { zhCN } from '@lh-ui/vue3'
import { enUS } from '@lh-ui/vue3'

export default {
  components: { LhConfigProvider, LhBadge, LhButton },
  data() {
    return {
      locale: 'zh-CN',
      zhCN: zhCN,
      enUS: enUS,
    }
  },
}
</script>

<template>
  <!-- 透過 ConfigProvider 切換語言包 -->
  <LhConfigProvider :locale="locale === 'zh-CN' ? zhCN : enUS">
    <LhBadge :value="5">
      <div>{{ locale === 'zh-CN' ? '消息' : 'Messages' }}</div>
    </LhBadge>
    <LhButton @click="locale = locale === 'zh-CN' ? 'en-US' : 'zh-CN'">
      {{ locale === 'zh-CN' ? '切换英文' : 'Switch to Chinese' }}
    </LhButton>
  </LhConfigProvider>
</template>

API ​

屬性說明類型預設值
type徽標類型"primary" | "success" | "warning" | "danger" | "info" | "default"'danger'
value顯示值string | number—
size尺寸"small" | "medium" | "large" | "mini" | "x-large"'medium'
max最大值number99
isDot小圓點模式booleanfalse
hidden是否隱藏booleanfalse
offset偏移量[number, number]—
showZero是否顯示 0booleanfalse
content自訂內容string—
sx快速版面配置屬性(如 { mt: 2, w: '50%' }),轉內聯樣式作用於根元素LhSxProps—

無障礙 ​

  • 小圓點模式(is-dot)的角標是純裝飾,標記為 aria-hidden,不進入無障礙樹
  • 數值模式保留文字內容,螢幕閱讀器可讀取「99+」等計數