Empty 空状态
示例
默认
暂无数据
<template>
<article>
  <veui-empty/>
</article>
</template>
<script>
import { Empty } from 'veui'
export default {
  components: {
    'veui-empty': Empty
  }
}
</script>
<style scoped>
article {
  display: flex;
  flex-direction: column;
  align-items: center;
}
</style>
页面级
IllustrationForbidden
没有权限
 请联系管理员为你添加权限 
<template>
<article>
  <section>
    <veui-select
      v-model="current"
      class="picker"
      ui="s"
      :options="options"
      overlay-style="--dls-dropdown-max-display-items: 4;"
    />
  </section>
  <veui-empty
    title="没有权限"
  >
    <component :is="illustrations[current]"/>
    <template #desc>
      请联系管理员为你添加权限
      <veui-button ui="strong text">
        发送邮件
      </veui-button>
    </template>
    <template #actions>
      <veui-button ui="primary">
        回到首页
      </veui-button>
    </template>
  </veui-empty>
</article>
</template>
<script>
import { Empty, Button, Select } from 'veui'
import * as illustrations from 'dls-illustrations-vue'
const illustrationNames = [
  'IllustrationBlank',
  'IllustrationClientError',
  'IllustrationForbidden',
  'IllustrationNoResults',
  'IllustrationNotFound',
  'IllustrationReviewError',
  'IllustrationReviewPending',
  'IllustrationReviewSuccess',
  'IllustrationServerError'
]
export default {
  components: {
    'veui-empty': Empty,
    'veui-button': Button,
    'veui-select': Select
  },
  data () {
    return {
      illustrations,
      current: 'IllustrationForbidden'
    }
  },
  computed: {
    options () {
      return illustrationNames.map(name => ({
        label: name,
        value: name
      }))
    }
  }
}
</script>
<style scoped>
article {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 30px;
}
section {
  align-self: flex-start;
}
.picker {
  width: 240px;
}
</style>
局部状态
IllustrationSpotLoadError
服务器错误
<template>
<article>
  <section>
    <veui-select
      v-model="current"
      class="picker"
      ui="s"
      :options="options"
      overlay-style="--dls-dropdown-max-display-items: 4;"
    />
    <veui-radio-button-group
      v-model="size"
      ui="s"
      :items="sizes"
    />
  </section>
  <veui-empty
    :ui="size"
    desc="服务器错误"
  >
    <component :is="illustrations[current]"/>
  </veui-empty>
</article>
</template>
<script>
import { Empty, Button, Select, RadioButtonGroup } from 'veui'
import * as illustrations from 'dls-illustrations-vue'
const illustrationNames = [
  'IllustrationSpotBarChart',
  'IllustrationSpotCleared',
  'IllustrationSpotFunnelChart',
  'IllustrationSpotGaugeChart',
  'IllustrationSpotImageError',
  'IllustrationSpotLineChart',
  'IllustrationSpotLoadError',
  'IllustrationSpotMap',
  'IllustrationSpotNetworkError',
  'IllustrationSpotNoAccess',
  'IllustrationSpotNoContent',
  'IllustrationSpotNoFavorites',
  'IllustrationSpotNoHistory',
  'IllustrationSpotNoImage',
  'IllustrationSpotNoInternet',
  'IllustrationSpotNoMessages',
  'IllustrationSpotNoResults',
  'IllustrationSpotNoStore',
  'IllustrationSpotNoVideo',
  'IllustrationSpotPieChart',
  'IllustrationSpotPresentation',
  'IllustrationSpotRadarChart',
  'IllustrationSpotRelationshipChart',
  'IllustrationSpotServerError',
  'IllustrationSpotTryLater',
  'IllustrationSpotVideoError',
  'IllustrationSpotWordCloud'
]
export default {
  components: {
    'veui-empty': Empty,
    'veui-button': Button,
    'veui-select': Select,
    'veui-radio-button-group': RadioButtonGroup
  },
  data () {
    return {
      illustrations,
      current: 'IllustrationSpotLoadError',
      sizes: [
        {
          label: 'm',
          value: 'm'
        }, {
          label: 's',
          value: 's'
        }
      ],
      size: 'm'
    }
  },
  computed: {
    options () {
      return illustrationNames.map(name => ({
        label: name,
        value: name
      }))
    }
  }
}
</script>
<style scoped>
article {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 30px;
}
section {
  display: flex;
  gap: 12px;
  align-self: flex-start;
}
.picker {
  width: 240px;
}
</style>
自定义
内置 <img> 标签

找不到对应的内容
请检查输入的网址是否正确
任意内容
未知错误
<template>
<article>
  <section>
    <h4>内置 <code>&lt;img&gt;</code> 标签</h4>
    <veui-empty
      :image="image"
      title="找不到对应的内容"
      desc="请检查输入的网址是否正确"
    />
  </section>
  <section>
    <h4>任意内容</h4>
    <veui-empty
      ui="s"
      title="未知错误"
      :desc="false"
    >
      <veui-icon
        name="exclamation-circle-solid"
        style="height: 96px; color: rebeccapurple;"
      />
    </veui-empty>
  </section>
</article>
</template>
<script>
import { Empty, Icon } from 'veui'
import 'veui-theme-dls-icons/exclamation-circle-solid'
export default {
  components: {
    'veui-empty': Empty,
    'veui-icon': Icon
  },
  data () {
    return {
      image: {
        src: 'http://ecma.bdimg.com/public01/one-design/597ed72aff7a9fbacf23ba79b43aa61d.png',
        width: 296,
        height: 197,
        alt: '404 illustration provided by unDraw'
      }
    }
  }
}
</script>
<style lang="less" scoped>
section {
  display: flex;
  flex-direction: column;
  align-items: center;
  & + & {
    margin-top: 20px;
  }
}
h4 {
  align-self: flex-start;
}
</style>
API
属性
| 名称 | 类型 | 默认值 | 描述 | ||||||
|---|---|---|---|---|---|---|---|---|---|
| ui | string | - | 预设样式。 
 | ||||||
| image | Object | false | - | 插图内容配置。不传时将输出默认插图;传入 Object时,字段将作为<img>元素的属性输出;传入false时将隐藏插图。如果为默认插槽传入了内容,此属性会被忽略。 | ||||||
| title | string | - | 空状态标题。 | ||||||
| desc | string | false | - | 空状态描述。传入 false时将隐藏描述。 | 
插槽
| 名称 | 描述 | 
|---|---|
| default | 插图内容。默认情况下会展示“没有数据”对应的插图。 | 
| title | 标题区。 | 
| desc | 描述区。 | 
| actions | 操作区。 |