@lambo-design/shared 1.0.0-beta.26 → 1.0.0-beta.261

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