tuikit-atomicx-vue3 3.4.2 → 4.3.1
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/.eslintrc.cjs +1 -0
- package/dist/baseComp/Modal/Modal.js +431 -23
- package/dist/chat/index.d.ts +18 -18
- package/dist/components/AudioSetting/AudioMediaControl.js +39 -41
- package/dist/components/AudioSetting/AudioSettingTab.js +10 -10
- package/dist/components/AudioSetting/MicrophoneSelect.js +8 -8
- package/dist/components/AudioSetting/SpeakerSelect.js +9 -9
- package/dist/components/AudioSettingPanel/i18n/en-US/index.d.ts +1 -0
- package/dist/components/AudioSettingPanel/i18n/en-US/index.js +2 -1
- package/dist/components/AudioSettingPanel/i18n/zh-CN/index.d.ts +1 -0
- package/dist/components/AudioSettingPanel/i18n/zh-CN/index.js +2 -1
- package/dist/components/AudioSettingPanel/index.js +81 -73
- package/dist/components/BarrageInput/BarrageInputH5.js +9 -9
- package/dist/components/BarrageInput/EmojiPicker/EmojiPicker.js +3 -3
- package/dist/components/BarrageInput/MessageInputState.d.ts +28 -0
- package/dist/components/BarrageInput/MessageInputState.js +82 -0
- package/dist/components/BarrageInput/TextEditor/CharacterCountExtension.js +1 -1
- package/dist/components/BarrageInput/TextEditor/EditorCore.js +2 -2
- package/dist/components/BarrageInput/TextEditor/index.js +7 -7
- package/dist/components/BarrageInput/type.d.ts +17 -0
- package/dist/components/BarrageInput/type.js +4 -0
- package/dist/components/BarrageInput/utils.d.ts +30 -0
- package/dist/components/BarrageInput/utils.js +41 -0
- package/dist/components/BarrageList/BarrageList.js +80 -110
- package/dist/components/BarrageList/BarrageList.vue.d.ts +0 -29
- package/dist/components/BarrageList/BarrageListH5.js +95 -122
- package/dist/components/BarrageList/BarrageListH5.vue.d.ts +0 -29
- package/dist/components/BarrageList/BarrageListState.d.ts +58 -0
- package/dist/components/BarrageList/BarrageListState.js +106 -0
- package/dist/components/BarrageList/Message/MessageLayout/MessageBubble/MessageBubble.js +16 -24
- package/dist/components/BarrageList/Message/MessageLayout/MessageBubble/MessageBubble.vue.d.ts +5 -5
- package/dist/components/BarrageList/Message/MessageLayout/MessageLayout.js +48 -73
- package/dist/components/BarrageList/Message/MessageLayout/MessageLayout.vue.d.ts +5 -7
- package/dist/components/BarrageList/Message/TextMessage/TextMessage.js +70 -76
- package/dist/components/BarrageList/Message/TextMessage/TextMessage.vue.d.ts +6 -6
- package/dist/components/BarrageList/Message/TextMessage/emoji.d.ts +5 -0
- package/dist/components/BarrageList/Message/TextMessage/emoji.js +134 -0
- package/dist/components/BarrageList/index.d.ts +0 -36
- package/dist/components/CameraButton/index.js +18 -19
- package/dist/components/CoGuestPanel/CoGuestPanel.js +60 -60
- package/dist/components/CoHostPanel/BattlePanel.js +11 -11
- package/dist/components/CoHostPanel/CoHostPanel.js +10 -10
- package/dist/components/CoHostPanel/ConfigSettingPanel.js +49 -55
- package/dist/components/CoHostPanel/ConnectionPanel.js +132 -123
- package/dist/components/CoHostPanel/RecommendHostList.js +39 -36
- package/dist/components/CoHostPanel/constants.d.ts +3 -0
- package/dist/components/CoHostPanel/constants.js +6 -0
- package/dist/components/CoHostPanel/i18n/en-US/index.d.ts +1 -0
- package/dist/components/CoHostPanel/i18n/en-US/index.js +2 -1
- package/dist/components/CoHostPanel/i18n/zh-CN/index.d.ts +1 -0
- package/dist/components/CoHostPanel/i18n/zh-CN/index.js +3 -2
- package/dist/components/LiveAudienceList/LiveAudienceList.js +44 -45
- package/dist/components/LiveAudienceList/LiveAudienceListH5.js +7 -7
- package/dist/components/LiveAudienceList/UserActionMenu.js +57 -64
- package/dist/components/LiveList/LiveList.js +23 -23
- package/dist/components/LiveList/LiveListH5.js +38 -38
- package/dist/components/LiveScenePanel/CameraSettingDialog.js +10 -10
- package/dist/components/LiveScenePanel/MaterialItem.js +15 -15
- package/dist/components/LiveScenePanel/index.js +4 -4
- package/dist/components/LiveView/CoreViewDecorate/BattleDecorate.js +58 -58
- package/dist/components/LiveView/CoreViewDecorate/BattleUserDecorate.js +6 -6
- package/dist/components/LiveView/CoreViewDecorate/CoHostDecorate.js +5 -5
- package/dist/components/LiveView/DefaultStreamViewUI.js +44 -41
- package/dist/components/LiveView/PlayerControl/AudioControl.js +20 -20
- package/dist/components/LiveView/PlayerControl/MultiResolution.js +49 -48
- package/dist/components/LiveView/PlayerControl/MultiResolution.vue.d.ts +7 -1
- package/dist/components/LiveView/PlayerControl/PlayerControl.js +90 -86
- package/dist/components/LiveView/PlayerControl/PlayerControlState.js +127 -131
- package/dist/components/LiveView/PlayerControl/utils/domHelpers.d.ts +6 -0
- package/dist/components/LiveView/PlayerControl/utils/domHelpers.js +54 -22
- package/dist/components/LiveView/i18n/en-US/index.d.ts +2 -2
- package/dist/components/LiveView/i18n/en-US/index.js +2 -2
- package/dist/components/LiveView/i18n/zh-CN/index.d.ts +2 -2
- package/dist/components/LiveView/i18n/zh-CN/index.js +2 -2
- package/dist/components/LiveView/index.js +17 -17
- package/dist/components/MessageInput/TextEditor/EditorCore.js +2 -2
- package/dist/components/MessageList/MessageList.vue.d.ts +2 -2
- package/dist/components/MessageList/index.d.ts +18 -18
- package/dist/components/MicButton/index.js +11 -11
- package/dist/components/StreamMixer/LocalMixer/MixerControl.js +12 -12
- package/dist/components/StreamMixer/LocalMixer/index.js +66 -63
- package/dist/components/StreamView/Layout/CustomLayout.js +8 -8
- package/dist/components/StreamView/Layout/FloatLayout.js +124 -127
- package/dist/components/StreamView/Layout/GridLayout.js +5 -5
- package/dist/components/StreamView/index.js +25 -33
- package/dist/components/StreamView/manager/mediaManager.js +54 -60
- package/dist/components/VideoSetting/CameraSelect.js +8 -8
- package/dist/components/VideoSetting/VideoMediaControl.js +10 -10
- package/dist/components/VideoSetting/VideoPreview.js +9 -9
- package/dist/components/VideoSetting/VideoProfile.js +6 -6
- package/dist/components/VideoSetting/VideoSettingTab.js +40 -39
- package/dist/components/VideoSettingPanel/CameraSelect.js +8 -8
- package/dist/components/VideoSettingPanel/VideoPreview.js +1 -1
- package/dist/components/VideoSettingPanel/VideoProfile.js +18 -18
- package/dist/hooks/useRoomEngine.js +6 -6
- package/dist/{index-D2OVtqc8.js → index-BfIEeWMg.js} +191 -181
- package/dist/{index-Bm-QfV5o.js → index-DTi1fL-x.js} +460 -457
- package/dist/index.js +162 -144
- package/dist/report/MetricsKey.d.ts +16 -0
- package/dist/report/MetricsKey.js +4 -0
- package/dist/report/dataReport.d.ts +12 -0
- package/dist/report/dataReport.js +45 -0
- package/dist/report/index.d.ts +4 -0
- package/dist/report/index.js +6 -0
- package/dist/rtc/index.d.ts +5 -43
- package/dist/rtc/index.js +48 -48
- package/dist/states/BarrageState/BarrageState.d.ts +74 -0
- package/dist/states/BarrageState/BarrageState.js +80 -0
- package/dist/states/BarrageState/index.d.ts +1 -0
- package/dist/states/BarrageState/index.js +5 -0
- package/dist/states/{BattleState.d.ts → BattleState/BattleState.d.ts} +10 -11
- package/dist/states/BattleState/BattleState.js +203 -0
- package/dist/states/BattleState/index.d.ts +1 -0
- package/dist/states/BattleState/index.js +4 -0
- package/dist/states/CoGuestState.d.ts +24 -94
- package/dist/states/CoGuestState.js +297 -189
- package/dist/states/CoHostState/CoHostState.d.ts +2 -2
- package/dist/states/CoHostState/CoHostState.js +135 -131
- package/dist/states/{DeviceState.d.ts → DeviceState/DeviceState.d.ts} +25 -13
- package/dist/states/DeviceState/DeviceState.js +314 -0
- package/dist/states/DeviceState/index.d.ts +1 -0
- package/dist/states/DeviceState/index.js +4 -0
- package/dist/states/LiveAudienceState.d.ts +3 -1
- package/dist/states/LiveAudienceState.js +106 -63
- package/dist/states/{LiveState/index.d.ts → LiveListState/LiveListState.d.ts} +13 -8
- package/dist/states/LiveListState/LiveListState.js +285 -0
- package/dist/states/LiveListState/index.d.ts +1 -0
- package/dist/states/LiveListState/index.js +4 -0
- package/dist/states/LiveMonitorState/api/http.js +147 -129
- package/dist/states/LiveMonitorState/index.js +67 -62
- package/dist/states/LiveSeatState/index.d.ts +46 -11
- package/dist/states/LiveSeatState/index.js +34 -15
- package/dist/states/LiveSeatState/seatEventManager.d.ts +2 -0
- package/dist/states/LiveSeatState/seatEventManager.js +63 -42
- package/dist/states/LiveSeatState/seatManager.d.ts +34 -5
- package/dist/states/LiveSeatState/seatManager.js +131 -29
- package/dist/states/LiveSeatState/store.d.ts +5 -5
- package/dist/states/LiveSeatState/store.js +12 -10
- package/dist/states/LiveSeatState/usePlayStream/RTCStreamManager.js +1 -1
- package/dist/states/LiveSeatState/usePlayStream/RTCStreamPlayer.js +1 -1
- package/dist/states/LiveSeatState/usePlayStream/index.js +30 -28
- package/dist/states/LoginState.js +39 -34
- package/dist/states/SeatStore.js +82 -83
- package/dist/states/{VideoMixerState.d.ts → VideoMixerState/VideoMixerState.d.ts} +1 -1
- package/dist/states/VideoMixerState/VideoMixerState.js +269 -0
- package/dist/states/VideoMixerState/index.d.ts +1 -0
- package/dist/states/VideoMixerState/index.js +4 -0
- package/dist/styles/index.css +1 -1
- package/dist/types/audience.d.ts +21 -0
- package/dist/types/audience.js +4 -1
- package/dist/types/battle.d.ts +75 -3
- package/dist/types/battle.js +5 -1
- package/dist/types/coGuest.d.ts +72 -5
- package/dist/types/coGuest.js +4 -2
- package/dist/types/device.d.ts +38 -17
- package/dist/types/device.js +10 -8
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.js +96 -80
- package/dist/types/live.d.ts +36 -21
- package/dist/types/live.js +6 -4
- package/dist/types/seat.d.ts +23 -4
- package/dist/types/seat.js +7 -1
- package/dist/utils/eventCenter.d.ts +88 -0
- package/dist/utils/eventCenter.js +161 -0
- package/package.json +3 -3
- package/src/components/AudioSetting/AudioMediaControl.vue +1 -3
- package/src/components/AudioSetting/AudioSettingTab.vue +1 -2
- package/src/components/AudioSetting/MicrophoneSelect.vue +1 -2
- package/src/components/AudioSetting/SpeakerSelect.vue +1 -2
- package/src/components/AudioSettingPanel/i18n/en-US/index.ts +1 -0
- package/src/components/AudioSettingPanel/i18n/zh-CN/index.ts +1 -0
- package/src/components/AudioSettingPanel/index.vue +4 -2
- package/src/components/BarrageInput/BarrageInputH5.vue +1 -1
- package/src/components/BarrageInput/EmojiPicker/EmojiPicker.vue +1 -1
- package/src/components/BarrageInput/MessageInputState.ts +160 -0
- package/src/components/BarrageInput/TextEditor/TextEditor.vue +1 -1
- package/src/components/BarrageInput/type.ts +26 -0
- package/src/components/BarrageInput/utils.ts +45 -0
- package/src/components/BarrageList/BarrageList.vue +61 -117
- package/src/components/BarrageList/BarrageListH5.vue +75 -159
- package/src/components/BarrageList/BarrageListState.ts +223 -0
- package/src/components/BarrageList/Message/MessageLayout/MessageBubble/MessageBubble.vue +8 -55
- package/src/components/BarrageList/Message/MessageLayout/MessageLayout.vue +19 -44
- package/src/components/BarrageList/Message/TextMessage/TextMessage.vue +69 -96
- package/src/components/BarrageList/Message/TextMessage/emoji.ts +132 -0
- package/src/components/CameraButton/index.vue +0 -1
- package/src/components/CoGuestPanel/CoGuestPanel.vue +16 -91
- package/src/components/CoHostPanel/BattlePanel.vue +1 -4
- package/src/components/CoHostPanel/ConfigSettingPanel.vue +2 -8
- package/src/components/CoHostPanel/ConnectionPanel.vue +37 -33
- package/src/components/CoHostPanel/RecommendHostList.vue +12 -13
- package/src/components/CoHostPanel/constants.ts +3 -0
- package/src/components/CoHostPanel/i18n/en-US/index.ts +1 -0
- package/src/components/CoHostPanel/i18n/zh-CN/index.ts +2 -1
- package/src/components/LiveAudienceList/LiveAudienceList.vue +4 -5
- package/src/components/LiveAudienceList/LiveAudienceListH5.vue +2 -2
- package/src/components/LiveAudienceList/UserActionMenu.vue +7 -48
- package/src/components/LiveList/LiveList.vue +5 -5
- package/src/components/LiveList/LiveListH5.vue +6 -6
- package/src/components/LiveScenePanel/index.vue +2 -2
- package/src/components/LiveView/CoreViewDecorate/BattleDecorate.vue +10 -15
- package/src/components/LiveView/CoreViewDecorate/BattleUserDecorate.vue +2 -2
- package/src/components/LiveView/DefaultStreamViewUI.vue +5 -3
- package/src/components/LiveView/PlayerControl/AudioControl.vue +1 -1
- package/src/components/LiveView/PlayerControl/MultiResolution.vue +9 -3
- package/src/components/LiveView/PlayerControl/PlayerControl.vue +10 -2
- package/src/components/LiveView/PlayerControl/PlayerControlState.ts +233 -259
- package/src/components/LiveView/PlayerControl/utils/domHelpers.ts +64 -0
- package/src/components/LiveView/i18n/en-US/index.ts +2 -2
- package/src/components/LiveView/i18n/zh-CN/index.ts +2 -2
- package/src/components/LiveView/index.vue +2 -2
- package/src/components/MicButton/index.vue +3 -3
- package/src/components/StreamMixer/LocalMixer/index.vue +6 -8
- package/src/components/StreamView/Layout/CustomLayout.vue +2 -2
- package/src/components/StreamView/Layout/FloatLayout.vue +88 -83
- package/src/components/StreamView/index.vue +28 -14
- package/src/components/StreamView/manager/mediaManager.ts +38 -42
- package/src/components/VideoSetting/CameraSelect.vue +1 -2
- package/src/components/VideoSetting/VideoMediaControl.vue +1 -1
- package/src/components/VideoSetting/VideoPreview.vue +1 -2
- package/src/components/VideoSetting/VideoProfile.vue +1 -1
- package/src/components/VideoSetting/VideoSettingTab.vue +9 -5
- package/src/components/VideoSettingPanel/CameraSelect.vue +1 -2
- package/src/components/VideoSettingPanel/VideoProfile.vue +7 -7
- package/src/hooks/useRoomEngine.ts +1 -1
- package/src/report/MetricsKey.ts +16 -0
- package/src/report/dataReport.ts +55 -0
- package/src/report/index.ts +7 -0
- package/src/rtc/index.ts +7 -9
- package/src/types/audience.ts +27 -1
- package/src/types/battle.ts +87 -4
- package/src/types/coGuest.ts +87 -5
- package/src/types/device.ts +41 -16
- package/src/types/index.ts +2 -2
- package/src/types/live.ts +41 -22
- package/src/types/seat.ts +28 -4
- package/src/utils/eventCenter.ts +249 -0
- package/dist/DialogPortal-CvJcEAsn.js +0 -417
- package/dist/components/BarrageList/Message/FaceMessage/FaceMessage.js +0 -23
- package/dist/components/BarrageList/Message/FaceMessage/FaceMessage.vue.d.ts +0 -30
- package/dist/components/BarrageList/Message/FaceMessage/index.d.ts +0 -3
- package/dist/components/BarrageList/Message/FaceMessage/index.js +0 -4
- package/dist/components/BarrageList/Message/GroupTipMessage/GroupTipMessage.js +0 -4
- package/dist/components/BarrageList/Message/GroupTipMessage/GroupTipMessage.vue.d.ts +0 -16
- package/dist/components/BarrageList/Message/GroupTipMessage/index.d.ts +0 -3
- package/dist/components/BarrageList/Message/GroupTipMessage/index.js +0 -25
- package/dist/components/BarrageList/Message/ImageMessage/ImageMessage.js +0 -71
- package/dist/components/BarrageList/Message/ImageMessage/ImageMessage.vue.d.ts +0 -34
- package/dist/components/BarrageList/Message/ImageMessage/index.d.ts +0 -3
- package/dist/components/BarrageList/Message/ImageMessage/index.js +0 -4
- package/dist/components/BarrageList/Message/MergerMessage/MergerMessage.js +0 -9
- package/dist/components/BarrageList/Message/MergerMessage/MergerMessage.vue.d.ts +0 -2
- package/dist/components/BarrageList/Message/MergerMessage/index.d.ts +0 -3
- package/dist/components/BarrageList/Message/MergerMessage/index.js +0 -4
- package/dist/components/BarrageList/Message/MessageLayout/MessageMeta/MessageMeta.js +0 -40
- package/dist/components/BarrageList/Message/MessageLayout/MessageMeta/MessageMeta.vue.d.ts +0 -54
- package/dist/components/BarrageList/Message/MessageLayout/MessageMeta/MessageStatusIcon.js +0 -26
- package/dist/components/BarrageList/Message/MessageLayout/MessageMeta/MessageStatusIcon.vue.d.ts +0 -15
- package/dist/components/BarrageList/Message/MessageLayout/MessageMeta/index.d.ts +0 -3
- package/dist/components/BarrageList/Message/MessageLayout/MessageMeta/index.js +0 -4
- package/dist/components/BarrageList/Message/RecalledMessage/RecalledMessage.js +0 -41
- package/dist/components/BarrageList/Message/RecalledMessage/RecalledMessage.vue.d.ts +0 -35
- package/dist/components/BarrageList/Message/RecalledMessage/index.d.ts +0 -3
- package/dist/components/BarrageList/Message/RecalledMessage/index.js +0 -4
- package/dist/components/BarrageList/MessageForward/ForwardListItem.js +0 -45
- package/dist/components/BarrageList/MessageForward/ForwardListItem.vue.d.ts +0 -17
- package/dist/components/BarrageList/MessageForward/MessageForward.js +0 -203
- package/dist/components/BarrageList/MessageForward/MessageForward.vue.d.ts +0 -2
- package/dist/components/BarrageList/MessageForward/index.d.ts +0 -3
- package/dist/components/BarrageList/MessageForward/index.js +0 -4
- package/dist/components/StreamView/Layout/MixLayout.js +0 -89
- package/dist/components/StreamView/Layout/MixLayout.vue.d.ts +0 -31
- package/dist/states/BarrageListState/BarrageListState.d.ts +0 -26
- package/dist/states/BarrageListState/BarrageListState.js +0 -122
- package/dist/states/BarrageListState/index.d.ts +0 -1
- package/dist/states/BarrageListState/index.js +0 -4
- package/dist/states/BattleState.js +0 -117
- package/dist/states/DeviceState.js +0 -296
- package/dist/states/LiveState/index.js +0 -254
- package/dist/states/VideoMixerState.js +0 -260
- package/src/components/BarrageList/Message/FaceMessage/FaceMessage.vue +0 -43
- package/src/components/BarrageList/Message/FaceMessage/index.ts +0 -3
- package/src/components/BarrageList/Message/GroupTipMessage/GroupTipMessage.vue +0 -55
- package/src/components/BarrageList/Message/GroupTipMessage/index.ts +0 -3
- package/src/components/BarrageList/Message/ImageMessage/ImageMessage.vue +0 -181
- package/src/components/BarrageList/Message/ImageMessage/index.ts +0 -3
- package/src/components/BarrageList/Message/MergerMessage/MergerMessage.vue +0 -6
- package/src/components/BarrageList/Message/MergerMessage/index.ts +0 -3
- package/src/components/BarrageList/Message/MessageLayout/MessageMeta/MessageMeta.vue +0 -70
- package/src/components/BarrageList/Message/MessageLayout/MessageMeta/MessageStatusIcon.vue +0 -40
- package/src/components/BarrageList/Message/MessageLayout/MessageMeta/index.ts +0 -3
- package/src/components/BarrageList/Message/RecalledMessage/RecalledMessage.vue +0 -82
- package/src/components/BarrageList/Message/RecalledMessage/index.ts +0 -3
- package/src/components/BarrageList/MessageForward/ForwardListItem.vue +0 -67
- package/src/components/BarrageList/MessageForward/MessageForward.vue +0 -388
- package/src/components/BarrageList/MessageForward/index.ts +0 -3
- package/src/components/StreamView/Layout/MixLayout.vue +0 -144
|
@@ -1,67 +1,49 @@
|
|
|
1
1
|
<script lang="ts" setup>
|
|
2
2
|
import { toRefs, computed, withDefaults, defineProps } from 'vue';
|
|
3
|
-
import TencentCloudChat from '@tencentcloud/chat-uikit-engine';
|
|
4
3
|
import cs from 'classnames';
|
|
4
|
+
import { BarrageType } from '../../../../states/BarrageState';
|
|
5
|
+
import { useLoginState } from '../../../../states/LoginState';
|
|
5
6
|
import { CustomMessage } from '../CustomMessage';
|
|
6
|
-
import { FaceMessage } from '../FaceMessage';
|
|
7
|
-
import { GroupTipMessage } from '../GroupTipMessage';
|
|
8
|
-
import { ImageMessage } from '../ImageMessage';
|
|
9
|
-
import { MergerMessage } from '../MergerMessage';
|
|
10
|
-
import { RecalledMessage } from '../RecalledMessage';
|
|
11
7
|
import { TextMessage } from '../TextMessage';
|
|
12
8
|
import { MessageBubble } from './MessageBubble';
|
|
13
|
-
import {
|
|
14
|
-
import type { IMessageModel } from '@tencentcloud/chat-uikit-engine';
|
|
9
|
+
import type { Barrage } from '../../../../states/BarrageState';
|
|
15
10
|
|
|
16
11
|
interface IMessageLayoutProps {
|
|
17
|
-
message:
|
|
12
|
+
message: Barrage;
|
|
18
13
|
isLastInChunk?: boolean;
|
|
19
|
-
// messageActionList?: IMessageAction[];
|
|
20
14
|
className?: string;
|
|
21
15
|
style?: Record<string, any>;
|
|
22
16
|
}
|
|
23
17
|
|
|
24
18
|
const props = withDefaults(defineProps<IMessageLayoutProps>(), {
|
|
25
|
-
message: () => ({}) as
|
|
19
|
+
message: () => ({}) as Barrage,
|
|
26
20
|
isLastInChunk: true,
|
|
27
|
-
messageActionList: () => [],
|
|
28
21
|
className: '',
|
|
29
22
|
style: () => ({}),
|
|
30
23
|
});
|
|
31
24
|
|
|
25
|
+
const { loginUserInfo } = useLoginState();
|
|
32
26
|
const {
|
|
33
27
|
message,
|
|
34
28
|
isLastInChunk,
|
|
35
|
-
// messageActionList,
|
|
36
29
|
className,
|
|
37
30
|
style,
|
|
38
31
|
} = toRefs(props);
|
|
39
32
|
|
|
40
33
|
const MessageComponentsFactory = {
|
|
41
|
-
[
|
|
42
|
-
[
|
|
43
|
-
[TencentCloudChat.TYPES.MSG_FACE]: FaceMessage,
|
|
44
|
-
[TencentCloudChat.TYPES.MSG_MERGER]: MergerMessage,
|
|
45
|
-
[TencentCloudChat.TYPES.MSG_CUSTOM]: CustomMessage,
|
|
46
|
-
[TencentCloudChat.TYPES.MSG_GRP_TIP]: GroupTipMessage,
|
|
34
|
+
[BarrageType.text]: TextMessage,
|
|
35
|
+
[BarrageType.custom]: CustomMessage,
|
|
47
36
|
};
|
|
48
37
|
|
|
49
|
-
const MessageComponent = computed(() => MessageComponentsFactory[message.value.
|
|
38
|
+
const MessageComponent = computed(() => MessageComponentsFactory[message.value.messageType]);
|
|
50
39
|
|
|
51
|
-
const isMessageOwner = computed(() => message.value.
|
|
40
|
+
const isMessageOwner = computed(() => message.value.sender.userId === loginUserInfo.value?.userId);
|
|
52
41
|
</script>
|
|
53
42
|
|
|
54
43
|
<template>
|
|
55
|
-
<RecalledMessage v-if="message.isRevoked" class="message-recalled" :message="message" />
|
|
56
|
-
<GroupTipMessage
|
|
57
|
-
v-else-if="
|
|
58
|
-
message.type === TencentCloudChat.TYPES.MSG_GRP_TIP || message.type === TencentCloudChat.TYPES.MSG_CUSTOM
|
|
59
|
-
"
|
|
60
|
-
:message="message"
|
|
61
|
-
/>
|
|
62
44
|
<div
|
|
63
|
-
v-
|
|
64
|
-
:data-message-id="message.
|
|
45
|
+
v-if="MessageComponent"
|
|
46
|
+
:data-message-id="message.sequence"
|
|
65
47
|
:class="
|
|
66
48
|
cs(
|
|
67
49
|
'message-layout',
|
|
@@ -83,10 +65,10 @@ const isMessageOwner = computed(() => message.value.flow === 'out');
|
|
|
83
65
|
"
|
|
84
66
|
>
|
|
85
67
|
<div
|
|
86
|
-
v-if="isLastInChunk && message.
|
|
68
|
+
v-if="isLastInChunk && message.messageType !== BarrageType.text"
|
|
87
69
|
:class="cs('message-layout__nick')"
|
|
88
70
|
>
|
|
89
|
-
{{ message.
|
|
71
|
+
{{ message.sender.nameCard || message.sender.userName || message.sender.userId + ': ' }}
|
|
90
72
|
</div>
|
|
91
73
|
<MessageBubble
|
|
92
74
|
:class="
|
|
@@ -97,20 +79,13 @@ const isMessageOwner = computed(() => message.value.flow === 'out');
|
|
|
97
79
|
:message="message"
|
|
98
80
|
:is-last-in-chunk="isLastInChunk"
|
|
99
81
|
>
|
|
100
|
-
<component
|
|
82
|
+
<component
|
|
83
|
+
:is="MessageComponent"
|
|
84
|
+
:message="message"
|
|
85
|
+
:is-last-in-chunk="isLastInChunk"
|
|
86
|
+
/>
|
|
101
87
|
</MessageBubble>
|
|
102
88
|
</div>
|
|
103
|
-
<MessageMeta
|
|
104
|
-
v-if="isLastInChunk"
|
|
105
|
-
:class="
|
|
106
|
-
cs('message-layout__meta', {
|
|
107
|
-
'message-layout__meta--self': isMessageOwner,
|
|
108
|
-
})
|
|
109
|
-
"
|
|
110
|
-
:status="message.status"
|
|
111
|
-
:is-show-read-status="true"
|
|
112
|
-
:timestamp="message.time"
|
|
113
|
-
/>
|
|
114
89
|
</div>
|
|
115
90
|
</div>
|
|
116
91
|
</template>
|
|
@@ -1,41 +1,20 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="text-message">
|
|
3
|
-
<div
|
|
4
|
-
v-if="referencedInfo.content"
|
|
5
|
-
:class="
|
|
6
|
-
cs('text-message__reference', {
|
|
7
|
-
'text-danger': isOriginMessageHasRecalled,
|
|
8
|
-
})
|
|
9
|
-
"
|
|
10
|
-
@click="handleReferenceClick"
|
|
11
|
-
>
|
|
12
|
-
<template v-if="isOriginMessageHasRecalled">
|
|
13
|
-
{{ t('TUIChat.origin message has been recalled') }}
|
|
14
|
-
</template>
|
|
15
|
-
<template v-else>
|
|
16
|
-
<div class="text-message__reference__header">
|
|
17
|
-
{{ referencedInfo.sender }}
|
|
18
|
-
</div>
|
|
19
|
-
<div class="text-message__reference__content">
|
|
20
|
-
{{ referencedInfo.content }}
|
|
21
|
-
</div>
|
|
22
|
-
</template>
|
|
23
|
-
</div>
|
|
24
3
|
<div class="text-message__content">
|
|
25
4
|
<component
|
|
26
5
|
:is="context.slots['user-badge']"
|
|
27
6
|
:message="message"
|
|
28
7
|
/>
|
|
29
|
-
<span
|
|
8
|
+
<span v-if="message.sender.userId === currentLive?.liveOwner.userId && !context.slots['user-badge']" class="user-badge">{{ t('Anchor') }}</span>
|
|
30
9
|
<span
|
|
31
10
|
class="text-message__content__nick"
|
|
32
11
|
@click="handleNickClick"
|
|
33
12
|
>
|
|
34
13
|
{{
|
|
35
|
-
`${message.
|
|
14
|
+
`${message.sender.nameCard || message.sender.userName || message.sender.userId}: `
|
|
36
15
|
}}</span>
|
|
37
16
|
<template
|
|
38
|
-
v-for="(item, index) in messageContent
|
|
17
|
+
v-for="(item, index) in messageContent"
|
|
39
18
|
:key="index"
|
|
40
19
|
>
|
|
41
20
|
<span
|
|
@@ -58,98 +37,92 @@
|
|
|
58
37
|
<script lang="ts" setup>
|
|
59
38
|
import type { VueElement } from 'vue';
|
|
60
39
|
import { computed, withDefaults, defineProps } from 'vue';
|
|
61
|
-
import {
|
|
62
|
-
import {
|
|
63
|
-
import cs from 'classnames';
|
|
64
|
-
import { useScroll } from '../../../../hooks/useScroll';
|
|
65
|
-
import { useBarrageListState } from '../../../../states/BarrageListState';
|
|
66
|
-
import { useLiveState } from '../../../../states/LiveState';
|
|
67
|
-
import { safeJSONParse } from '../../../../utils/json';
|
|
40
|
+
import { useUIKit } from '@tencentcloud/uikit-base-component-vue3';
|
|
41
|
+
import { useLiveListState } from '../../../../states/LiveListState';
|
|
68
42
|
import { useMessageListContext } from '../../MessageListContext';
|
|
69
|
-
import
|
|
70
|
-
import type {
|
|
43
|
+
import { BASEURL, BASIC_EMOJI_URL_MAPPING } from './emoji';
|
|
44
|
+
import type { Barrage } from '../../../../states/BarrageState';
|
|
71
45
|
|
|
72
|
-
const { currentLive } =
|
|
46
|
+
const { currentLive } = useLiveListState();
|
|
73
47
|
const context: {
|
|
74
48
|
slots: Record<string, () => VueElement>;
|
|
75
|
-
nickClick: (
|
|
49
|
+
nickClick: (data: { message: Barrage; event: MouseEvent }) => void;
|
|
76
50
|
} = useMessageListContext('');
|
|
77
51
|
|
|
78
52
|
const props = withDefaults(
|
|
79
53
|
defineProps<{
|
|
80
|
-
message:
|
|
54
|
+
message: Barrage;
|
|
81
55
|
isLastInChunk: boolean;
|
|
82
56
|
}>(),
|
|
83
57
|
{
|
|
84
|
-
message: () => ({}) as
|
|
58
|
+
message: () => ({}) as Barrage,
|
|
85
59
|
isLastInChunk: false,
|
|
86
60
|
},
|
|
87
61
|
);
|
|
88
62
|
|
|
89
63
|
const { t } = useUIKit();
|
|
90
|
-
const { scrollToMessage } = useScroll();
|
|
91
|
-
const { highlightMessageIDList, recalledMessageIDSet } = useBarrageListState();
|
|
92
64
|
|
|
93
|
-
const messageContent = computed(
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
65
|
+
const messageContent = computed(() => {
|
|
66
|
+
const renderDom = [];
|
|
67
|
+
let temp = props.message.textContent || '';
|
|
68
|
+
let left = -1;
|
|
69
|
+
let right = -1;
|
|
70
|
+
while (temp !== '') {
|
|
71
|
+
left = temp.indexOf('[');
|
|
72
|
+
right = temp.indexOf(']');
|
|
73
|
+
switch (left) {
|
|
74
|
+
case 0:
|
|
75
|
+
if (right === -1) {
|
|
76
|
+
renderDom.push({
|
|
77
|
+
name: 'text',
|
|
78
|
+
text: temp,
|
|
79
|
+
});
|
|
80
|
+
temp = '';
|
|
81
|
+
} else {
|
|
82
|
+
const emojiKey = temp.slice(0, right + 1);
|
|
83
|
+
// 自定义 emoji 表情 emojiKey 必须带 @custom 标识,比如:'[@custom_Smile]'
|
|
84
|
+
if (emojiKey.indexOf('@custom') > -1) {
|
|
85
|
+
renderDom.push({
|
|
86
|
+
name: 'img',
|
|
87
|
+
src: '',
|
|
88
|
+
type: 'custom',
|
|
89
|
+
emojiKey,
|
|
90
|
+
});
|
|
91
|
+
temp = temp.substring(right + 1);
|
|
92
|
+
} else if (BASIC_EMOJI_URL_MAPPING[emojiKey]) {
|
|
93
|
+
renderDom.push({
|
|
94
|
+
name: 'img',
|
|
95
|
+
src: BASEURL.emoji + BASIC_EMOJI_URL_MAPPING[emojiKey],
|
|
96
|
+
emojiKey,
|
|
97
|
+
});
|
|
98
|
+
temp = temp.substring(right + 1);
|
|
99
|
+
} else {
|
|
100
|
+
renderDom.push({
|
|
101
|
+
name: 'text',
|
|
102
|
+
text: '[',
|
|
103
|
+
});
|
|
104
|
+
temp = temp.slice(1);
|
|
105
|
+
}
|
|
106
106
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
const isOriginMessageHasRecalled = computed(() => recalledMessageIDSet.value.has(referencedInfo.value.messageID));
|
|
124
|
-
|
|
125
|
-
const handleReferenceClick = () => {
|
|
126
|
-
if (referencedInfo.value.messageID) {
|
|
127
|
-
const { messageID } = referencedInfo.value;
|
|
128
|
-
|
|
129
|
-
const messageModel = TUIStore.getMessageModel(messageID);
|
|
130
|
-
if (isOriginMessageHasRecalled.value || !messageModel || messageModel.isDeleted || messageModel.isRevoked) {
|
|
131
|
-
TUIToast.error({
|
|
132
|
-
message: t('TUIChat.Message has been deleted or recalled'),
|
|
133
|
-
});
|
|
134
|
-
return;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
const isExist = highlightMessageIDList.value.includes(messageID);
|
|
138
|
-
|
|
139
|
-
if (!isExist) {
|
|
140
|
-
highlightMessageIDList.value.push(messageID);
|
|
141
|
-
setTimeout(() => {
|
|
142
|
-
highlightMessageIDList.value = highlightMessageIDList.value.filter(id => id !== messageID);
|
|
143
|
-
}, 3000);
|
|
107
|
+
break;
|
|
108
|
+
case -1:
|
|
109
|
+
renderDom.push({
|
|
110
|
+
name: 'text',
|
|
111
|
+
text: temp,
|
|
112
|
+
});
|
|
113
|
+
temp = '';
|
|
114
|
+
break;
|
|
115
|
+
default:
|
|
116
|
+
renderDom.push({
|
|
117
|
+
name: 'text',
|
|
118
|
+
text: temp.slice(0, left),
|
|
119
|
+
});
|
|
120
|
+
temp = temp.substring(left);
|
|
121
|
+
break;
|
|
144
122
|
}
|
|
145
|
-
|
|
146
|
-
scrollToMessage(messageID, {
|
|
147
|
-
block: 'center',
|
|
148
|
-
skipIfVisible: true,
|
|
149
|
-
behavior: 'instant',
|
|
150
|
-
}).catch(() => {});
|
|
151
123
|
}
|
|
152
|
-
|
|
124
|
+
return renderDom;
|
|
125
|
+
});
|
|
153
126
|
|
|
154
127
|
const handleNickClick = (event: MouseEvent) => {
|
|
155
128
|
context.nickClick({
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
export const BASEURL = {
|
|
2
|
+
emoji: 'https://web.sdk.qcloud.com/im/assets/emoji-plugin/',
|
|
3
|
+
};
|
|
4
|
+
export const BASIC_EMOJI_URL_MAPPING: Record<string, string> = {
|
|
5
|
+
'[TUIEmoji_Expect]': 'emoji_0@2x.png',
|
|
6
|
+
'[TUIEmoji_Blink]': 'emoji_1@2x.png',
|
|
7
|
+
'[TUIEmoji_Guffaw]': 'emoji_2@2x.png',
|
|
8
|
+
'[TUIEmoji_KindSmile]': 'emoji_3@2x.png',
|
|
9
|
+
'[TUIEmoji_Haha]': 'emoji_4@2x.png',
|
|
10
|
+
'[TUIEmoji_Cheerful]': 'emoji_5@2x.png',
|
|
11
|
+
'[TUIEmoji_Smile]': 'emoji_6@2x.png',
|
|
12
|
+
'[TUIEmoji_Sorrow]': 'emoji_7@2x.png',
|
|
13
|
+
'[TUIEmoji_Speechless]': 'emoji_8@2x.png',
|
|
14
|
+
'[TUIEmoji_Amazed]': 'emoji_9@2x.png',
|
|
15
|
+
'[TUIEmoji_Complacent]': 'emoji_10@2x.png',
|
|
16
|
+
'[TUIEmoji_Lustful]': 'emoji_11@2x.png',
|
|
17
|
+
'[TUIEmoji_Stareyes]': 'emoji_12@2x.png',
|
|
18
|
+
'[TUIEmoji_Giggle]': 'emoji_13@2x.png',
|
|
19
|
+
'[TUIEmoji_Daemon]': 'emoji_14@2x.png',
|
|
20
|
+
'[TUIEmoji_Rage]': 'emoji_15@2x.png',
|
|
21
|
+
'[TUIEmoji_Yawn]': 'emoji_16@2x.png',
|
|
22
|
+
'[TUIEmoji_TearsLaugh]': 'emoji_17@2x.png',
|
|
23
|
+
'[TUIEmoji_Silly]': 'emoji_18@2x.png',
|
|
24
|
+
'[TUIEmoji_Wail]': 'emoji_19@2x.png',
|
|
25
|
+
'[TUIEmoji_Kiss]': 'emoji_20@2x.png',
|
|
26
|
+
'[TUIEmoji_Trapped]': 'emoji_21@2x.png',
|
|
27
|
+
'[TUIEmoji_Fear]': 'emoji_22@2x.png',
|
|
28
|
+
'[TUIEmoji_BareTeeth]': 'emoji_23@2x.png',
|
|
29
|
+
'[TUIEmoji_FlareUp]': 'emoji_24@2x.png',
|
|
30
|
+
'[TUIEmoji_Tact]': 'emoji_25@2x.png',
|
|
31
|
+
'[TUIEmoji_Shit]': 'emoji_26@2x.png',
|
|
32
|
+
'[TUIEmoji_ShutUp]': 'emoji_27@2x.png',
|
|
33
|
+
'[TUIEmoji_Sigh]': 'emoji_28@2x.png',
|
|
34
|
+
'[TUIEmoji_Hehe]': 'emoji_29@2x.png',
|
|
35
|
+
'[TUIEmoji_Silent]': 'emoji_30@2x.png',
|
|
36
|
+
'[TUIEmoji_Skull]': 'emoji_31@2x.png',
|
|
37
|
+
'[TUIEmoji_Mask]': 'emoji_32@2x.png',
|
|
38
|
+
'[TUIEmoji_Beer]': 'emoji_33@2x.png',
|
|
39
|
+
'[TUIEmoji_Cake]': 'emoji_34@2x.png',
|
|
40
|
+
'[TUIEmoji_RedPacket]': 'emoji_35@2x.png',
|
|
41
|
+
'[TUIEmoji_Bombs]': 'emoji_36@2x.png',
|
|
42
|
+
'[TUIEmoji_Ai]': 'emoji_37@2x.png',
|
|
43
|
+
'[TUIEmoji_Celebrate]': 'emoji_38@2x.png',
|
|
44
|
+
'[TUIEmoji_Bless]': 'emoji_39@2x.png',
|
|
45
|
+
'[TUIEmoji_Flower]': 'emoji_40@2x.png',
|
|
46
|
+
'[TUIEmoji_Watermelon]': 'emoji_41@2x.png',
|
|
47
|
+
'[TUIEmoji_Cow]': 'emoji_42@2x.png',
|
|
48
|
+
'[TUIEmoji_Fool]': 'emoji_43@2x.png',
|
|
49
|
+
'[TUIEmoji_Surprised]': 'emoji_44@2x.png',
|
|
50
|
+
'[TUIEmoji_Askance]': 'emoji_45@2x.png',
|
|
51
|
+
'[TUIEmoji_Monster]': 'emoji_46@2x.png',
|
|
52
|
+
'[TUIEmoji_Pig]': 'emoji_47@2x.png',
|
|
53
|
+
'[TUIEmoji_Coffee]': 'emoji_48@2x.png',
|
|
54
|
+
'[TUIEmoji_Ok]': 'emoji_49@2x.png',
|
|
55
|
+
'[TUIEmoji_Heart]': 'emoji_50@2x.png',
|
|
56
|
+
'[TUIEmoji_Sun]': 'emoji_51@2x.png',
|
|
57
|
+
'[TUIEmoji_Moon]': 'emoji_52@2x.png',
|
|
58
|
+
'[TUIEmoji_Star]': 'emoji_53@2x.png',
|
|
59
|
+
'[TUIEmoji_Rich]': 'emoji_54@2x.png',
|
|
60
|
+
'[TUIEmoji_Fortune]': 'emoji_55@2x.png',
|
|
61
|
+
'[TUIEmoji_857]': 'emoji_56@2x.png',
|
|
62
|
+
'[TUIEmoji_666]': 'emoji_57@2x.png',
|
|
63
|
+
'[TUIEmoji_Prohibit]': 'emoji_58@2x.png',
|
|
64
|
+
'[TUIEmoji_Convinced]': 'emoji_59@2x.png',
|
|
65
|
+
'[TUIEmoji_Knife]': 'emoji_60@2x.png',
|
|
66
|
+
'[TUIEmoji_Like]': 'emoji_61@2x.png',
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
export const BASIC_EMOJI_NAME_MAPPING: Record<string, string> = {
|
|
70
|
+
'[TUIEmoji_Smile]': '[Smile]',
|
|
71
|
+
'[TUIEmoji_Expect]': '[Expect]',
|
|
72
|
+
'[TUIEmoji_Blink]': '[Blink]',
|
|
73
|
+
'[TUIEmoji_Guffaw]': '[Laugh]',
|
|
74
|
+
'[TUIEmoji_KindSmile]': '[Kind Smile]',
|
|
75
|
+
'[TUIEmoji_Haha]': '[Haha]',
|
|
76
|
+
'[TUIEmoji_Cheerful]': '[Cheerful]',
|
|
77
|
+
'[TUIEmoji_Speechless]': '[Speechless]',
|
|
78
|
+
'[TUIEmoji_Amazed]': '[Amazed]',
|
|
79
|
+
'[TUIEmoji_Sorrow]': '[Sorrow]',
|
|
80
|
+
'[TUIEmoji_Complacent]': '[Complacent]',
|
|
81
|
+
'[TUIEmoji_Silly]': '[Silly]',
|
|
82
|
+
'[TUIEmoji_Lustful]': '[Lustful]',
|
|
83
|
+
'[TUIEmoji_Giggle]': '[Giggle]',
|
|
84
|
+
'[TUIEmoji_Kiss]': '[Kiss]',
|
|
85
|
+
'[TUIEmoji_Wail]': '[Wail]',
|
|
86
|
+
'[TUIEmoji_TearsLaugh]': '[Tears of Laughter]',
|
|
87
|
+
'[TUIEmoji_Trapped]': '[Trapped]',
|
|
88
|
+
'[TUIEmoji_Mask]': '[Mask]',
|
|
89
|
+
'[TUIEmoji_Fear]': '[Fear]',
|
|
90
|
+
'[TUIEmoji_BareTeeth]': '[Bare Teeth]',
|
|
91
|
+
'[TUIEmoji_FlareUp]': '[Flare Up]',
|
|
92
|
+
'[TUIEmoji_Yawn]': '[Yawn]',
|
|
93
|
+
'[TUIEmoji_Tact]': '[Tact]',
|
|
94
|
+
'[TUIEmoji_Stareyes]': '[Star Eyes]',
|
|
95
|
+
'[TUIEmoji_ShutUp]': '[Shut Up]',
|
|
96
|
+
'[TUIEmoji_Sigh]': '[Sigh]',
|
|
97
|
+
'[TUIEmoji_Hehe]': '[Hehe]',
|
|
98
|
+
'[TUIEmoji_Silent]': '[Silent]',
|
|
99
|
+
'[TUIEmoji_Surprised]': '[Surprised]',
|
|
100
|
+
'[TUIEmoji_Askance]': '[Askance]',
|
|
101
|
+
'[TUIEmoji_Ok]': '[OK]',
|
|
102
|
+
'[TUIEmoji_Shit]': '[Poop]',
|
|
103
|
+
'[TUIEmoji_Monster]': '[Monster]',
|
|
104
|
+
'[TUIEmoji_Daemon]': '[Daemon]',
|
|
105
|
+
'[TUIEmoji_Rage]': '[Rage]',
|
|
106
|
+
'[TUIEmoji_Fool]': '[Fool]',
|
|
107
|
+
'[TUIEmoji_Pig]': '[Pig]',
|
|
108
|
+
'[TUIEmoji_Cow]': '[Cow]',
|
|
109
|
+
'[TUIEmoji_Ai]': '[AI]',
|
|
110
|
+
'[TUIEmoji_Skull]': '[Skull]',
|
|
111
|
+
'[TUIEmoji_Bombs]': '[Bombs]',
|
|
112
|
+
'[TUIEmoji_Coffee]': '[Coffee]',
|
|
113
|
+
'[TUIEmoji_Cake]': '[Cake]',
|
|
114
|
+
'[TUIEmoji_Beer]': '[Beer]',
|
|
115
|
+
'[TUIEmoji_Flower]': '[Flower]',
|
|
116
|
+
'[TUIEmoji_Watermelon]': '[Watermelon]',
|
|
117
|
+
'[TUIEmoji_Rich]': '[Rich]',
|
|
118
|
+
'[TUIEmoji_Heart]': '[Heart]',
|
|
119
|
+
'[TUIEmoji_Moon]': '[Moon]',
|
|
120
|
+
'[TUIEmoji_Sun]': '[Sun]',
|
|
121
|
+
'[TUIEmoji_Star]': '[Star]',
|
|
122
|
+
'[TUIEmoji_RedPacket]': '[Red Packet]',
|
|
123
|
+
'[TUIEmoji_Celebrate]': '[Celebrate]',
|
|
124
|
+
'[TUIEmoji_Bless]': '[Bless]',
|
|
125
|
+
'[TUIEmoji_Fortune]': '[Fortune]',
|
|
126
|
+
'[TUIEmoji_Convinced]': '[Convinced]',
|
|
127
|
+
'[TUIEmoji_Prohibit]': '[Prohibit]',
|
|
128
|
+
'[TUIEmoji_666]': '[666]',
|
|
129
|
+
'[TUIEmoji_857]': '[857]',
|
|
130
|
+
'[TUIEmoji_Knife]': '[Knife]',
|
|
131
|
+
'[TUIEmoji_Like]': '[Like]',
|
|
132
|
+
};
|
|
@@ -22,12 +22,12 @@
|
|
|
22
22
|
class="applications-content"
|
|
23
23
|
>
|
|
24
24
|
<div
|
|
25
|
-
v-if="
|
|
25
|
+
v-if="applicants.length > 0"
|
|
26
26
|
class="user-list-container"
|
|
27
27
|
>
|
|
28
28
|
<div class="user-list">
|
|
29
29
|
<div
|
|
30
|
-
v-for="user in
|
|
30
|
+
v-for="user in applicants"
|
|
31
31
|
:key="user.userId"
|
|
32
32
|
class="user-item"
|
|
33
33
|
>
|
|
@@ -73,13 +73,13 @@
|
|
|
73
73
|
<div class="user-list-title">
|
|
74
74
|
<span class="user-list-title-text">{{ t('Current seat') }}</span>
|
|
75
75
|
<span class="user-list-title-count">
|
|
76
|
-
{{ `(${
|
|
77
|
-
<!-- {{ `(${
|
|
76
|
+
{{ `(${connected.length})` }}
|
|
77
|
+
<!-- {{ `(${connected.length}/${ seatList.length})` }} -->
|
|
78
78
|
</span>
|
|
79
79
|
</div>
|
|
80
80
|
<div class="user-list">
|
|
81
81
|
<div
|
|
82
|
-
v-for="user in
|
|
82
|
+
v-for="user in connected"
|
|
83
83
|
:key="user.userId"
|
|
84
84
|
class="user-item"
|
|
85
85
|
>
|
|
@@ -112,83 +112,12 @@
|
|
|
112
112
|
</div>
|
|
113
113
|
</div>
|
|
114
114
|
<div
|
|
115
|
-
v-if="
|
|
115
|
+
v-if="connected.length === 0"
|
|
116
116
|
class="empty-state"
|
|
117
117
|
>
|
|
118
118
|
<span>{{ t('Seat is empty') }}</span>
|
|
119
119
|
</div>
|
|
120
120
|
</div>
|
|
121
|
-
<!-- <div
|
|
122
|
-
v-if="sentCoGuestUserList.length > 0"
|
|
123
|
-
class="user-list-container"
|
|
124
|
-
>
|
|
125
|
-
<div class="user-list-title">
|
|
126
|
-
<span class="user-list-title-text">{{ t('Inviting') }}</span>
|
|
127
|
-
</div>
|
|
128
|
-
<div class="user-list">
|
|
129
|
-
<div
|
|
130
|
-
v-for="user in sentCoGuestUserList"
|
|
131
|
-
:key="user.userId"
|
|
132
|
-
class="user-item"
|
|
133
|
-
>
|
|
134
|
-
<div class="user-item-left">
|
|
135
|
-
<Avatar :src="user.avatarUrl" :size="40" />
|
|
136
|
-
</div>
|
|
137
|
-
<div class="user-item-right">
|
|
138
|
-
<div class="user-info">
|
|
139
|
-
<span class="user-name">{{ user.userName || user.userId }}</span>
|
|
140
|
-
</div>
|
|
141
|
-
<div class="user-actions">
|
|
142
|
-
<TUIButton
|
|
143
|
-
color="gray"
|
|
144
|
-
@click="cancelCoGuestRequest({ userId: user.userId })"
|
|
145
|
-
>
|
|
146
|
-
{{
|
|
147
|
-
t('Cancel')
|
|
148
|
-
}}
|
|
149
|
-
</TUIButton>
|
|
150
|
-
</div>
|
|
151
|
-
</div>
|
|
152
|
-
</div>
|
|
153
|
-
</div>
|
|
154
|
-
</div>
|
|
155
|
-
<div class="user-list-container">
|
|
156
|
-
<div class="user-list-title">
|
|
157
|
-
<span class="user-list-title-text">{{ t('Invite more') }}</span>
|
|
158
|
-
</div>
|
|
159
|
-
<div class="user-list">
|
|
160
|
-
<div
|
|
161
|
-
v-for="user in availableCoGuestUserList"
|
|
162
|
-
:key="user.userId"
|
|
163
|
-
class="user-item"
|
|
164
|
-
>
|
|
165
|
-
<div class="user-item-left">
|
|
166
|
-
<Avatar :src="user.avatarUrl" :size="40" />
|
|
167
|
-
</div>
|
|
168
|
-
<div class="user-item-right">
|
|
169
|
-
<div class="user-info">
|
|
170
|
-
<span class="user-name">{{ user.userName || user.userId }}</span>
|
|
171
|
-
</div>
|
|
172
|
-
<div class="user-actions">
|
|
173
|
-
<TUIButton
|
|
174
|
-
color="gray"
|
|
175
|
-
@click="sendCoGuestRequest({ userId: user.userId })"
|
|
176
|
-
>
|
|
177
|
-
{{
|
|
178
|
-
t('Invite')
|
|
179
|
-
}}
|
|
180
|
-
</TUIButton>
|
|
181
|
-
</div>
|
|
182
|
-
</div>
|
|
183
|
-
</div>
|
|
184
|
-
</div>
|
|
185
|
-
<div
|
|
186
|
-
v-if="availableCoGuestUserList.length === 0"
|
|
187
|
-
class="empty-state"
|
|
188
|
-
>
|
|
189
|
-
<span>{{ t('No invited users yet') }}</span>
|
|
190
|
-
</div>
|
|
191
|
-
</div> -->
|
|
192
121
|
</div>
|
|
193
122
|
</div>
|
|
194
123
|
</div>
|
|
@@ -199,32 +128,28 @@ import { ref } from 'vue';
|
|
|
199
128
|
import { TUIButton, TUIToast, useUIKit } from '@tencentcloud/uikit-base-component-vue3';
|
|
200
129
|
import { useCoGuestState } from '../../states/CoGuestState';
|
|
201
130
|
import { useLoginState } from '../../states/LoginState';
|
|
202
|
-
import {
|
|
131
|
+
import { useLiveSeatState } from '../../states/LiveSeatState';
|
|
203
132
|
import { Avatar } from '../Avatar';
|
|
204
133
|
import { ERROR_MESSAGE } from './constants';
|
|
205
134
|
|
|
206
135
|
const { t } = useUIKit();
|
|
207
136
|
|
|
208
137
|
const { loginUserInfo } = useLoginState();
|
|
209
|
-
const { seatList } = useSeatStore();
|
|
210
138
|
|
|
211
139
|
const {
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
sendCoGuestRequest,
|
|
217
|
-
acceptCoGuestRequest,
|
|
218
|
-
rejectCoGuestRequest,
|
|
219
|
-
cancelCoGuestRequest,
|
|
220
|
-
disconnect,
|
|
140
|
+
connected,
|
|
141
|
+
applicants,
|
|
142
|
+
acceptApplication,
|
|
143
|
+
rejectApplication,
|
|
221
144
|
} = useCoGuestState();
|
|
222
145
|
|
|
146
|
+
const { kickUserOutOfSeat } = useLiveSeatState();
|
|
147
|
+
|
|
223
148
|
const activeTab = ref('applications');
|
|
224
149
|
|
|
225
150
|
const handleAcceptCoGuestRequest = async (userId: string) => {
|
|
226
151
|
try {
|
|
227
|
-
await
|
|
152
|
+
await acceptApplication({ userId });
|
|
228
153
|
} catch (error: any) {
|
|
229
154
|
const message = t(ERROR_MESSAGE[error.code as keyof typeof ERROR_MESSAGE] || 'Accept co-guest request failed');
|
|
230
155
|
TUIToast.error({ message });
|
|
@@ -233,7 +158,7 @@ const handleAcceptCoGuestRequest = async (userId: string) => {
|
|
|
233
158
|
|
|
234
159
|
const handleRejectCoGuestRequest = async (userId: string) => {
|
|
235
160
|
try {
|
|
236
|
-
await
|
|
161
|
+
await rejectApplication({ userId });
|
|
237
162
|
} catch (error) {
|
|
238
163
|
console.error('[CoGuestPanel] handleRejectCoGuestRequest error', error);
|
|
239
164
|
TUIToast.error({
|
|
@@ -244,7 +169,7 @@ const handleRejectCoGuestRequest = async (userId: string) => {
|
|
|
244
169
|
|
|
245
170
|
const handleDisconnect = async (userId: string) => {
|
|
246
171
|
try {
|
|
247
|
-
await
|
|
172
|
+
await kickUserOutOfSeat({ userId });
|
|
248
173
|
} catch (error) {
|
|
249
174
|
console.error('[CoGuestPanel] handleDisconnect error', error);
|
|
250
175
|
TUIToast.error({
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
|
|
70
70
|
<script setup lang="ts">
|
|
71
71
|
import { ref, onMounted, onUnmounted } from 'vue';
|
|
72
|
-
import { TUIConnectionCode
|
|
72
|
+
import { TUIConnectionCode } from '@tencentcloud/tuiroom-engine-js';
|
|
73
73
|
import { TUIButton, TUIToast, useUIKit, TOAST_TYPE, TUIDialog } from '@tencentcloud/uikit-base-component-vue3';
|
|
74
74
|
import { useBattleState } from '../../states/BattleState';
|
|
75
75
|
import { useCoHostState } from '../../states/CoHostState';
|
|
@@ -78,7 +78,6 @@ import { CoHostLayoutTemplate, CoHostEvent } from '../../types';
|
|
|
78
78
|
import UserList from './UserList.vue';
|
|
79
79
|
import RecommendHostList from './RecommendHostList.vue';
|
|
80
80
|
import type { SeatUserInfo } from '../../types';
|
|
81
|
-
import type { TUIBattleUser } from '@tencentcloud/tuiroom-engine-js';
|
|
82
81
|
|
|
83
82
|
const { t } = useUIKit();
|
|
84
83
|
const props = defineProps<{
|
|
@@ -98,8 +97,6 @@ const {
|
|
|
98
97
|
battleUsers,
|
|
99
98
|
requestBattle,
|
|
100
99
|
exitBattle,
|
|
101
|
-
subscribeEvent: subscribeBattleEvent,
|
|
102
|
-
unsubscribeEvent: unsubscribeBattleEvent,
|
|
103
100
|
} = useBattleState();
|
|
104
101
|
|
|
105
102
|
const showExitCoHostDialog = ref(false);
|