mdm-client 1.0.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 (262) hide show
  1. package/README.md +92 -0
  2. package/index.js +35 -0
  3. package/package.json +41 -0
  4. package/src/App.vue +246 -0
  5. package/src/assets/audio/moon_light.ogg +0 -0
  6. package/src/assets/font/DINPro-Medium.otf +0 -0
  7. package/src/assets/font/FZZhengHeiS-B-GB.ttf +0 -0
  8. package/src/assets/font/PingFang Regular.otf +0 -0
  9. package/src/assets/font/SourceHanSansCN-Regular.otf +0 -0
  10. package/src/assets/image/common/add_other_icon.png +0 -0
  11. package/src/assets/image/common/bottomFrame.png +0 -0
  12. package/src/assets/image/common/broadcastOn.png +0 -0
  13. package/src/assets/image/common/broadcastTask.png +0 -0
  14. package/src/assets/image/common/call.png +0 -0
  15. package/src/assets/image/common/call_user_mic_off_icon.png +0 -0
  16. package/src/assets/image/common/call_user_mic_on_icon.png +0 -0
  17. package/src/assets/image/common/cam-off.png +0 -0
  18. package/src/assets/image/common/cam-on.png +0 -0
  19. package/src/assets/image/common/cam_off_small.png +0 -0
  20. package/src/assets/image/common/camera.png +0 -0
  21. package/src/assets/image/common/cameraBtn1.png +0 -0
  22. package/src/assets/image/common/cameraBtn2.png +0 -0
  23. package/src/assets/image/common/cameraBtn3.png +0 -0
  24. package/src/assets/image/common/cameraBtn4.png +0 -0
  25. package/src/assets/image/common/cameraBtn5.png +0 -0
  26. package/src/assets/image/common/cameraBtn6.png +0 -0
  27. package/src/assets/image/common/cameraBtn7.png +0 -0
  28. package/src/assets/image/common/cameraClose.png +0 -0
  29. package/src/assets/image/common/cameraFull.png +0 -0
  30. package/src/assets/image/common/cameraOff.png +0 -0
  31. package/src/assets/image/common/cancel_icon.png +0 -0
  32. package/src/assets/image/common/card_blue.png +0 -0
  33. package/src/assets/image/common/card_grey.png +0 -0
  34. package/src/assets/image/common/chosen_icon.png +0 -0
  35. package/src/assets/image/common/chosen_icon_slided.png +0 -0
  36. package/src/assets/image/common/custom_layout_equipment_avatar.png +0 -0
  37. package/src/assets/image/common/custom_layout_user_avatar.png +0 -0
  38. package/src/assets/image/common/default_avatar.png +0 -0
  39. package/src/assets/image/common/default_avatar_mini.png +0 -0
  40. package/src/assets/image/common/delete-number.svg +3 -0
  41. package/src/assets/image/common/deviceIcon.png +0 -0
  42. package/src/assets/image/common/fourOff.png +0 -0
  43. package/src/assets/image/common/fourOn.png +0 -0
  44. package/src/assets/image/common/group.png +0 -0
  45. package/src/assets/image/common/groupManage.png +0 -0
  46. package/src/assets/image/common/histroy_meeting_icon.png +0 -0
  47. package/src/assets/image/common/icon-device.svg +12 -0
  48. package/src/assets/image/common/icon-monitor.svg +12 -0
  49. package/src/assets/image/common/icon-/345/260/217/347/250/213/345/272/217.svg +5 -0
  50. package/src/assets/image/common/icon-/345/272/224/347/255/224.svg +5 -0
  51. package/src/assets/image/common/icon-/350/247/206/351/242/221.svg +7 -0
  52. package/src/assets/image/common/input_search_icon.png +0 -0
  53. package/src/assets/image/common/launch_icon.png +0 -0
  54. package/src/assets/image/common/layout-active1.png +0 -0
  55. package/src/assets/image/common/layout-active2.png +0 -0
  56. package/src/assets/image/common/layout1.png +0 -0
  57. package/src/assets/image/common/layout2.png +0 -0
  58. package/src/assets/image/common/loading.png +0 -0
  59. package/src/assets/image/common/login/checked_icon.png +0 -0
  60. package/src/assets/image/common/login/login_bg.png +0 -0
  61. package/src/assets/image/common/login/login_form_left_icon.png +0 -0
  62. package/src/assets/image/common/login/pwd_icon.png +0 -0
  63. package/src/assets/image/common/login/user_icon.png +0 -0
  64. package/src/assets/image/common/login/verify_icon.png +0 -0
  65. package/src/assets/image/common/logo.png +0 -0
  66. package/src/assets/image/common/ltypeOff.png +0 -0
  67. package/src/assets/image/common/ltypeOn.png +0 -0
  68. package/src/assets/image/common/manager_cam_off_icon.png +0 -0
  69. package/src/assets/image/common/manager_mic_off_icon.png +0 -0
  70. package/src/assets/image/common/map-cicle-icon.svg +6 -0
  71. package/src/assets/image/common/map-icon-search-info.svg +11 -0
  72. package/src/assets/image/common/map-location.svg +37 -0
  73. package/src/assets/image/common/map.png +0 -0
  74. package/src/assets/image/common/mic-off.png +0 -0
  75. package/src/assets/image/common/mic-on.png +0 -0
  76. package/src/assets/image/common/mic_off_small.png +0 -0
  77. package/src/assets/image/common/minum_cam_off_icon.png +0 -0
  78. package/src/assets/image/common/minum_cam_on_icon.png +0 -0
  79. package/src/assets/image/common/minum_expand_icon.png +0 -0
  80. package/src/assets/image/common/minum_mic_off_icon.png +0 -0
  81. package/src/assets/image/common/minum_mic_on_icon.png +0 -0
  82. package/src/assets/image/common/minum_reset_icon.png +0 -0
  83. package/src/assets/image/common/minum_slide_icon.png +0 -0
  84. package/src/assets/image/common/more_icon.png +0 -0
  85. package/src/assets/image/common/mute.png +0 -0
  86. package/src/assets/image/common/newFolder.png +0 -0
  87. package/src/assets/image/common/newTask.png +0 -0
  88. package/src/assets/image/common/nineOff.png +0 -0
  89. package/src/assets/image/common/nineOn.png +0 -0
  90. package/src/assets/image/common/none.png +0 -0
  91. package/src/assets/image/common/offline.png +0 -0
  92. package/src/assets/image/common/oneOff.png +0 -0
  93. package/src/assets/image/common/oneOn.png +0 -0
  94. package/src/assets/image/common/online.png +0 -0
  95. package/src/assets/image/common/output_off_small.png +0 -0
  96. package/src/assets/image/common/playOff.png +0 -0
  97. package/src/assets/image/common/playOn.png +0 -0
  98. package/src/assets/image/common/playStop.png +0 -0
  99. package/src/assets/image/common/preview_icon.png +0 -0
  100. package/src/assets/image/common/preview_meet_icon.png +0 -0
  101. package/src/assets/image/common/scan-map.png +0 -0
  102. package/src/assets/image/common/screen_blue.png +0 -0
  103. package/src/assets/image/common/screen_gray.png +0 -0
  104. package/src/assets/image/common/screen_white.png +0 -0
  105. package/src/assets/image/common/select_item_check.png +0 -0
  106. package/src/assets/image/common/select_item_checked.png +0 -0
  107. package/src/assets/image/common/selector.png +0 -0
  108. package/src/assets/image/common/selectorOn.png +0 -0
  109. package/src/assets/image/common/share_icon.png +0 -0
  110. package/src/assets/image/common/signal_good.png +0 -0
  111. package/src/assets/image/common/signal_poor.png +0 -0
  112. package/src/assets/image/common/sixteenOff.png +0 -0
  113. package/src/assets/image/common/sixteenOn.png +0 -0
  114. package/src/assets/image/common/slide-bth-expand.png +0 -0
  115. package/src/assets/image/common/slide_btn.png +0 -0
  116. package/src/assets/image/common/speak.png +0 -0
  117. package/src/assets/image/common/speakOn.png +0 -0
  118. package/src/assets/image/common/speaker-off.png +0 -0
  119. package/src/assets/image/common/speaker-on.png +0 -0
  120. package/src/assets/image/common/speaking.png +0 -0
  121. package/src/assets/image/common/speed-left.svg +5 -0
  122. package/src/assets/image/common/speed-right.svg +5 -0
  123. package/src/assets/image/common/tree_checked_icon.png +0 -0
  124. package/src/assets/image/common/tree_expand_icon.png +0 -0
  125. package/src/assets/image/common/tree_slide_icon.png +0 -0
  126. package/src/assets/image/common/tree_uncheck_icon.png +0 -0
  127. package/src/assets/image/common/unchosen_icon.png +0 -0
  128. package/src/assets/image/common/up.png +0 -0
  129. package/src/assets/image/common/volume.png +0 -0
  130. package/src/assets/image/common/warning.png +0 -0
  131. package/src/assets/image/screenBlue/a1.png +0 -0
  132. package/src/assets/image/screenBlue/a2.png +0 -0
  133. package/src/assets/image/screenBlue/a3.png +0 -0
  134. package/src/assets/image/screenBlue/a4.png +0 -0
  135. package/src/assets/image/screenBlue/a5.png +0 -0
  136. package/src/assets/image/screenBlue/a6.png +0 -0
  137. package/src/assets/image/screenBlue/add.png +0 -0
  138. package/src/assets/image/screenBlue/add_group_icon.png +0 -0
  139. package/src/assets/image/screenBlue/add_to_group_icon.png +0 -0
  140. package/src/assets/image/screenBlue/arrow_icon.png +0 -0
  141. package/src/assets/image/screenBlue/audio_level_icon.png +0 -0
  142. package/src/assets/image/screenBlue/b1.png +0 -0
  143. package/src/assets/image/screenBlue/b2.png +0 -0
  144. package/src/assets/image/screenBlue/b3.png +0 -0
  145. package/src/assets/image/screenBlue/b4.png +0 -0
  146. package/src/assets/image/screenBlue/b5.png +0 -0
  147. package/src/assets/image/screenBlue/b6.png +0 -0
  148. package/src/assets/image/screenBlue/bottom_footer_bg.png +0 -0
  149. package/src/assets/image/screenBlue/call_clear_icon.png +0 -0
  150. package/src/assets/image/screenBlue/call_duration_icon.png +0 -0
  151. package/src/assets/image/screenBlue/call_fullscreen_icon.png +0 -0
  152. package/src/assets/image/screenBlue/call_mini_icon.png +0 -0
  153. package/src/assets/image/screenBlue/call_video_icon.png +0 -0
  154. package/src/assets/image/screenBlue/call_voice_icon.png +0 -0
  155. package/src/assets/image/screenBlue/cam_on_small.png +0 -0
  156. package/src/assets/image/screenBlue/close_icon.png +0 -0
  157. package/src/assets/image/screenBlue/copy-icon.png +0 -0
  158. package/src/assets/image/screenBlue/custom_layout_drag_icon.png +0 -0
  159. package/src/assets/image/screenBlue/custom_layout_grid16_active_icon.png +0 -0
  160. package/src/assets/image/screenBlue/custom_layout_grid16_icon.png +0 -0
  161. package/src/assets/image/screenBlue/custom_layout_grid4_active_icon.png +0 -0
  162. package/src/assets/image/screenBlue/custom_layout_grid4_icon.png +0 -0
  163. package/src/assets/image/screenBlue/custom_layout_grid9_active_icon.png +0 -0
  164. package/src/assets/image/screenBlue/custom_layout_grid9_icon.png +0 -0
  165. package/src/assets/image/screenBlue/custom_layout_header_icon.png +0 -0
  166. package/src/assets/image/screenBlue/custom_layout_placeholder_bg.png +0 -0
  167. package/src/assets/image/screenBlue/custom_layout_refresh_icon.png +0 -0
  168. package/src/assets/image/screenBlue/custom_layout_rightside_active_icon.png +0 -0
  169. package/src/assets/image/screenBlue/custom_layout_rightside_icon.png +0 -0
  170. package/src/assets/image/screenBlue/custom_layout_ring_active_icon.png +0 -0
  171. package/src/assets/image/screenBlue/custom_layout_ring_icon.png +0 -0
  172. package/src/assets/image/screenBlue/custom_layout_topside_active_icon.png +0 -0
  173. package/src/assets/image/screenBlue/custom_layout_topside_icon.png +0 -0
  174. package/src/assets/image/screenBlue/date_picker_icon.png +0 -0
  175. package/src/assets/image/screenBlue/dialog_check_icon.png +0 -0
  176. package/src/assets/image/screenBlue/emoji-logo.png +0 -0
  177. package/src/assets/image/screenBlue/header_alert_icon.png +0 -0
  178. package/src/assets/image/screenBlue/manager_cam_on_icon.png +0 -0
  179. package/src/assets/image/screenBlue/manager_mic_on_icon.png +0 -0
  180. package/src/assets/image/screenBlue/manager_more_icon.png +0 -0
  181. package/src/assets/image/screenBlue/meeting_board_bg.png +0 -0
  182. package/src/assets/image/screenBlue/meeting_chat_emoji_icon.png +0 -0
  183. package/src/assets/image/screenBlue/meeting_chat_icon.png +0 -0
  184. package/src/assets/image/screenBlue/meeting_chat_image_icon.png +0 -0
  185. package/src/assets/image/screenBlue/meeting_chat_logo.png +0 -0
  186. package/src/assets/image/screenBlue/meeting_copy_icon.png +0 -0
  187. package/src/assets/image/screenBlue/meeting_invite_icon.png +0 -0
  188. package/src/assets/image/screenBlue/meeting_layout_icon.png +0 -0
  189. package/src/assets/image/screenBlue/meeting_member_icon.png +0 -0
  190. package/src/assets/image/screenBlue/meeting_mode_icon.png +0 -0
  191. package/src/assets/image/screenBlue/meeting_record_icon.png +0 -0
  192. package/src/assets/image/screenBlue/meeting_setting_icon.png +0 -0
  193. package/src/assets/image/screenBlue/meeting_share_icon.png +0 -0
  194. package/src/assets/image/screenBlue/meeting_slide_small_icon.png +0 -0
  195. package/src/assets/image/screenBlue/mic_on_small.png +0 -0
  196. package/src/assets/image/screenBlue/module_bg1.png +0 -0
  197. package/src/assets/image/screenBlue/module_bg2.png +0 -0
  198. package/src/assets/image/screenBlue/monitor/circle data.png +0 -0
  199. package/src/assets/image/screenBlue/monitor/circle.png +0 -0
  200. package/src/assets/image/screenBlue/output_on_small.png +0 -0
  201. package/src/assets/image/screenBlue/page_bg.png +0 -0
  202. package/src/assets/image/screenBlue/pic-logo.png +0 -0
  203. package/src/assets/image/screenBlue/preview_date_icon.png +0 -0
  204. package/src/assets/image/screenBlue/preview_empty_icon.png +0 -0
  205. package/src/assets/image/screenBlue/preview_more_icon.png +0 -0
  206. package/src/assets/image/screenBlue/receive_hang_off_icon.png +0 -0
  207. package/src/assets/image/screenBlue/receive_hang_on_icon.png +0 -0
  208. package/src/assets/image/screenBlue/receive_video_icon.png +0 -0
  209. package/src/assets/image/screenBlue/receive_voice_icon.png +0 -0
  210. package/src/assets/image/screenBlue/send-logo.png +0 -0
  211. package/src/assets/image/screenBlue/slide_menu_bg.png +0 -0
  212. package/src/assets/image/screenBlue/top_header_bg.png +0 -0
  213. package/src/assets/image/screenBlue/yq.png +0 -0
  214. package/src/assets/json/emoji.json +222 -0
  215. package/src/assets/style/base.scss +217 -0
  216. package/src/assets/style/elForm.scss +80 -0
  217. package/src/assets/style/font.scss +16 -0
  218. package/src/assets/style/index.scss +5 -0
  219. package/src/assets/style/math.scss +11 -0
  220. package/src/assets/style/mixin.scss +69 -0
  221. package/src/components/LiveCallBoard/LiveCallBoard.vue +237 -0
  222. package/src/components/LiveInviteReceive/LiveInviteReceive.vue +150 -0
  223. package/src/components/LiveMulti/LiveMulti.vue +303 -0
  224. package/src/components/LiveMultipleMeeting/LiveMultipleMeeting.vue +4469 -0
  225. package/src/components/LiveMultipleMeeting/style/index.scss +337 -0
  226. package/src/components/LivePoint/LivePoint.vue +372 -0
  227. package/src/components/LivePointMeeting/LivePointMeeting.vue +1134 -0
  228. package/src/components/LivePointMeeting/style/index.scss +202 -0
  229. package/src/components/MeetingReadyDialog/MeetingReadyDialog.vue +583 -0
  230. package/src/components/MiniumVideoDialog/MiniumVideoDialog.vue +449 -0
  231. package/src/components/other/LayoutPlaceholder.vue +184 -0
  232. package/src/components/other/addressBook.vue +1121 -0
  233. package/src/components/other/appointDialog.vue +208 -0
  234. package/src/components/other/callBoard.vue +191 -0
  235. package/src/components/other/chatArea.vue +727 -0
  236. package/src/components/other/customGroupDialog.vue +180 -0
  237. package/src/components/other/customLayout.vue +1112 -0
  238. package/src/components/other/editGroupDialog.vue +290 -0
  239. package/src/components/other/inviteNonContactDialog.vue +160 -0
  240. package/src/components/other/layoutSwitch.vue +183 -0
  241. package/src/components/other/leaveOptionDialog.vue +90 -0
  242. package/src/components/other/memberManage.vue +502 -0
  243. package/src/components/other/moreOptionDialog.vue +291 -0
  244. package/src/components/other/screenShareBoard.vue +121 -0
  245. package/src/components/other/selectDialog.vue +279 -0
  246. package/src/components/other/selectSpecialDialog.vue +234 -0
  247. package/src/components/other/settingDialog.vue +756 -0
  248. package/src/components/other/themeDialog.vue +180 -0
  249. package/src/components/other/updateNameDialog.vue +162 -0
  250. package/src/directive/clickOutside.js +58 -0
  251. package/src/directive/drag.js +165 -0
  252. package/src/directive/scale.js +22 -0
  253. package/src/directive/throttle.js +77 -0
  254. package/src/main.js +21 -0
  255. package/src/request/index.js +27 -0
  256. package/src/utils/api.js +82 -0
  257. package/src/utils/index.js +4 -0
  258. package/src/utils/livekit/live-client-esm-old.js +1 -0
  259. package/src/utils/livekit/live-client-esm.js +1 -0
  260. package/src/utils/message.js +24 -0
  261. package/src/utils/mitt.js +4 -0
  262. package/src/utils/tool.js +154 -0
