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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/common/const.ts +1 -1
  2. package/dist/common/index.h5.ts +1 -1
  3. package/dist/common/index.jd.ts +1 -1
  4. package/dist/common/index.ts +1 -1
  5. package/dist/common/index.weapp.ts +1 -1
  6. package/dist/components/base/CommonFloorHead/index.module.scss +126 -111
  7. package/dist/components/base/CommonFloorHead/index.tsx +1 -1
  8. package/dist/components/base/CustomScrollView/index-back.tsx +1 -0
  9. package/dist/components/base/CustomScrollView/index.tsx +1 -1
  10. package/dist/components/base/Dialog/index.module.scss +11 -0
  11. package/dist/components/base/InViewRender/index.tsx +1 -1
  12. package/dist/components/floorItem.weapp.tsx +1 -1
  13. package/dist/interface/common.ts +1 -1
  14. package/dist/jumpEventReport/const.ts +1 -1
  15. package/dist/jumpEventReport/jdJumpJdApp.ts +1 -1
  16. package/dist/jumpEventReport/web.jd.ts +1 -1
  17. package/dist/libs/taroAppReport.js +2 -2
  18. package/dist/modules/ContainerFloorList/index.h5.module.scss +66 -56
  19. package/dist/modules/ContainerFloorList/index.h5.tsx +1 -1
  20. package/dist/modules/ContainerFloorList/index.tsx +1 -1
  21. package/dist/open/api/shopMember.ts +1 -1
  22. package/dist/sass/app.h5.scss +252 -224
  23. package/dist/service/fetchGateway.ts +1 -1
  24. package/dist/service/fetchGateway.weapp.ts +1 -0
  25. package/dist/service/http/colorSign.ts +1 -1
  26. package/dist/service/http/const.ts +1 -1
  27. package/dist/service/http/h5Http.ts +1 -1
  28. package/dist/service/requestServer.h5.ts +1 -1
  29. package/dist/service/requestServer.ts +1 -1
  30. package/dist/utils/h5Utils.ts +1 -1
  31. package/dist/utils/index.h5.ts +1 -1
  32. package/dist/utils/index.ts +1 -1
  33. package/dist/utils/index.weapp.ts +1 -1
  34. package/dist/utils/jumpExtMapUtil.js +1 -0
  35. package/dist/utils/utils.ts +1 -1
  36. package/package.json +1 -1
@@ -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: '11.0.0',
704
704
  client: 'wh5',
705
705
  area: '1_72_2799_0',
706
706
  screen: `${Math.ceil(
707
707
  getSystemInfo?.screenWidth * devicePixelRatio,
708
708
  )}*${Math.ceil(getSystemInfo?.screenHeight * devicePixelRatio)}`,
709
709
  uuid: UUID,
710
710
  },
711
711
  public addressFetchInfo: {
712
712
  reqState: boolean
713
713
  promiseInstance: null | Promise<any>
714
714
  }
715
715
  public getPromotionConfig: {
716
716
  projectId: null | string | number
717
717
  pageId: null | string | number
718
718
  }
719
719
  public resInfo: ServiceInterFace.HttpRequestInfo
720
720
  public api: ServiceInterFace.HttpApi
721
721
  public isPageDomain: boolean
722
722
  public verifyColorList: string[]
723
723
  constructor(opt) {
724
724
  this._init()
725
725
  this.addressFetchInfo = {
726
726
  reqState: false,
727
727
  promiseInstance: null,
728
728
  }
729
729
  this.getPromotionConfig = {
730
730
  projectId: null,
731
731
  pageId: null,
732
732
  }
733
733
  this._userAreaUpdateListen()
734
734
  this.resInfo = this._getResConfig(opt)
735
735
  this.api = api
736
736
  this.isPageDomain = isH5
737
737
  ? window?.location?.hostname === PAGES_DOMAIN
738
738
  : false
739
739
  this.verifyColorList = [
740
740
  ...MobileVerifyColorList,
741
741
  ...AppVerifyColorList,
742
742
  ...JshopxVerifyColorList,
743
743
  ...BMallVerifyColorList,
744
744
  ]
745
745
  }
746
746
  _init(): void {
747
747
  httpInterceptors.forEach((item) => {
748
748
  Taro.addInterceptor((chain) => item(chain))
749
749
  })
750
750
  }
