| 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
100
101
102
103
104
 | | <template> |  |   <view class="tn-avatar-group-class tn-avatar-group"> |  |     <view v-for="(item, index) in lists" :key="index" class="tn-avatar-group__item" :style="[itemStyle(index)]"> |  |       <tn-avatar |  |         :src="item.src || ''" |  |         :text="item.text || ''" |  |         :icon="item.icon || ''" |  |         :size="size" |  |         :shape="shape" |  |         :imgMode="imgMode" |  |         :border="true" |  |         backgroundColor="rgba(255, 255, 255, 0.4)" |  |         :borderSize="4" |  |       ></tn-avatar> |  |     </view> |  |   </view> |  | </template> |  |   |  | <script> |  |   export default { |  |     name: 'tn-avatar-group', |  |     props: { |  |       // 头像列表 |  |       lists: { |  |         type: Array, |  |         default() { |  |           return [] |  |         } |  |       }, |  |       // 头像类型 |  |       // square 带圆角正方形 circle 圆形 |  |       shape: { |  |         type: String, |  |         default: 'circle' |  |       }, |  |       // 大小 |  |       // sm 小头像 lg 大头像 xl 加大头像 |  |       // 如果为其他则认为是直接设置大小 |  |       size: { |  |         type: [Number, String], |  |         default: '' |  |       }, |  |       // 当设置为显示头像信息时, |  |       // 图片的裁剪模式 |  |       imgMode: { |  |         type: String, |  |         default: 'aspectFill' |  |       }, |  |       // 头像之间的遮挡比例 |  |       // 0.4 代表 40% |  |       gap: { |  |         type: Number, |  |         default: 0.4 |  |       } |  |     }, |  |     computed: { |  |       itemStyle() { |  |         return (index) => { |  |           let style = {} |  |           if (this._checkSizeIsInline()) { |  |             switch(this.size) { |  |               case 'sm': |  |                 style.marginLeft = index != 0 ? `${-48 * this.gap}rpx` : '' |  |                 break |  |               case 'lg': |  |                 style.marginLeft = index != 0 ? `${-96 * this.gap}rpx` : '' |  |                 break |  |               case 'xl': |  |                 style.marginLeft = index != 0 ? `${-128 * this.gap}rpx` : '' |  |                 break |  |             } |  |           } else { |  |             const size = Number(this.size.replace(/(px|rpx)/g, '')) || 64 |  |             style.marginLeft = index != 0 ? `-${size * this.gap}rpx` : '' |  |           } |  |           return style |  |         } |  |       } |  |     }, |  |     data() { |  |       return { |  |          |  |       } |  |     }, |  |     methods: { |  |       // 检查是否使用内置的大小进行设置 |  |       _checkSizeIsInline() { |  |         if (/(xs|sm|md|lg|xl|xxl)/.test(this.size)) return true |  |         else return false |  |       } |  |     } |  |   } |  | </script> |  |   |  | <style lang="scss" scoped> |  |   .tn-avatar-group { |  |     display: flex; |  |     flex-direction: row; |  |      |  |     &__item { |  |       position: relative; |  |     } |  |   } |  | </style> | 
 |