@tencentcloud/roomkit-electron-vue3 2.4.1 → 2.5.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.
Files changed (430) hide show
  1. package/es/components/Chat/ChatEditor/useChatEditor.mjs +1 -1
  2. package/es/components/Chat/MessageList/index.vue.mjs +1 -1
  3. package/es/components/Chat/MessageList/index.vue2.mjs +5 -1
  4. package/es/components/Chat/MessageList/useMessageListHook.mjs +4 -3
  5. package/es/components/ManageMember/MemberControl/index.vue.mjs +1 -1
  6. package/es/components/ManageMember/MemberControl/index.vue2.mjs +36 -19
  7. package/es/components/ManageMember/MemberControl/useMemberControlHooks.d.ts +6 -1
  8. package/es/components/ManageMember/MemberControl/useMemberControlHooks.mjs +113 -17
  9. package/es/components/ManageMember/MemberItem/useMemberItemHooks.d.ts +1 -0
  10. package/es/components/ManageMember/MemberItem/useMemberItemHooks.mjs +8 -6
  11. package/es/components/ManageMember/MemberItemCommon/MemberInfo.vue.mjs +1 -1
  12. package/es/components/ManageMember/MemberItemCommon/MemberInfo.vue2.mjs +7 -3
  13. package/es/components/ManageMember/index.vue.mjs +1 -1
  14. package/es/components/ManageMember/index.vue2.mjs +58 -7
  15. package/es/components/ManageMember/useIndexHooks.mjs +63 -14
  16. package/es/components/RoomContent/StreamContainer/index.vue.mjs +1 -1
  17. package/es/components/RoomContent/StreamContainer/index.vue2.mjs +10 -9
  18. package/es/components/RoomContent/StreamContainer/useStreamContainerHooks.d.ts +8 -0
  19. package/es/components/RoomContent/StreamContainer/useStreamContainerHooks.mjs +73 -29
  20. package/es/components/RoomContent/StreamRegion/index.vue.d.ts +5 -1
  21. package/es/components/RoomContent/StreamRegion/index.vue.mjs +1 -1
  22. package/es/components/RoomContent/StreamRegion/index.vue2.mjs +29 -5
  23. package/es/components/RoomFooter/ApplyControl/MasterApplyControl/index.vue.mjs +1 -1
  24. package/es/components/RoomFooter/ApplyControl/MasterApplyControl/index.vue2.mjs +10 -4
  25. package/es/components/RoomFooter/ApplyControl/MemberApplyControl.vue2.mjs +2 -2
  26. package/es/components/RoomFooter/AudioControl.vue2.mjs +2 -2
  27. package/es/components/RoomFooter/EndControl/index.vue.mjs +1 -1
  28. package/es/components/RoomFooter/EndControl/index.vue2.mjs +1 -1
  29. package/es/components/RoomFooter/EndControl/useEndControlHooks.mjs +16 -4
  30. package/es/components/RoomFooter/ScreenShareControl/Index.vue.mjs +1 -1
  31. package/es/components/RoomFooter/ScreenShareControl/Index.vue2.mjs +11 -3
  32. package/es/components/RoomFooter/VideoControl.vue.mjs +1 -1
  33. package/es/components/RoomFooter/VideoControl.vue2.mjs +8 -14
  34. package/es/components/RoomHeader/RoomInfo/index.vue2.mjs +2 -2
  35. package/es/components/RoomHeader/UserInfo/index.vue.d.ts +3 -11
  36. package/es/components/RoomHeader/UserInfo/index.vue.mjs +1 -1
  37. package/es/components/RoomHeader/UserInfo/index.vue2.mjs +9 -92
  38. package/es/components/RoomHeader/UserInfo/useUserInfoHooks.d.ts +2 -8
  39. package/es/components/RoomHeader/UserInfo/useUserInfoHooks.mjs +1 -18
  40. package/es/components/RoomHeader/index/NetworkInfo.vue2.mjs +2 -2
  41. package/es/components/RoomHome/RoomControl/index.vue.d.ts +10 -0
  42. package/es/components/RoomHome/RoomControl/index.vue.mjs +1 -1
  43. package/es/components/RoomHome/RoomControl/index.vue2.mjs +153 -120
  44. package/es/components/RoomInvite/index.vue2.mjs +2 -2
  45. package/es/components/RoomMore/index.vue2.mjs +2 -2
  46. package/es/components/RoomSidebar/useSideBarHooks.mjs +3 -2
  47. package/es/components/ScheduleConference/Contacts.vue.d.ts +22 -0
  48. package/es/components/ScheduleConference/Contacts.vue.mjs +7 -0
  49. package/es/components/ScheduleConference/Contacts.vue2.mjs +212 -0
  50. package/es/components/ScheduleConference/DurationTimePicker.vue.d.ts +18 -0
  51. package/es/components/ScheduleConference/DurationTimePicker.vue.mjs +67 -0
  52. package/es/components/ScheduleConference/DurationTimePicker.vue2.mjs +4 -0
  53. package/es/components/ScheduleConference/ScheduleConferencePanel.vue.d.ts +22 -0
  54. package/es/components/ScheduleConference/ScheduleConferencePanel.vue.mjs +7 -0
  55. package/es/components/ScheduleConference/ScheduleConferencePanel.vue2.mjs +613 -0
  56. package/es/components/ScheduleConference/ScheduleConferencePanel.vue3.mjs +1 -0
  57. package/es/components/ScheduleConference/ScheduleRoomControl.vue.d.ts +29 -0
  58. package/es/components/ScheduleConference/ScheduleRoomControl.vue.mjs +7 -0
  59. package/es/components/ScheduleConference/ScheduleRoomControl.vue2.mjs +464 -0
  60. package/es/components/ScheduleConference/ScheduleRoomControl.vue3.mjs +1 -0
  61. package/es/components/{common/base/Input.vue.d.ts → ScheduleConference/ScheduleRoomList.vue.d.ts} +11 -22
  62. package/es/components/ScheduleConference/ScheduleRoomList.vue.mjs +7 -0
  63. package/es/components/ScheduleConference/ScheduleRoomList.vue2.mjs +219 -0
  64. package/es/components/ScheduleConference/ScheduleRoomList.vue3.mjs +1 -0
  65. package/es/components/ScheduleConference/ShareLink.vue.d.ts +24 -0
  66. package/es/components/ScheduleConference/ShareLink.vue.mjs +7 -0
  67. package/es/components/ScheduleConference/ShareLink.vue2.mjs +113 -0
  68. package/es/components/ScheduleConference/ShareLink.vue3.mjs +1 -0
  69. package/es/components/ScheduleConference/TimezonePicker.vue.d.ts +18 -0
  70. package/es/components/ScheduleConference/TimezonePicker.vue.mjs +84 -0
  71. package/es/components/ScheduleConference/TimezonePicker.vue2.mjs +4 -0
  72. package/es/components/common/Avatar.vue.mjs +2 -2
  73. package/es/components/common/DeviceSelect.vue.mjs +1 -1
  74. package/es/components/common/DeviceSelect.vue2.mjs +58 -19
  75. package/es/components/common/Logo.vue.mjs +1 -1
  76. package/es/components/common/Logo.vue2.mjs +3 -3
  77. package/es/components/common/VideoProfile.vue2.mjs +2 -2
  78. package/es/components/common/base/Badge.vue.d.ts +1 -1
  79. package/es/components/common/base/Button.vue.d.ts +2 -2
  80. package/es/components/common/base/Checkbox.vue.d.ts +4 -2
  81. package/es/components/common/base/Checkbox.vue.mjs +2 -2
  82. package/es/components/common/base/Checkbox.vue2.mjs +12 -5
  83. package/es/components/common/base/Datepicker/Datepicker.vue.d.ts +18 -0
  84. package/es/components/common/base/Datepicker/Datepicker.vue.mjs +7 -0
  85. package/es/components/common/base/Datepicker/Datepicker.vue2.mjs +167 -0
  86. package/es/components/common/base/Datepicker/Datepicker.vue3.mjs +1 -0
  87. package/es/components/common/base/Datepicker/Timepicker.vue.d.ts +18 -0
  88. package/es/components/common/base/Datepicker/Timepicker.vue.mjs +66 -0
  89. package/es/components/common/base/Datepicker/Timepicker.vue2.mjs +4 -0
  90. package/es/components/common/base/Dialog/index.vue.d.ts +8 -4
  91. package/es/components/common/base/Dialog/index.vue.mjs +1 -1
  92. package/es/components/common/base/Dialog/index.vue2.mjs +17 -9
  93. package/es/components/common/base/Drawer.vue.d.ts +1 -1
  94. package/es/components/common/base/IconButton.vue.d.ts +2 -2
  95. package/es/components/common/base/Input/index.vue.d.ts +77 -0
  96. package/es/components/common/base/Input/index.vue.mjs +7 -0
  97. package/es/components/common/base/Input/index.vue2.mjs +140 -0
  98. package/es/components/common/base/Input/index.vue3.mjs +1 -0
  99. package/es/components/common/base/Message/Instance.mjs +1 -1
  100. package/es/components/common/base/Message/Message.vue.d.ts +4 -4
  101. package/es/components/common/base/MessageBox/index.d.ts +3 -2
  102. package/es/components/common/base/MessageBox/index.mjs +2 -1
  103. package/es/components/common/base/MessageBox/index.vue.d.ts +6 -1
  104. package/es/components/common/base/MessageBox/index.vue.mjs +1 -1
  105. package/es/components/common/base/MessageBox/index.vue2.mjs +60 -10
  106. package/es/components/common/base/Notification/index.vue.d.ts +2 -2
  107. package/es/components/common/base/Option.vue.d.ts +11 -1
  108. package/es/components/common/base/Option.vue.mjs +1 -1
  109. package/es/components/common/base/Option.vue2.mjs +16 -6
  110. package/es/components/common/base/Select.vue.d.ts +5 -1
  111. package/es/components/common/base/Select.vue.mjs +1 -1
  112. package/es/components/common/base/Select.vue2.mjs +12 -11
  113. package/es/components/common/base/index.d.ts +1 -1
  114. package/es/components/common/icons/AllMembersShareScreenIcon.vue.d.ts +2 -0
  115. package/es/components/common/icons/AllMembersShareScreenIcon.vue.mjs +22 -0
  116. package/es/components/common/icons/CalendarIcon.vue.d.ts +2 -0
  117. package/es/components/common/icons/CalendarIcon.vue.mjs +24 -0
  118. package/es/components/common/icons/CopyIcon.vue.mjs +2 -2
  119. package/es/components/common/icons/EditNameCardIcon.vue.d.ts +2 -0
  120. package/es/components/common/icons/EditNameCardIcon.vue.mjs +21 -0
  121. package/es/components/common/icons/EllipsisIcon.vue.d.ts +2 -0
  122. package/es/components/common/icons/EllipsisIcon.vue.mjs +34 -0
  123. package/es/components/common/icons/HostShareScreenIcon.vue.d.ts +2 -0
  124. package/es/components/common/icons/HostShareScreenIcon.vue.mjs +22 -0
  125. package/es/components/common/icons/LinkIcon.vue.d.ts +2 -0
  126. package/es/components/common/icons/LinkIcon.vue.mjs +36 -0
  127. package/es/components/common/icons/LoadingScheduleIcon.vue.d.ts +2 -0
  128. package/es/components/common/icons/LoadingScheduleIcon.vue.mjs +24 -0
  129. package/es/components/common/icons/ScheduleAttendees.vue.d.ts +6 -0
  130. package/es/components/common/icons/ScheduleAttendees.vue.mjs +25 -0
  131. package/es/components/common/icons/ScheduleAttendees.vue2.mjs +4 -0
  132. package/es/components/common/icons/ScheduleRoomIcon.vue.d.ts +2 -0
  133. package/es/components/common/icons/ScheduleRoomIcon.vue.mjs +24 -0
  134. package/es/components/common/icons/SuccessIcon.vue.d.ts +2 -0
  135. package/es/components/common/icons/SuccessIcon.vue.mjs +32 -0
  136. package/es/components/common/icons/WarningIcon.vue.d.ts +2 -0
  137. package/es/components/common/icons/WarningIcon.vue.mjs +29 -0
  138. package/es/conference.d.ts +2 -0
  139. package/es/conference.mjs +3 -0
  140. package/es/conference.vue.mjs +1 -1
  141. package/es/conference.vue2.mjs +9 -4
  142. package/es/directives/vDblTouch.d.ts +10 -0
  143. package/es/directives/vTap.d.ts +1 -0
  144. package/es/directives/vTap.mjs +30 -3
  145. package/es/extension/chatExtension.mjs +3 -3
  146. package/es/hooks/useDeviceManager.mjs +3 -3
  147. package/es/hooks/useMasterApplyControl.mjs +5 -5
  148. package/es/hooks/useRoomEngine.mjs +4 -4
  149. package/es/index.d.ts +1 -0
  150. package/es/index.mjs +2581 -1743
  151. package/es/locales/en-US.d.ts +75 -0
  152. package/es/locales/en-US.mjs +78 -1
  153. package/es/locales/zh-CN.d.ts +79 -0
  154. package/es/locales/zh-CN.mjs +83 -2
  155. package/es/preConference.vue.d.ts +10 -0
  156. package/es/preConference.vue.mjs +1 -1
  157. package/es/preConference.vue2.mjs +89 -13
  158. package/es/services/function/errorHandler.d.ts +10 -0
  159. package/es/services/function/errorHandler.mjs +158 -0
  160. package/es/services/function/virtualBackground.mjs +4 -3
  161. package/es/services/index.d.ts +1 -0
  162. package/es/services/manager/roomActionManager.d.ts +1 -0
  163. package/es/services/manager/roomActionManager.mjs +10 -18
  164. package/es/services/manager/scheduleConferenceManager.d.ts +113 -0
  165. package/es/services/manager/scheduleConferenceManager.mjs +141 -0
  166. package/es/services/manager/userManager.d.ts +2 -0
  167. package/es/services/manager/userManager.mjs +7 -3
  168. package/es/services/roomService.d.ts +8 -0
  169. package/es/services/roomService.mjs +42 -16
  170. package/es/services/types.d.ts +8 -0
  171. package/es/services/types.mjs +2 -0
  172. package/es/stores/basic.mjs +9 -3
  173. package/es/stores/room.d.ts +2 -0
  174. package/es/stores/room.mjs +55 -24
  175. package/es/utils/adapter.mjs +39 -3
  176. package/es/utils/utils.d.ts +3 -0
  177. package/es/utils/utils.mjs +64 -0
  178. package/lib/components/Chat/ChatEditor/useChatEditor.js +1 -1
  179. package/lib/components/Chat/MessageList/index.vue.js +1 -1
  180. package/lib/components/Chat/MessageList/index.vue2.js +5 -1
  181. package/lib/components/Chat/MessageList/useMessageListHook.js +2 -1
  182. package/lib/components/ManageMember/MemberControl/index.vue.js +1 -1
  183. package/lib/components/ManageMember/MemberControl/index.vue2.js +35 -18
  184. package/lib/components/ManageMember/MemberControl/useMemberControlHooks.d.ts +6 -1
  185. package/lib/components/ManageMember/MemberControl/useMemberControlHooks.js +113 -17
  186. package/lib/components/ManageMember/MemberItem/useMemberItemHooks.d.ts +1 -0
  187. package/lib/components/ManageMember/MemberItem/useMemberItemHooks.js +8 -6
  188. package/lib/components/ManageMember/MemberItemCommon/MemberInfo.vue.js +1 -1
  189. package/lib/components/ManageMember/MemberItemCommon/MemberInfo.vue2.js +5 -1
  190. package/lib/components/ManageMember/index.vue.js +1 -1
  191. package/lib/components/ManageMember/index.vue2.js +57 -6
  192. package/lib/components/ManageMember/useIndexHooks.js +63 -14
  193. package/lib/components/RoomContent/StreamContainer/index.vue.js +1 -1
  194. package/lib/components/RoomContent/StreamContainer/index.vue2.js +10 -9
  195. package/lib/components/RoomContent/StreamContainer/useStreamContainerHooks.d.ts +8 -0
  196. package/lib/components/RoomContent/StreamContainer/useStreamContainerHooks.js +72 -28
  197. package/lib/components/RoomContent/StreamRegion/index.vue.d.ts +5 -1
  198. package/lib/components/RoomContent/StreamRegion/index.vue.js +1 -1
  199. package/lib/components/RoomContent/StreamRegion/index.vue2.js +27 -3
  200. package/lib/components/RoomFooter/ApplyControl/MasterApplyControl/index.vue.js +1 -1
  201. package/lib/components/RoomFooter/ApplyControl/MasterApplyControl/index.vue2.js +8 -2
  202. package/lib/components/RoomFooter/EndControl/index.vue.js +1 -1
  203. package/lib/components/RoomFooter/EndControl/index.vue2.js +1 -1
  204. package/lib/components/RoomFooter/EndControl/useEndControlHooks.js +14 -2
  205. package/lib/components/RoomFooter/ScreenShareControl/Index.vue.js +1 -1
  206. package/lib/components/RoomFooter/ScreenShareControl/Index.vue2.js +9 -1
  207. package/lib/components/RoomFooter/VideoControl.vue.js +1 -1
  208. package/lib/components/RoomFooter/VideoControl.vue2.js +6 -12
  209. package/lib/components/RoomHeader/UserInfo/index.vue.d.ts +3 -11
  210. package/lib/components/RoomHeader/UserInfo/index.vue.js +1 -1
  211. package/lib/components/RoomHeader/UserInfo/index.vue2.js +6 -89
  212. package/lib/components/RoomHeader/UserInfo/useUserInfoHooks.d.ts +2 -8
  213. package/lib/components/RoomHeader/UserInfo/useUserInfoHooks.js +1 -18
  214. package/lib/components/RoomHome/RoomControl/index.vue.d.ts +10 -0
  215. package/lib/components/RoomHome/RoomControl/index.vue.js +1 -1
  216. package/lib/components/RoomHome/RoomControl/index.vue2.js +150 -117
  217. package/lib/components/RoomSidebar/useSideBarHooks.js +3 -2
  218. package/lib/components/ScheduleConference/Contacts.vue.d.ts +22 -0
  219. package/lib/components/ScheduleConference/Contacts.vue.js +7 -0
  220. package/lib/components/ScheduleConference/Contacts.vue2.js +212 -0
  221. package/lib/components/ScheduleConference/DurationTimePicker.vue.d.ts +18 -0
  222. package/lib/components/ScheduleConference/DurationTimePicker.vue.js +67 -0
  223. package/lib/components/ScheduleConference/DurationTimePicker.vue2.js +4 -0
  224. package/lib/components/ScheduleConference/ScheduleConferencePanel.vue.d.ts +22 -0
  225. package/lib/components/ScheduleConference/ScheduleConferencePanel.vue.js +7 -0
  226. package/lib/components/ScheduleConference/ScheduleConferencePanel.vue2.js +613 -0
  227. package/lib/components/ScheduleConference/ScheduleConferencePanel.vue3.js +1 -0
  228. package/lib/components/ScheduleConference/ScheduleRoomControl.vue.d.ts +29 -0
  229. package/lib/components/ScheduleConference/ScheduleRoomControl.vue.js +7 -0
  230. package/lib/components/ScheduleConference/ScheduleRoomControl.vue2.js +464 -0
  231. package/lib/components/ScheduleConference/ScheduleRoomControl.vue3.js +1 -0
  232. package/lib/components/{common/base/Input.vue.d.ts → ScheduleConference/ScheduleRoomList.vue.d.ts} +11 -22
  233. package/lib/components/ScheduleConference/ScheduleRoomList.vue.js +7 -0
  234. package/lib/components/ScheduleConference/ScheduleRoomList.vue2.js +219 -0
  235. package/lib/components/ScheduleConference/ScheduleRoomList.vue3.js +1 -0
  236. package/lib/components/ScheduleConference/ShareLink.vue.d.ts +24 -0
  237. package/lib/components/ScheduleConference/ShareLink.vue.js +7 -0
  238. package/lib/components/ScheduleConference/ShareLink.vue2.js +113 -0
  239. package/lib/components/ScheduleConference/ShareLink.vue3.js +1 -0
  240. package/lib/components/ScheduleConference/TimezonePicker.vue.d.ts +18 -0
  241. package/lib/components/ScheduleConference/TimezonePicker.vue.js +84 -0
  242. package/lib/components/ScheduleConference/TimezonePicker.vue2.js +4 -0
  243. package/lib/components/common/Avatar.vue.js +2 -2
  244. package/lib/components/common/DeviceSelect.vue.js +1 -1
  245. package/lib/components/common/DeviceSelect.vue2.js +57 -18
  246. package/lib/components/common/Logo.vue.js +1 -1
  247. package/lib/components/common/Logo.vue2.js +2 -2
  248. package/lib/components/common/base/Badge.vue.d.ts +1 -1
  249. package/lib/components/common/base/Button.vue.d.ts +2 -2
  250. package/lib/components/common/base/Checkbox.vue.d.ts +4 -2
  251. package/lib/components/common/base/Checkbox.vue.js +2 -2
  252. package/lib/components/common/base/Checkbox.vue2.js +11 -4
  253. package/lib/components/common/base/Datepicker/Datepicker.vue.d.ts +18 -0
  254. package/lib/components/common/base/Datepicker/Datepicker.vue.js +7 -0
  255. package/lib/components/common/base/Datepicker/Datepicker.vue2.js +167 -0
  256. package/lib/components/common/base/Datepicker/Datepicker.vue3.js +1 -0
  257. package/lib/components/common/base/Datepicker/Timepicker.vue.d.ts +18 -0
  258. package/lib/components/common/base/Datepicker/Timepicker.vue.js +66 -0
  259. package/lib/components/common/base/Datepicker/Timepicker.vue2.js +4 -0
  260. package/lib/components/common/base/Dialog/index.vue.d.ts +8 -4
  261. package/lib/components/common/base/Dialog/index.vue.js +1 -1
  262. package/lib/components/common/base/Dialog/index.vue2.js +16 -8
  263. package/lib/components/common/base/Drawer.vue.d.ts +1 -1
  264. package/lib/components/common/base/IconButton.vue.d.ts +2 -2
  265. package/lib/components/common/base/Input/index.vue.d.ts +77 -0
  266. package/lib/components/common/base/Input/index.vue.js +7 -0
  267. package/lib/components/common/base/Input/index.vue2.js +140 -0
  268. package/lib/components/common/base/Input/index.vue3.js +1 -0
  269. package/lib/components/common/base/Message/Instance.js +1 -1
  270. package/lib/components/common/base/Message/Message.vue.d.ts +4 -4
  271. package/lib/components/common/base/MessageBox/index.d.ts +3 -2
  272. package/lib/components/common/base/MessageBox/index.js +2 -1
  273. package/lib/components/common/base/MessageBox/index.vue.d.ts +6 -1
  274. package/lib/components/common/base/MessageBox/index.vue.js +1 -1
  275. package/lib/components/common/base/MessageBox/index.vue2.js +59 -9
  276. package/lib/components/common/base/Notification/index.vue.d.ts +2 -2
  277. package/lib/components/common/base/Option.vue.d.ts +11 -1
  278. package/lib/components/common/base/Option.vue.js +1 -1
  279. package/lib/components/common/base/Option.vue2.js +15 -5
  280. package/lib/components/common/base/Select.vue.d.ts +5 -1
  281. package/lib/components/common/base/Select.vue.js +1 -1
  282. package/lib/components/common/base/Select.vue2.js +11 -10
  283. package/lib/components/common/base/index.d.ts +1 -1
  284. package/lib/components/common/icons/AllMembersShareScreenIcon.vue.d.ts +2 -0
  285. package/lib/components/common/icons/AllMembersShareScreenIcon.vue.js +22 -0
  286. package/lib/components/common/icons/CalendarIcon.vue.d.ts +2 -0
  287. package/lib/components/common/icons/CalendarIcon.vue.js +24 -0
  288. package/lib/components/common/icons/CopyIcon.vue.js +2 -2
  289. package/lib/components/common/icons/EditNameCardIcon.vue.d.ts +2 -0
  290. package/lib/components/common/icons/EditNameCardIcon.vue.js +21 -0
  291. package/lib/components/common/icons/EllipsisIcon.vue.d.ts +2 -0
  292. package/lib/components/common/icons/EllipsisIcon.vue.js +34 -0
  293. package/lib/components/common/icons/HostShareScreenIcon.vue.d.ts +2 -0
  294. package/lib/components/common/icons/HostShareScreenIcon.vue.js +22 -0
  295. package/lib/components/common/icons/LinkIcon.vue.d.ts +2 -0
  296. package/lib/components/common/icons/LinkIcon.vue.js +36 -0
  297. package/lib/components/common/icons/LoadingScheduleIcon.vue.d.ts +2 -0
  298. package/lib/components/common/icons/LoadingScheduleIcon.vue.js +24 -0
  299. package/lib/components/common/icons/ScheduleAttendees.vue.d.ts +6 -0
  300. package/lib/components/common/icons/ScheduleAttendees.vue.js +25 -0
  301. package/lib/components/common/icons/ScheduleAttendees.vue2.js +4 -0
  302. package/lib/components/common/icons/ScheduleRoomIcon.vue.d.ts +2 -0
  303. package/lib/components/common/icons/ScheduleRoomIcon.vue.js +24 -0
  304. package/lib/components/common/icons/SuccessIcon.vue.d.ts +2 -0
  305. package/lib/components/common/icons/SuccessIcon.vue.js +32 -0
  306. package/lib/components/common/icons/WarningIcon.vue.d.ts +2 -0
  307. package/lib/components/common/icons/WarningIcon.vue.js +29 -0
  308. package/lib/conference.d.ts +2 -0
  309. package/lib/conference.js +3 -0
  310. package/lib/conference.vue.js +1 -1
  311. package/lib/conference.vue2.js +9 -4
  312. package/lib/directives/vDblTouch.d.ts +10 -0
  313. package/lib/directives/vTap.d.ts +1 -0
  314. package/lib/directives/vTap.js +30 -3
  315. package/lib/extension/chatExtension.js +1 -1
  316. package/lib/hooks/useMasterApplyControl.js +3 -3
  317. package/lib/index.d.ts +1 -0
  318. package/lib/index.js +2588 -1744
  319. package/lib/locales/en-US.d.ts +75 -0
  320. package/lib/locales/en-US.js +78 -1
  321. package/lib/locales/zh-CN.d.ts +79 -0
  322. package/lib/locales/zh-CN.js +83 -2
  323. package/lib/preConference.vue.d.ts +10 -0
  324. package/lib/preConference.vue.js +1 -1
  325. package/lib/preConference.vue2.js +88 -12
  326. package/lib/services/function/errorHandler.d.ts +10 -0
  327. package/lib/services/function/errorHandler.js +158 -0
  328. package/lib/services/function/virtualBackground.js +3 -2
  329. package/lib/services/index.d.ts +1 -0
  330. package/lib/services/manager/roomActionManager.d.ts +1 -0
  331. package/lib/services/manager/roomActionManager.js +10 -18
  332. package/lib/services/manager/scheduleConferenceManager.d.ts +113 -0
  333. package/lib/services/manager/scheduleConferenceManager.js +147 -0
  334. package/lib/services/manager/userManager.d.ts +2 -0
  335. package/lib/services/manager/userManager.js +4 -0
  336. package/lib/services/roomService.d.ts +8 -0
  337. package/lib/services/roomService.js +38 -12
  338. package/lib/services/types.d.ts +8 -0
  339. package/lib/services/types.js +2 -0
  340. package/lib/stores/basic.js +8 -2
  341. package/lib/stores/room.d.ts +2 -0
  342. package/lib/stores/room.js +55 -24
  343. package/lib/utils/adapter.js +39 -3
  344. package/lib/utils/utils.d.ts +3 -0
  345. package/lib/utils/utils.js +64 -0
  346. package/package.json +2 -2
  347. package/src/TUIRoom/assets/style/black-theme.scss +3 -1
  348. package/src/TUIRoom/assets/style/white-theme.scss +3 -1
  349. package/src/TUIRoom/components/Chat/ChatEditor/useChatEditor.ts +1 -1
  350. package/src/TUIRoom/components/Chat/MessageList/index.vue +5 -1
  351. package/src/TUIRoom/components/Chat/MessageList/useMessageListHook.ts +2 -1
  352. package/src/TUIRoom/components/ManageMember/MemberControl/index.vue +23 -7
  353. package/src/TUIRoom/components/ManageMember/MemberControl/useMemberControlHooks.ts +110 -14
  354. package/src/TUIRoom/components/ManageMember/MemberItem/useMemberItemHooks.ts +9 -4
  355. package/src/TUIRoom/components/ManageMember/MemberItemCommon/MemberInfo.vue +2 -1
  356. package/src/TUIRoom/components/ManageMember/index.vue +85 -5
  357. package/src/TUIRoom/components/ManageMember/useIndexHooks.ts +58 -9
  358. package/src/TUIRoom/components/RoomContent/StreamContainer/index.vue +7 -6
  359. package/src/TUIRoom/components/RoomContent/StreamContainer/useStreamContainerHooks.ts +90 -26
  360. package/src/TUIRoom/components/RoomContent/StreamRegion/index.vue +27 -3
  361. package/src/TUIRoom/components/RoomFooter/ApplyControl/MasterApplyControl/index.vue +2 -1
  362. package/src/TUIRoom/components/RoomFooter/EndControl/index.vue +1 -1
  363. package/src/TUIRoom/components/RoomFooter/EndControl/useEndControlHooks.ts +10 -3
  364. package/src/TUIRoom/components/RoomFooter/ScreenShareControl/Index.vue +11 -1
  365. package/src/TUIRoom/components/RoomFooter/VideoControl.vue +0 -7
  366. package/src/TUIRoom/components/RoomHeader/UserInfo/index.vue +19 -50
  367. package/src/TUIRoom/components/RoomHeader/UserInfo/useUserInfoHooks.ts +1 -28
  368. package/src/TUIRoom/components/RoomHome/RoomControl/index.vue +91 -73
  369. package/src/TUIRoom/components/RoomSidebar/useSideBarHooks.ts +3 -2
  370. package/src/TUIRoom/components/ScheduleConference/Contacts.vue +265 -0
  371. package/src/TUIRoom/components/ScheduleConference/DurationTimePicker.vue +54 -0
  372. package/src/TUIRoom/components/ScheduleConference/ScheduleConferencePanel.vue +731 -0
  373. package/src/TUIRoom/components/ScheduleConference/ScheduleRoomControl.vue +577 -0
  374. package/src/TUIRoom/components/ScheduleConference/ScheduleRoomList.vue +295 -0
  375. package/src/TUIRoom/components/ScheduleConference/ShareLink.vue +122 -0
  376. package/src/TUIRoom/components/ScheduleConference/TimezonePicker.vue +70 -0
  377. package/src/TUIRoom/components/common/DeviceSelect.vue +62 -20
  378. package/src/TUIRoom/components/common/Logo.vue +3 -3
  379. package/src/TUIRoom/components/common/base/Checkbox.vue +19 -11
  380. package/src/TUIRoom/components/common/base/Datepicker/Datepicker.vue +252 -0
  381. package/src/TUIRoom/components/common/base/Datepicker/Timepicker.vue +54 -0
  382. package/src/TUIRoom/components/common/base/Dialog/index.vue +17 -7
  383. package/src/TUIRoom/components/common/base/Input/index.vue +187 -0
  384. package/src/TUIRoom/components/common/base/Message/Instance.ts +2 -1
  385. package/src/TUIRoom/components/common/base/MessageBox/index.ts +4 -2
  386. package/src/TUIRoom/components/common/base/MessageBox/index.vue +57 -26
  387. package/src/TUIRoom/components/common/base/Option.vue +14 -4
  388. package/src/TUIRoom/components/common/base/Select.vue +18 -13
  389. package/src/TUIRoom/components/common/base/index.ts +1 -1
  390. package/src/TUIRoom/components/common/icons/AllMembersShareScreenIcon.vue +15 -0
  391. package/src/TUIRoom/components/common/icons/ArrowStrokeRightIcon.vue +8 -0
  392. package/src/TUIRoom/components/common/icons/CalendarIcon.vue +6 -0
  393. package/src/TUIRoom/components/common/icons/EditNameCardIcon.vue +13 -0
  394. package/src/TUIRoom/components/common/icons/EllipsisIcon.vue +8 -0
  395. package/src/TUIRoom/components/common/icons/HostShareScreenIcon.vue +13 -0
  396. package/src/TUIRoom/components/common/icons/LinkIcon.vue +10 -0
  397. package/src/TUIRoom/components/common/icons/LoadingScheduleIcon.vue +6 -0
  398. package/src/TUIRoom/components/common/icons/ScheduleAttendees.vue +13 -0
  399. package/src/TUIRoom/components/common/icons/ScheduleRoomIcon.vue +6 -0
  400. package/src/TUIRoom/components/common/icons/SuccessIcon.vue +8 -0
  401. package/src/TUIRoom/components/common/icons/WarningIcon.vue +13 -0
  402. package/src/TUIRoom/conference.ts +6 -0
  403. package/src/TUIRoom/conference.vue +16 -5
  404. package/src/TUIRoom/directives/vDblTouch.ts +41 -0
  405. package/src/TUIRoom/directives/vTap.ts +32 -3
  406. package/src/TUIRoom/extension/chatExtension.ts +1 -1
  407. package/src/TUIRoom/hooks/useMasterApplyControl.ts +2 -2
  408. package/src/TUIRoom/index.ts +1 -0
  409. package/src/TUIRoom/locales/en-US.ts +77 -0
  410. package/src/TUIRoom/locales/zh-CN.ts +82 -1
  411. package/src/TUIRoom/preConference.vue +97 -2
  412. package/src/TUIRoom/services/function/errorHandler.ts +169 -0
  413. package/src/TUIRoom/services/function/virtualBackground.ts +3 -3
  414. package/src/TUIRoom/services/index.ts +1 -0
  415. package/src/TUIRoom/services/manager/roomActionManager.ts +10 -18
  416. package/src/TUIRoom/services/manager/scheduleConferenceManager.ts +263 -0
  417. package/src/TUIRoom/services/manager/userManager.ts +6 -0
  418. package/src/TUIRoom/services/roomService.ts +41 -13
  419. package/src/TUIRoom/services/types.ts +8 -1
  420. package/src/TUIRoom/stores/basic.ts +9 -2
  421. package/src/TUIRoom/stores/room.ts +60 -19
  422. package/src/TUIRoom/utils/adapter.ts +44 -4
  423. package/src/TUIRoom/utils/utils.ts +42 -0
  424. package/es/components/common/base/Input.vue.mjs +0 -7
  425. package/es/components/common/base/Input.vue2.mjs +0 -34
  426. package/lib/components/common/base/Input.vue.js +0 -7
  427. package/lib/components/common/base/Input.vue2.js +0 -34
  428. package/src/TUIRoom/components/common/base/Input.vue +0 -61
  429. /package/es/components/{common/base/Input.vue3.mjs → ScheduleConference/Contacts.vue3.mjs} +0 -0
  430. /package/lib/components/{common/base/Input.vue3.js → ScheduleConference/Contacts.vue3.js} +0 -0
