Merge pull request #208 from lin-xin/dev

EventBus折叠改为链式调用
pull/217/head
林鑫 2019-09-05 11:16:24 +08:00 committed by GitHub
commit 838a03086e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 189 additions and 172 deletions

View File

@ -38,9 +38,6 @@
<i class="el-icon-caret-bottom"></i> <i class="el-icon-caret-bottom"></i>
</span> </span>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<a href="http://blog.gdfengshuo.com/about/" target="_blank">
<el-dropdown-item>关于作者</el-dropdown-item>
</a>
<a href="https://github.com/lin-xin/vue-manage-system" target="_blank"> <a href="https://github.com/lin-xin/vue-manage-system" target="_blank">
<el-dropdown-item>项目仓库</el-dropdown-item> <el-dropdown-item>项目仓库</el-dropdown-item>
</a> </a>

View File

@ -17,33 +17,35 @@
</template> </template>
<script> <script>
import vHead from './Header.vue'; import vHead from './Header.vue';
import vSidebar from './Sidebar.vue'; import vSidebar from './Sidebar.vue';
import vTags from './Tags.vue'; import vTags from './Tags.vue';
import bus from './bus'; import bus from './bus';
export default { export default {
data(){ data() {
return { return {
tagsList: [], tagsList: [],
collapse: false collapse: false
} };
}, },
components:{ components: {
vHead, vSidebar, vTags vHead,
}, vSidebar,
created(){ vTags
bus.$on('collapse', msg => { },
this.collapse = msg; created() {
}) bus.$on('collapse-content', msg => {
this.collapse = msg;
});
// 使keep-alive // 使keep-alive
bus.$on('tags', msg => { bus.$on('tags', msg => {
let arr = []; let arr = [];
for(let i = 0, len = msg.length; i < len; i ++){ for (let i = 0, len = msg.length; i < len; i++) {
msg[i].name && arr.push(msg[i].name); msg[i].name && arr.push(msg[i].name);
} }
this.tagsList = arr; this.tagsList = arr;
}) });
}
} }
};
</script> </script>

View File

