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,180 @@
1
+ <template>
2
+ <div class="dialog" :style="position">
3
+ <div class="dialog-inner">
4
+ <div class="mark-list">
5
+ <div class="mark-list-title">会议主题</div>
6
+ <div class="mark-list-value">
7
+ <span>{{ meetingName }}</span>
8
+ </div>
9
+ </div>
10
+ <div class="mark-list">
11
+ <div class="mark-list-title">会议ID</div>
12
+ <div class="mark-list-value">
13
+ <span id="meeting-num">{{ meetingNum }}</span>
14
+ <div class="mark-icon-box">
15
+ <div
16
+ class="mark-icon"
17
+ @click="clipTextToBoard('meeting-num')"
18
+ ></div>
19
+ </div>
20
+ </div>
21
+ </div>
22
+ <div class="mark-list">
23
+ <div class="mark-list-title">会议发起人</div>
24
+ <div class="mark-list-value">
25
+ {{ meetingCreator }}
26
+ </div>
27
+ </div>
28
+ <div class="dialog-inner-foot">
29
+ <div class="dialog-inner-foot-btn" @click="clipAllText">一键复制</div>
30
+ </div>
31
+ </div>
32
+ </div>
33
+ </template>
34
+
35
+ <script>
36
+ import { ShowMessage } from "@/utils/index";
37
+
38
+ export default {
39
+ name: "ThemeDialog",
40
+ props: {
41
+ position: {
42
+ type: Object,
43
+ default: () => {
44
+ return {
45
+ left: "0px",
46
+ top: "0px",
47
+ };
48
+ },
49
+ },
50
+ meetingName: {
51
+ type: String
52
+ },
53
+ meetingNum: {
54
+ type: String
55
+ },
56
+ meetingCreator: {
57
+ type: String
58
+ }
59
+ },
60
+ data() {
61
+ return {
62
+ showMessage: null,
63
+ };
64
+ },
65
+ created() {
66
+ this.showMessage = new ShowMessage();
67
+ },
68
+ methods: {
69
+ async clipTextToBoard(id) {
70
+ await this.$nextTick();
71
+ let dom = document.getElementById(id);
72
+ if (dom) {
73
+ if (navigator.clipboard) {
74
+ const content = dom.innerText;
75
+ navigator.clipboard
76
+ .writeText(content)
77
+ .then(() => {
78
+ this.showMessage.message("success", "已复制到剪贴板");
79
+ })
80
+ .catch((err) => {
81
+ this.showMessage.message("error", "复制失败,请重试");
82
+ });
83
+ } else {
84
+ this.showMessage.message("warning", "当前浏览器不支持复制内容");
85
+ }
86
+ dom = null;
87
+ }
88
+ },
89
+ async clipAllText() {
90
+ await this.$nextTick();
91
+ if (navigator.clipboard) {
92
+ const content = `会议主题:${this.meetingName}\n会议ID:${this.meetingNum}\n会议发起人:${this.meetingCreator}`;
93
+ navigator.clipboard
94
+ .writeText(content)
95
+ .then(() => {
96
+ this.showMessage.message("success", "已复制到剪贴板");
97
+ })
98
+ .catch((err) => {
99
+ this.showMessage.message("error", "复制失败,请重试");
100
+ });
101
+ } else {
102
+ this.showMessage.message("warning", "当前浏览器不支持复制内容");
103
+ }
104
+ },
105
+ }
106
+ }
107
+ </script>
108
+
109
+ <style lang="scss" scoped>
110
+ .dialog {
111
+ position: absolute;
112
+ z-index: 100;
113
+ width: 300px;
114
+ height: auto;
115
+ padding-top: 30px;
116
+ &-inner {
117
+ background: var(--dialog-bg);
118
+ box-shadow: 0px 0px 8px 0px var(--dialog-shadow-color);
119
+ border-radius: 8px;
120
+ border: 2px solid var(--dialog-border-color);
121
+ width: 100%;
122
+ min-height: 120px;
123
+ height: auto;
124
+ padding: 27px 25px 26px 25px;
125
+ &-foot {
126
+ width: 100%;
127
+ display: flex;
128
+ justify-content: center;
129
+ align-items: center;
130
+ &-btn {
131
+ background: var(--btn-primary-bg);
132
+ border-radius: 8px;
133
+ font-weight: 500;
134
+ font-size: 16px;
135
+ color: var(--theme-font-color);
136
+ line-height: 36px;
137
+ padding: 0 24px;
138
+ cursor: pointer;
139
+ }
140
+ }
141
+ }
142
+ .mark-list {
143
+ width: 100%;
144
+ display: flex;
145
+ align-items: flex-start;
146
+ font-weight: 500;
147
+ font-size: 16px;
148
+ &:not(:last-child) {
149
+ margin-bottom: 15px;
150
+ }
151
+ &-title {
152
+ width: 100px;
153
+ line-height: 22px;
154
+ color: var(--input-placeholder-color);
155
+ text-align: left;
156
+ }
157
+ &-value {
158
+ color: var(--theme-font-color);
159
+ width: calc(100% - 100px);
160
+ word-break: break-all;
161
+ line-height: 22px;
162
+ display: flex;
163
+ align-items: center;
164
+ .mark-icon-box {
165
+ display: inline-block;
166
+ width: 22px;
167
+ line-height: 22px;
168
+ margin-left: 14px;
169
+ cursor: pointer;
170
+ padding-top: 4px;
171
+ .mark-icon {
172
+ width: 18px;
173
+ height: 18px;
174
+ background: var(--meeting-copy-icon) no-repeat center / 100% 100%;
175
+ }
176
+ }
177
+ }
178
+ }
179
+ }
180
+ </style>
@@ -0,0 +1,162 @@
1
+ <template>
2
+ <div>
3
+ <el-dialog
4
+ :visible.sync="iselephoneShow"
5
+ append-to-body
6
+ :show-close="false"
7
+ class="update-name-dialog"
8
+ :close-on-click-modal="false"
9
+ :close-on-press-escape="false"
10
+ width="510px"
11
+ >
12
+ <div slot="title" class="dialog-title">
13
+ 修改与会者名称
14
+ <span class="close-icon" @click="iselephoneShow = false"></span>
15
+ </div>
16
+ <el-form
17
+ :model="form"
18
+ ref="createForm"
19
+ :rules="rules1"
20
+ class="custom-form"
21
+ >
22
+ <el-form-item label="与会者名称" prop="name">
23
+ <el-input v-model="form.name" maxlength="10" placeholder="请输入" />
24
+ </el-form-item>
25
+ </el-form>
26
+ <div slot="footer" class="dialog-footer">
27
+ <div class="btn btn-plain" @click="updateNameCancel">取消</div>
28
+ <div class="btn btn-primary" @click="updateNameConfirm">确定</div>
29
+ </div>
30
+ </el-dialog>
31
+ </div>
32
+ </template>
33
+
34
+ <script>
35
+ import { mittBus } from "@/utils/index";
36
+
37
+ export default {
38
+ name: "UpdateNameDialog",
39
+ data() {
40
+ return {
41
+ iselephoneShow: false,
42
+ form: {
43
+ name: "",
44
+ sort: 1,
45
+ },
46
+ identity: "",
47
+ rules1: {
48
+ name: [
49
+ { required: true, message: "请输入名称", trigger: "blur" },
50
+ { min: 1, max: 10, message: '与会者名称不应超过10个字符', trigger: 'blur' }
51
+ ],
52
+ },
53
+ };
54
+ },
55
+ watch: {
56
+ iselephoneShow(newVal) {
57
+ if (newVal) {
58
+ this.form.name = "";
59
+ }
60
+ }
61
+ },
62
+ created() {
63
+ mittBus.on("updateName", (e) => {
64
+ this.iselephoneShow = true;
65
+ this.identity = e.identity;
66
+ });
67
+ },
68
+ methods: {
69
+ updateNameCancel() {
70
+ this.$emit("updateNameCancel");
71
+ this.iselephoneShow = false;
72
+ },
73
+ updateNameConfirm() {
74
+ this.$nextTick(() => {
75
+ this.$refs.createForm.validate((valid) => {
76
+ if (valid) {
77
+ this.$emit("updateNameConfirm", {
78
+ name: this.form.name,
79
+ identity: this.identity
80
+ });
81
+ this.iselephoneShow = false;
82
+ }
83
+ });
84
+ });
85
+ },
86
+ }
87
+ }
88
+ </script>
89
+
90
+ <style lang="scss" scoped>
91
+ @import "../../assets/style/mixin.scss";
92
+
93
+ :deep(.el-dialog) {
94
+ width: 510px;
95
+ border-radius: 12px;
96
+ box-shadow: 0 8px 32px 0 var(--dialog-shadow-color);
97
+ @include dialog;
98
+ }
99
+
100
+ :deep(.el-form) {
101
+ margin-top: 40px;
102
+ width: 100%;
103
+ padding: 0 20px;
104
+ .el-form-item {
105
+ margin-bottom: 20px;
106
+ width: 100%;
107
+ .el-form-item__label {
108
+ width: 120px;
109
+ padding-right: 20px;
110
+ font-size: 16px;
111
+ color: var(--theme-font-color);
112
+ font-family: var(--main-font);
113
+ }
114
+ .el-form-item__content {
115
+ flex: none;
116
+ width: calc(100% - 120px);
117
+ }
118
+ .el-input {
119
+ width: 100%;
120
+ }
121
+ }
122
+ }
123
+
124
+ .update-name-dialog {
125
+ .dialog-title {
126
+ display: flex;
127
+ align-items: center;
128
+ width: 100%;
129
+ justify-content: space-between;
130
+ font-size: 18px;
131
+ font-weight: 500;
132
+ color: var(--theme-font-color);
133
+ .close-icon {
134
+ width: 16px;
135
+ height: 16px;
136
+ background: var(--close-icon) no-repeat center center / 100% 100%;
137
+ cursor: pointer;
138
+ }
139
+ }
140
+ .dialog-footer {
141
+ display: flex;
142
+ justify-content: center;
143
+ padding: 40px 0;
144
+ .btn {
145
+ width: 100px;
146
+ height: 36px;
147
+ @include button;
148
+ &.btn-primary {
149
+ @include btnPrimary;
150
+ }
151
+ &.btn-plain {
152
+ border: 1px solid var(--btn-primary-bg);
153
+ color: var(--btn-primary-bg);
154
+ background: transparent;
155
+ }
156
+ &:not(:last-child) {
157
+ margin-right: 10px;
158
+ }
159
+ }
160
+ }
161
+ }
162
+ </style>
@@ -0,0 +1,58 @@
1
+ function clickOutside(Vue) {
2
+ Vue.directive("click-outside", {
3
+ bind(el, binding) {
4
+ if (typeof binding.value !== 'function') {
5
+ console.warn(`v-click-outside:需要传入一个函数作为回调`);
6
+ return;
7
+ }
8
+
9
+ // 保存回调函数
10
+ el._clickOutsideHandler = (event) => {
11
+ // 判断点击的元素是否是当前元素或当前元素的子元素
12
+ if (el === event.target || el.contains(event.target)) {
13
+ return;
14
+ }
15
+
16
+ // 如果点击的是元素外部,则执行回调函数
17
+ binding.value(event);
18
+ };
19
+
20
+ // 添加点击事件监听
21
+ document.addEventListener('click', el._clickOutsideHandler);
22
+ },
23
+
24
+ unbind(el) {
25
+ // 组件卸载前移除事件监听,防止内存泄漏
26
+ if (el._clickOutsideHandler) {
27
+ document.removeEventListener('click', el._clickOutsideHandler);
28
+ delete el._clickOutsideHandler;
29
+ }
30
+ },
31
+
32
+ // 当指令的值发生变化时,更新回调函数
33
+ update(el, binding) {
34
+ if (typeof binding.value !== 'function') {
35
+ console.warn(`v-click-outside:需要传入一个函数作为回调`);
36
+ return;
37
+ }
38
+
39
+ // 先移除旧的事件监听
40
+ if (el._clickOutsideHandler) {
41
+ document.removeEventListener('click', el._clickOutsideHandler);
42
+ }
43
+
44
+ // 添加新的回调函数
45
+ el._clickOutsideHandler = (event) => {
46
+ if (el === event.target || el.contains(event.target)) {
47
+ return;
48
+ }
49
+ binding.value(event);
50
+ };
51
+
52
+ // 重新添加事件监听
53
+ document.addEventListener('click', el._clickOutsideHandler);
54
+ }
55
+ });
56
+ }
57
+
58
+ export default clickOutside;
@@ -0,0 +1,165 @@
1
+ import { getStyle } from "@/utils/index"
2
+
3
+ function drag(Vue) {
4
+ Vue.directive("drag", {
5
+ bind: (el, binding) => {
6
+ if (!binding.value) return
7
+
8
+ // 允许拖动
9
+ el.style.cursor = "move"
10
+ el.style.touchAction = "none" // 防止触摸事件被浏览器默认行为处理
11
+
12
+ let dragElement = null
13
+ let isDragging = false
14
+ let startX = 0
15
+ let startY = 0
16
+ let initialX = 0
17
+ let initialY = 0
18
+
19
+ // 获取元素当前位置
20
+ const getCurrentPosition = () => {
21
+ if (!dragElement) return [0, 0]
22
+
23
+ const matrix3dReg = /^matrix3d\((?:[-\d.]+,\s*){12}([-\d.]+),\s*([-\d.]+)(?:,\s*[-\d.]+){2}\)/
24
+ const matrixReg = /^matrix\((?:[-\d.]+,\s*){4}([-\d.]+),\s*([-\d.]+)\)$/
25
+ const transform = getStyle(dragElement, "transform")
26
+
27
+ if (transform && transform !== 'none') {
28
+ const match = transform.match(matrix3dReg) || transform.match(matrixReg)
29
+ return match ? [parseFloat(match[1]), parseFloat(match[2])] : [0, 0]
30
+ }
31
+
32
+ // 如果没有transform,检查left和top
33
+ const left = parseFloat(getStyle(dragElement, "left")) || 0
34
+ const top = parseFloat(getStyle(dragElement, "top")) || 0
35
+ return [left, top]
36
+ }
37
+
38
+ // 更新元素位置
39
+ const updatePosition = (x, y) => {
40
+ if (!dragElement) return
41
+ requestAnimationFrame(() => {
42
+ dragElement.style.transform = `translate(${x}px, ${y}px)`
43
+ })
44
+ }
45
+
46
+ // 开始拖动
47
+ const startDrag = (clientX, clientY) => {
48
+ if (!dragElement) {
49
+ // 延迟获取元素,解决DOM未渲染的问题
50
+ dragElement = document.getElementById(binding.value)
51
+ if (!dragElement) {
52
+ console.warn(`Drag directive: Element with id "${binding.value}" still not found`)
53
+ return
54
+ }
55
+
56
+ // 确保目标元素有正确的定位
57
+ if (getComputedStyle(dragElement).position === 'static') {
58
+ dragElement.style.position = 'relative'
59
+ }
60
+ }
61
+
62
+ isDragging = true
63
+ startX = clientX
64
+ startY = clientY
65
+ const [currentX, currentY] = getCurrentPosition()
66
+ initialX = currentX
67
+ initialY = currentY
68
+
69
+ // 添加拖动时的样式
70
+ dragElement.style.transition = 'none'
71
+ dragElement.style.zIndex = '9999'
72
+ }
73
+
74
+ // 拖动中
75
+ const onDrag = (clientX, clientY) => {
76
+ if (!isDragging || !dragElement) return
77
+ const deltaX = clientX - startX
78
+ const deltaY = clientY - startY
79
+ updatePosition(initialX + deltaX, initialY + deltaY)
80
+ }
81
+
82
+ // 结束拖动
83
+ const endDrag = () => {
84
+ if (!dragElement) return
85
+ isDragging = false
86
+ dragElement.style.transition = ''
87
+ dragElement.style.zIndex = ''
88
+ }
89
+
90
+ // 鼠标事件处理
91
+ const handleMouseDown = (e) => {
92
+ if (e.button !== 0) return // 只响应左键
93
+ e.stopPropagation()
94
+ e.preventDefault()
95
+ startDrag(e.clientX, e.clientY)
96
+ }
97
+
98
+ const handleMouseMove = (e) => {
99
+ if (!isDragging) return
100
+ e.stopPropagation()
101
+ e.preventDefault()
102
+ onDrag(e.clientX, e.clientY)
103
+ }
104
+
105
+ const handleMouseUp = () => {
106
+ endDrag()
107
+ }
108
+
109
+ // 触摸事件处理
110
+ const handleTouchStart = (e) => {
111
+ if (e.touches.length !== 1) return // 只处理单指触摸
112
+ e.stopPropagation()
113
+ e.preventDefault()
114
+ const touch = e.touches[0]
115
+ startDrag(touch.clientX, touch.clientY)
116
+ }
117
+
118
+ const handleTouchMove = (e) => {
119
+ if (!isDragging) return
120
+ e.stopPropagation()
121
+ e.preventDefault()
122
+ const touch = e.touches[0]
123
+ onDrag(touch.clientX, touch.clientY)
124
+ }
125
+
126
+ const handleTouchEnd = () => {
127
+ endDrag()
128
+ }
129
+
130
+ // 添加事件监听
131
+ el.addEventListener("mousedown", handleMouseDown)
132
+ el.addEventListener("touchstart", handleTouchStart, { passive: false })
133
+
134
+ // 在window上添加移动和结束事件
135
+ window.addEventListener("mousemove", handleMouseMove)
136
+ window.addEventListener("touchmove", handleTouchMove, { passive: false })
137
+ window.addEventListener("mouseup", handleMouseUp)
138
+ window.addEventListener("touchend", handleTouchEnd)
139
+
140
+ // 清理函数
141
+ el._cleanup = () => {
142
+ el.removeEventListener("mousedown", handleMouseDown)
143
+ el.removeEventListener("touchstart", handleTouchStart)
144
+ window.removeEventListener("mousemove", handleMouseMove)
145
+ window.removeEventListener("touchmove", handleTouchMove)
146
+ window.removeEventListener("mouseup", handleMouseUp)
147
+ window.removeEventListener("touchend", handleTouchEnd)
148
+ }
149
+ },
150
+ update: (el, binding) => {
151
+ // 当绑定值更新时,可以在这里处理
152
+ },
153
+ componentUpdated: (el, binding) => {
154
+ // 组件更新后,确保元素存在
155
+ },
156
+ unbind: (el) => {
157
+ // 清理事件监听
158
+ if (el._cleanup) {
159
+ el._cleanup()
160
+ }
161
+ }
162
+ })
163
+ }
164
+
165
+ export default drag
@@ -0,0 +1,22 @@
1
+ import Vue from "vue"
2
+ const directiveName = "scale"
3
+
4
+ function transformScale(el, option = {}) {
5
+ const { designWidth = 1920, designHeight = 1080 } = option
6
+ Vue.nextTick(() => {
7
+ const docWidth = document.documentElement.clientWidth
8
+ const docHeight = document.documentElement.clientHeight
9
+ el.style.transformOrigin = origin
10
+ const scaleX = docWidth / designWidth
11
+ const scaleY = docHeight / designHeight
12
+ el.style.transform = `scaleX(${scaleX}) scaleY(${scaleY})`
13
+ })
14
+ }
15
+ function inserted(el, binding) {
16
+ transformScale(el, binding.value instanceof Object ? binding.value : {})
17
+ }
18
+
19
+ export default {
20
+ directiveName,
21
+ inserted
22
+ }
@@ -0,0 +1,77 @@
1
+ function throttle(Vue) {
2
+ Vue.directive("throttle-click", {
3
+ bind(el, binding) {
4
+ if (typeof binding.value !== 'function') {
5
+ console.warn(`v-throttle-click:需要传入一个函数作为回调`);
6
+ return;
7
+ }
8
+
9
+ // 获取节流时间,默认1秒
10
+ const delay = binding.arg ? parseInt(binding.arg) : 1000;
11
+
12
+ // 初始化最后点击时间
13
+ el._lastClickTime = 0;
14
+
15
+ // 保存节流处理函数
16
+ el._throttleClickHandler = (event) => {
17
+ const currentTime = Date.now();
18
+
19
+ // 如果距离上次点击时间小于设定的延迟时间,则不执行
20
+ if (currentTime - el._lastClickTime < delay) {
21
+ return;
22
+ }
23
+
24
+ // 更新最后点击时间
25
+ el._lastClickTime = currentTime;
26
+
27
+ // 执行回调函数
28
+ binding.value(event);
29
+ };
30
+
31
+ // 添加点击事件监听
32
+ el.addEventListener('click', el._throttleClickHandler);
33
+ },
34
+
35
+ unbind(el) {
36
+ // 组件卸载前移除事件监听,防止内存泄漏
37
+ if (el._throttleClickHandler) {
38
+ el.removeEventListener('click', el._throttleClickHandler);
39
+ delete el._throttleClickHandler;
40
+ delete el._lastClickTime;
41
+ }
42
+ },
43
+
44
+ // 当指令的值发生变化时,更新回调函数
45
+ update(el, binding) {
46
+ if (typeof binding.value !== 'function') {
47
+ console.warn(`v-throttle-click:需要传入一个函数作为回调`);
48
+ return;
49
+ }
50
+
51
+ // 先移除旧的事件监听
52
+ if (el._throttleClickHandler) {
53
+ el.removeEventListener('click', el._throttleClickHandler);
54
+ }
55
+
56
+ // 获取节流时间,默认1秒
57
+ const delay = binding.arg ? parseInt(binding.arg) : 1000;
58
+
59
+ // 重新创建节流处理函数
60
+ el._throttleClickHandler = (event) => {
61
+ const currentTime = Date.now();
62
+
63
+ if (currentTime - (el._lastClickTime || 0) < delay) {
64
+ return;
65
+ }
66
+
67
+ el._lastClickTime = currentTime;
68
+ binding.value(event);
69
+ };
70
+
71
+ // 重新添加事件监听
72
+ el.addEventListener('click', el._throttleClickHandler);
73
+ }
74
+ });
75
+ }
76
+
77
+ export default throttle;
package/src/main.js ADDED
@@ -0,0 +1,21 @@
1
+ import Vue from 'vue'
2
+ import App from './App.vue'
3
+ // 测试
4
+ import liveComponent from '../index'
5
+ // npm
6
+ // import HxLiveClient from "hx-live-client"
7
+ import ElementUI from 'element-ui'
8
+ import 'element-ui/lib/theme-chalk/index.css';
9
+
10
+
11
+ Vue.config.productionTip = false
12
+ Vue.use(ElementUI)
13
+ // 测试
14
+ Vue.use(liveComponent)
15
+ // npm
16
+ // Vue.use(HxLiveClient)
17
+
18
+
19
+ new Vue({
20
+ render: h => h(App),
21
+ }).$mount('#app')