@conecli/cone-render 0.10.1-shop3.9 → 0.10.1-shop3.91

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/README.md +1 -1
  2. package/dist/api/index.ts +1 -1
  3. package/dist/common/accessibility.h5.ts +1 -0
  4. package/dist/common/accessibility.ts +0 -0
  5. package/dist/common/const.ts +1 -1
  6. package/dist/common/index.h5.ts +1 -1
  7. package/dist/common/index.jd.ts +1 -1
  8. package/dist/common/index.ts +1 -1
  9. package/dist/common/index.weapp.ts +1 -1
  10. package/dist/common/jdplayerSdk.weapp.tsx +1 -0
  11. package/dist/common/jssdk.ts +1 -1
  12. package/dist/common/jssdk.weapp.ts +1 -0
  13. package/dist/common/pageType.ts +1 -1
  14. package/dist/common/token/index.h5.ts +1 -1
  15. package/dist/common/token/token.jd.ts +1 -1
  16. package/dist/common/wxappApi.ascf.ts +1 -0
  17. package/dist/common/wxappApi.ts +1 -1
  18. package/dist/components/ErrorBoundary.tsx +1 -1
  19. package/dist/components/base/CommonFloorHead/index.tsx +1 -1
  20. package/dist/components/base/CountDown/index.tsx +1 -1
  21. package/dist/components/base/CustomScrollView/index.tsx +1 -1
  22. package/dist/components/base/CustomVideo/index.tsx +1 -1
  23. package/dist/components/base/CustomVideo/index.weapp.tsx +1 -0
  24. package/dist/components/base/ExposureSmart/index.h5.tsx +1 -1
  25. package/dist/components/base/ExposureSmart/index.tsx +1 -1
  26. package/dist/components/base/ExposureSmart/reporter.tsx +1 -1
  27. package/dist/components/base/InOrOutViewObserver/index.weapp.tsx +1 -0
  28. package/dist/components/base/ItemViewExposureSmart/index.tsx +1 -1
  29. package/dist/components/base/LazyLayoutLoad/index.tsx +1 -1
  30. package/dist/components/base/LazyLoadImage/index.h5.tsx +1 -1
  31. package/dist/components/base/MobileCommonHeader/index.tsx +1 -1
  32. package/dist/components/base/MobileCommonHeader/index.weapp.tsx +1 -0
  33. package/dist/components/base/NetworkDataError/const.ts +1 -1
  34. package/dist/components/base/NetworkDataError/index.module.scss +118 -72
  35. package/dist/components/base/NetworkDataError/index.tsx +1 -1
  36. package/dist/components/base/Price/Base/index.module.scss +12 -0
  37. package/dist/components/base/Price/Base/index.tsx +1 -1
  38. package/dist/components/base/Price/Double/index.module.scss +25 -1
  39. package/dist/components/base/Price/Double/index.tsx +1 -1
  40. package/dist/components/base/ShopLeGaoTag/index.h5.module.scss +35 -0
  41. package/dist/components/base/ShopLeGaoTag/index.h5.tsx +1 -0
  42. package/dist/components/base/ShopLeGaoTag/index.module.scss +33 -0
  43. package/dist/components/base/ShopLeGaoTag/index.tsx +1 -0
  44. package/dist/components/debug/DebugLayout/index.module.scss +2 -2
  45. package/dist/components/floorItem.tsx +1 -1
  46. package/dist/components/isv/Floor/index.tsx +1 -1
  47. package/dist/components/remoteFloorItem.tsx +1 -1
  48. package/dist/config/env.ts +1 -1
  49. package/dist/interface/common.ts +1 -1
  50. package/dist/interface/component.ts +1 -1
  51. package/dist/interface/jumpEventReport.ts +1 -1
  52. package/dist/interface/service.ts +1 -1
  53. package/dist/jumpEventReport/base.ts +1 -1
  54. package/dist/jumpEventReport/const.ts +1 -1
  55. package/dist/jumpEventReport/createReportFloorData.ts +1 -1
  56. package/dist/jumpEventReport/index.h5.ts +1 -1
  57. package/dist/jumpEventReport/index.jd.ts +1 -1
  58. package/dist/jumpEventReport/index.weapp.ts +1 -1
  59. package/dist/jumpEventReport/jdJumpJdApp.ts +1 -1
  60. package/dist/jumpEventReport/jumpUrlConfig/base.ts +1 -1
  61. package/dist/jumpEventReport/logEventConfig.h5.ts +1 -0
  62. package/dist/jumpEventReport/logEventConfig.ts +1 -1
  63. package/dist/jumpEventReport/web/report.ts +1 -1
  64. package/dist/jumpEventReport/web.base.ts +1 -1
  65. package/dist/jumpEventReport/web.jd.ts +1 -1
  66. package/dist/jumpEventReport/web.pc.ts +1 -1
  67. package/dist/jumpEventReport/web.tjm.ts +1 -1
  68. package/dist/jumpEventReport/web.wxapp.ts +1 -1
  69. package/dist/language/en_US.json +309 -0
  70. package/dist/language/zh_CN.json +309 -0
  71. package/dist/language/zh_HK.json +309 -0
  72. package/dist/libs/openShopBridge.js +161 -0
  73. package/dist/libs/openShopBridge.min.js +1 -0
  74. package/dist/libs/taroAppReport.js +2 -2
  75. package/dist/modules/ContainerFloorList/index.h5.module.scss +16 -2
  76. package/dist/modules/ContainerFloorList/index.h5.tsx +1 -1
  77. package/dist/modules/ContainerFloorList/index.tsx +1 -1
  78. package/dist/modules/DecorateContainerFloorList/index.weapp.tsx +1 -0
  79. package/dist/open/api/environment.ts +1 -1
  80. package/dist/open/api/shopMember.ts +1 -1
  81. package/dist/open/api/shopMember.weapp.ts +1 -0
  82. package/dist/open/api/track.ts +1 -1
  83. package/dist/open/api/util.ts +1 -1
  84. package/dist/open/components/index.ts +1 -1
  85. package/dist/open/index.ts +1 -1
  86. package/dist/sass/app.h5.scss +27 -1
  87. package/dist/sass/base.scss +8 -4
  88. package/dist/service/fetchGateway.ts +1 -1
  89. package/dist/service/fetchGateway.weapp.ts +1 -1
  90. package/dist/service/fetchJsonp.weapp.ts +1 -0
  91. package/dist/service/http/const.ts +1 -1
  92. package/dist/service/http/h5Http.ts +1 -1
  93. package/dist/service/http/httpInterceptors.weapp.ts +1 -0
  94. package/dist/service/requestServer.h5.ts +1 -1
  95. package/dist/service/requestServer.ts +1 -1
  96. package/dist/service/requestServer.weapp.ts +1 -1
  97. package/dist/utils/connectNativeJsBridge.ts +1 -1
  98. package/dist/utils/h5Utils.ts +1 -1
  99. package/dist/utils/harmonyCallRouter.h5.ts +1 -0
  100. package/dist/utils/harmonyCallRouter.ts +0 -0
  101. package/dist/utils/index.h5.ts +1 -1
  102. package/dist/utils/index.ts +1 -1
  103. package/dist/utils/index.weapp.ts +1 -1
  104. package/dist/utils/jumpExtMapUtil.ts +1 -0
  105. package/dist/utils/log.ts +1 -0
  106. package/dist/utils/{sColor.js → sColor.ts} +1 -1
  107. package/dist/utils/sColor.weapp.ts +1 -0
  108. package/dist/utils/utils.ts +1 -1
  109. package/dist/wxapp/common/address_api/address_api_v2.js +1 -0
  110. package/dist/wxapp/common/user_info.js +1 -1
  111. package/package.json +162 -141
  112. package/dist/jumpEventReport/web/wqshop.report.ts +0 -1
  113. package/dist/utils/priceUtils.js +0 -1
  114. /package/dist/utils/{jumpExtMapUtil.js → jumpExtMapUtil.h5.ts} +0 -0
