feat: 刷新
This commit is contained in:
parent
f7c19c6224
commit
b0791d674c
@ -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>
|
||||||
|
|||||||
@ -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>
|
|
||||||
@ -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) {
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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: {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user