@conecli/cone-render 0.9.1-shop2.38 → 0.9.1-shop2.39

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 Taro from '@tarojs/taro'
2
1
  APPID,
3
2
  JshopxColorFunctionIdList,
4
3
  PagesColorFunctionIdList,
5
4
  PAGES_DOMAIN,
6
5
  B2BColorFunctionIdList,
7
6
  MobileVerifyColorList,
8
7
  AppVerifyColorList,
9
8
  JshopxVerifyColorList,
10
9
  BMallVerifyColorList,
11
10
  shopMemberColorFunctionIdList,
12
11
  isLanguageForEn,
13
12
  isJdApp,
14
13
  isIosDevice,
15
14
  isAndroidDevice,
16
15
  showSuccessToast,
17
16
  showFailToast,
18
17
  isH5,
19
18
  isWxMinAndWxapp,
20
19
  isMin,
21
20
  isPc,
22
21
  callRouterIOS,
23
22
  callRouterAndroid,
24
23
  cookiesStr: '',
25
24
  requestHeaderContentType: {
26
25
  jsonHeader: {
27
26
  'content-type': 'application/json;charset=utf-8',
28
27
  },
29
28
  formDataHeader: {
30
29
  'content-type': 'application/x-www-form-urlencoded',
31
30
  },
32
31
  },
33
32
  requestBaseParam: {
34
33
  data: null,
35
34
  header: {
36
35
  'content-type': 'application/json;charset=utf-8',
37
36
  },
38
37
  },
39
38
  timeOut: 7000,
40
39
  apiClientParams: {
41
40
  clientVersion:
42
41
  isJdApp && jdAppVersionStr !== '' ? jdAppVersionStr : '11.0.0',
43
42
  client: isJdApp ? (isIosDevice ? 'apple' : 'android') : isPc ? 'pc' : 'wh5',
44
43
  area: '1_72_2799_0',
45
44
  screen: `${Math.ceil(window.screen?.width * devicePixelRatio)}*${Math.ceil(
46
45
  window.screen?.height * devicePixelRatio,
47
46
  )}`,
48
47
  uuid: UUID,
49
48
  },
50
49
  public addressFetchInfo: {
51
50
  reqState: boolean
52
51
  promiseInstance: null | Promise<any>
53
52
  }
54
53
  public getPromotionConfig: {
55
54
  projectId: null | string | number
56
55
  pageId: null | string | number
57
56
  }
58
57
  public resInfo: ServiceInterFace.HttpRequestInfo
59
58
  public api: ServiceInterFace.HttpApi
60
59
  public isPageDomain: boolean
61
60
  public verifyColorList: string[]
62
61
  constructor(opt) {
63
62
  this._init()
64
63
  this.addressFetchInfo = {
65
64
  reqState: false,
66
65
  promiseInstance: null,
67
66
  }
68
67
  this.getPromotionConfig = {
69
68
  projectId: null,
70
69
  pageId: null,
71
70
  }
72
71
  this._userAreaUpdateListen()
73
72
  this.resInfo = this._getResConfig(opt)
74
73
  this.api = api
75
74
  this.isPageDomain = isH5
76
75
  ? window?.location?.hostname === PAGES_DOMAIN
77
76
  : false
78
77
  this.verifyColorList = [
79
78
  ...MobileVerifyColorList,
80
79
  ...AppVerifyColorList,
81
80
  ...JshopxVerifyColorList,
82
81
  ...BMallVerifyColorList,
83
82
  ]
84
83
  }
85
84
  _init(): void {
86
85
  httpInterceptors.forEach(item => {
87
86
  Taro.addInterceptor(chain => item(chain))
88
87
  })
89
88
  }
90
89
  _getResConfig(opt = {}): ServiceInterFace.HttpRequestInfo {
91
90
  return Object.assign({}, DefaultConfig, opt)
92
91
  }
93
92
 
94
93
  _userAreaUpdateListen() {
95
94
  Taro.eventCenter.on(TaroEventType.USER_AREA_UPDATE, area => {
96
95
  this.updateApiClientParamsResInfo({
97
96
  area,
98
97
  })
99
98
  })
100
99
  }
101
100
  updateApiClientParamsResInfo(opt = {}) {
102
101
  this.resInfo.apiClientParams = {
103
102
  ...this.resInfo.apiClientParams,
104
103
  ...opt,
105
104
  }
106
105
  }
107
106
 
108
107
  checkFunctionIdToReturnAppId(functionId) {
109
108
  if (JshopxColorFunctionIdList.includes(functionId)) {
110
109
  return APPID.JSHOPX_COLOR_APPID
111
110
  } else if (
112
111
  this.isPageDomain &&
113
112
  PagesColorFunctionIdList.includes(functionId)
114
113
  ) {
115
114
  return APPID.PAGES_COLOR_APPID
116
115
  } else if (shopMemberColorFunctionIdList.includes(functionId)) {
117
116
  return APPID.SHOP_MEMBER_COLOR_APPID
118
117
  } else if (B2BColorFunctionIdList.includes(functionId)) {
119
118
  return APPID.B2B_COLOR_APPID
120
119
  } else if (isPc) {
121
120
  return APPID.MALL_COLOR_APPID
122
121
  } else {
123
122
  return APPID.SHOP_COLOR_APPID
124
123
  }
125
124
  }
126
125
 
