@lambo-design/shared 1.0.0-beta.25 → 1.0.0-beta.250

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 (201) hide show
  1. package/config/config.js +16 -2
  2. package/config/index.js +7 -2
  3. package/config/themes/atrovirens/atrovirens.css +577 -0
  4. package/config/themes/atrovirens/atrovirens.css.map +1 -0
  5. package/config/themes/atrovirens/atrovirens.less +668 -0
  6. package/config/themes/atrovirens/var.less +675 -0
  7. package/config/themes/blue/blue.css +577 -0
  8. package/config/themes/blue/blue.css.map +1 -0
  9. package/config/themes/blue/blue.less +670 -0
  10. package/config/themes/blue/var.less +678 -0
  11. package/config/themes/blue-white/blue-white.css +577 -0
  12. package/config/themes/blue-white/blue-white.css.map +1 -0
  13. package/config/themes/blue-white/blue-white.less +670 -0
  14. package/config/themes/blue-white/var.less +677 -0
  15. package/config/themes/blue-white-tight/blue-white-tight.css +578 -0
  16. package/config/themes/blue-white-tight/blue-white-tight.css.map +1 -0
  17. package/config/themes/blue-white-tight/blue-white-tight.less +672 -0
  18. package/config/themes/blue-white-tight/var.less +678 -0
  19. package/config/themes/danqing/danqing.css +577 -0
  20. package/config/themes/danqing/danqing.css.map +1 -0
  21. package/config/themes/danqing/danqing.less +669 -0
  22. package/config/themes/danqing/danqing.wxss +576 -0
  23. package/config/themes/danqing/var.less +680 -0
  24. package/config/themes/deep/deep.css +577 -0
  25. package/config/themes/deep/deep.css.map +1 -0
  26. package/config/themes/deep/deep.less +670 -0
  27. package/config/themes/deep/var.less +678 -0
  28. package/config/themes/default/default.css +392 -58
  29. package/config/themes/default/default.css.map +1 -1
  30. package/config/themes/default/default.less +368 -16
  31. package/config/themes/default/var.less +376 -12
  32. package/config/themes/eap/eap.css +577 -0
  33. package/config/themes/eap/eap.css.map +1 -0
  34. package/config/themes/eap/eap.less +672 -0
  35. package/config/themes/eap/var.less +678 -0
  36. package/config/themes/gold/gold.css +577 -0
  37. package/config/themes/gold/gold.css.map +1 -0
  38. package/config/themes/gold/gold.less +672 -0
  39. package/config/themes/gold/var.less +370 -6
  40. package/config/themes/index.js +18 -4
  41. package/config/themes/lime/lime.css +577 -0
  42. package/config/themes/lime/lime.css.map +1 -0
  43. package/config/themes/lime/lime.less +672 -0
  44. package/config/themes/lime/var.less +371 -6
  45. package/config/themes/orange/orange.css +342 -8
  46. package/config/themes/orange/orange.css.map +1 -1
  47. package/config/themes/orange/orange.less +352 -0
  48. package/config/themes/orange/var.less +371 -6
  49. package/config/themes/red/red.css +342 -8
  50. package/config/themes/red/red.css.map +1 -1
  51. package/config/themes/red/red.less +352 -0
  52. package/config/themes/red/var.less +370 -6
  53. package/config/themes/theme-atrovirens.js +559 -0
  54. package/config/themes/theme-blue.js +559 -0
  55. package/config/themes/theme-bw.js +559 -0
  56. package/config/themes/theme-bwt.js +561 -0
  57. package/config/themes/theme-danqing.js +559 -0
  58. package/config/themes/theme-deep.js +559 -0
  59. package/config/themes/theme-default.js +366 -60
  60. package/config/themes/theme-eap.js +559 -0
  61. package/config/themes/theme-gold.js +314 -8
  62. package/config/themes/theme-lime.js +314 -8
  63. package/config/themes/theme-orange.js +547 -27
  64. package/config/themes/theme-red.js +551 -32
  65. package/config/themes/theme-white.js +559 -0
  66. package/config/themes/white/var.less +677 -0
  67. package/config/themes/white/white.css +577 -0
  68. package/config/themes/white/white.css.map +1 -0
  69. package/config/themes/white/white.less +670 -0
  70. package/directives/module/print.js +1 -0
  71. package/directives/module/vue-print-nb/README.md +63 -0
  72. package/directives/module/vue-print-nb/print.js +94 -0
  73. package/directives/module/vue-print-nb/printarea.js +532 -0
  74. package/index.js +7 -1
  75. package/nstyles/common.less +197 -0
  76. package/nstyles/components/404.less +46 -0
  77. package/nstyles/components/button.less +34 -0
  78. package/nstyles/components/date-picker.less +37 -0
  79. package/nstyles/components/drawer.less +20 -0
  80. package/nstyles/components/dropdown.less +18 -0
  81. package/nstyles/components/excel-flow.less +72 -0
  82. package/nstyles/components/form.less +313 -0
  83. package/nstyles/components/index.less +23 -0
  84. package/nstyles/components/layout/collect.less +10 -0
  85. package/nstyles/components/layout/detail-view.less +107 -0
  86. package/nstyles/components/layout/full-screen.less +7 -0
  87. package/nstyles/components/layout/index.less +7 -0
  88. package/nstyles/components/layout/other-menu.less +142 -0
  89. package/nstyles/components/layout/page-view.less +101 -0
  90. package/nstyles/components/layout/sider-trigger.less +41 -0
  91. package/nstyles/components/layout/tags-nav.less +113 -0
  92. package/nstyles/components/modal.less +85 -0
  93. package/nstyles/components/n-button.less +131 -0
  94. package/nstyles/components/n-image-preview.less +131 -0
  95. package/nstyles/components/n-model/index.less +19 -0
  96. package/nstyles/components/n-model/report-index.less +43 -0
  97. package/nstyles/components/n-panel.less +41 -0
  98. package/nstyles/components/n-picker.less +37 -0
  99. package/nstyles/components/n-sign.less +17 -0
  100. package/nstyles/components/n-tooltip.less +10 -0
  101. package/nstyles/components/panel.less +31 -0
  102. package/nstyles/components/select.less +3 -0
  103. package/nstyles/components/sign.less +27 -0
  104. package/nstyles/components/table.less +315 -0
  105. package/nstyles/components/tree.less +159 -0
  106. package/nstyles/components/upload.less +164 -0
  107. package/nstyles/index.less +5 -0
  108. package/nstyles/reset.less +65 -0
  109. package/nstyles/third/ag.less +174 -0
  110. package/nstyles/third/icons/sort-desc.svg +1 -0
  111. package/nstyles/third/icons/sort-up.svg +1 -0
  112. package/nstyles/third/icons/sorting.svg +1 -0
  113. package/nstyles/third/index.less +11 -0
  114. package/nstyles/third/view-design.less +367 -0
  115. package/nstyles/variables/base.less +143 -0
  116. package/nstyles/variables/index.less +4 -0
  117. package/nstyles/variables/theme/default/button.less +7 -0
  118. package/nstyles/variables/theme/default/common.less +57 -0
  119. package/nstyles/variables/theme/default/index.less +7 -0
  120. package/nstyles/variables/theme/default/layout.less +40 -0
  121. package/nstyles/variables/theme/default/table.less +37 -0
  122. package/nstyles/variables/theme/default/tag.less +3 -0
  123. package/nstyles/variables/theme/default/upload.less +3 -0
  124. package/nstyles/variables/theme/index.less +13 -0
  125. package/nstyles/variables/theme/lsv/button.less +7 -0
  126. package/nstyles/variables/theme/lsv/common.less +39 -0
  127. package/nstyles/variables/theme/lsv/index.less +5 -0
  128. package/nstyles/variables/theme/lsv/layout.less +21 -0
  129. package/nstyles/variables/theme/lsv/table.less +20 -0
  130. package/nstyles/variables/theme/lsv/tag.less +3 -0
  131. package/nstyles/variables/theme/small/button.less +7 -0
  132. package/nstyles/variables/theme/small/common.less +39 -0
  133. package/nstyles/variables/theme/small/index.less +5 -0
  134. package/nstyles/variables/theme/small/layout.less +21 -0
  135. package/nstyles/variables/theme/small/table.less +17 -0
  136. package/nstyles/variables/theme/small/tag.less +3 -0
  137. package/package.json +27 -7
  138. package/plugin/index.js +12 -0
  139. package/plugin/module/date-format.js +30 -0
  140. package/plugin/module/loading.js +26 -0
  141. package/plugin/module/warn-handler.js +11 -0
  142. package/styles/image/inspur.png +0 -0
  143. package/styles/image/lan_navigator.png +0 -0
  144. package/styles/image/lv_navigator.png +0 -0
  145. package/utils/ajax/content-type.js +30 -0
  146. package/utils/ajax/sseFetchUtil.js +104 -0
  147. package/utils/assist.js +88 -25
  148. package/utils/base64.js +126 -0
  149. package/utils/blob.js +47 -0
  150. package/utils/crypto/index.js +10 -0
  151. package/utils/date.js +334 -305
  152. package/utils/dict/built-in-dict.js +20 -0
  153. package/utils/dict/index.js +168 -0
  154. package/utils/event.js +72 -0
  155. package/utils/excel.js +371 -239
  156. package/utils/file.js +19 -0
  157. package/utils/form/validate.js +29 -0
  158. package/utils/half-year.js +68 -0
  159. package/utils/index.js +37 -0
  160. package/utils/json.js +29 -0
  161. package/utils/lodop.js +5 -0
  162. package/utils/menu/index.js +275 -15
  163. package/utils/mime_type.js +67 -0
  164. package/utils/modelerUtil.js +4 -1
  165. package/utils/n/api.js +22 -0
  166. package/utils/n/date.js +57 -0
  167. package/utils/n/index.js +10 -0
  168. package/utils/n/is-type.js +176 -0
  169. package/utils/n/number.js +144 -0
  170. package/utils/n/permission-cache.js +11 -0
  171. package/utils/n/reuqest/axiosN.js +17 -0
  172. package/utils/n/reuqest/content-type.js +19 -0
  173. package/utils/n/reuqest/interceptors.js +95 -0
  174. package/utils/n/reuqest/url-params.js +12 -0
  175. package/utils/n/storage.js +51 -0
  176. package/utils/n/token.js +51 -0
  177. package/utils/n/user-cache.js +11 -0
  178. package/utils/n/user.js +34 -0
  179. package/utils/n/uuid.js +16 -0
  180. package/utils/n-generator-routers.js +208 -0
  181. package/utils/n-router.js +205 -0
  182. package/utils/n-theme.js +30 -0
  183. package/utils/number.js +72 -15
  184. package/utils/oss.js +57 -0
  185. package/utils/platform.js +804 -23
  186. package/utils/quarter.js +58 -0
  187. package/utils/storage.js +198 -0
  188. package/utils/style.js +24 -0
  189. package/utils/theme.js +98 -3
  190. package/utils/transfer-queue.js +7 -0
  191. package/utils/transform.js +205 -0
  192. package/utils/type.js +102 -0
  193. package/utils/util.js +795 -0
  194. package/utils/vForm.js +349 -0
  195. package/utils/validator.js +181 -0
  196. package/config/themes/gold/default.css +0 -243
  197. package/config/themes/gold/default.css.map +0 -1
  198. package/config/themes/gold/default.less +0 -320
  199. package/config/themes/lime/default.css +0 -243
  200. package/config/themes/lime/default.css.map +0 -1
  201. package/config/themes/lime/default.less +0 -320
