xiaoe_mp_npm 1.1.21-test01 → 1.1.21-test02

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,312 @@
1
+ const TYPE_MAP = {
2
+ BUYING: 1,
3
+ BUY_SUCCESS: 2,
4
+ }
5
+ const INTERVAL_TIME = 3000 // 单次动画间隔时间
6
+ const DURATION_TIME = 2500 // 动画总时间
7
+ // const DEFAULT_ANIMATION_TIME = 400 // 动画时间
8
+ const ENTER_ANIMATION_TIME = 1000 // 进入动画时间
9
+ const WAIT_ANIMATION_TIME = 500 // 停留动画时间
10
+ const LEAVE_ANIMATION_TIME = 1000 // 离开动画时间
11
+
12
+ import { getSensitiveState } from '../common/utils/index'
13
+ const computedBehavior = require('miniprogram-computed').behavior
14
+ // 消息类型 Map
15
+ const MSG_TYPE_MAP = {
16
+ BUY_SUCCESS: 2, // 购买成功
17
+ GO_BUY: 1, // 去购买
18
+ SHARE_LIVE: 21, // 分享直播间
19
+ SOMEONE_COME: 22, // 进入直播间
20
+ SALES_BUBBLE: 23// 中控台气泡氛围
21
+ };
22
+
23
+ Component({
24
+ behaviors: [computedBehavior],
25
+ properties: {
26
+ aliveInfo: {
27
+ type: Object,
28
+ value: {}
29
+ },
30
+ aliveConf: {
31
+ type: Object,
32
+ value: {}
33
+ },
34
+ // 商品配置
35
+ goodsConf: {
36
+ type: Object,
37
+ value: {}
38
+ },
39
+ },
40
+ data: {
41
+ goodsAnimationData: {},
42
+ bubbleList: [], // 气泡展示数组
43
+ bubbleObj: {
44
+ '1': [], // 正在购买商品数组
45
+ '2': [], // 抢购了商品数组
46
+ '21': [], // 分享
47
+ '22': [], // 来了
48
+ '23': [], // 中控台气泡氛围
49
+ }, // im数据获取气泡数据(含拼接操作
50
+ bubbleInterval: null,
51
+ animationTimer: null,
52
+ isInit: false,
53
+ currMsg: {}, // 当前消息源数据
54
+ bubbleItem: {
55
+ bubble_desc: '', // 描述 正在购买/抢购了
56
+ bubble_sensitive_state: '', // 敏感状态
57
+ msg_content: "",
58
+ goods_type: 0,
59
+ content_type: 1,
60
+ user_type: 0,
61
+ user_id: "",
62
+ wx_nickname: "",
63
+ orders: 1
64
+ },
65
+ },
66
+ computed: {
67
+ // 只有类目一才有icon
68
+ showIcon(data) {
69
+ return ![MSG_TYPE_MAP.SOMEONE_COME, MSG_TYPE_MAP.SALES_BUBBLE].includes(data.bubbleItem.content_type);
70
+ },
71
+ iconSrc(data) {
72
+ return data.bubbleItem.content_type === MSG_TYPE_MAP.SHARE_LIVE
73
+ ? 'https://commonresource-1252524126.cdn.xiaoeknow.com/image/miwm77xe0ogc.svg'
74
+ : 'https://commonresource-1252524126.cdn.xiaoeknow.com/image/miwm77xb0eqx.svg';
75
+ },
76
+ isShowNickName(data) {
77
+ if (data.bubbleItem.nums > 1 && data.bubbleItem.content_type !== MSG_TYPE_MAP.SOMEONE_COME) {
78
+ return false;
79
+ }
80
+ if (data.bubbleItem.content_type === MSG_TYPE_MAP.SALES_BUBBLE) {
81
+ return false;
82
+ }
83
+ return true;
84
+ },
85
+ // 类型定制背景
86
+ elBackground(data) {
87
+ const MSG_BGC_MAP = {
88
+ [MSG_TYPE_MAP.BUY_SUCCESS]:
89
+ "linear-gradient(90deg, rgba(255, 51, 0, 0.80) 0%, rgba(255, 102, 0, 0.80) 100%)", // 已购买
90
+ [MSG_TYPE_MAP.GO_BUY]: "linear-gradient(90deg, rgba(255, 51, 0, 0.80) 0%, rgba(255, 102, 0, 0.80) 100%)", // 去购买
91
+ [MSG_TYPE_MAP.SHARE_LIVE]: "rgba(233, 47, 115, 0.8)", // 分享
92
+ [MSG_TYPE_MAP.SOMEONE_COME]: "rgba(93, 93, 255, 0.8)", // 来了
93
+ [MSG_TYPE_MAP.SALES_BUBBLE]: "rgba(255,120,31,0.9)" // 中控台气泡氛围
94
+ };
95
+ return MSG_BGC_MAP[data.bubbleItem.content_type];
96
+ },
97
+ },
98
+ lifetimes: {
99
+ attached() {
100
+ try {
101
+ // 初始化动画位置
102
+ const resetAnimation = wx.createAnimation({
103
+ duration: 0,
104
+ timingFunction: 'ease',
105
+ })
106
+ resetAnimation.translateX(-200).opacity(1).step() // 恢复到初始位置
107
+ this.setData({
108
+ goodsAnimationData: resetAnimation.export(),
109
+ }, () => {
110
+ // 初始化监听逻辑
111
+ this.initEventListener();
112
+ })
113
+ } catch (error) {
114
+ this.initEventListener();
115
+ }
116
+ },
117
+ detached() {
118
+ this.resetOptions()
119
+ },
120
+ },
121
+ methods: {
122
+ // 初始化事件监听
123
+ initEventListener() {
124
+ // 购买消息气泡
125
+ getApp().globalData.$im.on('BUY_BUBBLE_EVENT', (res) => {
126
+ res.content_type = res.goods_type;
127
+ this.initHandler(res);
128
+ })
129
+ // 消息气泡
130
+ getApp().globalData.$im.on('BUBBLE_EVENT', (res) => {
131
+ this.initHandler(res);
132
+ })
133
+ // 假消息
134
+ getApp().globalData.$im.on('GET_FAKE_MSG', (res) => {
135
+ this.initHandler(res);
136
+ })
137
+ },
138
+ // 处理气泡数据(主要聚合除了购买消息气泡外的其他消息气泡)
139
+ bubbleDataHandlder() {
140
+ const { bubbleObj } = this.data;
141
+ for (const key in bubbleObj) {
142
+ const data = bubbleObj[key];
143
+ if ([MSG_TYPE_MAP.SALES_BUBBLE, MSG_TYPE_MAP.SHARE_LIVE, MSG_TYPE_MAP.SOMEONE_COME].includes(+key) && data.length > 0) {
144
+ const userMsg = data[data.length - 1]; // 返回最后一次进栈的用户的消息
145
+
146
+ let bubble = userMsg;
147
+
148
+ bubble.orders = [...new Set(data.map((item) => item.user_id))].length;// 过滤同一个人触发的次数,获得真实人次
149
+ bubble.wx_nickname = userMsg.wx_nickname || userMsg.msg_content.user_name;
150
+ bubble.user_id = userMsg.user_id;
151
+ bubble.user_type = userMsg.user_type;
152
+ bubble.msg_content = userMsg.msg_content;
153
+ // 最后更改当前消息内容
154
+ bubbleObj[key] = [bubble];
155
+ };
156
+ }
157
+ },
158
+ // 处理气泡队列数组
159
+ initHandler(msg) {
160
+ msg.uuid = `uuid_${msg.user_id}_${new Date().getTime()}`; // 用于后面清楚数据的唯一标识
161
+ const normalMsgTypes = [MSG_TYPE_MAP.SHARE_LIVE, MSG_TYPE_MAP.SOMEONE_COME, MSG_TYPE_MAP.SALES_BUBBLE];
162
+ const buyMsgTypes = [MSG_TYPE_MAP.GO_BUY, MSG_TYPE_MAP.BUY_SUCCESS];
163
+ // 普通消息气泡开关
164
+ const isNormalBubbleOn =
165
+ this.data.aliveConf?.is_open_msg_bubble === 1 && normalMsgTypes.includes(msg.content_type);
166
+ // 走带货气泡的开关
167
+ const isBuyBubbleOn = this.data.goodsConf.is_open_msg_bubble && buyMsgTypes.includes(msg.content_type);
168
+ // 普通消息气泡开关 && 带货消息气泡开关
169
+ if (!isNormalBubbleOn && !isBuyBubbleOn) return;
170
+ // 如果数据超过1000条,不入队列
171
+ if (this.data.bubbleList.length > 1000) return;
172
+ // 优先展示自己来了
173
+ if (msg.content_type === MSG_TYPE_MAP.SOMEONE_COME && this.data.aliveConf?.user_id === msg.user_id) {
174
+ this.data.bubbleList.unshift(msg);
175
+ } else {
176
+ this.data.bubbleObj[msg.content_type].push(msg);
177
+ this.bubbleDataHandlder();
178
+ // 根据优先级别展示消息 购买成功 > 去购买 > 分享 > 中控台气泡氛围 > 来了
179
+ this.data.bubbleList = [...this.data.bubbleObj['2'] || [], ...this.data.bubbleObj['1'] || [], ...this.data.bubbleObj['21'] || [], ...this.data.bubbleObj['23'] || [], ...this.data.bubbleObj['22'] || []];
180
+ }
181
+ // 启动气泡轮播
182
+ const needStart = !this.data.bubbleInterval && !this.data.animationTimer
183
+ if (this.data.bubbleList.length > 0 && needStart) {
184
+ this.startBubbleRotation()
185
+ }
186
+ },
187
+ /**
188
+ * 启动一个定时器定期更新气泡
189
+ *
190
+ * @method startBubbleRotation
191
+ * @memberof ShoppingCartBubble
192
+ * @instance
193
+ */
194
+ startBubbleRotation() {
195
+ // 获取第一个气泡数据
196
+ const getCurrentBubbleItem = () => {
197
+ const currentBubble = this.data.bubbleList[0]
198
+ if (currentBubble?.content_type) {
199
+ this.data.bubbleList?.shift() // 清除列表中的数据
200
+ // 清除bubbleObj中的数据
201
+ this.data.bubbleObj[currentBubble.content_type] = this.data.bubbleObj[currentBubble.content_type]?.filter((item) => item.uuid !== currentBubble.uuid) || []
202
+ }
203
+ return currentBubble
204
+ }
205
+ this.displayBubble(getCurrentBubbleItem())
206
+ // 轮询出现气泡弹幕
207
+ this.data.bubbleInterval = setInterval(() => {
208
+ this.displayBubble(getCurrentBubbleItem())
209
+ }, INTERVAL_TIME)
210
+ },
211
+ displayBubble(bubble) {
212
+ // 如果已经没有数据了,重置定时器
213
+ if (!bubble) {
214
+ this.resetOptions()
215
+ return
216
+ }
217
+ const typeText = {
218
+ [MSG_TYPE_MAP.SOMEONE_COME]: '加入了直播间',
219
+ [MSG_TYPE_MAP.SHARE_LIVE]: '分享了直播间',
220
+ [MSG_TYPE_MAP.GO_BUY]: '正在去购买',
221
+ [MSG_TYPE_MAP.BUY_SUCCESS]: '已购买'
222
+ }
223
+ const bubbleItem = {
224
+ bubble_desc: typeText[bubble.content_type] || bubble.msg_content, // 描述
225
+ bubble_sensitive_state: this.handleSensitiveState(bubble.user_id), // 敏感状态
226
+ ...bubble
227
+ }
228
+ this.setData({ bubbleItem, currMsg: bubble }, () => {
229
+ this.handleInitAnimation()
230
+ })
231
+ },
232
+ handleInitAnimation() {
233
+ const animationFunc = () => {
234
+ // 1s进入动画
235
+ const animation = wx.createAnimation({
236
+ duration: ENTER_ANIMATION_TIME,
237
+ timingFunction: 'ease',
238
+ })
239
+ animation.translateX(0).opacity(1).step();
240
+ this.setData({
241
+ goodsAnimationData: animation.export(),
242
+ }, () => {
243
+ // 1.5s等待时间(1s进入动画+0.5s停留时间)
244
+ let animationTimer = setTimeout(() => {
245
+ // 1s离开动画
246
+ const slideOutAnimation = wx.createAnimation({
247
+ duration: LEAVE_ANIMATION_TIME,
248
+ timingFunction: 'ease',
249
+ })
250
+ slideOutAnimation.translateX(0).opacity(0).step();
251
+ this.setData({
252
+ goodsAnimationData: slideOutAnimation.export(),
253
+ }, () => {
254
+ // 离开完成后,重置位置
255
+ setTimeout(() => {
256
+ const resetAnimation = wx.createAnimation({
257
+ duration: 0,
258
+ timingFunction: 'ease',
259
+ })
260
+ resetAnimation.translateX(-200).opacity(1).step() // 恢复到初始位置
261
+ this.setData({
262
+ isInit: false,
263
+ goodsAnimationData: resetAnimation.export(),
264
+ })
265
+ }, LEAVE_ANIMATION_TIME + 20)
266
+ });
267
+ }, WAIT_ANIMATION_TIME + ENTER_ANIMATION_TIME);
268
+ this.setData({
269
+ animationTimer
270
+ })
271
+ });
272
+ }
273
+ if (!this.data.isInit) {
274
+ this.setData({
275
+ isInit: true,
276
+ }, () => {
277
+ animationFunc();
278
+ })
279
+ } else {
280
+ animationFunc();
281
+ }
282
+ },
283
+ resetOptions() {
284
+ this.setData({
285
+ isInit: false,
286
+ currMsg: {},
287
+ bubbleItem: {
288
+ bubble_desc: '', // 描述 正在购买/抢购了
289
+ bubble_sensitive_state: '', // 敏感状态
290
+ msg_content: "",
291
+ goods_type: 0,
292
+ content_type: 1,
293
+ user_type: 0,
294
+ user_id: "",
295
+ wx_nickname: "",
296
+ orders: 1
297
+ }
298
+ })
299
+ clearInterval(this.data.bubbleInterval)
300
+ clearTimeout(this.data.animationTimer)
301
+ this.data.bubbleInterval = null
302
+ this.data.animationTimer = null
303
+ },
304
+ // 昵称脱敏处理
305
+ handleSensitiveState(id) {
306
+ const userType = this.properties.aliveInfo?.user_type
307
+ const isMeOrTeacher = this.properties.aliveInfo?.user_id === id || userType
308
+ const isNeedPrivacy = !isMeOrTeacher && getSensitiveState(userType, this.properties.aliveInfo?.alive_conf || {})
309
+ return isNeedPrivacy ? getSensitiveState(userType, this.properties.aliveInfo?.alive_conf || {}) : 0
310
+ },
311
+ },
312
+ })
@@ -0,0 +1,7 @@
1
+ {
2
+ "component": true,
3
+ "usingComponents": {
4
+ },
5
+ "componentPlaceholder": {
6
+ }
7
+ }
@@ -0,0 +1,81 @@
1
+ $deviceWidth: 750;
2
+ @function vmin($rpx) {
3
+ @return #{$rpx * 100 / $deviceWidth}vmin;
4
+ }
5
+
6
+ @mixin msg-bubble {
7
+ display: inline-flex;
8
+ align-items: center;
9
+ border-radius: vmin(22);
10
+ margin-top: vmin(8);
11
+ max-width: 100%;
12
+ height: vmin(44);
13
+ opacity: 1;
14
+ padding: vmin(4) vmin(16);
15
+ box-sizing: border-box;
16
+ z-index: 20;
17
+ .msg-bubble-info {
18
+ height: 100%;
19
+ display: flex;
20
+ justify-content: center;
21
+ align-items: center;
22
+ font-size: vmin(26);
23
+ color: #fff;
24
+ font-weight: 500;
25
+ font-family: "PingFang SC";
26
+ .icon {
27
+ object-fit: cover;
28
+ margin-right: vmin(8);
29
+ width: vmin(28);
30
+ height: vmin(28);
31
+ }
32
+ .membership-icon {
33
+ display: flex;
34
+ align-items: center;
35
+ flex-shrink: 0;
36
+ }
37
+ .nickname {
38
+ flex: 1;
39
+ display: flex;
40
+ margin-right: vmin(8);
41
+ view {
42
+ display: -webkit-box;
43
+ -webkit-box-orient: vertical;
44
+ -webkit-line-clamp: 1;
45
+ overflow: hidden;
46
+ }
47
+ }
48
+ .content, .more {
49
+ white-space: nowrap;
50
+ margin: 0 vmin(8);
51
+ }
52
+ }
53
+ }
54
+
55
+ .msg-bubble {
56
+ @include msg-bubble
57
+ }
58
+ // 竖屏pad
59
+ @media screen and (min-width: 768px) and (orientation: portrait) {
60
+ $deviceWidth: 1536 !global;
61
+
62
+ .msg-bubble {
63
+ @include msg-bubble
64
+ }
65
+ }
66
+ // PC 放大适配
67
+ @media screen and (min-height: 630px) and (orientation: landscape) {
68
+ $deviceWidth: 1260 !global;
69
+
70
+ .msg-bubble {
71
+ @include msg-bubble;
72
+ }
73
+ }
74
+ // 横屏pad
75
+ @media screen and (min-height: 768px) and (orientation: landscape) {
76
+ $deviceWidth: 1536 !global;
77
+
78
+ .msg-bubble {
79
+ @include msg-bubble;
80
+ }
81
+ }
@@ -0,0 +1,19 @@
1
+ <view
2
+ wx:if="{{ isInit }}"
3
+ class="msg-bubble"
4
+ style="background: {{ elBackground }};"
5
+ animation="{{goodsAnimationData}}"
6
+ >
7
+ <view class="msg-bubble-info">
8
+ <image wx:if="{{showIcon}}" class="icon" src="{{iconSrc}}"></image>
9
+ <!-- 用户名称 -->
10
+ <block wx:if="{{ isShowNickName }}">
11
+ <membership-icon class="membership-icon" msg="{{currMsg}}" />
12
+ <nickname class="nickname" nickname="{{ bubbleItem.wx_nickname }}" sensitiveState="{{ bubbleItem.bubble_sensitive_state }}" />
13
+ </block>
14
+ <!-- 多个用户 -->
15
+ <text wx:if="{{bubbleItem.orders > 1}}" class="more">等{{bubbleItem.orders}}人</text>
16
+ <!-- 气泡内容 -->
17
+ <text class="content">{{ bubbleItem.bubble_desc }}</text>
18
+ </view>
19
+ </view>
@@ -0,0 +1,202 @@
1
+ .msg-bubble {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ border-radius: 2.93333vmin;
5
+ margin-top: 1.06667vmin;
6
+ max-width: 100%;
7
+ height: 5.86667vmin;
8
+ opacity: 1;
9
+ padding: 0.53333vmin 2.13333vmin;
10
+ box-sizing: border-box;
11
+ z-index: 20;
12
+ }
13
+ .msg-bubble .msg-bubble-info {
14
+ height: 100%;
15
+ display: flex;
16
+ justify-content: center;
17
+ align-items: center;
18
+ font-size: 3.46667vmin;
19
+ color: #fff;
20
+ font-weight: 500;
21
+ font-family: "PingFang SC";
22
+ }
23
+ .msg-bubble .msg-bubble-info .icon {
24
+ object-fit: cover;
25
+ margin-right: 1.06667vmin;
26
+ width: 3.73333vmin;
27
+ height: 3.73333vmin;
28
+ }
29
+ .msg-bubble .msg-bubble-info .membership-icon {
30
+ display: flex;
31
+ align-items: center;
32
+ flex-shrink: 0;
33
+ }
34
+ .msg-bubble .msg-bubble-info .nickname {
35
+ flex: 1;
36
+ display: flex;
37
+ margin-right: 1.06667vmin;
38
+ }
39
+ .msg-bubble .msg-bubble-info .nickname view {
40
+ display: -webkit-box;
41
+ -webkit-box-orient: vertical;
42
+ -webkit-line-clamp: 1;
43
+ overflow: hidden;
44
+ }
45
+ .msg-bubble .msg-bubble-info .content,
46
+ .msg-bubble .msg-bubble-info .more {
47
+ white-space: nowrap;
48
+ margin: 0 1.06667vmin;
49
+ }
50
+ @media screen and (min-width: 768px) and (orientation: portrait) {
51
+ .msg-bubble {
52
+ display: inline-flex;
53
+ align-items: center;
54
+ border-radius: 1.43229vmin;
55
+ margin-top: 0.52083vmin;
56
+ max-width: 100%;
57
+ height: 2.86458vmin;
58
+ opacity: 1;
59
+ padding: 0.26042vmin 1.04167vmin;
60
+ box-sizing: border-box;
61
+ z-index: 20;
62
+ }
63
+ .msg-bubble .msg-bubble-info {
64
+ height: 100%;
65
+ display: flex;
66
+ justify-content: center;
67
+ align-items: center;
68
+ font-size: 1.69271vmin;
69
+ color: #fff;
70
+ font-weight: 500;
71
+ font-family: "PingFang SC";
72
+ }
73
+ .msg-bubble .msg-bubble-info .icon {
74
+ object-fit: cover;
75
+ margin-right: 0.52083vmin;
76
+ width: 1.82292vmin;
77
+ height: 1.82292vmin;
78
+ }
79
+ .msg-bubble .msg-bubble-info .membership-icon {
80
+ display: flex;
81
+ align-items: center;
82
+ flex-shrink: 0;
83
+ }
84
+ .msg-bubble .msg-bubble-info .nickname {
85
+ flex: 1;
86
+ display: flex;
87
+ margin-right: 0.52083vmin;
88
+ }
89
+ .msg-bubble .msg-bubble-info .nickname view {
90
+ display: -webkit-box;
91
+ -webkit-box-orient: vertical;
92
+ -webkit-line-clamp: 1;
93
+ overflow: hidden;
94
+ }
95
+ .msg-bubble .msg-bubble-info .content,
96
+ .msg-bubble .msg-bubble-info .more {
97
+ white-space: nowrap;
98
+ margin: 0 0.52083vmin;
99
+ }
100
+ }
101
+ @media screen and (min-height: 630px) and (orientation: landscape) {
102
+ .msg-bubble {
103
+ display: inline-flex;
104
+ align-items: center;
105
+ border-radius: 1.74603vmin;
106
+ margin-top: 0.63492vmin;
107
+ max-width: 100%;
108
+ height: 3.49206vmin;
109
+ opacity: 1;
110
+ padding: 0.31746vmin 1.26984vmin;
111
+ box-sizing: border-box;
112
+ z-index: 20;
113
+ }
114
+ .msg-bubble .msg-bubble-info {
115
+ height: 100%;
116
+ display: flex;
117
+ justify-content: center;
118
+ align-items: center;
119
+ font-size: 2.06349vmin;
120
+ color: #fff;
121
+ font-weight: 500;
122
+ font-family: "PingFang SC";
123
+ }
124
+ .msg-bubble .msg-bubble-info .icon {
125
+ object-fit: cover;
126
+ margin-right: 0.63492vmin;
127
+ width: 2.22222vmin;
128
+ height: 2.22222vmin;
129
+ }
130
+ .msg-bubble .msg-bubble-info .membership-icon {
131
+ display: flex;
132
+ align-items: center;
133
+ flex-shrink: 0;
134
+ }
135
+ .msg-bubble .msg-bubble-info .nickname {
136
+ flex: 1;
137
+ display: flex;
138
+ margin-right: 0.63492vmin;
139
+ }
140
+ .msg-bubble .msg-bubble-info .nickname view {
141
+ display: -webkit-box;
142
+ -webkit-box-orient: vertical;
143
+ -webkit-line-clamp: 1;
144
+ overflow: hidden;
145
+ }
146
+ .msg-bubble .msg-bubble-info .content,
147
+ .msg-bubble .msg-bubble-info .more {
148
+ white-space: nowrap;
149
+ margin: 0 0.63492vmin;
150
+ }
151
+ }
152
+ @media screen and (min-height: 768px) and (orientation: landscape) {
153
+ .msg-bubble {
154
+ display: inline-flex;
155
+ align-items: center;
156
+ border-radius: 1.43229vmin;
157
+ margin-top: 0.52083vmin;
158
+ max-width: 100%;
159
+ height: 2.86458vmin;
160
+ opacity: 1;
161
+ padding: 0.26042vmin 1.04167vmin;
162
+ box-sizing: border-box;
163
+ z-index: 20;
164
+ }
165
+ .msg-bubble .msg-bubble-info {
166
+ height: 100%;
167
+ display: flex;
168
+ justify-content: center;
169
+ align-items: center;
170
+ font-size: 1.69271vmin;
171
+ color: #fff;
172
+ font-weight: 500;
173
+ font-family: "PingFang SC";
174
+ }
175
+ .msg-bubble .msg-bubble-info .icon {
176
+ object-fit: cover;
177
+ margin-right: 0.52083vmin;
178
+ width: 1.82292vmin;
179
+ height: 1.82292vmin;
180
+ }
181
+ .msg-bubble .msg-bubble-info .membership-icon {
182
+ display: flex;
183
+ align-items: center;
184
+ flex-shrink: 0;
185
+ }
186
+ .msg-bubble .msg-bubble-info .nickname {
187
+ flex: 1;
188
+ display: flex;
189
+ margin-right: 0.52083vmin;
190
+ }
191
+ .msg-bubble .msg-bubble-info .nickname view {
192
+ display: -webkit-box;
193
+ -webkit-box-orient: vertical;
194
+ -webkit-line-clamp: 1;
195
+ overflow: hidden;
196
+ }
197
+ .msg-bubble .msg-bubble-info .content,
198
+ .msg-bubble .msg-bubble-info .more {
199
+ white-space: nowrap;
200
+ margin: 0 0.52083vmin;
201
+ }
202
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xiaoe_mp_npm",
3
- "version": "1.1.21-test01",
3
+ "version": "1.1.21-test02",
4
4
  "description": "",
5
5
  "main": "miniprogram_dist/index.js",
6
6
  "scripts": {