127
126
  gatewayReq(
128
127
  functionId: string,
129
128
  bodyParams = {},
130
129
  clientParams = {},
131
130
  ): Promise<any> {
132
131
  if (
133
132
  functionId === 'receiveShopCoupon' &&
134
133
  ((isH5 &&
135
134
  (window?.isJingGouMiniViewState || window?.isJingxiMiniViewState)) ||
136
135
  isWxMinAndWxapp)
137
136
  ) {
138
137
  clientParams = Object.assign(
139
138
  {},
140
139
  {
141
140
  loginType: '1',
142
141
  loginWQBiz: WXAPP_BIZ_KEY,
143
142
  },
144
143
  clientParams,
145
144
  )
146
145
  }
147
146
  const apiClientParams = Object.assign(
148
147
  {},
149
148
  this.resInfo.apiClientParams,
150
149
  clientParams,
151
150
  )
152
151
  typeof apiClientParams.appid === 'undefined' &&
153
152
  (apiClientParams.appid = this.checkFunctionIdToReturnAppId(functionId))
154
153
  const isColorVerify = this.verifyColorList.includes(functionId)
155
154
  const getReqData = {
156
155
  functionId: functionId,
157
156
  body: JSON.stringify(bodyParams),
158
157
  t: Date.now(),
159
158
  ...apiClientParams,
160
159
  }
161
160
  return http
162
161
  .request({
163
162
  url: this.api.apiFunc,
164
163
  data: getReqData,
165
164
  isColorVerify,
166
165
  })
167
166
  .then((res: ServiceInterFace.RequestPromiseRes) => {
168
167
  const { statusCode, data } = res
169
168
  let changeRes: ServiceInterFace.RequestResponseFormatRes = {
170
169
  ok: true,
171
170
  }
172
171
  if (statusCode === 200 && data) {
173
172
  const resCode = Object.prototype.hasOwnProperty.call(res.data, 'code')
174
173
  ? Number(res.data.code)
175
174
  : -1
176
175
  const subCode = Object.prototype.hasOwnProperty.call(
177
176
  res.data,
178
177
  'subCode',
179
178
  )
180
179
  ? Number(res.data.subCode)
181
180
  : -1
182
181
  if (
183
182
  data.success === true ||
184
183
  data.isSuccess ||
185
184
  resCode === 0 ||
186
185
  resCode === 200 ||
187
186
  subCode === 0
188
187
  ) {
189
188
  changeRes = {
190
189
  result: Object.prototype.hasOwnProperty.call(data, 'result')
191
190
  ? data.result
192
191
  : Object.prototype.hasOwnProperty.call(data, 'data')
193
192
  ? data.data
194
193
  : data,
195
194
  code: data.code || 200,
196
195
  ok: true,
197
196
  source: data,
198
197
  }
199
198
  return changeRes
200
199
  } else {
201
200
  changeRes = {
202
201
  ...data,
203
202
  ok: false,
204
203
  statusCode: res.statusCode,
205
204
  }
206
205
  return changeRes
207
206
  }
208
207
  } else {
209
208
  changeRes = {
210
209
  ...data,
211
210
  ok: false,
212
211
  statusCode: res.statusCode,
213
212
  }
214
213
  return changeRes
215
214
  }
216
215
  })
217
216
  .catch(res => {
218
217
  return {
219
218
  ...res,
220
219
  ok: false,
221
220
  } as ServiceInterFace.RequestResponseFormatRes
222
221
  })
223
222
  }
224
223
 
225
224
  async receiveCoupon(param = {}, clientParams) {
226
225
  const loginType = isPc ? { loginType: 3 } : {}
227
226
  return await this.gatewayReq(
228
227
  'receiveShopCoupon',
229
228
  {
230
229
  operation: '3',
231
230
  ...param,
232
231
  },
233
232
  { ...loginType, ...clientParams },
234
233
  )
235
234
  }
236
235
 
237
236
  getCustomerCenterDispatch(params = {}) {
238
237
  return this.gatewayReq('customerCenterDispatch', params, {
239
238
  clientVersion: '9.2.0',
240
239
  client: 'H5',
241
240
  uuid: 88888,
242
241
  appid: 'shopmember_m_jd_com',
243
242
  })
244
243
  }
245
244
 
246
245
  batchAddCart(...args) {
247
246
  let skuIds, num, showToast, giftCard;
248
247
  if (['number', 'string'].includes(typeof args[0])) {
249
248
  [skuIds, num = 1, showToast = true, giftCard = false] = args;
250
249
  } else if (typeof args[0] === 'object' && args[0] !== null) {
251
250
  const params = args[0];
252
251
  skuIds = params.skuIds;
253
252
  num = params.num || 1;
254
253
  showToast = params.showToast !== undefined ? params.showToast : true;
255
254
  giftCard = params.giftCard !== undefined ? params.giftCard : false;
256
255
  } else {
257
256
  console.error('batchAddCart() Invalid arguments!', args)
258
257
  const msg = isLanguageForEn? 'Please retry later': '加入购物车失败,请稍后重试!'
259
258
  showFailToast({
260
259
  title: msg,
261
260
  });
262
261
  return Promise.resolve({
263
262
  ok: false,
264
263
  msg,
265
264
  });
266
265
  }
267
266
  const addToWhereText = giftCard? '购物清单': '购物车'
268
267
  const successMsg = isLanguageForEn? 'Success': `加入${addToWhereText}成功`
269
268
  const failMsg = isLanguageForEn? 'Please retry later': `加入${addToWhereText}失败,请稍后重试!`
270
269
  if (skuIds) {
271
270
  return this._addShopGoodCart(`${skuIds}`, `${num}`, {giftCard})
272
271
  .then((res: ServiceInterFace.SkuToCartDataRes) => {
273
272
  if (res?.ok) {
274
273
  if (showToast && !res?.isOpenApp)
275
274
  showSuccessToast({
276
275
  title: successMsg,
277
276
  })
278
277
  } else {
279
278
  showToast &&
280
279
  showFailToast({
281
280
  title: res?.errMsg || failMsg,
282
281
  })
283
282
  }
284
283
  return Promise.resolve(res)
285
284
  })
286
285
  .catch((e) => {
287
286
  console.log('调用加购方法异常=======>', e)
288
287
  return Promise.resolve({
289
288
  ok: false,
290
289
  msg: failMsg,
291
290
  })
292
291
  })
293
292
  } else {
294
293
  return Promise.resolve({
295
294
  ok: false,
296
295
  msg: failMsg,
297
296
  })
298
297
  }
299
298
  const loginType = isPc ? { loginType: 3 } : {};
300
299
  return this.gatewayReq(
301
300
  'giftCardAddCart',
302
301
  {
303
302
  skuList,
304
303
  num: Number(num)
305
304
  },
306
305
  { ...loginType},
307
306
  );
308
307
  }
309
308
 