@@ -1 +1 @@
1
- import Taro from "@tarojs/taro";
2
1
  appEid,
3
2
  userPinKey,
4
3
  jdUserLoginState,
5
4
  WXAPP_LOGIN,
6
5
  WXAPP_BIZ,
7
6
  WXAPP_USER_INFO,
8
7
  WXAPP_NAVIGATOR,
9
8
  WXAPP_REPORT_GDT,
10
9
  WXAPP_PARAMS_SIGN,
11
10
  WXAPP_FINGER_REPORT,
12
11
  WXAPP_REPORT_MANAGE,
13
12
  BUSINESS_TYPE,
14
13
  SHOP_MENU_ID_TYPE,
15
14
  SHOP_MENU_ID_NAME,
16
15
  SECTION_HOME_TAB_NAME_TYPE,
17
16
  SECTION_HOME_TAB_TYPE,
18
17
  TaroEventType,
19
18
  WX_BUSINESS_TYPE,
20
19
  WXAPP_BIZ_KEY,
21
20
  getSystemInfos,
22
21
  getTaroStorageKeyValue,
23
22
  removeTaroStorageKey,
24
23
  setTaroStorage,
25
24
  getWxAppCookieStr,
26
25
  objectToUrlEncode,
27
26
  abTestLabels: {},
28
27
  loginState: jdUserLoginState,
29
28
  cookiesStr: "",
30
29
  userInfo: userPinKey,
31
30
  pageInfo: {
32
31
  wxBusinessType: WX_BUSINESS_TYPE.SHOP,
33
32
  address: "",
34
33
  addressCommaStr: "",
35
34
  un_area: "",
36
35
  vapptype: "1",
37
36
  pageType: "home",
38
37
  dataType: BUSINESS_TYPE.ONLINE,
39
38
  floorExposureInfo: {},
40
39
  floorVideInfo: {},
41
40
  productVideInfo: {},
42
41
  tabsLoadAllDataInfo: {
43
42
  [SECTION_HOME_TAB_NAME_TYPE[SECTION_HOME_TAB_TYPE.HOME_WELL_CHOSEN]]:
44
43
  false,
45
44
  [SHOP_MENU_ID_NAME[SHOP_MENU_ID_TYPE.CLASSIFY]]: true,
46
45
  },
47
46
  updateShopInfosAllState: false,
48
47
  isVipShop: false,
49
48
  isJdShowNativeImmersivePlayer: false,
50
49
  ...shopConfig,
51
50
  pageScrollTop: 0,
52
51
  pageIdxHeightInfo: {
53
52
  list: [],
54
53
  },
55
54
  shopNavBarHeight: 0,
56
55
  },
57
56
  defaultQueryLogInfo: {
58
57
  sourceType: "JDshop",
59
58
  sourceValue: "",
60
59
  moduleId: "none",
61
60
  entrance: "none",
62
61
  },
63
62
  originQueryInfo: {},
64
63
  sysInfo: {
65
64
  windowWidth: 0,
66
65
  windowHeight: 0,
67
66
  eid: appEid,
68
67
  netWorkType: "4g",
69
68
  jdBottomBarHeight: 0,
70
69
  jdNativeHeaderHeight: 0,
71
70
  },
72
71
  queryInfo: {},
73
72
  shopInfo: {},
74
73
  openAppData: {},
75
74
  public info: CommonInterFace.BaseConfigInfo;
76
75
  public config: {
77
76
  [key: string]: any;
78
77
  };
79
78
  public lazyContainer: CommonInterFace.lazyContainer;
80
79
  public rootEleNode: HTMLElement | null;
81
80
  public miniApplogUtil: CommonInterFace.MiniApplogUtil;
82
81
  public miniAppLogInstance: CommonInterFace.MiniAppLog | null;
83
82
  public checkStatusAndLoginPromise: object | null;
84
83
  public wxAppLoginInstance: CommonInterFace.WxAppLogin;
85
84
  public wxAppBizInstance: CommonInterFace.WxAppUserInfo;
86
85
  public wxAppUserInfoInstance: CommonInterFace.WxAppUserInfo;
87
86
  public wxAppReportManageInstance: CommonInterFace.wxAppReportManage;
88
87
  public wxAppReportGDTInstance: CommonInterFace.WxAppReportGDT;
89
88
  public wxAppNavigatorInstance: CommonInterFace.WxAppNavigator;
90
89
  public wxAppParamsSignInstance: CommonInterFace.wxAppParamsSign;
91
90
  public wxAppFingerReportInstance: CommonInterFace.wxAppParamsSign;
92
91
  public wxAppSubsGuider: CommonInterFace.wxAppParamsSign;
93
92
  public loadJsSdkList: Array<any>
94
93
  public loadJsSdkListCachePromise: any