751
751
  _getResConfig(opt = {}): ServiceInterFace.HttpRequestInfo {
752
752
  return Object.assign({}, DefaultConfig, opt)
753
753
  }
754
754
 
755
755
  _userAreaUpdateListen() {
756
756
  Taro.eventCenter.on(TaroEventType.USER_AREA_UPDATE, (area) => {
757
757
  this.updateApiClientParamsResInfo({
758
758
  area,
759
759
  })
760
760
  })
761
761
  }
762
762
  updateApiClientParamsResInfo(opt = {}) {
763
763
  this.resInfo.apiClientParams = {
764
764
  ...this.resInfo.apiClientParams,
765
765
  ...opt,
766
766
  }
767
767
  }
768
768
 
769
769
  checkFunctionIdToReturnAppId(functionId) {
770
770
  if (JshopxColorFunctionIdList.includes(functionId)) {
771
771
  return APPID.JSHOPX_COLOR_APPID
772
772
  } else if (
773
773
  this.isPageDomain &&
774
774
  PagesColorFunctionIdList.includes(functionId)
775
775
  ) {
776
776
  return APPID.PAGES_COLOR_APPID
777
777
  } else if (shopMemberColorFunctionIdList.includes(functionId)) {
778
778
  return APPID.SHOP_MEMBER_COLOR_APPID
779
779
  } else if (B2BColorFunctionIdList.includes(functionId)) {
780
780
  return APPID.B2B_COLOR_APPID
781
781
  } else if (isPc) {
782
782
  return APPID.MALL_COLOR_APPID
783
783
  } else {
784
784
  return APPID.SHOP_COLOR_APPID
785
785
  }
786
786
  }
787
787
 
788
788
  gatewayReq(
789
789
  functionId: string,
790
790
  bodyParams = {},
791
791
  clientParams = {},
792
792
  ): Promise<any> {
793
793
  if (
794
794
  functionId === 'receiveShopCoupon' &&
795
795
  ((isH5 &&
796
796
  (window?.isJingGouMiniViewState || window?.isJingxiMiniViewState)) ||
797
797
  isWxMinAndWxapp)
798
798
  ) {
799
799
  clientParams = Object.assign(
800
800
  {},
801
801
  {
802
802
  loginType: '1',
803
803
  loginWQBiz: WXAPP_BIZ_KEY,
804
804
  },
805
805
  clientParams,
806
806
  )
807
807
  }
808
808
  const apiClientParams = Object.assign(
809
809
  {},
810
810
  this.resInfo.apiClientParams,
811
811
  clientParams,
812
812
  )
813
813
  typeof apiClientParams.appid === 'undefined' &&
814
814
  (apiClientParams.appid = this.checkFunctionIdToReturnAppId(functionId))
815
815
  const isColorVerify = this.verifyColorList.includes(functionId)
816
816
  const getReqData = {
817
817
  functionId: functionId,
818
818
  body: JSON.stringify(bodyParams),
819
819
  t: Date.now(),
820
820
  ...apiClientParams,
821
821
  }
822
822
  const requestParams = {
823
823
  functionId: getReqData?.functionId,
824
824
  body: getReqData?.body,
825
825
  appid: getReqData?.appid,
826
826
  client: getReqData?.client,
827
827
  clientVersion: getReqData?.clientVersion,
828
828
  area: getReqData?.area,
829
829
  requestTimeStamp: getReqData?.t,
830
830
  }
831
831
  return http
832
832
  .request({
833
833
  url: this.api.apiFunc,
834
834
  data: getReqData,
835
835
  isColorVerify,
836
836
  })
837
837
  .then((res: ServiceInterFace.RequestPromiseRes) => {
838
838
  const { statusCode, data, status, msg } = res
839
839
  let changeRes: ServiceInterFace.RequestResponseFormatRes = {
840
840
  ok: true,
841
841
  }
842
842
  if ((statusCode === 200 || status === '0') && data) {
843
843
  changeRes = this.dealResponseFormatRes(data, getReqData)
844
844
  return changeRes
845
845
  } else {
846
846
  sgmCustomReport({
847
847
  code: getSgmCustomCode('interface_data_error'),
848
848
  msg: {
849
849
  subMsg: '接口请求异常',
850
850
  functionId,
851
851
  statusCode,
852
852
  source: 'remote',
853
853
  status,
854
854
  msg,
855
855
  requestParams,
856
856
  },
857
857
  })
858
858
  draInterfaceCustomReport({
859
859
  ...getReqData,
860
860
  ...res,
861
861
  source: 'remote',
862
862
  })
863
863
  changeRes = {
864
864
  ...data,
865
865
  statusCode,
866
866
  status,
867
867
  msg,
868
868
  ok: false,
869
869
  }
870
870
  return changeRes
871
871
  }
872
872
  })
873
873
  .catch((res) => {
874
874
  const propertyNames = Object.getOwnPropertyNames(res)
875
875
  const resObject = {}
876
876
  propertyNames.forEach((propertyName) => {
877
877
  resObject[propertyName] = res[propertyName]
878
878
  })
879
879
  sgmCustomReport({
880
880
  code: getSgmCustomCode('interface_data_error'),
881
881
  msg: {
882
882
  subMsg: '接口请求错误',
883
883
  functionId,
884
884
  source: 'remote',
885
885
  requestParams,
886
886
  catchError: resObject,
887
887
  },
888
888
  })
889
889
  draInterfaceCustomReport({
890
890
  ...getReqData,
891
891
  ...resObject,
892
892
  source: 'remote',
893
893
  })
894
894
  return {
895
895
  ...resObject,
896
896
  ok: false,
897
897
  } as ServiceInterFace.RequestResponseFormatRes
898
898
  })
899
899
  }
