@conecli/cone-render 0.9.1-shop2.3 → 0.9.1-shop2.31

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 (114) hide show
  1. package/dist/api/index.ts +1 -1
  2. package/dist/assets/icon_blue_info.svg +1 -0
  3. package/dist/common/const.ts +1 -1
  4. package/dist/common/environmentType.ts +1 -0
  5. package/dist/common/index.h5.ts +1 -1
  6. package/dist/common/index.jd.ts +1 -1
  7. package/dist/common/index.ts +1 -1
  8. package/dist/common/index.weapp.ts +1 -1
  9. package/dist/common/jdplayerSdk.ts +1 -0
  10. package/dist/common/jssdk.ts +1 -0
  11. package/dist/common/pageType.ts +1 -0
  12. package/dist/common/sgmCustomCode.ts +1 -0
  13. package/dist/common/token/index.h5.ts +1 -1
  14. package/dist/common/token/token.jd.ts +1 -1
  15. package/dist/common/token/token.ts +1 -1
  16. package/dist/common/wxappApi.jd.ts +1 -0
  17. package/dist/components/ErrorBoundary.tsx +1 -1
  18. package/dist/components/base/CountDown/index.tsx +1 -1
  19. package/dist/components/base/CustomScrollView/index.jd.tsx +1 -0
  20. package/dist/components/base/CustomScrollView/index.module.scss +7 -0
  21. package/dist/components/base/CustomScrollView/index.tsx +1 -1
  22. package/dist/components/base/CustomVideo/common.ts +1 -0
  23. package/dist/components/base/CustomVideo/index.tsx +1 -1
  24. package/dist/components/base/Dialog/index.module.scss +5 -0
  25. package/dist/components/base/Dialog/index.tsx +1 -1
  26. package/dist/components/base/Exposure/index.h5.tsx +1 -1
  27. package/dist/components/base/ExposureSmart/index.h5.tsx +1 -1
  28. package/dist/components/base/ExposureSmart/index.tsx +1 -1
  29. package/dist/components/base/ExposureSmart/reporter.tsx +1 -1
  30. package/dist/components/base/InOrOutViewObserver/index.tsx +1 -1
  31. package/dist/components/base/InViewRender/index.tsx +1 -1
  32. package/dist/components/base/ItemViewExposureSmart/index.tsx +1 -1
  33. package/dist/components/base/LazyLayoutLoad/index.tsx +1 -1
  34. package/dist/components/base/LazyLoadImage/const.ts +1 -1
  35. package/dist/components/base/LazyLoadImage/index.h5.module.scss +23 -20
  36. package/dist/components/base/LazyLoadImage/index.h5.tsx +1 -1
  37. package/dist/components/base/MobileCommonHeader/index.module.scss +17 -0
  38. package/dist/components/base/MobileCommonHeader/index.tsx +1 -0
  39. package/dist/components/base/NetworkDataError/const.ts +1 -1
  40. package/dist/components/base/NetworkDataError/index.module.scss +7 -0
  41. package/dist/components/base/NetworkDataError/index.tsx +1 -1
  42. package/dist/components/base/Price/Base/index.tsx +1 -1
  43. package/dist/components/base/Price/Double/index.tsx +1 -1
  44. package/dist/components/base/Price/index.tsx +1 -1
  45. package/dist/components/debug/DebugLayout/index.module.scss +67 -0
  46. package/dist/components/debug/DebugLayout/index.tsx +1 -0
  47. package/dist/components/debug/DebugLayout/utils.ts +1 -0
  48. package/dist/components/decorate/DecorateFloorModule/index.module.scss +32 -2
  49. package/dist/components/decorate/DecorateFloorModule/index.tsx +1 -1
  50. package/dist/components/decorate/EmptyFloorModule/index.tsx +1 -1
  51. package/dist/components/decorate/PlaceHolder/index.tsx +1 -1
  52. package/dist/components/floorItem.jd.tsx +1 -1
  53. package/dist/components/floorItem.tsx +1 -1
  54. package/dist/components/floorItem.weapp.tsx +1 -1
  55. package/dist/components/isv/Floor/index.tsx +1 -1
  56. package/dist/components/remoteFloorItem.tsx +1 -1
  57. package/dist/interface/common.ts +1 -1
  58. package/dist/interface/component.ts +1 -1
  59. package/dist/interface/jumpEventReport.ts +1 -1
  60. package/dist/interface/service.ts +1 -1
  61. package/dist/interface/utils.ts +1 -1
  62. package/dist/jumpEventReport/base.ts +1 -1
  63. package/dist/jumpEventReport/const.ts +1 -1
  64. package/dist/jumpEventReport/createReportFloorData.ts +1 -1
  65. package/dist/jumpEventReport/index.h5.ts +1 -1
  66. package/dist/jumpEventReport/index.jd.ts +1 -1
  67. package/dist/jumpEventReport/index.weapp.ts +1 -1
  68. package/dist/jumpEventReport/jdJumpJdApp.ts +1 -1
  69. package/dist/jumpEventReport/jumpUrlConfig/base.ts +1 -1
  70. package/dist/jumpEventReport/logEventConfig.ts +1 -1
  71. package/dist/jumpEventReport/web/report.ts +1 -1
  72. package/dist/jumpEventReport/web.base.ts +1 -1
  73. package/dist/jumpEventReport/web.jd.ts +1 -1
  74. package/dist/jumpEventReport/web.jdb.ts +1 -1
  75. package/dist/jumpEventReport/web.jdjch.ts +1 -1
  76. package/dist/jumpEventReport/web.jxwxapp.ts +1 -0
  77. package/dist/jumpEventReport/web.tjapp.ts +1 -0
  78. package/dist/jumpEventReport/web.tjm.ts +1 -0
  79. package/dist/jumpEventReport/web.wxapp.ts +1 -1
  80. package/dist/modules/ContainerFloorList/index.h5.module.scss +18 -1
  81. package/dist/modules/ContainerFloorList/index.h5.tsx +1 -1
  82. package/dist/modules/ContainerFloorList/index.tsx +1 -1
  83. package/dist/open/api/device.ts +1 -1
  84. package/dist/open/api/environment.ts +1 -1
  85. package/dist/open/api/index.ts +1 -1
  86. package/dist/open/api/jump copy.ts +1 -1
  87. package/dist/open/api/request.ts +1 -1
  88. package/dist/open/api/shopMember.ts +1 -1
  89. package/dist/open/api/track.ts +1 -1
  90. package/dist/open/api/util.ts +1 -1
  91. package/dist/open/components/index.ts +1 -1
  92. package/dist/sass/app.h5.scss +49 -3
  93. package/dist/sass/base.scss +57 -0
  94. package/dist/service/fetchGateway.ts +1 -1
  95. package/dist/service/http/colorSign.ts +1 -1
  96. package/dist/service/http/const.ts +1 -1
  97. package/dist/service/http/h5Http.ts +1 -0
  98. package/dist/service/http/index.h5.ts +1 -0
  99. package/dist/service/requestServer.h5.ts +1 -0
  100. package/dist/service/requestServer.ts +1 -1
  101. package/dist/utils/connectNativeJsBridge.ts +1 -1
  102. package/dist/utils/connectNativeJsBridge.weapp.ts +1 -1
  103. package/dist/utils/draExceptionAndProfile.ts +1 -1
  104. package/dist/utils/h5Utils.ts +1 -1
  105. package/dist/utils/index.h5.ts +1 -1
  106. package/dist/utils/index.ts +1 -1
  107. package/dist/utils/index.weapp.ts +1 -1
  108. package/dist/utils/jm-common.js +1 -1
  109. package/dist/utils/sgmCodeUtils.ts +1 -0
  110. package/dist/utils/taroRenderUtil.ts +1 -1
  111. package/dist/utils/utils.ts +1 -1
  112. package/package.json +26 -3
  113. package/dist/customHooks/useDocumentVisibilitychange.ts +0 -1
  114. package/dist/utils/memberFormatUtils.js +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
  key: string,
