'admin-21.07.26:处理全屏若干问题,pr!11,感谢群友@另一个前端'

This commit is contained in:
lyt-Top 2021-07-26 23:46:37 +08:00
parent a1be0533c4
commit b86aca5838
7 changed files with 99 additions and 23 deletions

View File

@ -1,18 +1,22 @@
<template> <template>
<el-aside class="layout-aside" :class="setCollapseWidth" v-if="clientWidth > 1000"> <template v-if="clientWidth > 1000">
<Logo v-if="setShowLogo" /> <el-aside class="layout-aside" :class="setCollapseWidth" v-show="!isCurrenFullscreen">
<el-scrollbar class="flex-auto" ref="layoutAsideScrollbarRef">
<Vertical :menuList="menuList" :class="setCollapseWidth" />
</el-scrollbar>
</el-aside>
<el-drawer v-model="getThemeConfig.isCollapse" :with-header="false" direction="ltr" size="220px" v-else>
<el-aside class="layout-aside w100 h100">
<Logo v-if="setShowLogo" /> <Logo v-if="setShowLogo" />
<el-scrollbar class="flex-auto" ref="layoutAsideScrollbarRef"> <el-scrollbar class="flex-auto" ref="layoutAsideScrollbarRef">
<Vertical :menuList="menuList" /> <Vertical :menuList="menuList" :class="setCollapseWidth" />
</el-scrollbar> </el-scrollbar>
</el-aside> </el-aside>
</el-drawer> </template>
<template v-else>
<el-drawer v-model="getThemeConfig.isCollapse" :with-header="false" direction="ltr" size="220px">
<el-aside class="layout-aside w100 h100">
<Logo v-if="setShowLogo" />
<el-scrollbar class="flex-auto" ref="layoutAsideScrollbarRef">
<Vertical :menuList="menuList" />
</el-scrollbar>
</el-aside>
</el-drawer>
</template>
</template> </template>
<script lang="ts"> <script lang="ts">
@ -34,6 +38,10 @@ export default {
const getThemeConfig = computed(() => { const getThemeConfig = computed(() => {
return store.state.themeConfig.themeConfig; return store.state.themeConfig.themeConfig;
}); });
//
const isCurrenFullscreen = computed(() => {
return store.state.tagsViewRoutes.isCurrenFullscreen;
});
// / // /
const setCollapseWidth = computed(() => { const setCollapseWidth = computed(() => {
let { layout, isCollapse, menuBar } = store.state.themeConfig.themeConfig; let { layout, isCollapse, menuBar } = store.state.themeConfig.themeConfig;
@ -118,6 +126,7 @@ export default {
setCollapseWidth, setCollapseWidth,
setShowLogo, setShowLogo,
getThemeConfig, getThemeConfig,
isCurrenFullscreen,
...toRefs(state), ...toRefs(state),
}; };
}, },

View File

@ -1,5 +1,5 @@
<template> <template>
<div class="layout-columns-aside"> <div class="layout-columns-aside" v-show="!isCurrenFullscreen">
<el-scrollbar> <el-scrollbar>
<ul> <ul>
<li <li
@ -70,6 +70,10 @@ export default {
const setColumnsAsidelayout = computed(() => { const setColumnsAsidelayout = computed(() => {
return store.state.themeConfig.themeConfig.columnsAsideLayout; return store.state.themeConfig.themeConfig.columnsAsideLayout;
}); });
//
const isCurrenFullscreen = computed(() => {
return store.state.tagsViewRoutes.isCurrenFullscreen;
});
// //
const setColumnsAsideMove = (k: number) => { const setColumnsAsideMove = (k: number) => {
state.liIndex = k; state.liIndex = k;
@ -152,6 +156,7 @@ export default {
setColumnsAsideStyle, setColumnsAsideStyle,
setColumnsAsidelayout, setColumnsAsidelayout,
onColumnsAsideMenuClick, onColumnsAsideMenuClick,
isCurrenFullscreen,
...toRefs(state), ...toRefs(state),
}; };
}, },

View File

@ -1,5 +1,5 @@
<template> <template>
<el-header class="layout-header" :height="setHeaderHeight"> <el-header class="layout-header" :height="setHeaderHeight" v-show="!isCurrenFullscreen">
<NavBarsIndex /> <NavBarsIndex />
</el-header> </el-header>
</template> </template>
@ -19,8 +19,13 @@ export default {
if (isTagsview && layout !== 'classic') return '84px'; if (isTagsview && layout !== 'classic') return '84px';
else return '50px'; else return '50px';
}); });
//
const isCurrenFullscreen = computed(() => {
return store.state.tagsViewRoutes.isCurrenFullscreen;
});
return { return {
setHeaderHeight, setHeaderHeight,
isCurrenFullscreen,
}; };
}, },
}; };