900
900
 
901
901
  dealResponseFormatRes(data, reqData) {
902
902
  let changeRes: ServiceInterFace.RequestResponseFormatRes = {
903
903
  ok: true,
904
904
  }
905
905
  const resCode = Object.prototype.hasOwnProperty.call(data, 'code')
906
906
  ? Number(data.code)
907
907
  : -1
908
908
  const subCode = Object.prototype.hasOwnProperty.call(data, 'subCode')
909
909
  ? Number(data.subCode)
910
910
  : -1
911
911
  if (
912
912
  data.success === true ||
913
913
  data.isSuccess ||
914
914
  resCode === 0 ||
915
915
  resCode === 200 ||
916
916
  subCode === 0
917
917
  ) {
918
918
  changeRes = {
919
919
  result: Object.prototype.hasOwnProperty.call(data, 'result')
920
920
  ? data.result
921
921
  : Object.prototype.hasOwnProperty.call(data, 'data')
922
922
  ? data.data
923
923
  : data,
924
924
  code: data.code ?? 200,
925
925
  ok: true,
926
926
  source: data,
927
927
  }
928
928
  return changeRes
929
929
  } else {
930
930
  changeRes = {
931
931
  ...data,
932
932
  ok: false,
933
933
  }
934
934
  if (reqData && resCode !== 3) {
935
935
  const getReportMsgData = reqData['hybridId']
936
936
  ? {
937
937
  subMsg: '预加载接口请求数据异常',
938
938
  hybridId: reqData?.hybridId,
939
939
  requestId: reqData?.requestId,
940
940
  param: reqData?.param,
941
941
  source: 'remote',
942
942
  }
943
943
  : {
944
944
  subMsg: '接口请求返回数据异常',
945
945
  functionId: reqData?.functionId,
946
946
  code: resCode,
947
947
  source: 'remote',
948
948
  requestParams: {
949
949
  functionId: reqData?.functionId,
950
950
  body: reqData?.body,
951
951
  appid: reqData?.appid,
952
952
  client: reqData?.client,
953
953
  clientVersion: reqData?.clientVersion,
954
954
  area: reqData?.area,
955
955
  requestTimeStamp: reqData?.t,
956
956
  },
957
957
  resData: data,
958
958
  }
959
959
  sgmCustomReport({
960
960
  code: getSgmCustomCode('interface_data_error'),
961
961
  msg: getReportMsgData,
962
962
  })
963
963
  draInterfaceCustomReport({
964
964
  ...reqData,
965
965
  ...data,
966
966
  source: 'remote',
967
967
  })
968
968
  }
969
969
  return changeRes
970
970
  }
971
971
  }
972
972
 
973
973
  async receiveCoupon(param = {}, clientParams) {
974
974
  const loginType = isPc ? { loginType: 3 } : {}
975
975
  return await this.gatewayReq(
976
976
  'receiveShopCoupon',
977
977
  {
978
978
  operation: '3',
979
979
  ...param,
980
980
  },
981
981
  { ...loginType, ...clientParams },
982
982
  )
983
983
  }
984
984
 
