mirror of
https://github.com/WeBankFinTech/fes.js.git
synced 2025-04-25 11:06:36 +08:00
feat: plugin-layout支持mixin布局
This commit is contained in:
parent
c2e230f784
commit
9eb0704c8e
@ -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);
|
||||||
|
@ -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">
|
||||||
|
@ -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')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user