@conecli/cone-render 0.8.20 → 0.8.21-shop-beta.3

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 (117) hide show
  1. package/dist/api/index.ts +1 -1
  2. package/dist/common/const.ts +1 -1
  3. package/dist/common/index.h5.ts +1 -1
  4. package/dist/common/index.jd.ts +1 -1
  5. package/dist/common/index.ts +1 -1
  6. package/dist/common/index.weapp.ts +1 -1
  7. package/dist/common/isvStorage/index.h5.ts +1 -0
  8. package/dist/common/isvStorage/index.ts +1 -0
  9. package/dist/common/token/const.ts +1 -0
  10. package/dist/common/token/index.h5.ts +1 -0
  11. package/dist/common/token/index.ts +1 -0
  12. package/dist/common/token/token.jd.ts +1 -0
  13. package/dist/common/token/token.ts +1 -0
  14. package/dist/common/token/token.wxapp.ts +1 -0
  15. package/dist/components/ErrorBoundary.tsx +1 -1
  16. package/dist/components/base/CommonFloorHead/index.module.scss +1 -1
  17. package/dist/components/base/CommonFloorHead/index.tsx +1 -1
  18. package/dist/components/base/CustomScrollView/index.tsx +1 -1
  19. package/dist/components/base/CustomVideo/const.ts +1 -0
  20. package/dist/components/base/CustomVideo/index.module.scss +40 -64
  21. package/dist/components/base/CustomVideo/index.tsx +1 -1
  22. package/dist/components/base/Dialog/index.module.scss +6 -2
  23. package/dist/components/base/Dialog/index.tsx +1 -1
  24. package/dist/components/base/ExposureSmart/const.ts +1 -0
  25. package/dist/components/base/ExposureSmart/index.h5.module.scss +18 -4
  26. package/dist/components/base/ExposureSmart/index.h5.tsx +1 -1
  27. package/dist/components/base/ExposureSmart/index.module.scss +20 -9
  28. package/dist/components/base/ExposureSmart/index.tsx +1 -1
  29. package/dist/components/base/ExposureSmart/reporter.tsx +1 -1
  30. package/dist/components/base/InOrOutViewObserver/index.tsx +1 -1
  31. package/dist/components/base/InViewRender/index.tsx +1 -1
  32. package/dist/components/base/InViewRender/index.weapp.tsx +1 -1
  33. package/dist/components/base/ItemViewExposureSmart/index.module.scss +8 -0
  34. package/dist/components/base/ItemViewExposureSmart/index.tsx +1 -0
  35. package/dist/components/base/LazyLayoutLoad/index.tsx +1 -1
  36. package/dist/components/base/LazyLoadImage/index.h5.tsx +1 -1
  37. package/dist/components/base/NetworkDataError/const.ts +1 -1
  38. package/dist/components/base/NetworkDataError/index.module.scss +7 -1
  39. package/dist/components/base/NetworkDataError/index.tsx +1 -1
  40. package/dist/components/base/Price/{const.ts → Base/const.ts} +0 -0
  41. package/dist/components/base/Price/Base/index.module.scss +136 -0
  42. package/dist/components/base/Price/Base/index.tsx +1 -0
  43. package/dist/components/base/Price/Double/index.module.scss +158 -0
  44. package/dist/components/base/Price/Double/index.tsx +1 -0
  45. package/dist/components/base/Price/index.tsx +1 -1
  46. package/dist/components/decorate/DecorateFloorModule/index.tsx +1 -1
  47. package/dist/components/decorate/EmptyFloorModule/index.tsx +1 -1
  48. package/dist/components/decorate/PlaceHolder/index.tsx +1 -1
  49. package/dist/components/floorItem.jd.tsx +1 -0
  50. package/dist/components/floorItem.tsx +1 -1
  51. package/dist/components/isv/Floor/index.tsx +1 -1
  52. package/dist/components/remoteFloorItem.tsx +1 -0
  53. package/dist/interface/common.ts +1 -1
  54. package/dist/interface/component.ts +1 -1
  55. package/dist/interface/jumpEventReport.ts +1 -1
  56. package/dist/interface/service.ts +1 -1
  57. package/dist/jumpEventReport/base.ts +1 -1
  58. package/dist/jumpEventReport/const.ts +1 -1
  59. package/dist/jumpEventReport/createReportFloorData.ts +1 -1
  60. package/dist/jumpEventReport/index.h5.ts +1 -1
  61. package/dist/jumpEventReport/index.ts +1 -1
  62. package/dist/jumpEventReport/index.weapp.ts +1 -1
  63. package/dist/jumpEventReport/jdJumpJdApp.ts +1 -1
  64. package/dist/jumpEventReport/jumpUrlConfig/base.ts +1 -1
  65. package/dist/jumpEventReport/logEventConfig.ts +1 -1
  66. package/dist/jumpEventReport/web/report.ts +1 -1
  67. package/dist/jumpEventReport/web.base.ts +1 -1
  68. package/dist/jumpEventReport/web.jd.ts +1 -1
  69. package/dist/jumpEventReport/web.jdb.ts +1 -0
  70. package/dist/jumpEventReport/web.jdjch.ts +1 -0
  71. package/dist/jumpEventReport/web.wxapp.ts +1 -1
  72. package/dist/libs/taroAppReport.js +2 -2
  73. package/dist/modules/ContainerFloorList/index.h5.module.scss +10 -1
  74. package/dist/modules/ContainerFloorList/index.h5.tsx +1 -1
  75. package/dist/modules/ContainerFloorList/index.tsx +1 -1
  76. package/dist/open/api/device.ts +1 -1
  77. package/dist/open/api/index.ts +1 -1
  78. package/dist/open/api/jump/business.ts +1 -0
  79. package/dist/open/api/jump/index.ts +1 -0
  80. package/dist/open/api/jump/minPath.ts +1 -0
  81. package/dist/open/api/jump/side.ts +1 -0
  82. package/dist/open/api/jump/webUrl.ts +1 -0
  83. package/dist/open/api/jump copy.ts +1 -0
  84. package/dist/open/api/moduleUtil.ts +1 -1
  85. package/dist/open/api/request.ts +1 -0
  86. package/dist/open/api/shopMember.ts +1 -0
  87. package/dist/open/api/track.ts +1 -1
  88. package/dist/open/api/userToken.ts +1 -0
  89. package/dist/open/api/util.ts +1 -1
  90. package/dist/open/components/index.ts +1 -1
  91. package/dist/service/bMallConst.ts +1 -0
  92. package/dist/service/bMallConst.weapp.ts +1 -0
  93. package/dist/service/fetchGateway.ts +1 -0
  94. package/dist/service/fetchJsonp.ts +1 -0
  95. package/dist/service/http/colorSign.ts +1 -0
  96. package/dist/service/http/colorSign.weapp.ts +1 -0
  97. package/dist/service/http/const.ts +1 -0
  98. package/dist/service/http/http.ts +1 -0
  99. package/dist/service/http/httpInterceptors.jd.ts +1 -0
  100. package/dist/service/http/httpInterceptors.ts +1 -0
  101. package/dist/service/http/index.ts +1 -0
  102. package/dist/service/requestServer.ts +1 -0
  103. package/dist/utils/connectNativeJsBridge.ts +1 -1
  104. package/dist/utils/connectNativeJsBridge.weapp.ts +1 -1
  105. package/dist/utils/h5Utils.ts +1 -1
  106. package/dist/utils/index.h5.ts +1 -1
  107. package/dist/utils/index.ts +1 -1
  108. package/dist/utils/index.weapp.ts +1 -1
  109. package/dist/utils/intersectionObserver.ts +1 -1
  110. package/dist/utils/jm-common.js +1 -1
  111. package/dist/utils/memberFormatUtils.js +1 -0
  112. package/dist/utils/priceUtils.js +1 -0
  113. package/dist/utils/ready.ts +1 -0
  114. package/dist/utils/utils.ts +1 -1
  115. package/package.json +9 -5
  116. package/dist/components/base/Price/index.module.scss +0 -136
  117. package/dist/open/api/jump.ts +0 -1