@ -1,29 +1,47 @@
<template> <template>
<div class="sidebar"> <div class="sidebar">
<el-menu class="sidebar-el-menu" :default-active="onRoutes" :collapse="collapse" background-color="#324157" <el-menu
text-color="#bfcbd9" active-text-color="#20a0ff" unique-opened router> class="sidebar-el-menu"
:default-active="onRoutes"
:collapse="collapse"
background-color="#324157"
text-color="#bfcbd9"
active-text-color="#20a0ff"
unique-opened
router
>
<template v-for="item in items"> <template v-for="item in items">
<template v-if="item.subs"> <template v-if="item.subs">
<el-submenu :index="item.index" :key="item.index"> <el-submenu :index="item.index" :key="item.index">
<template slot="title"> <template slot="title">
<i :class="item.icon"></i><span slot="title">{{ item.title }}</span> <i :class="item.icon"></i>
<span slot="title">{{ item.title }}</span>
</template> </template>
<template v-for="subItem in item.subs"> <template v-for="subItem in item.subs">
<el-submenu v-if="subItem.subs" :index="subItem.index" :key="subItem.index"> <el-submenu
v-if="subItem.subs"
:index="subItem.index"
:key="subItem.index"
>
<template slot="title">{{ subItem.title }}</template> <template slot="title">{{ subItem.title }}</template>
<el-menu-item v-for="(threeItem,i) in subItem.subs" :key="i" :index="threeItem.index"> <el-menu-item
{{ threeItem.title }} v-for="(threeItem,i) in subItem.subs"
</el-menu-item> :key="i"
:index="threeItem.index"
>{{ threeItem.title }}</el-menu-item>
</el-submenu> </el-submenu>
<el-menu-item v-else :index="subItem.index" :key="subItem.index"> <el-menu-item
{{ subItem.title }} v-else
</el-menu-item> :index="subItem.index"
:key="subItem.index"
>{{ subItem.title }}</el-menu-item>
</template> </template>
</el-submenu> </el-submenu>
</template> </template>
<template v-else> <template v-else>
<el-menu-item :index="item.index" :key="item.index"> <el-menu-item :index="item.index" :key="item.index">
<i :class="item.icon"></i><span slot="title">{{ item.title }}</span> <i :class="item.icon"></i>
<span slot="title">{{ item.title }}</span>
</el-menu-item> </el-menu-item>
</template> </template>
</template> </template>
@ -32,140 +50,140 @@
</template> </template>
<script> <script>
import bus from '../common/bus'; import bus from '../common/bus';
export default { export default {
data() { data() {
return { return {
collapse: false, collapse: false,
items: [ items: [
{ {
icon: 'el-icon-lx-home', icon: 'el-icon-lx-home',
index: 'dashboard', index: 'dashboard',
title: '系统首页' title: '系统首页'
}, },
{ {
icon: 'el-icon-lx-cascades', icon: 'el-icon-lx-cascades',
index: 'table', index: 'table',
title: '基础表格' title: '基础表格'
}, },
{ {
icon: 'el-icon-lx-copy', icon: 'el-icon-lx-copy',
index: 'tabs', index: 'tabs',
title: 'tab选项卡' title: 'tab选项卡'
}, },
{ {
icon: 'el-icon-lx-calendar', icon: 'el-icon-lx-calendar',
index: '3', index: '3',
title: '表单相关', title: '表单相关',
subs: [ subs: [
{ {
index: 'form', index: 'form',
title: '基本表单' title: '基本表单'
}, },
{ {
index: '3-2', index: '3-2',
title: '三级菜单', title: '三级菜单',
subs: [ subs: [
{ {
index: 'editor', index: 'editor',
title: '富文本编辑器' title: '富文本编辑器'
}, },
{ {
index: 'markdown', index: 'markdown',
title: 'markdown编辑器' title: 'markdown编辑器'
}, }
] ]
}, },
{ {
index: 'upload', index: 'upload',
title: '文件上传' title: '文件上传'
} }
] ]
}, },
{ {
icon: 'el-icon-lx-emoji', icon: 'el-icon-lx-emoji',
index: 'icon', index: 'icon',
title: '自定义图标' title: '自定义图标'
}, },
{ {
icon: 'el-icon-pie-chart', icon: 'el-icon-pie-chart',
index: 'charts', index: 'charts',
title: 'schart图表' title: 'schart图表'
}, },
{ {
icon: 'el-icon-rank', icon: 'el-icon-rank',
index: '6', index: '6',
title: '拖拽组件', title: '拖拽组件',
subs: [ subs: [
{ {
index: 'drag', index: 'drag',
title: '拖拽列表', title: '拖拽列表'
}, },
{ {
index: 'dialog', index: 'dialog',
title: '拖拽弹框', title: '拖拽弹框'
} }
] ]
}, },
{ {
icon: 'el-icon-lx-global', icon: 'el-icon-lx-global',
index: 'i18n', index: 'i18n',
title: '国际化功能' title: '国际化功能'
}, },
{ {
icon: 'el-icon-lx-warn', icon: 'el-icon-lx-warn',
index: '7', index: '7',
title: '错误处理', title: '错误处理',
subs: [ subs: [
{ {
index: 'permission', index: 'permission',
title: '权限测试' title: '权限测试'
}, },
{ {
index: '404', index: '404',
title: '404页面' title: '404页面'
} }
] ]
} },
, {
{ icon: 'el-icon-lx-redpacket_fill',
icon: 'el-icon-lx-redpacket_fill', index: '/donate',
index: '/donate', title: '支持作者'
title: '支持作者' }
} ]
] };
} },
}, computed: {
computed:{ onRoutes() {
onRoutes(){ return this.$route.path.replace('/', '');
return this.$route.path.replace('/','');
}
},
created(){
// Event Bus
bus.$on('collapse', msg => {
this.collapse = msg;
})
} }
},
created() {
// Event Bus
bus.$on('collapse', msg => {
this.collapse = msg;
bus.$emit('collapse-content', msg);
});
} }
};
</script> </script>
<style scoped> <style scoped>
.sidebar{ .sidebar {
display: block; display: block;
position: absolute; position: absolute;
left: 0; left: 0;
top: 70px; top: 70px;
bottom:0; bottom: 0;
overflow-y: scroll; overflow-y: scroll;
} }
.sidebar::-webkit-scrollbar{ .sidebar::-webkit-scrollbar {
width: 0; width: 0;
} }
.sidebar-el-menu:not(.el-menu--collapse){ .sidebar-el-menu:not(.el-menu--collapse) {
width: 250px; width: 250px;
} }
.sidebar > ul { .sidebar > ul {
height:100%; height: 100%;
} }
</style> </style>