@conecli/cone-render 0.10.1-shop3.113 → 0.10.1-shop3.114

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.
@@ -1 +1 @@
1
- import { JdJumpJdApp } from './jdJumpJdApp';
2
1
  isAppHomeForMarketPage,
3
2
  isJdAndHarmonyDevice,
4
3
  isNewHarmonyShop,
5
4
  parseQueryUrlString,
6
5
  objectToUrlEncode,
7
6
  isInJdShopView,
8
7
  routerInfo: {
9
8
  params: {},
10
9
  },
11
10
  nativeEvent: null,
12
11
  jumpConfig: {
13
12
  venderId: null,
14
13
  shopId: null,
15
14
  sourceValue: '',
16
15
  sourceType: 'App-H5',
17
16
  activityType: 'shopx',
18
17
  moduleId: 'none',
19
18
  entrance: 'none',
20
19
  },
21
20
  logPageParamStr: '',
22
21
  public logPageId: string;
23
22
  public jumpConfig: JumpEventReportInterFace.JumpH5ReportConfig;
24
23
  constructor(opt = {}) {
25
24
  super(opt);
26
25
  this.getConfig(opt);
27
26
  }
28
27
  getConfig(opt = {}) {
29
28
  return Object.assign(this, {}, defaultConfig, opt);
30
29
  }
31
30
  updateInfo(routerInfo, logPname = LogPnameInfo.HOME, pageId = LogPageIdInfo.APP) {
32
31
  this.logPageId = pageId;
33
32
  this.routerInfo = routerInfo;
34
33
  this.jumpConfig = Object.assign({}, this.jumpConfig, routerInfo.params);
35
34
  this.logPname = logPname;
36
35
  }
37
36
  reportInfoPv(
38
37
  pageId = LogPageIdInfo.APP,
39
38
  opt: {
40
39
  pageParam?: any;
41
40
  } = {},
42
41
  ) {
43
42
  const { pageParam, ...otherOpts } = opt;
44
43
  const pageParamStr = typeof pageParam === 'object' ? JSON.stringify(pageParam) : pageParam;
45
44
  this.logPageParamStr = pageParamStr
46
45
  ? pageParamStr
47
46
  : this.creatParamToLogStr(this.jumpConfig)
48
47
  .replace(/moduleId/, 'JumpmoduleID')
49
48
  .replace(/entrance/, 'Jumpentrance');
50
49
  reportPV({
51
50
  pageId,
52
51
  pageParam: this.logPageParamStr,
53
52
  ...otherOpts,
54
53
  });
55
54
  }
56
55
 
57
56
  jdJumpToDongDongChatGroup(groupId, source = '4') {
58
57
  this.jdNavigateToNative({
59
58
  category: 'jump',
60
59
  des: 'dongdong_group_chat',
61
60
  source: source,
62
61
  groupId: `${groupId}`,
63
62
  });
64
63
  }
65
64
 
66
65
  jdJumpToWeb(
67
66
  url,
68
67
  logEventInfo,
69
68
  successBack?: functionType | undefined,
70
69
  failBack?: functionType | undefined,
71
70
  ) {
72
71
  console.log('jd web', this.isOpenJdAppUrl(url), url);
73
72
  if (this.isOpenJdAppUrl(url)) {
74
73
  const getOpenAppParams = this.jdOpenAppParams(url);
75
74
  console.log('jd web 获取自定义openApp链接解析后的参数结果', getOpenAppParams);
76
75
  if (getOpenAppParams) {
77
76
 
78
77
  const { useEncodeParams, ...otherLogInfo } = logEventInfo || {};
79
78
  this.jdNavigateToNative(
80
79
  Object.assign({}, getOpenAppParams, {
81
80
  logEventInfo: otherLogInfo,
82
81
  useEncodeParams: Boolean(useEncodeParams),
83
82
  }),
84
83
  );
85
84
  }
86
85
  } else {
87
86
  let _getLastUrl = url;
88
87
  if (/shop\.m\.jd\.com|pages\.jd\.com/.test(_getLastUrl)) {
89
88
  const getUrlSearchParamState = _getLastUrl.indexOf('?') !== -1;
90
89
  if (!/jwebprog=0/.test(_getLastUrl)) {
91
90
  _getLastUrl = `${_getLastUrl}${getUrlSearchParamState ? '&' : '?'}jwebprog=0`;
92
91
  }
93
92
  if (global.info.sysInfo?.newFlexPad && !/terminal=flex/.test(_getLastUrl)) {
94
93
  _getLastUrl = `${_getLastUrl}${_getLastUrl.indexOf('?') !== -1 ? '&' : '?'}terminal=flex`;
95
94
  } else if (
96
95
  global.info.sysInfo?.isJdTabletDevice &&
97
96
  !global.info.sysInfo?.newFlexPad &&
98
97
  !/device=tablet/.test(_getLastUrl)
99
98
  ) {
100
99
  _getLastUrl = `${_getLastUrl}${_getLastUrl.indexOf('?') !== -1 ? '&' : '?'}device=tablet`;
101
100
  }
102
101
  if (isInJdShopView && !/origin=appShop/.test(_getLastUrl)) {
103
102
  _getLastUrl = `${_getLastUrl}${_getLastUrl.indexOf('?') !== -1 ? '&' : '?'}origin=appShop`;
104
103
  }
105
104
  }
106
105
  super.jdJumpToWeb(
107
106
  _getLastUrl,
108
107
  {
109
108
  ...logEventInfo,
110
109
  },
111
110
  successBack,
112
111
  failBack,
113
112
  );
114
113
  }
115
114
  }
116
115
 
117
116
  jdJumpToWebInner(url, logEventInfo) {
118
117
  this.jdJumpToWeb(url, logEventInfo);
119
118
  }
