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.
- package/lib/super-ui.css +1 -1
- package/lib/super-ui.umd.min.js +5 -35
- package/package.json +6 -4
- package/packages/breadcrumb/index.js +6 -0
- package/packages/breadcrumb/src/breadcrumb.vue +71 -0
- package/packages/department-tree/index.js +6 -0
- package/packages/department-tree/src/department-tree.vue +108 -0
- package/packages/department-tree-inline/index.js +6 -0
- package/packages/department-tree-inline/src/department-multi-tree-inline.vue +411 -0
- package/packages/department-tree-inline/src/department-single-tree-inline.vue +293 -0
- package/packages/department-tree-inline/src/department-tree-inline.vue +86 -0
- package/packages/department-tree-inline/src/department-tree-service.js +275 -0
- package/packages/department-tree-inline/src/search-result.vue +176 -0
- package/packages/department-user-tree/index.js +6 -0
- package/packages/department-user-tree/src/department-user-multiple-tree.vue +116 -0
- package/packages/department-user-tree/src/department-user-single-tree.vue +76 -0
- package/packages/department-user-tree/src/department-user-tree.vue +101 -0
- package/packages/department-user-tree-inline/index.js +6 -0
- package/packages/department-user-tree-inline/src/department-user-multiple-tree-inline.vue +639 -0
- package/packages/department-user-tree-inline/src/department-user-single-tree-inline.vue +274 -0
- package/packages/department-user-tree-inline/src/department-user-tree-inline.vue +79 -0
- package/packages/department-user-tree-inline/src/department-user-tree-multi-service.js +248 -0
- package/packages/department-user-tree-inline/src/department-user-tree-single-service.js +142 -0
- package/packages/department-user-tree-inline/src/search-result.vue +197 -0
- package/packages/directives/prevent-reclick.js +19 -0
- package/packages/dynamic-source-select/index.js +6 -0
- package/packages/dynamic-source-select/src/dynamic-source-select-service.js +75 -0
- package/packages/dynamic-source-select/src/dynamic-source-select.vue +586 -0
- package/packages/dynamic-source-select/src/events.js +55 -0
- package/packages/fs-preview/index.js +6 -0
- package/packages/fs-preview/src/fs-preview.vue +226 -0
- package/packages/fs-upload/index.js +6 -0
- package/packages/fs-upload/src/fs-upload-multi.vue +420 -0
- package/packages/fs-upload/src/fs-upload-single.vue +312 -0
- package/packages/fs-upload/src/fs-upload.vue +189 -0
- package/packages/fs-upload/src/see-big-picture.vue +55 -0
- package/packages/fs-upload-list/index.js +6 -0
- package/packages/fs-upload-list/src/fs-upload-list.vue +287 -0
- package/packages/hamburger/index.js +6 -0
- package/packages/hamburger/src/hamburger.vue +38 -0
- package/packages/index.js +121 -0
- package/packages/multipart-upload/index.js +6 -0
- package/packages/multipart-upload/src/index.vue +73 -0
- package/packages/multipart-upload/src/multipart-upload-form.vue +297 -0
- package/packages/multipart-upload/src/multipart-upload-list.vue +378 -0
- package/packages/organization-input/index.js +6 -0
- package/packages/organization-input/src/organization-input.vue +542 -0
- package/packages/plugins/export-data-new.js +468 -0
- package/packages/plugins/export-data.js +361 -0
- package/packages/plugins/index.js +15 -0
- package/packages/plugins/public-method.js +43 -0
- package/packages/remove-department/index.js +6 -0
- package/packages/remove-department/src/remove-department.vue +172 -0
- package/packages/remove-department/src/remove-dept-service.js +20 -0
- package/packages/remove-user/index.js +6 -0
- package/packages/remove-user/src/remove-user-service.js +20 -0
- package/packages/remove-user/src/remove-user.vue +195 -0
- package/packages/remove-workgroup/index.js +6 -0
- package/packages/remove-workgroup/src/remove-workgroup-service.js +20 -0
- package/packages/remove-workgroup/src/remove-workgroup.vue +159 -0
- package/packages/rich-editor/index.js +7 -0
- package/packages/rich-editor/index.vue +278 -0
- package/packages/rich-editor/langs/zh-Hans.js +1 -0
- package/packages/rich-editor/viewer.vue +103 -0
- package/packages/scan-code-input/index.js +6 -0
- package/packages/scan-code-input/src/events.js +33 -0
- package/packages/scan-code-input/src/scan-code-input-colse.vue +131 -0
- package/packages/scan-code-input/src/scan-code-input.vue +116 -0
- package/packages/secret-info/index.js +7 -0
- package/packages/secret-info/index.vue +90 -0
- package/packages/super-grid/index.js +7 -0
- package/packages/super-grid/src/apis.js +825 -0
- package/packages/super-grid/src/columns-config.vue +335 -0
- package/packages/super-grid/src/custom-formatter.js +280 -0
- package/packages/super-grid/src/dynamic-input.vue +1286 -0
- package/packages/super-grid/src/eventBus.js +2 -0
- package/packages/super-grid/src/events.js +55 -0
- package/packages/super-grid/src/formValidatorUtil.js +226 -0
- package/packages/super-grid/src/formatter.js +181 -0
- package/packages/super-grid/src/group-column.vue +100 -0
- package/packages/super-grid/src/header-context-menu.vue +87 -0
- package/packages/super-grid/src/index-column.vue +51 -0
- package/packages/super-grid/src/normal-column.vue +775 -0
- package/packages/super-grid/src/public-methods.js +31 -0
- package/packages/super-grid/src/row-operation.vue +161 -0
- package/packages/super-grid/src/search-button.vue +66 -0
- package/packages/super-grid/src/search-condition-input.vue +61 -0
- package/packages/super-grid/src/search-condition-list.vue +59 -0
- package/packages/super-grid/src/search-form-advancedQuery.vue +654 -0
- package/packages/super-grid/src/search-form-dialog.vue +79 -0
- package/packages/super-grid/src/search-form-item.vue +405 -0
- package/packages/super-grid/src/search-form-number.vue +38 -0
- package/packages/super-grid/src/search-form-open.vue +170 -0
- package/packages/super-grid/src/search-form-ordinarySearch.vue +196 -0
- package/packages/super-grid/src/search-form.vue +642 -0
- package/packages/super-grid/src/search-methods.js +448 -0
- package/packages/super-grid/src/selection-column.vue +43 -0
- package/packages/super-grid/src/store.js +3 -0
- package/packages/super-grid/src/super-grid-service.js +595 -0
- package/packages/super-grid/src/super-grid.vue +2936 -0
- package/packages/super-grid/src/utils.js +782 -0
- package/packages/super-grid/src/view-image-dialog.vue +130 -0
- package/packages/super-nine-grid/index.js +7 -0
- package/packages/super-nine-grid/src/apis.js +103 -0
- package/packages/super-nine-grid/src/custom-formatter.js +66 -0
- package/packages/super-nine-grid/src/formatter.js +131 -0
- package/packages/super-nine-grid/src/search-form-number.vue +38 -0
- package/packages/super-nine-grid/src/search-form.vue +430 -0
- package/packages/super-nine-grid/src/search-methods.js +134 -0
- package/packages/super-nine-grid/src/store.js +3 -0
- package/packages/super-nine-grid/src/super-grid-service.js +93 -0
- package/packages/super-nine-grid/src/super-nine-grid.vue +883 -0
- package/packages/super-nine-grid/src/utils.js +261 -0
- package/packages/svg-icon/index.js +6 -0
- package/packages/svg-icon/src/svg-icon.vue +43 -0
- package/packages/utils/memory-cache-utils.js +90 -0
- package/packages/utils/utils.js +152 -0
- package/packages/utils/value-set.js +86 -0
- package/packages/valid-code/index.js +7 -0
- package/packages/valid-code/src/valid-code.vue +95 -0
- package/packages/workflow-button/index.js +6 -0
- package/packages/workflow-button/src/workflow-button.vue +325 -0
- package/packages/workflow-history-list/index.js +6 -0
- package/packages/workflow-history-list/src/api.js +7 -0
- package/packages/workflow-history-list/src/workflow-history-list.vue +197 -0
- package/packages/workgroup-tree/index.js +6 -0
- package/packages/workgroup-tree/src/workgroup-tree.vue +77 -0
- package/packages/workgroup-tree-inline/index.js +6 -0
- package/packages/workgroup-tree-inline/src/search-result.vue +168 -0
- package/packages/workgroup-tree-inline/src/workgroup-tree-inline.vue +458 -0
- package/packages/workgroup-tree-inline/src/workgroup-tree-service.js +71 -0
- package/packages/workgroup-user-tree/index.js +6 -0
- package/packages/workgroup-user-tree/src/workgroup-user-tree.vue +100 -0
- package/packages/workgroup-user-tree-inline/index.js +6 -0
- package/packages/workgroup-user-tree-inline/src/search-result.vue +197 -0
- package/packages/workgroup-user-tree-inline/src/workgroup-tree-inline-service.js +192 -0
- package/packages/workgroup-user-tree-inline/src/workgroup-user-tree-inline.vue +584 -0
- package/packages/year-range-picker/index.js +6 -0
- package/packages/year-range-picker/src/year-range-picker.vue +51 -0
- package/src/api/sso-service.js +9 -1
- package/src/api/tab.js +3 -3
- package/src/i18n/i18n.js +1 -1
- package/src/i18n/langs/cn.js +15 -5
- package/src/i18n/langs/en.js +15 -5
- package/src/index.js +93 -0
- package/src/permission.js +51 -17
- package/src/plugins.js +3 -3
- package/src/store/getters.js +2 -1
- package/src/store/modules/app.js +10 -1
- package/src/store/modules/user.js +11 -18
- package/src/styles/display-layout.scss +34 -0
- package/src/styles/index.scss +32 -4
- package/src/styles/theme/dark-blue/button.scss +9 -0
- package/src/styles/theme/dark-blue/card.scss +64 -0
- package/src/styles/theme/dark-blue/checkbox.scss +10 -0
- package/src/styles/theme/dark-blue/dark-blue-var.scss +8 -0
- package/src/styles/theme/dark-blue/dialog.scss +21 -0
- package/src/styles/theme/dark-blue/element-variables.scss +7 -0
- package/src/styles/theme/dark-blue/font.scss +71 -0
- package/src/styles/theme/dark-blue/form.scss +51 -0
- package/src/styles/theme/dark-blue/index.scss +247 -0
- package/src/styles/theme/dark-blue/input.scss +15 -0
- package/src/styles/theme/dark-blue/pagination.scss +14 -0
- package/src/styles/theme/dark-blue/scrollbar-style.scss +32 -0
- package/src/styles/theme/dark-blue/sidebar.scss +296 -0
- package/src/styles/theme/dark-blue/tab.scss +83 -0
- package/src/styles/theme/dark-blue/table.scss +60 -0
- package/src/styles/theme/dark-blue/tree.scss +31 -0
- package/src/styles/theme/dark-blue/var.scss +1028 -0
- package/src/styles/theme/gray/input-style.scss +8 -0
- package/src/styles/theme/gray/sidebar.scss +14 -2
- package/src/utils/auth-api.js +171 -0
- package/src/utils/auth.js +75 -41
- package/src/utils/calculator/calculator-factory.js +2 -2
- package/src/utils/calculator/calculator-util.js +7 -7
- package/src/utils/common-util.js +134 -1
- package/src/utils/jump-page-utils.js +36 -10
- package/src/utils/menu.js +19 -0
- package/src/utils/permission.js +4 -0
- package/src/utils/permissionAuth.js +46 -25
- package/src/utils/request.js +65 -8
- package/src/utils/util.js +77 -29
- package/src/views/dsc-component/Sidebar/Item.vue +5 -5
- package/src/views/dsc-component/Sidebar/Link.vue +11 -2
- package/src/views/dsc-component/Sidebar/SidebarItem.vue +37 -21
- package/src/views/dsc-component/Sidebar/index.vue +24 -12
- package/src/views/dsc-component/tabs/tab-content.vue +18 -2
- package/src/views/layout/components/Breadcrumb/index.vue +1 -1
- 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
|
+
}
|
package/src/utils/permission.js
CHANGED
|
@@ -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 =
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
73
|
-
|
|
74
|
-
|
|
67
|
+
function setPermissionAllSystemKey(systemPermissionKey) {
|
|
68
|
+
const permissionAllSystems = getPermissionAllSystemKey()
|
|
69
|
+
if (permissionAllSystems.indexOf(systemPermissionKey) < 0) {
|
|
70
|
+
permissionAllSystems.push(systemPermissionKey)
|
|
75
71
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
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
|
+
}
|
package/src/utils/request.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import axios from 'axios'
|
|
2
2
|
import {
|
|
3
3
|
Message
|
|
4
|
-
} from '
|
|
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
|
-
|
|
85
|
-
|
|
86
|
-
message
|
|
87
|
-
|
|
88
|
-
|
|
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
|
-
|
|
17
|
-
if (currentLocale
|
|
18
|
-
|
|
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
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
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
|
-
|
|
84
|
-
|
|
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 (
|
|
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
|
-
|
|
241
|
-
|
|
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
|
|
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
|
|
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
|
|
13
|
-
<item :icon="item.iconName" :title="item
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
<
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
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
|
|
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])
|