95
94
  constructor(opt) {
96
95
  this.info = this._getConfig(opt);
97
96
  this.config = {};
98
97
  this.lazyContainer = {
99
98
  [SECTION_HOME_TAB_NAME_TYPE[SECTION_HOME_TAB_TYPE.HOME_WELL_CHOSEN]]: {
100
99
  appLazyContainerList: [],
101
100
  appLazyFinishContainerList: [],
102
101
  },
103
102
  [SECTION_HOME_TAB_NAME_TYPE[SECTION_HOME_TAB_TYPE.HOME_PROMOTION]]: {
104
103
  appLazyContainerList: [],
105
104
  appLazyFinishContainerList: [],
106
105
  },
107
106
  };
108
107
  this.loadJsSdkList = []
109
108
  this.loadJsSdkListCachePromise = {}
110
109
  this.rootEleNode = null;
111
110
  this.miniApplogUtil = MiniAppLogUtil;
112
111
  this.miniAppLogInstance = null;
113
112
  this.checkStatusAndLoginPromise = null;
114
113
  this.wxAppLoginInstance = WXAPP_LOGIN;
115
114
  this.wxAppBizInstance = WXAPP_BIZ;
116
115
  this.wxAppUserInfoInstance = WXAPP_USER_INFO;
117
116
  this.wxAppReportManageInstance = WXAPP_REPORT_MANAGE;
118
117
  this.wxAppReportGDTInstance = WXAPP_REPORT_GDT;
119
118
  this.wxAppNavigatorInstance = WXAPP_NAVIGATOR;
120
119
  this.wxAppParamsSignInstance = WXAPP_PARAMS_SIGN;
121
120
  this.wxAppFingerReportInstance = WXAPP_FINGER_REPORT
122
121
  ? new WXAPP_FINGER_REPORT()
123
122
  : {};
124
123
  this.wxAppSubsGuider = null;
125
124
  }
126
125
  _getConfig(opt) {
127
126
  return Object.assign({}, DefaultConfig, opt);
128
127
  }
129
128
 
130
129
  taskTimeoutPromise(callBack, timeout = 2000) {
131
130
  return new Promise((resolve) => {
132
131
  setTimeout(() => {
133
132
  const getCallBackRes = typeof callBack === "function" && callBack();
134
133
  return resolve(getCallBackRes || false);
135
134
  }, timeout);
136
135
  });
137
136
  }
138
137
 
139
138
  updateBusinessDomainAndApi(domain, api) {
140
139
  }
141
140
 
142
141
  getFullScreenHeight(systemInfo) {
143
142
  const { screenHeight, statusBarHeight, isAndroid } = systemInfo;
144
143
  let result = screenHeight;
145
144
  if (statusBarHeight > 20 && isAndroid) {
146
145
  result = screenHeight + statusBarHeight;
147
146
  }
148
147
  return result;
149
148
  }
150
149
 
151
150
  getTabBarHeight(systemInfo) {
152
151
  const { statusBarHeight, isAndroid, isIOS } = systemInfo;
153
152
  let result = 50;
154
153
  if (statusBarHeight > 20) {
155
154
  if (isIOS) {
156
155
  result = 84;
157
156
  } else if (isAndroid) {
158
157
  result = 53;
159
158
  }
160
159
  }
161
160
  return result;
162
161
  }
163
162
 
164
163
  getSystemInfo() {
165
164
  const info: UtilsInterFace.taroGetSystemInfoSyncRes =
166
165
  getSystemInfos() || {};
167
166
  const actualNavBarHeight =
168
167
  (info?.navBarHeight || 0) + (info?.navBarExtendHeight || 0);
169
168
  const headerHeight = actualNavBarHeight + (info?.statusBarHeight || 0);
170
169
  const fullScreenHeight = this.getFullScreenHeight(info);
171
170
  const tabBarHeight = this.getTabBarHeight(info);
172
171
  const safeContentHeight = fullScreenHeight - headerHeight;
173
172
  this.info.sysInfo = {
174
173
  ...this.info.sysInfo,
175
174
  ...info,
176
175
  actualNavBarHeight,
177
176
  headerHeight,
178
177
  fullScreenHeight,
179
178
  tabBarHeight,
180
179
  safeContentHeight,
181
180
  };
182
181
  this.getEid().then((res: { eid: string }) => {
183
182
  res && res.eid && (this.info.sysInfo["eid"] = res.eid);
184
183
  });
185
184
  if (this.info.sysInfo["hostVersionName"]) {
186
185
  this.info.sysInfo["hostAppVersion"] = Number(
187
186
  this.info.sysInfo["hostVersionName"].replace(/\./g, "")
188
187
  );
189
188
  }
190
189
  this.info.sysInfo["wifiVideoAutoPlay"] = false;
191
190
  this.getNetWorkType();
192
191
  }
193
192
  async updateMPaasConfig() {}
194
193
 
195
194
  getNetWorkType() {
196
195
  Taro.getNetworkType().then((getRes) => {
197
196
  getRes &&
198
197
  getRes.networkType &&
199
198
  (this.info.sysInfo["netWorkType"] = getRes.networkType);
200
199
  });
201
200
  }
202
201
  getAPPUseStraightCorner () {
203
202
  return Promise.resolve(false)
204
203
  }
205
204
 
206
205
  checkStatusAndLogin(options = {}) {
207
206
  this.checkStatusAndLoginPromise = new Promise((resolve, reject) => {
208
207
  console.log(
209
208
  "微信小程序登录状态及获取cookie状态的promise,之前登录状态",
210
209
  this.info.loginState
211
210
  );
212
211
  this.toLogin(options)
213
212
  .then((res) => {
214
213
  console.log("微信小程序登录状态结果,成功", res);
215
214
  this.info.loginState = true;
216
215
  resolve(res);
217
216
  })
218
217
  .catch((err) => {
219
218
  console.log("微信小程序登录异常状态结果", err);
220
219
  this.doLogin(options)
221
220
  .then((res2) => {
222
221
  console.log("微信小程序wxDoLogin强制登陆成功:", res2);
223
222
  this.info.loginState = true;
224
223
  resolve(res2);
225
224
  })
226
225
  .catch((err2) => {
227
226
  console.log("微信小程序wxDoLogin强制登陆失败:", err2);
228
227
  this.checkStatusAndLoginPromise = null;
229
228
  reject(err2);
230
229
  });
231
230
  });
232
231
  });
233
232
  return this.checkStatusAndLoginPromise;
234
233
  }
