<!-- <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>