@@ -0,0 +1 @@
1
+ import global from '../../common'
2
  return window?.page_data?.pageChannel || ''
1
3
  return new Promise((resolve) => {
2
4
  const channel = getPageChannel()
3
5
  if (
4
6
  channel === PageChannel.TYPE_ISVDEV ||
5
7
  channel === PageChannel.TYPE_ISV_PACK_SAMPLE
6
8
  ) {
7
9
  getIsvToken().then((token) => {
8
10
  console.log('isLogin token:' + token)
9
11
  if (token) {
10
12
  resolve(true)
11
13
  } else {
12
14
  resolve(false)
13
15
  }
14
16
  })
15
17
  } else {
16
18
  global.checkLoginStatus().then(res => {
17
19
  resolve(res)
18
20
  }).catch(() => {
19
21
  resolve(false)
20
22
  })
21
23
  }
22
24
  })
23
25
  let token = ''
24
26
  const result: any = await getIsvTokenInner()
25
27
  if (!result.success) {
26
28
  const channel = getPageChannel()
27
29
  if (channel === PageChannel.TYPE_ISV_PACK_SAMPLE) {
28
30
  console.log('getIsvToken打包校验中获取token失败')
29
31
  if (window['isvTokenFailCallback']) {
30
32
  window['isvTokenFailCallback'](result.error)
31
33
  console.log('浏览器中调用isvTokenFailCallback结束')
32
34
  }
33
35
  }
34
36
  } else {
35
37
  token = result.data
36
38
  }
37
39
  return token