235
234
 
236
235
  checkJdStatusAndLogin(options) {
237
236
  return this.checkStatusAndLogin(options);
238
237
  }
239
238
 
240
239
 
241
240
  doLoginForJdPin(options = {}) {
242
241
  return this.doLogin(options);
243
242
  }
244
243
 
245
244
  getEid() {
246
245
  if (typeof jd !== "undefined" && jd.getEid) {
247
246
  return new Promise((resolve, reject) => {
248
247
  jd.getEid({
249
248
  success: (res: { eid: string }) => {
250
249
  resolve(res);
251
250
  },
252
251
  fail: (err: any) => {
253
252
  reject(err);
254
253
  },
255
254
  });
256
255
  });
257
256
  } else {
258
257
  return Promise.resolve(false);
259
258
  }
260
259
  }
261
260
 
262
261
  toLogin(options = {}): Promise<any> {
263
262
  return this.wxAppLoginInstance
264
263
  .getLoginPromise({
265
264
  mode: "silent",
266
265
  loginColor: {
267
266
  biz: WXAPP_BIZ_KEY,
268
267
  dpin: 0,
269
268
  },
270
269
  ...options,
271
270
  })
272
271
  .then((res) => {
273
272
  console.log("微信app登录返回信息,微信侧返回code为0表示成功", res);
274
273
  setTimeout(() => {
275
274
  console.log(
276
275
  "微信app登录返回成功后,后台会写入cookie,有延迟,这里延迟500ms去获取最新cookie"
277
276
  );
278
277
  this.getLoginCookie(`${Date.now()}`);
279
278
  }, 500);
280
279
  })
281
280
  .catch((err) => {
282
281
  console.log("微信app登录异常返回信息,也获取cookie", err);
283
282
  this.getLoginCookie(`${Date.now()}`);
284
283
  });
285
284
  }
286
285
 
287
286
  doLogin(options) {
288
287
  console.log("触发松果小程序 doLogin() new new");
289
288
  return new Promise((resolve, reject) => {
290
289
  jd.login({
291
290
  success: (res) => {
292
291
  if (res.code) {
293
292
  console.log("[common]松果小程序登录成功", res.code);
294
293
  jd.redirectTo({
295
294
  url: `/pages/shopx/pages/index/index?${objectToUrlEncode({
296
295
  ...this.info.originQueryInfo,
297
296
  })}`,
298
297
  });
299
298
  resolve(res);
300
299
  } else {
301
300
  console.error("[common]松果小程序登录失败", res.errMsg);
302
301
  reject();
303
302
  }
304
303
  },
305
304
  fail: (res) => {
306
305
  console.error("[common]松果小程序登录失败", res.errMsg);
307
306
  reject();
308
307
  },
309
308
  });
310
309
  });
311
310
  }
312
311
 
313
312
  getLoginCookie(updateKey = "wxapp") {
314
313
  return new Promise((resolve) => {
315
314
  console.log("开始获取更新wxapp中的cookie信息", updateKey);
316
315
  if (
317
316
  this.config.wqCookie &&
318
317
  this.config.wqCookieStr &&
319
318
  this.config.getWqCookieKey === updateKey
320
319
  ) {
321
320
  console.log("已有存储wxapp中的cookie信息,直接返回", this.config);
322
321
  resolve({
323
322
  wqCookie: this.config.wqCookie,
324
323
  wqCookieStr: this.config.wqCookieStr,
325
324
  });
326
325
  } else {
327
326
  if (isPublishToWxapp) {
328
327
  const getWxappCookieObj = getTaroStorageKeyValue("cookies") || null;
329
328
  if (getWxappCookieObj) {
330
329
  const getCookieObj = getWxappCookieObj["_data"];
331
330
  const { wqCookie, wqCookieStr } = getWxAppCookieStr(getCookieObj);
332
331
  const {
333
332
  pin = "",
334
333
  visitkey = "-1",
335
334
  wq_unionid = "",
336
335
  wxapp_openid = "",
337
336
  } = wqCookie;
338
337
  this.info.loginState = true;
339
338
  this.info.userInfo.wqCookie = wqCookieStr;
340
339
  this.info.userInfo.wqVisitkey = visitkey;
341
340
  console.log("获取用户完整cookie信息", getCookieObj);
342
341
  const getUserAddress = this.wxAppUserInfoInstance.getAddress();
343
342
  console.log("获取微信用户地址信息", getUserAddress);
344
343
  if (getUserAddress) {
345
344
  this.info.pageInfo.address = getUserAddress?.areaId;
346
345
  this.info.pageInfo.addressCommaStr = this.info.pageInfo.address
347
346
  ? this.info.pageInfo.address.replace(/_/g, ",")
348
347
  : "";
349
348
  this.info.pageInfo.un_area = this.info.pageInfo.address;
350
349
  Taro.eventCenter.trigger(
351
350
  TaroEventType.USER_AREA_UPDATE,
352
351
  this.info.pageInfo.address
353
352
  );
354
353
  }
355
354
  if (this.miniAppLogInstance) {
356
355
  this.miniAppLogInstance.set({
357
356
  account: pin,
358
357
  unionid: wq_unionid,
359
358
  openid: wxapp_openid,
360
359
  });
361
360
  }
362
361
  this.config.wqCookie = wqCookie;
363
362
  this.config.wqCookieStr = wqCookieStr;
364
363
  this.config.getWqCookieKey = updateKey;
365
364
  console.log("解析wxapp中的cookie信息成功,返回后存储", this.config);
366
365
  resolve({
367
366
  wqCookie,
368
367
  wqCookieStr,
369
368
  });
370
369
  } else {
371
370
  console.log(
372
371
  "解析wxapp中的cookie信息异常,返回异常结果",
373
372
  this.config
374
373
  );
375
374
  resolve({
376
375
  wqCookie: false,
377
376
  wqCookieStr: false,
378
377
  });
379
378
  }
380
379
  } else {
381
380
  resolve({
382
381
  wqCookie: false,
383
382
  wqCookieStr: false,
384
383
  });
385
384
  }
386
385
  }
387
386
  });
388
387
  }
389
388
 
390
389
 
391
390
  checkLoginStatus() {
392
391
  return this.getLoginCookie();
393
392
  }
394
393
 
