yuang-framework-ui-common 1.0.15 → 1.0.17

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.
@@ -0,0 +1,23 @@
1
+ import { http } from '../config/httpConfig';
2
+ import { getLocalStorageItem, setLocalStorageItem, removeLocalStorageItem } from '../utils/storageUtils';
3
+
4
+ const initGateway = () => {
5
+ return new Promise<void>(async resolve => {
6
+ let gatewayAccessToken = getLocalStorageItem("gatewayAccessToken");
7
+ if (!gatewayAccessToken) {
8
+ let res = await http.get('/server/gateway/getGatewayConfig');
9
+ setLocalStorageItem("gatewayAccessToken", res.data.data.gatewayAccessToken, res.data.data.gatewayTimeout);
10
+ setLocalStorageItem("gatewayPublicKey", res.data.data.gatewayPublicKey, res.data.data.gatewayTimeout);
11
+ }
12
+ resolve();
13
+ })
14
+ }
15
+
16
+ const clearGateway = () => {
17
+ removeLocalStorageItem("gatewayAccessToken");
18
+ removeLocalStorageItem("gatewayPublicKey");
19
+ }
20
+ export {
21
+ initGateway,
22
+ clearGateway
23
+ }
@@ -1,14 +1,17 @@
1
1
  import axios from "axios"
2
2
 
3
+ import { showErrorMessage } from '../utils/messageUtils';
4
+ import { alertMessageBox } from '../utils/messageBoxUtils';
3
5
 
4
- import {showErrorMessage} from '../utils/messageUtils';
5
- import {alertMessageBox} from '../utils/messageBoxUtils';
6
+ import { getSsoLoginUrl, clearSsoAccessToken } from '../utils/ssoUtils';
6
7
 
7
- import {getSsoLoginUrl, clearSsoAccessToken} from '../utils/ssoUtils';
8
+ import { clearGateway } from '../config/gatewayConfig';
9
+
10
+ import {getLocalStorageItem} from '../utils/storageUtils'
8
11
 
9
12
  const messageMap = {
10
13
  requestError: '请求异常',
11
- responseSturctError: '响应结构错误',
14
+ responseSturctError: '响应结构错误',
12
15
  }
13
16
 
