Skip to content
API 风格:

Descriptions 描述列表 ​

LhDescriptions 用於展示物件的屬性列表,支援欄數、跨欄與邊框模式。

基礎用法 ​

標題 + 條目列表
藏品檔案
名稱
青花纏枝蓮紋瓶
年代
明永樂
類別
瓷器
級別
一級文物
vue
<script setup lang="ts">
import { LhDescriptions } from '@lh-ui/vue3'
</script>

<template>
  <LhDescriptions
    title="藏品档案"
    :column="2"
    :items="[
      { label: '名称', value: '青花缠枝莲纹瓶' },
      { label: '年代', value: '明永乐' },
      { label: '类别', value: '瓷器' },
      { label: '级别', value: '一级文物' },
    ]"
  />
</template>
vue
<script>
import { LhDescriptions } from '@lh-ui/vue3'

export default {
  components: { LhDescriptions },
}
</script>

<template>
  <LhDescriptions
    title="藏品档案"
    :column="2"
    :items="[
      { label: '名称', value: '青花缠枝莲纹瓶' },
      { label: '年代', value: '明永乐' },
      { label: '类别', value: '瓷器' },
      { label: '级别', value: '一级文物' },
    ]"
  />
</template>

欄數與跨欄 ​

column 控制每列欄數,item 的 span 控制跨欄
名稱
千里江山圖
年代
北宋
作者
王希孟
材質
絹本設色
藏地
北京故宮博物院
vue
<script setup lang="ts">
</script>

<template>
  <LhDescriptions
    :column="3"
    :items="[
      { label: '名称', value: '千里江山图', span: 2 },
      { label: '年代', value: '北宋' },
      { label: '作者', value: '王希孟' },
      { label: '材质', value: '绢本设色' },
      { label: '藏地', value: '北京故宫博物院' },
    ]"
  />
</template>
vue
<script>
export default {}
</script>

<template>
  <LhDescriptions
    :column="3"
    :items="[
      { label: '名称', value: '千里江山图', span: 2 },
      { label: '年代', value: '北宋' },
      { label: '作者', value: '王希孟' },
      { label: '材质', value: '绢本设色' },
      { label: '藏地', value: '北京故宫博物院' },
    ]"
  />
</template>

span 超出本列剩餘寬度時自動鉗制;最後一列不足會自動補位。

邊框模式 ​

border 展示表格邊框
名稱
蘭亭序
作者
王羲之
年代
東晉
書體
行書
vue
<script setup lang="ts">
</script>

<template>
  <LhDescriptions
    :column="2"
    border
    :items="[
      { label: '名称', value: '兰亭序' },
      { label: '作者', value: '王羲之' },
      { label: '年代', value: '东晋' },
      { label: '书体', value: '行书' },
    ]"
  />
</template>
vue
<script>
export default {}
</script>

<template>
  <LhDescriptions
    :column="2"
    border
    :items="[
      { label: '名称', value: '兰亭序' },
      { label: '作者', value: '王羲之' },
      { label: '年代', value: '东晋' },
      { label: '书体', value: '行书' },
    ]"
  />
</template>

自訂內容 ​

條目內容可透過 item-<index> 作用域插槽覆寫。

作用域插槽
狀態
進行中
進度
vue
<script setup lang="ts">
</script>

<template>
  <!-- 用 #item-1 插槽覆寫「進度」條目 -->
  <LhDescriptions
    :column="1"
    :items="[
      { label: '状态', value: '进行中' },
      { label: '进度', value: '' },
    ]"
  >
    <template #item-1="{ item }">
      <LhProgress :percentage="66" />
    </template>
  </LhDescriptions>
</template>
vue
<script>
export default {}
</script>

<template>
  <!-- 用 #item-1 插槽覆寫「進度」條目 -->
  <LhDescriptions
    :column="1"
    :items="[
      { label: '状态', value: '进行中' },
      { label: '进度', value: '' },
    ]"
  >
    <template #item-1="{ item }">
      <LhProgress :percentage="66" />
    </template>
  </LhDescriptions>
</template>

國際化 ​

條目標籤和內容可以透過 LhConfigProvider 配合語言包實現國際化切換。

國際化
藏品檔案
名稱
青花纏枝蓮紋瓶
年代
明永樂
vue
<script setup lang="ts">
import { ref } from 'vue'
import { LhConfigProvider, LhDescriptions, 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">
    <LhDescriptions
      :title="locale === 'zh-CN' ? '藏品档案' : 'Collection Archive'"
      :column="2"
      :items="[
        { label: locale === 'zh-CN' ? '名称' : 'Name', value: '青花缠枝莲纹瓶' },
        { label: locale === 'zh-CN' ? '年代' : 'Period', value: '明永乐' },
      ]"
    />
    <LhButton @click="locale = locale === 'zh-CN' ? 'en-US' : 'zh-CN'">
      {{ locale === 'zh-CN' ? '切换英文' : 'Switch to Chinese' }}
    </LhButton>
  </LhConfigProvider>
</template>
vue
<script>
import { LhConfigProvider, LhDescriptions, LhButton } from '@lh-ui/vue3'
import { zhCN } from '@lh-ui/vue3'
import { enUS } from '@lh-ui/vue3'

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

<template>
  <!-- 透過 ConfigProvider 切換語言包 -->
  <LhConfigProvider :locale="locale === 'zh-CN' ? zhCN : enUS">
    <LhDescriptions
      :title="locale === 'zh-CN' ? '藏品档案' : 'Collection Archive'"
      :column="2"
      :items="[
        { label: locale === 'zh-CN' ? '名称' : 'Name', value: '青花缠枝莲纹瓶' },
        { label: locale === 'zh-CN' ? '年代' : 'Period', value: '明永乐' },
      ]"
    />
    <LhButton @click="locale = locale === 'zh-CN' ? 'en-US' : 'zh-CN'">
      {{ locale === 'zh-CN' ? '切换英文' : 'Switch to Chinese' }}
    </LhButton>
  </LhConfigProvider>
</template>

API ​

Props ​

屬性說明類型預設值
title列表標題string—
column每列展示的條目欄數number3
border是否展示邊框booleanfalse
items條目列表[LhDescriptionsItem](#type-LhDescriptionsItem)[]() => []
sx快速版面配置屬性(如 { mt: 2, w: '50%' }),轉內聯樣式作用於根元素LhSxProps—

LhDescriptionsItem ​

屬性說明類型預設值
label條目標籤string—
value條目內容string | number—
span佔據的欄數,超出會鉗制number1

Slots ​

插槽名說明作用域
title自訂標題—
item-<index>覆寫第 index 個條目的內容{ item }

無障礙 ​

  • 條目使用 <dl> / <dt> / <dd> 語意結構,標籤與值的對應關係由元素本身表達
  • 列末補位元素是純裝飾,標記為 aria-hidden

類型定義 ​

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

LhDescriptionsProps
ts
export interface LhDescriptionsProps {
  /** 描述列表標題 */
  title?: string
  /** 每列展示的條目欄數 */
  column?: number
  /** 是否展示邊框 */
  border?: boolean
  /** 條目列表;label/value/span 三元組 */
  items: LhDescriptionsItem[]
  /** sx 快速版面配置屬性 */
  sx?: LhSxProps
}
LhDescriptionsItem (來自 @lh-ui/share/core/descriptions)
ts
export interface LhDescriptionsItem {
  /** 條目標籤 */
  label: string
  /** 條目內容(也可用作用域插槽傳入) */
  value?: string | number
  /** 佔據的欄數(預設 1,超出 column 會被鉗制) */
  span?: number
}