feat: plugin-layout支持mixin布局

This commit is contained in:
万纯 2021-01-08 18:57:54 +08:00
parent c2e230f784
commit 9eb0704c8e
3 changed files with 62 additions and 11 deletions

View File

@ -16,23 +16,27 @@
'layout-sider', 'layout-sider',
fixedSideBar ? 'layout-sider-fixed' : '' fixedSideBar ? 'layout-sider-fixed' : ''
]" ]"
:theme="siderTheme"
collapsible collapsible
theme="dark"
> >
<div class="layout-logo"> <div v-if="navigation !== 'mixin'" class="layout-logo">
<img :src="logo" class="logo-img" /> <img :src="logo" class="logo-img" />
<h1 class="logo-name">{{title}}</h1> <h1 class="logo-name">{{title}}</h1>
</div> </div>
<Menu :menus="menus" :theme="theme" /> <Menu :menus="menus" :theme="siderTheme" />
</a-layout-sider> </a-layout-sider>
</template> </template>
<a-layout class="child-layout"> <a-layout class="child-layout">
<a-layout-header v-if="fixedHeader" class="layout-header"> <a-layout-header v-if="currentFixedHeader" class="layout-header">
</a-layout-header> </a-layout-header>
<a-layout-header <a-layout-header
:class="[fixedHeader ? 'layout-header-fixed' : '']" :class="[currentFixedHeader ? 'layout-header-fixed' : '']"
class="layout-header" class="layout-header"
> >
<div v-if="navigation === 'mixin'" class="layout-logo">
<img :src="logo" class="logo-img" />
<h1 class="logo-name">{{title}}</h1>
</div>
<template v-if="navigation === 'top'"> <template v-if="navigation === 'top'">
<div class="layout-logo"> <div class="layout-logo">
<img :src="logo" class="logo-img" /> <img :src="logo" class="logo-img" />
@ -105,7 +109,7 @@ export default {
}, },
navigation: { navigation: {
type: String, type: String,
default: 'side' // side / top / mixin // default: 'mixin' // side / top / mixin //
}, },
fixedHeader: { fixedHeader: {
type: Boolean, type: Boolean,
@ -124,13 +128,22 @@ export default {
default: 200 default: 200
} }
}, },
setup() { setup(props) {
const route = useRoute(); const route = useRoute();
const routeHasLayout = computed(() => { const routeHasLayout = computed(() => {
const _routeLayout = route.meta.layout; const _routeLayout = route.meta.layout;
return _routeLayout === undefined ? true : _routeLayout; return _routeLayout === undefined ? true : _routeLayout;
}); });
const siderTheme = computed(() => {
if (props.navigation === 'mixin') {
return 'light';
}
return props.theme;
});
const currentFixedHeader = computed(() => props.fixedHeader || props.navigation === 'mixin');
return { return {
siderTheme,
currentFixedHeader,
route, route,
routeHasLayout, routeHasLayout,
collapsed: ref(false) collapsed: ref(false)
@ -191,6 +204,44 @@ export default {
} }
} }
} }
&.main-layout-navigation-mixin {
.layout-sider {
padding: 48px 0 0;
}
.layout-header {
padding-left: 24px;
color: hsla(0,0%,100%,.65);
background: #001529;
.layout-menu {
line-height: 48px;
}
.layout-logo {
display: flex;
justify-content: flex-start;
align-items: center;
min-width: 165px;
height: 100%;
overflow: hidden;
transition: all .3s;
.logo-img {
height: 32px;
width: auto;
}
.logo-name {
overflow: hidden;
margin: 0 0 0 12px;
color: #fff;
font-weight: 600;
font-size: 18px;
line-height: 32px;
}
}
&.layout-header-fixed {
left: 0;
width: 100%;
}
}
}
.layout-sider-fixed-stuff { .layout-sider-fixed-stuff {
overflow: hidden; overflow: hidden;
width: var(--sideWidth); width: var(--sideWidth);

View File

@ -2,7 +2,7 @@
<a-menu <a-menu
:selectedKeys="selectedKeys" :selectedKeys="selectedKeys"
@click="onMenuClick" @click="onMenuClick"
theme="dark" :theme="theme"
mode="inline" mode="inline"
> >
<template v-for="(item, index) in menus" :key="index"> <template v-for="(item, index) in menus" :key="index">

View File

@ -4,9 +4,6 @@ export default function () {
// register methods // register methods
require.resolve('./plugins/registerMethods'), require.resolve('./plugins/registerMethods'),
// misc
require.resolve('./plugins/misc/route'),
// generate files // generate files
require.resolve('./plugins/generateFiles/core/plugin'), require.resolve('./plugins/generateFiles/core/plugin'),
require.resolve('./plugins/generateFiles/core/exports/coreExports'), require.resolve('./plugins/generateFiles/core/exports/coreExports'),
@ -49,6 +46,9 @@ export default function () {
require.resolve('./plugins/features/terserOptions'), require.resolve('./plugins/features/terserOptions'),
require.resolve('./plugins/features/vueLoader'), require.resolve('./plugins/features/vueLoader'),
// misc
require.resolve('./plugins/misc/route'),
// commands // commands
require.resolve('./plugins/commands/build'), require.resolve('./plugins/commands/build'),
require.resolve('./plugins/commands/dev') require.resolve('./plugins/commands/dev')