yanjinhui
10 天以前 c5de0d98241f8c8349fa38851b77efcfc61e4d26
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<script setup lang="ts">
import { ComponentSize, ElAvatar, ElTooltip } from 'element-plus'
import { PropType, computed } from 'vue'
import { AvatarItem } from './types'
import { useDesign } from '@/hooks/web/useDesign'
 
const { getPrefixCls } = useDesign()
 
const prefixCls = getPrefixCls('avatars')
 
const props = defineProps({
  size: {
    type: [String, Number] as PropType<ComponentSize | number>,
    default: ''
  },
  max: {
    type: Number,
    default: 5
  },
  data: {
    type: Array as PropType<AvatarItem[]>,
    default: () => []
  },
  showTooltip: {
    type: Boolean,
    default: true
  }
})
 
const filterData = computed(() => props.data.slice(0, props.max))
</script>
 
<template>
  <div :class="prefixCls" class="flex items-center">
    <template v-for="item in filterData" :key="item.url">
      <template v-if="showTooltip && item.name">
        <ElTooltip :content="item.name" placement="top">
          <ElAvatar
            :size="size"
            :src="item.url"
            class="relative"
            :style="{
              zIndex: filterData.indexOf(item)
            }"
          />
        </ElTooltip>
      </template>
      <template v-else>
        <ElAvatar
          :size="size"
          :src="item.url"
          class="relative"
          :style="{
            zIndex: filterData.indexOf(item)
          }"
        />
      </template>
    </template>
 
    <ElAvatar
      v-if="data.length > max"
      :style="{
        zIndex: data.length
      }"
    >
      <span>+{{ data.length - max }}</span>
    </ElAvatar>
  </div>
</template>
 
<style scoped lang="less">
@prefix-cls: ~'@{adminNamespace}-avatars';
 
.@{prefix-cls} {
  .@{elNamespace}-avatar + .@{elNamespace}-avatar {
    margin-left: -15px;
  }
}
</style>