@ndscnj/roomkit-web-vue3 25.12.2417 → 25.12.2419

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.
Files changed (61) hide show
  1. package/es/components/RoomFooter/VoteControl/MoreControlH5.vue.d.ts +2 -2
  2. package/es/components/RoomFooter/VoteControl/MoreControlH5.vue.mjs +1 -1
  3. package/es/components/RoomFooter/VoteControl/MoreControlH5.vue2.mjs +77 -31
  4. package/es/components/RoomFooter/VoteControl/MoreControlPC.vue.d.ts +1 -5
  5. package/es/components/RoomFooter/VoteControl/MoreControlPC.vue.mjs +1 -1
  6. package/es/components/RoomFooter/VoteControl/MoreControlPC.vue2.mjs +1 -7
  7. package/es/components/RoomFooter/VoteControl/index.d.ts +3 -3
  8. package/es/components/RoomFooter/index/index.d.ts +4 -31
  9. package/es/components/RoomFooter/index/indexH5.vue.d.ts +1 -12
  10. package/es/components/RoomFooter/index/indexH5.vue.mjs +1 -1
  11. package/es/components/RoomFooter/index/indexH5.vue2.mjs +5 -20
  12. package/es/components/RoomSidebar/index.d.ts +1 -17
  13. package/es/components/RoomSidebar/indexH5.vue.d.ts +1 -10
  14. package/es/components/RoomSidebar/indexH5.vue.mjs +1 -1
  15. package/es/components/RoomSidebar/indexH5.vue2.mjs +3 -10
  16. package/es/components/RoomVote/index.d.ts +6 -2
  17. package/es/components/RoomVote/indexH5.vue.d.ts +5 -10
  18. package/es/components/RoomVote/indexH5.vue.mjs +2 -9
  19. package/es/components/RoomVote/indexH5.vue2.mjs +51 -0
  20. package/es/components/RoomVote/indexPC.vue.mjs +1 -1
  21. package/es/components/RoomVote/useRoomMoreHooks.mjs +43 -0
  22. package/es/conference.vue.mjs +1 -1
  23. package/es/conference.vue2.mjs +6 -1
  24. package/es/index.mjs +128 -71
  25. package/lib/components/Chat/index/indexH5.vue.js +1 -1
  26. package/lib/components/ManageMember/MemberItem/indexH5.vue.js +1 -1
  27. package/lib/components/ManageMember/indexH5.vue.js +1 -1
  28. package/lib/components/RoomFooter/VoteControl/MoreControlH5.vue.d.ts +2 -2
  29. package/lib/components/RoomFooter/VoteControl/MoreControlH5.vue.js +1 -1
  30. package/lib/components/RoomFooter/VoteControl/MoreControlH5.vue2.js +76 -30
  31. package/lib/components/RoomFooter/VoteControl/MoreControlPC.vue.d.ts +1 -5
  32. package/lib/components/RoomFooter/VoteControl/MoreControlPC.vue.js +1 -1
  33. package/lib/components/RoomFooter/VoteControl/MoreControlPC.vue2.js +1 -7
  34. package/lib/components/RoomFooter/VoteControl/index.d.ts +3 -3
  35. package/lib/components/RoomFooter/index/index.d.ts +4 -31
  36. package/lib/components/RoomFooter/index/indexH5.vue.d.ts +1 -12
  37. package/lib/components/RoomFooter/index/indexH5.vue.js +2 -2
  38. package/lib/components/RoomFooter/index/indexH5.vue2.js +4 -19
  39. package/lib/components/RoomInvite/indexH5.vue.js +1 -1
  40. package/lib/components/RoomMore/indexH5.vue.js +1 -1
  41. package/lib/components/RoomSidebar/index.d.ts +1 -17
  42. package/lib/components/RoomSidebar/indexH5.vue.d.ts +1 -10
  43. package/lib/components/RoomSidebar/indexH5.vue.js +2 -2
  44. package/lib/components/RoomSidebar/indexH5.vue2.js +2 -9
  45. package/lib/components/RoomVote/index.d.ts +6 -2
  46. package/lib/components/RoomVote/indexH5.vue.d.ts +5 -10
  47. package/lib/components/RoomVote/indexH5.vue.js +2 -9
  48. package/lib/components/RoomVote/indexH5.vue2.js +51 -0
  49. package/lib/components/RoomVote/indexPC.vue.js +1 -1
  50. package/lib/components/RoomVote/useRoomMoreHooks.js +43 -0
  51. package/lib/conference.vue.js +1 -1
  52. package/lib/conference.vue2.js +6 -1
  53. package/lib/index.js +128 -71
  54. package/package.json +1 -1
  55. package/src/TUIRoom/components/RoomFooter/VoteControl/MoreControlH5.vue +108 -26
  56. package/src/TUIRoom/components/RoomFooter/VoteControl/MoreControlPC.vue +6 -10
  57. package/src/TUIRoom/components/RoomFooter/index/indexH5.vue +2 -15
  58. package/src/TUIRoom/components/RoomSidebar/indexH5.vue +0 -5
  59. package/src/TUIRoom/components/RoomVote/indexH5.vue +118 -61
  60. package/src/TUIRoom/components/RoomVote/indexPC.vue +0 -1
  61. package/src/TUIRoom/conference.vue +3 -0