310
309
  _addShopGoodCart(skuIdsStr, addCardNum = '1', {giftCard}) {
311
310
  return new Promise((resolve) => {
312
311
  const productIdsArr = skuIdsStr ? `${skuIdsStr}`.split(',') : []
313
312
  if (productIdsArr.length > 0) {
314
313
  if(giftCard){
315
314
  this.giftCardAddCart(productIdsArr, addCardNum).then((res) => {
316
315
  if(res?.code === '0' && res?.result?.value){
317
316
  resolve({
318
317
  ok: true,
319
318
  })
320
319
  }else{
321
320
  resolve({
322
321
  ok: false,
323
322
  msg: '加购失败,请稍后重试',
324
323
  });
325
324
  }
326
325
  }).catch((e) => {
327
326
  console.error('礼品卡加车失败: ', e);
328
327
  resolve({
329
328
  ok: false,
330
329
  msg: '加购失败,请稍后重试',
331
330
  });
332
331
  });
333
332
  }else if (isJdApp) {
334
333
  console.log('==========>', '原生批量加车!')
335
334
  const nativeAddCartCallBack = `nativeBatchAddCart${Date.now()}`
336
335
  if (!window[nativeAddCartCallBack]) {
337
336
  window[nativeAddCartCallBack] = (res) => {
338
337
  const getMessageJsonData =
339
338
  typeof res === 'string' ? JSON.parse(res) : res
340
339
  console.info(
341
340
  '获取批量加车原始数据',
342
341
  res,
343
342
  '====转换后的json数据为===',
344
343
  getMessageJsonData,
345
344
  )
346
345
  try {
347
346
  if (isAndroidDevice) {
348
347
  getMessageJsonData?.status === '0'
349
348
  ? resolve({
350
349
  ok: true,
351
350
  msg: '已加入购物车!',
352
351
  })
353
352
  : resolve({
354
353
  ok: false,
355
354
  msg: '加购失败,请稍后重试',
356
355
  })
357
356
  } else if (isIosDevice) {
358
357
  getMessageJsonData?.status === '0' &&
359
358
  getMessageJsonData?.data?.code === 0
360
359
  ? resolve({
361
360
  ok: true,
362
361
  msg: '已加入购物车!',
363
362
  })
364
363
  : resolve({
365
364
  ok: false,
366
365
  msg: '批量加车失败,请稍后重试',
367
366
  })
368
367
  } else {
369
368
  resolve({
370
369
  ok: false,
371
370
  msg: '加购失败,请稍后重试',
372
371
  })
373
372
  }
374
373
  } catch (e) {
375
374
  resolve({
376
375
  ok: false,
377
376
  msg: '加购失败,请稍后重试',
378
377
  })
379
378
  console.warn('批量加车转换数据异常', e)
380
379
  }
381
380
  window[nativeAddCartCallBack] = null
382
381
  }
383
382
  }
384
383
  const productsAddCartList = productIdsArr.map((skuItem) => {
385
384
  return isAndroidDevice
386
385
  ? {
387
386
  sku: skuItem,
388
387
  num: addCardNum,
389
388
  }
390
389
  : {
391
390
  productCode: skuItem,
392
391
  buyCount: addCardNum,
393
392
  }
394
393
  })
395
394
  if (isAndroidDevice) {
396
395
  const androidProductsStr = JSON.stringify(productsAddCartList)
397
396
  callRouterAndroid({
398
397
  routerURL: `router://JDCartModule/addCartUniformWithUrl?wareList=${androidProductsStr}&businessName=storeModel`,
399
398
  routerParam: {
400
399
  wareList: productsAddCartList,
401
400
  },
402
401
  callBackName: nativeAddCartCallBack,
403
402
  })
404
403
  } else if (isIosDevice) {
405
404
  if (isLowAppVer) {
406
405
  const lowVersionAppList = productIdsArr.map((skuItem) => {
407
406
  return {
408
407
  sku: skuItem,
409
408
  num: addCardNum,
410
409
  }
411
410
  })
412
411
  const lowVersionAppListStr = JSON.stringify(lowVersionAppList)
413
412
  const url = `openApp.jdMobile://virtual?params={"category":"jump","des":"updateCartNum","sourceValue":"店铺批量加购","sourceType":"h5","businessName":"storeModel","wareList":${lowVersionAppListStr}}`
414
413
  jump.side.jdJumpToWeb(url, {})
415
414
  resolve({
416
415
  ok: true,
417
416
  isOpenApp: true,
418
417
  msg: '加购完成, 加购结果请点击购物车确认',
419
418
  })
420
419
  } else {
421
420
  callRouterIOS({
422
421
  routerURL: 'router://JDCartModule/batchAddService',
423
422
  routerParam: {
424
423
  sourceType: 'h5',
425
424
  sourceValue: '店铺批量加购',
426
425
  businessName: 'storeModel',
427
426
  isNewMode: '1',
428
427
  NotPassWebview: '1',
429
428
  products: productsAddCartList,
430
429
  },
431
430
  callBackName: nativeAddCartCallBack,
432
431
  })
433
432
  }
434
433
  }
435
434
  } else if (isMin) {
436
435
  console.log('==========>', '京购批量加车!')
437
436
  const productsAddCartList = productIdsArr.map((skuItem) => {
438
437
  return {
439
438
  skuId: skuItem,
440
439
  buyNum: addCardNum,
441
440
  }
442
441
  })
443
442
  global.wxAppBizInstance
444
443
  .addCart({ commArr: productsAddCartList })
445
444
  .then((res) => {
446
445
  console.log('dealCartSuccess: ', res)
447
446
  resolve({
448
447
  ok: true,
449
448
  msg: '已加入购物车!',
450
449
  data: res,
451
450
  })
452
451
  })
453
452
  .catch((e) => {
454
453
  console.log('京购小程序批量加车失败dealCartFail: ', e)
455
454
  resolve({
456
455
  ok: false,
457
456
  msg: '加购失败,请稍后重试',
458
457
  })
459
458
  })
460
459
  } else {
461
460
  console.log('==========>', 'M站批量加车!')
462
461
  return this.productAddToCart(skuIdsStr, addCardNum).then((res) =>
463
462
  resolve(res),
464
463
  )
465
464
  }
466
465
  } else {
467
466
  resolve({
468
467
  ok: false,
469
468
  msg: '加购sku不能为空',
470
469
  })
471
470
  }
472
471
  })
473
472
  }
474
473
 
