@x-edu/live-player 0.0.28 → 0.0.30

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 (303) hide show
  1. package/.browserslistrc +10 -10
  2. package/.eslintignore +8 -8
  3. package/.eslintrc.js +26 -26
  4. package/.postcssrc.js +6 -6
  5. package/README.md +145 -145
  6. package/babel.config.js +33 -33
  7. package/dist/XEduLivePlayer.common.js +235 -133
  8. package/dist/XEduLivePlayerPre.common.js +227 -125
  9. package/doc/develop.md +23 -23
  10. package/gem-mine.config.js +86 -86
  11. package/jest.config.js +9 -9
  12. package/jsconfig.json +15 -15
  13. package/mock/helper.js +8 -8
  14. package/mock/index.js +34 -34
  15. package/package.json +100 -99
  16. package/public/3rd/ali-player/alipayercomponents-1.0.8.min.js +26 -26
  17. package/public/3rd/ali-player/aliplayer-hls-min.js +27 -27
  18. package/public/3rd/ali-player/aliplayer-min.js +1 -1
  19. package/public/3rd/im-web-push/index.umd.js +14 -14
  20. package/public/fish/editor/themes/default/css/ueditor.css +1905 -1905
  21. package/public/fish/editor/third-party/codemirror/codemirror.css +104 -104
  22. package/public/fish/editor/third-party/codemirror/codemirror.js +3581 -3581
  23. package/public/fish/editor/third-party/zeroclipboard/ZeroClipboard.js +1255 -1255
  24. package/public/fish/editor/ueditor.all.min.js +16 -16
  25. package/public/fish/editor/ueditor.config.js +467 -467
  26. package/public/fish/icon/umd-4.1.2.js +1 -1
  27. package/public/fish/video/videoplayer.min.css +6 -6
  28. package/public/fish/video/videoplayer.min.js +31 -31
  29. package/public/fish/video/zh-CN.js +82 -82
  30. package/public/icon/demo.css +539 -539
  31. package/public/icon/demo_index.html +2189 -2189
  32. package/public/icon/iconfont.css +363 -363
  33. package/public/icon/iconfont.json +618 -618
  34. package/public/index.html +50 -50
  35. package/script/image/readme.md +77 -77
  36. package/script/postcss.js +48 -48
  37. package/src/App.jsx +24 -24
  38. package/src/asset/img/course/playing.svg +21 -21
  39. package/src/asset/img/icon-course-white.svg +3 -3
  40. package/src/asset/img/icon-course.svg +3 -3
  41. package/src/asset/img/icon-eye-white.svg +4 -4
  42. package/src/asset/img/icon-eye.svg +4 -4
  43. package/src/asset/img/icon-school-white.svg +3 -3
  44. package/src/asset/img/icon-school.svg +3 -3
  45. package/src/asset/img/loading.svg +52 -52
  46. package/src/asset/img/video-play.svg +6 -6
  47. package/src/asset/style/background.less +19 -19
  48. package/src/asset/style/banner.less +36 -36
  49. package/src/asset/style/base.less +74 -74
  50. package/src/asset/style/index.less +114 -114
  51. package/src/asset/style/reset-theme.less +141 -141
  52. package/src/asset/style/theme/index.less +55 -55
  53. package/src/asset/style/theme/party/global.less +20 -20
  54. package/src/asset/style/theme/party/override.less +57 -57
  55. package/src/asset/style/theme/test/global.less +18 -18
  56. package/src/asset/style/theme/test/override.less +45 -45
  57. package/src/asset/style/variable.less +12 -12
  58. package/src/component/AliPlayer/index.jsx +49 -49
  59. package/src/component/Avatar/index.jsx +50 -50
  60. package/src/component/Empty/index.jsx +34 -34
  61. package/src/component/Empty/index.module.less +37 -37
  62. package/src/component/IMChatroom/component/status/403.jsx +13 -13
  63. package/src/component/IMChatroom/component/status/404.jsx +13 -13
  64. package/src/component/IMChatroom/component/status/Error.jsx +23 -23
  65. package/src/component/IMChatroom/component/status/Loading.jsx +5 -5
  66. package/src/component/IMChatroom/config/app/config.js +118 -118
  67. package/src/component/IMChatroom/config/app/index.js +60 -60
  68. package/src/component/IMChatroom/config/env.js +5 -5
  69. package/src/component/IMChatroom/config/index.js +3 -3
  70. package/src/component/IMChatroom/config/request/config/base.js +124 -124
  71. package/src/component/IMChatroom/config/request/config/chatroom.js +26 -26
  72. package/src/component/IMChatroom/config/request/config/imCoreApi.js +21 -21
  73. package/src/component/IMChatroom/config/request/index.js +21 -21
  74. package/src/component/IMChatroom/config/request/proxy.js +39 -39
  75. package/src/component/IMChatroom/config/url.js +7 -7
  76. package/src/component/IMChatroom/constants/errorCode.js +9 -9
  77. package/src/component/IMChatroom/constants/index.js +84 -84
  78. package/src/component/IMChatroom/constants/origin.js +27 -27
  79. package/src/component/IMChatroom/context/chatroom.js +154 -154
  80. package/src/component/IMChatroom/context/connect.js +28 -28
  81. package/src/component/IMChatroom/i18n/en/index.json +73 -73
  82. package/src/component/IMChatroom/i18n/index.jsx +14 -14
  83. package/src/component/IMChatroom/i18n/language.js +9 -9
  84. package/src/component/IMChatroom/i18n/zh-CN/index.json +73 -73
  85. package/src/component/IMChatroom/index.jsx +49 -49
  86. package/src/component/IMChatroom/page/chat/index.jsx +27 -27
  87. package/src/component/IMChatroom/page/chat/messageEditor/index.jsx +375 -375
  88. package/src/component/IMChatroom/page/chat/messageList/index.jsx +354 -354
  89. package/src/component/IMChatroom/page/chat/stickedMessage/index.jsx +59 -59
  90. package/src/component/IMChatroom/page/chat/stickedMessage/style/index.module.less +7 -7
  91. package/src/component/IMChatroom/page/chat/style/index.module.less +51 -51
  92. package/src/component/IMChatroom/page/home/connect/index.jsx +188 -188
  93. package/src/component/IMChatroom/page/home/connect/status.jsx +124 -124
  94. package/src/component/IMChatroom/page/home/context/cmd.jsx +37 -37
  95. package/src/component/IMChatroom/page/home/context/index.jsx +67 -67
  96. package/src/component/IMChatroom/page/home/index.jsx +164 -164
  97. package/src/component/IMChatroom/page/home/notice/index.jsx +123 -123
  98. package/src/component/IMChatroom/page/home/notice/style/index.module.less +49 -49
  99. package/src/component/IMChatroom/page/home/style/index.module.less +110 -110
  100. package/src/component/IMChatroom/page/member/index.jsx +15 -15
  101. package/src/component/IMChatroom/page/member/memberCount/index.jsx +44 -44
  102. package/src/component/IMChatroom/page/member/memberList/index.jsx +121 -121
  103. package/src/component/IMChatroom/page/member/style/index.module.less +2 -2
  104. package/src/component/IMChatroom/sdk/bridge.js +39 -39
  105. package/src/component/IMChatroom/sdk/cs/constants.js +20 -20
  106. package/src/component/IMChatroom/sdk/cs/index.js +101 -101
  107. package/src/component/IMChatroom/sdk/imChatroom.js +15 -15
  108. package/src/component/IMChatroom/sdk/imcore/constants.js +128 -128
  109. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomDestroyed.js +5 -5
  110. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomInfoGetFail.js +5 -5
  111. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomKickedByAdmin.js +5 -5
  112. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomKickedBySelf.js +5 -5
  113. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomLoginFail.js +5 -5
  114. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomLoginSuccess.js +5 -5
  115. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomMemberLogin.js +5 -5
  116. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomMemberLogout.js +5 -5
  117. package/src/component/IMChatroom/sdk/imcore/emitters/connectionConnected.js +5 -5
  118. package/src/component/IMChatroom/sdk/imcore/emitters/connectionConnecting.js +5 -5
  119. package/src/component/IMChatroom/sdk/imcore/emitters/connectionDisconnect.js +5 -5
  120. package/src/component/IMChatroom/sdk/imcore/emitters/index.js +57 -57
  121. package/src/component/IMChatroom/sdk/imcore/emitters/messageReceive.js +36 -36
  122. package/src/component/IMChatroom/sdk/imcore/index.js +178 -178
  123. package/src/component/IMChatroom/sdk/imcore/interceptors/request.js +7 -7
  124. package/src/component/IMChatroom/sdk/imcore/interceptors/response.js +5 -5
  125. package/src/component/IMChatroom/sdk/imcore/plugins/getAuth.js +64 -64
  126. package/src/component/IMChatroom/sdk/imcore/plugins/getConversationId.js +20 -20
  127. package/src/component/IMChatroom/sdk/imcore/plugins/getExtInfo.js +10 -10
  128. package/src/component/IMChatroom/sdk/imcore/plugins/getLoginInfo.js +48 -48
  129. package/src/component/IMChatroom/sdk/imcore/plugins/getPlatformType.js +12 -12
  130. package/src/component/IMChatroom/sdk/imcore/plugins/index.js +22 -22
  131. package/src/component/IMChatroom/sdk/imcore/util/format.js +177 -177
  132. package/src/component/IMChatroom/sdk/imcore/util/parser.js +35 -35
  133. package/src/component/IMChatroom/sdk/oms.js +18 -18
  134. package/src/component/IMChatroom/sdk/uc.js +3 -3
  135. package/src/component/IMChatroom/subscription/channel/app.js +5 -5
  136. package/src/component/IMChatroom/subscription/channel/ctl.js +22 -22
  137. package/src/component/IMChatroom/subscription/channel/member.js +40 -40
  138. package/src/component/IMChatroom/subscription/channel/message.js +13 -13
  139. package/src/component/IMChatroom/subscription/channel/ntf.js +86 -86
  140. package/src/component/IMChatroom/subscription/channel/tel.js +5 -5
  141. package/src/component/IMChatroom/subscription/channel/websocket.js +5 -5
  142. package/src/component/IMChatroom/subscription/event.js +37 -37
  143. package/src/component/IMChatroom/subscription/index.js +19 -19
  144. package/src/component/IMChatroom/util/account.js +8 -8
  145. package/src/component/IMChatroom/util/chatroom.js +255 -255
  146. package/src/component/IMChatroom/util/jsonBigInt.js +5 -5
  147. package/src/component/IMChatroom/util/location.js +12 -12
  148. package/src/component/Icon/index.jsx +16 -16
  149. package/src/component/Icon/index.module.less +2 -2
  150. package/src/component/Pagination/LocalPagination.jsx +27 -27
  151. package/src/component/Pagination/RemotePagination.jsx +32 -32
  152. package/src/component/Pagination/index.jsx +32 -32
  153. package/src/component/Pagination/index.module.less +117 -117
  154. package/src/component/PlayerTip/index.jsx +34 -34
  155. package/src/component/VideoBase/index.jsx +242 -242
  156. package/src/component/VideoBase/style.less +65 -65
  157. package/src/component/VideoBase/utils.js +81 -81
  158. package/src/component/mixin.less +9 -9
  159. package/src/component/status/403.jsx +15 -15
  160. package/src/component/status/404/index.jsx +73 -73
  161. package/src/component/status/404/index.module.less +36 -36
  162. package/src/component/status/Error/error.module.less +13 -13
  163. package/src/component/status/Error/index.jsx +47 -47
  164. package/src/component/status/Loading/img/loading.svg +52 -52
  165. package/src/component/status/Loading/index.jsx +31 -31
  166. package/src/component/status/Loading/index.less +56 -56
  167. package/src/component/status/None/index.jsx +20 -20
  168. package/src/component/status/None/index.module.less +35 -35
  169. package/src/component/status/Status/index.jsx +26 -26
  170. package/src/component/status/Status/index.module.less +8 -8
  171. package/src/config/constant/commonUrl.js +2 -2
  172. package/src/config/constant/user.js +6 -6
  173. package/src/config/context/site-config.js +48 -48
  174. package/src/config/env/index.js +5 -5
  175. package/src/config/env/local/index.js +13 -13
  176. package/src/config/env/ncet-xedu/api.js +175 -175
  177. package/src/config/env/ncet-xedu/app.js +12 -12
  178. package/src/config/env/ncet-xedu/cs.js +8 -8
  179. package/src/config/env/ncet-xedu/index.js +14 -14
  180. package/src/config/env/ncet-xedu/push.js +5 -5
  181. package/src/config/env/preproduction/api.js +144 -144
  182. package/src/config/env/preproduction/app.js +12 -12
  183. package/src/config/env/preproduction/cs.js +8 -8
  184. package/src/config/env/preproduction/index.js +14 -14
  185. package/src/config/env/preproduction/push.js +5 -5
  186. package/src/config/env/product/api.js +113 -113
  187. package/src/config/env/product/app.js +12 -12
  188. package/src/config/env/product/cs.js +5 -5
  189. package/src/config/env/product/index.js +14 -14
  190. package/src/config/env/product/push.js +5 -5
  191. package/src/config/live.js +80 -80
  192. package/src/config/publicLive.js +53 -53
  193. package/src/config/request/assessments.js +24 -24
  194. package/src/config/request/config-center.js +8 -8
  195. package/src/config/request/helper.js +166 -166
  196. package/src/config/request/im-broadcasts.js +12 -12
  197. package/src/config/request/live-activity-gateway.js +8 -8
  198. package/src/config/request/live-activity.js +13 -13
  199. package/src/config/request/raw.js +6 -6
  200. package/src/config/request/x-cloud-web.js +13 -13
  201. package/src/config/request/x-proxy.js +34 -34
  202. package/src/demo/Detail.jsx +11 -11
  203. package/src/demo/List.jsx +68 -68
  204. package/src/demo/index.jsx +17 -17
  205. package/src/detail/LineSwitch/index.jsx +71 -71
  206. package/src/detail/LiveCountDown/index.jsx +44 -44
  207. package/src/detail/LiveCountDown/index.module.less +31 -31
  208. package/src/detail/LiveOnlineCount/img/icon.svg +15 -15
  209. package/src/detail/LiveOnlineCount/index.jsx +68 -68
  210. package/src/detail/LiveOnlineCount/index.module.less +34 -34
  211. package/src/detail/LiveOnlineCount/util.js +74 -74
  212. package/src/detail/LiveStatus/AnchorOnTheWay.jsx +88 -88
  213. package/src/detail/LiveStatus/index.jsx +202 -202
  214. package/src/detail/LiveStatus/index.module.less +192 -192
  215. package/src/detail/LiveVideo/config.js +37 -37
  216. package/src/detail/LiveVideo/index.jsx +188 -188
  217. package/src/detail/LiveVideo/index.module.less +41 -41
  218. package/src/detail/NotLoginChatroom/index.jsx +37 -37
  219. package/src/detail/NotLoginChatroom/index.module.less +46 -46
  220. package/src/detail/RecordVideo/index.jsx +150 -150
  221. package/src/detail/RecordVideo/index.module.less +31 -31
  222. package/src/detail/ReplayVideo/index.jsx +93 -93
  223. package/src/detail/ReplayVideo/index.module.less +65 -65
  224. package/src/detail/const.js +20 -20
  225. package/src/detail/hook/usePullSource.js +82 -82
  226. package/src/detail/hook/usePullState.js +51 -51
  227. package/src/detail/index.jsx +482 -482
  228. package/src/detail/index.module.less +188 -188
  229. package/src/hook/useAsync.js +84 -84
  230. package/src/hook/useGoToPage.js +83 -83
  231. package/src/hook/useInterval.js +28 -28
  232. package/src/hook/useIsMounted.js +17 -17
  233. package/src/hook/useModuleByRole.js +53 -53
  234. package/src/hook/usePageScrollable.js +52 -52
  235. package/src/hook/usePortal.js +83 -83
  236. package/src/hook/useScrollRestore/index.js +32 -32
  237. package/src/hook/useScrollRestore/scrollContext.js +20 -20
  238. package/src/hook/useTrackRef.js +11 -11
  239. package/src/hook/useWindowSize.js +28 -28
  240. package/src/hook/useZoom.js +47 -47
  241. package/src/index.js +10 -10
  242. package/src/lib/getLiveOnlineCount.js +10 -10
  243. package/src/lib/getServiceConfig.js +102 -102
  244. package/src/list/Empty/index.jsx +20 -20
  245. package/src/list/Empty/index.module.less +23 -23
  246. package/src/list/ListItem/Action/index.jsx +109 -109
  247. package/src/list/ListItem/Action/index.module.less +19 -19
  248. package/src/list/ListItem/img/dianzan.svg +4 -4
  249. package/src/list/ListItem/img/like-fill.svg +8 -8
  250. package/src/list/ListItem/img/play.svg +15 -15
  251. package/src/list/ListItem/img/view-fill.svg +8 -8
  252. package/src/list/ListItem/img/yiguankan.svg +3 -3
  253. package/src/list/ListItem/index.jsx +135 -134
  254. package/src/list/ListItem/index.module.less +158 -152
  255. package/src/list/index.jsx +240 -235
  256. package/src/list/index.module.less +38 -38
  257. package/src/service/common.js +73 -73
  258. package/src/service/content-mgr.js +73 -73
  259. package/src/service/im-group.js +12 -12
  260. package/src/service/im.js +7 -7
  261. package/src/service/imBroadcasts.js +33 -33
  262. package/src/service/like.js +134 -134
  263. package/src/service/live.js +293 -293
  264. package/src/service/manageApi.js +7 -7
  265. package/src/service/managePortal.js +6 -6
  266. package/src/service/myStudyRecord.js +93 -93
  267. package/src/service/navigation.js +47 -47
  268. package/src/service/ndMeeting.js +10 -10
  269. package/src/service/ndr.js +122 -122
  270. package/src/service/news.js +93 -93
  271. package/src/service/personalCenter.js +270 -270
  272. package/src/service/qualityCourse.js +31 -31
  273. package/src/service/recommend.js +81 -81
  274. package/src/service/school.js +323 -323
  275. package/src/service/search.js +170 -170
  276. package/src/service/site-config.js +7 -7
  277. package/src/service/socialCensor.js +45 -45
  278. package/src/service/specialEdu.js +31 -31
  279. package/src/service/suggestion.js +85 -85
  280. package/src/service/syncClassroom.js +321 -321
  281. package/src/service/tCourse.js +204 -204
  282. package/src/service/tchTraining.js +37 -37
  283. package/src/service/uc.js +45 -45
  284. package/src/util/app.js +1 -1
  285. package/src/util/array.js +3 -3
  286. package/src/util/auth/func.js +57 -57
  287. package/src/util/date.js +53 -53
  288. package/src/util/env.js +9 -9
  289. package/src/util/getTimestamp.js +10 -10
  290. package/src/util/hof.js +105 -105
  291. package/src/util/live/index.js +42 -42
  292. package/src/util/liveCountUtil.js +52 -52
  293. package/src/util/netUrl.js +35 -35
  294. package/src/util/object.js +13 -13
  295. package/src/util/push/index.js +58 -58
  296. package/src/util/request.js +227 -227
  297. package/src/util/type.js +17 -17
  298. package/src/util/url.js +203 -203
  299. package/src/util/video.js +26 -26
  300. package/test/setup.js +21 -21
  301. package/test/unit/component/header/logo.spec.jsx +8 -8
  302. package/test/unit/helper.jsx +25 -25
  303. package/test/unit/util/date.spec.js +40 -40
