@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.
- package/config/config.js +26 -2
- package/config/index.js +7 -2
- package/config/themes/atrovirens/atrovirens.css +564 -0
- package/config/themes/atrovirens/atrovirens.css.map +1 -0
- package/config/themes/atrovirens/atrovirens.less +656 -0
- package/config/themes/atrovirens/var.less +662 -0
- package/config/themes/blue/blue.css +564 -0
- package/config/themes/blue/blue.css.map +1 -0
- package/config/themes/blue/blue.less +657 -0
- package/config/themes/blue/var.less +663 -0
- package/config/themes/blue-white/blue-white.css +564 -0
- package/config/themes/blue-white/blue-white.css.map +1 -0
- package/config/themes/blue-white/blue-white.less +656 -0
- package/config/themes/blue-white/var.less +663 -0
- package/config/themes/blue-white-tight/blue-white-tight.css +565 -0
- package/config/themes/blue-white-tight/blue-white-tight.css.map +1 -0
- package/config/themes/blue-white-tight/blue-white-tight.less +657 -0
- package/config/themes/blue-white-tight/var.less +663 -0
- package/config/themes/deep/deep.css +564 -0
- package/config/themes/deep/deep.css.map +1 -0
- package/config/themes/deep/deep.less +655 -0
- package/config/themes/deep/var.less +663 -0
- package/config/themes/default/default.css +380 -57
- package/config/themes/default/default.css.map +1 -0
- package/config/themes/default/default.less +425 -88
- package/config/themes/default/var.less +361 -12
- package/config/themes/eap/eap.css +564 -0
- package/config/themes/eap/eap.css.map +1 -0
- package/config/themes/eap/eap.less +656 -0
- package/config/themes/eap/var.less +663 -0
- package/config/themes/gold/gold.css +564 -0
- package/config/themes/gold/gold.css.map +1 -0
- package/config/themes/gold/gold.less +656 -0
- package/config/themes/gold/var.less +357 -7
- package/config/themes/index.js +17 -3
- package/config/themes/lime/lime.css +564 -0
- package/config/themes/lime/lime.css.map +1 -0
- package/config/themes/lime/lime.less +656 -0
- package/config/themes/lime/var.less +357 -7
- package/config/themes/orange/orange.css +564 -0
- package/config/themes/orange/orange.css.map +1 -0
- package/config/themes/orange/orange.less +656 -0
- package/config/themes/orange/var.less +664 -0
- package/config/themes/red/red.css +564 -0
- package/config/themes/red/red.css.map +1 -0
- package/config/themes/red/red.less +656 -0
- package/config/themes/red/var.less +663 -0
- package/config/themes/theme-atrovirens.js +546 -0
- package/config/themes/theme-blue.js +546 -0
- package/config/themes/theme-bw.js +546 -0
- package/config/themes/theme-bwt.js +547 -0
- package/config/themes/theme-deep.js +546 -0
- package/config/themes/theme-default.js +353 -59
- package/config/themes/theme-eap.js +546 -0
- package/config/themes/theme-gold.js +305 -11
- package/config/themes/theme-lime.js +305 -11
- package/config/themes/theme-orange.js +547 -0
- package/config/themes/theme-red.js +546 -0
- package/directives/index.js +23 -0
- package/directives/module/draggable.js +56 -0
- package/directives/module/permission.js +49 -0
- package/directives/module/print.js +1 -0
- package/directives/module/vue-print-nb/README.md +63 -0
- package/directives/module/vue-print-nb/print.js +94 -0
- package/directives/module/vue-print-nb/printarea.js +532 -0
- package/index.js +8 -1
- package/nstyles/common.less +197 -0
- package/nstyles/components/404.less +46 -0
- package/nstyles/components/button.less +34 -0
- package/nstyles/components/date-picker.less +37 -0
- package/nstyles/components/drawer.less +20 -0
- package/nstyles/components/dropdown.less +18 -0
- package/nstyles/components/excel-flow.less +72 -0
- package/nstyles/components/form.less +303 -0
- package/nstyles/components/index.less +15 -0
- package/nstyles/components/layout/collect.less +10 -0
- package/nstyles/components/layout/detail-view.less +107 -0
- package/nstyles/components/layout/full-screen.less +7 -0
- package/nstyles/components/layout/index.less +7 -0
- package/nstyles/components/layout/other-menu.less +142 -0
- package/nstyles/components/layout/page-view.less +101 -0
- package/nstyles/components/layout/sider-trigger.less +41 -0
- package/nstyles/components/layout/tags-nav.less +113 -0
- package/nstyles/components/modal.less +85 -0
- package/nstyles/components/panel.less +31 -0
- package/nstyles/components/select.less +3 -0
- package/nstyles/components/sign.less +27 -0
- package/nstyles/components/table.less +315 -0
- package/nstyles/components/tree.less +159 -0
- package/nstyles/components/upload.less +131 -0
- package/nstyles/index.less +5 -0
- package/nstyles/reset.less +65 -0
- package/nstyles/third/ag.less +173 -0
- package/nstyles/third/icons/sort-desc.svg +1 -0
- package/nstyles/third/icons/sort-up.svg +1 -0
- package/nstyles/third/icons/sorting.svg +1 -0
- package/nstyles/third/index.less +11 -0
- package/nstyles/third/view-design.less +356 -0
- package/nstyles/variables/base.less +143 -0
- package/nstyles/variables/index.less +4 -0
- package/nstyles/variables/theme/default/button.less +7 -0
- package/nstyles/variables/theme/default/common.less +57 -0
- package/nstyles/variables/theme/default/index.less +7 -0
- package/nstyles/variables/theme/default/layout.less +40 -0
- package/nstyles/variables/theme/default/table.less +37 -0
- package/nstyles/variables/theme/default/tag.less +3 -0
- package/nstyles/variables/theme/default/upload.less +3 -0
- package/nstyles/variables/theme/index.less +13 -0
- package/nstyles/variables/theme/small/button.less +7 -0
- package/nstyles/variables/theme/small/common.less +39 -0
- package/nstyles/variables/theme/small/index.less +5 -0
- package/nstyles/variables/theme/small/layout.less +21 -0
- package/nstyles/variables/theme/small/table.less +17 -0
- package/nstyles/variables/theme/small/tag.less +3 -0
- package/package.json +39 -20
- package/plugin/index.js +12 -0
- package/plugin/module/date-format.js +30 -0
- package/plugin/module/loading.js +26 -0
- package/plugin/module/warn-handler.js +11 -0
- package/styles/image/lan_navigator.png +0 -0
- package/styles/image/lv_navigator.png +0 -0
- package/utils/ajax/content-type.js +30 -0
- package/utils/ajax/interceptors.js +97 -90
- package/utils/assist.js +78 -10
- package/utils/base64.js +126 -0
- package/utils/blob.js +47 -0
- package/utils/crypto/index.js +10 -0
- package/utils/date.js +334 -305
- package/utils/dict/built-in-dict.js +20 -0
- package/utils/dict/index.js +75 -0
- package/utils/event.js +72 -0
- package/utils/excel.js +369 -237
- package/utils/file.js +19 -0
- package/utils/form/validate.js +29 -0
- package/utils/half-year.js +68 -0
- package/utils/index.js +37 -0
- package/utils/json.js +29 -0
- package/utils/lodop.js +5 -0
- package/utils/menu/before-close.js +17 -0
- package/utils/menu/index.js +381 -0
- package/utils/mime_type.js +67 -0
- package/utils/modelerUtil.js +4 -1
- package/utils/n/date.js +57 -0
- package/utils/n/index.js +10 -0
- package/utils/n/is-type.js +176 -0
- package/utils/n/number.js +144 -0
- package/utils/n/permission-cache.js +11 -0
- package/utils/n/reuqest/axiosN.js +15 -0
- package/utils/n/reuqest/content-type.js +19 -0
- package/utils/n/reuqest/interceptors.js +95 -0
- package/utils/n/reuqest/url-params.js +12 -0
- package/utils/n/storage.js +51 -0
- package/utils/n/token.js +51 -0
- package/utils/n/user-cache.js +11 -0
- package/utils/n/user.js +34 -0
- package/utils/n/uuid.js +16 -0
- package/utils/n-generator-routers.js +208 -0
- package/utils/n-router.js +205 -0
- package/utils/n-theme.js +30 -0
- package/utils/number.js +72 -15
- package/utils/oss.js +58 -0
- package/utils/platform.js +582 -26
- package/utils/quarter.js +58 -0
- package/utils/storage.js +198 -0
- package/utils/style.js +24 -0
- package/utils/theme.js +97 -4
- package/utils/transfer-queue.js +7 -0
- package/utils/type.js +102 -0
- package/utils/util.js +795 -0
- package/utils/validator.js +181 -0
- package/utils/vxetable/index.js +25 -0
- package/config/themes/gold/default.css +0 -241
- package/config/themes/gold/default.less +0 -319
- package/config/themes/lime/default.css +0 -241
- 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 = '
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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)
|
|
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
|
-
|
|
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
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
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
|
-
|
|
425
|
-
|
|
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
|
+
}
|