imatrix-ui 0.2.0-up → 0.2.2-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 (213) 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 +787 -366
  5. package/lib/super-ui.umd.cjs +18 -18
  6. package/package.json +34 -34
  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 +350 -350
  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 +125 -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 -587
  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 +388 -388
  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/normal-column.vue +1221 -1221
  89. package/packages/super-grid/src/public-methods.js +30 -30
  90. package/packages/super-grid/src/row-operation.vue +193 -193
  91. package/packages/super-grid/src/search-button.vue +74 -74
  92. package/packages/super-grid/src/search-condition-input.vue +73 -73
  93. package/packages/super-grid/src/search-condition-list.vue +68 -68
  94. package/packages/super-grid/src/search-form-advancedQuery.vue +819 -826
  95. package/packages/super-grid/src/search-form-dialog.vue +77 -77
  96. package/packages/super-grid/src/search-form-item.vue +495 -495
  97. package/packages/super-grid/src/search-form-number.vue +111 -111
  98. package/packages/super-grid/src/search-form-open.vue +167 -159
  99. package/packages/super-grid/src/search-form-ordinarySearch.vue +239 -233
  100. package/packages/super-grid/src/search-form.vue +762 -765
  101. package/packages/super-grid/src/search-methods.js +592 -592
  102. package/packages/super-grid/src/selection-column.vue +46 -46
  103. package/packages/super-grid/src/super-grid-service.js +728 -728
  104. package/packages/super-grid/src/super-grid.vue +3009 -3009
  105. package/packages/super-grid/src/utils.js +880 -880
  106. package/packages/super-grid/src/view-image-dialog.vue +176 -176
  107. package/packages/super-nine-grid/index.js +7 -7
  108. package/packages/super-nine-grid/src/apis.js +108 -108
  109. package/packages/super-nine-grid/src/custom-formatter.js +73 -73
  110. package/packages/super-nine-grid/src/formatter.js +134 -134
  111. package/packages/super-nine-grid/src/search-form-number.vue +35 -35
  112. package/packages/super-nine-grid/src/search-form.vue +700 -703
  113. package/packages/super-nine-grid/src/search-methods.js +151 -151
  114. package/packages/super-nine-grid/src/super-grid-service.js +107 -107
  115. package/packages/super-nine-grid/src/super-nine-grid.vue +1164 -1164
  116. package/packages/super-nine-grid/src/utils.js +264 -264
  117. package/packages/svg-icon/index.js +6 -6
  118. package/packages/svg-icon/src/svg-icon.vue +43 -43
  119. package/packages/utils/date-util.js +292 -292
  120. package/packages/utils/dom.js +227 -227
  121. package/packages/utils/gogocodeTransfer.js +59 -59
  122. package/packages/utils/memory-cache-utils.js +117 -117
  123. package/packages/utils/utils.js +180 -180
  124. package/packages/utils/value-set.js +97 -97
  125. package/packages/valid-code/index.js +7 -7
  126. package/packages/valid-code/src/valid-code.vue +104 -104
  127. package/packages/workflow-button/index.js +6 -6
  128. package/packages/workflow-button/src/workflow-button.vue +550 -550
  129. package/packages/workflow-history-list/index.js +6 -6
  130. package/packages/workflow-history-list/src/api.js +7 -7
  131. package/packages/workflow-history-list/src/workflow-history-list.vue +291 -291
  132. package/packages/workgroup-tree/index.js +6 -6
  133. package/packages/workgroup-tree/src/workgroup-tree.vue +86 -86
  134. package/packages/workgroup-tree-inline/index.js +6 -6
  135. package/packages/workgroup-tree-inline/src/search-result.vue +222 -222
  136. package/packages/workgroup-tree-inline/src/workgroup-tree-inline.vue +516 -516
  137. package/packages/workgroup-tree-inline/src/workgroup-tree-service.js +93 -93
  138. package/packages/workgroup-user-tree/index.js +6 -6
  139. package/packages/workgroup-user-tree/src/workgroup-user-tree.vue +103 -103
  140. package/packages/workgroup-user-tree-inline/index.js +9 -9
  141. package/packages/workgroup-user-tree-inline/src/search-result.vue +266 -266
  142. package/packages/workgroup-user-tree-inline/src/workgroup-tree-inline-service.js +239 -239
  143. package/packages/workgroup-user-tree-inline/src/workgroup-user-tree-inline.vue +657 -657
  144. package/packages/year-range-picker/index.js +6 -6
  145. package/packages/year-range-picker/src/year-range-picker.vue +53 -53
  146. package/src/api/sso-service.js +172 -172
  147. package/src/api/tab.js +36 -36
  148. package/src/api/user-service.js +11 -11
  149. package/src/directives/permission/index.js +13 -13
  150. package/src/directives/permission/permission.js +20 -20
  151. package/src/i18n/langs/cn.js +259 -259
  152. package/src/i18n/langs/en.js +269 -269
  153. package/src/index.js +93 -93
  154. package/src/permission.js +160 -158
  155. package/src/plugins.js +18 -18
  156. package/src/router/index.js +110 -116
  157. package/src/store/getters.js +15 -15
  158. package/src/store/index.js +19 -19
  159. package/src/store/modules/app.js +54 -54
  160. package/src/store/modules/permission.js +145 -145
  161. package/src/store/modules/tab-content.js +36 -36
  162. package/src/store/modules/user.js +285 -285
  163. package/src/utils/auth-api.js +159 -159
  164. package/src/utils/calculator/calculator-factory-wf.js +558 -558
  165. package/src/utils/calculator/calculator-factory.js +145 -145
  166. package/src/utils/calculator/calculator-util.js +166 -166
  167. package/src/utils/eventBus.js +2 -2
  168. package/src/utils/iconUtils.js +28 -28
  169. package/src/utils/index.js +102 -102
  170. package/src/utils/jump-page-utils.js +824 -824
  171. package/src/utils/local-storage.js +7 -7
  172. package/src/utils/permission.js +31 -31
  173. package/src/utils/permissionAuth.js +96 -96
  174. package/src/utils/range-selector.js +188 -188
  175. package/src/utils/request.js +269 -269
  176. package/src/utils/restful-interface-utils.js +57 -57
  177. package/src/utils/util.js +698 -698
  178. package/src/utils/validate.js +34 -34
  179. package/src/utils/watermark.js +108 -108
  180. package/src/utils/workflow-util.js +93 -93
  181. package/src/views/404.vue +248 -248
  182. package/src/views/dsc-component/Sidebar/Item.vue +84 -84
  183. package/src/views/dsc-component/Sidebar/Link.vue +38 -38
  184. package/src/views/dsc-component/Sidebar/SidebarItem.vue +198 -198
  185. package/src/views/dsc-component/Sidebar/index.vue +228 -228
  186. package/src/views/dsc-component/tabs/tab-content.vue +203 -203
  187. package/src/views/error-page/401.vue +106 -106
  188. package/src/views/error-page/404.vue +248 -248
  189. package/src/views/layout/EmptyLayout.vue +3 -3
  190. package/src/views/layout/Layout.vue +81 -81
  191. package/src/views/layout/NewLayout.vue +18 -18
  192. package/src/views/layout/components/AppMain.vue +39 -39
  193. package/src/views/layout/components/Breadcrumb/index.vue +156 -156
  194. package/src/views/layout/components/Menubar/Item.vue +79 -79
  195. package/src/views/layout/components/Menubar/Link.vue +38 -38
  196. package/src/views/layout/components/Menubar/SidebarItem.vue +164 -164
  197. package/src/views/layout/components/Menubar/index.vue +210 -210
  198. package/src/views/layout/components/Sidebar/Item.vue +53 -53
  199. package/src/views/layout/components/Sidebar/Link.vue +38 -38
  200. package/src/views/layout/components/Sidebar/SidebarItem.vue +135 -135
  201. package/src/views/layout/components/Sidebar/index.vue +141 -141
  202. package/src/views/layout/components/iframe-page.vue +38 -38
  203. package/src/views/layout/components/index.js +4 -4
  204. package/src/views/layout/components/tabs/tab-content.vue +207 -207
  205. package/src/views/layout/mixin/ResizeHandler.js +41 -41
  206. package/src/views/layout/tab-content-iframe-index.vue +38 -38
  207. package/src/views/layout/tab-content-index.vue +93 -93
  208. package/src/views/login/authredirect.vue +10 -10
  209. package/src/views/login/index.vue +296 -296
  210. package/src/views/login/update-password.vue +243 -243
  211. package/src/views/redirect/index.vue +14 -14
  212. package/src/views/wf-history/tache-subprocess-history.vue +45 -45
  213. package/.vscode/extensions.json +0 -3
@@ -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
+ }