@lambo-design/pro-layout 1.0.0-beta.2 → 1.0.0-beta.21
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/package.json +17 -18
- package/src/components/pro-layout-header.vue +2 -3
- package/src/components/pro-layout-logo.vue +22 -10
- package/src/components/pro-layout-nav.vue +2 -2
- package/src/components/pro-layout-sider-collapsed-menu.vue +17 -20
- package/src/components/pro-layout-sider.vue +18 -5
- package/src/components/pro-layout-tabs.vue +27 -7
- package/src/components/pro-layout-tools-user.vue +1 -1
- package/src/components/pro-layout-tools.vue +2 -2
- package/src/index.vue +103 -19
- package/src/styles/css/main.less +0 -92
package/package.json
CHANGED
|
@@ -1,18 +1,17 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@lambo-design/pro-layout",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
4
|
-
"description": "",
|
|
5
|
-
"main": "index.js",
|
|
6
|
-
"
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@lambo-design/pro-layout",
|
|
3
|
+
"version": "1.0.0-beta.21",
|
|
4
|
+
"description": "",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"author": "lambo",
|
|
7
|
+
"license": "ISC",
|
|
8
|
+
"publishConfig": {
|
|
9
|
+
"access": "public",
|
|
10
|
+
"registry": "https://registry.npmjs.org/"
|
|
11
|
+
},
|
|
12
|
+
"dependencies": {
|
|
13
|
+
"@lambo-design/core": "4.7.1-beta.37",
|
|
14
|
+
"@lambo-design/shared": "1.0.0-beta.16"
|
|
15
|
+
},
|
|
16
|
+
"scripts": {}
|
|
17
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="pro-layout-header">
|
|
2
|
+
<div class="pro-layout-header-wrapper">
|
|
3
3
|
<div class="trigger-box">
|
|
4
4
|
<LamboProTrigger></LamboProTrigger>
|
|
5
5
|
</div>
|
|
@@ -32,13 +32,12 @@ export default {
|
|
|
32
32
|
</script>
|
|
33
33
|
|
|
34
34
|
<style scoped lang="less">
|
|
35
|
-
.pro-layout-header{
|
|
35
|
+
.pro-layout-header-wrapper{
|
|
36
36
|
width: auto;
|
|
37
37
|
height: 64px;
|
|
38
38
|
.trigger-box{
|
|
39
39
|
float: left;
|
|
40
40
|
height: inherit;
|
|
41
|
-
border: 1px solid #000000;
|
|
42
41
|
}
|
|
43
42
|
.logo-box{
|
|
44
43
|
float: left;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="pro-layout-logo">
|
|
3
|
-
<div class="logo"></div>
|
|
2
|
+
<div class="pro-layout-logo-wrapper">
|
|
3
|
+
<div class="logo" :style="logoStyle"></div>
|
|
4
4
|
<div class="divider"></div>
|
|
5
5
|
<div class="system-name">{{systemName}}</div>
|
|
6
6
|
</div>
|
|
@@ -12,20 +12,34 @@ export default {
|
|
|
12
12
|
name: "pro-layout-logo",
|
|
13
13
|
data(){
|
|
14
14
|
return {
|
|
15
|
+
systemInfo: {},
|
|
15
16
|
systemName: '后台管理系统'
|
|
16
17
|
}
|
|
17
18
|
},
|
|
19
|
+
computed:{
|
|
20
|
+
logoStyle(){
|
|
21
|
+
if (this.systemInfo && this.systemInfo.systemLogo) {
|
|
22
|
+
return 'background: url("' + this.systemInfo.systemLogo + '") no-repeat;background-size: 100%;'
|
|
23
|
+
}
|
|
24
|
+
return '';
|
|
25
|
+
}
|
|
26
|
+
},
|
|
18
27
|
methods: {
|
|
19
28
|
initListener(){
|
|
20
|
-
Bus.$on('system-
|
|
21
|
-
this.
|
|
29
|
+
Bus.$on('system-info',(data)=>{
|
|
30
|
+
this.initSystem(data)
|
|
22
31
|
});
|
|
23
32
|
},
|
|
24
33
|
destroyListener(){
|
|
25
|
-
Bus.$off('system-
|
|
34
|
+
Bus.$off('system-info')
|
|
26
35
|
},
|
|
27
|
-
|
|
28
|
-
|
|
36
|
+
initSystem(data){
|
|
37
|
+
if (data) {
|
|
38
|
+
this.systemInfo = data;
|
|
39
|
+
if (data.systemName) {
|
|
40
|
+
this.systemName = data.systemName;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
29
43
|
}
|
|
30
44
|
},
|
|
31
45
|
created(){
|
|
@@ -38,9 +52,8 @@ export default {
|
|
|
38
52
|
</script>
|
|
39
53
|
|
|
40
54
|
<style scoped lang="less">
|
|
41
|
-
.pro-layout-logo{
|
|
55
|
+
.pro-layout-logo-wrapper{
|
|
42
56
|
overflow: hidden;
|
|
43
|
-
border-bottom: 1px solid #000000;
|
|
44
57
|
.logo{
|
|
45
58
|
width: 150px;
|
|
46
59
|
height: 55px;
|
|
@@ -48,7 +61,6 @@ export default {
|
|
|
48
61
|
background-size: 100%;
|
|
49
62
|
float: left;
|
|
50
63
|
margin-top: 8px;
|
|
51
|
-
border-bottom: 1px solid #000000;
|
|
52
64
|
}
|
|
53
65
|
.divider{
|
|
54
66
|
height: 33px;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="pro-layout-nav">
|
|
2
|
+
<div class="pro-layout-nav-wrapper">
|
|
3
3
|
<Menu ref="topNav" mode="horizontal" theme="dark" :active-name="activeName" @on-select="selectApp">
|
|
4
4
|
<MenuItem :name="item.appId" v-for="item in topMenList" :key="item.appId">
|
|
5
5
|
{{item.name}}
|
|
@@ -104,7 +104,7 @@ export default {
|
|
|
104
104
|
|
|
105
105
|
<style scoped lang="less">
|
|
106
106
|
@import '@lambo-design/core/src/styles/default.less';
|
|
107
|
-
.pro-layout-nav{
|
|
107
|
+
.pro-layout-nav-wrapper{
|
|
108
108
|
.ivu-menu{
|
|
109
109
|
.ivu-menu-item{
|
|
110
110
|
&:hover{
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<Dropdown ref="dropdown" :class="hideTitle ? '' : 'collased-menu-dropdown'" :placement="placement"
|
|
3
|
-
:transfer="
|
|
4
|
-
<a :style="{textAlign: !hideTitle ? 'left' : ''}" class="drop-menu-a" type="text"
|
|
3
|
+
:transfer="true" @on-click="handleClick">
|
|
4
|
+
<a :style="{textAlign: !hideTitle ? 'left' : '',padding: !hideTitle ? '0px' : ''}" class="drop-menu-a" type="text"
|
|
5
5
|
@mouseover="handleMousemove($event, children)">
|
|
6
|
-
<ProLayoutSiderIcon :icon-type="parentItem.meta.icon"></ProLayoutSiderIcon>
|
|
6
|
+
<ProLayoutSiderIcon :icon-type="parentItem.meta.icon" :icon-size="hideTitle ? 26 : 14"></ProLayoutSiderIcon>
|
|
7
7
|
<span v-if="!hideTitle" class="menu-title">{{ showTitle(parentItem) }}</span>
|
|
8
|
-
<Icon v-if="!hideTitle" :size="
|
|
8
|
+
<Icon v-if="!hideTitle" :size="16"type="ios-arrow-forward"/>
|
|
9
9
|
</a>
|
|
10
|
-
<DropdownMenu ref="dropdown" slot="list">
|
|
10
|
+
<DropdownMenu ref="dropdown" slot="list" style="width: auto">
|
|
11
11
|
<template v-for="child in children">
|
|
12
12
|
<ProLayoutSiderCollapsedMenu v-if="showChildren(child)" :key="`drop-${child.name}`"
|
|
13
13
|
:parent-item="child">
|
|
@@ -69,26 +69,23 @@ export default {
|
|
|
69
69
|
list-style: none;
|
|
70
70
|
cursor: pointer;
|
|
71
71
|
transition: background 0.2s ease-in-out;
|
|
72
|
+
display: block;
|
|
72
73
|
&:hover{
|
|
73
74
|
color: var(--heading-color, @_heading-color);
|
|
74
75
|
background: rgba(26,26,26,0.05);
|
|
75
76
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
color: var(--
|
|
77
|
+
/deep/.ivu-dropdown-rel{
|
|
78
|
+
a.drop-menu-a{
|
|
79
|
+
display: inline-block;
|
|
80
|
+
width: 100%;
|
|
81
|
+
font-weight: normal;
|
|
82
|
+
margin-left: -5px;
|
|
83
|
+
color: var(--text-color, @_text-color) !important;
|
|
84
|
+
text-decoration: none;
|
|
85
|
+
&:hover{
|
|
86
|
+
color: var(--heading-color, @_heading-color) !important;
|
|
87
|
+
}
|
|
83
88
|
}
|
|
84
89
|
}
|
|
85
90
|
}
|
|
86
|
-
</style>
|
|
87
|
-
<style lang="less">
|
|
88
|
-
.ivu-select-dropdown {
|
|
89
|
-
&.ivu-dropdown-transfer {
|
|
90
|
-
max-height: 400px;
|
|
91
|
-
max-width: 150px;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
91
|
</style>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="pro-layout-sider">
|
|
2
|
+
<div class="pro-layout-sider-wrapper">
|
|
3
3
|
<Menu v-show="!collapsed" ref="menu"
|
|
4
4
|
:accordion="accordion" :active-name="activeName"
|
|
5
5
|
:open-names="openedNames" theme="dark"
|
|
@@ -55,7 +55,7 @@ import ProLayoutSiderMenuItem from './pro-layout-sider-menu-item'
|
|
|
55
55
|
import ProLayoutSiderCollapsedMenu from './pro-layout-sider-collapsed-menu'
|
|
56
56
|
import {
|
|
57
57
|
filterMenuName,
|
|
58
|
-
filterMenuUri,
|
|
58
|
+
filterMenuUri, routeEqual,
|
|
59
59
|
tagExists
|
|
60
60
|
} from "@lambo-design/shared/utils/platform";
|
|
61
61
|
|
|
@@ -153,7 +153,6 @@ export default {
|
|
|
153
153
|
}
|
|
154
154
|
Bus.$emit('tag-list', tagList, menu.name)
|
|
155
155
|
}
|
|
156
|
-
//Bus.$emit('menu-click', name)
|
|
157
156
|
},
|
|
158
157
|
triggerChange(data){
|
|
159
158
|
this.collapsed = data;
|
|
@@ -163,7 +162,21 @@ export default {
|
|
|
163
162
|
this.value = name;
|
|
164
163
|
},
|
|
165
164
|
menuClick(current) {
|
|
166
|
-
this.
|
|
165
|
+
let item = this.originMenuList.filter(menu => menu.name === current);
|
|
166
|
+
console.log("item=",item)
|
|
167
|
+
if (item && item.length > 0){
|
|
168
|
+
let type = item.type;
|
|
169
|
+
if (type == 2) {
|
|
170
|
+
this.activeName = current;
|
|
171
|
+
} else {
|
|
172
|
+
let pItem = this.originMenuList.filter(menu => menu.permissionId === item.pid);
|
|
173
|
+
if (pItem && pItem.length > 0){
|
|
174
|
+
this.activeName = pItem.name;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
} else {
|
|
178
|
+
this.activeName = current;
|
|
179
|
+
}
|
|
167
180
|
},
|
|
168
181
|
getOpenedNamesByActiveName(){
|
|
169
182
|
let res = filterMenuName(this.menuList,this.activeName);
|
|
@@ -204,7 +217,7 @@ export default {
|
|
|
204
217
|
|
|
205
218
|
<style scoped lang="less">
|
|
206
219
|
@import "@lambo-design/core/src/styles/default";
|
|
207
|
-
.pro-layout-sider{
|
|
220
|
+
.pro-layout-sider-wrapper{
|
|
208
221
|
/deep/.ivu-menu-submenu{
|
|
209
222
|
.ivu-menu{
|
|
210
223
|
background: #1A1A1A;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="pro-layout-tabs">
|
|
2
|
+
<div class="pro-layout-tabs-wrapper">
|
|
3
3
|
<div class="close-con">
|
|
4
4
|
<Dropdown transfer @on-click="handleTagsOption">
|
|
5
5
|
<Icon :size="24" type="ios-close-circle-outline" class="btn-close"/>
|
|
@@ -44,6 +44,7 @@
|
|
|
44
44
|
<script>
|
|
45
45
|
import {
|
|
46
46
|
getPreviousTagIndex,
|
|
47
|
+
getDelTagIndex,
|
|
47
48
|
setTagNavListInLocalstorage,
|
|
48
49
|
showTitle
|
|
49
50
|
} from '@lambo-design/shared/utils/platform'
|
|
@@ -56,6 +57,8 @@ export default {
|
|
|
56
57
|
name: 'pro-layout-tabs',
|
|
57
58
|
data() {
|
|
58
59
|
return {
|
|
60
|
+
systemInfo: {},
|
|
61
|
+
tabNum : 8,
|
|
59
62
|
appId: '',
|
|
60
63
|
appInfo: {},
|
|
61
64
|
navList: [],
|
|
@@ -76,6 +79,9 @@ export default {
|
|
|
76
79
|
},
|
|
77
80
|
methods: {
|
|
78
81
|
initListener(){
|
|
82
|
+
Bus.$on('system-info',(data)=>{
|
|
83
|
+
this.initSystem(data)
|
|
84
|
+
});
|
|
79
85
|
Bus.$on('nav-list',(data)=>{
|
|
80
86
|
this.initNav(data)
|
|
81
87
|
});
|
|
@@ -90,11 +96,20 @@ export default {
|
|
|
90
96
|
})
|
|
91
97
|
},
|
|
92
98
|
destroyListener(){
|
|
99
|
+
Bus.$off('system-info')
|
|
93
100
|
Bus.$off('nav-list')
|
|
94
101
|
Bus.$off('menu-list')
|
|
95
102
|
Bus.$off('tag-list')
|
|
96
103
|
Bus.$off('change-app')
|
|
97
104
|
},
|
|
105
|
+
initSystem(data){
|
|
106
|
+
if (data) {
|
|
107
|
+
this.systemInfo = data;
|
|
108
|
+
if (data.tabNum) {
|
|
109
|
+
this.tabNum = data.tabNum;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
},
|
|
98
113
|
initNav(data){
|
|
99
114
|
if (data.toString() === this.navList.toString()) {
|
|
100
115
|
return;
|
|
@@ -105,7 +120,11 @@ export default {
|
|
|
105
120
|
this.originMenuList = deepCopy(data);
|
|
106
121
|
},
|
|
107
122
|
initTags(data,current){
|
|
108
|
-
|
|
123
|
+
if (data.length > this.tabNum) {
|
|
124
|
+
let index = getDelTagIndex(data,current);
|
|
125
|
+
data.splice(index,1);
|
|
126
|
+
}
|
|
127
|
+
setTagNavListInLocalstorage(data, config.routerBase + '-tagNavList');
|
|
109
128
|
this.tagList = data;
|
|
110
129
|
if (current !== this.value) {
|
|
111
130
|
this.value = current;
|
|
@@ -186,7 +205,7 @@ export default {
|
|
|
186
205
|
},
|
|
187
206
|
handleClick(item) {
|
|
188
207
|
this.value = item.name
|
|
189
|
-
Bus.$emit('menu-click', item.name)
|
|
208
|
+
Bus.$emit('menu-click', item.name , item)
|
|
190
209
|
if (item.meta && item.meta.appId
|
|
191
210
|
&& item.meta.appId != this.appId
|
|
192
211
|
&& item.meta.appId != config.homeRouter.meta.appId) {
|
|
@@ -238,7 +257,7 @@ export default {
|
|
|
238
257
|
this.visible = true
|
|
239
258
|
const offsetLeft = this.$el.getBoundingClientRect().left
|
|
240
259
|
this.contextMenuLeft = e.clientX - offsetLeft + 10
|
|
241
|
-
this.contextMenuTop = e.clientY -
|
|
260
|
+
this.contextMenuTop = e.clientY - 54
|
|
242
261
|
},
|
|
243
262
|
closeMenu() {
|
|
244
263
|
this.visible = false
|
|
@@ -278,13 +297,13 @@ export default {
|
|
|
278
297
|
user-select: none;
|
|
279
298
|
}
|
|
280
299
|
|
|
281
|
-
.pro-layout-tabs {
|
|
300
|
+
.pro-layout-tabs-wrapper {
|
|
282
301
|
position: relative;
|
|
283
302
|
border-top: 1px solid #F0F0F0;
|
|
284
303
|
border-bottom: 1px solid #F0F0F0;
|
|
285
304
|
width: 100%;
|
|
286
|
-
height:
|
|
287
|
-
line-height:
|
|
305
|
+
height: 46px;
|
|
306
|
+
line-height: 42px;
|
|
288
307
|
color: var(--text-color, @_text-color);
|
|
289
308
|
.no-select;
|
|
290
309
|
|
|
@@ -368,6 +387,7 @@ export default {
|
|
|
368
387
|
margin: 0;
|
|
369
388
|
padding: 5px 15px;
|
|
370
389
|
cursor: pointer;
|
|
390
|
+
line-height: 18px;
|
|
371
391
|
|
|
372
392
|
&:hover {
|
|
373
393
|
background: #eee;
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<span>欢迎,{{ userInfo.userName }}</span>
|
|
5
5
|
<Icon type="ios-arrow-down" />
|
|
6
6
|
<DropdownMenu v-if="userInfo.dropList.length > 0" slot="list">
|
|
7
|
-
<DropdownItem v-for="item in userInfo.dropList" :name="item.name"> {{item.value}}</DropdownItem>
|
|
7
|
+
<DropdownItem v-for="item in userInfo.dropList" :name="item.name" :key="item.name"> {{item.value}}</DropdownItem>
|
|
8
8
|
</DropdownMenu>
|
|
9
9
|
</Dropdown>
|
|
10
10
|
</div>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="pro-layout-tools">
|
|
2
|
+
<div class="pro-layout-tools-wrapper">
|
|
3
3
|
<LamboProLayoutToolsUser></LamboProLayoutToolsUser>
|
|
4
4
|
</div>
|
|
5
5
|
</template>
|
|
@@ -15,7 +15,7 @@ export default {
|
|
|
15
15
|
</script>
|
|
16
16
|
|
|
17
17
|
<style scoped lang="less">
|
|
18
|
-
.pro-layout-tools{
|
|
18
|
+
.pro-layout-tools-wrapper{
|
|
19
19
|
margin-right: 15px;
|
|
20
20
|
}
|
|
21
21
|
</style>
|
package/src/index.vue
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<i-layout class="pro-layout">
|
|
3
|
-
<i-header>
|
|
2
|
+
<i-layout class="pro-layout" :class="layoutClass">
|
|
3
|
+
<i-header class="pro-layout-header">
|
|
4
4
|
<LamboProLayoutHeader></LamboProLayoutHeader>
|
|
5
5
|
</i-header>
|
|
6
6
|
<i-layout>
|
|
7
7
|
<i-sider
|
|
8
|
+
class="pro-layout-sider"
|
|
8
9
|
hide-trigger
|
|
9
10
|
collapsible
|
|
10
|
-
:width="
|
|
11
|
+
:width="220"
|
|
11
12
|
:collapsed-width="64"
|
|
12
13
|
v-model="collapsed">
|
|
13
14
|
<LamboProLayoutSider ref="sider"></LamboProLayoutSider>
|
|
14
15
|
</i-sider>
|
|
15
16
|
<i-content class="pro-layout-content">
|
|
16
|
-
<i-layout>
|
|
17
|
+
<i-layout class="pro-layout-content-layout">
|
|
17
18
|
<div class="pro-layout-tabs">
|
|
18
19
|
<LamboProLayoutTabs></LamboProLayoutTabs>
|
|
19
20
|
</div>
|
|
@@ -34,14 +35,21 @@ import LamboProLayoutTabs from './components/pro-layout-tabs'
|
|
|
34
35
|
import Bus from '@lambo-design/shared/utils/bus'
|
|
35
36
|
import config from "@lambo-design/shared/config/config";
|
|
36
37
|
import {
|
|
37
|
-
getTagNavListFromLocalstorage, tagExists,
|
|
38
|
+
getTagNavListFromLocalstorage, routeEqual, tagExists,
|
|
38
39
|
} from "@lambo-design/shared/utils/platform";
|
|
39
40
|
import {deepCopy} from "@lambo-design/shared/utils/assist";
|
|
40
41
|
export default {
|
|
41
42
|
props:{
|
|
42
43
|
systemInfo: {
|
|
43
44
|
type: Object,
|
|
44
|
-
default: () => {
|
|
45
|
+
default: () => {
|
|
46
|
+
return {
|
|
47
|
+
systemName: '后台管理系统',
|
|
48
|
+
systemLogo: '',
|
|
49
|
+
layoutSize: '',
|
|
50
|
+
tabNum: 8,
|
|
51
|
+
}
|
|
52
|
+
}
|
|
45
53
|
},
|
|
46
54
|
userInfo: {
|
|
47
55
|
type: Object,
|
|
@@ -85,6 +93,17 @@ export default {
|
|
|
85
93
|
menuList,
|
|
86
94
|
homeRouter
|
|
87
95
|
}
|
|
96
|
+
},
|
|
97
|
+
layoutClass(){
|
|
98
|
+
if (this.systemInfo && this.systemInfo.layoutSize) {
|
|
99
|
+
let layoutSize = this.systemInfo.layoutSize;
|
|
100
|
+
if (layoutSize == 'default') {
|
|
101
|
+
return '';
|
|
102
|
+
} else {
|
|
103
|
+
return 'small';
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return '';
|
|
88
107
|
}
|
|
89
108
|
},
|
|
90
109
|
watch: {
|
|
@@ -107,8 +126,8 @@ export default {
|
|
|
107
126
|
Bus.$on('user-action', (name)=> {
|
|
108
127
|
this.userAction(name)
|
|
109
128
|
})
|
|
110
|
-
Bus.$on('menu-click',(name)=>{
|
|
111
|
-
this.menuClick(name)
|
|
129
|
+
Bus.$on('menu-click',(name, item)=>{
|
|
130
|
+
this.menuClick(name, item)
|
|
112
131
|
})
|
|
113
132
|
Bus.$on('tag-list',(data,current)=>{
|
|
114
133
|
this.changeTabs(data,current)
|
|
@@ -122,15 +141,13 @@ export default {
|
|
|
122
141
|
Bus.$off('tag-list')
|
|
123
142
|
},
|
|
124
143
|
initEmit(){
|
|
125
|
-
|
|
126
|
-
Bus.$emit('system-name-change',this.systemInfo.systemName)
|
|
127
|
-
}
|
|
144
|
+
Bus.$emit('system-info',this.systemInfo)
|
|
128
145
|
Bus.$emit('user-info',this.userInfo)
|
|
129
146
|
Bus.$emit('nav-list',this.navList)
|
|
130
147
|
Bus.$emit('menu-list',this.menuList)
|
|
131
148
|
},
|
|
132
149
|
initTags(){
|
|
133
|
-
let tagList = getTagNavListFromLocalstorage();
|
|
150
|
+
let tagList = getTagNavListFromLocalstorage(config.routerBase + '-tagNavList');
|
|
134
151
|
if (tagList.length == 0) {
|
|
135
152
|
tagList.push(this.homeRouter);
|
|
136
153
|
}
|
|
@@ -154,10 +171,15 @@ export default {
|
|
|
154
171
|
userAction(name){
|
|
155
172
|
this.$emit('user-action',name)
|
|
156
173
|
},
|
|
157
|
-
menuClick(name){
|
|
158
|
-
|
|
174
|
+
menuClick(name, item){
|
|
175
|
+
if (!item) {
|
|
176
|
+
let res = this.menuList.filter(item => item.name == name);
|
|
177
|
+
if (res && res.length > 0) {
|
|
178
|
+
item = res[0];
|
|
179
|
+
}
|
|
180
|
+
}
|
|
159
181
|
sessionStorage.setItem('activeName',name);
|
|
160
|
-
this.$emit('menu-click', name,
|
|
182
|
+
this.$emit('menu-click', name, item)
|
|
161
183
|
},
|
|
162
184
|
changeTabs(data,current){
|
|
163
185
|
this.$emit('change-tabs',data,current)
|
|
@@ -175,9 +197,17 @@ export default {
|
|
|
175
197
|
} else {
|
|
176
198
|
name = menu.name;
|
|
177
199
|
menuItem = deepCopy(menu);
|
|
178
|
-
let tagList = getTagNavListFromLocalstorage();
|
|
200
|
+
let tagList = getTagNavListFromLocalstorage(config.routerBase + '-tagNavList');
|
|
179
201
|
if (!tagExists(tagList,name)) {
|
|
180
202
|
tagList.push(menuItem);
|
|
203
|
+
} else {
|
|
204
|
+
let tag = tagList.filter(item => item.name == name)[0];
|
|
205
|
+
if (!routeEqual(tag,menuItem)) {
|
|
206
|
+
let res = tagList.filter(item => item.name !== name);
|
|
207
|
+
tag = Object.assign(tag, menu);
|
|
208
|
+
res.push(tag);
|
|
209
|
+
tagList = deepCopy(res);
|
|
210
|
+
}
|
|
181
211
|
}
|
|
182
212
|
Bus.$emit('tag-list', tagList, name)
|
|
183
213
|
}
|
|
@@ -195,13 +225,67 @@ export default {
|
|
|
195
225
|
}
|
|
196
226
|
</script>
|
|
197
227
|
|
|
198
|
-
<style
|
|
228
|
+
<style lang="less">
|
|
229
|
+
@import "@lambo-design/core/src/styles/default";
|
|
199
230
|
.pro-layout{
|
|
200
231
|
color: #ffffff;
|
|
201
|
-
|
|
202
|
-
|
|
232
|
+
height: 100vh;
|
|
233
|
+
width: 100%;
|
|
234
|
+
overflow: hidden;
|
|
203
235
|
.ivu-layout-header{
|
|
204
236
|
padding: 0;
|
|
205
237
|
}
|
|
238
|
+
.pro-layout-sider{
|
|
239
|
+
overflow: hidden;
|
|
240
|
+
/deep/.ivu-layout-sider-children{
|
|
241
|
+
height: ~"calc(100vh - 65px)";
|
|
242
|
+
overflow-y: scroll;
|
|
243
|
+
margin-right: -18px;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
.pro-layout-content{
|
|
247
|
+
.pro-layout-content-layout{
|
|
248
|
+
height: ~"calc(100vh - 65px)";
|
|
249
|
+
.pro-layout-page{
|
|
250
|
+
overflow: hidden;
|
|
251
|
+
color: var(--text-color,@_text-color);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
&.small {
|
|
256
|
+
.ivu-layout-header{
|
|
257
|
+
height: 50px;
|
|
258
|
+
line-height: 50px;
|
|
259
|
+
.pro-layout-header-wrapper{
|
|
260
|
+
height: 50px;
|
|
261
|
+
.trigger-box{
|
|
262
|
+
.sider-trigger-a{
|
|
263
|
+
margin-top: 5px;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
.logo-box{
|
|
267
|
+
.pro-layout-logo-wrapper{
|
|
268
|
+
.logo{
|
|
269
|
+
height: 45px;
|
|
270
|
+
margin-top: 5px;
|
|
271
|
+
}
|
|
272
|
+
.divider{
|
|
273
|
+
height: 26px;
|
|
274
|
+
margin: 12px;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
.nav-box{
|
|
279
|
+
.pro-layout-nav-wrapper{
|
|
280
|
+
.ivu-menu-horizontal{
|
|
281
|
+
height: 46px;
|
|
282
|
+
line-height: 46px;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
}
|
|
206
290
|
}
|
|
207
291
|
</style>
|
package/src/styles/css/main.less
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
.pro-layout{
|
|
2
|
-
.logo-con{
|
|
3
|
-
height: 64px;
|
|
4
|
-
padding: 10px;
|
|
5
|
-
background-color: #1890ff;
|
|
6
|
-
position: sticky;
|
|
7
|
-
top: 0px;
|
|
8
|
-
z-index: 1000;
|
|
9
|
-
img{
|
|
10
|
-
height: 44px;
|
|
11
|
-
width: 44px;
|
|
12
|
-
margin-left: 15px;
|
|
13
|
-
float: left;
|
|
14
|
-
}
|
|
15
|
-
.system-title{
|
|
16
|
-
float: left;
|
|
17
|
-
font-weight: bolder;
|
|
18
|
-
font-size: 30px;
|
|
19
|
-
margin-right: 20px;
|
|
20
|
-
color: #ffffff;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
.header-con{
|
|
24
|
-
background: #1890ff;
|
|
25
|
-
color: #ffffff;
|
|
26
|
-
padding: 0 0px;
|
|
27
|
-
width: 100%;
|
|
28
|
-
}
|
|
29
|
-
.main-layout-con{
|
|
30
|
-
height: 100%;
|
|
31
|
-
overflow: hidden;
|
|
32
|
-
}
|
|
33
|
-
.main-content-con{
|
|
34
|
-
height: ~"calc(100% - 60px)";
|
|
35
|
-
overflow: hidden;
|
|
36
|
-
}
|
|
37
|
-
//tab框样式
|
|
38
|
-
.tags-nav .scroll-outer {
|
|
39
|
-
background: #f5f7f9;
|
|
40
|
-
box-shadow: 0px 0 3px 2px #f5f7f9 inset
|
|
41
|
-
}
|
|
42
|
-
.tag-nav-wrapper{
|
|
43
|
-
padding: 0;
|
|
44
|
-
height:40px;
|
|
45
|
-
background:#F0F0F0;
|
|
46
|
-
}
|
|
47
|
-
.content-wrapper{
|
|
48
|
-
height: ~"calc(100% - 80px)";
|
|
49
|
-
background: #ffffff;
|
|
50
|
-
}
|
|
51
|
-
.left-sider{
|
|
52
|
-
background: #f5f7f9;
|
|
53
|
-
.ivu-layout-sider-children{
|
|
54
|
-
overflow-y: scroll;
|
|
55
|
-
margin-right: -18px;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
.ivu-menu-item > i{
|
|
60
|
-
margin-right: 12px !important;
|
|
61
|
-
}
|
|
62
|
-
.ivu-menu-submenu > .ivu-menu > .ivu-menu-item > i {
|
|
63
|
-
margin-right: 8px !important;
|
|
64
|
-
}
|
|
65
|
-
.collased-menu-dropdown{
|
|
66
|
-
width: 100%;
|
|
67
|
-
margin: 0;
|
|
68
|
-
line-height: normal;
|
|
69
|
-
padding: 7px 0 6px 16px;
|
|
70
|
-
clear: both;
|
|
71
|
-
font-size: 12px !important;
|
|
72
|
-
white-space: nowrap;
|
|
73
|
-
list-style: none;
|
|
74
|
-
cursor: pointer;
|
|
75
|
-
transition: background 0.2s ease-in-out;
|
|
76
|
-
&:hover{
|
|
77
|
-
background: rgba(100, 100, 100, 0.1);
|
|
78
|
-
}
|
|
79
|
-
& * {
|
|
80
|
-
color: #515a6e;
|
|
81
|
-
}
|
|
82
|
-
.ivu-menu-item > i{
|
|
83
|
-
margin-right: 12px !important;
|
|
84
|
-
}
|
|
85
|
-
.ivu-menu-submenu > .ivu-menu > .ivu-menu-item > i {
|
|
86
|
-
margin-right: 8px !important;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
.ivu-select-dropdown.ivu-dropdown-transfer{
|
|
91
|
-
max-height: 400px;
|
|
92
|
-
}
|