475
474
  productAddToCart(skuIdsStr, num) {
476
475
  return new Promise(resolve => {
477
476
  if (window.AddcartToolObj) {
478
477
  window.AddcartToolObj.addCart({
479
478
  skuId: skuIdsStr,
480
479
  num,
481
480
  source: 'sjdpyw',
482
481
  actId: '1',
483
482
  loginType: window?.isJingGouMiniViewState ? '11' : '2',
484
483
  sucFun(res) {
485
484
  console.log(
486
485
  'ok,接口请求成功,不一定指的加车成功,加车成功需要看返回码errId为0',
487
486
  res,
488
487
  )
489
488
  if (res.errId === '0' && res.cartJson) {
490
489
  resolve({
491
490
  ok: true,
492
491
  msg: '已加入购物车!',
493
492
  ...res,
494
493
  })
495
494
  } else {
496
495
  if (res.errId === '13') {
497
496
  global.doLogin()
498
497
  } else {
499
498
  resolve({
500
499
  ok: false,
501
500
  msg: '加购失败,请稍后重试',
502
501
  ...res,
503
502
  })
504
503
  }
505
504
  }
506
505
  },
507
506
  failFun(err) {
508
507
  console.log('fail', err)
509
508
  resolve({
510
509
  ok: false,
511
510
  msg: '加购失败,请稍后重试',
512
511
  ...err,
513
512
  })
514
513
  },
515
514
  })
516
515
  } else {
517
516
  resolve({
518
517
  ok: false,
519
518
  msg: '购物车方法检查异常',
520
519
  })
521
520
  }
522
521
  })
523
522
  }
524
523
  bMallGetUserInfo = () => {
525
524
  return getBMallUserInfo()
526
525
  }
527
526
  async bMallAddCart(params = {}) {
528
527
  return await this.gatewayReq('bmall_cartAdd', params, {
529
528
  client: 'H5',
530
529
  clientVersion: '5.5.0',
531
530
  })
532
531
  }
533
532
  async bMallChangeCart(params = {}) {
534
533
  return await this.gatewayReq('bmall_cartChange', params, {
535
534
  client: 'H5',
536
535
  clientVersion: '5.5.0',
537
536
  })
538
537
  }
539
538
  async bMallRemoveCart(params = {}) {
540
539
  return await this.gatewayReq(
541
540
  'bmall_cartRemove',
542
541
  params,
543
542
  {
544
543
  client: 'H5',
545
544
  clientVersion: '5.5.0',
546
545
  },
547
546
  )
548
547
  }
549
548
  async bMallGetOmittedProduct(params = {}) {
550
549
  return await this.gatewayReq('bmall_getOmittedProduct', params, {
551
550
  client: 'H5',
552
551
  clientVersion: '5.5.0',
553
552
  })
554
553
  }
555
554
  async bMallAddCartService({ skuId, bMallTag, num, data = {} }) {
556
555
  const params = await getParams({ ...data, skuId, bMallTag, num })
557
556
  return await this.bMallAddCart(params)
558
557
  }
559
558
  async bMallGetSkuNumService(bMallTag = 1) {
560
559
  const params = await getParams({ bMallTag })
561
560
  delete params.operations
562
561
  return await this.bMallGetOmittedProduct(params)
563
562
  }
564
563
  async bMallRemoveCartService({ skuId, bMallTag, num, skuUuid, data = {} }) {
565
564
  let params = await getParams({ ...data, skuId, bMallTag, num, skuUuid })
566
565
  return await this.bMallRemoveCart(params)
567
566
  }
568
567
  async bMallChangeCartService({ skuId, bMallTag, num, skuUuid, data = {} }) {
569
568
  let params = await getParams({ ...data, skuId, bMallTag, num, skuUuid })
570
569
  return await this.bMallChangeCart(params)
571
570
  }
572
571
 
573
572
  async bMallGetSkuNumApi(needRequest = false, bMallTag = 1) {
574
573
  if (!needRequest && isH5 && window?.bMallCartData) {
575
574
  return window?.bMallCartData
576
575
  }
577
576
  const cartData = await this.bMallGetSkuNumService(bMallTag)
578
577
  let items
579
578
  if (cartData.ok && cartData.result) {
580
579
  items = cartData?.result?.items || {}
581
580
  }
582
581
  if (isH5) {
583
582
  window.bMallCartData = items
584
583
  }
585
584
  return items
586
585
  }
587
586
 
588
587
  async bMallCartHandle(goodItem, num) {
589
588
  try {
590
589
  const {
591
590
  skuUuid,
592
591
  limitUpper,
593
592
  limitLower,
594
593
  } = goodItem
595
594
  let cartNum = Number(num)
596
595
  if (limitLower && cartNum && cartNum < limitLower) {
597
596
  cartNum = limitLower
598
597
  } else if (limitUpper && cartNum && cartNum > limitUpper) {
599
598
  cartNum = limitUpper
600
599
  }
601
600
  if (skuUuid && cartNum > 0) {
602
601
  return this.bMallChangeCartService({
603
602
  ...goodItem,
604
603
  skuUuid,
605
604
  num: cartNum,
606
605
  })
607
606
  } else if (!skuUuid && cartNum > 0) {
608
607
  return this.bMallAddCartService({ ...goodItem, num: cartNum })
609
608
  } else if (skuUuid && !cartNum) {
610
609
  return this.bMallRemoveCartService({
611
610
  ...goodItem,
612
611
  skuUuid,
613
612
  num: cartNum,
614
613
  })
615
614
  } else {
616
615
  console.error('参数不全')
617
616
  return false
618
617
  }
619
618
  } catch (e) {
620
619
  console.error(e)
621
620
  }
622
621
  }
622
+ import Taro from '@tarojs/taro';
623
623
  APPID,
624
624
  JshopxColorFunctionIdList,
625
625
  PagesColorFunctionIdList,
626
626
  PAGES_DOMAIN,
627
627
  B2BColorFunctionIdList,
628
628
  MobileVerifyColorList,
629
629
  AppVerifyColorList,
630
630
  JshopxVerifyColorList,
631
631
  BMallVerifyColorList,
632
632
  shopMemberColorFunctionIdList,
633
633
  isLanguageForEn,
634
634
  isJdApp,
635
635
  isIosDevice,
