@conecli/cone-render 0.9.1-shop2.2 → 0.9.1-shop2.20

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 (103) hide show
  1. package/dist/api/index.ts +1 -1
  2. package/dist/common/const.ts +1 -1
  3. package/dist/common/environmentType.ts +1 -0
  4. package/dist/common/index.h5.ts +1 -1
  5. package/dist/common/index.jd.ts +1 -1
  6. package/dist/common/index.ts +1 -1
  7. package/dist/common/index.weapp.ts +1 -1
  8. package/dist/common/jdplayerSdk.ts +1 -0
  9. package/dist/common/jssdk.ts +1 -0
  10. package/dist/common/pageType.ts +1 -0
  11. package/dist/common/sgmCustomCode.ts +1 -0
  12. package/dist/common/token/index.h5.ts +1 -1
  13. package/dist/common/token/token.jd.ts +1 -1
  14. package/dist/common/token/token.ts +1 -1
  15. package/dist/common/wxappApi.jd.ts +1 -0
  16. package/dist/components/ErrorBoundary.tsx +1 -1
  17. package/dist/components/base/CountDown/index.tsx +1 -1
  18. package/dist/components/base/CustomScrollView/index.jd.tsx +1 -0
  19. package/dist/components/base/CustomScrollView/index.module.scss +7 -0
  20. package/dist/components/base/CustomScrollView/index.tsx +1 -1
  21. package/dist/components/base/CustomVideo/index.tsx +1 -1
  22. package/dist/components/base/Dialog/index.module.scss +5 -0
  23. package/dist/components/base/Dialog/index.tsx +1 -1
  24. package/dist/components/base/Exposure/index.h5.tsx +1 -1
  25. package/dist/components/base/ExposureSmart/index.h5.tsx +1 -1
  26. package/dist/components/base/ExposureSmart/index.tsx +1 -1
  27. package/dist/components/base/ExposureSmart/reporter.tsx +1 -1
  28. package/dist/components/base/InOrOutViewObserver/index.tsx +1 -1
  29. package/dist/components/base/InViewRender/index.tsx +1 -1
  30. package/dist/components/base/ItemViewExposureSmart/index.tsx +1 -1
  31. package/dist/components/base/LazyLayoutLoad/index.tsx +1 -1
  32. package/dist/components/base/LazyLoadImage/const.ts +1 -1
  33. package/dist/components/base/LazyLoadImage/index.h5.module.scss +23 -20
  34. package/dist/components/base/LazyLoadImage/index.h5.tsx +1 -1
  35. package/dist/components/base/MobileCommonHeader/index.module.scss +17 -0
  36. package/dist/components/base/MobileCommonHeader/index.tsx +1 -0
  37. package/dist/components/base/NetworkDataError/const.ts +1 -1
  38. package/dist/components/base/NetworkDataError/index.module.scss +7 -0
  39. package/dist/components/base/NetworkDataError/index.tsx +1 -1
  40. package/dist/components/base/Price/Double/index.tsx +1 -1
  41. package/dist/components/base/Price/index.tsx +1 -1
  42. package/dist/components/decorate/DecorateFloorModule/index.module.scss +32 -2
  43. package/dist/components/decorate/DecorateFloorModule/index.tsx +1 -1
  44. package/dist/components/decorate/EmptyFloorModule/index.tsx +1 -1
  45. package/dist/components/decorate/PlaceHolder/index.tsx +1 -1
  46. package/dist/components/floorItem.jd.tsx +1 -1
  47. package/dist/components/floorItem.tsx +1 -1
  48. package/dist/components/floorItem.weapp.tsx +1 -1
  49. package/dist/components/isv/Floor/index.tsx +1 -1
  50. package/dist/components/remoteFloorItem.tsx +1 -1
  51. package/dist/interface/common.ts +1 -1
  52. package/dist/interface/component.ts +1 -1
  53. package/dist/interface/jumpEventReport.ts +1 -1
  54. package/dist/interface/service.ts +1 -1
  55. package/dist/interface/utils.ts +1 -1
  56. package/dist/jumpEventReport/base.ts +1 -1
  57. package/dist/jumpEventReport/const.ts +1 -1
  58. package/dist/jumpEventReport/createReportFloorData.ts +1 -1
  59. package/dist/jumpEventReport/index.h5.ts +1 -1
  60. package/dist/jumpEventReport/index.jd.ts +1 -1
  61. package/dist/jumpEventReport/index.weapp.ts +1 -1
  62. package/dist/jumpEventReport/jdJumpJdApp.ts +1 -1
  63. package/dist/jumpEventReport/jumpUrlConfig/base.ts +1 -1
  64. package/dist/jumpEventReport/logEventConfig.ts +1 -1
  65. package/dist/jumpEventReport/web/report.ts +1 -1
  66. package/dist/jumpEventReport/web.base.ts +1 -1
  67. package/dist/jumpEventReport/web.jd.ts +1 -1
  68. package/dist/jumpEventReport/web.jdb.ts +1 -1
  69. package/dist/jumpEventReport/web.jdjch.ts +1 -1
  70. package/dist/jumpEventReport/web.jxwxapp.ts +1 -0
  71. package/dist/jumpEventReport/web.tjapp.ts +1 -0
  72. package/dist/jumpEventReport/web.tjm.ts +1 -0
  73. package/dist/jumpEventReport/web.wxapp.ts +1 -1
  74. package/dist/modules/ContainerFloorList/index.h5.module.scss +18 -1
  75. package/dist/modules/ContainerFloorList/index.h5.tsx +1 -1
  76. package/dist/modules/ContainerFloorList/index.tsx +1 -1
  77. package/dist/open/api/device.ts +1 -1
  78. package/dist/open/api/environment.ts +1 -1
  79. package/dist/open/api/index.ts +1 -1
  80. package/dist/open/api/jump copy.ts +1 -1
  81. package/dist/open/api/request.ts +1 -1
  82. package/dist/open/api/shopMember.ts +1 -1
  83. package/dist/open/api/track.ts +1 -1
  84. package/dist/open/api/util.ts +1 -1
  85. package/dist/open/components/index.ts +1 -1
  86. package/dist/sass/app.h5.scss +49 -3
  87. package/dist/sass/base.scss +57 -0
  88. package/dist/service/fetchGateway.ts +1 -1
  89. package/dist/service/http/const.ts +1 -1
  90. package/dist/service/requestServer.ts +1 -1
  91. package/dist/utils/connectNativeJsBridge.ts +1 -1
  92. package/dist/utils/connectNativeJsBridge.weapp.ts +1 -1
  93. package/dist/utils/draExceptionAndProfile.ts +1 -1
  94. package/dist/utils/h5Utils.ts +1 -1
  95. package/dist/utils/index.h5.ts +1 -1
  96. package/dist/utils/index.ts +1 -1
  97. package/dist/utils/index.weapp.ts +1 -1
  98. package/dist/utils/jm-common.js +1 -1
  99. package/dist/utils/sgmCodeUtils.ts +1 -0
  100. package/dist/utils/taroRenderUtil.ts +1 -1
  101. package/dist/utils/utils.ts +1 -1
  102. package/package.json +1 -1
  103. package/dist/customHooks/useDocumentVisibilitychange.ts +0 -1
@@ -1 +1 @@
1
- import Taro from '@tarojs/taro'
2
1
  SHOP_MENU_ID_TYPE,
3
2
  SHOP_MENU_ID_QUERY_NAME,
4
3
  SECTION_HOME_TAB_TYPE,
5
4
  SECTION_HOME_TAB_NAME_TYPE,
6
5
  SECTION_HOME_TAB_QUERY_TYPE,
7
6
  CHANNEL_TYPE,
8
7
  JDShopViewBusinessPathType,
9
8
  FloorModuleType,
10
9
  RemoteLoadFloorList,
11
10
  getBundleUrl,
12
11
  getBundleFileName,
13
12
  formatPackResult,
14
13
  const resultList: Array<any> = [],
15
14
  arrLen = arr.length
16
15
  if (arrLen) {
17
16
  if (arrLen > size) {
18
17
  for (let i = 0; i < arrLen; i = i + size) {
19
18
  resultList.push(arr.slice(i, i + size))
20
19
  }
21
20
  } else {
22
21
  resultList.push(arr)
23
22
  }
24
23
  }
25
24
  return resultList
26
25
  let _address = ids
27
26
  const _areaAreaSplit = ids.split('.')
28
27
  const _areaAreaSplit2 = ids.split('_')
29
28
  _address = _areaAreaSplit.length === 2 ? _areaAreaSplit[0] : _address
30
29
  _address = _areaAreaSplit2.length === 3 ? `${_areaAreaSplit2}_0` : _address
31
30
  return _address
32
31
  const getValue = `${obj[key]}`.replace(/undefined/,'').replace(/null/,'')
33
32
  paramStr += `${index === 0 ? '' : '&'}${key}=${encodeURIComponent(getValue)}`
34
33
  const result = {}
35
34
  if (
36
35
  !urlOrQueryStr ||
37
36
  ('string' !== typeof urlOrQueryStr && String !== urlOrQueryStr.constructor)
38
37
  ) {
39
38
  return result
40
39
  }
41
40
  if (urlOrQueryStr.indexOf('?') > -1) {
42
41
  const queryStr = urlOrQueryStr.split('?')
43
42
  const queryItemList =
44
43
  queryStr && queryStr.length > 1 ? queryStr[1].split('&') : []
45
44
  const queryItemListLen = queryItemList.length
46
45
  queryItemListLen > 0 &&
47
46
  queryItemList.forEach((item) => {
48
47
  const thisItemList = item.split('=')
49
48
  result[thisItemList[0]] = thisItemList[1]
50
49
  })
51
50
  } else {
52
51
  const queryItemList =
53
52
  urlOrQueryStr.indexOf('&') > -1
54
53
  ? urlOrQueryStr.split('&')
55
54
  : [urlOrQueryStr]
56
55
  const queryItemListLen = queryItemList.length
57
56
  queryItemListLen > 0 &&
58
57
  queryItemList.forEach((item) => {
59
58
  const thisItemList = item.split('=')
60
59
  result[thisItemList[0]] = thisItemList[1]
61
60
  })
62
61
  }