395
394
  getAddressCachePromise = () => {
396
395
  return Promise.reject("该方法只在APP内适用");
397
396
  };
398
397
 
399
398
  getDynamicConfig(key: string) {
400
399
  console.warn(
401
400
  "调用松果小程序的 getDynamicConfig(),注意,此方法还未实现!"
402
401
  );
403
402
  return null;
404
403
  }
405
404
 
406
405
  updatePageAndLogInfo(updateQuery = {}) {
407
406
  const createUpdateQueryInfo: {
408
407
  query: {
409
408
  shopId?: string | number;
410
409
  venderId?: string | number;
411
410
  };
412
411
  updateShopInfoState: boolean;
413
412
  } = Object.assign(
414
413
  {},
415
414
  {
416
415
  query: {},
417
416
  updateShopInfoState: false,
418
417
  },
419
418
  updateQuery
420
419
  );
421
420
  console.log(
422
421
  "获取当前下发的店铺查询参数",
423
422
  updateQuery,
424
423
  "获取之前保存的shopInfo店铺查询参数",
425
424
  this.info?.shopInfo
426
425
  );
427
426
  const { query, updateShopInfoState } = createUpdateQueryInfo;
428
427
  const { shopId, venderId } = query;
429
428
  if (updateShopInfoState) {
430
429
  this.info.queryInfo = {
431
430
  ...this.info.queryInfo,
432
431
  ...query,
433
432
  };
434
433
  if (shopId && venderId) {
435
434
  this.info.shopInfo = {
436
435
  shopId: `${shopId}`,
437
436
  venderId: `${venderId}`,
438
437
  };
439
438
  }
440
439
  } else {
441
440
  this.info.queryInfo = {
442
441
  ...query,
443
442
  };
444
443
  this.info.originQueryInfo = {
445
444
  ...query,
446
445
  };
447
446
  if (
448
447
  this.info.shopInfo?.shopId &&
449
448
  this.info.shopInfo?.venderId &&
450
449
  (this.info.shopInfo.shopId == shopId ||
451
450
  this.info.shopInfo.venderId == venderId)
452
451
  ) {
453
452
  this.info.queryInfo.shopId = this.info.shopInfo.shopId;
454
453
  this.info.queryInfo.venderId = this.info.shopInfo.venderId;
455
454
  console.log(
456
455
  "当前存储的店铺shopId和venderId与下发的店铺信息shopId或者venderId为同一个,补充shopId或者venderId查询参数",
457
456
  this.info.queryInfo
458
457
  );
459
458
  }
460
459
  }
461
460
  this.info.queryInfo["shopId"] &&
462
461
  (this.info.queryInfo["shopId"] = `${this.info.queryInfo["shopId"]}`);
463
462
  this.info.queryInfo["venderId"] &&
464
463
  (this.info.queryInfo["venderId"] = `${this.info.queryInfo["venderId"]}`);
465
464
  console.log(
466
465
  "weapp===获取店铺下发查询参数\n",
467
466
  query,
468
467
  "\n获取店铺最后查询参数\n",
469
468
  this.info.queryInfo,
470
469
  "\n是否为更新店铺状态\n",
471
470
  updateShopInfoState
472
471
  );
473
472
  }
474
473
  renderNextTickLoadSdk(){
475
474
  console.warn("暂未实现 index.jd.ts")
476
475
  }
477
476
  loadOtherSdk(){
478
477
  console.warn("暂未实现 index.jd.ts")
479
478
  }
480
479
  loadItemSdkPromise(jsInfo = {}) {
481
480
  console.warn('暂未实现 index.jd.ts')
482
481
  }
482
+ import Taro from '@tarojs/taro';
483
483
  WXAPP_LOGIN,
484
484
  WXAPP_BIZ,
485
485
  WXAPP_USER_INFO,
486
486
  WXAPP_NAVIGATOR,
487
487
  WXAPP_REPORT_GDT,
488
488
  WXAPP_PARAMS_SIGN,
489
489
  WXAPP_FINGER_REPORT,
490
490
  WXAPP_REPORT_MANAGE,
491
491
  BUSINESS_TYPE,
492
492
  SHOP_MENU_ID_TYPE,
493
493
  SHOP_MENU_ID_NAME,
494
494
  SECTION_HOME_TAB_NAME_TYPE,
495
495
  SECTION_HOME_TAB_TYPE,
496
496
  TaroEventType,
497
497
  WX_BUSINESS_TYPE,
498
498
  WXAPP_BIZ_KEY,
499
499
  getSystemInfos,
500
500
  getTaroStorageKeyValue,
501
501
  removeTaroStorageKey,
502
502
  setTaroStorage,
503
503
  getWxAppCookieStr,
504
504
  objectToUrlEncode,
505
505
  languageNowType,
506
506
  abTestLabels: {},
507
507
  nonSellableSkuids: {},
508
508
  loginState: jdUserLoginState,
509
509
  cookiesStr: '',
510
510
  userInfo: userPinKey,
511
511
  isImmersive: false,
512
512
  baseAddCartSwitch: true,
513
513
  pageInfo: {
514
514
  wxBusinessType: WX_BUSINESS_TYPE.SHOP,
515
515
  address: '',
516
516
  addressCommaStr: '',
517
517
  un_area: '',
518
518
  userLbsAddress: '',
519
519
  vapptype: '1',
520
520
  pageType: 'home',
521
521
  dataType: BUSINESS_TYPE.ONLINE,
522
522
  floorExposureInfo: {},
523
523
  floorVideInfo: {},
524
524
  productVideInfo: {},
525
525
  tabsLoadAllDataInfo: {
526
526
  [SECTION_HOME_TAB_NAME_TYPE[SECTION_HOME_TAB_TYPE.HOME_WELL_CHOSEN]]: false,
527
527
  [SHOP_MENU_ID_NAME[SHOP_MENU_ID_TYPE.CLASSIFY]]: true,
528
528
  },
529
529
  updateShopInfosAllState: false,
530
530
  isVipShop: false,
531
531
  isJdShowNativeImmersivePlayer: false,
532
532
  isSuperBrandShop: false,
533
533
  ...shopConfig,
534
534
  pageScrollTop: 0,
535
535
  pageIdxHeightInfo: {
536
536
  list: [],
537
537
  },
538
538
  shopNavBarHeight: 0,
539
539
  },
