qdt-admin-layout 1.1.4 → 1.1.6
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/README.md +3 -0
- package/package.json +1 -1
- package/src/component/Aside/DefaultSidebar/index.vue +140 -132
- package/src/component/Aside/DefaultSidebar/style.scss +4 -6
- package/src/component/Aside/index.vue +15 -12
- package/src/component/Aside/style.scss +4 -4
- package/src/component/ContextMenu/style.scss +1 -1
- package/src/component/Header/index.vue +6 -3
- package/src/component/Header/style.scss +1 -1
- package/src/component/Header/theme-light.scss +2 -2
- package/src/component/Layout/index.vue +74 -72
- package/src/component/Layout/style.scss +2 -3
- package/src/component/Logo/style.scss +3 -3
- package/src/component/NavMenu/index.vue +19 -8
- package/src/component/NavMenu/style.scss +13 -7
- package/src/component/NavMenu/theme-dark.scss +7 -2
- package/src/component/NavMenu/theme-light.scss +1 -1
- package/src/component/TagsView/index.vue +0 -2
- package/src/component/TagsView/style.scss +13 -23
- package/src/component/TagsView/util.js +3 -4
- package/src/store/app.js +1 -1
- package/src/store/aside.js +0 -1
- package/src/store/tagsView.js +1 -1
- package/src/style/var.scss +2 -3
- package/types/store.d.ts +141 -117
package/README.md
CHANGED
package/package.json
CHANGED
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
* 默认的侧边栏实现,支持以抽屉形式渲染
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import menuMixin from
|
|
7
|
-
import { appGetters, asideGetters, asideMutations } from
|
|
8
|
-
import Logo from
|
|
9
|
-
import NavMenu from
|
|
10
|
-
import Hamburger from
|
|
11
|
-
import LoadingSpinner from
|
|
12
|
-
import { getRouterActiveMenu, isRedirectRouter } from
|
|
6
|
+
import menuMixin from "../../../mixin/menu";
|
|
7
|
+
import { appGetters, asideGetters, asideMutations } from "../../../store";
|
|
8
|
+
import Logo from "../../../component/Logo";
|
|
9
|
+
import NavMenu from "../../../component/NavMenu";
|
|
10
|
+
import Hamburger from "../../../component/Hamburger";
|
|
11
|
+
import LoadingSpinner from "../../../component/LoadingSpinner";
|
|
12
|
+
import { getRouterActiveMenu, isRedirectRouter } from "../../../config/logic";
|
|
13
13
|
|
|
14
14
|
export default {
|
|
15
|
-
name:
|
|
15
|
+
name: "DefaultSidebar",
|
|
16
16
|
|
|
17
17
|
mixins: [menuMixin],
|
|
18
18
|
|
|
@@ -21,85 +21,92 @@ export default {
|
|
|
21
21
|
// 开启了自动隐藏时,判断鼠标是否在侧边栏外
|
|
22
22
|
mouseOutside: true,
|
|
23
23
|
// 开启了自动隐藏时,用于判断鼠标是否在弹出菜单内
|
|
24
|
-
openedMenuNum: 0
|
|
25
|
-
}
|
|
24
|
+
openedMenuNum: 0,
|
|
25
|
+
};
|
|
26
26
|
},
|
|
27
27
|
|
|
28
28
|
computed: {
|
|
29
29
|
// 侧边栏菜单
|
|
30
30
|
sidebarMenus() {
|
|
31
|
-
const menus = appGetters.menus
|
|
32
|
-
let finalData
|
|
31
|
+
const menus = appGetters.menus;
|
|
32
|
+
let finalData;
|
|
33
33
|
|
|
34
34
|
// 移动端时,侧边栏只会按侧边栏导航模式渲染
|
|
35
|
-
if (appGetters.isMobile) finalData = menus
|
|
35
|
+
if (appGetters.isMobile) finalData = menus;
|
|
36
36
|
else {
|
|
37
37
|
// 只有导航模式为aside或mix时才会渲染侧边栏
|
|
38
38
|
switch (appGetters.navMode) {
|
|
39
|
-
case
|
|
40
|
-
finalData = menus
|
|
41
|
-
break
|
|
42
|
-
case
|
|
43
|
-
const root = menus.find(
|
|
44
|
-
|
|
45
|
-
|
|
39
|
+
case "aside":
|
|
40
|
+
finalData = menus;
|
|
41
|
+
break;
|
|
42
|
+
case "mix":
|
|
43
|
+
const root = menus.find(
|
|
44
|
+
(i) => i.fullPath === appGetters.activeRootMenu
|
|
45
|
+
);
|
|
46
|
+
finalData = root ? root.children || [] : [];
|
|
47
|
+
break;
|
|
46
48
|
default:
|
|
47
|
-
finalData = []
|
|
49
|
+
finalData = [];
|
|
48
50
|
}
|
|
49
51
|
}
|
|
50
52
|
|
|
51
|
-
const f = asideGetters.postMenus
|
|
52
|
-
return f ? f(this.copyMenus(finalData)) : finalData
|
|
53
|
+
const f = asideGetters.postMenus;
|
|
54
|
+
return f ? f(this.copyMenus(finalData)) : finalData;
|
|
53
55
|
},
|
|
54
56
|
|
|
55
57
|
// 当是移动端或设置了侧边栏自动隐藏时将侧边栏用抽屉包裹
|
|
56
58
|
renderInDrawer() {
|
|
57
|
-
return appGetters.isMobile || asideGetters.autoHide
|
|
59
|
+
return appGetters.isMobile || asideGetters.autoHide;
|
|
58
60
|
},
|
|
59
61
|
// el-drawer的自定义类名
|
|
60
62
|
drawerClass() {
|
|
61
|
-
const behindHeader =
|
|
62
|
-
|
|
63
|
+
const behindHeader =
|
|
64
|
+
!appGetters.isMobile && appGetters.struct === "top-bottom";
|
|
65
|
+
return `sidebar-drawer${behindHeader ? " behind-header" : ""}`;
|
|
63
66
|
},
|
|
64
67
|
|
|
65
68
|
// 侧边栏的显隐状态,true显示、false隐藏
|
|
66
69
|
show() {
|
|
67
70
|
// store中要显示那就显示
|
|
68
|
-
if (asideGetters.show) return true
|
|
71
|
+
if (asideGetters.show) return true;
|
|
69
72
|
|
|
70
73
|
// 移动端,false
|
|
71
|
-
if (appGetters.isMobile) return false
|
|
74
|
+
if (appGetters.isMobile) return false;
|
|
72
75
|
|
|
73
76
|
// 未设置侧边栏自动隐藏,false
|
|
74
|
-
if (!asideGetters.autoHide) return false
|
|
77
|
+
if (!asideGetters.autoHide) return false;
|
|
75
78
|
|
|
76
79
|
// 鼠标在侧边栏内,true
|
|
77
|
-
if (!this.mouseOutside) return true
|
|
80
|
+
if (!this.mouseOutside) return true;
|
|
78
81
|
|
|
79
82
|
// 侧边栏处于折叠状态 且 存在弹出的子菜单,true
|
|
80
|
-
return this.collapse && this.openedMenuNum > 0
|
|
83
|
+
return this.collapse && this.openedMenuNum > 0;
|
|
81
84
|
},
|
|
82
85
|
|
|
83
86
|
// 侧边栏的折叠状态,true折叠、false展开,仅在pc端可折叠
|
|
84
87
|
collapse() {
|
|
85
|
-
return asideGetters.collapse && !appGetters.isMobile
|
|
88
|
+
return asideGetters.collapse && !appGetters.isMobile;
|
|
86
89
|
},
|
|
87
90
|
|
|
88
91
|
// 是否需要显示logo
|
|
89
92
|
showLogo() {
|
|
90
|
-
return
|
|
93
|
+
// return (
|
|
94
|
+
// appGetters.showLogo &&
|
|
95
|
+
// (appGetters.isMobile || appGetters.struct === "left-right")
|
|
96
|
+
// );
|
|
97
|
+
return true;
|
|
91
98
|
},
|
|
92
99
|
|
|
93
100
|
sidebarClass() {
|
|
94
|
-
return {
|
|
101
|
+
return { sidebar: true, collapse: this.collapse };
|
|
95
102
|
},
|
|
96
103
|
|
|
97
104
|
// 只有设置了自动隐藏时才需要绑定鼠标的移入移出事件
|
|
98
105
|
sidebarEvent() {
|
|
99
106
|
return !appGetters.isMobile && asideGetters.autoHide
|
|
100
107
|
? { mouseleave: this.onMouseLeave, mouseenter: this.onMouseEnter }
|
|
101
|
-
: undefined
|
|
102
|
-
}
|
|
108
|
+
: undefined;
|
|
109
|
+
},
|
|
103
110
|
},
|
|
104
111
|
|
|
105
112
|
watch: {
|
|
@@ -107,209 +114,207 @@ export default {
|
|
|
107
114
|
$route: {
|
|
108
115
|
immediate: true,
|
|
109
116
|
handler(to) {
|
|
110
|
-
if (isRedirectRouter(to)) return
|
|
117
|
+
if (isRedirectRouter(to)) return;
|
|
111
118
|
|
|
112
|
-
this.activeMenu = getRouterActiveMenu(this.$route)
|
|
119
|
+
this.activeMenu = getRouterActiveMenu(this.$route);
|
|
113
120
|
|
|
114
|
-
const elMenu = this.$_getElMenuInstance()
|
|
115
|
-
if (!elMenu) return
|
|
121
|
+
const elMenu = this.$_getElMenuInstance();
|
|
122
|
+
if (!elMenu) return;
|
|
116
123
|
|
|
117
|
-
this.resetActiveMenu()
|
|
124
|
+
this.resetActiveMenu();
|
|
118
125
|
|
|
119
|
-
const item = elMenu.items[this.activeMenu]
|
|
120
|
-
if (!item) return
|
|
126
|
+
const item = elMenu.items[this.activeMenu];
|
|
127
|
+
if (!item) return;
|
|
121
128
|
|
|
122
129
|
// 由于elMenu的initOpenedMenu()不会触发select事件,所以选择手动触发
|
|
123
|
-
this.onSelect(item.index, item.indexPath, item, false)
|
|
130
|
+
this.onSelect(item.index, item.indexPath, item, false);
|
|
124
131
|
|
|
125
132
|
// 滚动至激活的菜单
|
|
126
|
-
this.$nextTick(this.moveToActiveMenuVertically)
|
|
127
|
-
}
|
|
128
|
-
}
|
|
133
|
+
this.$nextTick(this.moveToActiveMenuVertically);
|
|
134
|
+
},
|
|
135
|
+
},
|
|
129
136
|
},
|
|
130
137
|
|
|
131
138
|
methods: {
|
|
132
139
|
// 返回传入的菜单数据的拷贝副本
|
|
133
140
|
copyMenus(menus) {
|
|
134
|
-
return menus.map(menu => {
|
|
135
|
-
const result = { ...menu }
|
|
141
|
+
return menus.map((menu) => {
|
|
142
|
+
const result = { ...menu };
|
|
136
143
|
if (result.children) {
|
|
137
|
-
result.children = this.copyMenus(result.children)
|
|
144
|
+
result.children = this.copyMenus(result.children);
|
|
138
145
|
}
|
|
139
|
-
return result
|
|
140
|
-
})
|
|
146
|
+
return result;
|
|
147
|
+
});
|
|
141
148
|
},
|
|
142
149
|
|
|
143
150
|
// 模拟选中菜单
|
|
144
151
|
onSelect(index, indexPath, item, jump = true) {
|
|
145
152
|
// 非折叠且开启手风琴模式时,收起其它展开项
|
|
146
153
|
if (!asideGetters.collapse && asideGetters.uniqueOpen) {
|
|
147
|
-
const elMenu = this.$_getElMenuInstance()
|
|
148
|
-
elMenu.openedMenus = indexPath.slice(0, -1)
|
|
154
|
+
const elMenu = this.$_getElMenuInstance();
|
|
155
|
+
elMenu.openedMenus = indexPath.slice(0, -1);
|
|
149
156
|
}
|
|
150
157
|
|
|
151
|
-
jump && this.actionOnSelectMenu(index)
|
|
158
|
+
jump && this.actionOnSelectMenu(index);
|
|
152
159
|
|
|
153
160
|
// 抽屉模式下需要关闭抽屉
|
|
154
161
|
if (this.renderInDrawer && this.show) {
|
|
155
|
-
asideMutations.close()
|
|
156
|
-
this.mouseOutside = true
|
|
162
|
+
asideMutations.close();
|
|
163
|
+
this.mouseOutside = true;
|
|
157
164
|
}
|
|
158
165
|
},
|
|
159
166
|
|
|
160
167
|
// 将当前激活的菜单移动到视窗中
|
|
161
168
|
moveToActiveMenuVertically() {
|
|
162
|
-
const elMenu = this.$_getElMenuInstance()
|
|
163
|
-
if (!elMenu) return
|
|
169
|
+
const elMenu = this.$_getElMenuInstance();
|
|
170
|
+
if (!elMenu) return;
|
|
164
171
|
|
|
165
|
-
const cur = elMenu.activeIndex
|
|
166
|
-
if (!cur) return
|
|
172
|
+
const cur = elMenu.activeIndex;
|
|
173
|
+
if (!cur) return;
|
|
167
174
|
|
|
168
|
-
const curInstance = elMenu.items[cur]
|
|
169
|
-
if (!curInstance) return
|
|
175
|
+
const curInstance = elMenu.items[cur];
|
|
176
|
+
if (!curInstance) return;
|
|
170
177
|
|
|
171
|
-
let el = curInstance.$el
|
|
178
|
+
let el = curInstance.$el;
|
|
172
179
|
|
|
173
180
|
// 当侧边栏折叠时,需要滚动至可视区域的元素是激活菜单的最顶层父节点
|
|
174
181
|
if (elMenu.collapse) {
|
|
175
|
-
let rootParent = curInstance
|
|
176
|
-
while (rootParent.$parent.$options.componentName !==
|
|
177
|
-
rootParent = rootParent.$parent
|
|
182
|
+
let rootParent = curInstance;
|
|
183
|
+
while (rootParent.$parent.$options.componentName !== "ElMenu") {
|
|
184
|
+
rootParent = rootParent.$parent;
|
|
178
185
|
}
|
|
179
|
-
el = rootParent.$el
|
|
186
|
+
el = rootParent.$el;
|
|
180
187
|
}
|
|
181
188
|
|
|
182
189
|
/*
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
window.setTimeout(
|
|
190
|
+
* 这里考虑了菜单展开时的200ms动画时间
|
|
191
|
+
* 为什么不分情况讨论?比如当subMenu已经是展开状态时,无需延时滚动
|
|
192
|
+
* 但这种情况无法判断,因为这时menu.openedMenus已经包含了subMenu,无论subMenu之前是否展开
|
|
193
|
+
* 所以统一延时300ms
|
|
194
|
+
* */
|
|
195
|
+
window.setTimeout(
|
|
196
|
+
() => el.scrollIntoView({ behavior: "smooth", block: "nearest" }),
|
|
197
|
+
300
|
|
198
|
+
);
|
|
189
199
|
},
|
|
190
200
|
|
|
191
201
|
// 开启侧边栏自动隐藏后的鼠标移动事件
|
|
192
202
|
onMouseMove(e) {
|
|
193
203
|
// 鼠标移动至屏幕左侧边缘时,标识鼠标在侧边栏内部
|
|
194
|
-
if (e.clientX <= 1) this.mouseOutside = false
|
|
204
|
+
if (e.clientX <= 1) this.mouseOutside = false;
|
|
195
205
|
},
|
|
196
206
|
onMouseLeave() {
|
|
197
|
-
this.mouseOutside = true
|
|
207
|
+
this.mouseOutside = true;
|
|
198
208
|
},
|
|
199
209
|
onMouseEnter() {
|
|
200
|
-
this.mouseOutside = false
|
|
210
|
+
this.mouseOutside = false;
|
|
201
211
|
},
|
|
202
212
|
|
|
203
213
|
// 渲染el-menu时监听其展开菜单
|
|
204
214
|
watchOpenedMenus() {
|
|
205
215
|
// 尝试取消之前设置的监听
|
|
206
216
|
if (this.watchOpenedMenusCallback) {
|
|
207
|
-
this.watchOpenedMenusCallback()
|
|
208
|
-
this.watchOpenedMenusCallback = null
|
|
217
|
+
this.watchOpenedMenusCallback();
|
|
218
|
+
this.watchOpenedMenusCallback = null;
|
|
209
219
|
}
|
|
210
220
|
|
|
211
|
-
const elMenu = this.$_getElMenuInstance()
|
|
212
|
-
if (!elMenu) return
|
|
221
|
+
const elMenu = this.$_getElMenuInstance();
|
|
222
|
+
if (!elMenu) return;
|
|
213
223
|
|
|
214
|
-
this.watchOpenedMenusCallback = elMenu.$watch(
|
|
215
|
-
this.openedMenuNum = v.length
|
|
216
|
-
})
|
|
224
|
+
this.watchOpenedMenusCallback = elMenu.$watch("openedMenus", (v) => {
|
|
225
|
+
this.openedMenuNum = v.length;
|
|
226
|
+
});
|
|
217
227
|
},
|
|
218
228
|
|
|
219
229
|
// 抽屉打开的过渡动画结束时,滚动至高亮菜单
|
|
220
230
|
onDrawerOpened() {
|
|
221
|
-
this.$nextTick(this.moveToActiveMenuVertically)
|
|
231
|
+
this.$nextTick(this.moveToActiveMenuVertically);
|
|
222
232
|
},
|
|
223
233
|
|
|
224
234
|
renderHeader(h) {
|
|
225
|
-
const defaultContent = this.showLogo &&
|
|
226
|
-
|
|
235
|
+
const defaultContent = this.showLogo && (
|
|
236
|
+
<Logo show-title={!this.collapse} />
|
|
237
|
+
);
|
|
238
|
+
const { headerSlot } = asideGetters;
|
|
227
239
|
|
|
228
|
-
return headerSlot ? headerSlot(h, defaultContent) : defaultContent
|
|
240
|
+
return headerSlot ? headerSlot(h, defaultContent) : defaultContent;
|
|
229
241
|
},
|
|
230
242
|
renderFooter(h) {
|
|
231
|
-
const defaultContent = asideGetters.showHamburger &&
|
|
232
|
-
|
|
243
|
+
const defaultContent = asideGetters.showHamburger &&
|
|
244
|
+
!this.renderInDrawer && <Hamburger />;
|
|
245
|
+
const { footerSlot } = asideGetters;
|
|
233
246
|
|
|
234
|
-
let children
|
|
247
|
+
let children;
|
|
235
248
|
|
|
236
249
|
if (footerSlot) {
|
|
237
|
-
let renderResult = footerSlot(h, defaultContent)
|
|
250
|
+
let renderResult = footerSlot(h, defaultContent);
|
|
238
251
|
if (Array.isArray(renderResult)) {
|
|
239
|
-
renderResult = renderResult.filter(Boolean)
|
|
252
|
+
renderResult = renderResult.filter(Boolean);
|
|
240
253
|
if (renderResult.length > 0) {
|
|
241
|
-
children = renderResult
|
|
254
|
+
children = renderResult;
|
|
242
255
|
}
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
}
|
|
246
|
-
else children = defaultContent
|
|
256
|
+
} else children = renderResult;
|
|
257
|
+
} else children = defaultContent;
|
|
247
258
|
|
|
248
|
-
return children &&
|
|
249
|
-
|
|
250
|
-
{children}
|
|
251
|
-
</div>
|
|
252
|
-
)
|
|
253
|
-
}
|
|
259
|
+
return children && <div class="sidebar-footer">{children}</div>;
|
|
260
|
+
},
|
|
254
261
|
},
|
|
255
262
|
|
|
256
263
|
created() {
|
|
257
264
|
// 侧边栏菜单变化时设置当前的高亮菜单
|
|
258
265
|
// 在此前,activeMenu会在watch:$route中发生第一次变化(不会真有人把menu.meta.activeMenu设成''吧?)
|
|
259
|
-
this.$watch(
|
|
266
|
+
this.$watch("sidebarMenus", this.setDefaultActiveMenu, { immediate: true });
|
|
260
267
|
|
|
261
268
|
// 添加或移除鼠标移动事件
|
|
262
269
|
this.$watch(
|
|
263
270
|
() => {
|
|
264
271
|
// 如果是移动端,false
|
|
265
|
-
if (appGetters.isMobile) return false
|
|
272
|
+
if (appGetters.isMobile) return false;
|
|
266
273
|
|
|
267
274
|
// 如果未启用侧边栏自动隐藏,false
|
|
268
|
-
if (!asideGetters.autoHide) return false
|
|
275
|
+
if (!asideGetters.autoHide) return false;
|
|
269
276
|
|
|
270
277
|
// 侧边栏为打开状态,false
|
|
271
|
-
if (this.show) return false
|
|
278
|
+
if (this.show) return false;
|
|
272
279
|
|
|
273
280
|
// 鼠标在侧边栏外部,true
|
|
274
|
-
return this.mouseOutside
|
|
281
|
+
return this.mouseOutside;
|
|
275
282
|
},
|
|
276
|
-
v => {
|
|
283
|
+
(v) => {
|
|
277
284
|
// 尝试移除之前可能添加的事件
|
|
278
|
-
window.removeEventListener(
|
|
285
|
+
window.removeEventListener("mousemove", this.onMouseMove);
|
|
279
286
|
|
|
280
|
-
v && window.addEventListener(
|
|
287
|
+
v && window.addEventListener("mousemove", this.onMouseMove);
|
|
281
288
|
},
|
|
282
289
|
{ immediate: true }
|
|
283
|
-
)
|
|
290
|
+
);
|
|
284
291
|
|
|
285
292
|
// 切换至移动端 或 切换至桌面端且设置了自动隐藏时,收起侧边栏
|
|
286
293
|
this.$watch(
|
|
287
294
|
() => appGetters.isMobile,
|
|
288
|
-
v => (v || asideGetters.autoHide) && asideMutations.close()
|
|
289
|
-
)
|
|
295
|
+
(v) => (v || asideGetters.autoHide) && asideMutations.close()
|
|
296
|
+
);
|
|
290
297
|
},
|
|
291
298
|
|
|
292
299
|
beforeDestroy() {
|
|
293
|
-
window.removeEventListener(
|
|
300
|
+
window.removeEventListener("mousemove", this.onMouseMove);
|
|
294
301
|
},
|
|
295
302
|
|
|
296
303
|
render(h) {
|
|
297
304
|
// 没有菜单时,仅当设置了alwaysRender才退出后续渲染
|
|
298
305
|
if (this.sidebarMenus.length === 0 && !asideGetters.alwaysRender) {
|
|
299
|
-
return
|
|
306
|
+
return;
|
|
300
307
|
}
|
|
301
|
-
|
|
302
308
|
const sidebar = (
|
|
303
309
|
<div {...{ class: this.sidebarClass, on: this.sidebarEvent }}>
|
|
304
310
|
{this.renderHeader(h)}
|
|
305
311
|
|
|
306
|
-
{appGetters.loadingMenu
|
|
307
|
-
|
|
308
|
-
<
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
: <NavMenu
|
|
312
|
+
{appGetters.loadingMenu ? (
|
|
313
|
+
<div style="position: relative;flex: 1">
|
|
314
|
+
<LoadingSpinner />
|
|
315
|
+
</div>
|
|
316
|
+
) : (
|
|
317
|
+
<NavMenu
|
|
313
318
|
ref="nav-menu"
|
|
314
319
|
menus={this.sidebarMenus}
|
|
315
320
|
collapse={this.collapse}
|
|
@@ -324,16 +329,19 @@ export default {
|
|
|
324
329
|
menu-content-slot={asideGetters.menuContentSlot}
|
|
325
330
|
{...{
|
|
326
331
|
// 只能在nav-menu的mounted里,自身mounted时nav-menu可能还未渲染
|
|
327
|
-
on: {
|
|
332
|
+
on: {
|
|
333
|
+
select: this.onSelect,
|
|
334
|
+
"hook:mounted": this.watchOpenedMenus,
|
|
335
|
+
},
|
|
328
336
|
}}
|
|
329
337
|
/>
|
|
330
|
-
}
|
|
338
|
+
)}
|
|
331
339
|
|
|
332
340
|
{this.renderFooter(h)}
|
|
333
341
|
</div>
|
|
334
|
-
)
|
|
342
|
+
);
|
|
335
343
|
|
|
336
|
-
if (!this.renderInDrawer) return sidebar
|
|
344
|
+
if (!this.renderInDrawer) return sidebar;
|
|
337
345
|
|
|
338
346
|
return (
|
|
339
347
|
<el-drawer
|
|
@@ -348,7 +356,7 @@ export default {
|
|
|
348
356
|
>
|
|
349
357
|
{sidebar}
|
|
350
358
|
</el-drawer>
|
|
351
|
-
)
|
|
352
|
-
}
|
|
353
|
-
}
|
|
359
|
+
);
|
|
360
|
+
},
|
|
361
|
+
};
|
|
354
362
|
</script>
|
|
@@ -4,17 +4,15 @@
|
|
|
4
4
|
height: 100%;
|
|
5
5
|
width: $aside-width;
|
|
6
6
|
transition: width 0.2s;
|
|
7
|
-
|
|
8
7
|
> .el-menu {
|
|
9
8
|
flex: 1;
|
|
10
9
|
}
|
|
11
10
|
|
|
12
11
|
&.collapse {
|
|
13
|
-
width:
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
12
|
+
width: 160px;
|
|
13
|
+
// .logo-container {
|
|
14
|
+
// padding-left: ($aside-collapse-width - $logo-size) / 2;
|
|
15
|
+
// }
|
|
18
16
|
}
|
|
19
17
|
}
|
|
20
18
|
|
|
@@ -4,27 +4,30 @@
|
|
|
4
4
|
* 拆成Aside和DefaultSidebar是为了能让用户自定义侧边栏内容
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { appGetters, asideGetters } from
|
|
8
|
-
import DefaultSidebar from
|
|
7
|
+
import { appGetters, asideGetters } from "../../store";
|
|
8
|
+
import DefaultSidebar from "./DefaultSidebar";
|
|
9
9
|
|
|
10
10
|
export default {
|
|
11
|
-
name:
|
|
11
|
+
name: "Aside",
|
|
12
12
|
|
|
13
13
|
computed: {
|
|
14
14
|
// 移动端下不能设置z-index,否则会被el-drawer的遮罩遮住
|
|
15
15
|
style() {
|
|
16
|
-
return appGetters.isMobile ?
|
|
17
|
-
}
|
|
16
|
+
return appGetters.isMobile ? "z-index: auto !important" : undefined;
|
|
17
|
+
},
|
|
18
18
|
},
|
|
19
19
|
|
|
20
20
|
render(h) {
|
|
21
|
-
const { defaultSlot } = asideGetters
|
|
22
|
-
|
|
21
|
+
const { defaultSlot } = asideGetters;
|
|
23
22
|
return (
|
|
24
|
-
<aside class=
|
|
25
|
-
{defaultSlot ?
|
|
23
|
+
<aside class="aside dark" style={this.style}>
|
|
24
|
+
{defaultSlot ? (
|
|
25
|
+
defaultSlot(h)
|
|
26
|
+
) : (
|
|
27
|
+
<DefaultSidebar ref="default-sidebar" />
|
|
28
|
+
)}
|
|
26
29
|
</aside>
|
|
27
|
-
)
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
+
);
|
|
31
|
+
},
|
|
32
|
+
};
|
|
30
33
|
</script>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
@import
|
|
1
|
+
@import "./DefaultSidebar/style";
|
|
2
2
|
|
|
3
3
|
.aside {
|
|
4
|
-
z-index: $header-z-index
|
|
4
|
+
z-index: $header-z-index + 1;
|
|
5
5
|
|
|
6
6
|
// 侧边栏底部区域
|
|
7
7
|
.sidebar-footer {
|
|
@@ -19,5 +19,5 @@
|
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
@import
|
|
23
|
-
@import
|
|
22
|
+
@import "./theme-light";
|
|
23
|
+
@import "./theme-dark";
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
max-height: 50vh;
|
|
9
9
|
color: rgb(96, 98, 102);
|
|
10
10
|
background-color: rgb(255, 255, 255);
|
|
11
|
-
box-shadow: 0 2px 4px
|
|
11
|
+
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12), 0 0 6px rgba(0, 0, 0, 0.4);
|
|
12
12
|
overflow-y: auto;
|
|
13
13
|
overflow-x: hidden;
|
|
14
14
|
|
|
@@ -25,7 +25,8 @@ export default {
|
|
|
25
25
|
!appGetters.isMobile &&
|
|
26
26
|
appGetters.showLogo &&
|
|
27
27
|
(appGetters.navMode === "head" || appGetters.struct === "top-bottom");
|
|
28
|
-
return renderLogo && <Logo />;
|
|
28
|
+
// return renderLogo && <Logo />;
|
|
29
|
+
return null;
|
|
29
30
|
},
|
|
30
31
|
// 左侧汉堡包
|
|
31
32
|
defaultHamburger() {
|
|
@@ -72,12 +73,14 @@ export default {
|
|
|
72
73
|
/>
|
|
73
74
|
</span>
|
|
74
75
|
{!isEmpty(username) && (
|
|
75
|
-
<span on-click={userinfo} class="username hide-on-mobile">
|
|
76
|
+
<span on-click={userinfo} class="username hide-on-mobile">
|
|
77
|
+
{username}
|
|
78
|
+
</span>
|
|
76
79
|
)}
|
|
77
80
|
|
|
78
81
|
<span class="username shu">|</span>
|
|
79
82
|
<i
|
|
80
|
-
style="color:#
|
|
83
|
+
style="color:#333"
|
|
81
84
|
class="el-icon-bell header-icon"
|
|
82
85
|
on-click={message}
|
|
83
86
|
/>
|