package/utils/platform.js CHANGED
@@ -1,7 +1,36 @@
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";
1
7
 
2
- export const TOKEN_KEY = 'v8-token'
8
+ export let TOKEN_KEY = "lambo-token"
3
9
 
4
- export const COOKIE_KEY = 'lambo-sso-key'
10
+ export let getTokenKey = function () {
11
+ if (config.tokenKey) {
12
+ return config.tokenKey
13
+ }
14
+ return "lambo-token"
15
+ }
16
+
17
+ export let COOKIE_KEY = "lambo-sso-key"
18
+
19
+ export let getCookieKey = function () {
20
+ if (config.cookieKey) {
21
+ return config.cookieKey
22
+ }
23
+ return "lambo-sso-key"
24
+ }
25
+
26
+ export let SSO_TOKEN_KEY = "lambo-sso-token"
27
+
28
+ export let getSsoTokenKey = function () {
29
+ if (config.ssoTokenKey) {
30
+ return config.ssoTokenKey
31
+ }
32
+ return "lambo-sso-token"
33
+ }
5
34
 
6
35
  export function objEqual(obj1, obj2) {
7
36
  const keysArr1 = Object.keys(obj1)
@@ -12,6 +41,10 @@ export function objEqual(obj1, obj2) {
12
41
  else return !keysArr1.some(key => obj1[key] !== obj2[key])
13
42
  }
14
43
 
44
+ export function arraysEqual(a, b) {
45
+ return _.isEqual(a,b)
46
+ }
47
+
15
48
  /**
16
49
  * @param {Array} list 标签列表
17
50
  * @param {String} name 当前关闭的标签的name
@@ -30,47 +63,47 @@ export function getNextRoute(list, route) {
30
63
 
31
64
 
32
65
  export const setToken = (token) => {
33
- sessionStorage.setItem(TOKEN_KEY, token)
66
+ typeof sessionStorage != 'undefined' && sessionStorage.setItem(getTokenKey(), token)
34
67
  }
35
68
 
36
69
  export const getToken = () => {
37
- const token = sessionStorage.getItem(TOKEN_KEY)
70
+ const token = typeof sessionStorage != 'undefined' && sessionStorage.getItem(getTokenKey())
38
71
  if (token) return token
39
72
  else return false
40
73
  }
41
74
 
42
75
  export const setSessionStorage = (key, value) => {
43
- sessionStorage.setItem(key, JSON.stringify(value))
76
+ typeof sessionStorage != 'undefined' && sessionStorage.setItem(key, JSON.stringify(value))
44
77
  }
45
78
 
46
79
  export const getSessionStorage = (key) => {
47
- const value = sessionStorage.getItem(key)
80
+ const value = typeof sessionStorage != 'undefined' && sessionStorage.getItem(key)
48
81
  if (value) return JSON.parse(value)
49
82
  else return null
50
83
  }
51
84
 
52
85
  export const removeSessionStorage = (key) => {
53
- return sessionStorage.removeItem(key)
86
+ return typeof sessionStorage != 'undefined' && sessionStorage.removeItem(key)
54
87
  }
55
88
 
56
89
  export const clearSessionStorage = () => {
57
- return sessionStorage.clear()
90
+ return typeof sessionStorage != 'undefined' && sessionStorage.clear()
58
91
  }
59
92
 
60
93
  export const setLocalStorage = (key, localstorage) => {
61
- localStorage.setItem(key, localstorage)
94
+ typeof localStorage != 'undefined' &&localStorage.setItem(key, localstorage)
62
95
  }
63
96
 
64
97
  export const getLocalStorage = (key) => {
65
- return localStorage.getItem(key)
98
+ return typeof localStorage != 'undefined' &&localStorage.getItem(key)
66
99
  }
67
100
 
68
101
  export const removeLocalStorage = (key) => {
69
- return localStorage.removeItem(key)
102
+ return typeof localStorage != 'undefined' &&localStorage.removeItem(key)
70
103
  }
71
104
 
72
105
  export const clearLocalStorage = () => {
73
- return localStorage.clear()
106
+ return typeof localStorage != 'undefined' &&localStorage.clear()
74
107
  }
75
108
 
76
109
  export const hasChild = (item) => {
@@ -314,6 +347,12 @@ export const getTableDataFromArray = (array) => {
314
347
  }
315
348
  }
316
349
 
350
+ /**
351
+ * 寻找上级节点
352
+ * @param ele
353
+ * @param tag
354
+ * @returns {*}
355
+ */
317
356
  export const findNodeUpper = (ele, tag) => {
318
357
  if (ele.parentNode) {
319
358
  if (ele.parentNode.tagName === tag.toUpperCase()) {
@@ -324,6 +363,12 @@ export const findNodeUpper = (ele, tag) => {
324
363
  }
325
364
  }
326
365
 
366
+ /**
367
+ * 根据class寻找上级节点
368
+ * @param ele
369
+ * @param classes
370
+ * @returns {*}
371
+ */
327
372
  export const findNodeUpperByClasses = (ele, classes) => {
328
373
  let parentNode = ele.parentNode
329
374
  if (parentNode) {
@@ -336,6 +381,12 @@ export const findNodeUpperByClasses = (ele, classes) => {
336
381
  }
337
382
  }
338
383
 
384
+ /**
385
+ * 根据ele寻找下级节点
386
+ * @param ele
387
+ * @param tag
388
+ * @returns {*}
389
+ */
339
390
  export const findNodeDownward = (ele, tag) => {
340
391
  const tagName = tag.toUpperCase()
341
392
  if (ele.childNodes.length) {
@@ -349,6 +400,12 @@ export const findNodeDownward = (ele, tag) => {
349
400
  }
350
401
  }
351
402
 
403
+ /**
404
+ * @description 判断要查询的数组是否至少有一个元素包含在目标数组中
405
+ * @param access 需要查询的数组
406
+ * @param canViewAccess 目标数组
407
+ * @returns {*}
408
+ */
352
409
  export const showByAccess = (access, canViewAccess) => {
353
410
  return hasOneOf(canViewAccess, access)
354
411
  }
@@ -378,16 +435,23 @@ export const routeHasExist = (tagNavList, routeItem) => {
378
435
  return res
379
436
  }
380
437
 
381
- // scrollTop animation
438
+ /**
439
+ * scrollTop animation
440
+ * @param el
441
+ * @param from
442
+ * @param to
443
+ * @param duration
444
+ * @param endCallback
445
+ */
382
446
  export const scrollTop = (el, from = 0, to, duration = 500, endCallback) => {
383
447
  if (!window.requestAnimationFrame) {
384
448
  window.requestAnimationFrame = (
385
- window.webkitRequestAnimationFrame ||
386
- window.mozRequestAnimationFrame ||
387
- window.msRequestAnimationFrame ||
388
- function (callback) {
389
- return window.setTimeout(callback, 1000 / 60)
390
- }
449
+ window.webkitRequestAnimationFrame ||
450
+ window.mozRequestAnimationFrame ||
451
+ window.msRequestAnimationFrame ||
452
+ function (callback) {
453
+ return window.setTimeout(callback, 1000 / 60)
454
+ }
391
455
  )
392
456
  }
393
457
  const difference = Math.abs(from - to)
@@ -427,8 +491,16 @@ export const setTitle = (configTitle,routeItem, vm) => {
427
491
  window.document.title = resTitle
428
492
  }
429
493
 
430
- export const getUrlParams = () => {
431
- const url = location.search; //获取url中"?"符后的字串
494
+ /**
495
+ * 获取浏览器地址url中的参数
496
+ * @param url
497
+ * @returns {Object}
498
+ */
499
+ export const getUrlParams = (url) => {
500
+ if (!url){
501
+ url = location.search;
502
+ }
503
+ //const url = location.search; //获取url中"?"符后的字串
432
504
  const theRequest = new Object();
433
505
  if (url.indexOf("?") != -1) {
434
506
  const str = url.substr(1);
@@ -467,6 +539,80 @@ export const getChangeTableDatas = (oldData, newData) => {
467
539
  return list
468
540
  }
469
541
 
542
+ /**
543
+ * 合并数组并去重
544
+ * @param oldRow
545
+ * @param newRow
546
+ * @param key
547
+ * @returns {*[]}
548
+ */
549
+ export const removeDup = (oldRow,newRow,key) => {
550
+ let resultMap = {};
551
+ for(let o of oldRow){
552
+ resultMap[o[key]] = o;
553
+ }
554
+ for (let n of newRow) {
555
+ resultMap[n[key]] = n;
556
+ }
557
+ let result = []
558
+ for (let row in resultMap) {
559
+ result.push(resultMap[row])
560
+ }
561
+ return result;
562
+ }
563
+ /**
564
+ * 获取数组修改的数据
565
+ * @param oldRow
566
+ * @param newRow
567
+ * @param key
568
+ * @returns {{delList: *[], addList: *[]}}
569
+ */
570
+ export const getChangeData = (oldRow,newRow,key) =>{
571
+ let oldMap = {};
572
+ for(let o of oldRow){
573
+ if (key){
574
+ oldMap[o[key]] = o;
575
+ } else {
576
+ oldMap[o] = o;
577
+ }
578
+ }
579
+ let newMap = {}
580
+ for(let n of newRow){
581
+ if (key){
582
+ newMap[n[key]] = n;
583
+ } else {
584
+ newMap[n] = n;
585
+ }
586
+ }
587
+ let addList = []
588
+ for (let n of newRow) {
589
+ if (key){
590
+ if (!oldMap[n[key]]) {
591
+ addList.push(n);
592
+ }
593
+ } else {
594
+ if (!oldMap[n]) {
595
+ addList.push(n);
596
+ }
597
+ }
598
+ }
599
+ let delList = []
600
+ for (let o of oldRow) {
601
+ if (key){
602
+ if (!newMap[o[key]]) {
603
+ delList.push(o);
604
+ }
605
+ } else {
606
+ if (!newMap[o]) {
607
+ delList.push(o);
608
+ }
609
+ }
610
+ }
611
+ return {
612
+ addList,delList
613
+ }
614
+ }
615
+
470
616
  /**
471
617
  * @param {Array} arr1
472
618
  * @param {Array} arr2
@@ -501,6 +647,11 @@ const hasOneOf = (targetarr, arr) => {
501
647
  return targetarr.some(_ => arr.indexOf(_) > -1)
502
648
  }
503
649
 
650
+ /**
651
+ * foreach
652
+ * @param arr
653
+ * @param fn 回调函数,参数接收arr的元素,索引,arr本身
654
+ */
504
655
  const forEach = (arr, fn) => {
505
656
  if (!arr.length || !fn) return
506
657
  let i = -1
@@ -524,9 +675,17 @@ export function oneOf (value, validList) {
524
675
  return false
525
676
  }
526
677
 
678
+ /**
679
+ * recursionKeyFindItem
680
+ * @param arr
681
+ * @param filterKey
682
+ * @param filterValue
683
+ * @param recursionKey
684
+ * @returns {*|null}
685
+ */
527
686
  export const recursionKeyFindItem = (arr, filterKey, filterValue, recursionKey) => {
528
687
  for (const item of arr) {
529
- if (item[filterKey] && item[filterKey] == filterValue) {
688
+ if (item[filterKey] && item[filterKey] == filterValue && item['type'] == 2) {
530
689
  return item;
531
690
  }
532
691
  let result = null;
@@ -540,18 +699,340 @@ export const recursionKeyFindItem = (arr, filterKey, filterValue, recursionKey)
540
699
  return null;
541
700
  };
542
701
 
702
+ /**
703
+ * filterMenuName
704
+ * @param menuList
705
+ * @param name
706
+ * @returns {*|null}
707
+ */
543
708
  export const filterMenuName = (menuList, name) => {
544
709
  return recursionKeyFindItem(menuList, 'name', name, 'children')
545
710
  };
546
711
 
712
+ /**
713
+ * filterMenuUri
714
+ * @param menuList
715
+ * @param name
716
+ * @returns {*|null}
717
+ */
547
718
  export const filterMenuUri = (menuList, name) => {
548
719
  return recursionKeyFindItem(menuList, 'uri', name, 'children')
549
720
  };
550
721
 
722
+ /**
723
+ * tagExists
724
+ * @param taglist
725
+ * @param name
726
+ * @returns {boolean}
727
+ */
551
728
  export const tagExists = (taglist, name) => {
552
729
  return taglist && taglist.filter(item => item.name === name).length > 0;
553
730
  };
554
731
 
732
+ /**
733
+ * 判断菜单是否为新窗口打开
734
+ * @param menu
735
+ */
736
+ export const isOpenBlank = (menu) => {
737
+ let extendProps = {}
738
+ if (menu && menu.meta && menu.meta.data && menu.meta.data.extension) {
739
+ extendProps = JSON.parse(menu.meta.data.extension)
740
+ }
741
+ if (menu && menu.extension) {
742
+ extendProps = JSON.parse(menu.extension)
743
+ }
744
+ if (extendProps && extendProps.target_type && extendProps.target_type == 'blank') {
745
+ return true;
746
+ }
747
+ if (extendProps && extendProps.targetType && extendProps.targetType == 'blank') {
748
+ return true;
749
+ }
750
+ return false;
751
+ }
752
+
753
+ /**
754
+ * 判断应用是否为移动应用
755
+ * @param menu
756
+ */
757
+ export const isMobileApp = (app) => {
758
+ try{
759
+ let extendProps = {};
760
+ if (app.extendProps) {
761
+ if (typeof app.extendProps == 'string') {
762
+ extendProps = JSON.parse(app.extendProps);
763
+ } else {
764
+ extendProps = app.extendProps;
765
+ }
766
+ }
767
+ if (app.setting) {
768
+ if (typeof app.setting == 'string') {
769
+ extendProps = JSON.parse(app.setting);
770
+ } else {
771
+ extendProps = app.setting;
772
+ }
773
+ }
774
+ if (extendProps && extendProps.is_mobile_app && extendProps.is_mobile_app == '1') {
775
+ return true;
776
+ }
777
+ }catch (e) {
778
+ console.error(e)
779
+ }
780
+ return false;
781
+ }
782
+
783
+ /**
784
+ * 获取pc应用列表
785
+ * @param appList
786
+ * @returns {*[]}
787
+ */
788
+ export const getPCAppList = (appList,filterCenter = false) => {
789
+ let finalList = []
790
+ if(appList) {
791
+ for (let app of appList) {
792
+ if ((!isMobileApp(app) && filterCenter && isCenterApp(app))
793
+ || (!isMobileApp(app) && !filterCenter)) {
794
+ finalList.push(app);
795
+ }
796
+ }
797
+ }
798
+ return finalList;
799
+ }
800
+
801
+ /**
802
+ * 获取移动应用列表
803
+ * @param appList
804
+ * @returns {*[]}
805
+ */
806
+ export const getMobileAppList = (appList,filterCenter= false) => {
807
+ let finalList = []
808
+ if(appList) {
809
+ for (let app of appList) {
810
+ if ((isMobileApp(app) && filterCenter && isCenterApp(app))
811
+ || (isMobileApp(app) && !filterCenter)) {
812
+ finalList.push(app);
813
+ }
814
+ }
815
+ }
816
+ return finalList;
817
+ }
818
+ /**
819
+ * 判断应用是否门户应用
820
+ * @param menu
821
+ */
822
+ export const isCenterApp = (app) => {
823
+ try{
824
+ let extendProps = {};
825
+ if (app.extendProps) {
826
+ if (typeof app.extendProps == 'string') {
827
+ extendProps = JSON.parse(app.extendProps);
828
+ } else {
829
+ extendProps = app.extendProps;
830
+ }
831
+ }
832
+ if (app.setting) {
833
+ if (typeof app.setting == 'string') {
834
+ extendProps = JSON.parse(app.setting);
835
+ } else {
836
+ extendProps = app.setting;
837
+ }
838
+ }
839
+ if (extendProps && extendProps.is_center_app && extendProps.is_center_app == '1') {
840
+ return true;
841
+ }
842
+ }catch (e) {
843
+ console.error(e);
844
+ }
845
+ return false;
846
+ }
847
+
848
+ /**
849
+ * 获取一级菜单作为顶级导航
850
+ * @param permissionList
851
+ * @param appType
852
+ * @returns {*[]}
853
+ */
854
+ export const buildNavListByMenu = (permissionList,appInfo,appType,defaultHideName = '') => {
855
+ let navList = []
856
+ if (permissionList && appInfo && appInfo.appId) {
857
+ let permissions = permissionList.filter(item => item.hasOwnProperty('pid')
858
+ && item.pid == '0' && item.appId == appInfo.appId && item.name != defaultHideName)
859
+ for (let per of permissions) {
860
+ if (appType && appType == 'sc') {
861
+ let nav = {
862
+ "data" : deepCopy(per),
863
+ "appInfo" : deepCopy(appInfo),
864
+ "orderNo": per.orders,
865
+ "application": {
866
+ "extendProps": per.extension ? JSON.parse(per.extension) : "",
867
+ "appId": per.permissionId,
868
+ "appBizCode": per.permissionValue,
869
+ "appName": per.title,
870
+ "appDesc": per.description,
871
+ "appUrl": appInfo.basepath,
872
+ "icon": per.icon,
873
+ "appStatus": 1,
874
+ "manageUnitId": "",
875
+ "protocolType": null,
876
+ "grantTypes": null,
877
+ "logoutUrl": null,
878
+ "redirectUrls": null,
879
+ "codeExpiresIn": null,
880
+ "idTokenExpiresIn": null,
881
+ "accessTokenExpiresIn": null,
882
+ "clientId": "",
883
+ "clientSecret": "",
884
+ "isEnableSso": false,
885
+ "isShare": false,
886
+ "referAppId": null,
887
+ "externalId": null,
888
+ "callerAppId": null,
889
+ "orderNo": 1,
890
+ "parentId": null,
891
+ "appType": null,
892
+ "relativeName": null,
893
+ "shortName": null,
894
+ "authType": "1",
895
+ "isLower": null
896
+ },
897
+ "basepath": appInfo.basepath,
898
+ "appId": per.permissionId,
899
+ "icon": per.icon,
900
+ "name": per.name,
901
+ "extendProps": per.extension ? JSON.parse(per.extension) : "",
902
+ "title": per.title,
903
+ "type": "00",
904
+ "status": 1
905
+ }
906
+ navList.push(nav)
907
+ } else {
908
+ let nav = {
909
+ "data" : deepCopy(per),
910
+ "appInfo" : deepCopy(appInfo),
911
+ "id": per.id,
912
+ "appId": per.permissionId,
913
+ "systemId": per.systemId,
914
+ "icon": per.icon,
915
+ "banner": null,
916
+ "theme": null,
917
+ "basepath": appInfo.basepath,
918
+ "status": 1,
919
+ "name": per.name,
920
+ "title": per.title,
921
+ "type": "00",
922
+ "setting": "",
923
+ "description": per.description,
924
+ "orders": per.orders,
925
+ "createTime": 1710772466000,
926
+ "updateTime": 1710772466000
927
+ }
928
+ navList.push(nav)
929
+ }
930
+ }
931
+ }
932
+ return navList;
933
+ }
934
+
935
+ /**
936
+ * 判断是否为子菜单
937
+ * @param permissionList
938
+ * @param pid
939
+ * @param per
940
+ * @returns {boolean|boolean|*}
941
+ */
942
+ export const isChildPermission = (permissionList, pid, per) => {
943
+ if (permissionList && pid && per && per.pid) {
944
+ let res = permissionList.find(item => item.hasOwnProperty('permissionId') && item.permissionId == per.pid)
945
+ if (res && res.permissionId && res.permissionId == pid) {
946
+ return true;
947
+ } else {
948
+ return isChildPermission(permissionList, pid, res)
949
+ }
950
+ }
951
+ return false;
952
+ }
953
+ /**
954
+ * 获取所有子菜单
955
+ * @param permissionList
956
+ * @param pid
957
+ */
958
+ export const getChildPermissions = (permissionList, pid, appInfo) => {
959
+ let res = []
960
+ if (permissionList && pid) {
961
+ for (let permission of permissionList) {
962
+ if (isChildPermission(permissionList, pid, permission)) {
963
+ let per2 = deepCopy(permission);
964
+ per2.appId = pid;
965
+ if (per2.pid == pid) {
966
+ per2.pid = "0";
967
+ }
968
+ per2.appInfo = deepCopy(appInfo)
969
+ res.push(per2);
970
+ }
971
+ }
972
+ }
973
+ return res;
974
+ }
975
+ /**
976
+ * 恢复权限的原始信息
977
+ * @param permission
978
+ */
979
+ export const getOriginalPermission = (permission) => {
980
+ if (permission && permission.meta && permission.meta.data && permission.meta.data.appInfo) {
981
+ let per2 = deepCopy(permission);
982
+ if (per2.hasOwnProperty('pid') && per2.pid == '0') {
983
+ per2.pid = per2.meta.data.appId;
984
+ per2.meta.data.pid = per2.meta.data.appId;
985
+ }
986
+ per2.meta.appId = permission.meta.data.appInfo.appId;
987
+ per2.meta.data.appId = permission.meta.data.appInfo.appId;
988
+ return per2;
989
+ }
990
+ return permission
991
+ }
992
+
993
+ /**
994
+ * 单应用时修改源权限信息
995
+ * @param permissionList
996
+ * @param menu
997
+ * @param appInfo
998
+ * @returns {*}
999
+ */
1000
+ export const buildSinglePermission = (permissionList, menu) => {
1001
+ let permission = permissionList.find(item => item.permissionId == menu.permissionId && item.appId == menu.appId)
1002
+ let rootPermission = getRootPermission(permissionList, permission)
1003
+ if (rootPermission && rootPermission.permissionId) {
1004
+ menu.appInfo = {
1005
+ appId: menu.appId
1006
+ }
1007
+ menu.appId = rootPermission.permissionId;
1008
+ }
1009
+ return menu;
1010
+ }
1011
+ /**
1012
+ * 获取菜单根节点
1013
+ * @param permissionList
1014
+ * @param permission
1015
+ * @returns {*|{pid}|{}}
1016
+ */
1017
+ export const getRootPermission = (permissionList, permission) => {
1018
+ if (permissionList, permission) {
1019
+ if (!permission.hasOwnProperty('pid')) {
1020
+ return permission
1021
+ } else if (permission.pid == '0') {
1022
+ return permission
1023
+ } else {
1024
+ let parentPermission = permissionList.find(item => item.permissionId == permission.pid && item.appId == permission.appId)
1025
+ return getRootPermission(permissionList, parentPermission);
1026
+ }
1027
+ }
1028
+ return permission;
1029
+ }
1030
+ /**
1031
+ * getPreviousTagIndex
1032
+ * @param tagList
1033
+ * @param name
1034
+ * @returns {number}
1035
+ */
555
1036
  export const getPreviousTagIndex = (tagList, name) => {
556
1037
  let count = 0;
557
1038
  if (tagList && name) {
@@ -569,6 +1050,12 @@ export const getPreviousTagIndex = (tagList, name) => {
569
1050
  return count;
570
1051
  };
571
1052
 
1053
+ /**
1054
+ * getDelTagIndex
1055
+ * @param tagList
1056
+ * @param name
1057
+ * @returns {number}
1058
+ */
572
1059
  export const getDelTagIndex = (tagList, name) => {
573
1060
  let count = 1;
574
1061
  if (tagList && name) {
@@ -580,4 +1067,298 @@ export const getDelTagIndex = (tagList, name) => {
580
1067
  }
581
1068
  }
582
1069
  return count;
583
- }
1070
+ }
1071
+
1072
+ /**
1073
+ * turnToPage
1074
+ * @param vm
1075
+ * @param name
1076
+ * @param url
1077
+ */
1078
+ export const turnToPage = (vm, name ,url, forceLocation = false) =>{
1079
+ if (window.top && window.top.location.href != window.location.href) {
1080
+ typeof sessionStorage != 'undefined' && sessionStorage.removeItem('activeName')
1081
+ window.top.location.href = url;
1082
+ } else if (forceLocation){
1083
+ typeof sessionStorage != 'undefined' && sessionStorage.removeItem('activeName')
1084
+ if (window.top){
1085
+ window.top.location.href = url;
1086
+ } else {
1087
+ window.location.href = url;
1088
+ }
1089
+ } else if (vm && vm.$router){
1090
+ vm.$router.push({
1091
+ name: name
1092
+ })
1093
+ } else {
1094
+ window.location.href = url;
1095
+ }
1096
+ }
1097
+
1098
+
1099
+ /**
1100
+ * 获取上级节点的方法
1101
+ * @param vm
1102
+ * @param methodName
1103
+ * @returns {*}
1104
+ */
1105
+ export const getParentMethod = (vm,methodName) => {
1106
+ if (vm.$parent) {
1107
+ if (vm.$parent[methodName]) {
1108
+ return vm.$parent[methodName];
1109
+ } else {
1110
+ return getParentMethod(vm.$parent,methodName)
1111
+ }
1112
+ }
1113
+ return undefined;
1114
+ }
1115
+
1116
+ /**
1117
+ * 执行全屏操作
1118
+ * @param vm
1119
+ */
1120
+ export const doParentMethod = (vm,methodName) => {
1121
+ let action = getParentMethod(vm,methodName)
1122
+ if (action) {
1123
+ action()
1124
+ }
1125
+ }
1126
+ /**
1127
+ * 替换url中的指定参数
1128
+ * @param url
1129
+ * @param paramName
1130
+ * @param paramValue
1131
+ * @returns {string}
1132
+ */
1133
+ export const replaceUrlParam = (url, paramName, paramValue) => {
1134
+ let pattern = new RegExp('(' + paramName + '=)([^&]+)', 'i');
1135
+ let queryString = url.split('?')[1];
1136
+ if (queryString) {
1137
+ let newParam = paramName + '=' + encodeURIComponent(paramValue);
1138
+ let newQueryString = queryString.replace(pattern, newParam);
1139
+ return url.split('?')[0] + '?' + newQueryString;
1140
+ } else {
1141
+ return url + '?' + paramName + '=' + encodeURIComponent(paramValue);
1142
+ }
1143
+ }
1144
+ /**
1145
+ * 拼接url
1146
+ * @param href
1147
+ * @param key
1148
+ * @param value
1149
+ * @returns {string}
1150
+ */
1151
+ export const buildParams = (href, key, value) =>{
1152
+ if (href && key && value) {
1153
+ if (!href.includes(key + '=')) {
1154
+ if (href.includes('?')) {
1155
+ href += '&' + key + '=' + value
1156
+ } else {
1157
+ href += '?' + key + '=' + value
1158
+ }
1159
+ } else {
1160
+ href = this.replaceUrlParam(href,key,value)
1161
+ }
1162
+ return href;
1163
+ }
1164
+ return '';
1165
+ }
1166
+ /**
1167
+ * 组装菜单url
1168
+ * @param item
1169
+ * @param ssoToken
1170
+ * @param ssoid
1171
+ * @returns {string}
1172
+ */
1173
+ export const buildMenuUri = (item,ssoToken,ssoid) => {
1174
+ if (!item.uri) {
1175
+ return ''
1176
+ }
1177
+ let href = ''
1178
+ let uri = item.uri
1179
+ if (uri.startsWith('http')) {
1180
+ href = uri
1181
+ } else {
1182
+ let basepath = ''
1183
+ if (item.navList) {
1184
+ let navList = deepCopy(item.navList);
1185
+ let appId = '';
1186
+ if (item.appId) {
1187
+ appId = item.appId;
1188
+ } else if (item.meta && item.meta.appId) {
1189
+ appId = item.meta.appId;
1190
+ }
1191
+ let appInfo = navList.find(app => app.appId === appId)
1192
+ if (appInfo && appInfo.basepath) {
1193
+ basepath = appInfo.basepath
1194
+ }
1195
+ }
1196
+ if (!basepath.startsWith('/') && !basepath.startsWith('http')) {
1197
+ basepath = '/' + basepath
1198
+ }
1199
+ if (basepath.endsWith('/')) {
1200
+ basepath = basepath.substring(0, basepath.length - 1)
1201
+ }
1202
+ if (!uri.startsWith('/')) {
1203
+ uri = '/' + uri
1204
+ }
1205
+ href = basepath + uri
1206
+ }
1207
+ href = buildParams(href,"layout","screen");
1208
+ if (ssoToken) {
1209
+ href = buildParams(href,"token",ssoToken);
1210
+ }
1211
+ if (ssoid) {
1212
+ href = buildParams(href,"ssoid",ssoid);
1213
+ }
1214
+ if (item.cts) {
1215
+ href = buildParams(href,"cts",item.cts);
1216
+ }
1217
+ return href
1218
+ }
1219
+ /**
1220
+ * 给query添加时间戳
1221
+ */
1222
+ export const addTimestamp = ($route) => {
1223
+ let query = {};
1224
+ if ($route.query) {
1225
+ query = $route.query;
1226
+ }
1227
+ query = Object.assign({},query,{cts:new Date().getTime()})
1228
+ $route.query = query;
1229
+ return $route;
1230
+ }
1231
+ /**
1232
+ * 根据配置信息修改系统信息
1233
+ * @param systemInfo
1234
+ */
1235
+ export const changeSystemInfo = async (systemInfo) => {
1236
+ let defaultSystemInfo = {
1237
+ layoutSize: 'small',
1238
+ systemLogo: systemLogo,
1239
+ logoWidth: '150px',
1240
+ systemName: sessionStorage.getItem('systemName') ? sessionStorage.getItem('systemName') : config.title,
1241
+ nameSize: 1,
1242
+ navType: 'dropdown',
1243
+ rightTopOptButtonList: ['collect', 'fullScreen'],
1244
+ rightTopShowFunList: ['theme', 'personalCenter', 'noticeList', 'logout'],
1245
+ menuLogo: '1',
1246
+ titleShow: 'wrap',
1247
+ menuScaling: '1',
1248
+ footerInfo: 'Copyright © 2021 浪潮数字商业科技有限公司 版权所有<br> 辽ICP备11001865号-3',
1249
+ showTheme: '',
1250
+ theme: 'default',
1251
+ tabNum: 5,
1252
+ topMenu: 4,
1253
+ };
1254
+ if (systemInfo) {
1255
+ systemInfo = Object.assign(defaultSystemInfo, systemInfo);
1256
+ } else {
1257
+ systemInfo = defaultSystemInfo;
1258
+ }
1259
+ if (systemInfo.logo) {
1260
+ systemInfo.systemLogo = config.ossServerContext + '/anon/system/file/get/' + systemInfo.logo
1261
+ } else {
1262
+ systemInfo.systemLogo = ''
1263
+ }
1264
+ sessionStorage.setItem('systemLogo', systemInfo.systemLogo)
1265
+ if (systemInfo.systemLogo) {
1266
+ let link = document.querySelector("link[rel*='icon']") || document.createElement('link');
1267
+ link.setAttribute('href', systemInfo.systemLogo);
1268
+ if (!link.getAttribute('rel')) {
1269
+ link.setAttribute('rel', 'icon');
1270
+ }
1271
+ if (!link.getAttribute('type')) {
1272
+ link.setAttribute('type', 'image/png');
1273
+ }
1274
+ }
1275
+ if (systemInfo.logoWidth) {
1276
+ systemInfo.logoWidth = systemInfo.logoWidth + ''
1277
+ }
1278
+ if (systemInfo.systemName) {
1279
+ document.title = systemInfo.systemName
1280
+ sessionStorage.setItem('systemName', systemInfo.systemName)
1281
+ }
1282
+ if (localStorage.getItem('theme')) {
1283
+ systemInfo.theme = localStorage.getItem('theme')
1284
+ }
1285
+ changeByThemeKey(systemInfo.theme)
1286
+ if (localStorage.getItem('themeIdCurrent')) {
1287
+ systemInfo.showTheme = localStorage.getItem('themeIdCurrent')
1288
+ }
1289
+ if (systemInfo.showTheme) {
1290
+ let showTheme = systemInfo.showTheme
1291
+ let split = showTheme.split('-')
1292
+ let systemForm = null
1293
+ let themeId = split[0];
1294
+ let status = split[1];
1295
+ let filterStatus = split[2];
1296
+ if (themeId) {
1297
+ let res = await ajax.get(config.upmsServerContext + '/anon/system/themeInfo?themeId=' + split[0])
1298
+ if (res.data.code == 1) {
1299
+ systemForm = res.data.data[0]
1300
+ if (!status && systemForm.status) {
1301
+ status = systemForm.status;
1302
+ }
1303
+ if (!filterStatus && systemForm.filterStatus) {
1304
+ filterStatus = systemForm.filterStatus;
1305
+ }
1306
+ }
1307
+ }
1308
+ if (systemForm) {
1309
+ changeThemeByThemeId(themeId, status, filterStatus, systemForm)
1310
+ }
1311
+ }
1312
+ if (!systemInfo.rightTopOptButtonList || systemInfo.rightTopOptButtonList.length <= 0) {
1313
+ systemInfo.rightTopOptButtonList = ['collect', 'fullScreen'];
1314
+ }
1315
+ if (!systemInfo.rightTopShowFunList || systemInfo.rightTopShowFunList.length <= 0) {
1316
+ systemInfo.rightTopShowFunList = ['theme', 'personalCenter', 'noticeList', 'logout']
1317
+ }
1318
+ return systemInfo;
1319
+ }
1320
+
1321
+ export const buildHomeConfigs = (settings) => {
1322
+ let result = [];
1323
+ if (settings && settings.length > 0) {
1324
+ let settingMap = {}
1325
+ for (let st of settings) {
1326
+ let key = st.categoryCode;
1327
+ if (!key) {
1328
+ key = "otherCategory";
1329
+ }
1330
+ if (settingMap[key]) {
1331
+ let oldSt = settingMap[key];
1332
+ if (st.permit && oldSt.permit
1333
+ && (st.permit.permissionType > oldSt.permit.permissionType
1334
+ || (st.permit.permissionType == oldSt.permit.permissionType
1335
+ && st.permit.createTime > oldSt.permit.createTime))) {
1336
+ settingMap[key] = st;
1337
+ }
1338
+ } else {
1339
+ settingMap[key] = st;
1340
+ }
1341
+ }
1342
+ if (settingMap['default']) {
1343
+ result.push(settingMap['default']);
1344
+ }
1345
+ for(let key in settingMap) {
1346
+ if (key != 'default') {
1347
+ result.push(settingMap[key])
1348
+ }
1349
+ }
1350
+ }
1351
+ return result;
1352
+ }
1353
+
1354
+ export const getAllElements = ( plist = [], result = []) => {
1355
+ for (let obj of plist) {
1356
+ if (obj.permissionId) {
1357
+ result.push(obj.permissionId);
1358
+ }
1359
+ if (obj.children && obj.children.length > 0) {
1360
+ getAllElements(obj.children, result);
1361
+ }
1362
+ }
1363
+ return result;
1364
+ }