985
985
  getCustomerCenterDispatch(params = {}) {
986
986
  return this.gatewayReq('customerCenterDispatch', params, {
987
987
  clientVersion: '9.2.0',
988
988
  client: 'H5',
989
989
  uuid: 88888,
990
990
  appid: 'shopmember_m_jd_com',
991
991
  })
992
992
  }
993
993
 
994
994
  batchAddCart(...args) {
995
995
  let skuIds, num, showToast, giftCard
996
996
  if (['number', 'string'].includes(typeof args[0])) {
997
997
  ;[skuIds, num = 1, showToast = true, giftCard = false] = args
998
998
  } else if (typeof args[0] === 'object' && args[0] !== null) {
999
999
  const params = args[0]
1000
1000
  skuIds = params.skuIds
1001
1001
  num = params.num || 1
1002
1002
  showToast = params.showToast !== undefined ? params.showToast : true
1003
1003
  giftCard = params.giftCard !== undefined ? params.giftCard : false
1004
1004
  } else {
1005
1005
  console.error('batchAddCart() Invalid arguments!', args)
1006
1006
  const msg = isLanguageForEn
1007
1007
  ? 'Please retry later'
1008
1008
  : '加入购物车失败,请稍后重试!'
1009
1009
  showFailToast({
1010
1010
  title: msg,
1011
1011
  })
1012
1012
  return Promise.resolve({
1013
1013
  ok: false,
1014
1014
  msg,
1015
1015
  })
1016
1016
  }
1017
1017
  const addToWhereText = giftCard ? '购物清单' : '购物车'
1018
1018
  const successMsg = isLanguageForEn ? 'Success' : `加入${addToWhereText}成功`
1019
1019
  const failMsg = isLanguageForEn
1020
1020
  ? 'Please retry later'
1021
1021
  : `加入${addToWhereText}失败,请稍后重试!`
1022
1022
  if (skuIds) {
1023
1023
  return this._addShopGoodCart(`${skuIds}`, `${num}`, { giftCard })
1024
1024
  .then((res: ServiceInterFace.SkuToCartDataRes) => {
1025
1025
  if (res?.ok) {
1026
1026
  if (showToast && !res?.isOpenApp)
1027
1027
  showSuccessToast({
1028
1028
  title: successMsg,
1029
1029
  })
1030
1030
  } else {
1031
1031
  showToast &&
1032
1032
  showFailToast({
1033
1033
  title: res?.errMsg || failMsg,
1034
1034
  })
1035
1035
  }
1036
1036
  return Promise.resolve(res)
1037
1037
  })
1038
1038
  .catch((e) => {
1039
1039
  console.log('调用加购方法异常=======>', e)
1040
1040
  return Promise.resolve({
1041
1041
  ok: false,
1042
1042
  msg: failMsg,
1043
1043
  })
1044
1044
  })
1045
1045
  } else {
1046
1046
  return Promise.resolve({
1047
1047
  ok: false,
1048
1048
  msg: failMsg,
1049
1049
  })
1050
1050
  }
1051
1051
  }
1052
1052
 
1053
1053
  async giftCardAddCart(skuList, num) {
1054
1054
  const loginType = isPc ? { loginType: 3 } : {}
1055
1055
  return this.gatewayReq(
1056
1056
  'giftCardAddCart',
1057
1057
  {
1058
1058
  skuList,
1059
1059
  num: Number(num),
1060
1060
  },
1061
1061
  { ...loginType },
1062
1062
  )
1063
1063
  }
1064
1064
 