38
40
  return new Promise((resolve) => {
39
41
  fetchGateway(
40
42
  'isvObfuscator',
41
43
  {
42
44
  url: window.location.href,
43
45
  id: 'shopisv',
44
46
  },
45
47
  {},
46
48
  )
47
49
  .then((data: any) => {
48
50
  console.log('fetchGateway isvObfuscator data:' + JSON.stringify(data))
49
51
  if (
50
52
  data?.statusCode == 200 &&
51
53
  data?.data?.errcode === 0 &&
52
54
  data?.data?.token
53
55
  ) {
54
56
  resolve({
55
57
  success: true,
56
58
  data: data?.data?.token,
57
59
  })
58
60
  } else {
59
61
  resolve({
60
62
  success: false,
61
63
  error: data,
62
64
  })
63
65
  }
64
66
  })
65
67
  .catch((error: { message: any }) => {
66
68
  console.log('fetchGateway isvObfuscator error:' + error.message)
67
69
  resolve({
68
70
  success: false,
69
71
  error,
70
72
  })
71
73
  })
72
74
  })
73
75
  const defaultParams = {
74
76
  appid: '100',
75
77
  returnurl: window.location.href,
76
78
  }
77
79
  const params = Object.assign({}, defaultParams, options)
78
80
  params.returnurl = encodeURIComponent(params.returnurl)
79
81
  const loginUrl = `${domain.mobileLogin}/user/login.action?${serialize(
80
82
  params,
81
83
  )}`
82
84
  console.log('loginUrl:', loginUrl)
83
85
  window.location.href = loginUrl
@@ -0,0 +1 @@
1
+ import cookie from '../../utils/jm-cookie'
2
  return new Promise((resolve) => {
1
3
  const token = cookie.get('wq_auth_token')
2
4
  resolve(!!token)
3
5
  })
4
6
  return new Promise((resolve) => {
5
7
  const token = cookie.get('wq_auth_token') || ''
6
8
  resolve(token)
7
9
  })
8
10
  return new Promise((resolve) => {
9
11
  fetchGateway(
10
12
  'isvObfuscator',
11
13
  {
12
14
  url: window.location.href,
13
15
  id: 'shopisv',
14
16
  },
15
17
  { loginType: 1, loginWQBiz: WXAPP_BIZ_KEY },
16
18
  )
17
19
  .then((data: any) => {
18
20
  console.warn('fetchGateway isvObfuscator data:' + JSON.stringify(data))
19
21
  if (
20
22
  data?.statusCode == 200 &&
21
23
  data?.data?.errcode === 0 &&
22
24
  data?.data?.token
23
25
  ) {
24
26
  resolve(data?.data?.token)
25
27
  } else {
26
28
  resolve('')
27
29
  }
28
30
  })
29
31
  .catch((e: { message: any }) => {
30
32
  console.warn('fetchGateway isvObfuscator error:' + e.message)
31
33
  resolve('')
32
34
  })
33
35
  })
34
36
  const returnurl = options?.returnurl || window.location.href
35
37
  pinTokenRedirect(WXAPP_BIZ_KEY, returnurl)
36
38
  const url = `
37
39
  ${domain.wq}/pinbind/pintokenredirect?biz=${biz}&url=${encodeURIComponent(
38
40
  targetUrl,
39
41
  )}`
40
42
  console.log('pinTokenRedirect:', url)
41
43
  window.location.href = url
@@ -1 +1 @@
1
- import React from 'react'
2
1
  if(this.props.customErrorIsvFloorModule){
3
2
  return this.props.customErrorIsvFloorModule
4
3
  }
4
+ import React from 'react'
5
5
  code: 'isvModuleError',
6
6
  msg: opt,
7
7
  })
8
8
  if(this.props.customErrorIsvFloorModule){
9
9
  return this.props.customErrorIsvFloorModule
10
10
  }
@@ -105,7 +105,7 @@
105
105
 