63
62
  return result
64
63
  url: string,
65
64
  size?: {
66
65
  w: number
67
66
  h: number
68
67
  },
69
68
  quality?: number,
70
69
  if (url && size) {
71
70
  const _w = Math.floor(size.w)
72
71
  const _h = Math.floor(size.h)
73
72
  if (url.match(/gif$/i)) {
74
73
  return url
75
74
  } else {
76
75
  if (_w > 0 && _h > 0) {
77
76
  url = url.replace('jfs/', `s${_w}x${_h}_jfs/`)
78
77
  }
79
78
  url += quality != null ? `!q${quality}.dpg` : '.dpg'
80
79
  }
81
80
  }
82
81
  return url
83
82
  url: string,
84
83
  jfsImgInfo: UtilsInterFace.getJfsImageInfo = {},
85
84
  if (url.match(/\.(jpg|png|dpg)$/i)) {
86
85
  const { width, height, quality } = jfsImgInfo
87
86
  if (typeof width === 'number' || typeof height === 'number') {
88
87
  url = url.replace(
89
88
  '/jfs/',
90
89
  `/s${Math.floor(width || 0)}x${Math.floor(height || 0)}_jfs/`,
91
90
  )
92
91
  }
93
92
  if (
94
93
  typeof quality === 'number' &&
95
94
  quality > 0 &&
96
95
  quality < 100 &&
97
96
  url.match(/\.jpg$/i)
98
97
  ) {
99
98
  url += `!q${quality}.dpg`
100
99
  }
101
100
  }
102
101
  return addHttps(url)
103
102
  if(!imgUrl.includes('360buyimg.com')){
104
103
  imgUrl = '//m.360buyimg.com/cms/' + imgUrl
105
104
  }
106
105
  if(quality != 100) imgUrl += /\.png/.test(imgUrl) ? '.dpg' : `!q${quality}`
107
106
  count: number,
108
107
  fixedNum = 2,
109
108
  unit = '万',
110
109
  maxNum = 10000,
111
110
  count = Number(count)
112
111
  if (count > maxNum) {
113
112
  return (count / maxNum).toFixed(fixedNum) + unit
114
113
  }
115
114
  return count
116
115
  key: string,
117
116
  value: string | object,
118
117
  successBack?: any,
119
118
  failBack?: any,
120
119
  return Taro.setStorage({
121
120
  key: key,
122
121
  data: value,
123
122
  success: successBack,
124
123
  fail: failBack,
125
124
  })
126
125
  return Taro.getStorageSync(key)
127
126
  return Taro.removeStorage({
128
127
  key: key,
129
128
  })
130
129
  return Taro.clearStorage()
131
130
  const systemInfo: UtilsInterFace.taroGetSystemInfoSyncRes = getSystemInfo || {
132
131
  platform: '',
133
132
  model: '',
134
133
  system: '',
135
134
  }
136
135
  const isIOS = !!systemInfo.system.match(/ios/i)
137
136
  const isAndroid = !!systemInfo.system.match(/android/i)
138
137
  if (!systemInfo.statusBarHeight) {
139
138
  systemInfo.statusBarHeight = screenHeight - windowHeight - 20
140
139
  systemInfo.navBarExtendHeight = 0
141
140
  } else {
142
141
  if (isIOS) {
143
142
  systemInfo.navBarExtendHeight = 4
144
143
  } else {
145
144
  systemInfo.navBarExtendHeight = 0
146
145
  }
147
146
  }
148
147
  let rect = Taro.getMenuButtonBoundingClientRect
149
148
  ? Taro.getMenuButtonBoundingClientRect()
150
149
  : null
151
150
  if (!rect || !rect.width || !rect.top || !rect.left || !rect.height) {
152
151
  let gap = 0
153
152
  let width = 96
154
153
  if (systemInfo.platform === 'android') {
155
154
  gap = 8
156
155
  width = 96
157
156
  } else if (systemInfo.platform === 'devtools') {
158
157
  if (isIOS) {
159
158
  gap = 5.5
160
159
  } else {
161
160
  gap = 7.5
162
161
  }
163
162
  } else {
164
163
  gap = 4
165
164
  width = 88
166
165
  }
167
166
  rect = {
168
167
  bottom: systemInfo.statusBarHeight + gap + 32,
169
168
  height: 32,
170
169
  left: systemInfo.windowWidth - width - 10,
171
170
  right: systemInfo.windowWidth - 10,
172
171
  top: systemInfo.statusBarHeight + gap,
173
172
  width,
174
173
  }
175
174
  }
176
175
  const gap = rect.top - systemInfo.statusBarHeight
177
176
  systemInfo.navBarTopToStatusBar = gap
178
177
  systemInfo.navBarHeight = 2 * gap + rect.height
179
178
  systemInfo.capsulePosition = rect
180
179
  systemInfo.isIOS = isIOS
181
180
  systemInfo.isAndroid = isAndroid
182
181
  return systemInfo
183
182
  if (str.match(/^\/\//)) {
184
183
  str = 'https:' + str
185
184
  }
186
185
  return str
187
186
  dateTimeOrdate: Date | string | number | null,
188
187
  format = 'yyyy-MM-dd HH:mm:ss',
189
188
  noPadStart = {
190
189
  M: '0',
191
190
  d: '0',
192
191
  H: '0',
193
192
  m: '0',
194
193
  s: '0',
195
194
  },
196
195
  let dateResult = ''
197
196
  const padStarts = Object.assign(
198
197
  {
199
198
  M: '0',
200
199
  d: '0',
201
200
  H: '0',
202
201
  m: '0',
203
202
  s: '0',
204
203
  },
205
204
  noPadStart,
206
205
  )
207
206
  if (dateTimeOrdate) {
208
207
  let changeDateTimeOrdate = dateTimeOrdate
209
208
  const getChangeDateTimeToNumber = Number(changeDateTimeOrdate)
210
209
  if (getChangeDateTimeToNumber) {
211
210
  changeDateTimeOrdate = getChangeDateTimeToNumber
212
211
  } else {
213
212
  changeDateTimeOrdate = `${changeDateTimeOrdate}`.replace(/-/g, '/')
214
213
  }
215
214
  const nowDate =
216
215
  dateTimeOrdate instanceof Date
217
216
  ? dateTimeOrdate
218
217
  : new Date(changeDateTimeOrdate)
219
218
  const dateMap = {
220
219
  y: `${nowDate.getFullYear()}`,
221
220
  M: `${nowDate.getMonth() + 1}`.padStart(2, padStarts['M']),
222
221
  d: `${nowDate.getDate()}`.padStart(2, padStarts['d']),
223
222
  H: `${nowDate.getHours()}`.padStart(2, padStarts['H']),
224
223
  m: `${nowDate.getMinutes()}`.padStart(2, padStarts['m']),
225
224
  s: `${nowDate.getSeconds()}`.padStart(2, padStarts['s']),
226
225
  }
227
226
  const regDate = new RegExp('y+|M+|d+|H+|m+|s+', 'g')
228
227
  const regYear = new RegExp('y')
229
228
  dateResult = format.replace(regDate, (v) => {
230
229
  let changeValue = v
231
230
  if (regYear.test(changeValue)) {
232
231
  const thisYear = dateMap.y
233
232
  const subValueLen = 4 - changeValue.length
234
233
  changeValue = thisYear.substr(subValueLen)
235
234
  } else {
236
235
  const dateKey = v.substr(0, 1)
237
236
  changeValue = dateMap[dateKey]
238
237
  }
239
238
  return changeValue
240
239
  })
241
240
  }
242
241
  return dateResult
243
242
  let timer: any = null
244
243
  let startTime = Date.now()
245
244
  return function () {
246
245
  const curTime = Date.now()
247
246
  const remaining = delay - (curTime - startTime)
248
247
  const context = this
249
248
  const args = arguments
250
249
  clearTimeout(timer)
251
250
  if (remaining <= 0) {
252
251
  func.apply(context, args)
253
252
  startTime = Date.now()
254
253
  } else {
255
254
  timer = setTimeout(func, remaining)
256
255
  }
257
256
  }
258
257
  let context, args, result
259
258
  let timeout = null
260
259
  let previous = 0
261
260
  if (!options) options = {}
262
261
  const later = function () {
263
262
  previous = options.leading === false ? 0 : Date.now()
264
263
  timeout = null
265
264
  result = func.apply(context, args)
266
265
  if (!timeout) context = args = null
267
266
  }
268
267
  return function () {
269
268
  const now = Date.now()
270
269
  if (!previous && options.leading === false) previous = now
271
270
  const remaining = wait - (now - previous)
272
271
  context = this
273
272
  args = arguments
274
273
  if (remaining <= 0 || remaining > wait) {
275
274
  if (timeout) {
276
275
  clearTimeout(timeout)
277
276
  timeout = null
278
277
  }
279
278
  previous = now
280
279
  result = func.apply(context, args)
281
280
  if (!timeout) context = args = null
282
281
  } else if (!timeout && options.trailing !== false) {
283
282
  timeout = setTimeout(later, remaining)
284
283
  }
285
284
  return result
286
285
  }
287
286
  let timer: any = null
288
287
  return function () {
289
288
  const context: any = this
290
289
  const args = arguments
291
290
  timer && clearTimeout(timer)
292
291
  timer = setTimeout(function () {
293
292
  fn.apply(context, args)
294
293
  }, delay)
295
294
  }
296
295
  if (txt) {
297
296
  txt = txt.trim()
298
297
  const reg = new RegExp(/[\d-]+/)
299
298
  const res = reg.exec(txt)
300
299
  if (res && res.length > 0) {
301
300
  let tel = res[0]
302
301
  if (tel && delSeparator) {
303
302
  tel = tel.replace(/-/g, '')
304
303
  }
305
304
  return tel
306
305
  }
307
306
  }
308
307
  return ''
309
308
  if (rgb) {
310
309
  const reg = /^(rgb|RGB)/
311
310
  const color = rgb
312
311
  if (reg.test(color)) {
313
312
  let strHex = '#'
314
313
  const colorArr = color.replace(/(?:\(|\)|rgb|RGB)*/g, '').split(',')
315
314
  for (let i = 0; i < colorArr.length; i++) {
316
315
  let hex = Number(colorArr[i]).toString(16)
317
316
  if (hex === '0') {
318
317
  hex += hex
319
318
  }
320
319
  strHex += hex
321
320
  }
322
321
  return strHex
323
322
  } else {
324
323
  return String(color)
325
324
  }
326
325
  } else {
327
326
  return ''
328
327
  }
329
328
  if (hex) {
330
329
  const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/
331
330
  let color = hex.toLowerCase()
332
331
  if (reg.test(color)) {
333
332
  if (color.length === 4) {
334
333
  let colorNew = '#'
335
334
  for (let i = 1; i < 4; i += 1) {
336
335
  colorNew += color.slice(i, i + 1).concat(color.slice(i, i + 1))
337
336
  }
338
337
  color = colorNew
339
338
  }
340
339
  const colorChange: number[] = []
341
340
  for (let i = 1; i < 7; i += 2) {
342
341
  colorChange.push(parseInt('0x' + color.slice(i, i + 2)))
343
342
  }
344
343
  if (returnList) {
345
344
  return colorChange
346
345
  } else {
347
346
  return 'RGB(' + colorChange.join(',') + ')'
348
347
  }
349
348
  } else {
350
349
  return color
351
350
  }
352
351
  } else {
353
352
  return ''
354
353
  }
355
354
  n: number,
356
355
  m: number,
357
356
  filterNum: number | undefined = undefined,
358
357
  const c = m - n + 1
359
358
  const res = Math.floor(Math.random() * c + n)
360
359
  if (filterNum && filterNum == res) {
361
360
  console.log('随机数二次开始', res, filterNum)
362
361
  return getRandom(n, m, filterNum)
363
362
  } else {
364
363
  return res
365
364
  }
366
365
  wqCookieStr: string
367
366
  wqCookie: {
368
367
  pin?: string
369
368
  visitkey?: string
370
369
  [key: string]: any
371
370
  }
372
371
  const {
373
372
  jdpin,
374
373
  pinStatus,
375
374
  visitkey,
376
375
  unionid,
377
376
  skey,
378
377
  __jda,
379
378
  __jdv,
380
379
  __wga,
381
380
  wxapp_type,
382
381
  appType
383
382
  } = cookie
384
383
  const ret: string[] = []
385
384
  const getUserCookieObj = {}
386
385
  const createUseCookieArr = [
387
386
  jdpin,
388
387
  pinStatus,
389
388
  visitkey,
390
389
  unionid,
391
390
  skey,
392
391
  __jda,
393
392
  __jdv,
394
393
  __wga,
395
394
  wid,
396
395
  wq_skey,
397
396
  wq_uin,
398
397
  wq_auth_token,
399
398
  wxapp_scene,
400
399
  wq_unionid,
401
400
  wxapp_openid,
402
401
  wxapp_version,
403
402
  wxapp_type,
404
403
  appType
405
404
  name = name === 'jdpin' ? 'pin' : name;
406
405
  name === 'pin' && (ret.push(`pt_pin=${encodeURIComponent(value)}`))
407
406
  ret.push(`${name}=${encodeURIComponent(value)}`)
408
407
  getUserCookieObj[name] = value
409
408
  }
410
409
  })
