@conecli/cone-render 0.8.38 → 0.8.40

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/README.md +7 -1
  2. package/dist/api/index.ts +1 -1
  3. package/dist/common/const.ts +1 -1
  4. package/dist/common/environmentType.ts +1 -0
  5. package/dist/common/index.h5.ts +1 -1
  6. package/dist/common/index.jd.ts +1 -1
  7. package/dist/common/index.ts +1 -1
  8. package/dist/common/index.weapp.ts +1 -1
  9. package/dist/common/jdplayerSdk.ts +1 -0
  10. package/dist/common/jssdk.ts +1 -0
  11. package/dist/common/pageType.ts +1 -0
  12. package/dist/common/sgmCustomCode.ts +1 -0
  13. package/dist/common/token/index.h5.ts +1 -1
  14. package/dist/common/token/token.jd.ts +1 -1
  15. package/dist/common/token/token.ts +1 -1
  16. package/dist/common/wxappApi.jd.ts +1 -0
  17. package/dist/common/wxappApi.ts +1 -1
  18. package/dist/components/ErrorBoundary.tsx +1 -1
  19. package/dist/components/base/CommonFloorHead/index.tsx +1 -1
  20. package/dist/components/base/CountDown/index.tsx +1 -1
  21. package/dist/components/base/CustomScrollView/index.jd.tsx +1 -0
  22. package/dist/components/base/CustomScrollView/index.module.scss +7 -0
  23. package/dist/components/base/CustomScrollView/index.tsx +1 -1
  24. package/dist/components/base/CustomVideo/index.tsx +1 -1
  25. package/dist/components/base/Dialog/index.module.scss +5 -0
  26. package/dist/components/base/Dialog/index.tsx +1 -1
  27. package/dist/components/base/Exposure/index.h5.tsx +1 -1
  28. package/dist/components/base/ExposureSmart/index.h5.tsx +1 -1
  29. package/dist/components/base/ExposureSmart/index.tsx +1 -1
  30. package/dist/components/base/ExposureSmart/reporter.tsx +1 -1
  31. package/dist/components/base/InOrOutViewObserver/index.tsx +1 -1
  32. package/dist/components/base/InViewRender/index.tsx +1 -1
  33. package/dist/components/base/ItemViewExposureSmart/index.tsx +1 -1
  34. package/dist/components/base/LazyLayoutLoad/index.tsx +1 -1
  35. package/dist/components/base/LazyLayoutLoad/index.weapp.tsx +1 -1
  36. package/dist/components/base/LazyLoadImage/const.ts +1 -1
  37. package/dist/components/base/LazyLoadImage/index.h5.module.scss +20 -20
  38. package/dist/components/base/LazyLoadImage/index.h5.tsx +1 -1
  39. package/dist/components/base/MobileCommonHeader/index.module.scss +9 -0
  40. package/dist/components/base/MobileCommonHeader/index.tsx +1 -0
  41. package/dist/components/base/NetworkDataError/const.ts +1 -1
  42. package/dist/components/base/NetworkDataError/index.module.scss +4 -0
  43. package/dist/components/base/NetworkDataError/index.tsx +1 -1
  44. package/dist/components/base/Price/Double/index.tsx +1 -1
  45. package/dist/components/base/Price/index.tsx +1 -1
  46. package/dist/components/base/Skeleton/index.tsx +1 -1
  47. package/dist/components/decorate/DecorateFloorModule/index.module.scss +21 -2
  48. package/dist/components/decorate/DecorateFloorModule/index.tsx +1 -1
  49. package/dist/components/decorate/EmptyFloorModule/index.tsx +1 -1
  50. package/dist/components/floorItem.jd.tsx +1 -1
  51. package/dist/components/floorItem.tsx +1 -1
  52. package/dist/components/floorItem.weapp.tsx +1 -1
  53. package/dist/components/isv/Floor/index.tsx +1 -1
  54. package/dist/components/remoteFloorItem.tsx +1 -1
  55. package/dist/interface/common.ts +1 -1
  56. package/dist/interface/component.ts +1 -1
  57. package/dist/interface/jumpEventReport.ts +1 -1
  58. package/dist/interface/service.ts +1 -1
  59. package/dist/interface/utils.ts +1 -1
  60. package/dist/jumpEventReport/base.ts +1 -1
  61. package/dist/jumpEventReport/const.ts +1 -1
  62. package/dist/jumpEventReport/createReportFloorData.ts +1 -1
  63. package/dist/jumpEventReport/index.h5.ts +1 -1
  64. package/dist/jumpEventReport/index.jd.ts +1 -1
  65. package/dist/jumpEventReport/index.weapp.ts +1 -1
  66. package/dist/jumpEventReport/jdJumpJdApp.ts +1 -1
  67. package/dist/jumpEventReport/jumpUrlConfig/base.ts +1 -1
  68. package/dist/jumpEventReport/logEventConfig.ts +1 -1
  69. package/dist/jumpEventReport/web/report.ts +1 -1
  70. package/dist/jumpEventReport/web.base.ts +1 -1
  71. package/dist/jumpEventReport/web.jd.ts +1 -1
  72. package/dist/jumpEventReport/web.jdb.ts +1 -1
  73. package/dist/jumpEventReport/web.jdjch.ts +1 -1
  74. package/dist/jumpEventReport/web.jxwxapp.ts +1 -0
  75. package/dist/jumpEventReport/web.pc.ts +1 -0
  76. package/dist/jumpEventReport/web.tjapp.ts +1 -0
  77. package/dist/jumpEventReport/web.tjm.ts +1 -0
  78. package/dist/jumpEventReport/web.wxapp.ts +1 -1
  79. package/dist/modules/ContainerFloorList/index.h5.module.scss +17 -1
  80. package/dist/modules/ContainerFloorList/index.h5.tsx +1 -1
  81. package/dist/modules/ContainerFloorList/index.tsx +1 -1
  82. package/dist/open/api/environment.ts +1 -1
  83. package/dist/open/api/index.ts +1 -1
  84. package/dist/open/api/jump copy.ts +1 -1
  85. package/dist/open/api/shopMember.ts +1 -1
  86. package/dist/open/api/track.ts +1 -1
  87. package/dist/open/api/util.ts +1 -1
  88. package/dist/open/components/index.ts +1 -1
  89. package/dist/sass/app.h5.scss +39 -3
  90. package/dist/sass/base.scss +12 -0
  91. package/dist/service/fetchGateway.ts +1 -1
  92. package/dist/service/http/const.ts +1 -1
  93. package/dist/service/requestServer.ts +1 -1
  94. package/dist/utils/connectNativeJsBridge.ts +1 -1
  95. package/dist/utils/connectNativeJsBridge.weapp.ts +1 -1
  96. package/dist/utils/draExceptionAndProfile.ts +1 -1
  97. package/dist/utils/h5Utils.ts +1 -1
  98. package/dist/utils/index.h5.ts +1 -1
  99. package/dist/utils/index.ts +1 -1
  100. package/dist/utils/index.weapp.ts +1 -1
  101. package/dist/utils/jm-common.js +1 -1
  102. package/dist/utils/sgmCodeUtils.ts +1 -0
  103. package/dist/utils/taroRenderUtil.ts +1 -0
  104. package/dist/utils/utils.ts +1 -1
  105. package/dist/wxapp/api/helper.js +1 -0
  106. package/dist/wxapp/components/launch-app/index.js +1 -0
  107. package/dist/wxapp/components/launch-app/index.json +5 -0
  108. package/dist/wxapp/components/launch-app/index.wxml +0 -0
  109. package/dist/wxapp/components/launch-app/index.wxss +0 -0
  110. package/dist/wxapp/components/subscribe-guider/helper.js +1 -0
  111. package/dist/wxapp/components/subscribe-guider/index.js +1 -0
  112. package/dist/wxapp/components/subscribe-guider/index.json +5 -0
  113. package/dist/wxapp/components/subscribe-guider/index.wxml +0 -0
  114. package/dist/wxapp/components/subscribe-guider/index.wxss +0 -0
  115. package/package.json +2 -1
  116. package/dist/components/base/Skeleton/old.tsx +0 -1
  117. package/dist/customHooks/useDocumentVisibilitychange.ts +0 -1