@@ -1,40 +1,122 @@
1
1
  <template>
2
- <div v-if="moreControlConfig.visible" class="more-control-container">
3
- <icon-button
4
- :is-active="sidebarName === 'vote'"
5
- :title="t('Vote')"
6
- @click-icon="toggleMoreSidebar"
7
- >
8
- <img class="ndsc-img-box" src="../../../assets/imgs/vote-icon.png" alt=""/>
9
- </icon-button>
2
+ <div>
3
+ <div v-if="moreControlConfig.visible" class="more-control-container">
4
+ <icon-button
5
+ v-tap="showMore"
6
+ :is-active="sidebarName === 'more'"
7
+ :title="t('More')"
8
+ >
9
+ <IconExtension size="24" />
10
+ </icon-button>
11
+ </div>
12
+ <div v-if="showMoreContent" ref="moreContentRef" class="show-more-content">
13
+ <div class="control-compent">
14
+ <chat-control
15
+ v-if="roomStore.isSpeakAfterTakingSeatMode"
16
+ @click="handleControlClick('chatControl')"
17
+ />
18
+ <contact-control @click="handleControlClick('contactControl')" />
19
+ <invite-control
20
+ @show-overlay="handleShowOverlay"
21
+ @click="handleControlClick('inviteControl')"
22
+ />
23
+ </div>
24
+ <div v-tap="handleCancelControl" class="close">{{ t('Cancel') }}</div>
25
+ </div>
10
26
  </div>
11
27
  </template>
12
28
  <script setup lang="ts">
13
- import { IconMore } from '@tencentcloud/uikit-base-component-vue3';
29
+ import { ref, onMounted, onUnmounted, defineEmits } from 'vue';
30
+ import { IconExtension } from '@tencentcloud/uikit-base-component-vue3';
14
31
  import IconButton from '../../common/base/IconButton.vue';
15
32
  import userMoreControl from './useMoreControlHooks';
33
+ import ChatControl from '../ChatControl.vue';
34
+ import InviteControl from '../InviteControl.vue';
35
+ import ContactControl from '../ContactControl.vue';
36
+ import { useRoomStore } from '../../../stores/room';
37
+ import bus from '../../../hooks/useMitt';
38
+ import vTap from '../../../directives/vTap';
16
39
  import { roomService } from '../../../services';
17
- import { defineEmits} from 'vue';
40
+
18
41
  const moreControlConfig = roomService.getComponentConfig('MoreControl');