640
640
  value: string | object,
641
641
  successBack?: any,
642
642
  failBack?: any,
643
643
  try{
644
644
  if(isH5 && window && !window.localStorage){
645
645
  console.log(`setTaroStorage key:${key} window.localStorage不存在:`);
646
646
  return Promise.resolve(null);
647
647
  }
648
648
  return Taro.setStorage({
649
649
  key: key,
650
650
  data: value,
651
651
  success: successBack,
652
652
  fail: failBack,
653
653
  }).catch((e) => {
654
654
  console.log(`setTaroStorage key:${key} 报错:`, e);
655
655
  return null;
656
656
  });
657
657
  }
658
658
  catch(e){
659
659
  console.log(`setTaroStorage key:${key} 报错:`, e)
660
660
  return Promise.resolve(null)
661
661
  }
662
662
  try {
663
663
  if (isH5 && window && !window.localStorage) {
664
664
  console.log(
665
665
  `getTaroStorageKeyValue key:${key} window.localStorage不存在:`,
666
666
  )
667
667
  return Promise.resolve(null)
668
668
  }
669
669
  return Taro.getStorageSync(key);
670
670
  } catch (e) {
671
671
  console.log(`getTaroStorageKeyValue key:${key} 报错:`, e);
672
672
  return null;
673
673
  }
674
674
  try {
675
675
  if (isH5 && window && !window.localStorage) {
676
676
  console.log(`removeTaroStorageKey key:${key} window.localStorage不存在:`)
677
677
  return Promise.resolve(null)
678
678
  }
679
679
  return Taro.removeStorage({
680
680
  key: key,
681
681
  }).catch(e => {
682
682
  console.log(`removeTaroStorageKey key:${key} 报错:`, e)
683
683
  })
684
684
  } catch (e) {
685
685
  console.log(`removeTaroStorageKey key:${key} 报错:`, e);
686
686
  }
687
687
  try {
688
688
  if (isH5 && window && !window.localStorage) {
689
689
  console.log(`clearTaroStorageKey window.localStorage不存在`)
690
690
  return Promise.resolve(null)
691
691
  }
692
692
  return Taro.clearStorage().catch(e => {
693
693
  console.log('clearTaroStorageKey报错:', e)
694
694
  })
695
695
  } catch (e) {
696
696
  console.log('clearTaroStorageKey报错:', e);
697
697
  }
698
698
  let hasChecked = false;
699
699
  if (isH5) {
700
700
  const avifCache = getTaroStorageKeyValue(KEY_AVIF);
701
701
  if (avifCache === null || avifCache === '' || forceUpdate) {
702
702
  hasChecked = true
703
703
  const img = new Image()
704
704
  img.onload = function() {
705
705
  if (img.height > 0 && img.width > 0) {
706
706
  setTaroStorage(KEY_AVIF, '1');
707
707
  } else {
708
708
  setTaroStorage(KEY_AVIF, '0');
709
709
  }
710
710
  };
711
711
  img.onerror = () => {
712
712
  setTaroStorage(KEY_AVIF, '0');
713
713
  };
714
714
  img.src =
715
715
  'data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAAB0AAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAIAAAACAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQ0MAAAAABNjb2xybmNseAACAAIAAYAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAACVtZGF0EgAKCBgANogQEAwgMg8f8D///8WfhwB8+ErK42A=';
716
716
  }
717
717
  const webpCache = getTaroStorageKeyValue(KEY_WEBP);
718
718
  if (webpCache === null || webpCache === '' || forceUpdate) {
719
719
  hasChecked = true
720
720
  const img = new Image()
721
721
  img.onload = function() {
722
722
  if (img.height > 0 && img.width > 0) {
723
723
  setTaroStorage(KEY_WEBP, '1');
724
724
  } else {
725
725
  setTaroStorage(KEY_WEBP, '0');
726
726
  }
727
727
  };
728
728
  img.onerror = () => {
729
729
  setTaroStorage(KEY_WEBP, '0');
730
730
  };
731
731
  img.src =
732
732
  'data:image/webp;base64,UklGRiQAAABXRUJQVlA4IBgAAAAwAQCdASoBAAEAAUAmJaQAA3AA/vz0AAA=';
733
733
  }
734
734
  }
735
735
  return hasChecked;
736
736
  const hasChecked = imageFormatSupport(false);
737
737
  if (!hasChecked) {
738
738
  setTimeout(imageFormatSupport, 5000);
739
739
  }
740
740
  const resultList: Array<any> = [],
741
741
  arrLen = arr.length;
742
742
  if (arrLen) {
743
743
  if (arrLen > size) {
744
744
  for (let i = 0; i < arrLen; i = i + size) {
745
745
  resultList.push(arr.slice(i, i + size));
746
746
  }
747
747
  } else {
748
748
  resultList.push(arr);
749
749
  }
750
750
  }
751
751
  return resultList;
752
752
  let _address = ids;
753
753
  const _areaAreaSplit = ids.split('.');
754
754
  const _areaAreaSplit2 = ids.split('_');
755
755
  _address = _areaAreaSplit.length === 2 ? _areaAreaSplit[0] : _address;
756
756
  _address = _areaAreaSplit2.length === 3 ? `${_areaAreaSplit2}_0` : _address;
757
757
  return _address;
758
758
  let paramStr = '';
759
759
  obj &&
760
760
  Object.keys(obj).forEach((key, index) => {
761
761
  const getValue = `${obj[key]}`.replace(/undefined/, '').replace(/null/, '');
762
762
  paramStr += `${index === 0 ? '' : '&'}${key}=${encodeURIComponent(getValue)}`;
763
763
  });
764
764
  return paramStr;
765
765
  const result = {};
766
766
  if (
767
767
  !urlOrQueryStr ||
768
768
  ("string" !== typeof urlOrQueryStr && String !== urlOrQueryStr.constructor)
769
769
  ) {
770
770
  return result;
771
771
  }
772
772
  if (urlOrQueryStr.indexOf('?') > -1) {
773
773
  const queryStr = urlOrQueryStr.split('?');
774
774
  const queryItemList = queryStr && queryStr.length > 1 ? queryStr[1].split('&') : [];
775
775
  const queryItemListLen = queryItemList.length;
776
776
  queryItemListLen > 0 &&
777
777
  queryItemList.forEach(item => {
778
778
  const thisItemList = item.split('=')
779
779
  result[thisItemList[0]] = thisItemList[1]
780
780
  })
781
781
  } else {
782
782
  const queryItemList =
783
783
  urlOrQueryStr.indexOf('&') > -1 ? urlOrQueryStr.split('&') : [urlOrQueryStr];
784
784
  const queryItemListLen = queryItemList.length;
785
785
  queryItemListLen > 0 &&
786
786
  queryItemList.forEach(item => {
787
787
  const thisItemList = item.split('=')
788
788
  result[thisItemList[0]] = thisItemList[1]
789
789
  })
790
790
  }
