@tencentcloud/roomkit-electron-vue3 2.3.3 → 2.4.0
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/es/components/ManageMember/MemberControl/index.vue.mjs +1 -1
- package/es/components/ManageMember/MemberControl/index.vue2.mjs +5 -4
- package/es/components/ManageMember/MemberControl/useMemberControlHooks.mjs +19 -4
- package/es/components/ManageMember/useIndexHooks.mjs +2 -1
- package/es/components/RoomFooter/ApplyControl/MemberApplyControl.vue.mjs +1 -1
- package/es/components/RoomFooter/ApplyControl/MemberApplyControl.vue2.mjs +2 -2
- package/es/components/RoomFooter/VirtualBackground.vue.mjs +1 -1
- package/es/components/RoomFooter/VirtualBackground.vue2.mjs +87 -27
- package/es/components/RoomFooter/index/index.vue.mjs +1 -1
- package/es/components/RoomFooter/index/index.vue2.mjs +0 -2
- package/es/components/RoomHeader/RoomInfo/useRoomInfoHooks.mjs +2 -2
- package/es/components/RoomHeader/index/LayoutControl.vue.mjs +1 -1
- package/es/components/RoomHeader/index/LayoutControl.vue2.mjs +1 -3
- package/es/components/RoomHeader/index/NetworkInfo.vue.mjs +1 -1
- package/es/components/RoomHeader/index/NetworkInfo.vue2.mjs +0 -2
- package/es/components/common/base/MessageBox/index.mjs +3 -1
- package/es/conference.d.ts +1 -1
- package/es/conference.vue.mjs +1 -1
- package/es/conference.vue2.mjs +1 -14
- package/es/constants/room.d.ts +3 -1
- package/es/extension/RoomMessageCard/RoomMessageCard.vue.mjs +1 -1
- package/es/extension/RoomMessageCard/RoomMessageCard.vue2.mjs +2 -2
- package/es/extension/chatExtension.mjs +1 -1
- package/es/hooks/useDeviceManager.d.ts +3 -1
- package/es/hooks/useMasterApplyControl.mjs +16 -10
- package/es/hooks/useRoomEngine.d.ts +3 -1
- package/es/index.d.ts +2 -1
- package/es/index.mjs +1494 -1437
- package/es/locales/en-US.d.ts +8 -7
- package/es/locales/en-US.mjs +8 -7
- package/es/locales/zh-CN.d.ts +10 -9
- package/es/locales/zh-CN.mjs +10 -9
- package/es/services/function/virtualBackground.d.ts +2 -0
- package/es/services/function/virtualBackground.mjs +19 -9
- package/es/services/function/waterMark.mjs +3 -0
- package/es/services/manager/componentManager.mjs +1 -1
- package/es/services/manager/roomActionManager.mjs +1 -1
- package/es/services/roomService.d.ts +3 -2
- package/es/stores/room.mjs +9 -1
- package/lib/components/ManageMember/MemberControl/index.vue.js +1 -1
- package/lib/components/ManageMember/MemberControl/index.vue2.js +4 -3
- package/lib/components/ManageMember/MemberControl/useMemberControlHooks.js +19 -4
- package/lib/components/ManageMember/useIndexHooks.js +2 -1
- package/lib/components/RoomFooter/ApplyControl/MemberApplyControl.vue.js +1 -1
- package/lib/components/RoomFooter/ApplyControl/MemberApplyControl.vue2.js +2 -2
- package/lib/components/RoomFooter/VirtualBackground.vue.js +1 -1
- package/lib/components/RoomFooter/VirtualBackground.vue2.js +86 -26
- package/lib/components/RoomFooter/index/index.vue.js +1 -1
- package/lib/components/RoomFooter/index/index.vue2.js +0 -2
- package/lib/components/RoomHeader/RoomInfo/useRoomInfoHooks.js +2 -2
- package/lib/components/RoomHeader/index/LayoutControl.vue.js +1 -1
- package/lib/components/RoomHeader/index/LayoutControl.vue2.js +1 -3
- package/lib/components/RoomHeader/index/NetworkInfo.vue.js +1 -1
- package/lib/components/RoomHeader/index/NetworkInfo.vue2.js +0 -2
- package/lib/components/common/base/MessageBox/index.js +3 -1
- package/lib/conference.d.ts +1 -1
- package/lib/conference.vue.js +1 -1
- package/lib/conference.vue2.js +10 -23
- package/lib/constants/room.d.ts +3 -1
- package/lib/extension/RoomMessageCard/RoomMessageCard.vue.js +1 -1
- package/lib/extension/RoomMessageCard/RoomMessageCard.vue2.js +2 -2
- package/lib/extension/chatExtension.js +1 -1
- package/lib/hooks/useDeviceManager.d.ts +3 -1
- package/lib/hooks/useMasterApplyControl.js +16 -10
- package/lib/hooks/useRoomEngine.d.ts +3 -1
- package/lib/index.d.ts +2 -1
- package/lib/index.js +1493 -1436
- package/lib/locales/en-US.d.ts +8 -7
- package/lib/locales/en-US.js +8 -7
- package/lib/locales/zh-CN.d.ts +10 -9
- package/lib/locales/zh-CN.js +10 -9
- package/lib/services/function/virtualBackground.d.ts +2 -0
- package/lib/services/function/virtualBackground.js +19 -9
- package/lib/services/function/waterMark.js +3 -0
- package/lib/services/manager/componentManager.js +1 -1
- package/lib/services/manager/roomActionManager.js +1 -1
- package/lib/services/roomService.d.ts +3 -2
- package/lib/stores/room.js +9 -1
- package/package.json +2 -2
- package/src/TUIRoom/assets/style/global.scss +1 -1
- package/src/TUIRoom/components/ManageMember/MemberControl/index.vue +5 -4
- package/src/TUIRoom/components/ManageMember/MemberControl/useMemberControlHooks.ts +20 -5
- package/src/TUIRoom/components/ManageMember/useIndexHooks.ts +3 -2
- package/src/TUIRoom/components/RoomFooter/ApplyControl/MemberApplyControl.vue +2 -2
- package/src/TUIRoom/components/RoomFooter/VirtualBackground.vue +100 -16
- package/src/TUIRoom/components/RoomFooter/index/index.vue +0 -3
- package/src/TUIRoom/components/RoomHeader/RoomInfo/useRoomInfoHooks.ts +2 -2
- package/src/TUIRoom/components/RoomHeader/index/LayoutControl.vue +0 -2
- package/src/TUIRoom/components/RoomHeader/index/NetworkInfo.vue +0 -2
- package/src/TUIRoom/components/common/base/MessageBox/index.ts +2 -1
- package/src/TUIRoom/conference.vue +6 -13
- package/src/TUIRoom/extension/RoomMessageCard/RoomMessageCard.vue +1 -1
- package/src/TUIRoom/extension/chatExtension.ts +1 -1
- package/src/TUIRoom/hooks/useMasterApplyControl.ts +15 -10
- package/src/TUIRoom/index.ts +2 -1
- package/src/TUIRoom/locales/en-US.ts +8 -7
- package/src/TUIRoom/locales/zh-CN.ts +10 -9
- package/src/TUIRoom/services/function/virtualBackground.ts +21 -9
- package/src/TUIRoom/services/function/waterMark.ts +6 -0
- package/src/TUIRoom/services/manager/componentManager.ts +1 -1
- package/src/TUIRoom/services/manager/roomActionManager.ts +1 -1
- package/src/TUIRoom/stores/room.ts +9 -1
- package/es/utils/aegis/config.mjs +0 -12
- package/es/utils/aegis/index.mjs +0 -63
- package/lib/utils/aegis/config.js +0 -12
- package/lib/utils/aegis/index.js +0 -63
|
@@ -8,11 +8,16 @@
|
|
|
8
8
|
v-model="isDialogVisible" :title="t('VirtualBackground')" width="600px" :modal="true"
|
|
9
9
|
:append-to-room-container="true" @close="closeSettingPanel"
|
|
10
10
|
>
|
|
11
|
-
<div id="stream-preview" class="stream-preview"
|
|
11
|
+
<div id="stream-preview" class="stream-preview">
|
|
12
|
+
<div v-if="isLoading" class="mask"></div>
|
|
13
|
+
<div v-if="isLoading" class="spinner"></div>
|
|
14
|
+
</div>
|
|
12
15
|
<div class="setting">
|
|
13
16
|
<div
|
|
14
|
-
:class="[
|
|
15
|
-
|
|
17
|
+
:class="[
|
|
18
|
+
'setting-item', selectedBackground === 'close' ? 'active' : ''
|
|
19
|
+
]"
|
|
20
|
+
@click="applyVirtualBackground('close')"
|
|
16
21
|
>
|
|
17
22
|
<i class="setting-item-icon">
|
|
18
23
|
<img :src="CloseVirtualBackground" alt="close" style="width: 32px;" />
|
|
@@ -20,8 +25,10 @@
|
|
|
20
25
|
<span>{{ t('Close') }}</span>
|
|
21
26
|
</div>
|
|
22
27
|
<div
|
|
23
|
-
:class="[
|
|
24
|
-
|
|
28
|
+
:class="[
|
|
29
|
+
'setting-item', selectedBackground === 'blur' ? 'active' : ''
|
|
30
|
+
]"
|
|
31
|
+
@click="applyVirtualBackground('blur')"
|
|
25
32
|
>
|
|
26
33
|
<i class="setting-item-icon">
|
|
27
34
|
<img :src="BlurredBackground" alt="blurred" />
|
|
@@ -29,12 +36,20 @@
|
|
|
29
36
|
<span>{{ t('BlurredBackground') }}</span>
|
|
30
37
|
</div>
|
|
31
38
|
</div>
|
|
39
|
+
<div class="footer">
|
|
40
|
+
<TuiButton
|
|
41
|
+
class="button" :disabled="!isAllowed" @click="confirmVirtualBackground"
|
|
42
|
+
>
|
|
43
|
+
{{ t('Save') }}
|
|
44
|
+
</TuiButton>
|
|
45
|
+
<TuiButton class="button" type="primary" @click="closeSettingPanel">{{ t('Cancel') }}</TuiButton>
|
|
46
|
+
</div>
|
|
32
47
|
</Dialog>
|
|
33
48
|
</div>
|
|
34
49
|
</template>
|
|
35
50
|
|
|
36
51
|
<script setup lang="ts">
|
|
37
|
-
import { nextTick, ref } from 'vue';
|
|
52
|
+
import { computed, nextTick, ref } from 'vue';
|
|
38
53
|
import IconButton from '../common/base/IconButton.vue';
|
|
39
54
|
import VirtualBackgroundIcon from '../common/icons/VirtualBackgroundIcon.vue';
|
|
40
55
|
import { useI18n } from '../../locales';
|
|
@@ -42,41 +57,65 @@ import { roomService } from '../../services';
|
|
|
42
57
|
import Dialog from '../common/base/Dialog/index.vue';
|
|
43
58
|
import CloseVirtualBackground from '../../assets/imgs/close-virtual-background.png';
|
|
44
59
|
import BlurredBackground from '../../assets/imgs/blurred-background.png';
|
|
60
|
+
import TuiButton from '../common/base/Button.vue';
|
|
45
61
|
|
|
46
62
|
const { t } = useI18n();
|
|
47
63
|
const componentConfig = roomService.componentManager.getComponentConfig('VirtualBackground');
|
|
48
|
-
|
|
49
|
-
const
|
|
64
|
+
const isAllowed = computed(() => roomService.roomStore.localStream.hasVideoStream);
|
|
65
|
+
const appliedBackground = ref<'close' | 'blur'>('close');
|
|
66
|
+
const selectedBackground = ref<'close' | 'blur'>('close');
|
|
50
67
|
const isDialogVisible = ref(false);
|
|
68
|
+
const isLoading = ref(false);
|
|
51
69
|
const openSettingPanel = async () => {
|
|
52
70
|
roomService.virtualBackground.initVirtualBackground();
|
|
53
71
|
isDialogVisible.value = true;
|
|
72
|
+
isLoading.value = true;
|
|
54
73
|
await nextTick();
|
|
55
|
-
roomService.roomEngine.instance?.startCameraDeviceTest({ view: 'stream-preview' });
|
|
74
|
+
await roomService.roomEngine.instance?.startCameraDeviceTest({ view: 'stream-preview' });
|
|
75
|
+
await applyVirtualBackground(appliedBackground.value);
|
|
76
|
+
isLoading.value = false;
|
|
56
77
|
};
|
|
57
|
-
|
|
78
|
+
|
|
79
|
+
const closeSettingPanel = async () => {
|
|
58
80
|
isDialogVisible.value = false;
|
|
59
81
|
roomService.roomEngine.instance?.stopCameraDeviceTest();
|
|
82
|
+
selectedBackground.value = appliedBackground.value;
|
|
60
83
|
};
|
|
61
84
|
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
85
|
+
const confirmVirtualBackground = async () => {
|
|
86
|
+
if (!isAllowed.value) return;
|
|
87
|
+
appliedBackground.value = selectedBackground.value;
|
|
88
|
+
closeSettingPanel();
|
|
89
|
+
if (selectedBackground.value === 'blur') {
|
|
90
|
+
await roomService.virtualBackground.toggleVirtualBackground(true);
|
|
91
|
+
}
|
|
92
|
+
if (selectedBackground.value === 'close') {
|
|
93
|
+
await roomService.virtualBackground.toggleVirtualBackground(false);
|
|
94
|
+
}
|
|
65
95
|
};
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
96
|
+
|
|
97
|
+
const applyVirtualBackground = async (type: 'close' | 'blur') => {
|
|
98
|
+
isLoading.value = true;
|
|
99
|
+
try {
|
|
100
|
+
selectedBackground.value = type;
|
|
101
|
+
await roomService.virtualBackground.toggleTestVirtualBackground(type === 'blur');
|
|
102
|
+
} finally {
|
|
103
|
+
isLoading.value = false;
|
|
104
|
+
}
|
|
69
105
|
};
|
|
70
106
|
</script>
|
|
71
107
|
|
|
72
108
|
<style lang="scss" scoped>
|
|
73
109
|
.stream-preview {
|
|
74
110
|
display: flex;
|
|
111
|
+
align-items: center;
|
|
112
|
+
justify-content: center;
|
|
75
113
|
box-sizing: border-box;
|
|
76
114
|
border-radius: 8px;
|
|
77
115
|
overflow: hidden;
|
|
78
116
|
min-height: 310px;
|
|
79
117
|
background-color: #000;
|
|
118
|
+
position: relative;
|
|
80
119
|
}
|
|
81
120
|
|
|
82
121
|
.setting {
|
|
@@ -97,6 +136,7 @@ const closeVirtualBackground = () => {
|
|
|
97
136
|
color: #4F586B;
|
|
98
137
|
font-size: 12px;
|
|
99
138
|
border: 1px solid transparent;
|
|
139
|
+
cursor: pointer;
|
|
100
140
|
|
|
101
141
|
&-icon {
|
|
102
142
|
display: flex;
|
|
@@ -116,4 +156,48 @@ const closeVirtualBackground = () => {
|
|
|
116
156
|
color: #fff;
|
|
117
157
|
}
|
|
118
158
|
}
|
|
159
|
+
|
|
160
|
+
.spinner {
|
|
161
|
+
z-index: 3;
|
|
162
|
+
position: absolute;
|
|
163
|
+
top: 50%;
|
|
164
|
+
left: 50%;
|
|
165
|
+
transform: translate(-50%, -50%);
|
|
166
|
+
width: 40px;
|
|
167
|
+
height: 40px;
|
|
168
|
+
border: 4px solid #f3f3f3;
|
|
169
|
+
border-top: 4px solid #1C66E5;
|
|
170
|
+
border-radius: 50%;
|
|
171
|
+
animation: spin 1s linear infinite;
|
|
172
|
+
}
|
|
173
|
+
.mask {
|
|
174
|
+
position: absolute;
|
|
175
|
+
width: 100%;
|
|
176
|
+
height: 100%;
|
|
177
|
+
background-color: #000;
|
|
178
|
+
z-index: 2;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
@keyframes spin {
|
|
182
|
+
0% {
|
|
183
|
+
transform: translate(-50%, -50%) rotate(0deg);
|
|
184
|
+
}
|
|
185
|
+
100% {
|
|
186
|
+
transform: translate(-50%, -50%) rotate(360deg);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.footer {
|
|
191
|
+
display: flex;
|
|
192
|
+
align-items: center;
|
|
193
|
+
justify-content: center;
|
|
194
|
+
gap: 1rem;
|
|
195
|
+
margin-top: 10px;
|
|
196
|
+
padding: 1rem;
|
|
197
|
+
border-radius: 8px;
|
|
198
|
+
.button {
|
|
199
|
+
width: 84px;
|
|
200
|
+
height: 32px;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
119
203
|
</style>
|
|
@@ -77,8 +77,6 @@ import SettingControl from '../SettingControl.vue';
|
|
|
77
77
|
import VirtualBackground from '../VirtualBackground.vue';
|
|
78
78
|
import bus from '../../../hooks/useMitt';
|
|
79
79
|
|
|
80
|
-
import TUIRoomAegis from '../../../utils/aegis';
|
|
81
|
-
|
|
82
80
|
import useRoomFooter from './useRoomFooterHooks';
|
|
83
81
|
|
|
84
82
|
const {
|
|
@@ -89,7 +87,6 @@ const {
|
|
|
89
87
|
} = useRoomFooter();
|
|
90
88
|
|
|
91
89
|
function handleControlClick(name: string) {
|
|
92
|
-
TUIRoomAegis.reportEvent({ name, ext1: name });
|
|
93
90
|
bus.emit('experience-communication', name);
|
|
94
91
|
}
|
|
95
92
|
</script>
|
|
@@ -14,7 +14,7 @@ export default function useRoomInfo() {
|
|
|
14
14
|
const basicStore = useBasicStore();
|
|
15
15
|
const roomStore = useRoomStore();
|
|
16
16
|
const { roomId, isRoomLinkVisible } = storeToRefs(basicStore);
|
|
17
|
-
const { masterUserId } = storeToRefs(roomStore);
|
|
17
|
+
const { masterUserId, roomName } = storeToRefs(roomStore);
|
|
18
18
|
const { t } = useI18n();
|
|
19
19
|
const isShowRoomInfo = ref(false);
|
|
20
20
|
const roomType = computed(() => (roomStore.isFreeSpeakMode ? t('Free Speech Room') : t('On-stage Speaking Room')));
|
|
@@ -25,7 +25,7 @@ export default function useRoomInfo() {
|
|
|
25
25
|
|
|
26
26
|
const isShowRoomInfoTitle = computed(() => masterUserName.value);
|
|
27
27
|
|
|
28
|
-
const conferenceTitle = computed(() => `${
|
|
28
|
+
const conferenceTitle = computed(() => `${roomName.value}`);
|
|
29
29
|
|
|
30
30
|
const roomInfoTabList = computed(() => [
|
|
31
31
|
{ id: 1, title: 'Host', content: masterUserName.value, copyLink: '', isShowCopyIcon: false, visible: true },
|
|
@@ -85,7 +85,6 @@ import { LAYOUT } from '../../../constants/render';
|
|
|
85
85
|
import { useBasicStore } from '../../../stores/basic';
|
|
86
86
|
import { useRoomStore } from '../../../stores/room';
|
|
87
87
|
import { storeToRefs } from 'pinia';
|
|
88
|
-
import TUIRoomAegis from '../../../utils/aegis';
|
|
89
88
|
import { useI18n } from '../../../locales';
|
|
90
89
|
import { IconButtonLayout } from '../../../constants/room';
|
|
91
90
|
import IconButton from '../../common/base/IconButton.vue';
|
|
@@ -107,7 +106,6 @@ const layoutControlConfig = roomService.getComponentConfig('LayoutControl');
|
|
|
107
106
|
|
|
108
107
|
function handleClick(layout: any) {
|
|
109
108
|
basicStore.setLayout(layout);
|
|
110
|
-
TUIRoomAegis.reportEvent({ name: 'layout', ext1: layout });
|
|
111
109
|
}
|
|
112
110
|
|
|
113
111
|
function handleClickLayoutIcon() {
|
|
@@ -40,7 +40,6 @@
|
|
|
40
40
|
import { ref, Ref, onUnmounted, watchEffect, reactive, shallowRef } from 'vue';
|
|
41
41
|
import { useBasicStore } from '../../../stores/basic';
|
|
42
42
|
import { storeToRefs } from 'pinia';
|
|
43
|
-
import TUIRoomAegis from '../../../utils/aegis';
|
|
44
43
|
import { useI18n } from '../../../locales';
|
|
45
44
|
import TUIRoomEngine, { TUIRoomEvents, TUINetwork, TUINetworkQuality } from '@tencentcloud/tuiroom-engine-electron';
|
|
46
45
|
import useRoomEngine from '../../../hooks/useRoomEngine';
|
|
@@ -108,7 +107,6 @@ watchEffect(() => {
|
|
|
108
107
|
|
|
109
108
|
function handleClickNetworkIcon() {
|
|
110
109
|
showNetworkInfo.value = !showNetworkInfo.value;
|
|
111
|
-
TUIRoomAegis.reportEvent({ name: 'networkInfo', ext1: 'networkInfo' });
|
|
112
110
|
}
|
|
113
111
|
|
|
114
112
|
function handleClickOutSide() {
|
|
@@ -10,7 +10,8 @@ export type MessageProps = {
|
|
|
10
10
|
}
|
|
11
11
|
const MessageBox = ({ title, message, callback, confirmButtonText }: MessageProps) => {
|
|
12
12
|
const container = document.createElement('div');
|
|
13
|
-
const fullscreenElement = document.fullscreenElement || document.getElementById('roomContainer') || document.
|
|
13
|
+
const fullscreenElement = document.fullscreenElement || document.getElementById('roomContainer') || document.getElementById('pre-conference-container');
|
|
14
|
+
if (!fullscreenElement) return;
|
|
14
15
|
fullscreenElement.appendChild(container);
|
|
15
16
|
|
|
16
17
|
const onRemove = () => {
|
|
@@ -30,7 +30,6 @@ import { isMobile, isWeChat } from './utils/environment';
|
|
|
30
30
|
import vTap from './directives/vTap';
|
|
31
31
|
import { TUIKickedOutOfRoomReason } from '@tencentcloud/tuiroom-engine-electron';
|
|
32
32
|
|
|
33
|
-
import TUIRoomAegis from './utils/aegis';
|
|
34
33
|
import { MESSAGE_DURATION } from './constants/message';
|
|
35
34
|
|
|
36
35
|
import TUIMessageBox from './components/common/base/MessageBox/index';
|
|
@@ -134,18 +133,6 @@ onUnmounted(() => {
|
|
|
134
133
|
});
|
|
135
134
|
|
|
136
135
|
const { sdkAppId, showHeaderTool } = roomService.basicStore;
|
|
137
|
-
watch(
|
|
138
|
-
() => sdkAppId,
|
|
139
|
-
(val: number) => {
|
|
140
|
-
if (val) {
|
|
141
|
-
TUIRoomAegis.setSdkAppId(val);
|
|
142
|
-
TUIRoomAegis.reportEvent({
|
|
143
|
-
name: 'loaded',
|
|
144
|
-
ext1: 'loaded-success',
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
},
|
|
148
|
-
);
|
|
149
136
|
const tuiRoomClass = computed(() => {
|
|
150
137
|
const roomClassList = ['tui-room', `tui-theme-${roomService.basicStore.defaultTheme}`];
|
|
151
138
|
if (isMobile) {
|
|
@@ -310,6 +297,7 @@ const onKickedOffLine = (eventInfo: { message: string }) => {
|
|
|
310
297
|
.tui-room {
|
|
311
298
|
width: 100%;
|
|
312
299
|
height: 100%;
|
|
300
|
+
min-width: 850px;
|
|
313
301
|
position: relative;
|
|
314
302
|
color: var(--font-color-1);
|
|
315
303
|
background-color: var(--background-color-1);
|
|
@@ -339,6 +327,7 @@ const onKickedOffLine = (eventInfo: { message: string }) => {
|
|
|
339
327
|
&.tui-room-h5 {
|
|
340
328
|
width: 100%;
|
|
341
329
|
height: 100%;
|
|
330
|
+
min-width: initial;
|
|
342
331
|
}
|
|
343
332
|
}
|
|
344
333
|
|
|
@@ -355,5 +344,9 @@ const onKickedOffLine = (eventInfo: { message: string }) => {
|
|
|
355
344
|
width: 80%;
|
|
356
345
|
border-radius: 10px;
|
|
357
346
|
}
|
|
347
|
+
&.tui-room-h5,.chat-room {
|
|
348
|
+
width: 100%;
|
|
349
|
+
height: 100%;
|
|
350
|
+
}
|
|
358
351
|
}
|
|
359
352
|
</style>
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
</div>
|
|
13
13
|
<div class="content-desc">
|
|
14
14
|
<div class="title">
|
|
15
|
-
{{ `${roomCardData.ownerName || roomCardData.owner}${t('Quick
|
|
15
|
+
{{ `${roomCardData.ownerName || roomCardData.owner}${t('Quick Conference')}` }}
|
|
16
16
|
</div>
|
|
17
17
|
<ul class="users">
|
|
18
18
|
<template
|
|
@@ -233,7 +233,7 @@ export class ChatExtension {
|
|
|
233
233
|
const chatType: ChatType = params?.chatType;
|
|
234
234
|
const extension: ExtensionInfo = {
|
|
235
235
|
weight: -1,
|
|
236
|
-
text: this.service?.t('quick
|
|
236
|
+
text: this.service?.t('quick conference') || '快速会议',
|
|
237
237
|
icon: 'https://qcloudimg.tencent-cloud.cn/raw/148ab10dfe654076b41f0d0945bb82e8.png',
|
|
238
238
|
data: {
|
|
239
239
|
name: 'quickRoom',
|
|
@@ -64,7 +64,7 @@ export default function () {
|
|
|
64
64
|
}
|
|
65
65
|
} catch (error: any) {
|
|
66
66
|
if (error.code === TUIErrorCode.ERR_ALL_SEAT_OCCUPIED) {
|
|
67
|
-
TUIMessage({ type: 'warning', message: t('The
|
|
67
|
+
TUIMessage({ type: 'warning', message: t('The stage is full') });
|
|
68
68
|
} else {
|
|
69
69
|
logger.error('Failure to process a user request', error);
|
|
70
70
|
}
|
|
@@ -83,7 +83,7 @@ export default function () {
|
|
|
83
83
|
}
|
|
84
84
|
} catch (error: any) {
|
|
85
85
|
if (error.code === TUIErrorCode.ERR_ALL_SEAT_OCCUPIED) {
|
|
86
|
-
TUIMessage({ type: 'warning', message: t('The
|
|
86
|
+
TUIMessage({ type: 'warning', message: t('The stage is full') });
|
|
87
87
|
} else {
|
|
88
88
|
logger.error('Failed application for consent to go on stage', error);
|
|
89
89
|
}
|
|
@@ -106,12 +106,13 @@ export default function () {
|
|
|
106
106
|
|
|
107
107
|
// Process all users’ requests to access the microphone
|
|
108
108
|
async function handleAllUserApply(isAgreeOrRejectAllUserApply: boolean) {
|
|
109
|
+
let hasErrorOccurred = false;
|
|
109
110
|
const applyUserList = applyToAnchorList.value.map(item => ({
|
|
110
111
|
userId: item.userId,
|
|
111
112
|
userName: item.userName,
|
|
112
113
|
applyToAnchorRequestId: item.applyToAnchorRequestId,
|
|
113
114
|
}));
|
|
114
|
-
for (const {
|
|
115
|
+
for (const { applyToAnchorRequestId } of applyUserList) {
|
|
115
116
|
const action = isAgreeOrRejectAllUserApply ? 'Agree' : 'Reject';
|
|
116
117
|
const actionFailedMessage = `${action} sb on stage failed, please retry`;
|
|
117
118
|
try {
|
|
@@ -123,12 +124,15 @@ export default function () {
|
|
|
123
124
|
roomStore.removeApplyToAnchorUser(applyToAnchorRequestId);
|
|
124
125
|
}
|
|
125
126
|
} catch (error) {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
127
|
+
if (!hasErrorOccurred) {
|
|
128
|
+
logger.error(actionFailedMessage);
|
|
129
|
+
TUIMessage({
|
|
130
|
+
type: 'warning',
|
|
131
|
+
message: t('The stage is full'),
|
|
132
|
+
duration: MESSAGE_DURATION.NORMAL,
|
|
133
|
+
});
|
|
134
|
+
hasErrorOccurred = true;
|
|
135
|
+
}
|
|
132
136
|
}
|
|
133
137
|
}
|
|
134
138
|
}
|
|
@@ -253,7 +257,8 @@ export default function () {
|
|
|
253
257
|
}
|
|
254
258
|
const onlyOneUserTakeStage = newVal.length === 1;
|
|
255
259
|
const firstUser = applyToAnchorList.value[0];
|
|
256
|
-
const
|
|
260
|
+
const lastIndex = applyToAnchorList.value.length - 1;
|
|
261
|
+
const userName = applyToAnchorList.value[lastIndex]?.userName || applyToAnchorList.value[lastIndex]?.userId;
|
|
257
262
|
const message = onlyOneUserTakeStage
|
|
258
263
|
? `${userName} ${t('Applying for the stage')}`
|
|
259
264
|
: `${userName} ${t('and so on number people applying to stage', { number: applyToAnchorList.value.length })}`;
|
package/src/TUIRoom/index.ts
CHANGED
|
@@ -3,9 +3,10 @@ import PreConferenceView from './preConference.vue';
|
|
|
3
3
|
import TUIRoomEngine from '@tencentcloud/tuiroom-engine-electron';
|
|
4
4
|
import { conference, RoomEvent } from './conference';
|
|
5
5
|
import RoomMessageCard from './extension/RoomMessageCard/RoomMessageCard.vue';
|
|
6
|
+
import { roomService } from './services';
|
|
6
7
|
export * from './components/common/base/index';
|
|
7
8
|
|
|
8
|
-
export { ConferenceMainView, PreConferenceView, TUIRoomEngine, conference, RoomEvent, RoomMessageCard };
|
|
9
|
+
export { ConferenceMainView, PreConferenceView, TUIRoomEngine, roomService, conference, RoomEvent, RoomMessageCard };
|
|
9
10
|
|
|
10
11
|
ConferenceMainView.install = (app) => {
|
|
11
12
|
app.component('ConferenceView', ConferenceMainView);
|
|
@@ -38,7 +38,7 @@ export default {
|
|
|
38
38
|
'Join Room': 'Join Room',
|
|
39
39
|
'Enter room ID': 'Enter room ID',
|
|
40
40
|
'video conferencing': ' \'s video conferencing',
|
|
41
|
-
'Quick
|
|
41
|
+
'Quick Conference': ' \'s Quick Conference',
|
|
42
42
|
'Room ID': 'Room ID',
|
|
43
43
|
'Low Definition': 'Low Definition',
|
|
44
44
|
'Standard Definition': 'Standard Definition',
|
|
@@ -71,9 +71,9 @@ export default {
|
|
|
71
71
|
'Full screen': 'Full screen',
|
|
72
72
|
Members: 'Members',
|
|
73
73
|
'Search Member': 'Search Member',
|
|
74
|
-
'
|
|
74
|
+
'Make host': 'Make host',
|
|
75
75
|
'Set as administrator': 'Set as administrator',
|
|
76
|
-
'
|
|
76
|
+
'Remove administrator': 'Remove administrator',
|
|
77
77
|
// @ts-ignore
|
|
78
78
|
'The administrator status of sb has been withdrawn': ({ named }) => `The administrator status of ${named('name')} has been withdrawn`,
|
|
79
79
|
// @ts-ignore
|
|
@@ -252,7 +252,7 @@ export default {
|
|
|
252
252
|
'An invitation to open the microphone has been sent to sb.': ({ named }) => `An invitation to open the microphone has been sent to ${named('name')}`,
|
|
253
253
|
// @ts-ignore
|
|
254
254
|
'An invitation to open the camera has been sent to sb.': ({ named }) => `An invitation to open the camera has been sent to ${named('name')}`,
|
|
255
|
-
'
|
|
255
|
+
'Make host failed, please try again.': 'Make host failed, please try again.',
|
|
256
256
|
// @ts-ignore
|
|
257
257
|
'Sb has been set as an administrator': ({ named }) => `${named('name')} has been set as an administrator.`,
|
|
258
258
|
'Succeed on stage': 'Succeed on stage',
|
|
@@ -273,8 +273,7 @@ export default {
|
|
|
273
273
|
'You are now an administrator': 'You are now an administrator',
|
|
274
274
|
'The RoomOwner has withdrawn your administrator privileges': 'The RoomOwner has withdrawn your administrator privileges',
|
|
275
275
|
'This member has already received the same request, please try again later': 'This member has already received the same request, please try again later',
|
|
276
|
-
'
|
|
277
|
-
'The current number of people on stage has reached the limit': 'The current number of people on stage has reached the limit',
|
|
276
|
+
'The request to go on stage has timed out': 'The request to go on stage has timed out',
|
|
278
277
|
// @ts-ignore
|
|
279
278
|
'The invitation to sb to go on stage has timed out': ({ named }) => `The invitation to ${named('name')} to go on stage has timed out`,
|
|
280
279
|
'Currently no member has applied to go on stage': 'Currently no member has applied to go on stage',
|
|
@@ -291,8 +290,10 @@ export default {
|
|
|
291
290
|
'people applying to stage': 'people applying to stage',
|
|
292
291
|
// @ts-ignore
|
|
293
292
|
'and so on number people applying to stage': ({ named }) => `and so on ${named('number')} people applying to stage`,
|
|
293
|
+
'The stage is full, please contact the host': 'The stage is full, please contact the host',
|
|
294
|
+
'The stage is full': 'The stage is full',
|
|
294
295
|
// Room Chat Fusion Card Translation
|
|
295
|
-
'quick
|
|
296
|
+
'quick conference': 'quick conference',
|
|
296
297
|
Meeting: 'Meeting',
|
|
297
298
|
'Meeting in progress': 'Meeting in progress',
|
|
298
299
|
Initiating: 'Initiating',
|
|
@@ -35,7 +35,7 @@ export default {
|
|
|
35
35
|
'Join Room': '进入房间',
|
|
36
36
|
'Enter room ID': '输入房间号',
|
|
37
37
|
'video conferencing': ' 的视频会议',
|
|
38
|
-
'Quick
|
|
38
|
+
'Quick Conference': '的快速会议',
|
|
39
39
|
'Room ID': '房间号',
|
|
40
40
|
'Low Definition': '流畅',
|
|
41
41
|
'Standard Definition': '标清',
|
|
@@ -68,9 +68,9 @@ export default {
|
|
|
68
68
|
'Full screen': '全屏',
|
|
69
69
|
Members: '成员',
|
|
70
70
|
'Search Member': '搜索成员',
|
|
71
|
-
'
|
|
71
|
+
'Make host': '转交房主',
|
|
72
72
|
'Set as administrator': '设为管理员',
|
|
73
|
-
'
|
|
73
|
+
'Remove administrator': '撤销管理员',
|
|
74
74
|
// @ts-ignore
|
|
75
75
|
'The administrator status of sb has been withdrawn': ({ named }) => `已将 ${named('name')} 的管理员身份撤回`,
|
|
76
76
|
// @ts-ignore
|
|
@@ -222,9 +222,9 @@ export default {
|
|
|
222
222
|
'kicked out of the room by other device': '相同账号在其他客户端进入房间',
|
|
223
223
|
'kicked out of the room by serve': '被服务端踢出房间',
|
|
224
224
|
// @ts-ignore
|
|
225
|
-
'Reject sb stage failed, please retry': ({ named }) => `拒绝 ${named('name')} 上台失败, 请重试`,
|
|
225
|
+
'Reject sb on stage failed, please retry': ({ named }) => `拒绝 ${named('name')} 上台失败, 请重试`,
|
|
226
226
|
// @ts-ignore
|
|
227
|
-
'Agree sb stage failed, please retry': ({ named }) => `同意 ${named('name')} 上台失败, 请重试`,
|
|
227
|
+
'Agree sb on stage failed, please retry': ({ named }) => `同意 ${named('name')} 上台失败, 请重试`,
|
|
228
228
|
'Has been fully muted and cannot open the microphone': '已被全员静音,无法打开麦克风',
|
|
229
229
|
'Has been muted by the host and cannot open the microphone': '已被主持人静音,无法打开麦克风',
|
|
230
230
|
'To apply to speak in the room, please raise your hand first to apply for the microphone': '申请发言房间,请先举手申请上麦',
|
|
@@ -252,7 +252,7 @@ export default {
|
|
|
252
252
|
'An invitation to open the microphone has been sent to sb.': ({ named }) => `已向 ${named('name')} 发出开启麦克风邀请`,
|
|
253
253
|
// @ts-ignore
|
|
254
254
|
'An invitation to open the camera has been sent to sb.': ({ named }) => `已向 ${named('name')} 发出开启摄像头邀请`,
|
|
255
|
-
'
|
|
255
|
+
'Make host failed, please try again.': '转交房主失败,请重试',
|
|
256
256
|
// @ts-ignore
|
|
257
257
|
'Sb has been set as an administrator': ({ named }) => `已将 ${named('name')} 设为管理员`,
|
|
258
258
|
'Succeed on stage': '上台成功',
|
|
@@ -273,8 +273,7 @@ export default {
|
|
|
273
273
|
'You are now an administrator': '您已成为管理员',
|
|
274
274
|
'The RoomOwner has withdrawn your administrator privileges': '房主已收回您的管理员权限',
|
|
275
275
|
'This member has already received the same request, please try again later': '该成员已收到相同请求,请稍后再试',
|
|
276
|
-
'
|
|
277
|
-
'The current number of people on stage has reached the limit': '当前上台人数已达上限',
|
|
276
|
+
'The request to go on stage has timed out': '上台请求已超时',
|
|
278
277
|
// @ts-ignore
|
|
279
278
|
'The invitation to sb to go on stage has timed out': ({ named }) => `对${named('name')}的上台邀请已超时`,
|
|
280
279
|
'Currently no member has applied to go on stage': '暂无成员申请上台',
|
|
@@ -291,8 +290,10 @@ export default {
|
|
|
291
290
|
'people applying to stage': '人正在申请上台',
|
|
292
291
|
// @ts-ignore
|
|
293
292
|
'and so on number people applying to stage': ({ named }) => `等 ${named('number')} 人正在申请上台`,
|
|
293
|
+
'The stage is full, please contact the host': '台上人数已满,请联系主持人',
|
|
294
|
+
'The stage is full': '台上人数已满',
|
|
294
295
|
// Room Chat Fusion Card Translation
|
|
295
|
-
'quick
|
|
296
|
+
'quick conference': '快速会议',
|
|
296
297
|
Meeting: '会议',
|
|
297
298
|
'Meeting in progress': '会议 进行中',
|
|
298
299
|
Initiating: '正在发起',
|
|
@@ -5,6 +5,7 @@ interface IVirtualBackground {
|
|
|
5
5
|
dispose(): void;
|
|
6
6
|
initVirtualBackground(): Promise<void>;
|
|
7
7
|
toggleVirtualBackground(enabled: boolean): Promise<void>;
|
|
8
|
+
toggleTestVirtualBackground(enabled: boolean): Promise<void>;
|
|
8
9
|
}
|
|
9
10
|
|
|
10
11
|
export class VirtualBackground implements IVirtualBackground {
|
|
@@ -27,6 +28,7 @@ export class VirtualBackground implements IVirtualBackground {
|
|
|
27
28
|
|
|
28
29
|
private handleUnmount = async () => {
|
|
29
30
|
await this.toggleVirtualBackground(false);
|
|
31
|
+
await this.toggleTestVirtualBackground(false);
|
|
30
32
|
};
|
|
31
33
|
|
|
32
34
|
public dispose() {
|
|
@@ -43,14 +45,24 @@ export class VirtualBackground implements IVirtualBackground {
|
|
|
43
45
|
public async toggleVirtualBackground(enabled: boolean): Promise<void> {
|
|
44
46
|
await this.initVirtualBackground();
|
|
45
47
|
const { sdkAppId, userId, userSig } = this.service.basicStore;
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
48
|
+
const params = {
|
|
49
|
+
sdkAppId,
|
|
50
|
+
userId,
|
|
51
|
+
userSig,
|
|
52
|
+
enable: enabled,
|
|
53
|
+
};
|
|
54
|
+
await this.trtcCloud.callExperimentalAPI(JSON.stringify({ api: 'enableVirtualBackground', params }));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
public async toggleTestVirtualBackground(enabled: boolean): Promise<void> {
|
|
58
|
+
await this.initVirtualBackground();
|
|
59
|
+
const { sdkAppId, userId, userSig } = this.service.basicStore;
|
|
60
|
+
const params = {
|
|
61
|
+
sdkAppId,
|
|
62
|
+
userId,
|
|
63
|
+
userSig,
|
|
64
|
+
enable: enabled,
|
|
65
|
+
};
|
|
66
|
+
await this.trtcCloud.callExperimentalAPI(JSON.stringify({ api: 'enableTestVirtualBackground', params }));
|
|
55
67
|
}
|
|
56
68
|
}
|
|
@@ -88,6 +88,9 @@ export class WaterMark implements IWaterMark {
|
|
|
88
88
|
targetElement.appendChild(watermarkContainer);
|
|
89
89
|
|
|
90
90
|
const addWatermarkElements = () => {
|
|
91
|
+
// clear old watermark elements
|
|
92
|
+
watermarkContainer.innerHTML = '';
|
|
93
|
+
|
|
91
94
|
// Calculate watermark spacing based on max width
|
|
92
95
|
const maxWidth = 200;
|
|
93
96
|
const watermarkSpacing = maxWidth + 25;
|
|
@@ -106,6 +109,9 @@ export class WaterMark implements IWaterMark {
|
|
|
106
109
|
|
|
107
110
|
addWatermarkElements();
|
|
108
111
|
|
|
112
|
+
const resizeObserver = new ResizeObserver(addWatermarkElements);
|
|
113
|
+
resizeObserver.observe(watermarkContainer);
|
|
114
|
+
|
|
109
115
|
const observerCallback = (mutations: MutationRecord[], observer: MutationObserver) => {
|
|
110
116
|
mutations.forEach((mutation) => {
|
|
111
117
|
if (mutation.removedNodes.length > 0) {
|
|
@@ -47,7 +47,7 @@ const defaultConfig = {
|
|
|
47
47
|
ManageMemberControl: { visible: true },
|
|
48
48
|
InviteControl: { visible: true },
|
|
49
49
|
ChatControl: { visible: true },
|
|
50
|
-
MoreControl: { visible:
|
|
50
|
+
MoreControl: { visible: false },
|
|
51
51
|
VirtualBackground: { visible: false },
|
|
52
52
|
};
|
|
53
53
|
|