@lambo-design/shared 1.0.0-beta.36 → 1.0.0-beta.360

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 (259) hide show
  1. package/config/config.js +20 -3
  2. package/config/index.js +7 -2
  3. package/config/locale.js +61 -0
  4. package/config/themes/atrovirens/atrovirens.css +590 -0
  5. package/config/themes/atrovirens/atrovirens.css.map +1 -0
  6. package/config/themes/atrovirens/atrovirens.less +681 -0
  7. package/config/themes/atrovirens/var.css +29 -0
  8. package/config/themes/atrovirens/var.css.map +1 -0
  9. package/config/themes/atrovirens/var.less +689 -0
  10. package/config/themes/blue/blue.css +590 -0
  11. package/config/themes/blue/blue.css.map +1 -0
  12. package/config/themes/blue/blue.less +684 -0
  13. package/config/themes/blue/var.less +692 -0
  14. package/config/themes/blue-208/blue-208.css +590 -0
  15. package/config/themes/blue-208/blue-208.css.map +1 -0
  16. package/config/themes/blue-208/blue-208.less +685 -0
  17. package/config/themes/blue-208/var.less +691 -0
  18. package/config/themes/blue-digital/blue-digital.css +590 -0
  19. package/config/themes/blue-digital/blue-digital.css.map +1 -0
  20. package/config/themes/blue-digital/blue-digital.less +684 -0
  21. package/config/themes/blue-digital/var.less +692 -0
  22. package/config/themes/blue-leaf/blue-leaf.css +590 -0
  23. package/config/themes/blue-leaf/blue-leaf.css.map +1 -0
  24. package/config/themes/blue-leaf/blue-leaf.less +685 -0
  25. package/config/themes/blue-leaf/var.less +691 -0
  26. package/config/themes/blue-white/blue-white.css +590 -0
  27. package/config/themes/blue-white/blue-white.css.map +1 -0
  28. package/config/themes/blue-white/blue-white.less +685 -0
  29. package/config/themes/blue-white/var.less +691 -0
  30. package/config/themes/blue-white-big/blue-white-big.css +590 -0
  31. package/config/themes/blue-white-big/blue-white-big.css.map +1 -0
  32. package/config/themes/blue-white-big/blue-white-big.less +685 -0
  33. package/config/themes/blue-white-big/var.less +691 -0
  34. package/config/themes/blue-white-tight/blue-white-tight.css +591 -0
  35. package/config/themes/blue-white-tight/blue-white-tight.css.map +1 -0
  36. package/config/themes/blue-white-tight/blue-white-tight.less +685 -0
  37. package/config/themes/blue-white-tight/var.less +693 -0
  38. package/config/themes/canglan/canglan.css +590 -0
  39. package/config/themes/canglan/canglan.css.map +1 -0
  40. package/config/themes/canglan/canglan.less +682 -0
  41. package/config/themes/canglan/var.less +693 -0
  42. package/config/themes/cuiwei/cuiwei.css +590 -0
  43. package/config/themes/cuiwei/cuiwei.css.map +1 -0
  44. package/config/themes/cuiwei/cuiwei.less +682 -0
  45. package/config/themes/cuiwei/var.less +691 -0
  46. package/config/themes/danqing/danqing.css +590 -0
  47. package/config/themes/danqing/danqing.css.map +1 -0
  48. package/config/themes/danqing/danqing.less +682 -0
  49. package/config/themes/danqing/danqing.wxss +576 -0
  50. package/config/themes/danqing/var.less +696 -0
  51. package/config/themes/deep/deep.css +590 -0
  52. package/config/themes/deep/deep.css.map +1 -0
  53. package/config/themes/deep/deep.less +682 -0
  54. package/config/themes/deep/var.less +694 -0
  55. package/config/themes/default/default.css +404 -57
  56. package/config/themes/default/default.css.map +1 -1
  57. package/config/themes/default/default.less +381 -16
  58. package/config/themes/default/var.less +390 -11
  59. package/config/themes/eap/eap.css +590 -0
  60. package/config/themes/eap/eap.css.map +1 -0
  61. package/config/themes/eap/eap.less +685 -0
  62. package/config/themes/eap/var.less +693 -0
  63. package/config/themes/gold/gold.css +590 -0
  64. package/config/themes/gold/gold.css.map +1 -0
  65. package/config/themes/gold/gold.less +685 -0
  66. package/config/themes/gold/var.css +0 -0
  67. package/config/themes/gold/var.css.map +0 -0
  68. package/config/themes/gold/var.less +386 -5
  69. package/config/themes/index.js +32 -4
  70. package/config/themes/lime/lime.css +590 -0
  71. package/config/themes/lime/lime.css.map +1 -0
  72. package/config/themes/lime/lime.less +685 -0
  73. package/config/themes/lime/var.less +385 -5
  74. package/config/themes/orange/orange.css +354 -7
  75. package/config/themes/orange/orange.css.map +1 -1
  76. package/config/themes/orange/orange.less +366 -0
  77. package/config/themes/orange/var.less +386 -5
  78. package/config/themes/red/red.css +354 -7
  79. package/config/themes/red/red.css.map +1 -1
  80. package/config/themes/red/red.less +366 -0
  81. package/config/themes/red/var.less +386 -5
  82. package/config/themes/sichuan/sichuan.css +590 -0
  83. package/config/themes/sichuan/sichuan.css.map +1 -0
  84. package/config/themes/sichuan/sichuan.less +685 -0
  85. package/config/themes/sichuan/var.less +691 -0
  86. package/config/themes/theme-atrovirens.js +572 -0
  87. package/config/themes/theme-b208.js +572 -0
  88. package/config/themes/theme-bd.js +572 -0
  89. package/config/themes/theme-bl.js +572 -0
  90. package/config/themes/theme-blue.js +572 -0
  91. package/config/themes/theme-bw.js +572 -0
  92. package/config/themes/theme-bwb.js +572 -0
  93. package/config/themes/theme-bwt.js +573 -0
  94. package/config/themes/theme-canglan.js +574 -0
  95. package/config/themes/theme-cuiwei.js +574 -0
  96. package/config/themes/theme-danqing.js +575 -0
  97. package/config/themes/theme-deep.js +572 -0
  98. package/config/themes/theme-default.js +379 -60
  99. package/config/themes/theme-eap.js +572 -0
  100. package/config/themes/theme-gold.js +327 -8
  101. package/config/themes/theme-lime.js +327 -8
  102. package/config/themes/theme-orange.js +561 -29
  103. package/config/themes/theme-red.js +564 -33
  104. package/config/themes/theme-sichuan.js +572 -0
  105. package/config/themes/theme-white.js +572 -0
  106. package/config/themes/white/var.less +692 -0
  107. package/config/themes/white/white.css +590 -0
  108. package/config/themes/white/white.css.map +1 -0
  109. package/config/themes/white/white.less +685 -0
  110. package/directives/module/print.js +1 -0
  111. package/directives/module/vue-print-nb/README.md +63 -0
  112. package/directives/module/vue-print-nb/print.js +94 -0
  113. package/directives/module/vue-print-nb/printarea.js +532 -0
  114. package/index.js +7 -1
  115. package/nstyles/common.less +197 -0
  116. package/nstyles/components/404.less +46 -0
  117. package/nstyles/components/button.less +34 -0
  118. package/nstyles/components/date-picker.less +41 -0
  119. package/nstyles/components/drawer.less +20 -0
  120. package/nstyles/components/dropdown.less +18 -0
  121. package/nstyles/components/excel-flow.less +72 -0
  122. package/nstyles/components/form.less +314 -0
  123. package/nstyles/components/index.less +23 -0
  124. package/nstyles/components/layout/collect.less +10 -0
  125. package/nstyles/components/layout/detail-view.less +107 -0
  126. package/nstyles/components/layout/full-screen.less +7 -0
  127. package/nstyles/components/layout/index.less +7 -0
  128. package/nstyles/components/layout/other-menu.less +142 -0
  129. package/nstyles/components/layout/page-view.less +101 -0
  130. package/nstyles/components/layout/sider-trigger.less +41 -0
  131. package/nstyles/components/layout/tags-nav.less +113 -0
  132. package/nstyles/components/modal.less +90 -0
  133. package/nstyles/components/n-button.less +131 -0
  134. package/nstyles/components/n-image-preview.less +131 -0
  135. package/nstyles/components/n-model/index.less +19 -0
  136. package/nstyles/components/n-model/report-index.less +43 -0
  137. package/nstyles/components/n-panel.less +41 -0
  138. package/nstyles/components/n-picker.less +37 -0
  139. package/nstyles/components/n-sign.less +17 -0
  140. package/nstyles/components/n-tooltip.less +10 -0
  141. package/nstyles/components/panel.less +31 -0
  142. package/nstyles/components/select.less +3 -0
  143. package/nstyles/components/sign.less +27 -0
  144. package/nstyles/components/table.less +523 -0
  145. package/nstyles/components/tree.less +166 -0
  146. package/nstyles/components/upload.less +174 -0
  147. package/nstyles/index.css +2676 -0
  148. package/nstyles/index.css.map +1 -0
  149. package/nstyles/index.less +5 -0
  150. package/nstyles/reset.less +73 -0
  151. package/nstyles/third/ag.less +226 -0
  152. package/nstyles/third/icons/sort-desc.svg +1 -0
  153. package/nstyles/third/icons/sort-up.svg +1 -0
  154. package/nstyles/third/icons/sorting.svg +1 -0
  155. package/nstyles/third/index.less +11 -0
  156. package/nstyles/third/view-design.less +402 -0
  157. package/nstyles/variables/base.less +143 -0
  158. package/nstyles/variables/index.less +4 -0
  159. package/nstyles/variables/theme/default/button.less +7 -0
  160. package/nstyles/variables/theme/default/common.less +60 -0
  161. package/nstyles/variables/theme/default/index.less +7 -0
  162. package/nstyles/variables/theme/default/layout.less +40 -0
  163. package/nstyles/variables/theme/default/table.less +37 -0
  164. package/nstyles/variables/theme/default/tag.less +3 -0
  165. package/nstyles/variables/theme/default/upload.less +3 -0
  166. package/nstyles/variables/theme/index.less +13 -0
  167. package/nstyles/variables/theme/lsv/button.less +7 -0
  168. package/nstyles/variables/theme/lsv/common.less +39 -0
  169. package/nstyles/variables/theme/lsv/index.less +5 -0
  170. package/nstyles/variables/theme/lsv/layout.less +21 -0
  171. package/nstyles/variables/theme/lsv/table.less +20 -0
  172. package/nstyles/variables/theme/lsv/tag.less +3 -0
  173. package/nstyles/variables/theme/small/button.less +7 -0
  174. package/nstyles/variables/theme/small/common.less +41 -0
  175. package/nstyles/variables/theme/small/index.less +5 -0
  176. package/nstyles/variables/theme/small/layout.less +21 -0
  177. package/nstyles/variables/theme/small/table.less +17 -0
  178. package/nstyles/variables/theme/small/tag.less +3 -0
  179. package/package.json +28 -7
  180. package/plugin/index.js +12 -0
  181. package/plugin/module/date-format.js +30 -0
  182. package/plugin/module/loading.js +26 -0
  183. package/plugin/module/warn-handler.js +11 -0
  184. package/styles/image/indicator-card-header.png +0 -0
  185. package/styles/image/inspur.png +0 -0
  186. package/styles/image/lan_navigator.png +0 -0
  187. package/styles/image/layout-header-bg-canglan.png +0 -0
  188. package/styles/image/layout-header-bg-cuiwei.png +0 -0
  189. package/styles/image/lv_navigator.png +0 -0
  190. package/utils/ajax/abort-controller.js +70 -0
  191. package/utils/ajax/cancel-reason.js +25 -0
  192. package/utils/ajax/cancel-token.js +83 -0
  193. package/utils/ajax/content-type.js +30 -0
  194. package/utils/ajax/headers.js +11 -0
  195. package/utils/ajax/interceptors.js +45 -10
  196. package/utils/ajax/sseFetchUtil.js +118 -0
  197. package/utils/ajax/throttle.js +49 -0
  198. package/utils/assist.js +155 -27
  199. package/utils/base64.js +126 -0
  200. package/utils/blob.js +47 -0
  201. package/utils/context-menu.js +264 -0
  202. package/utils/crypto/aes.js +23 -0
  203. package/utils/crypto/index.js +10 -0
  204. package/utils/crypto/rsa.js +23 -0
  205. package/utils/date.js +334 -305
  206. package/utils/dict/built-in-dict.js +20 -0
  207. package/utils/dict/index.js +191 -0
  208. package/utils/event.js +72 -0
  209. package/utils/excel.js +504 -290
  210. package/utils/file.js +19 -0
  211. package/utils/form/validate.js +29 -0
  212. package/utils/getChild.js +87 -0
  213. package/utils/half-year.js +68 -0
  214. package/utils/index.js +37 -0
  215. package/utils/json.js +44 -0
  216. package/utils/locale/en-US.js +179 -0
  217. package/utils/locale/zh-CN.js +183 -0
  218. package/utils/lodop.js +5 -0
  219. package/utils/menu/generatorDynamicRouter.js +301 -0
  220. package/utils/menu/index.js +426 -15
  221. package/utils/mime_type.js +67 -0
  222. package/utils/modelerUtil.js +4 -1
  223. package/utils/n/api.js +42 -0
  224. package/utils/n/date.js +57 -0
  225. package/utils/n/index.js +10 -0
  226. package/utils/n/is-type.js +176 -0
  227. package/utils/n/number.js +144 -0
  228. package/utils/n/permission-cache.js +11 -0
  229. package/utils/n/reuqest/axiosN.js +17 -0
  230. package/utils/n/reuqest/content-type.js +19 -0
  231. package/utils/n/reuqest/interceptors.js +95 -0
  232. package/utils/n/reuqest/url-params.js +12 -0
  233. package/utils/n/storage.js +51 -0
  234. package/utils/n/token.js +51 -0
  235. package/utils/n/user-cache.js +11 -0
  236. package/utils/n/user.js +34 -0
  237. package/utils/n/uuid.js +16 -0
  238. package/utils/n-generator-routers.js +208 -0
  239. package/utils/n-router.js +205 -0
  240. package/utils/n-theme.js +30 -0
  241. package/utils/number.js +72 -15
  242. package/utils/oss.js +57 -0
  243. package/utils/platform.js +951 -31
  244. package/utils/quarter.js +58 -0
  245. package/utils/storage.js +198 -0
  246. package/utils/style.js +24 -0
  247. package/utils/theme.js +98 -3
  248. package/utils/transfer-queue.js +7 -0
  249. package/utils/transform.js +205 -0
  250. package/utils/type.js +102 -0
  251. package/utils/util.js +795 -0
  252. package/utils/vForm.js +349 -0
  253. package/utils/validator.js +181 -0
  254. package/config/themes/gold/default.css +0 -243
  255. package/config/themes/gold/default.css.map +0 -1
  256. package/config/themes/gold/default.less +0 -320
  257. package/config/themes/lime/default.css +0 -243
  258. package/config/themes/lime/default.css.map +0 -1
  259. package/config/themes/lime/default.less +0 -320