120
119
 
121
120
  jdJumpConfigUrl(detail, logEventInfo = {}) {
122
121
  const { configDataType, configDataValue } = detail;
123
122
  switch (configDataType) {
124
123
  case LinkConfigType.CONFIG_TYPE_CATEGORY_PAGE:
125
124
  this.jdJumpToShopCategory({
126
125
  ...configDataValue,
127
126
  logEventInfo,
128
127
  });
129
128
  break;
130
129
  case LinkConfigType.CONFIG_TYPE_SKU_LIST:
131
130
  if (logEventInfo?.jsonParam?.logBaseInfo?.mInfo) {
132
131
  logEventInfo.jsonParam.logBaseInfo.mInfo.skuid = configDataValue.skuIds;
133
132
  }
134
133
  this.jdJumpToProduct(configDataValue.skuIds, logEventInfo);
135
134
  break;
136
135
  case LinkConfigType.CONFIG_TYPE_COUPON_LIST:
137
136
  this.jdJumpToWeb(
138
137
  `${this.jumpWebUrl.shopCoupon}?couponType=1&shopId=${global.info.queryInfo.shopId}&venderId=${global.info.queryInfo.venderId}`,
139
138
  {},
140
139
  );
141
140
  break;
142
141
  case LinkConfigType.CONFIG_TYPE_CATEGORY:
143
142
  if (isJdAndHarmonyDevice && isNewHarmonyShop && jdAppVersionStr === '15.1.70') {
144
143
  const baseInfo = {
145
144
  shopId: global.info.queryInfo.shopId,
146
145
  venderId: global.info.queryInfo.venderId,
147
146
  };
148
147
  if (this.isOpenJdAppUrl(configDataValue.clickUrl)) {
149
148
  const getShopSearchParams = this.jdOpenAppParams(configDataValue.clickUrl);
150
149
  console.log('jd web 获取店铺分类链接解析后的参数结果', getShopSearchParams);
151
150
  let openAppParams =
152
151
  typeof getShopSearchParams === 'boolean'
153
152
  ? { categoryId: '', ...baseInfo }
154
153
  : getShopSearchParams;
155
154
  const getInfo = openAppParams['categoryId']
156
155
  ? { ...openAppParams, cateId: openAppParams['categoryId'] }
157
156
  : openAppParams;
158
157
  console.log('处理后的参数', objectToUrlEncode(getInfo));
159
158
  this.jdJumpToWeb(
160
159
  `${this.jumpWebUrl.shopSearch}?${objectToUrlEncode(getInfo)}`,
161
160
  logEventInfo,
162
161
  );
163
162
  } else {
164
163
  const getInfo = configDataValue['cid']
165
164
  ? { ...baseInfo, ...configDataValue, cateId: configDataValue.cid, searchType: '5' }
166
165
  : { ...baseInfo, ...configDataValue };
167
166
  this.jdJumpToWeb(
168
167
  `${this.jumpWebUrl.shopSearch}?${objectToUrlEncode(getInfo)}`,
169
168
  logEventInfo,
170
169
  );
171
170
  }
172
171
  } else {
173
172
  if (this.isOpenJdAppUrl(configDataValue.clickUrl)) {
174
173
  const getShopSearchParams = this.jdOpenAppParams(configDataValue.clickUrl);
175
174
  console.log('jd web 获取店铺分类链接解析后的参数结果', getShopSearchParams);
176
175
  getShopSearchParams &&
177
176
  this.jdJumpToShopSearch(
178
177
  Object.assign({}, getShopSearchParams, {
179
178
  logEventInfo,
180
179
  }),
181
180
  );
182
181
  } else {
183
182
  const extraParam = configDataValue?.pageId ? { pageId: configDataValue.pageId } : {};
184
183
  this.jdJumpToShopSearch(
185
184
  configDataValue['cid']
186
185
  ? Object.assign(
187
186
  {},
188
187
  {
189
188
  shopId: global.info.queryInfo.shopId,
190
189
  categoryId: configDataValue.cid,
191
190
  searchType: '5',
192
191
  ...extraParam,
193
192
  logEventInfo,
194
193
  },
195
194
  )
196
195
  : {
197
196
  shopId: global.info.queryInfo.shopId,
198
197
  ...extraParam,
199
198
  logEventInfo,
200
199
  },
201
200
  );
202
201
  }
203
202
  }
204
203
  break;
205
204
  case LinkConfigType.CONFIG_TYPE_MEMBER:
206
205
  if (isAppHomeForMarketPage) {
207
206
  this.jdJumpToBottomTabBrandMember({
208
207
  logEventInfo,
209
208
  });
210
209
  } else {
211
210
  if (this.isOpenJdAppUrl(configDataValue.clickUrl)) {
212
211
  const getShopMemberParams = this.jdOpenAppParams(configDataValue.clickUrl);
213
212
  getShopMemberParams &&
214
213
  this.jdJumpToShopMember(
215
214
  Object.assign({}, getShopMemberParams, {
216
215
  logEventInfo,
217
216
  }),
218
217
  );
219
218
  } else {
220
219
  this.jdJumpToShopMember({
221
220
  shopId: global.info.queryInfo.shopId,
222
221
  venderId: configDataValue.shopDetail,
223
222
  logEventInfo,
224
223
  });
225
224
  }
226
225
  }
227
226
  break;
228
227
  case LinkConfigType.CONFIG_TYPE_SHOP_ACTIVITY:
229
228
  if (this.isNewHarmony()) {
230
229
  const url = `${domain.sale}/m/h5/${configDataValue.data}.html`;
231
230
  this.jdJumpToWeb(url, logEventInfo);
232
231
  } else {
233
232
  if (this.isOpenJdAppUrl(configDataValue.clickUrl)) {
234
233
  const getShopActivityParams = this.jdOpenAppParams(configDataValue.clickUrl);
235
234
  getShopActivityParams &&
236
235
  this.jdJumpToShopActivity(
237
236
  Object.assign({}, getShopActivityParams, {
238
237
  logEventInfo,
239
238
  }),
240
239
  );
241
240
  } else if (configDataValue['projectId']) {
242
241
  this.jdJumpToShopActivity({
243
242
  projectId: configDataValue['projectId'],
244
243
  configDataValue,
245
244
  logEventInfo,
246
245
  });
247
246
  }
248
247
  }
249
248
  break;
250
249
  case LinkConfigType.CONFIG_TYPE_CUSTOM_LINK:
251
250
  case LinkConfigType.CONFIG_TYPE_FINANCE_COUPON: {
252
251
  const _url = configDataValue.linkUrl;
253
252
  if (
254
253
  _url.indexOf('to=') === -1 &&
255
254
  _url.indexOf(`${domain.mshop.replace(/https?:/, '')}/?shopId=`) !== -1
256
255
  ) {
257
256
  const _shopId = _url.match(/\d+/g)[0];
258
257
  this.jdJumpToShopHome({
259
258
  shopId: `${_shopId}`,
260
259
  logEventInfo,
261
260
  });
262
261
  } else if (this.isOpenJdAppUrl(_url)) {
263
262
  const getOpenAppParams = this.jdOpenAppParams(_url);
264
263
  console.log('jd web 获取自定义链接解析后的参数结果', getOpenAppParams);
265
264
  if (getOpenAppParams) {
266
265
  let _changeOpenAppParams = getOpenAppParams;
267
266
  if (isAppHomeForMarketPage) {
268
267
  const { operation, ...otherOpenAppParams } = getOpenAppParams;
269
268
  if (operation && operation === 'jumpTabInner') {
270
269
  _changeOpenAppParams = otherOpenAppParams;
271
270
  }
272
271
  }
273
272
  this.jdNavigateToNative(
274
273
  Object.assign({}, _changeOpenAppParams, {
275
274
  logEventInfo,
276
275
  }),
277
276
  );
278
277
  }
279
278
  } else {
280
279
  this.jdJumpToWeb(_url, logEventInfo);
281
280
  }
282
281
  break;
283
282
  }
284
283
  case LinkConfigType.CONFIG_TYPE_JSHOP_DETAIL:
285
284
  this.jdJumpToShopDetail({
286
285
  venderId: global.info.queryInfo.venderId,
287
286
  shopId: global.info.queryInfo.shopId,
288
287
  logEventInfo,
289
288
  });
290
289
  break;
291
290
  case LinkConfigType.CONFIG_TYPE_SHOP_HOME:
292
291
  this.jdJumpToShopHome({
293
292
  ...configDataValue,
294
293
  logEventInfo,
295
294
  });
296
295
  break;
297
296
  case LinkConfigType.CONFIG_TYPE_ANCHOR_POINT:
298
297
  break;
299
298
  case LinkConfigType.CONFIG_TYPE_SHOPPING_GUIDE:
300
299
  if (this.isOpenJdAppUrl(configDataValue.clickUrl)) {
301
300
  const getShoppingGuideParams = this.jdOpenAppParams(configDataValue.clickUrl);
302
301
  getShoppingGuideParams &&
303
302
  this.jdJumpToShopActivity(
304
303
  Object.assign({}, getShoppingGuideParams, {
305
304
  logEventInfo,
306
305
  }),
307
306
  );
308
307
  }
309
308
  break;
310
309
  case LinkConfigType.CONFIG_TYPE_MINI_PROGRAM: {
311
310
  const linkUrl = decodeURIComponent(configDataValue?.linkUrl || '');
312
311
  const search = linkUrl.match(/\?.+/);
313
312
  if (search) {
314
313
  const miniQueryData: JumpEventReportInterFace.LinkMiniParams =
315
314
  parseQueryUrlString(linkUrl);
316
315
  try {
317
316
  miniQueryData.param = JSON.parse(<string>miniQueryData?.param);
318
317
  } catch (e) {
319
318
  console.warn('解析小程序 param 错误:', miniQueryData.param);
320
319
  }
321
320
  this.jdJumpToMiniProgram(miniQueryData);
322
321
  } else {
323
322
  console.warn('小程序地址错误:', linkUrl);
324
323
  }
325
324
  break;
326
325
  }
327
326
  case LinkConfigType.CONFIG_TYPE_SHOP_SEARCH: {
328
327
  if (this.isOpenJdAppUrl(configDataValue.clickUrl)) {
329
328
  const getShopSearchParams = this.jdOpenAppParams(configDataValue.clickUrl);
330
329
  console.log('jd web 获取店铺结果落地页链接解析后的参数结果', getShopSearchParams);
331
330
  getShopSearchParams &&
332
331
  this.jdJumpToShopSearch(
333
332
  Object.assign({}, getShopSearchParams, {
334
333
  logEventInfo,
335
334
  }),
336
335
  );
337
336
  } else {
338
337
  this.jdJumpToWeb(configDataValue.clickUrl, logEventInfo);
339
338
  }
340
339
  break;
341
340
  }
342
341
  default:
343
342
  }
344
343
  }
