@ndscnj/roomkit-web-vue3 25.12.23181 → 25.12.24111

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 (70) hide show
  1. package/es/components/RoomFooter/index/index.d.ts +13 -3
  2. package/es/components/RoomFooter/index/indexPC.vue.d.ts +5 -1
  3. package/es/components/RoomFooter/index/indexPC.vue.mjs +1 -1
  4. package/es/components/RoomFooter/index/indexPC.vue2.mjs +11 -4
  5. package/es/components/RoomFooter/voteControl/VoteControlH5.vue.d.ts +6 -0
  6. package/es/components/RoomFooter/voteControl/VoteControlH5.vue.mjs +7 -0
  7. package/es/components/RoomFooter/voteControl/VoteControlH5.vue2.mjs +105 -0
  8. package/es/components/RoomFooter/voteControl/VoteControlPC.vue.d.ts +6 -0
  9. package/es/components/RoomFooter/voteControl/VoteControlPC.vue.mjs +55 -0
  10. package/es/components/RoomFooter/voteControl/VoteControlPC.vue2.mjs +4 -0
  11. package/es/components/RoomFooter/voteControl/index.d.ts +10 -0
  12. package/es/components/RoomFooter/voteControl/index.mjs +7 -0
  13. package/es/components/RoomFooter/voteControl/useVoteControlHooks.mjs +22 -0
  14. package/es/components/RoomInvite/useRoomInviteHooks.d.ts +1 -1
  15. package/es/components/RoomSidebar/useSideBarHooks.d.ts +1 -1
  16. package/es/components/RoomVote/index.d.ts +17 -1
  17. package/es/components/RoomVote/indexPC.vue.d.ts +10 -1
  18. package/es/components/RoomVote/indexPC.vue.mjs +1 -1
  19. package/es/components/RoomVote/indexPC.vue2.mjs +6 -2
  20. package/es/conference.vue.mjs +1 -1
  21. package/es/conference.vue2.mjs +1 -0
  22. package/es/constants/icon.d.ts +2 -0
  23. package/es/constants/icon.mjs +2 -0
  24. package/es/index.mjs +54 -34
  25. package/es/locales/zh-CN.mjs +1 -1
  26. package/es/stores/basic.d.ts +1 -1
  27. package/lib/components/RoomFooter/index/index.d.ts +13 -3
  28. package/lib/components/RoomFooter/index/indexPC.vue.d.ts +5 -1
  29. package/lib/components/RoomFooter/index/indexPC.vue.js +1 -1
  30. package/lib/components/RoomFooter/index/indexPC.vue2.js +15 -8
  31. package/lib/components/RoomFooter/voteControl/VoteControlH5.vue.d.ts +6 -0
  32. package/lib/components/RoomFooter/voteControl/VoteControlH5.vue.js +7 -0
  33. package/lib/components/RoomFooter/voteControl/VoteControlH5.vue2.js +105 -0
  34. package/lib/components/RoomFooter/voteControl/VoteControlPC.vue.d.ts +6 -0
  35. package/lib/components/RoomFooter/voteControl/VoteControlPC.vue.js +55 -0
  36. package/lib/components/RoomFooter/voteControl/VoteControlPC.vue2.js +4 -0
  37. package/lib/components/RoomFooter/voteControl/index.d.ts +10 -0
  38. package/lib/components/RoomFooter/voteControl/index.js +7 -0
  39. package/lib/components/RoomFooter/voteControl/useVoteControlHooks.js +22 -0
  40. package/lib/components/RoomInvite/useRoomInviteHooks.d.ts +1 -1
  41. package/lib/components/RoomSidebar/useSideBarHooks.d.ts +1 -1
  42. package/lib/components/RoomVote/index.d.ts +17 -1
  43. package/lib/components/RoomVote/indexPC.vue.d.ts +10 -1
  44. package/lib/components/RoomVote/indexPC.vue.js +1 -1
  45. package/lib/components/RoomVote/indexPC.vue2.js +5 -1
  46. package/lib/conference.vue.js +1 -1
  47. package/lib/conference.vue2.js +1 -0
  48. package/lib/constants/icon.d.ts +2 -0
  49. package/lib/constants/icon.js +2 -0
  50. package/lib/index.js +54 -34
  51. package/lib/locales/zh-CN.js +1 -1
  52. package/lib/stores/basic.d.ts +1 -1
  53. package/package.json +1 -1
  54. package/src/TUIRoom/components/RoomFooter/index/indexPC.vue +8 -1
  55. package/src/TUIRoom/components/RoomFooter/voteControl/VoteControlH5.vue +122 -0
  56. package/src/TUIRoom/components/RoomFooter/voteControl/VoteControlPC.vue +35 -0
  57. package/src/TUIRoom/components/RoomFooter/voteControl/index.ts +8 -0
  58. package/src/TUIRoom/components/RoomFooter/voteControl/useVoteControlHooks.ts +23 -0
  59. package/src/TUIRoom/components/RoomFooter/voteControl.vue +30 -33
  60. package/src/TUIRoom/components/RoomVote/indexPC.vue +4 -1
  61. package/src/TUIRoom/conference.vue +1 -0
  62. package/src/TUIRoom/constants/icon.ts +2 -0
  63. package/src/TUIRoom/locales/zh-CN.ts +1 -1
  64. package/src/TUIRoom/stores/basic.ts +1 -1
  65. package/es/components/RoomFooter/voteControl.vue.d.ts +0 -15
  66. package/es/components/RoomFooter/voteControl.vue.mjs +0 -7
  67. package/es/components/RoomFooter/voteControl.vue2.mjs +0 -65
  68. package/lib/components/RoomFooter/voteControl.vue.d.ts +0 -15
  69. package/lib/components/RoomFooter/voteControl.vue.js +0 -7
  70. package/lib/components/RoomFooter/voteControl.vue2.js +0 -65