411
410
  return {
412
411
  wqCookieStr: ret.join(';'),
413
412
  wqCookie: getUserCookieObj,
414
413
  }
415
414
  num,
416
415
  widthSize = 375,
417
416
  layoutWidth = windowWidth,
418
417
  const getNum = Number(num)
419
418
  return Math.round((getNum / widthSize) * layoutWidth)
420
419
  let checkState = false
421
420
  const couponFloorModuleType = floorData?.floorExtInfo?.moduleFlag
422
421
  if (couponFloorModuleType === FloorModuleType.COUPON) {
423
422
  try {
424
423
  const dataDefines = getFloorDataToDataDefines(floorData)
425
424
  const couponDataDefine = dataDefines
426
425
  ? dataDefines.filter((item) => {
427
426
  return item.type === 'coupon'
428
427
  })
429
428
  : [],
430
429
  couponList = couponDataDefine[0]?.nodeText?.data
431
430
  ? couponDataDefine[0]?.nodeText?.data
432
431
  : [],
433
432
  couponLength = couponList.length,
434
433
  numShowPerLine = couponDataDefine[0]?.nodeText?.numShowPerLine
435
434
  ? couponDataDefine[0]?.nodeText?.numShowPerLine
436
435
  : 0
437
436
  if (numShowPerLine === 0 && couponLength > 3) {
438
437
  checkState = true
439
438
  }
440
439
  } catch (e) {
441
440
  checkState = false
442
441
  }
443
442
  return checkState
444
443
  }
445
444
  exceptionReportFn
446
445
  if(getFloorData?.floorExtInfo?.floorLoadWay === 2){
447
446
  const getSysFloorToLoadTypeRes = isIsvFloorUseable(getFloorData, exceptionReportFn)
448
447
  !getSysFloorToLoadTypeRes && (getFloorData.floorExtInfo.floorLoadWay = 1)
449
448
  }
450
449
  if(isProd && isWxMinAndWxapp){
451
450
  shopContentContainerListData = shopContentContainerListData.filter(
452
451
  (item) =>
453
452
  item.floors.length > 0 &&
454
453
  !isIsvContainer(item.containerId, shopContentFloorListData, shopContentContainerListData)
455
454
  )
456
455
  }
457
456
  shopContentContainerListData = [].concat(shopContentContainerListData)
458
457
  return {
459
458
  shopContentContainerListData,
460
459
  shopContentFloorListData,
461
460
  }
462
461
  const changeOpts = {
463
462
  title: '',
464
463
  icon: 'success',
465
464
  duration: 1500,
466
465
  mask: true,
467
466
  ...options,
468
467
  }
469
468
  if (changeOpts.title.length > 7) {
470
469
  showNormalToast(options)
471
470
  } else {
472
471
  Taro.showToast(changeOpts as any)
473
472
  }
474
473
  const changeOpts = {
475
474
  title: '',
476
475
  icon: 'error',
477
476
  duration: 1500,
478
477
  mask: true,
479
478
  ...options,
480
479
  }
481
480
  if (changeOpts.title.length > 7) {
482
481
  showNormalToast(options)
483
482
  } else {
484
483
  Taro.showToast(changeOpts as any)
485
484
  }
486
485
  Taro.showToast({
487
486
  title: '',
488
487
  icon: 'none',
489
488
  duration: 1500,
490
489
  mask: true,
491
490
  ...options,
492
491
  })
493
492
  return Taro.showLoading({
494
493
  title: text,
495
494
  })
496
495
  return new Promise(() => {
497
496
  Taro.nextTick(() => {
498
497
  setTimeout(() => {
499
498
  Taro.hideLoading(options)
500
499
  }, 300)
501
500
  })
502
501
  })
503
502
  return CHANNEL_TYPE[JDShopViewBusinessPathType.HOME]
504
503
  const {
505
504
  tabActive = SECTION_HOME_TAB_NAME_TYPE[
506
505
  SECTION_HOME_TAB_TYPE.HOME_WELL_CHOSEN
507
506
  ],
508
507
  sceneId,
509
508
  } = query
510
509
  let changeTabActive = tabActive
511
510
  if (sceneId) {
512
511
  if (isH5) {
513
512
  if (sceneId == '1002') {
514
513
  changeTabActive =
515
514
  SECTION_HOME_TAB_NAME_TYPE[SECTION_HOME_TAB_TYPE.HOME_PRODUCT]
516
515
  }
517
516
  else if (sceneId == '1003') {
518
517
  changeTabActive =
519
518
  SECTION_HOME_TAB_NAME_TYPE[SECTION_HOME_TAB_TYPE.HOME_ACTIVITY]
520
519
  }
521
520
  } else if (isWxMinAndWxapp) {
522
521
  if (sceneId == '1001' || sceneId == '1002') {
523
522
  changeTabActive =
524
523
  SECTION_HOME_TAB_NAME_TYPE[SECTION_HOME_TAB_TYPE.HOME_PRODUCT]
525
524
  }
526
525
  else if (sceneId == '1003') {
527
526
  changeTabActive =
528
527
  SECTION_HOME_TAB_NAME_TYPE[SECTION_HOME_TAB_TYPE.HOME_PROMOTION]
529
528
  }
530
529
  }
531
530
  }
532
531
  if (SECTION_HOME_TAB_QUERY_TYPE[changeTabActive]) {
533
532
  return {
534
533
  menuType: SHOP_MENU_ID_TYPE.HOME,
535
534
  tabActiveType: SECTION_HOME_TAB_QUERY_TYPE[changeTabActive],
536
535
  queryMenuTabActiveStr: `${SHOP_MENU_ID_TYPE.HOME}@${SECTION_HOME_TAB_QUERY_TYPE[changeTabActive]}`,
537
536
  }
538
537
  } else if (SHOP_MENU_ID_QUERY_NAME[changeTabActive]) {
539
538
  return {
540
539
  menuType: SHOP_MENU_ID_QUERY_NAME[changeTabActive],
541
540
  tabActiveType: 0,
542
541
  queryMenuTabActiveStr: `${SHOP_MENU_ID_QUERY_NAME[changeTabActive]}@0`,
543
542
  }
544
543
  } else {
545
544
  return {
546
545
  menuType: SHOP_MENU_ID_TYPE.HOME,
547
546
  tabActiveType: SECTION_HOME_TAB_TYPE.HOME_WELL_CHOSEN,
548
547
  queryMenuTabActiveStr: `${SHOP_MENU_ID_TYPE.HOME}@${SECTION_HOME_TAB_TYPE.HOME_WELL_CHOSEN}`,
549
548
  }
550
549
  }