@@ -0,0 +1,731 @@
1
+ <template>
2
+ <TuiDialog
3
+ v-model="isDialogVisible"
4
+ :title="t(!isEditMode ? t('Schedule') : t('Modify Room'))"
5
+ :modal="true"
6
+ :append-to-body="true"
7
+ >
8
+ <div class="schedule-conference-form">
9
+ <div class="form-item">
10
+ <span class="form-label">{{ t('Room Name') }}</span>
11
+ <TuiInput
12
+ v-model="form.roomName"
13
+ theme="white"
14
+ class="form-value"
15
+ :placeholder="t('please enter the room name')"
16
+ maxlength=""
17
+ ></TuiInput>
18
+ </div>
19
+ <div v-if="!isEditMode" class="form-item">
20
+ <span class="form-label">{{ t('Room type') }}</span>
21
+ <div class="form-value">
22
+ <tui-select
23
+ v-model="form.roomMode"
24
+ theme="white"
25
+ class="select"
26
+ :teleported="false"
27
+ :popper-append-to-body="false"
28
+ :custom-select-content-style="{ 'font-weight': 400 }"
29
+ >
30
+ <tui-option
31
+ v-for="item in roomTypeList"
32
+ :key="item.value" theme="white"
33
+ :value="item.value"
34
+ :label="t(item.label)"
35
+ :custom-option-content-style="{ 'font-weight': 400 }"
36
+ />
37
+ </tui-select>
38
+ </div>
39
+ </div>
40
+ <div class="form-item">
41
+ <span class="form-label">{{ t('Starting time') }}</span>
42
+ <div class="form-value">
43
+ <TuiDatepicker
44
+ :model-value="form.startDate"
45
+ class="date-picker"
46
+ @input="form.startDate = $event"
47
+ ></TuiDatepicker>
48
+ <TuiTimepicker
49
+ :model-value="form.startTime"
50
+ class="time-picker"
51
+ @input="form.startTime = $event"
52
+ ></TuiTimepicker>
53
+ </div>
54
+ </div>
55
+ <div class="form-item">
56
+ <span class="form-label">{{ t('Room duration') }}</span>
57
+ <div class="form-value">
58
+ <TuiDurationTimePicker
59
+ :model-value="form.duration"
60
+ class="select"
61
+ @input="form.duration = $event"
62
+ ></TuiDurationTimePicker>
63
+ </div>
64
+ </div>
65
+ <div class="form-item">
66
+ <span class="form-label">{{ t('Time zone') }}</span>
67
+ <div class="form-value">
68
+ <TimezonePicker
69
+ :model-value="form.timezone"
70
+ class="select"
71
+ @input="form.timezone = $event"
72
+ ></TimezonePicker>
73
+ </div>
74
+ </div>
75
+ <div class="form-item column">
76
+ <span class="form-label">{{ t('Attendees') }}</span>
77
+ <div class="form-value">
78
+ <TuiInput
79
+ v-model="form.searchUser"
80
+ class="form-input search-user" :search="searchScheduleAttend" :select="addSelectUser"
81
+ :placeholder="t('Please enter the member name')"
82
+ >
83
+ <template #suffixIcon>
84
+ <ScheduleAttendees class="select-attendees" @click="selectScheduleAttends" />
85
+ <Contacts
86
+ :visible="contactsVisible"
87
+ :contacts="contacts"
88
+ :selected-list="scheduleParams.scheduleAttendees"
89
+ @input="contactsVisible = $event"
90
+ @confirm="contactsConfirm"
91
+ ></Contacts>
92
+ </template>
93
+ <template #searchResultItem="{ data }">
94
+ <TuiAvatar class="form-attendees-item-avatar" :img-src="data.profile.avatar"></TuiAvatar>
95
+ <p class="form-attendees-item-name" :title="data.profile.nick">{{ data.profile.nick }}</p>
96
+ </template>
97
+ </TuiInput>
98
+ <div class="form-attendees">
99
+ <span v-for="user in form.scheduleAttendees" :key="user.userId" class="form-attendees-item">
100
+ <TuiAvatar class="form-attendees-item-avatar" :img-src="user.avatarUrl"></TuiAvatar>
101
+ <p class="form-attendees-item-name" :title="user.userName">{{ user.userName }}</p>
102
+ <CloseIcon class="form-attendees-item-remove" @click="removeSelectUser(user)"></CloseIcon>
103
+ </span>
104
+ <span v-if="form.scheduleAttendees?.length > 0" class="form-attendees-item" style="flex-basis: content;">
105
+ {{ `${form.scheduleAttendees.length} ${t('people')}` }}
106
+ </span>
107
+ </div>
108
+ </div>
109
+ </div>
110
+ <div v-if="!isEditMode" class="form-item column">
111
+ <span class="form-label">{{ t('Member management') }}</span>
112
+ <div class="form-value">
113
+ <div class="checkbox-group">
114
+ <TuiCheckbox
115
+ :model-value="form.isMicrophoneDisableForAllUser"
116
+ class="checkbox-group-item"
117
+ @input="form.isMicrophoneDisableForAllUser = $event"
118
+ >
119
+ <span>{{ t('Disable all audios') }}</span>
120
+ </TuiCheckbox>
121
+ <TuiCheckbox
122
+ :model-value="form.isCameraDisableForAllUser"
123
+ class="checkbox-group-item"
124
+ @input="form.isCameraDisableForAllUser = $event"
125
+ >
126
+ {{ t('Disable all videos') }}
127
+ </TuiCheckbox>
128
+ </div>
129
+ </div>
130
+ </div>
131
+ </div>
132
+ <template #footer>
133
+ <div class="schedule-conference-footer">
134
+ <TuiButton class="footer-button" type="primary" @click="cancel">{{ t('Cancel') }}</TuiButton>
135
+ <TuiButton
136
+ v-if="!isEditMode"
137
+ class="footer-button" @click="scheduleConference"
138
+ >
139
+ {{ t('Schedule') }}
140
+ </TuiButton>
141
+ <TuiButton v-else class="footer-button" @click="updateConferenceInfo">{{ t('Save') }}</TuiButton>
142
+ </div>
143
+ </template>
144
+ </TuiDialog>
145
+ <TuiShareLink
146
+ :visible="showRoomInvite"
147
+ :schedule-params="shareLinkData"
148
+ @input="showRoomInvite = $event"
149
+ ></TuiShareLink>
150
+ </template>
151
+
152
+ <script setup lang="ts">
153
+ import { ref, defineProps, defineEmits, watch, computed, nextTick } from 'vue';
154
+ import { useI18n } from '../../locales';
155
+ import TuiDialog from '../common/base/Dialog/index.vue';
156
+ import TuiInput from '../common/base/Input/index.vue';
157
+ import TuiSelect from '../common/base/Select.vue';
158
+ import TuiOption from '../common/base/Option.vue';
159
+ import TuiCheckbox from '../common/base/Checkbox.vue';
160
+ import TuiButton from '../common/base/Button.vue';
161
+ import TuiAvatar from '../common/Avatar.vue';
162
+ import TuiDatepicker from '../common/base/Datepicker/Datepicker.vue';
163
+ import TuiTimepicker from '../common/base/Datepicker/Timepicker.vue';
164
+ import TuiDurationTimePicker from './DurationTimePicker.vue';
165
+ import TimezonePicker from './TimezonePicker.vue';
166
+ import TuiShareLink from './ShareLink.vue';
167
+ import Contacts from './Contacts.vue';
168
+ import ScheduleAttendees from '../common/icons/ScheduleAttendees.vue';
169
+ import CloseIcon from '../common/icons/CloseIcon.vue';
170
+ import { EventType, roomService } from '../../services';
171
+ import { TUIUserInfo, TUIConferenceInfo, TUISeatMode, TUIConferenceStatus } from '@tencentcloud/tuiroom-engine-electron';
172
+ import { deepClone, calculateByteLength } from '../../utils/utils';
173
+
174
+ const { t } = useI18n();
175
+ const shareLinkData = ref({});
176
+ interface Props {
177
+ userName?: string,
178
+ visible: boolean,
179
+ conferenceInfo?: TUIConferenceInfo,
180
+ }
181
+ const props = defineProps<Props>();
182
+
183
+ type DateAndTimeResult = {
184
+ date: Date;
185
+ laterTime: string;
186
+ time: string;
187
+ };
188
+
189
+ const getDateAndTime = (
190
+ date: Date,
191
+ timeZone: string = Intl.DateTimeFormat().resolvedOptions().timeZone,
192
+ ): DateAndTimeResult => {
193
+ // Convert the date to the specified timezone
194
+ const formatter = new Intl.DateTimeFormat('en-US', {
195
+ year: 'numeric',
196
+ month: '2-digit',
197
+ day: '2-digit',
198
+ hour: '2-digit',
199
+ minute: '2-digit',
200
+ hour12: false, // Use 24-hour format
201
+ timeZone,
202
+ });
203
+
204
+ const formattedDate = formatter.format(date);
205
+ const [month, day, year, hour, minute] = formattedDate
206
+ .split(/[\s,:/]+/)
207
+ .filter(part => part !== 'AM' && part !== 'PM');
208
+
209
+ // Round minutes up to the nearest multiple of 15 (00, 15, 30, or 45)
210
+ const roundedMinute = Math.ceil(parseInt(minute) / 15) * 15;
211
+
212
+ // If the rounded minute is 60, increment the hour and set the minute to 00
213
+ const adjustedHour = roundedMinute === 60 ? parseInt(hour) + 1 : parseInt(hour);
214
+ const adjustedMinute = roundedMinute === 60 ? 0 : roundedMinute;
215
+
216
+ // Create a new date object with the adjusted hour and minute
217
+ const adjustedDate = new Date(parseInt(year), parseInt(month) - 1, parseInt(day), adjustedHour, adjustedMinute);
218
+
219
+ // If the adjusted date is earlier than the current date, add 15 minutes
220
+ if (adjustedDate < date) {
221
+ adjustedDate.setMinutes(adjustedDate.getMinutes() + 15);
222
+ }
223
+
224
+ const intHour = parseInt(hour);
225
+ const intMinute = parseInt(minute);
226
+
227
+ return {
228
+ date: new Date(parseInt(year), parseInt(month) - 1, parseInt(day)),
229
+ laterTime: `${adjustedHour < 10 ? `0${adjustedHour}` : adjustedHour}:${
230
+ adjustedMinute < 10 ? `0${adjustedMinute}` : adjustedMinute
231
+ }`,
232
+ time: `${intHour < 10 ? `0${intHour}` : intHour}:${intMinute < 10 ? `0${intMinute}` : intMinute}`,
233
+ };
234
+ };
235
+
236
+
237
+ const emit = defineEmits(['input']);
238
+ const isDialogVisible = ref(false);
239
+ const contactsVisible = ref(false);
240
+ const showRoomInvite = ref(false);
241
+ const isEditMode = computed(() => (!!props.conferenceInfo));
242
+ const roomId = ref('');
243
+ let contacts: any = [];
244
+ const { date: startDate, laterTime: startTime } = getDateAndTime(new Date());
245
+ const defaultFormData = ref({
246
+ roomName: t('sb temporary room', { name: props.userName || roomService.basicStore.userId }),
247
+ roomMode: 'FreeToSpeak',
248
+ startDate,
249
+ startTime,
250
+ duration: 1800,
251
+ timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
252
+ searchUser: '',
253
+ scheduleAttendees: [],
254
+ isMicrophoneDisableForAllUser: false,
255
+ isScreenShareDisableForAllUser: false,
256
+ isCameraDisableForAllUser: false,
257
+ });
258
+ const form = ref(deepClone(defaultFormData.value));
259
+
260
+ const resetData = () => {
261
+ defaultFormData.value.startDate = form.value.startDate;
262
+ defaultFormData.value.startTime = form.value.startTime;
263
+ form.value = Object.assign({}, deepClone(defaultFormData.value));
264
+ };
265
+ watch(
266
+ () => props.visible,
267
+ async (val) => {
268
+ isDialogVisible.value = val;
269
+ if (val) {
270
+ const { date, laterTime } = getDateAndTime(new Date());
271
+ form.value.startDate = date;
272
+ form.value.startTime = laterTime;
273
+ contacts = await roomService.scheduleConferenceManager.fetchFriendList();
274
+ isEditMode.value && (form.value = Object.assign({}, deepClone(editParams.value)));
275
+ }
276
+ },
277
+ {
278
+ immediate: true,
279
+ },
280
+ );
281
+ const updateDialogVisible = (val: boolean) => {
282
+ emit('input', val);
283
+ if (!val) {
284
+ resetData();
285
+ }
286
+ };
287
+ watch(isDialogVisible, (val) => {
288
+ updateDialogVisible(val);
289
+ }, { immediate: true });
290
+ const editParams = computed(() => {
291
+ if (!props.conferenceInfo) return {};
292
+ const { basicRoomInfo, scheduleAttendees, scheduleStartTime, scheduleEndTime } = props.conferenceInfo;
293
+ const { date, time } = getDateAndTime(new Date(scheduleStartTime * 1000));
294
+ const {
295
+ roomName,
296
+ isSeatEnabled,
297
+ isMicrophoneDisableForAllUser,
298
+ isScreenShareDisableForAllUser,
299
+ isCameraDisableForAllUser,
300
+ } = basicRoomInfo;
301
+ return {
302
+ roomName,
303
+ roomMode: isSeatEnabled ? 'SpeakAfterTakingSeat' : 'FreeToSpeak',
304
+ startDate: date,
305
+ startTime: time,
306
+ duration: scheduleEndTime - scheduleStartTime,
307
+ timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
308
+ searchUser: '',
309
+ scheduleAttendees,
310
+ isMicrophoneDisableForAllUser,
311
+ isScreenShareDisableForAllUser,
312
+ isCameraDisableForAllUser,
313
+ };
314
+ });
315
+
316
+
317
+ const convertToTimestamp = (
318
+ date: Date,
319
+ time: string,
320
+ timezone: string,
321
+ offset: 1 | -1 = 1,
322
+ referenceTimezone?: string,
323
+ ) => {
324
+ const year = date.getFullYear();
325
+ const month = date.getMonth() + 1;
326
+ const day = date.getDate();
327
+ const timezoneOffset = offset * getTimezoneOffset(timezone, referenceTimezone) * 60 * 1000;
328
+ return new Date(`${year}-${month}-${day} ${time}`).getTime() - timezoneOffset;
329
+ };
330
+
331
+ const calculateEndTime = (startTime: number, duration: number) => {
332
+ const endTime = startTime + duration * 1000;
333
+ return endTime;
334
+ };
335
+
336
+ const scheduleParams = computed(() => {
337
+ const { startDate, startTime, timezone, duration, scheduleAttendees } = form.value;
338
+ const scheduleStartTime = convertToTimestamp(startDate, startTime, timezone);
339
+ const scheduleEndTime = calculateEndTime(scheduleStartTime, duration);
340
+ return {
341
+ roomId: roomId.value,
342
+ scheduleStartTime: scheduleStartTime / 1000,
343
+ scheduleEndTime: scheduleEndTime / 1000,
344
+ scheduleAttendees,
345
+ roomName: form.value.roomName,
346
+ isSeatEnabled: form.value.roomMode !== 'FreeToSpeak',
347
+ seatMode: form.value.roomMode === 'SpeakAfterTakingSeat' ? TUISeatMode.kApplyToTake : undefined,
348
+ isMicrophoneDisableForAllUser: form.value.isMicrophoneDisableForAllUser,
349
+ isScreenShareDisableForAllUser: form.value.isScreenShareDisableForAllUser,
350
+ isCameraDisableForAllUser: form.value.isCameraDisableForAllUser,
351
+ };
352
+ });
353
+
354
+ function getTimezoneOffset(targetTimezone: string, referenceTimezone = 'UTC') {
355
+ const now = Date.now();
356
+
357
+ const referenceDate = referenceTimezone === 'UTC'
358
+ ? new Date(now).toISOString()
359
+ : new Date(now).toLocaleString('en-US', { timeZone: referenceTimezone, hour12: false });
360
+ const targetDate = new Date(now).toLocaleString('en-US', { timeZone: targetTimezone, hour12: false });
361
+
362
+ const referenceTime = new Date(referenceDate).getTime();
363
+ const targetTime = new Date(targetDate).getTime();
364
+
365
+ const offset = Math.round((targetTime - referenceTime) / (1000 * 60));
366
+
367
+ return offset;
368
+ }
369
+
370
+ const timeCheck = () => {
371
+ if (!props.visible) return true;
372
+ const { timezone, startDate, startTime } = form.value;
373
+ const scheduleStartTime = convertToTimestamp(startDate, startTime, timezone);
374
+
375
+ const currentDate = new Date();
376
+ currentDate.setMilliseconds(0);
377
+ currentDate.setSeconds(0);
378
+ const currentTime = currentDate.getTime();
379
+
380
+ const result = scheduleStartTime >= currentTime;
381
+ !result && roomService.emit(EventType.ROOM_NOTICE_MESSAGE, {
382
+ type: 'warning',
383
+ message: t('The start time cannot be earlier than the current time'),
384
+ });
385
+ return result;
386
+ };
387
+ const roomNameCheck = () => {
388
+ if (!props.visible) return true;
389
+ const result = calculateByteLength(form.value.roomName) <= 100;
390
+ !result && roomService.emit(EventType.ROOM_NOTICE_MESSAGE, {
391
+ type: 'warning',
392
+ message: t('The room name cannot exceed 100 characters'),
393
+ });
394
+ return result;
395
+ };
396
+ const roomStatusCheck = () => {
397
+ if (!props.visible) return true;
398
+ const isNotStarted = props.conferenceInfo?.status === TUIConferenceStatus.kConferenceStatusNotStarted;
399
+ !isNotStarted && roomService.emit(EventType.ROOM_NOTICE_MESSAGE, {
400
+ type: 'warning',
401
+ message: t('The meeting is in progress and any meeting information cannot be modified'),
402
+ });
403
+ return isNotStarted;
404
+ };
405
+
406
+ watch(() => form.value.startTime, async (newValue, oldValue) => {
407
+ if (!timeCheck()) {
408
+ await nextTick();
409
+ form.value.startTime = oldValue;
410
+ }
411
+ });
412
+
413
+ watch(() => form.value.startDate, async (newValue, oldValue) => {
414
+ if (!timeCheck()) {
415
+ await nextTick();
416
+ form.value.startDate = oldValue;
417
+ }
418
+ });
419
+
420
+ watch(() => form.value.timezone, async (newValue, oldValue) => {
421
+ const { startDate, startTime } = form.value;
422
+ const currentDate = new Date(convertToTimestamp(startDate, startTime, newValue, -1, oldValue));
423
+ const { date, laterTime } = getDateAndTime(currentDate);
424
+ form.value.startDate = date;
425
+ form.value.startTime = laterTime;
426
+ });
427
+
428
+ const roomTypeList = [
429
+ { label: 'Free Speech Room', value: 'FreeToSpeak' },
430
+ { label: 'On-stage Speaking Room', value: 'SpeakAfterTakingSeat' },
431
+ ];
432
+
433
+ const selectScheduleAttends = () => {
434
+ contactsVisible.value = true;
435
+ };
436
+ const searchScheduleAttend = (v: string) => {
437
+ if (!v) return [];
438
+ return contacts.filter((user:any) => user?.profile.nick.includes(v) || user?.userID.includes(v));
439
+ };
440
+ const addSelectUser = (user: any) => {
441
+ form.value.searchUser = '';
442
+ if (form.value.scheduleAttendees.findIndex((item: TUIUserInfo) => item.userId === user.userID) !== -1) return;
443
+ form.value.scheduleAttendees.push({
444
+ userId: user.userID,
445
+ userName: user.profile?.nick,
446
+ avatarUrl: user.profile?.avatar,
447
+ });
448
+ };
449
+
450
+ const removeSelectUser = (user: TUIUserInfo) => {
451
+ form.value.scheduleAttendees = form.value.scheduleAttendees
452
+ .filter((item: TUIUserInfo) => item.userId !== user.userId);
453
+ };
454
+
455
+ const contactsConfirm = (contacts: TUIUserInfo[]) => {
456
+ form.value.scheduleAttendees = contacts;
457
+ };
458
+
459
+ const scheduleConference = async () => {
460
+ if (!timeCheck()) return;
461
+ if (!roomNameCheck()) return;
462
+ roomId.value = String(Math.ceil(Math.random() * 1000000));
463
+ try {
464
+ await roomService.scheduleConferenceManager.scheduleConference({
465
+ ...scheduleParams.value,
466
+ roomId: roomId.value,
467
+ });
468
+ const userIdList = scheduleParams.value.scheduleAttendees.map((item: TUIUserInfo) => item.userId);
469
+ if (userIdList && userIdList.length > 0) {
470
+ await roomService.scheduleConferenceManager.addAttendeesByAdmin({
471
+ roomId: roomId.value,
472
+ userIdList,
473
+ });
474
+ }
475
+ shareLinkData.value = deepClone(scheduleParams.value);
476
+ updateDialogVisible(false);
477
+ showRoomInvite.value = true;
478
+ } catch (err: any) {
479
+ roomService.emit(EventType.ROOM_NOTICE_MESSAGE, {
480
+ type: 'error',
481
+ message: err.message,
482
+ });
483
+ }
484
+ };
485
+ const compareArrays = (oldArray: any[], newArray: any[], key: string) => {
486
+ const added: any[] = [];
487
+ const removed: any[] = [];
488
+
489
+ const newKeySet = new Set(newArray.map(item => item[key]));
490
+ const oldKeySet = new Set(oldArray.map(item => item[key]));
491
+
492
+ // Find added elements
493
+ newArray.forEach((item) => {
494
+ if (!oldKeySet.has(item[key])) {
495
+ added.push(item);
496
+ }
497
+ });
498
+
499
+ // Find removed elements
500
+ oldArray.forEach((item) => {
501
+ if (!newKeySet.has(item[key])) {
502
+ removed.push(item);
503
+ }
504
+ });
505
+
506
+ return {
507
+ added,
508
+ removed,
509
+ };
510
+ };
511
+ const updateConferenceInfo = async () => {
512
+ if (!roomStatusCheck()) return;
513
+ if (!timeCheck()) return;
514
+ if (!roomNameCheck()) return;
515
+ try {
516
+ const roomId = props.conferenceInfo?.basicRoomInfo.roomId;
517
+ if (!roomId) return;
518
+ const { roomName, scheduleStartTime, scheduleEndTime, scheduleAttendees } = scheduleParams.value;
519
+ await roomService.scheduleConferenceManager.updateConferenceInfo({
520
+ roomId,
521
+ roomName,
522
+ scheduleStartTime,
523
+ scheduleEndTime,
524
+ });
525
+ const compareResult = compareArrays(props.conferenceInfo.scheduleAttendees, scheduleAttendees, 'userId');
526
+ await Promise.all([
527
+ compareResult.added.length > 0 && roomService.scheduleConferenceManager.addAttendeesByAdmin({
528
+ roomId,
529
+ userIdList: compareResult.added.map(item => item.userId),
530
+ }),
531
+ compareResult.removed.length > 0 && roomService.scheduleConferenceManager.removeAttendeesByAdmin({
532
+ roomId,
533
+ userIdList: compareResult.removed.map(item => item.userId),
534
+ }),
535
+ ]);
536
+ updateDialogVisible(false);
537
+ } catch (err: any) {
538
+ roomService.emit(EventType.ROOM_NOTICE_MESSAGE, {
539
+ type: 'error',
540
+ message: err.message,
541
+ });
542
+ }
543
+ };
544
+
545
+ const cancel = () => {
546
+ updateDialogVisible(false);
547
+ };
548
+ </script>
549
+
550
+ <style lang="scss" scoped>
551
+ .schedule-conference-form {
552
+ display: flex;
553
+ flex-direction: column;
554
+ gap: 10px;
555
+
556
+ .form-item {
557
+ display: flex;
558
+ align-items: center;
559
+
560
+ .form-label {
561
+ display: inline-block;
562
+ width: 100px;
563
+ min-width: 100px;
564
+ color: #4F586B;
565
+ font-size: 14px;
566
+ font-weight: 400;
567
+ }
568
+
569
+ .form-value {
570
+ width: 100%;
571
+ height: 42px;
572
+ line-height: 42px;
573
+ font-size: 14px;
574
+ font-weight: 400;
575
+ color: #0F1014;
576
+ display: flex;
577
+ justify-content: space-between;
578
+
579
+ .search-user {
580
+ height: 42px;
581
+ }
582
+
583
+ .form-input {
584
+ width: 100%;
585
+ }
586
+
587
+ .checkbox-group {
588
+ display: flex;
589
+ flex-direction: column;
590
+ &-item {
591
+ max-width: 145px;
592
+ }
593
+ &-item:hover {
594
+ color: #409eff;
595
+ }
596
+ }
597
+
598
+ .select {
599
+ width: 100%;
600
+ }
601
+
602
+ .date-picker {
603
+ width: 210px;
604
+ }
605
+
606
+ .time-picker {
607
+ width: 110px;
608
+ }
609
+
610
+ .select-attendees {
611
+ cursor: pointer;
612
+ }
613
+
614
+ .select-attendees:hover {
615
+ color: var(--active-color-1);
616
+ }
617
+
618
+ .select-search-result-item {
619
+ display: inline-block;
620
+ width: 100%;
621
+ height: 100%;
622
+ white-space: nowrap;
623
+ text-overflow: ellipsis;
624
+ overflow: hidden;
625
+ }
626
+
627
+ .form-attendees:hover {
628
+ overflow: auto;
629
+
630
+ }
631
+ .form-attendees {
632
+ margin-top: 6px;
633
+ display: flex;
634
+ flex-wrap: wrap;
635
+ gap: 2px;
636
+ line-height: normal;
637
+ justify-content: flex-start;
638
+ max-height: 100px;
639
+ overflow: hidden;
640
+
641
+ &-item {
642
+ display: flex;
643
+ line-height: normal;
644
+ align-items: center;
645
+ background-color: #e3f0fd;
646
+ border-radius: 4px;
647
+ padding: 2px 8px;
648
+ flex-basis: calc(33.3333% - 2px);
649
+ overflow: hidden;
650
+ box-sizing: border-box;
651
+
652
+ &-avatar {
653
+ min-width: 20px;
654
+ min-height: 20px;
655
+ width: 20px;
656
+ height: 20px;
657
+ margin-right: 6px;
658
+ }
659
+
660
+ &-name {
661
+ width: 100%;
662
+ display: inline;
663
+ margin: initial;
664
+ white-space: nowrap;
665
+ text-overflow: ellipsis;
666
+ overflow: hidden;
667
+ }
668
+
669
+ &-remove {
670
+ cursor: pointer;
671
+ margin-left: auto;
672
+ color: #b3acac;
673
+ }
674
+ }
675
+ }
676
+ }
677
+ }
678
+
679
+ .form-item.column {
680
+ align-items: flex-start;
681
+
682
+ .form-label {
683
+ height: 42px;
684
+ line-height: 42px;
685
+ }
686
+
687
+ .form-value {
688
+ height: auto;
689
+ display: flex;
690
+ flex-direction: column;
691
+ }
692
+ }
693
+ }
694
+
695
+ .schedule-conference-footer {
696
+ display: flex;
697
+ align-items: center;
698
+ justify-content: center;
699
+ gap: 12px;
700
+ width: 100%;
701
+
702
+ .footer-button {
703
+ width: 116px;
704
+ height: 32px;
705
+ }
706
+ }
707
+
708
+ .invite-member {
709
+ display: flex;
710
+ flex-direction: column;
711
+ gap: 20px;
712
+ .invite-member-title {
713
+ color: #4F586B;
714
+ }
715
+ .invite-member-item {
716
+ margin-top: 8px;
717
+ border-radius: 8px;
718
+ border: 1px solid #E4E8EE;
719
+ background: #F9FAFC;
720
+ padding: 10px 16px;
721
+ color: #0F1014;
722
+ display: flex;
723
+ justify-content: space-between;
724
+ .copy {
725
+ width: 20px;
726
+ height: 20px;
727
+ cursor: pointer;
728
+ }
729
+ }
730
+ }
731
+ </style>