636
636
  isAndroidDevice,
637
637
  showSuccessToast,
638
638
  showFailToast,
639
639
  isH5,
640
640
  isWxMinAndWxapp,
641
641
  isMin,
642
642
  isPc,
643
643
  cookiesStr: '',
644
644
  requestHeaderContentType: {
645
645
  jsonHeader: {
646
646
  'content-type': 'application/json;charset=utf-8',
647
647
  },
648
648
  formDataHeader: {
649
649
  'content-type': 'application/x-www-form-urlencoded',
650
650
  },
651
651
  },
652
652
  requestBaseParam: {
653
653
  data: null,
654
654
  header: {
655
655
  'content-type': 'application/json;charset=utf-8',
656
656
  },
657
657
  },
658
658
  timeOut: 7000,
659
659
  apiClientParams: {
660
660
  clientVersion: isJdApp && jdAppVersionStr !== '' ? jdAppVersionStr : '11.0.0',
661
661
  client: isJdApp ? (isIosDevice ? 'apple' : 'android') : isPc ? 'pc' : 'wh5',
662
662
  area: '1_72_2799_0',
663
663
  screen: `${Math.ceil(window.screen?.width * devicePixelRatio)}*${Math.ceil(
664
664
  window.screen?.height * devicePixelRatio,
665
665
  )}`,
666
666
  uuid: UUID,
667
667
  },
668
668
  public addressFetchInfo: {
669
669
  reqState: boolean;
670
670
  promiseInstance: null | Promise<any>;
671
671
  };
672
672
  public getPromotionConfig: {
673
673
  projectId: null | string | number;
674
674
  pageId: null | string | number;
675
675
  };
676
676
  public resInfo: ServiceInterFace.HttpRequestInfo;
677
677
  public api: ServiceInterFace.HttpApi;
678
678
  public isPageDomain: boolean;
679
679
  public verifyColorList: string[];
680
680
  constructor(opt) {
681
681
  this._init();
682
682
  this.addressFetchInfo = {
683
683
  reqState: false,
684
684
  promiseInstance: null,
685
685
  };
686
686
  this.getPromotionConfig = {
687
687
  projectId: null,
688
688
  pageId: null,
689
689
  };
690
690
  this._userAreaUpdateListen();
691
691
  this.resInfo = this._getResConfig(opt);
692
692
  this.api = api;
693
693
  this.isPageDomain = isH5 ? window?.location?.hostname === PAGES_DOMAIN : false;
694
694
  this.verifyColorList = [
695
695
  ...MobileVerifyColorList,
696
696
  ...AppVerifyColorList,
697
697
  ...JshopxVerifyColorList,
698
698
  ...BMallVerifyColorList,
699
699
  ];
700
700
  }
701
701
  _init(): void {
702
702
  httpInterceptors.forEach((item) => {
703
703
  Taro.addInterceptor((chain) => item(chain));
704
704
  });
705
705
  }
706
706
  _getResConfig(opt = {}): ServiceInterFace.HttpRequestInfo {
707
707
  return Object.assign({}, DefaultConfig, opt);
708
708
  }
709
709
 
710
710
  _userAreaUpdateListen() {
711
711
  Taro.eventCenter.on(TaroEventType.USER_AREA_UPDATE, (area) => {
712
712
  this.updateApiClientParamsResInfo({
713
713
  area,
714
714
  });
715
715
  });
716
716
  }
717
717
  updateApiClientParamsResInfo(opt = {}) {
718
718
  this.resInfo.apiClientParams = {
719
719
  ...this.resInfo.apiClientParams,
720
720
  ...opt,
721
721
  };
722
722
  }
723
723
 
724
724
  checkFunctionIdToReturnAppId(functionId) {
725
725
  if (JshopxColorFunctionIdList.includes(functionId)) {
726
726
  return APPID.JSHOPX_COLOR_APPID;
727
727
  } else if (this.isPageDomain && PagesColorFunctionIdList.includes(functionId)) {
728
728
  return APPID.PAGES_COLOR_APPID;
729
729
  } else if (shopMemberColorFunctionIdList.includes(functionId)) {
730
730
  return APPID.SHOP_MEMBER_COLOR_APPID;
731
731
  } else if (B2BColorFunctionIdList.includes(functionId)) {
732
732
  return APPID.B2B_COLOR_APPID;
733
733
  } else if (isPc) {
734
734
  return APPID.MALL_COLOR_APPID;
735
735
  } else {
736
736
  return APPID.SHOP_COLOR_APPID;
737
737
  }
738
738
  }
739
739
 
740
740
  gatewayReq(functionId: string, bodyParams = {}, clientParams = {}): Promise<any> {
741
741
  if (
742
742
  functionId === 'receiveShopCoupon' &&
743
743
  ((isH5 && (window?.isJingGouMiniViewState || window?.isJingxiMiniViewState)) ||
744
744
  isWxMinAndWxapp)
745
745
  ) {
746
746
  clientParams = Object.assign(
747
747
  {},
748
748
  {
749
749
  loginType: '1',
750
750
  loginWQBiz: WXAPP_BIZ_KEY,
751
751
  },
752
752
  clientParams,
753
753
  );
754
754
  }
755
755
  const apiClientParams = Object.assign({}, this.resInfo.apiClientParams, clientParams);
756
756
  typeof apiClientParams.appid === 'undefined' &&
757
757
  (apiClientParams.appid = this.checkFunctionIdToReturnAppId(functionId));
758
758
  const isColorVerify = this.verifyColorList.includes(functionId);
759
759
  const getReqData = {
760
760
  functionId: functionId,
761
761
  body: JSON.stringify(bodyParams),
762
762
  t: Date.now(),
763
763
  ...apiClientParams,
764
764
  };
765
765
  return http
766
766
  .request({
767
767
  url: this.api.apiFunc,
768
768
  data: getReqData,
769
769
  isColorVerify,
770
770
  })
771
771
  .then((res: ServiceInterFace.RequestPromiseRes) => {
772
772
  const { statusCode, data } = res;
773
773
  let changeRes: ServiceInterFace.RequestResponseFormatRes = {
774
774
  ok: true,
775
775
  };
776
776
  if (statusCode === 200 && data) {
777
777
  const resCode = Object.prototype.hasOwnProperty.call(res.data, 'code')
778
778
  ? Number(res.data.code)
779
779
  : -1;
780
780
  const subCode = Object.prototype.hasOwnProperty.call(res.data, 'subCode')
781
781
  ? Number(res.data.subCode)
782
782
  : -1;
783
783
  if (
784
784
  data.success === true ||
785
785
  data.isSuccess ||
786
786
  resCode === 0 ||
787
787
  resCode === 200 ||
788
788
  subCode === 0
789
789
  ) {
790
790
  changeRes = {
791
791
  result: Object.prototype.hasOwnProperty.call(data, 'result')
792
792
  ? data.result
793
793
  : Object.prototype.hasOwnProperty.call(data, 'data')
794
794
  ? data.data
795
795
  : data,
796
796
  code: data.code || 200,
797
797
  ok: true,
798
798
  source: data,
799
799
  };
800
800
  return changeRes;
801
801
  } else {
802
802
  changeRes = {
803
803
  ...data,
804
804
  ok: false,
805
805
  statusCode: res.statusCode,
806
806
  };
807
807
  return changeRes;
808
808
  }
809
809
  } else {
810
810
  changeRes = {
811
811
  ...data,
812
812
  ok: false,
813
813
  statusCode: res.statusCode,
814
814
  };
815
815
  return changeRes;
816
816
  }
817
817
  })
818
818
  .catch((res) => {
819
819
  return {
820
820
  ...res,
821
821
  ok: false,
822
822
  } as ServiceInterFace.RequestResponseFormatRes;
823
823
  });
824
824
  }