551
550
  const deleteKeyList = [
552
551
  '$taroTimestamp',
553
552
  'cookie',
554
553
  'wdref',
555
554
  'navStart',
556
555
  'originOpts',
557
556
  'originParams',
558
557
  'originUrl',
559
558
  'referer',
560
559
  'stamp',
561
560
  ]
562
561
  let changeQueryData: any = { ...queryData }
563
562
  const qrCodeScene = changeQueryData?.scene ? changeQueryData?.scene : false
564
563
  const sceneQuery =
565
564
  qrCodeScene && typeof qrCodeScene == 'string'
566
565
  ? parseQueryUrlString(decodeURIComponent(qrCodeScene))
567
566
  : {}
568
567
  changeQueryData = { ...changeQueryData, ...sceneQuery }
569
568
  deleteKeyList.forEach((key) => {
570
569
  changeQueryData[key] && delete changeQueryData[key]
571
570
  })
572
571
  changeQueryData['shopid'] &&
573
572
  (changeQueryData['shopId'] = changeQueryData['shopid']) &&
574
573
  delete changeQueryData['shopid']
575
574
  changeQueryData['venderid'] &&
576
575
  (changeQueryData['venderId'] = changeQueryData['venderid']) &&
577
576
  delete changeQueryData['venderid']
578
577
  changeQueryData['vendorId'] &&
579
578
  (changeQueryData['venderId'] = changeQueryData['vendorId']) &&
580
579
  delete changeQueryData['vendorId']
581
580
  return changeQueryData
582
581
  const modularPackResult = floorData?.floorExtInfo?.modularPackResult
583
582
  const modularPackResultObj = formatPackResult(modularPackResult)
584
583
  const bundleUrl = getBundleUrl(modularPackResultObj)
585
584
  const bundleFileName = getBundleFileName(modularPackResultObj)
586
585
  if (bundleUrl && bundleFileName) {
587
586
  isUsable = true
588
587
  }
589
588
  const objContainer = containerListData.find(
590
589
  (item) => item.containerId === containerId,
591
590
  )
592
591
  return (
593
592
  objContainer?.includeUids?.some((itemUid) => {
594
593
  const objectFloor = floorListData.find(
595
594
  (floorItem) => itemUid === floorItem.uid,
596
595
  )
597
596
  return RemoteLoadFloorList.includes(objectFloor?.floorExtInfo?.moduleFlag)
598
597
  }) ?? false
599
598
  )
600
599
  floorListData,
601
600
  containerListData,
602
601
  exceptionReportFn?,
603
602
  const unableIsvFloorListData = floorListData.filter(
604
603
  (floorItem) =>
605
604
  RemoteLoadFloorList.includes(floorItem?.floorExtInfo?.moduleFlag) &&
606
605
  !isIsvFloorUseable(floorItem, exceptionReportFn),
607
606
  )
608
607
  const unableIsvFloorUidList = unableIsvFloorListData.map(
609
608
  (floorItem) => floorItem.uid,
610
609
  )
611
610
  const unableIsvContainerListData = containerListData.filter(
612
611
  (item) =>
613
612
  item.includeUids &&
614
613
  item.includeUids.every(
615
614
  (itemUid) => unableIsvFloorUidList.indexOf(itemUid) != -1,
616
615
  ),
617
616
  )
618
617
  return unableIsvContainerListData
619
618
  return customObj
620
619
  isChartH5,
621
620
  isH5AndJdShopViewH5Scroll,
622
621
  isMemberPage,
623
622
  isPc,
624
623
  ipLoc_djd,
624
+ import Taro from "@tarojs/taro";
625
625
  SHOP_MENU_ID_TYPE,
626
626
  SHOP_MENU_ID_QUERY_NAME,
627
627
  SECTION_HOME_TAB_TYPE,
628
628
  SECTION_HOME_TAB_NAME_TYPE,
629
629
  SECTION_HOME_TAB_QUERY_TYPE,
630
630
  CHANNEL_TYPE,
631
631
  JDShopViewBusinessPathType,
632
632
  FloorModuleType,
633
633
  RemoteLoadFloorList,
634
634
  FLOOR_KIND
635
635
  getBundleUrl,
636
636
  getBundleFileName,
637
637
  formatPackResult,
638
638
  getTaroVersion,
639
639
  SgmCustomCode,
640
640
  NO_ENVIRONMENT_AND_PAGE_TYPE_FLAG,
641
641
  if(isH5){
642
642
  const avifCache = getTaroStorageKeyValue(KEY_AVIF)
643
643
  if(avifCache === null || avifCache === '' || forceUpdate){
644
644
  const img = new Image()
645
645
  img.onload = function() {
646
646
  if (img.height > 0 && img.width > 0) {
647
647
  setTaroStorage(KEY_AVIF, '1')
648
648
  } else {
649
649
  setTaroStorage(KEY_AVIF, '0')
650
650
  }
651
651
  }
652
652
  img.onerror = () => {
653
653
  setTaroStorage(KEY_AVIF, '0')
654
654
  }
655
655
  img.src = 'data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAAB0AAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAIAAAACAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQ0MAAAAABNjb2xybmNseAACAAIAAYAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAACVtZGF0EgAKCBgANogQEAwgMg8f8D///8WfhwB8+ErK42A=';
656
656
  }
657
657
  const webpCache = getTaroStorageKeyValue(KEY_WEBP)
658
658
  if(webpCache === null || webpCache === '' || forceUpdate){
659
659
  const img = new Image()
660
660
  img.onload = function() {
661
661
  if (img.height > 0 && img.width > 0) {
662
662
  setTaroStorage(KEY_WEBP, '1')
663
663
  } else {
664
664
  setTaroStorage(KEY_WEBP, '0')
665
665
  }
666
666
  }
667
667
  img.onerror = () => {
668
668
  setTaroStorage(KEY_WEBP, '0')
669
669
  }
670
670
  img.src = 'data:image/webp;base64,UklGRiQAAABXRUJQVlA4IBgAAAAwAQCdASoBAAEAAUAmJaQAA3AA/vz0AAA=';
671
671
  }
672
672
  }
673
673
  imageFormatSupport(false)
674
674
  setTimeout(imageFormatSupport, 5000)
675
675
  const resultList: Array<any> = [],
676
676
  arrLen = arr.length
677
677
  if (arrLen) {
678
678
  if (arrLen > size) {
679
679
  for (let i = 0; i < arrLen; i = i + size) {
680
680
  resultList.push(arr.slice(i, i + size))
681
681
  }
682
682
  } else {
683
683
  resultList.push(arr)
684
684
  }
685
685
  }
686
686
  return resultList
687
687
  let _address = ids;
688
688
  const _areaAreaSplit = ids.split(".");
689
689
  const _areaAreaSplit2 = ids.split("_");
690
690
  _address = _areaAreaSplit.length === 2 ? _areaAreaSplit[0] : _address;
691
691
  _address = _areaAreaSplit2.length === 3 ? `${_areaAreaSplit2}_0` : _address;
692
692
  return _address;
693
693
  let paramStr = "";
694
694
  obj &&
695
695
  Object.keys(obj).forEach((key, index) => {
696
696
  const getValue = `${obj[key]}`
697
697
  .replace(/undefined/, "")
698
698
  .replace(/null/, "");
699
699
  paramStr += `${index === 0 ? "" : "&"}${key}=${encodeURIComponent(
700
700
  getValue
701
701
  )}`;
702
702
  });
703
703
  return paramStr;
704
704
  const result = {};
705
705
  if (
706
706
  !urlOrQueryStr ||
707
707
  ("string" !== typeof urlOrQueryStr && String !== urlOrQueryStr.constructor)
708
708
  ) {
709
709
  return result;
710
710
  }
711
711
  if (urlOrQueryStr.indexOf("?") > -1) {
712
712
  const queryStr = urlOrQueryStr.split("?");
713
713
  const queryItemList =
714
714
  queryStr && queryStr.length > 1 ? queryStr[1].split("&") : [];
715
715
  const queryItemListLen = queryItemList.length;
716
716
  queryItemListLen > 0 &&
717
717
  queryItemList.forEach((item) => {
718
718
  const thisItemList = item.split("=");
719
719
  result[thisItemList[0]] = thisItemList[1];
720
720
  });
721
721
  } else {
722
722
  const queryItemList =
723
723
  urlOrQueryStr.indexOf("&") > -1
724
724
  ? urlOrQueryStr.split("&")
725
725
  : [urlOrQueryStr];
726
726
  const queryItemListLen = queryItemList.length;
727
727
  queryItemListLen > 0 &&
728
728
  queryItemList.forEach((item) => {
729
729
  const thisItemList = item.split("=");
730
730
  result[thisItemList[0]] = thisItemList[1];
731
731
  });
732
732
  }
733
733
  return result;
734
734
  url: string,
735
735
  size?: {
736
736
  w: number;
737
737
  h: number;
738
738
  },
739
739
  quality?: number
740
740
  if (url && size) {
741
741
  const _w = Math.floor(size.w);
742
742
  const _h = Math.floor(size.h);
743
743
  if (url.match(/gif$/i)) {
744
744
  return url;
745
745
  } else {
746
746
  if (_w > 0 && _h > 0) {
747
747
  url = url.replace("jfs/", `s${_w}x${_h}_jfs/`);
748
748
  }
749
749
  url += quality != null ? `!q${quality}.dpg` : ".dpg";
750
750
  }
751
751
  }
752
752
  return url;
753
753
  url: string,