791
791
  return result;
792
792
  url: string,
793
793
  size?: {
794
794
  w: number;
795
795
  h: number;
796
796
  },
797
797
  quality?: number
798
798
  if (url && size) {
799
799
  const _w = Math.floor(size.w);
800
800
  const _h = Math.floor(size.h);
801
801
  if (url.match(/gif$/i)) {
802
802
  return url;
803
803
  } else {
804
804
  if (_w > 0 && _h > 0) {
805
805
  url = url.replace('jfs/', `s${_w}x${_h}_jfs/`);
806
806
  }
807
807
  url += quality != null ? `!q${quality}.dpg` : '.dpg';
808
808
  }
809
809
  }
810
810
  return url;
811
811
  if (url.match(/\.(jpg|png|dpg)$/i)) {
812
812
  const { width, height, quality } = jfsImgInfo;
813
813
  if (typeof width === 'number' || typeof height === 'number') {
814
814
  url = url.replace('/jfs/', `/s${Math.floor(width || 0)}x${Math.floor(height || 0)}_jfs/`);
815
815
  }
816
816
  if (typeof quality === 'number' && quality > 0 && quality < 100 && url.match(/\.jpg$/i)) {
817
817
  url += `!q${quality}.dpg`;
818
818
  }
819
819
  }
820
820
  return addHttps(url);