540
540
  defaultQueryLogInfo: {
541
541
  sourceType: 'JDshop',
542
542
  sourceValue: '',
543
543
  moduleId: 'none',
544
544
  entrance: 'none',
545
545
  },
546
546
  originQueryInfo: {},
547
547
  sysInfo: {
548
548
  windowWidth: 0,
549
549
  windowHeight: 0,
550
550
  eid: appEid,
551
551
  netWorkType: '4g',
552
552
  jdBottomBarHeight: 0,
553
553
  jdNativeHeaderHeight: 0,
554
554
  },
555
555
  queryInfo: {},
556
556
  shopInfo: {},
557
557
  openAppData: {},
558
558
  public info: CommonInterFace.BaseConfigInfo;
559
559
  public config: {
560
560
  [key: string]: any;
561
561
  };
562
562
  public lazyContainer: CommonInterFace.lazyContainer;
563
563
  public rootEleNode: HTMLElement | null;
564
564
  public miniApplogUtil: CommonInterFace.MiniApplogUtil;
565
565
  public miniAppLogInstance: CommonInterFace.MiniAppLog | null;
566
566
  public checkStatusAndLoginPromise: object | null;
567
567
  public wxAppLoginInstance: CommonInterFace.WxAppLogin;
568
568
  public wxAppBizInstance: CommonInterFace.WxAppUserInfo;
569
569
  public wxAppUserInfoInstance: CommonInterFace.WxAppUserInfo;
570
570
  public wxAppReportManageInstance: CommonInterFace.wxAppReportManage;
571
571
  public wxAppReportGDTInstance: CommonInterFace.WxAppReportGDT;
572
572
  public wxAppNavigatorInstance: CommonInterFace.WxAppNavigator;
573
573
  public wxAppParamsSignInstance: CommonInterFace.wxAppParamsSign;
574
574
  public wxAppFingerReportInstance: CommonInterFace.wxAppParamsSign;
575
575
  public wxAppSubsGuider: CommonInterFace.wxAppParamsSign;
576
576
  public loadJsSdkList: Array<any>;
577
577
  public loadJsSdkListCachePromise: any;
578
578
  public languageJsonData: any | null;
579
579
  public businessWorkerReady: boolean;
580
580
  public jdWorkerReadyPromise: any | null;
581
581
  constructor(opt) {
582
582
  this.info = this._getConfig(opt);
583
583
  this.config = {};
584
584
  this.lazyContainer = {
585
585
  [SECTION_HOME_TAB_NAME_TYPE[SECTION_HOME_TAB_TYPE.HOME_WELL_CHOSEN]]: {
586
586
  appLazyContainerList: [],
587
587
  appLazyFinishContainerList: [],
588
588
  },
589
589
  [SECTION_HOME_TAB_NAME_TYPE[SECTION_HOME_TAB_TYPE.HOME_PROMOTION]]: {
590
590
  appLazyContainerList: [],
591
591
  appLazyFinishContainerList: [],
592
592
  },
593
593
  };
594
594
  this.loadJsSdkList = [];
595
595
  this.loadJsSdkListCachePromise = {};
596
596
  this.rootEleNode = null;
597
597
  this.miniApplogUtil = MiniAppLogUtil;
598
598
  this.miniAppLogInstance = null;
599
599
  this.checkStatusAndLoginPromise = null;
600
600
  this.wxAppLoginInstance = WXAPP_LOGIN;
601
601
  this.wxAppBizInstance = WXAPP_BIZ;
602
602
  this.wxAppUserInfoInstance = WXAPP_USER_INFO;
603
603
  this.wxAppReportManageInstance = WXAPP_REPORT_MANAGE;
604
604
  this.wxAppReportGDTInstance = WXAPP_REPORT_GDT;
605
605
  this.wxAppNavigatorInstance = WXAPP_NAVIGATOR;
606
606
  this.wxAppParamsSignInstance = WXAPP_PARAMS_SIGN;
607
607
  this.wxAppFingerReportInstance = WXAPP_FINGER_REPORT ? new WXAPP_FINGER_REPORT() : {};
608
608
  this.wxAppSubsGuider = null;
609
609
  this.languageJsonData = langeJsonDataForCn;
610
610
  this.businessWorkerReady = false;
611
611
  this.jdWorkerReadyPromise = Promise.resolve(false);
612
612
  }
613
613
  _getConfig(opt) {
614
614
  return Object.assign({}, DefaultConfig, opt);
615
615
  }
616
616
  loadApiSafeSteadyReayPromise() {
617
617
  return Promise.resolve(true);
618
618
  }
619
619
  loadH5tagReayPromise() {
620
620
  return Promise.resolve(true);
621
621
  }
622
622
 
623
623
  jmfeReayPromise(): Promise<any> {
624
624
  return Promise.reject(false);
625
625
  }
626
626
 
627
627
  taskTimeoutPromise(callBack, timeout = 2000) {
628
628
  return new Promise((resolve) => {
629
629
  setTimeout(() => {
630
630
  const getCallBackRes = typeof callBack === 'function' && callBack();
631
631
  return resolve(getCallBackRes || false);
632
632
  }, timeout);
633
633
  });
634
634
  }
635
635
 
636
636
  updateBusinessDomainAndApi(domain, api) {
637
637
  }
638
638
 
639
639
  getFullScreenHeight(systemInfo) {
640
640
  const { screenHeight, statusBarHeight, isAndroid } = systemInfo;
641
641
  let result = screenHeight;
642
642
  if (statusBarHeight > 20 && isAndroid) {
643
643
  result = screenHeight + statusBarHeight;
644
644
  }
645
645
  return result;
646
646
  }
647
647
 
648
648
  getTabBarHeight(systemInfo) {
649
649
  const { statusBarHeight, isAndroid, isIOS } = systemInfo;
650
650
  let result = 50;
651
651
  if (statusBarHeight > 20) {
652
652
  if (isIOS) {
653
653
  result = 84;
654
654
  } else if (isAndroid) {
655
655
  result = 53;
656
656
  }
657
657
  }
658
658
  return result;
659
659
  }
660
660
 