@@ -1 +1 @@
1
- import Taro from '@tarojs/taro'
2
1
  urlCookie
3
2
  public config: {
4
3
  [key: string]: any
5
4
  }
6
5
  public lazyContainer: CommonInterFace.lazyContainer
7
6
  this.config = {}
8
7
  pin: cookie.get('pin') || ''
9
8
  })
10
9
  if(!this.checkStatusAndLoginPromise){
11
10
  this.checkStatusAndLoginPromise = new Promise(async (resolve, reject) => {
12
11
  try {
13
12
  const getLoginState = await this.doCheckLoginStateAndForApiCheck()
14
13
  if(getLoginState){
15
14
  resolve(true)
16
15
  }else {
17
16
  this.toLogin(options)
18
17
  reject(false)
19
18
  }
20
19
  }catch (e) {
21
20
  this.toLogin(options)
22
21
  reject(false)
23
22
  }
24
23
  })
25
24
  return this.checkStatusAndLoginPromise
26
25
  }else {
27
26
  return this.checkStatusAndLoginPromise.then(() => {
28
27
  return Promise.resolve(true)
29
28
  }).catch (() => {
30
29
  this.toLogin(options)
31
30
  return Promise.reject(true)
32
31
  })
33
32
  }
34
33
 
35
34
  doCheckLoginStateAndForApiCheck() {
36
35
  if(this.info.loginState){
37
36
  return Promise.resolve(true)
38
37
  }else {
39
38
  return new Promise((resolve, reject) => {
40
39
  if(this.info.isJingGouMiniViewState){
41
40
  const getWqAuthToken = cookie.get("wq_auth_token")
42
41
  if(getWqAuthToken){
43
42
  this.info.loginState = true
44
43
  resolve(true)
45
44
  }else {
46
45
  reject(false)
47
46
  }
48
47
  }else{
49
48
  Taro.request({
50
49
  url: api.isLogin,
51
50
  jsonp:true,
52
51
  timeout: 3000,
53
52
  success: (res) => {
54
53
  const {statusCode,data} = res
55
54
  if (statusCode === 200 && data?.islogin && Number(data.islogin) === 1) {
56
55
  this.info.loginState = true
57
56
  resolve(true);
58
57
  } else {
59
58
  reject(false)
60
59
  }
61
60
  },
62
61
  fail:(err) => {
63
62
  console.log("登录检查异常", err)
64
63
  reject(false)
65
64
  }
66
65
  })
67
66
  }
68
67
  })
69
68
  }
70
69
  }
71
70
 
72
71
  try {
73
72
  const getLoginState = await this.doCheckLoginStateAndForApiCheck()
74
73
  if(getLoginState){
75
74
  const { pin } = await this.getLoginCookie();
76
75
  this.info.userInfo = {
77
76
  pin,
78
77
  encodePin: encodeURIComponent(pin),
79
78
  ptkey: '',
80
79
  }
81
80
  resolve(true)
82
81
  }else {
83
82
  reject(false)
84
83
  }
85
84
  }catch (e) {
86
85
  reject(false)
87
86
  }
88
87
  })