1065
1065
  _addShopGoodCart(skuIdsStr, addCardNum = '1', { giftCard }) {
1066
1066
  return new Promise((resolve) => {
1067
1067
  const productIdsArr = skuIdsStr ? `${skuIdsStr}`.split(',') : []
1068
1068
  if (productIdsArr.length > 0) {
1069
1069
  if (giftCard) {
1070
1070
  this.giftCardAddCart(productIdsArr, addCardNum)
1071
1071
  .then((res) => {
1072
1072
  if (res?.code === '0' && res?.result?.value) {
1073
1073
  resolve({
1074
1074
  ok: true,
1075
1075
  })
1076
1076
  } else {
1077
1077
  resolve({
1078
1078
  ok: false,
1079
1079
  msg: '加购失败,请稍后重试',
1080
1080
  })
1081
1081
  }
1082
1082
  })
1083
1083
  .catch((e) => {
1084
1084
  console.error('礼品卡加车失败: ', e)
1085
1085
  resolve({
1086
1086
  ok: false,
1087
1087
  msg: '加购失败,请稍后重试',
1088
1088
  })
1089
1089
  })
1090
1090
  } else if (isJdApp) {
1091
1091
  const nativeAddCartCallBack = `nativeBatchAddCart${
1092
1092
  Date.now() + Number(productIdsArr[0]) + Number(addCardNum)
1093
1093
  }`
1094
1094
  console.log(
1095
1095
  '==========>',
1096
1096
  '原生批量加车, 回调方法保证唯一添加skuid和数量,nativeAddCartCallBack',
1097
1097
  nativeAddCartCallBack,
1098
1098
  )
1099
1099
  if (!window[nativeAddCartCallBack]) {
1100
1100
  window[nativeAddCartCallBack] = (res) => {
1101
1101
  const getMessageJsonData =
1102
1102
  typeof res === 'string' ? JSON.parse(res) : res
1103
1103
  console.info(
1104
1104
  '获取批量加车原始数据',
1105
1105
  res,
1106
1106
  '====转换后的json数据为===',
1107
1107
  getMessageJsonData,
1108
1108
  )
1109
1109
  try {
1110
1110
  if (isAndroidDevice) {
1111
1111
  getMessageJsonData?.status === '0'
1112
1112
  ? resolve({
1113
1113
  ok: true,
1114
1114
  msg: '已加入购物车!',
1115
1115
  })
1116
1116
  : resolve({
1117
1117
  ok: false,
1118
1118
  msg: '加购失败,请稍后重试',
1119
1119
  })
1120
1120
  } else if (isIosDevice) {
1121
1121
  getMessageJsonData?.status === '0' &&
1122
1122
  getMessageJsonData?.data?.code === 0
1123
1123
  ? resolve({
1124
1124
  ok: true,
1125
1125
  msg: '已加入购物车!',
1126
1126
  })
1127
1127
  : resolve({
1128
1128
  ok: false,
1129
1129
  msg: '批量加车失败,请稍后重试',
1130
1130
  })
1131
1131
  } else {
1132
1132
  resolve({
1133
1133
  ok: false,
1134
1134
  msg: '加购失败,请稍后重试',
1135
1135
  })
1136
1136
  }
1137
1137
  } catch (e) {
1138
1138
  resolve({
1139
1139
  ok: false,
1140
1140
  msg: '加购失败,请稍后重试',
1141
1141
  })
1142
1142
  console.warn('批量加车转换数据异常', e)
1143
1143
  }
1144
1144
  window[nativeAddCartCallBack] = null
1145
1145
  }
1146
1146
  }
1147
1147
  const productsAddCartList = productIdsArr.map((skuItem) => {
1148
1148
  return isAndroidDevice
1149
1149
  ? {
1150
1150
  sku: skuItem,
1151
1151
  num: addCardNum,
1152
1152
  }
1153
1153
  : {
1154
1154
  productCode: skuItem,
1155
1155
  buyCount: addCardNum,
1156
1156
  }
1157
1157
  })
1158
1158
  if (isAndroidDevice) {
1159
1159
  const androidProductsStr = JSON.stringify(productsAddCartList)
1160
1160
  callRouterAndroid({
1161
1161
  routerURL: `router://JDCartModule/addCartUniformWithUrl?wareList=${androidProductsStr}&businessName=storeModel`,
1162
1162
  routerParam: {
1163
1163
  wareList: productsAddCartList,
1164
1164
  },
1165
1165
  callBackName: nativeAddCartCallBack,
1166
1166
  })
1167
1167
  } else if (isIosDevice) {
1168
1168
  if (isLowAppVer) {
1169
1169
  const lowVersionAppList = productIdsArr.map((skuItem) => {
1170
1170
  return {
1171
1171
  sku: skuItem,
1172
1172
  num: addCardNum,
1173
1173
  }
1174
1174
  })
1175
1175
  const lowVersionAppListStr = JSON.stringify(lowVersionAppList)
1176
1176
  const url = `openApp.jdMobile://virtual?params={"category":"jump","des":"updateCartNum","sourceValue":"店铺批量加购","sourceType":"h5","businessName":"storeModel","wareList":${lowVersionAppListStr}}`
1177
1177
  jump.side.jdJumpToWeb(url, {})
1178
1178
  resolve({
1179
1179
  ok: true,
1180
1180
  isOpenApp: true,
1181
1181
  msg: '加购完成, 加购结果请点击购物车确认',
1182
1182
  })
1183
1183
  } else {
1184
1184
  callRouterIOS({
1185
1185
  routerURL: 'router://JDCartModule/batchAddService',
1186
1186
  routerParam: {
1187
1187
  sourceType: 'h5',
1188
1188
  sourceValue: '店铺批量加购',
1189
1189
  businessName: 'storeModel',
1190
1190
  isNewMode: '1',
1191
1191
  NotPassWebview: '1',
1192
1192
  products: productsAddCartList,
1193
1193
  },
1194
1194
  callBackName: nativeAddCartCallBack,
1195
1195
  })
1196
1196
  }
1197
1197
  }
1198
1198
  } else if (isMin) {
1199
1199
  console.log('==========>', '京购批量加车!')
1200
1200
  const productsAddCartList = productIdsArr.map((skuItem) => {
1201
1201
  return {
1202
1202
  skuId: skuItem,
1203
1203
  buyNum: addCardNum,
1204
1204
  }
1205
1205
  })
1206
1206
  global.wxAppBizInstance
1207
1207
  .addCart({ commArr: productsAddCartList })
1208
1208
  .then((res) => {
1209
1209
  console.log('dealCartSuccess: ', res)
1210
1210
  resolve({
1211
1211
  ok: true,
1212
1212
  msg: '已加入购物车!',
1213
1213
  data: res,
1214
1214
  })
1215
1215
  })
1216
1216
  .catch((e) => {
1217
1217
  console.log('京购小程序批量加车失败dealCartFail: ', e)
1218
1218
  resolve({
1219
1219
  ok: false,
1220
1220
  msg: '加购失败,请稍后重试',
1221
1221
  })
1222
1222
  })
1223
1223
  } else {
1224
1224
  console.log('==========>', 'M站批量加车!')
1225
1225
  return this.productAddToCart(skuIdsStr, addCardNum).then((res) =>
1226
1226
  resolve(res),
1227
1227
  )
1228
1228
  }
1229
1229
  } else {
1230
1230
  resolve({
1231
1231
  ok: false,
1232
1232
  msg: '加购sku不能为空',
1233
1233
  })
1234
1234
  }
1235
1235
  })
1236
1236
  }
