@lambo-design/shared 1.0.0-beta.2 → 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 (175) hide show
  1. package/config/config.js +26 -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 +17 -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 +547 -0
  58. package/config/themes/theme-red.js +546 -0
  59. package/directives/index.js +23 -0
  60. package/directives/module/draggable.js +56 -0
  61. package/directives/module/permission.js +49 -0
  62. package/directives/module/print.js +1 -0
  63. package/directives/module/vue-print-nb/README.md +63 -0
  64. package/directives/module/vue-print-nb/print.js +94 -0
  65. package/directives/module/vue-print-nb/printarea.js +532 -0
  66. package/index.js +8 -1
  67. package/nstyles/common.less +197 -0
  68. package/nstyles/components/404.less +46 -0
  69. package/nstyles/components/button.less +34 -0
  70. package/nstyles/components/date-picker.less +37 -0
  71. package/nstyles/components/drawer.less +20 -0
  72. package/nstyles/components/dropdown.less +18 -0
  73. package/nstyles/components/excel-flow.less +72 -0
  74. package/nstyles/components/form.less +303 -0
  75. package/nstyles/components/index.less +15 -0
  76. package/nstyles/components/layout/collect.less +10 -0
  77. package/nstyles/components/layout/detail-view.less +107 -0
  78. package/nstyles/components/layout/full-screen.less +7 -0
  79. package/nstyles/components/layout/index.less +7 -0
  80. package/nstyles/components/layout/other-menu.less +142 -0
  81. package/nstyles/components/layout/page-view.less +101 -0
  82. package/nstyles/components/layout/sider-trigger.less +41 -0
  83. package/nstyles/components/layout/tags-nav.less +113 -0
  84. package/nstyles/components/modal.less +85 -0
  85. package/nstyles/components/panel.less +31 -0
  86. package/nstyles/components/select.less +3 -0
  87. package/nstyles/components/sign.less +27 -0
  88. package/nstyles/components/table.less +315 -0
  89. package/nstyles/components/tree.less +159 -0
  90. package/nstyles/components/upload.less +131 -0
  91. package/nstyles/index.less +5 -0
  92. package/nstyles/reset.less +65 -0
  93. package/nstyles/third/ag.less +173 -0
  94. package/nstyles/third/icons/sort-desc.svg +1 -0
  95. package/nstyles/third/icons/sort-up.svg +1 -0
  96. package/nstyles/third/icons/sorting.svg +1 -0
  97. package/nstyles/third/index.less +11 -0
  98. package/nstyles/third/view-design.less +356 -0
  99. package/nstyles/variables/base.less +143 -0
  100. package/nstyles/variables/index.less +4 -0
  101. package/nstyles/variables/theme/default/button.less +7 -0
  102. package/nstyles/variables/theme/default/common.less +57 -0
  103. package/nstyles/variables/theme/default/index.less +7 -0
  104. package/nstyles/variables/theme/default/layout.less +40 -0
  105. package/nstyles/variables/theme/default/table.less +37 -0
  106. package/nstyles/variables/theme/default/tag.less +3 -0
  107. package/nstyles/variables/theme/default/upload.less +3 -0
  108. package/nstyles/variables/theme/index.less +13 -0
  109. package/nstyles/variables/theme/small/button.less +7 -0
  110. package/nstyles/variables/theme/small/common.less +39 -0
  111. package/nstyles/variables/theme/small/index.less +5 -0
  112. package/nstyles/variables/theme/small/layout.less +21 -0
  113. package/nstyles/variables/theme/small/table.less +17 -0
  114. package/nstyles/variables/theme/small/tag.less +3 -0
  115. package/package.json +39 -20
  116. package/plugin/index.js +12 -0
  117. package/plugin/module/date-format.js +30 -0
  118. package/plugin/module/loading.js +26 -0
  119. package/plugin/module/warn-handler.js +11 -0
  120. package/styles/image/lan_navigator.png +0 -0
  121. package/styles/image/lv_navigator.png +0 -0
  122. package/utils/ajax/content-type.js +30 -0
  123. package/utils/ajax/interceptors.js +97 -90
  124. package/utils/assist.js +78 -10
  125. package/utils/base64.js +126 -0
  126. package/utils/blob.js +47 -0
  127. package/utils/crypto/index.js +10 -0
  128. package/utils/date.js +334 -305
  129. package/utils/dict/built-in-dict.js +20 -0
  130. package/utils/dict/index.js +75 -0
  131. package/utils/event.js +72 -0
  132. package/utils/excel.js +369 -237
  133. package/utils/file.js +19 -0
  134. package/utils/form/validate.js +29 -0
  135. package/utils/half-year.js +68 -0
  136. package/utils/index.js +37 -0
  137. package/utils/json.js +29 -0
  138. package/utils/lodop.js +5 -0
  139. package/utils/menu/before-close.js +17 -0
  140. package/utils/menu/index.js +381 -0
  141. package/utils/mime_type.js +67 -0
  142. package/utils/modelerUtil.js +4 -1
  143. package/utils/n/date.js +57 -0
  144. package/utils/n/index.js +10 -0
  145. package/utils/n/is-type.js +176 -0
  146. package/utils/n/number.js +144 -0
  147. package/utils/n/permission-cache.js +11 -0
  148. package/utils/n/reuqest/axiosN.js +15 -0
  149. package/utils/n/reuqest/content-type.js +19 -0
  150. package/utils/n/reuqest/interceptors.js +95 -0
  151. package/utils/n/reuqest/url-params.js +12 -0
  152. package/utils/n/storage.js +51 -0
  153. package/utils/n/token.js +51 -0
  154. package/utils/n/user-cache.js +11 -0
  155. package/utils/n/user.js +34 -0
  156. package/utils/n/uuid.js +16 -0
  157. package/utils/n-generator-routers.js +208 -0
  158. package/utils/n-router.js +205 -0
  159. package/utils/n-theme.js +30 -0
  160. package/utils/number.js +72 -15
  161. package/utils/oss.js +58 -0
  162. package/utils/platform.js +582 -26
  163. package/utils/quarter.js +58 -0
  164. package/utils/storage.js +198 -0
  165. package/utils/style.js +24 -0
  166. package/utils/theme.js +97 -4
  167. package/utils/transfer-queue.js +7 -0
  168. package/utils/type.js +102 -0
  169. package/utils/util.js +795 -0
  170. package/utils/validator.js +181 -0
  171. package/utils/vxetable/index.js +25 -0
  172. package/config/themes/gold/default.css +0 -241
  173. package/config/themes/gold/default.less +0 -319
  174. package/config/themes/lime/default.css +0 -241
  175. 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) => {
@@ -152,14 +161,20 @@ export const showTitle = (item, vm) => {
152
161
  /**
153
162
  * @description 本地存储和获取标签导航列表
154
163
  */
155
- export const setTagNavListInLocalstorage = list => {
156
- localStorage.tagNaveList = JSON.stringify(list)
164
+ export const setTagNavListInLocalstorage = (list , key) => {
165
+ if (!key) {
166
+ key = 'LD-tagNavList';
167
+ }
168
+ localStorage[key] = JSON.stringify(list)
157
169
  }
158
170
  /**
159
171
  * @returns {Array} 其中的每个元素只包含路由原信息中的name, path, meta三项
160
172
  */
161
- export const getTagNavListFromLocalstorage = () => {
162
- const list = localStorage.tagNaveList
173
+ export const getTagNavListFromLocalstorage = (key) => {
174
+ if (!key) {
175
+ key = 'LD-tagNavList';
176
+ }
177
+ const list = localStorage[key]
163
178
  return list ? JSON.parse(list) : []
164
179
  }
165
180
 
@@ -265,7 +280,7 @@ export const getArrayFromFile = (file) => {
265
280
  reader.readAsText(file) // 以文本格式读取
266
281
  let arr = []
267
282
  reader.onload = function (evt) {
268
- let data = evt.target.result // 读到的数据
283
+ let data = evt.target.card // 读到的数据
269
284
  let pasteData = data.trim()
270
285
  arr = pasteData.split((/[\n\u0085\u2028\u2029]|\r\n?/g)).map(row => {
271
286
  return row.split('\t')
@@ -308,6 +323,12 @@ export const getTableDataFromArray = (array) => {
308
323
  }
309
324
  }
310
325
 
326
+ /**
327
+ * 寻找上级节点
328
+ * @param ele
329
+ * @param tag
330
+ * @returns {*}
331
+ */
311
332
  export const findNodeUpper = (ele, tag) => {
312
333
  if (ele.parentNode) {
313
334
  if (ele.parentNode.tagName === tag.toUpperCase()) {
@@ -318,6 +339,12 @@ export const findNodeUpper = (ele, tag) => {
318
339
  }
319
340
  }
320
341
 
342
+ /**
343
+ * 根据class寻找上级节点
344
+ * @param ele
345
+ * @param classes
346
+ * @returns {*}
347
+ */
321
348
  export const findNodeUpperByClasses = (ele, classes) => {
322
349
  let parentNode = ele.parentNode
323
350
  if (parentNode) {
@@ -330,6 +357,12 @@ export const findNodeUpperByClasses = (ele, classes) => {
330
357
  }
331
358
  }
332
359
 
360
+ /**
361
+ * 根据ele寻找下级节点
362
+ * @param ele
363
+ * @param tag
364
+ * @returns {*}
365
+ */
333
366
  export const findNodeDownward = (ele, tag) => {
334
367
  const tagName = tag.toUpperCase()
335
368
  if (ele.childNodes.length) {
@@ -343,6 +376,12 @@ export const findNodeDownward = (ele, tag) => {
343
376
  }
344
377
  }
345
378
 
379
+ /**
380
+ * @description 判断要查询的数组是否至少有一个元素包含在目标数组中
381
+ * @param access 需要查询的数组
382
+ * @param canViewAccess 目标数组
383
+ * @returns {*}
384
+ */
346
385
  export const showByAccess = (access, canViewAccess) => {
347
386
  return hasOneOf(canViewAccess, access)
348
387
  }
@@ -357,7 +396,7 @@ export const routeEqual = (route1, route2) => {
357
396
  const params2 = route2.params || {}
358
397
  const query1 = route1.query || {}
359
398
  const query2 = route2.query || {}
360
- return (route1.name === route2.name) //&& objEqual(params1, params2) && objEqual(query1, query2)
399
+ return (route1.name === route2.name) && objEqual(params1, params2) && objEqual(query1, query2)
361
400
  }
362
401
 
363
402
  /**
@@ -372,16 +411,23 @@ export const routeHasExist = (tagNavList, routeItem) => {
372
411
  return res
373
412
  }
374
413
 
375
- // scrollTop animation
414
+ /**
415
+ * scrollTop animation
416
+ * @param el
417
+ * @param from
418
+ * @param to
419
+ * @param duration
420
+ * @param endCallback
421
+ */
376
422
  export const scrollTop = (el, from = 0, to, duration = 500, endCallback) => {
377
423
  if (!window.requestAnimationFrame) {
378
424
  window.requestAnimationFrame = (
379
- window.webkitRequestAnimationFrame ||
380
- window.mozRequestAnimationFrame ||
381
- window.msRequestAnimationFrame ||
382
- function (callback) {
383
- return window.setTimeout(callback, 1000 / 60)
384
- }
425
+ window.webkitRequestAnimationFrame ||
426
+ window.mozRequestAnimationFrame ||
427
+ window.msRequestAnimationFrame ||
428
+ function (callback) {
429
+ return window.setTimeout(callback, 1000 / 60)
430
+ }
385
431
  )
386
432
  }
387
433
  const difference = Math.abs(from - to)
@@ -421,8 +467,16 @@ export const setTitle = (configTitle,routeItem, vm) => {
421
467
  window.document.title = resTitle
422
468
  }
423
469
 
424
- export const getUrlParams = () => {
425
- 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中"?"符后的字串
426
480
  const theRequest = new Object();
427
481
  if (url.indexOf("?") != -1) {
428
482
  const str = url.substr(1);
@@ -495,6 +549,11 @@ const hasOneOf = (targetarr, arr) => {
495
549
  return targetarr.some(_ => arr.indexOf(_) > -1)
496
550
  }
497
551
 
552
+ /**
553
+ * foreach
554
+ * @param arr
555
+ * @param fn 回调函数,参数接收arr的元素,索引,arr本身
556
+ */
498
557
  const forEach = (arr, fn) => {
499
558
  if (!arr.length || !fn) return
500
559
  let i = -1
@@ -517,3 +576,500 @@ export function oneOf (value, validList) {
517
576
  }
518
577
  return false
519
578
  }
579
+
580
+ /**
581
+ * recursionKeyFindItem
582
+ * @param arr
583
+ * @param filterKey
584
+ * @param filterValue
585
+ * @param recursionKey
586
+ * @returns {*|null}
587
+ */
588
+ export const recursionKeyFindItem = (arr, filterKey, filterValue, recursionKey) => {
589
+ for (const item of arr) {
590
+ if (item[filterKey] && item[filterKey] == filterValue && item['type'] == 2) {
591
+ return item;
592
+ }
593
+ let result = null;
594
+ if (item[recursionKey]) {
595
+ result = recursionKeyFindItem(item[recursionKey], filterKey, filterValue, recursionKey);
596
+ if (result) {
597
+ return result;
598
+ }
599
+ }
600
+ }
601
+ return null;
602
+ };
603
+
604
+ /**
605
+ * filterMenuName
606
+ * @param menuList
607
+ * @param name
608
+ * @returns {*|null}
609
+ */
610
+ export const filterMenuName = (menuList, name) => {
611
+ return recursionKeyFindItem(menuList, 'name', name, 'children')
612
+ };
613
+
614
+ /**
615
+ * filterMenuUri
616
+ * @param menuList
617
+ * @param name
618
+ * @returns {*|null}
619
+ */
620
+ export const filterMenuUri = (menuList, name) => {
621
+ return recursionKeyFindItem(menuList, 'uri', name, 'children')
622
+ };
623
+
624
+ /**
625
+ * tagExists
626
+ * @param taglist
627
+ * @param name
628
+ * @returns {boolean}
629
+ */
630
+ export const tagExists = (taglist, name) => {
631
+ return taglist && taglist.filter(item => item.name === name).length > 0;
632
+ };
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
+ */
890
+ export const getPreviousTagIndex = (tagList, name) => {
891
+ let count = 0;
892
+ if (tagList && name) {
893
+ for (let i = 0 ;i < tagList.length; i++) {
894
+ let item = tagList[i];
895
+ if (item.name == name) {
896
+ count = i - 1;
897
+ if (count < 0) {
898
+ count = 0;
899
+ }
900
+ return count;
901
+ }
902
+ }
903
+ }
904
+ return count;
905
+ };
906
+
907
+ /**
908
+ * getDelTagIndex
909
+ * @param tagList
910
+ * @param name
911
+ * @returns {number}
912
+ */
913
+ export const getDelTagIndex = (tagList, name) => {
914
+ let count = 1;
915
+ if (tagList && name) {
916
+ for (let i = 1 ;i < tagList.length; i++) {
917
+ let item = tagList[i];
918
+ if (item.name !== name) {
919
+ return count;
920
+ }
921
+ }
922
+ }
923
+ return count;
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
+ }