@conecli/cone-render 0.10.1-shop3.4 → 0.10.1-shop3.5

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