@lambo-design/shared 1.0.0-beta.22 → 1.0.0-beta.221

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