@lambo-design/shared 1.0.0-beta.23 → 1.0.0-beta.232

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 (190) hide show
  1. package/config/config.js +16 -2
  2. package/config/index.js +7 -2
  3. package/config/themes/atrovirens/atrovirens.css +576 -0
  4. package/config/themes/atrovirens/atrovirens.css.map +1 -0
  5. package/config/themes/atrovirens/atrovirens.less +667 -0
  6. package/config/themes/atrovirens/var.less +674 -0
  7. package/config/themes/blue/blue.css +576 -0
  8. package/config/themes/blue/blue.css.map +1 -0
  9. package/config/themes/blue/blue.less +669 -0
  10. package/config/themes/blue/var.less +677 -0
  11. package/config/themes/blue-white/blue-white.css +576 -0
  12. package/config/themes/blue-white/blue-white.css.map +1 -0
  13. package/config/themes/blue-white/blue-white.less +669 -0
  14. package/config/themes/blue-white/var.less +676 -0
  15. package/config/themes/blue-white-tight/blue-white-tight.css +577 -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 +677 -0
  19. package/config/themes/danqing/danqing.css +576 -0
  20. package/config/themes/danqing/danqing.css.map +1 -0
  21. package/config/themes/danqing/danqing.less +668 -0
  22. package/config/themes/danqing/danqing.wxss +572 -0
  23. package/config/themes/danqing/var.less +679 -0
  24. package/config/themes/deep/deep.css +576 -0
  25. package/config/themes/deep/deep.css.map +1 -0
  26. package/config/themes/deep/deep.less +669 -0
  27. package/config/themes/deep/var.less +677 -0
  28. package/config/themes/default/default.css +392 -57
  29. package/config/themes/default/default.css.map +1 -0
  30. package/config/themes/default/default.less +440 -88
  31. package/config/themes/default/var.less +375 -12
  32. package/config/themes/eap/eap.css +576 -0
  33. package/config/themes/eap/eap.css.map +1 -0
  34. package/config/themes/eap/eap.less +671 -0
  35. package/config/themes/eap/var.less +677 -0
  36. package/config/themes/gold/gold.css +576 -0
  37. package/config/themes/gold/gold.css.map +1 -0
  38. package/config/themes/gold/gold.less +671 -0
  39. package/config/themes/gold/var.less +370 -7
  40. package/config/themes/index.js +18 -4
  41. package/config/themes/lime/lime.css +576 -0
  42. package/config/themes/lime/lime.css.map +1 -0
  43. package/config/themes/lime/lime.less +671 -0
  44. package/config/themes/lime/var.less +371 -7
  45. package/config/themes/orange/orange.css +576 -0
  46. package/config/themes/orange/orange.css.map +1 -0
  47. package/config/themes/orange/orange.less +671 -0
  48. package/config/themes/orange/var.less +678 -0
  49. package/config/themes/red/red.css +576 -0
  50. package/config/themes/red/red.css.map +1 -0
  51. package/config/themes/red/red.less +671 -0
  52. package/config/themes/red/var.less +677 -0
  53. package/config/themes/theme-atrovirens.js +558 -0
  54. package/config/themes/theme-blue.js +558 -0
  55. package/config/themes/theme-bw.js +558 -0
  56. package/config/themes/theme-bwt.js +559 -0
  57. package/config/themes/theme-danqing.js +558 -0
  58. package/config/themes/theme-deep.js +558 -0
  59. package/config/themes/theme-default.js +365 -59
  60. package/config/themes/theme-eap.js +558 -0
  61. package/config/themes/theme-gold.js +317 -11
  62. package/config/themes/theme-lime.js +317 -11
  63. package/config/themes/theme-orange.js +546 -27
  64. package/config/themes/theme-red.js +550 -32
  65. package/config/themes/theme-white.js +558 -0
  66. package/config/themes/white/var.less +676 -0
  67. package/config/themes/white/white.css +576 -0
  68. package/config/themes/white/white.css.map +1 -0
  69. package/config/themes/white/white.less +669 -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 +303 -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/small/button.less +7 -0
  126. package/nstyles/variables/theme/small/common.less +39 -0
  127. package/nstyles/variables/theme/small/index.less +5 -0
  128. package/nstyles/variables/theme/small/layout.less +21 -0
  129. package/nstyles/variables/theme/small/table.less +17 -0
  130. package/nstyles/variables/theme/small/tag.less +3 -0
  131. package/package.json +27 -7
  132. package/plugin/index.js +12 -0
  133. package/plugin/module/date-format.js +30 -0
  134. package/plugin/module/loading.js +26 -0
  135. package/plugin/module/warn-handler.js +11 -0
  136. package/styles/image/inspur.png +0 -0
  137. package/styles/image/lan_navigator.png +0 -0
  138. package/styles/image/lv_navigator.png +0 -0
  139. package/utils/ajax/content-type.js +30 -0
  140. package/utils/assist.js +88 -25
  141. package/utils/base64.js +126 -0
  142. package/utils/blob.js +47 -0
  143. package/utils/crypto/index.js +10 -0
  144. package/utils/date.js +334 -305
  145. package/utils/dict/built-in-dict.js +20 -0
  146. package/utils/dict/index.js +168 -0
  147. package/utils/event.js +72 -0
  148. package/utils/excel.js +371 -239
  149. package/utils/file.js +19 -0
  150. package/utils/form/validate.js +29 -0
  151. package/utils/half-year.js +68 -0
  152. package/utils/index.js +37 -0
  153. package/utils/json.js +29 -0
  154. package/utils/lodop.js +5 -0
  155. package/utils/menu/index.js +273 -14
  156. package/utils/mime_type.js +67 -0
  157. package/utils/modelerUtil.js +4 -1
  158. package/utils/n/api.js +22 -0
  159. package/utils/n/date.js +57 -0
  160. package/utils/n/index.js +10 -0
  161. package/utils/n/is-type.js +176 -0
  162. package/utils/n/number.js +144 -0
  163. package/utils/n/permission-cache.js +11 -0
  164. package/utils/n/reuqest/axiosN.js +17 -0
  165. package/utils/n/reuqest/content-type.js +19 -0
  166. package/utils/n/reuqest/interceptors.js +95 -0
  167. package/utils/n/reuqest/url-params.js +12 -0
  168. package/utils/n/storage.js +51 -0
  169. package/utils/n/token.js +51 -0
  170. package/utils/n/user-cache.js +11 -0
  171. package/utils/n/user.js +34 -0
  172. package/utils/n/uuid.js +16 -0
  173. package/utils/n-generator-routers.js +208 -0
  174. package/utils/n-router.js +205 -0
  175. package/utils/n-theme.js +30 -0
  176. package/utils/number.js +72 -15
  177. package/utils/oss.js +57 -0
  178. package/utils/platform.js +761 -22
  179. package/utils/quarter.js +58 -0
  180. package/utils/storage.js +198 -0
  181. package/utils/style.js +24 -0
  182. package/utils/theme.js +98 -3
  183. package/utils/transfer-queue.js +7 -0
  184. package/utils/type.js +102 -0
  185. package/utils/util.js +795 -0
  186. package/utils/validator.js +181 -0
  187. package/config/themes/gold/default.css +0 -241
  188. package/config/themes/gold/default.less +0 -319
  189. package/config/themes/lime/default.css +0 -241
  190. 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,340 @@ 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,defaultHideName = '') => {
834
+ let navList = []
835
+ if (permissionList && appInfo && appInfo.appId) {
836
+ let permissions = permissionList.filter(item => item.hasOwnProperty('pid')
837
+ && item.pid == '0' && item.appId == appInfo.appId && item.name != defaultHideName)
838
+ for (let per of permissions) {
839
+ if (appType && appType == 'sc') {
840
+ let nav = {
841
+ "data" : deepCopy(per),
842
+ "appInfo" : deepCopy(appInfo),
843
+ "orderNo": per.orders,
844
+ "application": {
845
+ "extendProps": per.extension ? JSON.parse(per.extension) : "",
846
+ "appId": per.permissionId,
847
+ "appBizCode": per.permissionValue,
848
+ "appName": per.title,
849
+ "appDesc": per.description,
850
+ "appUrl": appInfo.basepath,
851
+ "icon": per.icon,
852
+ "appStatus": 1,
853
+ "manageUnitId": "",
854
+ "protocolType": null,
855
+ "grantTypes": null,
856
+ "logoutUrl": null,
857
+ "redirectUrls": null,
858
+ "codeExpiresIn": null,
859
+ "idTokenExpiresIn": null,
860
+ "accessTokenExpiresIn": null,
861
+ "clientId": "",
862
+ "clientSecret": "",
863
+ "isEnableSso": false,
864
+ "isShare": false,
865
+ "referAppId": null,
866
+ "externalId": null,
867
+ "callerAppId": null,
868
+ "orderNo": 1,
869
+ "parentId": null,
870
+ "appType": null,
871
+ "relativeName": null,
872
+ "shortName": null,
873
+ "authType": "1",
874
+ "isLower": null
875
+ },
876
+ "basepath": appInfo.basepath,
877
+ "appId": per.permissionId,
878
+ "icon": per.icon,
879
+ "name": per.name,
880
+ "extendProps": per.extension ? JSON.parse(per.extension) : "",
881
+ "title": per.title,
882
+ "type": "00",
883
+ "status": 1
884
+ }
885
+ navList.push(nav)
886
+ } else {
887
+ let nav = {
888
+ "data" : deepCopy(per),
889
+ "appInfo" : deepCopy(appInfo),
890
+ "id": per.id,
891
+ "appId": per.permissionId,
892
+ "systemId": per.systemId,
893
+ "icon": per.icon,
894
+ "banner": null,
895
+ "theme": null,
896
+ "basepath": appInfo.basepath,
897
+ "status": 1,
898
+ "name": per.name,
899
+ "title": per.title,
900
+ "type": "00",
901
+ "setting": "",
902
+ "description": per.description,
903
+ "orders": per.orders,
904
+ "createTime": 1710772466000,
905
+ "updateTime": 1710772466000
906
+ }
907
+ navList.push(nav)
908
+ }
909
+ }
910
+ }
911
+ return navList;
912
+ }
913
+
914
+ /**
915
+ * 判断是否为子菜单
916
+ * @param permissionList
917
+ * @param pid
918
+ * @param per
919
+ * @returns {boolean|boolean|*}
920
+ */
921
+ export const isChildPermission = (permissionList, pid, per) => {
922
+ if (permissionList && pid && per && per.pid) {
923
+ let res = permissionList.find(item => item.hasOwnProperty('permissionId') && item.permissionId == per.pid)
924
+ if (res && res.permissionId && res.permissionId == pid) {
925
+ return true;
926
+ } else {
927
+ return isChildPermission(permissionList, pid, res)
928
+ }
929
+ }
930
+ return false;
931
+ }
932
+ /**
933
+ * 获取所有子菜单
934
+ * @param permissionList
935
+ * @param pid
936
+ */
937
+ export const getChildPermissions = (permissionList, pid, appInfo) => {
938
+ let res = []
939
+ if (permissionList && pid) {
940
+ for (let permission of permissionList) {
941
+ if (isChildPermission(permissionList, pid, permission)) {
942
+ let per2 = deepCopy(permission);
943
+ per2.appId = pid;
944
+ if (per2.pid == pid) {
945
+ per2.pid = "0";
946
+ }
947
+ per2.appInfo = deepCopy(appInfo)
948
+ res.push(per2);
949
+ }
950
+ }
951
+ }
952
+ return res;
953
+ }
954
+ /**
955
+ * 恢复权限的原始信息
956
+ * @param permission
957
+ */
958
+ export const getOriginalPermission = (permission) => {
959
+ if (permission && permission.meta && permission.meta.data && permission.meta.data.appInfo) {
960
+ let per2 = deepCopy(permission);
961
+ if (per2.hasOwnProperty('pid') && per2.pid == '0') {
962
+ per2.pid = per2.meta.data.appId;
963
+ per2.meta.data.pid = per2.meta.data.appId;
964
+ }
965
+ per2.meta.appId = permission.meta.data.appInfo.appId;
966
+ per2.meta.data.appId = permission.meta.data.appInfo.appId;
967
+ return per2;
968
+ }
969
+ return permission
970
+ }
971
+
972
+ /**
973
+ * 单应用时修改源权限信息
974
+ * @param permissionList
975
+ * @param menu
976
+ * @param appInfo
977
+ * @returns {*}
978
+ */
979
+ export const buildSinglePermission = (permissionList, menu) => {
980
+ let permission = permissionList.find(item => item.permissionId == menu.permissionId && item.appId == menu.appId)
981
+ let rootPermission = getRootPermission(permissionList, permission)
982
+ if (rootPermission && rootPermission.permissionId) {
983
+ menu.appInfo = {
984
+ appId: menu.appId
985
+ }
986
+ menu.appId = rootPermission.permissionId;
987
+ }
988
+ return menu;
989
+ }
990
+ /**
991
+ * 获取菜单根节点
992
+ * @param permissionList
993
+ * @param permission
994
+ * @returns {*|{pid}|{}}
995
+ */
996
+ export const getRootPermission = (permissionList, permission) => {
997
+ if (permissionList, permission) {
998
+ if (!permission.hasOwnProperty('pid')) {
999
+ return permission
1000
+ } else if (permission.pid == '0') {
1001
+ return permission
1002
+ } else {
1003
+ let parentPermission = permissionList.find(item => item.permissionId == permission.pid && item.appId == permission.appId)
1004
+ return getRootPermission(permissionList, parentPermission);
1005
+ }
1006
+ }
1007
+ return permission;
1008
+ }
1009
+ /**
1010
+ * getPreviousTagIndex
1011
+ * @param tagList
1012
+ * @param name
1013
+ * @returns {number}
1014
+ */
555
1015
  export const getPreviousTagIndex = (tagList, name) => {
556
1016
  let count = 0;
557
1017
  if (tagList && name) {
@@ -569,6 +1029,12 @@ export const getPreviousTagIndex = (tagList, name) => {
569
1029
  return count;
570
1030
  };
571
1031
 
1032
+ /**
1033
+ * getDelTagIndex
1034
+ * @param tagList
1035
+ * @param name
1036
+ * @returns {number}
1037
+ */
572
1038
  export const getDelTagIndex = (tagList, name) => {
573
1039
  let count = 1;
574
1040
  if (tagList && name) {
@@ -580,4 +1046,277 @@ export const getDelTagIndex = (tagList, name) => {
580
1046
  }
581
1047
  }
582
1048
  return count;
583
- }
1049
+ }
1050
+
1051
+ /**
1052
+ * turnToPage
1053
+ * @param vm
1054
+ * @param name
1055
+ * @param url
1056
+ */
1057
+ export const turnToPage = (vm, name ,url) =>{
1058
+ if (window.top && window.top.location.href != window.location.href) {
1059
+ typeof sessionStorage != 'undefined' && sessionStorage.removeItem('activeName')
1060
+ window.parent.location.href = url;
1061
+ } else {
1062
+ vm.$router.push({
1063
+ name: name
1064
+ })
1065
+ }
1066
+ }
1067
+
1068
+
1069
+ /**
1070
+ * 获取上级节点的方法
1071
+ * @param vm
1072
+ * @param methodName
1073
+ * @returns {*}
1074
+ */
1075
+ export const getParentMethod = (vm,methodName) => {
1076
+ if (vm.$parent) {
1077
+ if (vm.$parent[methodName]) {
1078
+ return vm.$parent[methodName];
1079
+ } else {
1080
+ return getParentMethod(vm.$parent,methodName)
1081
+ }
1082
+ }
1083
+ return undefined;
1084
+ }
1085
+
1086
+ /**
1087
+ * 执行全屏操作
1088
+ * @param vm
1089
+ */
1090
+ export const doParentMethod = (vm,methodName) => {
1091
+ let action = getParentMethod(vm,methodName)
1092
+ if (action) {
1093
+ action()
1094
+ }
1095
+ }
1096
+ /**
1097
+ * 替换url中的指定参数
1098
+ * @param url
1099
+ * @param paramName
1100
+ * @param paramValue
1101
+ * @returns {string}
1102
+ */
1103
+ export const replaceUrlParam = (url, paramName, paramValue) => {
1104
+ let pattern = new RegExp('(' + paramName + '=)([^&]+)', 'i');
1105
+ let queryString = url.split('?')[1];
1106
+ if (queryString) {
1107
+ let newParam = paramName + '=' + encodeURIComponent(paramValue);
1108
+ let newQueryString = queryString.replace(pattern, newParam);
1109
+ return url.split('?')[0] + '?' + newQueryString;
1110
+ } else {
1111
+ return url + '?' + paramName + '=' + encodeURIComponent(paramValue);
1112
+ }
1113
+ }
1114
+ /**
1115
+ * 拼接url
1116
+ * @param href
1117
+ * @param key
1118
+ * @param value
1119
+ * @returns {string}
1120
+ */
1121
+ export const buildParams = (href, key, value) =>{
1122
+ if (href && key && value) {
1123
+ if (!href.includes(key + '=')) {
1124
+ if (href.includes('?')) {
1125
+ href += '&' + key + '=' + value
1126
+ } else {
1127
+ href += '?' + key + '=' + value
1128
+ }
1129
+ } else {
1130
+ href = this.replaceUrlParam(href,key,value)
1131
+ }
1132
+ return href;
1133
+ }
1134
+ return '';
1135
+ }
1136
+ /**
1137
+ * 组装菜单url
1138
+ * @param item
1139
+ * @param ssoToken
1140
+ * @param ssoid
1141
+ * @returns {string}
1142
+ */
1143
+ export const buildMenuUri = (item,ssoToken,ssoid) => {
1144
+ if (!item.uri) {
1145
+ return ''
1146
+ }
1147
+ let href = ''
1148
+ let uri = item.uri
1149
+ if (uri.startsWith('http')) {
1150
+ href = uri
1151
+ } else {
1152
+ let basepath = ''
1153
+ if (item.navList) {
1154
+ let navList = deepCopy(item.navList);
1155
+ let appId = '';
1156
+ if (item.appId) {
1157
+ appId = item.appId;
1158
+ } else if (item.meta && item.meta.appId) {
1159
+ appId = item.meta.appId;
1160
+ }
1161
+ let appInfo = navList.find(app => app.appId === appId)
1162
+ if (appInfo && appInfo.basepath) {
1163
+ basepath = appInfo.basepath
1164
+ }
1165
+ }
1166
+ if (!basepath.startsWith('/') && !basepath.startsWith('http')) {
1167
+ basepath = '/' + basepath
1168
+ }
1169
+ if (basepath.endsWith('/')) {
1170
+ basepath = basepath.substring(0, basepath.length - 1)
1171
+ }
1172
+ if (!uri.startsWith('/')) {
1173
+ uri = '/' + uri
1174
+ }
1175
+ href = basepath + uri
1176
+ }
1177
+ href = buildParams(href,"layout","screen");
1178
+ if (ssoToken) {
1179
+ href = buildParams(href,"token",ssoToken);
1180
+ }
1181
+ if (ssoid) {
1182
+ href = buildParams(href,"ssoid",ssoid);
1183
+ }
1184
+ if (item.cts) {
1185
+ href = buildParams(href,"cts",item.cts);
1186
+ }
1187
+ return href
1188
+ }
1189
+ /**
1190
+ * 给query添加时间戳
1191
+ */
1192
+ export const addTimestamp = ($route) => {
1193
+ let query = {};
1194
+ if ($route.query) {
1195
+ query = $route.query;
1196
+ }
1197
+ query = Object.assign({},query,{cts:new Date().getTime()})
1198
+ $route.query = query;
1199
+ return $route;
1200
+ }
1201
+ /**
1202
+ * 根据配置信息修改系统信息
1203
+ * @param systemInfo
1204
+ */
1205
+ export const changeSystemInfo = async (systemInfo) => {
1206
+ let defaultSystemInfo = {
1207
+ layoutSize: 'small',
1208
+ systemLogo: systemLogo,
1209
+ logoWidth: '150px',
1210
+ systemName: sessionStorage.getItem('systemName') ? sessionStorage.getItem('systemName') : config.title,
1211
+ nameSize: 1,
1212
+ navType: 'dropdown',
1213
+ rightTopOptButtonList: ['collect', 'fullScreen'],
1214
+ rightTopShowFunList: ['theme', 'personalCenter', 'noticeList', 'logout'],
1215
+ menuLogo: '1',
1216
+ titleShow: 'wrap',
1217
+ menuScaling: '1',
1218
+ footerInfo: 'Copyright © 2021 浪潮数字商业科技有限公司 版权所有<br> 辽ICP备11001865号-3',
1219
+ showTheme: '',
1220
+ theme: 'default',
1221
+ tabNum: 5,
1222
+ topMenu: 4,
1223
+ };
1224
+ if (systemInfo) {
1225
+ systemInfo = Object.assign(defaultSystemInfo, systemInfo);
1226
+ } else {
1227
+ systemInfo = defaultSystemInfo;
1228
+ }
1229
+ if (systemInfo.logo) {
1230
+ systemInfo.systemLogo = config.ossServerContext + '/anon/system/file/get/' + systemInfo.logo
1231
+ } else {
1232
+ systemInfo.systemLogo = ''
1233
+ }
1234
+ sessionStorage.setItem('systemLogo', systemInfo.systemLogo)
1235
+ if (systemInfo.systemLogo) {
1236
+ let link = document.querySelector("link[rel*='icon']") || document.createElement('link');
1237
+ link.setAttribute('href', systemInfo.systemLogo);
1238
+ if (!link.getAttribute('rel')) {
1239
+ link.setAttribute('rel', 'icon');
1240
+ }
1241
+ if (!link.getAttribute('type')) {
1242
+ link.setAttribute('type', 'image/png');
1243
+ }
1244
+ }
1245
+ if (systemInfo.logoWidth) {
1246
+ systemInfo.logoWidth = systemInfo.logoWidth + ''
1247
+ }
1248
+ if (systemInfo.systemName) {
1249
+ document.title = systemInfo.systemName
1250
+ sessionStorage.setItem('systemName', systemInfo.systemName)
1251
+ }
1252
+ if (localStorage.getItem('theme')) {
1253
+ systemInfo.theme = localStorage.getItem('theme')
1254
+ }
1255
+ changeByThemeKey(systemInfo.theme)
1256
+ if (localStorage.getItem('themeIdCurrent')) {
1257
+ systemInfo.showTheme = localStorage.getItem('themeIdCurrent')
1258
+ }
1259
+ if (systemInfo.showTheme) {
1260
+ let showTheme = systemInfo.showTheme
1261
+ let split = showTheme.split('-')
1262
+ let systemForm = null
1263
+ let themeId = split[0];
1264
+ let status = split[1];
1265
+ let filterStatus = split[2];
1266
+ if (themeId) {
1267
+ let res = await ajax.get(config.upmsServerContext + '/anon/system/themeInfo?themeId=' + split[0])
1268
+ if (res.data.code == 1) {
1269
+ systemForm = res.data.data[0]
1270
+ if (!status && systemForm.status) {
1271
+ status = systemForm.status;
1272
+ }
1273
+ if (!filterStatus && systemForm.filterStatus) {
1274
+ filterStatus = systemForm.filterStatus;
1275
+ }
1276
+ }
1277
+ }
1278
+ if (systemForm) {
1279
+ changeThemeByThemeId(themeId, status, filterStatus, systemForm)
1280
+ }
1281
+ }
1282
+ if (!systemInfo.rightTopOptButtonList || systemInfo.rightTopOptButtonList.length <= 0) {
1283
+ systemInfo.rightTopOptButtonList = ['collect', 'fullScreen'];
1284
+ }
1285
+ if (!systemInfo.rightTopShowFunList || systemInfo.rightTopShowFunList.length <= 0) {
1286
+ systemInfo.rightTopShowFunList = ['theme', 'personalCenter', 'noticeList', 'logout']
1287
+ }
1288
+ return systemInfo;
1289
+ }
1290
+
1291
+ export const buildHomeConfigs = (settings) => {
1292
+ let result = [];
1293
+ if (settings && settings.length > 0) {
1294
+ let settingMap = {}
1295
+ for (let st of settings) {
1296
+ let key = st.categoryCode;
1297
+ if (!key) {
1298
+ key = "otherCategory";
1299
+ }
1300
+ if (settingMap[key]) {
1301
+ let oldSt = settingMap[key];
1302
+ if (st.permit && oldSt.permit
1303
+ && (st.permit.permissionType > oldSt.permit.permissionType
1304
+ || (st.permit.permissionType == oldSt.permit.permissionType
1305
+ && st.permit.createTime > oldSt.permit.createTime))) {
1306
+ settingMap[key] = st;
1307
+ }
1308
+ } else {
1309
+ settingMap[key] = st;
1310
+ }
1311
+ }
1312
+ if (settingMap['default']) {
1313
+ result.push(settingMap['default']);
1314
+ }
1315
+ for(let key in settingMap) {
1316
+ if (key != 'default') {
1317
+ result.push(settingMap[key])
1318
+ }
1319
+ }
1320
+ }
1321
+ return result;
1322
+ }