@lambo-design/shared 1.0.0-beta.20 → 1.0.0-beta.200

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 (170) hide show
  1. package/config/config.js +14 -2
  2. package/config/index.js +7 -2
  3. package/config/themes/atrovirens/atrovirens.css +564 -0
  4. package/config/themes/atrovirens/atrovirens.css.map +1 -0
  5. package/config/themes/atrovirens/atrovirens.less +656 -0
  6. package/config/themes/atrovirens/var.less +662 -0
  7. package/config/themes/blue/blue.css +564 -0
  8. package/config/themes/blue/blue.css.map +1 -0
  9. package/config/themes/blue/blue.less +657 -0
  10. package/config/themes/blue/var.less +663 -0
  11. package/config/themes/blue-white/blue-white.css +564 -0
  12. package/config/themes/blue-white/blue-white.css.map +1 -0
  13. package/config/themes/blue-white/blue-white.less +656 -0
  14. package/config/themes/blue-white/var.less +663 -0
  15. package/config/themes/blue-white-tight/blue-white-tight.css +565 -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 +657 -0
  18. package/config/themes/blue-white-tight/var.less +663 -0
  19. package/config/themes/deep/deep.css +564 -0
  20. package/config/themes/deep/deep.css.map +1 -0
  21. package/config/themes/deep/deep.less +655 -0
  22. package/config/themes/deep/var.less +663 -0
  23. package/config/themes/default/default.css +380 -57
  24. package/config/themes/default/default.css.map +1 -0
  25. package/config/themes/default/default.less +425 -88
  26. package/config/themes/default/var.less +361 -12
  27. package/config/themes/eap/eap.css +564 -0
  28. package/config/themes/eap/eap.css.map +1 -0
  29. package/config/themes/eap/eap.less +656 -0
  30. package/config/themes/eap/var.less +663 -0
  31. package/config/themes/gold/gold.css +564 -0
  32. package/config/themes/gold/gold.css.map +1 -0
  33. package/config/themes/gold/gold.less +656 -0
  34. package/config/themes/gold/var.less +357 -7
  35. package/config/themes/index.js +13 -3
  36. package/config/themes/lime/lime.css +564 -0
  37. package/config/themes/lime/lime.css.map +1 -0
  38. package/config/themes/lime/lime.less +656 -0
  39. package/config/themes/lime/var.less +357 -7
  40. package/config/themes/orange/orange.css +564 -0
  41. package/config/themes/orange/orange.css.map +1 -0
  42. package/config/themes/orange/orange.less +656 -0
  43. package/config/themes/orange/var.less +664 -0
  44. package/config/themes/red/red.css +564 -0
  45. package/config/themes/red/red.css.map +1 -0
  46. package/config/themes/red/red.less +656 -0
  47. package/config/themes/red/var.less +663 -0
  48. package/config/themes/theme-atrovirens.js +546 -0
  49. package/config/themes/theme-blue.js +546 -0
  50. package/config/themes/theme-bw.js +546 -0
  51. package/config/themes/theme-bwt.js +547 -0
  52. package/config/themes/theme-deep.js +546 -0
  53. package/config/themes/theme-default.js +353 -59
  54. package/config/themes/theme-eap.js +546 -0
  55. package/config/themes/theme-gold.js +305 -11
  56. package/config/themes/theme-lime.js +305 -11
  57. package/config/themes/theme-orange.js +534 -27
  58. package/config/themes/theme-red.js +538 -32
  59. package/directives/module/print.js +1 -0
  60. package/directives/module/vue-print-nb/README.md +63 -0
  61. package/directives/module/vue-print-nb/print.js +94 -0
  62. package/directives/module/vue-print-nb/printarea.js +532 -0
  63. package/index.js +7 -1
  64. package/nstyles/common.less +197 -0
  65. package/nstyles/components/404.less +46 -0
  66. package/nstyles/components/button.less +34 -0
  67. package/nstyles/components/date-picker.less +37 -0
  68. package/nstyles/components/drawer.less +20 -0
  69. package/nstyles/components/dropdown.less +18 -0
  70. package/nstyles/components/excel-flow.less +72 -0
  71. package/nstyles/components/form.less +303 -0
  72. package/nstyles/components/index.less +15 -0
  73. package/nstyles/components/layout/collect.less +10 -0
  74. package/nstyles/components/layout/detail-view.less +107 -0
  75. package/nstyles/components/layout/full-screen.less +7 -0
  76. package/nstyles/components/layout/index.less +7 -0
  77. package/nstyles/components/layout/other-menu.less +142 -0
  78. package/nstyles/components/layout/page-view.less +101 -0
  79. package/nstyles/components/layout/sider-trigger.less +41 -0
  80. package/nstyles/components/layout/tags-nav.less +113 -0
  81. package/nstyles/components/modal.less +85 -0
  82. package/nstyles/components/panel.less +31 -0
  83. package/nstyles/components/select.less +3 -0
  84. package/nstyles/components/sign.less +27 -0
  85. package/nstyles/components/table.less +315 -0
  86. package/nstyles/components/tree.less +159 -0
  87. package/nstyles/components/upload.less +131 -0
  88. package/nstyles/index.less +5 -0
  89. package/nstyles/reset.less +65 -0
  90. package/nstyles/third/ag.less +173 -0
  91. package/nstyles/third/icons/sort-desc.svg +1 -0
  92. package/nstyles/third/icons/sort-up.svg +1 -0
  93. package/nstyles/third/icons/sorting.svg +1 -0
  94. package/nstyles/third/index.less +11 -0
  95. package/nstyles/third/view-design.less +356 -0
  96. package/nstyles/variables/base.less +143 -0
  97. package/nstyles/variables/index.less +4 -0
  98. package/nstyles/variables/theme/default/button.less +7 -0
  99. package/nstyles/variables/theme/default/common.less +57 -0
  100. package/nstyles/variables/theme/default/index.less +7 -0
  101. package/nstyles/variables/theme/default/layout.less +40 -0
  102. package/nstyles/variables/theme/default/table.less +37 -0
  103. package/nstyles/variables/theme/default/tag.less +3 -0
  104. package/nstyles/variables/theme/default/upload.less +3 -0
  105. package/nstyles/variables/theme/index.less +13 -0
  106. package/nstyles/variables/theme/small/button.less +7 -0
  107. package/nstyles/variables/theme/small/common.less +39 -0
  108. package/nstyles/variables/theme/small/index.less +5 -0
  109. package/nstyles/variables/theme/small/layout.less +21 -0
  110. package/nstyles/variables/theme/small/table.less +17 -0
  111. package/nstyles/variables/theme/small/tag.less +3 -0
  112. package/package.json +39 -22
  113. package/plugin/index.js +12 -0
  114. package/plugin/module/date-format.js +30 -0
  115. package/plugin/module/loading.js +26 -0
  116. package/plugin/module/warn-handler.js +11 -0
  117. package/styles/image/lan_navigator.png +0 -0
  118. package/styles/image/lv_navigator.png +0 -0
  119. package/utils/ajax/content-type.js +30 -0
  120. package/utils/ajax/interceptors.js +13 -6
  121. package/utils/assist.js +147 -84
  122. package/utils/base64.js +126 -0
  123. package/utils/blob.js +47 -0
  124. package/utils/crypto/index.js +10 -0
  125. package/utils/date.js +334 -305
  126. package/utils/dict/built-in-dict.js +20 -0
  127. package/utils/dict/index.js +75 -0
  128. package/utils/event.js +72 -0
  129. package/utils/excel.js +369 -237
  130. package/utils/file.js +19 -0
  131. package/utils/form/validate.js +29 -0
  132. package/utils/half-year.js +68 -0
  133. package/utils/index.js +37 -0
  134. package/utils/json.js +29 -0
  135. package/utils/lodop.js +5 -0
  136. package/utils/menu/index.js +257 -11
  137. package/utils/mime_type.js +67 -0
  138. package/utils/modelerUtil.js +4 -1
  139. package/utils/n/date.js +57 -0
  140. package/utils/n/index.js +10 -0
  141. package/utils/n/is-type.js +176 -0
  142. package/utils/n/number.js +144 -0
  143. package/utils/n/permission-cache.js +11 -0
  144. package/utils/n/reuqest/axiosN.js +15 -0
  145. package/utils/n/reuqest/content-type.js +19 -0
  146. package/utils/n/reuqest/interceptors.js +95 -0
  147. package/utils/n/reuqest/url-params.js +12 -0
  148. package/utils/n/storage.js +51 -0
  149. package/utils/n/token.js +51 -0
  150. package/utils/n/user-cache.js +11 -0
  151. package/utils/n/user.js +34 -0
  152. package/utils/n/uuid.js +16 -0
  153. package/utils/n-generator-routers.js +208 -0
  154. package/utils/n-router.js +205 -0
  155. package/utils/n-theme.js +30 -0
  156. package/utils/number.js +72 -15
  157. package/utils/oss.js +58 -0
  158. package/utils/platform.js +514 -22
  159. package/utils/quarter.js +58 -0
  160. package/utils/storage.js +198 -0
  161. package/utils/style.js +24 -0
  162. package/utils/theme.js +96 -3
  163. package/utils/transfer-queue.js +7 -0
  164. package/utils/type.js +102 -0
  165. package/utils/util.js +795 -0
  166. package/utils/validator.js +181 -0
  167. package/config/themes/gold/default.css +0 -241
  168. package/config/themes/gold/default.less +0 -319
  169. package/config/themes/lime/default.css +0 -241
  170. package/config/themes/lime/default.less +0 -319