19
- const { t, basicStore, sidebarName } = userMoreControl();
20
- const emit = defineEmits(['on-vote']);
21
- function toggleMoreSidebar() {
22
- if (basicStore.setSidebarOpenStatus && basicStore.sidebarName === 'vote') {
23
- basicStore.setSidebarOpenStatus(false);
24
- basicStore.setSidebarName('');
25
- return;
42
+ const showMoreContent = ref(false);
43
+ const moreContentRef = ref();
44
+
45
+ const { t, sidebarName } = userMoreControl();
46
+ const roomStore = useRoomStore();
47
+ const emit = defineEmits(['show-overlay']);
48
+ function showMore() {
49
+ showMoreContent.value = true;
50
+ }
51
+
52
+ function handleCancelControl() {
53
+ showMoreContent.value = false;
54
+ }
55
+ function handleControlClick(name: string) {
56
+ bus.emit('experience-communication', name);
57
+ }
58
+
59
+ function handleShowOverlay(data: { name: string; visible: boolean }) {
60
+ showMoreContent.value = false;
61
+ emit('show-overlay', data);
62
+ }
63
+
64
+ function handleDocumentClick(event: MouseEvent) {
65
+ if (showMoreContent.value && !moreContentRef.value.contains(event.target)) {
66
+ showMoreContent.value = false;
26
67
  }
27
- basicStore.setSidebarOpenStatus(true);
28
- basicStore.setSidebarName('vote');
29
- emit('on-vote', {
30
- name: 'onVote',
31
- visible:basicStore.isSidebarOpen,
32
- });
33
68
  }
69
+
70
+ onMounted(() => {
71
+ document?.addEventListener('click', handleDocumentClick, true);
72
+ });
73
+
74
+ onUnmounted(() => {
75
+ document?.removeEventListener('click', handleDocumentClick, true);
76
+ });
34
77
  </script>
35
78
  <style lang="scss" scoped>
36
- .ndsc-img-box{
37
- width: 24px;
38
- height: 24px
79
+ .show-more-content {
80
+ position: absolute;
81
+ bottom: 15px;
82
+ left: 5%;
83
+ width: 90%;
84
+ height: 17vh;
85
+ padding: 10px;
86
+ border-radius: 13px;
87
+ animation-name: popup;
88
+ animation-duration: 200ms;
89
+ background-color: var(--bg-color-operate);
90
+ }
91
+
92
+ @keyframes popup {
93
+ from {
94
+ bottom: 0;
95
+ }
96
+
97
+ to {
98
+ bottom: 15px;
99
+ }
100
+ }
101
+
102
+ .control-compent {
103
+ display: flex;
104
+ }
105
+
106
+ .close {
107
+ position: relative;
108
+ top: 10%;
109
+ display: flex;
110
+ align-items: center;
111
+ justify-content: center;
112
+ width: 100%;
113
+ padding: 10px;
114
+ font-style: normal;
115
+ font-weight: 400;
116
+ line-height: 24px;
117
+ text-align: center;
118
+ border-radius: 8px;
119
+ color: var(--text-color-primary);
120
+ background-color: var(--button-color-secondary-default);
39
121
  }
40
122
  </style>
@@ -14,10 +14,10 @@ import { IconMore } from '@tencentcloud/uikit-base-component-vue3';
14
14
  import IconButton from '../../common/base/IconButton.vue';
15
15
  import userMoreControl from './useMoreControlHooks';
16
16
  import { roomService } from '../../../services';
17
- import { defineEmits} from 'vue';
17
+
18
18
  const moreControlConfig = roomService.getComponentConfig('MoreControl');
19
19
  const { t, basicStore, sidebarName } = userMoreControl();
20
- const emit = defineEmits(['on-vote']);
20
+
21
21
  function toggleMoreSidebar() {
22
22
  if (basicStore.setSidebarOpenStatus && basicStore.sidebarName === 'vote') {
23
23
  basicStore.setSidebarOpenStatus(false);
@@ -26,15 +26,11 @@ function toggleMoreSidebar() {
26
26
  }
27
27
  basicStore.setSidebarOpenStatus(true);
28
28
  basicStore.setSidebarName('vote');
29
- emit('on-vote', {
30
- name: 'onVote',
31
- visible:basicStore.isSidebarOpen,
32
- });
33
29
  }
34
30
  </script>
35
31
  <style lang="scss" scoped>
36
- .ndsc-img-box{
37
- width: 24px;
38
- height: 24px
39
- }
32
+ .ndsc-img-box{
33
+ width:24px;
34
+ height: 24px
35
+ }
40
36
  </style>
@@ -10,15 +10,6 @@
10
10
  :display-mode="MediaSettingDisplayMode.Icon"
11
11
  v-tap="() => handleControlClick('videoControl')"
12
12
  />
13
- <voteControl
14
- class="center-container-item"
15
- @click="handleControlClick('voteControl')"
16
- @on-vote="onVote"
17
- >
18
- <template #content>
19
- <slot name="content"></slot>
20
- </template>
21
- </voteControl>
22
13
  <chat-control
23
14
  v-if="!roomStore.isSpeakAfterTakingSeatMode"
24
15
  v-tap="() => handleControlClick('chatControl')"
@@ -56,7 +47,6 @@ import MasterApplyControl from '../ManageStageControl.vue';
56
47
  import MemberApplyControl from '../ApplyControl/MemberApplyControl.vue';
57
48
  import MoreControl from '../MoreControl/index';
58
49
  import AIControl from '../AIControl.vue';
59
- import voteControl from '../VoteControl';
60
50
  import bus from '../../../hooks/useMitt';
61
51
  import vTap from '../../../directives/vTap';
62
52
 
@@ -64,11 +54,8 @@ import useRoomFooter from './useRoomFooterHooks';
64
54
 
65
55
  const { roomStore, isMaster, isAdmin, isAudience } = useRoomFooter();
66
56
 
67
- const emit = defineEmits(['show-overlay','on-vote']);
68
- const onVote = (data: { name: string; visible: boolean }) => {
69
- console.log(data,"data111")
70
- emit('on-vote', { code: data.visible, message: 'vote' });
71
- };
57
+ const emit = defineEmits(['show-overlay']);
58
+
72
59
  function handleControlClick(name: string) {
73
60
  bus.emit('experience-communication', name);
74
61
  }
@@ -5,11 +5,6 @@
5
5
  <chat v-if="sidebarName === 'chat'" />
6
6
  <manage-member v-if="sidebarName === 'manage-member'" />
7
7
  <master-apply v-if="sidebarName === 'apply'" />
8
- <room-vote v-if="sidebarName == 'vote'" >
9
- <template #content>
10
- <slot name="content"></slot>
11
- </template>
12
- </room-vote>
13
8
  </div>
14
9
  </template>
15
10
  <template #sidebarFooter>
@@ -1,84 +1,141 @@
1
1
  <template>
2
- <div class="more-container">
3
- <slot name="content"></slot>
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>
4
23
  </div>
5
24
  </template>
6
25
 
7
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
+ }
8
38
  </script>
9
39
 
10
40
  <style lang="scss" scoped>
11
- .more-container {
12
- padding: 20px;
41
+ span {
42
+ padding-right: 5px;
43
+ font-size: 12px;
44
+ font-weight: 500;
45
+ line-height: 17px;
46
+ }
13
47
 
14
- .more-title {
15
- display: flex;
16
- align-items: center;
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);
17
59
 
18
- .email-icon {
19
- color: var(--uikit-color-gray-7);
60
+ @keyframes popup {
61
+ from {
62
+ transform: scaleY(0);
63
+ transform-origin: bottom;
20
64
  }
21
65
 
22
- .more-notice {
23
- width: 100%;
24
- height: 22px;
25
- padding-left: 8px;
26
- font-size: 14px;
27
- font-weight: 400;
28
- line-height: 22px;
29
- color: var(--text-color-primary);
66
+ to {
67
+ transform: scaleY(1);
68
+ transform-origin: bottom;
30
69
  }
31
70
  }
32
71
 
33
- .more-item {
34
- position: relative;
72
+ .contact-title-main {
35
73
  display: flex;
36
- flex-direction: column;
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
+ }
37
84
 
38
- &:not(:first-child) {
39
- margin-top: 20px;
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
+ }
40
94
 
41
- .item-title {
42
- width: 100%;
43
- padding-bottom: 8px;
44
- font-size: 14px;
45
- font-weight: 400;
46
- line-height: 22px;
47
- color: var(--text-color-primary);
48
- }
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
+ }
49
106
 
50
- .more-content {
51
- position: relative;
52
- box-sizing: border-box;
53
- display: inline-block;
54
- flex: 1;
55
- height: 42px;
56
- padding: 10px 30px 10px 16px;
57
- overflow: hidden;
58
- font-size: 14px;
59
- font-weight: 500;
60
- line-height: 22px;
61
- text-overflow: ellipsis;
62
- white-space: nowrap;
63
- border-radius: 8px;
64
- outline: none;
65
- transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
66
- color: var(--text-color-primary);
67
- background-color: var(--bg-color-input);
68
- border: 1px solid var(--stroke-color-module);
69
- }
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
+ }
70
115
 
71
- .copy-icon {
72
- position: absolute;
73
- top: 45px;
74
- right: 10px;
75
- display: flex;
76
- align-items: center;
77
- justify-content: center;
78
- cursor: pointer;
79
- color: var(--text-color-link);
80
- }
81
- }
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);
82
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;
83
140
  }
84
141
  </style>
@@ -9,7 +9,6 @@
9
9
 
10
10
  <style lang="scss" scoped>
11
11
  .more-container {
12
- padding: 20px;
13
12
 
14
13
  .more-title {
15
14
  display: flex;
@@ -18,6 +18,9 @@
18
18
  @show-overlay="handleShowOverlay"
19
19
  @on-vote="onVote"
20
20
  >
21
+ <template #content>
22
+ <slot name="content"></slot>
23
+ </template>
21
24
  </room-footer>
22
25
  <room-sidebar @on-vote="onVote">
23
26
  <template #content>