821
821
  if (imgUrl) {
822
822
  if (
823
823
  !imgUrl.match(
824
824
  /(storage\.360buyimg\.com)|(jdcloud-oss\.com)|(imgcps\.jd\.com)|((\w+)\.300hu\.com)|(thirdwx\.qlogo\.cn)|(!q)|gif|dpg$/i,
825
825
  )
826
826
  ) {
827
827
  if (!imgUrl.includes('360buyimg.com')) {
828
828
  imgUrl = '//m.360buyimg.com/cms/' + imgUrl;
829
829
  }
830
830
  if (quality != 100) imgUrl += /\.png/.test(imgUrl) ? '.dpg' : `!q${quality}`;
831
831
  }
832
832
  imgUrl = imgUrl.match(/^\/\//) ? `https:${imgUrl}` : imgUrl;
833
833
  }
834
834
  return imgUrl;
835
835
  const result = value % step;
836
836
  return result === 0 ? value : Math.ceil(value / step) * step;
837
837
  const MAX = 3.5;
838
838
  return Math.min(window?.devicePixelRatio ?? 2, MAX);
839
839
  isSkuImage: boolean;
840
840
  size: number;
841
841
  imgUrl: string,
842
842
  options: QualityOptions,
843
843
  isIgnoreOptimizeFromServer: boolean = false,
844
844
  if (!imgUrl) {
845
845
  console.error('The input parameter imageUrl for the getQualityImage() cannot be empty!');
846
846
  return imgUrl;
847
847
  }
848
848
  if (isIgnoreOptimizeFromServer) {
849
849
  imgUrl = imgUrl.replace(/\.(jpe?g|png).*/, '.$1');
850
850
  }
851
851
  if (!/^((https?):)?\/\//.test(imgUrl)) {
852
852
  imgUrl = '//m.360buyimg.com/cms/' + imgUrl;
853
853
  }
854
854
  const imgServerRegExp = /(img|m)\d{0,2}\.360buyimg\.com\/.*\.(jpe?g|png)/i;
855
855
  if (!imgServerRegExp.test(imgUrl)) {
856
856
  return imgUrl;
857
857
  }
858
858
  imgUrl = /^\/\//.test(imgUrl) ? `https:${imgUrl}` : imgUrl;
859
859
  const { isSkuImage, size } = options || {};
860
860
  const needReduceSize = isSkuImage && size;
861
861
  if (needReduceSize) {
862
862
  const devicePixelRatio = getDevicePixelRatio();
863
863
  const useWidth = getValueByStep(size * devicePixelRatio, 40);
864
864
  imgUrl = imgUrl.replace(/\/[^\/]*jfs\//, `/s${useWidth}x${useWidth}_jfs/`);
865
865
  }
866
866
  const needCompress = !global?.info?.pageInfo?.isVipShop;
867
867
  const result = imgUrl.match(/\/\w+\.(jpe?g|png)$/);
868
868
  if (needCompress && result) {
869
869
  if (getAvifSupport() === '1') {
870
870
  imgUrl += '.avif';
871
871
  } else if (getWebpSupport() === '1') {
872
872
  imgUrl += '.webp';
873
873
  } else if (/jpe?g/.test(result[1])) {
874
874
  imgUrl += '!q80';
875
875
  }
876
876
  }
877
877
  if (needReduceSize) {
878
878
  imgUrl += '!z2';
879
879
  }
880
880
  return imgUrl;
881
881
  if (imgUrl) {
882
882
  if (
883
883
  !imgUrl.match(
884
884
  /(storage\.360buyimg\.com)|(jdcloud-oss\.com)|((\w+)\.300hu\.com)|(thirdwx\.qlogo\.cn)|(!q)|gif|dpg$/i,
885
885
  )
886
886
  ) {
887
887
  if (!imgUrl.includes('360buyimg.com')) {
888
888
  imgUrl = '//m.360buyimg.com/cms/' + imgUrl;
889
889
  }
890
890
  if (quality != 100) imgUrl += /\.png/.test(imgUrl) ? '.dpg' : `!q${quality}`;
891
891
  }
892
892
  imgUrl = imgUrl.match(/^\/\//) ? `https:${imgUrl}` : imgUrl;
893
893
  }
894
894
  return imgUrl;
895
895
  return getTaroStorageKeyValue(KEY_AVIF) || '0';
896
896
  return getTaroStorageKeyValue(KEY_WEBP) || '0';
897
897
  count: number,
898
898
  fixedNum = 1,
899
899
  unit = '万',
900
900
  maxNum = 10000,
901
901
  count = Number(count);
902
902
  const getMaxNum = count > 100000000 ? 100000000 : maxNum;
903
903
  const getUnit = count > 100000000 ? '亿' : unit;
904
904
  if (count >= getMaxNum) {
905
905
  return (count / getMaxNum).toFixed(fixedNum) + getUnit;
906
906
  }
907
907
  return count;
908
908
  const systemInfo: UtilsInterFace.taroGetSystemInfoSyncRes = getSystemInfo || {
909
909
  platform: '',
910
910
  model: '',
911
911
  system: '',
912
912
  };
913
913
  const isIOS = !!systemInfo.system.match(/ios/i);
914
914
  const isAndroid = !!systemInfo.system.match(/android/i);
915
915
  if (!systemInfo.statusBarHeight) {
916
916
  systemInfo.statusBarHeight = screenHeight - windowHeight - 20;
917
917
  systemInfo.navBarExtendHeight = 0;
918
918
  } else {
919
919
  if (isIOS) {
920
920
  systemInfo.navBarExtendHeight = 4;
921
921
  } else {
922
922
  systemInfo.navBarExtendHeight = 0;
923
923
  }
924
924
  }
925
925
  let rect = Taro.getMenuButtonBoundingClientRect ? Taro.getMenuButtonBoundingClientRect() : null;
926
926
  if (!rect || !rect.width || !rect.top || !rect.left || !rect.height) {
927
927
  let gap = 0;
928
928
  let width = 96;
929
929
  if (systemInfo.platform === 'android') {
930
930
  gap = 8;
931
931
  width = 96;
932
932
  } else if (systemInfo.platform === 'devtools') {
933
933
  if (isIOS) {
934
934
  gap = 5.5;
935
935
  } else {
936
936
  gap = 7.5;
937
937
  }
938
938
  } else {
939
939
  gap = 4;
940
940
  width = 88;
941
941
  }
942
942
  rect = {
943
943
  bottom: systemInfo.statusBarHeight + gap + 32,
944
944
  height: 32,
945
945
  left: systemInfo.windowWidth - width - 10,
946
946
  right: systemInfo.windowWidth - 10,
947
947
  top: systemInfo.statusBarHeight + gap,
948
948
  width,
949
949
  };
950
950
  }
951
951
  const gap = rect.top - systemInfo.statusBarHeight;
952
952
  systemInfo.navBarTopToStatusBar = gap;
953
953
  systemInfo.navBarHeight = 2 * gap + rect.height;
954
954
  systemInfo.capsulePosition = rect;
955
955
  systemInfo.isIOS = isIOS;
956
956
  systemInfo.isAndroid = isAndroid;
957
957
  return systemInfo;
958
958
  if (str.match(/^\/\//)) {
959
959
  str = 'https:' + str;
960
960
  }
961
961
  return str;
962
962
  dateTimeOrdate: Date | string | number | null,
963
963
  format = "yyyy-MM-dd HH:mm:ss",
964
964
  noPadStart = {
965
965
  M: "0",
966
966
  d: "0",
967
967
  H: "0",
968
968
  m: "0",
969
969
  s: "0",
970
970
  }
971
971
  let dateResult = '';
972
972
  const padStarts = Object.assign(
973
973
  {
974
974
  M: "0",
975
975
  d: "0",
976
976
  H: "0",
977
977
  m: "0",
978
978
  s: "0",
979
979
  },
980
980
  noPadStart,
981
981
  );
982
982
  if (dateTimeOrdate) {
983
983
  let changeDateTimeOrdate = dateTimeOrdate;
984
984
  const getChangeDateTimeToNumber = Number(changeDateTimeOrdate);
985
985
  if (getChangeDateTimeToNumber) {
986
986
  changeDateTimeOrdate = getChangeDateTimeToNumber;
987
987
  } else {
988
988
  changeDateTimeOrdate = `${changeDateTimeOrdate}`.replace(/-/g, '/').replace(/\./g, '/');
989
989
  }
990
990
  const nowDate =
991
991
  dateTimeOrdate instanceof Date ? dateTimeOrdate : new Date(changeDateTimeOrdate);
992
992
  const dateMap = {
993
993
  y: `${nowDate.getFullYear()}`,
994
994
  M: `${nowDate.getMonth() + 1}`.padStart(2, padStarts['M']),
995
995
  d: `${nowDate.getDate()}`.padStart(2, padStarts['d']),
996
996
  H: `${nowDate.getHours()}`.padStart(2, padStarts['H']),
997
997
  m: `${nowDate.getMinutes()}`.padStart(2, padStarts['m']),
998
998
  s: `${nowDate.getSeconds()}`.padStart(2, padStarts['s']),
999
999
  };
1000
1000
  const regDate = new RegExp('y+|M+|d+|H+|m+|s+', 'g')
1001
1001
  const regYear = new RegExp('y')
1002
1002
  dateResult = format.replace(regDate, v => {
1003
1003
  let changeValue = v
1004
1004
  if (regYear.test(changeValue)) {
1005
1005
  const thisYear = dateMap.y;
1006
1006
  const subValueLen = 4 - changeValue.length;
1007
1007
  changeValue = thisYear.substr(subValueLen);
1008
1008
  } else {
1009
1009
  const dateKey = v.substr(0, 1);
1010
1010
  changeValue = dateMap[dateKey];
1011
1011
  }
1012
1012
  return changeValue;
1013
1013
  });
1014
1014
  }
1015
1015
  return dateResult;
1016
1016
  let timer: any = null
1017
1017
  let startTime = Date.now()
1018
1018
  return function() {
1019
1019
  const curTime = Date.now()
1020
1020
  const remaining = delay - (curTime - startTime)
1021
1021
  const context = this;
1022
1022
  const args = arguments;
1023
1023
  clearTimeout(timer);
1024
1024
  if (remaining <= 0) {
1025
1025
  func.apply(context, args);
1026
1026
  startTime = Date.now();
1027
1027
  } else {
1028
1028
  timer = setTimeout(func, remaining);
1029
1029
  }
1030
1030
  };
1031
1031
  let context, args, result
1032
1032
  let timeout = null
1033
1033
  let previous = 0
1034
1034
  if (!options) options = {}
1035
1035
  const later = function() {
1036
1036
  previous = options.leading === false ? 0 : Date.now()
1037
1037
  timeout = null
1038
1038
  result = func.apply(context, args)
1039
1039
  if (!timeout) context = args = null
1040
1040
  }
1041
1041
  return function() {
1042
1042
  const now = Date.now()
1043
1043
  if (!previous && options.leading === false) previous = now
1044
1044
  const remaining = wait - (now - previous)
1045
1045
  context = this;
1046
1046
  args = arguments;
1047
1047
  if (remaining <= 0 || remaining > wait) {
1048
1048
  if (timeout) {
1049
1049
  clearTimeout(timeout);
1050
1050
  timeout = null;
1051
1051
  }
1052
1052
  previous = now;
1053
1053
  result = func.apply(context, args);
1054
1054
  if (!timeout) context = args = null;
1055
1055
  } else if (!timeout && options.trailing !== false) {
1056
1056
  timeout = setTimeout(later, remaining);
1057
1057
  }
1058
1058
  return result;
1059
1059
  };
1060
1060
  let timer: any = null;
1061
1061
  return function() {
1062
1062
  const context: any = this;
1063
1063
  const args = arguments;
1064
1064
  timer && clearTimeout(timer);
1065
1065
  timer = setTimeout(function() {
1066
1066
  fn.apply(context, args)
1067
1067
  }, delay)
1068
1068
  }
1069
1069
  if (txt) {
1070
1070
  txt = txt.trim();
1071
1071
  const reg = new RegExp(/[\d-]+/);
1072
1072
  const res = reg.exec(txt);
1073
1073
  if (res && res.length > 0) {
1074
1074
  let tel = res[0];
1075
1075
  if (tel && delSeparator) {
1076
1076
  tel = tel.replace(/-/g, '');
1077
1077
  }
1078
1078
  return tel;
1079
1079
  }
1080
1080
  }
1081
1081
  return '';
1082
1082
  if (rgb) {
1083
1083
  const reg = /^(rgb|RGB)/;
1084
1084
  const color = rgb;
1085
1085
  if (reg.test(color)) {
1086
1086
  let strHex = '#';
1087
1087
  const colorArr = color.replace(/(?:\(|\)|rgb|RGB)*/g, '').split(',');
1088
1088
  for (let i = 0; i < colorArr.length; i++) {
1089
1089
  let hex = Number(colorArr[i]).toString(16);
1090
1090
  if (hex === '0') {
1091
1091
  hex += hex;
1092
1092
  }
1093
1093
  strHex += hex;
1094
1094
  }
1095
1095
  return strHex;
1096
1096
  } else {
1097
1097
  return String(color);
1098
1098
  }
1099
1099
  } else {
1100
1100
  return '';
1101
1101
  }
1102
1102
  if (hex) {
1103
1103
  const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
1104
1104
  let color = hex.toLowerCase();
1105
1105
  if (reg.test(color)) {
1106
1106
  if (color.length === 4) {
1107
1107
  let colorNew = '#';
1108
1108
  for (let i = 1; i < 4; i += 1) {
1109
1109
  colorNew += color.slice(i, i + 1).concat(color.slice(i, i + 1));
1110
1110
  }
1111
1111
  color = colorNew;
1112
1112
  }
1113
1113
  const colorChange: number[] = [];
1114
1114
  for (let i = 1; i < 7; i += 2) {
1115
1115
  colorChange.push(parseInt('0x' + color.slice(i, i + 2)));
1116
1116
  }
1117
1117
  if (returnList) {
1118
1118
  return colorChange;
1119
1119
  } else {
1120
1120
  return 'RGB(' + colorChange.join(',') + ')';
1121
1121
  }
1122
1122
  } else {
1123
1123
  return color;
1124
1124
  }
1125
1125
  } else {
1126
1126
  return '';
1127
1127
  }
1128
1128
  const c = m - n + 1;
1129
1129
  const res = Math.floor(Math.random() * c + n);
1130
1130
  if (filterNum && filterNum == res) {
1131
1131
  console.log('随机数二次开始', res, filterNum);
1132
1132
  return getRandom(n, m, filterNum);
1133
1133
  } else {
1134
1134
  return res;
1135
1135
  }
1136
1136
  wqCookieStr: string;
1137
1137
  wqCookie: {
1138
1138
  pin?: string;
1139
1139
  visitkey?: string;
1140
1140
  [key: string]: any;
1141
1141
  };
1142
1142
  const {
1143
1143
  jdpin,
1144
1144
  pinStatus,
1145
1145
  visitkey,
1146
1146
  unionid,
1147
1147
  skey,
1148
1148
  __jda,
1149
1149
  __jdv,
1150
1150
  __wga,
1151
1151
  wid,
1152
1152
  wq_skey,
1153
1153
  wq_uin,
1154
1154
  wq_auth_token,
1155
1155
  wxapp_scene,
1156
1156
  wq_unionid,
1157
1157
  wxapp_openid,
1158
1158
  wxapp_version,
1159
1159
  wxapp_type,
1160
1160
  appType,
1161
1161
  } = cookie;
1162
1162
  const ret: string[] = [];
1163
1163
  const getUserCookieObj = {};
1164
1164
  const createUseCookieArr = [
1165
1165
  jdpin,
1166
1166
  pinStatus,
1167
1167
  visitkey,
1168
1168
  unionid,
1169
1169
  skey,
1170
1170
  __jda,
1171
1171
  __jdv,
1172
1172
  __wga,
1173
1173
  wid,
1174
1174
  wq_skey,
1175
1175
  wq_uin,
1176
1176
  wq_auth_token,
1177
1177
  wxapp_scene,
1178
1178
  wq_unionid,
1179
1179
  wxapp_openid,
1180
1180
  wxapp_version,
1181
1181
  wxapp_type,
1182
1182
  appType,
1183
1183
  ]
1184
1184
  createUseCookieArr.forEach(keyItem => {
1185
1185
  if (keyItem && keyItem['name']) {
1186
1186
  let { name, value } = keyItem;
1187
1187
  name = name === 'jdpin' ? 'pin' : name;
1188
1188
  name === 'pin' && ret.push(`pt_pin=${encodeURIComponent(value)}`);
1189
1189
  ret.push(`${name}=${encodeURIComponent(value)}`);
1190
1190
  getUserCookieObj[name] = value;
1191
1191
  }
1192
1192
  });
1193
1193
  return {
1194
1194
  wqCookieStr: ret.join(";"),
1195
1195
  wqCookie: getUserCookieObj,
1196
1196
  };
1197
1197
  const getNum = Number(num);
1198
1198
  return Math.round((getNum / widthSize) * layoutWidth);
1199
1199
  let checkState = false
1200
1200
  const couponFloorModuleType = floorData?.floorExtInfo?.moduleFlag
1201
1201
  if (couponFloorModuleType === FloorModuleType.COUPON) {
1202
1202
  try {
1203
1203
  const dataDefines = getFloorDataToDataDefines(floorData);
1204
1204
  const couponDataDefine = dataDefines
1205
1205
  ? dataDefines.filter(item => {
1206
1206
  return item.type === 'coupon'
1207
1207
  })
1208
1208
  : [],
1209
1209
  couponList = couponDataDefine[0]?.nodeText?.data ? couponDataDefine[0]?.nodeText?.data : [],
1210
1210
  couponLength = couponList.length,
1211
1211
  numShowPerLine = couponDataDefine[0]?.nodeText?.numShowPerLine
1212
1212
  ? couponDataDefine[0]?.nodeText?.numShowPerLine
1213
1213
  : 0;
1214
1214
  if (numShowPerLine === 0 && couponLength > 3) {
1215
1215
  checkState = true;
1216
1216
  }
1217
1217
  } catch (e) {
1218
1218
  checkState = false;
1219
1219
  }
1220
1220
  return checkState;
1221
1221
  }
1222
1222
  const {
1223
1223
  containers = [],
1224
1224
  floors = [],
1225
1225
  clearFirstContaierMarginTop = false,
1226
1226
  } = pageData;
1227
1227
  console.log('dealShopContentData:', pageData, 'isvdev:', isvdev);
1228
1228
  const getThisTimeKey = Date.now();
1229
1229
  let shopContentContainerListData = containers?.filter(
1230
1230
  item => (!isvdev && item.typeCode !== 'mShopHeader') || isvdev,
1231
1231
  )
1232
1232
  const shopContentFloorListData = floors?.filter(
1233
1233
  ({ floorPosition }) =>
1234
1234
  (!isvdev && floorPosition !== 'header' && floorPosition !== 'footer') || isvdev,
1235
1235
  );
1236
1236
  const unableIsvContainerListData = getUnableIsvContainerListData(
1237
1237
  shopContentFloorListData,
1238
1238
  shopContentContainerListData,
1239
1239
  exceptionReportFn,
1240
1240
  );
1241
1241
  shopContentContainerListData.forEach((item, index) => {
1242
1242
  item.key = `${getThisTimeKey + index}`;
1243
1243
  item.floors = [];
1244
1244
  item.includeUids &&
1245
1245
  item.includeUids.forEach(floorUid => {
1246
1246
  const getFloorData = shopContentFloorListData.find(
1247
1247
  floorItem => floorItem.uid === floorUid,
1248
1248
  )
1249
1249
  if (getFloorData) {
1250
1250
  const changeFloorData = {
1251
1251
  containerId: item.containerId,
1252
1252
  containerIndex: index,
1253
1253
  ...getFloorData,
1254
1254
  }
1255
1255
  const getCheckMoreCouponState = checkCouponAndChangeContainerSetData(
1256
1256
  getFloorData,
1257
1257
  )
1258
1258
  if (getCheckMoreCouponState) {
1259
1259
  item.marginLeft && (item.marginLeft = 0);
1260
1260
  item.marginRight && (item.marginRight = 0);
1261
1261
  item.borderRadius && (item.borderRadius = 0);
1262
1262
  }
1263
1263
  if (getFloorData?.floorExtInfo?.floorLoadWay === 2) {
1264
1264
  const getSysFloorToLoadTypeRes = isIsvFloorUseable(getFloorData, exceptionReportFn);
1265
1265
  !getSysFloorToLoadTypeRes && (getFloorData.floorExtInfo.floorLoadWay = 1);
1266
1266
  }
1267
1267
  item.floors.push(changeFloorData);
1268
1268
  }
1269
1269
  });
1270
1270
  if (
1271
1271
  ((!isvdev && index === 0) || (isvdev && index === 1)) &&
1272
1272
  item?.containerPosition == 'content' &&
1273
1273
  item?.marginBottom > 0 &&
1274
1274
  !clearFirstContaierMarginTop
1275
1275
  ) {
1276
1276
  item.marginTop = item.marginBottom;
1277
1277
  }
1278
1278
  });
1279
1279
  shopContentContainerListData = shopContentContainerListData.filter(
1280
1280
  item =>
1281
1281
  item.floors.length > 0 &&
1282
1282
  unableIsvContainerListData.every(
1283
1283
  containerItem => containerItem.containerId != item.containerId,
1284
1284
  ),
1285
1285
  );
1286
1286
  console.log(
1287
1287
  'dealShopContentData isWxMinAndWxapp:',
1288
1288
  isWxMinAndWxapp,
1289
1289
  'weappJumpToH5:',
1290
1290
  pageData?.homeExtInfo?.weappJumpToH5,
1291
1291
  );
1292
1292
  if (isProd && isWxMinAndWxapp) {
1293
1293
  shopContentContainerListData = shopContentContainerListData.filter(
1294
1294
  item =>
1295
1295
  item.floors.length > 0 &&
1296
1296
  !isIsvContainer(item.containerId, shopContentFloorListData, shopContentContainerListData),
1297
1297
  );
1298
1298
  }
1299
1299
  shopContentContainerListData = [].concat(shopContentContainerListData);
1300
1300
  return {
1301
1301
  shopContentContainerListData,
1302
1302
  shopContentFloorListData,
1303
1303
  };
1304
1304
  const changeOpts = {
1305
1305
  title: "",
1306
1306
  icon: "success",
1307
1307
  duration: 1500,
1308
1308
  mask: true,
1309
1309
  ...options,
1310
1310
  };
1311
1311
  if (changeOpts.title.length > 7) {
1312
1312
  showNormalToast(options);
1313
1313
  } else {
1314
1314
  Taro.showToast(changeOpts as any);
1315
1315
  }
1316
1316
  const changeOpts = {
1317
1317
  title: "",
1318
1318
  icon: "error",
1319
1319
  duration: 1500,
1320
1320
  mask: true,
1321
1321
  ...options,
1322
1322
  };
1323
1323
  if (changeOpts.title.length > 7) {
1324
1324
  showNormalToast(options);
1325
1325
  } else {
1326
1326
  Taro.showToast(changeOpts as any);
1327
1327
  }
1328
1328
  Taro.showToast({
1329
1329
  title: "",
1330
1330
  icon: "none",
1331
1331
  duration: 1500,
1332
1332
  mask: true,
1333
1333
  ...options,
1334
1334
  });
1335
1335
  return Taro.showLoading({
1336
1336
  title: text,
1337
1337
  });
1338
1338
  return new Promise(() => {
1339
1339
  Taro.nextTick(() => {
1340
1340
  setTimeout(() => {
1341
1341
  Taro.hideLoading(options);
1342
1342
  }, 300);
1343
1343
  });
1344
1344
  });
1345
1345
  return CHANNEL_TYPE[JDShopViewBusinessPathType.HOME];
1346
1346
  const {
1347
1347
  tabActive = SECTION_HOME_TAB_NAME_TYPE[SECTION_HOME_TAB_TYPE.HOME_WELL_CHOSEN],
1348
1348
  sceneId,
1349
1349
  } = query;
1350
1350
  let changeTabActive = tabActive;
1351
1351
  if (sceneId) {
1352
1352
  if (isH5) {
1353
1353
  if (sceneId == '1002') {
1354
1354
  changeTabActive = SECTION_HOME_TAB_NAME_TYPE[SECTION_HOME_TAB_TYPE.HOME_PRODUCT];
1355
1355
  }
1356
1356
  else if (sceneId == '1003') {
1357
1357
  changeTabActive = SECTION_HOME_TAB_NAME_TYPE[SECTION_HOME_TAB_TYPE.HOME_ACTIVITY];
1358
1358
  }
1359
1359
  } else if (isWxMinAndWxapp) {
1360
1360
  if (sceneId == '1001' || sceneId == '1002') {
1361
1361
  changeTabActive = SECTION_HOME_TAB_NAME_TYPE[SECTION_HOME_TAB_TYPE.HOME_PRODUCT];
1362
1362
  }
1363
1363
  else if (sceneId == '1003') {
1364
1364
  changeTabActive = SECTION_HOME_TAB_NAME_TYPE[SECTION_HOME_TAB_TYPE.HOME_PROMOTION];
1365
1365
  }
1366
1366
  }
1367
1367
  }
1368
1368
  if (SECTION_HOME_TAB_QUERY_TYPE[changeTabActive]) {
1369
1369
  return {
1370
1370
  menuType: SHOP_MENU_ID_TYPE.HOME,
1371
1371
  tabActiveType: SECTION_HOME_TAB_QUERY_TYPE[changeTabActive],
1372
1372
  queryMenuTabActiveStr: `${SHOP_MENU_ID_TYPE.HOME}@${SECTION_HOME_TAB_QUERY_TYPE[changeTabActive]}`,
1373
1373
  };
1374
1374
  } else if (SHOP_MENU_ID_QUERY_NAME[changeTabActive]) {
1375
1375
  return {
1376
1376
  menuType: SHOP_MENU_ID_QUERY_NAME[changeTabActive],
1377
1377
  tabActiveType: 0,
1378
1378
  queryMenuTabActiveStr: `${SHOP_MENU_ID_QUERY_NAME[changeTabActive]}@0`,
1379
1379
  };
1380
1380
  } else {
1381
1381
  return {
1382
1382
  menuType: SHOP_MENU_ID_TYPE.HOME,
1383
1383
  tabActiveType: SECTION_HOME_TAB_TYPE.HOME_WELL_CHOSEN,
1384
1384
  queryMenuTabActiveStr: `${SHOP_MENU_ID_TYPE.HOME}@${SECTION_HOME_TAB_TYPE.HOME_WELL_CHOSEN}`,
1385
1385
  };
1386
1386
  }
1387
1387
  const deleteKeyList = [
1388
1388
  '$taroTimestamp',
1389
1389
  'cookie',
1390
1390
  'wdref',
1391
1391
  'navStart',
1392
1392
  'originOpts',
1393
1393
  'originParams',
1394
1394
  'originUrl',
1395
1395
  'referer',
1396
1396
  'stamp',
1397
1397
  'hybrid',
1398
1398
  'sr',
1399
1399
  'navh',
1400
1400
  'stath',
1401
1401
  ];
1402
1402
  let changeQueryData: any = { ...queryData };
1403
1403
  const qrCodeScene = changeQueryData?.scene ? changeQueryData?.scene : false;
1404
1404
  const sceneQuery =
1405
1405
  qrCodeScene && typeof qrCodeScene === 'string'
1406
1406
  ? parseQueryUrlString(decodeURIComponent(qrCodeScene))
1407
1407
  : {}
1408
1408
  changeQueryData = { ...changeQueryData, ...sceneQuery }
1409
1409
  deleteKeyList.forEach(key => {
1410
1410
  changeQueryData[key] && delete changeQueryData[key]
1411
1411
  })
1412
1412
  changeQueryData['shopid'] &&
1413
1413
  (changeQueryData['shopId'] = changeQueryData['shopid']) &&
1414
1414
  delete changeQueryData['shopid'];
1415
1415
  changeQueryData['venderid'] &&
1416
1416
  (changeQueryData['venderId'] = changeQueryData['venderid']) &&
1417
1417
  delete changeQueryData['venderid'];
1418
1418
  changeQueryData['vendorId'] &&
1419
1419
  (changeQueryData['venderId'] = changeQueryData['vendorId']) &&
1420
1420
  delete changeQueryData['vendorId'];
1421
1421
  changeQueryData['shopId'] &&
1422
1422
  changeQueryData['shopId'] === 'undefined' &&
1423
1423
  delete changeQueryData['shopId'];
1424
1424
  changeQueryData['venderId'] &&
1425
1425
  changeQueryData['venderId'] === 'undefined' &&
1426
1426
  delete changeQueryData['venderId'];
1427
1427
  return changeQueryData;
1428
1428
  let isUsable = false;
1429
1429
  const modularPackResult = floorData?.floorExtInfo?.modularPackResult;
1430
1430
  const modularPackResultObj = formatPackResult(modularPackResult);
1431
1431
  const bundleUrl = getBundleUrl(modularPackResultObj);
1432
1432
  const bundleFileName = getBundleFileName(modularPackResultObj);
1433
1433
  const taroVersion = getTaroVersion(modularPackResultObj);
1434
1434
  if (bundleUrl && bundleFileName) {
1435
1435
  isUsable = true;
1436
1436
  }
1437
1437
  if (!isUsable && typeof exceptionReportFn === 'function') {
1438
1438
  exceptionReportFn({
1439
1439
  code: `${NO_ENVIRONMENT_AND_PAGE_TYPE_FLAG}${
1440
1440
  floorData?.floorExtInfo?.floorKind === FLOOR_KIND.PDC_SYSTEM_MODULE
1441
1441
  ? SgmCustomCode.SYSTEMPDCMODULE_DATA
1442
1442
  : SgmCustomCode.REMOTEMODULE_DATA
1443
1443
  }`,
1444
1444
  msg: {
1445
1445
  msg: `店铺h5楼层隐藏不显示。原因:模块数据不完备,楼层过滤。`,
1446
1446
  floorIdx: floorData?.floorIdx,
1447
1447
  uid: floorData?.uid,
1448
1448
  shopId: floorData?.floorExtInfo?.shopId,
1449
1449
  moduleId: floorData?.moduleId,
1450
1450
  moduleDesignerType: floorData?.floorExtInfo?.moduleDesignerType,
1451
1451
  floorLoadWay: floorData?.floorExtInfo?.floorLoadWay,
1452
1452
  floorKind: floorData?.floorExtInfo?.floorKind,
1453
1453
  middleTemplateId: floorData?.middleTemplateId,
1454
1454
  modularPackResult: {
1455
1455
  bundleUrl,
1456
1456
  taroVersion,
1457
1457
  },
1458
1458
  },
1459
1459
  });
1460
1460
  }
1461
1461
  return isUsable;
1462
1462
  const objContainer = containerListData.find(
1463
1463
  item => item.containerId === containerId,
1464
1464
  )
1465
1465
  return (
1466
1466
  objContainer?.includeUids?.some(itemUid => {
1467
1467
  const objectFloor = floorListData.find(
1468
1468
  floorItem => itemUid === floorItem.uid,
1469
1469
  )
1470
1470
  return RemoteLoadFloorList.includes(objectFloor?.floorExtInfo?.moduleFlag)
1471
1471
  }) ?? false
1472
1472
  );
1473
1473
  const unableIsvFloorListData = floorListData.filter(
1474
1474
  floorItem =>
1475
1475
  RemoteLoadFloorList.includes(floorItem?.floorExtInfo?.moduleFlag) &&
1476
1476
  !isIsvFloorUseable(floorItem, exceptionReportFn)
1477
1477
  );
1478
1478
  const unableIsvFloorUidList = unableIsvFloorListData.map(
1479
1479
  floorItem => floorItem.uid,
1480
1480
  )
1481
1481
  const unableIsvContainerListData = containerListData.filter(
1482
1482
  item =>
1483
1483
  item.includeUids &&
1484
1484
  item.includeUids.every(
1485
1485
  itemUid => unableIsvFloorUidList.indexOf(itemUid) != -1,
1486
1486
  ),
1487
1487
  )
1488
1488
  return unableIsvContainerListData;
1489
1489
  return -2;
1490
1490
  return customObj
1491
1491
  return customObj
1492
1492
  return customObj
1493
1493
  return customObj
1494
1494
  return customObj
1495
1495
  return /openApp\.jdMobile:\/\/virtual\?params=/i.test(openAppUrl)
1496
1496
  let getParams = false
1497
1497
  if (isOpenJdAppUrl(openAppUrl)) {
1498
1498
  try {
1499
1499
  getParams = openAppUrl.replace(/openApp\.jdMobile:\/\/virtual\?params=/i, '');
1500
1500
  getParams = JSON.parse(String(getParams));
1501
1501
  } catch (e) {
1502
1502
  console.log(e);
1503
1503
  }
1504
1504
  }
1505
1505
  return getParams;
1506
1506
  const getLastParams = Object.assign({}, openParams);
1507
1507
  return `openapp.jdmobile://virtual?params=${JSON.stringify(getLastParams)}`;
1508
1508
  if (val === null || val === '' || typeof val === 'undefined') {
1509
1509
  return true;
1510
1510
  }
1511
1511
  return false;
1512
1512
  const {
1513
1513
  moduleId = 'none',
1514
1514
  entrance = 'none',
1515
1515
  sourceType = 'none',
1516
1516
  sourceValue = 'none',
1517
1517
  } = params;
1518
1518
  if (isIosDevice) {
1519
1519
  return `${moduleId}#${entrance}`;
1520
1520
  } else if (isAndroidDevice) {
1521
1521
  return `${sourceType}#${sourceValue}`;
1522
1522
  }
1523
1523
  return 'none#none';
1524
1524
  if (data && typeof data === 'object') {
1525
1525
  let getOpenAppData = { ...data };
1526
1526
  try {
1527
1527
  const { sourceInfo, designerId, templateId, source } = getOpenAppData;
1528
1528
  if (designerId && templateId) {
1529
1529
  getOpenAppData = Object.assign({}, getOpenAppData, {
1530
1530
  sourceInfo: {
1531
1531
  entrance: "设计师预览",
1532
1532
  },
1533
1533
  });
1534
1534
  } else if (sourceInfo) {
1535
1535
  const { entrance } = sourceInfo;
1536
1536
  getOpenAppData.sourceInfo.entrance = entrance && entrance.length > 0 ? entrance : '其他';
1537
1537
  } else if (source && !sourceInfo) {
1538
1538
  if (typeof source === 'object') {
1539
1539
  const { sourceType, entrance, sourceValue, moduleId } = source;
1540
1540
  getOpenAppData = Object.assign({}, getOpenAppData, {
1541
1541
  sourceInfo: {
1542
1542
  entrance: sourceType || entrance || "其他",
1543
1543
  moduleId: sourceValue || moduleId || "-100",
1544
1544
  },
1545
1545
  });
1546
1546
  } else {
1547
1547
  getOpenAppData = Object.assign({}, getOpenAppData, {
1548
1548
  sourceInfo: {
1549
1549
  entrance: source,
1550
1550
  },
1551
1551
  });
1552
1552
  }
1553
1553
  } else {
1554
1554
  getOpenAppData = Object.assign({}, getOpenAppData, {
1555
1555
  sourceInfo: {
1556
1556
  entrance: "其他",
1557
1557
  },
1558
1558
  });
1559
1559
  }
1560
1560
  } catch (e) {
1561
1561
  console.log(e);
1562
1562
  }
1563
1563
  return getOpenAppData;
1564
1564
  }
1565
1565
  return data;
1566
1566
  return displayObj
1567
1567
  if (typeof input === 'string') {
1568
1568
  try {
1569
1569
  return JSON.parse(input);
1570
1570
  } catch (e) {
1571
1571
  console.error('JSON解析失败', e);
1572
1572
  return {};
1573
1573
  }
1574
1574
  }
1575
1575
  return input || {};
1576
1576
  return false;
1577
1577
  const borderStyle: { [key: string]: any } = {}
1578
1578
  if (item?.borderRadius) {
1579
1579
  let borderTopRadius = 0
1580
1580
  let borderBottomRadius = 0
1581
1581
  if (index === 0) {
1582
1582
  borderTopRadius = item.borderRadius
1583
1583
  borderBottomRadius =
1584
1584
  floorDataLen === 1 || item?.marginBottom !== 0 ? item.borderRadius : 0
1585
1585
  } else if (index === floorDataLen - 1) {
1586
1586
  borderTopRadius =
1587
1587
  floorData[index - 1]?.marginBottom === 0 ? 0 : item.borderRadius
1588
1588
  borderBottomRadius = item.borderRadius
1589
1589
  } else {
1590
1590
  borderTopRadius =
1591
1591
  floorData[index - 1]?.marginBottom === 0 ? 0 : item.borderRadius
1592
1592
  borderBottomRadius = item?.marginBottom === 0 ? 0 : item.borderRadius
1593
1593
  }
1594
1594
  borderStyle.borderTopLeftRadius = item?.borderTopLeftRadius ? `${item?.borderTopLeftRadius}px` : `${borderTopRadius}px`
1595
1595
  borderStyle.borderTopRightRadius = item?.borderTopRightRadius ? `${item?.borderTopRightRadius}px` : `${borderTopRadius}px`
1596
1596
  borderStyle.borderBottomLeftRadius = `${borderBottomRadius}px`
1597
1597
  borderStyle.borderBottomRightRadius = `${borderBottomRadius}px`
1598
1598
  borderStyle.borderTopLeftRadius = borderStyle?.borderTopLeftRadius || '0px';
1599
1599
  borderStyle.borderTopRightRadius = borderStyle?.borderTopRightRadius || '0px';
1600
1600
  borderStyle.borderBottomRightRadius = borderStyle?.borderBottomRightRadius || '0px';
1601
1601
  borderStyle.borderBottomLeftRadius = borderStyle?.borderBottomLeftRadius || '0px';
1602
1602
  return borderStyle
1603
1603
  isJdApp,
1604
1604
  isWxApp,
1605
1605
  isIosDevice,
1606
1606
  isAndroidDevice,
1607
1607
  isJdAndIosDevice,
1608
1608
  isJdAndAndroidDevice,
1609
1609
  isWxMin,
1610
1610
  isWxMinAndWxapp,
1611
1611
  isJdMin,
1612
1612
  isMin,
1613
1613
  isJdMinAndHarmony,
1614
1614
  isH5,
1615
1615
  isH5AndJdShopView,
1616
1616
  isImageOptimizeEnable,
1617
1617
  isChartH5,
1618
1618
  isH5AndJdShopViewNativeScroll,
1619
1619
  isH5AndJdShopViewH5Scroll,
1620
1620
  isH5AndJdShopH5CustomScrollView,
1621
1621
  isWxMiniH5View,
1622
1622
  sliceArrToChunkList,
1623
1623
  dealAddress,
1624
1624
  objectToUrlEncode,
1625
1625
  parseQueryUrlString,
1626
1626
  setLowSmallPicUrl,
1627
1627
  getJfsImage,
1628
1628
  getQualityImage,
1629
1629
  countStringify,
1630
1630
  setTaroStorage,
1631
1631
  getTaroStorageKeyValue,
1632
1632
  removeTaroStorageKey,
1633
1633
  clearTaroStorageKey,
1634
1634
  getSystemInfos,
1635
1635
  addHttps,
1636
1636
  dateFormat,
1637
1637
  throttle,
1638
1638
  lodashThrottle,
1639
1639
  debounce,
1640
1640
  getTelephone,
1641
1641
  rgbToHex,
1642
1642
  hexToRgb,
1643
1643
  getRandom,
1644
1644
  getWxAppCookieStr,
1645
1645
  pxTransformFromData,
1646
1646
  dealShopContentData,
1647
1647
  showSuccessToast,
1648
1648
  showFailToast,
1649
1649
  showNormalToast,
1650
1650
  showShopLoading,
1651
1651
  hideShopLoading,
1652
1652
  getAppChannelType,
1653
1653
  formatTabActiveMenuType,
1654
1654
  filterUrlQueryData,
1655
1655
  getAvifSupport,
1656
1656
  getWebpSupport,
1657
1657
  isMemberPage,
1658
1658
  sgmCustomReport,
1659
1659
  draCustomReport,
1660
1660
  remoteCustomReport,
1661
1661
  draInterfaceCustomReport,
1662
1662
  draBusinessCustomReport,
1663
1663
  isOpenJdAppUrl,
1664
1664
  jdOpenAppParams,
1665
1665
  createJdOpenAppUrl,
1666
1666
  dealJdOpenAppData,
1667
1667
  isEmpty,
1668
1668
  getJdAppReportPageSource,
1669
1669
  isAppClassifyPage,
1670
1670
  getQualityImageNew,
1671
1671
  getQualityImageOld,
1672
1672
  isPc,
1673
1673
  ipLoc_djd,
1674
1674
  jdAppVersionCompare,
1675
1675
  dealNativePixelToCssPixel,
1676
1676
  isAppStowShop,
1677
1677
  isIpadDevice,
1678
1678
  getBorderStyle,