feat: 刷新

This commit is contained in:
wang_fan_w 2024-04-21 17:09:20 +08:00
parent f7c19c6224
commit b0791d674c
5 changed files with 40 additions and 82 deletions

View File

@ -3,12 +3,12 @@
<Tabs /> <Tabs />
<a-scrollbar style="height: 100%; overflow: auto" outer-class="scrollbar"> <a-scrollbar style="height: 100%; overflow: auto" outer-class="scrollbar">
<div class="main"> <div class="main">
<router-view v-slot="{ Component }"> <router-view v-slot="{ Component, route }">
<MainTransition> <main-transition>
<keep-alive :include="cacheRoutes"> <keep-alive :include="cacheRoutes">
<component :is="Component" /> <component :is="Component" :key="route.name" v-if="refreshPage" />
</keep-alive> </keep-alive>
</MainTransition> </main-transition>
</router-view> </router-view>
</div> </div>
</a-scrollbar> </a-scrollbar>
@ -18,7 +18,10 @@
<script setup lang="ts"> <script setup lang="ts">
import Tabs from "@/layout/components/Tabs/index.vue"; import Tabs from "@/layout/components/Tabs/index.vue";
import { storeToRefs } from "pinia"; import { storeToRefs } from "pinia";
import { useThemeConfig } from "@/store/theme-config";
import { useRoutesListStore } from "@/store/route-list"; import { useRoutesListStore } from "@/store/route-list";
const themeStore = useThemeConfig();
let { refreshPage } = storeToRefs(themeStore);
const routerStore = useRoutesListStore(); const routerStore = useRoutesListStore();
const { cacheRoutes } = storeToRefs(routerStore); const { cacheRoutes } = storeToRefs(routerStore);
</script> </script>

View File

@ -1,69 +0,0 @@
<template>
<div>
<a-dropdown trigger="hover" :popup-max-height="false">
<div class="setting"><icon-loop :size="18" /></div>
<template #content>
<a-doption v-for="item in tabsMenu.list" :key="item.type" @click="(ev: MouseEvent) => onMenu(ev, item)">
<template #icon>
<component :is="item.icon"></component>
</template>
<template #default>{{ item.title }}</template>
</a-doption>
</template>
</a-dropdown>
</div>
</template>
<script setup lang="ts">
const tabsMenu = reactive<TabsMenu.list>({
list: [
{ type: 1, icon: "icon-refresh", title: "refresh" },
{ type: 2, icon: "icon-close", title: "close-current" },
{ type: 3, icon: "icon-left", title: "close-left" },
{ type: 4, icon: "icon-right", title: "close-right" },
{ type: 5, icon: "icon-close-circle", title: "close-other" },
{ type: 6, icon: "icon-folder-delete", title: "close-all" }
]
});
const onMenu = (ev: MouseEvent, item: TabsMenu.menu) => {
console.log("点击", ev, item);
contextmenuClick(item);
};
//
const contextmenuClick = (item: TabsMenu.menu) => {
switch (item.type) {
case 1:
//
break;
case 2:
//
break;
case 3:
//
break;
case 4:
//
break;
case 5:
//
break;
default:
//
break;
}
};
</script>
<style lang="scss" scoped>
.setting {
margin-right: $margin;
color: $color-text-2;
}
</style>

View File

