@infly/libs 2.0.25
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/.prettierrc +5 -0
- package/LICENSE +21 -0
- package/README.md +39 -0
- package/bin/cli.js +30 -0
- package/build/build-dist/index.js +644 -0
- package/build/build-dist/zip.js +57 -0
- package/build/webpack5/inline-runtime-plugin.js +35 -0
- package/build/webpack5/webpack.base.js +227 -0
- package/dataInit/commonTypeMap.js +31 -0
- package/dataInit/marketingActivitiesMap.js +214 -0
- package/dataInit/orderMap.js +13 -0
- package/dataInit/personalMap.js +19 -0
- package/dataInit/settlementMap.js +17 -0
- package/index.js +13 -0
- package/lib/index.js +6 -0
- package/lib/server/connect.js +3011 -0
- package/lib/server/serve-static.js +4848 -0
- package/module/Permission.js +138 -0
- package/module/REST.js +97 -0
- package/module/TokenService.js +127 -0
- package/module/Uts.js +7222 -0
- package/package.json +88 -0
- package/script/git-automation/check-packages.js +44 -0
- package/script/git-automation/git-clone.js +69 -0
- package/script/git-automation/git-submodule.js +17 -0
- package/script/git-automation/index.js +488 -0
- package/script/index.js +26 -0
- package/script/webhook/webhook.js +60 -0
- package/store/index.js +0 -0
- package/store/modules/user.js +166 -0
- package/tools/file-export.js +142 -0
- package/tools/file-process.js +49 -0
- package/tools/format.js +31 -0
- package/tools/project-preview.js +135 -0
- package/types/unused.index.d.ts +71 -0
- package/webpack.config.js +38 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import Uts from "./Uts";
|
|
2
|
+
import TokenService from "./TokenService";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* 路由拦截器
|
|
6
|
+
* @param {Object} config 配置项
|
|
7
|
+
* @param {Array} config.whiteList 白名单路径
|
|
8
|
+
* @param {String} config.pagePathCacheKey 页面路径缓存的键
|
|
9
|
+
* @param {Object} config.router 路由实例
|
|
10
|
+
* @param {Object} config.store Vuex store 实例
|
|
11
|
+
* @param {Object} config.NProgress NProgress 实例
|
|
12
|
+
* @param {Function} config.getToken 获取 token 的函数
|
|
13
|
+
* @param {Function} config.getUserInfo 获取用户信息的函数
|
|
14
|
+
* @param {Function} config.resetToken 重置 token 的函数
|
|
15
|
+
* @param {Function} config.showMessage 显示消息的函数
|
|
16
|
+
* @param {Function} config.getTitle 获取页面标题的函数
|
|
17
|
+
* * @returns {void}
|
|
18
|
+
*/
|
|
19
|
+
export function initPermission({
|
|
20
|
+
whiteList = ["/login"],
|
|
21
|
+
getUserInfoAction = "user/getInfo",
|
|
22
|
+
resetTokenAction = "user/resetToken",
|
|
23
|
+
refreshTokenAction = "user/refreshToken",
|
|
24
|
+
pagePathCacheKey, // 页面路径缓存
|
|
25
|
+
router,
|
|
26
|
+
store,
|
|
27
|
+
defaultSettings = {},
|
|
28
|
+
NProgress,
|
|
29
|
+
Message,
|
|
30
|
+
getUserInfo,
|
|
31
|
+
resetToken,
|
|
32
|
+
showMessage
|
|
33
|
+
}) {
|
|
34
|
+
const { title: projectTitle } = defaultSettings || {};
|
|
35
|
+
const { dispatch } = store || {};
|
|
36
|
+
|
|
37
|
+
const redirectToLogin = (to, next) => {
|
|
38
|
+
next(`/login?redirect=${to.path}`);
|
|
39
|
+
NProgress.done();
|
|
40
|
+
return;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const handleGetUserInfo = () => {
|
|
44
|
+
if (Uts.isFunction(getUserInfo)) {
|
|
45
|
+
return getUserInfo();
|
|
46
|
+
} else if (Uts.isFunction(dispatch)) {
|
|
47
|
+
return dispatch(getUserInfoAction);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
const handleResetToken = () => {
|
|
52
|
+
if (Uts.isFunction(resetToken)) {
|
|
53
|
+
return resetToken();
|
|
54
|
+
} else if (Uts.isFunction(dispatch)) {
|
|
55
|
+
return dispatch(resetTokenAction);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const handleShowMessage = (message, type = "error") => {
|
|
60
|
+
if (Uts.isFunction(showMessage)) {
|
|
61
|
+
showMessage(message);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (Uts.isFunction(Message)) {
|
|
65
|
+
Message[type](message);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
console.log(message);
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
const handlePageTitle = (path) => {
|
|
72
|
+
const title = projectTitle || "后台管理系统";
|
|
73
|
+
if (path) {
|
|
74
|
+
return `${path} - ${title}`;
|
|
75
|
+
}
|
|
76
|
+
return `${title}`;
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
NProgress.configure({ showSpinner: false });
|
|
80
|
+
|
|
81
|
+
router.beforeEach(async (to, from, next) => {
|
|
82
|
+
NProgress.start();
|
|
83
|
+
document.title = handlePageTitle(to.meta.title);
|
|
84
|
+
|
|
85
|
+
if (!whiteList.includes(to.path) && pagePathCacheKey) {
|
|
86
|
+
localStorage.setItem(pagePathCacheKey, window.location.href);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const Token = TokenService.getToken();
|
|
90
|
+
const accessTokenKey = TokenService.getUrlTokenKey();
|
|
91
|
+
const accessToken = TokenService.getUrlToken();
|
|
92
|
+
|
|
93
|
+
// 处理 URL 中的 accessToken 参数
|
|
94
|
+
if (to.query[accessTokenKey]) {
|
|
95
|
+
const newQuery = { ...to.query };
|
|
96
|
+
|
|
97
|
+
// 优先从地址栏获取token, 更新存储token值
|
|
98
|
+
if (accessToken && Uts.isFunction(dispatch)) {
|
|
99
|
+
await dispatch(refreshTokenAction, { token: accessToken });
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
delete newQuery[accessTokenKey];
|
|
103
|
+
NProgress.done();
|
|
104
|
+
return next({ path: to.path, query: newQuery, replace: true });
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// 检查白名单路径
|
|
108
|
+
if (whiteList.includes(to.path)) {
|
|
109
|
+
NProgress.done();
|
|
110
|
+
return next();
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (Token) {
|
|
114
|
+
// 如果已登录,但尝试访问登录页,则重定向到首页
|
|
115
|
+
if (to.path === "/login") {
|
|
116
|
+
NProgress.done();
|
|
117
|
+
next({ path: "/" });
|
|
118
|
+
} else {
|
|
119
|
+
try {
|
|
120
|
+
await handleGetUserInfo();
|
|
121
|
+
NProgress.done();
|
|
122
|
+
next();
|
|
123
|
+
} catch (error) {
|
|
124
|
+
const { message = "" } = error || {};
|
|
125
|
+
// handleShowMessage(message || error || "验证失败, 请重新登录");
|
|
126
|
+
await handleResetToken();
|
|
127
|
+
redirectToLogin(to, next);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
} else {
|
|
131
|
+
redirectToLogin(to, next);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
router.afterEach(() => {
|
|
136
|
+
NProgress.done();
|
|
137
|
+
});
|
|
138
|
+
}
|
package/module/REST.js
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import axios from "axios";
|
|
2
|
+
import Uts from "./Uts.js";
|
|
3
|
+
import TokenService from "./TokenService.js";
|
|
4
|
+
|
|
5
|
+
const baseURL = process.env.VUE_APP_BASE_API;
|
|
6
|
+
const { env } = Uts.getEnv() || {};
|
|
7
|
+
const isTestEnv = Uts.contain(["localhost", "infly-test"], env);
|
|
8
|
+
const isProdAPI = Uts.contain(["https://api.sutpay.com"], baseURL);
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* 创建封装的 axios 实例
|
|
12
|
+
* @param {Object} config 配置项
|
|
13
|
+
* @param {Function|String} config.getToken 获取 token 的函数或值
|
|
14
|
+
* @param {Function} config.onLogout 登出回调
|
|
15
|
+
* @param {Function} config.onNotify 通知回调
|
|
16
|
+
* @returns {AxiosInstance}
|
|
17
|
+
*/
|
|
18
|
+
export function createService(config) {
|
|
19
|
+
const {
|
|
20
|
+
logoutAction = "user/logout", // 退出登录的action方法
|
|
21
|
+
onLogout,
|
|
22
|
+
onNotify
|
|
23
|
+
} = config || {};
|
|
24
|
+
const service = axios.create({ baseURL });
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* 发送通知
|
|
28
|
+
*/
|
|
29
|
+
const handleNotify = ({ message, type = "error", duration = 5000 }) => {
|
|
30
|
+
if (Uts.isFunction(onNotify)) {
|
|
31
|
+
onNotify({ message, type, duration });
|
|
32
|
+
} else {
|
|
33
|
+
console.warn("[Notify]", message);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
// 涉及到store和request循环依赖,导致store为undefined,所以不要引入store来处理而是通过闭包形式
|
|
38
|
+
const handleLogout = () => {
|
|
39
|
+
if (Uts.isFunction(onLogout)) {
|
|
40
|
+
onLogout(logoutAction);
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
service.interceptors.request.use(
|
|
45
|
+
config => {
|
|
46
|
+
const Token = TokenService.getToken();
|
|
47
|
+
|
|
48
|
+
if (Token) {
|
|
49
|
+
config.headers["Authorization"] = " JWT " + Token;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (isTestEnv && isProdAPI) {
|
|
53
|
+
handleNotify({
|
|
54
|
+
message: `当前环境为测试环境,接口请求为正式环境接口,请暂停操作,检查构建文件`,
|
|
55
|
+
type: "error",
|
|
56
|
+
duration: 10 * 1000
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return config;
|
|
61
|
+
},
|
|
62
|
+
error => {
|
|
63
|
+
return Promise.reject(error);
|
|
64
|
+
}
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
service.interceptors.response.use(
|
|
68
|
+
response => {
|
|
69
|
+
return response.data || {};
|
|
70
|
+
},
|
|
71
|
+
error => {
|
|
72
|
+
const { response } = error || {};
|
|
73
|
+
const { status } = response || {};
|
|
74
|
+
|
|
75
|
+
if ([401, 403].includes(status)) {
|
|
76
|
+
handleNotify({
|
|
77
|
+
message: `登录信息已过期(${status}), 请重新登录!`,
|
|
78
|
+
type: "error"
|
|
79
|
+
});
|
|
80
|
+
handleLogout();
|
|
81
|
+
} else if ([500, 502].includes(status)) {
|
|
82
|
+
handleNotify({
|
|
83
|
+
message: `服务器异常(${status}),请联系开发人员`,
|
|
84
|
+
type: "error"
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return Promise.reject(error);
|
|
89
|
+
}
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
return service;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const service = createService();
|
|
96
|
+
|
|
97
|
+
export default service;
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
// TokenService.js
|
|
2
|
+
import Uts from "./Uts"; // 假设Uts工具类在同级目录或可访问路径
|
|
3
|
+
|
|
4
|
+
let TOKEN_KEY = "accessToken"; // 默认的token键名
|
|
5
|
+
let CHAT_TOKEN_KEY = "chatAccessToken"; // 默认的聊天token键名
|
|
6
|
+
let URL_TOKEN_KEY = "accessToken"; // 链接参数带上的token键名
|
|
7
|
+
|
|
8
|
+
const TokenService = {
|
|
9
|
+
/**
|
|
10
|
+
* 初始化TokenService,可以配置token键名
|
|
11
|
+
* @param {Object} settings 一般在项目settings.js中
|
|
12
|
+
* @param {string} settings.tokenKey 主token的键名
|
|
13
|
+
* @param {string} settings.chatTokenKey 聊天token的键名
|
|
14
|
+
*/
|
|
15
|
+
init(settings = {}) {
|
|
16
|
+
if (settings.tokenKey) {
|
|
17
|
+
TOKEN_KEY = settings.tokenKey;
|
|
18
|
+
}
|
|
19
|
+
if (settings.chatTokenKey) {
|
|
20
|
+
CHAT_TOKEN_KEY = settings.chatTokenKey;
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* 获取主token的键名
|
|
26
|
+
* @returns {string}
|
|
27
|
+
*/
|
|
28
|
+
getTokenKey() {
|
|
29
|
+
return TOKEN_KEY;
|
|
30
|
+
},
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* 获取聊天token的键名
|
|
34
|
+
* @returns {string}
|
|
35
|
+
*/
|
|
36
|
+
getChatTokenKey() {
|
|
37
|
+
return CHAT_TOKEN_KEY;
|
|
38
|
+
},
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* 获取主token
|
|
42
|
+
* @returns {string}
|
|
43
|
+
*/
|
|
44
|
+
getToken() {
|
|
45
|
+
const accessTokenKey = TokenService.getUrlTokenKey();
|
|
46
|
+
const accessToken = Uts.getUrlParam(accessTokenKey); // 链接中带的token
|
|
47
|
+
|
|
48
|
+
return (
|
|
49
|
+
accessToken ||
|
|
50
|
+
Uts.storage.get(TOKEN_KEY) ||
|
|
51
|
+
Uts.getCookie(TOKEN_KEY) ||
|
|
52
|
+
""
|
|
53
|
+
);
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* 设置主token
|
|
58
|
+
* @param {string} token
|
|
59
|
+
*/
|
|
60
|
+
setToken(token) {
|
|
61
|
+
Uts.storage.set(TOKEN_KEY, token);
|
|
62
|
+
Uts.setCookie(TOKEN_KEY, token);
|
|
63
|
+
},
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* 移除主token
|
|
67
|
+
*/
|
|
68
|
+
removeToken() {
|
|
69
|
+
Uts.storage.remove(TOKEN_KEY);
|
|
70
|
+
Uts.removeCookie(TOKEN_KEY);
|
|
71
|
+
},
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* 设置聊天token
|
|
75
|
+
* @param {string} token
|
|
76
|
+
*/
|
|
77
|
+
setChatToken(token) {
|
|
78
|
+
Uts.storage.set(CHAT_TOKEN_KEY, token);
|
|
79
|
+
},
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* 获取聊天token
|
|
83
|
+
* @returns {string}
|
|
84
|
+
*/
|
|
85
|
+
getChatToken() {
|
|
86
|
+
return Uts.storage.get(CHAT_TOKEN_KEY) || "";
|
|
87
|
+
},
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* 移除聊天token
|
|
91
|
+
*/
|
|
92
|
+
removeChatToken() {
|
|
93
|
+
Uts.storage.remove(CHAT_TOKEN_KEY);
|
|
94
|
+
},
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* 获取链接中的token键名
|
|
98
|
+
* @returns
|
|
99
|
+
*/
|
|
100
|
+
getUrlTokenKey() {
|
|
101
|
+
return URL_TOKEN_KEY;
|
|
102
|
+
},
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* 获取链接中的token
|
|
106
|
+
*/
|
|
107
|
+
getUrlToken() {
|
|
108
|
+
return Uts.getUrlParam(URL_TOKEN_KEY);
|
|
109
|
+
},
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* 移除链接参数中带上的token
|
|
113
|
+
*/
|
|
114
|
+
removeUrlToken() {
|
|
115
|
+
Uts.removeState(URL_TOKEN_KEY);
|
|
116
|
+
},
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* 移除所有token
|
|
120
|
+
*/
|
|
121
|
+
removeAllTokens() {
|
|
122
|
+
this.removeToken();
|
|
123
|
+
this.removeChatToken();
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
export default TokenService;
|