2b290308758aaeced671b2b906e56e3869af7534.svn-base 2.3 KB

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