dlt-for-react 2.3.2 → 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 +5 -0
- package/lib/components/KyContainerFrame/index.js +1 -1
- package/lib/utils/NHFetch.js +211 -57
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -13,6 +13,11 @@ 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
|
+
|
|
19
|
+
#### V2.3.3—2026 年 7 月 7 日
|
|
20
|
+
1. 优化KyContainerFrame组件的返回按钮文本配置
|
|
16
21
|
|
|
17
22
|
#### V2.3.2—2026 年 4 月 28 日
|
|
18
23
|
1.去除冗余dva依赖
|
package/lib/utils/NHFetch.js
CHANGED
|
@@ -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
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
311
|
-
if (
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
343
|
-
sessionStorage.setItem("user_last_operation_time",
|
|
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
|
|
361
|
-
}
|
|
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,
|