@tencentcloud/sdk-mcp 1.7.3 → 1.7.4
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.
- package/CHANGELOG.md +13 -0
- package/README.md +13 -13
- package/knowledge/path-meta.js +23 -1
- package/package.json +1 -1
- package/resource/index/manifest.json +1 -1
- package/resource/integration/callkit/preset/android/integration.md +4 -0
- package/resource/integration/callkit/preset/flutter/integration.md +4 -0
- package/resource/integration/callkit/preset/ios/integration.md +14 -13
- package/resource/integration/callkit/preset/vue/integration.md +0 -3
- package/resource/integration/chat/preset/android/integration.md +3 -145
- package/resource/integration/chat/preset/flutter/integration.md +20 -128
- package/resource/integration/chat/preset/ios/integration.md +2 -269
- package/resource/integration/chat/preset/react/integration.md +27 -1
- package/resource/integration/chat/preset/uni-app/integration.md +5 -1
- package/resource/integration/chat/preset/vue/integration.md +21 -31
- package/resource/integration/livekit/preset/live/android/live-host-integration.md +4 -0
- package/resource/integration/livekit/preset/live/ios/live-host-integration.md +4 -0
- package/resource/integration/livekit/preset/live/vue/live-list-integration.md +3 -4
- package/resource/integration/livekit/preset/live/vue/live-player-desk-integration.md +0 -1
- package/resource/integration/livekit/preset/live/vue/live-player-h5-integration.md +0 -1
- package/resource/integration/livekit/preset/live/vue/live-pusher-integration.md +4 -9
- package/resource/integration/roomkit/preset/vue/integration.md +0 -213
- package/resource/knowledge/callkit/best-practice/android/video-chat-dating.md +490 -0
- package/resource/knowledge/callkit/best-practice/flutter/android-keep-call-alive-background.md +79 -0
- package/resource/knowledge/callkit/best-practice/flutter/background-incoming-call-no-notification.md +99 -0
- package/resource/knowledge/callkit/best-practice/flutter/ios-keep-call-alive-background.md +93 -0
- package/resource/knowledge/callkit/best-practice/flutter/ios-startup-crash-version-voip.md +68 -0
- package/resource/knowledge/callkit/core-sdk/flutter/offline-push.md +1 -1
- package/resource/knowledge/callkit/core-sdk/ios/answer-call.md +9 -7
- package/resource/knowledge/callkit/core-sdk/ios/make-call.md +10 -7
- package/resource/knowledge/callkit/core-sdk/miniprogram/call-engine.md +19 -19
- package/resource/knowledge/callkit/core-sdk/miniprogram/call-event.md +16 -16
- package/resource/knowledge/callkit/core-sdk/uni-app/answer-call.md +0 -84
- package/resource/knowledge/callkit/core-sdk/uni-app/make-call.md +0 -102
- package/resource/knowledge/callkit/core-sdk/web/call-event.md +2 -2
- package/resource/knowledge/callkit/faq/error-code.md +62 -36
- package/resource/knowledge/callkit/faq/uniapp-miniprogram.md +1 -1
- package/resource/knowledge/callkit/preset/android/api.md +10 -10
- package/resource/knowledge/callkit/preset/harmonyos/api.md +362 -0
- package/resource/knowledge/callkit/preset/harmonyos/integration.md +322 -0
- package/resource/knowledge/callkit/preset/ios/api.md +9 -9
- package/resource/knowledge/callkit/preset/miniprogram/api-uniapp.md +293 -0
- package/resource/knowledge/callkit/preset/miniprogram/api.md +19 -19
- package/resource/knowledge/callkit/preset/miniprogram/integration.md +292 -0
- package/resource/knowledge/callkit/preset/miniprogram/uniapp-integration.md +521 -0
- package/resource/knowledge/callkit/preset/uni-app/api.md +49 -0
- package/resource/knowledge/callkit/preset/uni-app/integration.md +353 -0
- package/resource/knowledge/chat/preset/android-view/integration.md +52 -100
- package/resource/knowledge/chat/preset/ios/features/language.md +5 -5
- package/resource/knowledge/chat/preset/ios-uikit/integration.md +184 -923
- package/resource/knowledge/chat/preset/react/features/search.md +9 -214
- package/resource/knowledge/chat/preset/react/h5/integration.md +965 -0
- package/resource/knowledge/chat/preset/vue/features/chat-header.md +0 -36
- package/resource/knowledge/chat/preset/vue/features/contact-list.md +0 -34
- package/resource/knowledge/chat/preset/vue/features/conversation-list.md +0 -39
- package/resource/knowledge/chat/preset/vue/features/conversation-preview.md +0 -74
- package/resource/knowledge/chat/preset/vue/features/search.md +9 -790
- package/resource/knowledge/chat/preset/vue/h5/integration.md +724 -0
- package/resource/knowledge/livekit/core-sdk/features/uni-app/live-list.md +0 -167
- package/resource/knowledge/livekit/core-sdk/live/android/co-guest-interaction.md +1 -1
- package/resource/knowledge/livekit/core-sdk/live/android/host-interaction.md +1 -1
- package/resource/knowledge/livekit/core-sdk/live/flutter/co-guest-interaction.md +1 -1
- package/resource/knowledge/livekit/core-sdk/live/flutter/host-interaction.md +1 -1
- package/resource/knowledge/livekit/core-sdk/live/flutter/integration.md +1 -1
- package/resource/knowledge/livekit/core-sdk/live/ios/co-guest-interaction.md +1 -1
- package/resource/knowledge/livekit/core-sdk/live/ios/host-interaction.md +1 -1
- package/resource/knowledge/livekit/core-sdk/live/ios/integration.md +2 -2
- package/resource/knowledge/livekit/core-sdk/live/uni-app/co-guest-interaction.md +1 -66
- package/resource/knowledge/livekit/core-sdk/live/uni-app/host-interaction.md +1 -66
- package/resource/knowledge/livekit/core-sdk/live/uni-app/integration.md +1 -1
- package/resource/knowledge/livekit/core-sdk/voice/android/co-guest-interaction.md +1 -1
- package/resource/knowledge/livekit/core-sdk/voice/android/host-interaction.md +2 -2
- package/resource/knowledge/livekit/core-sdk/voice/flutter/co-guest-interaction.md +1 -1
- package/resource/knowledge/livekit/core-sdk/voice/ios/co-guest-interaction.md +1 -1
- package/resource/knowledge/livekit/core-sdk/voice/ios/host-interaction.md +2 -2
- package/resource/knowledge/livekit/core-sdk/voice/uni-app/integration.md +2 -2
- package/resource/knowledge/livekit/preset/live/vue/features/barrage.md +1 -24
- package/resource/knowledge/livekit/preset/live/vue/features/live-audience-list.md +0 -3
- package/resource/knowledge/livekit/preset/live/vue/features/live-view.md +0 -5
- package/resource/knowledge/push/api-reference/harmonyos.md +9 -9
- package/resource/knowledge/push/api-reference/unity.md +10 -10
- package/resource/knowledge/push/api-reference/unreal-engine.md +11 -11
- package/resource/knowledge/push/integration/android.md +57 -13
- package/resource/knowledge/push/integration/donut.md +3 -3
- package/resource/knowledge/push/integration/flutter.md +38 -24
- package/resource/knowledge/push/integration/harmonyos.md +1 -11
- package/resource/knowledge/push/integration/ios.md +21 -6
- package/resource/knowledge/push/integration/react-native.md +1 -1
- package/resource/knowledge/push/integration/uni-app.md +1 -1
- package/resource/knowledge/push/integration/unity.md +1 -1
- package/resource/knowledge/push/integration/unreal-engine.md +2 -2
- package/resource/knowledge/roomkit/core-sdk/android/room-state.md +3 -3
- package/resource/knowledge/roomkit/core-sdk/android/schedule-room.md +4 -4
- package/resource/knowledge/roomkit/core-sdk/flutter/room-state.md +2 -2
- package/resource/knowledge/roomkit/core-sdk/flutter/schedule-room.md +4 -4
- package/resource/knowledge/roomkit/core-sdk/ios/room-state.md +3 -3
- package/resource/knowledge/roomkit/core-sdk/ios/schedule-room.md +4 -4
- package/resource/knowledge/roomkit/core-sdk/vue/device-detection.md +0 -9
- package/resource/knowledge/roomkit/core-sdk/vue/free-beauty-panel.md +0 -9
- package/resource/knowledge/roomkit/core-sdk/vue/room-chat.md +0 -3
- package/resource/knowledge/roomkit/core-sdk/vue/room-view.md +0 -16
- package/resource/knowledge/roomkit/core-sdk/vue/schedule-room.md +0 -3
- package/resource/knowledge/roomkit/core-sdk/vue/virtual-background.md +0 -3
- package/resource/knowledge/roomkit/core-sdk/vue/whiteboard-annotation.md +0 -15
- package/resource/knowledge/roomkit/preset/android/integration.md +1 -202
- package/resource/knowledge/roomkit/preset/flutter/integration.md +13 -13
- package/resource/knowledge/roomkit/preset/harmonyos/integration.md +6 -2
- package/resource/knowledge/roomkit/preset/ios/integration.md +0 -201
- package/resource/knowledge/roomkit/preset/react/integration.md +0 -202
- package/resource/knowledge/roomkit/preset/uniapp-app/integration.md +207 -509
- package/resource/knowledge/rtcengine/web/plugin/42-advanced-realtime-transcriber.md +25 -6
- package/server.js +1 -1
- package/utils/report-cls-client.js +1 -1
- package/utils/report-es-client.js +1 -1
|
@@ -78,68 +78,6 @@ const handleJoinLive = (live: any) => {
|
|
|
78
78
|
|
|
79
79
|
</script>
|
|
80
80
|
|
|
81
|
-
<style scoped>
|
|
82
|
-
.live-list {
|
|
83
|
-
flex: 1;
|
|
84
|
-
background: #fff;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
.list {
|
|
88
|
-
width: 100%;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
.row {
|
|
92
|
-
flex-direction: row;
|
|
93
|
-
padding: 0 32rpx 16rpx;
|
|
94
|
-
justify-content: space-between;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
.card {
|
|
98
|
-
width: 48%;
|
|
99
|
-
height: 320rpx;
|
|
100
|
-
background: #f5f5f5;
|
|
101
|
-
border-radius: 12rpx;
|
|
102
|
-
overflow: hidden;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
.cover {
|
|
106
|
-
width: 100%;
|
|
107
|
-
height: 220rpx;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
.info {
|
|
111
|
-
flex: 1;
|
|
112
|
-
padding: 12rpx;
|
|
113
|
-
flex-direction: column;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
.title {
|
|
117
|
-
font-size: 26rpx;
|
|
118
|
-
font-weight: 600;
|
|
119
|
-
color: #000;
|
|
120
|
-
lines: 1;
|
|
121
|
-
text-overflow: ellipsis;
|
|
122
|
-
overflow: hidden;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
.owner {
|
|
126
|
-
font-size: 22rpx;
|
|
127
|
-
color: #666;
|
|
128
|
-
margin-top: 4rpx;
|
|
129
|
-
lines: 1;
|
|
130
|
-
text-overflow: ellipsis;
|
|
131
|
-
overflow: hidden;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
.count {
|
|
135
|
-
font-size: 20rpx;
|
|
136
|
-
color: #999;
|
|
137
|
-
margin-top: 4rpx;
|
|
138
|
-
lines: 1;
|
|
139
|
-
text-overflow: ellipsis;
|
|
140
|
-
overflow: hidden;
|
|
141
|
-
}
|
|
142
|
-
</style>
|
|
143
81
|
```
|
|
144
82
|
|
|
145
83
|
**LiveInfo 参数说明**
|
|
@@ -286,111 +224,6 @@ const handleJoinLive = (live: any) => {
|
|
|
286
224
|
};
|
|
287
225
|
</script>
|
|
288
226
|
|
|
289
|
-
<style scoped>
|
|
290
|
-
.live-list {
|
|
291
|
-
flex: 1;
|
|
292
|
-
background: #fff;
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
/* 分类标签栏 */
|
|
296
|
-
.category-tabs {
|
|
297
|
-
flex-direction: row;
|
|
298
|
-
padding: 16rpx 32rpx;
|
|
299
|
-
background: #f9f9f9;
|
|
300
|
-
border-bottom: 1rpx solid #e8e8e8;
|
|
301
|
-
overflow-x: auto;
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
.tab {
|
|
305
|
-
padding: 8rpx 20rpx;
|
|
306
|
-
margin-right: 12rpx;
|
|
307
|
-
background: #fff;
|
|
308
|
-
border: 1rpx solid #e0e0e0;
|
|
309
|
-
border-radius: 20rpx;
|
|
310
|
-
font-size: 24rpx;
|
|
311
|
-
color: #666;
|
|
312
|
-
white-space: nowrap;
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
.tab.active {
|
|
316
|
-
background: #0468FC;
|
|
317
|
-
border-color: #0468FC;
|
|
318
|
-
color: #fff;
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
.list {
|
|
322
|
-
width: 100%;
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
.row {
|
|
326
|
-
flex-direction: row;
|
|
327
|
-
padding: 0 32rpx 16rpx;
|
|
328
|
-
justify-content: space-between;
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
.card {
|
|
332
|
-
width: 48%;
|
|
333
|
-
height: 320rpx;
|
|
334
|
-
background: #f5f5f5;
|
|
335
|
-
border-radius: 12rpx;
|
|
336
|
-
overflow: hidden;
|
|
337
|
-
position: relative;
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
.cover {
|
|
341
|
-
width: 100%;
|
|
342
|
-
height: 220rpx;
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
/* 分类徽章 */
|
|
346
|
-
.category-badge {
|
|
347
|
-
position: absolute;
|
|
348
|
-
top: 8rpx;
|
|
349
|
-
left: 8rpx;
|
|
350
|
-
background: rgba(4, 104, 252, 0.9);
|
|
351
|
-
border-radius: 4rpx;
|
|
352
|
-
padding: 4rpx 8rpx;
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
.badge-text {
|
|
356
|
-
font-size: 18rpx;
|
|
357
|
-
color: #fff;
|
|
358
|
-
font-weight: 600;
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
.info {
|
|
362
|
-
flex: 1;
|
|
363
|
-
padding: 12rpx;
|
|
364
|
-
flex-direction: column;
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
.title {
|
|
368
|
-
font-size: 26rpx;
|
|
369
|
-
font-weight: 600;
|
|
370
|
-
color: #000;
|
|
371
|
-
lines: 1;
|
|
372
|
-
text-overflow: ellipsis;
|
|
373
|
-
overflow: hidden;
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
.owner {
|
|
377
|
-
font-size: 22rpx;
|
|
378
|
-
color: #666;
|
|
379
|
-
margin-top: 4rpx;
|
|
380
|
-
lines: 1;
|
|
381
|
-
text-overflow: ellipsis;
|
|
382
|
-
overflow: hidden;
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
.count {
|
|
386
|
-
font-size: 20rpx;
|
|
387
|
-
color: #999;
|
|
388
|
-
margin-top: 4rpx;
|
|
389
|
-
lines: 1;
|
|
390
|
-
text-overflow: ellipsis;
|
|
391
|
-
overflow: hidden;
|
|
392
|
-
}
|
|
393
|
-
</style>
|
|
394
227
|
```
|
|
395
228
|
|
|
396
229
|
### 场景二:实现电商直播的商品信息展示
|
|
@@ -315,7 +315,7 @@
|
|
|
315
315
|
|
|
316
316
|
### 运行效果
|
|
317
317
|
|
|
318
|
-
当您集成以上功能实现后,请分别使用两个观众与主播进行连麦操作,观众 A 同时打开摄像头和麦克风,观众 B 只打开麦克风,运行效果如下,您可以参考下一章节 完善 UI 细节 来定制您想要的 UI 逻辑。
|
|
318
|
+
当您集成以上功能实现后,请分别使用两个观众与主播进行连麦操作,观众 A 同时打开摄像头和麦克风,观众 B 只打开麦克风,运行效果如下,您可以参考下一章节 [完善 UI 细节](#.E5.AE.8C.E5.96.84-ui-.E7.BB.86.E8.8A.82) 来定制您想要的 UI 逻辑。
|
|
319
319
|
|
|
320
320
|
## 完善 UI 细节
|
|
321
321
|
|
|
@@ -278,7 +278,7 @@
|
|
|
278
278
|
|
|
279
279
|
### 运行效果
|
|
280
280
|
|
|
281
|
-
当您集成以上功能实现后,请分别使用两个观众与主播进行连麦操作,观众 A 同时打开摄像头和麦克风,观众 B 只打开麦克风,运行效果如下,您可以参考下一章节 完善 UI 细节 来定制您想要的 UI 逻辑。
|
|
281
|
+
当您集成以上功能实现后,请分别使用两个观众与主播进行连麦操作,观众 A 同时打开摄像头和麦克风,观众 B 只打开麦克风,运行效果如下,您可以参考下一章节 [完善 UI 细节](#.E5.AE.8C.E5.96.84-ui-.E7.BB.86.E8.8A.82) 来定制您想要的 UI 逻辑。
|
|
282
282
|
|
|
283
283
|
## 完善 UI 细节
|
|
284
284
|
|
|
@@ -599,7 +599,7 @@ class _YourAudiencePageState extends State<YourAudiencePage> {
|
|
|
599
599
|
|
|
600
600
|
### 运行效果
|
|
601
601
|
|
|
602
|
-
集成 **LiveCoreWidget** 后,您将得到一个纯净的视频渲染视图,它已具备完整的直播业务能力,但没有任何交互 UI。您可以参考下一章节 丰富直播场景 来完善直播场景。
|
|
602
|
+
集成 **LiveCoreWidget** 后,您将得到一个纯净的视频渲染视图,它已具备完整的直播业务能力,但没有任何交互 UI。您可以参考下一章节 [丰富直播场景](#.E4.B8.B0.E5.AF.8C.E7.9B.B4.E6.92.AD.E5.9C.BA.E6.99.AF) 来完善直播场景。
|
|
603
603
|
|
|
604
604
|
|**布局类型**|**动态宫格布局**|**浮动小窗布局**|**固定宫格布局**|**固定小窗布局**|
|
|
605
605
|
|---------|---------|---------|---------|---------|
|
|
@@ -236,7 +236,7 @@
|
|
|
236
236
|
|
|
237
237
|
### 运行效果
|
|
238
238
|
|
|
239
|
-
当您集成以上功能实现后,请分别使用两个观众与主播进行连麦操作,观众 A 同时打开摄像头和麦克风,观众 B 只打开麦克风,运行效果如下,您可以参考下一章节 完善 UI 细节 来定制您想要的 UI 逻辑。
|
|
239
|
+
当您集成以上功能实现后,请分别使用两个观众与主播进行连麦操作,观众 A 同时打开摄像头和麦克风,观众 B 只打开麦克风,运行效果如下,您可以参考下一章节 [完善 UI 细节](#736c00b3-02dc-494b-838d-226439fd3e15) 来定制您想要的 UI 逻辑。
|
|
240
240
|
|
|
241
241
|
## 完善 UI 细节
|
|
242
242
|
|
|
@@ -171,7 +171,7 @@ func application(_ application: UIApplication, didFinishLaunchingWithOptions lau
|
|
|
171
171
|
|`isMessageDisable`|`Bool`|选填|是否禁言(`true`:是,`false`:否)。|
|
|
172
172
|
|`isPublicVisible`|`Bool`|选填|是否公开可见(`true`:是,`false`:否)。|
|
|
173
173
|
|`seatMode`|`TakeSeatMode`|选填|上麦模式(`.free`:自由上麦,`.apply`:申请上麦)。|
|
|
174
|
-
|`seatTemplate`|SeatLayoutTemplate|必填|麦位布局模板。|
|
|
174
|
+
|`seatTemplate`|[SeatLayoutTemplate](#id)|必填|麦位布局模板。|
|
|
175
175
|
|`coverURL`|`String`|选填|直播间的封面图片地址。|
|
|
176
176
|
|`backgroundURL`|`String`|选填|直播间的背景图片地址。|
|
|
177
177
|
|`categoryList`|`[NSNumber]`|选填|直播间的分类标签列表。|
|
|
@@ -363,7 +363,7 @@ class YourAudienceViewController: UIViewController {
|
|
|
363
363
|
|
|
364
364
|
### 运行效果
|
|
365
365
|
|
|
366
|
-
集成 **LiveCoreView** 后,您将得到一个纯净的视频渲染视图,它已具备完整的直播业务能力,但没有任何交互 UI。您可以参考下一章节 丰富直播场景 来完善直播场景。
|
|
366
|
+
集成 **LiveCoreView** 后,您将得到一个纯净的视频渲染视图,它已具备完整的直播业务能力,但没有任何交互 UI。您可以参考下一章节 [丰富直播场景](#82dbc44c-8a8e-40e2-89b9-66070f4beb72) 来完善直播场景。
|
|
367
367
|
| | <strong>动态宫格布局</strong> | <strong>浮动小窗布局</strong> | <strong>固定宫格布局</strong> | <strong>固定小窗布局</strong> |
|
|
368
368
|
| --- | --- | --- | --- | --- |
|
|
369
369
|
| <strong>模板取值</strong> | .videoDynamicGrid9Seats | .videoDynamicFloat7Seats | .videoFixedGrid9Seats | .videoFixedFloat7Seats |
|
|
@@ -309,7 +309,7 @@
|
|
|
309
309
|
|
|
310
310
|
### 运行效果
|
|
311
311
|
|
|
312
|
-
当您集成以上功能实现后,请分别使用两个观众与主播进行连麦操作,观众 A 同时打开摄像头和麦克风,观众 B 只打开麦克风,运行效果如下,您可以参考下一章节 完善 UI 细节 来定制您想要的 UI 逻辑。
|
|
312
|
+
当您集成以上功能实现后,请分别使用两个观众与主播进行连麦操作,观众 A 同时打开摄像头和麦克风,观众 B 只打开麦克风,运行效果如下,您可以参考下一章节 [完善 UI 细节](#.E5.AE.8C.E5.96.84-ui-.E7.BB.86.E8.8A.82) 来定制您想要的 UI 逻辑。
|
|
313
313
|
|
|
314
314
|
## 完善 UI 细节
|
|
315
315
|
|
|
@@ -378,44 +378,6 @@
|
|
|
378
378
|
};
|
|
379
379
|
</script>
|
|
380
380
|
|
|
381
|
-
<style scoped>
|
|
382
|
-
.overlay-container {
|
|
383
|
-
pointer-events: none;
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
.participant-ui-container {
|
|
387
|
-
overflow: hidden;
|
|
388
|
-
}
|
|
389
|
-
.avatar-placeholder {
|
|
390
|
-
display: flex;
|
|
391
|
-
flex-direction: column;
|
|
392
|
-
justify-content: center;
|
|
393
|
-
align-items: center;
|
|
394
|
-
background-color: #2E323A;
|
|
395
|
-
}
|
|
396
|
-
.avatar-image {
|
|
397
|
-
width: 160rpx;
|
|
398
|
-
height: 160rpx;
|
|
399
|
-
border-radius: 80rpx;
|
|
400
|
-
}
|
|
401
|
-
.avatar-name {
|
|
402
|
-
margin-top: 20rpx;
|
|
403
|
-
font-size: 28rpx;
|
|
404
|
-
color: #FFFFFF;
|
|
405
|
-
}
|
|
406
|
-
.nickname-bar {
|
|
407
|
-
position: absolute;
|
|
408
|
-
left: 10rpx;
|
|
409
|
-
bottom: 10rpx;
|
|
410
|
-
background-color: rgba(0, 0, 0, 0.5);
|
|
411
|
-
padding: 4rpx 16rpx;
|
|
412
|
-
border-radius: 20rpx;
|
|
413
|
-
}
|
|
414
|
-
.nickname-text {
|
|
415
|
-
color: #FFFFFF;
|
|
416
|
-
font-size: 24rpx;
|
|
417
|
-
}
|
|
418
|
-
</style>
|
|
419
381
|
```
|
|
420
382
|
- **步骤 2**:在直播间页面中组合所有组件
|
|
421
383
|
|
|
@@ -466,33 +428,6 @@
|
|
|
466
428
|
});
|
|
467
429
|
</script>
|
|
468
430
|
|
|
469
|
-
<style scoped>
|
|
470
|
-
.page-container {
|
|
471
|
-
flex: 1;
|
|
472
|
-
background-color: #000;
|
|
473
|
-
}
|
|
474
|
-
|
|
475
|
-
.live-container {
|
|
476
|
-
flex: 1;
|
|
477
|
-
position: relative;
|
|
478
|
-
}
|
|
479
|
-
.video-layer,
|
|
480
|
-
.ui-layer {
|
|
481
|
-
position: absolute;
|
|
482
|
-
top: 0;
|
|
483
|
-
left: 0;
|
|
484
|
-
right: 0;
|
|
485
|
-
bottom: 0;
|
|
486
|
-
}
|
|
487
|
-
|
|
488
|
-
.video-layer {
|
|
489
|
-
z-index: 1;
|
|
490
|
-
}
|
|
491
|
-
|
|
492
|
-
.ui-layer {
|
|
493
|
-
z-index: 2;
|
|
494
|
-
}
|
|
495
|
-
</style>
|
|
496
431
|
```
|
|
497
432
|
|
|
498
433
|
## API 文档
|
|
@@ -118,7 +118,7 @@
|
|
|
118
118
|
|
|
119
119
|
### 运行效果
|
|
120
120
|
|
|
121
|
-
当您集成以上功能实现后,请分别使用主播 A 和主播 B 进行对应操作,运行效果如下,您可以参考下一章节 完善 UI 细节 来定制您想要的 UI 逻辑。
|
|
121
|
+
当您集成以上功能实现后,请分别使用主播 A 和主播 B 进行对应操作,运行效果如下,您可以参考下一章节 [完善 UI 细节](#6fe270da-d3b3-4785-bdc2-53b59d6d9cc0) 来定制您想要的 UI 逻辑。
|
|
122
122
|
|
|
123
123
|
## 完善 UI 细节
|
|
124
124
|
|
|
@@ -187,44 +187,6 @@
|
|
|
187
187
|
};
|
|
188
188
|
</script>
|
|
189
189
|
|
|
190
|
-
<style scoped>
|
|
191
|
-
.overlay-container {
|
|
192
|
-
pointer-events: none;
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
.participant-ui-container {
|
|
196
|
-
overflow: hidden;
|
|
197
|
-
}
|
|
198
|
-
.avatar-placeholder {
|
|
199
|
-
display: flex;
|
|
200
|
-
flex-direction: column;
|
|
201
|
-
justify-content: center;
|
|
202
|
-
align-items: center;
|
|
203
|
-
background-color: #2E323A;
|
|
204
|
-
}
|
|
205
|
-
.avatar-image {
|
|
206
|
-
width: 160rpx;
|
|
207
|
-
height: 160rpx;
|
|
208
|
-
border-radius: 80rpx;
|
|
209
|
-
}
|
|
210
|
-
.avatar-name {
|
|
211
|
-
margin-top: 20rpx;
|
|
212
|
-
font-size: 28rpx;
|
|
213
|
-
color: #FFFFFF;
|
|
214
|
-
}
|
|
215
|
-
.nickname-bar {
|
|
216
|
-
position: absolute;
|
|
217
|
-
left: 10rpx;
|
|
218
|
-
bottom: 10rpx;
|
|
219
|
-
background-color: rgba(0, 0, 0, 0.5);
|
|
220
|
-
padding: 4rpx 16rpx;
|
|
221
|
-
border-radius: 20rpx;
|
|
222
|
-
}
|
|
223
|
-
.nickname-text {
|
|
224
|
-
color: #FFFFFF;
|
|
225
|
-
font-size: 24rpx;
|
|
226
|
-
}
|
|
227
|
-
</style>
|
|
228
190
|
```
|
|
229
191
|
- **步骤 2**:在直播间页面中组合所有组件
|
|
230
192
|
|
|
@@ -275,33 +237,6 @@
|
|
|
275
237
|
});
|
|
276
238
|
</script>
|
|
277
239
|
|
|
278
|
-
<style scoped>
|
|
279
|
-
.page-container {
|
|
280
|
-
flex: 1;
|
|
281
|
-
background-color: #000;
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
.live-container {
|
|
285
|
-
flex: 1;
|
|
286
|
-
position: relative;
|
|
287
|
-
}
|
|
288
|
-
.video-layer,
|
|
289
|
-
.ui-layer {
|
|
290
|
-
position: absolute;
|
|
291
|
-
top: 0;
|
|
292
|
-
left: 0;
|
|
293
|
-
right: 0;
|
|
294
|
-
bottom: 0;
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
.video-layer {
|
|
298
|
-
z-index: 1;
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
.ui-layer {
|
|
302
|
-
z-index: 2;
|
|
303
|
-
}
|
|
304
|
-
</style>
|
|
305
240
|
```
|
|
306
241
|
|
|
307
242
|
## API 文档
|
|
@@ -243,7 +243,7 @@ onMounted(() => {
|
|
|
243
243
|
|
|
244
244
|
### 运行效果
|
|
245
245
|
|
|
246
|
-
集成 **LiveCoreView** 后,您将得到一个纯净的视频渲染视图,它已具备完整的直播业务能力,但没有任何交互 UI。您可以参考下一章节 丰富直播场景 来完善直播场景。
|
|
246
|
+
集成 **LiveCoreView** 后,您将得到一个纯净的视频渲染视图,它已具备完整的直播业务能力,但没有任何交互 UI。您可以参考下一章节 [丰富直播场景](#82dbc44c-8a8e-40e2-89b9-66070f4beb72) 来完善直播场景。
|
|
247
247
|
|
|
248
248
|
## 丰富直播场景
|
|
249
249
|
|
|
@@ -463,7 +463,7 @@ seatStore.unlockSeat(2, object : CompletionHandler {
|
|
|
463
463
|
主播和普通上麦用户可以调用 `moveUserToSeat` 移动麦位。
|
|
464
464
|
|
|
465
465
|
#### 实现方式:
|
|
466
|
-
1. **主播移动麦位**:主播可以调用此接口将任意用户移动到指定麦位。此时 `userID` 传入目标用户的 ID,`targetIndex` 是目标麦位索引,`policy`
|
|
466
|
+
1. **主播移动麦位**:主播可以调用此接口将任意用户移动到指定麦位。此时 `userID` 传入目标用户的 ID,`targetIndex` 是目标麦位索引,`policy` 参数来指定如果目标麦位有人时的移动策略,详见[接口参数](#227e92a5-7552-41ae-b57c-2dab5b7de234)说明。
|
|
467
467
|
|
|
468
468
|
2. **普通上麦用户移动自己麦位**:普通上麦用户也可以调用此接口来移动自己。此时 `userID` 必须传入用户自己的 ID,`targetIndex` 传入想去的新麦位索引,此时 `policy` 参数无效,如果目标麦位有人时会报错并停止移动。
|
|
469
469
|
|
|
@@ -302,7 +302,7 @@ battleStore.exitBattle(battleID, null)
|
|
|
302
302
|
|
|
303
303
|
### 场景二:主播发起带 PK 模式的连线
|
|
304
304
|
|
|
305
|
-
1. 主播在个人直播过程中,点击 PK 按钮,打开 UI
|
|
305
|
+
1. 主播在个人直播过程中,点击 PK 按钮,打开 UI 面板展示当前正在开播的主播列表(详见[《主播发起一场连线》的步骤 1](#1ce7ad55-e199-4098-a9bb-554c204fdd97))。
|
|
306
306
|
|
|
307
307
|
2. 主播选中其中一个主播,发起 PK 邀请。
|
|
308
308
|
|
|
@@ -410,7 +410,7 @@ override fun onCoHostRequestReceived(inviter: SeatUserInfo, extensionInfo: Strin
|
|
|
410
410
|
|
|
411
411
|
#### 步骤 4. 自动进入 PK 状态
|
|
412
412
|
|
|
413
|
-
|
|
413
|
+
此步骤同[《主播在连线后再发起 PK》的步骤 3](#b775b648-c9e2-480c-8678-f7e419e32bfa)相同,此处不再赘述。
|
|
414
414
|
|
|
415
415
|
## PK 分数更新与胜负判断
|
|
416
416
|
|
|
@@ -465,7 +465,7 @@ if (result2.isSuccess) {
|
|
|
465
465
|
主播和普通上麦用户可以调用 `moveUserToSeat` 移动麦位。
|
|
466
466
|
|
|
467
467
|
#### 实现方式:
|
|
468
|
-
1. **主播移动麦位**:主播可以调用此接口将任意用户移动到指定麦位。此时 `userID` 传入目标用户的 ID,`targetIndex` 是目标麦位索引,`policy` 参数来指定如果目标麦位有人时的移动策略,详细参见 接口参数 说明。
|
|
468
|
+
1. **主播移动麦位**:主播可以调用此接口将任意用户移动到指定麦位。此时 `userID` 传入目标用户的 ID,`targetIndex` 是目标麦位索引,`policy` 参数来指定如果目标麦位有人时的移动策略,详细参见 [接口参数](#moveusertoseat-.E6.8E.A5.E5.8F.A3.E5.8F.82.E6.95.B0.EF.BC.9A) 说明。
|
|
469
469
|
|
|
470
470
|
2. **普通上麦用户移动自己麦位**:普通上麦用户也可以调用此接口来移动自己。此时 `userID` 必须传入用户自己的 ID,`targetIndex` 传入想去的新麦位索引,此时 `policy` 参数无效,如果目标麦位有人时会报错并停止移动。
|
|
471
471
|
|
|
@@ -421,7 +421,7 @@ seatStore.unlockSeat(seatIndex: 2) { result in
|
|
|
421
421
|
主播和普通上麦用户可以调用 `moveUserToSeat(userID:targetIndex:policy:completion:)`移动麦位。
|
|
422
422
|
|
|
423
423
|
#### 实现方式:
|
|
424
|
-
1. **主播移动麦位**:主播可以调用此接口将任意用户移动到指定麦位。此时 `userID` 传入目标用户的 ID,`targetIndex` 是目标麦位索引,`policy` 参数来指定如果目标麦位有人时的移动策略,详细参见 接口参数 说明。
|
|
424
|
+
1. **主播移动麦位**:主播可以调用此接口将任意用户移动到指定麦位。此时 `userID` 传入目标用户的 ID,`targetIndex` 是目标麦位索引,`policy` 参数来指定如果目标麦位有人时的移动策略,详细参见 [接口参数](#227e92a5-7552-41ae-b57c-2dab5b7de234) 说明。
|
|
425
425
|
|
|
426
426
|
2. **普通上麦用户移动自己麦位**:普通上麦用户也可以调用此接口来移动自己。此时 `userID` 必须传入用户自己的 ID,`targetIndex` 传入想去的新麦位索引,此时 `policy` 参数无效,如果目标麦位有人时会报错并停止移动。
|
|
427
427
|
|
|
@@ -359,7 +359,7 @@ battleStore.exitBattle(battleID: battleID, completion: { [weak self] result in
|
|
|
359
359
|
|
|
360
360
|
### 场景二:主播发起带 PK 模式的连线
|
|
361
361
|
|
|
362
|
-
1. 主播在个人直播过程中,点击 PK 按钮,打开 UI
|
|
362
|
+
1. 主播在个人直播过程中,点击 PK 按钮,打开 UI 面板展示当前正在开播的主播列表(详见[《主播发起一场连线》的步骤 1](#1ce7ad55-e199-4098-a9bb-554c204fdd97))。
|
|
363
363
|
|
|
364
364
|
2. 主播选中其中一个主播,发起 PK 邀请。
|
|
365
365
|
|
|
@@ -506,7 +506,7 @@ coHostStore.coHostEventPublisher
|
|
|
506
506
|
|
|
507
507
|
#### 步骤 4. 自动进入 PK 状态
|
|
508
508
|
|
|
509
|
-
此步骤与 主播在连线后再发起 PK - 步骤 3 相同,此处不再赘述。
|
|
509
|
+
此步骤与 [主播在连线后再发起 PK - 步骤 3](#b775b648-c9e2-480c-8678-f7e419e32bfa) 相同,此处不再赘述。
|
|
510
510
|
|
|
511
511
|
## PK 分数更新与胜负判断
|
|
512
512
|
|
|
@@ -226,7 +226,7 @@ const handleJoinLive = () => {
|
|
|
226
226
|
|
|
227
227
|
#### **3. 构建麦位 UI 界面**
|
|
228
228
|
|
|
229
|
-
观众构建麦位 UI
|
|
229
|
+
观众构建麦位 UI 的流程与主播完全一致,请参考主播 [构建麦位 UI 界面](#**4.-.E6.9E.84.E5.BB.BA.E9.BA.A6.E4.BD.8D-ui-.E7.95.8C.E9.9D.A2**)。
|
|
230
230
|
|
|
231
231
|
#### **4. 退出语聊房**
|
|
232
232
|
|
|
@@ -255,7 +255,7 @@ const handleLeaveLive = () => {
|
|
|
255
255
|
|
|
256
256
|
### 运行效果
|
|
257
257
|
|
|
258
|
-
完成上述步骤后,即可完成一个最基础的语聊直播场景。您可以参考 丰富语聊场景 来完善语聊场景。
|
|
258
|
+
完成上述步骤后,即可完成一个最基础的语聊直播场景。您可以参考 [丰富语聊场景](#82dbc44c-8a8e-40e2-89b9-66070f4beb72) 来完善语聊场景。
|
|
259
259
|
|
|
260
260
|
## 功能进阶
|
|
261
261
|
|
|
@@ -77,7 +77,6 @@ onMounted(async () => {
|
|
|
77
77
|
});
|
|
78
78
|
</script>
|
|
79
79
|
|
|
80
|
-
<style scoped>.app{width:100vw;height:100vh;display:flex;justify-content:center;align-items:center;padding:20px;box-sizing:border-box}.chat-container{width:100%;max-width:500px;height:600px;border-radius:16px;display:flex;flex-direction:column;overflow:hidden}.chat-content{flex:1;overflow:hidden}.barrage-list{width:100%;height:100%}.chat-input{background-color:var(--bg-color-dialog);padding:16px}.barrage-input{width:100%}</style>
|
|
81
80
|
```
|
|
82
81
|
|
|
83
82
|
## 自定义组件
|
|
@@ -100,7 +99,7 @@ onMounted(async () => {
|
|
|
100
99
|
| | | | |
|
|
101
100
|
|
|
102
101
|
> **注意:**
|
|
103
|
-
> 使用 BarrageList 的默认消息组件时,表情消息会自动渲染为图片。但当您通过 `Message Props` 或 `message-item` Slot 接管自定义消息渲染时,message.textContent 中的表情编码(例如 [TUIEmoji_Flower])不会自动解析,需要您参考 如何处理自定义弹幕消息时的表情渲染 处理。
|
|
102
|
+
> 使用 BarrageList 的默认消息组件时,表情消息会自动渲染为图片。但当您通过 `Message Props` 或 `message-item` Slot 接管自定义消息渲染时,message.textContent 中的表情编码(例如 [TUIEmoji_Flower])不会自动解析,需要您参考 [如何处理自定义弹幕消息时的表情渲染](#3a3aa2ed-5af5-44f8-8e4f-d182393294b9) 处理。
|
|
104
103
|
>
|
|
105
104
|
|
|
106
105
|
#### **containerStyle + itemStyle** 调整样式
|
|
@@ -176,7 +175,6 @@ const getMessageText = (message: Barrage) => {
|
|
|
176
175
|
};
|
|
177
176
|
</script>
|
|
178
177
|
|
|
179
|
-
<style scoped>.custom-message{background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);color:white;padding:12px;border-radius:12px;margin:4px 0;box-shadow:0 2px 8px rgba(0,0,0,0.1);transition:transform 0.2s ease}.custom-message:hover{transform:translateY(-2px)}.message-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;font-size:12px;opacity:0.9}.user-name{font-weight:500;max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.message-time{font-size:11px;opacity:0.7}.message-content{font-size:14px;line-height:1.4;word-break:break-word}</style>
|
|
180
178
|
```
|
|
181
179
|
|
|
182
180
|
**步骤 2:在 BarrageList 中使用自定义组件**
|
|
@@ -268,7 +266,6 @@ function getGiftCount(message: { data?: string }): number {
|
|
|
268
266
|
}
|
|
269
267
|
</script>
|
|
270
268
|
|
|
271
|
-
<style scoped>.slot-text-item{font-size:12px;line-height:1.6;padding:6px 12px;border-radius:10px;background:rgba(255,255,255,0.05);word-break:break-word}.slot-owner-badge{display:inline-block;background:linear-gradient(135deg,#f59e0b,#ef4444);color:#fff;font-size:10px;font-weight:600;padding:1px 8px;border-radius:10px;margin-right:6px;vertical-align:middle;line-height:1.6}.slot-sender-name{color:rgba(167,139,250,0.85);font-weight:500;margin-right:4px}.slot-message-text{color:rgba(255,255,255,0.85)}.slot-gift-item{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:14px;background:linear-gradient(135deg,rgba(255,0,128,0.15),rgba(255,140,0,0.12) 50%,rgba(168,85,247,0.1));border:1px solid rgba(255,0,128,0.25);box-shadow:0 0 12px rgba(255,0,128,0.1),inset 0 0 12px rgba(255,140,0,0.05)}.slot-gift-img{width:40px;height:40px;flex-shrink:0;object-fit:contain;filter:drop-shadow(0 0 6px rgba(255,140,0,0.5))}.slot-gift-info{display:flex;flex-direction:column;gap:2px;min-width:0}.slot-gift-sender{font-size:12px;color:rgba(255,255,255,0.8);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.slot-gift-detail{font-size:12px;color:rgba(255,255,255,0.5)}.slot-gift-name{color:#ffaa00;font-weight:700;text-shadow:0 0 8px rgba(255,170,0,0.4)}.slot-gift-count{color:#ff4081;font-weight:800;font-size:13px;margin-left:2px;text-shadow:0 0 8px rgba(255,64,129,0.4)}</style>
|
|
272
269
|
```
|
|
273
270
|
|
|
274
271
|
#### Props 速查表
|
|
@@ -316,7 +313,6 @@ function getGiftCount(message: { data?: string }): number {
|
|
|
316
313
|
<BarrageInput containerClass="cyberpunk-input" />
|
|
317
314
|
</template>
|
|
318
315
|
|
|
319
|
-
<style>.cyberpunk-input{background:linear-gradient(135deg,rgba(15,10,40,0.9),rgba(30,15,60,0.85))!important;border:1.5px solid transparent!important;border-radius:16px!important;padding:8px 18px!important;box-shadow:0 0 15px rgba(139,92,246,0.2),0 0 30px rgba(255,0,128,0.08),inset 0 1px 0 rgba(255,255,255,0.05)!important;transition:box-shadow .3s ease!important;border-image:linear-gradient(135deg,#ff0080,#7c3aed,#06b6d4) 1!important;border-image-slice:1!important}.cyberpunk-input:focus-within{box-shadow:0 0 24px rgba(139,92,246,0.35),0 0 48px rgba(255,0,128,0.12),inset 0 1px 0 rgba(255,255,255,0.08)!important}</style>
|
|
320
316
|
```
|
|
321
317
|
|
|
322
318
|
#### 调整尺寸
|
|
@@ -506,7 +502,6 @@ const drawLottery = async () => {
|
|
|
506
502
|
subscribeEvent(BarrageEvent.onBarrageReceived, handleLotteryBarrage);
|
|
507
503
|
</script>
|
|
508
504
|
|
|
509
|
-
<style scoped>.lottery-panel{padding:8px 0;border-top:1px solid rgba(255,255,255,0.1);display:flex;justify-content:center;gap:10px;align-items:center}.lottery-panel button{padding:6px 20px;border:none;border-radius:20px;font-size:13px;font-weight:600;cursor:pointer;color:#fff;background:linear-gradient(135deg,#ff0080,#7c3aed);box-shadow:0 0 12px rgba(255,0,128,0.2);transition:all .2s ease}.lottery-panel button:hover:not(:disabled){box-shadow:0 0 20px rgba(255,0,128,0.35);transform:translateY(-1px)}.lottery-panel button:disabled{opacity:.5;cursor:not-allowed}.lottery-panel span{font-size:12px;color:rgba(255,255,255,0.7)}</style>
|
|
510
505
|
```
|
|
511
506
|
|
|
512
507
|
#### 2. 观众端:参与抽奖
|
|
@@ -593,7 +588,6 @@ const handleLotteryBarrage = (barrage: any) => {
|
|
|
593
588
|
subscribeEvent(BarrageEvent.onBarrageReceived, handleLotteryBarrage);
|
|
594
589
|
</script>
|
|
595
590
|
|
|
596
|
-
<style scoped>.lottery-bar{display:flex;align-items:center;gap:10px;padding:8px 16px;border-top:1px solid rgba(255,255,255,0.1)}.lottery-bar button{padding:6px 16px;border:none;border-radius:20px;font-size:13px;font-weight:600;cursor:pointer;color:#fff;background:linear-gradient(135deg,#ff0080,#7c3aed);box-shadow:0 0 12px rgba(255,0,128,0.2);transition:all .2s ease}.lottery-bar button:hover:not(:disabled){box-shadow:0 0 20px rgba(255,0,128,0.35);transform:translateY(-1px)}.lottery-bar button:disabled{opacity:.6;cursor:not-allowed;background:rgba(139,92,246,0.3);box-shadow:none}.lottery-bar span{font-size:12px;color:rgba(255,255,255,0.5)}.lottery-winner-banner{padding:10px 14px;text-align:center;font-size:13px;font-weight:500;color:#fff;background:linear-gradient(135deg,rgba(245,158,11,0.15),rgba(239,68,68,0.1));border:1px solid rgba(245,158,11,0.25);border-radius:12px;margin:4px 0;animation:banner-pop .4s ease}.lottery-winner-banner .winner-name{color:#fbbf24;font-weight:700}@keyframes banner-pop{0%{opacity:0;transform:scale(.9)}100%{opacity:1;transform:scale(1)}}</style>
|
|
597
591
|
```
|
|
598
592
|
|
|
599
593
|
通过 [BarrageList](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#module-BarrageListComponent) 的 `message-item` 插槽对不同类型的抽奖消息进行差异化渲染。
|
|
@@ -636,7 +630,6 @@ function getWinnerName(message: { data?: string }): string {
|
|
|
636
630
|
}
|
|
637
631
|
</script>
|
|
638
632
|
|
|
639
|
-
<style scoped>.lottery-sys-msg{font-size:12px;padding:8px 14px;border-radius:12px;background:linear-gradient(135deg,rgba(255,0,128,0.12),rgba(168,85,247,0.1));border:1px solid rgba(255,0,128,0.2);color:rgba(255,200,50,0.95);font-weight:500;text-align:center}.lottery-join-msg{font-size:12px;padding:6px 12px;border-radius:10px;background:rgba(139,92,246,0.08);color:rgba(167,139,250,0.85)}.lottery-result-msg{font-size:13px;padding:10px 14px;border-radius:12px;background:linear-gradient(135deg,rgba(245,158,11,0.15),rgba(239,68,68,0.1));border:1px solid rgba(245,158,11,0.25);color:#fff;font-weight:500;text-align:center}.winner-name{color:#fbbf24;font-weight:700}.normal-msg{font-size:12px;line-height:1.6;padding:4px 0;word-break:break-word}.msg-sender{color:rgba(167,139,250,0.85);font-weight:500;margin-right:4px}</style>
|
|
640
633
|
```
|
|
641
634
|
|
|
642
635
|
## 常见问题
|
|
@@ -844,14 +837,6 @@ import { parseEmoji } from './utils/emojiParser';
|
|
|
844
837
|
defineProps<{ message: Barrage }>();
|
|
845
838
|
</script>
|
|
846
839
|
|
|
847
|
-
<style scoped>
|
|
848
|
-
.emoji {
|
|
849
|
-
width: 20px;
|
|
850
|
-
height: 20px;
|
|
851
|
-
vertical-align: middle;
|
|
852
|
-
margin: 0 1px;
|
|
853
|
-
}
|
|
854
|
-
</style>
|
|
855
840
|
```
|
|
856
841
|
|
|
857
842
|
**在 Slot 插槽中使用**
|
|
@@ -878,14 +863,6 @@ import { BarrageList } from 'tuikit-atomicx-vue3';
|
|
|
878
863
|
import { parseEmoji } from './utils/emojiParser';
|
|
879
864
|
</script>
|
|
880
865
|
|
|
881
|
-
<style scoped>
|
|
882
|
-
.emoji {
|
|
883
|
-
width: 20px;
|
|
884
|
-
height: 20px;
|
|
885
|
-
vertical-align: middle;
|
|
886
|
-
margin: 0 1px;
|
|
887
|
-
}
|
|
888
|
-
</style>
|
|
889
866
|
```
|
|
890
867
|
|
|
891
868
|
**解析原理**
|
|
@@ -71,7 +71,6 @@ onMounted(async () => {
|
|
|
71
71
|
});
|
|
72
72
|
</script>
|
|
73
73
|
|
|
74
|
-
<style>.live-audience-container{display:flex;height:100%;width:300px;padding:20px}.live-audience-list{width:100%;height:100%}</style>
|
|
75
74
|
```
|
|
76
75
|
|
|
77
76
|
## 自定义组件
|
|
@@ -119,7 +118,6 @@ const vipUserIds = ['user_vip_001', 'user_vip_002'];
|
|
|
119
118
|
const isVip = (userId: string) => vipUserIds.includes(userId);
|
|
120
119
|
</script>
|
|
121
120
|
|
|
122
|
-
<style scoped>.custom-mark{display:flex;align-items:center;gap:4px}.vip-badge{background:linear-gradient(135deg,#ffd700,#ffb347);color:#fff;font-size:10px;font-weight:600;padding:2px 6px;border-radius:4px}.muted-badge{font-size:14px;opacity:.7}</style>
|
|
123
121
|
```
|
|
124
122
|
|
|
125
123
|
### 完全接管列表项渲染(audience-item 插槽)
|
|
@@ -153,7 +151,6 @@ const isVip = (userId: string) => vipUserIds.includes(userId);
|
|
|
153
151
|
import { LiveAudienceList } from 'tuikit-atomicx-vue3';
|
|
154
152
|
</script>
|
|
155
153
|
|
|
156
|
-
<style scoped>.custom-audience-item{display:flex;align-items:center;gap:10px;padding:8px 12px;border-radius:10px;background:rgba(255,255,255,0.05)}.medal{font-size:20px}.rank-number{font-size:14px;font-weight:600;color:rgba(255,255,255,0.5);min-width:24px;text-align:center}.avatar{width:36px;height:36px;border-radius:50%;object-fit:cover}.name{font-size:14px;color:rgba(255,255,255,0.85);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}</style>
|
|
157
154
|
```
|
|
158
155
|
|
|
159
156
|
### props 速查表
|