@x-edu/live-player 0.0.19 → 0.0.21

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 (302) hide show
  1. package/.browserslistrc +10 -10
  2. package/.eslintignore +8 -8
  3. package/.eslintrc.js +26 -26
  4. package/.gem-mine +11 -11
  5. package/.postcssrc.js +6 -6
  6. package/README.md +145 -145
  7. package/babel.config.js +33 -33
  8. package/dist/XEduLivePlayer.common.js +12161 -1154
  9. package/dist/XEduLivePlayerPre.common.js +12369 -1358
  10. package/doc/develop.md +23 -23
  11. package/gem-mine.config.js +86 -86
  12. package/jest.config.js +9 -9
  13. package/jsconfig.json +15 -15
  14. package/mock/helper.js +8 -8
  15. package/mock/index.js +34 -34
  16. package/package.json +99 -99
  17. package/public/3rd/ali-player/alipayercomponents-1.0.8.min.js +26 -26
  18. package/public/3rd/ali-player/aliplayer-hls-min.js +27 -27
  19. package/public/3rd/ali-player/aliplayer-min.js +1 -1
  20. package/public/3rd/im-web-push/index.umd.js +14 -14
  21. package/public/JsBridge.js +1602 -1602
  22. package/public/fish/editor/themes/default/css/ueditor.css +1905 -1905
  23. package/public/fish/editor/third-party/codemirror/codemirror.css +104 -104
  24. package/public/fish/editor/third-party/codemirror/codemirror.js +3581 -3581
  25. package/public/fish/editor/third-party/zeroclipboard/ZeroClipboard.js +1255 -1255
  26. package/public/fish/editor/ueditor.all.min.js +16 -16
  27. package/public/fish/editor/ueditor.config.js +467 -467
  28. package/public/fish/icon/umd-4.1.2.js +1 -1
  29. package/public/fish/video/videoplayer.min.css +6 -6
  30. package/public/fish/video/videoplayer.min.js +31 -31
  31. package/public/fish/video/zh-CN.js +82 -82
  32. package/public/icon/demo.css +539 -539
  33. package/public/icon/demo_index.html +2189 -2189
  34. package/public/icon/iconfont.css +363 -363
  35. package/public/icon/iconfont.json +618 -618
  36. package/public/index.html +50 -50
  37. package/script/image/readme.md +77 -77
  38. package/script/postcss.js +48 -48
  39. package/src/App.jsx +24 -24
  40. package/src/asset/img/course/playing.svg +21 -21
  41. package/src/asset/img/icon-course-white.svg +3 -3
  42. package/src/asset/img/icon-course.svg +3 -3
  43. package/src/asset/img/icon-eye-white.svg +4 -4
  44. package/src/asset/img/icon-eye.svg +4 -4
  45. package/src/asset/img/icon-school-white.svg +3 -3
  46. package/src/asset/img/icon-school.svg +3 -3
  47. package/src/asset/img/loading.svg +52 -52
  48. package/src/asset/img/video-play.svg +6 -6
  49. package/src/asset/style/background.less +19 -19
  50. package/src/asset/style/banner.less +36 -36
  51. package/src/asset/style/base.less +74 -74
  52. package/src/asset/style/index.less +114 -114
  53. package/src/asset/style/reset-theme.less +141 -141
  54. package/src/asset/style/theme/index.less +55 -55
  55. package/src/asset/style/theme/party/global.less +20 -20
  56. package/src/asset/style/theme/party/override.less +57 -57
  57. package/src/asset/style/theme/test/global.less +18 -18
  58. package/src/asset/style/theme/test/override.less +45 -45
  59. package/src/asset/style/variable.less +12 -12
  60. package/src/component/AliPlayer/index.jsx +49 -49
  61. package/src/component/Avatar/index.jsx +50 -50
  62. package/src/component/Empty/index.jsx +34 -34
  63. package/src/component/Empty/index.module.less +37 -37
  64. package/src/component/IMChatroom/component/status/403.jsx +13 -13
  65. package/src/component/IMChatroom/component/status/404.jsx +13 -13
  66. package/src/component/IMChatroom/component/status/Error.jsx +23 -23
  67. package/src/component/IMChatroom/component/status/Loading.jsx +5 -5
  68. package/src/component/IMChatroom/config/app/config.js +118 -118
  69. package/src/component/IMChatroom/config/app/index.js +60 -60
  70. package/src/component/IMChatroom/config/env.js +5 -5
  71. package/src/component/IMChatroom/config/index.js +3 -3
  72. package/src/component/IMChatroom/config/request/config/base.js +124 -124
  73. package/src/component/IMChatroom/config/request/config/chatroom.js +26 -26
  74. package/src/component/IMChatroom/config/request/config/imCoreApi.js +21 -21
  75. package/src/component/IMChatroom/config/request/index.js +21 -21
  76. package/src/component/IMChatroom/config/request/proxy.js +39 -39
  77. package/src/component/IMChatroom/config/url.js +7 -7
  78. package/src/component/IMChatroom/constants/errorCode.js +9 -9
  79. package/src/component/IMChatroom/constants/index.js +84 -84
  80. package/src/component/IMChatroom/constants/origin.js +27 -27
  81. package/src/component/IMChatroom/context/chatroom.js +154 -154
  82. package/src/component/IMChatroom/context/connect.js +28 -28
  83. package/src/component/IMChatroom/i18n/en/index.json +73 -73
  84. package/src/component/IMChatroom/i18n/index.jsx +14 -14
  85. package/src/component/IMChatroom/i18n/language.js +9 -9
  86. package/src/component/IMChatroom/i18n/zh-CN/index.json +73 -73
  87. package/src/component/IMChatroom/index.jsx +49 -49
  88. package/src/component/IMChatroom/page/chat/index.jsx +27 -27
  89. package/src/component/IMChatroom/page/chat/messageEditor/index.jsx +375 -375
  90. package/src/component/IMChatroom/page/chat/messageList/index.jsx +354 -354
  91. package/src/component/IMChatroom/page/chat/stickedMessage/index.jsx +59 -59
  92. package/src/component/IMChatroom/page/chat/stickedMessage/style/index.module.less +7 -7
  93. package/src/component/IMChatroom/page/chat/style/index.module.less +51 -51
  94. package/src/component/IMChatroom/page/home/connect/index.jsx +188 -188
  95. package/src/component/IMChatroom/page/home/connect/status.jsx +124 -124
  96. package/src/component/IMChatroom/page/home/context/cmd.jsx +37 -37
  97. package/src/component/IMChatroom/page/home/context/index.jsx +67 -67
  98. package/src/component/IMChatroom/page/home/index.jsx +164 -164
  99. package/src/component/IMChatroom/page/home/notice/index.jsx +123 -123
  100. package/src/component/IMChatroom/page/home/notice/style/index.module.less +49 -49
  101. package/src/component/IMChatroom/page/home/style/index.module.less +110 -110
  102. package/src/component/IMChatroom/page/member/index.jsx +15 -15
  103. package/src/component/IMChatroom/page/member/memberCount/index.jsx +44 -44
  104. package/src/component/IMChatroom/page/member/memberList/index.jsx +121 -121
  105. package/src/component/IMChatroom/page/member/style/index.module.less +2 -2
  106. package/src/component/IMChatroom/sdk/bridge.js +39 -39
  107. package/src/component/IMChatroom/sdk/cs/constants.js +20 -20
  108. package/src/component/IMChatroom/sdk/cs/index.js +101 -101
  109. package/src/component/IMChatroom/sdk/imChatroom.js +15 -15
  110. package/src/component/IMChatroom/sdk/imcore/constants.js +128 -128
  111. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomDestroyed.js +5 -5
  112. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomInfoGetFail.js +5 -5
  113. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomKickedByAdmin.js +5 -5
  114. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomKickedBySelf.js +5 -5
  115. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomLoginFail.js +5 -5
  116. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomLoginSuccess.js +5 -5
  117. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomMemberLogin.js +5 -5
  118. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomMemberLogout.js +5 -5
  119. package/src/component/IMChatroom/sdk/imcore/emitters/connectionConnected.js +5 -5
  120. package/src/component/IMChatroom/sdk/imcore/emitters/connectionConnecting.js +5 -5
  121. package/src/component/IMChatroom/sdk/imcore/emitters/connectionDisconnect.js +5 -5
  122. package/src/component/IMChatroom/sdk/imcore/emitters/index.js +57 -57
  123. package/src/component/IMChatroom/sdk/imcore/emitters/messageReceive.js +36 -36
  124. package/src/component/IMChatroom/sdk/imcore/index.js +178 -178
  125. package/src/component/IMChatroom/sdk/imcore/interceptors/request.js +7 -7
  126. package/src/component/IMChatroom/sdk/imcore/interceptors/response.js +5 -5
  127. package/src/component/IMChatroom/sdk/imcore/plugins/getAuth.js +64 -64
  128. package/src/component/IMChatroom/sdk/imcore/plugins/getConversationId.js +20 -20
  129. package/src/component/IMChatroom/sdk/imcore/plugins/getExtInfo.js +10 -10
  130. package/src/component/IMChatroom/sdk/imcore/plugins/getLoginInfo.js +48 -48
  131. package/src/component/IMChatroom/sdk/imcore/plugins/getPlatformType.js +12 -12
  132. package/src/component/IMChatroom/sdk/imcore/plugins/index.js +22 -22
  133. package/src/component/IMChatroom/sdk/imcore/util/format.js +177 -177
  134. package/src/component/IMChatroom/sdk/imcore/util/parser.js +35 -35
  135. package/src/component/IMChatroom/sdk/oms.js +18 -18
  136. package/src/component/IMChatroom/sdk/uc.js +3 -3
  137. package/src/component/IMChatroom/subscription/channel/app.js +5 -5
  138. package/src/component/IMChatroom/subscription/channel/ctl.js +22 -22
  139. package/src/component/IMChatroom/subscription/channel/member.js +40 -40
  140. package/src/component/IMChatroom/subscription/channel/message.js +13 -13
  141. package/src/component/IMChatroom/subscription/channel/ntf.js +86 -86
  142. package/src/component/IMChatroom/subscription/channel/tel.js +5 -5
  143. package/src/component/IMChatroom/subscription/channel/websocket.js +5 -5
  144. package/src/component/IMChatroom/subscription/event.js +37 -37
  145. package/src/component/IMChatroom/subscription/index.js +19 -19
  146. package/src/component/IMChatroom/util/account.js +8 -8
  147. package/src/component/IMChatroom/util/chatroom.js +255 -255
  148. package/src/component/IMChatroom/util/jsonBigInt.js +5 -5
  149. package/src/component/IMChatroom/util/location.js +12 -12
  150. package/src/component/Icon/index.jsx +16 -16
  151. package/src/component/Icon/index.module.less +2 -2
  152. package/src/component/Pagination/LocalPagination.jsx +27 -27
  153. package/src/component/Pagination/RemotePagination.jsx +32 -32
  154. package/src/component/Pagination/index.jsx +31 -31
  155. package/src/component/Pagination/index.module.less +110 -110
  156. package/src/component/PlayerTip/index.jsx +34 -34
  157. package/src/component/VideoBase/index.jsx +242 -242
  158. package/src/component/VideoBase/style.less +65 -65
  159. package/src/component/VideoBase/utils.js +81 -81
  160. package/src/component/mixin.less +9 -9
  161. package/src/component/status/403.jsx +15 -15
  162. package/src/component/status/404/index.jsx +73 -73
  163. package/src/component/status/404/index.module.less +36 -36
  164. package/src/component/status/Error/error.module.less +13 -13
  165. package/src/component/status/Error/index.jsx +47 -47
  166. package/src/component/status/Loading/img/loading.svg +52 -52
  167. package/src/component/status/Loading/index.jsx +31 -31
  168. package/src/component/status/Loading/index.less +56 -56
  169. package/src/component/status/None/index.jsx +20 -20
  170. package/src/component/status/None/index.module.less +35 -35
  171. package/src/component/status/Status/index.jsx +26 -26
  172. package/src/component/status/Status/index.module.less +8 -8
  173. package/src/config/constant/commonUrl.js +2 -2
  174. package/src/config/constant/user.js +6 -6
  175. package/src/config/context/site-config.js +48 -48
  176. package/src/config/env/index.js +5 -5
  177. package/src/config/env/local/index.js +13 -13
  178. package/src/config/env/ncet-xedu/api.js +175 -175
  179. package/src/config/env/ncet-xedu/app.js +12 -12
  180. package/src/config/env/ncet-xedu/cs.js +8 -8
  181. package/src/config/env/ncet-xedu/index.js +14 -14
  182. package/src/config/env/ncet-xedu/push.js +5 -5
  183. package/src/config/env/preproduction/api.js +144 -144
  184. package/src/config/env/preproduction/app.js +12 -12
  185. package/src/config/env/preproduction/cs.js +8 -8
  186. package/src/config/env/preproduction/index.js +14 -14
  187. package/src/config/env/preproduction/push.js +5 -5
  188. package/src/config/env/product/api.js +113 -113
  189. package/src/config/env/product/app.js +12 -12
  190. package/src/config/env/product/cs.js +5 -5
  191. package/src/config/env/product/index.js +14 -14
  192. package/src/config/env/product/push.js +5 -5
  193. package/src/config/live.js +80 -80
  194. package/src/config/publicLive.js +53 -53
  195. package/src/config/request/assessments.js +24 -24
  196. package/src/config/request/config-center.js +8 -8
  197. package/src/config/request/helper.js +166 -166
  198. package/src/config/request/im-broadcasts.js +12 -12
  199. package/src/config/request/live-activity-gateway.js +8 -8
  200. package/src/config/request/live-activity.js +13 -13
  201. package/src/config/request/raw.js +6 -6
  202. package/src/config/request/x-cloud-web.js +13 -13
  203. package/src/config/request/x-proxy.js +34 -34
  204. package/src/demo/Detail.jsx +11 -11
  205. package/src/demo/List.jsx +64 -64
  206. package/src/demo/index.jsx +17 -17
  207. package/src/detail/LineSwitch/index.jsx +71 -71
  208. package/src/detail/LiveCountDown/index.jsx +44 -44
  209. package/src/detail/LiveCountDown/index.module.less +31 -31
  210. package/src/detail/LiveOnlineCount/img/icon.svg +15 -15
  211. package/src/detail/LiveOnlineCount/index.jsx +68 -68
  212. package/src/detail/LiveOnlineCount/index.module.less +34 -34
  213. package/src/detail/LiveOnlineCount/util.js +74 -74
  214. package/src/detail/LiveStatus/AnchorOnTheWay.jsx +88 -88
  215. package/src/detail/LiveStatus/index.jsx +202 -202
  216. package/src/detail/LiveStatus/index.module.less +192 -192
  217. package/src/detail/LiveVideo/config.js +37 -37
  218. package/src/detail/LiveVideo/index.jsx +188 -188
  219. package/src/detail/LiveVideo/index.module.less +41 -41
  220. package/src/detail/NotLoginChatroom/index.jsx +37 -37
  221. package/src/detail/NotLoginChatroom/index.module.less +46 -46
  222. package/src/detail/RecordVideo/index.jsx +150 -150
  223. package/src/detail/RecordVideo/index.module.less +31 -31
  224. package/src/detail/ReplayVideo/index.jsx +93 -93
  225. package/src/detail/ReplayVideo/index.module.less +65 -65
  226. package/src/detail/const.js +20 -20
  227. package/src/detail/hook/usePullSource.js +82 -82
  228. package/src/detail/hook/usePullState.js +51 -51
  229. package/src/detail/index.jsx +482 -482
  230. package/src/detail/index.module.less +188 -188
  231. package/src/hook/useAsync.js +84 -84
  232. package/src/hook/useGoToPage.js +83 -83
  233. package/src/hook/useInterval.js +28 -28
  234. package/src/hook/useIsMounted.js +17 -17
  235. package/src/hook/useModuleByRole.js +53 -53
  236. package/src/hook/usePageScrollable.js +52 -52
  237. package/src/hook/usePortal.js +83 -83
  238. package/src/hook/useScrollRestore/index.js +32 -32
  239. package/src/hook/useScrollRestore/scrollContext.js +20 -20
  240. package/src/hook/useTrackRef.js +11 -11
  241. package/src/hook/useWindowSize.js +28 -28
  242. package/src/hook/useZoom.js +47 -47
  243. package/src/index.js +10 -10
  244. package/src/lib/getLiveOnlineCount.js +10 -10
  245. package/src/lib/getServiceConfig.js +102 -102
  246. package/src/list/Empty/index.jsx +20 -20
  247. package/src/list/Empty/index.module.less +23 -23
  248. package/src/list/ListItem/Action/index.jsx +98 -98
  249. package/src/list/ListItem/Action/index.module.less +21 -21
  250. package/src/list/ListItem/img/dianzan.svg +4 -0
  251. package/src/list/ListItem/img/play.svg +15 -15
  252. package/src/list/ListItem/img/yiguankan.svg +3 -0
  253. package/src/list/ListItem/index.jsx +24 -1
  254. package/src/list/ListItem/index.module.less +146 -123
  255. package/src/list/index.jsx +80 -0
  256. package/src/list/index.module.less +35 -35
  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/manageApi.js +7 -7
  264. package/src/service/managePortal.js +6 -6
  265. package/src/service/myStudyRecord.js +93 -93
  266. package/src/service/navigation.js +47 -47
  267. package/src/service/ndMeeting.js +10 -10
  268. package/src/service/ndr.js +122 -122
  269. package/src/service/news.js +93 -93
  270. package/src/service/personalCenter.js +270 -270
  271. package/src/service/qualityCourse.js +31 -31
  272. package/src/service/recommend.js +81 -81
  273. package/src/service/school.js +323 -323
  274. package/src/service/search.js +170 -170
  275. package/src/service/site-config.js +7 -7
  276. package/src/service/socialCensor.js +45 -45
  277. package/src/service/specialEdu.js +31 -31
  278. package/src/service/suggestion.js +85 -85
  279. package/src/service/syncClassroom.js +321 -321
  280. package/src/service/tCourse.js +204 -204
  281. package/src/service/tchTraining.js +37 -37
  282. package/src/service/uc.js +45 -45
  283. package/src/util/app.js +1 -1
  284. package/src/util/array.js +3 -3
  285. package/src/util/auth/func.js +57 -57
  286. package/src/util/date.js +53 -53
  287. package/src/util/env.js +9 -9
  288. package/src/util/getTimestamp.js +10 -10
  289. package/src/util/hof.js +105 -105
  290. package/src/util/live/index.js +42 -42
  291. package/src/util/liveCountUtil.js +52 -0
  292. package/src/util/netUrl.js +35 -35
  293. package/src/util/object.js +13 -13
  294. package/src/util/push/index.js +58 -58
  295. package/src/util/request.js +227 -227
  296. package/src/util/type.js +17 -17
  297. package/src/util/url.js +203 -203
  298. package/src/util/video.js +26 -26
  299. package/test/setup.js +21 -21
  300. package/test/unit/component/header/logo.spec.jsx +8 -8
  301. package/test/unit/helper.jsx +25 -25
  302. package/test/unit/util/date.spec.js +40 -40