89
88
  if(un_area && un_area.length > 0){
90
89
  this.info.pageInfo.address = un_area
91
90
  this.info.pageInfo.un_area = un_area
92
91
  this.info.pageInfo.addressCommaStr = un_area.replace(/_/g, ',')
93
92
  }
93
+ import Taro from '@tarojs/taro'
94
94
  isJdApp,
95
95
  isIosDevice,
96
96
  isAndroidDevice,
97
97
  isJdAndHarmonyDevice,
98
98
  isJdAndAndroidDevice,
99
99
  jdAppVersion,
100
100
  jdAppVersionStr,
101
101
  isString,
102
102
  isObject,
103
103
  serialize,
104
104
  dealNativePixelToCssPixel,
105
105
  BUSINESS_TYPE,
106
106
  JSSDK_APP_WEBVIEW_CODE,
107
107
  SECTION_HOME_TAB_NAME_TYPE,
108
108
  SECTION_HOME_TAB_TYPE,
109
109
  WXAPP_BIZ_KEY,
110
110
  WX_BUSINESS_TYPE,
111
111
  MPAAS_CONFIG_APP_VERSION,
112
112
  MPAAS_CONFIG_APP_LOW_VERSION,
113
113
  WXAPP_BIZ_SHOP_LIGHT_KEY,
114
114
  const designWidth = 750
115
115
  return (
116
116
  Math.ceil(
117
117
  (((parseInt(String(size), 10) / 40) * 750) / designWidth) * 10000,
118
118
  ) /
119
119
  10000 +
120
120
  'rem'
121
121
  )
122
122
  loginState: false,
123
123
  cookiesStr: '',
124
124
  userInfo: userPinKey,
125
125
  isJingGouMiniViewState: false,
126
126
  isJingxiMiniViewState: false,
127
127
  pageInfo: {
128
128
  wxBusinessType: WX_BUSINESS_TYPE.NO,
129
129
  address: '',
130
130
  addressCommaStr: '',
131
131
  un_area: '',
132
132
  vapptype: '1',
133
133
  pageType: 'home',
134
134
  isExposureState: false,
135
135
  moduleId: '',
136
136
  entrance: '',
137
137
  dataType: BUSINESS_TYPE.ONLINE,
138
138
  floorExposureInfo: {},
139
139
  floorVideInfo: {},
140
140
  productVideInfo: {},
141
141
  tabsLoadAllDataInfo: {
142
142
  [SECTION_HOME_TAB_NAME_TYPE[
143
143
  SECTION_HOME_TAB_TYPE.HOME_WELL_CHOSEN
144
144
  ]]: false,
145
145
  },
146
146
  updateShopInfosAllState: false,
147
147
  isVipShop: false,
148
148
  isJdShowNativeImmersivePlayer: false,
149
149
  ...shopConfig,
150
150
  pageScrollTop: 0,
151
151
  pageIdxHeightInfo: {
152
152
  list: [],
153
153
  },
154
154
  shopNavBarHeight: 0,
155
155
  },
156
156
  defaultQueryLogInfo: {
157
157
  sourceType: 'JDshop',
158
158
  sourceValue: '',
159
159
  moduleId: 'none',
160
160
  entrance: 'none',
161
161
  },
162
162
  sysInfo: {
163
163
  windowWidth: isPc ? 375 : 0,
164
164
  containerWidth: isPc ? 375 : 0,
165
165
  windowHeight: 0,
166
166
  netWorkType: '4g',
167
167
  jdBottomBarHeight: 0,
168
168
  jdNativeHeaderHeight: 0,
169
169
  },
170
170
  queryInfo: {},
171
171
  shopInfo: {},
172
172
  openAppData: {},
173
173
  public info: CommonInterFace.BaseConfigInfo
174
174
  public config: {
175
175
  [key: string]: any
176
176
  }
177
177
  public lazyContainer: CommonInterFace.lazyContainer
178
178
  public renderedIsvComponents: CommonInterFace.renderedIsvComponents
179
179
  public rootEleNode: HTMLElement | null
180
180
  public checkStatusAndLoginPromise: object | null
181
181
  private jmfeRegisterStatePromise: Promise<any> | null
182
182
  private jmfeRegisterState: boolean
183
183
  constructor(opt) {
184
184
  this.info = this._getConfig(opt)
185
185
  this.config = {}
186
186
  this.lazyContainer = {
187
187
  [SECTION_HOME_TAB_NAME_TYPE[SECTION_HOME_TAB_TYPE.HOME_WELL_CHOSEN]]: {
188
188
  appLazyContainerList: [],
189
189
  appLazyFinishContainerList: [],
190
190
  },
191
191
  [SECTION_HOME_TAB_NAME_TYPE[SECTION_HOME_TAB_TYPE.HOME_PROMOTION]]: {
192
192
  appLazyContainerList: [],
193
193
  appLazyFinishContainerList: [],
194
194
  },
195
195
  }
196
196
  this.renderedIsvComponents = {}
197
197
  this.rootEleNode = document.querySelector('body')
198
198
  this.checkStatusAndLoginPromise = null
199
199
  this.jmfeRegisterStatePromise = null
200
200
  isJdApp && this.jmfeReayPromise()
201
201
  }
202
202
  _getConfig(opt) {
203
203
  return Object.assign({}, DefaultConfig, opt)
204
204
  }
205
205
 