345
344
 
346
345
  isNewHarmony() {
347
346
  return isJdAndHarmonyDevice && isNewHarmonyShop;
348
347
  }
349
348
 
350
349
  jdNavigateToNative(
351
350
  params: object,
352
351
  url = 'openapp.jdmobile://virtual',
353
352
  successBack?: functionType | null,
354
353
  failBack?: functionType | null,
355
354
  ) {
356
355
  console.log('[降级H5] jdNavigateToNative web.jd:', params);
357
356
  const getResParams: JumpEventReportInterFace.JdMiniJumpParams = Object.assign(
358
357
  {},
359
358
  {
360
359
  sourceValue: 'sourceValue_jshopModuleWeb',
361
360
  sourceType: 'sourceType_jshopModuleWeb',
362
361
  param: {},
363
362
  },
364
363
  params,
365
364
  );
366
365
  const { logEventInfo, useEncodeParams, ...otherParams } = getResParams;
367
366
  console.log('jd web 获取open协议参数 jdNavigateToNative params: ', getResParams);
368
367
  console.log('logEventInfo params: ', logEventInfo);
369
368
  global.info.pageInfo.dataType === BUSINESS_TYPE.ONLINE &&
370
369
  this.clickEventLog(logEventInfo || getResParams)
371
370
  .then(() => {
372
371
  if (typeof successBack === 'function') {
373
372
  successBack(getResParams);
374
373
  } else {
375
374
  if (this.isNewHarmony() && params.operation === 'jumpTabInner') {
376
375
  if (params.jumpTab) {
377
376
  JumpTabBarInCurrentShop({ position: 'top', item: params.jumpTab, ...otherParams });
378
377
  } else if (params.jumpBottomTab) {
379
378
  JumpTabBarInCurrentShop({
380
379
  position: 'bottom',
381
380
  item: params.jumpBottomTab,
382
381
  ...otherParams,
383
382
  });
384
383
  } else {
385
384
  console.log('[降级H5] 跳转异常 params:', params);
386
385
  }
387
386
  } else if (
388
387
  this.isNewHarmony() &&
389
388
  (params.operation === 'jumpBottomTabMember' || params.des === 'jshopMember')
390
389
  ) {
391
390
  JumpTabBarInCurrentShop({ position: 'bottom', item: 'brandMember', ...otherParams });
392
391
  } else {
393
392
  try {
394
393
  const paramsStr = JSON.stringify(otherParams);
395
394
  console.log('跳转web jd open协议', `${url}?params=${paramsStr}`);
396
395
  window.location.href =
397
396
  isJdAndHarmonyDevice || useEncodeParams
398
397
  ? `${url}?params=${encodeURIComponent(paramsStr)}`
399
398
  : `${url}?params=${paramsStr}`;
400
399
  } catch (e) {
401
400
  draBusinessCustomReport({
402
401
  eventName: 'entryProtocol',
403
402
  errorName: 'shop_jdNavigateToNative_error',
404
403
  errorMessage: '跳转web jd open协议发生错误',
405
404
  extraData: JSON.stringify({
406
405
  url,
407
406
  isJdApp,
408
407
  jdAppVersion: jdAppVersionStr,
409
408
  ...otherParams,
410
409
  }),
411
410
  });
412
411
  }
413
412
  }
414
413
  }
415
414
  })
416
415
  .catch(() => {
417
416
  typeof failBack === 'function' && failBack(getResParams);
418
417
  });
419
418
  }