825
825
 
826
826
  async receiveCoupon(param = {}, clientParams) {
827
827
  const loginType = isPc ? { loginType: 3 } : {};
828
828
  return await this.gatewayReq(
829
829
  'receiveShopCoupon',
830
830
  {
831
831
  operation: '3',
832
832
  ...param,
833
833
  },
834
834
  { ...loginType, ...clientParams },
835
835
  );
836
836
  }
837
837
 
838
838
  getCustomerCenterDispatch(params = {}) {
839
839
  return this.gatewayReq('customerCenterDispatch', params, {
840
840
  clientVersion: '9.2.0',
841
841
  client: 'H5',
842
842
  uuid: 88888,
843
843
  appid: 'shopmember_m_jd_com',
844
844
  });
845
845
  }
846
846
 
847
847
  batchAddCart(...args) {
848
848
  let skuIds, num, showToast, giftCard;
849
849
  if (['number', 'string'].includes(typeof args[0])) {
850
850
  [skuIds, num = 1, showToast = true, giftCard = false] = args;
851
851
  } else if (typeof args[0] === 'object' && args[0] !== null) {
852
852
  const params = args[0];
853
853
  skuIds = params.skuIds;
854
854
  num = params.num || 1;
855
855
  showToast = params.showToast !== undefined ? params.showToast : true;
856
856
  giftCard = params.giftCard !== undefined ? params.giftCard : false;
857
857
  } else {
858
858
  console.error('batchAddCart() Invalid arguments!', args);
859
859
  const msg = isLanguageForEn ? 'Please retry later' : '加入购物车失败,请稍后重试!';
860
860
  showFailToast({
861
861
  title: msg,
862
862
  });
863
863
  return Promise.resolve({
864
864
  ok: false,
865
865
  msg,
866
866
  });
867
867
  }
868
868
  const addToWhereText = giftCard ? '购物清单' : '购物车';
869
869
  const successMsg = isLanguageForEn ? 'Success' : `加入${addToWhereText}成功`;
870
870
  const failMsg = isLanguageForEn
871
871
  ? 'Please retry later'
872
872
  : `加入${addToWhereText}失败,请稍后重试!`;
873
873
  if (skuIds) {
874
874
  return this._addShopGoodCart(`${skuIds}`, `${num}`, { giftCard })
875
875
  .then((res: ServiceInterFace.SkuToCartDataRes) => {
876
876
  if (res?.ok) {
877
877
  if (showToast && !res?.isOpenApp)
878
878
  showSuccessToast({
879
879
  title: successMsg,
880
880
  });
881
881
  } else {
882
882
  showToast &&
883
883
  showFailToast({
884
884
  title: res?.errMsg || failMsg,
885
885
  });
886
886
  }
887
887
  return Promise.resolve(res);
888
888
  })
889
889
  .catch((e) => {
890
890
  console.log('调用加购方法异常=======>', e);
891
891
  return Promise.resolve({
892
892
  ok: false,
893
893
  msg: failMsg,
894
894
  });
895
895
  });
896
896
  } else {
897
897
  return Promise.resolve({
898
898
  ok: false,
899
899
  msg: failMsg,
900
900
  });
901
901
  }
902
902
  }
903
903
 
904
904
  async giftCardAddCart(skuList, num) {
905
905
  const loginType = isPc ? { loginType: 3 } : {};
906
906
  return this.gatewayReq(
907
907
  'giftCardAddCart',
908
908
  {
909
909
  skuList,
910
910
  num: Number(num),
911
911
  },
912
912
  { ...loginType },
913
913
  );
914
914
  }
915
915
 