package/utils/platform.js CHANGED
@@ -1,8 +1,48 @@
1
- import Bus from './bus';
1
+ import {deepCopy} from './assist';
2
+ import _ from 'lodash';
3
+ import config from "../config/config";
4
+ import systemLogo from '../styles/image/inspur.png';
5
+ import {changeByThemeKey, changeThemeByThemeId} from "./theme";
6
+ import ajax from "./ajax";
7
+ import qs from 'qs'
8
+ import {disableF12, disableRightClick, disableShortcutKeys, enableRightClick, enableShortcutKeys, enableF12,
9
+ disableTextSelection, enableTextSelection} from "./context-menu";
2
10
 
3
- export const TOKEN_KEY = 'v8-token'
11
+ export let TOKEN_KEY = "lambo-token"
4
12
 
5
- export const COOKIE_KEY = 'lambo-sso-key'
13
+ export let getTokenKey = function () {
14
+ if (config.tokenKey) {
15
+ return config.tokenKey
16
+ }
17
+ return "lambo-token"
18
+ }
19
+
20
+ export let COOKIE_KEY = "lambo-sso-key"
21
+
22
+ export let getCookieKey = function () {
23
+ if (config.cookieKey) {
24
+ return config.cookieKey
25
+ }
26
+ return "lambo-sso-key"
27
+ }
28
+
29
+ export let SSO_TOKEN_KEY = "lambo-sso-token"
30
+
31
+ export let getSsoTokenKey = function () {
32
+ if (config.ssoTokenKey) {
33
+ return config.ssoTokenKey
34
+ }
35
+ return "lambo-sso-token"
36
+ }
37
+
38
+ export let PASSWORD_EXPIRED_KEY = "lambo-password-expired-time"
39
+
40
+ export let getPasswordExpiredKey = function () {
41
+ if (config.passwordExpiredKey) {
42
+ return config.passwordExpiredKey
43
+ }
44
+ return "lambo-password-expired-time"
45
+ }
6
46
 