@@ -14,6 +14,7 @@ const _hoisted_5 = { class: "item-title" };
14
14
  const _hoisted_6 = { class: "more-item" };
15
15
  const _hoisted_7 = { class: "item-title" };
16
16
  const _hoisted_8 = { class: "more-content" };
17
+ const _hoisted_9 = { class: "contact-container" };
17
18
  const _sfc_main = /* @__PURE__ */ Vue.defineComponent({
18
19
  __name: "indexPC",
19
20
  setup(__props) {
@@ -22,7 +23,7 @@ const _sfc_main = /* @__PURE__ */ Vue.defineComponent({
22
23
  return Vue.openBlock(), Vue.createElementBlock("div", _hoisted_1, [
23
24
  Vue.createElementVNode("div", _hoisted_2, [
24
25
  Vue.createVNode(Vue.unref(uikitBaseComponentVue3.IconEmail), { class: "email-icon" }),
25
- Vue.createElementVNode("div", _hoisted_3, Vue.toDisplayString(Vue.unref(t)("If you have any questions, please email us.")), 1)
26
+ Vue.createElementVNode("div", _hoisted_3, Vue.toDisplayString(Vue.unref(t)("Vote")), 1)
26
27
  ]),
27
28
  Vue.unref(isZH) ? (Vue.openBlock(), Vue.createElementBlock("div", _hoisted_4, [
28
29
  Vue.createElementVNode("div", _hoisted_5, Vue.toDisplayString(Vue.unref(t)("Join our product discussion group")), 1),
@@ -40,6 +41,9 @@ const _sfc_main = /* @__PURE__ */ Vue.defineComponent({
40
41
  class: "copy-icon",
41
42
  onClick: _cache[0] || (_cache[0] = ($event) => Vue.unref(onCopy)(Vue.unref(email)))
42
43
  })
44
+ ]),
45
+ Vue.createElementVNode("div", _hoisted_9, [
46
+ Vue.renderSlot(_ctx.$slots, "content", {}, void 0, true)
43
47
  ])
44
48
  ]);
45
49
  };
@@ -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-d9ae22c4"]]);
7
+ const ConferenceMainView = /* @__PURE__ */ _pluginVue_exportHelper.default(conference_vue_vue_type_script_setup_true_lang.default, [["__scopeId", "data-v-3b59b436"]]);
8
8
  exports.default = ConferenceMainView;
@@ -219,6 +219,7 @@ const _sfc_main = /* @__PURE__ */ Vue.defineComponent({
219
219
  roomService.roomService.resetStore();
220
220
  }
221
221
  const onVote = (data) => {
222
+ console.log(data, "data222");
222
223
  emit("on-vote", { code: data.visible, message: "vote" });
223
224
  };
224
225
  const onStartRoom = () => {
@@ -20,6 +20,8 @@ export declare enum ICON_NAME {
20
20
  ManageMember = "manage-member",
21
21
  More = "more",
22
22
  MoreActive = "more-active",
23
+ Vote = "vote",
24
+ VoteActive = "vote-active",
23
25
  SettingActive = "setting-active",
24
26
  Setting = "setting",
25
27
  LineArrowUp = "line-arrow-up",
@@ -22,6 +22,8 @@ var ICON_NAME = /* @__PURE__ */ ((ICON_NAME2) => {
22
22
  ICON_NAME2["ManageMember"] = "manage-member";
23
23
  ICON_NAME2["More"] = "more";
24
24
  ICON_NAME2["MoreActive"] = "more-active";
25
+ ICON_NAME2["Vote"] = "vote";
26
+ ICON_NAME2["VoteActive"] = "vote-active";
25
27
  ICON_NAME2["SettingActive"] = "setting-active";
26
28
  ICON_NAME2["Setting"] = "setting";
27
29
  ICON_NAME2["LineArrowUp"] = "line-arrow-up";
package/lib/index.js CHANGED
@@ -3928,25 +3928,45 @@ to {
3928
3928
  }
3929
3929
  .footer .mirror-container .mirror-text[data-v-21a63691] {
3930
3930
  margin-left: 4px;
3931
- }.more-container[data-v-412ed740] {
3932
- padding: 20px;
3931
+ }.show-more-content[data-v-1506794c] {
3932
+ position: absolute;
3933
+ bottom: 15px;
3934
+ left: 5%;
3935
+ width: 90%;
3936
+ height: 17vh;
3937
+ padding: 10px;
3938
+ border-radius: 13px;
3939
+ animation-name: popup-1506794c;
3940
+ animation-duration: 200ms;
3941
+ background-color: var(--bg-color-operate);
3933
3942
  }
3934
- .more-container .more-title[data-v-412ed740] {
3935
- display: flex;
3936
- align-items: center;
3943
+ @keyframes popup-1506794c {
3944
+ from {
3945
+ bottom: 0;
3946
+ }
3947
+ to {
3948
+ bottom: 15px;
3937
3949
  }
3938
- .more-container .more-title .email-icon[data-v-412ed740] {
3939
- color: var(--uikit-color-gray-7);
3940
3950
  }
3941
- .more-container .more-title .more-notice[data-v-412ed740] {
3951
+ .control-compent[data-v-1506794c] {
3952
+ display: flex;
3953
+ }
3954
+ .close[data-v-1506794c] {
3955
+ position: relative;
3956
+ top: 10%;
3957
+ display: flex;
3958
+ align-items: center;
3959
+ justify-content: center;
3942
3960
  width: 100%;
3943
- height: 22px;
3944
- padding-left: 8px;
3945
- font-size: 14px;
3961
+ padding: 10px;
3962
+ font-style: normal;
3946
3963
  font-weight: 400;
3947
- line-height: 22px;
3964
+ line-height: 24px;
3965
+ text-align: center;
3966
+ border-radius: 8px;
3948
3967
  color: var(--text-color-primary);
3949
- }.footer-container[data-v-6b90d75f] {
3968
+ background-color: var(--button-color-secondary-default);
3969
+ }.footer-container[data-v-3a373c3a] {
3950
3970
  position: absolute;
3951
3971
  bottom: 0;
3952
3972
  display: flex;
@@ -3960,25 +3980,25 @@ to {
3960
3980
  background-color: var(--bg-color-topbar);
3961
3981
  box-shadow: 0 -8px 30px var(--uikit-color-black-8);
3962
3982
  }
3963
- .footer-container .left-container[data-v-6b90d75f] {
3983
+ .footer-container .left-container[data-v-3a373c3a] {
3964
3984
  display: flex;
3965
3985
  align-items: center;
3966
3986
  height: 100%;
3967
3987
  }
3968
- .footer-container .left-container .left-container-item[data-v-6b90d75f]:not(:first-child) {
3988
+ .footer-container .left-container .left-container-item[data-v-3a373c3a]:not(:first-child) {
3969
3989
  margin-left: 1rem;
3970
3990
  }
3971
- .footer-container .center-container[data-v-6b90d75f] {
3991
+ .footer-container .center-container[data-v-3a373c3a] {
3972
3992
  position: relative;
3973
3993
  display: flex;
3974
3994
  align-items: center;
3975
3995
  height: 100%;
3976
3996
  margin: 0 auto;
3977
3997
  }
3978
- .footer-container .center-container .center-container-item[data-v-6b90d75f]:not(:first-child) {
3998
+ .footer-container .center-container .center-container-item[data-v-3a373c3a]:not(:first-child) {
3979
3999
  margin-left: 16px;
3980
4000
  }
3981
- .footer-container .right-container[data-v-6b90d75f] {
4001
+ .footer-container .right-container[data-v-3a373c3a] {
3982
4002
  display: flex;
3983
4003
  align-items: center;
3984
4004
  height: 100%;
@@ -5055,17 +5075,17 @@ to {
5055
5075
  font-size: 16px;
5056
5076
  font-weight: 400;
5057
5077
  text-align: end;
5058
- }.more-container[data-v-17479e8d] {
5078
+ }.more-container[data-v-11728c2b] {
5059
5079
  padding: 20px;
5060
5080
  }
5061
- .more-container .more-title[data-v-17479e8d] {
5081
+ .more-container .more-title[data-v-11728c2b] {
5062
5082
  display: flex;
5063
5083
  align-items: center;
5064
5084
  }
5065
- .more-container .more-title .email-icon[data-v-17479e8d] {
5085
+ .more-container .more-title .email-icon[data-v-11728c2b] {
5066
5086
  color: var(--uikit-color-gray-7);
5067
5087
  }
5068
- .more-container .more-title .more-notice[data-v-17479e8d] {
5088
+ .more-container .more-title .more-notice[data-v-11728c2b] {
5069
5089
  width: 100%;
5070
5090
  height: 22px;
5071
5091
  padding-left: 8px;
@@ -5074,15 +5094,15 @@ to {
5074
5094
  line-height: 22px;
5075
5095
  color: var(--text-color-primary);
5076
5096
  }
5077
- .more-container .more-item[data-v-17479e8d] {
5097
+ .more-container .more-item[data-v-11728c2b] {
5078
5098
  position: relative;
5079
5099
  display: flex;
5080
5100
  flex-direction: column;
5081
5101
  }
5082
- .more-container .more-item[data-v-17479e8d]:not(:first-child) {
5102
+ .more-container .more-item[data-v-11728c2b]:not(:first-child) {
5083
5103
  margin-top: 20px;
5084
5104
  }
5085
- .more-container .more-item:not(:first-child) .item-title[data-v-17479e8d] {
5105
+ .more-container .more-item:not(:first-child) .item-title[data-v-11728c2b] {
5086
5106
  width: 100%;
5087
5107
  padding-bottom: 8px;
5088
5108
  font-size: 14px;
@@ -5090,7 +5110,7 @@ to {
5090
5110
  line-height: 22px;
5091
5111
  color: var(--text-color-primary);
5092
5112
  }
5093
- .more-container .more-item:not(:first-child) .more-content[data-v-17479e8d] {
5113
+ .more-container .more-item:not(:first-child) .more-content[data-v-11728c2b] {
5094
5114
  position: relative;
5095
5115
  box-sizing: border-box;
5096
5116
  display: inline-block;
@@ -5110,7 +5130,7 @@ to {
5110
5130
  background-color: var(--bg-color-input);
5111
5131
  border: 1px solid var(--stroke-color-module);
5112
5132
  }
5113
- .more-container .more-item:not(:first-child) .copy-icon[data-v-17479e8d] {
5133
+ .more-container .more-item:not(:first-child) .copy-icon[data-v-11728c2b] {
5114
5134
  position: absolute;
5115
5135
  top: 45px;
5116
5136
  right: 10px;
@@ -9148,7 +9168,7 @@ body, html {
9148
9168
  }
9149
9169
  .tui-room :not([class|=el]) {
9150
9170
  transition: background-color 0.3s, color 0.3s, box-shadow 0.3s;
9151
- }.tui-room[data-v-d9ae22c4] {
9171
+ }.tui-room[data-v-3b59b436] {
9152
9172
  position: relative;
9153
9173
  display: flex;
9154
9174
  flex-direction: column;
@@ -9160,7 +9180,7 @@ body, html {
9160
9180
  text-align: left;
9161
9181
  background-color: var(--bg-color-topbar);
9162
9182
  }
9163
- .tui-room .header[data-v-d9ae22c4] {
9183
+ .tui-room .header[data-v-3b59b436] {
9164
9184
  position: absolute;
9165
9185
  top: 0;
9166
9186
  left: 0;
@@ -9171,20 +9191,20 @@ body, html {
9171
9191
  border-bottom: 1px solid var(--stroke-color-primary);
9172
9192
  box-shadow: 0 1px 0 var(--uikit-color-black-8);
9173
9193
  }
9174
- .tui-room .content[data-v-d9ae22c4] {
9194
+ .tui-room .content[data-v-3b59b436] {
9175
9195
  position: absolute;
9176
9196
  top: 0;
9177
9197
  width: 100%;
9178
9198
  height: 100%;
9179
9199
  background-color: var(--bg-color-topbar);
9180
9200
  }
9181
- .tui-room.tui-room-h5[data-v-d9ae22c4] {
9201
+ .tui-room.tui-room-h5[data-v-3b59b436] {
9182
9202
  width: 100%;
9183
9203
  min-width: 350px;
9184
9204
  height: 100%;
9185
9205
  min-height: 525px;
9186
9206
  }
9187
- #roomContainer.chat-room[data-v-d9ae22c4] {
9207
+ #roomContainer.chat-room[data-v-3b59b436] {
9188
9208
  position: absolute;
9189
9209
  top: 0;
9190
9210
  right: 0;
@@ -9196,8 +9216,8 @@ body, html {
9196
9216
  margin: auto;
9197
9217
  border-radius: 10px;
9198
9218
  }
9199
- #roomContainer.tui-room-h5[data-v-d9ae22c4],
9200
- #roomContainer .chat-room[data-v-d9ae22c4] {
9219
+ #roomContainer.tui-room-h5[data-v-3b59b436],
9220
+ #roomContainer .chat-room[data-v-3b59b436] {
9201
9221
  width: 100%;
9202
9222
  height: 100%;
9203
9223
  }.user-info-container[data-v-9e9aff53] {
@@ -62,7 +62,7 @@ const ZH = {
62
62
  me: "我",
63
63
  Admin: "管理员",
64
64
  RoomOwner: "主持人",
65
- Vote: "表决",
65
+ "Vote": "表决",
66
66
  More: "更多",
67
67
  "AI Assistant": "AI 助手",
68
68
  "AI real-time conference content": "AI 实时会议内容",
@@ -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' | 'vote' | '';
4
+ type SideBarType = 'chat' | 'invite' | 'manage-member' | 'vote' | 'more' | 'transfer-leave' | 'apply' | 'aiTranscription' | '';
5
5
  type SceneType = 'chat' | 'default';
6
6
  interface BasicState {
7
7
  sdkAppId: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ndscnj/roomkit-web-vue3",
3
- "version": "25.12.23181",
3
+ "version": "25.12.24111",
4
4
  "main": "./lib/index.js",
5
5
  "module": "./es/index.mjs",
6
6
  "types": "./es/index.d.ts",
@@ -54,6 +54,7 @@
54
54
  <voteControl
55
55
  class="center-container-item"
56
56
  @click="handleControlClick('voteControl')"
57
+ @on-vote="onVote"
57
58
  >
58
59
  <template #content>
59
60
  <slot name="content"></slot>
@@ -81,6 +82,7 @@
81
82
  </template>
82
83
 
83
84
  <script setup lang="ts">
85
+ import { defineEmits } from "vue";
84
86
  import {
85
87
  AudioSetting,
86
88
  VideoSetting,
@@ -101,13 +103,18 @@ import VirtualBackground from '../VirtualBackground.vue';
101
103
  import AIControl from '../AIControl.vue';
102
104
  import BasicBeauty from '../BasicBeauty.vue';
103
105
  import bus from '../../../hooks/useMitt';
104
- import voteControl from '../voteControl.vue';
106
+ import voteControl from '../voteControl';
105
107
  import useRoomFooter from './useRoomFooterHooks';
106
108
  import { isElectron } from '../../../utils/environment';
107
109
  const { roomStore, isMaster, isAdmin, isAudience } = useRoomFooter();
108
110
  function handleControlClick(name: string) {
109
111
  bus.emit('experience-communication', name);
110
112
  }
113
+ const emit = defineEmits(['on-vote']);
114
+ const onVote = (data: { name: string; visible: boolean }) => {
115
+ console.log(data,"data111")
116
+ emit('on-vote', { code: data.visible, message: 'vote' });
117
+ };
111
118
  </script>
112
119
 
113
120
  <style lang="scss" scoped>
@@ -0,0 +1,122 @@
1
+ <template>
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>
26
+ </div>
27
+ </template>
28
+ <script setup lang="ts">
29
+ import { ref, onMounted, onUnmounted, defineEmits } from 'vue';
30
+ import { IconExtension } from '@tencentcloud/uikit-base-component-vue3';
31
+ import IconButton from '../../common/base/IconButton.vue';
32
+ import userVoteControl from './useVoteControlHooks';
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';
39
+ import { roomService } from '../../../services';
40
+
41
+ const moreControlConfig = roomService.getComponentConfig('MoreControl');
42
+ const showMoreContent = ref(false);
43
+ const moreContentRef = ref();
44
+
45
+ const { t, sidebarName } = userVoteControl();
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;
67
+ }
68
+ }
69
+
70
+ onMounted(() => {
71
+ document?.addEventListener('click', handleDocumentClick, true);
72
+ });
73
+
74
+ onUnmounted(() => {
75
+ document?.removeEventListener('click', handleDocumentClick, true);
76
+ });
77
+ </script>
78
+ <style lang="scss" scoped>
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);
121
+ }
122
+ </style>
@@ -0,0 +1,35 @@
1
+ <template>
2
+ <div v-if="voteControlConfig.visible" class="vote-control-container">
3
+ <icon-button
4
+ :is-active="sidebarName === 'vote'"
5
+ :title="t('Vote')"
6
+ @click-icon="toggleMoreSidebar"
7
+ >
8
+ <IconMore size="24" />
9
+ </icon-button>
10
+ </div>
11
+ </template>
12
+ <script setup lang="ts">
13
+ import { IconMore } from '@tencentcloud/uikit-base-component-vue3';
14
+ import IconButton from '../../common/base/IconButton.vue';
15
+ import userVoteControl from './useVoteControlHooks';
16
+ import { roomService } from '../../../services';
17
+ import { defineEmits } from 'vue';
18
+ const voteControlConfig = roomService.getComponentConfig('VoteControl');
19
+ const { t, basicStore, sidebarName } = userVoteControl();
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;
26
+ }
27
+ basicStore.setSidebarOpenStatus(true);
28
+ basicStore.setSidebarName('vote');
29
+ emit('on-vote', {
30
+ name: 'onVote',
31
+ visible: voteControlConfig.visible,
32
+ });
33
+ }
34
+ </script>
35
+ <style lang="scss" scoped></style>
@@ -0,0 +1,8 @@
1
+ import VoteControlH5 from './VoteControlH5.vue';
2
+ import VoteControlPc from './VoteControlPC.vue';
3
+
4
+ import { isMobile } from '../../../utils/environment';
5
+
6
+ const VoteControl = isMobile ? VoteControlH5 : VoteControlPc;
7
+
8
+ export default VoteControl;
@@ -0,0 +1,23 @@
1
+ import { computed } from 'vue';
2
+ import { useBasicStore } from '../../../stores/basic';
3
+ import { storeToRefs } from 'pinia';
4
+ import { useI18n } from '../../../locales';
5
+ import { ICON_NAME } from '../../../constants/icon';
6
+
7
+ export default function useControl() {
8
+ const { t } = useI18n();
9
+
10
+ const basicStore = useBasicStore();
11
+ const { sidebarName } = storeToRefs(basicStore);
12
+
13
+ const iconName = computed(() =>
14
+ sidebarName.value === 'vote' ? ICON_NAME.VoteActive : ICON_NAME.Vote
15
+ );
16
+
17
+ return {
18
+ t,
19
+ basicStore,
20
+ iconName,
21
+ sidebarName,
22
+ };
23
+ }
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div class="more-container" v-if="voteControlConfig.visible">
2
+ <div class="vote-control-container">
3
3
  <icon-button
4
4
  :is-active="sidebarName === 'vote'"
5
5
  :title="t('Vote')"
@@ -7,19 +7,26 @@
7
7
  >
8
8
  <IconAIIcon size="24" />
9
9
  </icon-button>
10
- {{ sidebarName }}
11
- <div @click="toggleToolBox">测试</div>
12
- <div class="tool-box" v-if="!isSidebarOpen && showToolBox">
13
- 123
10
+ <div class="contact-container" v-if="!isSidebarOpen && showToolBox">
14
11
  <slot name="content"></slot>
12
+ <!-- <room-vote ref="contactRef" @on-close-contact="handleOnCloseContact">
13
+ <template #content>
14
+ <slot name="content"></slot>
15
+ </template>
16
+ </room-vote> -->
15
17
  </div>
16
18
  </div>
17
19
  </template>
18
20
 
19
21
  <script setup lang="ts">
20
- import { roomService } from '../../services';
22
+ import { roomService } from '../../services';
21
23
  import { defineEmits, ref,computed,watch } from 'vue';
22
24
  import { useI18n } from '../../locales';
25
+ import IconButton from '../common/base/IconButton.vue';
26
+ import {
27
+ IconAIIcon,
28
+ } from '@tencentcloud/uikit-base-component-vue3';
29
+ import roomVote from '../RoomVote';
23
30
  const { basicStore } = roomService;
24
31
  const isSidebarOpen = computed(() => basicStore.isSidebarOpen);
25
32
  const sidebarName = computed(() => basicStore.sidebarName);
@@ -28,40 +35,30 @@ const showToolBox = ref(false);
28
35
  watch(isSidebarOpen, newValue => {
29
36
  showToolBox.value = newValue && false;
30
37
  });
31
- const voteControlConfig = roomService.getComponentConfig('VoteControl');
32
38
  const emit = defineEmits(['on-vote']);
33
39
  function toggleToolBox() {
40
+ console.log(showToolBox.value,"0000")
34
41
  showToolBox.value = !showToolBox.value;
35
42
  emit('on-vote', {
36
- name: 'onVote',
37
- visible: showToolBox.value,
38
- });
43
+ name: 'onVote',
44
+ visible: showToolBox.value,
45
+ });
46
+ }
47
+ function handleOnCloseContact() {
48
+ showToolBox.value = false;
39
49
  }
40
-
41
50
  </script>
42
51
 
43
52
  <style lang="scss" scoped>
44
- .more-container {
45
- padding: 20px;
46
-
47
- .more-title {
48
- display: flex;
49
- align-items: center;
50
-
51
- .email-icon {
52
- color: var(--uikit-color-gray-7);
53
- }
54
-
55
- .more-notice {
56
- width: 100%;
57
- height: 22px;
58
- padding-left: 8px;
59
- font-size: 14px;
60
- font-weight: 400;
61
- line-height: 22px;
62
- color: var(--text-color-primary);
63
- }
64
- }
65
-
53
+ .contact-container {
54
+ position: fixed;
55
+ top: 0;
56
+ bottom: 0;
57
+ left: 0;
58
+ z-index: 11;
59
+ box-sizing: border-box;
60
+ width: 100vw;
61
+ height: auto;
62
+ background-color: var(--uikit-color-black-8);
66
63
  }
67
64
  </style>
@@ -3,7 +3,7 @@
3
3
  <div class="more-title">
4
4
  <IconEmail class="email-icon" />
5
5
  <div class="more-notice">
6
- {{ t('If you have any questions, please email us.') }}
6
+ {{ t('Vote') }}
7
7
  </div>
8
8
  </div>
9
9
  <div v-if="isZH" class="more-item">
@@ -15,6 +15,9 @@
15
15
  <div class="more-content">{{ email }}</div>
16
16
  <IconCopy class="copy-icon" @click="onCopy(email)" />
17
17
  </div>
18
+ <div class="contact-container">
19
+ <slot name="content"></slot>
20
+ </div>
18
21
  </div>
19
22
  </template>
20
23
 
@@ -322,6 +322,7 @@ function resetStore() {
322
322
  }
323
323
 
324
324
  const onVote = (data: { name: string; visible: boolean }) => {
325
+ console.log(data,"data222")
325
326
  emit('on-vote', { code: data.visible, message: 'vote' });
326
327
  };
327
328
  const onStartRoom = () => {
@@ -20,6 +20,8 @@ export enum ICON_NAME {
20
20
  ManageMember = 'manage-member',
21
21
  More = 'more',
22
22
  MoreActive = 'more-active',
23
+ Vote = 'vote',
24
+ VoteActive = 'vote-active',
23
25
  SettingActive = 'setting-active',
24
26
  Setting = 'setting',
25
27
  LineArrowUp = 'line-arrow-up',
@@ -66,7 +66,7 @@ export default {
66
66
  me: '我',
67
67
  Admin: '管理员',
68
68
  RoomOwner: '主持人',
69
- Vote: '表决',
69
+ 'Vote': '表决',
70
70
  More: '更多',
71
71
  'AI Assistant': 'AI 助手',
72
72
  'AI real-time conference content': 'AI 实时会议内容',