1237
1237
 
1238
1238
  productAddToCart(skuIdsStr, num) {
1239
1239
  return new Promise((resolve) => {
1240
1240
  if (window.AddcartToolObj) {
1241
1241
  window.AddcartToolObj.addCart({
1242
1242
  skuId: skuIdsStr,
1243
1243
  num,
1244
1244
  source: 'sjdpyw',
1245
1245
  actId: '1',
1246
1246
  loginType: window?.isJingGouMiniViewState ? '11' : '2',
1247
1247
  sucFun(res) {
1248
1248
  console.log(
1249
1249
  'ok,接口请求成功,不一定指的加车成功,加车成功需要看返回码errId为0',
1250
1250
  res,
1251
1251
  )
1252
1252
  if (res.errId === '0' && res.cartJson) {
1253
1253
  resolve({
1254
1254
  ok: true,
1255
1255
  msg: '已加入购物车!',
1256
1256
  ...res,
1257
1257
  })
1258
1258
  } else {
1259
1259
  if (res.errId === '13') {
1260
1260
  global.doLogin()
1261
1261
  } else {
1262
1262
  resolve({
1263
1263
  ok: false,
1264
1264
  msg: '加购失败,请稍后重试',
1265
1265
  ...res,
1266
1266
  })
1267
1267
  }
1268
1268
  }
1269
1269
  },
1270
1270
  failFun(err) {
1271
1271
  console.log('fail', err)
1272
1272
  resolve({
1273
1273
  ok: false,
1274
1274
  msg: '加购失败,请稍后重试',
1275
1275
  ...err,
1276
1276
  })
1277
1277
  },
1278
1278
  })
1279
1279
  } else {
1280
1280
  resolve({
1281
1281
  ok: false,
1282
1282
  msg: '购物车方法检查异常',
1283
1283
  })
1284
1284
  }
1285
1285
  })
1286
1286
  }
1287
1287
  bMallGetUserInfo = () => {
1288
1288
  return getBMallUserInfo()
1289
1289
  }
