dlt-for-react 2.3.3 → 2.3.4

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.
package/README.md CHANGED
@@ -13,6 +13,9 @@ npm publish
13
13
  > npm install dlt-for-react --save
14
14
 
15
15
  ##### 版本修改记录
16
+ #### V2.3.4—2026 年 7 月 16 日
17
+ 1. 优化 NHFetch 请求头与网关 3.0 token 刷新逻辑,修复代理接口 302 异常
18
+
16
19
  #### V2.3.3—2026 年 7 月 7 日
17
20
  1. 优化KyContainerFrame组件的返回按钮文本配置
18
21
 
@@ -9,14 +9,28 @@ var _typeof2 = require("babel-runtime/helpers/typeof");
9
9
 
10
10
  var _typeof3 = _interopRequireDefault(_typeof2);
11
11
 
12
+ var _promise = require("babel-runtime/core-js/promise");
13
+
14
+ var _promise2 = _interopRequireDefault(_promise);
15
+
12
16
  var _stringify = require("babel-runtime/core-js/json/stringify");
13
17
 
14
18
  var _stringify2 = _interopRequireDefault(_stringify);
15
19
 
20
+ var _modal = require("antd/lib/modal");
21
+
22
+ var _modal2 = _interopRequireDefault(_modal);
23
+
24
+ var _extends2 = require("babel-runtime/helpers/extends");
25
+
26
+ var _extends3 = _interopRequireDefault(_extends2);
27
+
16
28
  var _message2 = require("antd/lib/message");
17
29
 
18
30
  var _message3 = _interopRequireDefault(_message2);
19
31
 
32
+ require("antd/lib/modal/style");
33
+
20
34
  require("antd/lib/message/style");
21
35
 
22
36
  require("isomorphic-fetch");
@@ -218,7 +232,145 @@ var getDifferDate = exports.getDifferDate = function getDifferDate(firstDate, se
218
232
  return Math.floor(msecNum / parseFloat(1000));
219
233
  };
220
234
 