106
106
  .d-title-more {
107
107
  position: relative;
108
- top: 18px;
108
+ top: 16px;
109
109
  display: flex;
110
110
  align-items: flex-end;
111
111
  height: 56px;
@@ -1 +1 @@
1
- import React, { useMemo } from 'react'
1
+ import React, { useMemo } from 'react'
@@ -1 +1 @@
1
- import React, {useRef, useEffect} from 'react'
1
+ import React, {useRef, useEffect} from 'react'
2
2
  isH5AndJdShopView,
3
3
  isAndroidDevice,
4
4
  isIosDevice,
5
5
  isJdApp,
6
6
  isWxMin,
7
7
  isH5AndJdShopViewH5Scroll,
8
8
  isH5,
9
9
  const rootEleNode = isH5 && document ? document.querySelector('body') : null
10
10
  const needShowHighVersion = isH5AndJdShopViewH5Scroll && !(global.info.queryInfo?.downgraded && global.info.queryInfo.downgraded === "true")
11
11
  e && e.stopPropagation()
12
12
  if(!verticalScrolling) {
13
13
  needShowHighVersion && rootEleNode && rootEleNode.classList.add('over-hidden')
14
14
  }
15
15
  e && e.stopPropagation()
16
16
  e && e.stopPropagation()
17
17
  if(!verticalScrolling) {
18
18
  needShowHighVersion && rootEleNode && rootEleNode.classList.add('over-hidden')
19
19
  }
20
20
  if(!verticalScrolling) {
21
21
  needShowHighVersion && rootEleNode && rootEleNode.classList.remove('over-hidden')
22
22
  }
23
23
  <ScrollView
24
24
  scrollX
25
25
  onTouchStart={changeTouchStart}
26
26
  onTouchEnd={changeTouchEnd}
27
27
  onTouchCancel={changeTouchEnd}
28
28
  onTouchMove={changeTouchMove}
29
29
  enhanced
30
30
  showScrollbar={false}
31
31
  style={style}
32
32
  className={classNames(className, {
33
33
  [customScrollViewStyle[
34
34
  'd-custom-ios-h5-extend-border-radius'
35
35
  ]]: isIosDevice,
36
36
  },'J_customScroll')}
37
37
  {...otherProps}
38
38
  >
39
39
  {children}
40
40
  </ScrollView>
41
41
  verticalScrolling: false,
@@ -0,0 +1 @@
1
+ export const DEFAULT_MUTE_BTN_PIC = {
2
  IS_MUTED:
1
3
  '//img11.360buyimg.com/imagetools/jfs/t1/216103/12/32490/3414/64cb0ba1F51cd0f76/90ec3bc480166942.png',
2
4
  NOT_MUTED:
3
5
  '//img13.360buyimg.com/imagetools/jfs/t1/107420/15/23323/3356/64cb0ba1F079aeb66/35883b1d6ff460d2.png',
@@ -1,66 +1,42 @@
1
- .d-video-wrap{
2
- position: relative;
3
- overflow: hidden;
1
+ .d-video-wrap {
2
+ // 便于静音按钮 相对视频 定位
3
+ position: relative;
4
+ }
4
5
 
5
- .d-video-play {
6
- display: block;
7
- overflow: hidden;
8
- width: 100%;
9
- height: 100%;
10
- background-color: transparent;
11
- -webkit-backface-visibility: hidden;
12
- -webkit-transform: translate3d(0, 0, 0);
13
- object-fit: fill;
14
- }
6
+ .d-video-play {
7
+ display: block;
8
+ overflow: hidden;
9
+ width: 100%;
10
+ height: 100%;
11
+ background-color: transparent;
12
+ -webkit-backface-visibility: hidden;
13
+ -webkit-transform: translate3d(0, 0, 0);
14
+ object-fit: fill;
15
+ }
15
16
 
16
- .d-video-mute-btn{
17
- position: absolute;
18
- width: 51px;
19
- height: 51px;
20
- background-repeat: no-repeat;
21
- background-position: 50% 50%;
22
- background-size: 50%;
23
- }
24
- .d-mute-btn-topLeft{
25
- left: 10px;
26
- top: 10px;
27
- }
28
- .d-mute-btn-topRight{
29
- right: 10px;
30
- top: 10px;
31
- }
32
- .d-mute-btn-bottomLeft{
33
- left: 10px;
34
- bottom: 10px;
35
- }
36
- .d-mute-btn-bottomRight{
37
- right: 10px;
38
- bottom: 10px;
39
- }
40
- .d-is-muted{
41
- background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAgCAYAAAB3j6rJAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGAGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTktMDQtMTFUMTA6MTk6MDMrMDg6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE5LTA0LTExVDEwOjIyOjMzKzA4OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE5LTA0LTExVDEwOjIyOjMzKzA4OjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjAzYjJmNjE2LTZmZTUtNDJjNC1iNTgwLTczNzZjZjI2NzdmNSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjYzZjQ2NTYzLWE0ZjktOGQ0Mi1hM2FhLTY3ODJhNDBhYWNjMSIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjIyYWNjMWFlLTg4ZmMtNDBlZi1iMWM1LTNmODgwY2QzYWI2MiI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MjJhY2MxYWUtODhmYy00MGVmLWIxYzUtM2Y4ODBjZDNhYjYyIiBzdEV2dDp3aGVuPSIyMDE5LTA0LTExVDEwOjE5OjAzKzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MDNiMmY2MTYtNmZlNS00MmM0LWI1ODAtNzM3NmNmMjY3N2Y1IiBzdEV2dDp3aGVuPSIyMDE5LTA0LTExVDEwOjIyOjMzKzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5PmxYVAAACLklEQVRYhc2XP2sVQRRHz40hKoqaQgVBCy1EozFlGiVFxMLGh4piYWEh+hkEP4YKAVFEEFTyughaCH6DqIVpAhYWEgIxoJE8cywyi5tNHu/tJmvyg2WZO3dmzt47/zZUtoJ6Nhsg09YDiYhKDzACTAFNYH9lEpUq80TdrT5wpV5n/ZV9KoGoo+pXV2uyKkipOaLuUceAt8DhUvQd1FsCYhR4ChzaSIBMHSOi7lOfsByFWiCgEBH1GHAF2JlMPcBt4GC3HUYEaj9wF3gVEVPtfNVTwAXgWX7CDKq/1piAZTSZBmim8qJ6sQ3EgDqb/L7kU3MH2NHtl3dQX3r3Ak21UYAYAj4A/cl0JB+RF+uMRj4iQ+p8zt7KYFLdXKHuRi0gacBhV6a6pd5bA6KRNagFJPU9qv5u47toLmW1HnoR8Q5oAK1CVQu4FBHj/wUkaXsb+4pzpVaQFPqXrN7Be4Fx9VztIOr1BLEtmX4A94E/qdwHTKjDWYM6lu81dSlnn3V570BtuLxaMs2rZ/IgYxsBovaoPwsQA4VoFWEm8ql5DiysNyURsQTMpOIMcDYiPhd8xoGr/FtNC2G6FKXD6ihwGdiVHMoeeh8jYlA9ANwE3kTEp3bO6vE03qOONzR1r/q4RGrquaFFxFxE3ALOA9+6jExpdb180y55AhirhaRTatq0GXEzL8+ZIuI9cBJ4WKiartJf9nWV/mty7UfUafW7erpqRGI9EBuprffvu9n6C1KOmsqwI5A1AAAAAElFTkSuQmCC");
42
- }
43
- .d-not-muted{
44
- background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAGAGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTktMDQtMTFUMTA6MTg6MjArMDg6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE5LTA0LTExVDEwOjIyOjIyKzA4OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE5LTA0LTExVDEwOjIyOjIyKzA4OjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjk3YmE4Yjg0LTFhNTYtNGM1MS04NDVkLTNiZmYyMGI0ZDc0ZiIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjg1NGQ3MjlkLWUwNjctZjU0OC1hMTlhLTBlZjQ4OGRkYjJiOSIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjA1ODY3ZDFlLWQ3NGEtNDgyNC04MDU3LTYzYmRmMTdjODk5ZSI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MDU4NjdkMWUtZDc0YS00ODI0LTgwNTctNjNiZGYxN2M4OTllIiBzdEV2dDp3aGVuPSIyMDE5LTA0LTExVDEwOjE4OjIwKzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OTdiYThiODQtMWE1Ni00YzUxLTg0NWQtM2JmZjIwYjRkNzRmIiBzdEV2dDp3aGVuPSIyMDE5LTA0LTExVDEwOjIyOjIyKzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz459+FoAAABqElEQVRYhc2XPWsVQRSGnxPjF4oGRfxoRQKGWCU2Ft7CykrQWosEyf/If0hhIPgHDEmbNJZqCFxiQEgTUGxsBUVEHgvnyrjZZJO92V1fGIaZnTPvszPszNlQ6VIjnbr/DwCoDLMNak/dUVfUK0f2rQugnlcX/FevWgFQH6gf3autRgHUC+piiXHzAOmtPx9gXgug8itQx9SXwDpw47AGKXZWvXvQmNFCwE3gCXA2dY0Az4GrRzHONA9cU/vAbERsllEOyh31e8USV2mrMPdG9uyn+rDom2/BHHCm5puWKiKmgdtAnz+rvaxO5mNygEvHaZ5BfADuARvAaWBpP4DGFBHfgBngFzClTrUKkCDeA+9S837rAEnbqb7VFcCpVJ/oCmCw959aB1AfAROpudYqgDoOLKRmPyLelAF8bcD4pPoMeAtcB34AT4uDBqXXwFG8XXUU/72MIuK1OgE8Bs6l7mEvo8up7lN1Ge0n9aK6VHMFZvJTr9S3CiALaCQhqZOSvegMIAvu2UVSWpigLC1fbQ0gm6in7qpfLCQbhwGIYcyPQ53/G3YO8BtUtd35bvKcVwAAAABJRU5ErkJggg==");
45
- }
46
-
47
- .d-video-play-btn{
48
- position: absolute;
49
- width: 120px;
50
- height: 120px;
51
- background-repeat: no-repeat;
52
- background-position: 50% 50%;
53
- background-size: 50%;
54
- top: 50%;
55
- left: 50%;
56
- transform: translateX(-50%) translateY(-50%);
57
- }
58
-
59
- .d-is-pause{
60
- background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAeCAYAAAAy2w7YAAAAAXNSR0IArs4c6QAAAWhJREFUSA1j+P///0cgBoHjQGzCQCsAtgJB/AMy5wCxGNXtQ9iBwvoA5BUCMQvVLEQxHpNzDSjkRhXLMM3GKrIeKKpEkYVYjcUu+AMo3ALE3GRZiN1MvKKPgbIRJFuG10j8koeA0gZEW4jfLIKyf4EqpgOxMEELCRpFnIJ3QGU5QMyM00LizCFa1SWgSkeslhFtBGkKVwGVy6FYSJp+klR/A6quB2JOkIWMIK0oNlOf8xBoZDE9LAI7nYn6HsBq4l96WHQEaLUpAyiOaASeAM2NgvuPBpaACt82IEYtfKls0UagecpwXyAzqGTRdaA57sjmYrAptAjUsCkGYlYMg9EFyLQI1IiZB8Ti6Obh5JNh0QmgHlOcBuKSIMGi50C18UDMiMssvOJEWPQLqKYbiHnxGkRIkoBF24DyaoTMIEoeh0W3geI+RBlArCI0iz4D+RVAzEasfqLVAQ19AcSg5LoYiKWI1kiiQgCMBLnEEcfDSgAAAABJRU5ErkJggg==");
61
- }
62
-
63
- .d-not-pause{
64
- background-image: none;
65
- }
66
- }
17
+ .d-video-mute-btn {
18
+ position: absolute;
19
+ background-repeat: no-repeat;
20
+ background-position: center center;
21
+ background-size: 100%;
22
+ z-index: 20;
23
+ transform: translateZ(20px);
24
+ width: 24px;
25
+ height: 24px;
26
+ }
27
+ .d-mute-btn-topLeft {
28
+ left: 20px;
29
+ top: 20px;
30
+ }
31
+ .d-mute-btn-topRight {
32
+ right: 20px;
33
+ top: 20px;
34
+ }
35
+ .d-mute-btn-bottomLeft {
36
+ left: 20px;
37
+ bottom: 20px;
38
+ }
39
+ .d-mute-btn-bottomRight {
40
+ right: 20px;
41
+ bottom: 20px;
42
+ }
@@ -1 +1 @@
1
- import React, { useCallback, useEffect, useRef, useState } from 'react'
2
1
  if (!isH5 || !ref.current) return
3
2
  playVideo()
4
3
  manualPauseStateRef.current = false
5
4
  }
6
5
  if (!isH5 || !ref.current) return
7
6
  pauseVideo()
8
7
  manualPauseStateRef.current = true
9
8
  }
10
9
  if (!isH5 || !ref.current) return
11
10
  }, [])
11
+ import React, { useCallback, useEffect, useRef, useState } from 'react'
12
12
  isH5,
13
13
  addHttps,
14
14
  isH5AndJingGouMini,
15
15
  isH5AndJdShopView,
16
16
  (props: ComponentInterFace.CustomVideoProps, ref: any) => {
17
17
  const {
18
18
  style,
19
19
  videoStyle,
20
20
  src,
21
21
  width,
22
22
  height,
23
23
  controls,
24
24
  poster,
25
25
  autoplay,
26
26
  loop,
27
27
  showMuteBtn,
28
28
  muteButtonPostion,
29
29
  showFullscreenBtn,
30
30
  muteBtnPicSrcObj,
31
31
  muteBtnClassName,
32
32
  muteBtnStyle,
33
33
  objectFit,
34
34
  mockAutoplay,
35
35
  threshold,
36
36
  onPlayCallback,
37
37
  onPauseCallback,
38
38
  onVideoApiCall,
39
39
  inViewCallback,
40
40
  outViewCallback,
41
41
  } = props
42
42
  const [videoMutedState, setVideoMutedState] = useState(MUTED)
43
43
  const manualPauseStateRef = useRef(false)
44
44
  const initPlayStatusRef = useRef(false)
45
45
  const isInViewStateRef = useRef(false)
46
46
  const disposeRef = useRef<Function | null>()
47
47
  ref === null && (ref = useRef<HTMLVideoElement | null>())
48
48
 
49
49
  const playVideo = useCallback(() => {
50
50
  if (ref && ref.current) {
51
51
  const result = ref.current.play()
52
52
  result &&
53
53
  result
54
54
  .then(() => {
55
55
  console.log('播放成功')
56
56
  })
57
57
  .catch((e) => {
58
58
  console.log('playVideo Error:', e.message)
59
59
  })
60
60
  }
61
61
  }, [])
62
62
 
63
63
  const pauseVideo = useCallback(() => {
64
64
  if (ref && ref.current) {
65
65
  console.log('pauseVideo')
66
66
  ref.current.pause()
67
67
  }
68
68
  }, [])
69
69
 
70
70
  useEffect(() => {
71
71
  if (!isH5 || !ref.current) return
72
72
  if (autoplay && mockAutoplay) {
73
73
 
74
74
  const callInitAutoplay = () => {
75
75
  console.log(
76
76
  'callInitAutoplay:',
77
77
  autoplay,
78
78
  'initPlayStatusRef:',
79
79
  initPlayStatusRef.current,
80
80
  'isInViewStateRef:',
81
81
  isInViewStateRef.current,
82
82
  'paused:',
83
83
  ref.current.paused,
84
84
  )
85
85
  if (
86
86
  autoplay &&
87
87
  mockAutoplay &&
88
88
  !initPlayStatusRef.current &&
89
89
  isInViewStateRef.current &&
90
90
  ref.current.paused
91
91
  ) {
92
92
  console.log('callInitAutoplay playVideo')
93
93
  playVideo()
94
94
  }
95
95
  }
96
96
  const onWeixinJSBridgeReady = (e) => {
97
97
  console.log('onWeixinJSBridgeReady:', e.type)
98
98
  callInitAutoplay()
99
99
  }
100
100
  const onTouchstart = (e) => {
101
101
  console.log('onTouchstart:', e.type)
102
102
  callInitAutoplay()
103
103
  }
104
104
  const onScroll = (e) => {
105
105
  console.log('onScroll:', e.type)
106
106
  callInitAutoplay()
107
107
  }
108
108
  const onPlay = (e) => {
109
109
  console.log('onPlay:', e.type)
110
110
  if (!initPlayStatusRef.current) {
111
111
  const dispose = disposeRef.current
112
112
  console.log('onPlay dispose:', dispose)
113
113
  dispose && dispose()
114
114
  disposeRef.current = null
115
115
  }
116
116
  initPlayStatusRef.current = true
117
117
  }
118
118
  document?.addEventListener('WeixinJSBridgeReady', onWeixinJSBridgeReady)
119
119
  document?.addEventListener('touchstart', onTouchstart)
120
120
  document?.addEventListener('scroll', onScroll)
121
121
  ref.current.addEventListener('play', onPlay)
122
122
  const dispose = () => {
123
123
  console.log('调用dispose')
124
124
  document?.removeEventListener(
125
125
  'WeixinJSBridgeReady',
126
126
  onWeixinJSBridgeReady,
127
127
  )
128
128
  document?.removeEventListener('touchstart', onTouchstart)
129
129
  document?.removeEventListener('scroll', onScroll)
130
130
  ref?.current?.removeEventListener('play', onPlay)
131
131
  }
132
132
  disposeRef.current = dispose
133
133
  }
134
134
  !autoplay && (manualPauseStateRef.current = true)
135
135
  const handleVideoPlayApiCall = () => {
136
136
  if (!isH5 || !ref.current) return
137
137
  playVideo()
138
138
  manualPauseStateRef.current = false
139
139
  }
140
140
  const handleVideoPauseApiCall = () => {
141
141
  if (!isH5 || !ref.current) return
142
142
  pauseVideo()
143
143
  manualPauseStateRef.current = true
144
144
  }
145
145
 
146
146
  const handleVideoSeekApiCall = (position: number) => {
147
147
  console.log('video定位至', position)
148
148
  if (!isH5 || !ref.current) return
149
149
  if (typeof position === 'undefined' || typeof position !== 'number')
150
150
  return
151
151
  ref.current.currentTime = position
152
152
  }
153
153
 
154
154
  if (onVideoApiCall) {
155
155
  onVideoApiCall({
156
156
  play: handleVideoPlayApiCall,
157
157
  pause: handleVideoPauseApiCall,
158
158
  seek: handleVideoSeekApiCall,
159
159
  })
160
160
  }
161
161
  return () => {
162
162
  const dispose = disposeRef.current
163
163
  dispose && dispose()
164
164
  disposeRef.current = null
165
165
  }
166
166
  }, [])
167
167
 
168
168
  const handleMuted = useCallback(() => {
169
169
  if (!isH5 || !ref.current) return
170
170
  const handleMutedState = ref.current.muted
171
171
  if (handleMutedState === true) {
172
172
  ref.current.muted = false
173
173
  setVideoMutedState(false)
174
174
  } else {
175
175
  ref.current.muted = true
176
176
  setVideoMutedState(true)
177
177
  }
178
178
  }, [videoMutedState])
179
179
 
180
180
  const handleVideoInViewCallback = useCallback(() => {
181
181
  if (!isH5 || !ref.current) return
182
182
  isInViewStateRef.current = true
183
183
  console.log(
184
184
  '进入可视区域,initPlayStatusRef:',
185
185
  initPlayStatusRef.current,
186
186
  'isInViewStateRef:',
187
187
  isInViewStateRef.current,
188
188
  )
189
189
  if (
190
190
  autoplay &&
191
191
  mockAutoplay &&
192
192
  !initPlayStatusRef.current &&
193
193
  ref.current.paused
194
194
  ) {
195
195
  console.log('进入可视区域了 callInitAutoplay playVideo')
196
196
  playVideo()
197
197
  } else if (!manualPauseStateRef.current && ref.current.paused) {
198
198
  playVideo()
199
199
  }
200
200
  typeof inViewCallback === 'function' && inViewCallback()
201
201
  }, [])
202
202
 
203
203
  const handleVideoOutViewCallback = useCallback(() => {
204
204
  if (!isH5 || !ref.current) return
205
205
  isInViewStateRef.current = false
206
206
  console.log(
207
207
  '不在可视区域, 视频暂停了, isInViewStateRef:',
208
208
  isInViewStateRef.current,
209
209
  )
210
210
  pauseVideo()
211
211
  typeof outViewCallback === 'function' && outViewCallback()
212
212
  }, [])
213
213
 
214
214
  const getVideoWidthAndHeightStyle = () => {
215
215
  const style = {}
216
216
  width && (style['width'] = width)
217
217
  height && (style['height'] = height)
218
218
  return style
219
219
  }
220
220
 
221
221
  const getMuteBtnBackgroundImageStyle = useCallback(() => {
222
222
  const isMutedPicSrc = muteBtnPicSrcObj?.IS_MUTED
223
223
  const notMutedPicSrc = muteBtnPicSrcObj?.NOT_MUTED
224
224
  const finalIsMutedPicSrc =
225
225
  typeof isMutedPicSrc !== 'undefined' && isMutedPicSrc !== ''
226
226
  ? isMutedPicSrc
227
227
  : DEFAULT_MUTE_BTN_PIC.IS_MUTED
228
228
  const finalNotMutedPicSrc =
229
229
  typeof notMutedPicSrc !== 'undefined' && notMutedPicSrc !== ''
230
230
  ? notMutedPicSrc
231
231
  : DEFAULT_MUTE_BTN_PIC.NOT_MUTED
232
232
  return {
233
233
  backgroundImage: `url(${
234
234
  videoMutedState ? finalIsMutedPicSrc : finalNotMutedPicSrc
235
235
  })`,
236
236
  }
237
237
  }, [videoMutedState])
238
238
  console.log('autoplay:', autoplay, 'muted:', MUTED)
239
239
  console.log('isH5:', isH5, 'isH5AndJingGouMini:', isH5AndJingGouMini)
240
240
  return src ? (
241
241
  <InOrOutViewObserver
242
242
  inViewCallback={handleVideoInViewCallback}
243
243
  outViewCallback={handleVideoOutViewCallback}
244
244
  threshold={threshold}
245
245
  >
246
246
  {isH5 ? (
247
247
  <View
248
248
  className={customVideoStyle['d-video-wrap']}
249
249
  style={{ ...style, ...getVideoWidthAndHeightStyle() }}
250
250
  >
251
251
  <video
252
252
  style={{ ...videoStyle }}
253
253
  className={customVideoStyle['d-video-play']}
254
254
  src={src}
255
255
  controls={controls}
256
256
  poster={poster ? addHttps(poster) : ''}
257
257
  ref={ref}
258
258
  loop={loop}
259
259
  autoPlay={autoplay}
260
260
  muted={MUTED}
261
261
  x5-playsinline="true"
262
262
  playsInline
263
263
  webkit-playsinline="true"
264
264
  controlsList={
265
265
  isH5AndJdShopView
266
266
  ? 'nodownload nofullscreen noremoteplayback'
267
267
  : ''
268
268
  }
269
269
  onPlay={onPlayCallback}
270
270
  onPause={onPauseCallback}
271
271
  />
272
272
  {!controls && showMuteBtn && (
273
273
  <View
274
274
  className={classNames(
275
275
  customVideoStyle['d-video-mute-btn'],
276
276
  customVideoStyle[`d-mute-btn-${muteButtonPostion}`],
277
277
  `${muteBtnClassName}`,
278
278
  )}
279
279
  style={{ ...getMuteBtnBackgroundImageStyle(), ...muteBtnStyle }}
280
280
  onClick={handleMuted}
281
281
  ></View>
282
282
  )}
283
283
  </View>
284
284
  ) : (
285
285
  <Video
286
286
  style={{ ...videoStyle }}
287
287
  ref={ref}
288
288
  className={customVideoStyle['d-video-play']}
289
289
  src={src}
290
290
  controls={controls}
291
291
  poster={poster ? addHttps(poster) : ''}
292
292
  loop={loop}
293
293
  autoplay={autoplay}
294
294
  muted={MUTED}
295
295
  showMuteBtn={showMuteBtn}
296
296
  showFullscreenBtn={showFullscreenBtn}
297
297
  objectFit={objectFit}
298
298
  onPlay={onPlayCallback}
299
299
  onPause={onPauseCallback}
300
300
  />
301
301
  )}
302
302
  </InOrOutViewObserver>
303
303
  ) : null
304
304
  },
