Skip to content
API 风格:

Descriptions 설명 목록 ​

LhDescriptions는 객체의 속성 목록을 표시하며, 열 수, 열 합치기, 테두리 모드를 지원합니다.

기본 사용법 ​

제목 + 항목 목록
소장품 기록
이름
청화백자 당초연화문 병
연대
명 영락
종류
도자기
등급
1급 문물
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: '1급 문물' },
    ]"
  />
</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: '1급 문물' },
    ]"
  />
</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 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
}

국풍의 아름다움으로 코드의 토대를 세웁니다