206
206
  jmfeReayPromise(): Promise<any> {
207
207
  if (isJdApp) {
208
208
  if (this.jmfeRegisterState) {
209
209
  return Promise.resolve(true)
210
210
  } else {
211
211
  !this.jmfeRegisterStatePromise &&
212
212
  (this.jmfeRegisterStatePromise = new Promise((resolve, reject) => {
213
213
  ready('jmfe', 3000)
214
214
  .then(() => {
215
215
  window?.jmfe && window.jmfe.registerCode(JSSDK_APP_WEBVIEW_CODE)
216
216
  this.jmfeRegisterState = true
217
217
  resolve(true)
218
218
  console.log('松果app内初始化注册jmfe认证完成')
219
219
  })
220
220
  .catch(() => {
221
221
  reject(false)
222
222
  })
223
223
  }))
224
224
  return this.jmfeRegisterStatePromise
225
225
  }
226
226
  } else {
227
227
  return Promise.reject(false)
228
228
  }
229
229
  }
230
230
 
231
231
  updateBusinessDomainAndApi(domain, api) {
232
232
  }
233
233
 
234
234
  formatNativeScreenPageData(action) {
235
235
  let getChangePageInfo: any = null
236
236
  try {
237
237
  const getNativeScreenPageInfoStr = window.XWebView?._callNative(
238
238
  JSON.stringify({
239
239
  plugin: 'JDHybridScreenPlugin',
240
240
  action,
241
241
  sync: '1',
242
242
  }),
243
243
  )
244
244
  const getChangePageInfoData =
245
245
  typeof getNativeScreenPageInfoStr === 'string'
246
246
  ? JSON.parse(getNativeScreenPageInfoStr)
247
247
  : null
248
248
  if (getChangePageInfoData && typeof getChangePageInfoData === 'object') {
249
249
  const { code, data } = getChangePageInfoData
250
250
  getChangePageInfo = code && code === '0' ? data : null
251
251
  }
252
252
  } catch (e) {
253
253
  console.log('JDHybridScreenPlugin转换异常', e)
254
254
  }
255
255
  return getChangePageInfo
256
256
  }
257
257
 
258
258
  isAndroidFoldScreen() {
259
259
  return this.formatNativeScreenPageData('isFoldScreen') === '1'
260
260
  }
261
261
 
262
262
  getJdAndroidPageChangeScreenInfo() {
263
263
  const getPageScreenInfo = this.formatNativeScreenPageData('getScreenSize')
264
264
  if (
265
265
  getPageScreenInfo &&
266
266
  getPageScreenInfo?.pageWidth &&
267
267
  getPageScreenInfo?.pageHeight
268
268
  ) {
269
269
  const { pageWidth, pageHeight } = dealNativePixelToCssPixel({
270
270
  pageWidth: getPageScreenInfo.pageWidth,
271
271
  pageHeight: getPageScreenInfo.pageHeight,
272
272
  })
273
273
  getPageScreenInfo.pageWidth = pageWidth
274
274
  getPageScreenInfo.pageHeight = pageHeight
275
275
  }
276
276
  return getPageScreenInfo
277
277
  }
278
278
 
279
279
  getSystemInfo(params) {
280
280
  let info: UtilsInterFace.taroGetSystemInfoSyncRes | {} = isPc
281
281
  ? {}
282
282
  : getSystemInfos(params)
283
283
  if (isJdAndAndroidDevice && window.innerWidth <= 0) {
284
284
  const isfoldScreen = this.isAndroidFoldScreen()
285
285
  if (isfoldScreen) {
286
286
  const getJdAndroidPageInfo = this.getJdAndroidPageChangeScreenInfo()
287
287
  getJdAndroidPageInfo && (info = getSystemInfos(getJdAndroidPageInfo))
288
288
  console.info(
289
289
  '安卓松果app折叠屏获取webview宽度为0,那么通过内部方法重置获取',
290
290
  getJdAndroidPageInfo,
291
291
  )
292
292
  }
293
293
  }
294
294
  this.info.sysInfo = {
295
295
  actualNavBarHeight: 0,
296
296
  ...this.info.sysInfo,
297
297
  ...info,
298
298
  safeContentHeight: info?.screenHeight,
299
299
  headerHeight: 0,
300
300
  tabBarHeight: 0,
301
301
  }
302
302
  if (isJdApp) {
303
303
  this.info.sysInfo['hostVersionName'] = jdAppVersionStr
304
304
  this.info.sysInfo['hostAppVersion'] = jdAppVersion
305
305
  this.getAddressCachePromise()
306
306
  this.getElderModePromise()
307
307
  this.getJDAppearanceStatePromise()
308
308
  this.createJdAndroidRquestEventForTouchStart()
309
309
  }
310
310
  this.getWifiVideoAutoPlayAsync()
311
311
  this.getMPaasConfigAsync()
312
312
  this.getNetWorkType()
313
313
  }
314
314
 
315
315
  taskTimeoutPromise(callBack, timeout = 2000) {
316
316
  return new Promise(resolve => {
317
317
  setTimeout(() => {
318
318
  const getCallBackRes = typeof callBack === 'function' && callBack()
319
319
  return resolve(getCallBackRes || false)
320
320
  }, timeout)
321
321
  })
322
322
  }
323
323
 
