@ndscnj/roomkit-web-vue3 25.11.1917 → 25.12.2316
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/.vscode/settings.json +2 -0
- package/es/components/RoomFooter/index/indexPC.vue.mjs +1 -1
- package/es/components/RoomFooter/index/indexPC.vue2.mjs +8 -3
- package/es/components/RoomFooter/voteControl.vue.d.ts +15 -0
- package/es/components/RoomFooter/voteControl.vue.mjs +7 -0
- package/es/components/RoomFooter/voteControl.vue2.mjs +60 -0
- package/es/components/RoomInvite/useRoomInviteHooks.d.ts +1 -1
- package/es/components/RoomSidebar/indexPC.vue.mjs +6 -4
- package/es/components/RoomSidebar/useSideBarHooks.d.ts +1 -1
- package/es/components/RoomSidebar/useSideBarHooks.mjs +3 -0
- package/es/components/RoomVote/index.d.ts +6 -0
- package/es/components/RoomVote/useRoomMoreHooks.d.ts +13 -0
- package/es/conference.vue.d.ts +2 -0
- package/es/conference.vue.mjs +1 -1
- package/es/conference.vue2.mjs +7 -2
- package/es/index.mjs +31 -13
- package/es/locales/en-US.d.ts +1 -0
- package/es/locales/en-US.mjs +1 -0
- package/es/locales/zh-CN.d.ts +1 -0
- package/es/locales/zh-CN.mjs +1 -0
- package/es/stores/basic.d.ts +1 -1
- package/lib/components/RoomFooter/index/indexPC.vue.js +1 -1
- package/lib/components/RoomFooter/index/indexPC.vue2.js +8 -3
- package/lib/components/RoomFooter/voteControl.vue.d.ts +15 -0
- package/lib/components/RoomFooter/voteControl.vue.js +7 -0
- package/lib/components/RoomFooter/voteControl.vue2.js +60 -0
- package/lib/components/RoomInvite/useRoomInviteHooks.d.ts +1 -1
- package/lib/components/RoomSidebar/indexPC.vue.js +5 -3
- package/lib/components/RoomSidebar/useSideBarHooks.d.ts +1 -1
- package/lib/components/RoomSidebar/useSideBarHooks.js +3 -0
- package/lib/components/RoomVote/index.d.ts +6 -0
- package/lib/components/RoomVote/useRoomMoreHooks.d.ts +13 -0
- package/lib/conference.vue.d.ts +2 -0
- package/lib/conference.vue.js +1 -1
- package/lib/conference.vue2.js +7 -2
- package/lib/index.js +31 -13
- package/lib/locales/en-US.d.ts +1 -0
- package/lib/locales/en-US.js +1 -0
- package/lib/locales/zh-CN.d.ts +1 -0
- package/lib/locales/zh-CN.js +1 -0
- package/lib/stores/basic.d.ts +1 -1
- package/package.json +1 -1
- package/src/TUIRoom/components/RoomFooter/index/indexPC.vue +5 -1
- package/src/TUIRoom/components/RoomFooter/voteControl.vue +65 -0
- package/src/TUIRoom/components/RoomSidebar/indexPC.vue +1 -0
- package/src/TUIRoom/components/RoomSidebar/useSideBarHooks.ts +3 -0
- package/src/TUIRoom/components/RoomVote/index.ts +7 -0
- package/src/TUIRoom/components/RoomVote/indexH5.vue +141 -0
- package/src/TUIRoom/components/RoomVote/indexPC.vue +106 -0
- package/src/TUIRoom/components/RoomVote/useRoomMoreHooks.ts +47 -0
- package/src/TUIRoom/conference.vue +5 -0
- package/src/TUIRoom/locales/en-US.ts +1 -0
- package/src/TUIRoom/locales/zh-CN.ts +1 -0
- package/src/TUIRoom/stores/basic.ts +1 -0
package/lib/conference.vue.d.ts
CHANGED
|
@@ -27,6 +27,7 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
27
27
|
resetStore: typeof resetStore;
|
|
28
28
|
t: any;
|
|
29
29
|
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
30
|
+
"on-vote": (...args: any[]) => void;
|
|
30
31
|
"on-log-out": (...args: any[]) => void;
|
|
31
32
|
"on-create-room": (...args: any[]) => void;
|
|
32
33
|
"on-enter-room": (...args: any[]) => void;
|
|
@@ -40,6 +41,7 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
40
41
|
}>, {
|
|
41
42
|
displayMode: string;
|
|
42
43
|
}>>> & Readonly<{
|
|
44
|
+
"onOn-vote"?: ((...args: any[]) => any) | undefined;
|
|
43
45
|
"onOn-log-out"?: ((...args: any[]) => any) | undefined;
|
|
44
46
|
"onOn-create-room"?: ((...args: any[]) => any) | undefined;
|
|
45
47
|
"onOn-enter-room"?: ((...args: any[]) => any) | undefined;
|
package/lib/conference.vue.js
CHANGED
|
@@ -4,5 +4,5 @@ const conference_vue_vue_type_script_setup_true_lang = require("./conference.vue
|
|
|
4
4
|
;/* empty css */
|
|
5
5
|
;/* empty css */
|
|
6
6
|
const _pluginVue_exportHelper = require("./_virtual/_plugin-vue_export-helper.js");
|
|
7
|
-
const ConferenceMainView = /* @__PURE__ */ _pluginVue_exportHelper.default(conference_vue_vue_type_script_setup_true_lang.default, [["__scopeId", "data-v-
|
|
7
|
+
const ConferenceMainView = /* @__PURE__ */ _pluginVue_exportHelper.default(conference_vue_vue_type_script_setup_true_lang.default, [["__scopeId", "data-v-dc8a7460"]]);
|
|
8
8
|
exports.default = ConferenceMainView;
|
package/lib/conference.vue2.js
CHANGED
|
@@ -40,7 +40,8 @@ const _sfc_main = /* @__PURE__ */ Vue.defineComponent({
|
|
|
40
40
|
"on-destroy-room",
|
|
41
41
|
"on-kicked-out-of-room",
|
|
42
42
|
"on-kicked-off-line",
|
|
43
|
-
"on-userSig-expired"
|
|
43
|
+
"on-userSig-expired",
|
|
44
|
+
"on-vote"
|
|
44
45
|
],
|
|
45
46
|
setup(__props, { expose: __expose, emit: __emit }) {
|
|
46
47
|
const { theme } = uikitBaseComponentVue3.useUIKit();
|
|
@@ -217,6 +218,9 @@ const _sfc_main = /* @__PURE__ */ Vue.defineComponent({
|
|
|
217
218
|
function resetStore() {
|
|
218
219
|
roomService.roomService.resetStore();
|
|
219
220
|
}
|
|
221
|
+
const onVote = (data) => {
|
|
222
|
+
emit("on-vote", { code: data.visible, message: "vote" });
|
|
223
|
+
};
|
|
220
224
|
const onStartRoom = () => {
|
|
221
225
|
isShowLoading.value = false;
|
|
222
226
|
emit("on-create-room", { code: 0, message: "create room" });
|
|
@@ -269,7 +273,8 @@ const _sfc_main = /* @__PURE__ */ Vue.defineComponent({
|
|
|
269
273
|
]),
|
|
270
274
|
Vue.withDirectives(Vue.createVNode(Vue.unref(index$2.default), {
|
|
271
275
|
class: "footer",
|
|
272
|
-
onShowOverlay: handleShowOverlay
|
|
276
|
+
onShowOverlay: handleShowOverlay,
|
|
277
|
+
onOnVote: onVote
|
|
273
278
|
}, null, 512), [
|
|
274
279
|
[Vue.vShow, Vue.unref(showRoomTool)]
|
|
275
280
|
]),
|
package/lib/index.js
CHANGED
|
@@ -3928,7 +3928,25 @@ to {
|
|
|
3928
3928
|
}
|
|
3929
3929
|
.footer .mirror-container .mirror-text[data-v-21a63691] {
|
|
3930
3930
|
margin-left: 4px;
|
|
3931
|
-
}.
|
|
3931
|
+
}.more-container[data-v-7493ac70] {
|
|
3932
|
+
padding: 20px;
|
|
3933
|
+
}
|
|
3934
|
+
.more-container .more-title[data-v-7493ac70] {
|
|
3935
|
+
display: flex;
|
|
3936
|
+
align-items: center;
|
|
3937
|
+
}
|
|
3938
|
+
.more-container .more-title .email-icon[data-v-7493ac70] {
|
|
3939
|
+
color: var(--uikit-color-gray-7);
|
|
3940
|
+
}
|
|
3941
|
+
.more-container .more-title .more-notice[data-v-7493ac70] {
|
|
3942
|
+
width: 100%;
|
|
3943
|
+
height: 22px;
|
|
3944
|
+
padding-left: 8px;
|
|
3945
|
+
font-size: 14px;
|
|
3946
|
+
font-weight: 400;
|
|
3947
|
+
line-height: 22px;
|
|
3948
|
+
color: var(--text-color-primary);
|
|
3949
|
+
}.footer-container[data-v-28ae2921] {
|
|
3932
3950
|
position: absolute;
|
|
3933
3951
|
bottom: 0;
|
|
3934
3952
|
display: flex;
|
|
@@ -3942,25 +3960,25 @@ to {
|
|
|
3942
3960
|
background-color: var(--bg-color-topbar);
|
|
3943
3961
|
box-shadow: 0 -8px 30px var(--uikit-color-black-8);
|
|
3944
3962
|
}
|
|
3945
|
-
.footer-container .left-container[data-v-
|
|
3963
|
+
.footer-container .left-container[data-v-28ae2921] {
|
|
3946
3964
|
display: flex;
|
|
3947
3965
|
align-items: center;
|
|
3948
3966
|
height: 100%;
|
|
3949
3967
|
}
|
|
3950
|
-
.footer-container .left-container .left-container-item[data-v-
|
|
3968
|
+
.footer-container .left-container .left-container-item[data-v-28ae2921]:not(:first-child) {
|
|
3951
3969
|
margin-left: 1rem;
|
|
3952
3970
|
}
|
|
3953
|
-
.footer-container .center-container[data-v-
|
|
3971
|
+
.footer-container .center-container[data-v-28ae2921] {
|
|
3954
3972
|
position: relative;
|
|
3955
3973
|
display: flex;
|
|
3956
3974
|
align-items: center;
|
|
3957
3975
|
height: 100%;
|
|
3958
3976
|
margin: 0 auto;
|
|
3959
3977
|
}
|
|
3960
|
-
.footer-container .center-container .center-container-item[data-v-
|
|
3978
|
+
.footer-container .center-container .center-container-item[data-v-28ae2921]:not(:first-child) {
|
|
3961
3979
|
margin-left: 16px;
|
|
3962
3980
|
}
|
|
3963
|
-
.footer-container .right-container[data-v-
|
|
3981
|
+
.footer-container .right-container[data-v-28ae2921] {
|
|
3964
3982
|
display: flex;
|
|
3965
3983
|
align-items: center;
|
|
3966
3984
|
height: 100%;
|
|
@@ -8977,7 +8995,7 @@ body, html {
|
|
|
8977
8995
|
}
|
|
8978
8996
|
.tui-room :not([class|=el]) {
|
|
8979
8997
|
transition: background-color 0.3s, color 0.3s, box-shadow 0.3s;
|
|
8980
|
-
}.tui-room[data-v-
|
|
8998
|
+
}.tui-room[data-v-dc8a7460] {
|
|
8981
8999
|
position: relative;
|
|
8982
9000
|
display: flex;
|
|
8983
9001
|
flex-direction: column;
|
|
@@ -8989,7 +9007,7 @@ body, html {
|
|
|
8989
9007
|
text-align: left;
|
|
8990
9008
|
background-color: var(--bg-color-topbar);
|
|
8991
9009
|
}
|
|
8992
|
-
.tui-room .header[data-v-
|
|
9010
|
+
.tui-room .header[data-v-dc8a7460] {
|
|
8993
9011
|
position: absolute;
|
|
8994
9012
|
top: 0;
|
|
8995
9013
|
left: 0;
|
|
@@ -9000,20 +9018,20 @@ body, html {
|
|
|
9000
9018
|
border-bottom: 1px solid var(--stroke-color-primary);
|
|
9001
9019
|
box-shadow: 0 1px 0 var(--uikit-color-black-8);
|
|
9002
9020
|
}
|
|
9003
|
-
.tui-room .content[data-v-
|
|
9021
|
+
.tui-room .content[data-v-dc8a7460] {
|
|
9004
9022
|
position: absolute;
|
|
9005
9023
|
top: 0;
|
|
9006
9024
|
width: 100%;
|
|
9007
9025
|
height: 100%;
|
|
9008
9026
|
background-color: var(--bg-color-topbar);
|
|
9009
9027
|
}
|
|
9010
|
-
.tui-room.tui-room-h5[data-v-
|
|
9028
|
+
.tui-room.tui-room-h5[data-v-dc8a7460] {
|
|
9011
9029
|
width: 100%;
|
|
9012
9030
|
min-width: 350px;
|
|
9013
9031
|
height: 100%;
|
|
9014
9032
|
min-height: 525px;
|
|
9015
9033
|
}
|
|
9016
|
-
#roomContainer.chat-room[data-v-
|
|
9034
|
+
#roomContainer.chat-room[data-v-dc8a7460] {
|
|
9017
9035
|
position: absolute;
|
|
9018
9036
|
top: 0;
|
|
9019
9037
|
right: 0;
|
|
@@ -9025,8 +9043,8 @@ body, html {
|
|
|
9025
9043
|
margin: auto;
|
|
9026
9044
|
border-radius: 10px;
|
|
9027
9045
|
}
|
|
9028
|
-
#roomContainer.tui-room-h5[data-v-
|
|
9029
|
-
#roomContainer .chat-room[data-v-
|
|
9046
|
+
#roomContainer.tui-room-h5[data-v-dc8a7460],
|
|
9047
|
+
#roomContainer .chat-room[data-v-dc8a7460] {
|
|
9030
9048
|
width: 100%;
|
|
9031
9049
|
height: 100%;
|
|
9032
9050
|
}.user-info-container[data-v-9e9aff53] {
|
package/lib/locales/en-US.d.ts
CHANGED
package/lib/locales/en-US.js
CHANGED
package/lib/locales/zh-CN.d.ts
CHANGED
package/lib/locales/zh-CN.js
CHANGED
package/lib/stores/basic.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { LAYOUT } from '../constants/render';
|
|
2
2
|
import { TUINetwork } from '../../../node_modules/@tencentcloud/tuiroom-engine-js';
|
|
3
3
|
|
|
4
|
-
type SideBarType = 'chat' | 'invite' | 'manage-member' | 'more' | 'transfer-leave' | 'apply' | 'aiTranscription' | '';
|
|
4
|
+
type SideBarType = 'chat' | 'invite' | 'manage-member' | 'more' | 'transfer-leave' | 'apply' | 'aiTranscription' | 'vote' | '';
|
|
5
5
|
type SceneType = 'chat' | 'default';
|
|
6
6
|
interface BasicState {
|
|
7
7
|
sdkAppId: number;
|
package/package.json
CHANGED
|
@@ -51,6 +51,10 @@
|
|
|
51
51
|
class="center-container-item"
|
|
52
52
|
@click="handleControlClick('MasterApplyControl')"
|
|
53
53
|
/>
|
|
54
|
+
<voteControl
|
|
55
|
+
class="center-container-item"
|
|
56
|
+
@click="handleControlClick('voteControl')"
|
|
57
|
+
/>
|
|
54
58
|
<more-control
|
|
55
59
|
class="center-container-item"
|
|
56
60
|
@click="handleControlClick('moreControl')"
|
|
@@ -93,7 +97,7 @@ import VirtualBackground from '../VirtualBackground.vue';
|
|
|
93
97
|
import AIControl from '../AIControl.vue';
|
|
94
98
|
import BasicBeauty from '../BasicBeauty.vue';
|
|
95
99
|
import bus from '../../../hooks/useMitt';
|
|
96
|
-
|
|
100
|
+
import voteControl from '../voteControl.vue';
|
|
97
101
|
import useRoomFooter from './useRoomFooterHooks';
|
|
98
102
|
import { isElectron } from '../../../utils/environment';
|
|
99
103
|
const { roomStore, isMaster, isAdmin, isAudience } = useRoomFooter();
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="more-container">
|
|
3
|
+
<icon-button
|
|
4
|
+
:is-active="sidebarName === 'vote'"
|
|
5
|
+
:title="t('Vote')"
|
|
6
|
+
@click-icon="toggleToolBox"
|
|
7
|
+
>
|
|
8
|
+
<IconAIIcon size="24" />
|
|
9
|
+
</icon-button>
|
|
10
|
+
测试
|
|
11
|
+
<div class="tool-box" v-if="!isSidebarOpen && showToolBox">
|
|
12
|
+
123
|
|
13
|
+
<slot></slot>
|
|
14
|
+
</div>
|
|
15
|
+
</div>
|
|
16
|
+
</template>
|
|
17
|
+
|
|
18
|
+
<script setup lang="ts">
|
|
19
|
+
import { roomService } from '../../services';
|
|
20
|
+
import { defineEmits, ref,computed,watch } from 'vue';
|
|
21
|
+
import { useI18n } from '../../locales';
|
|
22
|
+
const { basicStore } = roomService;
|
|
23
|
+
const isSidebarOpen = computed(() => basicStore.isSidebarOpen);
|
|
24
|
+
const sidebarName = computed(() => basicStore.sidebarName);
|
|
25
|
+
const { t } = useI18n();
|
|
26
|
+
const showToolBox = ref(false);
|
|
27
|
+
watch(isSidebarOpen, newValue => {
|
|
28
|
+
showToolBox.value = newValue && false;
|
|
29
|
+
});
|
|
30
|
+
const emit = defineEmits(['on-vote']);
|
|
31
|
+
function toggleToolBox() {
|
|
32
|
+
showToolBox.value = !showToolBox.value;
|
|
33
|
+
emit('on-vote', {
|
|
34
|
+
name: 'onVote',
|
|
35
|
+
visible: showToolBox.value,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
</script>
|
|
40
|
+
|
|
41
|
+
<style lang="scss" scoped>
|
|
42
|
+
.more-container {
|
|
43
|
+
padding: 20px;
|
|
44
|
+
|
|
45
|
+
.more-title {
|
|
46
|
+
display: flex;
|
|
47
|
+
align-items: center;
|
|
48
|
+
|
|
49
|
+
.email-icon {
|
|
50
|
+
color: var(--uikit-color-gray-7);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.more-notice {
|
|
54
|
+
width: 100%;
|
|
55
|
+
height: 22px;
|
|
56
|
+
padding-left: 8px;
|
|
57
|
+
font-size: 14px;
|
|
58
|
+
font-weight: 400;
|
|
59
|
+
line-height: 22px;
|
|
60
|
+
color: var(--text-color-primary);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
}
|
|
65
|
+
</style>
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
:size="400"
|
|
9
9
|
>
|
|
10
10
|
<chat v-if="sidebarName == 'chat'" />
|
|
11
|
+
<room-vote v-if="sidebarName == 'vote'" />
|
|
11
12
|
<room-more v-if="sidebarName == 'more'" />
|
|
12
13
|
<manage-member v-if="sidebarName == 'manage-member'" />
|
|
13
14
|
<AITranscription v-if="sidebarName == 'aiTranscription'" />
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="contact-container-main">
|
|
3
|
+
<div class="contact-title-main">
|
|
4
|
+
<div>{{ t('Contact us') }}</div>
|
|
5
|
+
<span v-tap="handleCloseContact" class="cancel">{{ t('Cancel') }}</span>
|
|
6
|
+
</div>
|
|
7
|
+
<div
|
|
8
|
+
v-for="item in contactContentList"
|
|
9
|
+
:key="item.id"
|
|
10
|
+
class="contact-content-main"
|
|
11
|
+
>
|
|
12
|
+
<span class="contact-title">{{ t(item.title) }}</span>
|
|
13
|
+
<span class="contact-content">{{ item.content }}</span>
|
|
14
|
+
<IconCopy v-tap="() => onCopy(item.copyLink)" class="copy" />
|
|
15
|
+
</div>
|
|
16
|
+
<span class="contact-bottom">
|
|
17
|
+
{{
|
|
18
|
+
t(
|
|
19
|
+
'If you have any questions, please feel free to join our QQ group or send an email'
|
|
20
|
+
)
|
|
21
|
+
}}
|
|
22
|
+
</span>
|
|
23
|
+
</div>
|
|
24
|
+
</template>
|
|
25
|
+
|
|
26
|
+
<script setup lang="ts">
|
|
27
|
+
import useRoomMoreControl from './useRoomMoreHooks';
|
|
28
|
+
import { IconCopy } from '@tencentcloud/uikit-base-component-vue3';
|
|
29
|
+
import vTap from '../../directives/vTap';
|
|
30
|
+
|
|
31
|
+
const { t, onCopy, contactContentList } = useRoomMoreControl();
|
|
32
|
+
|
|
33
|
+
const emit = defineEmits(['on-close-contact']);
|
|
34
|
+
|
|
35
|
+
function handleCloseContact() {
|
|
36
|
+
emit('on-close-contact');
|
|
37
|
+
}
|
|
38
|
+
</script>
|
|
39
|
+
|
|
40
|
+
<style lang="scss" scoped>
|
|
41
|
+
span {
|
|
42
|
+
padding-right: 5px;
|
|
43
|
+
font-size: 12px;
|
|
44
|
+
font-weight: 500;
|
|
45
|
+
line-height: 17px;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.contact-container-main {
|
|
49
|
+
position: fixed;
|
|
50
|
+
bottom: 0;
|
|
51
|
+
display: flex;
|
|
52
|
+
flex-direction: column;
|
|
53
|
+
width: 100%;
|
|
54
|
+
padding-bottom: 4vh;
|
|
55
|
+
border-radius: 15px 15px 0 0;
|
|
56
|
+
animation-name: popup;
|
|
57
|
+
animation-duration: 200ms;
|
|
58
|
+
background-color: var(--bg-color-operate);
|
|
59
|
+
|
|
60
|
+
@keyframes popup {
|
|
61
|
+
from {
|
|
62
|
+
transform: scaleY(0);
|
|
63
|
+
transform-origin: bottom;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
to {
|
|
67
|
+
transform: scaleY(1);
|
|
68
|
+
transform-origin: bottom;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.contact-title-main {
|
|
73
|
+
display: flex;
|
|
74
|
+
flex-direction: row;
|
|
75
|
+
align-items: center;
|
|
76
|
+
padding: 30px 0 20px 25px;
|
|
77
|
+
font-family: 'PingFang SC';
|
|
78
|
+
font-size: 20px;
|
|
79
|
+
font-style: normal;
|
|
80
|
+
font-weight: 500;
|
|
81
|
+
line-height: 24px;
|
|
82
|
+
color: var(--text-color-primary);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.contact-content-main {
|
|
86
|
+
display: flex;
|
|
87
|
+
flex-direction: row;
|
|
88
|
+
align-items: center;
|
|
89
|
+
width: 90%;
|
|
90
|
+
height: 15%;
|
|
91
|
+
padding: 0 0 0 25px;
|
|
92
|
+
margin-bottom: 10px;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.contact-title,
|
|
96
|
+
.contact-content {
|
|
97
|
+
width: 28%;
|
|
98
|
+
font-family: 'PingFang SC';
|
|
99
|
+
font-size: 14px;
|
|
100
|
+
font-style: normal;
|
|
101
|
+
font-weight: 400;
|
|
102
|
+
line-height: 20px;
|
|
103
|
+
white-space: nowrap;
|
|
104
|
+
color: var(--text-color-primary);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.contact-content {
|
|
108
|
+
width: 62%;
|
|
109
|
+
overflow: hidden;
|
|
110
|
+
font-size: 14px;
|
|
111
|
+
text-overflow: ellipsis;
|
|
112
|
+
white-space: nowrap;
|
|
113
|
+
color: var(--text-color-secondary);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.contact-bottom {
|
|
117
|
+
width: 90%;
|
|
118
|
+
padding-left: 40px;
|
|
119
|
+
font-family: 'PingFang SC';
|
|
120
|
+
font-size: 12px;
|
|
121
|
+
font-style: normal;
|
|
122
|
+
font-weight: 400;
|
|
123
|
+
line-height: 17px;
|
|
124
|
+
text-align: center;
|
|
125
|
+
color: var(--text-color-secondary);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.copy {
|
|
129
|
+
margin-left: 30px;
|
|
130
|
+
color: var(--text-color-link);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.cancel {
|
|
135
|
+
flex: 1;
|
|
136
|
+
padding-right: 30px;
|
|
137
|
+
font-size: 16px;
|
|
138
|
+
font-weight: 400;
|
|
139
|
+
text-align: end;
|
|
140
|
+
}
|
|
141
|
+
</style>
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="more-container">
|
|
3
|
+
<div class="more-title">
|
|
4
|
+
<IconEmail class="email-icon" />
|
|
5
|
+
<div class="more-notice">
|
|
6
|
+
{{ t('If you have any questions, please email us.') }}
|
|
7
|
+
</div>
|
|
8
|
+
</div>
|
|
9
|
+
<div v-if="isZH" class="more-item">
|
|
10
|
+
<div class="item-title">{{ t('Join our product discussion group') }}</div>
|
|
11
|
+
<TUIButton @click="handleClick">{{ t('Join now') }}</TUIButton>
|
|
12
|
+
</div>
|
|
13
|
+
<div class="more-item">
|
|
14
|
+
<div class="item-title">{{ t('Our email address') }}</div>
|
|
15
|
+
<div class="more-content">{{ email }}</div>
|
|
16
|
+
<IconCopy class="copy-icon" @click="onCopy(email)" />
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
</template>
|
|
20
|
+
|
|
21
|
+
<script setup lang="ts">
|
|
22
|
+
import {
|
|
23
|
+
TUIButton,
|
|
24
|
+
IconCopy,
|
|
25
|
+
IconEmail,
|
|
26
|
+
} from '@tencentcloud/uikit-base-component-vue3';
|
|
27
|
+
import useRoomMoreControl from './useRoomMoreHooks';
|
|
28
|
+
|
|
29
|
+
const { t, onCopy, handleClick, email, isZH } = useRoomMoreControl();
|
|
30
|
+
</script>
|
|
31
|
+
|
|
32
|
+
<style lang="scss" scoped>
|
|
33
|
+
.more-container {
|
|
34
|
+
padding: 20px;
|
|
35
|
+
|
|
36
|
+
.more-title {
|
|
37
|
+
display: flex;
|
|
38
|
+
align-items: center;
|
|
39
|
+
|
|
40
|
+
.email-icon {
|
|
41
|
+
color: var(--uikit-color-gray-7);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.more-notice {
|
|
45
|
+
width: 100%;
|
|
46
|
+
height: 22px;
|
|
47
|
+
padding-left: 8px;
|
|
48
|
+
font-size: 14px;
|
|
49
|
+
font-weight: 400;
|
|
50
|
+
line-height: 22px;
|
|
51
|
+
color: var(--text-color-primary);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.more-item {
|
|
56
|
+
position: relative;
|
|
57
|
+
display: flex;
|
|
58
|
+
flex-direction: column;
|
|
59
|
+
|
|
60
|
+
&:not(:first-child) {
|
|
61
|
+
margin-top: 20px;
|
|
62
|
+
|
|
63
|
+
.item-title {
|
|
64
|
+
width: 100%;
|
|
65
|
+
padding-bottom: 8px;
|
|
66
|
+
font-size: 14px;
|
|
67
|
+
font-weight: 400;
|
|
68
|
+
line-height: 22px;
|
|
69
|
+
color: var(--text-color-primary);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.more-content {
|
|
73
|
+
position: relative;
|
|
74
|
+
box-sizing: border-box;
|
|
75
|
+
display: inline-block;
|
|
76
|
+
flex: 1;
|
|
77
|
+
height: 42px;
|
|
78
|
+
padding: 10px 30px 10px 16px;
|
|
79
|
+
overflow: hidden;
|
|
80
|
+
font-size: 14px;
|
|
81
|
+
font-weight: 500;
|
|
82
|
+
line-height: 22px;
|
|
83
|
+
text-overflow: ellipsis;
|
|
84
|
+
white-space: nowrap;
|
|
85
|
+
border-radius: 8px;
|
|
86
|
+
outline: none;
|
|
87
|
+
transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
|
|
88
|
+
color: var(--text-color-primary);
|
|
89
|
+
background-color: var(--bg-color-input);
|
|
90
|
+
border: 1px solid var(--stroke-color-module);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.copy-icon {
|
|
94
|
+
position: absolute;
|
|
95
|
+
top: 45px;
|
|
96
|
+
right: 10px;
|
|
97
|
+
display: flex;
|
|
98
|
+
align-items: center;
|
|
99
|
+
justify-content: center;
|
|
100
|
+
cursor: pointer;
|
|
101
|
+
color: var(--text-color-link);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
</style>
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { computed } from 'vue';
|
|
2
|
+
import { TUIToast, TOAST_TYPE } from '@tencentcloud/uikit-base-component-vue3';
|
|
3
|
+
import { useI18n } from '../../locales';
|
|
4
|
+
import { clipBoard } from '../../utils/utils';
|
|
5
|
+
import i18n from '../../locales/index';
|
|
6
|
+
|
|
7
|
+
export default function useRoomMoreHooks() {
|
|
8
|
+
const { t } = useI18n();
|
|
9
|
+
|
|
10
|
+
const groupNumber = '770645461';
|
|
11
|
+
const email = 'chaooliang@tencent.com';
|
|
12
|
+
|
|
13
|
+
async function onCopy(value: string | number) {
|
|
14
|
+
try {
|
|
15
|
+
await clipBoard(value);
|
|
16
|
+
TUIToast({
|
|
17
|
+
message: t('Copied successfully'),
|
|
18
|
+
type: TOAST_TYPE.SUCCESS,
|
|
19
|
+
});
|
|
20
|
+
} catch (error) {
|
|
21
|
+
TUIToast({
|
|
22
|
+
message: t('Copied failure'),
|
|
23
|
+
type: TOAST_TYPE.ERROR,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const isZH = computed(() => i18n.global.locale.value === 'zh-CN');
|
|
29
|
+
|
|
30
|
+
const contactContentList = [
|
|
31
|
+
{ id: 1, title: 'group chat', content: groupNumber, copyLink: groupNumber },
|
|
32
|
+
{ id: 2, title: 'Email', content: email, copyLink: email },
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
const handleClick = () => {
|
|
36
|
+
window.open('https://zhiliao.qq.com/s/c5GY7HIM62CK', '_blank');
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
return {
|
|
40
|
+
t,
|
|
41
|
+
onCopy,
|
|
42
|
+
contactContentList,
|
|
43
|
+
email,
|
|
44
|
+
handleClick,
|
|
45
|
+
isZH,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
v-show="showRoomTool"
|
|
17
17
|
class="footer"
|
|
18
18
|
@show-overlay="handleShowOverlay"
|
|
19
|
+
@on-vote="onVote"
|
|
19
20
|
/>
|
|
20
21
|
<room-sidebar />
|
|
21
22
|
<room-setting />
|
|
@@ -127,6 +128,7 @@ const emit = defineEmits([
|
|
|
127
128
|
'on-kicked-out-of-room',
|
|
128
129
|
'on-kicked-off-line',
|
|
129
130
|
'on-userSig-expired',
|
|
131
|
+
'on-vote',
|
|
130
132
|
]);
|
|
131
133
|
|
|
132
134
|
const basicStore = useBasicStore();
|
|
@@ -315,6 +317,9 @@ function resetStore() {
|
|
|
315
317
|
roomService.resetStore();
|
|
316
318
|
}
|
|
317
319
|
|
|
320
|
+
const onVote = (data: { name: string; visible: boolean }) => {
|
|
321
|
+
emit('on-vote', { code: data.visible, message: 'vote' });
|
|
322
|
+
};
|
|
318
323
|
const onStartRoom = () => {
|
|
319
324
|
isShowLoading.value = false;
|
|
320
325
|
emit('on-create-room', { code: 0, message: 'create room' });
|