@ -12,14 +12,17 @@
<a-tab-pane v-for="item of tabsList" :key="item.name" :title="item.meta.title" :closable="!item.meta.affix" /> <a-tab-pane v-for="item of tabsList" :key="item.name" :title="item.meta.title" :closable="!item.meta.affix" />
</a-tabs> </a-tabs>
<div class="tabs_setting"> <div class="tabs_setting">
<contextmenu /> <a-dropdown trigger="hover" :popup-max-height="false">
<!-- <a-dropdown trigger="hover">
<div class="setting"><icon-loop :size="18" /></div> <div class="setting"><icon-loop :size="18" /></div>
<template #content> <template #content>
<a-doption> <a-doption @click="refresh">
<template #icon><icon-refresh /></template> <template #icon><icon-refresh /></template>
<template #default>刷新</template> <template #default>刷新</template>
</a-doption> </a-doption>
<a-doption>
<template #icon><icon-close /></template>
<template #default>关闭当前</template>
</a-doption>
<a-doption> <a-doption>
<template #icon><icon-left /></template> <template #icon><icon-left /></template>
<template #default>关闭左侧</template> <template #default>关闭左侧</template>
@ -29,25 +32,25 @@
<template #default>关闭右侧</template> <template #default>关闭右侧</template>
</a-doption> </a-doption>
<a-doption> <a-doption>
<template #icon><icon-close /></template> <template #icon><icon-close-circle /></template>
<template #default>关闭其它</template> <template #default>关闭其它</template>
</a-doption> </a-doption>
<a-doption> <a-doption>
<template #icon><icon-close-circle /></template> <template #icon><icon-folder-delete /></template>
<template #default>全部关闭</template> <template #default>全部关闭</template>
</a-doption> </a-doption>
</template> </template>
</a-dropdown> --> </a-dropdown>
</div> </div>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import contextmenu from "@/layout/components/Tabs/contextmenu.vue";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { storeToRefs } from "pinia"; import { storeToRefs } from "pinia";
import { useRoutesListStore } from "@/store/route-list"; import { useRoutesListStore } from "@/store/route-list";
import { useRoutingMethod } from "@/hooks/useRoutingMethod"; import { useRoutingMethod } from "@/hooks/useRoutingMethod";
import { useThemeConfig } from "@/store/theme-config";
const router = useRouter(); const router = useRouter();
const routerStore = useRoutesListStore(); const routerStore = useRoutesListStore();
const { tabsList, currentRoute } = storeToRefs(routerStore); const { tabsList, currentRoute } = storeToRefs(routerStore);
@ -68,6 +71,17 @@ const onDelete = (key: string) => {
if (tabsList.value.length == 0) return; if (tabsList.value.length == 0) return;
router.push(tabsList.value.at(-1).path); router.push(tabsList.value.at(-1).path);
}; };
//
const refresh = () => {
const themeStore = useThemeConfig();
themeStore.setRefreshPage(false);
currentRoute.value.meta.keepAlive && routerStore.removeRouteNames(currentRoute.value.name);
setTimeout(() => {
themeStore.setRefreshPage(true);
currentRoute.value.meta.keepAlive && routerStore.setRouteNames(currentRoute.value.name);
}, 0);
};
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@ -80,6 +94,10 @@ const onDelete = (key: string) => {
align-items: center; align-items: center;
.tabs_setting { .tabs_setting {
margin: 0 0 0 $margin; margin: 0 0 0 $margin;
.setting {
margin-right: $margin;
color: $color-text-2;
}
} }
} }
:deep(.arco-tabs-nav-tab) { :deep(.arco-tabs-nav-tab) {

View File

@ -33,7 +33,7 @@ export const useRoutesListStore = defineStore("routeList", {
this.routeList = data; this.routeList = data;
}, },
/** /**
* *
* @param {string} name * @param {string} name
*/ */
setRouteNames(name: string) { setRouteNames(name: string) {

View File

@ -6,11 +6,17 @@ import { defineStore } from "pinia";
*/ */
export const useThemeConfig = defineStore("themeConfig", { export const useThemeConfig = defineStore("themeConfig", {
state: (): any => ({ state: (): any => ({
collapsed: false // 是否折叠菜单 collapsed: false, // 是否折叠菜单
refreshPage: true // 刷新页面
}), }),
actions: { actions: {
// 折叠菜单
async setCollapsed(data: boolean) { async setCollapsed(data: boolean) {
this.collapsed = data; this.collapsed = data;
},
// 刷新页面
setRefreshPage(data: Boolean) {
this.refreshPage = data;
} }
}, },
persist: { persist: {