324
324
  getElderModePromise() {
325
325
  if (this.info.sysInfo.hasOwnProperty('jdAppModeType')) {
326
326
  return Promise.resolve(this.info.sysInfo.jdAppModeType)
327
327
  } else {
328
328
  if (isJdAndAndroidDevice) {
329
329
  this.info.sysInfo.jdAppModeType = '0'
330
330
  return Promise.resolve(this.info.sysInfo.jdAppModeType)
331
331
  } else {
332
332
  return Promise.race([
333
333
  this.taskTimeoutPromise(() => {
334
334
  this.info.sysInfo.jdAppModeType = '0'
335
335
  return this.info.sysInfo.jdAppModeType
336
336
  }),
337
337
  new Promise(resolve => {
338
338
  const getCallBackName = `getJdCurrentModeType${Date.now()}`
339
339
  if (!window[getCallBackName]) {
340
340
  window[getCallBackName] = res => {
341
341
  try {
342
342
  const getResJson =
343
343
  typeof res === 'string' ? JSON.parse(res) : res
344
344
  const { status, data, msg } = getResJson
345
345
  console.log(`获取松果app展示模式成功,返回结果${data}`)
346
346
  if (status === '0') {
347
347
  this.info.sysInfo.jdAppModeType = data
348
348
  resolve(data)
349
349
  } else {
350
350
  resolve('0')
351
351
  }
352
352
  } catch (e) {
353
353
  resolve('0')
354
354
  }
355
355
  window[getCallBackName] = null
356
356
  }
357
357
  }
358
358
  window?.webkit?.messageHandlers?.JDAppUnite?.postMessage({
359
359
  method: 'callSyncRouterModuleWithParams',
360
360
  params: JSON.stringify({
361
361
  routerURL: 'router://JDBModeModule/getCurrentMode',
362
362
  routerParam: {},
363
363
  callBackName: `window.${getCallBackName}`,
364
364
  callBackId: `${getCallBackName}Ios`,
365
365
  }),
366
366
  })
367
367
  }),
368
368
  ])
369
369
  }
370
370
  }
371
371
  }
372
372
 
373
373
  getJDAppearanceStatePromise() {
374
374
  if (this.info.sysInfo.hasOwnProperty('jdAppearanceState')) {
375
375
  return Promise.resolve(this.info.sysInfo.jdAppearanceState)
376
376
  } else {
377
377
  return Promise.race([
378
378
  this.taskTimeoutPromise(() => {
379
379
  this.info.sysInfo.jdAppearanceState = '0'
380
380
  return this.info.sysInfo.jdAppearanceState
381
381
  }),
382
382
  new Promise(resolve => {
383
383
  const getCallBackName = `getJdCurrentAppearanceState${Date.now()}`
384
384
  if (!window[getCallBackName]) {
385
385
  window[getCallBackName] = res => {
386
386
  try {
387
387
  console.log('getJDAppearanceStatePromise', res)
388
388
  const getResJson =
389
389
  typeof res === 'string' ? JSON.parse(res) : res
390
390
  const { status, data, msg } = getResJson
391
391
  console.log(`获取松果app是否开启黑暗模式成功,返回结果${data}`)
392
392
  if (status === '0') {
393
393
  this.info.sysInfo.jdAppearanceState = data
394
394
  resolve(data)
395
395
  } else {
396
396
  resolve('0')
397
397
  }
398
398
  } catch (e) {
399
399
  resolve('0')
400
400
  }
401
401
  window[getCallBackName] = null
402
402
  }
403
403
  }
404
404
  if (isAndroidDevice) {
405
405
  const jsonString = JSON.stringify({
406
406
  callBackName: `window.${getCallBackName}`,
407
407
  })
408
408
  console.log('window.JDAppearance', window.JDAppearance)
409
409
  window.JDAppearance && window.JDAppearance.getUiState(jsonString)
410
410
  } else {
411
411
  window?.webkit?.messageHandlers?.JDAppUnite?.postMessage({
412
412
  method: 'callSyncRouterModuleWithParams',
413
413
  params: JSON.stringify({
414
414
  routerURL:
415
415
  'router://JDWebViewBusinessModule/getJDAppearanceState',
416
416
  routerParam: {},
417
417
  callBackName: `window.${getCallBackName}`,
418
418
  callBackId: `${getCallBackName}Ios`,
419
419
  }),
420
420
  })
421
421
  }
422
422
  }),
423
423
  ])
424
424
  }
425
425
  }
426
426
 
427
427
  createJdAndroidRquestEventForTouchStart() {
428
428
  if (isJdAndAndroidDevice && window.JdAndroid) {
429
429
  const rootEleNode = document.querySelector('body')
430
430
  if (rootEleNode) {
431
431
  rootEleNode.addEventListener(
432
432
  'touchstart',
433
433
  this.jdAndroidAddEventListenerTouchStart,
434
434
  false,
435
435
  )
436
436
  }
437
437
  }
438
438
  }
439
439
  jdAndroidAddEventListenerTouchStart(e) {
440
440
  const isH5SwiperCustomEle = e?.target?.closest('.J_h5SwiperCustom')
441
441
  if (!isH5SwiperCustomEle) {
442
442
  const hasCustomEle = e
443
443
  ? e?.target?.closest('.J_customScroll') ||
444
444
  e?.target?.closest('.J_customLayout')
445
445
  : false
446
446
  if (!hasCustomEle) {
447
447
  window.JdAndroid.requestEvent(false)
448
448
  console.log(
449
449
  'createJdAndroidRquestEvent 所有松果安卓APP内的document touch start事件执行检测requestEvent并重置为false',
450
450
  )
451
451
  }
452
452
  }
453
453
  }
454
454
  removeJdAndroidRquestEventForTouchStart() {
455
455
  if (isJdAndAndroidDevice && window.JdAndroid) {
456
456
  const rootEleNode = document.querySelector('body')
457
457
  if (rootEleNode) {
458
458
  rootEleNode.removeEventListener(
459
459
  'touchstart',
460
460
  this.jdAndroidAddEventListenerTouchStart,
461
461
  false,
462
462
  )
463
463
  }
464
464
  }
465
465
  }
466
466
 
467
467
  getNetWorkType() {
468
468
  if (isJdApp) {
469
469
  this.jmfeReayPromise().then(() => {
470
470
  window.jmfe
471
471
  .getNetworkStatus()
472
472
  .then(({ status, data }) => {
473
473
  console.log(
474
474
  '在app内初始化通过jmfe对象获取网络状态完成,当前网络状态====',
475
475
  data,
476
476
  )
477
477
  if (status === '0') {
478
478
  this.info.sysInfo['netWorkType'] = data
479
479
  } else {
480
480
  this._taroGetNetworkType()
481
481
  }
482
482
  })
483
483
  .catch(err => {
484
484
  console.log('在app内初始化通过jmfe对象获取网络状态异常====', err)
485
485
  this._taroGetNetworkType()
486
486
  })
487
487
  })
488
488
  } else {
489
489
  this._taroGetNetworkType()
490
490
  }
491
491
  }
