Skip to content

Descriptions 描述列表

列表形式展示多个字段。

ts
import { createApp } from 'vue'
import { Descriptions as ElDescriptions, DescriptionsItem as ElDescriptionsItem } from '@szhn/dh-design-pc'

const app = createApp()
app.use(ElDescriptions)
app.use(ElDescriptionsItem)

基础用法

<script setup lang="ts">
import { Descriptions as ElDescriptions, DescriptionsItem as ElDescriptionsItem, Tag as ElTag } from '@szhn/dh-design-pc'

</script>

<template>
  <el-descriptions title="User Info">
    <el-descriptions-item label="Username">kooriookami</el-descriptions-item>
    <el-descriptions-item label="Telephone">18100000000</el-descriptions-item>
    <el-descriptions-item label="Place">Suzhou</el-descriptions-item>
    <el-descriptions-item label="Remarks">
      <el-tag size="small">School</el-tag>
    </el-descriptions-item>
    <el-descriptions-item label="Address">
      No.1188, Wuzhong Avenue, Wuzhong District, Suzhou, Jiangsu Province
    </el-descriptions-item>
  </el-descriptions>
</template>

不同尺寸

<template>
  <el-radio-group v-model="size">
    <el-radio value="large">Large</el-radio>
    <el-radio value="default">Default</el-radio>
    <el-radio value="small">Small</el-radio>
  </el-radio-group>

  <el-descriptions
    class="margin-top"
    title="With border"
    :column="3"
    :size="size"
    border
  >
    <template #extra>
      <el-button type="primary">Operation</el-button>
    </template>
    <el-descriptions-item>
      <template #label>
        <div class="cell-item">
          <el-icon :style="iconStyle">
            <user />
          </el-icon>
          Username
        </div>
      </template>
      kooriookami
    </el-descriptions-item>
    <el-descriptions-item>
      <template #label>
        <div class="cell-item">
          <el-icon :style="iconStyle">
            <iphone />
          </el-icon>
          Telephone
        </div>
      </template>
      18100000000
    </el-descriptions-item>
    <el-descriptions-item>
      <template #label>
        <div class="cell-item">
          <el-icon :style="iconStyle">
            <location />
          </el-icon>
          Place
        </div>
      </template>
      Suzhou
    </el-descriptions-item>
    <el-descriptions-item>
      <template #label>
        <div class="cell-item">
          <el-icon :style="iconStyle">
            <tickets />
          </el-icon>
          Remarks
        </div>
      </template>
      <el-tag size="small">School</el-tag>
    </el-descriptions-item>
    <el-descriptions-item>
      <template #label>
        <div class="cell-item">
          <el-icon :style="iconStyle">
            <office-building />
          </el-icon>
          Address
        </div>
      </template>
      No.1188, Wuzhong Avenue, Wuzhong District, Suzhou, Jiangsu Province
    </el-descriptions-item>
  </el-descriptions>

  <el-descriptions
    class="margin-top"
    title="Without border"
    :column="3"
    :size="size"
    :style="blockMargin"
  >
    <template #extra>
      <el-button type="primary">Operation</el-button>
    </template>
    <el-descriptions-item label="Username">kooriookami</el-descriptions-item>
    <el-descriptions-item label="Telephone">18100000000</el-descriptions-item>
    <el-descriptions-item label="Place">Suzhou</el-descriptions-item>
    <el-descriptions-item label="Remarks">
      <el-tag size="small">School</el-tag>
    </el-descriptions-item>
    <el-descriptions-item label="Address">
      No.1188, Wuzhong Avenue, Wuzhong District, Suzhou, Jiangsu Province
    </el-descriptions-item>
  </el-descriptions>
</template>

<script setup lang="ts">
import { computed, ref } from 'vue'
import {
  Iphone,
  Location,
  OfficeBuilding,
  Tickets,
  User,
} from '@szhn/dh-design-pc/icons'
import { Button as ElButton, Descriptions as ElDescriptions, DescriptionsItem as ElDescriptionsItem, Icon as ElIcon, Radio as ElRadio, RadioGroup as ElRadioGroup, Tag as ElTag } from '@szhn/dh-design-pc'


