imatrix-ui 2.8.39-dw → 2.8.39-pvtmp

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 (189) hide show
  1. package/lib/super-ui.css +1 -1
  2. package/lib/super-ui.umd.min.js +5 -35
  3. package/package.json +6 -4
  4. package/packages/breadcrumb/index.js +6 -0
  5. package/packages/breadcrumb/src/breadcrumb.vue +71 -0
  6. package/packages/department-tree/index.js +6 -0
  7. package/packages/department-tree/src/department-tree.vue +108 -0
  8. package/packages/department-tree-inline/index.js +6 -0
  9. package/packages/department-tree-inline/src/department-multi-tree-inline.vue +411 -0
  10. package/packages/department-tree-inline/src/department-single-tree-inline.vue +293 -0
  11. package/packages/department-tree-inline/src/department-tree-inline.vue +86 -0
  12. package/packages/department-tree-inline/src/department-tree-service.js +275 -0
  13. package/packages/department-tree-inline/src/search-result.vue +176 -0
  14. package/packages/department-user-tree/index.js +6 -0
  15. package/packages/department-user-tree/src/department-user-multiple-tree.vue +116 -0
  16. package/packages/department-user-tree/src/department-user-single-tree.vue +76 -0
  17. package/packages/department-user-tree/src/department-user-tree.vue +101 -0
  18. package/packages/department-user-tree-inline/index.js +6 -0
  19. package/packages/department-user-tree-inline/src/department-user-multiple-tree-inline.vue +639 -0
  20. package/packages/department-user-tree-inline/src/department-user-single-tree-inline.vue +274 -0
  21. package/packages/department-user-tree-inline/src/department-user-tree-inline.vue +79 -0
  22. package/packages/department-user-tree-inline/src/department-user-tree-multi-service.js +248 -0
  23. package/packages/department-user-tree-inline/src/department-user-tree-single-service.js +142 -0
  24. package/packages/department-user-tree-inline/src/search-result.vue +197 -0
  25. package/packages/directives/prevent-reclick.js +19 -0
  26. package/packages/dynamic-source-select/index.js +6 -0
  27. package/packages/dynamic-source-select/src/dynamic-source-select-service.js +75 -0
  28. package/packages/dynamic-source-select/src/dynamic-source-select.vue +586 -0
  29. package/packages/dynamic-source-select/src/events.js +55 -0
  30. package/packages/fs-preview/index.js +6 -0
  31. package/packages/fs-preview/src/fs-preview.vue +226 -0
  32. package/packages/fs-upload/index.js +6 -0
  33. package/packages/fs-upload/src/fs-upload-multi.vue +420 -0
  34. package/packages/fs-upload/src/fs-upload-single.vue +312 -0
  35. package/packages/fs-upload/src/fs-upload.vue +189 -0
  36. package/packages/fs-upload/src/see-big-picture.vue +55 -0
  37. package/packages/fs-upload-list/index.js +6 -0
  38. package/packages/fs-upload-list/src/fs-upload-list.vue +287 -0
  39. package/packages/hamburger/index.js +6 -0
  40. package/packages/hamburger/src/hamburger.vue +38 -0
  41. package/packages/index.js +121 -0
  42. package/packages/multipart-upload/index.js +6 -0
  43. package/packages/multipart-upload/src/index.vue +73 -0
  44. package/packages/multipart-upload/src/multipart-upload-form.vue +297 -0
  45. package/packages/multipart-upload/src/multipart-upload-list.vue +378 -0
  46. package/packages/organization-input/index.js +6 -0
  47. package/packages/organization-input/src/organization-input.vue +542 -0
  48. package/packages/plugins/export-data-new.js +468 -0
  49. package/packages/plugins/export-data.js +361 -0
  50. package/packages/plugins/index.js +15 -0
  51. package/packages/plugins/public-method.js +43 -0
  52. package/packages/remove-department/index.js +6 -0
  53. package/packages/remove-department/src/remove-department.vue +172 -0
  54. package/packages/remove-department/src/remove-dept-service.js +20 -0
  55. package/packages/remove-user/index.js +6 -0
  56. package/packages/remove-user/src/remove-user-service.js +20 -0
  57. package/packages/remove-user/src/remove-user.vue +195 -0
  58. package/packages/remove-workgroup/index.js +6 -0
  59. package/packages/remove-workgroup/src/remove-workgroup-service.js +20 -0
  60. package/packages/remove-workgroup/src/remove-workgroup.vue +159 -0
  61. package/packages/rich-editor/index.js +7 -0
  62. package/packages/rich-editor/index.vue +278 -0
  63. package/packages/rich-editor/langs/zh-Hans.js +1 -0
  64. package/packages/rich-editor/viewer.vue +103 -0
  65. package/packages/scan-code-input/index.js +6 -0
  66. package/packages/scan-code-input/src/events.js +33 -0
  67. package/packages/scan-code-input/src/scan-code-input-colse.vue +131 -0
  68. package/packages/scan-code-input/src/scan-code-input.vue +116 -0
  69. package/packages/secret-info/index.js +7 -0
  70. package/packages/secret-info/index.vue +90 -0
  71. package/packages/super-grid/index.js +7 -0
  72. package/packages/super-grid/src/apis.js +825 -0
  73. package/packages/super-grid/src/columns-config.vue +335 -0
  74. package/packages/super-grid/src/custom-formatter.js +280 -0
  75. package/packages/super-grid/src/dynamic-input.vue +1286 -0
  76. package/packages/super-grid/src/eventBus.js +2 -0
  77. package/packages/super-grid/src/events.js +55 -0
  78. package/packages/super-grid/src/formValidatorUtil.js +226 -0
  79. package/packages/super-grid/src/formatter.js +181 -0
  80. package/packages/super-grid/src/group-column.vue +100 -0
  81. package/packages/super-grid/src/header-context-menu.vue +87 -0
  82. package/packages/super-grid/src/index-column.vue +51 -0
  83. package/packages/super-grid/src/normal-column.vue +775 -0
  84. package/packages/super-grid/src/public-methods.js +31 -0
  85. package/packages/super-grid/src/row-operation.vue +161 -0
  86. package/packages/super-grid/src/search-button.vue +66 -0
  87. package/packages/super-grid/src/search-condition-input.vue +61 -0
  88. package/packages/super-grid/src/search-condition-list.vue +59 -0
  89. package/packages/super-grid/src/search-form-advancedQuery.vue +654 -0
  90. package/packages/super-grid/src/search-form-dialog.vue +79 -0
  91. package/packages/super-grid/src/search-form-item.vue +405 -0
  92. package/packages/super-grid/src/search-form-number.vue +38 -0
  93. package/packages/super-grid/src/search-form-open.vue +170 -0
  94. package/packages/super-grid/src/search-form-ordinarySearch.vue +196 -0
  95. package/packages/super-grid/src/search-form.vue +642 -0
  96. package/packages/super-grid/src/search-methods.js +448 -0
  97. package/packages/super-grid/src/selection-column.vue +43 -0
  98. package/packages/super-grid/src/store.js +3 -0
  99. package/packages/super-grid/src/super-grid-service.js +595 -0
  100. package/packages/super-grid/src/super-grid.vue +2936 -0
  101. package/packages/super-grid/src/utils.js +782 -0
  102. package/packages/super-grid/src/view-image-dialog.vue +130 -0
  103. package/packages/super-nine-grid/index.js +7 -0
  104. package/packages/super-nine-grid/src/apis.js +103 -0
  105. package/packages/super-nine-grid/src/custom-formatter.js +66 -0
  106. package/packages/super-nine-grid/src/formatter.js +131 -0
  107. package/packages/super-nine-grid/src/search-form-number.vue +38 -0
  108. package/packages/super-nine-grid/src/search-form.vue +430 -0
  109. package/packages/super-nine-grid/src/search-methods.js +134 -0
  110. package/packages/super-nine-grid/src/store.js +3 -0
  111. package/packages/super-nine-grid/src/super-grid-service.js +93 -0
  112. package/packages/super-nine-grid/src/super-nine-grid.vue +883 -0
  113. package/packages/super-nine-grid/src/utils.js +261 -0
  114. package/packages/svg-icon/index.js +6 -0
  115. package/packages/svg-icon/src/svg-icon.vue +43 -0
  116. package/packages/utils/memory-cache-utils.js +90 -0
  117. package/packages/utils/utils.js +152 -0
  118. package/packages/utils/value-set.js +86 -0
  119. package/packages/valid-code/index.js +7 -0
  120. package/packages/valid-code/src/valid-code.vue +95 -0
  121. package/packages/workflow-button/index.js +6 -0
  122. package/packages/workflow-button/src/workflow-button.vue +325 -0
  123. package/packages/workflow-history-list/index.js +6 -0
  124. package/packages/workflow-history-list/src/api.js +7 -0
  125. package/packages/workflow-history-list/src/workflow-history-list.vue +197 -0
  126. package/packages/workgroup-tree/index.js +6 -0
  127. package/packages/workgroup-tree/src/workgroup-tree.vue +77 -0
  128. package/packages/workgroup-tree-inline/index.js +6 -0
  129. package/packages/workgroup-tree-inline/src/search-result.vue +168 -0
  130. package/packages/workgroup-tree-inline/src/workgroup-tree-inline.vue +458 -0
  131. package/packages/workgroup-tree-inline/src/workgroup-tree-service.js +71 -0
  132. package/packages/workgroup-user-tree/index.js +6 -0
  133. package/packages/workgroup-user-tree/src/workgroup-user-tree.vue +100 -0
  134. package/packages/workgroup-user-tree-inline/index.js +6 -0
  135. package/packages/workgroup-user-tree-inline/src/search-result.vue +197 -0
  136. package/packages/workgroup-user-tree-inline/src/workgroup-tree-inline-service.js +192 -0
  137. package/packages/workgroup-user-tree-inline/src/workgroup-user-tree-inline.vue +584 -0
  138. package/packages/year-range-picker/index.js +6 -0
  139. package/packages/year-range-picker/src/year-range-picker.vue +51 -0
  140. package/src/api/sso-service.js +9 -1
  141. package/src/api/tab.js +3 -3
  142. package/src/i18n/i18n.js +1 -1
  143. package/src/i18n/langs/cn.js +15 -5
  144. package/src/i18n/langs/en.js +15 -5
  145. package/src/index.js +93 -0
  146. package/src/permission.js +51 -17
  147. package/src/plugins.js +3 -3
  148. package/src/store/getters.js +2 -1
  149. package/src/store/modules/app.js +10 -1
  150. package/src/store/modules/user.js +11 -18
  151. package/src/styles/display-layout.scss +34 -0
  152. package/src/styles/index.scss +32 -4
  153. package/src/styles/theme/dark-blue/button.scss +9 -0
  154. package/src/styles/theme/dark-blue/card.scss +64 -0
  155. package/src/styles/theme/dark-blue/checkbox.scss +10 -0
  156. package/src/styles/theme/dark-blue/dark-blue-var.scss +8 -0
  157. package/src/styles/theme/dark-blue/dialog.scss +21 -0
  158. package/src/styles/theme/dark-blue/element-variables.scss +7 -0
  159. package/src/styles/theme/dark-blue/font.scss +71 -0
  160. package/src/styles/theme/dark-blue/form.scss +51 -0
  161. package/src/styles/theme/dark-blue/index.scss +247 -0
  162. package/src/styles/theme/dark-blue/input.scss +15 -0
  163. package/src/styles/theme/dark-blue/pagination.scss +14 -0
  164. package/src/styles/theme/dark-blue/scrollbar-style.scss +32 -0
  165. package/src/styles/theme/dark-blue/sidebar.scss +296 -0
  166. package/src/styles/theme/dark-blue/tab.scss +83 -0
  167. package/src/styles/theme/dark-blue/table.scss +60 -0
  168. package/src/styles/theme/dark-blue/tree.scss +31 -0
  169. package/src/styles/theme/dark-blue/var.scss +1028 -0
  170. package/src/styles/theme/gray/input-style.scss +8 -0
  171. package/src/styles/theme/gray/sidebar.scss +14 -2
  172. package/src/utils/auth-api.js +171 -0
  173. package/src/utils/auth.js +75 -41
  174. package/src/utils/calculator/calculator-factory.js +2 -2
  175. package/src/utils/calculator/calculator-util.js +7 -7
  176. package/src/utils/common-util.js +134 -1
  177. package/src/utils/jump-page-utils.js +36 -10
  178. package/src/utils/menu.js +19 -0
  179. package/src/utils/permission.js +4 -0
  180. package/src/utils/permissionAuth.js +46 -25
  181. package/src/utils/request.js +65 -8
  182. package/src/utils/util.js +77 -29
  183. package/src/views/dsc-component/Sidebar/Item.vue +5 -5
  184. package/src/views/dsc-component/Sidebar/Link.vue +11 -2
  185. package/src/views/dsc-component/Sidebar/SidebarItem.vue +37 -21
  186. package/src/views/dsc-component/Sidebar/index.vue +24 -12
  187. package/src/views/dsc-component/tabs/tab-content.vue +18 -2
  188. package/src/views/layout/components/Breadcrumb/index.vue +1 -1
  189. package/src/views/login/index.vue +1 -1