305
305
  const buildType = process.env.BUILD_TYPE
306
306
  const mockAutoplay = buildType === BUILD_TYPE.DECORATE ? false : true
307
307
  return mockAutoplay
308
308
  style: {},
309
309
  videoStyle: {},
310
310
  className: '',
311
311
  src: '',
312
312
  width: '100%',
313
313
  height: '100%',
314
314
  controls: false,
315
315
  poster: '',
316
316
  autoplay: true,
317
317
  mockAutoplay: getDefaultMockAutoplay(),
318
318
  loop: true,
319
319
  showMuteBtn: true,
320
320
  muteButtonPostion: 'topLeft',
321
321
  muteBtnPicSrcObj: DEFAULT_MUTE_BTN_PIC,
322
322
  muteBtnClassName: '',
323
323
  muteBtnStyle: {},
324
324
  showFullscreenBtn: false,
325
325
  objectFit: 'cover',
326
326
  threshold: 0.6,
@@ -40,6 +40,7 @@
40
40
  .d-dialog-footer {
41
41
  .d-dialog-btn {
42
42
  position: relative;
43
+ margin: 0;
43
44
  display: block;
44
45
  height: 88px;
45
46
  line-height: 88px;
@@ -50,6 +51,8 @@
50
51
  text-overflow: ellipsis;
51
52
  white-space: nowrap;
52
53
  box-sizing: border-box;
54
+ background-color: #fff;
55
+ border-radius: 0;
53
56
  &:after {
54
57
  content: '';
55
58
  display: block;
@@ -62,6 +65,8 @@
62
65
  -ms-transform: scaleX(0.5);
63
66
  transform: scaleY(0.5);
64
67
  pointer-events: none;
68
+ border: none;
69
+ border-radius: 0;
65
70
  }
66
71
  }
67
72
  .d-dialog-ensure-btn {
@@ -81,8 +86,7 @@
81
86
  }
82
87
  }
83
88
  .d-dialog-cancel-btn {
84
- background-color: #ffffff;
85
- color: #000000;
89
+ color: #000;
86
90
  }
87
91
  }
88
92
  }