492
492
  _taroGetNetworkType() {
493
493
  Taro.getNetworkType().then(getRes => {
494
494
  if (getRes && getRes.networkType) {
495
495
  this.info.sysInfo['netWorkType'] = getRes.networkType
496
496
  console.log(
497
497
  '在app内通过taro对象获取网络状态完成,当前网络状态',
498
498
  this.info.sysInfo['netWorkType'],
499
499
  )
500
500
  }
501
501
  })
502
502
  }
503
503
 
504
504
  getCacheAddressRouter() {
505
505
  if (!window.jmfe) return
506
506
  if (isAndroidDevice) {
507
507
  return window.jmfe.callRouter({
508
508
  jdRouter: '1',
509
509
  routerURL: 'router://JDAddressModule/getCacheAddress',
510
510
  routerParam: { sceneId: 'basicShoppingProcess' },
511
511
  })
512
512
  } else if (isIosDevice) {
513
513
  return window.jmfe.callRouter({
514
514
  jdRouter: '1',
515
515
  routerURL: 'router://JDBAddressCacheManagerModule/getCacheAddress',
516
516
  routerParam: { sceneId: 'basicShoppingProcess' },
517
517
  })
518
518
  } else if (isJdAndHarmonyDevice) {
519
519
  return new Promise(resolve => {
520
520
  resolve({})
521
521
  })
522
522
  } else {
523
523
  throw Error(
524
524
  'Unknown device type cannot obtain the address information through the route!',
525
525
  )
526
526
  }
527
527
  }
528
528
 
529
529
  getAddressCachePromise() {
530
530
  return new Promise(resolve => {
531
531
  if (
532
532
  this?.info?.sysInfo?.lat &&
533
533
  this?.info?.sysInfo?.lng &&
534
534
  this?.info?.sysInfo?.area
535
535
  ) {
536
536
  resolve({
537
537
  lat: this.info.sysInfo.lat,
538
538
  lng: this.info.sysInfo.lng,
539
539
  area: this?.info?.sysInfo?.area,
540
540
  })
541
541
  } else {
542
542
  this.jmfeReayPromise()
543
543
  .then(() => {
544
544
  this.getCacheAddressRouter()
545
545
  .then(({ status, data }) => {
546
546
  if (status === '0' && data) {
547
547
  const {
548
548
  lat,
549
549
  latitude,
550
550
  lng,
551
551
  longitude,
552
552
  provinceId,
553
553
  cityId,
554
554
  countyId,
555
555
  townId,
556
556
  } = data || {}
557
557
  let area = ''
558
558
  this.info.sysInfo['lat'] = lat || latitude || ''
559
559
  this.info.sysInfo['lng'] = lng || longitude || ''
560
560
  if (provinceId) {
561
561
  area = `${provinceId}_${cityId || 0}_${countyId ||
562
562
  0}_${townId || 0}`
563
563
  this.info.pageInfo['address'] = area
564
564
  this.info.pageInfo['addressCommaStr'] = area.replace(
565
565
  /_/g,
566
566
  ',',
567
567
  )
568
568
  }
569
569
  resolve({
570
570
  lat: lat,
571
571
  lng: lng,
572
572
  area: area,
573
573
  })
574
574
  } else {
575
575
  resolve({ lat: '', lng: '', area: '' })
576
576
  }
577
577
  })
578
578
  .catch(e => {
579
579
  console.log(' ~~ file: index.h5.ts:514 ~~ .catch ~~ e:', e)
580
580
  resolve({ lat: '', lng: '', area: '' })
581
581
  })
582
582
  })
583
583
  .catch(e => {
584
584
  console.log(' ~~ file: index.h5.ts:518 ~~ .catch ~~ e:', e)
585
585
  resolve({ lat: '', lng: '', area: '' })
586
586
  console.log('判断jmfe不存在,获取经纬度信息异常')
587
587
  })
588
588
  }
589
589
  })
590
590
  }
591
591
 
592
592
  async getWifiVideoAutoPlayAsync() {
593
593
  this.info.sysInfo['wifiVideoAutoPlay'] = false
594
594
  if (!isJdApp) {
595
595
  return
596
596
  }
597
597
  const videoPlayStatus = await getWifiVideoAutoPlay().catch(e => {
598
598
  return 0
599
599
  })
600
600
  if (Number(videoPlayStatus) === 1) {
601
601
  this.info.sysInfo['wifiVideoAutoPlay'] = true
602
602
  }
603
603
  }
604
604
 
605
605
  async getMPaasConfigAsync() {
606
606
  this.info.sysInfo['avifSwitch'] = {}
607
607
  this.info.sysInfo['isFollowAppVideoPlayStatus'] = false
608
608
  return this.updateMPaasConfigAsync(true)
609
609
  }
610
610
  async updateMPaasConfig() {
611
611
  console.log('updateMPaasConfig')
612
612
  if (
613
613
  isIosDevice &&
614
614
  versionCompare(jdAppVersionStr, MPAAS_CONFIG_APP_VERSION) < 0 &&
615
615
  versionCompare(jdAppVersionStr, MPAAS_CONFIG_APP_LOW_VERSION) >= 0
616
616
  ) {
617
617
  await this.updateMPaasConfigAsync(false).catch(e => {
618
618
  console.log('updateMPaasConfigAsync:', e)
619
619
  })
620
620
  }
621
621
  }