@@ -0,0 +1,19 @@
1
+ import { getLanguageWithLocale } from './util'
2
+
3
+ export function getI18nName(menu) {
4
+ if (!menu) {
5
+ return
6
+ }
7
+ if (menu.i18Names) {
8
+ const language = getLanguageWithLocale()
9
+ const i18Names = JSON.parse(menu.i18Names)
10
+ if (i18Names[language]) {
11
+ return i18Names[language]
12
+ }
13
+ }
14
+ if (menu.i18nValue) {
15
+ return menu.i18nValue
16
+ } else {
17
+ return menu.name
18
+ }
19
+ }
@@ -24,3 +24,7 @@ export default function checkPermission(permission) {
24
24
  return false
25
25
  }
26
26
  }
27
+
28
+ export {
29
+ checkPermission
30
+ }
@@ -1,12 +1,14 @@
1
- import sessionStorage from 'sessionstorage'
2
1
  import Vue from 'vue'
3
2
 
4
3
  const permissionKey = 'PERMISSION-'
5
4
  const permissionMenuKey = 'PERMISSION_MENU-'
5
+ const permissionAllSystemKey = 'PERMISSION_All_SYSTSEM_KEY'
6
6
  export function getSystemCode() {
7
7
  let systemCode
8
8
  if (Vue.prototype.customSystem) {
9
9
  systemCode = Vue.prototype.customSystem
10
+ } else if (Vue.prototype.currentSystem) {
11
+ systemCode = Vue.prototype.currentSystem
10
12
  } else {
11
13
  systemCode = Vue.prototype.systemCode
12
14
  }
@@ -19,7 +21,7 @@ export function getSystemCode() {
19
21
 
20
22
  export function getPermissions() {
21
23
  const systemCode = getSystemCode()
22
- const permissions = sessionStorage.getItem(permissionKey + systemCode)
24
+ const permissions = localStorage.getItem(permissionKey + systemCode)
23
25
  if (permissions) {
24
26
  return JSON.parse(permissions)
25
27
  }
@@ -33,26 +35,17 @@ export function setPermissions(permissions) {
33
35
  const permission = permissions[i].replace(/\./g, '__')
34
36
  permissionObjs[permission] = true
35
37
  }
36
- sessionStorage.setItem(permissionKey + systemCode, JSON.stringify(permissionObjs))
38
+ const key = permissionKey + systemCode
39
+ localStorage.setItem(key, JSON.stringify(permissionObjs))
40
+ setPermissionAllSystemKey(key)
37
41
  return permissionObjs
38
42
  }
39
43
 
40
- export function removePermissions() {
41
- const systemCode = getSystemCode()
42
- sessionStorage.removeItem(permissionKey + systemCode)
43
- for (var i = 0; i < sessionStorage.length; i++) {
44
- var key = sessionStorage.key(i)
45
- if (key.indexOf(permissionKey) >= 0) {
46
- sessionStorage.removeItem(key)
47
- }
48
- }
49
- }
50
-
51
44
  export function getMenus(systemCode) {
52
45
  if (!systemCode) {
53
46
  systemCode = getSystemCode()
54
47
  }
55
- const permissions = sessionStorage.getItem(permissionMenuKey + systemCode)
48
+ const permissions = localStorage.getItem(permissionMenuKey + systemCode)
56
49
  if (permissions) {
57
50
  return JSON.parse(permissions)
58
51
  }
@@ -64,21 +57,49 @@ export function setMenus(menus, systemCode) {
64
57
  if (!systemCode) {
65
58
  systemCode = getSystemCode()
66
59
  }
67
- sessionStorage.setItem(permissionMenuKey + systemCode, JSON.stringify(menus))
60
+ const key = permissionMenuKey + systemCode
61
+ localStorage.setItem(key, JSON.stringify(menus))
62
+ setPermissionAllSystemKey(key)
68
63
  return menus
69
64
  }
70
65
  }
71
66
 
72
- export function removeMenus(systemCode) {
73
- if (!systemCode) {
74
- systemCode = getSystemCode()
67
+ function setPermissionAllSystemKey(systemPermissionKey) {
68
+ const permissionAllSystems = getPermissionAllSystemKey()
69
+ if (permissionAllSystems.indexOf(systemPermissionKey) < 0) {
70
+ permissionAllSystems.push(systemPermissionKey)
75
71
  }
76
- sessionStorage.removeItem(permissionMenuKey + systemCode)
77
- for (var i = 0; i < sessionStorage.length; i++) {
78
- var key = sessionStorage.key(i)
79
- if (key.indexOf(permissionMenuKey) >= 0) {
80
- sessionStorage.removeItem(key)
81
- }
72
+ localStorage.setItem(permissionAllSystemKey, permissionAllSystems.join(','))
73
+ }
74
+
75
+ function getPermissionAllSystemKey() {
76
+ let permissionAllSystems = localStorage.getItem(permissionAllSystemKey)
77
+ if (permissionAllSystems) {
78
+ permissionAllSystems = permissionAllSystems.split(',')
79
+ }
80
+ if (!permissionAllSystems) {
81
+ permissionAllSystems = []
82
82
  }
83
+ return permissionAllSystems
84
+ }
85
+
86
+ function removePermissionSystemKey() {
87
+ localStorage.removeItem(permissionAllSystemKey)
83
88
  }
84
89
 
90
+ function rtrim(str) { // 删除右边的空格
91
+ return str.replace(/(\s*$)/g, '')
92
+ }
93
+
94
+ // 删除缓存的资源和菜单
95
+ export function removeAllSystemPermissions() {
96
+ const systemCode = getSystemCode()
97
+ localStorage.removeItem(permissionKey + systemCode)
98
+ localStorage.removeItem(permissionMenuKey + systemCode)
99
+ const permissionAllSystems = getPermissionAllSystemKey()
100
+ permissionAllSystems.forEach(key => {
101
+ key = rtrim(key)
102
+ localStorage.removeItem(key)
103
+ })
104
+ removePermissionSystemKey()
105
+ }
@@ -1,7 +1,7 @@
1
1
  import axios from 'axios'
2
2
  import {
3
3
  Message
4
- } from '@gcommon/gcommon-ui'
4
+ } from 'element-ui'
5
5
  import {
6
6
  getToken,
7
7
  removeToken
@@ -13,7 +13,8 @@ import {
13
13
  getI18n
14
14
  } from './util'
15
15
  import {
16
- getRelativeBaseUrl
16
+ getRelativeBaseUrl,
17
+ getTimeZone
17
18
  } from './common-util'
18
19
  // 创建axios实例
19
20
  const service = axios.create({
@@ -27,6 +28,8 @@ service.interceptors.request.use(
27
28
  config => {
28
29
  // 防止重复发送ajax请求
29
30
  store.commit('togglePreventReclick', true)
31
+ const timeZone = getTimeZone()
32
+ config.headers['timeZone'] = timeZone
30
33
  const token = getToken()
31
34
  if (token) {
32
35
  config.headers['Authorization'] = token // 让每个请求携带自定义token 请根据实际情况自行修改
@@ -80,13 +83,54 @@ service.interceptors.response.use(
80
83
  }
81
84
  } else if (error.response.status === 403) {
82
85
  // ForbiddenException(403) 403没权限
86
+ // 您没有权限访问
83
87
  const message = getI18n().t('imatrixUIMessage.forbiddenException')
84
- Message({
85
- showClose: true,
86
- message: message,
87
- type: 'error',
88
- duration: 5 * 1000
89
- })
88
+ let vnode
89
+ if (Vue.prototype.forbiddenUser || Vue.prototype.forbiddenLinkUrl) {
90
+ vnode = '<p><span>' + message + '</span>'
91
+ // 请点击进行权限申请
92
+ const forbiddenExceptionLinkUrlMsg = getI18n().t('imatrixUIMessage.forbiddenExceptionLinkUrl')
93
+ if (Vue.prototype.forbiddenLinkUrl) {
94
+ vnode += ',<a href="#" style="color: #1800ff;font-weight: bold;text-decoration:underline" onclick="window.open(\'' + Vue.prototype.forbiddenLinkUrl + '\')">' + forbiddenExceptionLinkUrlMsg + '</a>'
95
+ }
96
+ if (Vue.prototype.forbiddenUser) {
97
+ // 如有疑问请联系
98
+ const forbiddenExceptionLinkUserMsg = getI18n().t('imatrixUIMessage.forbiddenExceptionLinkUser')
99
+ vnode += '<span>'
100
+ const forbiddenUserHtml = ',' + forbiddenExceptionLinkUserMsg + '<span style="color: #1800ff;"> ' + Vue.prototype.forbiddenUser + '</span>'
101
+ let contactUrlHtml
102
+ if (!window._clickForbiddenUser) {
103
+ contactUrlHtml = forbiddenUserHtml
104
+ } else {
105
+ // index.html中添加如下代码,绑定用户点击事件
106
+ // <script>
107
+ // window._clickForbiddenUser=function(linkUser) {
108
+ // alert(linkUser)
109
+ // }
110
+ // </script>
111
+ contactUrlHtml = '<a href="#" onclick="window._clickForbiddenUser(\'' + Vue.prototype.forbiddenUser + '\');return false">' + forbiddenUserHtml + '</a>'
112
+ }
113
+ vnode += '</span>'
114
+ vnode += contactUrlHtml
115
+ }
116
+ vnode += '</p>'
117
+ }
118
+ if (vnode) {
119
+ Message({
120
+ showClose: true,
121
+ dangerouslyUseHTMLString: true,
122
+ message: vnode,
123
+ type: 'error',
124
+ duration: 10 * 1000
125
+ })
126
+ } else {
127
+ Message({
128
+ showClose: true,
129
+ message: message,
130
+ type: 'error',
131
+ duration: 5 * 1000
132
+ })
133
+ }
90
134
  return Promise.reject(error)
91
135
  } else if (error.response.status === 400 || error.response.status === 406 || error.response.status === 404) {
92
136
  // BadRequestException(400) || BusinessException(406) || ResourceNotFoundException(404)
@@ -112,6 +156,10 @@ service.interceptors.response.use(
112
156
  }
113
157
  console.log(message)
114
158
  let errorMsg = getI18n().t('imatrixUIMessage.internalServerError')
159
+ if (message && message !== 'Internal Server Error') {
160
+ // 表示显示原始异常
161
+ errorMsg = message
162
+ }
115
163
  if (message && (message === 'gateway.timeout' || message === 'gateway.callFailed')) {
116
164
  // 网关的fallback返回的异常信息“接口调用超时”、“接口调用失败”
117
165
  errorMsg = getI18n().t(message)
@@ -124,6 +172,15 @@ service.interceptors.response.use(
124
172
  })
125
173
  return Promise.reject(error)
126
174
  }
175
+ } else {
176
+ const errorMsg = getI18n().t('imatrixUIMessage.internalServerError')
177
+ Message({
178
+ showClose: true,
179
+ message: errorMsg,
180
+ type: 'error',
181
+ duration: 5 * 1000
182
+ })
183
+ return Promise.reject(error)
127
184
  }
128
185
  }
129
186
  )
package/src/utils/util.js CHANGED
@@ -3,6 +3,7 @@ import Vue from 'vue'
3
3
  import {
4
4
  executeExpression
5
5
  } from './calculator/calculator-util'
6
+ import { getLangByShort } from './common-util'
6
7
  export function getI18n() {
7
8
  if (!window.$locale) {
8
9
  i18n.locale = 'cn'
@@ -13,12 +14,11 @@ export function getI18n() {
13
14
  }
14
15
 
15
16
  export function getLanguageWithLocale() {
16
- const currentLocale = window.$locale
17
- if (currentLocale && currentLocale === 'en') {
18
- return 'en_US'
19
- } else {
20
- return 'zh_CN'
17
+ let currentLocale = window.$locale
18
+ if (!currentLocale || currentLocale === 'zh') {
19
+ currentLocale = 'cn'
21
20
  }
21
+ return getLangByShort(currentLocale)
22
22
  }
23
23
  /**
24
24
  * 根据动态数据源获得下拉选的选项集合
@@ -27,9 +27,9 @@ export function getLanguageWithLocale() {
27
27
  * @param {*} entity 实体信息
28
28
  * @returns
29
29
  */
30
- export function findOptionsByDynamicDataSource(dynamicSourceCode, searchText, entity, additionalParameterStr) {
30
+ export function findOptionsByDynamicDataSource(dynamicSourceCode, searchText, entity, additionalParameterStr, searchParam) {
31
31
  return new Promise((resolve, reject) => {
32
- findDynamicDataSourceByCode(dynamicSourceCode, searchText, entity, additionalParameterStr).then(dynamicDataSourceDto => {
32
+ findDynamicDataSourceByCode(dynamicSourceCode, searchText, entity, additionalParameterStr, searchParam).then(dynamicDataSourceDto => {
33
33
  let options = []
34
34
  if (dynamicDataSourceDto && dynamicDataSourceDto.options) {
35
35
  const setOptions = dynamicDataSourceDto.options
@@ -68,26 +68,70 @@ export function findOptionsByDynamicDataSource(dynamicSourceCode, searchText, en
68
68
  * @param {*} entity 实体信息
69
69
  * @returns
70
70
  */
71
- export function findDynamicDataSourceByCode(dynamicSourceCode, searchText, entity, additionalParameterStr) {
72
- return new Promise((resolve, reject) => {
73
- if (searchText === undefined || searchText === null) {
74
- searchText = ''
75
- }
76
- const params = {
77
- searchText
78
- }
79
- // const additionalParameterStr = sessionStorage.getItem('additionalParamMap')
80
- if (additionalParameterStr) {
81
- params.additionalParamMap = JSON.parse(additionalParameterStr)
71
+ export function findDynamicDataSourceByCode(dynamicSourceCode, searchText, entity, additionalParameterStr, searchParam) {
72
+ let watchAttrValue
73
+ let parentEntity
74
+ let listCode
75
+ let formCode
76
+ let tableName
77
+ if (searchParam) {
78
+ watchAttrValue = searchParam.watchAttrValue
79
+ if (watchAttrValue === undefined || watchAttrValue === null) {
80
+ watchAttrValue = ''
82
81
  }
83
- if (entity && entity !== null) {
84
- params.entity = entity
82
+ parentEntity = searchParam.parent
83
+ listCode = searchParam._listCode
84
+ formCode = searchParam._formCode
85
+ tableName = searchParam._tableName
86
+ }
87
+ const params = {
88
+ searchText,
89
+ watchAttrValue,
90
+ parent: parentEntity
91
+
92
+ }
93
+ if (additionalParameterStr && typeof (additionalParameterStr) === 'object') {
94
+ params.additionalParamMap = additionalParameterStr
95
+ } else if (additionalParameterStr && typeof (additionalParameterStr) === 'string') {
96
+ params.additionalParamMap = JSON.parse(additionalParameterStr)
97
+ }
98
+ if (params.additionalParamMap === undefined) {
99
+ params.additionalParamMap = {}
100
+ }
101
+ if (listCode) {
102
+ params.additionalParamMap._listCode = listCode
103
+ }
104
+ if (formCode) {
105
+ params.additionalParamMap._formCode = formCode
106
+ }
107
+ if (tableName) {
108
+ params.additionalParamMap._tableName = tableName
109
+ }
110
+ if (entity && entity !== null) {
111
+ params.entity = entity
112
+ }
113
+ const backendUrl = Vue.prototype.baseURL
114
+
115
+ return new Promise((resolve, reject) => {
116
+ // 页面设计不请求动态数据源
117
+ if (Vue.prototype.systemCode !== undefined && Vue.prototype.systemCode === 'iMatrix') {
118
+ resolve()
119
+ } else {
120
+ Vue.prototype.$http.post(backendUrl + '/common/dynamic-data-source/' + dynamicSourceCode, params).then(result => {
121
+ if (result.backendUrl) {
122
+ // result.backendUrl表示需要使用动态数据源所属的系统路径重新获得一次数据
123
+ Vue.prototype.$http.post(result.backendUrl + '/common/dynamic-data-source/' + dynamicSourceCode, params).then(finallyResult => {
124
+ resolve(finallyResult)
125
+ }).catch(error => {
126
+ reject(error)
127
+ })
128
+ } else {
129
+ resolve(result)
130
+ }
131
+ }).catch(error => {
132
+ reject(error)
133
+ })
85
134
  }
86
- Vue.prototype.$http.post(Vue.prototype.baseURL + '/common/dynamic-data-source/' + dynamicSourceCode, params).then(dynamicDataSourceDto => {
87
- resolve(dynamicDataSourceDto)
88
- }).catch(error => {
89
- reject(error)
90
- })
91
135
  })
92
136
  }
93
137
 
@@ -218,7 +262,7 @@ function parseCondition(entity, conditionList, isSql, tableName, additionalParam
218
262
  }
219
263
  }
220
264
  conditions += conditionResult + ' '
221
- if (leftBracket && leftBracket !== null && leftBracket !== '') {
265
+ if (rightBracket && rightBracket !== null && rightBracket !== '') {
222
266
  conditions = conditions + rightBracket
223
267
  conditions = conditions + (' ')
224
268
  // conditions.append(rightBracket).append(' ')
@@ -236,9 +280,13 @@ function parseCondition(entity, conditionList, isSql, tableName, additionalParam
236
280
  }
237
281
  }
238
282
  }
239
- console.log('parseCondition----conditions=', conditions)
240
- // eslint-disable-next-line no-eval
241
- return eval('(' + conditions + ')')
283
+ // console.log('parseCondition----conditions=', conditions)
284
+ if (conditions) {
285
+ // eslint-disable-next-line no-eval
286
+ return eval('(' + conditions + ')')
287
+ } else {
288
+ return true
289
+ }
242
290
  }
243
291
  const REPLACE_DOT = '__'
244
292
 
@@ -27,15 +27,15 @@ export default {
27
27
 
28
28
  if (icon) {
29
29
  if (icon.indexOf('fa-') === 0) {
30
- // 表示以“fa-”开头,使用font-awesome中的图标
30
+ // 表示以“fa-”开头,使用font-awesome中的图标 margin-right: 16px 是因为svg-icon有16px的间隔
31
31
  icon = 'fa ' + icon
32
- vnodes.push(<div style='display: inline-block;'><i class={icon}/></div>)
32
+ vnodes.push(<div style='display: inline-block;overflow:hidden;'><i class={icon} style='margin-right: 16px;'/></div>)
33
33
  } else if (icon.indexOf('svg-') === 0) {
34
34
  icon = icon.substring(icon.indexOf('svg-') + 4)
35
- vnodes.push(<div style='display: inline-block;'><svg-icon icon-class={icon}/></div>)
35
+ vnodes.push(<div style='display: inline-block;overflow:hidden;'><svg-icon icon-class={icon}/></div>)
36
36
  } else {
37
37
  icon += ' svg-icon'
38
- vnodes.push(<div style='display: inline-block;'><i class={icon}/></div>)
38
+ vnodes.push(<div style='display: inline-block;overflow:hidden;'><i class={icon} style='margin-right: 16px;'/></div>)
39
39
  }
40
40
  }
41
41
 
@@ -52,7 +52,7 @@ export default {
52
52
  </div>)
53
53
  } else {
54
54
  // 有子菜单时
55
- vnodes.push(<div slot='title' style='display: inline-block'>
55
+ vnodes.push(<div v-slot:title style='display: inline-block'>
56
56
  <div title={title} style={'display: inline-block;width:' + width + ';overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-break:keep-all;'}>{(title)}</div>
57
57
  </div>)
58
58
  }
@@ -6,9 +6,12 @@
6
6
  <slot />
7
7
  </a> -->
8
8
 
9
- <router-link :to="to">
9
+ <router-link v-if="!isOpenNewTab" :to="to">
10
10
  <slot />
11
11
  </router-link>
12
+ <div v-else>
13
+ <slot />
14
+ </div>
12
15
  </div>
13
16
  </template>
14
17
 
@@ -23,8 +26,14 @@ export default {
23
26
  },
24
27
  data() {
25
28
  const isExter = this.to.isExternal
29
+ const openWay = this.to.openWay
30
+ let isOpenNewTab = false
31
+ if (openWay && openWay === 'NEW_PAGE_OPEN') {
32
+ isOpenNewTab = true
33
+ }
26
34
  return {
27
- isExter
35
+ isExter,
36
+ isOpenNewTab
28
37
  }
29
38
  }
30
39
  }
@@ -3,14 +3,14 @@
3
3
  <template v-if="!item.children || item.children.lenght === 0">
4
4
  <app-link :to="toPath(item)" @click.native="clickMenu(toPath(item))">
5
5
  <el-menu-item :index="resolvePath(item.code,item.path,item.pageType)" :class="{'submenu-title-noDropdown':!isNest}">
6
- <item :icon="item.iconName" :title="item.i18nValue" :is-root="true" />
6
+ <item :icon="item.iconName" :title="getI18nName(item)" :is-root="true" />
7
7
  </el-menu-item>
8
8
  </app-link>
9
9
  </template>
10
10
 
11
- <el-submenu v-else :index="resolvePath(item.code,item.path,item.pageType)" :show-timeout="0" :hide-timeout="50" popper-class="sidebar-container-popper">
12
- <template slot="title">
13
- <item :icon="item.iconName" :title="item.i18nValue" :has-children="item.children.length > 0?true:false" />
11
+ <el-submenu v-else :index="resolvePath(item.code,item.path,item.pageType)" :show-timeout="0" :hide-timeout="50" :popper-append-to-body="false" popper-class="sidebar-container-popper">
12
+ <template v-slot:title>
13
+ <item :icon="item.iconName" :title="getI18nName(item)" :has-children="item.children.length > 0?true:false" />
14
14
  </template>
15
15
 
16
16
  <template v-for="child in item.children">
@@ -23,7 +23,7 @@
23
23
  />
24
24
  <app-link v-else :key="child.code" :to="toPath(child)" @click.native="clickMenu(toPath(child))">
25
25
  <el-menu-item :index="resolvePath(child.code,child.path,child.pageType)">
26
- <item :icon="child.iconName" :title="child.i18nValue" />
26
+ <item :icon="child.iconName" :title="getI18nName(child)" />
27
27
  </el-menu-item>
28
28
  </app-link>
29
29
  </template>
@@ -37,6 +37,8 @@ import Item from './Item'
37
37
  import AppLink from './Link'
38
38
  import Vue from 'vue'
39
39
  import tabJs from '../../../api/tab'
40
+ import { getI18nName } from '../../../utils/menu'
41
+ // import { SidebarItemChild } from './SidebarItemChild.vue'
40
42
  export default {
41
43
  name: 'SidebarItem',
42
44
  components: { Item, AppLink },
@@ -90,23 +92,17 @@ export default {
90
92
  toPath(menu) {
91
93
  const toPathObj = {}
92
94
  const routePath = menu.path
95
+ toPathObj.openWay = menu.openWay
93
96
  if (this.isExternalLink(menu.pageType)) {
94
97
  toPathObj.path = '/dsc-index/iframe-page'
95
98
  toPathObj.tabPath = '/dsc/iframe-page'
96
99
  toPathObj.query = {}
97
100
  toPathObj.query.src = routePath
98
101
  toPathObj.isExternal = true
99
- if (!this.isHasCustomSystem(routePath)) {
100
- // 如果路径中没有拼系统编码,才需要把系统编码放到参数中
101
- toPathObj.query.customSystem = Vue.prototype.customSystem
102
- }
103
-
102
+ // 如果路径中没有拼系统编码,才需要把系统编码放到参数中
103
+ toPathObj.query.customSystem = Vue.prototype.customSystem
104
104
  toPathObj.query._menuCode = menu.code
105
- if (menu.i18nValue) {
106
- toPathObj.query._menuName = menu.i18nValue
107
- } else {
108
- toPathObj.query._menuName = menu.name
109
- }
105
+ toPathObj.query._menuName = getI18nName(menu)
110
106
  } else {
111
107
  const pageCode = routePath
112
108
  toPathObj.path = '/dsc-index/page'
@@ -115,11 +111,7 @@ export default {
115
111
  toPathObj.query.pageCode = pageCode
116
112
  toPathObj.query.customSystem = Vue.prototype.customSystem
117
113
  toPathObj.query._menuCode = menu.code
118
- if (menu.i18nValue) {
119
- toPathObj.query._menuName = menu.i18nValue
120
- } else {
121
- toPathObj.query._menuName = menu.name
122
- }
114
+ toPathObj.query._menuName = getI18nName(menu)
123
115
  }
124
116
  return toPathObj
125
117
  },
@@ -140,13 +132,37 @@ export default {
140
132
  },
141
133
  clickMenu(toPathObj) {
142
134
  // console.log('clickMenu----toPathObj=', toPathObj)
143
- this.addTabs(toPathObj.query, this.$store.state.tabContent.openTab, toPathObj.tabPath)
135
+ if (toPathObj.openWay && toPathObj.openWay === 'NEW_PAGE_OPEN' && toPathObj.query) {
136
+ // 新页签打开菜单
137
+ let url = toPathObj.query.src
138
+ if (url && url.indexOf('?') > 0) {
139
+ url += '&'
140
+ } else {
141
+ url += '?'
142
+ }
143
+ if (toPathObj.query.customSystem) {
144
+ url += 'customSystem=' + toPathObj.query.customSystem
145
+ }
146
+ if (toPathObj.query._menuCode) {
147
+ url += '_menuCode=' + toPathObj.query._menuCode
148
+ }
149
+ if (toPathObj.query._menuCode) {
150
+ url += '_menuName=' + toPathObj.query._menuName
151
+ }
152
+ window.open(url, toPathObj.query._menuCode)
153
+ } else {
154
+ // 刷新页签打开菜单
155
+ this.addTabs(toPathObj.query, this.$store.state.tabContent.openTab, toPathObj.tabPath)
156
+ }
144
157
  },
145
158
  isExternalLink(pageType) {
146
159
  if (pageType && pageType === 'iframe') {
147
160
  return true
148
161
  }
149
162
  return false
163
+ },
164
+ getI18nName(menu) {
165
+ return getI18nName(menu)
150
166
  }
151
167
  }
152
168
  }
@@ -1,15 +1,17 @@
1
1
  <template>
2
2
  <div>
3
3
  <el-scrollbar wrap-class="scrollbar-wrapper">
4
- <el-menu
5
- :show-timeout="200"
6
- :default-active="getDefaultActive()"
7
- :collapse="isCollapse"
8
- mode="vertical"
9
- @select="selectMenu"
10
- >
11
- <sidebar-item v-for="menu in menus" :key="menu.code" :item="menu" />
12
- </el-menu>
4
+ <keep-alive>
5
+ <el-menu
6
+ :show-timeout="200"
7
+ :default-active="getDefaultActive()"
8
+ :collapse="isCollapse"
9
+ mode="vertical"
10
+ @select="selectMenu"
11
+ >
12
+ <sidebar-item v-for="menu in menus" :key="menu.code" :item="menu" />
13
+ </el-menu>
14
+ </keep-alive>
13
15
  </el-scrollbar>
14
16
  <hamburger :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" />
15
17
  </div>
@@ -21,6 +23,7 @@ import SidebarItem from './SidebarItem'
21
23
  import Cookies from 'js-cookie'
22
24
  import tabJs from '../../../api/tab'
23
25
  import { getMenus } from '../../../utils/permissionAuth'
26
+ import { getI18nName } from '../../../utils/menu'
24
27
  export default {
25
28
  name: 'Sidebar',
26
29
  components: {
@@ -39,7 +42,7 @@ export default {
39
42
  data() {
40
43
  const menus = getMenus()
41
44
  return {
42
- menus
45
+ menus: Object.freeze(menus)
43
46
  }
44
47
  },
45
48
  computed: {
@@ -54,19 +57,25 @@ export default {
54
57
  }
55
58
  },
56
59
  created() {
60
+ // const a = new Date().getTime()
57
61
  this.firstLeafMenu = this.getMyFirstMenu(this.menus)
58
62
  if (this.firstLeafMenu && this.firstLeafMenu.fullPath) {
59
63
  // 跳转到第一个页面
60
64
  if (this.firstLeafMenu.pageType && this.firstLeafMenu.pageType === 'iframe') {
61
65
  const iframeSrc = this.firstLeafMenu.fullPath
62
- this.$router.push({ path: '/dsc-index/iframe-page', query: { src: iframeSrc }})
66
+ const path = this.firstLeafMenu.path
67
+ const query = { src: iframeSrc, customSystem: this.systemCode, path: path, _menuCode: this.firstLeafMenu.code, _menuName: getI18nName(this.firstLeafMenu) }
68
+ this.addTabs(query, this.$store.state.tabContent.openTab, '/dsc/iframe-page', '/dsc/iframe-page')
69
+ this.$router.push({ path: '/dsc-index/iframe-page', query: query })
63
70
  } else {
64
71
  const pageCode = this.firstLeafMenu.path
65
- const query = { customSystem: this.systemCode, pageCode: pageCode, _menuCode: this.firstLeafMenu.code, _menuName: this.firstLeafMenu.name }
72
+ const query = { customSystem: this.systemCode, pageCode: pageCode, _menuCode: this.firstLeafMenu.code, _menuName: getI18nName(this.firstLeafMenu) }
66
73
  this.addTabs(query, this.$store.state.tabContent.openTab, '/dsc/page', '/dsc/page')
67
74
  this.$router.push({ path: '/dsc-index/page', query: query })
68
75
  // this.$router.push({ path: this.firstLeafMenu.fullPath })
69
76
  }
77
+ // const b = new Date().getTime()
78
+ // console.log('菜单组件==>created==>b-a', (b - a))
70
79
  }
71
80
  },
72
81
  methods: {
@@ -88,11 +97,14 @@ export default {
88
97
  Cookies.set('selectMenu', index)
89
98
  },
90
99
  getMyFirstMenu(menus) {
100
+ // const a = new Date().getTime()
91
101
  if (menus && menus.length > 0) {
92
102
  let shouldSelectMenu = this.getFirstMenu(menus)
93
103
  if (!shouldSelectMenu) {
94
104
  shouldSelectMenu = this.getFirstMenuWithCookie(menus)
95
105
  }
106
+ // const b = new Date().getTime()
107
+ // console.log('菜单组件==>getMyFirstMenu==>b-a', (b - a))
96
108
  // 默认不展示第一个有权限的菜单了,可以去掉下面的代码
97
109
  // if (!shouldSelectMenu) {
98
110
  // shouldSelectMenu = this.getSelectMenuWithFirstMenu(menus[0])