const size = ref<'large' | 'default' | 'small'>('default')

const iconStyle = computed(() => {
  const marginMap: Record<'large' | 'default' | 'small', string> = {
    large: '8px',
    default: '6px',
    small: '4px',
  }
  return { marginRight: marginMap[size.value] }
})
const blockMargin = computed(() => {
  const marginMap: Record<'large' | 'default' | 'small', string> = {
    large: '32px',
    default: '28px',
    small: '24px',
  }
  return { marginTop: marginMap[size.value] }
})
</script>

<style scoped>
.el-descriptions {
  margin-top: 20px;
}
.cell-item {
  display: flex;
  align-items: center;
}
.margin-top {
  margin-top: 20px;
}
</style>

垂直列表

<template>
  <el-radio-group v-model="size">
    <el-radio value="large">Large</el-radio>
    <el-radio value="default">Default</el-radio>
    <el-radio value="small">Small</el-radio>
  </el-radio-group>

  <el-descriptions
    title="Vertical list with border"
    direction="vertical"
    :column="4"
    :size="size"
    border
  >
    <el-descriptions-item label="Username">kooriookami</el-descriptions-item>
    <el-descriptions-item label="Telephone">18100000000</el-descriptions-item>
    <el-descriptions-item label="Place" :span="2">Suzhou</el-descriptions-item>
    <el-descriptions-item label="Remarks">
      <el-tag size="small">School</el-tag>
    </el-descriptions-item>
    <el-descriptions-item label="Address">
      No.1188, Wuzhong Avenue, Wuzhong District, Suzhou, Jiangsu Province
    </el-descriptions-item>
  </el-descriptions>

  <el-descriptions
    title="Vertical list without border"
    :column="4"
    :size="size"
    direction="vertical"
    :style="blockMargin"
  >
    <el-descriptions-item label="Username">kooriookami</el-descriptions-item>
    <el-descriptions-item label="Telephone">18100000000</el-descriptions-item>
    <el-descriptions-item label="Place" :span="2">Suzhou</el-descriptions-item>
    <el-descriptions-item label="Remarks">
      <el-tag size="small">School</el-tag>
    </el-descriptions-item>
    <el-descriptions-item label="Address">
      No.1188, Wuzhong Avenue, Wuzhong District, Suzhou, Jiangsu Province
    </el-descriptions-item>
  </el-descriptions>
</template>

<script setup lang="ts">
import { computed, ref } from 'vue'
import { Descriptions as ElDescriptions, DescriptionsItem as ElDescriptionsItem, Radio as ElRadio, RadioGroup as ElRadioGroup, Tag as ElTag } from '@szhn/dh-design-pc'


const size = ref<'large' | 'default' | 'small'>('default')

const blockMargin = computed(() => {
  const marginMap: Record<'large' | 'default' | 'small', string> = {
    large: '32px',
    default: '28px',
    small: '24px',
  }
  return { marginTop: marginMap[size.value] }
})
</script>

<style scoped>
.el-descriptions {
  margin-top: 20px;
}
</style>

单元格跨行 (2.8.1)

<script setup lang="ts">
import { Descriptions as ElDescriptions, DescriptionsItem as ElDescriptionsItem, Image as ElImage, Tag as ElTag } from '@szhn/dh-design-pc'

</script>

