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 />
<a-scrollbar style="height: 100%; overflow: auto" outer-class="scrollbar">
<div class="main">
<router-view v-slot="{ Component }">
<MainTransition>
<router-view v-slot="{ Component, route }">
<main-transition>
<keep-alive :include="cacheRoutes">
<component :is="Component" />
<component :is="Component" :key="route.name" v-if="refreshPage" />
</keep-alive>
</MainTransition>
</main-transition>
</router-view>
</div>
</a-scrollbar>
@ -18,7 +18,10 @@
<script setup lang="ts">
import Tabs from "@/layout/components/Tabs/index.vue";
import { storeToRefs } from "pinia";
import { useThemeConfig } from "@/store/theme-config";
import { useRoutesListStore } from "@/store/route-list";
const themeStore = useThemeConfig();
let { refreshPage } = storeToRefs(themeStore);
const routerStore = useRoutesListStore();
const { cacheRoutes } = storeToRefs(routerStore);
</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-tabs>
<div class="tabs_setting">
<contextmenu />
<!-- <a-dropdown trigger="hover">
<a-dropdown trigger="hover" :popup-max-height="false">
<div class="setting"><icon-loop :size="18" /></div>
<template #content>
<a-doption>
<a-doption @click="refresh">
<template #icon><icon-refresh /></template>
<template #default>刷新</template>
</a-doption>
<a-doption>
<template #icon><icon-close /></template>
<template #default>关闭当前</template>
</a-doption>
<a-doption>
<template #icon><icon-left /></template>
<template #default>关闭左侧</template>
@ -29,25 +32,25 @@
<template #default>关闭右侧</template>
</a-doption>
<a-doption>
<template #icon><icon-close /></template>
<template #icon><icon-close-circle /></template>
<template #default>关闭其它</template>
</a-doption>
<a-doption>
<template #icon><icon-close-circle /></template>
<template #icon><icon-folder-delete /></template>
<template #default>全部关闭</template>
</a-doption>
</template>
</a-dropdown> -->
</a-dropdown>
</div>
</div>
</template>
<script setup lang="ts">
import contextmenu from "@/layout/components/Tabs/contextmenu.vue";
import { useRouter } from "vue-router";
import { storeToRefs } from "pinia";
import { useRoutesListStore } from "@/store/route-list";
import { useRoutingMethod } from "@/hooks/useRoutingMethod";
import { useThemeConfig } from "@/store/theme-config";
const router = useRouter();
const routerStore = useRoutesListStore();
const { tabsList, currentRoute } = storeToRefs(routerStore);
@ -68,6 +71,17 @@ const onDelete = (key: string) => {
if (tabsList.value.length == 0) return;
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>
<style lang="scss" scoped>
@ -80,6 +94,10 @@ const onDelete = (key: string) => {
align-items: center;
.tabs_setting {
margin: 0 0 0 $margin;
.setting {
margin-right: $margin;
color: $color-text-2;
}
}
}
:deep(.arco-tabs-nav-tab) {

View File

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

View File

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