420
419
 
421
420
  clickEventLog(opts: JumpEventReportInterFace.OptEventLogParams = {}, reportKey = 'click') {
422
421
  const { eventId, spmAllCode, spmCodeForCD, jsonParam, eventLevel = 3, ...otherParams } = opts;
423
422
  if ((eventId || spmAllCode || spmCodeForCD) && jsonParam) {
424
423
  const { etModelInfo, logBaseInfo } = jsonParam;
425
424
  let getJsonParam = {};
426
425
  if (etModelInfo && logBaseInfo) {
427
426
  getJsonParam = logBaseInfo;
428
427
  } else {
429
428
  if (Array.isArray(jsonParam)) {
430
429
  getJsonParam = jsonParam;
431
430
  } else {
432
431
  getJsonParam = Object.assign(
433
432
  {},
434
433
  {
435
434
  shopid: global.info.queryInfo?.shopId,
436
435
  },
437
436
  jsonParam,
438
437
  );
439
438
  }
440
439
  }
441
440
  if (
442
441
  reportKey === 'exposure' &&
443
442
  /^TerminatorNew/.test(eventId) &&
444
443
  !Array.isArray(getJsonParam)
445
444
  ) {
446
445
  getJsonParam = [getJsonParam];
447
446
  }
448
447
  const webLogParams = {
449
448
  isExpo: reportKey === 'exposure',
450
449
  eid: eventId,
451
450
  elevel: eventLevel,
452
451
  jsonParam: JSON.stringify(getJsonParam),
453
452
  etModel: JSON.stringify(etModelInfo || {}),
454
453
  pageId: this.logPageId,
455
454
  pageParam: this.logPageParamStr,
456
455
  spmAllCode,
457
456
  spmCodeForCD,
458
457
  ...otherParams,
459
458
  };
460
459
  return /click|exposure/.test(reportKey)
461
460
  ? reportClick(webLogParams)
462
461
  : reportToCart(opts, webLogParams);
463
462
  } else {
464
463
  console.log('暂无埋点参数eventId和eventParam');
465
464
  return Promise.resolve(false);
466
465
  }
467
466
  }
468
467
 
469
468
  exposureEventLog(opts) {
470
469
  return global.info.pageInfo.dataType === BUSINESS_TYPE.ONLINE
471
470
  ? this.clickEventLog(
472
471
  {
473
472
  ...opts,
474
473
  exposureState: true,
475
474
  },
476
475
  'exposure',
477
476
  )
478
477
  : Promise.resolve(false);
479
478
  }
479
+ import { JdJumpJdApp } from './jdJumpJdApp';
480
480
  isAppHomeForMarketPage,
481
481
  isJdAndHarmonyDevice,
482
482
  isNewHarmonyShop,
483
483
  parseQueryUrlString,
484
484
  objectToUrlEncode,
485
485
  isInJdShopView,
486
486
  routerInfo: {
487
487
  params: {},
488
488
  },
489
489
  nativeEvent: null,
490
490
  jumpConfig: {
491
491
  venderId: null,
492
492
  shopId: null,
493
493
  sourceValue: '',
494
494
  sourceType: 'App-H5',
495
495
  activityType: 'shopx',
496
496
  moduleId: 'none',
497
497
  entrance: 'none',
498
498
  },
499
499
  logPageParamStr: '',
500
500
  public logPageId: string;
501
501
  public jumpConfig: JumpEventReportInterFace.JumpH5ReportConfig;
502
502
  public isHarmonyOpenappUpgrade: boolean;
503
503
  constructor(opt = {}) {
504
504
  super(opt);
505
505
  this.getConfig(opt);
506
506
  this.isHarmonyOpenappUpgrade = window?.shopGlobalSwitch?.jdAppHarmonyNativeJumpVersion && jdAppVersionCompare(
507
507
  window?.shopGlobalSwitch?.jdAppHarmonyNativeJumpVersion,
508
508
  ) >= 0;
509
509
  }
510
510
  getConfig(opt = {}) {
511
511
  return Object.assign(this, {}, defaultConfig, opt);
512
512
  }
513
513
  updateInfo(routerInfo, logPname = LogPnameInfo.HOME, pageId = LogPageIdInfo.APP) {
514
514
  this.logPageId = pageId;
515
515
  this.routerInfo = routerInfo;
516
516
  this.jumpConfig = Object.assign({}, this.jumpConfig, routerInfo.params);
517
517
  this.logPname = logPname;
518
518
  }
519
519
  reportInfoPv(
520
520
  pageId = LogPageIdInfo.APP,
521
521
  opt: {
522
522
  pageParam?: any;
523
523
  } = {},
524
524
  ) {
525
525
  const { pageParam, ...otherOpts } = opt;
526
526
  const pageParamStr = typeof pageParam === 'object' ? JSON.stringify(pageParam) : pageParam;
527
527
  this.logPageParamStr = pageParamStr
528
528
  ? pageParamStr
529
529
  : this.creatParamToLogStr(this.jumpConfig)
530
530
  .replace(/moduleId/, 'JumpmoduleID')
531
531
  .replace(/entrance/, 'Jumpentrance');
532
532
  reportPV({
533
533
  pageId,
534
534
  pageParam: this.logPageParamStr,
535
535
  ...otherOpts,
536
536
  });
537
537
  }
538
538
 
539
539
  jdJumpToDongDongChatGroup(groupId, source = '4') {
540
540
  this.jdNavigateToNative({
541
541
  category: 'jump',
542
542
  des: 'dongdong_group_chat',
543
543
  source: source,
544
544
  groupId: `${groupId}`,
545
545
  });
546
546
  }
547
547
 
548
548
  jdJumpToWeb(
549
549
  url,
550
550
  logEventInfo,
551
551
  successBack?: functionType | undefined,
552
552
  failBack?: functionType | undefined,
553
553
  ) {
554
554
  console.log('jd web', this.isOpenJdAppUrl(url), url);
555
555
  if (this.isOpenJdAppUrl(url)) {
556
556
  const getOpenAppParams = this.jdOpenAppParams(url);
557
557
  console.log('jd web 获取自定义openApp链接解析后的参数结果', getOpenAppParams);
558
558
  if (getOpenAppParams) {
559
559
 
560
560
  const { useEncodeParams, ...otherLogInfo } = logEventInfo || {};
561
561
  this.jdNavigateToNative(
562
562
  Object.assign({}, getOpenAppParams, {
563
563
  logEventInfo: otherLogInfo,
564
564
  useEncodeParams: Boolean(useEncodeParams),
565
565
  }),
566
566
  );
567
567
  }
568
568
  } else {
569
569
  let _getLastUrl = url;
570
570
  if (/shop\.m\.jd\.com|pages\.jd\.com/.test(_getLastUrl)) {
571
571
  const getUrlSearchParamState = _getLastUrl.indexOf('?') !== -1;
572
572
  if (!/jwebprog=0/.test(_getLastUrl)) {
573
573
  _getLastUrl = `${_getLastUrl}${getUrlSearchParamState ? '&' : '?'}jwebprog=0`;
574
574
  }
575
575
  if (global.info.sysInfo?.newFlexPad && !/terminal=flex/.test(_getLastUrl)) {
576
576
  _getLastUrl = `${_getLastUrl}${_getLastUrl.indexOf('?') !== -1 ? '&' : '?'}terminal=flex`;
577
577
  } else if (
578
578
  global.info.sysInfo?.isJdTabletDevice &&
579
579
  !global.info.sysInfo?.newFlexPad &&
580
580
  !/device=tablet/.test(_getLastUrl)
581
581
  ) {
582
582
  _getLastUrl = `${_getLastUrl}${_getLastUrl.indexOf('?') !== -1 ? '&' : '?'}device=tablet`;
583
583
  }
584
584
  if (isInJdShopView && !/origin=appShop/.test(_getLastUrl)) {
585
585
  _getLastUrl = `${_getLastUrl}${_getLastUrl.indexOf('?') !== -1 ? '&' : '?'}origin=appShop`;
586
586
  }
587
587
  }
588
588
  super.jdJumpToWeb(
589
589
  _getLastUrl,
590
590
  {
591
591
  ...logEventInfo,
592
592
  },
593
593
  successBack,
594
594
  failBack,
595
595
  );
596
596
  }
597
597
  }
598
598
 
599
599
  jdJumpToWebInner(url, logEventInfo) {
600
600
  this.jdJumpToWeb(url, logEventInfo);
601
601
  }
602
602
 
603
603
  jdJumpConfigUrl(detail, logEventInfo = {}) {
604
604
  const { configDataType, configDataValue } = detail;
605
605
  switch (configDataType) {
606
606
  case LinkConfigType.CONFIG_TYPE_CATEGORY_PAGE:
607
607
  this.jdJumpToShopCategory({
608
608
  ...configDataValue,
609
609
  logEventInfo,
610
610
  });
611
611
  break;
612
612
  case LinkConfigType.CONFIG_TYPE_SKU_LIST:
613
613
  if (logEventInfo?.jsonParam?.logBaseInfo?.mInfo) {
614
614
  logEventInfo.jsonParam.logBaseInfo.mInfo.skuid = configDataValue.skuIds;
615
615
  }
616
616
  this.jdJumpToProduct(configDataValue.skuIds, logEventInfo);
617
617
  break;
618
618
  case LinkConfigType.CONFIG_TYPE_COUPON_LIST:
619
619
  this.jdJumpToWeb(
620
620
  `${this.jumpWebUrl.shopCoupon}?couponType=1&shopId=${global.info.queryInfo.shopId}&venderId=${global.info.queryInfo.venderId}`,
621
621
  {},
622
622
  );
623
623
  break;
624
624
  case LinkConfigType.CONFIG_TYPE_CATEGORY:
625
625
  if (isJdAndHarmonyDevice && isNewHarmonyShop && jdAppVersionStr === '15.1.70') {
626
626
  const baseInfo = {
627
627
  shopId: global.info.queryInfo.shopId,
628
628
  venderId: global.info.queryInfo.venderId,
629
629
  };
630
630
  if (this.isOpenJdAppUrl(configDataValue.clickUrl)) {
631
631
  const getShopSearchParams = this.jdOpenAppParams(configDataValue.clickUrl);
632
632
  console.log('jd web 获取店铺分类链接解析后的参数结果', getShopSearchParams);
633
633
  let openAppParams =
634
634
  typeof getShopSearchParams === 'boolean'
635
635
  ? { categoryId: '', ...baseInfo }
636
636
  : getShopSearchParams;
637
637
  const getInfo = openAppParams['categoryId']
638
638
  ? { ...openAppParams, cateId: openAppParams['categoryId'] }
639
639
  : openAppParams;
640
640
  console.log('处理后的参数', objectToUrlEncode(getInfo));
641
641
  this.jdJumpToWeb(
642
642
  `${this.jumpWebUrl.shopSearch}?${objectToUrlEncode(getInfo)}`,
643
643
  logEventInfo,
644
644
  );
645
645
  } else {
646
646
  const getInfo = configDataValue['cid']
647
647
  ? { ...baseInfo, ...configDataValue, cateId: configDataValue.cid, searchType: '5' }
648
648
  : { ...baseInfo, ...configDataValue };
649
649
  this.jdJumpToWeb(
650
650
  `${this.jumpWebUrl.shopSearch}?${objectToUrlEncode(getInfo)}`,
651
651
  logEventInfo,
652
652
  );
653
653
  }
654
654
  } else {
655
655
  if (this.isOpenJdAppUrl(configDataValue.clickUrl)) {
656
656
  const getShopSearchParams = this.jdOpenAppParams(configDataValue.clickUrl);
657
657
  console.log('jd web 获取店铺分类链接解析后的参数结果', getShopSearchParams);
658
658
  getShopSearchParams &&
659
659
  this.jdJumpToShopSearch(
660
660
  Object.assign({}, getShopSearchParams, {
661
661
  logEventInfo,
662
662
  }),
663
663
  );
664
664
  } else {
665
665
  const extraParam = configDataValue?.pageId ? { pageId: configDataValue.pageId } : {};
666
666
  this.jdJumpToShopSearch(
667
667
  configDataValue['cid']
668
668
  ? Object.assign(
669
669
  {},
670
670
  {
671
671
  shopId: global.info.queryInfo.shopId,
672
672
  categoryId: configDataValue.cid,
673
673
  searchType: '5',
674
674
  ...extraParam,
675
675
  logEventInfo,
676
676
  },
677
677
  )
678
678
  : {
679
679
  shopId: global.info.queryInfo.shopId,
680
680
  ...extraParam,
681
681
  logEventInfo,
682
682
  },
683
683
  );
684
684
  }
685
685
  }
686
686
  break;
687
687
  case LinkConfigType.CONFIG_TYPE_MEMBER:
688
688
  if (isAppHomeForMarketPage) {
689
689
  this.jdJumpToBottomTabBrandMember({
690
690
  logEventInfo,
691
691
  });
692
692
  } else {
693
693
  if (this.isOpenJdAppUrl(configDataValue.clickUrl)) {
694
694
  const getShopMemberParams = this.jdOpenAppParams(configDataValue.clickUrl);
695
695
  getShopMemberParams &&
696
696
  this.jdJumpToShopMember(
697
697
  Object.assign({}, getShopMemberParams, {
698
698
  logEventInfo,
699
699
  }),
700
700
  );
701
701
  } else {
702
702
  this.jdJumpToShopMember({
703
703
  shopId: global.info.queryInfo.shopId,
704
704
  venderId: configDataValue.shopDetail,
705
705
  logEventInfo,
706
706
  });
707
707
  }
708
708
  }
709
709
  break;
710
710
  case LinkConfigType.CONFIG_TYPE_SHOP_ACTIVITY:
711
711
  if (this.isNewHarmony()) {
712
712
  const url = `${domain.sale}/m/h5/${configDataValue.data}.html`;
713
713
  this.jdJumpToWeb(url, logEventInfo);
714
714
  } else {
715
715
  if (this.isOpenJdAppUrl(configDataValue.clickUrl)) {
716
716
  const getShopActivityParams = this.jdOpenAppParams(configDataValue.clickUrl);
717
717
  getShopActivityParams &&
718
718
  this.jdJumpToShopActivity(
719
719
  Object.assign({}, getShopActivityParams, {
720
720
  logEventInfo,
721
721
  }),
722
722
  );
723
723
  } else if (configDataValue['projectId']) {
724
724
  this.jdJumpToShopActivity({
725
725
  projectId: configDataValue['projectId'],
726
726
  configDataValue,
727
727
  logEventInfo,
728
728
  });
729
729
  }
730
730
  }
731
731
  break;
732
732
  case LinkConfigType.CONFIG_TYPE_CUSTOM_LINK:
733
733
  case LinkConfigType.CONFIG_TYPE_FINANCE_COUPON: {
734
734
  const _url = configDataValue.linkUrl;
735
735
  if (
736
736
  _url.indexOf('to=') === -1 &&
737
737
  _url.indexOf(`${domain.mshop.replace(/https?:/, '')}/?shopId=`) !== -1
738
738
  ) {
739
739
  const _shopId = _url.match(/\d+/g)[0];
740
740
  this.jdJumpToShopHome({
741
741
  shopId: `${_shopId}`,
742
742
  logEventInfo,
743
743
  });
744
744
  } else if (this.isOpenJdAppUrl(_url)) {
745
745
  const getOpenAppParams = this.jdOpenAppParams(_url);
746
746
  console.log('jd web 获取自定义链接解析后的参数结果', getOpenAppParams);
747
747
  if (getOpenAppParams) {
748
748
  let _changeOpenAppParams = getOpenAppParams;
749
749
  if (isAppHomeForMarketPage) {
750
750
  const { operation, ...otherOpenAppParams } = getOpenAppParams;
751
751
  if (operation && operation === 'jumpTabInner') {
752
752
  _changeOpenAppParams = otherOpenAppParams;
753
753
  }
754
754
  }
755
755
  this.jdNavigateToNative(
756
756
  Object.assign({}, _changeOpenAppParams, {
757
757
  logEventInfo,
758
758
  }),
759
759
  );
760
760
  }
761
761
  } else {
762
762
  this.jdJumpToWeb(_url, logEventInfo);
763
763
  }
764
764
  break;
765
765
  }
766
766
  case LinkConfigType.CONFIG_TYPE_JSHOP_DETAIL:
767
767
  this.jdJumpToShopDetail({
768
768
  venderId: global.info.queryInfo.venderId,
769
769
  shopId: global.info.queryInfo.shopId,
770
770
  logEventInfo,
771
771
  });
772
772
  break;
773
773
  case LinkConfigType.CONFIG_TYPE_SHOP_HOME:
774
774
  this.jdJumpToShopHome({
775
775
  ...configDataValue,
776
776
  logEventInfo,
777
777
  });
778
778
  break;
779
779
  case LinkConfigType.CONFIG_TYPE_ANCHOR_POINT:
780
780
  break;
781
781
  case LinkConfigType.CONFIG_TYPE_SHOPPING_GUIDE:
782
782
  if (this.isOpenJdAppUrl(configDataValue.clickUrl)) {
783
783
  const getShoppingGuideParams = this.jdOpenAppParams(configDataValue.clickUrl);
784
784
  getShoppingGuideParams &&
785
785
  this.jdJumpToShopActivity(
786
786
  Object.assign({}, getShoppingGuideParams, {
787
787
  logEventInfo,
788
788
  }),
789
789
  );
790
790
  }
791
791
  break;
792
792
  case LinkConfigType.CONFIG_TYPE_MINI_PROGRAM: {
793
793
  const linkUrl = decodeURIComponent(configDataValue?.linkUrl || '');
794
794
  const search = linkUrl.match(/\?.+/);
795
795
  if (search) {
796
796
  const miniQueryData: JumpEventReportInterFace.LinkMiniParams =
797
797
  parseQueryUrlString(linkUrl);
798
798
  try {
799
799
  miniQueryData.param = JSON.parse(<string>miniQueryData?.param);
800
800
  } catch (e) {
801
801
  console.warn('解析小程序 param 错误:', miniQueryData.param);
802
802
  }
803
803
  this.jdJumpToMiniProgram(miniQueryData);
804
804
  } else {
805
805
  console.warn('小程序地址错误:', linkUrl);
806
806
  }
807
807
  break;
808
808
  }
809
809
  case LinkConfigType.CONFIG_TYPE_SHOP_SEARCH: {
810
810
  if (this.isOpenJdAppUrl(configDataValue.clickUrl)) {
811
811
  const getShopSearchParams = this.jdOpenAppParams(configDataValue.clickUrl);
812
812
  console.log('jd web 获取店铺结果落地页链接解析后的参数结果', getShopSearchParams);
813
813
  getShopSearchParams &&
814
814
  this.jdJumpToShopSearch(
815
815
  Object.assign({}, getShopSearchParams, {
816
816
  logEventInfo,
817
817
  }),
818
818
  );
819
819
  } else {
820
820
  this.jdJumpToWeb(configDataValue.clickUrl, logEventInfo);
821
821
  }
822
822
  break;
823
823
  }
824
824
  default:
825
825
  }
826
826
  }
