@aochuang/client-sdk 1.0.278

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 (366) hide show
  1. package/README.md +93 -0
  2. package/common/avatar/avatar.vue +86 -0
  3. package/common/avatar/index.js +3 -0
  4. package/common/badge/badge.vue +105 -0
  5. package/common/badge/index.js +3 -0
  6. package/common/context-menu/context-menu-box.vue +61 -0
  7. package/common/context-menu/context-menu-group.vue +162 -0
  8. package/common/context-menu/context-menu-item.vue +179 -0
  9. package/common/context-menu/context-menu.vue +201 -0
  10. package/common/context-menu/index.js +3 -0
  11. package/common/context-menu/utils.js +138 -0
  12. package/common/friend-avatar/default.svg +1 -0
  13. package/common/friend-avatar/friend-avatar.vue +29 -0
  14. package/common/friend-avatar/index.js +3 -0
  15. package/common/image/index.js +3 -0
  16. package/common/index.js +17 -0
  17. package/common/room-avatar/default.svg +6 -0
  18. package/common/room-avatar/index.js +3 -0
  19. package/common/room-avatar/room-avatar.vue +29 -0
  20. package/common/scroll-load-more/index.js +3 -0
  21. package/common/scroll-load-more/scroll-load-more.vue +195 -0
  22. package/common/user-avatar/default.svg +1 -0
  23. package/common/user-avatar/index.js +3 -0
  24. package/common/user-avatar/user-avatar.vue +29 -0
  25. package/components/account-select/account-select-skeleton.vue +56 -0
  26. package/components/account-select/account-select.vue +205 -0
  27. package/components/account-select/all.svg +1 -0
  28. package/components/account-select/index.js +3 -0
  29. package/components/chat-editor/MENTION_TOKEN_SUMMARY.md +74 -0
  30. package/components/chat-editor/chat-editor-button/chat-editor-button.vue +78 -0
  31. package/components/chat-editor/chat-editor-suggestions/chat-editor-suggestions.vue +329 -0
  32. package/components/chat-editor/chat-editor-toolbar/chat-editor-toolbar-item.vue +28 -0
  33. package/components/chat-editor/chat-editor-toolbar/chat-editor-toolbar.vue +17 -0
  34. package/components/chat-editor/chat-editor.vue +933 -0
  35. package/components/chat-editor/index.js +12 -0
  36. package/components/chat-editor/utils.js +189 -0
  37. package/components/chat-friend-profile/chat-friend-profile.vue +118 -0
  38. package/components/chat-friend-profile/index.js +3 -0
  39. package/components/chat-layout/chat-layout.vue +71 -0
  40. package/components/chat-layout/index.js +3 -0
  41. package/components/chat-panel/chat-panel-box.vue +350 -0
  42. package/components/chat-panel/chat-panel-chat.vue +121 -0
  43. package/components/chat-panel/chat-panel-chats.vue +674 -0
  44. package/components/chat-panel/chat-panel-empty.vue +32 -0
  45. package/components/chat-panel/chat-panel-increment.vue +80 -0
  46. package/components/chat-panel/chat-panel-inner-msg.vue +25 -0
  47. package/components/chat-panel/chat-panel-loading.vue +29 -0
  48. package/components/chat-panel/chat-panel-nearest.vue +136 -0
  49. package/components/chat-panel/chat-panel.vue +292 -0
  50. package/components/chat-panel/index.js +3 -0
  51. package/components/chat-panel/util.js +83 -0
  52. package/components/chat-room-profile/chat-room-profile.vue +103 -0
  53. package/components/chat-room-profile/index.js +3 -0
  54. package/components/contacts-friend-select/contacts-friend-select-skeleton.vue +41 -0
  55. package/components/contacts-friend-select/contacts-friend-select.vue +204 -0
  56. package/components/contacts-friend-select/index.js +3 -0
  57. package/components/contacts-group-select/contacts-group-select-item.vue +98 -0
  58. package/components/contacts-group-select/contacts-group-select-skeleton.vue +81 -0
  59. package/components/contacts-group-select/contacts-group-select.vue +396 -0
  60. package/components/contacts-group-select/index.js +3 -0
  61. package/components/contacts-room-select/contacts-room-select-skeleton.vue +41 -0
  62. package/components/contacts-room-select/contacts-room-select.vue +208 -0
  63. package/components/contacts-room-select/index.js +3 -0
  64. package/components/index.js +43 -0
  65. package/components/layout/index.js +3 -0
  66. package/components/layout/layout.vue +70 -0
  67. package/components/session-select/index.js +11 -0
  68. package/components/session-select/session-select-item-skeleton.vue +59 -0
  69. package/components/session-select/session-select-item.vue +190 -0
  70. package/components/session-select/session-select.vue +386 -0
  71. package/components/wechat-chat-control/calling/calling.vue +227 -0
  72. package/components/wechat-chat-control/calling/phone-fill.svg +1 -0
  73. package/components/wechat-chat-control/calling/vidicon-fill.svg +1 -0
  74. package/components/wechat-chat-control/channel-live/channel-live.vue +198 -0
  75. package/components/wechat-chat-control/channel-live/quote-icon.svg +1 -0
  76. package/components/wechat-chat-control/channel-video/channel-video.vue +180 -0
  77. package/components/wechat-chat-control/channel-video/quote-icon.svg +1 -0
  78. package/components/wechat-chat-control/channel-video-card/channel-video-card.vue +139 -0
  79. package/components/wechat-chat-control/channel-video-card/quote-icon.svg +1 -0
  80. package/components/wechat-chat-control/company-card/company-card.vue +136 -0
  81. package/components/wechat-chat-control/company-card/quote-icon.svg +1 -0
  82. package/components/wechat-chat-control/custom-expression/custom-expression.vue +45 -0
  83. package/components/wechat-chat-control/empty/empty.vue +27 -0
  84. package/components/wechat-chat-control/file-url/file-url.vue +307 -0
  85. package/components/wechat-chat-control/file-url/icons/file-excel-line.svg +1 -0
  86. package/components/wechat-chat-control/file-url/icons/file-info-line.svg +1 -0
  87. package/components/wechat-chat-control/file-url/icons/file-music-line.svg +1 -0
  88. package/components/wechat-chat-control/file-url/icons/file-pdf-line.svg +1 -0
  89. package/components/wechat-chat-control/file-url/icons/file-ppt-line.svg +1 -0
  90. package/components/wechat-chat-control/file-url/icons/file-settings-line.svg +1 -0
  91. package/components/wechat-chat-control/file-url/icons/file-text-line.svg +1 -0
  92. package/components/wechat-chat-control/file-url/icons/file-unknow-line.svg +1 -0
  93. package/components/wechat-chat-control/file-url/icons/file-word-line.svg +1 -0
  94. package/components/wechat-chat-control/file-url/icons/file-zip-line.svg +1 -0
  95. package/components/wechat-chat-control/file-url/icons/index.js +24 -0
  96. package/components/wechat-chat-control/image/image.vue +344 -0
  97. package/components/wechat-chat-control/image/index.js +1 -0
  98. package/components/wechat-chat-control/image/util.js +29 -0
  99. package/components/wechat-chat-control/index.js +104 -0
  100. package/components/wechat-chat-control/jx-sys-text/jx-sys-text.vue +28 -0
  101. package/components/wechat-chat-control/location/location.vue +179 -0
  102. package/components/wechat-chat-control/location/offline-bg.png +0 -0
  103. package/components/wechat-chat-control/member-change/member-change.vue +37 -0
  104. package/components/wechat-chat-control/music/icons/163.png +0 -0
  105. package/components/wechat-chat-control/music/icons/163.svg +12 -0
  106. package/components/wechat-chat-control/music/icons/default.png +0 -0
  107. package/components/wechat-chat-control/music/icons/default.svg +1 -0
  108. package/components/wechat-chat-control/music/icons/kuwo.png +0 -0
  109. package/components/wechat-chat-control/music/icons/qq.png +0 -0
  110. package/components/wechat-chat-control/music/icons/qq.svg +1 -0
  111. package/components/wechat-chat-control/music/music.vue +156 -0
  112. package/components/wechat-chat-control/music/utils.js +30 -0
  113. package/components/wechat-chat-control/quote-message/quote-message.vue +257 -0
  114. package/components/wechat-chat-control/real-time-position/icon.svg +1 -0
  115. package/components/wechat-chat-control/real-time-position/real-time-position.vue +57 -0
  116. package/components/wechat-chat-control/red-envelopes/quote-icon.svg +1 -0
  117. package/components/wechat-chat-control/red-envelopes/red-envelope.svg +1 -0
  118. package/components/wechat-chat-control/red-envelopes/red-envelopes.vue +168 -0
  119. package/components/wechat-chat-control/revoke-me-message/revoke-me-message.vue +41 -0
  120. package/components/wechat-chat-control/revoke-other-message/revoke-other-message.vue +41 -0
  121. package/components/wechat-chat-control/revoke-you-message/revoke-you-message.vue +41 -0
  122. package/components/wechat-chat-control/room-calling/phone-fill.svg +1 -0
  123. package/components/wechat-chat-control/room-calling/room-calling.vue +52 -0
  124. package/components/wechat-chat-control/room-calling/vidicon-fill.svg +1 -0
  125. package/components/wechat-chat-control/share-card/quote-icon.svg +1 -0
  126. package/components/wechat-chat-control/share-card/share-card.vue +140 -0
  127. package/components/wechat-chat-control/system/system.vue +122 -0
  128. package/components/wechat-chat-control/system-batch-message/system-batch-message.vue +28 -0
  129. package/components/wechat-chat-control/system-money/system-money.vue +39 -0
  130. package/components/wechat-chat-control/text/icons/icon.svg +6 -0
  131. package/components/wechat-chat-control/text/text.vue +164 -0
  132. package/components/wechat-chat-control/text-with-at/text-with-at.vue +88 -0
  133. package/components/wechat-chat-control/transfer/collection.svg +1 -0
  134. package/components/wechat-chat-control/transfer/quote-icon.svg +1 -0
  135. package/components/wechat-chat-control/transfer/red-transfer.svg +1 -0
  136. package/components/wechat-chat-control/transfer/refund.svg +1 -0
  137. package/components/wechat-chat-control/transfer/transfer.svg +1 -0
  138. package/components/wechat-chat-control/transfer/transfer.vue +263 -0
  139. package/components/wechat-chat-control/unknow/unknow.vue +21 -0
  140. package/components/wechat-chat-control/url/icons/link.svg +1 -0
  141. package/components/wechat-chat-control/url/icons/video.svg +6 -0
  142. package/components/wechat-chat-control/url/miniprogram.svg +1 -0
  143. package/components/wechat-chat-control/url/url-file.vue +47 -0
  144. package/components/wechat-chat-control/url/url-link.vue +169 -0
  145. package/components/wechat-chat-control/url/url-merge.vue +164 -0
  146. package/components/wechat-chat-control/url/url-miniprogram.vue +259 -0
  147. package/components/wechat-chat-control/url/url.vue +116 -0
  148. package/components/wechat-chat-control/util.js +234 -0
  149. package/components/wechat-chat-control/video/icons/video.svg +1 -0
  150. package/components/wechat-chat-control/video/video.vue +304 -0
  151. package/components/wechat-chat-control/voice/icons/voice.svg +1 -0
  152. package/components/wechat-chat-control/voice/voice.vue +464 -0
  153. package/components/wechat-chat-control/wechat-chat-control-config-item.vue +24 -0
  154. package/components/wechat-chat-control/wechat-chat-control-config-msg.vue +21 -0
  155. package/components/wechat-chat-control/wechat-chat-control-config.vue +57 -0
  156. package/components/wechat-chat-panel/chat-panel-chat-status/chat-panel-chat-status.vue +69 -0
  157. package/components/wechat-chat-panel/chat-panel-item.vue +695 -0
  158. package/components/wechat-chat-panel/chat-panel.vue +257 -0
  159. package/components/wechat-chat-panel/index.js +3 -0
  160. package/components/wework-chat-control/calling/calling.vue +223 -0
  161. package/components/wework-chat-control/calling/phone-fill.svg +1 -0
  162. package/components/wework-chat-control/calling/vidicon-fill.svg +1 -0
  163. package/components/wework-chat-control/channel-live/channel-live.vue +198 -0
  164. package/components/wework-chat-control/channel-live/quote-icon.svg +1 -0
  165. package/components/wework-chat-control/channel-video/channel-video.vue +180 -0
  166. package/components/wework-chat-control/channel-video/quote-icon.svg +1 -0
  167. package/components/wework-chat-control/company-card/company-card.vue +136 -0
  168. package/components/wework-chat-control/company-card/quote-icon.svg +1 -0
  169. package/components/wework-chat-control/custom-expression/custom-expression.vue +34 -0
  170. package/components/wework-chat-control/empty/empty.vue +27 -0
  171. package/components/wework-chat-control/expression/expression.vue +53 -0
  172. package/components/wework-chat-control/file-url/file-url.vue +247 -0
  173. package/components/wework-chat-control/file-url/icons/file-excel-line.svg +1 -0
  174. package/components/wework-chat-control/file-url/icons/file-info-line.svg +1 -0
  175. package/components/wework-chat-control/file-url/icons/file-music-line.svg +1 -0
  176. package/components/wework-chat-control/file-url/icons/file-pdf-line.svg +1 -0
  177. package/components/wework-chat-control/file-url/icons/file-ppt-line.svg +1 -0
  178. package/components/wework-chat-control/file-url/icons/file-settings-line.svg +1 -0
  179. package/components/wework-chat-control/file-url/icons/file-text-line.svg +1 -0
  180. package/components/wework-chat-control/file-url/icons/file-unknow-line.svg +1 -0
  181. package/components/wework-chat-control/file-url/icons/file-word-line.svg +1 -0
  182. package/components/wework-chat-control/file-url/icons/file-zip-line.svg +1 -0
  183. package/components/wework-chat-control/file-url/icons/index.js +24 -0
  184. package/components/wework-chat-control/image/image.vue +296 -0
  185. package/components/wework-chat-control/image/index.js +1 -0
  186. package/components/wework-chat-control/image/util.js +21 -0
  187. package/components/wework-chat-control/index.js +105 -0
  188. package/components/wework-chat-control/jx-sys-text/jx-sys-text.vue +28 -0
  189. package/components/wework-chat-control/link/link.vue +100 -0
  190. package/components/wework-chat-control/location/location.vue +181 -0
  191. package/components/wework-chat-control/location/offline-bg.png +0 -0
  192. package/components/wework-chat-control/red-envelopes/quote-icon.svg +1 -0
  193. package/components/wework-chat-control/red-envelopes/red-envelope.svg +1 -0
  194. package/components/wework-chat-control/red-envelopes/red-envelopes.vue +168 -0
  195. package/components/wework-chat-control/share-card/quote-icon.svg +1 -0
  196. package/components/wework-chat-control/share-card/share-card.vue +140 -0
  197. package/components/wework-chat-control/text/icons/icon.svg +6 -0
  198. package/components/wework-chat-control/text/text.vue +157 -0
  199. package/components/wework-chat-control/unknow/unknow.vue +21 -0
  200. package/components/wework-chat-control/url/icons/link.svg +1 -0
  201. package/components/wework-chat-control/url/icons/video.svg +6 -0
  202. package/components/wework-chat-control/url/miniprogram.svg +1 -0
  203. package/components/wework-chat-control/url/url-file.vue +37 -0
  204. package/components/wework-chat-control/url/url-link.vue +169 -0
  205. package/components/wework-chat-control/url/url-merge.vue +164 -0
  206. package/components/wework-chat-control/url/url-miniprogram.vue +248 -0
  207. package/components/wework-chat-control/url/url.vue +103 -0
  208. package/components/wework-chat-control/util.js +223 -0
  209. package/components/wework-chat-control/video/icons/video.svg +1 -0
  210. package/components/wework-chat-control/video/video.vue +304 -0
  211. package/components/wework-chat-control/voice/icons/voice.svg +1 -0
  212. package/components/wework-chat-control/voice/voice.vue +464 -0
  213. package/components/wework-chat-panel/chat-panel-controls/company-card/company-card.vue +35 -0
  214. package/components/wework-chat-panel/chat-panel-controls/expression/expression.vue +36 -0
  215. package/components/wework-chat-panel/chat-panel-controls/file-url/file-url.vue +35 -0
  216. package/components/wework-chat-panel/chat-panel-controls/image/image.vue +36 -0
  217. package/components/wework-chat-panel/chat-panel-controls/index.js +35 -0
  218. package/components/wework-chat-panel/chat-panel-controls/jx-sys-text/jx-sys-text.vue +28 -0
  219. package/components/wework-chat-panel/chat-panel-controls/link/link.vue +35 -0
  220. package/components/wework-chat-panel/chat-panel-controls/location/location.vue +35 -0
  221. package/components/wework-chat-panel/chat-panel-controls/text/text.vue +43 -0
  222. package/components/wework-chat-panel/chat-panel-controls/unkonw/unkonw.vue +39 -0
  223. package/components/wework-chat-panel/chat-panel-controls/video/video.vue +37 -0
  224. package/components/wework-chat-panel/chat-panel-controls/voice/voice.vue +35 -0
  225. package/components/wework-chat-panel/chat-panel-item.vue +650 -0
  226. package/components/wework-chat-panel/chat-panel.vue +163 -0
  227. package/components/wework-chat-panel/index.js +3 -0
  228. package/package.json +23 -0
  229. package/services/client-chat/client-chat-wechat/client-chat-account.js +426 -0
  230. package/services/client-chat/client-chat-wechat/client-chat-concats.js +1029 -0
  231. package/services/client-chat/client-chat-wechat/client-chat-draft.js +92 -0
  232. package/services/client-chat/client-chat-wechat/client-chat-message.js +588 -0
  233. package/services/client-chat/client-chat-wechat/client-chat-session-manage.js +67 -0
  234. package/services/client-chat/client-chat-wechat/client-chat-session.js +1048 -0
  235. package/services/client-chat/client-chat-wechat/client-chat-socket.js +215 -0
  236. package/services/client-chat/client-chat-wechat/client-chat.js +1065 -0
  237. package/services/client-chat/client-chat-wechat/index.js +3 -0
  238. package/services/client-chat/client-chat-wechat/utils.js +82 -0
  239. package/services/client-chat/client-chat-wework/client-chat-account.js +310 -0
  240. package/services/client-chat/client-chat-wework/client-chat-concats.js +772 -0
  241. package/services/client-chat/client-chat-wework/client-chat-message.js +278 -0
  242. package/services/client-chat/client-chat-wework/client-chat-session.js +929 -0
  243. package/services/client-chat/client-chat-wework/client-chat-socket.js +64 -0
  244. package/services/client-chat/client-chat-wework/client-chat.js +330 -0
  245. package/services/client-chat/client-chat-wework/index.js +3 -0
  246. package/services/client-chat/client-chat-wework/utils.js +82 -0
  247. package/services/index.js +10 -0
  248. package/services/socket/index.js +5 -0
  249. package/services/socket/socket.js +797 -0
  250. package/services/socket/utils.js +7 -0
  251. package/uni-common/account-portray/account-portray.vue +51 -0
  252. package/uni-common/account-select/account-select-item.vue +172 -0
  253. package/uni-common/account-select/account-select.vue +252 -0
  254. package/uni-common/all-friend-avatar/all-friend-avatar.vue +49 -0
  255. package/uni-common/friend-avatar/default.svg +1 -0
  256. package/uni-common/friend-avatar/friend-avatar.vue +27 -0
  257. package/uni-common/friend-avatar/index.js +3 -0
  258. package/uni-common/friend-loader/friend-loader.vue +53 -0
  259. package/uni-common/friend-portray/friend-portray.vue +56 -0
  260. package/uni-common/group-avatar/default.svg +1 -0
  261. package/uni-common/group-avatar/group-avatar.vue +18 -0
  262. package/uni-common/group-avatar/index.js +3 -0
  263. package/uni-common/room-avatar/default.svg +6 -0
  264. package/uni-common/room-avatar/index.js +3 -0
  265. package/uni-common/room-avatar/room-avatar.vue +27 -0
  266. package/uni-common/room-loader/room-loader.vue +53 -0
  267. package/uni-common/room-portray/room-portray.vue +56 -0
  268. package/uni-components/chat-control/calling/calling.vue +91 -0
  269. package/uni-components/chat-control/calling/phone-fill.svg +1 -0
  270. package/uni-components/chat-control/calling/vidicon-fill.svg +1 -0
  271. package/uni-components/chat-control/channel-video/channel-video.vue +89 -0
  272. package/uni-components/chat-control/channel-video-card/channel-video-card.vue +105 -0
  273. package/uni-components/chat-control/channel-video-live/channel-video-live.vue +92 -0
  274. package/uni-components/chat-control/chat-control-config-item/chat-control-config-item.vue +20 -0
  275. package/uni-components/chat-control/chat-control-config-item/index.js +3 -0
  276. package/uni-components/chat-control/chat-control-config-msg/chat-control-config-msg-app.vue +25 -0
  277. package/uni-components/chat-control/chat-control-config-msg/chat-control-config-msg-h5.vue +21 -0
  278. package/uni-components/chat-control/chat-control-config.vue +59 -0
  279. package/uni-components/chat-control/chat-control.vue +218 -0
  280. package/uni-components/chat-control/company-card/company-card.vue +123 -0
  281. package/uni-components/chat-control/const.js +28 -0
  282. package/uni-components/chat-control/expression/expression.vue +41 -0
  283. package/uni-components/chat-control/image/image.vue +68 -0
  284. package/uni-components/chat-control/index.js +89 -0
  285. package/uni-components/chat-control/location/location.vue +110 -0
  286. package/uni-components/chat-control/member-change/member-change.vue +32 -0
  287. package/uni-components/chat-control/quote-message/quote-message.vue +216 -0
  288. package/uni-components/chat-control/real-time-position/real-time-position.vue +62 -0
  289. package/uni-components/chat-control/redpacket/red-envelope.svg +1 -0
  290. package/uni-components/chat-control/redpacket/redpacket.vue +75 -0
  291. package/uni-components/chat-control/share-card/share-card.vue +101 -0
  292. package/uni-components/chat-control/system/system.vue +69 -0
  293. package/uni-components/chat-control/system-batch-message/system-batch-message.vue +30 -0
  294. package/uni-components/chat-control/system-text/system-text.vue +32 -0
  295. package/uni-components/chat-control/text/text.vue +67 -0
  296. package/uni-components/chat-control/text-with-at/text-with-at.vue +51 -0
  297. package/uni-components/chat-control/transfer/red-transfer.svg +1 -0
  298. package/uni-components/chat-control/transfer/transfer.vue +80 -0
  299. package/uni-components/chat-control/unkonw/unkonw.vue +37 -0
  300. package/uni-components/chat-control/url/icons/file-excel-line.svg +1 -0
  301. package/uni-components/chat-control/url/icons/file-info-line.svg +1 -0
  302. package/uni-components/chat-control/url/icons/file-music-line.svg +1 -0
  303. package/uni-components/chat-control/url/icons/file-pdf-line.svg +1 -0
  304. package/uni-components/chat-control/url/icons/file-ppt-line.svg +1 -0
  305. package/uni-components/chat-control/url/icons/file-settings-line.svg +1 -0
  306. package/uni-components/chat-control/url/icons/file-text-line.svg +1 -0
  307. package/uni-components/chat-control/url/icons/file-unknow-line.svg +1 -0
  308. package/uni-components/chat-control/url/icons/file-word-line.svg +1 -0
  309. package/uni-components/chat-control/url/icons/file-zip-line.svg +1 -0
  310. package/uni-components/chat-control/url/icons/index.js +24 -0
  311. package/uni-components/chat-control/url/miniprogram.svg +1 -0
  312. package/uni-components/chat-control/url/url-miniprogram.vue +116 -0
  313. package/uni-components/chat-control/url/url.vue +306 -0
  314. package/uni-components/chat-control/url-new/icons/file-excel-line.svg +1 -0
  315. package/uni-components/chat-control/url-new/icons/file-info-line.svg +1 -0
  316. package/uni-components/chat-control/url-new/icons/file-music-line.svg +1 -0
  317. package/uni-components/chat-control/url-new/icons/file-pdf-line.svg +1 -0
  318. package/uni-components/chat-control/url-new/icons/file-ppt-line.svg +1 -0
  319. package/uni-components/chat-control/url-new/icons/file-settings-line.svg +1 -0
  320. package/uni-components/chat-control/url-new/icons/file-text-line.svg +1 -0
  321. package/uni-components/chat-control/url-new/icons/file-unknow-line.svg +1 -0
  322. package/uni-components/chat-control/url-new/icons/file-word-line.svg +1 -0
  323. package/uni-components/chat-control/url-new/icons/file-zip-line.svg +1 -0
  324. package/uni-components/chat-control/url-new/icons/index.js +24 -0
  325. package/uni-components/chat-control/url-new/url-new.vue +110 -0
  326. package/uni-components/chat-control/utils.js +12 -0
  327. package/uni-components/chat-control/video/video.vue +156 -0
  328. package/uni-components/chat-control/voice/voice.vue +166 -0
  329. package/uni-components/chat-editor/chat-editor-chartlet/chat-editor-chartlet-collect.vue +84 -0
  330. package/uni-components/chat-editor/chat-editor-chartlet/chat-editor-chartlet-system.vue +28 -0
  331. package/uni-components/chat-editor/chat-editor-chartlet/chat-editor-chartlet.vue +85 -0
  332. package/uni-components/chat-editor/chat-editor-func/chat-editor-func.vue +157 -0
  333. package/uni-components/chat-editor/chat-editor-func-at/chat-editor-func-at-panel.vue +158 -0
  334. package/uni-components/chat-editor/chat-editor-func-at/chat-editor-func-at.vue +61 -0
  335. package/uni-components/chat-editor/chat-editor-func-button/chat-editor-func-button.vue +58 -0
  336. package/uni-components/chat-editor/chat-editor-func-file/chat-editor-func-file.vue +54 -0
  337. package/uni-components/chat-editor/chat-editor-func-image/chat-editor-func-image.vue +42 -0
  338. package/uni-components/chat-editor/chat-editor-func-video/chat-editor-func-video.vue +42 -0
  339. package/uni-components/chat-editor/chat-editor-func-voice/chat-editor-func-voice.vue +25 -0
  340. package/uni-components/chat-editor/chat-editor-message-send/chat-editor-message-send.vue +158 -0
  341. package/uni-components/chat-editor/chat-editor-quote/chat-editor-quote.vue +75 -0
  342. package/uni-components/chat-editor/chat-editor.vue +257 -0
  343. package/uni-components/chat-editor/index.js +10 -0
  344. package/uni-components/chat-editor/util.js +65 -0
  345. package/uni-components/chat-panel/chat-panel-chats-box.vue +238 -0
  346. package/uni-components/chat-panel/chat-panel-chats-forward/chat-panel-chats-forward.vue +273 -0
  347. package/uni-components/chat-panel/chat-panel-chats-item.vue +578 -0
  348. package/uni-components/chat-panel/chat-panel-chats-status/chat-panel-chats-status.vue +71 -0
  349. package/uni-components/chat-panel/chat-panel-chats.vue +368 -0
  350. package/uni-components/chat-panel/chat-panel.vue +227 -0
  351. package/uni-components/contacts-group-select/contacts-group-select-item.vue +85 -0
  352. package/uni-components/contacts-group-select/contacts-group-select-panel.vue +119 -0
  353. package/uni-components/contacts-group-select/contacts-group-select.vue +150 -0
  354. package/utils/color.js +178 -0
  355. package/utils/data.js +11 -0
  356. package/utils/date.js +107 -0
  357. package/utils/event.js +3 -0
  358. package/utils/file.js +26 -0
  359. package/utils/index.js +5 -0
  360. package/utils/json.js +40 -0
  361. package/utils/log.js +243 -0
  362. package/utils/queue.js +97 -0
  363. package/utils/regexp.js +9 -0
  364. package/utils/string.js +66 -0
  365. package/utils/url.js +48 -0
  366. package/utils/util.js +130 -0