@@ -1,57 +1,57 @@
1
- import buildURL from 'axios/lib/helpers/buildURL'
2
-
3
- let uc
4
- let userInfo
5
-
6
- export function getUCInstance() {
7
- return uc
8
- }
9
-
10
- export function setUC(currentUC, _userInfo) {
11
- if (!uc) {
12
- uc = currentUC
13
- }
14
- userInfo = _userInfo
15
- }
16
-
17
- export function getAvatarURL(userId) {
18
- return uc.getAvatarURL({
19
- userId
20
- })
21
- }
22
-
23
- export async function logout() {
24
- try {
25
- await uc.logout()
26
- } catch {
27
- uc._ucToken.clearToken()
28
- }
29
- }
30
-
31
- export async function getSessionUserInfo() {
32
- const account = uc.getCurrentAccount()
33
- if (account) {
34
- const curUserInfo = await account.getAccountInfo({
35
- force: true
36
- })
37
- return curUserInfo
38
- }
39
- }
40
-
41
- export async function getAuthHeader(c) {
42
- const hasLogin = !!userInfo
43
- if (hasLogin) {
44
- const {
45
- url: _url,
46
- method,
47
- params,
48
- paramsSerializer
49
- } = c
50
- const url = buildURL(_url, params, paramsSerializer).replace(/@/g, '%40').replace(/'/g, '%27')
51
- const auth = await uc.getAuthHeaderAsync({
52
- url,
53
- method
54
- })
55
- return auth
56
- }
57
- }
1
+ import buildURL from 'axios/lib/helpers/buildURL'
2
+
3
+ let uc
4
+ let userInfo
5
+
6
+ export function getUCInstance() {
7
+ return uc
8
+ }
9
+
10
+ export function setUC(currentUC, _userInfo) {
11
+ if (!uc) {
12
+ uc = currentUC
13
+ }
14
+ userInfo = _userInfo
15
+ }
16
+
17
+ export function getAvatarURL(userId) {
18
+ return uc.getAvatarURL({
19
+ userId
20
+ })
21
+ }
22
+
23
+ export async function logout() {
24
+ try {
25
+ await uc.logout()
26
+ } catch {
27
+ uc._ucToken.clearToken()
28
+ }
29
+ }
30
+
31
+ export async function getSessionUserInfo() {
32
+ const account = uc.getCurrentAccount()
33
+ if (account) {
34
+ const curUserInfo = await account.getAccountInfo({
35
+ force: true
36
+ })
37
+ return curUserInfo
38
+ }
39
+ }
40
+
41
+ export async function getAuthHeader(c) {
42
+ const hasLogin = !!userInfo
43
+ if (hasLogin) {
44
+ const {
45
+ url: _url,
46
+ method,
47
+ params,
48
+ paramsSerializer
49
+ } = c
50
+ const url = buildURL(_url, params, paramsSerializer).replace(/@/g, '%40').replace(/'/g, '%27')
51
+ const auth = await uc.getAuthHeaderAsync({
52
+ url,
53
+ method
54
+ })
55
+ return auth
56
+ }
57
+ }
package/src/util/date.js CHANGED
@@ -1,53 +1,53 @@
1
- import dayjs from 'dayjs'
2
-
3
- export const formatTimeDisplay = (timeKey) => {
4
- const time = dayjs(timeKey)
5
- const dayInWeekTexts = ['周天', '周一', '周二', '周三', '周四', '周五', '周六']
6
- const dayInWeek = dayInWeekTexts[time.day()]
7
-
8
- // 如果是同一天则显示今天 + 周几
9
- if (time.isSame(dayjs(), 'day')) {
10
- return `今天 ${dayInWeek}`
11
- }
12
- if (time.isSame(dayjs(), 'year')) {
13
- return `${time.format('MM月DD日')} ${dayInWeek}`
14
- }
15
- return `${time.format('YYYY年MM月DD日')} ${dayInWeek}`
16
- }
17
-
18
- export function formatSeconds(value) {
19
- let theTime = parseInt(value, 10) // 需要转换的时间秒
20
- let theTime1 = 0 // 分
21
- let theTime2 = 0 // 小时
22
- if (theTime > 60) {
23
- theTime1 = parseInt(theTime / 60, 10)
24
- theTime = parseInt(theTime % 60, 10)
25
- if (theTime1 > 60) {
26
- theTime2 = parseInt(theTime1 / 60, 10)
27
- theTime1 = parseInt(theTime1 % 60, 10)
28
- }
29
- }
30
- let result = `${theTime1.toString().padStart(2, 0)}:${theTime.toString().padStart(2, 0)}`
31
- if (theTime2 > 0) {
32
- result = `${theTime2.toString().padStart(2, 0)}:${result}`
33
- }
34
- return result
35
- }
36
-
37
- export const parseAdapter = (option, dayjsClass) => {
38
- const proto = dayjsClass.prototype
39
- const oldParse = proto.parse
40
- proto.parse = function parse(cfg) {
41
- const { date } = cfg
42
- const params = {
43
- ...cfg
44
- }
45
- // ie 2019-03-13T13:33:00.000+0000 下解析有问题,全部转化下
46
- if (date && typeof date === 'string') {
47
- const validDate = date.replace(/(\+\d{2})(\d{2})$/, '$1:$2')
48
- params.date = validDate
49
- params.args[0] = validDate
50
- }
51
- oldParse.call(this, params)
52
- }
53
- }
1
+ import dayjs from 'dayjs'
2
+
3
+ export const formatTimeDisplay = (timeKey) => {
4
+ const time = dayjs(timeKey)
5
+ const dayInWeekTexts = ['周天', '周一', '周二', '周三', '周四', '周五', '周六']
6
+ const dayInWeek = dayInWeekTexts[time.day()]
7
+
8
+ // 如果是同一天则显示今天 + 周几
9
+ if (time.isSame(dayjs(), 'day')) {
10
+ return `今天 ${dayInWeek}`
11
+ }
12
+ if (time.isSame(dayjs(), 'year')) {
13
+ return `${time.format('MM月DD日')} ${dayInWeek}`
14
+ }
15
+ return `${time.format('YYYY年MM月DD日')} ${dayInWeek}`
16
+ }
17
+
18
+ export function formatSeconds(value) {
19
+ let theTime = parseInt(value, 10) // 需要转换的时间秒
20
+ let theTime1 = 0 // 分
21
+ let theTime2 = 0 // 小时
22
+ if (theTime > 60) {
23
+ theTime1 = parseInt(theTime / 60, 10)
24
+ theTime = parseInt(theTime % 60, 10)
25
+ if (theTime1 > 60) {
26
+ theTime2 = parseInt(theTime1 / 60, 10)
27
+ theTime1 = parseInt(theTime1 % 60, 10)
28
+ }
29
+ }
30
+ let result = `${theTime1.toString().padStart(2, 0)}:${theTime.toString().padStart(2, 0)}`
31
+ if (theTime2 > 0) {
32
+ result = `${theTime2.toString().padStart(2, 0)}:${result}`
33
+ }
34
+ return result
35
+ }
36
+
37
+ export const parseAdapter = (option, dayjsClass) => {
38
+ const proto = dayjsClass.prototype
39
+ const oldParse = proto.parse
40
+ proto.parse = function parse(cfg) {
41
+ const { date } = cfg
42
+ const params = {
43
+ ...cfg
44
+ }
45
+ // ie 2019-03-13T13:33:00.000+0000 下解析有问题,全部转化下
46
+ if (date && typeof date === 'string') {
47
+ const validDate = date.replace(/(\+\d{2})(\d{2})$/, '$1:$2')
48
+ params.date = validDate
49
+ params.args[0] = validDate
50
+ }
51
+ oldParse.call(this, params)
52
+ }
53
+ }
package/src/util/env.js CHANGED
@@ -1,9 +1,9 @@
1
- const ua = window.navigator.userAgent.toLowerCase()
2
-
3
- export function isInWX() {
4
- return ua.indexOf('micromessenger') > -1
5
- }
6
-
7
- // 判断是否在electron环境中
8
- export const { xElectron } = window
9
- export const isInElectron = !!xElectron
1
+ const ua = window.navigator.userAgent.toLowerCase()
2
+
3
+ export function isInWX() {
4
+ return ua.indexOf('micromessenger') > -1
5
+ }
6
+
7
+ // 判断是否在electron环境中
8
+ export const { xElectron } = window
9
+ export const isInElectron = !!xElectron
@@ -1,10 +1,10 @@
1
- /**
2
- * 获取时间戳
3
- * @param {number} second 时间间隔,以秒为单位,超过
4
- * @returns {string} 时间戳
5
- */
6
- export function getTimestamp(second) {
7
- // 转换毫秒
8
- const now = Math.floor(Date.now() / 1000)
9
- return Math.floor(now / second) * second
10
- }
1
+ /**
2
+ * 获取时间戳
3
+ * @param {number} second 时间间隔,以秒为单位,超过
4
+ * @returns {string} 时间戳
5
+ */
6
+ export function getTimestamp(second) {
7
+ // 转换毫秒
8
+ const now = Math.floor(Date.now() / 1000)
9
+ return Math.floor(now / second) * second
10
+ }
package/src/util/hof.js CHANGED
@@ -1,105 +1,105 @@
1
- import MutexLock from 'mutex-lock'
2
-
3
- /**
4
- * 并发fn
5
- * @param {(...args: any[]) => Promise<any>} fn
6
- * @param {any} context
7
- * @returns
8
- */
9
- export function withCo(fn, context) {
10
- const lock = new MutexLock()
11
- const newFn = async (...args) => {
12
- const lockId = await lock.request()
13
- let result
14
- try {
15
- result = await context
16
- ? await fn.bind(context)(...args)
17
- : await fn(...args)
18
- } catch (e) {
19
- lock.release(lockId)
20
- throw e
21
- }
22
- lock.release(lockId)
23
- return result
24
- }
25
- return newFn
26
- }
27
-
28
- /**
29
- * once 支持Asynchronous并发
30
- * @param {(...args: any[]) => Promise<any>} fn
31
- * @param {object?} option
32
- * @param {any?} option.context 执行context
33
- * @param {(...args) => string} option.getKey 从args中获取mutexlock key
34
- * @returns
35
- */
36
- export function withOnce(fn, {
37
- context,
38
- getKey,
39
- timeout
40
- } = {}) {
41
- const cacheObject = createCacheObject()
42
- const lockPool = createLockPool()
43
- const newFn = async (...args) => {
44
- const key = getKey
45
- ? getKey(...args)
46
- : '__internal__key'
47
- if (!cacheObject.hasKey(key)) {
48
- const lock = lockPool.getLock(key)
49
- const lockId = await lock.request()
50
- if (!cacheObject.hasKey(key)) {
51
- let result
52
- try {
53
- result = context
54
- ? await fn.bind(context)(...args)
55
- : await fn(...args)
56
- } catch (e) {
57
- lock.release(lockId)
58
- throw e
59
- }
60
- cacheObject.set(key, result, timeout)
61
- }
62
- lock.release(lockId)
63
- }
64
- return cacheObject.get(key)
65
- }
66
- return newFn
67
- }
68
-
69
- /**
70
- * lock池,根据key返回对应的lock
71
- */
72
- function createLockPool() {
73
- const lockObject = {}
74
- return {
75
- getLock(key) {
76
- if (!lockObject[key]) {
77
- lockObject[key] = new MutexLock()
78
- }
79
- return lockObject[key]
80
- }
81
- }
82
- }
83
-
84
- /**
85
- * key/value缓存对象
86
- */
87
- function createCacheObject() {
88
- const cacheObject = {}
89
- return {
90
- hasKey(key) {
91
- return Object.prototype.hasOwnProperty.call(cacheObject, key)
92
- },
93
- set(key, value, timeout) {
94
- cacheObject[key] = value
95
- if (timeout) {
96
- setTimeout(() => {
97
- delete cacheObject[key]
98
- }, timeout)
99
- }
100
- },
101
- get(key) {
102
- return cacheObject[key]
103
- }
104
- }
105
- }
1
+ import MutexLock from 'mutex-lock'
2
+
3
+ /**
4
+ * 并发fn
5
+ * @param {(...args: any[]) => Promise<any>} fn
6
+ * @param {any} context
7
+ * @returns
8
+ */
9
+ export function withCo(fn, context) {
10
+ const lock = new MutexLock()
11
+ const newFn = async (...args) => {
12
+ const lockId = await lock.request()
13
+ let result
14
+ try {
15
+ result = await context
16
+ ? await fn.bind(context)(...args)
17
+ : await fn(...args)
18
+ } catch (e) {
19
+ lock.release(lockId)
20
+ throw e
21
+ }
22
+ lock.release(lockId)
23
+ return result
24
+ }
25
+ return newFn
26
+ }
27
+
28
+ /**
29
+ * once 支持Asynchronous并发
30
+ * @param {(...args: any[]) => Promise<any>} fn
31
+ * @param {object?} option
32
+ * @param {any?} option.context 执行context
33
+ * @param {(...args) => string} option.getKey 从args中获取mutexlock key
34
+ * @returns
35
+ */
36
+ export function withOnce(fn, {
37
+ context,
38
+ getKey,
39
+ timeout
40
+ } = {}) {
41
+ const cacheObject = createCacheObject()
42
+ const lockPool = createLockPool()
43
+ const newFn = async (...args) => {
44
+ const key = getKey
45
+ ? getKey(...args)
46
+ : '__internal__key'
47
+ if (!cacheObject.hasKey(key)) {
48
+ const lock = lockPool.getLock(key)
49
+ const lockId = await lock.request()
50
+ if (!cacheObject.hasKey(key)) {
51
+ let result
52
+ try {
53
+ result = context
54
+ ? await fn.bind(context)(...args)
55
+ : await fn(...args)
56
+ } catch (e) {
57
+ lock.release(lockId)
58
+ throw e
59
+ }
60
+ cacheObject.set(key, result, timeout)
61
+ }
62
+ lock.release(lockId)
63
+ }
64
+ return cacheObject.get(key)
65
+ }
66
+ return newFn
67
+ }
68
+
69
+ /**
70
+ * lock池,根据key返回对应的lock
71
+ */
72
+ function createLockPool() {
73
+ const lockObject = {}
74
+ return {
75
+ getLock(key) {
76
+ if (!lockObject[key]) {
77
+ lockObject[key] = new MutexLock()
78
+ }
79
+ return lockObject[key]
80
+ }
81
+ }
82
+ }
83
+
84
+ /**
85
+ * key/value缓存对象
86
+ */
87
+ function createCacheObject() {
88
+ const cacheObject = {}
89
+ return {
90
+ hasKey(key) {
91
+ return Object.prototype.hasOwnProperty.call(cacheObject, key)
92
+ },
93
+ set(key, value, timeout) {
94
+ cacheObject[key] = value
95
+ if (timeout) {
96
+ setTimeout(() => {
97
+ delete cacheObject[key]
98
+ }, timeout)
99
+ }
100
+ },
101
+ get(key) {
102
+ return cacheObject[key]
103
+ }
104
+ }
105
+ }
@@ -1,42 +1,42 @@
1
- import dayjs from 'dayjs'
2
- import { PUBLIC_LIVE_STATUS, LIVING_STATUS_ADVANCE } from '@/config/publicLive'
3
-
4
- // 获取录播状态
5
- export const getRecordLiveStatus = (originStatus, visitTime, beginTime, endTime) => {
6
- const current = dayjs(visitTime).valueOf()
7
- const begin = dayjs(beginTime).valueOf()
8
- const end = dayjs(endTime).valueOf()
9
- if (originStatus === PUBLIC_LIVE_STATUS.COMPLETEED || originStatus === PUBLIC_LIVE_STATUS.OFFLINE) {
10
- return originStatus
11
- }
12
- if (current < begin) {
13
- return PUBLIC_LIVE_STATUS.NOSTARTED
14
- }
15
- if (begin <= current && end > current) {
16
- return PUBLIC_LIVE_STATUS.LIVEING
17
- }
18
- return PUBLIC_LIVE_STATUS.COMPLETEED
19
- }
20
-
21
- // 我的公开课堂本地状态,直播前60分钟可以发起直播
22
- export const getTeacherLiveLocalStatus = (originStatus, beginTime) => {
23
- if (originStatus === PUBLIC_LIVE_STATUS.COMPLETEED || originStatus === PUBLIC_LIVE_STATUS.OFFLINE) {
24
- return originStatus
25
- }
26
- const current = dayjs()
27
- const advanceTime = dayjs(beginTime).subtract(LIVING_STATUS_ADVANCE, 'minute')
28
- return current.isBefore(advanceTime) ? PUBLIC_LIVE_STATUS.NOSTARTED : PUBLIC_LIVE_STATUS.LIVEING
29
- }
30
-
31
- export const getLocalHlsLiveStatus = (visitTime, beginTime, endTime) => {
32
- const current = dayjs(visitTime).valueOf()
33
- const begin = dayjs(beginTime).valueOf()
34
- const end = dayjs(endTime).valueOf()
35
- if (current < begin) {
36
- return PUBLIC_LIVE_STATUS.NOSTARTED
37
- }
38
- if (begin <= current && end > current) {
39
- return PUBLIC_LIVE_STATUS.LIVEING
40
- }
41
- return PUBLIC_LIVE_STATUS.COMPLETEED
42
- }
1
+ import dayjs from 'dayjs'
2
+ import { PUBLIC_LIVE_STATUS, LIVING_STATUS_ADVANCE } from '@/config/publicLive'
3
+
4
+ // 获取录播状态
5
+ export const getRecordLiveStatus = (originStatus, visitTime, beginTime, endTime) => {
6
+ const current = dayjs(visitTime).valueOf()
7
+ const begin = dayjs(beginTime).valueOf()
8
+ const end = dayjs(endTime).valueOf()
9
+ if (originStatus === PUBLIC_LIVE_STATUS.COMPLETEED || originStatus === PUBLIC_LIVE_STATUS.OFFLINE) {
10
+ return originStatus
11
+ }
12
+ if (current < begin) {
13
+ return PUBLIC_LIVE_STATUS.NOSTARTED
14
+ }
15
+ if (begin <= current && end > current) {
16
+ return PUBLIC_LIVE_STATUS.LIVEING
17
+ }
18
+ return PUBLIC_LIVE_STATUS.COMPLETEED
19
+ }
20
+
21
+ // 我的公开课堂本地状态,直播前60分钟可以发起直播
22
+ export const getTeacherLiveLocalStatus = (originStatus, beginTime) => {
23
+ if (originStatus === PUBLIC_LIVE_STATUS.COMPLETEED || originStatus === PUBLIC_LIVE_STATUS.OFFLINE) {
24
+ return originStatus
25
+ }
26
+ const current = dayjs()
27
+ const advanceTime = dayjs(beginTime).subtract(LIVING_STATUS_ADVANCE, 'minute')
28
+ return current.isBefore(advanceTime) ? PUBLIC_LIVE_STATUS.NOSTARTED : PUBLIC_LIVE_STATUS.LIVEING
29
+ }
30
+
31
+ export const getLocalHlsLiveStatus = (visitTime, beginTime, endTime) => {
32
+ const current = dayjs(visitTime).valueOf()
33
+ const begin = dayjs(beginTime).valueOf()
34
+ const end = dayjs(endTime).valueOf()
35
+ if (current < begin) {
36
+ return PUBLIC_LIVE_STATUS.NOSTARTED
37
+ }
38
+ if (begin <= current && end > current) {
39
+ return PUBLIC_LIVE_STATUS.LIVEING
40
+ }
41
+ return PUBLIC_LIVE_STATUS.COMPLETEED
42
+ }
@@ -0,0 +1,52 @@
1
+ /**
2
+ * 格式化数值8
3
+ * @param {*} count
4
+ * @param {*} digit 上限位数
5
+ * @returns
6
+ */
7
+ export function formatCount(count, digit) {
8
+ const countStr = count.toString()
9
+ if (countStr.length < 5) {
10
+ return countStr
11
+ } else if (countStr.length < digit) {
12
+ // 四舍五入w
13
+ const decimal = (count / 10000).toFixed(1)
14
+ return `${
15
+ decimal.endsWith('.0')
16
+ ? decimal.substr(0, decimal.length - 2)
17
+ : decimal
18
+ }万`
19
+ } else {
20
+ return `${
21
+ '1'.padEnd(digit - 4, '0')
22
+ }万${
23
+ countStr === '1'.padEnd(digit, '0')
24
+ ? ''
25
+ : '+'
26
+ }`
27
+ }
28
+ }
29
+
30
+ /**
31
+ * 格式化点赞数
32
+ * a. < 10000 => 原样输出
33
+ * b. >= 10000 => 以万(w)为单位,保留一位小数 10000-10999 => 1w+ 11000-11999 => 1.1w+
34
+ * c. >= 1000000 => 100w+
35
+ * @param {number} count 点赞数量
36
+ * @return {string} 格式化后的点赞数
37
+ */
38
+ export function formatLikesCount(count) {
39
+ return formatCount(count, 7)
40
+ }
41
+
42
+ /**
43
+ * 格式化UV数
44
+ * a. < 10000 => 原样输出
45
+ * b. >= 10000 => 以万(w)为单位,保留一位小数 10000-10999 => 1w+ 11000-11999 => 1.1w+
46
+ * c. >= 10000000 => 1000w+
47
+ * @param {number} count 点赞数量
48
+ * @return {string} 格式化后的点赞数
49
+ */
50
+ export function formatUVCount(count) {
51
+ return formatCount(count, 8)
52
+ }
@@ -1,35 +1,35 @@
1
- import memoize from 'lodash/memoize'
2
-
3
- export const isSupportWebp = memoize(() => {
4
- try {
5
- return document.createElement('canvas').toDataURL('image/webp', 0.5).indexOf('data:image/webp') === 0
6
- } catch (err) {
7
- return false
8
- }
9
- })
10
-
11
- export default (src, size) => {
12
- if (!src) {
13
- return ''
14
- }
15
- // TODO 是否一定要encode,如果未来出问题,移除encodeURI
16
- let imageSrc = src.indexOf('%') === -1
17
- ? encodeURI(decodeURI(src))
18
- : src
19
- const linkStr = imageSrc.indexOf('?') !== -1 ? '&' : '?'
20
- const type = isSupportWebp() ? 'auto' : null
21
- if (size) {
22
- const preStr = `${linkStr}x-bce-process=image${type ? `/format,f_${type}` : ''}/resize,limit_1,m_lfit,`
23
- const sizeString = {
24
- 1080: `${preStr}w_1080`,
25
- 720: `${preStr}w_720`,
26
- 480: `${preStr}w_480`,
27
- 360: `${preStr}w_360`,
28
- 240: `${preStr}w_240`
29
- }[size] || ''
30
- imageSrc += sizeString
31
- } else if (type) {
32
- imageSrc += `${linkStr}x-bce-process=image/format,f_${type}`
33
- }
34
- return imageSrc
35
- }
1
+ import memoize from 'lodash/memoize'
2
+
3
+ export const isSupportWebp = memoize(() => {
4
+ try {
5
+ return document.createElement('canvas').toDataURL('image/webp', 0.5).indexOf('data:image/webp') === 0
6
+ } catch (err) {
7
+ return false
8
+ }
9
+ })
10
+
11
+ export default (src, size) => {
12
+ if (!src) {
13
+ return ''
14
+ }
15
+ // TODO 是否一定要encode,如果未来出问题,移除encodeURI
16
+ let imageSrc = src.indexOf('%') === -1
17
+ ? encodeURI(decodeURI(src))
18
+ : src
19
+ const linkStr = imageSrc.indexOf('?') !== -1 ? '&' : '?'
20
+ const type = isSupportWebp() ? 'auto' : null
21
+ if (size) {
22
+ const preStr = `${linkStr}x-bce-process=image${type ? `/format,f_${type}` : ''}/resize,limit_1,m_lfit,`
23
+ const sizeString = {
24
+ 1080: `${preStr}w_1080`,
25
+ 720: `${preStr}w_720`,
26
+ 480: `${preStr}w_480`,
27
+ 360: `${preStr}w_360`,
28
+ 240: `${preStr}w_240`
29
+ }[size] || ''
30
+ imageSrc += sizeString
31
+ } else if (type) {
32
+ imageSrc += `${linkStr}x-bce-process=image/format,f_${type}`
33
+ }
34
+ return imageSrc
35
+ }