827
827
 
828
828
  isNewHarmony() {
829
829
  return isJdAndHarmonyDevice && isNewHarmonyShop;
830
830
  }
831
831
 
832
832
  jdNavigateToNative(
833
833
  params: object,
834
834
  url = 'openapp.jdmobile://virtual',
835
835
  successBack?: functionType | null,
836
836
  failBack?: functionType | null,
837
837
  ) {
838
838
  console.log('[降级H5] jdNavigateToNative web.jd:', params);
839
839
  const getResParams: JumpEventReportInterFace.JdMiniJumpParams = Object.assign(
840
840
  {},
841
841
  {
842
842
  sourceValue: 'sourceValue_jshopModuleWeb',
843
843
  sourceType: 'sourceType_jshopModuleWeb',
844
844
  param: {},
845
845
  },
846
846
  params,
847
847
  );
848
848
  const { logEventInfo, useEncodeParams, ...otherParams } = getResParams;
849
849
  console.log('jd web 获取open协议参数 jdNavigateToNative params: ', getResParams);
850
850
  console.log('logEventInfo params: ', logEventInfo);
851
851
  global.info.pageInfo.dataType === BUSINESS_TYPE.ONLINE &&
852
852
  this.clickEventLog(logEventInfo || getResParams)
853
853
  .then(() => {
854
854
  if (typeof successBack === 'function') {
855
855
  successBack(getResParams);
856
856
  } else {
857
857
  console.log('isHarmonyNativeNew ', this.isHarmonyOpenappUpgrade, window?.shopGlobalSwitch?.jdAppHarmonyNativeJumpVersion);
858
858
  if (!this.isHarmonyOpenappUpgrade && this.isNewHarmony() && params.operation === 'jumpTabInner') {
859
859
  if (params.jumpTab) {
860
860
  JumpTabBarInCurrentShop({ position: 'top', item: params.jumpTab, ...otherParams });
861
861
  } else if (params.jumpBottomTab) {
862
862
  JumpTabBarInCurrentShop({
863
863
  position: 'bottom',
864
864
  item: params.jumpBottomTab,
865
865
  ...otherParams,
866
866
  });
867
867
  } else {
868
868
  console.log('[降级H5] 跳转异常 params:', params);
869
869
  }
870
870
  } else if (
871
871
  !this.isHarmonyOpenappUpgrade &&
872
872
  this.isNewHarmony() &&
873
873
  (params.operation === 'jumpBottomTabMember' || params.des === 'jshopMember')
874
874
  ) {
875
875
  JumpTabBarInCurrentShop({ position: 'bottom', item: 'brandMember', ...otherParams });
876
876
  } else {
877
877
  try {
878
878
  const paramsStr = JSON.stringify(otherParams);
879
879
  console.log('跳转web jd open协议-jd', `${url}?params=${paramsStr}`);
880
880
  window.location.href =
881
881
  isJdAndHarmonyDevice || useEncodeParams
882
882
  ? `${url}?params=${encodeURIComponent(paramsStr)}`
883
883
  : `${url}?params=${paramsStr}`;
884
884
  } catch (e) {
885
885
  draBusinessCustomReport({
886
886
  eventName: 'entryProtocol',
887
887
  errorName: 'shop_jdNavigateToNative_error',
888
888
  errorMessage: '跳转web jd open协议发生错误',
889
889
  extraData: JSON.stringify({
890
890
  url,
891
891
  isJdApp,
892
892
  jdAppVersion: jdAppVersionStr,
893
893
  ...otherParams,
894
894
  }),
895
895
  });
896
896
  }
897
897
  }
898
898
  }
899
899
  })
900
900
  .catch(() => {
901
901
  typeof failBack === 'function' && failBack(getResParams);
902
902
  });
903
903
  }
