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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
| <!--
| <template>
| <div :class="[prefixCls]">
| <ul>
| <slot></slot>
| <template v-for="item in filterEmpty($slots.default).slice(0, 3)"></template>
|
| <template v-if="maxLength > 0 && filterEmpty($slots.default).length > maxLength">
| <avatar-item :size="size">
| <avatar :size="size !== 'mini' && size || 20" :style="excessItemsStyle">{{ `+${maxLength}` }}</avatar>
| </avatar-item>
| </template>
| </ul>
| </div>
| </template>
| -->
|
| <script>
| import Avatar from 'ant-design-vue/es/avatar'
| import AvatarItem from './Item'
| import { filterEmpty } from '@/components/_util/util'
|
| export default {
| AvatarItem,
| name: 'AvatarList',
| components: {
| Avatar,
| AvatarItem
| },
| props: {
| prefixCls: {
| type: String,
| default: 'ant-pro-avatar-list'
| },
| /**
| * 头像大小 类型: large、small 、mini, default
| * 默认值: default
| */
| size: {
| type: [String, Number],
| default: 'default'
| },
| /**
| * 要显示的最大项目
| */
| maxLength: {
| type: Number,
| default: 0
| },
| /**
| * 多余的项目风格
| */
| excessItemsStyle: {
| type: Object,
| default: () => {
| return {
| color: '#f56a00',
| backgroundColor: '#fde3cf'
| }
| }
| }
| },
| data () {
| return {}
| },
| methods: {
| getItems (items) {
| const classString = {
| [`${this.prefixCls}-item`]: true,
| [`${this.size}`]: true
| }
|
| if (this.maxLength > 0) {
| items = items.slice(0, this.maxLength)
| items.push((<Avatar size={ this.size } style={ this.excessItemsStyle }>{`+${this.maxLength}`}</Avatar>))
| }
| const itemList = items.map((item) => (
| <li class={ classString }>{ item }</li>
| ))
| return itemList
| }
| },
| render () {
| const { prefixCls, size } = this.$props
| const classString = {
| [`${prefixCls}`]: true,
| [`${size}`]: true
| }
| const items = filterEmpty(this.$slots.default)
| const itemsDom = items && items.length ? <ul class={`${prefixCls}-items`}>{ this.getItems(items) }</ul> : null
|
| return (
| <div class={ classString }>
| { itemsDom }
| </div>
| )
| }
| }
| </script>
|
|