916
916
  _addShopGoodCart(skuIdsStr, addCardNum = '1', { giftCard }) {
917
917
  return new Promise((resolve) => {
918
918
  const productIdsArr = skuIdsStr ? `${skuIdsStr}`.split(',') : [];
919
919
  if (productIdsArr.length > 0) {
920
920
  if (giftCard) {
921
921
  this.giftCardAddCart(productIdsArr, addCardNum)
922
922
  .then((res) => {
923
923
  if (res?.code === '0' && res?.result?.value) {
924
924
  resolve({
925
925
  ok: true,
926
926
  });
927
927
  } else {
928
928
  resolve({
929
929
  ok: false,
930
930
  msg: '加购失败,请稍后重试',
931
931
  });
932
932
  }
933
933
  })
934
934
  .catch((e) => {
935
935
  console.error('礼品卡加车失败: ', e);
936
936
  resolve({
937
937
  ok: false,
938
938
  msg: '加购失败,请稍后重试',
939
939
  });
940
940
  });
941
941
  } else if (isJdApp) {
942
942
  const nativeAddCartCallBack = `nativeBatchAddCart${
943
943
  Date.now() + Number(productIdsArr[0]) + Number(addCardNum)
944
944
  }`;
945
945
  console.log(
946
946
  '==========>',
947
947
  '原生批量加车, 回调方法保证唯一添加skuid和数量,nativeAddCartCallBack',
948
948
  nativeAddCartCallBack,
949
949
  );
950
950
  if (!window[nativeAddCartCallBack]) {
951
951
  window[nativeAddCartCallBack] = (res) => {
952
952
  const getMessageJsonData = typeof res === 'string' ? JSON.parse(res) : res;
953
953
  console.info(
954
954
  '获取批量加车原始数据',
955
955
  res,
956
956
  '====转换后的json数据为===',
957
957
  getMessageJsonData,
958
958
  );
959
959
  try {
960
960
  if (isAndroidDevice) {
961
961
  getMessageJsonData?.status === '0'
962
962
  ? resolve({
963
963
  ok: true,
964
964
  msg: '已加入购物车!',
965
965
  })
966
966
  : resolve({
967
967
  ok: false,
968
968
  msg: '加购失败,请稍后重试',
969
969
  });
970
970
  } else if (isIosDevice) {
971
971
  getMessageJsonData?.status === '0' && getMessageJsonData?.data?.code === 0
972
972
  ? resolve({
973
973
  ok: true,
974
974
  msg: '已加入购物车!',
975
975
  })
976
976
  : resolve({
977
977
  ok: false,
978
978
  msg: '批量加车失败,请稍后重试',
979
979
  });
980
980
  } else {
981
981
  resolve({
982
982
  ok: false,
983
983
  msg: '加购失败,请稍后重试',
984
984
  });
985
985
  }
986
986
  } catch (e) {
987
987
  resolve({
988
988
  ok: false,
989
989
  msg: '加购失败,请稍后重试',
990
990
  });
991
991
  console.warn('批量加车转换数据异常', e);
992
992
  }
993
993
  window[nativeAddCartCallBack] = null;
994
994
  };
995
995
  }
996
996
  const productsAddCartList = productIdsArr.map((skuItem) => {
997
997
  return isAndroidDevice
998
998
  ? {
999
999
  sku: skuItem,
1000
1000
  num: addCardNum,
1001
1001
  }
1002
1002
  : {
1003
1003
  productCode: skuItem,
1004
1004
  buyCount: addCardNum,
1005
1005
  };
1006
1006
  });
1007
1007
  if (isAndroidDevice) {
1008
1008
  const androidProductsStr = JSON.stringify(productsAddCartList);
1009
1009
  callRouterAndroid({
1010
1010
  routerURL: `router://JDCartModule/addCartUniformWithUrl?wareList=${androidProductsStr}&businessName=storeModel`,
1011
1011
  routerParam: {
1012
1012
  wareList: productsAddCartList,
1013
1013
  },
1014
1014
  callBackName: nativeAddCartCallBack,
1015
1015
  });
1016
1016
  } else if (isIosDevice) {
1017
1017
  if (isLowAppVer) {
1018
1018
  const lowVersionAppList = productIdsArr.map((skuItem) => {
1019
1019
  return {
1020
1020
  sku: skuItem,
1021
1021
  num: addCardNum,
1022
1022
  };
1023
1023
  });
1024
1024
  const lowVersionAppListStr = JSON.stringify(lowVersionAppList);
1025
1025
  const url = `openApp.jdMobile://virtual?params={"category":"jump","des":"updateCartNum","sourceValue":"店铺批量加购","sourceType":"h5","businessName":"storeModel","wareList":${lowVersionAppListStr}}`;
1026
1026
  jump.side.jdJumpToWeb(url, {});
1027
1027
  resolve({
1028
1028
  ok: true,
1029
1029
  isOpenApp: true,
1030
1030
  msg: '加购完成, 加购结果请点击购物车确认',
1031
1031
  });
1032
1032
  } else {
1033
1033
  callRouterIOS({
1034
1034
  routerURL: 'router://JDCartModule/batchAddService',
1035
1035
  routerParam: {
1036
1036
  sourceType: 'h5',
1037
1037
  sourceValue: '店铺批量加购',
1038
1038
  businessName: 'storeModel',
1039
1039
  isNewMode: '1',
1040
1040
  NotPassWebview: '1',
1041
1041
  products: productsAddCartList,
1042
1042
  },
1043
1043
  callBackName: nativeAddCartCallBack,
1044
1044
  });
1045
1045
  }
1046
1046
  }
1047
1047
  } else if (isMin) {
1048
1048
  console.log('==========>', '京购批量加车!');
1049
1049
  const productsAddCartList = productIdsArr.map((skuItem) => {
1050
1050
  return {
1051
1051
  skuId: skuItem,
1052
1052
  buyNum: addCardNum,
1053
1053
  };
1054
1054
  });
1055
1055
  global.wxAppBizInstance
1056
1056
  .addCart({ commArr: productsAddCartList })
1057
1057
  .then((res) => {
1058
1058
  console.log('dealCartSuccess: ', res);
1059
1059
  resolve({
1060
1060
  ok: true,
1061
1061
  msg: '已加入购物车!',
1062
1062
  data: res,
1063
1063
  });
1064
1064
  })
1065
1065
  .catch((e) => {
1066
1066
  console.log('京购小程序批量加车失败dealCartFail: ', e);
1067
1067
  resolve({
1068
1068
  ok: false,
1069
1069
  msg: '加购失败,请稍后重试',
1070
1070
  });
1071
1071
  });
1072
1072
  } else {
1073
1073
  console.log('==========>', 'M站批量加车!');
1074
1074
  return this.productAddToCart(skuIdsStr, addCardNum).then((res) => resolve(res));
1075
1075
  }
1076
1076
  } else {
1077
1077
  resolve({
1078
1078
  ok: false,
1079
1079
  msg: '加购sku不能为空',
1080
1080
  });
1081
1081
  }
1082
1082
  });
1083
1083
  }
1084
1084
 
