mirror of
https://github.com/soybeanjs/soybean-admin.git
synced 2025-09-23 20:06:37 +08:00
refactor(components): blankLayout引入GlobalContent
This commit is contained in:
parent
32aa5ee75a
commit
1ffb75afce
@ -24,6 +24,8 @@ const props = withDefaults(defineProps<Props>(), {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const COLOR_WHITE = '#ffffff';
|
const COLOR_WHITE = '#ffffff';
|
||||||
const stopColor = computed(() => mixColor(COLOR_WHITE, props.themeColor, 0.7));
|
const stopColor = computed(() => {
|
||||||
|
return mixColor(COLOR_WHITE, props.themeColor, 0.7);
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
<style scoped></style>
|
<style scoped></style>
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="flex-center w-40px h-40px text-14px hover:text-primary cursor-pointer" @click="toggleDarkMode">
|
<hover-container class="w-40px h-full text-14px text-[#999] hover:text-primary" @click="toggleDarkMode">
|
||||||
<icon-mdi-moon-waning-crescent v-if="dark" />
|
<icon-mdi-moon-waning-crescent v-if="dark" />
|
||||||
<icon-mdi-white-balance-sunny v-else />
|
<icon-mdi-white-balance-sunny v-else />
|
||||||
</div>
|
</hover-container>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { watch } from 'vue';
|
import { watch } from 'vue';
|
||||||
|
import { HoverContainer } from '../../common';
|
||||||
import { useBoolean } from '@/hooks';
|
import { useBoolean } from '@/hooks';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
import { NLayout, NLayoutContent, NLayoutHeader } from 'naive-ui';
|
import { NLayout, NLayoutContent, NLayoutHeader } from 'naive-ui';
|
||||||
import { useThemeStore } from '@/store';
|
import { useThemeStore } from '@/store';
|
||||||
import { useLayoutConfig } from '@/composables';
|
import { useLayoutConfig } from '@/composables';
|
||||||
import { GlobalHeader, GlobalContent, GlobalFooter, GlobalTab, SpacePlaceholder } from '../common';
|
import { GlobalHeader, GlobalContent, GlobalFooter, GlobalTab, SpacePlaceholder } from '@/layouts/common';
|
||||||
|
|
||||||
const theme = useThemeStore();
|
const theme = useThemeStore();
|
||||||
const { headerInverted, headerPosition, scrollbarContentStyle, scrollbar } = useLayoutConfig();
|
const { headerInverted, headerPosition, scrollbarContentStyle, scrollbar } = useLayoutConfig();
|
||||||
|
@ -39,7 +39,7 @@
|
|||||||
import { NLayout, NLayoutContent, NLayoutSider, NLayoutHeader, NScrollbar } from 'naive-ui';
|
import { NLayout, NLayoutContent, NLayoutSider, NLayoutHeader, NScrollbar } from 'naive-ui';
|
||||||
import { useThemeStore, useAppStore } from '@/store';
|
import { useThemeStore, useAppStore } from '@/store';
|
||||||
import { useLayoutConfig } from '@/composables';
|
import { useLayoutConfig } from '@/composables';
|
||||||
import { GlobalHeader, GlobalContent, GlobalFooter, GlobalTab, GlobalMenu, SpacePlaceholder } from '../common';
|
import { GlobalHeader, GlobalContent, GlobalFooter, GlobalTab, GlobalMenu, SpacePlaceholder } from '@/layouts/common';
|
||||||
|
|
||||||
const theme = useThemeStore();
|
const theme = useThemeStore();
|
||||||
const app = useAppStore();
|
const app = useAppStore();
|
||||||
|
@ -45,7 +45,7 @@ import {
|
|||||||
SpacePlaceholder,
|
SpacePlaceholder,
|
||||||
GlobalLogo,
|
GlobalLogo,
|
||||||
GlobalMenu
|
GlobalMenu
|
||||||
} from '../common';
|
} from '@/layouts/common';
|
||||||
|
|
||||||
const theme = useThemeStore();
|
const theme = useThemeStore();
|
||||||
const app = useAppStore();
|
const app = useAppStore();
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
import { NLayout, NLayoutContent, NLayoutHeader } from 'naive-ui';
|
import { NLayout, NLayoutContent, NLayoutHeader } from 'naive-ui';
|
||||||
import { useThemeStore } from '@/store';
|
import { useThemeStore } from '@/store';
|
||||||
import { useLayoutConfig } from '@/composables';
|
import { useLayoutConfig } from '@/composables';
|
||||||
import { MixSider, GlobalHeader, GlobalContent, GlobalFooter, GlobalTab, SpacePlaceholder } from '../common';
|
import { MixSider, GlobalHeader, GlobalContent, GlobalFooter, GlobalTab, SpacePlaceholder } from '@/layouts/common';
|
||||||
|
|
||||||
const theme = useThemeStore();
|
const theme = useThemeStore();
|
||||||
const { headerInverted, headerPosition, globalSiderClassAndStyle, scrollbarContentStyle, scrollbar } =
|
const { headerInverted, headerPosition, globalSiderClassAndStyle, scrollbarContentStyle, scrollbar } =
|
||||||
|
@ -4,4 +4,3 @@ import HorizontalLayout from './HorizontalLayout/index.vue';
|
|||||||
import HorizontalMixLayout from './HorizontalMixLayout/index.vue';
|
import HorizontalMixLayout from './HorizontalMixLayout/index.vue';
|
||||||
|
|
||||||
export { VerticalLayout, VerticalMixLayout, HorizontalLayout, HorizontalMixLayout };
|
export { VerticalLayout, VerticalMixLayout, HorizontalLayout, HorizontalMixLayout };
|
||||||
export * from './common';
|
|
||||||
|
@ -7,7 +7,8 @@
|
|||||||
import type { Component } from 'vue';
|
import type { Component } from 'vue';
|
||||||
import { useThemeStore } from '@/store';
|
import { useThemeStore } from '@/store';
|
||||||
import type { NavMode } from '@/interface';
|
import type { NavMode } from '@/interface';
|
||||||
import { VerticalLayout, VerticalMixLayout, HorizontalLayout, HorizontalMixLayout, SettingDrawer } from './components';
|
import { VerticalLayout, VerticalMixLayout, HorizontalLayout, HorizontalMixLayout } from './components';
|
||||||
|
import { SettingDrawer } from '../common';
|
||||||
|
|
||||||
type LayoutComponent = {
|
type LayoutComponent = {
|
||||||
[key in NavMode]: Component;
|
[key in NavMode]: Component;
|
||||||
|
@ -1,31 +1,14 @@
|
|||||||
<template>
|
<template>
|
||||||
<n-scrollbar ref="scrollbar" class="h-full" :content-class="routeProps.fullPage ? 'h-full' : ''">
|
<n-scrollbar ref="scrollbar" class="h-full" :content-style="scrollbarContentStyle">
|
||||||
<div class="inline-block wh-full bg-[#f6f9f8] dark:bg-dark">
|
<global-content :show-padding="false" />
|
||||||
<router-view v-slot="{ Component, route: itemRoute }">
|
|
||||||
<transition :name="theme.pageAnimateType" mode="out-in" appear>
|
|
||||||
<keep-alive :include="cacheRoutes">
|
|
||||||
<component
|
|
||||||
:is="Component"
|
|
||||||
v-if="app.reloadFlag"
|
|
||||||
:key="itemRoute.fullPath"
|
|
||||||
:class="{ 'min-h-100vh': !routeProps.fullPage }"
|
|
||||||
/>
|
|
||||||
</keep-alive>
|
|
||||||
</transition>
|
|
||||||
</router-view>
|
|
||||||
</div>
|
|
||||||
</n-scrollbar>
|
</n-scrollbar>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { NScrollbar } from 'naive-ui';
|
import { NScrollbar } from 'naive-ui';
|
||||||
import { useThemeStore, useAppStore } from '@/store';
|
import { useLayoutConfig } from '@/composables';
|
||||||
import { cacheRoutes } from '@/router';
|
import { GlobalContent } from '../common';
|
||||||
import { useRouteProps } from '@/composables';
|
|
||||||
|
|
||||||
const theme = useThemeStore();
|
const { scrollbarContentStyle } = useLayoutConfig();
|
||||||
const app = useAppStore();
|
|
||||||
|
|
||||||
const routeProps = useRouteProps();
|
|
||||||
</script>
|
</script>
|
||||||
<style scoped></style>
|
<style scoped></style>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
class="flex-1 flex-col-stretch bg-[#f6f9f8] dark:bg-deep-dark p-16px transition-all duration-300 ease-in-out"
|
class="flex-1 flex-col-stretch bg-[#f6f9f8] dark:bg-deep-dark transition-all duration-300 ease-in-out"
|
||||||
:class="{ 'overflow-hidden': routeProps.fullPage }"
|
:class="{ 'overflow-hidden': routeProps.fullPage, 'p-16px': showPadding }"
|
||||||
>
|
>
|
||||||
<router-view v-slot="{ Component, route }">
|
<router-view v-slot="{ Component, route }">
|
||||||
<transition :name="theme.pageAnimateType" mode="out-in" appear>
|
<transition :name="theme.pageAnimateType" mode="out-in" appear>
|
||||||
@ -18,6 +18,15 @@ import { cacheRoutes } from '@/router';
|
|||||||
import { useAppStore, useThemeStore } from '@/store';
|
import { useAppStore, useThemeStore } from '@/store';
|
||||||
import { useRouteProps } from '@/composables';
|
import { useRouteProps } from '@/composables';
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
/** 显示padding */
|
||||||
|
showPadding?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
withDefaults(defineProps<Props>(), {
|
||||||
|
showPadding: true
|
||||||
|
});
|
||||||
|
|
||||||
const theme = useThemeStore();
|
const theme = useThemeStore();
|
||||||
const app = useAppStore();
|
const app = useAppStore();
|
||||||
const routeProps = useRouteProps();
|
const routeProps = useRouteProps();
|
@ -1 +1,2 @@
|
|||||||
export * from './theme';
|
export * from './theme';
|
||||||
|
export * from './website';
|
||||||
|
@ -23,5 +23,9 @@
|
|||||||
"children": []
|
"children": []
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "个人",
|
||||||
|
"children": []
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -2,6 +2,4 @@ import type { WebsiteCategory } from '@/interface';
|
|||||||
|
|
||||||
import websiteJson from './website.json';
|
import websiteJson from './website.json';
|
||||||
|
|
||||||
const website: WebsiteCategory[] = websiteJson;
|
export const website: WebsiteCategory[] = websiteJson;
|
||||||
|
|
||||||
export default website;
|
|
||||||
|
@ -58,7 +58,11 @@ const modules: LoginModule[] = [
|
|||||||
{ key: 'bind-wechat', label: EnumLoginModule['bind-wechat'], component: BindWechat }
|
{ key: 'bind-wechat', label: EnumLoginModule['bind-wechat'], component: BindWechat }
|
||||||
];
|
];
|
||||||
|
|
||||||
const bgColor = computed(() => mixColor('#ffffff', theme.themeColor, 0.3));
|
const bgColor = computed(() => {
|
||||||
|
const COLOR_WHITE = '#ffffff';
|
||||||
|
const ratio = theme.darkMode ? 0.6 : 0.3;
|
||||||
|
return mixColor(COLOR_WHITE, theme.themeColor, ratio);
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.login-bg {
|
.login-bg {
|
||||||
|
19
src/views/website/components/WebsiteHeader.vue
Normal file
19
src/views/website/components/WebsiteHeader.vue
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<template>
|
||||||
|
<header class="flex-y-center justify-between h-78px px-24px bg-light dark:bg-dark shadow-sm">
|
||||||
|
<div class="flex-y-center h-full">
|
||||||
|
<system-logo class="w-48px h-48px mr-12px" :color="theme.themeColor" />
|
||||||
|
<n-gradient-text size="32">Soybean 网址导航</n-gradient-text>
|
||||||
|
</div>
|
||||||
|
<theme-switch :dark="theme.darkMode" @update="handleDarkMode" />
|
||||||
|
</header>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { NGradientText } from 'naive-ui';
|
||||||
|
import { SystemLogo, ThemeSwitch } from '@/components';
|
||||||
|
import { useThemeStore } from '@/store';
|
||||||
|
|
||||||
|
const theme = useThemeStore();
|
||||||
|
const { handleDarkMode } = useThemeStore();
|
||||||
|
</script>
|
||||||
|
<style scoped></style>
|
3
src/views/website/components/index.ts
Normal file
3
src/views/website/components/index.ts
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import WebsiteHeader from './WebsiteHeader.vue';
|
||||||
|
|
||||||
|
export { WebsiteHeader };
|
@ -1,22 +1,12 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<header class="flex-y-center justify-between h-78px px-24px bg-light dark:bg-dark shadow-sm">
|
<website-header />
|
||||||
<div class="flex-y-center">
|
|
||||||
<system-logo class="w-48px h-48px mr-12px" :color="theme.themeColor" />
|
|
||||||
<n-gradient-text size="32">Soybean 网址导航</n-gradient-text>
|
|
||||||
</div>
|
|
||||||
<theme-switch :dark="theme.darkMode" @update="handleDarkMode" />
|
|
||||||
</header>
|
|
||||||
<n-space :vertical="true"></n-space>
|
<n-space :vertical="true"></n-space>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { NSpace, NGradientText } from 'naive-ui';
|
import { NSpace } from 'naive-ui';
|
||||||
import { SystemLogo, ThemeSwitch } from '@/components';
|
import { WebsiteHeader } from './components';
|
||||||
import { useThemeStore } from '@/store';
|
|
||||||
|
|
||||||
const theme = useThemeStore();
|
|
||||||
const { handleDarkMode } = useThemeStore();
|
|
||||||
</script>
|
</script>
|
||||||
<style scoped></style>
|
<style scoped></style>
|
||||||
|
Loading…
Reference in New Issue
Block a user