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 で 1 行の列数を、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 と言語パックを組み合わせることで国際化切り替えを実現できます。

国際化
Collection Archive
Name
青花纏枝蓮文瓶
Period
明の永楽
vue
<script setup lang="ts">
import { ref } from 'vue'
import { LhConfigProvider, LhDescriptions, LhButton } from '@lh-ui/vue3'
import { jaJP } from '@lh-ui/vue3'
import { enUS } from '@lh-ui/vue3'

const locale = ref('ja-JP')
</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 { jaJP } from '@lh-ui/vue3'
import { enUS } from '@lh-ui/vue3'

export default {
  components: { LhConfigProvider, LhDescriptions, LhButton },
  data() {
    return {
      locale: 'ja-JP',
      jaJP: jaJP,
      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—
column1 行に表示する項目の列数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
  /** 1 行に表示する項目の列数 */
  column?: number
  /** ボーダーを表示するかどうか */
  border?: boolean
  /** 項目リスト。label/value/span の 3 つ組 */
  items: LhDescriptionsItem[]
  /** sx クイックレイアウトプロパティ */
  sx?: LhSxProps
}
LhDescriptionsItem (@lh-ui/share/core/descriptions より)
ts
export interface LhDescriptionsItem {
  /** 項目のラベル */
  label: string
  /** 項目の内容(スコープスロットで渡すことも可能) */
  value?: string | number
  /** 占める列数(デフォルト 1。column を超えるとクランプされます) */
  span?: number
}

国風の美で、コードの基を築く