661
661
  getSystemInfo() {
662
662
  const info: UtilsInterFace.taroGetSystemInfoSyncRes = getSystemInfos() || {};
663
663
  const actualNavBarHeight = (info?.navBarHeight || 0) + (info?.navBarExtendHeight || 0);
664
664
  const headerHeight = actualNavBarHeight + (info?.statusBarHeight || 0);
665
665
  const fullScreenHeight = this.getFullScreenHeight(info);
666
666
  const tabBarHeight = this.getTabBarHeight(info);
667
667
  const safeContentHeight = fullScreenHeight - headerHeight;
668
668
  this.info.sysInfo = {
669
669
  ...this.info.sysInfo,
670
670
  ...info,
671
671
  actualNavBarHeight,
672
672
  headerHeight,
673
673
  fullScreenHeight,
674
674
  tabBarHeight,
675
675
  safeContentHeight,
676
676
  languageType: languageNowType,
677
677
  };
678
678
  this.getEid().then((res: { eid: string }) => {
679
679
  res && res.eid && (this.info.sysInfo['eid'] = res.eid);
680
680
  });
681
681
  if (this.info.sysInfo['hostVersionName']) {
682
682
  this.info.sysInfo['hostAppVersion'] = Number(
683
683
  this.info.sysInfo['hostVersionName'].replace(/\./g, ''),
684
684
  );
685
685
  }
686
686
  this.info.sysInfo['wifiVideoAutoPlay'] = false;
687
687
  this.getNetWorkType();
688
688
  }
689
689
  async updateMPaasConfig() {}
690
690
 
691
691
  getNetWorkType() {
692
692
  Taro.getNetworkType().then((getRes) => {
693
693
  getRes && getRes.networkType && (this.info.sysInfo['netWorkType'] = getRes.networkType);
694
694
  });
695
695
  }
696
696
  getAPPUseStraightCorner() {
697
697
  return Promise.resolve(false);
698
698
  }
699
699
 
700
700
  checkStatusAndLogin(options = {}) {
701
701
  this.checkStatusAndLoginPromise = new Promise((resolve, reject) => {
702
702
  console.log('微信小程序登录状态及获取cookie状态的promise,之前登录状态', this.info.loginState);
703
703
  this.toLogin(options)
704
704
  .then((res) => {
705
705
  console.log('微信小程序登录状态结果,成功', res);
706
706
  this.info.loginState = true;
707
707
  resolve(res);
708
708
  })
709
709
  .catch((err) => {
710
710
  console.log('微信小程序登录异常状态结果', err);
711
711
  this.doLogin(options)
712
712
  .then((res2) => {
713
713
  console.log('微信小程序wxDoLogin强制登陆成功:', res2);
714
714
  this.info.loginState = true;
715
715
  resolve(res2);
716
716
  })
717
717
  .catch((err2) => {
718
718
  console.log('微信小程序wxDoLogin强制登陆失败:', err2);
719
719
  this.checkStatusAndLoginPromise = null;
720
720
  reject(err2);
721
721
  });
722
722
  });
723
723
  });
724
724
  return this.checkStatusAndLoginPromise;
725
725
  }
726
726
 
727
727
  checkJdStatusAndLogin(options) {
728
728
  return this.checkStatusAndLogin(options);
729
729
  }
730
730
 
731
731
 
732
732
  doLoginForJdPin(options = {}) {
733
733
  return this.doLogin(options);
734
734
  }
735
735
 
736
736
  getEid() {
737
737
  if (typeof jd !== 'undefined' && jd.getEid) {
738
738
  return new Promise((resolve, reject) => {
739
739
  jd.getEid({
740
740
  success: (res: { eid: string }) => {
741
741
  resolve(res);
742
742
  },
743
743
  fail: (err: any) => {
744
744
  reject(err);
745
745
  },
746
746
  });
747
747
  });
748
748
  } else {
749
749
  return Promise.resolve(false);
750
750
  }
751
751
  }
752
752
 
753
753
  toLogin(options = {}): Promise<any> {
754
754
  return this.wxAppLoginInstance
755
755
  .getLoginPromise({
756
756
  mode: 'silent',
757
757
  loginColor: {
758
758
  biz: WXAPP_BIZ_KEY,
759
759
  dpin: 0,
760
760
  },
761
761
  ...options,
762
762
  })
763
763
  .then((res) => {
764
764
  console.log('微信app登录返回信息,微信侧返回code为0表示成功', res);
765
765
  setTimeout(() => {
766
766
  console.log(
767
767
  '微信app登录返回成功后,后台会写入cookie,有延迟,这里延迟500ms去获取最新cookie',
768
768
  );
769
769
  this.getLoginCookie(`${Date.now()}`);
770
770
  }, 500);
771
771
  })
772
772
  .catch((err) => {
773
773
  console.log('微信app登录异常返回信息,也获取cookie', err);
774
774
  this.getLoginCookie(`${Date.now()}`);
775
775
  });
776
776
  }
777
777
 
778
778
  doLogin(options) {
779
779
  console.log('触发松果小程序 doLogin() new new');
780
780
  return new Promise((resolve, reject) => {
781
781
  jd.login({
782
782
  success: (res) => {
783
783
  if (res.code) {
784
784
  console.log('[common]松果小程序登录成功', res.code);
785
785
  jd.redirectTo({
786
786
  url: `/pages/shopx/pages/index/index?${objectToUrlEncode({
787
787
  ...this.info.originQueryInfo,
788
788
  })}`,
789
789
  });
790
790
  resolve(res);
791
791
  } else {
792
792
  console.error('[common]松果小程序登录失败', res.errMsg);
793
793
  reject();
794
794
  }
795
795
  },
796
796
  fail: (res) => {
797
797
  console.error('[common]松果小程序登录失败', res.errMsg);
798
798
  reject();
799
799
  },
800
800
  });
801
801
  });
802
802
  }
803
803
 