1290
1290
  async bMallAddCart(params = {}) {
1291
1291
  return await this.gatewayReq('bmall_cartAdd', params, {
1292
1292
  client: 'H5',
1293
1293
  clientVersion: '5.5.0',
1294
1294
  })
1295
1295
  }
1296
1296
  async bMallChangeCart(params = {}) {
1297
1297
  return await this.gatewayReq('bmall_cartChange', params, {
1298
1298
  client: 'H5',
1299
1299
  clientVersion: '5.5.0',
1300
1300
  })
1301
1301
  }
1302
1302
  async bMallRemoveCart(params = {}) {
1303
1303
  return await this.gatewayReq(
1304
1304
  'bmall_cartRemove',
1305
1305
  params,
1306
1306
  {
1307
1307
  client: 'H5',
1308
1308
  clientVersion: '5.5.0',
1309
1309
  },
1310
1310
  )
1311
1311
  }
1312
1312
  async bMallGetOmittedProduct(params = {}) {
1313
1313
  return await this.gatewayReq('bmall_getOmittedProduct', params, {
1314
1314
  client: 'H5',
1315
1315
  clientVersion: '5.5.0',
1316
1316
  })
1317
1317
  }
1318
1318
  async bMallAddCartService({ skuId, bMallTag, num, data = {} }) {
1319
1319
  const params = await getParams({ ...data, skuId, bMallTag, num })
1320
1320
  return await this.bMallAddCart(params)
1321
1321
  }
1322
1322
  async bMallGetSkuNumService(bMallTag = 1) {
1323
1323
  const params = await getParams({ bMallTag })
1324
1324
  delete params.operations
1325
1325
  return await this.bMallGetOmittedProduct(params)
1326
1326
  }
1327
1327
  async bMallRemoveCartService({ skuId, bMallTag, num, skuUuid, data = {} }) {
1328
1328
  let params = await getParams({ ...data, skuId, bMallTag, num, skuUuid })
1329
1329
  return await this.bMallRemoveCart(params)
1330
1330
  }
1331
1331
  async bMallChangeCartService({ skuId, bMallTag, num, skuUuid, data = {} }) {
1332
1332
  let params = await getParams({ ...data, skuId, bMallTag, num, skuUuid })
1333
1333
  return await this.bMallChangeCart(params)
1334
1334
  }
1335
1335
 
1336
1336
  async bMallGetSkuNumApi(needRequest = false, bMallTag = 1) {
1337
1337
  if (!needRequest && isH5 && window?.bMallCartData) {
1338
1338
  return window?.bMallCartData
1339
1339
  }
1340
1340
  const cartData = await this.bMallGetSkuNumService(bMallTag)
1341
1341
  let items
1342
1342
  if (cartData.ok && cartData.result) {
1343
1343
  items = cartData?.result?.items || {}
1344
1344
  }
1345
1345
  if (isH5) {
1346
1346
  window.bMallCartData = items
1347
1347
  }
1348
1348
  return items
1349
1349
  }
1350
1350
 
1351
1351
  async bMallCartHandle(goodItem, num) {
1352
1352
  try {
1353
1353
  const {
1354
1354
  skuUuid,
1355
1355
  limitUpper,
1356
1356
  limitLower,
1357
1357
  } = goodItem
1358
1358
  let cartNum = Number(num)
1359
1359
  if (limitLower && cartNum && cartNum < limitLower) {
1360
1360
  cartNum = limitLower
1361
1361
  } else if (limitUpper && cartNum && cartNum > limitUpper) {
1362
1362
  cartNum = limitUpper
1363
1363
  }
1364
1364
  if (skuUuid && cartNum > 0) {
1365
1365
  return this.bMallChangeCartService({
1366
1366
  ...goodItem,
1367
1367
  skuUuid,
1368
1368
  num: cartNum,
1369
1369
  })
1370
1370
  } else if (!skuUuid && cartNum > 0) {
1371
1371
  return this.bMallAddCartService({ ...goodItem, num: cartNum })
1372
1372
  } else if (skuUuid && !cartNum) {
1373
1373
  return this.bMallRemoveCartService({
1374
1374
  ...goodItem,
1375
1375
  skuUuid,
1376
1376
  num: cartNum,
1377
1377
  })
1378
1378
  } else {
1379
1379
  console.error('参数不全')
1380
1380
  return false
1381
1381
  }
1382
1382
  } catch (e) {
1383
1383
  console.error(e)
1384
1384
  }
1385
1385
  }