235
+ var isGatewayV3 = function isGatewayV3() {
236
+ return window.gateway_version === "3" || window.gateway_version === 3;
237
+ };
238
+
239
+ var isRefreshing = false;
240
+ var refreshRequests = [];
241
+
242
+ var getAuthToken = function getAuthToken() {
243
+ var token = window.sessionStorage.getItem("access_token");
244
+ if (token) {
245
+ return token;
246
+ }
247
+ var user = (0, _NHCore.getLoginUser)();
248
+ return user && user.tokenId ? user.tokenId : "";
249
+ };
250
+
251
+ var buildRequestHeaders = function buildRequestHeaders(contentType, isFormData, authToken) {
252
+ if (isFormData) {
253
+ return (0, _extends3.default)({
254
+ "X-Requested-With": "XMLHttpRequest",
255
+ Accept: "application/json"
256
+ }, authToken ? { Authorization: authToken } : {});
257
+ }
258
+ var headers = {
259
+ "Content-Type": contentType,
260
+ "X-Requested-With": "XMLHttpRequest",
261
+ Accept: "application/json"
262
+ };
263
+ var user = (0, _NHCore.getLoginUser)();
264
+ if (user && user.userId) {
265
+ headers.loginUserId = user.userId;
266
+ headers.loginUserOrgId = user.orgId;
267
+ }
268
+ var token = authToken || getAuthToken();
269
+ if (token) {
270
+ headers.Authorization = token;
271
+ }
272
+ return headers;
273
+ };
274
+
275
+ var setResponseTimeV3 = function setResponseTimeV3() {
276
+ if (isGatewayV3()) {
277
+ sessionStorage.setItem("refreshTime", Math.floor(new Date().getTime() / 1000));
278
+ }
279
+ };
280
+
281
+ var expiredTips = function expiredTips() {
282
+ if (window.loginWarnflag) {
283
+ return;
284
+ }
285
+ window.loginWarnflag = true;
286
+ var returnUrl = encodeURIComponent(window.location.href);
287
+ _modal2.default.warning({
288
+ title: "提示",
289
+ key: "nhfetch-session-expired",
290
+ content: "会话已过期!",
291
+ okText: "重新登录",
292
+ onOk: function onOk() {
293
+ sessionStorage.removeItem("userLogin");
294
+ sessionStorage.removeItem("access_token");
295
+ sessionStorage.removeItem("refresh_token");
296
+ sessionStorage.removeItem("xtParams");
297
+ sessionStorage.removeItem("user_last_operation_time");
298
+ window.loginWarnflag = false;
299
+ hashHistory.push({
300
+ pathname: "/login",
301
+ search: returnUrl ? "?returnUrl=" + returnUrl : ""
302
+ });
303
+ }
304
+ });
305
+ };
306
+
307
+ var refreshTokenV3 = function refreshTokenV3() {
308
+ var baseUrl = window.baseUrl || "";
309
+ return fetch(baseUrl + "api/refreshToken", {
310
+ method: "GET",
311
+ credentials: "include",
312
+ headers: buildRequestHeaders("application/x-www-form-urlencoded;charset=UTF-8", false)
313
+ }).then(function (response) {
314
+ return response.json();
315
+ });
316
+ };
317
+
318
+ var checkRefreshV3 = function checkRefreshV3(retryRequest) {
319
+ var expire = parseInt(sessionStorage.getItem("userExpire") || "0", 10) || (0, _NHCore.getLoginUser)().expiresIn || 1800;
320
+ var freshTime = parseInt(sessionStorage.getItem("refreshTime") || "0", 10);
321
+ var nowTime = Math.floor(new Date().getTime() / 1000);
322
+
323
+ if (nowTime - freshTime < expire) {
324
+ if (!isRefreshing) {
325
+ isRefreshing = true;
326
+ refreshTokenV3().then(function (res) {
327
+ isRefreshing = false;
328
+ if (res && res.code == 200) {
329
+ sessionStorage.setItem("userExpire", res.data.expiration);
330
+ var token = res.data.token || "";
331
+ sessionStorage.setItem("access_token", token);
332
+ var user = (0, _NHCore.getLoginUser)();
333
+ if (user && user.userId) {
334
+ user.tokenId = token;
335
+ sessionStorage.setItem("userLogin", (0, _stringify2.default)(user));
336
+ }
337
+ return token;
338
+ }
339
+ expiredTips();
340
+ }).then(function (token) {
341
+ if (token) {
342
+ refreshRequests.forEach(function (cb) {
343
+ return cb(token);
344
+ });
345
+ refreshRequests = [];
346
+ }
347
+ }).catch(function () {
348
+ isRefreshing = false;
349
+ expiredTips();
350
+ });
351
+ }
352
+ return new _promise2.default(function (resolve) {
353
+ refreshRequests.push(function (token) {
354
+ resolve(retryRequest(token));
355
+ });
356
+ });
357
+ }
358
+ expiredTips();
359
+ };
360
+
361
+ var appendQueryString = function appendQueryString(url, queryString) {
362
+ if (!queryString) {
363
+ return url;
364
+ }
365
+ var separator = url.indexOf("?") > -1 ? "&" : "?";
366
+ return url + separator + queryString;
367
+ };
368
+
221
369
  var NHFetch = function NHFetch(pUrl, pMethod, params, errorFunc) {
370
+ return request(pUrl, pMethod, params, errorFunc);
371
+ };
372
+
373
+ var request = function request(pUrl, pMethod, params, errorFunc, authTokenOverride) {
222
374
  var opts = {};
223
375
  var tmpHeader = "";
224
376
  var url = pUrl;
@@ -236,16 +388,13 @@ var NHFetch = function NHFetch(pUrl, pMethod, params, errorFunc) {
236
388
  }
237
389
 
238
390
  if (method.toLowerCase() === "get") {
239
- //如果是get方式,则把参数拼凑到url路径上面
240
391
  if (params !== undefined && params !== "" && (0, _stringify2.default)(params) !== "{}") {
241
- //如果params是Map对象,则需要先转换成字符串
242
392
  if (typeof params === "string") {
243
- url = url + "?" + params;
393
+ url = appendQueryString(url, params);
244
394
  } else {
245
- //不是字符串就一定是map对象
246
395
  var paramsStr = "";
247
396
  for (var key in params) {
248
- if ((0, _typeof3.default)(params[key]) === "object") {
397
+ if ((0, _typeof3.default)(params[key]) === "object" && params[key] !== null) {
249
398
  var params2 = params[key];
250
399
  for (var key2 in params2) {
251
400
  paramsStr += "&" + key + "." + key2 + "=" + params2[key2];
@@ -254,13 +403,10 @@ var NHFetch = function NHFetch(pUrl, pMethod, params, errorFunc) {
254
403
  paramsStr += "&" + key + "=" + params[key];
255
404
  }
256
405
  }
257
-
258
- url = paramsStr ? url + "?" + paramsStr : url;
259
- //+"&time="+new Date().getTime();
260
- }
261
- } else {
262
- //url = url + "?time="+new Date().getTime();
406
+ url = paramsStr ? appendQueryString(url, paramsStr.slice(1)) : url;
263
407
  }
408
+ }
409
+ url = appendQueryString(url, "_t=" + Math.floor(Date.parse(new Date()) / 1000));
264
410
  tmpHeader = "application/x-www-form-urlencoded;charset=UTF-8";
265
411
  } else {
266
412
  //除了get,所有方法改为post
@@ -279,89 +425,97 @@ var NHFetch = function NHFetch(pUrl, pMethod, params, errorFunc) {
279
425
  }
280
426
  }
281
427
  }
428
+ var isFormData = params && params.constructor === FormData;
282
429
  opts.method = method;
283
430
  opts.credentials = "include";
284
- opts.headers = { "Content-Type": tmpHeader };
285
- if (params && params.constructor === FormData) {
286
- // 解决头像上传问题
287
- opts.headers = {};
288
- }
431
+ opts.headers = buildRequestHeaders(tmpHeader, isFormData, authTokenOverride);
289
432
 
290
433
  //设置网关加密串
291
434
  var timestemp = new Date().valueOf();
292
435
  var csrfToken = (0, _MD.hex_md5)("timestamp=" + timestemp + ",key=" + "lianyi2019" //这个就是与网关约定的秘钥
293
436
  );
294
- if (url.indexOf("?") > -1 && url.indexOf("=") > -1 && url.indexOf("?") < url.indexOf("=")) {
295
- url = url + "&csrfTimestamp=" + timestemp + "&csrfToken=" + csrfToken;
296
- } else {
297
- url = url + "?csrfTimestamp=" + timestemp + "&csrfToken=" + csrfToken;
298
- }
299
-
300
- var token = window.sessionStorage.getItem("access_token");
301
- if (token) {
302
- opts.headers.Authorization = token;
303
- }
304
- var nodeEnv = process.env.NODE_ENV || "development";
305
- if (nodeEnv === "development") {
306
- opts.headers.loginUserId = (0, _NHCore.getLoginUser)().userId;
307
- }
437
+ url = appendQueryString(url, "csrfTimestamp=" + timestemp + "&csrfToken=" + csrfToken);
308
438
 
309
439
  return fetch(url, opts).then(function (response) {
310
- try {
311
- if (response.status === 200) {
312
- if (pMethod === "nbpost" || pMethod === "NBPOST") {
313
- return response.blob();
314
- } else {
315
- sessionStorage.removeItem("user_last_operation_time");
316
- //记录用户最后一次操作时间
317
- var userLastOperationTime = (0, _moment2.default)().format("YYYY-MM-DD HH:mm:ss");
318
- sessionStorage.setItem("user_last_operation_time", userLastOperationTime);
319
- return response.json();
320
- }
321
- } else if (response.status === 302) {
440
+ var handleResponseBody = function handleResponseBody() {
441
+ if (pMethod === "nbpost" || pMethod === "NBPOST") {
442
+ return response.blob();
443
+ }
444
+ return response.json();
445
+ };
446
+
447
+ var isSessionExpiredCode = function isSessionExpiredCode(data) {
448
+ return data && String(data.code) === "53000010";
449
+ };
450
+
451
+ var shouldRefreshToken = function shouldRefreshToken(data) {
452
+ return isGatewayV3() && (response.status === 401 || response.status === 302) && isSessionExpiredCode(data) && !window.loginWarnflag;
453
+ };
454
+
455
+ if (response.status === 200) {
456
+ if (pMethod === "nbpost" || pMethod === "NBPOST") {
457
+ setResponseTimeV3();
458
+ return response.blob();
459
+ }
460
+ sessionStorage.removeItem("user_last_operation_time");
461
+ var userLastOperationTime = (0, _moment2.default)().format("YYYY-MM-DD HH:mm:ss");
462
+ sessionStorage.setItem("user_last_operation_time", userLastOperationTime);
463
+ setResponseTimeV3();
464
+ return response.json();
465
+ }
466
+
467
+ return handleResponseBody().then(function (data) {
468
+ if (shouldRefreshToken(data)) {
469
+ return checkRefreshV3(function (newToken) {
470
+ return request(pUrl, pMethod, params, errorFunc, newToken);
471
+ });
472
+ }
473
+
474
+ if (response.status === 302) {
322
475
  if (window.gateway_version === "2") {
323
- //新网关
324
476
  var userLogin = sessionStorage.getItem("userLogin") ? JSON.parse(sessionStorage.getItem("userLogin")) : {};
325
- var _token = sessionStorage.getItem("refresh_token");
477
+ var refreshTokenValue = sessionStorage.getItem("refresh_token");
326
478
  var _userLastOperationTime = sessionStorage.getItem("user_last_operation_time");
327
479
  var expiresIn = userLogin.expiresIn || 1800;
328
- var userLastOperationTimeStr = _userLastOperationTime.replace("/-/g", "/");
329
- //用户最后一次操作时间
480
+ var userLastOperationTimeStr = _userLastOperationTime ? _userLastOperationTime.replace("/-/g", "/") : "";
330
481
  var userLastOperationTimeDate = new Date(userLastOperationTimeStr);
331
- //当前时间
332
482
  var nowDate = new Date();
333
- //在token超时阈值范围内用户没有任何操作,则直接退出登录,重新登录
334
483
  var differDate = getDifferDate(userLastOperationTimeDate, nowDate);
335
484
  if (differDate >= expiresIn) {
336
485
  userLogout();
337
486
  } else {
338
- //在token超时阈值范围内用户有操作,则重新生成accessToken
339
- refreshToken(_token, function (newAccessToken) {
487
+ refreshToken(refreshTokenValue, function (newAccessToken) {
340
488
  sessionStorage.removeItem("access_token");
341
489
  sessionStorage.setItem("access_token", newAccessToken);
342
- var userLastOperationTime = (0, _moment2.default)().format("YYYY-MM-DD HH:mm:ss");
343
- sessionStorage.setItem("user_last_operation_time", userLastOperationTime);
490
+ var latestOperationTime = (0, _moment2.default)().format("YYYY-MM-DD HH:mm:ss");
491
+ sessionStorage.setItem("user_last_operation_time", latestOperationTime);
344
492
  });
345
493
  }
494
+ } else if (isGatewayV3()) {
495
+ expiredTips();
346
496
  } else {
347
497
  _message3.default.error("未登录或登录已过期,请刷新页面重新登录!");
348
498
  sessionStorage.removeItem("userLogin");
349
499
  sessionStorage.removeItem("access_token");
350
500
  }
501
+ return;
351
502
  } else if (response.status === 401) {
503
+ if (isGatewayV3() && isSessionExpiredCode(data)) {
504
+ expiredTips();
505
+ return;
506
+ }
352
507
  _message3.default.warning("您正在尝试访问未授权的功能!");
508
+ return data;
353
509
  } else if (response.status === 504) {
354
- // 网关请求超时
355
510
  return;
356
511
  } else {
357
- //如果存在错误的回调方法,则调用回调方法,否则提示网络请求异常
358
512
  errorFunc && errorFunc();
359
513
  }
360
- return response.json();
361
- } catch (error) {
514
+ return data;
515
+ }).catch(function (error) {
362
516
  console.log("请求异常1:", error.message);
363
517
  return;
364
- }
518
+ });
365
519
  }).then(function (res) {
366
520
  var _ref = res || {},
367
521
  _ref$meta = _ref.meta,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dlt-for-react",
3
- "version": "2.3.3",
3
+ "version": "2.3.4",
4
4
  "description": "dlt for react",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {