imatrix-ui 0.2.6-up → 0.2.7-up
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 +7 -7
- package/index.html +13 -13
- package/lib/super-ui.css +1 -1
- package/lib/super-ui.js +2724 -1932
- package/lib/super-ui.umd.cjs +24 -24
- package/package.json +1 -1
- package/packages/IntervalSelection/index.js +6 -6
- package/packages/IntervalSelection/src/quarterScope.vue +405 -405
- package/packages/IntervalSelection/src/sectionDate.vue +475 -475
- package/packages/breadcrumb/index.js +6 -6
- package/packages/breadcrumb/src/breadcrumb.vue +81 -81
- package/packages/department-tree/index.js +6 -6
- package/packages/department-tree/src/department-tree.vue +113 -113
- package/packages/department-tree-inline/index.js +6 -6
- package/packages/department-tree-inline/src/department-multi-tree-inline.vue +472 -472
- package/packages/department-tree-inline/src/department-single-tree-inline.vue +340 -340
- package/packages/department-tree-inline/src/department-tree-inline.vue +86 -86
- package/packages/department-tree-inline/src/department-tree-service.js +344 -344
- package/packages/department-tree-inline/src/search-result.vue +235 -235
- package/packages/department-user-tree/index.js +6 -6
- package/packages/department-user-tree/src/department-user-multiple-tree.vue +129 -129
- package/packages/department-user-tree/src/department-user-single-tree.vue +94 -94
- package/packages/department-user-tree/src/department-user-tree.vue +114 -114
- package/packages/department-user-tree-inline/index.js +9 -9
- package/packages/department-user-tree-inline/src/department-user-multiple-tree-inline.vue +731 -731
- package/packages/department-user-tree-inline/src/department-user-single-tree-inline.vue +334 -334
- package/packages/department-user-tree-inline/src/department-user-tree-inline.vue +87 -87
- package/packages/department-user-tree-inline/src/department-user-tree-multi-service.js +309 -309
- package/packages/department-user-tree-inline/src/department-user-tree-single-service.js +179 -179
- package/packages/department-user-tree-inline/src/search-result.vue +273 -273
- package/packages/directives/prevent-reclick.js +22 -22
- package/packages/dynamic-source-select/index.js +6 -6
- package/packages/dynamic-source-select/src/dynamic-source-select-service.js +106 -106
- package/packages/dynamic-source-select/src/dynamic-source-select.vue +675 -675
- package/packages/dynamic-source-select/src/events.js +78 -78
- package/packages/fs-preview/index.js +6 -6
- package/packages/fs-preview/src/fs-preview.vue +287 -287
- package/packages/fs-upload/index.js +6 -6
- package/packages/fs-upload/src/fs-upload-multi.vue +443 -443
- package/packages/fs-upload/src/fs-upload-single.vue +353 -353
- package/packages/fs-upload/src/fs-upload.vue +191 -191
- package/packages/fs-upload/src/see-big-picture.vue +67 -67
- package/packages/fs-upload-list/index.js +6 -6
- package/packages/fs-upload-list/src/fs-upload-list.vue +372 -372
- package/packages/hamburger/index.js +6 -6
- package/packages/hamburger/src/hamburger.vue +40 -40
- package/packages/index.js +123 -123
- package/packages/multipart-upload/index.js +6 -6
- package/packages/multipart-upload/src/index.vue +66 -66
- package/packages/multipart-upload/src/multipart-upload-form.vue +377 -377
- package/packages/multipart-upload/src/multipart-upload-list.vue +517 -517
- package/packages/organization-input/index.js +6 -6
- package/packages/organization-input/src/organization-input.vue +583 -583
- package/packages/plugins/export-data-new.js +623 -623
- package/packages/plugins/export-data.js +431 -431
- package/packages/plugins/index.js +15 -15
- package/packages/plugins/public-method.js +47 -47
- package/packages/remove-department/index.js +6 -6
- package/packages/remove-department/src/remove-department.vue +200 -200
- package/packages/remove-department/src/remove-dept-service.js +31 -31
- package/packages/remove-user/index.js +6 -6
- package/packages/remove-user/src/remove-user-service.js +31 -31
- package/packages/remove-user/src/remove-user.vue +226 -226
- package/packages/remove-workgroup/index.js +6 -6
- package/packages/remove-workgroup/src/remove-workgroup-service.js +31 -31
- package/packages/remove-workgroup/src/remove-workgroup.vue +183 -183
- package/packages/rich-editor/index.js +7 -7
- package/packages/rich-editor/index.vue +297 -297
- package/packages/rich-editor/langs/zh-Hans.js +438 -438
- package/packages/rich-editor/viewer.vue +105 -105
- package/packages/scan-code-input/index.js +6 -6
- package/packages/scan-code-input/src/events.js +34 -34
- package/packages/scan-code-input/src/scan-code-input-colse.vue +140 -140
- package/packages/scan-code-input/src/scan-code-input.vue +132 -132
- package/packages/secret-info/index.js +7 -7
- package/packages/secret-info/index.vue +100 -100
- package/packages/super-grid/index.js +7 -7
- package/packages/super-grid/src/apis.js +1092 -1092
- package/packages/super-grid/src/columns-config.vue +427 -427
- package/packages/super-grid/src/custom-formatter.js +394 -394
- package/packages/super-grid/src/eventBus.js +2 -2
- package/packages/super-grid/src/events.js +56 -56
- package/packages/super-grid/src/formValidatorUtil.js +300 -300
- package/packages/super-grid/src/formatter.js +196 -196
- package/packages/super-grid/src/group-column.vue +99 -99
- package/packages/super-grid/src/header-context-menu.vue +82 -82
- package/packages/super-grid/src/index-column.vue +69 -69
- package/packages/super-grid/src/public-methods.js +30 -30
- package/packages/super-grid/src/row-operation.vue +193 -193
- package/packages/super-grid/src/search-button.vue +74 -74
- package/packages/super-grid/src/search-condition-input.vue +73 -73
- package/packages/super-grid/src/search-condition-list.vue +68 -68
- package/packages/super-grid/src/search-form-advancedQuery.vue +819 -819
- package/packages/super-grid/src/search-form-dialog.vue +77 -77
- package/packages/super-grid/src/search-form-item.vue +495 -495
- package/packages/super-grid/src/search-form-number.vue +111 -111
- package/packages/super-grid/src/search-form-ordinarySearch.vue +239 -239
- package/packages/super-grid/src/search-form.vue +762 -762
- package/packages/super-grid/src/search-methods.js +592 -592
- package/packages/super-grid/src/selection-column.vue +46 -46
- package/packages/super-grid/src/store.js +3 -3
- package/packages/super-grid/src/super-grid-service.js +728 -728
- package/packages/super-grid/src/super-grid.vue +3011 -3011
- package/packages/super-grid/src/utils.js +880 -880
- package/packages/super-grid/src/view-image-dialog.vue +176 -176
- package/packages/super-nine-grid/index.js +7 -7
- package/packages/super-nine-grid/src/apis.js +108 -108
- package/packages/super-nine-grid/src/custom-formatter.js +73 -73
- package/packages/super-nine-grid/src/formatter.js +134 -134
- package/packages/super-nine-grid/src/search-form-number.vue +35 -35
- package/packages/super-nine-grid/src/search-form.vue +700 -700
- package/packages/super-nine-grid/src/search-methods.js +151 -151
- package/packages/super-nine-grid/src/store.js +3 -3
- package/packages/super-nine-grid/src/super-grid-service.js +107 -107
- package/packages/svg-icon/index.js +6 -6
- package/packages/svg-icon/src/svg-icon.vue +43 -43
- package/packages/utils/date-util.js +292 -292
- package/packages/utils/dom.js +227 -227
- package/packages/utils/gogocodeTransfer.js +59 -59
- package/packages/utils/memory-cache-utils.js +117 -117
- package/packages/utils/utils.js +180 -180
- package/packages/utils/value-set.js +97 -97
- package/packages/valid-code/index.js +7 -7
- package/packages/valid-code/src/valid-code.vue +104 -104
- package/packages/workflow-button/index.js +6 -6
- package/packages/workflow-button/src/workflow-button.vue +550 -550
- package/packages/workflow-history-list/index.js +6 -6
- package/packages/workflow-history-list/src/api.js +7 -7
- package/packages/workflow-history-list/src/workflow-history-list.vue +291 -291
- package/packages/workgroup-tree/index.js +6 -6
- package/packages/workgroup-tree/src/workgroup-tree.vue +86 -86
- package/packages/workgroup-tree-inline/index.js +6 -6
- package/packages/workgroup-tree-inline/src/search-result.vue +222 -222
- package/packages/workgroup-tree-inline/src/workgroup-tree-inline.vue +516 -516
- package/packages/workgroup-tree-inline/src/workgroup-tree-service.js +93 -93
- package/packages/workgroup-user-tree/index.js +6 -6
- package/packages/workgroup-user-tree/src/workgroup-user-tree.vue +103 -103
- package/packages/workgroup-user-tree-inline/index.js +9 -9
- package/packages/workgroup-user-tree-inline/src/search-result.vue +266 -266
- package/packages/workgroup-user-tree-inline/src/workgroup-tree-inline-service.js +239 -239
- package/packages/workgroup-user-tree-inline/src/workgroup-user-tree-inline.vue +657 -657
- package/packages/year-range-picker/index.js +6 -6
- package/packages/year-range-picker/src/year-range-picker.vue +53 -53
- package/src/api/sso-service.js +172 -172
- package/src/api/tab.js +36 -36
- package/src/api/user-service.js +11 -11
- package/src/directives/permission/index.js +13 -13
- package/src/directives/permission/permission.js +20 -20
- package/src/i18n/langs/cn.js +259 -259
- package/src/i18n/langs/en.js +269 -269
- package/src/index.js +93 -93
- package/src/plugins.js +18 -18
- package/src/router/index.js +8 -26
- package/src/store/getters.js +15 -15
- package/src/store/index.js +19 -19
- package/src/store/modules/app.js +54 -54
- package/src/store/modules/tab-content.js +36 -36
- package/src/store/modules/user.js +285 -285
- package/src/utils/auth.js +61 -61
- package/src/utils/calculator/calculator-factory-wf.js +558 -558
- package/src/utils/calculator/calculator-factory.js +145 -145
- package/src/utils/calculator/calculator-util.js +166 -166
- package/src/utils/eventBus.js +2 -2
- package/src/utils/iconUtils.js +28 -28
- package/src/utils/index.js +102 -102
- package/src/utils/jump-page-utils.js +824 -824
- package/src/utils/menu.js +19 -19
- package/src/utils/permission.js +31 -31
- package/src/utils/permissionAuth.js +96 -96
- package/src/utils/range-selector.js +188 -188
- package/src/utils/request.js +269 -269
- package/src/utils/restful-interface-utils.js +57 -57
- package/src/utils/util.js +703 -703
- package/src/utils/validate.js +34 -34
- package/src/utils/watermark.js +108 -108
- package/src/utils/workflow-util.js +93 -93
- package/src/views/404.vue +248 -248
- package/src/views/dsc-component/Sidebar/Item.vue +84 -84
- package/src/views/dsc-component/Sidebar/Link.vue +38 -38
- package/src/views/dsc-component/Sidebar/SidebarItem.vue +198 -198
- package/src/views/dsc-component/Sidebar/index.vue +229 -229
- package/src/views/dsc-component/tabs/tab-content.vue +203 -203
- package/src/views/error-page/401.vue +106 -106
- package/src/views/error-page/404.vue +248 -248
- package/src/views/layout/EmptyLayout.vue +3 -3
- package/src/views/layout/Layout.vue +81 -81
- package/src/views/layout/NewLayout.vue +18 -18
- package/src/views/layout/components/AppMain.vue +39 -39
- package/src/views/layout/components/Breadcrumb/index.vue +158 -158
- package/src/views/layout/components/Menubar/Item.vue +79 -79
- package/src/views/layout/components/Menubar/Link.vue +38 -38
- package/src/views/layout/components/Menubar/index.vue +210 -210
- package/src/views/layout/components/Sidebar/Item.vue +53 -53
- package/src/views/layout/components/Sidebar/Link.vue +38 -38
- package/src/views/layout/components/Sidebar/index.vue +141 -141
- package/src/views/layout/components/iframe-page.vue +38 -38
- package/src/views/layout/components/index.js +4 -4
- package/src/views/layout/components/tabs/tab-content.vue +207 -207
- package/src/views/layout/mixin/ResizeHandler.js +41 -41
- package/src/views/layout/tab-content-iframe-index.vue +38 -38
- package/src/views/layout/tab-content-index.vue +93 -93
- package/src/views/login/authredirect.vue +10 -10
- package/src/views/login/index.vue +296 -296
- package/src/views/login/update-password.vue +243 -243
- package/src/views/redirect/index.vue +14 -14
- package/src/views/wf-history/tache-subprocess-history.vue +45 -45
package/src/utils/request.js
CHANGED
|
@@ -1,269 +1,269 @@
|
|
|
1
|
-
import axios from 'axios'
|
|
2
|
-
import { ElMessage as Message } from 'element-plus'
|
|
3
|
-
import { getToken, removeToken } from './auth'
|
|
4
|
-
import store from '../store'
|
|
5
|
-
import checkPermission from './permission'
|
|
6
|
-
import * as Vue from 'vue'
|
|
7
|
-
import { getI18n } from './util'
|
|
8
|
-
import {
|
|
9
|
-
getRelativeBaseUrl,
|
|
10
|
-
getTimeZone,
|
|
11
|
-
setCustomSystemBackendUrl,
|
|
12
|
-
} from './common-util'
|
|
13
|
-
// 创建axios实例
|
|
14
|
-
const service = axios.create({
|
|
15
|
-
// baseURL: process.env.VUE_APP_BASE_API, // api 的 base_url
|
|
16
|
-
timeout: 300000, // 请求超时时间
|
|
17
|
-
withCredentials: true,
|
|
18
|
-
})
|
|
19
|
-
|
|
20
|
-
// request拦截器
|
|
21
|
-
service.interceptors.request.use(
|
|
22
|
-
(config) => {
|
|
23
|
-
// 防止重复发送ajax请求
|
|
24
|
-
store.commit('togglePreventReclick', true)
|
|
25
|
-
const timeZone = getTimeZone()
|
|
26
|
-
config.headers['timeZone'] = timeZone
|
|
27
|
-
const token = getToken()
|
|
28
|
-
if (token) {
|
|
29
|
-
config.headers['Authorization'] = token // 让每个请求携带自定义token 请根据实际情况自行修改
|
|
30
|
-
}
|
|
31
|
-
// 将自定义系统编码放入header中
|
|
32
|
-
const customSystem = window.$vueApp.config.globalProperties.customSystem
|
|
33
|
-
if (customSystem) {
|
|
34
|
-
config.headers['customSystem'] = customSystem
|
|
35
|
-
// 重新缓存系统后台路径
|
|
36
|
-
setCustomSystemBackendUrl(customSystem)
|
|
37
|
-
}
|
|
38
|
-
if (window.$vueApp.config.globalProperties.baseURL) {
|
|
39
|
-
config.baseURL = getRelativeBaseUrl(
|
|
40
|
-
window.$vueApp.config.globalProperties.baseURL
|
|
41
|
-
)
|
|
42
|
-
}
|
|
43
|
-
return config
|
|
44
|
-
},
|
|
45
|
-
(error) => {
|
|
46
|
-
// 出错了之后允许再次提交
|
|
47
|
-
store.commit('togglePreventReclick', false)
|
|
48
|
-
// console.log(error) // for debug
|
|
49
|
-
Promise.reject(error)
|
|
50
|
-
}
|
|
51
|
-
)
|
|
52
|
-
|
|
53
|
-
// response 拦截器
|
|
54
|
-
service.interceptors.response.use(
|
|
55
|
-
(response) => {
|
|
56
|
-
// 请求得到响应后,允许再次提交
|
|
57
|
-
store.commit('togglePreventReclick', false)
|
|
58
|
-
return response.data
|
|
59
|
-
},
|
|
60
|
-
(error) => {
|
|
61
|
-
// console.log('err' + error) // for debug
|
|
62
|
-
// 出错了之后允许再次提交
|
|
63
|
-
store.commit('togglePreventReclick', false)
|
|
64
|
-
if (error.response) {
|
|
65
|
-
if (error.response.status === 401) {
|
|
66
|
-
// LoginException(401)
|
|
67
|
-
// 清除window.sessionStorage中的jwt,否则无法转到login页面
|
|
68
|
-
removeToken()
|
|
69
|
-
const isInIframe = window.$vueApp.config.globalProperties.$isInIframe()
|
|
70
|
-
// console.log('isInIframe==========', isInIframe, 'getToken()=', getToken())
|
|
71
|
-
if (isInIframe === true) {
|
|
72
|
-
// 在iframe中时,出现了401错误时,需要进入平台的登录页面,并需要登录后还是进入出错的原页面,而不是永远进入门户页面。
|
|
73
|
-
// 所以使用了跨域发送消息来实现,子页面给父页面发消息,父页面接收该消息,并处理
|
|
74
|
-
// console.log('isInIframe111==========', window.location.href)
|
|
75
|
-
window.parent.postMessage(
|
|
76
|
-
'{"loginTimeout":"' + window.location.href + '"}',
|
|
77
|
-
'*'
|
|
78
|
-
)
|
|
79
|
-
} else {
|
|
80
|
-
// 当前出错的页面不是在子页面iframe内,需要跳转到子系统的登录页面。跳转到业务系统的登录页面,此处不自动跳转了,因为会导致无法跳转到指定页面
|
|
81
|
-
// getLoginUrl().then(loginUrl => {
|
|
82
|
-
// window.location.href = loginUrl
|
|
83
|
-
// })
|
|
84
|
-
}
|
|
85
|
-
} else if (error.response.status === 403) {
|
|
86
|
-
// ForbiddenException(403) 403没权限
|
|
87
|
-
const message = getI18n().t('imatrixUIMessage.forbiddenException')
|
|
88
|
-
Message({
|
|
89
|
-
showClose: true,
|
|
90
|
-
message: message,
|
|
91
|
-
type: 'error',
|
|
92
|
-
duration: 5 * 1000,
|
|
93
|
-
})
|
|
94
|
-
return Promise.reject(error)
|
|
95
|
-
} else if (
|
|
96
|
-
error.response.status === 400 ||
|
|
97
|
-
error.response.status === 406 ||
|
|
98
|
-
error.response.status === 404
|
|
99
|
-
) {
|
|
100
|
-
// BadRequestException(400) || BusinessException(406) || ResourceNotFoundException(404)
|
|
101
|
-
let message = error.message
|
|
102
|
-
if (message) {
|
|
103
|
-
// 说明是原生的错误,不要显示,显示“请联系管理员”
|
|
104
|
-
message = getI18n().t('imatrixUIMessage.internalServerError')
|
|
105
|
-
}
|
|
106
|
-
if (error.response.data && error.response.data.message) {
|
|
107
|
-
message = error.response.data.message
|
|
108
|
-
}
|
|
109
|
-
Message({
|
|
110
|
-
showClose: true,
|
|
111
|
-
message: message,
|
|
112
|
-
type: 'error',
|
|
113
|
-
duration: 5 * 1000,
|
|
114
|
-
})
|
|
115
|
-
return Promise.reject(error)
|
|
116
|
-
} else {
|
|
117
|
-
let message = error.message
|
|
118
|
-
if (error.response.data && error.response.data.message) {
|
|
119
|
-
message = error.response.data.message
|
|
120
|
-
}
|
|
121
|
-
console.log(message)
|
|
122
|
-
let errorMsg = getI18n().t('imatrixUIMessage.internalServerError')
|
|
123
|
-
if (message && message !== 'Internal Server Error') {
|
|
124
|
-
// 表示显示原始异常
|
|
125
|
-
errorMsg = message
|
|
126
|
-
}
|
|
127
|
-
if (
|
|
128
|
-
message &&
|
|
129
|
-
(message === 'gateway.timeout' || message === 'gateway.callFailed')
|
|
130
|
-
) {
|
|
131
|
-
// 网关的fallback返回的异常信息“接口调用超时”、“接口调用失败”
|
|
132
|
-
errorMsg = getI18n().t(message)
|
|
133
|
-
}
|
|
134
|
-
Message({
|
|
135
|
-
showClose: true,
|
|
136
|
-
message: errorMsg,
|
|
137
|
-
type: 'error',
|
|
138
|
-
duration: 5 * 1000,
|
|
139
|
-
})
|
|
140
|
-
return Promise.reject(error)
|
|
141
|
-
}
|
|
142
|
-
} else {
|
|
143
|
-
const errorMsg = getI18n().t('imatrixUIMessage.internalServerError')
|
|
144
|
-
Message({
|
|
145
|
-
showClose: true,
|
|
146
|
-
message: errorMsg,
|
|
147
|
-
type: 'error',
|
|
148
|
-
duration: 5 * 1000,
|
|
149
|
-
})
|
|
150
|
-
return Promise.reject(error)
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
)
|
|
154
|
-
|
|
155
|
-
export const apiUrlMappings = {}
|
|
156
|
-
/**
|
|
157
|
-
*
|
|
158
|
-
* @param {*} code 资源权限的编码
|
|
159
|
-
* @param {*} options 是一个对象,包括data和param两个子对象属性,形如{param:{},data:{}}
|
|
160
|
-
*/
|
|
161
|
-
export function request(code, options) {
|
|
162
|
-
const config = {}
|
|
163
|
-
if (options) {
|
|
164
|
-
if (options.data) {
|
|
165
|
-
config.data = options.data
|
|
166
|
-
}
|
|
167
|
-
if (options.responseType) {
|
|
168
|
-
config.responseType = options.responseType
|
|
169
|
-
}
|
|
170
|
-
if (options.params) {
|
|
171
|
-
config.params = options.params
|
|
172
|
-
}
|
|
173
|
-
if (options.header) {
|
|
174
|
-
config.header = options.header
|
|
175
|
-
}
|
|
176
|
-
if (options.onUploadProgress) {
|
|
177
|
-
config.onUploadProgress = options.onUploadProgress
|
|
178
|
-
}
|
|
179
|
-
if (options.method) {
|
|
180
|
-
config.method = options.method
|
|
181
|
-
}
|
|
182
|
-
if (options.url) {
|
|
183
|
-
config.url = options.url
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
if (code) {
|
|
187
|
-
if (!checkPermission(code)) {
|
|
188
|
-
Message({
|
|
189
|
-
message: '您没有权限访问接口:' + code,
|
|
190
|
-
type: 'error',
|
|
191
|
-
showClose: true,
|
|
192
|
-
})
|
|
193
|
-
}
|
|
194
|
-
const apiInfo = apiUrlMappings[code]
|
|
195
|
-
if (apiInfo) {
|
|
196
|
-
const url = getRealUrl(apiInfo.url, config.params)
|
|
197
|
-
if (url === '') {
|
|
198
|
-
return
|
|
199
|
-
}
|
|
200
|
-
config.url = url
|
|
201
|
-
config.method = apiInfo.method
|
|
202
|
-
} else {
|
|
203
|
-
Message({
|
|
204
|
-
message: '您要访问的接口没有定义:' + code,
|
|
205
|
-
type: 'error',
|
|
206
|
-
showClose: true,
|
|
207
|
-
})
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
if (!config.url) {
|
|
212
|
-
Message({
|
|
213
|
-
message: '接口地址必须配置',
|
|
214
|
-
type: 'error',
|
|
215
|
-
showClose: true,
|
|
216
|
-
})
|
|
217
|
-
}
|
|
218
|
-
if (config.method && config.method.toLowerCase() === 'get') {
|
|
219
|
-
if (config.url.indexOf('?') > 0) {
|
|
220
|
-
// 表示有参数
|
|
221
|
-
config.url = config.url + '&_t=' + new Date().getTime()
|
|
222
|
-
} else {
|
|
223
|
-
config.url = config.url + '?_t=' + new Date().getTime()
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
return service(config)
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
/**
|
|
230
|
-
* 判断地址中是否有路径参数,有路径参数时就用params中的对应属性替换掉路径中的参数,得到最终的url
|
|
231
|
-
* @param {*} url
|
|
232
|
-
* @param {*} params
|
|
233
|
-
*/
|
|
234
|
-
function getRealUrl(url, params) {
|
|
235
|
-
const regex = /\{(.+?)\}/g
|
|
236
|
-
const matched = url.match(regex)
|
|
237
|
-
// 不包含路径参数直接返回url
|
|
238
|
-
if (!matched) {
|
|
239
|
-
return url
|
|
240
|
-
}
|
|
241
|
-
if (matched.length > 0 && !params) {
|
|
242
|
-
Message({
|
|
243
|
-
message: '请求的url中包含路径参数时,param不能为空。',
|
|
244
|
-
type: 'error',
|
|
245
|
-
showClose: true,
|
|
246
|
-
})
|
|
247
|
-
return ''
|
|
248
|
-
}
|
|
249
|
-
// matched是一个匹配的路径参数的数组,形如[{deparmentId}, {userId}]
|
|
250
|
-
for (const param of matched) {
|
|
251
|
-
// 去掉大括号得到真正的路径参数名
|
|
252
|
-
const paramName = param.substring(1, param.length - 1)
|
|
253
|
-
// 请求的param对象中应该包括这个参数,这样才能把参数名替换成真实的值
|
|
254
|
-
if (params[paramName] === undefined) {
|
|
255
|
-
Message({
|
|
256
|
-
message: '中应该包括属性:' + paramName,
|
|
257
|
-
type: 'error',
|
|
258
|
-
showClose: true,
|
|
259
|
-
})
|
|
260
|
-
return ''
|
|
261
|
-
}
|
|
262
|
-
url = url.replace(param, params[paramName])
|
|
263
|
-
// 从param对象中删掉这个参数,不用重复发送到后台了
|
|
264
|
-
delete params[paramName]
|
|
265
|
-
}
|
|
266
|
-
return url
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
export default service
|
|
1
|
+
import axios from 'axios'
|
|
2
|
+
import { ElMessage as Message } from 'element-plus'
|
|
3
|
+
import { getToken, removeToken } from './auth'
|
|
4
|
+
import store from '../store'
|
|
5
|
+
import checkPermission from './permission'
|
|
6
|
+
import * as Vue from 'vue'
|
|
7
|
+
import { getI18n } from './util'
|
|
8
|
+
import {
|
|
9
|
+
getRelativeBaseUrl,
|
|
10
|
+
getTimeZone,
|
|
11
|
+
setCustomSystemBackendUrl,
|
|
12
|
+
} from './common-util'
|
|
13
|
+
// 创建axios实例
|
|
14
|
+
const service = axios.create({
|
|
15
|
+
// baseURL: process.env.VUE_APP_BASE_API, // api 的 base_url
|
|
16
|
+
timeout: 300000, // 请求超时时间
|
|
17
|
+
withCredentials: true,
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
// request拦截器
|
|
21
|
+
service.interceptors.request.use(
|
|
22
|
+
(config) => {
|
|
23
|
+
// 防止重复发送ajax请求
|
|
24
|
+
store.commit('togglePreventReclick', true)
|
|
25
|
+
const timeZone = getTimeZone()
|
|
26
|
+
config.headers['timeZone'] = timeZone
|
|
27
|
+
const token = getToken()
|
|
28
|
+
if (token) {
|
|
29
|
+
config.headers['Authorization'] = token // 让每个请求携带自定义token 请根据实际情况自行修改
|
|
30
|
+
}
|
|
31
|
+
// 将自定义系统编码放入header中
|
|
32
|
+
const customSystem = window.$vueApp.config.globalProperties.customSystem
|
|
33
|
+
if (customSystem) {
|
|
34
|
+
config.headers['customSystem'] = customSystem
|
|
35
|
+
// 重新缓存系统后台路径
|
|
36
|
+
setCustomSystemBackendUrl(customSystem)
|
|
37
|
+
}
|
|
38
|
+
if (window.$vueApp.config.globalProperties.baseURL) {
|
|
39
|
+
config.baseURL = getRelativeBaseUrl(
|
|
40
|
+
window.$vueApp.config.globalProperties.baseURL
|
|
41
|
+
)
|
|
42
|
+
}
|
|
43
|
+
return config
|
|
44
|
+
},
|
|
45
|
+
(error) => {
|
|
46
|
+
// 出错了之后允许再次提交
|
|
47
|
+
store.commit('togglePreventReclick', false)
|
|
48
|
+
// console.log(error) // for debug
|
|
49
|
+
Promise.reject(error)
|
|
50
|
+
}
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
// response 拦截器
|
|
54
|
+
service.interceptors.response.use(
|
|
55
|
+
(response) => {
|
|
56
|
+
// 请求得到响应后,允许再次提交
|
|
57
|
+
store.commit('togglePreventReclick', false)
|
|
58
|
+
return response.data
|
|
59
|
+
},
|
|
60
|
+
(error) => {
|
|
61
|
+
// console.log('err' + error) // for debug
|
|
62
|
+
// 出错了之后允许再次提交
|
|
63
|
+
store.commit('togglePreventReclick', false)
|
|
64
|
+
if (error.response) {
|
|
65
|
+
if (error.response.status === 401) {
|
|
66
|
+
// LoginException(401)
|
|
67
|
+
// 清除window.sessionStorage中的jwt,否则无法转到login页面
|
|
68
|
+
removeToken()
|
|
69
|
+
const isInIframe = window.$vueApp.config.globalProperties.$isInIframe()
|
|
70
|
+
// console.log('isInIframe==========', isInIframe, 'getToken()=', getToken())
|
|
71
|
+
if (isInIframe === true) {
|
|
72
|
+
// 在iframe中时,出现了401错误时,需要进入平台的登录页面,并需要登录后还是进入出错的原页面,而不是永远进入门户页面。
|
|
73
|
+
// 所以使用了跨域发送消息来实现,子页面给父页面发消息,父页面接收该消息,并处理
|
|
74
|
+
// console.log('isInIframe111==========', window.location.href)
|
|
75
|
+
window.parent.postMessage(
|
|
76
|
+
'{"loginTimeout":"' + window.location.href + '"}',
|
|
77
|
+
'*'
|
|
78
|
+
)
|
|
79
|
+
} else {
|
|
80
|
+
// 当前出错的页面不是在子页面iframe内,需要跳转到子系统的登录页面。跳转到业务系统的登录页面,此处不自动跳转了,因为会导致无法跳转到指定页面
|
|
81
|
+
// getLoginUrl().then(loginUrl => {
|
|
82
|
+
// window.location.href = loginUrl
|
|
83
|
+
// })
|
|
84
|
+
}
|
|
85
|
+
} else if (error.response.status === 403) {
|
|
86
|
+
// ForbiddenException(403) 403没权限
|
|
87
|
+
const message = getI18n().t('imatrixUIMessage.forbiddenException')
|
|
88
|
+
Message({
|
|
89
|
+
showClose: true,
|
|
90
|
+
message: message,
|
|
91
|
+
type: 'error',
|
|
92
|
+
duration: 5 * 1000,
|
|
93
|
+
})
|
|
94
|
+
return Promise.reject(error)
|
|
95
|
+
} else if (
|
|
96
|
+
error.response.status === 400 ||
|
|
97
|
+
error.response.status === 406 ||
|
|
98
|
+
error.response.status === 404
|
|
99
|
+
) {
|
|
100
|
+
// BadRequestException(400) || BusinessException(406) || ResourceNotFoundException(404)
|
|
101
|
+
let message = error.message
|
|
102
|
+
if (message) {
|
|
103
|
+
// 说明是原生的错误,不要显示,显示“请联系管理员”
|
|
104
|
+
message = getI18n().t('imatrixUIMessage.internalServerError')
|
|
105
|
+
}
|
|
106
|
+
if (error.response.data && error.response.data.message) {
|
|
107
|
+
message = error.response.data.message
|
|
108
|
+
}
|
|
109
|
+
Message({
|
|
110
|
+
showClose: true,
|
|
111
|
+
message: message,
|
|
112
|
+
type: 'error',
|
|
113
|
+
duration: 5 * 1000,
|
|
114
|
+
})
|
|
115
|
+
return Promise.reject(error)
|
|
116
|
+
} else {
|
|
117
|
+
let message = error.message
|
|
118
|
+
if (error.response.data && error.response.data.message) {
|
|
119
|
+
message = error.response.data.message
|
|
120
|
+
}
|
|
121
|
+
console.log(message)
|
|
122
|
+
let errorMsg = getI18n().t('imatrixUIMessage.internalServerError')
|
|
123
|
+
if (message && message !== 'Internal Server Error') {
|
|
124
|
+
// 表示显示原始异常
|
|
125
|
+
errorMsg = message
|
|
126
|
+
}
|
|
127
|
+
if (
|
|
128
|
+
message &&
|
|
129
|
+
(message === 'gateway.timeout' || message === 'gateway.callFailed')
|
|
130
|
+
) {
|
|
131
|
+
// 网关的fallback返回的异常信息“接口调用超时”、“接口调用失败”
|
|
132
|
+
errorMsg = getI18n().t(message)
|
|
133
|
+
}
|
|
134
|
+
Message({
|
|
135
|
+
showClose: true,
|
|
136
|
+
message: errorMsg,
|
|
137
|
+
type: 'error',
|
|
138
|
+
duration: 5 * 1000,
|
|
139
|
+
})
|
|
140
|
+
return Promise.reject(error)
|
|
141
|
+
}
|
|
142
|
+
} else {
|
|
143
|
+
const errorMsg = getI18n().t('imatrixUIMessage.internalServerError')
|
|
144
|
+
Message({
|
|
145
|
+
showClose: true,
|
|
146
|
+
message: errorMsg,
|
|
147
|
+
type: 'error',
|
|
148
|
+
duration: 5 * 1000,
|
|
149
|
+
})
|
|
150
|
+
return Promise.reject(error)
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
export const apiUrlMappings = {}
|
|
156
|
+
/**
|
|
157
|
+
*
|
|
158
|
+
* @param {*} code 资源权限的编码
|
|
159
|
+
* @param {*} options 是一个对象,包括data和param两个子对象属性,形如{param:{},data:{}}
|
|
160
|
+
*/
|
|
161
|
+
export function request(code, options) {
|
|
162
|
+
const config = {}
|
|
163
|
+
if (options) {
|
|
164
|
+
if (options.data) {
|
|
165
|
+
config.data = options.data
|
|
166
|
+
}
|
|
167
|
+
if (options.responseType) {
|
|
168
|
+
config.responseType = options.responseType
|
|
169
|
+
}
|
|
170
|
+
if (options.params) {
|
|
171
|
+
config.params = options.params
|
|
172
|
+
}
|
|
173
|
+
if (options.header) {
|
|
174
|
+
config.header = options.header
|
|
175
|
+
}
|
|
176
|
+
if (options.onUploadProgress) {
|
|
177
|
+
config.onUploadProgress = options.onUploadProgress
|
|
178
|
+
}
|
|
179
|
+
if (options.method) {
|
|
180
|
+
config.method = options.method
|
|
181
|
+
}
|
|
182
|
+
if (options.url) {
|
|
183
|
+
config.url = options.url
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
if (code) {
|
|
187
|
+
if (!checkPermission(code)) {
|
|
188
|
+
Message({
|
|
189
|
+
message: '您没有权限访问接口:' + code,
|
|
190
|
+
type: 'error',
|
|
191
|
+
showClose: true,
|
|
192
|
+
})
|
|
193
|
+
}
|
|
194
|
+
const apiInfo = apiUrlMappings[code]
|
|
195
|
+
if (apiInfo) {
|
|
196
|
+
const url = getRealUrl(apiInfo.url, config.params)
|
|
197
|
+
if (url === '') {
|
|
198
|
+
return
|
|
199
|
+
}
|
|
200
|
+
config.url = url
|
|
201
|
+
config.method = apiInfo.method
|
|
202
|
+
} else {
|
|
203
|
+
Message({
|
|
204
|
+
message: '您要访问的接口没有定义:' + code,
|
|
205
|
+
type: 'error',
|
|
206
|
+
showClose: true,
|
|
207
|
+
})
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
if (!config.url) {
|
|
212
|
+
Message({
|
|
213
|
+
message: '接口地址必须配置',
|
|
214
|
+
type: 'error',
|
|
215
|
+
showClose: true,
|
|
216
|
+
})
|
|
217
|
+
}
|
|
218
|
+
if (config.method && config.method.toLowerCase() === 'get') {
|
|
219
|
+
if (config.url.indexOf('?') > 0) {
|
|
220
|
+
// 表示有参数
|
|
221
|
+
config.url = config.url + '&_t=' + new Date().getTime()
|
|
222
|
+
} else {
|
|
223
|
+
config.url = config.url + '?_t=' + new Date().getTime()
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return service(config)
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* 判断地址中是否有路径参数,有路径参数时就用params中的对应属性替换掉路径中的参数,得到最终的url
|
|
231
|
+
* @param {*} url
|
|
232
|
+
* @param {*} params
|
|
233
|
+
*/
|
|
234
|
+
function getRealUrl(url, params) {
|
|
235
|
+
const regex = /\{(.+?)\}/g
|
|
236
|
+
const matched = url.match(regex)
|
|
237
|
+
// 不包含路径参数直接返回url
|
|
238
|
+
if (!matched) {
|
|
239
|
+
return url
|
|
240
|
+
}
|
|
241
|
+
if (matched.length > 0 && !params) {
|
|
242
|
+
Message({
|
|
243
|
+
message: '请求的url中包含路径参数时,param不能为空。',
|
|
244
|
+
type: 'error',
|
|
245
|
+
showClose: true,
|
|
246
|
+
})
|
|
247
|
+
return ''
|
|
248
|
+
}
|
|
249
|
+
// matched是一个匹配的路径参数的数组,形如[{deparmentId}, {userId}]
|
|
250
|
+
for (const param of matched) {
|
|
251
|
+
// 去掉大括号得到真正的路径参数名
|
|
252
|
+
const paramName = param.substring(1, param.length - 1)
|
|
253
|
+
// 请求的param对象中应该包括这个参数,这样才能把参数名替换成真实的值
|
|
254
|
+
if (params[paramName] === undefined) {
|
|
255
|
+
Message({
|
|
256
|
+
message: '中应该包括属性:' + paramName,
|
|
257
|
+
type: 'error',
|
|
258
|
+
showClose: true,
|
|
259
|
+
})
|
|
260
|
+
return ''
|
|
261
|
+
}
|
|
262
|
+
url = url.replace(param, params[paramName])
|
|
263
|
+
// 从param对象中删掉这个参数,不用重复发送到后台了
|
|
264
|
+
delete params[paramName]
|
|
265
|
+
}
|
|
266
|
+
return url
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
export default service
|
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
import * as Vue from 'vue'
|
|
2
|
-
/**
|
|
3
|
-
* rest接口调用处理
|
|
4
|
-
* @param {*} restfulInterface 接口配置json信息
|
|
5
|
-
* @param {*} backendUrl 后台url路径
|
|
6
|
-
* @param {*} entity 表单数据
|
|
7
|
-
* @returns request Promise函数
|
|
8
|
-
*/
|
|
9
|
-
export function restfulInterfaceTo(
|
|
10
|
-
restfulInterface,
|
|
11
|
-
entity,
|
|
12
|
-
additionalParamMap
|
|
13
|
-
) {
|
|
14
|
-
return new Promise((resolve, reject) => {
|
|
15
|
-
let systemCode = window.$vueApp.config.globalProperties.customSystem
|
|
16
|
-
if (!systemCode) {
|
|
17
|
-
systemCode = window.$vueApp.config.globalProperties.systemCode
|
|
18
|
-
}
|
|
19
|
-
let restConfigMap = restfulInterface
|
|
20
|
-
|
|
21
|
-
if (restfulInterface && typeof restfulInterface === 'string') {
|
|
22
|
-
restConfigMap = JSON.parse(restfulInterface)
|
|
23
|
-
} else if (restfulInterface && typeof restfulInterface === 'object') {
|
|
24
|
-
restConfigMap = restfulInterface
|
|
25
|
-
}
|
|
26
|
-
const paramMap = {}
|
|
27
|
-
if (systemCode) {
|
|
28
|
-
paramMap.systemCode = systemCode
|
|
29
|
-
}
|
|
30
|
-
if (additionalParamMap) {
|
|
31
|
-
paramMap.additionalParamMap = additionalParamMap
|
|
32
|
-
}
|
|
33
|
-
if (restConfigMap) {
|
|
34
|
-
paramMap.restConfig = restConfigMap
|
|
35
|
-
}
|
|
36
|
-
if (entity) {
|
|
37
|
-
paramMap.entity = entity
|
|
38
|
-
}
|
|
39
|
-
window.$vueApp.config.globalProperties.$http
|
|
40
|
-
.post(
|
|
41
|
-
window.$vueApp.config.globalProperties.baseAPI +
|
|
42
|
-
'/component/super-pages/rest-data',
|
|
43
|
-
paramMap
|
|
44
|
-
)
|
|
45
|
-
.then((dataJson) => {
|
|
46
|
-
if (dataJson) {
|
|
47
|
-
// json字符串
|
|
48
|
-
resolve(JSON.parse(dataJson))
|
|
49
|
-
} else {
|
|
50
|
-
resolve()
|
|
51
|
-
}
|
|
52
|
-
})
|
|
53
|
-
.catch((error) => {
|
|
54
|
-
reject(error)
|
|
55
|
-
})
|
|
56
|
-
})
|
|
57
|
-
}
|
|
1
|
+
import * as Vue from 'vue'
|
|
2
|
+
/**
|
|
3
|
+
* rest接口调用处理
|
|
4
|
+
* @param {*} restfulInterface 接口配置json信息
|
|
5
|
+
* @param {*} backendUrl 后台url路径
|
|
6
|
+
* @param {*} entity 表单数据
|
|
7
|
+
* @returns request Promise函数
|
|
8
|
+
*/
|
|
9
|
+
export function restfulInterfaceTo(
|
|
10
|
+
restfulInterface,
|
|
11
|
+
entity,
|
|
12
|
+
additionalParamMap
|
|
13
|
+
) {
|
|
14
|
+
return new Promise((resolve, reject) => {
|
|
15
|
+
let systemCode = window.$vueApp.config.globalProperties.customSystem
|
|
16
|
+
if (!systemCode) {
|
|
17
|
+
systemCode = window.$vueApp.config.globalProperties.systemCode
|
|
18
|
+
}
|
|
19
|
+
let restConfigMap = restfulInterface
|
|
20
|
+
|
|
21
|
+
if (restfulInterface && typeof restfulInterface === 'string') {
|
|
22
|
+
restConfigMap = JSON.parse(restfulInterface)
|
|
23
|
+
} else if (restfulInterface && typeof restfulInterface === 'object') {
|
|
24
|
+
restConfigMap = restfulInterface
|
|
25
|
+
}
|
|
26
|
+
const paramMap = {}
|
|
27
|
+
if (systemCode) {
|
|
28
|
+
paramMap.systemCode = systemCode
|
|
29
|
+
}
|
|
30
|
+
if (additionalParamMap) {
|
|
31
|
+
paramMap.additionalParamMap = additionalParamMap
|
|
32
|
+
}
|
|
33
|
+
if (restConfigMap) {
|
|
34
|
+
paramMap.restConfig = restConfigMap
|
|
35
|
+
}
|
|
36
|
+
if (entity) {
|
|
37
|
+
paramMap.entity = entity
|
|
38
|
+
}
|
|
39
|
+
window.$vueApp.config.globalProperties.$http
|
|
40
|
+
.post(
|
|
41
|
+
window.$vueApp.config.globalProperties.baseAPI +
|
|
42
|
+
'/component/super-pages/rest-data',
|
|
43
|
+
paramMap
|
|
44
|
+
)
|
|
45
|
+
.then((dataJson) => {
|
|
46
|
+
if (dataJson) {
|
|
47
|
+
// json字符串
|
|
48
|
+
resolve(JSON.parse(dataJson))
|
|
49
|
+
} else {
|
|
50
|
+
resolve()
|
|
51
|
+
}
|
|
52
|
+
})
|
|
53
|
+
.catch((error) => {
|
|
54
|
+
reject(error)
|
|
55
|
+
})
|
|
56
|
+
})
|
|
57
|
+
}
|