804
804
  getLoginCookie(updateKey = 'wxapp') {
805
805
  return new Promise((resolve) => {
806
806
  console.log('开始获取更新wxapp中的cookie信息', updateKey);
807
807
  if (
808
808
  this.config.wqCookie &&
809
809
  this.config.wqCookieStr &&
810
810
  this.config.getWqCookieKey === updateKey
811
811
  ) {
812
812
  console.log('已有存储wxapp中的cookie信息,直接返回', this.config);
813
813
  resolve({
814
814
  wqCookie: this.config.wqCookie,
815
815
  wqCookieStr: this.config.wqCookieStr,
816
816
  });
817
817
  } else {
818
818
  if (isPublishToWxapp) {
819
819
  const getWxappCookieObj = getTaroStorageKeyValue('cookies') || null;
820
820
  if (getWxappCookieObj) {
821
821
  const getCookieObj = getWxappCookieObj['_data'];
822
822
  const { wqCookie, wqCookieStr } = getWxAppCookieStr(getCookieObj);
823
823
  const { pin = '', visitkey = '-1', wq_unionid = '', wxapp_openid = '' } = wqCookie;
824
824
  this.info.loginState = true;
825
825
  this.info.userInfo.wqCookie = wqCookieStr;
826
826
  this.info.userInfo.wqVisitkey = visitkey;
827
827
  console.log('获取用户完整cookie信息', getCookieObj);
828
828
  const getUserAddress = this.wxAppUserInfoInstance.getAddress();
829
829
  console.log('获取微信用户地址信息', getUserAddress);
830
830
  if (getUserAddress) {
831
831
  this.info.pageInfo.address = getUserAddress?.areaId;
832
832
  this.info.pageInfo.addressCommaStr = this.info.pageInfo.address
833
833
  ? this.info.pageInfo.address.replace(/_/g, ',')
834
834
  : '';
835
835
  this.info.pageInfo.un_area = this.info.pageInfo.address;
836
836
  Taro.eventCenter.trigger(TaroEventType.USER_AREA_UPDATE, {
837
837
  area: this.info.pageInfo.address,
838
838
  });
839
839
  }
840
840
  if (this.miniAppLogInstance) {
841
841
  this.miniAppLogInstance.set({
842
842
  account: pin,
843
843
  unionid: wq_unionid,
844
844
  openid: wxapp_openid,
845
845
  });
846
846
  }
847
847
  this.config.wqCookie = wqCookie;
848
848
  this.config.wqCookieStr = wqCookieStr;
849
849
  this.config.getWqCookieKey = updateKey;
850
850
  console.log('解析wxapp中的cookie信息成功,返回后存储', this.config);
851
851
  resolve({
852
852
  wqCookie,
853
853
  wqCookieStr,
854
854
  });
855
855
  } else {
856
856
  console.log('解析wxapp中的cookie信息异常,返回异常结果', this.config);
857
857
  resolve({
858
858
  wqCookie: false,
859
859
  wqCookieStr: false,
860
860
  });
861
861
  }
862
862
  } else {
863
863
  resolve({
864
864
  wqCookie: false,
865
865
  wqCookieStr: false,
866
866
  });
867
867
  }
868
868
  }
869
869
  });
870
870
  }
871
871
 
872
872
 
873
873
  checkLoginStatus() {
874
874
  return this.getLoginCookie();
875
875
  }
876
876
 
877
877
  getAddressCachePromise() {
878
878
  return Promise.reject('该方法只在APP内适用');
879
879
  }
880
880
 
881
881
  getLbsAddressCachePromise() {
882
882
  return Promise.resolve({
883
883
  status: '-1005',
884
884
  msg: '暂未实现,获取失败',
885
885
  });
886
886
  }
887
887
 
888
888
  getDynamicConfig(key: string) {
889
889
  console.warn('调用松果小程序的 getDynamicConfig(),注意,此方法还未实现!');
890
890
  return null;
891
891
  }
892
892
 
893
893
  updatePageAndLogInfo(updateQuery = {}) {
894
894
  const createUpdateQueryInfo: {
895
895
  query: {
896
896
  shopId?: string | number;
897
897
  venderId?: string | number;
898
898
  };
899
899
  updateShopInfoState: boolean;
900
900
  } = Object.assign(
901
901
  {},
902
902
  {
903
903
  query: {},
904
904
  updateShopInfoState: false,
905
905
  },
906
906
  updateQuery,
907
907
  );
908
908
  console.log(
909
909
  '获取当前下发的店铺查询参数',
910
910
  updateQuery,
911
911
  '获取之前保存的shopInfo店铺查询参数',
912
912
  this.info?.shopInfo,
913
913
  );
914
914
  const { query, updateShopInfoState } = createUpdateQueryInfo;
915
915
  const { shopId, venderId } = query;
916
916
  if (updateShopInfoState) {
917
917
  this.info.queryInfo = {
918
918
  ...this.info.queryInfo,
919
919
  ...query,
920
920
  };
921
921
  if (shopId && venderId) {
922
922
  this.info.shopInfo = {
923
923
  shopId: `${shopId}`,
924
924
  venderId: `${venderId}`,
925
925
  };
926
926
  }
927
927
  } else {
928
928
  this.info.queryInfo = {
929
929
  ...query,
930
930
  };
931
931
  this.info.originQueryInfo = {
932
932
  ...query,
933
933
  };
934
934
  if (
935
935
  this.info.shopInfo?.shopId &&
936
936
  this.info.shopInfo?.venderId &&
937
937
  (this.info.shopInfo.shopId == shopId || this.info.shopInfo.venderId == venderId)
938
938
  ) {
939
939
  this.info.queryInfo.shopId = this.info.shopInfo.shopId;
940
940
  this.info.queryInfo.venderId = this.info.shopInfo.venderId;
941
941
  console.log(
942
942
  '当前存储的店铺shopId和venderId与下发的店铺信息shopId或者venderId为同一个,补充shopId或者venderId查询参数',
943
943
  this.info.queryInfo,
944
944
  );
945
945
  }
946
946
  }
947
947
  this.info.queryInfo['shopId'] &&
948
948
  (this.info.queryInfo['shopId'] = `${this.info.queryInfo['shopId']}`);
949
949
  this.info.queryInfo['venderId'] &&
950
950
  (this.info.queryInfo['venderId'] = `${this.info.queryInfo['venderId']}`);
951
951
  console.log(
952
952
  'weapp===获取店铺下发查询参数\n',
953
953
  query,
954
954
  '\n获取店铺最后查询参数\n',
955
955
  this.info.queryInfo,
956
956
  '\n是否为更新店铺状态\n',
957
957
  updateShopInfoState,
958
958
  );
959
959
  }
960
960
  renderNextTickLoadSdk() {
961
961
  console.warn('暂未实现 index.jd.ts');
962
962
  }
963
963
  loadOtherSdk() {
964
964
  console.warn('暂未实现 index.jd.ts');
965
965
  }
966
966
  loadItemSdkPromise(jsInfo = {}) {
967
967
  console.warn('暂未实现 index.jd.ts');
968
968
  }
969
969
  createLanguageProimse() {
970
970
  return Promise.reject({
971
971
  msg: '暂未实现',
972
972
  });
973
973
  }