@@ -0,0 +1,80 @@
1
+ <template>
2
+ <div class="sdk-chat-panel-increment">
3
+ <span v-if="loading" class="sdk-chat-panel-increment__loading">
4
+ <ui-icon name="loading"></ui-icon> 加载消息中...
5
+ </span>
6
+ <template v-else-if="complete">
7
+ <div v-if="!rangeLoad" class="sdk-chat-panel-increment__placeholder">{{completeText}}</div>
8
+ <div v-else class="sdk-chat-panel-increment__loadmore" @click="handleRangeClick">点击加载更多消息</div>
9
+ </template>
10
+ <div v-else-if="showLoadMore" class="sdk-chat-panel-increment__loadmore" @click="handleMoreClick">点击加载更多消息</div>
11
+ </div>
12
+ </template>
13
+ <script>
14
+ export default {
15
+ name: 'SdkChatPanelIncrement',
16
+ model: {
17
+ prop: 'placeholder'
18
+ },
19
+ props: {
20
+ loading: {
21
+ type: Boolean
22
+ },
23
+ complete: {
24
+ type: Boolean
25
+ },
26
+ completeText: {
27
+ type: String,
28
+ default: '消息已加载完毕'
29
+ },
30
+ showLoadMore: {
31
+ type: Boolean
32
+ },
33
+ rangeLoad: {
34
+ type: Boolean,
35
+ default: false
36
+ }
37
+ },
38
+ methods: {
39
+ handleMoreClick () {
40
+ if (this.loading) {
41
+ return
42
+ }
43
+ if (this.rangeLoad) {
44
+ this.$emit('range')
45
+ } else {
46
+ this.$emit('load')
47
+ }
48
+ },
49
+ handleRangeClick () {
50
+ if (this.loading) {
51
+ return
52
+ }
53
+ this.$emit('range')
54
+ }
55
+ }
56
+ }
57
+ </script>
58
+ <style lang="less" scoped>
59
+ .sdk-chat-panel-increment{
60
+ padding: 4px 20px;
61
+ height: 18px;
62
+ line-height: 18px;
63
+ text-align: center;
64
+ box-sizing: content-box;
65
+ }
66
+ .sdk-chat-panel-increment__loadmore,
67
+ .sdk-chat-panel-increment__placeholder,
68
+ .sdk-chat-panel-increment__loading{
69
+ display: inline-block;
70
+ padding: 0 12px;
71
+ color: #ccc;
72
+ }
73
+ .sdk-chat-panel-increment__loadmore{
74
+ cursor: pointer;
75
+ transition: color .3s;
76
+ &:hover{
77
+ color: #404040;
78
+ }
79
+ }
80
+ </style>
@@ -0,0 +1,25 @@
1
+ <script>
2
+ export default {
3
+ name: 'SdkChatPanelInnerMsg',
4
+ functional: true,
5
+ props: {
6
+ data: {
7
+ type: Object,
8
+ required: true
9
+ }
10
+ },
11
+ render (h, c) {
12
+ return h('div', {
13
+ class: 'sdk-chat-panel-inner-msg'
14
+ }, [c.props.data.content])
15
+ }
16
+ }
17
+ </script>
18
+ <style lang="less">
19
+ .sdk-chat-panel-inner-msg{
20
+ text-align: center;
21
+ color: #999;
22
+ width: 100%;
23
+ padding: 6px 0;
24
+ }
25
+ </style>
@@ -0,0 +1,29 @@
1
+ <template>
2
+ <div class="sdk-chat-panel-loading"><ui-icon name="loading" :size="30"></ui-icon> 数据加载中</div>
3
+ </template>
4
+ <script>
5
+ import { Icon as UiIcon } from '@aochuang/common/components'
6
+
7
+ export default {
8
+ name: 'AcChatPanelLoading',
9
+ components: {
10
+ UiIcon
11
+ }
12
+ }
13
+ </script>
14
+ <style lang="less">
15
+
16
+ </style>
17
+ <style lang="less">
18
+ .sdk-chat-panel-loading{
19
+ padding: 10px 20px;
20
+ text-align: center;
21
+ color: #ccc;
22
+ display: flex;
23
+ height: 100%;
24
+ flex-direction: column;
25
+ justify-content: center;
26
+ align-items: center;
27
+ box-sizing: border-box;
28
+ }
29
+ </style>
@@ -0,0 +1,136 @@
1
+ <template>
2
+ <div class="sdk-chat-panel-nearest" :class="{'is-loading': loading}" v-if="!empty">
3
+ <div class="sdk-chat-panel-nearest__handle">
4
+ <template v-if="loading">
5
+ <div class="sdk-chat-panel-nearest__button">
6
+ <div class="sdk-chat-panel-nearest__button-main">
7
+ <span class="sdk-chat-panel-nearest__button-text">加载消息中...</span>
8
+ <ui-icon name="loading"></ui-icon>
9
+ </div>
10
+ </div>
11
+ </template>
12
+ <template v-else>
13
+ <div class="sdk-chat-panel-nearest__button">
14
+ <div class="sdk-chat-panel-nearest__button-main" @click="handleLoadMoreClick">
15
+ <span class="sdk-chat-panel-nearest__button-text">加载最近消息</span>
16
+ <span class="sdk-chat-panel-nearest__button-icon"></span>
17
+ </div>
18
+ </div>
19
+ </template>
20
+ </div>
21
+ <div class="sdk-chat-panel-nearest__main">
22
+ <div class="sdk-chat-panel-nearest__button" v-if="!empty">
23
+ <div class="sdk-chat-panel-nearest__button-main" @click="handleLoadNewClick">
24
+ <span class="sdk-chat-panel-nearest__button-text">滚动到最新消息</span>
25
+ </div>
26
+ </div>
27
+ </div>
28
+ </div>
29
+ </template>
30
+ <script>
31
+ export default {
32
+ name: 'AcChatPanelNearest',
33
+ props: {
34
+ loading: {
35
+ type: Boolean
36
+ },
37
+ empty: {
38
+ type: Boolean
39
+ }
40
+ },
41
+ methods: {
42
+ handleLoadMoreClick () {
43
+ if (this.loading) {
44
+ return
45
+ }
46
+ this.$emit('load')
47
+ },
48
+ handleLoadNewClick () {
49
+ if (this.loading) {
50
+ return
51
+ }
52
+ this.$emit('reload')
53
+ }
54
+ }
55
+ }
56
+ </script>
57
+ <style lang="less">
58
+ .sdk-chat-panel-nearest{
59
+ position: relative;
60
+ background-color: rgba(255, 255, 255, .95);
61
+ box-shadow: 0 0 3px rgba(0,0,0,.1);
62
+ border-radius: 15px;
63
+ cursor: pointer;
64
+ color: #666;
65
+ &:not(.is-loading) {
66
+ &:hover{
67
+ .sdk-chat-panel-nearest__main{
68
+ display: block;
69
+ }
70
+ .sdk-chat-panel-nearest__button-icon{
71
+ transform: rotate(180deg);
72
+ }
73
+ }
74
+ .sdk-chat-panel-nearest__button{
75
+ &:hover {
76
+ color: #0052CC;
77
+ }
78
+ }
79
+ }
80
+ &.is-loading{
81
+ color: #888;
82
+ cursor: not-allowed;
83
+ }
84
+ }
85
+ .sdk-chat-panel-nearest__main{
86
+ display: none;
87
+ }
88
+ .sdk-chat-panel-nearest__button-main{
89
+ line-height: 24px;
90
+ padding: 4px 12px;
91
+ display: flex;
92
+ flex-direction: row;
93
+ align-items: center;
94
+ }
95
+ .sdk-chat-panel-nearest__button-text{
96
+ margin-right: 2px;
97
+ }
98
+ .sdk-chat-panel-nearest__button-icon{
99
+ display: inline-block;
100
+ width: 16px;
101
+ height: 16px;
102
+ position: relative;
103
+ vertical-align: top;
104
+ transition: all .25s;
105
+ transform: rotate(0deg);
106
+ transform-origin: 50% 50%;
107
+ border-radius: 50%;
108
+ &:before{
109
+ position: absolute;
110
+ left: 2px;
111
+ top: 50%;
112
+ content: '';
113
+ width: 6px;
114
+ height: 6px;
115
+ border: 1px solid #666;
116
+ border-left: 0;
117
+ border-top: 0;
118
+ display: inline-block;
119
+ transform: rotate(45deg) translateY(-50%);
120
+ }
121
+ &:after{
122
+ content: '';
123
+ position: absolute;
124
+ left: 2px;
125
+ top: 50%;
126
+ width: 6px;
127
+ height: 6px;
128
+ border: 1px solid #666;
129
+ border-left: 0;
130
+ border-top: 0;
131
+ display: inline-block;
132
+ margin-top: -5px;
133
+ transform: rotate(45deg) translateY(-50%);
134
+ }
135
+ }
136
+ </style>
@@ -0,0 +1,292 @@
1
+ <template>
2
+ <div class="sdk-chat-panel">
3
+ <div class="sdk-chat-panel__filter" v-if="$slots.filter">
4
+ <slot name="filter"></slot>
5
+ </div>
6
+ <div class="sdk-chat-panel__panel" ref="panel">
7
+ <div class="sdk-chat-panel__main">
8
+ <chat-panel-chats
9
+ key="result"
10
+ ref="result"
11
+ class="sdk-chat-panel__result"
12
+ :data="data"
13
+ :page-size="pageSize"
14
+ :loading="loading"
15
+ :auto-load="autoLoad"
16
+ :key-field="keyField"
17
+ :start-date="innerStartDate"
18
+ :end-date="innerEndDate"
19
+ :msg-time-field="msgTimeField"
20
+ :enable-range-load="true"
21
+ :context-chat-id="contextChatId"
22
+ :render-control="renderControl"
23
+ :chat-class-method="chatClassMethod"
24
+ :is-sender-method="isSenderMethod"
25
+ :fetch-user-method="fetchUserMethod"
26
+ :fetch-data-method="handleDefaultFetchChatData"
27
+ :show-context-btn="mode === 'filter'"
28
+ :enable-default-date-range="enableDefaultDateRange"
29
+ @loaded="handleChatsLoaded"
30
+ @initloaded="handleChatsInitLoaded"
31
+ @view-context="handleChatsViewContext"
32
+ @chat-contextmenu="handleChatContext"
33
+ >
34
+ <template slot="chat" slot-scope="scope">
35
+ <slot name="chat" v-bind="scope"></slot>
36
+ </template>
37
+ <template slot-scope="scope" slot="chat-foot">
38
+ <slot name="chat-foot" v-bind="scope"></slot>
39
+ </template>
40
+ <template slot="chat-append" slot-scope="scope">
41
+ <slot name="chat-append" v-bind="scope"></slot>
42
+ <template v-if="selectable && handleFilterSelectMessageMethod(scope.item)">
43
+ <div class="sdk-chat-panel__checkbox">
44
+ <ui-checkbox :value="checkMsgMap[scope.item.msgId]" @input="handleMsgCheckboxChange(scope.item, $event)"></ui-checkbox>
45
+ </div>
46
+ </template>
47
+ </template>
48
+ </chat-panel-chats>
49
+ </div>
50
+ <slot name="main"></slot>
51
+ </div>
52
+ <div class="bi-chat-panel__toolbar" v-if="checkTotal > 0">
53
+ <ui-toolbar>
54
+ <ui-toolbar-item>
55
+ 已选择{{ checkTotal }}条消息
56
+ </ui-toolbar-item>
57
+ <ui-toolbar-item :divided="true"></ui-toolbar-item>
58
+ <ui-toolbar-item>
59
+ <ui-button :click="handleCancelCheckClick">取消已选</ui-button>
60
+ </ui-toolbar-item>
61
+ <ui-toolbar-item>
62
+ <ui-button :click="handleConfirmCheckClick" type="primary">{{confirmSelectButtonText || '确定已选'}}</ui-button>
63
+ </ui-toolbar-item>
64
+ </ui-toolbar>
65
+ </div>
66
+ </div>
67
+ </template>
68
+ <script>
69
+ import ChatPanelChats from './chat-panel-chats'
70
+ import { parseDate } from '@aochuang/common/utils/date'
71
+
72
+ export default {
73
+ name: 'AcChatPanel',
74
+ components: {
75
+ ChatPanelChats
76
+ },
77
+ props: {
78
+ mode: {
79
+ type: String,
80
+ default: 'default',
81
+ validator (value) {
82
+ return ['default', 'filter'].includes(value)
83
+ }
84
+ },
85
+ keyField: {
86
+ type: String
87
+ },
88
+ startDate: {
89
+ type: [String, Number]
90
+ },
91
+ endDate: {
92
+ type: [String, Number]
93
+ },
94
+ msgTimeField: {
95
+ type: String,
96
+ default: 'wechatTime'
97
+ },
98
+ /**
99
+ * 上下文定位聊天消息
100
+ */
101
+ contextChatId: {
102
+ type: String
103
+ },
104
+ data: {
105
+ type: [Array, Object]
106
+ },
107
+ fetchDataMethod: {
108
+ type: Function
109
+ },
110
+ renderControl: {
111
+ type: Function
112
+ },
113
+ fetchUserMethod: {
114
+ type: Function
115
+ },
116
+ chatClassMethod: {
117
+ type: Function
118
+ },
119
+ isSenderMethod: {
120
+ type: Function
121
+ },
122
+ loading: {
123
+ type: Boolean,
124
+ default: false
125
+ },
126
+ // 没有pageSize的时候证明不需要分页加载
127
+ pageSize: {
128
+ type: Number,
129
+ default: 20
130
+ },
131
+ autoLoad: {
132
+ type: Boolean,
133
+ default: true
134
+ },
135
+ selectable: {
136
+ type: Boolean,
137
+ default: false
138
+ },
139
+ enableDefaultDateRange: {
140
+ type: Boolean,
141
+ default: true
142
+ },
143
+ confirmSelectMethod: {
144
+ type: Function
145
+ },
146
+ filterSelectMessageMethod: {
147
+ type: Function
148
+ },
149
+ confirmSelectButtonText: {
150
+ type: String
151
+ }
152
+ },
153
+ data () {
154
+ return {
155
+ /**
156
+ * 默认聊天面板是否准备完毕,这里存在两个面板,一个搜索结果面板,一个正常聊天记录面板
157
+ * 增加这个属性的目的是为了解决初时有过滤条件时,不能去创建默认的聊天面板,否则会出现请求重复加载情况,让人以为时bug
158
+ */
159
+ isDefaultReady: false,
160
+ chatData: [],
161
+ checkMsgMap: {}
162
+ }
163
+ },
164
+ computed: {
165
+ innerStartDate () {
166
+ if (!this.startDate) {
167
+ return
168
+ }
169
+ return parseDate(this.startDate).getTime()
170
+ },
171
+ innerEndDate () {
172
+ if (!this.endDate) {
173
+ return
174
+ }
175
+ return parseDate(this.endDate).getTime()
176
+ },
177
+ checkTotal () {
178
+ return Object.keys(this.checkMsgMap).length
179
+ }
180
+ },
181
+ methods: {
182
+ handleFilterSelectMessageMethod (msg) {
183
+ if (!this.filterSelectMessageMethod) {
184
+ return true
185
+ }
186
+ return this.filterSelectMessageMethod({
187
+ item: msg
188
+ })
189
+ },
190
+ handleMsgCheckboxChange (msg, value) {
191
+ if (value) {
192
+ this.$set(this.checkMsgMap, msg.msgId, true)
193
+ } else {
194
+ this.$delete(this.checkMsgMap, msg.msgId)
195
+ }
196
+ },
197
+ handleChatsLoaded ({ data }) {
198
+ this.chatData = data
199
+ },
200
+ handleChatsViewContext ({ chat }) {
201
+ this.$emit('view-context', {
202
+ item: chat
203
+ })
204
+ },
205
+ handleDefaultFetchChatData (filters) {
206
+ if (!this.fetchDataMethod) {
207
+ return Promise.reject()
208
+ }
209
+ return this.fetchDataMethod(filters)
210
+ },
211
+ handleChatsInitLoaded () {
212
+ this.$emit('initloaded')
213
+ },
214
+ scrollTo (msgId) {
215
+ this.$refs.result && this.$refs.result.scrollTo(msgId)
216
+ },
217
+ scrollToBottom () {
218
+ this.$refs.result && this.$refs.result.scrollToBottom()
219
+ },
220
+ reload () {
221
+ return this.$refs.result && this.$refs.result.reloadChatData()
222
+ },
223
+ handleCancelCheckClick () {
224
+ this.checkMsgMap = {}
225
+ return false
226
+ },
227
+ handleConfirmCheckClick () {
228
+ this.confirmSelectMethod && this.confirmSelectMethod({
229
+ selection: this.chatData.filter(v => this.checkMsgMap[v.msgId])
230
+ })
231
+ return false
232
+ },
233
+ handleChatContext (item, evt) {
234
+ this.$emit('chat-contextmenu', item, evt)
235
+ }
236
+ }
237
+ }
238
+ </script>
239
+ <style lang="less">
240
+ .sdk-chat-panel{
241
+ display: flex;
242
+ height: 100%;
243
+ flex-direction: column;;
244
+ position: relative;
245
+ }
246
+ .sdk-chat-panel__filter{
247
+ box-shadow: 0 2px 4px rgba(0,0,0,.05);
248
+ z-index: 50;
249
+ padding: 6px 12px;
250
+ }
251
+ .sdk-chat-panel__return{
252
+ box-shadow: 0 2px 4px rgba(0,0,0,.05);
253
+ z-index: 3;
254
+ padding: 6px 12px;
255
+ }
256
+ .sdk-chat-panel__panel{
257
+ display: flex;
258
+ flex-direction: column;
259
+ flex: 1;
260
+ min-height: 0;
261
+ position: relative;
262
+ &::-webkit-scrollbar-thumb{
263
+ background-color: transparent;
264
+ }
265
+ &:hover{
266
+ &::-webkit-scrollbar-thumb{
267
+ background-color: #ddd;
268
+ &:hover {
269
+ background-color: #ccc;
270
+ }
271
+ }
272
+ }
273
+ }
274
+ .sdk-chat-panel__main,
275
+ .sdk-chat-panel__context{
276
+ flex: 1;
277
+ min-height: 0;
278
+ }
279
+ .sdk-chat-panel__chats{
280
+ flex: 1;
281
+ }
282
+ .sdk-chat-panel__checkbox{
283
+ display: inline-block;
284
+ padding: 12px;
285
+ }
286
+ .bi-chat-panel__toolbar{
287
+ display: flex;
288
+ flex-direction: row;
289
+ justify-content: center;
290
+ padding: 12px;
291
+ }
292
+ </style>
@@ -0,0 +1,3 @@
1
+ import ChatPanel from './chat-panel.vue'
2
+
3
+ export default ChatPanel
@@ -0,0 +1,83 @@
1
+ import { unique } from '../../utils/string'
2
+
3
+ const RENDER_BOX_FN = []
4
+
5
+ /**
6
+ * 注册一个是否渲染外壳逻辑
7
+ */
8
+ export function registerIsRenderBoxFn (fn) {
9
+ if (typeof fn !== 'function') {
10
+ return
11
+ }
12
+ RENDER_BOX_FN.push(fn)
13
+ }
14
+
15
+ /**
16
+ * 获取是否渲染外壳逻辑函数清单
17
+ */
18
+ export function getIsRenderBoxFns (f) {
19
+ return RENDER_BOX_FN
20
+ }
21
+
22
+ /**
23
+ * 构造一条内部组件消息
24
+ * 例如2022-03-04~2034-12-23无消息数据
25
+ */
26
+ export function newInnerMessage (options, idField, msgTimeField) {
27
+ return Object.assign({
28
+ msgType: '_EMPTY_', // default、targetRangeNotMessage
29
+ content: null,
30
+ [msgTimeField]: null
31
+ }, options, {
32
+ [idField]: unique(),
33
+ _inner: true
34
+ })
35
+ }
36
+
37
+ /**
38
+ * 剔除重复的消息数据
39
+ * 因为有可能当前后台加载过来的消息已经加载过了,如果不剔除重复的,那么后面判断消息数量为空的逻辑会出问题,就永远不知道是不是真的没有消息了
40
+ */
41
+ export function uniqRepeartMessageData (currMsg, allMsg, idField) {
42
+ if (!allMsg || !allMsg.length) {
43
+ return currMsg
44
+ }
45
+ // 先只取最近的100条消息
46
+ const uniqMsgMap = allMsg.slice(0, 100).reduce((rs, v) => {
47
+ rs[v[idField]] = v
48
+ return rs
49
+ }, {})
50
+ return (currMsg || []).filter(v => !uniqMsgMap[v[idField]])
51
+ }
52
+
53
+ /**
54
+ * 判断元素是否在父元素的滚动可见区域内
55
+ * @param {HTMLElement} element - 要判断的子元素
56
+ * @param {HTMLElement} parent - 父元素(滚动容器)
57
+ * @returns {boolean} - 是否可见
58
+ */
59
+ export function isElementInParentViewport(element, parent) {
60
+ // 获取元素相对于父元素的位置和尺寸
61
+ const elementRect = element.getBoundingClientRect()
62
+ const parentRect = parent.getBoundingClientRect()
63
+
64
+ // 计算元素相对于父元素的坐标(考虑父元素的滚动偏移)
65
+ const relativeTop = elementRect.top - parentRect.top + parent.scrollTop
66
+ const relativeLeft = elementRect.left - parentRect.left + parent.scrollLeft
67
+ const relativeBottom = relativeTop + elementRect.height - 2 // 减去2个像素容差一下
68
+ const relativeRight = relativeLeft + elementRect.width
69
+
70
+ // 父元素的可视区域范围
71
+ const parentVisibleTop = parent.scrollTop
72
+ const parentVisibleLeft = parent.scrollLeft
73
+ const parentVisibleBottom = parent.scrollTop + parent.clientHeight
74
+ const parentVisibleRight = parent.scrollLeft + parent.clientWidth
75
+
76
+ // 判断元素是否与父元素的可视区域重叠
77
+ return (
78
+ relativeTop < parentVisibleBottom && // 元素顶部在父元素可视区域底部之上
79
+ relativeBottom > parentVisibleTop && // 元素底部在父元素可视区域顶部之下
80
+ relativeLeft < parentVisibleRight && // 元素左侧在父元素可视区域右侧之左
81
+ relativeRight > parentVisibleLeft // 元素右侧在父元素可视区域左侧之右
82
+ )
83
+ }