Merge pull request #106 from MaybeQHL/main

fix: 修复在移动端模式下tags显示的bug  update: 移动端模式下侧边菜单item点击隐藏drawer.
This commit is contained in:
Ah jung
2022-03-08 08:42:29 +08:00
committed by GitHub
6 changed files with 702 additions and 678 deletions
+3
View File
@@ -8,6 +8,8 @@ export function useProjectSetting() {
const getNavTheme = computed(() => projectStore.navTheme); const getNavTheme = computed(() => projectStore.navTheme);
const getIsMobile = computed(() => projectStore.isMobile);
const getHeaderSetting = computed(() => projectStore.headerSetting); const getHeaderSetting = computed(() => projectStore.headerSetting);
const getMultiTabsSetting = computed(() => projectStore.multiTabsSetting); const getMultiTabsSetting = computed(() => projectStore.multiTabsSetting);
@@ -27,6 +29,7 @@ export function useProjectSetting() {
return { return {
getNavMode, getNavMode,
getNavTheme, getNavTheme,
getIsMobile,
getHeaderSetting, getHeaderSetting,
getMultiTabsSetting, getMultiTabsSetting,
getMenuSetting, getMenuSetting,
+9 -8
View File
@@ -15,14 +15,14 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent, ref, onMounted, reactive, computed, watch, toRefs, unref } from 'vue'; import { defineComponent, ref, onMounted, reactive, computed, watch, toRefs, unref } from 'vue';
import { useRoute, useRouter } from 'vue-router'; import { useRoute, useRouter } from 'vue-router';
import { useAsyncRouteStore } from '@/store/modules/asyncRoute'; import { useAsyncRouteStore } from '@/store/modules/asyncRoute';
import { generatorMenu, generatorMenuMix } from '@/utils'; import { generatorMenu, generatorMenuMix } from '@/utils';
import { useProjectSettingStore } from '@/store/modules/projectSetting'; import { useProjectSettingStore } from '@/store/modules/projectSetting';
import { useProjectSetting } from '@/hooks/setting/useProjectSetting'; import { useProjectSetting } from '@/hooks/setting/useProjectSetting';
export default defineComponent({ export default defineComponent({
name: 'Menu', name: 'Menu',
components: {}, components: {},
props: { props: {
@@ -125,6 +125,7 @@
} else { } else {
router.push({ name: key }); router.push({ name: key });
} }
emit("clickMenuItem" as any, key)
} }
//展开菜单 //展开菜单
@@ -162,5 +163,5 @@
menuExpanded, menuExpanded,
}; };
}, },
}); });
</script> </script>
+39 -32
View File
@@ -80,7 +80,7 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import { import {
defineComponent, defineComponent,
reactive, reactive,
computed, computed,
@@ -91,18 +91,18 @@
watch, watch,
onMounted, onMounted,
nextTick, nextTick,
} from 'vue'; } from 'vue';
import { useRoute, useRouter } from 'vue-router'; import { useRoute, useRouter } from 'vue-router';
import { storage } from '@/utils/Storage'; import { storage } from '@/utils/Storage';
import { TABS_ROUTES } from '@/store/mutation-types'; import { TABS_ROUTES } from '@/store/mutation-types';
import { useTabsViewStore } from '@/store/modules/tabsView'; import { useTabsViewStore } from '@/store/modules/tabsView';
import { useAsyncRouteStore } from '@/store/modules/asyncRoute'; import { useAsyncRouteStore } from '@/store/modules/asyncRoute';
import { RouteItem } from '@/store/modules/tabsView'; import { RouteItem } from '@/store/modules/tabsView';
import { useProjectSetting } from '@/hooks/setting/useProjectSetting'; import { useProjectSetting } from '@/hooks/setting/useProjectSetting';
import { useMessage } from 'naive-ui'; import { useMessage } from 'naive-ui';
import Draggable from 'vuedraggable'; import Draggable from 'vuedraggable';
import { PageEnum } from '@/enums/pageEnum'; import { PageEnum } from '@/enums/pageEnum';
import { import {
DownOutlined, DownOutlined,
ReloadOutlined, ReloadOutlined,
CloseOutlined, CloseOutlined,
@@ -110,14 +110,14 @@
MinusOutlined, MinusOutlined,
LeftOutlined, LeftOutlined,
RightOutlined, RightOutlined,
} from '@vicons/antd'; } from '@vicons/antd';
import { renderIcon } from '@/utils'; import { renderIcon } from '@/utils';
import elementResizeDetectorMaker from 'element-resize-detector'; import elementResizeDetectorMaker from 'element-resize-detector';
import { useDesignSetting } from '@/hooks/setting/useDesignSetting'; import { useDesignSetting } from '@/hooks/setting/useDesignSetting';
import { useProjectSettingStore } from '@/store/modules/projectSetting'; import { useProjectSettingStore } from '@/store/modules/projectSetting';
import { useThemeVars } from 'naive-ui'; import { useThemeVars } from 'naive-ui';
export default defineComponent({ export default defineComponent({
name: 'TabsView', name: 'TabsView',
components: { components: {
DownOutlined, DownOutlined,
@@ -133,7 +133,7 @@
}, },
setup(props) { setup(props) {
const { getDarkTheme, getAppTheme } = useDesignSetting(); const { getDarkTheme, getAppTheme } = useDesignSetting();
const { getNavMode, getHeaderSetting, getMenuSetting, getMultiTabsSetting } = const { getNavMode, getHeaderSetting, getMenuSetting, getMultiTabsSetting, getIsMobile } =
useProjectSetting(); useProjectSetting();
const settingStore = useProjectSettingStore(); const settingStore = useProjectSettingStore();
@@ -192,6 +192,13 @@
: collapsed : collapsed
? `${minMenuWidth}px` ? `${minMenuWidth}px`
: `${menuWidth}px`; : `${menuWidth}px`;
if (getIsMobile.value) {
return {
left: '0px',
width: '100%'
};
}
return { return {
left: lenNum, left: lenNum,
width: `calc(100% - ${!fixed ? '0px' : lenNum})`, width: `calc(100% - ${!fixed ? '0px' : lenNum})`,
@@ -520,11 +527,11 @@
getBaseColor, getBaseColor,
}; };
}, },
}); });
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.tabs-view { .tabs-view {
width: 100%; width: 100%;
padding: 6px 0; padding: 6px 0;
display: flex; display: flex;
@@ -649,24 +656,24 @@
justify-content: center; justify-content: center;
} }
} }
} }
.tabs-view-default-background { .tabs-view-default-background {
background: #f5f7f9; background: #f5f7f9;
} }
.tabs-view-dark-background { .tabs-view-dark-background {
background: #101014; background: #101014;
} }
.tabs-view-fix { .tabs-view-fix {
position: fixed; position: fixed;
z-index: 5; z-index: 5;
padding: 6px 19px 6px 10px; padding: 6px 19px 6px 10px;
left: 200px; left: 200px;
} }
.tabs-view-fixed-header { .tabs-view-fixed-header {
top: 0; top: 0;
} }
</style> </style>
+5 -3
View File
@@ -25,7 +25,7 @@
class="layout-side-drawer" class="layout-side-drawer"
> >
<Logo :collapsed="collapsed" /> <Logo :collapsed="collapsed" />
<AsideMenu /> <AsideMenu @clickMenuItem="collapsed = false" />
</n-drawer> </n-drawer>
<n-layout :inverted="inverted"> <n-layout :inverted="inverted">
@@ -97,7 +97,10 @@ const collapsed = ref<boolean>(false);
const { mobileWidth, menuWidth } = unref(getMenuSetting); const { mobileWidth, menuWidth } = unref(getMenuSetting);
const isMobile = ref<boolean>(false); const isMobile = computed<boolean>({
get: () => settingStore.getIsMobile,
set: (val) => settingStore.setIsMobile(val)
});
const fixedHeader = computed(() => { const fixedHeader = computed(() => {
const { fixed } = unref(getHeaderSetting); const { fixed } = unref(getHeaderSetting);
@@ -162,7 +165,6 @@ const showSideDrawder = computed({
const checkMobileMode = () => { const checkMobileMode = () => {
if (document.body.clientWidth <= mobileWidth) { if (document.body.clientWidth <= mobileWidth) {
isMobile.value = true; isMobile.value = true;
} else { } else {
isMobile.value = false; isMobile.value = false;
} }
+2
View File
@@ -3,6 +3,8 @@ const setting = {
navMode: 'vertical', navMode: 'vertical',
//导航风格 dark 暗色侧边栏 light 白色侧边栏 header-dark 暗色顶栏 //导航风格 dark 暗色侧边栏 light 白色侧边栏 header-dark 暗色顶栏
navTheme: 'dark', navTheme: 'dark',
// 是否处于移动端模式
isMobile: false,
//顶部 //顶部
headerSetting: { headerSetting: {
//背景色 //背景色
+9
View File
@@ -6,6 +6,7 @@ import type { IheaderSetting, ImenuSetting, ImultiTabsSetting, IcrumbsSetting }
const { const {
navMode, navMode,
navTheme, navTheme,
isMobile,
headerSetting, headerSetting,
showFooter, showFooter,
menuSetting, menuSetting,
@@ -27,6 +28,7 @@ interface ProjectSettingState {
permissionMode: string; //权限模式 permissionMode: string; //权限模式
isPageAnimate: boolean; //是否开启路由动画 isPageAnimate: boolean; //是否开启路由动画
pageAnimateType: string; //路由动画类型 pageAnimateType: string; //路由动画类型
isMobile: boolean; // 是否处于移动端模式
} }
export const useProjectSettingStore = defineStore({ export const useProjectSettingStore = defineStore({
@@ -34,6 +36,7 @@ export const useProjectSettingStore = defineStore({
state: (): ProjectSettingState => ({ state: (): ProjectSettingState => ({
navMode: navMode, navMode: navMode,
navTheme, navTheme,
isMobile,
headerSetting, headerSetting,
showFooter, showFooter,
menuSetting, menuSetting,
@@ -50,6 +53,9 @@ export const useProjectSettingStore = defineStore({
getNavTheme(): string { getNavTheme(): string {
return this.navTheme; return this.navTheme;
}, },
getIsMobile(): boolean {
return this.isMobile;
},
getHeaderSetting(): object { getHeaderSetting(): object {
return this.headerSetting; return this.headerSetting;
}, },
@@ -79,6 +85,9 @@ export const useProjectSettingStore = defineStore({
setNavTheme(value: string): void { setNavTheme(value: string): void {
this.navTheme = value; this.navTheme = value;
}, },
setIsMobile(value: boolean): void {
this.isMobile = value;
},
}, },
}); });