<template>
  <el-descriptions title="Width horizontal list" border>
    <el-descriptions-item
      :rowspan="2"
      :width="140"
      label="Photo"
      align="center"
    >
      <el-image
        style="width: 100px; height: 100px"
        src="https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png"
      />
    </el-descriptions-item>
    <el-descriptions-item label="Username">kooriookami</el-descriptions-item>
    <el-descriptions-item label="Telephone">18100000000</el-descriptions-item>
    <el-descriptions-item label="Place">Suzhou</el-descriptions-item>
    <el-descriptions-item label="Remarks">
      <el-tag size="small">School</el-tag>
    </el-descriptions-item>
    <el-descriptions-item label="Address">
      No.1188, Wuzhong Avenue, Wuzhong District, Suzhou, Jiangsu Province
    </el-descriptions-item>
  </el-descriptions>

  <el-descriptions
    title="Width vertical list"
    direction="vertical"
    border
    style="margin-top: 20px"
  >
    <el-descriptions-item
      :rowspan="2"
      :width="140"
      label="Photo"
      align="center"
    >
      <el-image
        style="width: 100px; height: 100px"
        src="https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png"
      />
    </el-descriptions-item>
    <el-descriptions-item label="Username">kooriookami</el-descriptions-item>
    <el-descriptions-item label="Telephone">18100000000</el-descriptions-item>
    <el-descriptions-item label="Place">Suzhou</el-descriptions-item>
    <el-descriptions-item label="Remarks">
      <el-tag size="small">School</el-tag>
    </el-descriptions-item>
    <el-descriptions-item label="Address">
      No.1188, Wuzhong Avenue, Wuzhong District, Suzhou, Jiangsu Province
    </el-descriptions-item>
  </el-descriptions>
</template>

自定义样式

<script setup lang="ts">
import { Descriptions as ElDescriptions, DescriptionsItem as ElDescriptionsItem, Tag as ElTag } from '@szhn/dh-design-pc'

</script>

<template>
  <el-descriptions title="Customized style list" :column="3" border>
    <el-descriptions-item
      label="Username"
      label-align="right"
      align="center"
      label-class-name="my-label"
      class-name="my-content"
      width="150px"
    >
      kooriookami
    </el-descriptions-item>
    <el-descriptions-item label="Telephone" label-align="right" align="center">
      18100000000
    </el-descriptions-item>
    <el-descriptions-item label="Place" label-align="right" align="center">
      Suzhou
    </el-descriptions-item>
    <el-descriptions-item label="Remarks" label-align="right" align="center">
      <el-tag size="small">School</el-tag>
    </el-descriptions-item>
    <el-descriptions-item label="Address" label-align="right" align="center">
      No.1188, Wuzhong Avenue, Wuzhong District, Suzhou, Jiangsu Province
    </el-descriptions-item>
  </el-descriptions>
</template>

<style scoped>
:deep(.my-label) {
  background: var(--el-color-success-light-9) !important;
}
:deep(.my-content) {
  background: var(--el-color-danger-light-9);
}
</style>

Descriptions API

Descriptions Attributes

属性名说明类型默认
border是否带有边框booleanfalse
column一行 Descriptions Item 的数量number3
direction排列的方向enumhorizontal
size列表的尺寸enum
title标题文本,显示在左上方string''
extra操作区文本,显示在右上方string''
label-width 2.8.8每一列的标签宽度string / number

Descriptions Slots

插槽名说明子标签
default自定义默认内容Descriptions Item
title自定义标题,显示在左上方
extra自定义操作区,显示在右上方

DescriptionsItem API

DescriptionsItem Attributes

属性名说明类型默认
label标签文本string''
span列的数量number1
rowspan 2.8.1单元格应该跨越的行数number1
width列的宽度,不同行相同列的宽度按最大值设定(如无 border ,宽度包含标签与内容)string / number''
min-width列的最小宽度,与 width 的区别是 width 是固定的,min-width 会把剩余宽度按比例分配给设置了 min-width 的列(如无 border,宽度包含标签与内容)string / number''
label-width 2.8.8列标签宽,如果未设置,它将与列宽度相同。 比 Descriptionslabel-width 优先级高string / number
align列的内容对齐方式(如无 border,对标签和内容均生效)enumleft
label-align列的标签对齐方式,若不设置该项,则使用内容的对齐方式(如无 border,请使用 align 参数)enum
class-name列的内容自定义类名string''
label-class-namecolumn label custom class namestring''

DescriptionsItem Slots

插槽名说明
default自定义默认内容
label自定义标签