622
622
 
623
623
  async updateMPaasConfigAsync(isBeforePageReady: boolean) {
624
624
  console.log('updateMPaasConfigAsync isBeforePageReady:', isBeforePageReady)
625
625
  if (!isJdApp) {
626
626
  return
627
627
  }
628
628
  const avifSwitch = await getMPaasConfigByBussinessKey(
629
629
  'avifSwitch',
630
630
  isBeforePageReady,
631
631
  )
632
632
  this.info.sysInfo['avifSwitch'] = avifSwitch
633
633
  const isFollowAppVideoPlayStatus = await getMPaasConfigByBussinessKey(
634
634
  'isFollowAppVideoPlayStatus',
635
635
  isBeforePageReady,
636
636
  )
637
637
  console.log(
638
638
  'isBeforePageReady:',
639
639
  isBeforePageReady,
640
640
  'isFollowAppVideoPlayStatus:',
641
641
  isFollowAppVideoPlayStatus,
642
642
  )
643
643
  if (
644
644
  isFollowAppVideoPlayStatus === true ||
645
645
  isFollowAppVideoPlayStatus === 'true'
646
646
  ) {
647
647
  this.info.sysInfo['isFollowAppVideoPlayStatus'] = true
648
648
  }
649
649
  }
650
650
 
651
651
  toLogin(options) {
652
652
  return this.info.isJingGouMiniViewState || this.info.isJingxiMiniViewState
653
653
  ? this.toWxAppLogin(options)
654
654
  : this.toWebLogin(options)
655
655
  }
656
656
 
657
657
  doLogin(options) {
658
658
  return this.toLogin(options)
659
659
  }
660
660
 
661
661
  doLoginForJdPin(options = {}) {
662
662
  return this.doLogin({
663
663
  loginColor: {
664
664
  biz: WXAPP_BIZ_SHOP_LIGHT_KEY,
665
665
  dpin: 0,
666
666
  },
667
667
  ...options,
668
668
  })
669
669
  }
670
670
 
671
671
  toWebLogin(options) {
672
672
  let params: {
673
673
  returnurl: string
674
674
  } = {
675
675
  returnurl: '',
676
676
  }
677
677
  const loginUrl = isPc
678
678
  ? `//passport.jd.com/new/login.aspx`
679
679
  : `${domain.mobileLogin}/user/login.action`
680
680
  const defaultParams = {
681
681
  appid: '100',
682
682
  returnurl: window.location.href,
683
683
  }
684
684
  if (isString(options)) {
685
685
  params = Object.assign({}, defaultParams, {
686
686
  returnurl: options,
687
687
  })
688
688
  } else if (isObject(options)) {
689
689
  const { loginColor, ...otherOptions } = options
690
690
  params = Object.assign({}, defaultParams, otherOptions)
691
691
  } else {
692
692
  params = defaultParams
693
693
  }
694
694
  params.returnurl = encodeURIComponent(params.returnurl)
695
695
  let getFullUrl = loginUrl + '?' + serialize(params)
696
696
  if (isPc) {
697
697
  getFullUrl = getFullUrl.replace(/returnurl/, 'ReturnUrl')
698
698
  }
699
699
  return Promise.resolve({
700
700
  h5ToUrl: true,
701
701
  url: getFullUrl,
702
702
  }).then(() => {
703
703
  window.location.href = getFullUrl
704
704
  })
705
705
  }
706
706
 
707
707
  toWxAppLogin(options = {}) {
708
708
  console.log('微信京购小程序中h5登录跳转', options)
709
709
  return Promise.resolve(true).then(() => {
710
710
  const { loginColor } = Object.assign(
711
711
  {},
712
712
  {
713
713
  loginColor: {
714
714
  bzi: WXAPP_BIZ_KEY,
715
715
  dpin: 1,
716
716
  },
717
717
  },
718
718
  options,
719
719
  )
720
720
  window.location.href = `${domain.wq}/pinbind/pintokenredirect?biz=${
721
721
  loginColor.bzi
722
722
  }&url=${encodeURIComponent(window.location.href)}`
723
723
  })
724
724
  }
725
725
 
726
726
  getLoginCookie() {
727
727
  return Promise.resolve({
728
728
  pin: cookie.get('pin') || '',
729
729
  })
730
730
  }
731
731
 
732
732
  clearLoginCookie() {
733
733
  cookie.remove('pin')
734
734
  }
735
735
 
736
736
  checkStatusAndLogin(options = {}) {
737
737
  if (!this.checkStatusAndLoginPromise) {
738
738
  this.checkStatusAndLoginPromise = new Promise(async (resolve, reject) => {
739
739
  try {
740
740
  const getLoginState = await this.doCheckLoginStateAndForApiCheck(
741
741
  options,
742
742
  )
743
743
  if (getLoginState) {
744
744
  resolve(true)
745
745
  } else {
746
746
  this.toLogin(options)
747
747
  reject(false)
748
748
  }
749
749
  } catch (e) {
750
750
  this.toLogin(options)
751
751
  reject(false)
752
752
  }
753
753
  })
754
754
  return this.checkStatusAndLoginPromise
755
755
  } else {
756
756
  return this.checkStatusAndLoginPromise
757
757
  .then(() => {
758
758
  return Promise.resolve(true)
759
759
  })
760
760
  .catch(() => {
761
761
  this.toLogin(options)
762
762
  return Promise.reject(true)
763
763
  })
764
764
  }
765
765
  }
766
766
 
767
767
  checkJdStatusAndLogin(
768
768
  options = {
769
769
  loginColor: {
770
770
  bzi: WXAPP_BIZ_SHOP_LIGHT_KEY,
771
771
  dpin: 0,
772
772
  },
773
773
  },
774
774
  ) {
775
775
  return this.checkStatusAndLogin(options)
776
776
  }