754
754
  jfsImgInfo: UtilsInterFace.getJfsImageInfo = {}
755
755
  if (url.match(/\.(jpg|png|dpg)$/i)) {
756
756
  const { width, height, quality } = jfsImgInfo;
757
757
  if (typeof width === "number" || typeof height === "number") {
758
758
  url = url.replace(
759
759
  "/jfs/",
760
760
  `/s${Math.floor(width || 0)}x${Math.floor(height || 0)}_jfs/`
761
761
  );
762
762
  }
763
763
  if (
764
764
  typeof quality === "number" &&
765
765
  quality > 0 &&
766
766
  quality < 100 &&
767
767
  url.match(/\.jpg$/i)
768
768
  ) {
769
769
  url += `!q${quality}.dpg`;
770
770
  }
771
771
  }
772
772
  return addHttps(url);
773
773
  if (imgUrl) {
774
774
  if (
775
775
  !imgUrl.match(
776
776
  /(storage\.360buyimg\.com)|(jdcloud-oss\.com)|(imgcps\.jd\.com)|((\w+)\.300hu\.com)|(thirdwx\.qlogo\.cn)|(!q)|gif|dpg$/i
777
777
  )
778
778
  ) {
779
779
  if (!imgUrl.includes("360buyimg.com")) {
780
780
  imgUrl = "//m.360buyimg.com/cms/" + imgUrl;
781
781
  }
782
782
  if (quality != 100)
783
783
  imgUrl += /\.png/.test(imgUrl) ? ".dpg" : `!q${quality}`;
784
784
  }
785
785
  imgUrl = imgUrl.match(/^\/\//) ? `https:${imgUrl}` : imgUrl;
786
786
  }
787
787
  return imgUrl;
788
788
  const result = value % step
789
789
  return result === 0? value: (Math.ceil(value / step) * step)
790
790
  const MAX = 3.5
791
791
  return Math.min(window?.devicePixelRatio ?? 2, MAX)
792
792
  isSkuImage: boolean,
793
793
  size: number
794
794
  if (!imgUrl) {
795
795
  console.error('The input parameter imageUrl for the getQualityImage() cannot be empty!')
796
796
  return imgUrl
797
797
  }
798
798
  if(isIgnoreOptimizeFromServer){
799
799
  imgUrl = imgUrl.replace(/\.(jpe?g|png).*/, '.$1')
800
800
  }
801
801
  if(!/^((https?):)?\/\//.test(imgUrl)){
802
802
  imgUrl = '//m.360buyimg.com/cms/' + imgUrl
803
803
  }
804
804
  const imgServerRegExp = /(img|m)\d{0,2}\.360buyimg\.com\/.*\.(jpe?g|png)/i
805
805
  if (!imgServerRegExp.test(imgUrl)) {
806
806
  return imgUrl
807
807
  }
808
808
  const {isSkuImage, size} = options || {}
809
809
  const needReduceSize = isSkuImage && size
810
810
  if (needReduceSize){
811
811
  const devicePixelRatio = getDevicePixelRatio()
812
812
  const useWidth = getValueByStep(size * devicePixelRatio, 40)
813
813
  imgUrl = imgUrl.replace(/\/[^\/]*jfs\//, `/s${useWidth}x${useWidth}_jfs/`)
814
814
  }
815
815
  const needCompress = !global?.info?.pageInfo?.isVipShop
816
816
  const result = imgUrl.match(/\/\w+\.(jpe?g|png)$/)
817
817
  if(needCompress && result){
818
818
  if(getAvifSupport() === '1'){
819
819
  imgUrl += '.avif'
820
820
  }else if(getWebpSupport() === '1'){
821
821
  imgUrl += '.webp'
822
822
  }else if(/jpe?g/.test(result[1])){
823
823
  imgUrl += '!q80'
824
824
  }
825
825
  }
826
826
  if (needReduceSize){
827
827
  imgUrl += '!z2'
828
828
  }
829
829
  if(!imgUrl.includes('360buyimg.com')){
830
830
  imgUrl = '//m.360buyimg.com/cms/' + imgUrl
831
831
  }
832
832
  if(quality != 100) imgUrl += /\.png/.test(imgUrl) ? '.dpg' : `!q${quality}`
833
833
  return getTaroStorageKeyValue(KEY_AVIF) || '0'
834
834
  return getTaroStorageKeyValue(KEY_WEBP) || '0'
835
835
  count: number,
836
836
  fixedNum = 1,
837
837
  unit = "万",
838
838
  maxNum = 10000
839
839
  count = Number(count);
840
840
  const getMaxNum = count > 100000000 ? 100000000 : maxNum
841
841
  const getUnit = count > 100000000 ? '亿' : unit
842
842
  if (count >= getMaxNum) {
843
843
  return (count / getMaxNum).toFixed(fixedNum) + getUnit;
844
844
  }
845
845
  return count;
846
846
  const systemInfo: UtilsInterFace.taroGetSystemInfoSyncRes = getSystemInfo || {
847
847
  platform: "",
848
848
  model: "",
849
849
  system: "",
850
850
  };
851
851
  const isIOS = !!systemInfo.system.match(/ios/i);
852
852
  const isAndroid = !!systemInfo.system.match(/android/i);
853
853
  if (!systemInfo.statusBarHeight) {
854
854
  systemInfo.statusBarHeight = screenHeight - windowHeight - 20;
855
855
  systemInfo.navBarExtendHeight = 0;
856
856
  } else {
857
857
  if (isIOS) {
858
858
  systemInfo.navBarExtendHeight = 4;
859
859
  } else {
860
860
  systemInfo.navBarExtendHeight = 0;
861
861
  }
862
862
  }
863
863
  let rect = Taro.getMenuButtonBoundingClientRect
864
864
  ? Taro.getMenuButtonBoundingClientRect()
865
865
  : null;
866
866
  if (!rect || !rect.width || !rect.top || !rect.left || !rect.height) {
867
867
  let gap = 0;
868
868
  let width = 96;
869
869
  if (systemInfo.platform === "android") {
870
870
  gap = 8;
871
871
  width = 96;
872
872
  } else if (systemInfo.platform === "devtools") {
873
873
  if (isIOS) {
874
874
  gap = 5.5;
875
875
  } else {
876
876
  gap = 7.5;
877
877
  }
878
878
  } else {
879
879
  gap = 4;
880
880
  width = 88;
881
881
  }
882
882
  rect = {
883
883
  bottom: systemInfo.statusBarHeight + gap + 32,
884
884
  height: 32,
885
885
  left: systemInfo.windowWidth - width - 10,
886
886
  right: systemInfo.windowWidth - 10,
887
887
  top: systemInfo.statusBarHeight + gap,
888
888
  width,
889
889
  };
890
890
  }
891
891
  const gap = rect.top - systemInfo.statusBarHeight;
892
892
  systemInfo.navBarTopToStatusBar = gap;
893
893
  systemInfo.navBarHeight = 2 * gap + rect.height;
894
894
  systemInfo.capsulePosition = rect;
895
895
  systemInfo.isIOS = isIOS;
896
896
  systemInfo.isAndroid = isAndroid;
897
897
  return systemInfo;
898
898
  if (str.match(/^\/\//)) {
899
899
  str = "https:" + str;
900
900
  }
901
901
  return str;
902
902
  dateTimeOrdate: Date | string | number | null,
903
903
  format = "yyyy-MM-dd HH:mm:ss",
904
904
  noPadStart = {
905
905
  M: "0",
906
906
  d: "0",
907
907
  H: "0",
908
908
  m: "0",
909
909
  s: "0",
910
910
  }
911
911
  let dateResult = "";
912
912
  const padStarts = Object.assign(
913
913
  {
914
914
  M: "0",
915
915
  d: "0",
916
916
  H: "0",
917
917
  m: "0",
918
918
  s: "0",
919
919
  },
920
920
  noPadStart
921
921
  );
922
922
  if (dateTimeOrdate) {
923
923
  let changeDateTimeOrdate = dateTimeOrdate;
924
924
  const getChangeDateTimeToNumber = Number(changeDateTimeOrdate);
925
925
  if (getChangeDateTimeToNumber) {
926
926
  changeDateTimeOrdate = getChangeDateTimeToNumber;
927
927
  } else {
928
928
  changeDateTimeOrdate = `${changeDateTimeOrdate}`
929
929
  .replace(/-/g, "/")
930
930
  .replace(/\./g, "/");
931
931
  }
932
932
  const nowDate =
933
933
  dateTimeOrdate instanceof Date
934
934
  ? dateTimeOrdate
935
935
  : new Date(changeDateTimeOrdate);
936
936
  const dateMap = {
937
937
  y: `${nowDate.getFullYear()}`,
938
938
  M: `${nowDate.getMonth() + 1}`.padStart(2, padStarts["M"]),
939
939
  d: `${nowDate.getDate()}`.padStart(2, padStarts["d"]),
940
940
  H: `${nowDate.getHours()}`.padStart(2, padStarts["H"]),
941
941
  m: `${nowDate.getMinutes()}`.padStart(2, padStarts["m"]),
942
942
  s: `${nowDate.getSeconds()}`.padStart(2, padStarts["s"]),
943
943
  };
944
944
  const regDate = new RegExp("y+|M+|d+|H+|m+|s+", "g");
945
945
  const regYear = new RegExp("y");
946
946
  dateResult = format.replace(regDate, (v) => {
947
947
  let changeValue = v;
948
948
  if (regYear.test(changeValue)) {
949
949
  const thisYear = dateMap.y;
950
950
  const subValueLen = 4 - changeValue.length;
951
951
  changeValue = thisYear.substr(subValueLen);
952
952
  } else {
953
953
  const dateKey = v.substr(0, 1);
954
954
  changeValue = dateMap[dateKey];
955
955
  }
956
956
  return changeValue;
957
957
  });
958
958
  }
959
959
  return dateResult;
960
960
  let timer: any = null;
961
961
  let startTime = Date.now();
962
962
  return function () {
963
963
  const curTime = Date.now();
964
964
  const remaining = delay - (curTime - startTime);
965
965
  const context = this;
966
966
  const args = arguments;
967
967
  clearTimeout(timer);
968
968
  if (remaining <= 0) {
969
969
  func.apply(context, args);
970
970
  startTime = Date.now();
971
971
  } else {
972
972
  timer = setTimeout(func, remaining);
973
973
  }
974
974
  };
975
975
  let context, args, result;
976
976
  let timeout = null;
977
977
  let previous = 0;
978
978
  if (!options) options = {};
979
979
  const later = function () {
980
980
  previous = options.leading === false ? 0 : Date.now();
981
981
  timeout = null;
982
982
  result = func.apply(context, args);
983
983
  if (!timeout) context = args = null;
984
984
  };
985
985
  return function () {
986
986
  const now = Date.now();
987
987
  if (!previous && options.leading === false) previous = now;
988
988
  const remaining = wait - (now - previous);
989
989
  context = this;
990
990
  args = arguments;
991
991
  if (remaining <= 0 || remaining > wait) {
992
992
  if (timeout) {
993
993
  clearTimeout(timeout);
994
994
  timeout = null;
995
995
  }
996
996
  previous = now;
997
997
  result = func.apply(context, args);
998
998
  if (!timeout) context = args = null;
999
999
  } else if (!timeout && options.trailing !== false) {
1000
1000
  timeout = setTimeout(later, remaining);
1001
1001
  }
1002
1002
  return result;
1003
1003
  };
1004
1004
  let timer: any = null;
1005
1005
  return function () {
1006
1006
  const context: any = this;
1007
1007
  const args = arguments;
1008
1008
  timer && clearTimeout(timer);
1009
1009
  timer = setTimeout(function () {
1010
1010
  fn.apply(context, args);
1011
1011
  }, delay);
1012
1012
  };
1013
1013
  if (txt) {
1014
1014
  txt = txt.trim();
1015
1015
  const reg = new RegExp(/[\d-]+/);
1016
1016
  const res = reg.exec(txt);
1017
1017
  if (res && res.length > 0) {
1018
1018
  let tel = res[0];
1019
1019
  if (tel && delSeparator) {
1020
1020
  tel = tel.replace(/-/g, "");
1021
1021
  }
1022
1022
  return tel;
1023
1023
  }
1024
1024
  }
1025
1025
  return "";
1026
1026
  if (rgb) {
1027
1027
  const reg = /^(rgb|RGB)/;
1028
1028
  const color = rgb;
1029
1029
  if (reg.test(color)) {
1030
1030
  let strHex = "#";
1031
1031
  const colorArr = color.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(",");
1032
1032
  for (let i = 0; i < colorArr.length; i++) {
1033
1033
  let hex = Number(colorArr[i]).toString(16);
1034
1034
  if (hex === "0") {
1035
1035
  hex += hex;
1036
1036
  }
1037
1037
  strHex += hex;
1038
1038
  }
1039
1039
  return strHex;
1040
1040
  } else {
1041
1041
  return String(color);
1042
1042
  }
1043
1043
  } else {
1044
1044
  return "";
1045
1045
  }
1046
1046
  if (hex) {
1047
1047
  const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
1048
1048
  let color = hex.toLowerCase();
1049
1049
  if (reg.test(color)) {
1050
1050
  if (color.length === 4) {
1051
1051
  let colorNew = "#";
1052
1052
  for (let i = 1; i < 4; i += 1) {
1053
1053
  colorNew += color.slice(i, i + 1).concat(color.slice(i, i + 1));
1054
1054
  }
1055
1055
  color = colorNew;
1056
1056
  }
1057
1057
  const colorChange: number[] = [];
1058
1058
  for (let i = 1; i < 7; i += 2) {
1059
1059
  colorChange.push(parseInt("0x" + color.slice(i, i + 2)));
1060
1060
  }
1061
1061
  if (returnList) {
1062
1062
  return colorChange;
1063
1063
  } else {
1064
1064
  return "RGB(" + colorChange.join(",") + ")";
1065
1065
  }
1066
1066
  } else {
1067
1067
  return color;
1068
1068
  }
1069
1069
  } else {
1070
1070
  return "";
1071
1071
  }
1072
1072
  n: number,
1073
1073
  m: number,
1074
1074
  filterNum: number | undefined = undefined
1075
1075
  const c = m - n + 1;
1076
1076
  const res = Math.floor(Math.random() * c + n);
1077
1077
  if (filterNum && filterNum == res) {
1078
1078
  console.log("随机数二次开始", res, filterNum);
1079
1079
  return getRandom(n, m, filterNum);
1080
1080
  } else {
1081
1081
  return res;
1082
1082
  }
1083
1083
  wqCookieStr: string;
1084
1084
  wqCookie: {
1085
1085
  pin?: string;
1086
1086
  visitkey?: string;
1087
1087
  [key: string]: any;
1088
1088
  };
1089
1089
  const {
1090
1090
  jdpin,
1091
1091
  pinStatus,
1092
1092
  visitkey,
1093
1093
  unionid,
1094
1094
  skey,
1095
1095
  __jda,
1096
1096
  __jdv,
1097
1097
  __wga,
1098
1098
  wid,
1099
1099
  wq_skey,
1100
1100
  wq_uin,
1101
1101
  wq_auth_token,
1102
1102
  wxapp_scene,
1103
1103
  wq_unionid,
1104
1104
  wxapp_openid,
1105
1105
  wxapp_version,
1106
1106
  wxapp_type,
1107
1107
  appType,
1108
1108
  } = cookie;
1109
1109
  const ret: string[] = [];
1110
1110
  const getUserCookieObj = {};
1111
1111
  const createUseCookieArr = [
1112
1112
  jdpin,
1113
1113
  pinStatus,
1114
1114
  visitkey,
1115
1115
  unionid,
1116
1116
  skey,
1117
1117
  __jda,
1118
1118
  __jdv,
1119
1119
  __wga,
1120
1120
  wid,
1121
1121
  wq_skey,
1122
1122
  wq_uin,
1123
1123
  wq_auth_token,
1124
1124
  wxapp_scene,
1125
1125
  wq_unionid,
1126
1126
  wxapp_openid,
1127
1127
  wxapp_version,
1128
1128
  wxapp_type,
1129
1129
  appType,
1130
1130
  ];
1131
1131
  createUseCookieArr.forEach((keyItem) => {
1132
1132
  if (keyItem && keyItem["name"]) {
1133
1133
  let { name, value } = keyItem;
1134
1134
  name = name === "jdpin" ? "pin" : name;
1135
1135
  name === "pin" && ret.push(`pt_pin=${encodeURIComponent(value)}`);
1136
1136
  ret.push(`${name}=${encodeURIComponent(value)}`);
1137
1137
  getUserCookieObj[name] = value;
1138
1138
  }
1139
1139
  });
1140
1140
  return {
1141
1141
  wqCookieStr: ret.join(";"),
1142
1142
  wqCookie: getUserCookieObj,
1143
1143
  };
1144
1144
  num,
1145
1145
  widthSize = 375,
1146
1146
  layoutWidth = windowWidth
1147
1147
  const getNum = Number(num);
1148
1148
  return Math.round((getNum / widthSize) * layoutWidth);
1149
1149
  let checkState = false;
1150
1150
  const couponFloorModuleType = floorData?.floorExtInfo?.moduleFlag;
1151
1151
  if (couponFloorModuleType === FloorModuleType.COUPON) {
1152
1152
  try {
1153
1153
  const dataDefines = getFloorDataToDataDefines(floorData);
1154
1154
  const couponDataDefine = dataDefines
1155
1155
  ? dataDefines.filter((item) => {
1156
1156
  return item.type === "coupon";
1157
1157
  })
1158
1158
  : [],
1159
1159
  couponList = couponDataDefine[0]?.nodeText?.data
1160
1160
  ? couponDataDefine[0]?.nodeText?.data
1161
1161
  : [],
1162
1162
  couponLength = couponList.length,
1163
1163
  numShowPerLine = couponDataDefine[0]?.nodeText?.numShowPerLine
1164
1164
  ? couponDataDefine[0]?.nodeText?.numShowPerLine
1165
1165
  : 0;
1166
1166
  if (numShowPerLine === 0 && couponLength > 3) {
1167
1167
  checkState = true;
1168
1168
  }
1169
1169
  } catch (e) {
1170
1170
  checkState = false;
1171
1171
  }
1172
1172
  return checkState;
1173
1173
  }
1174
1174
  const {
1175
1175
  containers = [],
1176
1176
  floors = [],
1177
1177
  clearFirstContaierMarginTop = false,
1178
1178
  } = pageData;
1179
1179
  console.log("dealShopContentData:", pageData, "isvdev:", isvdev);
1180
1180
  const getThisTimeKey = Date.now();
1181
1181
  let shopContentContainerListData = containers?.filter(
1182
1182
  (item) => (!isvdev && item.typeCode !== "mShopHeader") || isvdev
1183
1183
  );
1184
1184
  const shopContentFloorListData = floors?.filter(
1185
1185
  ({ floorPosition }) =>
1186
1186
  (!isvdev && floorPosition !== "header" && floorPosition !== "footer") ||
1187
1187
  isvdev
1188
1188
  );
1189
1189
  const unableIsvContainerListData = getUnableIsvContainerListData(
1190
1190
  shopContentFloorListData,
1191
1191
  shopContentContainerListData,
1192
1192
  exceptionReportFn
1193
1193
  );
1194
1194
  shopContentContainerListData.forEach((item, index) => {
1195
1195
  item.key = `${getThisTimeKey + index}`;
1196
1196
  item.floors = [];
1197
1197
  item.includeUids &&
1198
1198
  item.includeUids.forEach((floorUid) => {
1199
1199
  const getFloorData = shopContentFloorListData.find(
1200
1200
  (floorItem) => floorItem.uid === floorUid
1201
1201
  );
1202
1202
  if (getFloorData) {
1203
1203
  const changeFloorData = {
1204
1204
  containerId: item.containerId,
1205
1205
  containerIndex: index,
1206
1206
  ...getFloorData,
1207
1207
  };
1208
1208
  const getCheckMoreCouponState =
1209
1209
  checkCouponAndChangeContainerSetData(getFloorData);
1210
1210
  if (getCheckMoreCouponState) {
1211
1211
  item.marginLeft && (item.marginLeft = 0);
1212
1212
  item.marginRight && (item.marginRight = 0);
1213
1213
  item.borderRadius && (item.borderRadius = 0);
1214
1214
  }
1215
1215
  if (getFloorData?.floorExtInfo?.floorLoadWay === 2) {
1216
1216
  const getSysFloorToLoadTypeRes = isIsvFloorUseable(
1217
1217
  getFloorData,
1218
1218
  exceptionReportFn
1219
1219
  );
1220
1220
  !getSysFloorToLoadTypeRes &&
1221
1221
  (getFloorData.floorExtInfo.floorLoadWay = 1);
1222
1222
  }
1223
1223
  item.floors.push(changeFloorData);
1224
1224
  }
1225
1225
  });
1226
1226
  if (
1227
1227
  ((!isvdev && index === 0) || (isvdev && index === 1)) &&
1228
1228
  item?.containerPosition == "content" &&
1229
1229
  item?.marginBottom > 0 &&
1230
1230
  !clearFirstContaierMarginTop
1231
1231
  ) {
1232
1232
  item.marginTop = item.marginBottom;
1233
1233
  }
1234
1234
  });
1235
1235
  shopContentContainerListData = shopContentContainerListData.filter(
1236
1236
  (item) =>
1237
1237
  item.floors.length > 0 &&
1238
1238
  unableIsvContainerListData.every(
1239
1239
  (containerItem) => containerItem.containerId != item.containerId
1240
1240
  )
1241
1241
  );
1242
1242
  console.log(
1243
1243
  "dealShopContentData isWxMinAndWxapp:",
1244
1244
  isWxMinAndWxapp,
1245
1245
  "weappJumpToH5:",
1246
1246
  pageData?.homeExtInfo?.weappJumpToH5
1247
1247
  );
1248
1248
  if (isProd && isWxMinAndWxapp) {
1249
1249
  shopContentContainerListData = shopContentContainerListData.filter(
1250
1250
  (item) =>
1251
1251
  item.floors.length > 0 &&
1252
1252
  !isIsvContainer(
1253
1253
  item.containerId,
1254
1254
  shopContentFloorListData,
1255
1255
  shopContentContainerListData
1256
1256
  )
1257
1257
  );
1258
1258
  }
1259
1259
  shopContentContainerListData = [].concat(shopContentContainerListData);
1260
1260
  return {
1261
1261
  shopContentContainerListData,
1262
1262
  shopContentFloorListData,
1263
1263
  };
1264
1264
  const changeOpts = {
1265
1265
  title: "",
1266
1266
  icon: "success",
1267
1267
  duration: 1500,
1268
1268
  mask: true,
1269
1269
  ...options,
1270
1270
  };
1271
1271
  if (changeOpts.title.length > 7) {
1272
1272
  showNormalToast(options);
1273
1273
  } else {
1274
1274
  Taro.showToast(changeOpts as any);
1275
1275
  }
1276
1276
  const changeOpts = {
1277
1277
  title: "",
1278
1278
  icon: "error",
1279
1279
  duration: 1500,
1280
1280
  mask: true,
1281
1281
  ...options,
1282
1282
  };
1283
1283
  if (changeOpts.title.length > 7) {
1284
1284
  showNormalToast(options);
1285
1285
  } else {
1286
1286
  Taro.showToast(changeOpts as any);
1287
1287
  }
1288
1288
  Taro.showToast({
1289
1289
  title: "",
1290
1290
  icon: "none",
1291
1291
  duration: 1500,
1292
1292
  mask: true,
1293
1293
  ...options,
1294
1294
  });
1295
1295
  return Taro.showLoading({
1296
1296
  title: text,
1297
1297
  });
1298
1298
  return new Promise(() => {
1299
1299
  Taro.nextTick(() => {
1300
1300
  setTimeout(() => {
1301
1301
  Taro.hideLoading(options);
1302
1302
  }, 300);
1303
1303
  });
1304
1304
  });
1305
1305
  return CHANNEL_TYPE[JDShopViewBusinessPathType.HOME];
1306
1306
  const {
1307
1307
  tabActive = SECTION_HOME_TAB_NAME_TYPE[
1308
1308
  SECTION_HOME_TAB_TYPE.HOME_WELL_CHOSEN
1309
1309
  ],
1310
1310
  sceneId,
1311
1311
  } = query;
1312
1312
  let changeTabActive = tabActive;
1313
1313
  if (sceneId) {
1314
1314
  if (isH5) {
1315
1315
  if (sceneId == "1002") {
1316
1316
  changeTabActive =
1317
1317
  SECTION_HOME_TAB_NAME_TYPE[SECTION_HOME_TAB_TYPE.HOME_PRODUCT];
1318
1318
  }
1319
1319
  else if (sceneId == "1003") {
1320
1320
  changeTabActive =
1321
1321
  SECTION_HOME_TAB_NAME_TYPE[SECTION_HOME_TAB_TYPE.HOME_ACTIVITY];
1322
1322
  }
1323
1323
  } else if (isWxMinAndWxapp) {
1324
1324
  if (sceneId == "1001" || sceneId == "1002") {
1325
1325
  changeTabActive =
1326
1326
  SECTION_HOME_TAB_NAME_TYPE[SECTION_HOME_TAB_TYPE.HOME_PRODUCT];
1327
1327
  }
1328
1328
  else if (sceneId == "1003") {
1329
1329
  changeTabActive =
1330
1330
  SECTION_HOME_TAB_NAME_TYPE[SECTION_HOME_TAB_TYPE.HOME_PROMOTION];
1331
1331
  }
1332
1332
  }
1333
1333
  }
1334
1334
  if (SECTION_HOME_TAB_QUERY_TYPE[changeTabActive]) {
1335
1335
  return {
1336
1336
  menuType: SHOP_MENU_ID_TYPE.HOME,
1337
1337
  tabActiveType: SECTION_HOME_TAB_QUERY_TYPE[changeTabActive],
1338
1338
  queryMenuTabActiveStr: `${SHOP_MENU_ID_TYPE.HOME}@${SECTION_HOME_TAB_QUERY_TYPE[changeTabActive]}`,
1339
1339
  };
1340
1340
  } else if (SHOP_MENU_ID_QUERY_NAME[changeTabActive]) {
1341
1341
  return {
1342
1342
  menuType: SHOP_MENU_ID_QUERY_NAME[changeTabActive],
1343
1343
  tabActiveType: 0,
1344
1344
  queryMenuTabActiveStr: `${SHOP_MENU_ID_QUERY_NAME[changeTabActive]}@0`,
1345
1345
  };
1346
1346
  } else {
1347
1347
  return {
1348
1348
  menuType: SHOP_MENU_ID_TYPE.HOME,
1349
1349
  tabActiveType: SECTION_HOME_TAB_TYPE.HOME_WELL_CHOSEN,
1350
1350
  queryMenuTabActiveStr: `${SHOP_MENU_ID_TYPE.HOME}@${SECTION_HOME_TAB_TYPE.HOME_WELL_CHOSEN}`,
1351
1351
  };
1352
1352
  }
1353
1353
  const deleteKeyList = [
1354
1354
  "$taroTimestamp",
1355
1355
  "cookie",
1356
1356
  "wdref",
1357
1357
  "navStart",
1358
1358
  "originOpts",
1359
1359
  "originParams",
1360
1360
  "originUrl",
1361
1361
  "referer",
1362
1362
  "stamp",
1363
1363
  "hybrid",
1364
1364
  "sr",
1365
1365
  "navh",
1366
1366
  "stath",
1367
1367
  ];
1368
1368
  let changeQueryData: any = { ...queryData };
1369
1369
  const qrCodeScene = changeQueryData?.scene ? changeQueryData?.scene : false;
1370
1370
  const sceneQuery =
1371
1371
  qrCodeScene && typeof qrCodeScene == "string"
1372
1372
  ? parseQueryUrlString(decodeURIComponent(qrCodeScene))
1373
1373
  : {};
1374
1374
  changeQueryData = { ...changeQueryData, ...sceneQuery };
1375
1375
  deleteKeyList.forEach((key) => {
1376
1376
  changeQueryData[key] && delete changeQueryData[key];
1377
1377
  });
1378
1378
  changeQueryData["shopid"] &&
1379
1379
  (changeQueryData["shopId"] = changeQueryData["shopid"]) &&
1380
1380
  delete changeQueryData["shopid"];
1381
1381
  changeQueryData["venderid"] &&
1382
1382
  (changeQueryData["venderId"] = changeQueryData["venderid"]) &&
1383
1383
  delete changeQueryData["venderid"];
1384
1384
  changeQueryData["vendorId"] &&
1385
1385
  (changeQueryData["venderId"] = changeQueryData["vendorId"]) &&
1386
1386
  delete changeQueryData["vendorId"];
1387
1387
  return changeQueryData;
1388
1388
  let isUsable = false;
1389
1389
  const modularPackResult = floorData?.floorExtInfo?.modularPackResult;
1390
1390
  const modularPackResultObj = formatPackResult(modularPackResult);
1391
1391
  const bundleUrl = getBundleUrl(modularPackResultObj);
1392
1392
  const bundleFileName = getBundleFileName(modularPackResultObj);
1393
1393
  const taroVersion = getTaroVersion(modularPackResultObj)
1394
1394
  if (bundleUrl && bundleFileName) {
1395
1395
  isUsable = true;
1396
1396
  }
1397
1397
  if (!isUsable && typeof exceptionReportFn === "function") {
1398
1398
  exceptionReportFn({
1399
1399
  code: `${NO_ENVIRONMENT_AND_PAGE_TYPE_FLAG}${
1400
1400
  floorData?.floorExtInfo?.floorKind === FLOOR_KIND.PDC_SYSTEM_MODULE
1401
1401
  ? SgmCustomCode.SYSTEMPDCMODULE_DATA
1402
1402
  : SgmCustomCode.REMOTEMODULE_DATA
1403
1403
  }`,
1404
1404
  msg: {
1405
1405
  msg: `店铺h5楼层隐藏不显示。原因:模块数据不完备,楼层过滤。`,
1406
1406
  floorIdx: floorData?.floorIdx,
1407
1407
  uid: floorData?.uid,
1408
1408
  shopId: floorData?.floorExtInfo?.shopId,
1409
1409
  moduleId: floorData?.moduleId,
1410
1410
  moduleDesignerType: floorData?.floorExtInfo?.moduleDesignerType,
1411
1411
  floorLoadWay: floorData?.floorExtInfo?.floorLoadWay,
1412
1412
  floorKind: floorData?.floorExtInfo?.floorKind,
1413
1413
  middleTemplateId: floorData?.middleTemplateId,
1414
1414
  modularPackResult: {
1415
1415
  bundleUrl,
1416
1416
  taroVersion,
1417
1417
  },
1418
1418
  },
1419
1419
  })
1420
1420
  }
1421
1421
  return isUsable;
1422
1422
  const objContainer = containerListData.find(
1423
1423
  (item) => item.containerId === containerId
1424
1424
  );
1425
1425
  return (
1426
1426
  objContainer?.includeUids?.some((itemUid) => {
1427
1427
  const objectFloor = floorListData.find(
1428
1428
  (floorItem) => itemUid === floorItem.uid
1429
1429
  );
1430
1430
  return RemoteLoadFloorList.includes(
1431
1431
  objectFloor?.floorExtInfo?.moduleFlag
1432
1432
  );
1433
1433
  }) ?? false
1434
1434
  );
1435
1435
  floorListData,
1436
1436
  containerListData,
1437
1437
  exceptionReportFn?
1438
1438
  const unableIsvFloorListData = floorListData.filter(
1439
1439
  (floorItem) =>
1440
1440
  RemoteLoadFloorList.includes(floorItem?.floorExtInfo?.moduleFlag) &&
1441
1441
  !isIsvFloorUseable(floorItem, exceptionReportFn)
1442
1442
  );
1443
1443
  const unableIsvFloorUidList = unableIsvFloorListData.map(
1444
1444
  (floorItem) => floorItem.uid
1445
1445
  );
1446
1446
  const unableIsvContainerListData = containerListData.filter(
1447
1447
  (item) =>
1448
1448
  item.includeUids &&
1449
1449
  item.includeUids.every(
1450
1450
  (itemUid) => unableIsvFloorUidList.indexOf(itemUid) != -1
1451
1451
  )
1452
1452
  );
1453
1453
  return unableIsvContainerListData;
1454
1454
  return -2;
1455
1455
  return customObj;
1456
1456
  return /openApp\.jdMobile:\/\/virtual\?params=/i.test(openAppUrl);
1457
1457
  let getParams = false;
1458
1458
  if (isOpenJdAppUrl(openAppUrl)) {
1459
1459
  try {
1460
1460
  getParams = openAppUrl.replace(
1461
1461
  /openApp\.jdMobile:\/\/virtual\?params=/i,
1462
1462
  ""
1463
1463
  );
1464
1464
  getParams = JSON.parse(String(getParams));
1465
1465
  } catch (e) {
1466
1466
  console.log(e);
1467
1467
  }
1468
1468
  }
1469
1469
  return getParams;
1470
1470
  const getLastParams = Object.assign({}, openParams)
1471
1471
  return `openapp.jdmobile://virtual?params=${JSON.stringify(getLastParams)}`;
1472
1472
  if (val === null || val === "" || typeof val === "undefined") {
1473
1473
  return true;
1474
1474
  }
1475
1475
  return false;
1476
1476
  const {
1477
1477
  moduleId = "none",
1478
1478
  entrance = "none",
1479
1479
  sourceType = "none",
1480
1480
  sourceValue = "none",
1481
1481
  } = params;
1482
1482
  if (isIosDevice) {
1483
1483
  return `${moduleId}#${entrance}`;
1484
1484
  } else if (isAndroidDevice) {
1485
1485
  return `${sourceType}#${sourceValue}`;
1486
1486
  }
1487
1487
  return "none#none";
1488
1488
  if (data && typeof data === "object") {
1489
1489
  let getOpenAppData = { ...data };
1490
1490
  try {
1491
1491
  const { sourceInfo, designerId, templateId, source } = getOpenAppData;
1492
1492
  if (designerId && templateId) {
1493
1493
  getOpenAppData = Object.assign({}, getOpenAppData, {
1494
1494
  sourceInfo: {
1495
1495
  entrance: "设计师预览",
1496
1496
  },
1497
1497
  });
1498
1498
  } else if (sourceInfo) {
1499
1499
  const { entrance } = sourceInfo;
1500
1500
  getOpenAppData.sourceInfo.entrance =
1501
1501
  entrance && entrance.length > 0 ? entrance : "其他";
1502
1502
  } else if (source && !sourceInfo) {
1503
1503
  if (typeof source === "object") {
1504
1504
  const { sourceType, entrance, sourceValue, moduleId } = source;
1505
1505
  getOpenAppData = Object.assign({}, getOpenAppData, {
1506
1506
  sourceInfo: {
1507
1507
  entrance: sourceType || entrance || "其他",
1508
1508
  moduleId: sourceValue || moduleId || "-100",
1509
1509
  },
1510
1510
  });
1511
1511
  } else {
1512
1512
  getOpenAppData = Object.assign({}, getOpenAppData, {
1513
1513
  sourceInfo: {
1514
1514
  entrance: source,
1515
1515
  },
1516
1516
  });
1517
1517
  }
1518
1518
  } else {
1519
1519
  getOpenAppData = Object.assign({}, getOpenAppData, {
1520
1520
  sourceInfo: {
1521
1521
  entrance: "其他",
1522
1522
  },
1523
1523
  });
1524
1524
  }
1525
1525
  } catch (e) {
1526
1526
  console.log(e);
1527
1527
  }
1528
1528
  return getOpenAppData;
1529
1529
  }
1530
1530
  return data;
1531
1531
  return displayObj;
1532
1532
  if (typeof input === "string") {
1533
1533
  try {
1534
1534
  return JSON.parse(input);
1535
1535
  } catch (e) {
1536
1536
  console.error("JSON解析失败", e);
1537
1537
  return {};
1538
1538
  }
1539
1539
  }
1540
1540
  return input || {};
1541
1541
  return false
1542
1542
  isJdApp,
1543
1543
  isWxApp,
1544
1544
  isIosDevice,
1545
1545
  isAndroidDevice,
1546
1546
  isJdAndIosDevice,
1547
1547
  isJdAndAndroidDevice,
1548
1548
  isWxMin,
1549
1549
  isWxMinAndWxapp,
1550
1550
  isJdMin,
1551
1551
  isMin,
1552
1552
  isJdMinAndHarmony,
1553
1553
  isH5,
1554
1554
  isH5AndJdShopView,
1555
1555
  isImageOptimizeEnable,
1556
1556
  isChartH5,
1557
1557
  isH5AndJdShopViewNativeScroll,
1558
1558
  isH5AndJdShopViewH5Scroll,
1559
1559
  isH5AndJdShopH5CustomScrollView,
1560
1560
  isWxMiniH5View,
1561
1561
  sliceArrToChunkList,
1562
1562
  dealAddress,
1563
1563
  objectToUrlEncode,
1564
1564
  parseQueryUrlString,
1565
1565
  setLowSmallPicUrl,
1566
1566
  getJfsImage,
1567
1567
  getQualityImage,
1568
1568
  countStringify,
1569
1569
  setTaroStorage,
1570
1570
  getTaroStorageKeyValue,
1571
1571
  removeTaroStorageKey,
1572
1572
  clearTaroStorageKey,
1573
1573
  getSystemInfos,
1574
1574
  addHttps,
1575
1575
  dateFormat,
1576
1576
  throttle,
1577
1577
  lodashThrottle,
1578
1578
  debounce,
1579
1579
  getTelephone,
1580
1580
  rgbToHex,
1581
1581
  hexToRgb,
1582
1582
  getRandom,
1583
1583
  getWxAppCookieStr,
1584
1584
  pxTransformFromData,
1585
1585
  dealShopContentData,
1586
1586
  showSuccessToast,
1587
1587
  showFailToast,
1588
1588
  showNormalToast,
1589
1589
  showShopLoading,
1590
1590
  hideShopLoading,
1591
1591
  getAppChannelType,
1592
1592
  formatTabActiveMenuType,
1593
1593
  filterUrlQueryData,
1594
1594
  getAvifSupport,
1595
1595
  getWebpSupport,
1596
1596
  isMemberPage,
1597
1597
  sgmCustomReport,
1598
1598
  isOpenJdAppUrl,
1599
1599
  jdOpenAppParams,
1600
1600
  createJdOpenAppUrl,
1601
1601
  dealJdOpenAppData,
1602
1602
  isEmpty,
1603
1603
  getJdAppReportPageSource,
1604
1604
  isAppClassifyPage,
1605
1605
  getQualityImageNew,
1606
1606
  getQualityImageOld,
1607
1607
  isPc,
1608
1608
  ipLoc_djd,
1609
1609
  jdAppVersionCompare,
1610
1610
  dealNativePixelToCssPixel,
1611
1611
  isAppStowShop,
1612
1612
  isIpadDevice,