View File

@ -225,8 +225,19 @@ export default {
break; break;
} }
}; };
// F11
const initOnkeydown = () => {
document.onkeydown = (event) => {
var e = event || window.event || arguments.callee.caller.arguments[0];
if (e && e.keyCode === 122 && !state.isScreenfull) {
e.preventDefault();
onScreenfullClick();
}
};
};
// //
onMounted(() => { onMounted(() => {
initOnkeydown();
if (Local.get('themeConfig')) { if (Local.get('themeConfig')) {
initI18n(); initI18n();
initComponentSize(); initComponentSize();

View File

@ -1,5 +1,9 @@
<template> <template>
<div class="layout-navbars-tagsview" :class="{ 'layout-navbars-tagsview-shadow': getThemeConfig.layout === 'classic' }"> <div
class="layout-navbars-tagsview"
:class="{ 'layout-navbars-tagsview-shadow': getThemeConfig.layout === 'classic' }"
v-show="!isCurrenFullscreen"
>
<el-scrollbar ref="scrollbarRef" @wheel.native.prevent="onHandleScroll"> <el-scrollbar ref="scrollbarRef" @wheel.native.prevent="onHandleScroll">
<ul class="layout-navbars-tagsview-ul" :class="setTagsStyle" ref="tagsUlRef"> <ul class="layout-navbars-tagsview-ul" :class="setTagsStyle" ref="tagsUlRef">
<li <li
@ -42,7 +46,6 @@
<script lang="ts"> <script lang="ts">
import { toRefs, reactive, onMounted, computed, ref, nextTick, onBeforeUpdate, onBeforeMount, onUnmounted, getCurrentInstance, watch } from 'vue'; import { toRefs, reactive, onMounted, computed, ref, nextTick, onBeforeUpdate, onBeforeMount, onUnmounted, getCurrentInstance, watch } from 'vue';
import { useRoute, useRouter, onBeforeRouteUpdate } from 'vue-router'; import { useRoute, useRouter, onBeforeRouteUpdate } from 'vue-router';
import screenfull from 'screenfull';
import { useStore } from '/@/store/index'; import { useStore } from '/@/store/index';
import { Session } from '/@/utils/storage'; import { Session } from '/@/utils/storage';
import Sortable from 'sortablejs'; import Sortable from 'sortablejs';
@ -75,6 +78,10 @@ export default {
const getThemeConfig = computed(() => { const getThemeConfig = computed(() => {
return store.state.themeConfig.themeConfig; return store.state.themeConfig.themeConfig;
}); });
//
const isCurrenFullscreen = computed(() => {
return store.state.tagsViewRoutes.isCurrenFullscreen;
});
// tagsViewList // tagsViewList
const addBrowserSetSession = (tagsViewList: Array<object>) => { const addBrowserSetSession = (tagsViewList: Array<object>) => {
Session.set('tagsViewList', tagsViewList); Session.set('tagsViewList', tagsViewList);
@ -178,14 +185,13 @@ export default {
addBrowserSetSession(state.tagsViewList); addBrowserSetSession(state.tagsViewList);
}; };
// 6 // 6
const openCurrenFullscreen = (path: string) => { const openCurrenFullscreen = (path: string, currentRouteInfo: object) => {
const item = state.tagsViewList.find((v: any) => v.path === path);
nextTick(() => { nextTick(() => {
router.push({ path, query: item.query }); const { meta, name, params, query } = currentRouteInfo;
const element = document.querySelector('.layout-main'); if (meta.isDynamic) router.push({ name, params });
const screenfulls: any = screenfull; else router.push({ path, query });
screenfulls.request(element); store.dispatch('tagsViewRoutes/setCurrenFullscreen');
}) });
}; };
// tagsView // tagsView
const getCurrentRouteItem = (path: string) => { const getCurrentRouteItem = (path: string) => {
@ -195,7 +201,8 @@ export default {
// //
const onCurrentContextmenuClick = (item) => { const onCurrentContextmenuClick = (item) => {
const { id, path } = item; const { id, path } = item;
const { meta, name, params, query } = getCurrentRouteItem(path); const currentRouteInfo = getCurrentRouteItem(path);
const { meta, name, params, query } = currentRouteInfo;
switch (id) { switch (id) {
case 0: case 0:
refreshCurrentTagsView(path); refreshCurrentTagsView(path);
@ -214,7 +221,7 @@ export default {
closeAllTagsView(path); closeAllTagsView(path);
break; break;
case 4: case 4:
openCurrenFullscreen(path); openCurrenFullscreen(path, currentRouteInfo);
break; break;
} }
}; };
@ -385,6 +392,7 @@ export default {
tagsUlRef, tagsUlRef,
onHandleScroll, onHandleScroll,
getThemeConfig, getThemeConfig,
isCurrenFullscreen,
setTagsStyle, setTagsStyle,
refreshCurrentTagsView, refreshCurrentTagsView,
closeCurrentTagsView, closeCurrentTagsView,

View File

@ -65,6 +65,7 @@ export interface KeepAliveNamesState {
// TagsView 路由列表 // TagsView 路由列表
export interface TagsViewRoutesState { export interface TagsViewRoutesState {
tagsViewRoutes: Array<object>; tagsViewRoutes: Array<object>;
isCurrenFullscreen: boolean;
} }
// 用户信息 // 用户信息

View File

@ -1,4 +1,7 @@
import { Module } from 'vuex'; import { Module } from 'vuex';
import { ElMessage } from 'element-plus';
import screenfull from 'screenfull';
import { Local } from '/@/utils/storage';
// 此处加上 `.ts` 后缀报错,具体原因不详 // 此处加上 `.ts` 后缀报错,具体原因不详
import { TagsViewRoutesState, RootStateTypes } from '/@/store/interface/index'; import { TagsViewRoutesState, RootStateTypes } from '/@/store/interface/index';
@ -6,18 +9,52 @@ const tagsViewRoutesModule: Module<TagsViewRoutesState, RootStateTypes> = {
namespaced: true, namespaced: true,
state: { state: {
tagsViewRoutes: [], tagsViewRoutes: [],
isCurrenFullscreen: false,
}, },
mutations: { mutations: {
// 设置 TagsView 路由 // 设置 TagsView 路由
getTagsViewRoutes(state: any, data: Array<string>) { getTagsViewRoutes(state: any, data: Array<string>) {
state.tagsViewRoutes = data; state.tagsViewRoutes = data;
}, },
// 设置卡片全屏
getCurrenFullscreen(state: any, data: boolean) {
state.isCurrenFullscreen = data;
},
}, },
actions: { actions: {
// 设置 TagsView 路由 // 设置 TagsView 路由
async setTagsViewRoutes({ commit }, data: Array<string>) { async setTagsViewRoutes({ commit }, data: Array<string>) {
commit('getTagsViewRoutes', data); commit('getTagsViewRoutes', data);
}, },
// 设置卡片全屏
setCurrenFullscreen({ commit }) {
const screenfulls: any = screenfull;
if (!screenfulls.isEnabled) {
ElMessage.warning('暂不不支持全屏');
return false;
}
screenfulls.toggle();
const currenFullscreenChange = () => {
const layoutViewBgWhite = document.querySelector('.layout-view-bg-white') as HTMLElement;
if (screenfulls.isFullscreen) {
commit('getCurrenFullscreen', true);
// 设置全屏时,设置有 `layout-view-bg-white` 类的高度
if (layoutViewBgWhite) layoutViewBgWhite.style.height = `calc(100vh - 30px)`;
} else {
screenfulls.off('change', currenFullscreenChange);
commit('getCurrenFullscreen', false);
if (!layoutViewBgWhite) return false;
const getThemeConfig = Local.get('themeConfig');
if (getThemeConfig) {
let { isTagsview } = getThemeConfig;
if (isTagsview) layoutViewBgWhite.style.height = `calc(100vh - 114px)`;
else layoutViewBgWhite.style.height = `calc(100vh - 80px)`;
}
}
};
screenfulls.on('change', currenFullscreenChange);
commit('getCurrenFullscreen', true);
},
}, },
}; };