@@ -0,0 +1,237 @@
1
+ <template>
2
+ <div class="live-call-board" id="live-call-board">
3
+ <div class="live-call-board-title" v-drag="'live-call-board'">
4
+ <span>拨号盘</span>
5
+ <div class="title-close-icon" @click="$emit('callBoardClose')" ></div>
6
+ </div>
7
+ <div class="input-box">
8
+ <el-input v-model="callNum" type="mobile" placeholder="请输入号码">
9
+ <template #suffix>
10
+ <div class="del-icon" @click="delCallNum"></div>
11
+ </template>
12
+ </el-input>
13
+ </div>
14
+
15
+ <div class="live-call-board-list">
16
+ <div class="live-call-board-list-item" v-for="item of '123456789*0#'" @click="inputCallNum(item)">
17
+ {{ item }}
18
+ </div>
19
+ </div>
20
+ <div class="live-call-board-foot">
21
+ <div class="live-call-board-foot-btn voice-btn" v-throttle-click:500="voiceCall">
22
+ <div class="btn-icon"></div>
23
+ </div>
24
+ <div class="live-call-board-foot-btn video-btn" v-throttle-click:500="videoCall">
25
+ <div class="btn-icon"></div>
26
+ </div>
27
+ <div class="live-call-board-foot-btn mini-btn" v-throttle-click:500="miniCall">
28
+ <div class="btn-icon"></div>
29
+ </div>
30
+ </div>
31
+ </div>
32
+ </template>
33
+
34
+ <script>
35
+ import { ShowMessage } from "../../utils/index.js"
36
+
37
+ export default {
38
+ name: "LiveCallBoard",
39
+ props: {
40
+ isInMeeting: {
41
+ type: Boolean,
42
+ default: false
43
+ },
44
+ defaultCallNum: {
45
+ type: String,
46
+ default: ""
47
+ }
48
+ },
49
+ data() {
50
+ return {
51
+ callNum: "",
52
+ showMessage: null
53
+ }
54
+ },
55
+ mounted() {
56
+ this.showMessage = new ShowMessage()
57
+ this.callNum = this.defaultCallNum
58
+ },
59
+ methods: {
60
+ verifyMobile(num) {
61
+ const reg = /^[\d#*]+$/
62
+ return reg.test(num)
63
+ },
64
+ inputCallNum(item) {
65
+ this.callNum += item
66
+ },
67
+ voiceCall() {
68
+ if(this.isInMeeting) {
69
+ this.showMessage.message("error", '当前在会议中,无法呼叫')
70
+ return
71
+ }
72
+ if (!this.callNum) {
73
+ this.showMessage.message("error", '联系方式不能为空')
74
+ } else {
75
+ if (this.verifyMobile(this.callNum)) {
76
+ this.$emit("voiceCall", {
77
+ inviteName: "",
78
+ invitePhone: this.callNum,
79
+ })
80
+ this.$emit('callBoardClose')
81
+ } else {
82
+ this.showMessage.message("error", '手机号中包含不合法字符')
83
+ }
84
+ }
85
+ },
86
+ videoCall() {
87
+ if(this.isInMeeting) {
88
+ this.showMessage.message("error", '当前在会议中,无法呼叫')
89
+ return
90
+ }
91
+ if (!this.callNum) {
92
+ this.showMessage.message("error", '联系方式不能为空')
93
+ } else {
94
+ if (this.verifyMobile(this.callNum)) {
95
+ this.$emit("videoCall", {
96
+ inviteName: "",
97
+ invitePhone: this.callNum,
98
+ })
99
+ this.$emit('callBoardClose')
100
+ } else {
101
+ this.showMessage.message("error", '手机号中包含不合法字符')
102
+ }
103
+ }
104
+ },
105
+ miniCall() {
106
+ if(this.isInMeeting) {
107
+ this.showMessage.message("error", '当前在会议中,无法呼叫')
108
+ return
109
+ }
110
+ if (!this.callNum) {
111
+ this.showMessage.message("error", '联系方式不能为空')
112
+ } else {
113
+ if (this.verifyMobile(this.callNum)) {
114
+ this.$emit("miniCall", {
115
+ inviteName: "",
116
+ invitePhone: this.callNum,
117
+ })
118
+ this.$emit('callBoardClose')
119
+ } else {
120
+ this.showMessage.message("error", '手机号中包含不合法字符')
121
+ }
122
+ }
123
+ },
124
+ delCallNum() {
125
+ if(this.callNum.length > 0) {
126
+ this.callNum = this.callNum.substring(0, this.callNum.length - 1)
127
+ }
128
+ }
129
+ }
130
+ }
131
+ </script>
132
+
133
+ <style lang="scss" scoped>
134
+ @import "../../assets/style/mixin.scss";
135
+ .live-call-board {
136
+ position: fixed;
137
+ inset: 0;
138
+ margin: auto;
139
+ z-index: 2000;
140
+ width: 300px;
141
+ height: fit-content;
142
+ background: var(--dialog-bg);
143
+ box-shadow: 0px 0px 8px 0px var(--dialog-shadow-color);
144
+ border-radius: 10px;
145
+ font-weight: 500;
146
+ font-size: 18px;
147
+ color: var(--theme-font-color);
148
+ transform: translate(0, 0);
149
+ border: 1px solid var(--dialog-border-color);
150
+ .input-box {
151
+ padding: 0 20px;
152
+ margin-bottom: 10px;
153
+ :deep(.el-input) {
154
+ width: 100%;
155
+ height: 42px;
156
+ @include elInput;
157
+ }
158
+ }
159
+ &-title {
160
+ width: 100%;
161
+ height: 43px;
162
+ display: flex;
163
+ align-items: center;
164
+ justify-content: space-between;
165
+ padding: 0 20px;
166
+ margin-bottom: 20px;
167
+ border-bottom: 1px solid var(--dialog-border-color);
168
+ .title-close-icon {
169
+ width: 16px;
170
+ height: 16px;
171
+ cursor: pointer;
172
+ background: var(--close-icon) no-repeat center / 100% 100%;
173
+ }
174
+ }
175
+ &-list {
176
+ width: 100%;
177
+ padding: 0 20px;
178
+ display: grid;
179
+ grid-template-columns: repeat(3, 1fr);
180
+ grid-gap: 10px 10px;
181
+ margin-bottom: 10px;
182
+ &-item {
183
+ cursor: pointer;
184
+ height: 48px;
185
+ line-height: 48px;
186
+ text-align: center;
187
+ font-weight: 400;
188
+ font-size: 24px;
189
+ background: var(--call-border-item-bg);
190
+ border-radius: 6px 6px 6px 6px;
191
+ }
192
+ }
193
+ &-foot {
194
+ width: 100%;
195
+ padding: 0 20px;
196
+ display: flex;
197
+ align-items: center;
198
+ justify-content: space-between;
199
+ margin-bottom: 20px;
200
+ &-btn {
201
+ width: 80px;
202
+ height: 48px;
203
+ display: flex;
204
+ align-items: center;
205
+ justify-content: center;
206
+ background: var(--call-border-item-bg);
207
+ border-radius: 6px 6px 6px 6px;
208
+ .btn-icon {
209
+ width: 24px;
210
+ height: 24px;
211
+ cursor: pointer;
212
+ }
213
+ }
214
+ .voice-btn {
215
+ .btn-icon {
216
+ background: var(--call-voice-icon) no-repeat center / 100% 100%;
217
+ }
218
+ }
219
+ .video-btn {
220
+ .btn-icon {
221
+ background: var(--call-video-icon) no-repeat center / 100% 100%;
222
+ }
223
+ }
224
+ .mini-btn {
225
+ .btn-icon {
226
+ background: var(--call-mini-icon) no-repeat center / 100% 100%;
227
+ }
228
+ }
229
+ }
230
+ .del-icon {
231
+ width: 17px;
232
+ height: 17px;
233
+ cursor: pointer;
234
+ background: var(--call-border-del-icon) no-repeat center / 100% 100%;
235
+ }
236
+ }
237
+ </style>
@@ -0,0 +1,150 @@
1
+ <template>
2
+ <div class="receive-board" id="receive-board">
3
+ <div class="receive-board-title" v-drag="'receive-board'">
4
+ <span>{{ inviteData.isVoice == '1' ? '语音呼叫' : '视频呼叫' }}</span>
5
+ <div class="title-close-icon" @click="$emit('receiveBoardClose')"></div>
6
+ </div>
7
+ <div class="receive-board-msg">
8
+ <div
9
+ :class="['receive-type-icon', inviteData.isVoice == '1' ? 'receive-type-icon-voice' : 'receive-type-icon-video']"
10
+ ></div>
11
+ <span>{{ `【${inviteData?.fromName ?? '会议发起人'}】邀请您进行${inviteData.isVoice == '1' ? '语音' : '视频'}通话` }}</span>
12
+ </div>
13
+ <div class="receive-board-foot">
14
+ <div class="receive-board-foot-btn accept-btn" @click="acceptInviteCall">
15
+ <div class="btn-icon"></div>
16
+ <span>接听</span>
17
+ </div>
18
+ <div class="receive-board-foot-btn refuse-btn" @click="refuseInviteCall">
19
+ <div class="btn-icon"></div>
20
+ <span>挂断</span>
21
+ </div>
22
+ </div>
23
+ </div>
24
+ </template>
25
+
26
+ <script>
27
+ export default {
28
+ name: "LiveInviteReceive",
29
+ props: {
30
+ inviteData: {
31
+ type: Object,
32
+ default: () => ({ })
33
+ }
34
+ },
35
+ methods: {
36
+ acceptInviteCall() {
37
+ console.log("acceptInviteCall", this.inviteData);
38
+ this.$emit("acceptInviteCall", this.inviteData)
39
+ },
40
+ refuseInviteCall() {
41
+ this.$emit("refuseInviteCall", this.inviteData)
42
+ }
43
+ }
44
+ }
45
+ </script>
46
+
47
+ <style lang="scss" scoped>
48
+ .receive-board {
49
+ position: fixed;
50
+ inset: 0;
51
+ margin: auto;
52
+ z-index: 2000;
53
+ width: 330px;
54
+ height: fit-content;
55
+ background: var(--receive-board-bg);
56
+ box-shadow: 0px 0px 10px 0px var(--dialog-shadow-color);
57
+ border-radius: 0px;
58
+ padding: 0;
59
+ font-weight: 500;
60
+ font-size: 14px;
61
+ color: var(--theme-font-color);
62
+ transform: translate(0, 0);
63
+
64
+ &-title {
65
+ width: 100%;
66
+ height: 40px;
67
+ display: flex;
68
+ align-items: center;
69
+ justify-content: space-between;
70
+ background: var(--dialog-title-bg);
71
+ font-size: 16px;
72
+ padding: 0 12px;
73
+
74
+ .title-close-icon {
75
+ width: 14px;
76
+ height: 14px;
77
+ cursor: pointer;
78
+ background: var(--close-icon) no-repeat center center / 100% 100%;
79
+ }
80
+ }
81
+
82
+ &-msg {
83
+ width: 100%;
84
+ height: 108px;
85
+ display: flex;
86
+ align-items: center;
87
+ justify-content: center;
88
+
89
+ .receive-type-icon {
90
+ width: 22px;
91
+ height: 22px;
92
+ margin-right: 5px;
93
+ &-voice {
94
+ background: var(--receive-voice-icon) no-repeat center center / 100% 100%;
95
+ }
96
+ &-video {
97
+ background: var(--receive-video-icon) no-repeat center center / 100% 100%;
98
+ }
99
+ }
100
+
101
+ span {
102
+ line-height: 22px;
103
+ font-size: 16px;
104
+ }
105
+ }
106
+
107
+ &-foot {
108
+ width: 100%;
109
+ display: flex;
110
+ align-items: center;
111
+ justify-content: center;
112
+ margin-bottom: 26px;
113
+
114
+ &-btn {
115
+ padding: 0 30px;
116
+ height: 36px;
117
+ display: flex;
118
+ align-items: center;
119
+ border-radius: 6px 6px 6px 6px;
120
+ cursor: pointer;
121
+
122
+ .btn-icon {
123
+ width: 20px;
124
+ height: 20px;
125
+ margin-right: 10px;
126
+ }
127
+
128
+ &:not(:last-child) {
129
+ margin-right: 12px;
130
+ }
131
+ }
132
+
133
+ .accept-btn {
134
+ background: #019A22;
135
+ color: var(--theme-font-color);
136
+ .btn-icon {
137
+ background: var(--receive-hang-on-icon) no-repeat center center / 100% 100%;
138
+ }
139
+ }
140
+
141
+ .refuse-btn {
142
+ border: 1px solid var(--btn-danger-bg);
143
+ color: var(--btn-danger-bg);
144
+ .btn-icon {
145
+ background: var(--receive-hang-off-icon) no-repeat center center / 100% 100%;
146
+ }
147
+ }
148
+ }
149
+ }
150
+ </style>
@@ -0,0 +1,303 @@
1
+ <template>
2
+ <div>
3
+ <teleport to="body">
4
+ <MeetingReadyDialog
5
+ v-if="modelValue"
6
+ :dialogType="dialogType"
7
+ :tempRoomNum="tempRoomNum"
8
+ :tempRoomName="tempRoomName"
9
+ @launchMeeting="launchMeeting"
10
+ @joinMeeting="joinMeeting"
11
+ @close="closeReadyDialog"
12
+ />
13
+ </teleport>
14
+ <teleport to="body">
15
+ <live-multiple-meeting
16
+ v-if="isMeetingDialogShow"
17
+ ref="liveMultipleMeetingRef"
18
+ :tempMeetingName="multiMeetingData.roomName"
19
+ :tempMeetingNum="multiMeetingData.roomNum"
20
+ :tempCameraStatus="multiMeetingData.cameraStatus"
21
+ :tempMicroStatus="multiMeetingData.microphoneStatus"
22
+ :tempOutputStatus="multiMeetingData.outputStatus"
23
+ :tempActiveDevice="{
24
+ audioInputDevice: multiMeetingData.audioInputDevice,
25
+ audioOutputDevice: multiMeetingData.audioOutputDevice,
26
+ videoDevice: multiMeetingData.videoDevice,
27
+ }"
28
+ :joinType="multiMeetingData.joinType"
29
+ :tempInviteList="inviteList"
30
+ :deviceList="deviceList"
31
+ :isCustomizeMiniInvitations="isCustomizeMiniInvitations"
32
+ :miniPagePath="miniPagePath"
33
+ :defaultInviteWay="defaultInviteWay"
34
+ :baseUrl="baseUrl"
35
+ :userData="userData"
36
+ :isInMeeting="isInMeeting"
37
+ :org="org"
38
+ :token="token"
39
+ @multiMeetingClose="closeMultiMeeting"
40
+ @miniInviteSend="sendMiniInvite"
41
+ @inviteMessageSend="sendMessageInvite"
42
+ @multiMeetingMinum="openMiniVideoDialog"
43
+ @meetingStart="handleMeetingStart"
44
+ @meetingEnd="handleMeetingEnd"
45
+ ></live-multiple-meeting>
46
+ </teleport>
47
+ <teleport to="body">
48
+ <LiveInviteReceive
49
+ v-if="isInviteReceiveShow"
50
+ :inviteData="inviteData"
51
+ @receiveBoardClose="inviteReceiveClose"
52
+ @acceptInviteCall="acceptInviteCall"
53
+ @refuseInviteCall="refuseInviteCall"
54
+ >
55
+ </LiveInviteReceive>
56
+ </teleport>
57
+ <teleport to="body">
58
+ <minium-video-dialog
59
+ v-if="isMiniVideoDialogShow"
60
+ ref="miniumVideoDialogRef"
61
+ :trackData="trackData"
62
+ @resetMultiDialog="resetMultiDialog"
63
+ @miniVideoDialogClose="closeMiniVideoDialog"
64
+ ></minium-video-dialog>
65
+ </teleport>
66
+ </div>
67
+ </template>
68
+
69
+ <script>
70
+ import MeetingReadyDialog from "../MeetingReadyDialog/MeetingReadyDialog.vue";
71
+ import MiniumVideoDialog from "../MiniumVideoDialog/MiniumVideoDialog.vue";
72
+ import LiveInviteReceive from "../LiveInviteReceive/LiveInviteReceive.vue";
73
+ import LiveMultipleMeeting from "../LiveMultipleMeeting/LiveMultipleMeeting.vue";
74
+ import Teleport from 'vue2-teleport'
75
+ import { ShowMessage } from "@/utils/index";
76
+
77
+ export default {
78
+ name: "LiveMulti",
79
+ components: {
80
+ MeetingReadyDialog,
81
+ MiniumVideoDialog,
82
+ LiveInviteReceive,
83
+ LiveMultipleMeeting,
84
+ Teleport
85
+ },
86
+ props: {
87
+ dialogType: {
88
+ type: String,
89
+ default: "launch"
90
+ },
91
+ tempRoomNum: {
92
+ type: String,
93
+ default: ""
94
+ },
95
+ tempRoomName: {
96
+ type: String,
97
+ default: ""
98
+ },
99
+ inviteList: {
100
+ type: Array,
101
+ default: () => []
102
+ },
103
+ deviceList: {
104
+ type: Array,
105
+ default: () => []
106
+ },
107
+ isCustomizeMiniInvitations: {
108
+ type: Boolean,
109
+ default: false
110
+ },
111
+ miniPagePath: {
112
+ type: String,
113
+ default: ""
114
+ },
115
+ defaultInviteWay: {
116
+ type: String,
117
+ default: "identity"
118
+ },
119
+ baseUrl: {
120
+ type: String,
121
+ default: ""
122
+ },
123
+ userData: {
124
+ type: Object,
125
+ default: () => ({})
126
+ },
127
+ org: {
128
+ type: String,
129
+ default: "default"
130
+ },
131
+ token: {
132
+ type: String,
133
+ default: ""
134
+ },
135
+ isInviteReceiveShow: {
136
+ type: Boolean,
137
+ default: false
138
+ },
139
+ inviteData: {
140
+ type: Object,
141
+ default: () => ({})
142
+ },
143
+ value: {
144
+ type: Boolean,
145
+ default: false
146
+ }
147
+ },
148
+ data() {
149
+ return {
150
+ isMeetingDialogShow: false,
151
+ isMiniVideoDialogShow: false,
152
+ multiMeetingData: {
153
+ roomName: "",
154
+ roomNum: "",
155
+ cameraStatus: true,
156
+ microphoneStatus: true,
157
+ outputStatus: true,
158
+ audioInputDevice: "",
159
+ audioOutputDevice: "",
160
+ videoDevice: "",
161
+ joinType: "launch"
162
+ },
163
+ trackData: {},
164
+ isInMeeting: false
165
+ };
166
+ },
167
+ computed: {
168
+ modelValue: {
169
+ get() {
170
+ return this.value;
171
+ },
172
+ set(val) {
173
+ this.$emit('input', val);
174
+ }
175
+ }
176
+ },
177
+ methods: {
178
+ launchMeeting(e) {
179
+ this.multiMeetingData = {
180
+ ...e,
181
+ roomNum: "",
182
+ joinType: "launch"
183
+ };
184
+ this.isMeetingDialogShow = true;
185
+ },
186
+ joinMeeting(e) {
187
+ this.multiMeetingData = {
188
+ ...e,
189
+ roomName: "",
190
+ joinType: "join"
191
+ };
192
+ this.isMeetingDialogShow = true;
193
+ },
194
+ quickLaunch() {
195
+ this.multiMeetingData = {
196
+ roomName: this.userData.username + "的视频会议",
197
+ roomNum: "",
198
+ cameraStatus: true,
199
+ microphoneStatus: true,
200
+ audioInputDevice: "",
201
+ audioOutputDevice: "",
202
+ videoDevice: "",
203
+ joinType: "launch"
204
+ };
205
+ this.isMeetingDialogShow = true;
206
+ },
207
+ closeReadyDialog() {
208
+ this.modelValue = false;
209
+ },
210
+ closeMultiMeeting() {
211
+ this.isMeetingDialogShow = false;
212
+ },
213
+ sendMiniInvite(e) {
214
+ this.$emit("miniInviteSend", e);
215
+ },
216
+ sendMessageInvite(e) {
217
+ this.$emit("inviteMessageSend", e);
218
+ },
219
+ async appendInvite(e) {
220
+ this.$nextTick(() => {
221
+ if (this.$refs.liveMultipleMeetingRef) {
222
+ if (this.isInMeeting) {
223
+ this.$refs.liveMultipleMeetingRef.appendInvite(e.inviteList, e.inviteWay);
224
+ } else {
225
+ this.showMessage.error("请先进入会议");
226
+ }
227
+ }
228
+ })
229
+ },
230
+ pullMonitorDevice(monitorID, monitorName) {
231
+ if (this.$refs.liveMultipleMeetingRef) {
232
+ if (this.isInMeeting) {
233
+ this.$refs.liveMultipleMeetingRef.pullMonitorDevice(monitorID, monitorName);
234
+ } else {
235
+ this.showMessage.error("请先进入会议");
236
+ }
237
+ }
238
+ },
239
+ openMiniVideoDialog(e) {
240
+ this.trackData = e;
241
+ this.isMiniVideoDialogShow = true;
242
+ },
243
+ resetMultiDialog() {
244
+ this.isMiniVideoDialogShow = false;
245
+ this.$refs.liveMultipleMeetingRef.resetDialog();
246
+ },
247
+ closeMiniVideoDialog() {
248
+ this.isMiniVideoDialogShow = false;
249
+ },
250
+ inviteReceiveClose() {
251
+ this.$emit("inviteReceiveClose");
252
+ },
253
+ handleMeetingStart() {
254
+ this.isInMeeting = true;
255
+ },
256
+ handleMeetingEnd() {
257
+ this.isInMeeting = false;
258
+ },
259
+ acceptInviteCall(e) {
260
+ liveClient
261
+ .acceptInvite(e.roomNum, e.fromIdentity)
262
+ .then((res) => {
263
+ if (res?.code == 200) {
264
+ this.joinMeeting({
265
+ roomNum: e.roomNum,
266
+ cameraStatus: true,
267
+ microphoneStatus: true,
268
+ outputStatus: true,
269
+ audioInputDevice: "",
270
+ audioOutputDevice: "",
271
+ videoDevice: ""
272
+ });
273
+ this.inviteReceiveClose();
274
+ } else {
275
+ this.showMessage.error(res?.msg || "接受会议邀请失败,请重试");
276
+ }
277
+ })
278
+ .catch(() => {
279
+ this.showMessage.error("接受会议邀请失败,请重试");
280
+ });
281
+ },
282
+ refuseInviteCall(e) {
283
+ liveClient
284
+ .refuseInvite(e.roomNum, e.fromIdentity)
285
+ .then((res) => {
286
+ if (res?.code == 200) {
287
+ this.inviteReceiveClose();
288
+ } else {
289
+ this.showMessage.error(res?.msg || "拒绝会议邀请失败,请重试");
290
+ }
291
+ })
292
+ .catch(() => {
293
+ this.showMessage.error("拒绝会议邀请失败,请重试");
294
+ });
295
+ }
296
+ },
297
+ created() {
298
+ this.showMessage = new ShowMessage();
299
+ }
300
+ };
301
+ </script>
302
+
303
+ <style lang="scss" scoped></style>