777
777
 
778
778
  doCheckLoginStateAndForApiCheck(options) {
779
779
  if (this.info.loginState) {
780
780
  return Promise.resolve(true)
781
781
  } else {
782
782
  return new Promise((resolve, reject) => {
783
783
  if (
784
784
  this.info.isJingGouMiniViewState ||
785
785
  this.info.isJingxiMiniViewState
786
786
  ) {
787
787
  const getWqAuthToken = cookie.get('wq_auth_token')
788
788
  const getWqSkey = cookie.get('wq_skey')
789
789
  const getWqUin = cookie.get('wq_uin')
790
790
  const isLoginState =
791
791
  options?.loginColor?.dpin === 0
792
792
  ? getWqAuthToken
793
793
  : getWqSkey && getWqUin
794
794
  if (isLoginState) {
795
795
  this.info.loginState = true
796
796
  resolve(true)
797
797
  } else {
798
798
  reject(false)
799
799
  }
800
800
  } else {
801
801
  Taro.request({
802
802
  url: api.isLogin,
803
803
  jsonp: true,
804
804
  timeout: 3000,
805
805
  success: res => {
806
806
  const { statusCode, data } = res
807
807
  if (
808
808
  statusCode === 200 &&
809
809
  data?.islogin &&
810
810
  Number(data.islogin) === 1
811
811
  ) {
812
812
  this.info.loginState = true
813
813
  resolve(true)
814
814
  } else {
815
815
  reject(false)
816
816
  }
817
817
  },
818
818
  fail: err => {
819
819
  console.log('登录检查异常', err)
820
820
  reject(false)
821
821
  },
822
822
  })
823
823
  }
824
824
  })
825
825
  }
826
826
  }
827
827
 
828
828
  checkLoginStatus(options) {
829
829
  return new Promise(async (resolve, reject) => {
830
830
  try {
831
831
  const getLoginState = await this.doCheckLoginStateAndForApiCheck(
832
832
  options,
833
833
  )
834
834
  if (getLoginState) {
835
835
  const { pin } = await this.getLoginCookie()
836
836
  this.info.userInfo = {
837
837
  pin,
838
838
  encodePin: encodeURIComponent(pin),
839
839
  ptkey: '',
840
840
  }
841
841
  resolve(true)
842
842
  } else {
843
843
  reject(false)
844
844
  }
845
845
  } catch (e) {
846
846
  reject(false)
847
847
  }
848
848
  })
849
849
  }
850
850
 
851
851
  updatePageAndLogInfo(updateQuery = {}) {
852
852
  const createUpdateQueryInfo: {
853
853
  query: {
854
854
  shopId?: string | number
855
855
  venderId?: string | number
856
856
  }
857
857
  updateShopInfoState: boolean
858
858
  } = Object.assign(
859
859
  {},
860
860
  {
861
861
  query: {},
862
862
  updateShopInfoState: false,
863
863
  },
864
864
  updateQuery,
865
865
  )
866
866
  console.log(
867
867
  '获取当前下发的店铺查询参数',
868
868
  updateQuery,
869
869
  '获取之前保存的shopInfo店铺查询参数',
870
870
  this.info?.shopInfo,
871
871
  )
872
872
  const { query, updateShopInfoState } = createUpdateQueryInfo
873
873
  const { shopId, venderId, un_area } = query
874
874
  if (updateShopInfoState) {
875
875
  this.info.queryInfo = {
876
876
  ...this.info.queryInfo,
877
877
  ...query,
878
878
  }
879
879
  if (shopId && venderId) {
880
880
  this.info.shopInfo = {
881
881
  shopId: `${shopId}`,
882
882
  venderId: `${venderId}`,
883
883
  }
884
884
  }
885
885
  } else {
886
886
  this.info.queryInfo = {
887
887
  ...query,
888
888
  }
889
889
  if (
890
890
  this.info.shopInfo?.shopId &&
891
891
  this.info.shopInfo?.venderId &&
892
892
  (this.info.shopInfo.shopId == shopId ||
893
893
  this.info.shopInfo.venderId == venderId)
894
894
  ) {
895
895
  this.info.queryInfo.shopId = this.info.shopInfo.shopId
896
896
  this.info.queryInfo.venderId = this.info.shopInfo.venderId
897
897
  console.log(
898
898
  '当前存储的店铺shopId和venderId与下发的店铺信息shopId或者venderId为同一个,补充shopId或者venderId查询参数',
899
899
  this.info.queryInfo,
900
900
  )
901
901
  }
902
902
  }
903
903
  this.info.queryInfo['shopId'] &&
904
904
  (this.info.queryInfo['shopId'] = `${this.info.queryInfo['shopId']}`)
905
905
  this.info.queryInfo['venderId'] &&
906
906
  (this.info.queryInfo['venderId'] = `${this.info.queryInfo['venderId']}`)
907
907
  console.log(
908
908
  'h5==获取店铺下发查询参数\n',
909
909
  query,
910
910
  '\n获取店铺最后查询参数\n',
911
911
  this.info.queryInfo,
912
912
  '\n是否为更新店铺状态\n',
913
913
  updateShopInfoState,
914
914
  )
915
915
  const changeArea =
916
916
  un_area && un_area.length > 0 ? un_area : ipLoc_djd ? ipLoc_djd : ''
917
917
  if (changeArea) {
918
918
  this.info.pageInfo.address = changeArea
919
919
  this.info.pageInfo.un_area = changeArea
920
920
  this.info.pageInfo.addressCommaStr = changeArea.replace(/_/g, ',')
921
921
  }
922
922
  }