904
904
 
905
905
  clickEventLog(opts: JumpEventReportInterFace.OptEventLogParams = {}, reportKey = 'click') {
906
906
  const { eventId, spmAllCode, spmCodeForCD, jsonParam, eventLevel = 3, ...otherParams } = opts;
907
907
  if ((eventId || spmAllCode || spmCodeForCD) && jsonParam) {
908
908
  const { etModelInfo, logBaseInfo } = jsonParam;
909
909
  let getJsonParam = {};
910
910
  if (etModelInfo && logBaseInfo) {
911
911
  getJsonParam = logBaseInfo;
912
912
  } else {
913
913
  if (Array.isArray(jsonParam)) {
914
914
  getJsonParam = jsonParam;
915
915
  } else {
916
916
  getJsonParam = Object.assign(
917
917
  {},
918
918
  {
919
919
  shopid: global.info.queryInfo?.shopId,
920
920
  },
921
921
  jsonParam,
922
922
  );
923
923
  }
924
924
  }
925
925
  if (
926
926
  reportKey === 'exposure' &&
927
927
  /^TerminatorNew/.test(eventId) &&
928
928
  !Array.isArray(getJsonParam)
929
929
  ) {
930
930
  getJsonParam = [getJsonParam];
931
931
  }
932
932
  const webLogParams = {
933
933
  isExpo: reportKey === 'exposure',
934
934
  eid: eventId,
935
935
  elevel: eventLevel,
936
936
  jsonParam: JSON.stringify(getJsonParam),
937
937
  etModel: JSON.stringify(etModelInfo || {}),
938
938
  pageId: this.logPageId,
939
939
  pageParam: this.logPageParamStr,
940
940
  spmAllCode,
941
941
  spmCodeForCD,
942
942
  ...otherParams,
943
943
  };
944
944
  return /click|exposure/.test(reportKey)
945
945
  ? reportClick(webLogParams)
946
946
  : reportToCart(opts, webLogParams);
947
947
  } else {
948
948
  console.log('暂无埋点参数eventId和eventParam');
949
949
  return Promise.resolve(false);
950
950
  }
951
951
  }
952
952
 
953
953
  exposureEventLog(opts) {
954
954
  return global.info.pageInfo.dataType === BUSINESS_TYPE.ONLINE
955
955
  ? this.clickEventLog(
956
956
  {
957
957
  ...opts,
958
958
  exposureState: true,
959
959
  },
960
960
  'exposure',
961
961
  )
962
962
  : Promise.resolve(false);
963
963
  }