7
47
  export function objEqual(obj1, obj2) {
8
48
  const keysArr1 = Object.keys(obj1)
@@ -13,6 +53,10 @@ export function objEqual(obj1, obj2) {
13
53
  else return !keysArr1.some(key => obj1[key] !== obj2[key])
14
54
  }
15
55
 
56
+ export function arraysEqual(a, b) {
57
+ return _.isEqual(a,b)
58
+ }
59
+
16
60
  /**
17
61
  * @param {Array} list 标签列表
18
62
  * @param {String} name 当前关闭的标签的name
@@ -31,47 +75,47 @@ export function getNextRoute(list, route) {
31
75
 
32
76
 
33
77
  export const setToken = (token) => {
34
- sessionStorage.setItem(TOKEN_KEY, token)
78
+ typeof sessionStorage != 'undefined' && sessionStorage.setItem(getTokenKey(), token)
35
79
  }
36
80
 
37
81
  export const getToken = () => {
38
- const token = sessionStorage.getItem(TOKEN_KEY)
82
+ const token = typeof sessionStorage != 'undefined' && sessionStorage.getItem(getTokenKey())
39
83
  if (token) return token
40
84
  else return false
41
85
  }
42
86
 
43
87
  export const setSessionStorage = (key, value) => {
44
- sessionStorage.setItem(key, JSON.stringify(value))
88
+ typeof sessionStorage != 'undefined' && sessionStorage.setItem(key, JSON.stringify(value))
45
89
  }
46
90
 
47
91
  export const getSessionStorage = (key) => {
48
- const value = sessionStorage.getItem(key)
92
+ const value = typeof sessionStorage != 'undefined' && sessionStorage.getItem(key)
49
93
  if (value) return JSON.parse(value)
50
94
  else return null
51
95
  }
52
96
 
53
97
  export const removeSessionStorage = (key) => {
54
- return sessionStorage.removeItem(key)
98
+ return typeof sessionStorage != 'undefined' && sessionStorage.removeItem(key)
55
99
  }
56
100
 
57
101
  export const clearSessionStorage = () => {
58
- return sessionStorage.clear()
102
+ return typeof sessionStorage != 'undefined' && sessionStorage.clear()
59
103
  }
60
104
 
61
105
  export const setLocalStorage = (key, localstorage) => {
62
- localStorage.setItem(key, localstorage)
106
+ typeof localStorage != 'undefined' &&localStorage.setItem(key, localstorage)
63
107
  }
64
108
 
65
109
  export const getLocalStorage = (key) => {
66
- return localStorage.getItem(key)
110
+ return typeof localStorage != 'undefined' &&localStorage.getItem(key)
67
111
  }
68
112
 
69
113
  export const removeLocalStorage = (key) => {
70
- return localStorage.removeItem(key)
114
+ return typeof localStorage != 'undefined' &&localStorage.removeItem(key)
71
115
  }
72
116
 
73
117
  export const clearLocalStorage = () => {
74
- return localStorage.clear()
118
+ return typeof localStorage != 'undefined' &&localStorage.clear()
75
119
  }
76
120
 
77
121
  export const hasChild = (item) => {
@@ -159,6 +203,14 @@ export const setTagNavListInLocalstorage = (list , key) => {
159
203
  }
160
204
  localStorage[key] = JSON.stringify(list)
161
205
  }
206
+
207
+ export const setTagNavListInSessionstorage = (list , key) => {
208
+ if (!key) {
209
+ key = 'LD-tagNavList';
210
+ }
211
+ sessionStorage[key] = JSON.stringify(list)
212
+ }
213
+
162
214
  /**
163
215
  * @returns {Array} 其中的每个元素只包含路由原信息中的name, path, meta三项
164
216
  */
@@ -170,6 +222,14 @@ export const getTagNavListFromLocalstorage = (key) => {
170
222
  return list ? JSON.parse(list) : []
171
223
  }
172
224
 
225
+ export const getTagNavListFromLocalstorage = (key) => {
226
+ if (!key) {
227
+ key = 'LD-tagNavList';
228
+ }
229
+ const list = sessionStorage[key]
230
+ return list ? JSON.parse(list) : []
231
+ }
232
+
173
233
  /**
174
234
  * @param {Array} routers 路由列表数组
175
235
  * @description 用于找到路由列表中name为home的对象
@@ -315,6 +375,12 @@ export const getTableDataFromArray = (array) => {
315
375
  }
316
376
  }
317
377
 
378
+ /**
379
+ * 寻找上级节点
380
+ * @param ele
381
+ * @param tag
382
+ * @returns {*}
383
+ */
318
384
  export const findNodeUpper = (ele, tag) => {
319
385
  if (ele.parentNode) {
320
386
  if (ele.parentNode.tagName === tag.toUpperCase()) {
@@ -325,6 +391,12 @@ export const findNodeUpper = (ele, tag) => {
325
391
  }
326
392
  }
327
393
 
394
+ /**
395
+ * 根据class寻找上级节点
396
+ * @param ele
397
+ * @param classes
398
+ * @returns {*}
399
+ */
328
400
  export const findNodeUpperByClasses = (ele, classes) => {
329
401
  let parentNode = ele.parentNode
330
402
  if (parentNode) {
@@ -337,6 +409,12 @@ export const findNodeUpperByClasses = (ele, classes) => {
337
409
  }
338
410
  }
339
411
 
412
+ /**
413
+ * 根据ele寻找下级节点
414
+ * @param ele
415
+ * @param tag
416
+ * @returns {*}
417
+ */
340
418
  export const findNodeDownward = (ele, tag) => {
341
419
  const tagName = tag.toUpperCase()
342
420
  if (ele.childNodes.length) {
@@ -350,6 +428,12 @@ export const findNodeDownward = (ele, tag) => {
350
428
  }
351
429
  }
352
430
 
431
+ /**
432
+ * @description 判断要查询的数组是否至少有一个元素包含在目标数组中
433
+ * @param access 需要查询的数组
434
+ * @param canViewAccess 目标数组
435
+ * @returns {*}
436
+ */
353
437
  export const showByAccess = (access, canViewAccess) => {
354
438
  return hasOneOf(canViewAccess, access)
355
439
  }
@@ -364,7 +448,9 @@ export const routeEqual = (route1, route2) => {
364
448
  const params2 = route2.params || {}
365
449
  const query1 = route1.query || {}
366
450
  const query2 = route2.query || {}
367
- return (route1.name === route2.name) && objEqual(params1, params2) && objEqual(query1, query2)
451
+ const uri1 = route1.uri || {}
452
+ const uri2 = route2.uri || {}
453
+ return (route1.name === route2.name) && objEqual(params1, params2) && objEqual(query1, query2) && objEqual(uri1, uri2)
368
454
  }
369
455
 
370
456
  /**
@@ -379,16 +465,23 @@ export const routeHasExist = (tagNavList, routeItem) => {
379
465
  return res
380
466
  }
381
467
 
382
- // scrollTop animation
468
+ /**
469
+ * scrollTop animation
470
+ * @param el
471
+ * @param from
472
+ * @param to
473
+ * @param duration
474
+ * @param endCallback
475
+ */
383
476
  export const scrollTop = (el, from = 0, to, duration = 500, endCallback) => {
384
477
  if (!window.requestAnimationFrame) {
385
478
  window.requestAnimationFrame = (
386
- window.webkitRequestAnimationFrame ||
387
- window.mozRequestAnimationFrame ||
388
- window.msRequestAnimationFrame ||
389
- function (callback) {
390
- return window.setTimeout(callback, 1000 / 60)
391
- }
479
+ window.webkitRequestAnimationFrame ||
480
+ window.mozRequestAnimationFrame ||
481
+ window.msRequestAnimationFrame ||
482
+ function (callback) {
483
+ return window.setTimeout(callback, 1000 / 60)
484
+ }
392
485
  )
393
486
  }
394
487
  const difference = Math.abs(from - to)
@@ -428,8 +521,16 @@ export const setTitle = (configTitle,routeItem, vm) => {
428
521
  window.document.title = resTitle
429
522
  }
430
523
 
431
- export const getUrlParams = () => {
432
- const url = location.search; //获取url中"?"符后的字串
524
+ /**
525
+ * 获取浏览器地址url中的参数
526
+ * @param url
527
+ * @returns {Object}
528
+ */
529
+ export const getUrlParams = (url) => {
530
+ if (!url){
531
+ url = location.search;
532
+ }
533
+ //const url = location.search; //获取url中"?"符后的字串
433
534
  const theRequest = new Object();
434
535
  if (url.indexOf("?") != -1) {
435
536
  const str = url.substr(1);
@@ -468,6 +569,80 @@ export const getChangeTableDatas = (oldData, newData) => {
468
569
  return list
469
570
  }
470
571
 
572
+ /**
573
+ * 合并数组并去重
574
+ * @param oldRow
575
+ * @param newRow
576
+ * @param key
577
+ * @returns {*[]}
578
+ */
579
+ export const removeDup = (oldRow,newRow,key) => {
580
+ let resultMap = {};
581
+ for(let o of oldRow){
582
+ resultMap[o[key]] = o;
583
+ }
584
+ for (let n of newRow) {
585
+ resultMap[n[key]] = n;
586
+ }
587
+ let result = []
588
+ for (let row in resultMap) {
589
+ result.push(resultMap[row])
590
+ }
591
+ return result;
592
+ }
593
+ /**
594
+ * 获取数组修改的数据
595
+ * @param oldRow
596
+ * @param newRow
597
+ * @param key
598
+ * @returns {{delList: *[], addList: *[]}}
599
+ */
600
+ export const getChangeData = (oldRow,newRow,key) =>{
601
+ let oldMap = {};
602
+ for(let o of oldRow){
603
+ if (key){
604
+ oldMap[o[key]] = o;
605
+ } else {
606
+ oldMap[o] = o;
607
+ }
608
+ }
609
+ let newMap = {}
610
+ for(let n of newRow){
611
+ if (key){
612
+ newMap[n[key]] = n;
613
+ } else {
614
+ newMap[n] = n;
615
+ }
616
+ }
617
+ let addList = []
618
+ for (let n of newRow) {
619
+ if (key){
620
+ if (!oldMap[n[key]]) {
621
+ addList.push(n);
622
+ }
623
+ } else {
624
+ if (!oldMap[n]) {
625
+ addList.push(n);
626
+ }
627
+ }
628
+ }
629
+ let delList = []
630
+ for (let o of oldRow) {
631
+ if (key){
632
+ if (!newMap[o[key]]) {
633
+ delList.push(o);
634
+ }
635
+ } else {
636
+ if (!newMap[o]) {
637
+ delList.push(o);
638
+ }
639
+ }
640
+ }
641
+ return {
642
+ addList,delList
643
+ }
644
+ }
645
+
471
646
  /**
472
647
  * @param {Array} arr1
473
648
  * @param {Array} arr2
@@ -502,6 +677,11 @@ const hasOneOf = (targetarr, arr) => {
502
677
  return targetarr.some(_ => arr.indexOf(_) > -1)
503
678
  }
504
679
 
680
+ /**
681
+ * foreach
682
+ * @param arr
683
+ * @param fn 回调函数,参数接收arr的元素,索引,arr本身
684
+ */
505
685
  const forEach = (arr, fn) => {
506
686
  if (!arr.length || !fn) return
507
687
  let i = -1
@@ -525,9 +705,17 @@ export function oneOf (value, validList) {
525
705
  return false
526
706
  }
527
707
 
708
+ /**
709
+ * recursionKeyFindItem
710
+ * @param arr
711
+ * @param filterKey
712
+ * @param filterValue
713
+ * @param recursionKey
714
+ * @returns {*|null}
715
+ */
528
716
  export const recursionKeyFindItem = (arr, filterKey, filterValue, recursionKey) => {
529
717
  for (const item of arr) {
530
- if (item[filterKey] && item[filterKey] == filterValue) {
718
+ if (item[filterKey] && item[filterKey] == filterValue && item['type'] == 2) {
531
719
  return item;
532
720
  }
533
721
  let result = null;
@@ -541,18 +729,394 @@ export const recursionKeyFindItem = (arr, filterKey, filterValue, recursionKey)
541
729
  return null;
542
730
  };
543
731
 
732
+ /**
733
+ * filterMenuName
734
+ * @param menuList
735
+ * @param name
736
+ * @returns {*|null}
737
+ */
544
738
  export const filterMenuName = (menuList, name) => {
545
739
  return recursionKeyFindItem(menuList, 'name', name, 'children')
546
740
  };
547
741
 
742
+ /**
743
+ * filterMenuUri
744
+ * @param menuList
745
+ * @param name
746
+ * @returns {*|null}
747
+ */
548
748
  export const filterMenuUri = (menuList, name) => {
549
749
  return recursionKeyFindItem(menuList, 'uri', name, 'children')
550
750
  };
551
751
 
752
+ /**
753
+ * tagExists
754
+ * @param taglist
755
+ * @param name
756
+ * @returns {boolean}
757
+ */
552
758
  export const tagExists = (taglist, name) => {
553
759
  return taglist && taglist.filter(item => item.name === name).length > 0;
554
760
  };
555
761
 
762
+ /**
763
+ * 判断菜单是否为新窗口打开
764
+ * @param menu
765
+ */
766
+ export const isOpenBlank = (menu) => {
767
+ let extendProps = {}
768
+ if (menu && menu.meta && menu.meta.data && menu.meta.data.extension) {
769
+ extendProps = JSON.parse(menu.meta.data.extension)
770
+ }
771
+ if (menu && menu.extension) {
772
+ extendProps = JSON.parse(menu.extension)
773
+ }
774
+ if (extendProps && extendProps.target_type && extendProps.target_type == 'blank') {
775
+ return true;
776
+ }
777
+ if (extendProps && extendProps.targetType && extendProps.targetType == 'blank') {
778
+ return true;
779
+ }
780
+ return false;
781
+ }
782
+
783
+ /**
784
+ * 判断应用是否为移动应用
785
+ * @param app
786
+ */
787
+ export const isMobileApp = (app) => {
788
+ try{
789
+ let extendProps = {};
790
+ if (app.extendProps) {
791
+ if (typeof app.extendProps == 'string') {
792
+ extendProps = JSON.parse(app.extendProps);
793
+ } else {
794
+ extendProps = app.extendProps;
795
+ }
796
+ }
797
+ if (app.setting) {
798
+ if (typeof app.setting == 'string') {
799
+ extendProps = JSON.parse(app.setting);
800
+ } else {
801
+ extendProps = app.setting;
802
+ }
803
+ }
804
+ if (extendProps && extendProps.is_mobile_app && extendProps.is_mobile_app == '1') {
805
+ return true;
806
+ }
807
+ }catch (e) {
808
+ console.error(e)
809
+ }
810
+ return false;
811
+ }
812
+
813
+ /**
814
+ * 获取pc应用列表
815
+ * @param appList
816
+ * @returns {*[]}
817
+ */
818
+ export const getPCAppList = (appList,filterCenter = false) => {
819
+ let finalList = []
820
+ if(appList) {
821
+ for (let app of appList) {
822
+ if ((!isMobileApp(app) && filterCenter && isCenterApp(app))
823
+ || (!isMobileApp(app) && !filterCenter)) {
824
+ finalList.push(app);
825
+ }
826
+ }
827
+ }
828
+ return finalList;
829
+ }
830
+
831
+ /**
832
+ * 获取移动应用列表
833
+ * @param appList
834
+ * @returns {*[]}
835
+ */
836
+ export const getMobileAppList = (appList,filterCenter= false) => {
837
+ let finalList = []
838
+ if(appList) {
839
+ for (let app of appList) {
840
+ if ((isMobileApp(app) && filterCenter && isCenterApp(app))
841
+ || (isMobileApp(app) && !filterCenter)) {
842
+ finalList.push(app);
843
+ }
844
+ }
845
+ }
846
+ return finalList;
847
+ }
848
+ /**
849
+ * 判断应用是否门户应用
850
+ * @param menu
851
+ */
852
+ export const isCenterApp = (app) => {
853
+ try{
854
+ let extendProps = {};
855
+ if (app.extendProps) {
856
+ if (typeof app.extendProps == 'string') {
857
+ extendProps = JSON.parse(app.extendProps);
858
+ } else {
859
+ extendProps = app.extendProps;
860
+ }
861
+ }
862
+ if (app.setting) {
863
+ if (typeof app.setting == 'string') {
864
+ extendProps = JSON.parse(app.setting);
865
+ } else {
866
+ extendProps = app.setting;
867
+ }
868
+ }
869
+ if (extendProps && extendProps.is_center_app && extendProps.is_center_app == '1') {
870
+ return true;
871
+ }
872
+ }catch (e) {
873
+ console.error(e);
874
+ }
875
+ return false;
876
+ }
877
+
878
+ /**
879
+ * 获取一级菜单作为顶级导航
880
+ * @param permissionList
881
+ * @param appType
882
+ * @returns {*[]}
883
+ */
884
+ export const buildNavListByMenu = (permissionList,appInfo,appType,defaultHideName = '') => {
885
+ let navList = []
886
+ if (permissionList && appInfo && appInfo.appId) {
887
+ let hideNames = [];
888
+ if (defaultHideName && typeof defaultHideName === 'string') {
889
+ hideNames = defaultHideName.split(',').map(name => name.trim());
890
+ }
891
+ let permissions = permissionList.filter(item => item.hasOwnProperty('pid')
892
+ && item.pid == '0' && item.appId == appInfo.appId && !hideNames.includes(item.name))
893
+ for (let per of permissions) {
894
+ if (appType && appType == 'sc') {
895
+ let nav = {
896
+ "data" : deepCopy(per),
897
+ "appInfo" : deepCopy(appInfo),
898
+ "orderNo": per.orders,
899
+ "application": {
900
+ "extendProps": per.extension ? JSON.parse(per.extension) : "",
901
+ "appId": per.permissionId,
902
+ "appBizCode": per.permissionValue,
903
+ "appName": per.title,
904
+ "appDesc": per.description,
905
+ "appUrl": appInfo.basepath,
906
+ "icon": per.icon,
907
+ "appStatus": 1,
908
+ "manageUnitId": "",
909
+ "protocolType": null,
910
+ "grantTypes": null,
911
+ "logoutUrl": null,
912
+ "redirectUrls": null,
913
+ "codeExpiresIn": null,
914
+ "idTokenExpiresIn": null,
915
+ "accessTokenExpiresIn": null,
916
+ "clientId": "",
917
+ "clientSecret": "",
918
+ "isEnableSso": false,
919
+ "isShare": false,
920
+ "referAppId": null,
921
+ "externalId": null,
922
+ "callerAppId": null,
923
+ "orderNo": 1,
924
+ "parentId": null,
925
+ "appType": null,
926
+ "relativeName": null,
927
+ "shortName": null,
928
+ "authType": "1",
929
+ "isLower": null
930
+ },
931
+ "basepath": appInfo.basepath,
932
+ "appId": per.permissionId,
933
+ "icon": per.icon,
934
+ "name": per.name,
935
+ "extendProps": per.extension ? JSON.parse(per.extension) : "",
936
+ "title": per.title,
937
+ "type": "00",
938
+ "status": 1
939
+ }
940
+ navList.push(nav)
941
+ } else {
942
+ let nav = {
943
+ "data" : deepCopy(per),
944
+ "appInfo" : deepCopy(appInfo),
945
+ "id": per.id,
946
+ "appId": per.permissionId,
947
+ "systemId": per.systemId,
948
+ "icon": per.icon,
949
+ "banner": null,
950
+ "theme": null,
951
+ "basepath": appInfo.basepath,
952
+ "status": 1,
953
+ "name": per.name,
954
+ "title": per.title,
955
+ "type": "00",
956
+ "setting": "",
957
+ "description": per.description,
958
+ "orders": per.orders,
959
+ "createTime": 1710772466000,
960
+ "updateTime": 1710772466000
961
+ }
962
+ navList.push(nav)
963
+ }
964
+ }
965
+ }
966
+ return navList;
967
+ }
968
+
969
+ /**
970
+ * 判断是否为子菜单
971
+ * @param permissionList
972
+ * @param pid
973
+ * @param per
974
+ * @returns {boolean|boolean|*}
975
+ */
976
+ export const isChildPermission = (permissionList, pid, per) => {
977
+ if (permissionList && pid && per && per.pid) {
978
+ let res = permissionList.find(item => item.hasOwnProperty('permissionId') && item.permissionId == per.pid)
979
+ if (res && res.permissionId && res.permissionId == pid) {
980
+ return true;
981
+ } else {
982
+ return isChildPermission(permissionList, pid, res)
983
+ }
984
+ }
985
+ return false;
986
+ }
987
+ /**
988
+ * 获取所有子菜单 - 优化版
989
+ * 使用 Map 缓存 + 迭代,复杂度从 O(n²×depth) 降到 O(n×depth)
990
+ * @param {Array} permissionList 权限列表
991
+ * @param {string|number} pid 父级ID
992
+ * @param {Object} appInfo 应用信息
993
+ * @returns {Array} 所有子节点
994
+ */
995
+ export const getChildPermissions = (permissionList, pid, appInfo) => {
996
+ if (!permissionList || !pid) return [];
997
+
998
+ // 建立 id -> permission 的 Map,O(n)
999
+ const permissionMap = new Map();
1000
+ for (const permission of permissionList) {
1001
+ if (permission && permission.hasOwnProperty('permissionId')) {
1002
+ permissionMap.set(permission.permissionId, permission);
1003
+ }
1004
+ }
1005
+
1006
+ // 使用迭代检查是否为子节点,避免递归栈溢出
1007
+ const isChildOf = (permission) => {
1008
+ let current = permission;
1009
+ const visited = new Set(); // 防止循环引用
1010
+
1011
+ while (current && current.pid) {
1012
+ // 循环引用检测
1013
+ if (visited.has(current.permissionId)) return false;
1014
+ visited.add(current.permissionId);
1015
+
1016
+ if (current.pid == pid) return true;
1017
+ current = permissionMap.get(current.pid); // O(1) 查找
1018
+ }
1019
+ return false;
1020
+ };
1021
+
1022
+ const res = [];
1023
+ for (const permission of permissionList) {
1024
+ if (isChildOf(permission)) {
1025
+ const per2 = deepCopy(permission);
1026
+ per2.appId = pid;
1027
+ if (per2.pid == pid) {
1028
+ per2.pid = "0";
1029
+ }
1030
+ per2.appInfo = deepCopy(appInfo);
1031
+ res.push(per2);
1032
+ }
1033
+ }
1034
+
1035
+ return res;
1036
+ }
1037
+ /**
1038
+ * 恢复权限的原始信息
1039
+ * @param permission
1040
+ */
1041
+ export const getOriginalPermission = (permission) => {
1042
+ if (permission && permission.meta && permission.meta.data && permission.meta.data.appInfo) {
1043
+ let per2 = deepCopy(permission);
1044
+ if (per2.hasOwnProperty('pid') && per2.pid == '0') {
1045
+ per2.pid = per2.meta.data.appId;
1046
+ per2.meta.data.pid = per2.meta.data.appId;
1047
+ }
1048
+ per2.meta.appId = permission.meta.data.appInfo.appId;
1049
+ per2.meta.data.appId = permission.meta.data.appInfo.appId;
1050
+ return per2;
1051
+ }
1052
+ return permission
1053
+ }
1054
+
1055
+ /**
1056
+ * 单应用时修改源权限信息
1057
+ * @param permissionList
1058
+ * @param menu
1059
+ * @param appInfo
1060
+ * @returns {*}
1061
+ */
1062
+ export const buildSinglePermission = (permissionList, menu) => {
1063
+ let permission = permissionList.find(item => item.permissionId == menu.permissionId && item.appId == menu.appId)
1064
+ let rootPermission = getRootPermission(permissionList, permission)
1065
+ if (rootPermission && rootPermission.permissionId) {
1066
+ menu.appInfo = {
1067
+ appId: menu.appId
1068
+ }
1069
+ menu.appId = rootPermission.permissionId;
1070
+ }
1071
+ return menu;
1072
+ }
1073
+ /**
1074
+ * 获取菜单根节点
1075
+ * @param permissionList
1076
+ * @param permission
1077
+ * @returns {*|{pid}|{}}
1078
+ */
1079
+ export const getRootPermission = (permissionList, permission) => {
1080
+ if (!permissionList || !permission) return permission;
1081
+
1082
+ // 构建 Map,O(n)
1083
+ const permissionMap = new Map();
1084
+ for (const item of permissionList) {
1085
+ if (item && item.permissionId != null) {
1086
+ const key = `${item.permissionId}|${item.appId || ''}`;
1087
+ permissionMap.set(key, item);
1088
+ }
1089
+ }
1090
+
1091
+ // 迭代向上查找根节点
1092
+ let current = permission;
1093
+ const visited = new Set();
1094
+
1095
+ while (current) {
1096
+ if (!current.pid || current.pid === '0') {
1097
+ return current;
1098
+ }
1099
+
1100
+ // 循环引用检测
1101
+ const key = `${current.permissionId}|${current.appId || ''}`;
1102
+ if (visited.has(key)) return permission;
1103
+ visited.add(key);
1104
+
1105
+ // O(1) 查找父节点
1106
+ const parentKey = `${current.pid}|${current.appId || ''}`;
1107
+ current = permissionMap.get(parentKey);
1108
+
1109
+ if (!current) return permission;
1110
+ }
1111
+
1112
+ return permission;
1113
+ }
1114
+ /**
1115
+ * getPreviousTagIndex
1116
+ * @param tagList
1117
+ * @param name
1118
+ * @returns {number}
1119
+ */
556
1120
  export const getPreviousTagIndex = (tagList, name) => {
557
1121
  let count = 0;
558
1122
  if (tagList && name) {
@@ -570,6 +1134,12 @@ export const getPreviousTagIndex = (tagList, name) => {
570
1134
  return count;
571
1135
  };
572
1136
 
1137
+ /**
1138
+ * getDelTagIndex
1139
+ * @param tagList
1140
+ * @param name
1141
+ * @returns {number}
1142
+ */
573
1143
  export const getDelTagIndex = (tagList, name) => {
574
1144
  let count = 1;
575
1145
  if (tagList && name) {
@@ -583,13 +1153,363 @@ export const getDelTagIndex = (tagList, name) => {
583
1153
  return count;
584
1154
  }
585
1155
 
586
- export const turnToPage = (vm, name ,url) =>{
587
- if (window.top && window.top.location.href != window.location.href) {
588
- sessionStorage.removeItem('activeName')
589
- window.parent.location.href = url;
590
- } else {
1156
+ /**
1157
+ * turnToPage
1158
+ * @param vm
1159
+ * @param name
1160
+ * @param url
1161
+ * @param forceLocation
1162
+ * @param queryObj
1163
+ */
1164
+ export const turnToPage = (vm, name ,url, forceLocation = false, queryObj = {}) =>{
1165
+ let query = qs.stringify(queryObj)
1166
+ if(query){
1167
+ url = url + '?' + query;
1168
+ }
1169
+ if (window.top && window.top.location.href !== window.location.href) {
1170
+ typeof sessionStorage != 'undefined' && sessionStorage.removeItem('activeName')
1171
+ window.top.location.href = url;
1172
+ } else if (forceLocation){
1173
+ typeof sessionStorage != 'undefined' && sessionStorage.removeItem('activeName')
1174
+ if (window.top){
1175
+ window.top.location.href = url;
1176
+ } else {
1177
+ window.location.href = url;
1178
+ }
1179
+ } else if (vm && vm.$router){
591
1180
  vm.$router.push({
592
- name: name
1181
+ name: name,
1182
+ ...queryObj
593
1183
  })
1184
+ } else {
1185
+ window.location.href = url;
1186
+ }
1187
+ }
1188
+
1189
+
1190
+ /**
1191
+ * 获取上级节点的方法
1192
+ * @param vm
1193
+ * @param methodName
1194
+ * @returns {*}
1195
+ */
1196
+ export const getParentMethod = (vm,methodName) => {
1197
+ if (vm.$parent) {
1198
+ if (vm.$parent[methodName]) {
1199
+ return vm.$parent[methodName];
1200
+ } else {
1201
+ return getParentMethod(vm.$parent,methodName)
1202
+ }
1203
+ }
1204
+ return undefined;
1205
+ }
1206
+
1207
+ /**
1208
+ * 执行全屏操作
1209
+ * @param vm
1210
+ */
1211
+ export const doParentMethod = (vm,methodName) => {
1212
+ let action = getParentMethod(vm,methodName)
1213
+ if (action) {
1214
+ action()
1215
+ }
1216
+ }
1217
+ /**
1218
+ * 替换url中的指定参数
1219
+ * @param url
1220
+ * @param paramName
1221
+ * @param paramValue
1222
+ * @returns {string}
1223
+ */
1224
+ export const replaceUrlParam = (url, paramName, paramValue) => {
1225
+ let pattern = new RegExp('(' + paramName + '=)([^&]+)', 'i');
1226
+ let queryString = url.split('?')[1];
1227
+ if (queryString) {
1228
+ let newParam = paramName + '=' + encodeURIComponent(paramValue);
1229
+ let newQueryString = queryString.replace(pattern, newParam);
1230
+ return url.split('?')[0] + '?' + newQueryString;
1231
+ } else {
1232
+ return url + '?' + paramName + '=' + encodeURIComponent(paramValue);
1233
+ }
1234
+ }
1235
+ /**
1236
+ * 拼接url
1237
+ * @param href
1238
+ * @param key
1239
+ * @param value
1240
+ * @returns {string}
1241
+ */
1242
+ export const buildParams = (href, key, value) =>{
1243
+ if (href && key && value) {
1244
+ if (!href.includes(key + '=')) {
1245
+ if (href.includes('?')) {
1246
+ href += '&' + key + '=' + value
1247
+ } else {
1248
+ href += '?' + key + '=' + value
1249
+ }
1250
+ } else {
1251
+ href = replaceUrlParam(href,key,value)
1252
+ }
1253
+ return href;
594
1254
  }
595
- }
1255
+ return '';
1256
+ }
1257
+ /**
1258
+ * 组装菜单url
1259
+ * @param item
1260
+ * @param ssoToken
1261
+ * @param ssoid
1262
+ * @returns {string}
1263
+ */
1264
+ export const buildMenuUri = (item,ssoToken,ssoid) => {
1265
+ if (!item.uri) {
1266
+ return ''
1267
+ }
1268
+ let href = ''
1269
+ let uri = item.uri
1270
+ if (uri.startsWith('http')) {
1271
+ href = uri
1272
+ } else {
1273
+ let basepath = ''
1274
+ if (item.navList) {
1275
+ let navList = deepCopy(item.navList);
1276
+ let appId = '';
1277
+ if (item.appId) {
1278
+ appId = item.appId;
1279
+ } else if (item.meta && item.meta.appId) {
1280
+ appId = item.meta.appId;
1281
+ }
1282
+ let appInfo = navList.find(app => app.appId === appId)
1283
+ if (appInfo && appInfo.basepath) {
1284
+ basepath = appInfo.basepath
1285
+ }
1286
+ }
1287
+ if (!basepath.startsWith('/') && !basepath.startsWith('http')) {
1288
+ basepath = '/' + basepath
1289
+ }
1290
+ if (basepath.endsWith('/')) {
1291
+ basepath = basepath.substring(0, basepath.length - 1)
1292
+ }
1293
+ if (!uri.startsWith('/')) {
1294
+ uri = '/' + uri
1295
+ }
1296
+ href = basepath + uri
1297
+ }
1298
+ href = buildParams(href,"layout","screen");
1299
+ if (ssoToken) {
1300
+ href = buildParams(href,"token",ssoToken);
1301
+ }
1302
+ if (ssoid) {
1303
+ href = buildParams(href,"ssoid",ssoid);
1304
+ }
1305
+ if (item.cts) {
1306
+ href = buildParams(href,"cts",item.cts);
1307
+ }
1308
+ return href
1309
+ }
1310
+ /**
1311
+ * 给query添加时间戳
1312
+ */
1313
+ export const addTimestamp = ($route) => {
1314
+ let query = {};
1315
+ if ($route.query) {
1316
+ query = $route.query;
1317
+ }
1318
+ query = Object.assign({},query,{cts:new Date().getTime()})
1319
+ $route.query = query;
1320
+ return $route;
1321
+ }
1322
+ /**
1323
+ * 根据配置信息修改系统信息
1324
+ * @param systemInfo
1325
+ */
1326
+ export const changeSystemInfo = async (systemInfo) => {
1327
+ let defaultSystemInfo = {
1328
+ layoutSize: 'small',
1329
+ systemLogo: systemLogo,
1330
+ logoWidth: '150px',
1331
+ systemName: sessionStorage.getItem('systemName') ? sessionStorage.getItem('systemName') : config.title,
1332
+ nameSize: 1,
1333
+ navType: 'dropdown',
1334
+ rightTopOptButtonList: ['collect', 'fullScreen'],
1335
+ rightTopShowFunList: ['theme', 'personalCenter', 'noticeList', 'logout'],
1336
+ menuLogo: '1',
1337
+ titleShow: 'wrap',
1338
+ menuScaling: '1',
1339
+ footerInfo: 'Copyright © 2021 浪潮数字商业科技有限公司 版权所有<br> 辽ICP备11001865号-3',
1340
+ showTheme: '',
1341
+ theme: 'default',
1342
+ tabNum: 5,
1343
+ topMenu: 4,
1344
+ };
1345
+ if (systemInfo) {
1346
+ systemInfo = Object.assign(defaultSystemInfo, systemInfo);
1347
+ } else {
1348
+ systemInfo = defaultSystemInfo;
1349
+ }
1350
+ if (systemInfo.logo) {
1351
+ systemInfo.systemLogo = config.ossServerContext + '/anon/system/file/get/' + systemInfo.logo
1352
+ } else {
1353
+ systemInfo.systemLogo = ''
1354
+ }
1355
+ sessionStorage.setItem('systemLogo', systemInfo.systemLogo)
1356
+ if(systemInfo.favoriteIcon){
1357
+ systemInfo.favoriteIcon = config.ossServerContext + '/anon/system/file/get/' + systemInfo.favoriteIcon
1358
+ sessionStorage.setItem('systemFavoriteIcon', systemInfo.favoriteIcon)
1359
+ let link = document.querySelector("link[rel*='icon']") || document.createElement('link');
1360
+ link.setAttribute('href', systemInfo.favoriteIcon);
1361
+ if (!link.getAttribute('rel')) {
1362
+ link.setAttribute('rel', 'icon');
1363
+ }
1364
+ if (!link.getAttribute('type')) {
1365
+ link.setAttribute('type', 'image/png');
1366
+ }
1367
+ } else if (systemInfo.systemLogo) {
1368
+ let link = document.querySelector("link[rel*='icon']") || document.createElement('link');
1369
+ link.setAttribute('href', systemInfo.systemLogo);
1370
+ if (!link.getAttribute('rel')) {
1371
+ link.setAttribute('rel', 'icon');
1372
+ }
1373
+ if (!link.getAttribute('type')) {
1374
+ link.setAttribute('type', 'image/png');
1375
+ }
1376
+ }
1377
+
1378
+ if (systemInfo.logoWidth) {
1379
+ systemInfo.logoWidth = systemInfo.logoWidth + ''
1380
+ }
1381
+ if (systemInfo.systemName) {
1382
+ document.title = systemInfo.systemName
1383
+ sessionStorage.setItem('systemName', systemInfo.systemName)
1384
+ }
1385
+ if (localStorage.getItem('theme')) {
1386
+ systemInfo.theme = localStorage.getItem('theme')
1387
+ }
1388
+ changeByThemeKey(systemInfo.theme)
1389
+ //禁用快捷键/鼠标右键
1390
+ if (systemInfo.showShortcutKeyConfig === '0'){
1391
+ if(systemInfo.contextmenu === '0'){
1392
+ window.contextMenu = '0'
1393
+ // console.log("systemInfo.contextmenu", systemInfo.contextmenu)
1394
+ disableRightClick();
1395
+ }else{
1396
+ window.contextMenu = '1'
1397
+ }
1398
+
1399
+ // Ctrl+S
1400
+ let shortcutKeyList = [];
1401
+ if (systemInfo.shortcutCtrlS === '0') {
1402
+ shortcutKeyList.push('ctrl+s');
1403
+ }
1404
+ // Ctrl+C
1405
+ if (systemInfo.shortcutCtrlC === '0') {
1406
+ shortcutKeyList.push('ctrl+c');
1407
+ }
1408
+
1409
+ if (shortcutKeyList.length > 0) {
1410
+ window.shortcutKey = '0';
1411
+ // console.log("shortcutKeyList===", shortcutKeyList)
1412
+ disableShortcutKeys(shortcutKeyList);
1413
+ } else {
1414
+ window.shortcutKey = '1';
1415
+ enableShortcutKeys();
1416
+ }
1417
+
1418
+ if(systemInfo.shortcutF12 === '0'){
1419
+ window.shortcutF12 = '0'
1420
+ disableF12();
1421
+ }else{
1422
+ window.shortcutF12 = '1'
1423
+ }
1424
+ if(systemInfo.textSelected === '0'){
1425
+ window.textSelected = '0';
1426
+ disableTextSelection();
1427
+ }else{
1428
+ window.textSelected = '1';
1429
+ }
1430
+ }else {
1431
+ enableRightClick();
1432
+ enableShortcutKeys();
1433
+ enableF12();
1434
+ enableTextSelection();
1435
+ }
1436
+
1437
+ if (localStorage.getItem('themeIdCurrent')) {
1438
+ systemInfo.showTheme = localStorage.getItem('themeIdCurrent')
1439
+ }
1440
+ if (systemInfo.showTheme) {
1441
+ let showTheme = systemInfo.showTheme
1442
+ let split = showTheme.split('-')
1443
+ let systemForm = null
1444
+ let themeId = split[0];
1445
+ let status = split[1];
1446
+ let filterStatus = split[2];
1447
+ if (themeId) {
1448
+ let res = await ajax.get(config.upmsServerContext + '/anon/system/themeInfo?themeId=' + split[0])
1449
+ if (res.data.code == 1) {
1450
+ systemForm = res.data.data[0]
1451
+ if (!status && systemForm.status) {
1452
+ status = systemForm.status;
1453
+ }
1454
+ if (!filterStatus && systemForm.filterStatus) {
1455
+ filterStatus = systemForm.filterStatus;
1456
+ }
1457
+ }
1458
+ }
1459
+ if (systemForm) {
1460
+ changeThemeByThemeId(themeId, status, filterStatus, systemForm)
1461
+ }
1462
+ }
1463
+ if (!systemInfo.rightTopOptButtonList || systemInfo.rightTopOptButtonList.length <= 0) {
1464
+ systemInfo.rightTopOptButtonList = ['collect', 'fullScreen'];
1465
+ }
1466
+ if (!systemInfo.rightTopShowFunList || systemInfo.rightTopShowFunList.length <= 0) {
1467
+ systemInfo.rightTopShowFunList = ['theme', 'personalCenter', 'noticeList', 'logout']
1468
+ }
1469
+ return systemInfo;
1470
+ }
1471
+
1472
+ export const buildHomeConfigs = (settings) => {
1473
+ let result = [];
1474
+ if (settings && settings.length > 0) {
1475
+ let settingMap = {}
1476
+ for (let st of settings) {
1477
+ let key = st.categoryCode;
1478
+ if (!key) {
1479
+ key = "otherCategory";
1480
+ }
1481
+ if (settingMap[key]) {
1482
+ let oldSt = settingMap[key];
1483
+ if (st.permit && oldSt.permit
1484
+ && (st.permit.permissionType > oldSt.permit.permissionType
1485
+ || (st.permit.permissionType == oldSt.permit.permissionType
1486
+ && st.permit.createTime > oldSt.permit.createTime))) {
1487
+ settingMap[key] = st;
1488
+ }
1489
+ } else {
1490
+ settingMap[key] = st;
1491
+ }
1492
+ }
1493
+ if (settingMap['default']) {
1494
+ result.push(settingMap['default']);
1495
+ }
1496
+ for(let key in settingMap) {
1497
+ if (key != 'default') {
1498
+ result.push(settingMap[key])
1499
+ }
1500
+ }
1501
+ }
1502
+ return result;
1503
+ }
1504
+
1505
+ export const getAllElements = ( plist = [], result = []) => {
1506
+ for (let obj of plist) {
1507
+ if (obj.permissionId) {
1508
+ result.push(obj.permissionId);
1509
+ }
1510
+ if (obj.children && obj.children.length > 0) {
1511
+ getAllElements(obj.children, result);
1512
+ }
1513
+ }
1514
+ return result;
1515
+ }