1085
1085
  productAddToCart(skuIdsStr, num) {
1086
1086
  return new Promise((resolve) => {
1087
1087
  if (window.AddcartToolObj) {
1088
1088
  window.AddcartToolObj.addCart({
1089
1089
  skuId: skuIdsStr,
1090
1090
  num,
1091
1091
  source: 'sjdpyw',
1092
1092
  actId: '1',
1093
1093
  loginType: window?.isJingGouMiniViewState ? '11' : '2',
1094
1094
  sucFun(res) {
1095
1095
  console.log('ok,接口请求成功,不一定指的加车成功,加车成功需要看返回码errId为0', res);
1096
1096
  if (res.errId === '0' && res.cartJson) {
1097
1097
  resolve({
1098
1098
  ok: true,
1099
1099
  msg: '已加入购物车!',
1100
1100
  ...res,
1101
1101
  });
1102
1102
  } else {
1103
1103
  if (res.errId === '13') {
1104
1104
  global.doLogin();
1105
1105
  } else {
1106
1106
  resolve({
1107
1107
  ok: false,
1108
1108
  msg: '加购失败,请稍后重试',
1109
1109
  ...res,
1110
1110
  });
1111
1111
  }
1112
1112
  }
1113
1113
  },
1114
1114
  failFun(err) {
1115
1115
  console.log('fail', err);
1116
1116
  resolve({
1117
1117
  ok: false,
1118
1118
  msg: '加购失败,请稍后重试',
1119
1119
  ...err,
1120
1120
  });
1121
1121
  },
1122
1122
  });
1123
1123
  } else {
1124
1124
  resolve({
1125
1125
  ok: false,
1126
1126
  msg: '购物车方法检查异常',
1127
1127
  });
1128
1128
  }
1129
1129
  });
1130
1130
  }
1131
1131
  bMallGetUserInfo = () => {
1132
1132
  return getBMallUserInfo();
1133
1133
  };
1134
1134
  async bMallAddCart(params = {}) {
1135
1135
  return await this.gatewayReq('bmall_cartAdd', params, {
1136
1136
  client: 'H5',
1137
1137
  clientVersion: '5.5.0',
1138
1138
  });
1139
1139
  }
1140
1140
  async bMallChangeCart(params = {}) {
1141
1141
  return await this.gatewayReq('bmall_cartChange', params, {
1142
1142
  client: 'H5',
1143
1143
  clientVersion: '5.5.0',
1144
1144
  });
1145
1145
  }
1146
1146
  async bMallRemoveCart(params = {}) {
1147
1147
  return await this.gatewayReq(
1148
1148
  'bmall_cartRemove',
1149
1149
  params,
1150
1150
  {
1151
1151
  client: 'H5',
1152
1152
  clientVersion: '5.5.0',
1153
1153
  },
1154
1154
  );
1155
1155
  }
1156
1156
  async bMallGetOmittedProduct(params = {}) {
1157
1157
  return await this.gatewayReq('bmall_getOmittedProduct', params, {
1158
1158
  client: 'H5',
1159
1159
  clientVersion: '5.5.0',
1160
1160
  });
1161
1161
  }
1162
1162
  async bMallAddCartService({ skuId, bMallTag, num, data = {} }) {
1163
1163
  const params = await getParams({ ...data, skuId, bMallTag, num });
1164
1164
  return await this.bMallAddCart(params);
1165
1165
  }
1166
1166
  async bMallGetSkuNumService(bMallTag = 1) {
1167
1167
  const params = await getParams({ bMallTag });
1168
1168
  delete params.operations;
1169
1169
  return await this.bMallGetOmittedProduct(params);
1170
1170
  }
1171
1171
  async bMallRemoveCartService({ skuId, bMallTag, num, skuUuid, data = {} }) {
1172
1172
  let params = await getParams({ ...data, skuId, bMallTag, num, skuUuid });
1173
1173
  return await this.bMallRemoveCart(params);
1174
1174
  }
1175
1175
  async bMallChangeCartService({ skuId, bMallTag, num, skuUuid, data = {} }) {
1176
1176
  let params = await getParams({ ...data, skuId, bMallTag, num, skuUuid });
1177
1177
  return await this.bMallChangeCart(params);
1178
1178
  }
1179
1179
 
1180
1180
  async bMallGetSkuNumApi(needRequest = false, bMallTag = 1) {
1181
1181
  if (!needRequest && isH5 && window?.bMallCartData) {
1182
1182
  return window?.bMallCartData;
1183
1183
  }
1184
1184
  const cartData = await this.bMallGetSkuNumService(bMallTag);
1185
1185
  let items;
1186
1186
  if (cartData.ok && cartData.result) {
1187
1187
  items = cartData?.result?.items || {};
1188
1188
  }
1189
1189
  if (isH5) {
1190
1190
  window.bMallCartData = items;
1191
1191
  }
1192
1192
  return items;
1193
1193
  }
1194
1194
 
1195
1195
  async bMallCartHandle(goodItem, num) {
1196
1196
  try {
1197
1197
  const {
1198
1198
  skuUuid,
1199
1199
  limitUpper,
1200
1200
  limitLower,
1201
1201
  } = goodItem;
1202
1202
  let cartNum = Number(num);
1203
1203
  if (limitLower && cartNum && cartNum < limitLower) {
1204
1204
  cartNum = limitLower;
1205
1205
  } else if (limitUpper && cartNum && cartNum > limitUpper) {
1206
1206
  cartNum = limitUpper;
1207
1207
  }
1208
1208
  if (skuUuid && cartNum > 0) {
1209
1209
  return this.bMallChangeCartService({
1210
1210
  ...goodItem,
1211
1211
  skuUuid,
1212
1212
  num: cartNum,
1213
1213
  });
1214
1214
  } else if (!skuUuid && cartNum > 0) {
1215
1215
  return this.bMallAddCartService({ ...goodItem, num: cartNum });
1216
1216
  } else if (skuUuid && !cartNum) {
1217
1217
  return this.bMallRemoveCartService({
1218
1218
  ...goodItem,
1219
1219
  skuUuid,
1220
1220
  num: cartNum,
1221
1221
  });
1222
1222
  } else {
1223
1223
  console.error('参数不全');
1224
1224
  return false;
1225
1225
  }
1226
1226
  } catch (e) {
1227
1227
  console.error(e);
1228
1228
  }
1229
1229
  }