@@ -1,109 +1,109 @@
1
- import React, { useState } from 'react'
2
- import classNames from 'classnames'
3
- import { message } from 'fish'
4
- import { find } from 'lodash'
5
- import { openLiveSubscribe } from '@/service/live'
6
- import style from './index.module.less'
7
-
8
- const Actions = {
9
- 1: '进入直播', // 直播中 或者开播前15min
10
- 2: '观看回放', // 回放
11
- 3: '预约', // 预告 且开播时间大于 15min
12
- 4: '已预约'
13
- }
14
-
15
- export default function Action({
16
- data,
17
- subscription,
18
- onActionDetailClick,
19
- handleLogin,
20
- isLogin,
21
- onSubscribe,
22
- setIsSubscribe,
23
- status
24
- }) {
25
- const { live_id: liveId, begin_time: beginTime } = data
26
- const [curAction, setCurAction] = useState(() => {
27
- let actionNum
28
- if (status === 1 || status === 3) {
29
- actionNum = 1
30
- } else if (status === 2) {
31
- actionNum = 2
32
- } else { // status = 0
33
- // 如果超过了开播时间,不管有没有预约,都直接进入直播
34
- const now = new Date().getTime()
35
- const begin = new Date(beginTime).getTime()
36
- if (now > begin) {
37
- actionNum = 1
38
- return actionNum
39
- }
40
- // 开播前15分钟,只提供进入直播按钮
41
- if (begin > now && (begin - now) < 15 * 60 * 1000) {
42
- actionNum = 1
43
- return actionNum
44
- }
45
- // 开播前15分钟之外
46
- const subscriptionItem = find(subscription, {
47
- live_id: liveId
48
- })
49
- if (subscriptionItem?.is_subscribe) { // 已预约
50
- actionNum = 4
51
- } else { // 未预约
52
- actionNum = 3
53
- }
54
- }
55
- return actionNum
56
- })
57
-
58
- const handleBtnClick = async (e) => {
59
- e.stopPropagation()
60
- if (curAction === 3) {
61
- try {
62
- if (!isLogin) {
63
- handleLogin(data)
64
- return
65
- }
66
-
67
- await openLiveSubscribe({
68
- liveId
69
- })
70
- message.success('预约成功')
71
- const now = new Date().getTime()
72
- const begin = new Date(beginTime).getTime()
73
- setIsSubscribe(true)
74
- if (begin > now && (begin - now) < 15 * 60 * 1000) {
75
- setCurAction(1)
76
- } else {
77
- setCurAction(4)
78
- }
79
- onSubscribe({
80
- ...data,
81
- is_subscribe: true
82
- })
83
- } catch (error) {
84
- onSubscribe({
85
- ...data,
86
- is_subscribe: false
87
- })
88
- if (error?.response?.data?.message === '直播开始前15分钟无法预约') {
89
- setCurAction(3)
90
- }
91
- message.error(error?.response?.data?.message || '预约失败,请稍后重试')
92
- }
93
- } else {
94
- onActionDetailClick()
95
- }
96
- }
97
-
98
- return (
99
- <div
100
- className={classNames(style.action, {
101
- [style['action-subscribe']]: curAction === 3,
102
- [style['action-has-subscribe']]: curAction === 4
103
- })}
104
- onClick={handleBtnClick}
105
- >
106
- {Actions[curAction]}
107
- </div>
108
- )
109
- }
1
+ import React, { useState } from 'react'
2
+ import classNames from 'classnames'
3
+ import { message } from 'fish'
4
+ import { find } from 'lodash'
5
+ import { openLiveSubscribe } from '@/service/live'
6
+ import style from './index.module.less'
7
+
8
+ const Actions = {
9
+ 1: '进入直播', // 直播中 或者开播前15min
10
+ 2: '观看回放', // 回放
11
+ 3: '预约', // 预告 且开播时间大于 15min
12
+ 4: '已预约'
13
+ }
14
+
15
+ export default function Action({
16
+ data,
17
+ subscription,
18
+ onActionDetailClick,
19
+ handleLogin,
20
+ isLogin,
21
+ onSubscribe,
22
+ setIsSubscribe,
23
+ status
24
+ }) {
25
+ const { live_id: liveId, begin_time: beginTime } = data
26
+ const [curAction, setCurAction] = useState(() => {
27
+ let actionNum
28
+ if (status === 1 || status === 3) {
29
+ actionNum = 1
30
+ } else if (status === 2) {
31
+ actionNum = 2
32
+ } else { // status = 0
33
+ // 如果超过了开播时间,不管有没有预约,都直接进入直播
34
+ const now = new Date().getTime()
35
+ const begin = new Date(beginTime).getTime()
36
+ if (now > begin) {
37
+ actionNum = 1
38
+ return actionNum
39
+ }
40
+ // 开播前15分钟,只提供进入直播按钮
41
+ if (begin > now && (begin - now) < 15 * 60 * 1000) {
42
+ actionNum = 1
43
+ return actionNum
44
+ }
45
+ // 开播前15分钟之外
46
+ const subscriptionItem = find(subscription, {
47
+ live_id: liveId
48
+ })
49
+ if (subscriptionItem?.is_subscribe) { // 已预约
50
+ actionNum = 4
51
+ } else { // 未预约
52
+ actionNum = 3
53
+ }
54
+ }
55
+ return actionNum
56
+ })
57
+
58
+ const handleBtnClick = async (e) => {
59
+ e.stopPropagation()
60
+ if (curAction === 3) {
61
+ try {
62
+ if (!isLogin) {
63
+ handleLogin(data)
64
+ return
65
+ }
66
+
67
+ await openLiveSubscribe({
68
+ liveId
69
+ })
70
+ message.success('预约成功')
71
+ const now = new Date().getTime()
72
+ const begin = new Date(beginTime).getTime()
73
+ setIsSubscribe(true)
74
+ if (begin > now && (begin - now) < 15 * 60 * 1000) {
75
+ setCurAction(1)
76
+ } else {
77
+ setCurAction(4)
78
+ }
79
+ onSubscribe({
80
+ ...data,
81
+ is_subscribe: true
82
+ })
83
+ } catch (error) {
84
+ onSubscribe({
85
+ ...data,
86
+ is_subscribe: false
87
+ })
88
+ if (error?.response?.data?.message === '直播开始前15分钟无法预约') {
89
+ setCurAction(3)
90
+ }
91
+ message.error(error?.response?.data?.message || '预约失败,请稍后重试')
92
+ }
93
+ } else {
94
+ onActionDetailClick()
95
+ }
96
+ }
97
+
98
+ return (
99
+ <div
100
+ className={classNames(style.action, {
101
+ [style['action-subscribe']]: curAction === 3,
102
+ [style['action-has-subscribe']]: curAction === 4
103
+ })}
104
+ onClick={handleBtnClick}
105
+ >
106
+ {Actions[curAction]}
107
+ </div>
108
+ )
109
+ }
@@ -1,20 +1,20 @@
1
- .action {
2
- font-size: 14px;
3
- line-height: 22px;
4
- color: #1E62EC;
5
- border-radius: 144.889px;
6
- border: 1px solid #1E62EC;
7
- width: 88px;
8
- height: 32px;
9
- display: flex;
10
- align-items: center;
11
- justify-content: center;
12
- margin-top: 8px;
13
- }
14
-
15
-
16
-
17
- .action-has-subscribe {
18
- border: 1px solid #B7CCF9;
19
- color: #B7CCF9
1
+ .action {
2
+ font-size: 14px;
3
+ line-height: 22px;
4
+ color: #1E62EC;
5
+ border-radius: 144.889px;
6
+ border: 1px solid #1E62EC;
7
+ width: 88px;
8
+ height: 32px;
9
+ display: flex;
10
+ align-items: center;
11
+ justify-content: center;
12
+ margin-top: 8px;
13
+ }
14
+
15
+
16
+
17
+ .action-has-subscribe {
18
+ border: 1px solid #B7CCF9;
19
+ color: #B7CCF9
20
20
  }
@@ -1,4 +1,4 @@
1
- <svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <path d="M7.89813 1.82793L4.50419 5.22187C4.40473 5.3213 4.34884 5.45616 4.34881 5.5968V11.7409C4.34881 12.0338 4.58623 12.2712 4.87911 12.2712H10.6223C10.8372 12.2713 11.0309 12.1416 11.1128 11.9429L12.7541 7.95771C12.8068 7.8295 12.8338 7.69222 12.8337 7.55361V6.43786C12.8337 5.8521 12.3588 5.37725 11.7731 5.37725H8.37911L8.99055 2.97498C9.06988 2.6637 8.95419 2.33526 8.69729 2.1424L8.24495 1.80301C8.13927 1.72378 7.99139 1.7344 7.89813 1.82793Z" fill="#CCCCCC"/>
3
- <path d="M3.2882 5.90755H1.6973C1.40442 5.90755 1.16699 6.14498 1.16699 6.43786V11.7409C1.16699 12.0338 1.40442 12.2712 1.6973 12.2712H3.2882V5.90755Z" fill="#CCCCCC"/>
4
- </svg>
1
+ <svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M7.89813 1.82793L4.50419 5.22187C4.40473 5.3213 4.34884 5.45616 4.34881 5.5968V11.7409C4.34881 12.0338 4.58623 12.2712 4.87911 12.2712H10.6223C10.8372 12.2713 11.0309 12.1416 11.1128 11.9429L12.7541 7.95771C12.8068 7.8295 12.8338 7.69222 12.8337 7.55361V6.43786C12.8337 5.8521 12.3588 5.37725 11.7731 5.37725H8.37911L8.99055 2.97498C9.06988 2.6637 8.95419 2.33526 8.69729 2.1424L8.24495 1.80301C8.13927 1.72378 7.99139 1.7344 7.89813 1.82793Z" fill="#CCCCCC"/>
3
+ <path d="M3.2882 5.90755H1.6973C1.40442 5.90755 1.16699 6.14498 1.16699 6.43786V11.7409C1.16699 12.0338 1.40442 12.2712 1.6973 12.2712H3.2882V5.90755Z" fill="#CCCCCC"/>
4
+ </svg>
@@ -1,8 +1,8 @@
1
- <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <g id="icon_planar/web_icon_&#231;&#130;&#185;&#232;&#181;&#158;_fill">
3
- <g id="&#232;&#183;&#175;&#229;&#190;&#132;">
4
- <path d="M9.02622 2.08907L5.14744 5.96785C5.03377 6.08149 4.96989 6.23561 4.96986 6.39634V13.4182C4.96986 13.7529 5.2412 14.0242 5.57592 14.0242H12.1396C12.3852 14.0243 12.6066 13.8762 12.7002 13.6491L14.5759 9.09452C14.6361 8.948 14.667 8.7911 14.6668 8.6327V7.35755C14.6668 6.68812 14.1241 6.14543 13.4547 6.14543H9.57592L10.2747 3.39998C10.3654 3.04423 10.2332 2.66887 9.93956 2.44846L9.42259 2.06058C9.30181 1.97003 9.13281 1.98218 9.02622 2.08907Z" fill="#CCCCCC"/>
5
- <path d="M3.75774 6.75149H1.93956C1.60484 6.75149 1.3335 7.02283 1.3335 7.35755V13.4182C1.3335 13.7529 1.60484 14.0242 1.93956 14.0242H3.75774V6.75149Z" fill="#CCCCCC"/>
6
- </g>
7
- </g>
8
- </svg>
1
+ <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <g id="icon_planar/web_icon_&#231;&#130;&#185;&#232;&#181;&#158;_fill">
3
+ <g id="&#232;&#183;&#175;&#229;&#190;&#132;">
4
+ <path d="M9.02622 2.08907L5.14744 5.96785C5.03377 6.08149 4.96989 6.23561 4.96986 6.39634V13.4182C4.96986 13.7529 5.2412 14.0242 5.57592 14.0242H12.1396C12.3852 14.0243 12.6066 13.8762 12.7002 13.6491L14.5759 9.09452C14.6361 8.948 14.667 8.7911 14.6668 8.6327V7.35755C14.6668 6.68812 14.1241 6.14543 13.4547 6.14543H9.57592L10.2747 3.39998C10.3654 3.04423 10.2332 2.66887 9.93956 2.44846L9.42259 2.06058C9.30181 1.97003 9.13281 1.98218 9.02622 2.08907Z" fill="#CCCCCC"/>
5
+ <path d="M3.75774 6.75149H1.93956C1.60484 6.75149 1.3335 7.02283 1.3335 7.35755V13.4182C1.3335 13.7529 1.60484 14.0242 1.93956 14.0242H3.75774V6.75149Z" fill="#CCCCCC"/>
6
+ </g>
7
+ </g>
8
+ </svg>
@@ -1,16 +1,16 @@
1
- <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
2
- y="0px" width="24px" height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 50 50;" xml:space="preserve">
3
- <rect x="0" y="0" width="4" height="7" fill="#fff">
4
- <animateTransform attributeType="xml" attributeName="transform" type="scale" values="1,1; 1,3; 1,1" begin="0s"
5
- dur="0.6s" repeatCount="indefinite" />
6
- </rect>
7
-
8
- <rect x="10" y="0" width="4" height="7" fill="#fff">
9
- <animateTransform attributeType="xml" attributeName="transform" type="scale" values="1,1; 1,3; 1,1" begin="0.2s"
10
- dur="0.6s" repeatCount="indefinite" />
11
- </rect>
12
- <rect x="20" y="0" width="4" height="7" fill="#fff">
13
- <animateTransform attributeType="xml" attributeName="transform" type="scale" values="1,1; 1,3; 1,1" begin="0.4s"
14
- dur="0.6s" repeatCount="indefinite" />
15
- </rect>
1
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
2
+ y="0px" width="24px" height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 50 50;" xml:space="preserve">
3
+ <rect x="0" y="0" width="4" height="7" fill="#fff">
4
+ <animateTransform attributeType="xml" attributeName="transform" type="scale" values="1,1; 1,3; 1,1" begin="0s"
5
+ dur="0.6s" repeatCount="indefinite" />
6
+ </rect>
7
+
8
+ <rect x="10" y="0" width="4" height="7" fill="#fff">
9
+ <animateTransform attributeType="xml" attributeName="transform" type="scale" values="1,1; 1,3; 1,1" begin="0.2s"
10
+ dur="0.6s" repeatCount="indefinite" />
11
+ </rect>
12
+ <rect x="20" y="0" width="4" height="7" fill="#fff">
13
+ <animateTransform attributeType="xml" attributeName="transform" type="scale" values="1,1; 1,3; 1,1" begin="0.4s"
14
+ dur="0.6s" repeatCount="indefinite" />
15
+ </rect>
16
16
  </svg>
@@ -1,8 +1,8 @@
1
- <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <g id="icon_planar/web_icon_&#230;&#181;&#143;&#232;&#167;&#136;&#233;&#135;&#143;_fill">
3
- <g id="&#232;&#183;&#175;&#229;&#190;&#132;">
4
- <path fill-rule="evenodd" clip-rule="evenodd" d="M8.0002 13C5.55571 13 3.37488 11.4573 1.46255 8.44367C1.29048 8.17291 1.29048 7.82709 1.46255 7.55633C3.37488 4.54267 5.55571 3 8.0002 3C10.4447 3 12.6255 4.54267 14.5379 7.55633C14.7099 7.82709 14.7099 8.17291 14.5379 8.44367C12.6255 11.4573 10.4447 13 8.0002 13ZM5.33352 8C5.33352 9.47276 6.52743 10.6667 8.00018 10.6667C9.47294 10.6667 10.6669 9.47276 10.6669 8C10.6669 6.52724 9.47294 5.33333 8.00018 5.33333C6.52743 5.33333 5.33352 6.52724 5.33352 8Z" fill="#CCCCCC"/>
5
- <path d="M9.34553 8C9.34553 8.73633 8.7432 9.33333 8.0002 9.33333C7.2572 9.33333 6.65487 8.73633 6.65487 8C6.65487 7.26367 7.2572 6.66667 8.0002 6.66667C8.7432 6.66667 9.34553 7.26367 9.34553 8Z" fill="#CCCCCC"/>
6
- </g>
7
- </g>
8
- </svg>
1
+ <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <g id="icon_planar/web_icon_&#230;&#181;&#143;&#232;&#167;&#136;&#233;&#135;&#143;_fill">
3
+ <g id="&#232;&#183;&#175;&#229;&#190;&#132;">
4
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M8.0002 13C5.55571 13 3.37488 11.4573 1.46255 8.44367C1.29048 8.17291 1.29048 7.82709 1.46255 7.55633C3.37488 4.54267 5.55571 3 8.0002 3C10.4447 3 12.6255 4.54267 14.5379 7.55633C14.7099 7.82709 14.7099 8.17291 14.5379 8.44367C12.6255 11.4573 10.4447 13 8.0002 13ZM5.33352 8C5.33352 9.47276 6.52743 10.6667 8.00018 10.6667C9.47294 10.6667 10.6669 9.47276 10.6669 8C10.6669 6.52724 9.47294 5.33333 8.00018 5.33333C6.52743 5.33333 5.33352 6.52724 5.33352 8Z" fill="#CCCCCC"/>
5
+ <path d="M9.34553 8C9.34553 8.73633 8.7432 9.33333 8.0002 9.33333C7.2572 9.33333 6.65487 8.73633 6.65487 8C6.65487 7.26367 7.2572 6.66667 8.0002 6.66667C8.7432 6.66667 9.34553 7.26367 9.34553 8Z" fill="#CCCCCC"/>
6
+ </g>
7
+ </g>
8
+ </svg>
@@ -1,3 +1,3 @@
1
- <svg width="15" height="14" viewBox="0 0 15 14" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <path fill-rule="evenodd" clip-rule="evenodd" d="M12.75 1.75033C12.75 1.42833 12.4887 1.16699 12.1667 1.16699H2.83333C2.51133 1.16699 2.25 1.42833 2.25 1.75033V12.2503C2.25 12.5723 2.51133 12.8337 2.83333 12.8337H12.1667C12.4887 12.8337 12.75 12.5723 12.75 12.2503V8.89149L9.97392 11.6676L7.49708 11.6641L7.50058 9.19191L12.75 3.94191V1.75033ZM14.0287 5.96316L13.2038 5.13833L8.66667 9.67549L8.6655 10.4992L9.4915 10.5003L14.0287 5.96316ZM7.5 7.00033H4.58333V8.16699H7.5V7.00033ZM4.58333 4.66699H9.25V5.83366H4.58333V4.66699Z" fill="#CCCCCC"/>
3
- </svg>
1
+ <svg width="15" height="14" viewBox="0 0 15 14" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M12.75 1.75033C12.75 1.42833 12.4887 1.16699 12.1667 1.16699H2.83333C2.51133 1.16699 2.25 1.42833 2.25 1.75033V12.2503C2.25 12.5723 2.51133 12.8337 2.83333 12.8337H12.1667C12.4887 12.8337 12.75 12.5723 12.75 12.2503V8.89149L9.97392 11.6676L7.49708 11.6641L7.50058 9.19191L12.75 3.94191V1.75033ZM14.0287 5.96316L13.2038 5.13833L8.66667 9.67549L8.6655 10.4992L9.4915 10.5003L14.0287 5.96316ZM7.5 7.00033H4.58333V8.16699H7.5V7.00033ZM4.58333 4.66699H9.25V5.83366H4.58333V4.66699Z" fill="#CCCCCC"/>
3
+ </svg>
@@ -1,134 +1,135 @@
1
- import React, { useEffect, useState } from 'react'
2
- import dayjs from 'dayjs'
3
- import classNames from 'classnames'
4
- import { find } from 'lodash'
5
- import Avatar from '@/component/Avatar'
6
- import Icon from '@/component/Icon'
7
- import { formatLikesCount, formatUVCount } from '@/util/liveCountUtil'
8
- import { getResourceLikes } from '@/service/like'
9
- import Action from './Action'
10
- import DefaultCover from './img/live.png'
11
- import PlayImg from './img/play.svg'
12
- import dianZan from './img/like-fill.svg'
13
- import yiYue from './img/view-fill.svg'
14
- import videoSvg from './img/video.svg'
15
- import style from './index.module.less'
16
-
17
- const TagName = {
18
- 0: '直播预告',
19
- 1: '直播中',
20
- 2: '直播回放',
21
- 3: '直播中' // 实际是暂停
22
- }
23
-
24
- export default function ListItem({
25
- data,
26
- subscription,
27
- onDetailClick,
28
- handleLogin,
29
- isLogin,
30
- onSubscribe
31
- }) {
32
- const {
33
- live_id: liveId,
34
- live_name: liveName,
35
- begin_time: beginTime,
36
- // end_time: endTime,
37
- cover_url: coverUrl,
38
- status
39
- } = data
40
- const [liveExt, setLiveExt] = useState({})
41
- const [isSubscribe, setIsSubscribe] = useState(() => {
42
- if (status === 0) {
43
- // 开播前15分钟之外
44
- const subscriptionItem = find(subscription, {
45
- live_id: liveId
46
- })
47
- if (subscriptionItem?.is_subscribe) { // 已预约
48
- return true
49
- } else { // 未预约
50
- return false
51
- }
52
- } else {
53
- return false
54
- }
55
- })
56
-
57
- useEffect(() => {
58
- (async () => {
59
- const res = await getResourceLikes(liveId)
60
- setLiveExt(res || {})
61
- })()
62
- }, [])
63
-
64
- const handleDetailClick = async () => {
65
- if (data.login && !isLogin) {
66
- handleLogin(data)
67
- return
68
- }
69
- if (onDetailClick) {
70
- onDetailClick(data)
71
- } else {
72
- // 默认跳转中小学
73
- window.open(`https://basic.smartedu.cn/publicLive/${liveId}`)
74
- }
75
- }
76
-
77
- return (
78
- <div
79
- className={style.container}
80
- onClick={handleDetailClick}
81
- >
82
- <div className={style.right}>
83
- <div className={style['right-top']}>
84
- <div className={style.title}>{liveName}</div>
85
- </div>
86
- <div className={style['right-bottom']}>
87
- <div className={`${style.time} ${status === 0 ? style['foreshow-time'] : ''}`}>
88
- {isSubscribe ? <Icon type="web_icon_shijian_fill" className={style['time-icon']} /> : <img src={videoSvg} className={style['time-icon']} />}
89
-
90
- {status === 2 ? (
91
- `${dayjs(beginTime).format('YYYY/MM/DD HH:mm')}`
92
- ) : (
93
- `${dayjs(beginTime).format('YYYY/MM/DD HH:mm')} 开始`
94
- )}
95
-
96
- <div className={style.like_sty}>
97
- <div className={style.icon_bottom}>
98
- <img src={yiYue} />
99
- {formatUVCount(liveExt.total_uv || 0)}
100
- </div>
101
- <div className={style.icon_bottom}>
102
- <img src={dianZan} alt="" />
103
- {formatLikesCount(liveExt.like_count || 0)}
104
- </div>
105
- </div>
106
- </div>
107
-
108
- <Action
109
- data={data}
110
- subscription={subscription}
111
- onActionDetailClick={handleDetailClick}
112
- handleLogin={handleLogin}
113
- isLogin={isLogin}
114
- onSubscribe={onSubscribe}
115
- setIsSubscribe={setIsSubscribe}
116
- status={status}
117
- />
118
-
119
- </div>
120
- </div>
121
- <div className={style.left}>
122
- <div className={classNames(style.tag, style[`tag${status}`])}>
123
- {status === 1 || status === 3 ? <img src={PlayImg} alt="" /> : null}
124
- {TagName[status]}
125
- </div>
126
- <Avatar
127
- src={coverUrl || DefaultCover}
128
- errorImg={DefaultCover}
129
- className={style.avatar}
130
- />
131
- </div>
132
- </div>
133
- )
134
- }
1
+ import React, { useEffect, useState } from 'react'
2
+ import dayjs from 'dayjs'
3
+ import classNames from 'classnames'
4
+ import { find } from 'lodash'
5
+ import Avatar from '@/component/Avatar'
6
+ import Icon from '@/component/Icon'
7
+ import { formatLikesCount, formatUVCount } from '@/util/liveCountUtil'
8
+ import { getResourceLikes } from '@/service/like'
9
+ import Action from './Action'
10
+ import DefaultCover from './img/live.png'
11
+ import PlayImg from './img/play.svg'
12
+ import dianZan from './img/like-fill.svg'
13
+ import yiYue from './img/view-fill.svg'
14
+ import videoSvg from './img/video.svg'
15
+ import style from './index.module.less'
16
+
17
+ const TagName = {
18
+ 0: '直播预告',
19
+ 1: '直播中',
20
+ 2: '直播回放',
21
+ 3: '直播中' // 实际是暂停
22
+ }
23
+
24
+ export default function ListItem({
25
+ data,
26
+ themeName,
27
+ subscription,
28
+ onDetailClick,
29
+ handleLogin,
30
+ isLogin,
31
+ onSubscribe
32
+ }) {
33
+ const {
34
+ live_id: liveId,
35
+ live_name: liveName,
36
+ begin_time: beginTime,
37
+ // end_time: endTime,
38
+ cover_url: coverUrl,
39
+ status
40
+ } = data
41
+ const [liveExt, setLiveExt] = useState({})
42
+ const [isSubscribe, setIsSubscribe] = useState(() => {
43
+ if (status === 0) {
44
+ // 开播前15分钟之外
45
+ const subscriptionItem = find(subscription, {
46
+ live_id: liveId
47
+ })
48
+ if (subscriptionItem?.is_subscribe) { // 已预约
49
+ return true
50
+ } else { // 未预约
51
+ return false
52
+ }
53
+ } else {
54
+ return false
55
+ }
56
+ })
57
+
58
+ useEffect(() => {
59
+ (async () => {
60
+ const res = await getResourceLikes(liveId)
61
+ setLiveExt(res || {})
62
+ })()
63
+ }, [])
64
+
65
+ const handleDetailClick = async () => {
66
+ if (data.login && !isLogin) {
67
+ handleLogin(data)
68
+ return
69
+ }
70
+ if (onDetailClick) {
71
+ onDetailClick(data)
72
+ } else {
73
+ // 默认跳转中小学
74
+ window.open(`https://basic.smartedu.cn/publicLive/${liveId}`)
75
+ }
76
+ }
77
+
78
+ return (
79
+ <div
80
+ className={classNames(style.container, themeName)}
81
+ onClick={handleDetailClick}
82
+ >
83
+ <div className={style.right}>
84
+ <div className={style['right-top']}>
85
+ <div className={style.title}>{liveName}</div>
86
+ </div>
87
+ <div className={style['right-bottom']}>
88
+ <div className={`${style.time} ${status === 0 ? style['foreshow-time'] : ''} time-box`}>
89
+ {isSubscribe ? <Icon type="web_icon_shijian_fill" className={`${style['time-icon']} checked-icon`} /> : <img src={videoSvg} className={style['time-icon']} />}
90
+
91
+ {status === 2 ? (
92
+ `${dayjs(beginTime).format('YYYY/MM/DD HH:mm')}`
93
+ ) : (
94
+ `${dayjs(beginTime).format('YYYY/MM/DD HH:mm')} 开始`
95
+ )}
96
+
97
+ <div className={style.like_sty}>
98
+ <div className={style.icon_bottom}>
99
+ <img src={yiYue} />
100
+ {formatUVCount(liveExt.total_uv || 0)}
101
+ </div>
102
+ <div className={style.icon_bottom}>
103
+ <img src={dianZan} alt="" />
104
+ {formatLikesCount(liveExt.like_count || 0)}
105
+ </div>
106
+ </div>
107
+ </div>
108
+
109
+ <Action
110
+ data={data}
111
+ subscription={subscription}
112
+ onActionDetailClick={handleDetailClick}
113
+ handleLogin={handleLogin}
114
+ isLogin={isLogin}
115
+ onSubscribe={onSubscribe}
116
+ setIsSubscribe={setIsSubscribe}
117
+ status={status}
118
+ />
119
+
120
+ </div>
121
+ </div>
122
+ <div className={style.left}>
123
+ <div className={classNames(style.tag, style[`tag${status}`])}>
124
+ {status === 1 || status === 3 ? <img src={PlayImg} alt="" /> : null}
125
+ {TagName[status]}
126
+ </div>
127
+ <Avatar
128
+ src={coverUrl || DefaultCover}
129
+ errorImg={DefaultCover}
130
+ className={style.avatar}
131
+ />
132
+ </div>
133
+ </div>
134
+ )
135
+ }