package/utils/platform.js CHANGED
@@ -1,8 +1,13 @@
1
+ import {deepCopy} from './assist'
2
+ import _ from 'lodash'
3
+ import {formatTimestamp} from "./date";
1
4
 
2
- export const TOKEN_KEY = 'v8-token'
5
+ export const TOKEN_KEY = 'lambo-token'
3
6
 
4
7
  export const COOKIE_KEY = 'lambo-sso-key'
5
8
 
9
+ export const SSO_TOKEN_KEY = 'lambo-sso-token'
10
+
6
11
  export function objEqual(obj1, obj2) {
7
12
  const keysArr1 = Object.keys(obj1)
8
13
  const keysArr2 = Object.keys(obj2)
@@ -12,6 +17,10 @@ export function objEqual(obj1, obj2) {
12
17
  else return !keysArr1.some(key => obj1[key] !== obj2[key])
13
18
  }
14
19
 
20
+ export function arraysEqual(a, b) {
21
+ return _.isEqual(a,b)
22
+ }
23
+
15
24
  /**
16
25
  * @param {Array} list 标签列表
17
26
  * @param {String} name 当前关闭的标签的name
@@ -30,47 +39,47 @@ export function getNextRoute(list, route) {
30
39
 
31
40
 
32
41
  export const setToken = (token) => {
33
- sessionStorage.setItem(TOKEN_KEY, token)
42
+ typeof sessionStorage != 'undefined' && sessionStorage.setItem(TOKEN_KEY, token)
34
43
  }
35
44
 
36
45
  export const getToken = () => {
37
- const token = sessionStorage.getItem(TOKEN_KEY)
46
+ const token = typeof sessionStorage != 'undefined' && sessionStorage.getItem(TOKEN_KEY)
38
47
  if (token) return token
39
48
  else return false
40
49
  }
41
50
 
42
51
  export const setSessionStorage = (key, value) => {
43
- sessionStorage.setItem(key, JSON.stringify(value))
52
+ typeof sessionStorage != 'undefined' && sessionStorage.setItem(key, JSON.stringify(value))
44
53
  }
45
54
 
46
55
  export const getSessionStorage = (key) => {
47
- const value = sessionStorage.getItem(key)
56
+ const value = typeof sessionStorage != 'undefined' && sessionStorage.getItem(key)
48
57
  if (value) return JSON.parse(value)
49
58
  else return null
50
59
  }
51
60
 
52
61
  export const removeSessionStorage = (key) => {
53
- return sessionStorage.removeItem(key)
62
+ return typeof sessionStorage != 'undefined' && sessionStorage.removeItem(key)
54
63
  }
55
64
 
56
65
  export const clearSessionStorage = () => {
57
- return sessionStorage.clear()
66
+ return typeof sessionStorage != 'undefined' && sessionStorage.clear()
58
67
  }
59
68
 
60
69
  export const setLocalStorage = (key, localstorage) => {
61
- localStorage.setItem(key, localstorage)
70
+ typeof localStorage != 'undefined' &&localStorage.setItem(key, localstorage)
62
71
  }
63
72
 
64
73
  export const getLocalStorage = (key) => {
65
- return localStorage.getItem(key)
74
+ return typeof localStorage != 'undefined' &&localStorage.getItem(key)
66
75
  }
67
76
 
68
77
  export const removeLocalStorage = (key) => {
69
- return localStorage.removeItem(key)
78
+ return typeof localStorage != 'undefined' &&localStorage.removeItem(key)
70
79
  }
71
80
 
72
81
  export const clearLocalStorage = () => {
73
- return localStorage.clear()
82
+ return typeof localStorage != 'undefined' &&localStorage.clear()
74
83
  }
75
84
 
76
85
  export const hasChild = (item) => {
@@ -314,6 +323,12 @@ export const getTableDataFromArray = (array) => {
314
323
  }
315
324
  }
316
325
 
326
+ /**
327
+ * 寻找上级节点
328
+ * @param ele
329
+ * @param tag
330
+ * @returns {*}
331
+ */
317
332
  export const findNodeUpper = (ele, tag) => {
318
333
  if (ele.parentNode) {
319
334
  if (ele.parentNode.tagName === tag.toUpperCase()) {
@@ -324,6 +339,12 @@ export const findNodeUpper = (ele, tag) => {
324
339
  }
325
340
  }
326
341
 
342
+ /**
343
+ * 根据class寻找上级节点
344
+ * @param ele
345
+ * @param classes
346
+ * @returns {*}
347
+ */
327
348
  export const findNodeUpperByClasses = (ele, classes) => {
328
349
  let parentNode = ele.parentNode
329
350
  if (parentNode) {
@@ -336,6 +357,12 @@ export const findNodeUpperByClasses = (ele, classes) => {
336
357
  }
337
358
  }
338
359
 
360
+ /**
361
+ * 根据ele寻找下级节点
362
+ * @param ele
363
+ * @param tag
364
+ * @returns {*}
365
+ */
339
366
  export const findNodeDownward = (ele, tag) => {
340
367
  const tagName = tag.toUpperCase()
341
368
  if (ele.childNodes.length) {
@@ -349,6 +376,12 @@ export const findNodeDownward = (ele, tag) => {
349
376
  }
350
377
  }
351
378
 
379
+ /**
380
+ * @description 判断要查询的数组是否至少有一个元素包含在目标数组中
381
+ * @param access 需要查询的数组
382
+ * @param canViewAccess 目标数组
383
+ * @returns {*}
384
+ */
352
385
  export const showByAccess = (access, canViewAccess) => {
353
386
  return hasOneOf(canViewAccess, access)
354
387
  }
@@ -378,16 +411,23 @@ export const routeHasExist = (tagNavList, routeItem) => {
378
411
  return res
379
412
  }
380
413
 
381
- // scrollTop animation
414
+ /**
415
+ * scrollTop animation
416
+ * @param el
417
+ * @param from
418
+ * @param to
419
+ * @param duration
420
+ * @param endCallback
421
+ */
382
422
  export const scrollTop = (el, from = 0, to, duration = 500, endCallback) => {
383
423
  if (!window.requestAnimationFrame) {
384
424
  window.requestAnimationFrame = (
385
- window.webkitRequestAnimationFrame ||
386
- window.mozRequestAnimationFrame ||
387
- window.msRequestAnimationFrame ||
388
- function (callback) {
389
- return window.setTimeout(callback, 1000 / 60)
390
- }
425
+ window.webkitRequestAnimationFrame ||
426
+ window.mozRequestAnimationFrame ||
427
+ window.msRequestAnimationFrame ||
428
+ function (callback) {
429
+ return window.setTimeout(callback, 1000 / 60)
430
+ }
391
431
  )
392
432
  }
393
433
  const difference = Math.abs(from - to)
@@ -427,8 +467,16 @@ export const setTitle = (configTitle,routeItem, vm) => {
427
467
  window.document.title = resTitle
428
468
  }
429
469
 
430
- export const getUrlParams = () => {
431
- const url = location.search; //获取url中"?"符后的字串
470
+ /**
471
+ * 获取浏览器地址url中的参数
472
+ * @param url
473
+ * @returns {Object}
474
+ */
475
+ export const getUrlParams = (url) => {
476
+ if (!url){
477
+ url = location.search;
478
+ }
479
+ //const url = location.search; //获取url中"?"符后的字串
432
480
  const theRequest = new Object();
433
481
  if (url.indexOf("?") != -1) {
434
482
  const str = url.substr(1);
@@ -501,6 +549,11 @@ const hasOneOf = (targetarr, arr) => {
501
549
  return targetarr.some(_ => arr.indexOf(_) > -1)
502
550
  }
503
551
 
552
+ /**
553
+ * foreach
554
+ * @param arr
555
+ * @param fn 回调函数,参数接收arr的元素,索引,arr本身
556
+ */
504
557
  const forEach = (arr, fn) => {
505
558
  if (!arr.length || !fn) return
506
559
  let i = -1
@@ -524,9 +577,17 @@ export function oneOf (value, validList) {
524
577
  return false
525
578
  }
526
579
 
580
+ /**
581
+ * recursionKeyFindItem
582
+ * @param arr
583
+ * @param filterKey
584
+ * @param filterValue
585
+ * @param recursionKey
586
+ * @returns {*|null}
587
+ */
527
588
  export const recursionKeyFindItem = (arr, filterKey, filterValue, recursionKey) => {
528
589
  for (const item of arr) {
529
- if (item[filterKey] && item[filterKey] == filterValue) {
590
+ if (item[filterKey] && item[filterKey] == filterValue && item['type'] == 2) {
530
591
  return item;
531
592
  }
532
593
  let result = null;
@@ -540,18 +601,292 @@ export const recursionKeyFindItem = (arr, filterKey, filterValue, recursionKey)
540
601
  return null;
541
602
  };
542
603
 
604
+ /**
605
+ * filterMenuName
606
+ * @param menuList
607
+ * @param name
608
+ * @returns {*|null}
609
+ */
543
610
  export const filterMenuName = (menuList, name) => {
544
611
  return recursionKeyFindItem(menuList, 'name', name, 'children')
545
612
  };
546
613
 
614
+ /**
615
+ * filterMenuUri
616
+ * @param menuList
617
+ * @param name
618
+ * @returns {*|null}
619
+ */
547
620
  export const filterMenuUri = (menuList, name) => {
548
621
  return recursionKeyFindItem(menuList, 'uri', name, 'children')
549
622
  };
550
623
 
624
+ /**
625
+ * tagExists
626
+ * @param taglist
627
+ * @param name
628
+ * @returns {boolean}
629
+ */
551
630
  export const tagExists = (taglist, name) => {
552
631
  return taglist && taglist.filter(item => item.name === name).length > 0;
553
632
  };
554
633
 
634
+ /**
635
+ * 判断菜单是否为新窗口打开
636
+ * @param menu
637
+ */
638
+ export const isOpenBlank = (menu) => {
639
+ let extendProps = {}
640
+ if (menu && menu.meta && menu.meta.data && menu.meta.data.extension) {
641
+ extendProps = JSON.parse(menu.meta.data.extension)
642
+ }
643
+ if (menu && menu.extension) {
644
+ extendProps = JSON.parse(menu.extension)
645
+ }
646
+ if (extendProps && extendProps.target_type && extendProps.target_type == 'blank') {
647
+ return true;
648
+ }
649
+ if (extendProps && extendProps.targetType && extendProps.targetType == 'blank') {
650
+ return true;
651
+ }
652
+ return false;
653
+ }
654
+
655
+ /**
656
+ * 判断应用是否为移动应用
657
+ * @param menu
658
+ */
659
+ export const isMobileApp = (app) => {
660
+ if (app.extendProps && app.extendProps.is_mobile_app && app.extendProps.is_mobile_app == '1') {
661
+ return true;
662
+ }
663
+ if (app.setting && app.setting.is_mobile_app && app.setting.is_mobile_app == '1') {
664
+ return true;
665
+ }
666
+ return false;
667
+ }
668
+
669
+ /**
670
+ * 获取pc应用列表
671
+ * @param appList
672
+ * @returns {*[]}
673
+ */
674
+ export const getPCAppList = (appList) => {
675
+ let finalList = []
676
+ if(appList) {
677
+ for (let app of appList) {
678
+ if (!isMobileApp(app)) {
679
+ finalList.push(app);
680
+ }
681
+ }
682
+ }
683
+ return finalList;
684
+ }
685
+
686
+ /**
687
+ * 获取移动应用列表
688
+ * @param appList
689
+ * @returns {*[]}
690
+ */
691
+ export const getMobileAppList = (appList) => {
692
+ let finalList = []
693
+ if(appList) {
694
+ for (let app of appList) {
695
+ if (isMobileApp(app)) {
696
+ finalList.push(app);
697
+ }
698
+ }
699
+ }
700
+ return finalList;
701
+ }
702
+
703
+ /**
704
+ * 获取一级菜单作为顶级导航
705
+ * @param permissionList
706
+ * @param appType
707
+ * @returns {*[]}
708
+ */
709
+ export const buildNavListByMenu = (permissionList,appInfo,appType) => {
710
+ let navList = []
711
+ if (permissionList && appInfo && appInfo.appId) {
712
+ let permissions = permissionList.filter(item => item.hasOwnProperty('pid') && item.pid == '0' && item.appId == appInfo.appId)
713
+ for (let per of permissions) {
714
+ if (appType && appType == 'sc') {
715
+ let nav = {
716
+ "data" : deepCopy(per),
717
+ "appInfo" : deepCopy(appInfo),
718
+ "orderNo": per.orders,
719
+ "application": {
720
+ "extendProps": per.extension ? JSON.parse(per.extension) : "",
721
+ "appId": per.permissionId,
722
+ "appBizCode": per.permissionValue,
723
+ "appName": per.title,
724
+ "appDesc": per.description,
725
+ "appUrl": appInfo.basepath,
726
+ "icon": per.icon,
727
+ "appStatus": 1,
728
+ "manageUnitId": "",
729
+ "protocolType": null,
730
+ "grantTypes": null,
731
+ "logoutUrl": null,
732
+ "redirectUrls": null,
733
+ "codeExpiresIn": null,
734
+ "idTokenExpiresIn": null,
735
+ "accessTokenExpiresIn": null,
736
+ "clientId": "",
737
+ "clientSecret": "",
738
+ "isEnableSso": false,
739
+ "isShare": false,
740
+ "referAppId": null,
741
+ "externalId": null,
742
+ "callerAppId": null,
743
+ "orderNo": 1,
744
+ "parentId": null,
745
+ "appType": null,
746
+ "relativeName": null,
747
+ "shortName": null,
748
+ "authType": "1",
749
+ "isLower": null
750
+ },
751
+ "basepath": appInfo.basepath,
752
+ "appId": per.permissionId,
753
+ "icon": per.icon,
754
+ "name": per.name,
755
+ "extendProps": per.extension ? JSON.parse(per.extension) : "",
756
+ "title": per.title,
757
+ "type": "00",
758
+ "status": 1
759
+ }
760
+ navList.push(nav)
761
+ } else {
762
+ let nav = {
763
+ "data" : deepCopy(per),
764
+ "appInfo" : deepCopy(appInfo),
765
+ "id": per.id,
766
+ "appId": per.permissionId,
767
+ "systemId": per.systemId,
768
+ "icon": per.icon,
769
+ "banner": null,
770
+ "theme": null,
771
+ "basepath": appInfo.basepath,
772
+ "status": 1,
773
+ "name": per.name,
774
+ "title": per.type,
775
+ "type": "00",
776
+ "setting": "",
777
+ "description": per.description,
778
+ "orders": per.orders,
779
+ "createTime": 1710772466000,
780
+ "updateTime": 1710772466000
781
+ }
782
+ navList.push(nav)
783
+ }
784
+ }
785
+ }
786
+ return navList;
787
+ }
788
+
789
+ /**
790
+ * 判断是否为子菜单
791
+ * @param permissionList
792
+ * @param pid
793
+ * @param per
794
+ * @returns {boolean|boolean|*}
795
+ */
796
+ export const isChildPermission = (permissionList, pid, per) => {
797
+ if (permissionList && pid && per && per.pid) {
798
+ let res = permissionList.find(item => item.hasOwnProperty('permissionId') && item.permissionId == per.pid)
799
+ if (res && res.permissionId && res.permissionId == pid) {
800
+ return true;
801
+ } else {
802
+ return isChildPermission(permissionList, pid, res)
803
+ }
804
+ }
805
+ return false;
806
+ }
807
+ /**
808
+ * 获取所有子菜单
809
+ * @param permissionList
810
+ * @param pid
811
+ */
812
+ export const getChildPermissions = (permissionList, pid, appInfo) => {
813
+ let res = []
814
+ if (permissionList && pid) {
815
+ for (let permission of permissionList) {
816
+ if (isChildPermission(permissionList, pid, permission)) {
817
+ let per2 = deepCopy(permission);
818
+ per2.appId = pid;
819
+ if (per2.pid == pid) {
820
+ per2.pid = "0";
821
+ }
822
+ per2.appInfo = deepCopy(appInfo)
823
+ res.push(per2);
824
+ }
825
+ }
826
+ }
827
+ return res;
828
+ }
829
+ /**
830
+ * 恢复权限的原始信息
831
+ * @param permission
832
+ */
833
+ export const getOriginalPermission = (permission) => {
834
+ if (permission && permission.meta && permission.meta.data && permission.meta.data.appInfo) {
835
+ let per2 = deepCopy(permission);
836
+ if (per2.hasOwnProperty('pid') && per2.pid == '0') {
837
+ per2.pid = per2.meta.data.appId;
838
+ per2.meta.data.pid = per2.meta.data.appId;
839
+ }
840
+ per2.meta.appId = permission.meta.data.appInfo.appId;
841
+ per2.meta.data.appId = permission.meta.data.appInfo.appId;
842
+ return per2;
843
+ }
844
+ return permission
845
+ }
846
+
847
+ /**
848
+ * 单应用时修改源权限信息
849
+ * @param permissionList
850
+ * @param menu
851
+ * @param appInfo
852
+ * @returns {*}
853
+ */
854
+ export const buildSinglePermission = (permissionList, menu) => {
855
+ let permission = permissionList.find(item => item.permissionId == menu.permissionId && item.appId == menu.appId)
856
+ let rootPermission = getRootPermission(permissionList, permission)
857
+ if (rootPermission && rootPermission.permissionId) {
858
+ menu.appInfo = {
859
+ appId: menu.appId
860
+ }
861
+ menu.appId = rootPermission.permissionId;
862
+ }
863
+ return menu;
864
+ }
865
+ /**
866
+ * 获取菜单根节点
867
+ * @param permissionList
868
+ * @param permission
869
+ * @returns {*|{pid}|{}}
870
+ */
871
+ export const getRootPermission = (permissionList, permission) => {
872
+ if (permissionList, permission) {
873
+ if (!permission.hasOwnProperty('pid')) {
874
+ return permission
875
+ } else if (permission.pid == '0') {
876
+ return permission
877
+ } else {
878
+ let parentPermission = permissionList.find(item => item.permissionId == permission.pid && item.appId == permission.appId)
879
+ return getRootPermission(permissionList, parentPermission);
880
+ }
881
+ }
882
+ return permission;
883
+ }
884
+ /**
885
+ * getPreviousTagIndex
886
+ * @param tagList
887
+ * @param name
888
+ * @returns {number}
889
+ */
555
890
  export const getPreviousTagIndex = (tagList, name) => {
556
891
  let count = 0;
557
892
  if (tagList && name) {
@@ -569,6 +904,12 @@ export const getPreviousTagIndex = (tagList, name) => {
569
904
  return count;
570
905
  };
571
906
 
907
+ /**
908
+ * getDelTagIndex
909
+ * @param tagList
910
+ * @param name
911
+ * @returns {number}
912
+ */
572
913
  export const getDelTagIndex = (tagList, name) => {
573
914
  let count = 1;
574
915
  if (tagList && name) {
@@ -580,4 +921,155 @@ export const getDelTagIndex = (tagList, name) => {
580
921
  }
581
922
  }
582
923
  return count;
583
- }
924
+ }
925
+
926
+ /**
927
+ * turnToPage
928
+ * @param vm
929
+ * @param name
930
+ * @param url
931
+ */
932
+ export const turnToPage = (vm, name ,url) =>{
933
+ if (window.top && window.top.location.href != window.location.href) {
934
+ typeof sessionStorage != 'undefined' && sessionStorage.removeItem('activeName')
935
+ window.parent.location.href = url;
936
+ } else {
937
+ vm.$router.push({
938
+ name: name
939
+ })
940
+ }
941
+ }
942
+
943
+
944
+ /**
945
+ * 获取上级节点的方法
946
+ * @param vm
947
+ * @param methodName
948
+ * @returns {*}
949
+ */
950
+ export const getParentMethod = (vm,methodName) => {
951
+ if (vm.$parent) {
952
+ if (vm.$parent[methodName]) {
953
+ return vm.$parent[methodName];
954
+ } else {
955
+ return getParentMethod(vm.$parent,methodName)
956
+ }
957
+ }
958
+ return undefined;
959
+ }
960
+
961
+ /**
962
+ * 执行全屏操作
963
+ * @param vm
964
+ */
965
+ export const doParentMethod = (vm,methodName) => {
966
+ let action = getParentMethod(vm,methodName)
967
+ if (action) {
968
+ action()
969
+ }
970
+ }
971
+ /**
972
+ * 替换url中的指定参数
973
+ * @param url
974
+ * @param paramName
975
+ * @param paramValue
976
+ * @returns {string}
977
+ */
978
+ export const replaceUrlParam = (url, paramName, paramValue) => {
979
+ let pattern = new RegExp('(' + paramName + '=)([^&]+)', 'i');
980
+ let queryString = url.split('?')[1];
981
+ if (queryString) {
982
+ let newParam = paramName + '=' + encodeURIComponent(paramValue);
983
+ let newQueryString = queryString.replace(pattern, newParam);
984
+ return url.split('?')[0] + '?' + newQueryString;
985
+ } else {
986
+ return url + '?' + paramName + '=' + encodeURIComponent(paramValue);
987
+ }
988
+ }
989
+ /**
990
+ * 拼接url
991
+ * @param href
992
+ * @param key
993
+ * @param value
994
+ * @returns {string}
995
+ */
996
+ export const buildParams = (href, key, value) =>{
997
+ if (href && key && value) {
998
+ if (!href.includes(key + '=')) {
999
+ if (href.includes('?')) {
1000
+ href += '&' + key + '=' + value
1001
+ } else {
1002
+ href += '?' + key + '=' + value
1003
+ }
1004
+ } else {
1005
+ href = this.replaceUrlParam(href,key,value)
1006
+ }
1007
+ return href;
1008
+ }
1009
+ return '';
1010
+ }
1011
+ /**
1012
+ * 组装菜单url
1013
+ * @param item
1014
+ * @param ssoToken
1015
+ * @param ssoid
1016
+ * @returns {string}
1017
+ */
1018
+ export const buildMenuUri = (item,ssoToken,ssoid) => {
1019
+ if (!item.uri) {
1020
+ return ''
1021
+ }
1022
+ let href = ''
1023
+ let uri = item.uri
1024
+ if (uri.startsWith('http')) {
1025
+ href = uri
1026
+ } else {
1027
+ let basepath = ''
1028
+ if (item.navList) {
1029
+ let navList = deepCopy(item.navList);
1030
+ let appId = '';
1031
+ if (item.appId) {
1032
+ appId = item.appId;
1033
+ } else if (item.meta && item.meta.appId) {
1034
+ appId = item.meta.appId;
1035
+ }
1036
+ let appInfo = navList.find(app => app.appId === appId)
1037
+ if (appInfo && appInfo.basepath) {
1038
+ basepath = appInfo.basepath
1039
+ }
1040
+ }
1041
+ if (!basepath.startsWith('/') && !basepath.startsWith('http')) {
1042
+ basepath = '/' + basepath
1043
+ }
1044
+ if (basepath.endsWith('/')) {
1045
+ basepath = basepath.substring(0, basepath.length - 1)
1046
+ }
1047
+ if (!uri.startsWith('/')) {
1048
+ uri = '/' + uri
1049
+ }
1050
+ href = basepath + uri
1051
+ }
1052
+ href = buildParams(href,"layout","screen");
1053
+ if (ssoToken) {
1054
+ href = buildParams(href,"token",ssoToken);
1055
+ }
1056
+ if (ssoid) {
1057
+ href = buildParams(href,"ssoid",ssoid);
1058
+ }
1059
+ if (item.cts) {
1060
+ href = buildParams(href,"cts",item.cts);
1061
+ }
1062
+ return href
1063
+ }
1064
+ /**
1065
+ * 给query添加时间戳
1066
+ */
1067
+ export const addTimestamp = ($route) => {
1068
+ let query = {};
1069
+ if ($route.query) {
1070
+ query = $route.query;
1071
+ }
1072
+ query = Object.assign({},query,{cts:new Date().getTime()})
1073
+ $route.query = query;
1074
+ return $route;
1075
+ }