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.
Files changed (206) hide show
  1. package/README.md +7 -7
  2. package/index.html +13 -13
  3. package/lib/super-ui.css +1 -1
  4. package/lib/super-ui.js +2724 -1932
  5. package/lib/super-ui.umd.cjs +24 -24
  6. package/package.json +1 -1
  7. package/packages/IntervalSelection/index.js +6 -6
  8. package/packages/IntervalSelection/src/quarterScope.vue +405 -405
  9. package/packages/IntervalSelection/src/sectionDate.vue +475 -475
  10. package/packages/breadcrumb/index.js +6 -6
  11. package/packages/breadcrumb/src/breadcrumb.vue +81 -81
  12. package/packages/department-tree/index.js +6 -6
  13. package/packages/department-tree/src/department-tree.vue +113 -113
  14. package/packages/department-tree-inline/index.js +6 -6
  15. package/packages/department-tree-inline/src/department-multi-tree-inline.vue +472 -472
  16. package/packages/department-tree-inline/src/department-single-tree-inline.vue +340 -340
  17. package/packages/department-tree-inline/src/department-tree-inline.vue +86 -86
  18. package/packages/department-tree-inline/src/department-tree-service.js +344 -344
  19. package/packages/department-tree-inline/src/search-result.vue +235 -235
  20. package/packages/department-user-tree/index.js +6 -6
  21. package/packages/department-user-tree/src/department-user-multiple-tree.vue +129 -129
  22. package/packages/department-user-tree/src/department-user-single-tree.vue +94 -94
  23. package/packages/department-user-tree/src/department-user-tree.vue +114 -114
  24. package/packages/department-user-tree-inline/index.js +9 -9
  25. package/packages/department-user-tree-inline/src/department-user-multiple-tree-inline.vue +731 -731
  26. package/packages/department-user-tree-inline/src/department-user-single-tree-inline.vue +334 -334
  27. package/packages/department-user-tree-inline/src/department-user-tree-inline.vue +87 -87
  28. package/packages/department-user-tree-inline/src/department-user-tree-multi-service.js +309 -309
  29. package/packages/department-user-tree-inline/src/department-user-tree-single-service.js +179 -179
  30. package/packages/department-user-tree-inline/src/search-result.vue +273 -273
  31. package/packages/directives/prevent-reclick.js +22 -22
  32. package/packages/dynamic-source-select/index.js +6 -6
  33. package/packages/dynamic-source-select/src/dynamic-source-select-service.js +106 -106
  34. package/packages/dynamic-source-select/src/dynamic-source-select.vue +675 -675
  35. package/packages/dynamic-source-select/src/events.js +78 -78
  36. package/packages/fs-preview/index.js +6 -6
  37. package/packages/fs-preview/src/fs-preview.vue +287 -287
  38. package/packages/fs-upload/index.js +6 -6
  39. package/packages/fs-upload/src/fs-upload-multi.vue +443 -443
  40. package/packages/fs-upload/src/fs-upload-single.vue +353 -353
  41. package/packages/fs-upload/src/fs-upload.vue +191 -191
  42. package/packages/fs-upload/src/see-big-picture.vue +67 -67
  43. package/packages/fs-upload-list/index.js +6 -6
  44. package/packages/fs-upload-list/src/fs-upload-list.vue +372 -372
  45. package/packages/hamburger/index.js +6 -6
  46. package/packages/hamburger/src/hamburger.vue +40 -40
  47. package/packages/index.js +123 -123
  48. package/packages/multipart-upload/index.js +6 -6
  49. package/packages/multipart-upload/src/index.vue +66 -66
  50. package/packages/multipart-upload/src/multipart-upload-form.vue +377 -377
  51. package/packages/multipart-upload/src/multipart-upload-list.vue +517 -517
  52. package/packages/organization-input/index.js +6 -6
  53. package/packages/organization-input/src/organization-input.vue +583 -583
  54. package/packages/plugins/export-data-new.js +623 -623
  55. package/packages/plugins/export-data.js +431 -431
  56. package/packages/plugins/index.js +15 -15
  57. package/packages/plugins/public-method.js +47 -47
  58. package/packages/remove-department/index.js +6 -6
  59. package/packages/remove-department/src/remove-department.vue +200 -200
  60. package/packages/remove-department/src/remove-dept-service.js +31 -31
  61. package/packages/remove-user/index.js +6 -6
  62. package/packages/remove-user/src/remove-user-service.js +31 -31
  63. package/packages/remove-user/src/remove-user.vue +226 -226
  64. package/packages/remove-workgroup/index.js +6 -6
  65. package/packages/remove-workgroup/src/remove-workgroup-service.js +31 -31
  66. package/packages/remove-workgroup/src/remove-workgroup.vue +183 -183
  67. package/packages/rich-editor/index.js +7 -7
  68. package/packages/rich-editor/index.vue +297 -297
  69. package/packages/rich-editor/langs/zh-Hans.js +438 -438
  70. package/packages/rich-editor/viewer.vue +105 -105
  71. package/packages/scan-code-input/index.js +6 -6
  72. package/packages/scan-code-input/src/events.js +34 -34
  73. package/packages/scan-code-input/src/scan-code-input-colse.vue +140 -140
  74. package/packages/scan-code-input/src/scan-code-input.vue +132 -132
  75. package/packages/secret-info/index.js +7 -7
  76. package/packages/secret-info/index.vue +100 -100
  77. package/packages/super-grid/index.js +7 -7
  78. package/packages/super-grid/src/apis.js +1092 -1092
  79. package/packages/super-grid/src/columns-config.vue +427 -427
  80. package/packages/super-grid/src/custom-formatter.js +394 -394
  81. package/packages/super-grid/src/eventBus.js +2 -2
  82. package/packages/super-grid/src/events.js +56 -56
  83. package/packages/super-grid/src/formValidatorUtil.js +300 -300
  84. package/packages/super-grid/src/formatter.js +196 -196
  85. package/packages/super-grid/src/group-column.vue +99 -99
  86. package/packages/super-grid/src/header-context-menu.vue +82 -82
  87. package/packages/super-grid/src/index-column.vue +69 -69
  88. package/packages/super-grid/src/public-methods.js +30 -30
  89. package/packages/super-grid/src/row-operation.vue +193 -193
  90. package/packages/super-grid/src/search-button.vue +74 -74
  91. package/packages/super-grid/src/search-condition-input.vue +73 -73
  92. package/packages/super-grid/src/search-condition-list.vue +68 -68
  93. package/packages/super-grid/src/search-form-advancedQuery.vue +819 -819
  94. package/packages/super-grid/src/search-form-dialog.vue +77 -77
  95. package/packages/super-grid/src/search-form-item.vue +495 -495
  96. package/packages/super-grid/src/search-form-number.vue +111 -111
  97. package/packages/super-grid/src/search-form-ordinarySearch.vue +239 -239
  98. package/packages/super-grid/src/search-form.vue +762 -762
  99. package/packages/super-grid/src/search-methods.js +592 -592
  100. package/packages/super-grid/src/selection-column.vue +46 -46
  101. package/packages/super-grid/src/store.js +3 -3
  102. package/packages/super-grid/src/super-grid-service.js +728 -728
  103. package/packages/super-grid/src/super-grid.vue +3011 -3011
  104. package/packages/super-grid/src/utils.js +880 -880
  105. package/packages/super-grid/src/view-image-dialog.vue +176 -176
  106. package/packages/super-nine-grid/index.js +7 -7
  107. package/packages/super-nine-grid/src/apis.js +108 -108
  108. package/packages/super-nine-grid/src/custom-formatter.js +73 -73
  109. package/packages/super-nine-grid/src/formatter.js +134 -134
  110. package/packages/super-nine-grid/src/search-form-number.vue +35 -35
  111. package/packages/super-nine-grid/src/search-form.vue +700 -700
  112. package/packages/super-nine-grid/src/search-methods.js +151 -151
  113. package/packages/super-nine-grid/src/store.js +3 -3
  114. package/packages/super-nine-grid/src/super-grid-service.js +107 -107
  115. package/packages/svg-icon/index.js +6 -6
  116. package/packages/svg-icon/src/svg-icon.vue +43 -43
  117. package/packages/utils/date-util.js +292 -292
  118. package/packages/utils/dom.js +227 -227
  119. package/packages/utils/gogocodeTransfer.js +59 -59
  120. package/packages/utils/memory-cache-utils.js +117 -117
  121. package/packages/utils/utils.js +180 -180
  122. package/packages/utils/value-set.js +97 -97
  123. package/packages/valid-code/index.js +7 -7
  124. package/packages/valid-code/src/valid-code.vue +104 -104
  125. package/packages/workflow-button/index.js +6 -6
  126. package/packages/workflow-button/src/workflow-button.vue +550 -550
  127. package/packages/workflow-history-list/index.js +6 -6
  128. package/packages/workflow-history-list/src/api.js +7 -7
  129. package/packages/workflow-history-list/src/workflow-history-list.vue +291 -291
  130. package/packages/workgroup-tree/index.js +6 -6
  131. package/packages/workgroup-tree/src/workgroup-tree.vue +86 -86
  132. package/packages/workgroup-tree-inline/index.js +6 -6
  133. package/packages/workgroup-tree-inline/src/search-result.vue +222 -222
  134. package/packages/workgroup-tree-inline/src/workgroup-tree-inline.vue +516 -516
  135. package/packages/workgroup-tree-inline/src/workgroup-tree-service.js +93 -93
  136. package/packages/workgroup-user-tree/index.js +6 -6
  137. package/packages/workgroup-user-tree/src/workgroup-user-tree.vue +103 -103
  138. package/packages/workgroup-user-tree-inline/index.js +9 -9
  139. package/packages/workgroup-user-tree-inline/src/search-result.vue +266 -266
  140. package/packages/workgroup-user-tree-inline/src/workgroup-tree-inline-service.js +239 -239
  141. package/packages/workgroup-user-tree-inline/src/workgroup-user-tree-inline.vue +657 -657
  142. package/packages/year-range-picker/index.js +6 -6
  143. package/packages/year-range-picker/src/year-range-picker.vue +53 -53
  144. package/src/api/sso-service.js +172 -172
  145. package/src/api/tab.js +36 -36
  146. package/src/api/user-service.js +11 -11
  147. package/src/directives/permission/index.js +13 -13
  148. package/src/directives/permission/permission.js +20 -20
  149. package/src/i18n/langs/cn.js +259 -259
  150. package/src/i18n/langs/en.js +269 -269
  151. package/src/index.js +93 -93
  152. package/src/plugins.js +18 -18
  153. package/src/router/index.js +8 -26
  154. package/src/store/getters.js +15 -15
  155. package/src/store/index.js +19 -19
  156. package/src/store/modules/app.js +54 -54
  157. package/src/store/modules/tab-content.js +36 -36
  158. package/src/store/modules/user.js +285 -285
  159. package/src/utils/auth.js +61 -61
  160. package/src/utils/calculator/calculator-factory-wf.js +558 -558
  161. package/src/utils/calculator/calculator-factory.js +145 -145
  162. package/src/utils/calculator/calculator-util.js +166 -166
  163. package/src/utils/eventBus.js +2 -2
  164. package/src/utils/iconUtils.js +28 -28
  165. package/src/utils/index.js +102 -102
  166. package/src/utils/jump-page-utils.js +824 -824
  167. package/src/utils/menu.js +19 -19
  168. package/src/utils/permission.js +31 -31
  169. package/src/utils/permissionAuth.js +96 -96
  170. package/src/utils/range-selector.js +188 -188
  171. package/src/utils/request.js +269 -269
  172. package/src/utils/restful-interface-utils.js +57 -57
  173. package/src/utils/util.js +703 -703
  174. package/src/utils/validate.js +34 -34
  175. package/src/utils/watermark.js +108 -108
  176. package/src/utils/workflow-util.js +93 -93
  177. package/src/views/404.vue +248 -248
  178. package/src/views/dsc-component/Sidebar/Item.vue +84 -84
  179. package/src/views/dsc-component/Sidebar/Link.vue +38 -38
  180. package/src/views/dsc-component/Sidebar/SidebarItem.vue +198 -198
  181. package/src/views/dsc-component/Sidebar/index.vue +229 -229
  182. package/src/views/dsc-component/tabs/tab-content.vue +203 -203
  183. package/src/views/error-page/401.vue +106 -106
  184. package/src/views/error-page/404.vue +248 -248
  185. package/src/views/layout/EmptyLayout.vue +3 -3
  186. package/src/views/layout/Layout.vue +81 -81
  187. package/src/views/layout/NewLayout.vue +18 -18
  188. package/src/views/layout/components/AppMain.vue +39 -39
  189. package/src/views/layout/components/Breadcrumb/index.vue +158 -158
  190. package/src/views/layout/components/Menubar/Item.vue +79 -79
  191. package/src/views/layout/components/Menubar/Link.vue +38 -38
  192. package/src/views/layout/components/Menubar/index.vue +210 -210
  193. package/src/views/layout/components/Sidebar/Item.vue +53 -53
  194. package/src/views/layout/components/Sidebar/Link.vue +38 -38
  195. package/src/views/layout/components/Sidebar/index.vue +141 -141
  196. package/src/views/layout/components/iframe-page.vue +38 -38
  197. package/src/views/layout/components/index.js +4 -4
  198. package/src/views/layout/components/tabs/tab-content.vue +207 -207
  199. package/src/views/layout/mixin/ResizeHandler.js +41 -41
  200. package/src/views/layout/tab-content-iframe-index.vue +38 -38
  201. package/src/views/layout/tab-content-index.vue +93 -93
  202. package/src/views/login/authredirect.vue +10 -10
  203. package/src/views/login/index.vue +296 -296
  204. package/src/views/login/update-password.vue +243 -243
  205. package/src/views/redirect/index.vue +14 -14
  206. package/src/views/wf-history/tache-subprocess-history.vue +45 -45
@@ -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
+ }