1+ <!--
2+ <template>
3+ <div :class="[prefixCls]">
4+ <ul>
5+ <slot></slot>
6+ <template v-for="item in filterEmpty($slots.default).slice(0, 3)"></template>
7+
8+
9+ <template v-if="maxLength > 0 && filterEmpty($slots.default).length > maxLength">
10+ <avatar-item :size="size">
11+ <avatar :size="size !== 'mini' && size || 20" :style="excessItemsStyle">{{ `+${maxLength}` }}</avatar>
12+ </avatar-item>
13+ </template>
14+ </ul>
15+ </div>
16+ </template>
17+ -->
18+
19+ <script >
20+ import Avatar from ' ant-design-vue/es/avatar'
21+ import AvatarItem from ' ./Item'
22+ import { filterEmpty } from ' @/components/_util/util'
23+
24+ export default {
25+ AvatarItem,
26+ name: " AvatarList" ,
27+ components: {
28+ Avatar,
29+ AvatarItem
30+ },
31+ props: {
32+ prefixCls: {
33+ type: String ,
34+ default: ' ant-pro-avatar-list'
35+ },
36+ /**
37+ * 头像大小 类型: large、small 、mini, default
38+ * 默认值: default
39+ */
40+ size: {
41+ type: [String , Number ],
42+ default: ' default'
43+ },
44+ /**
45+ * 要显示的最大项目
46+ */
47+ maxLength: {
48+ type: Number ,
49+ default: 0
50+ },
51+ /**
52+ * 多余的项目风格
53+ */
54+ excessItemsStyle: {
55+ type: Object ,
56+ default : () => {
57+ return {
58+ color: ' #f56a00' ,
59+ backgroundColor: ' #fde3cf'
60+ }
61+ }
62+ }
63+ },
64+ data () {
65+ return {}
66+ },
67+ methods: {
68+ getItems (items ) {
69+ const classString = {
70+ [` ${ this .prefixCls } -item` ]: true ,
71+ [` ${ this .size } ` ]: true
72+ }
73+
74+ if (this .maxLength > 0 ) {
75+ items = items .slice (0 , this .maxLength )
76+ items .push ((< Avatar size= { this .size } style= { this .excessItemsStyle }> {` +${ this .maxLength } ` }< / Avatar> ))
77+ }
78+ const itemList = items .map ((item ) => (
79+ < li class = { classString }> { item }< / li>
80+ ))
81+ return itemList
82+ }
83+ },
84+ render () {
85+ const { prefixCls , size } = this .$props
86+ const classString = {
87+ [` ${ prefixCls} ` ]: true ,
88+ [` ${ size} ` ]: true ,
89+ }
90+ const items = filterEmpty (this .$slots .default )
91+ const itemsDom = items && items .length ? < ul class = {` ${ prefixCls} -items` }> { this .getItems (items) }< / ul> : null
92+
93+ return (
94+ < div class = { classString }>
95+ { itemsDom }
96+ < / div>
97+ )
98+ }
99+ }
100+ </script >
0 commit comments