n20-common-lib 1.2.21 → 1.2.22
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 +2 -2
- package/package.json +88 -88
- package/src/_qiankun/index.js +113 -113
- package/src/_qiankun/postMessage.js +48 -48
- package/src/assets/css/_coreLib.scss +35 -35
- package/src/assets/css/cl-anchor.scss +23 -23
- package/src/assets/css/cl-approve-card.scss +58 -58
- package/src/assets/css/cl-dialog.scss +99 -99
- package/src/assets/css/cl-drag-list.scss +22 -22
- package/src/assets/css/cl-empty.scss +10 -10
- package/src/assets/css/cl-expandable-pane.scss +26 -26
- package/src/assets/css/cl-expandable.scss +24 -24
- package/src/assets/css/cl-file-upload-table.scss +11 -11
- package/src/assets/css/cl-filter.scss +4 -4
- package/src/assets/css/cl-flow-step.scss +185 -185
- package/src/assets/css/cl-footer-box.scss +10 -10
- package/src/assets/css/cl-form-item.scss +612 -612
- package/src/assets/css/cl-general-card.scss +11 -11
- package/src/assets/css/cl-layout-aside.scss +88 -88
- package/src/assets/css/cl-layout-content.scss +16 -16
- package/src/assets/css/cl-layout-header.scss +73 -73
- package/src/assets/css/cl-layout-tabs.scss +87 -87
- package/src/assets/css/cl-layout.scss +97 -97
- package/src/assets/css/cl-login-temporary.scss +37 -37
- package/src/assets/css/cl-message.scss +75 -75
- package/src/assets/css/cl-more-tab.scss +98 -98
- package/src/assets/css/cl-nav-menu.scss +5 -5
- package/src/assets/css/cl-pagination.scss +128 -128
- package/src/assets/css/cl-secondary-tab.scss +53 -53
- package/src/assets/css/cl-showcolumn.scss +23 -23
- package/src/assets/css/cl-sifting.scss +51 -51
- package/src/assets/css/cl-statis.scss +42 -42
- package/src/assets/css/cl-step.scss +73 -73
- package/src/assets/css/cl-suspend.scss +19 -19
- package/src/assets/css/cl-tertiary-tab.scss +54 -54
- package/src/assets/css/cl-upload.scss +41 -41
- package/src/assets/css/cl-worn-pagination.scss +50 -50
- package/src/assets/css/el-button.scss +173 -173
- package/src/assets/css/el-table.scss +79 -79
- package/src/assets/css/element-variables.scss +1061 -1061
- package/src/assets/css/element.dev.scss +21 -21
- package/src/assets/css/font-icon.scss +27 -27
- package/src/assets/css/index.dev.scss +4 -4
- package/src/assets/css/index.scss +11 -11
- package/src/assets/css/normalize.scss +726 -726
- package/src/assets/css/rootvar.scss +139 -139
- package/src/assets/css/select.scss +25 -25
- package/src/assets/css/title-pop.scss +4 -4
- package/src/assets/getJsonc.js +50 -50
- package/src/assets/realUrl.js +12 -12
- package/src/components/Anchor/AnchorItem.vue +29 -29
- package/src/components/Anchor/index.vue +185 -185
- package/src/components/ApprovalButtons/index.vue +233 -233
- package/src/components/ApprovalCard/index.vue +128 -128
- package/src/components/ApprovalRecord/approvalImg.vue +39 -39
- package/src/components/ApprovalRecord/index.vue +59 -59
- package/src/components/Button/button-group.vue +150 -150
- package/src/components/Button/icon-group-button.vue +61 -61
- package/src/components/Button/index.vue +56 -56
- package/src/components/CascaderArea/index.vue +103 -103
- package/src/components/ContentLoading/index.vue +41 -41
- package/src/components/ContentNull/index.vue +19 -19
- package/src/components/DatePicker/index.vue +27 -27
- package/src/components/DatePicker/por.vue +169 -169
- package/src/components/Dialog/index.vue +26 -26
- package/src/components/Dialog/indexO.vue +116 -116
- package/src/components/DragList/index.vue +75 -75
- package/src/components/Empty/img/abnormal.svg +108 -108
- package/src/components/Empty/img/dispose.svg +71 -71
- package/src/components/Empty/img/empty.svg +57 -57
- package/src/components/Empty/img/general.svg +58 -58
- package/src/components/Empty/img/lock.svg +57 -57
- package/src/components/Empty/img/network.svg +59 -59
- package/src/components/Empty/img/relevant.svg +68 -68
- package/src/components/Empty/img/search.svg +72 -72
- package/src/components/Empty/index.vue +92 -92
- package/src/components/Expandable/index.vue +49 -49
- package/src/components/Expandable/main.vue +52 -52
- package/src/components/FileExportAsync/index.vue +178 -178
- package/src/components/FileUploadTable/index.vue +484 -484
- package/src/components/Filters/index.vue +371 -369
- package/src/components/Filters/indexO.vue +104 -104
- package/src/components/FlowStep/index.vue +68 -68
- package/src/components/FooterBox/index.vue +21 -21
- package/src/components/GeneralCard/index.vue +15 -15
- package/src/components/InputNumber/index.vue +169 -169
- package/src/components/InputNumber/numberRange.vue +47 -47
- package/src/components/InputSearch/index.vue +75 -75
- package/src/components/Layout/AsideNav/index.vue +119 -119
- package/src/components/Layout/AsideNav/menuItem.vue +34 -34
- package/src/components/Layout/AsideNav/submenuTitle.vue +26 -26
- package/src/components/Layout/HeaderWrap/changePwd.vue +215 -215
- package/src/components/Layout/HeaderWrap/index.vue +348 -348
- package/src/components/Layout/HeaderWrap/noticePop.vue +300 -300
- package/src/components/Layout/SubContent/index.vue +131 -131
- package/src/components/Layout/TabsNav/index.vue +170 -170
- package/src/components/Layout/index.vue +529 -529
- package/src/components/Layout/utils.js +12 -12
- package/src/components/LoginTemporary/form.vue +1 -5
- package/src/components/LoginTemporary/index.vue +15 -2
- package/src/components/LoginTemporary/retrievePw.vue +360 -13
- package/src/components/MicroApp/index.js +67 -67
- package/src/components/MicroFrame/index.vue +95 -95
- package/src/components/MoreTab/index.vue +232 -232
- package/src/components/NavMenu/index.vue +60 -60
- package/src/components/NstcG6Components/NstcDialog/NstcDialog.vue +184 -184
- package/src/components/PageLayout/page.vue +15 -15
- package/src/components/Pagination/index.vue +165 -165
- package/src/components/SecondaryTab/index.vue +58 -58
- package/src/components/SelectLazy/index.vue +75 -75
- package/src/components/SelectTree/SelectTreeLazy.vue +241 -241
- package/src/components/SelectTree/index.vue +205 -205
- package/src/components/ShowColumn/index.vue +208 -208
- package/src/components/Sifting/index.vue +99 -99
- package/src/components/Statis/index.vue +97 -97
- package/src/components/Statis/statisItem.vue +54 -54
- package/src/components/Statis/statisPopover.vue +55 -55
- package/src/components/Step/index.vue +38 -38
- package/src/components/Suspend/index.vue +72 -72
- package/src/components/Table/index.vue +209 -209
- package/src/components/Table/indexO.vue +149 -149
- package/src/components/Task/index.vue +26 -26
- package/src/components/TertiaryTab/index.vue +63 -63
- package/src/components/TimePicker/index.vue +28 -28
- package/src/components/Upload/index.vue +242 -242
- package/src/components/WornPagination/index.vue +73 -73
- package/src/directives/VClickOutside/index.js +19 -19
- package/src/directives/VHas/index.js +58 -58
- package/src/directives/VMove/index.js +42 -42
- package/src/directives/VTitle/index.js +69 -69
- package/src/directives/VTitle/tooltip.vue +21 -21
- package/src/index.js +229 -229
- package/src/plugins/CompatibleOld/index.js +57 -57
- package/src/plugins/Print/index.js +4 -4
- package/src/plugins/Print/print-js/.babelrc +12 -12
- package/src/plugins/Print/print-js/LICENSE +21 -21
- package/src/plugins/Print/print-js/README.md +98 -98
- package/src/plugins/Print/print-js/dist/print.css +96 -96
- package/src/plugins/Print/print-js/dist/print.js +990 -990
- package/src/plugins/Print/print-js/package.json +60 -60
- package/src/plugins/Print/print-js/src/index.d.ts +45 -45
- package/src/plugins/Print/print-js/src/index.js +10 -10
- package/src/plugins/Print/print-js/src/js/browser.js +33 -33
- package/src/plugins/Print/print-js/src/js/functions.js +103 -103
- package/src/plugins/Print/print-js/src/js/html.js +70 -70
- package/src/plugins/Print/print-js/src/js/image.js +48 -48
- package/src/plugins/Print/print-js/src/js/init.js +168 -168
- package/src/plugins/Print/print-js/src/js/json.js +109 -109
- package/src/plugins/Print/print-js/src/js/modal.js +62 -62
- package/src/plugins/Print/print-js/src/js/pdf.js +62 -62
- package/src/plugins/Print/print-js/src/js/print.js +102 -102
- package/src/plugins/Print/print-js/src/js/raw-html.js +15 -15
- package/src/plugins/Print/print-js/src/sass/index.scss +13 -13
- package/src/plugins/Print/print-js/src/sass/modules/_colors.scss +9 -9
- package/src/plugins/Print/print-js/src/sass/partials/_modal.scss +40 -40
- package/src/plugins/Print/print-js/src/sass/partials/_spinner.scss +45 -45
- package/src/plugins/Print/print.js +2 -2
- package/src/plugins/Print/print.scss +1 -1
- package/src/plugins/SetMenuTree/index.vue +41 -41
- package/src/plugins/SetMenuTree/logoIcon.vue +37 -37
- package/src/plugins/SetMenuTree/setmenutree.vue +427 -427
- package/src/plugins/SetMenuTree/utils.js +74 -74
- package/src/plugins/Sign/InfosecNetSignCNGAgent.min.js +2000 -2000
- package/src/plugins/Sign/index.js +65 -65
- package/src/plugins/Sign/sign.js +1 -1
- package/src/plugins/setTabsForSub.js +2 -2
- package/src/utils/InfosecNetSignCNGAgent.min.js +1795 -0
- package/src/utils/auth.js +53 -53
- package/src/utils/axios.js +203 -203
- package/src/utils/downloadBlob.js +19 -19
- package/src/utils/forEachs.js +16 -16
- package/src/utils/getScrollContainer.js +43 -43
- package/src/utils/i18n/cn2hk.json +1270 -1270
- package/src/utils/i18n/index.js +50 -50
- package/src/utils/list2tree.js +36 -36
- package/src/utils/msgboxPor.js +26 -26
- package/src/utils/print.js +161 -161
- package/src/utils/relaNo.js +76 -76
- package/src/utils/repairElementUI.js +66 -66
- package/src/utils/sign.js +85 -0
- package/src/utils/urlToGo.js +82 -82
- package/style/css/normalize.scss +0 -726
- package/style/pageDemo/demo-1.vue +0 -131
- package/style/pageDemo/demo-2.vue +0 -35
- package/style/pageDemo/demo-3.vue +0 -22
- package/style/pageDemo/seeCode.js +0 -20
- package/style/server-config.jsonc +0 -606
package/src/utils/auth.js
CHANGED
|
@@ -1,53 +1,53 @@
|
|
|
1
|
-
/* 设置/获取token */
|
|
2
|
-
import Cookies from 'js-cookie'
|
|
3
|
-
|
|
4
|
-
const STORAGE = window.sessionStorage
|
|
5
|
-
|
|
6
|
-
const auth = {
|
|
7
|
-
stokenKey: 'token',
|
|
8
|
-
cokenKey: 'token',
|
|
9
|
-
tokenVal: '',
|
|
10
|
-
getTokenKey() {
|
|
11
|
-
return this.stokenKey
|
|
12
|
-
},
|
|
13
|
-
getToken() {
|
|
14
|
-
this.tokenVal || (this.tokenVal = STORAGE.getItem(this.stokenKey))
|
|
15
|
-
return this.tokenVal
|
|
16
|
-
},
|
|
17
|
-
getCookieToken() {
|
|
18
|
-
return Cookies.get(this.cokenKey)
|
|
19
|
-
},
|
|
20
|
-
setToken(val) {
|
|
21
|
-
Cookies.set(this.cokenKey, val, { expires: 1 })
|
|
22
|
-
STORAGE.setItem(this.stokenKey, val)
|
|
23
|
-
},
|
|
24
|
-
removeToken() {
|
|
25
|
-
this.tokenVal = ''
|
|
26
|
-
Cookies.remove(this.cokenKey)
|
|
27
|
-
STORAGE.removeItem(this.stokenKey)
|
|
28
|
-
toLogin()
|
|
29
|
-
},
|
|
30
|
-
setLoginPath(router) {
|
|
31
|
-
let { base = '/', mode = 'history' } = router.options
|
|
32
|
-
if (mode === 'hash') {
|
|
33
|
-
ownLoginPath = window.location.origin + base + '#/login'
|
|
34
|
-
} else {
|
|
35
|
-
ownLoginPath = window.location.origin + base + 'login'
|
|
36
|
-
}
|
|
37
|
-
// 判断有没有token,没有直接跳到登录页
|
|
38
|
-
auth.getToken() || toLogin()
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
auth.cokenKey = 'Admin-Token'
|
|
42
|
-
|
|
43
|
-
let ownLoginPath = '/login'
|
|
44
|
-
function toLogin() {
|
|
45
|
-
let hrefOld = window.location.href
|
|
46
|
-
let loginHref = window.__POWERED_BY_QIANKUN__ ? window.location.origin + '/login' : ownLoginPath
|
|
47
|
-
if (hrefOld !== loginHref) {
|
|
48
|
-
history.pushState(null, null, loginHref)
|
|
49
|
-
window.location.reload()
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
export default auth
|
|
1
|
+
/* 设置/获取token */
|
|
2
|
+
import Cookies from 'js-cookie'
|
|
3
|
+
|
|
4
|
+
const STORAGE = window.sessionStorage
|
|
5
|
+
|
|
6
|
+
const auth = {
|
|
7
|
+
stokenKey: 'token',
|
|
8
|
+
cokenKey: 'token',
|
|
9
|
+
tokenVal: '',
|
|
10
|
+
getTokenKey() {
|
|
11
|
+
return this.stokenKey
|
|
12
|
+
},
|
|
13
|
+
getToken() {
|
|
14
|
+
this.tokenVal || (this.tokenVal = STORAGE.getItem(this.stokenKey))
|
|
15
|
+
return this.tokenVal
|
|
16
|
+
},
|
|
17
|
+
getCookieToken() {
|
|
18
|
+
return Cookies.get(this.cokenKey)
|
|
19
|
+
},
|
|
20
|
+
setToken(val) {
|
|
21
|
+
Cookies.set(this.cokenKey, val, { expires: 1 })
|
|
22
|
+
STORAGE.setItem(this.stokenKey, val)
|
|
23
|
+
},
|
|
24
|
+
removeToken() {
|
|
25
|
+
this.tokenVal = ''
|
|
26
|
+
Cookies.remove(this.cokenKey)
|
|
27
|
+
STORAGE.removeItem(this.stokenKey)
|
|
28
|
+
toLogin()
|
|
29
|
+
},
|
|
30
|
+
setLoginPath(router) {
|
|
31
|
+
let { base = '/', mode = 'history' } = router.options
|
|
32
|
+
if (mode === 'hash') {
|
|
33
|
+
ownLoginPath = window.location.origin + base + '#/login'
|
|
34
|
+
} else {
|
|
35
|
+
ownLoginPath = window.location.origin + base + 'login'
|
|
36
|
+
}
|
|
37
|
+
// 判断有没有token,没有直接跳到登录页
|
|
38
|
+
auth.getToken() || toLogin()
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
auth.cokenKey = 'Admin-Token'
|
|
42
|
+
|
|
43
|
+
let ownLoginPath = '/login'
|
|
44
|
+
function toLogin() {
|
|
45
|
+
let hrefOld = window.location.href
|
|
46
|
+
let loginHref = window.__POWERED_BY_QIANKUN__ ? window.location.origin + '/login' : ownLoginPath
|
|
47
|
+
if (hrefOld !== loginHref) {
|
|
48
|
+
history.pushState(null, null, loginHref)
|
|
49
|
+
window.location.reload()
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export default auth
|
package/src/utils/axios.js
CHANGED
|
@@ -1,203 +1,203 @@
|
|
|
1
|
-
import _axios from 'axios'
|
|
2
|
-
import ElementUI from 'element-ui'
|
|
3
|
-
import auth from './auth'
|
|
4
|
-
const _Loading = ElementUI.Loading
|
|
5
|
-
const _Message = ElementUI.Message
|
|
6
|
-
|
|
7
|
-
/* 添加msg */
|
|
8
|
-
function showMsg(msg, single = true) {
|
|
9
|
-
if (!single || !document.querySelector('.xhr-msg-top')) {
|
|
10
|
-
_Message({
|
|
11
|
-
showClose: true,
|
|
12
|
-
message: msg,
|
|
13
|
-
type: 'error',
|
|
14
|
-
customClass: 'xhr-msg-top'
|
|
15
|
-
})
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
/* 添加loading */
|
|
19
|
-
let loadingBox
|
|
20
|
-
let loadingCount = 0
|
|
21
|
-
function showLoading(opt) {
|
|
22
|
-
let loading = opt.loading
|
|
23
|
-
if (loading === true) {
|
|
24
|
-
if (loadingCount === 0 && !document.querySelector('.xhr-loading-top')) {
|
|
25
|
-
loadingBox = _Loading.service({
|
|
26
|
-
lock: true,
|
|
27
|
-
text: '加载中',
|
|
28
|
-
background: 'rgba(0, 0, 0, 0.1)',
|
|
29
|
-
customClass: 'xhr-loading-top'
|
|
30
|
-
})
|
|
31
|
-
}
|
|
32
|
-
loadingCount++
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
function closeLoading(opt) {
|
|
36
|
-
let loading = opt.loading
|
|
37
|
-
if (loading === true) {
|
|
38
|
-
loadingCount--
|
|
39
|
-
if (loadingCount === 0) {
|
|
40
|
-
if (loadingBox) loadingBox.close()
|
|
41
|
-
}
|
|
42
|
-
} else if (typeof loading === 'function') {
|
|
43
|
-
loading()
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
/* 请求防抖 */
|
|
47
|
-
let debounceObj = {}
|
|
48
|
-
|
|
49
|
-
const config = {
|
|
50
|
-
baseURL: process.env.VUE_APP_BASE_API || '',
|
|
51
|
-
crossDomain: true, // 允许跨域
|
|
52
|
-
// withCredentials: true, // 跨域携带cookie
|
|
53
|
-
timeout: 120000,
|
|
54
|
-
validateStatus(status) {
|
|
55
|
-
return status === 200
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
const axios = _axios.create(config)
|
|
59
|
-
|
|
60
|
-
axios.interceptors.request.use((opt) => {
|
|
61
|
-
let token = auth.getToken()
|
|
62
|
-
let headers = {
|
|
63
|
-
Authorization: token ? 'Bearer ' + token : 'Basic TlNUQzpWVkIxVG1sVlVURlNMemxyTkhoc2VtNXdObFJaUVQwOQ==',
|
|
64
|
-
OperationDesc: opt.OperationDesc ? encodeURI(opt.OperationDesc) : 'default',
|
|
65
|
-
timestamp: Date.now(),
|
|
66
|
-
requestKey: Date.now()
|
|
67
|
-
}
|
|
68
|
-
opt.headers = Object.assign(headers, opt.headers)
|
|
69
|
-
|
|
70
|
-
return opt
|
|
71
|
-
})
|
|
72
|
-
|
|
73
|
-
function errorFn(status, msg, noMsg) {
|
|
74
|
-
if (status === 401 || msg.includes('401')) {
|
|
75
|
-
if (navigator.userAgent.indexOf('NSTC-WebEntry') > -1) {
|
|
76
|
-
showMsg('超时未操作,请重新登录!')
|
|
77
|
-
setTimeout(() => {
|
|
78
|
-
localStorage.clear()
|
|
79
|
-
sessionStorage.clear()
|
|
80
|
-
window.top.webQuit()
|
|
81
|
-
}, 3000)
|
|
82
|
-
} else {
|
|
83
|
-
noMsg || showMsg('超时未操作,请重新登录!')
|
|
84
|
-
setTimeout(() => {
|
|
85
|
-
auth.removeToken()
|
|
86
|
-
}, 1000)
|
|
87
|
-
}
|
|
88
|
-
} else if (status === 400 || msg.includes('400')) {
|
|
89
|
-
noMsg || showMsg('400,参数错误!')
|
|
90
|
-
} else if (status === 404 || msg.includes('404')) {
|
|
91
|
-
noMsg || showMsg('404,网络连接失败!')
|
|
92
|
-
} else if (status === 500 || msg.includes('500')) {
|
|
93
|
-
noMsg || showMsg('500,服务器链接失败!')
|
|
94
|
-
} else if (status === 'ECONNABORTED' && msg.includes('timeout')) {
|
|
95
|
-
showMsg('请求超时')
|
|
96
|
-
} else if (status >= 900) {
|
|
97
|
-
noMsg || showMsg(msg)
|
|
98
|
-
} else {
|
|
99
|
-
noMsg || showMsg(msg)
|
|
100
|
-
}
|
|
101
|
-
throw { code: status, msg: msg }
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
axios.interceptors.response.use(
|
|
105
|
-
(res) => {
|
|
106
|
-
let status = (res.data && res.data.code) || res.status
|
|
107
|
-
if (Number(status) === 200) {
|
|
108
|
-
return res
|
|
109
|
-
} else {
|
|
110
|
-
let msg = (res.data && (res.data.msg || res.data.message)) || ''
|
|
111
|
-
let noMsg = res.config && res.config.noMsg
|
|
112
|
-
|
|
113
|
-
return errorFn(status, msg, noMsg)
|
|
114
|
-
}
|
|
115
|
-
},
|
|
116
|
-
(err) => {
|
|
117
|
-
let status = err.status
|
|
118
|
-
let msg = err.message || ''
|
|
119
|
-
let noMsg = err.config && err.config.noMsg
|
|
120
|
-
|
|
121
|
-
return errorFn(status, msg, noMsg)
|
|
122
|
-
}
|
|
123
|
-
)
|
|
124
|
-
|
|
125
|
-
function request(opt) {
|
|
126
|
-
let loading = opt.loading === undefined ? true : opt.loading
|
|
127
|
-
showLoading({ loading })
|
|
128
|
-
|
|
129
|
-
if (debounceObj[opt.method + opt.url]) {
|
|
130
|
-
debounceObj[opt.method + opt.url].finally(() => {
|
|
131
|
-
closeLoading({ loading })
|
|
132
|
-
})
|
|
133
|
-
|
|
134
|
-
// 短时间多次请求,均返回第一次请求结果
|
|
135
|
-
return debounceObj[opt.method + opt.url]
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
let resPro = new Promise((resolve, reject) => {
|
|
139
|
-
axios
|
|
140
|
-
.request(opt)
|
|
141
|
-
.then((res) => {
|
|
142
|
-
if (opt.responseType === 'blob') {
|
|
143
|
-
let filename = getFilename(res.headers['content-disposition'])
|
|
144
|
-
filename && res.data && (res.data.name = filename)
|
|
145
|
-
resolve(res.data)
|
|
146
|
-
} else {
|
|
147
|
-
if (typeof res.data === 'object' && res.data.data === undefined) {
|
|
148
|
-
res.data.data = {}
|
|
149
|
-
}
|
|
150
|
-
resolve(res.data)
|
|
151
|
-
}
|
|
152
|
-
})
|
|
153
|
-
.catch((error) => {
|
|
154
|
-
reject(error)
|
|
155
|
-
})
|
|
156
|
-
})
|
|
157
|
-
|
|
158
|
-
resPro.finally(() => {
|
|
159
|
-
delete debounceObj[opt.method + opt.url]
|
|
160
|
-
|
|
161
|
-
closeLoading({ loading })
|
|
162
|
-
})
|
|
163
|
-
debounceObj[opt.method + opt.url] = resPro
|
|
164
|
-
return resPro
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
function getFilename(cd = '') {
|
|
168
|
-
let cdArr = cd.split(';')
|
|
169
|
-
let filename = cdArr.find((d) => /filename/i.test(d))
|
|
170
|
-
if (filename) {
|
|
171
|
-
filename = filename.split('=')
|
|
172
|
-
if (filename[1]) {
|
|
173
|
-
return decodeURI(filename[1].trim())
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
return ''
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
// 自定义axios
|
|
180
|
-
function customAxios(opt) {
|
|
181
|
-
return request(opt)
|
|
182
|
-
}
|
|
183
|
-
customAxios.defaults = axios.defaults
|
|
184
|
-
/** @returns {Promise} */
|
|
185
|
-
customAxios.request = request
|
|
186
|
-
/** @returns {Promise} */
|
|
187
|
-
customAxios.get = function (url, params = {}, opt = {}) {
|
|
188
|
-
return request(Object.assign({ method: 'get', url, params }, opt))
|
|
189
|
-
}
|
|
190
|
-
/** @returns {Promise} */
|
|
191
|
-
customAxios.post = function (url, data = {}, opt = {}) {
|
|
192
|
-
return request(Object.assign({ method: 'post', url, data }, opt))
|
|
193
|
-
}
|
|
194
|
-
/** @returns {Promise} */
|
|
195
|
-
customAxios.put = function (url, data = {}, params = {}, opt = {}) {
|
|
196
|
-
return this.request(Object.assign({ method: 'put', url, data, params }, opt))
|
|
197
|
-
}
|
|
198
|
-
/** @returns {Promise} */
|
|
199
|
-
customAxios.delete = function (url, params = {}, opt = {}) {
|
|
200
|
-
return this.request(Object.assign({ method: 'delete', url, params }, opt))
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
export default customAxios
|
|
1
|
+
import _axios from 'axios'
|
|
2
|
+
import ElementUI from 'element-ui'
|
|
3
|
+
import auth from './auth'
|
|
4
|
+
const _Loading = ElementUI.Loading
|
|
5
|
+
const _Message = ElementUI.Message
|
|
6
|
+
|
|
7
|
+
/* 添加msg */
|
|
8
|
+
function showMsg(msg, single = true) {
|
|
9
|
+
if (!single || !document.querySelector('.xhr-msg-top')) {
|
|
10
|
+
_Message({
|
|
11
|
+
showClose: true,
|
|
12
|
+
message: msg,
|
|
13
|
+
type: 'error',
|
|
14
|
+
customClass: 'xhr-msg-top'
|
|
15
|
+
})
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/* 添加loading */
|
|
19
|
+
let loadingBox
|
|
20
|
+
let loadingCount = 0
|
|
21
|
+
function showLoading(opt) {
|
|
22
|
+
let loading = opt.loading
|
|
23
|
+
if (loading === true) {
|
|
24
|
+
if (loadingCount === 0 && !document.querySelector('.xhr-loading-top')) {
|
|
25
|
+
loadingBox = _Loading.service({
|
|
26
|
+
lock: true,
|
|
27
|
+
text: '加载中',
|
|
28
|
+
background: 'rgba(0, 0, 0, 0.1)',
|
|
29
|
+
customClass: 'xhr-loading-top'
|
|
30
|
+
})
|
|
31
|
+
}
|
|
32
|
+
loadingCount++
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function closeLoading(opt) {
|
|
36
|
+
let loading = opt.loading
|
|
37
|
+
if (loading === true) {
|
|
38
|
+
loadingCount--
|
|
39
|
+
if (loadingCount === 0) {
|
|
40
|
+
if (loadingBox) loadingBox.close()
|
|
41
|
+
}
|
|
42
|
+
} else if (typeof loading === 'function') {
|
|
43
|
+
loading()
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/* 请求防抖 */
|
|
47
|
+
let debounceObj = {}
|
|
48
|
+
|
|
49
|
+
const config = {
|
|
50
|
+
baseURL: process.env.VUE_APP_BASE_API || '',
|
|
51
|
+
crossDomain: true, // 允许跨域
|
|
52
|
+
// withCredentials: true, // 跨域携带cookie
|
|
53
|
+
timeout: 120000,
|
|
54
|
+
validateStatus(status) {
|
|
55
|
+
return status === 200
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
const axios = _axios.create(config)
|
|
59
|
+
|
|
60
|
+
axios.interceptors.request.use((opt) => {
|
|
61
|
+
let token = auth.getToken()
|
|
62
|
+
let headers = {
|
|
63
|
+
Authorization: token ? 'Bearer ' + token : 'Basic TlNUQzpWVkIxVG1sVlVURlNMemxyTkhoc2VtNXdObFJaUVQwOQ==',
|
|
64
|
+
OperationDesc: opt.OperationDesc ? encodeURI(opt.OperationDesc) : 'default',
|
|
65
|
+
timestamp: Date.now(),
|
|
66
|
+
requestKey: Date.now()
|
|
67
|
+
}
|
|
68
|
+
opt.headers = Object.assign(headers, opt.headers)
|
|
69
|
+
|
|
70
|
+
return opt
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
function errorFn(status, msg, noMsg) {
|
|
74
|
+
if (status === 401 || msg.includes('401')) {
|
|
75
|
+
if (navigator.userAgent.indexOf('NSTC-WebEntry') > -1) {
|
|
76
|
+
showMsg('超时未操作,请重新登录!')
|
|
77
|
+
setTimeout(() => {
|
|
78
|
+
localStorage.clear()
|
|
79
|
+
sessionStorage.clear()
|
|
80
|
+
window.top.webQuit()
|
|
81
|
+
}, 3000)
|
|
82
|
+
} else {
|
|
83
|
+
noMsg || showMsg('超时未操作,请重新登录!')
|
|
84
|
+
setTimeout(() => {
|
|
85
|
+
auth.removeToken()
|
|
86
|
+
}, 1000)
|
|
87
|
+
}
|
|
88
|
+
} else if (status === 400 || msg.includes('400')) {
|
|
89
|
+
noMsg || showMsg('400,参数错误!')
|
|
90
|
+
} else if (status === 404 || msg.includes('404')) {
|
|
91
|
+
noMsg || showMsg('404,网络连接失败!')
|
|
92
|
+
} else if (status === 500 || msg.includes('500')) {
|
|
93
|
+
noMsg || showMsg('500,服务器链接失败!')
|
|
94
|
+
} else if (status === 'ECONNABORTED' && msg.includes('timeout')) {
|
|
95
|
+
showMsg('请求超时')
|
|
96
|
+
} else if (status >= 900) {
|
|
97
|
+
noMsg || showMsg(msg)
|
|
98
|
+
} else {
|
|
99
|
+
noMsg || showMsg(msg)
|
|
100
|
+
}
|
|
101
|
+
throw { code: status, msg: msg }
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
axios.interceptors.response.use(
|
|
105
|
+
(res) => {
|
|
106
|
+
let status = (res.data && res.data.code) || res.status
|
|
107
|
+
if (Number(status) === 200) {
|
|
108
|
+
return res
|
|
109
|
+
} else {
|
|
110
|
+
let msg = (res.data && (res.data.msg || res.data.message)) || ''
|
|
111
|
+
let noMsg = res.config && res.config.noMsg
|
|
112
|
+
|
|
113
|
+
return errorFn(status, msg, noMsg)
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
(err) => {
|
|
117
|
+
let status = err.status
|
|
118
|
+
let msg = err.message || ''
|
|
119
|
+
let noMsg = err.config && err.config.noMsg
|
|
120
|
+
|
|
121
|
+
return errorFn(status, msg, noMsg)
|
|
122
|
+
}
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
function request(opt) {
|
|
126
|
+
let loading = opt.loading === undefined ? true : opt.loading
|
|
127
|
+
showLoading({ loading })
|
|
128
|
+
|
|
129
|
+
if (debounceObj[opt.method + opt.url]) {
|
|
130
|
+
debounceObj[opt.method + opt.url].finally(() => {
|
|
131
|
+
closeLoading({ loading })
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
// 短时间多次请求,均返回第一次请求结果
|
|
135
|
+
return debounceObj[opt.method + opt.url]
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
let resPro = new Promise((resolve, reject) => {
|
|
139
|
+
axios
|
|
140
|
+
.request(opt)
|
|
141
|
+
.then((res) => {
|
|
142
|
+
if (opt.responseType === 'blob') {
|
|
143
|
+
let filename = getFilename(res.headers['content-disposition'])
|
|
144
|
+
filename && res.data && (res.data.name = filename)
|
|
145
|
+
resolve(res.data)
|
|
146
|
+
} else {
|
|
147
|
+
if (typeof res.data === 'object' && res.data.data === undefined) {
|
|
148
|
+
res.data.data = {}
|
|
149
|
+
}
|
|
150
|
+
resolve(res.data)
|
|
151
|
+
}
|
|
152
|
+
})
|
|
153
|
+
.catch((error) => {
|
|
154
|
+
reject(error)
|
|
155
|
+
})
|
|
156
|
+
})
|
|
157
|
+
|
|
158
|
+
resPro.finally(() => {
|
|
159
|
+
delete debounceObj[opt.method + opt.url]
|
|
160
|
+
|
|
161
|
+
closeLoading({ loading })
|
|
162
|
+
})
|
|
163
|
+
debounceObj[opt.method + opt.url] = resPro
|
|
164
|
+
return resPro
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
function getFilename(cd = '') {
|
|
168
|
+
let cdArr = cd.split(';')
|
|
169
|
+
let filename = cdArr.find((d) => /filename/i.test(d))
|
|
170
|
+
if (filename) {
|
|
171
|
+
filename = filename.split('=')
|
|
172
|
+
if (filename[1]) {
|
|
173
|
+
return decodeURI(filename[1].trim())
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return ''
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// 自定义axios
|
|
180
|
+
function customAxios(opt) {
|
|
181
|
+
return request(opt)
|
|
182
|
+
}
|
|
183
|
+
customAxios.defaults = axios.defaults
|
|
184
|
+
/** @returns {Promise} */
|
|
185
|
+
customAxios.request = request
|
|
186
|
+
/** @returns {Promise} */
|
|
187
|
+
customAxios.get = function (url, params = {}, opt = {}) {
|
|
188
|
+
return request(Object.assign({ method: 'get', url, params }, opt))
|
|
189
|
+
}
|
|
190
|
+
/** @returns {Promise} */
|
|
191
|
+
customAxios.post = function (url, data = {}, opt = {}) {
|
|
192
|
+
return request(Object.assign({ method: 'post', url, data }, opt))
|
|
193
|
+
}
|
|
194
|
+
/** @returns {Promise} */
|
|
195
|
+
customAxios.put = function (url, data = {}, params = {}, opt = {}) {
|
|
196
|
+
return this.request(Object.assign({ method: 'put', url, data, params }, opt))
|
|
197
|
+
}
|
|
198
|
+
/** @returns {Promise} */
|
|
199
|
+
customAxios.delete = function (url, params = {}, opt = {}) {
|
|
200
|
+
return this.request(Object.assign({ method: 'delete', url, params }, opt))
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
export default customAxios
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
const downloadBlob = (data, name) => {
|
|
2
|
-
let url
|
|
3
|
-
if (data instanceof Blob) {
|
|
4
|
-
url = URL.createObjectURL(data)
|
|
5
|
-
} else {
|
|
6
|
-
url = URL.createObjectURL(new Blob([data]))
|
|
7
|
-
}
|
|
8
|
-
let link = document.createElement('a')
|
|
9
|
-
link.href = url
|
|
10
|
-
link.download = name
|
|
11
|
-
link.click()
|
|
12
|
-
|
|
13
|
-
setTimeout(() => {
|
|
14
|
-
link = undefined
|
|
15
|
-
URL.revokeObjectURL(url)
|
|
16
|
-
}, 100)
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export default downloadBlob
|
|
1
|
+
const downloadBlob = (data, name) => {
|
|
2
|
+
let url
|
|
3
|
+
if (data instanceof Blob) {
|
|
4
|
+
url = URL.createObjectURL(data)
|
|
5
|
+
} else {
|
|
6
|
+
url = URL.createObjectURL(new Blob([data]))
|
|
7
|
+
}
|
|
8
|
+
let link = document.createElement('a')
|
|
9
|
+
link.href = url
|
|
10
|
+
link.download = name
|
|
11
|
+
link.click()
|
|
12
|
+
|
|
13
|
+
setTimeout(() => {
|
|
14
|
+
link = undefined
|
|
15
|
+
URL.revokeObjectURL(url)
|
|
16
|
+
}, 100)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export default downloadBlob
|
package/src/utils/forEachs.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
function forEachs(arr, callback, branch = 'children', arrp = {}) {
|
|
2
|
-
if (typeof callback === 'function') {
|
|
3
|
-
_forEachs(arr, callback, branch, arrp)
|
|
4
|
-
}
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
function _forEachs(arr, callback, branch, arrp) {
|
|
8
|
-
arr.forEach(function (item, _i, _arr) {
|
|
9
|
-
callback(item, _i, _arr, arrp)
|
|
10
|
-
if (item[branch] && Array.isArray(item[branch])) {
|
|
11
|
-
_forEachs(item[branch], callback, branch, item)
|
|
12
|
-
}
|
|
13
|
-
})
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export default forEachs
|
|
1
|
+
function forEachs(arr, callback, branch = 'children', arrp = {}) {
|
|
2
|
+
if (typeof callback === 'function') {
|
|
3
|
+
_forEachs(arr, callback, branch, arrp)
|
|
4
|
+
}
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
function _forEachs(arr, callback, branch, arrp) {
|
|
8
|
+
arr.forEach(function (item, _i, _arr) {
|
|
9
|
+
callback(item, _i, _arr, arrp)
|
|
10
|
+
if (item[branch] && Array.isArray(item[branch])) {
|
|
11
|
+
_forEachs(item[branch], callback, branch, item)
|
|
12
|
+
}
|
|
13
|
+
})
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export default forEachs
|
|
@@ -1,43 +1,43 @@
|
|
|
1
|
-
// 获取滚动的dom
|
|
2
|
-
export function getScrollContainer(el, vertical) {
|
|
3
|
-
let parent = el
|
|
4
|
-
while (parent) {
|
|
5
|
-
if ([window, document, document.documentElement].includes(parent)) {
|
|
6
|
-
return window
|
|
7
|
-
}
|
|
8
|
-
if (isScroll(parent, vertical)) {
|
|
9
|
-
return parent
|
|
10
|
-
}
|
|
11
|
-
parent = parent.parentNode
|
|
12
|
-
}
|
|
13
|
-
return parent
|
|
14
|
-
}
|
|
15
|
-
export function isScroll(el, vertical) {
|
|
16
|
-
const determinedDirection = vertical !== null || vertical !== undefined
|
|
17
|
-
const overflow = determinedDirection
|
|
18
|
-
? vertical
|
|
19
|
-
? getComputedStyle(el)['overflow-y']
|
|
20
|
-
: getComputedStyle(el)['overflow-x']
|
|
21
|
-
: getComputedStyle(el)['overflow']
|
|
22
|
-
return overflow.match(/(scroll|auto)/)
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* 函数防抖
|
|
27
|
-
* param fnName 函数名
|
|
28
|
-
* param time 延迟时间
|
|
29
|
-
* return: 处理后的执行函数
|
|
30
|
-
*/
|
|
31
|
-
export function vueDebounce(fnName, time) {
|
|
32
|
-
let timeout = null
|
|
33
|
-
return function () {
|
|
34
|
-
const _arguments = arguments
|
|
35
|
-
if (timeout) {
|
|
36
|
-
clearTimeout(timeout)
|
|
37
|
-
}
|
|
38
|
-
timeout = setTimeout(() => {
|
|
39
|
-
timeout = null
|
|
40
|
-
this[fnName].apply(this, _arguments)
|
|
41
|
-
}, time)
|
|
42
|
-
}
|
|
43
|
-
}
|
|
1
|
+
// 获取滚动的dom
|
|
2
|
+
export function getScrollContainer(el, vertical) {
|
|
3
|
+
let parent = el
|
|
4
|
+
while (parent) {
|
|
5
|
+
if ([window, document, document.documentElement].includes(parent)) {
|
|
6
|
+
return window
|
|
7
|
+
}
|
|
8
|
+
if (isScroll(parent, vertical)) {
|
|
9
|
+
return parent
|
|
10
|
+
}
|
|
11
|
+
parent = parent.parentNode
|
|
12
|
+
}
|
|
13
|
+
return parent
|
|
14
|
+
}
|
|
15
|
+
export function isScroll(el, vertical) {
|
|
16
|
+
const determinedDirection = vertical !== null || vertical !== undefined
|
|
17
|
+
const overflow = determinedDirection
|
|
18
|
+
? vertical
|
|
19
|
+
? getComputedStyle(el)['overflow-y']
|
|
20
|
+
: getComputedStyle(el)['overflow-x']
|
|
21
|
+
: getComputedStyle(el)['overflow']
|
|
22
|
+
return overflow.match(/(scroll|auto)/)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* 函数防抖
|
|
27
|
+
* param fnName 函数名
|
|
28
|
+
* param time 延迟时间
|
|
29
|
+
* return: 处理后的执行函数
|
|
30
|
+
*/
|
|
31
|
+
export function vueDebounce(fnName, time) {
|
|
32
|
+
let timeout = null
|
|
33
|
+
return function () {
|
|
34
|
+
const _arguments = arguments
|
|
35
|
+
if (timeout) {
|
|
36
|
+
clearTimeout(timeout)
|
|
37
|
+
}
|
|
38
|
+
timeout = setTimeout(() => {
|
|
39
|
+
timeout = null
|
|
40
|
+
this[fnName].apply(this, _arguments)
|
|
41
|
+
}, time)
|
|
42
|
+
}
|
|
43
|
+
}
|