14
17
  const http = axios.create({
@@ -20,33 +23,32 @@ const http = axios.create({
20
23
 
21
24
  /* 请求拦截 */
22
25
  http.interceptors.request.use(config => {
23
- config.headers["X-Requested-With"] = 'XMLHttpRequest';
26
+ config.headers["X-Requested-With"] = 'XMLHttpRequest';
24
27
 
25
- let gatewayAccessToken = localStorage.getItem("gatewayAccessToken") ?? '';
26
- let gatewayPublicKey = localStorage.getItem("gatewayPublicKey") ?? '';
27
- let ssoAccessToken = localStorage.getItem("ssoAccessToken") ?? '';
28
- if (gatewayAccessToken) {
29
- config.headers["Gateway-Access-Token"] = gatewayAccessToken;
30
- }
31
- if (gatewayPublicKey) {
32
- config.headers["Gateway-Public-Key"] = gatewayPublicKey;
33
- }
28
+ let gatewayAccessToken = getLocalStorageItem("gatewayAccessToken") ?? '';
29
+ let gatewayPublicKey = getLocalStorageItem("gatewayPublicKey") ?? '';
30
+ let ssoAccessToken = getLocalStorageItem("ssoAccessToken") ?? '';
31
+ if (gatewayAccessToken) {
32
+ config.headers["Gateway-Access-Token"] = gatewayAccessToken;
33
+ }
34
+ if (gatewayPublicKey) {
35
+ config.headers["Gateway-Public-Key"] = gatewayPublicKey;
36
+ }
34
37
 
35
- if (ssoAccessToken) {
36
- config.headers["Sso-Access-Token"] = ssoAccessToken;
37
- }
38
- config.headers["Request-Id"] = 'test';
39
- return config;
40
- }, error => {
41
- showErrorMessage(error?.message || messageMap.requestError);
42
- return Promise.reject(error);
38
+ if (ssoAccessToken) {
39
+ config.headers["Sso-Access-Token"] = ssoAccessToken;
43
40
  }
44
- );
41
+ config.headers["Request-Id"] = 'test';
42
+ return config;
43
+ }, error => {
44
+ showErrorMessage(error?.message || messageMap.requestError);
45
+ return Promise.reject(error);
46
+ });
45
47
 
46
48
 
47
49
  /* 响应拦截器 */
48
50
  http.interceptors.response.use((res) => {
49
- if(!res?.data?.statusCode){
51
+ if (!res?.data?.statusCode) {
50
52
  showErrorMessage(messageMap.responseSturctError);
51
53
  return Promise.reject(new Error(messageMap.responseSturctError));
52
54
  }
@@ -65,6 +67,10 @@ http.interceptors.response.use((res) => {
65
67
  }
66
68
  });
67
69
  return Promise.reject(new Error(res?.data?.message));
70
+ } else if (res?.data?.statusCode === 822001) {
71
+ clearGateway();
72
+ showErrorMessage(messageMap.requestError);
73
+ return Promise.reject(new Error(res?.data?.message));
68
74
  }
69
75
  showErrorMessage(res?.data?.message || messageMap.requestError);
70
76
  return Promise.reject(new Error(res?.data?.message));
@@ -76,4 +82,4 @@ http.interceptors.response.use((res) => {
76
82
  });
77
83
 
78
84
 
79
- export {http}
85
+ export { http }
@@ -0,0 +1,6 @@
1
+ import { cloneDeep } from 'lodash';
2
+
3
+ export {
4
+
5
+ cloneDeep
6
+ }
@@ -1,8 +1,7 @@
1
- 'use strict'
2
-
3
1
  import Cookies from 'js-cookie'
4
2
  import {getAesRandomKey, aesEncrypt} from './aesUtils';
5
3
  import {rsaEncrypt} from './rsaUtils';
4
+ import {getLocalStorageItem, setLocalStorageItem} from './storageUtils';
6
5
 
7
6
 
8
7
  const getSsoLoginUrl = (redirectUrl = '') => {
@@ -44,7 +43,7 @@ const getSsoLoginRoutePath = (redirectRoutePath = '') => {
44
43
  * @param password
45
44
  */
46
45
  const getSsoEncrypt = (password = '') => {
47
- let gatewayPublicKey = localStorage.getItem('gatewayPublicKey');
46
+ let gatewayPublicKey = getLocalStorageItem('gatewayPublicKey');
48
47
  // 每次请求生成aeskey
49
48
  let aesKey = getAesRandomKey();
50
49
  // 用登陆后后端生成并返回给前端的的RSA密钥对的公钥将AES16位密钥进行加密
@@ -65,7 +64,7 @@ const getSsoAccessToken = () => {
65
64
  let ssoAccessToken = Cookies.get(ssoAccessTokenCookieKey);
66
65
 
67
66
  if (!ssoAccessToken) {
68
- ssoAccessToken = localStorage.getItem(ssoAccessTokenLocalKey) as string;
67
+ ssoAccessToken = getLocalStorageItem(ssoAccessTokenLocalKey) as string;
69
68
  return ssoAccessToken
70
69
  }
71
70
 
@@ -76,8 +75,8 @@ const getSsoAccessToken = () => {
76
75
  const setSsoAccessToken = (param: any) => {
77
76
  Cookies.set(ssoAccessTokenCookieKey, param.ssoAccessToken);
78
77
 
79
- localStorage.setItem(ssoAccessTokenLocalKey, param.ssoAccessToken);
80
- localStorage.setItem(ssoRefreshTokenLocalKey, param.ssoRefreshToken);
78
+ setLocalStorageItem(ssoAccessTokenLocalKey, param.ssoAccessToken, param.ssoExpiresIn);
79
+ setLocalStorageItem(ssoRefreshTokenLocalKey, param.ssoRefreshToken, param.ssoRefreshExpiresIn);
81
80
 
82
81
  }
83
82
 
@@ -85,8 +84,8 @@ const setSsoAccessToken = (param: any) => {
85
84
  const clearSsoAccessToken = () => {
86
85
  Cookies.remove(ssoAccessTokenCookieKey);
87
86
 
88
- localStorage.removeItem(ssoAccessTokenLocalKey);
89
- localStorage.removeItem(ssoRefreshTokenLocalKey);
87
+ removeLocalStorageItem(ssoAccessTokenLocalKey);
88
+ removeLocalStorageItem(ssoRefreshTokenLocalKey);
90
89
 
91
90
  }
92
91
 
@@ -0,0 +1,139 @@
1
+ /**
2
+ * 判断session存储数据是否过期
3
+ * @param key
4
+ */
5
+ const isSessionStorageExpired = (key) => {
6
+ const value = sessionStorage.getItem(key);
7
+ if (!value) {
8
+ return false;
9
+ }
10
+ const data = JSON.parse(value);
11
+ if (!data || !data.expiresIn) {
12
+ return false;
13
+ }
14
+ if (data.expiresIn == 0) {
15
+ return false;
16
+ }
17
+ if (Date.now() > data.expiresIn) {
18
+ sessionStorage.removeItem(key);
19
+ return true;
20
+ }
21
+ return false;
22
+ }
23
+
24
+ /**
25
+ * 设置session存储数据
26
+ * @param key
27
+ * @param value
28
+ * @param expiresIn 过期时间,单位:秒
29
+ */
30
+ const setSessionStorageItem = (key, value, expiresIn) => {
31
+ if(!key) {
32
+ console.error('参数[key]为空')
33
+ return;
34
+ }
35
+ expiresIn = expiresIn || 0;
36
+
37
+ const data = {
38
+ value: value,
39
+ expiresIn: Date.now() + expiresIn * 1000
40
+ };
41
+ sessionStorage.setItem(key, JSON.stringify(data));
42
+ }
43
+
44
+ /**
45
+ * 获取session存储数据
46
+ * @param key
47
+ */
48
+ const getSessionStorageItem = (key) => {
49
+ if (isSessionStorageExpired(key)) {
50
+ return null;
51
+ }
52
+ const value = sessionStorage.getItem(key);
53
+ const data = JSON.parse(value);
54
+ return data.value;
55
+ }
56
+
57
+ /**
58
+ * 删除session存储数据
59
+ * @param key
60
+ */
61
+ const removeSessionStorageItem = (key) => {
62
+ sessionStorage.removeItem(key);
63
+ }
64
+
65
+
66
+ /**
67
+ * 判断local存储数据是否过期
68
+ * @param key
69
+ */
70
+ const isLocalStorageExpired = (key) => {
71
+ const value = localStorage.getItem(key);
72
+ if (!value) {
73
+ return false;
74
+ }
75
+ const data = JSON.parse(value);
76
+ if (!data || !data.expiresIn) {
77
+ return false;
78
+ }
79
+ if (data.expiresIn == 0) {
80
+ return false;
81
+ }
82
+ if (Date.now() > data.expiresIn) {
83
+ localStorage.removeItem(key);
84
+ return true;
85
+ }
86
+ return false;
87
+ }
88
+
89
+ /**
90
+ * 设置local存储数据
91
+ * @param key
92
+ * @param value
93
+ * @param expiresIn 过期时间,单位:秒
94
+ */
95
+ const setLocalStorageItem = (key, value, expiresIn) => {
96
+ if(!key) {
97
+ console.error('参数[key]为空')
98
+ return;
99
+ }
100
+ expiresIn = expiresIn || 0;
101
+
102
+ const data = {
103
+ value: value,
104
+ expiresIn: Date.now() + expiresIn * 1000
105
+ };
106
+ localStorage.setItem(key, JSON.stringify(data));
107
+ }
108
+
109
+ /**
110
+ * 获取local存储数据
111
+ * @param key
112
+ */
113
+ const getLocalStorageItem = (key) => {
114
+ if (isLocalStorageExpired(key)) {
115
+ return null;
116
+ }
117
+ const value = localStorage.getItem(key);
118
+ const data = JSON.parse(value);
119
+ return data.value;
120
+ }
121
+
122
+ /**
123
+ * 删除local存储数据
124
+ * @param key
125
+ */
126
+ const removeLocalStorageItem = (key) => {
127
+ localStorage.removeItem(key);
128
+ }
129
+
130
+ export {
131
+ setSessionStorageItem,
132
+ getSessionStorageItem,
133
+ removeSessionStorageItem,
134
+
135
+ setLocalStorageItem,
136
+ getLocalStorageItem,
137
+ removeLocalStorageItem,
138
+
139
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yuang-framework-ui-common",
3
- "version": "1.0.15",
3
+ "version": "1.0.17",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "scripts": {
@@ -24,6 +24,7 @@
24
24
  "author": "yuang",
25
25
  "license": "ISC",
26
26
  "dependencies": {
27
+ "@types/lodash": "^4.17.12",
27
28
  "@wangeditor/editor": "^5.1.23",
28
29
  "@wangeditor/editor-for-vue": "^5.1.12",
29
30
  "axios": "^1.7.3",
@@ -31,6 +32,7 @@
31
32
  "element-plus": "^2.7.8",
32
33
  "js-cookie": "^3.0.5",
33
34
  "jsencrypt": "^3.3.2",
35
+ "lodash": "^4.17.21",
34
36
  "moment": "^2.30.1",
35
37
  "pinia": "^2.1.7",
36
38
  "vant": "^4.9.8",
package/src/App.vue CHANGED
@@ -2,13 +2,13 @@
2
2
  <RouterView v-if="isShowRouterView"/>
3
3
  </template>
4
4
  <script setup lang="ts">
5
- import {RouterView} from 'vue-router'
6
- import {onBeforeMount, ref, getCurrentInstance} from 'vue';
7
- import {initGateway} from '../lib/utils/gatewayUtils'
5
+ import { RouterView } from 'vue-router'
6
+ import { onBeforeMount, ref, getCurrentInstance } from 'vue';
7
+ import { initGateway } from '../lib/config/gatewayConfig'
8
8
 
9
9
  let isShowRouterView = ref(false);
10
10
 
11
- const {proxy} = getCurrentInstance() as object;
11
+ const { proxy } = getCurrentInstance() as any;
12
12
 
13
13
  onBeforeMount(async () => {
14
14
  await initGateway();
@@ -1,19 +0,0 @@
1
-
2
- import {http} from '../config/httpConfig';
3
-
4
- const initGateway = () => {
5
- return new Promise<void>(async resolve => {
6
- let gatewayAccessToken = localStorage.getItem("gatewayAccessToken");
7
- if (!gatewayAccessToken) {
8
- let res = await http.get('/server/gateway/getGatewayConfig');
9
- localStorage.setItem("gatewayAccessToken", res.data.data.gatewayAccessToken);
10
- localStorage.setItem("gatewayPublicKey", res.data.data.gatewayPublicKey);
11
- }
12
- resolve();
13
- })
14
-
15
- }
16
-
17
- export {
18
- initGateway
19
- }