feat: 添加页脚 (#758)

feat: 添加页脚
This commit is contained in:
一万 2023-10-17 11:25:35 +08:00 committed by GitHub
parent 3e040fcc24
commit b93ebe713b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 103 additions and 18 deletions

View File

@ -12,6 +12,7 @@
"Grey": false, "Grey": false,
"Weak": false, "Weak": false,
"HideTabs": false, "HideTabs": false,
"HideFooter": false,
"SidebarStatus": true, "SidebarStatus": true,
"EpThemeColor": "#409EFF", "EpThemeColor": "#409EFF",
"ShowLogo": true, "ShowLogo": true,

View File

@ -1,4 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import Footer from "./footer/index.vue";
import { useGlobal } from "@pureadmin/utils"; import { useGlobal } from "@pureadmin/utils";
import backTop from "@/assets/svg/back_top.svg?component"; import backTop from "@/assets/svg/back_top.svg?component";
import { h, computed, Transition, defineComponent } from "vue"; import { h, computed, Transition, defineComponent } from "vue";
@ -24,6 +25,10 @@ const hideTabs = computed(() => {
return $storage?.configure.hideTabs; return $storage?.configure.hideTabs;
}); });
const hideFooter = computed(() => {
return $storage?.configure.hideFooter;
});
const layout = computed(() => { const layout = computed(() => {
return $storage?.layout.layout === "vertical"; return $storage?.layout.layout === "vertical";
}); });
@ -32,9 +37,15 @@ const getSectionStyle = computed(() => {
return [ return [
hideTabs.value && layout ? "padding-top: 48px;" : "", hideTabs.value && layout ? "padding-top: 48px;" : "",
!hideTabs.value && layout ? "padding-top: 85px;" : "", !hideTabs.value && layout ? "padding-top: 85px;" : "",
hideTabs.value && !layout.value ? "padding-top: 48px" : "", hideTabs.value && !layout.value ? "padding-top: 48px;" : "",
!hideTabs.value && !layout.value ? "padding-top: 85px;" : "", !hideTabs.value && !layout.value ? "padding-top: 85px;" : "",
props.fixedHeader ? "" : "padding-top: 0;" props.fixedHeader
? ""
: `padding-top: 0;${
hideTabs.value
? "min-height: calc(100vh - 48px);"
: "min-height: calc(100vh - 86px);"
}`
]; ];
}); });
@ -78,30 +89,44 @@ const transitionMain = defineComponent({
> >
<router-view> <router-view>
<template #default="{ Component, route }"> <template #default="{ Component, route }">
<el-scrollbar v-if="props.fixedHeader"> <el-scrollbar
v-if="props.fixedHeader"
:wrap-style="{
display: 'flex'
}"
:view-style="{
display: 'flex',
flex: 'auto',
overflow: 'auto',
'flex-direction': 'column'
}"
>
<el-backtop title="回到顶部" target=".app-main .el-scrollbar__wrap"> <el-backtop title="回到顶部" target=".app-main .el-scrollbar__wrap">
<backTop /> <backTop />
</el-backtop> </el-backtop>
<transitionMain :route="route"> <div class="grow">
<keep-alive <transitionMain :route="route">
v-if="isKeepAlive" <keep-alive
:include="usePermissionStoreHook().cachePageList" v-if="isKeepAlive"
> :include="usePermissionStoreHook().cachePageList"
>
<component
:is="Component"
:key="route.fullPath"
class="main-content"
/>
</keep-alive>
<component <component
v-else
:is="Component" :is="Component"
:key="route.fullPath" :key="route.fullPath"
class="main-content" class="main-content"
/> />
</keep-alive> </transitionMain>
<component </div>
v-else <Footer v-if="!hideFooter" />
:is="Component"
:key="route.fullPath"
class="main-content"
/>
</transitionMain>
</el-scrollbar> </el-scrollbar>
<div v-else> <div v-else class="grow">
<transitionMain :route="route"> <transitionMain :route="route">
<keep-alive <keep-alive
v-if="isKeepAlive" v-if="isKeepAlive"
@ -123,6 +148,9 @@ const transitionMain = defineComponent({
</div> </div>
</template> </template>
</router-view> </router-view>
<!-- 页脚 -->
<Footer v-if="!hideFooter && !props.fixedHeader" />
</section> </section>
</template> </template>
@ -136,8 +164,9 @@ const transitionMain = defineComponent({
.app-main-nofixed-header { .app-main-nofixed-header {
position: relative; position: relative;
display: flex;
flex-direction: column;
width: 100%; width: 100%;
min-height: 100vh;
} }
.main-content { .main-content {

View File

@ -0,0 +1,29 @@
<script lang="ts" setup>
import { getConfig } from "@/config";
const TITLE = getConfig("Title");
</script>
<template>
<footer class="layout-footer">
MIT © 2020-PRESENT
<a
class="ml-1 hover:text-primary"
href="https://github.com/pure-admin"
target="_blank"
>
{{ TITLE }}
</a>
</footer>
</template>
<style lang="scss" scoped>
.layout-footer {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
padding: 0 0 8px;
color: #c0c4cc;
}
</style>

View File

@ -66,6 +66,7 @@ const settings = reactive({
tabsVal: $storage.configure.hideTabs, tabsVal: $storage.configure.hideTabs,
showLogo: $storage.configure.showLogo, showLogo: $storage.configure.showLogo,
showModel: $storage.configure.showModel, showModel: $storage.configure.showModel,
hideFooter: $storage.configure.hideFooter,
multiTagsCache: $storage.configure.multiTagsCache multiTagsCache: $storage.configure.multiTagsCache
}); });
@ -111,12 +112,20 @@ const weekChange = (value): void => {
storageConfigureChange("weak", value); storageConfigureChange("weak", value);
}; };
/** 隐藏标签页设置 */
const tagsChange = () => { const tagsChange = () => {
const showVal = settings.tabsVal; const showVal = settings.tabsVal;
storageConfigureChange("hideTabs", showVal); storageConfigureChange("hideTabs", showVal);
emitter.emit("tagViewsChange", showVal as unknown as string); emitter.emit("tagViewsChange", showVal as unknown as string);
}; };
/** 隐藏页脚设置 */
const hideFooterChange = () => {
const hideFooter = settings.hideFooter;
storageConfigureChange("hideFooter", hideFooter);
};
/** 标签页持久化设置 */
const multiTagsCacheChange = () => { const multiTagsCacheChange = () => {
const multiTagsCache = settings.multiTagsCache; const multiTagsCache = settings.multiTagsCache;
storageConfigureChange("multiTagsCache", multiTagsCache); storageConfigureChange("multiTagsCache", multiTagsCache);
@ -218,6 +227,7 @@ onBeforeMount(() => {
settings.weakVal && settings.weakVal &&
document.querySelector("html")?.setAttribute("class", "html-weakness"); document.querySelector("html")?.setAttribute("class", "html-weakness");
settings.tabsVal && tagsChange(); settings.tabsVal && tagsChange();
settings.hideFooter && hideFooterChange();
}); });
}); });
</script> </script>
@ -344,6 +354,17 @@ onBeforeMount(() => {
@change="tagsChange" @change="tagsChange"
/> />
</li> </li>
<li>
<span class="dark:text-white">隐藏页脚</span>
<el-switch
v-model="settings.hideFooter"
inline-prompt
inactive-color="#a6a6a6"
active-text="开"
inactive-text="关"
@change="hideFooterChange"
/>
</li>
<li> <li>
<span class="dark:text-white">侧边栏Logo</span> <span class="dark:text-white">侧边栏Logo</span>
<el-switch <el-switch

View File

@ -36,6 +36,7 @@ export function useLayout() {
grey: $config?.Grey ?? false, grey: $config?.Grey ?? false,
weak: $config?.Weak ?? false, weak: $config?.Weak ?? false,
hideTabs: $config?.HideTabs ?? false, hideTabs: $config?.HideTabs ?? false,
hideFooter: $config.HideFooter ?? false,
showLogo: $config?.ShowLogo ?? true, showLogo: $config?.ShowLogo ?? true,
showModel: $config?.ShowModel ?? "smart", showModel: $config?.ShowModel ?? "smart",
multiTagsCache: $config?.MultiTagsCache ?? false multiTagsCache: $config?.MultiTagsCache ?? false

View File

@ -24,6 +24,7 @@ export const injectResponsiveStorage = (app: App, config: PlatformConfigs) => {
grey: config.Grey ?? false, grey: config.Grey ?? false,
weak: config.Weak ?? false, weak: config.Weak ?? false,
hideTabs: config.HideTabs ?? false, hideTabs: config.HideTabs ?? false,
hideFooter: config.HideFooter ?? false,
showLogo: config.ShowLogo ?? true, showLogo: config.ShowLogo ?? true,
showModel: config.ShowModel ?? "smart", showModel: config.ShowModel ?? "smart",
multiTagsCache: config.MultiTagsCache ?? false multiTagsCache: config.MultiTagsCache ?? false

3
types/global.d.ts vendored
View File

@ -89,6 +89,7 @@ declare global {
Grey?: boolean; Grey?: boolean;
Weak?: boolean; Weak?: boolean;
HideTabs?: boolean; HideTabs?: boolean;
HideFooter?: boolean;
SidebarStatus?: boolean; SidebarStatus?: boolean;
EpThemeColor?: string; EpThemeColor?: string;
ShowLogo?: boolean; ShowLogo?: boolean;
@ -125,6 +126,7 @@ declare global {
grey?: boolean; grey?: boolean;
weak?: boolean; weak?: boolean;
hideTabs?: boolean; hideTabs?: boolean;
hideFooter?: boolean;
sidebarStatus?: boolean; sidebarStatus?: boolean;
epThemeColor?: string; epThemeColor?: string;
showLogo?: boolean; showLogo?: boolean;
@ -158,6 +160,7 @@ declare global {
grey?: boolean; grey?: boolean;
weak?: boolean; weak?: boolean;
hideTabs?: boolean; hideTabs?: boolean;
hideFooter?: boolean;
showLogo?: boolean; showLogo?: boolean;
showModel?: string; showModel?: string;
multiTagsCache?: boolean; multiTagsCache?: boolean;