style: 💄 代碼統一格式化
Former-commit-id: 7639f722803b80a3e1391f9652430d8e759e1a64
This commit is contained in:
@@ -1,23 +1,23 @@
|
|||||||
import router from '@/router';
|
import router from "@/router";
|
||||||
import { useUserStoreHook } from '@/store/modules/user';
|
import { useUserStoreHook } from "@/store/modules/user";
|
||||||
import { usePermissionStoreHook } from '@/store/modules/permission';
|
import { usePermissionStoreHook } from "@/store/modules/permission";
|
||||||
|
|
||||||
import NProgress from 'nprogress';
|
import NProgress from "nprogress";
|
||||||
import 'nprogress/nprogress.css';
|
import "nprogress/nprogress.css";
|
||||||
NProgress.configure({ showSpinner: false }); // 进度条
|
NProgress.configure({ showSpinner: false }); // 进度条
|
||||||
|
|
||||||
const permissionStore = usePermissionStoreHook();
|
const permissionStore = usePermissionStoreHook();
|
||||||
|
|
||||||
// 白名单路由
|
// 白名单路由
|
||||||
const whiteList = ['/login'];
|
const whiteList = ["/login"];
|
||||||
|
|
||||||
router.beforeEach(async (to, from, next) => {
|
router.beforeEach(async (to, from, next) => {
|
||||||
NProgress.start();
|
NProgress.start();
|
||||||
const hasToken = localStorage.getItem('accessToken');
|
const hasToken = localStorage.getItem("accessToken");
|
||||||
if (hasToken) {
|
if (hasToken) {
|
||||||
if (to.path === '/login') {
|
if (to.path === "/login") {
|
||||||
// 如果已登录,跳转首页
|
// 如果已登录,跳转首页
|
||||||
next({ path: '/' });
|
next({ path: "/" });
|
||||||
NProgress.done();
|
NProgress.done();
|
||||||
} else {
|
} else {
|
||||||
const userStore = useUserStoreHook();
|
const userStore = useUserStoreHook();
|
||||||
@@ -25,7 +25,7 @@ router.beforeEach(async (to, from, next) => {
|
|||||||
if (hasRoles) {
|
if (hasRoles) {
|
||||||
// 未匹配到任何路由,跳转404
|
// 未匹配到任何路由,跳转404
|
||||||
if (to.matched.length === 0) {
|
if (to.matched.length === 0) {
|
||||||
from.name ? next({ name: from.name }) : next('/404');
|
from.name ? next({ name: from.name }) : next("/404");
|
||||||
} else {
|
} else {
|
||||||
next();
|
next();
|
||||||
}
|
}
|
||||||
@@ -33,7 +33,7 @@ router.beforeEach(async (to, from, next) => {
|
|||||||
try {
|
try {
|
||||||
const { roles } = await userStore.getInfo();
|
const { roles } = await userStore.getInfo();
|
||||||
const accessRoutes = await permissionStore.generateRoutes(roles);
|
const accessRoutes = await permissionStore.generateRoutes(roles);
|
||||||
accessRoutes.forEach(route => {
|
accessRoutes.forEach((route) => {
|
||||||
router.addRoute(route);
|
router.addRoute(route);
|
||||||
});
|
});
|
||||||
next({ ...to, replace: true });
|
next({ ...to, replace: true });
|
||||||
|
|||||||
@@ -1,50 +1,50 @@
|
|||||||
import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router';
|
import { createRouter, createWebHashHistory, RouteRecordRaw } from "vue-router";
|
||||||
|
|
||||||
export const Layout = () => import('@/layout/index.vue');
|
export const Layout = () => import("@/layout/index.vue");
|
||||||
|
|
||||||
// 静态路由
|
// 静态路由
|
||||||
export const constantRoutes: RouteRecordRaw[] = [
|
export const constantRoutes: RouteRecordRaw[] = [
|
||||||
{
|
{
|
||||||
path: '/redirect',
|
path: "/redirect",
|
||||||
component: Layout,
|
component: Layout,
|
||||||
meta: { hidden: true },
|
meta: { hidden: true },
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: '/redirect/:path(.*)',
|
path: "/redirect/:path(.*)",
|
||||||
component: () => import('@/views/redirect/index.vue')
|
component: () => import("@/views/redirect/index.vue"),
|
||||||
}
|
},
|
||||||
]
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
path: '/login',
|
path: "/login",
|
||||||
component: () => import('@/views/login/index.vue'),
|
component: () => import("@/views/login/index.vue"),
|
||||||
meta: { hidden: true }
|
meta: { hidden: true },
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
path: '/',
|
path: "/",
|
||||||
component: Layout,
|
component: Layout,
|
||||||
redirect: '/dashboard',
|
redirect: "/dashboard",
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: 'dashboard',
|
path: "dashboard",
|
||||||
component: () => import('@/views/dashboard/index.vue'),
|
component: () => import("@/views/dashboard/index.vue"),
|
||||||
name: 'Dashboard',
|
name: "Dashboard",
|
||||||
meta: { title: 'dashboard', icon: 'homepage', affix: true }
|
meta: { title: "dashboard", icon: "homepage", affix: true },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '401',
|
path: "401",
|
||||||
component: () => import('@/views/error-page/401.vue'),
|
component: () => import("@/views/error-page/401.vue"),
|
||||||
meta: { hidden: true }
|
meta: { hidden: true },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '404',
|
path: "404",
|
||||||
component: () => import('@/views/error-page/404.vue'),
|
component: () => import("@/views/error-page/404.vue"),
|
||||||
meta: { hidden: true }
|
meta: { hidden: true },
|
||||||
}
|
},
|
||||||
]
|
],
|
||||||
}
|
},
|
||||||
|
|
||||||
// 外部链接
|
// 外部链接
|
||||||
/*{
|
/*{
|
||||||
@@ -106,14 +106,14 @@ const router = createRouter({
|
|||||||
history: createWebHashHistory(),
|
history: createWebHashHistory(),
|
||||||
routes: constantRoutes as RouteRecordRaw[],
|
routes: constantRoutes as RouteRecordRaw[],
|
||||||
// 刷新时,滚动条位置还原
|
// 刷新时,滚动条位置还原
|
||||||
scrollBehavior: () => ({ left: 0, top: 0 })
|
scrollBehavior: () => ({ left: 0, top: 0 }),
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 重置路由
|
* 重置路由
|
||||||
*/
|
*/
|
||||||
export function resetRouter() {
|
export function resetRouter() {
|
||||||
router.replace({ path: '/login' });
|
router.replace({ path: "/login" });
|
||||||
location.reload();
|
location.reload();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -42,21 +42,21 @@ interface DefaultSettings {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const defaultSettings: DefaultSettings = {
|
const defaultSettings: DefaultSettings = {
|
||||||
title: 'vue3-element-admin',
|
title: "vue3-element-admin",
|
||||||
showSettings: true,
|
showSettings: true,
|
||||||
tagsView: true,
|
tagsView: true,
|
||||||
fixedHeader: false,
|
fixedHeader: false,
|
||||||
sidebarLogo: true,
|
sidebarLogo: true,
|
||||||
layout: 'left',
|
layout: "left",
|
||||||
/**
|
/**
|
||||||
* 主题模式
|
* 主题模式
|
||||||
*
|
*
|
||||||
* dark:暗黑模式
|
* dark:暗黑模式
|
||||||
* light: 明亮模式
|
* light: 明亮模式
|
||||||
*/
|
*/
|
||||||
theme: 'dark',
|
theme: "dark",
|
||||||
size: 'default', // default |large |small
|
size: "default", // default |large |small
|
||||||
language: 'zh-cn' // zh-cn| en
|
language: "zh-cn", // zh-cn| en
|
||||||
};
|
};
|
||||||
|
|
||||||
export default defaultSettings;
|
export default defaultSettings;
|
||||||
|
|||||||
@@ -1,29 +1,29 @@
|
|||||||
import { defineStore } from 'pinia';
|
import { defineStore } from "pinia";
|
||||||
import { useStorage } from '@vueuse/core';
|
import { useStorage } from "@vueuse/core";
|
||||||
import defaultSettings from '@/settings';
|
import defaultSettings from "@/settings";
|
||||||
|
|
||||||
// 导入 Element Plus 中英文语言包
|
// 导入 Element Plus 中英文语言包
|
||||||
import zhCn from 'element-plus/es/locale/lang/zh-cn';
|
import zhCn from "element-plus/es/locale/lang/zh-cn";
|
||||||
import en from 'element-plus/es/locale/lang/en';
|
import en from "element-plus/es/locale/lang/en";
|
||||||
|
|
||||||
// setup
|
// setup
|
||||||
export const useAppStore = defineStore('app', () => {
|
export const useAppStore = defineStore("app", () => {
|
||||||
// state
|
// state
|
||||||
const device = useStorage('device', 'desktop');
|
const device = useStorage("device", "desktop");
|
||||||
const size = useStorage<any>('size', defaultSettings.size);
|
const size = useStorage<any>("size", defaultSettings.size);
|
||||||
const language = useStorage('language', defaultSettings.language);
|
const language = useStorage("language", defaultSettings.language);
|
||||||
|
|
||||||
const sidebarStatus = useStorage('sidebarStatus', 'closed');
|
const sidebarStatus = useStorage("sidebarStatus", "closed");
|
||||||
const sidebar = reactive({
|
const sidebar = reactive({
|
||||||
opened: sidebarStatus.value !== 'closed',
|
opened: sidebarStatus.value !== "closed",
|
||||||
withoutAnimation: false
|
withoutAnimation: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据语言标识读取对应的语言包
|
* 根据语言标识读取对应的语言包
|
||||||
*/
|
*/
|
||||||
const locale = computed(() => {
|
const locale = computed(() => {
|
||||||
if (language?.value == 'en') {
|
if (language?.value == "en") {
|
||||||
return en;
|
return en;
|
||||||
} else {
|
} else {
|
||||||
return zhCn;
|
return zhCn;
|
||||||
@@ -35,22 +35,22 @@ export const useAppStore = defineStore('app', () => {
|
|||||||
sidebar.opened = !sidebar.opened;
|
sidebar.opened = !sidebar.opened;
|
||||||
sidebar.withoutAnimation = withoutAnimation;
|
sidebar.withoutAnimation = withoutAnimation;
|
||||||
if (sidebar.opened) {
|
if (sidebar.opened) {
|
||||||
sidebarStatus.value = 'opened';
|
sidebarStatus.value = "opened";
|
||||||
} else {
|
} else {
|
||||||
sidebarStatus.value = 'closed';
|
sidebarStatus.value = "closed";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function closeSideBar(withoutAnimation: boolean) {
|
function closeSideBar(withoutAnimation: boolean) {
|
||||||
sidebar.opened = false;
|
sidebar.opened = false;
|
||||||
sidebar.withoutAnimation = withoutAnimation;
|
sidebar.withoutAnimation = withoutAnimation;
|
||||||
sidebarStatus.value = 'closed';
|
sidebarStatus.value = "closed";
|
||||||
}
|
}
|
||||||
|
|
||||||
function openSideBar(withoutAnimation: boolean) {
|
function openSideBar(withoutAnimation: boolean) {
|
||||||
sidebar.opened = true;
|
sidebar.opened = true;
|
||||||
sidebar.withoutAnimation = withoutAnimation;
|
sidebar.withoutAnimation = withoutAnimation;
|
||||||
sidebarStatus.value = 'opened';
|
sidebarStatus.value = "opened";
|
||||||
}
|
}
|
||||||
|
|
||||||
function toggleDevice(val: string) {
|
function toggleDevice(val: string) {
|
||||||
@@ -80,6 +80,6 @@ export const useAppStore = defineStore('app', () => {
|
|||||||
changeLanguage,
|
changeLanguage,
|
||||||
toggleSidebar,
|
toggleSidebar,
|
||||||
closeSideBar,
|
closeSideBar,
|
||||||
openSideBar
|
openSideBar,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
import { RouteRecordRaw } from 'vue-router';
|
import { RouteRecordRaw } from "vue-router";
|
||||||
import { defineStore } from 'pinia';
|
import { defineStore } from "pinia";
|
||||||
import { constantRoutes } from '@/router';
|
import { constantRoutes } from "@/router";
|
||||||
import { store } from '@/store';
|
import { store } from "@/store";
|
||||||
import { listRoutes } from '@/api/menu';
|
import { listRoutes } from "@/api/menu";
|
||||||
|
|
||||||
const modules = import.meta.glob('../../views/**/**.vue');
|
const modules = import.meta.glob("../../views/**/**.vue");
|
||||||
const Layout = () => import('@/layout/index.vue');
|
const Layout = () => import("@/layout/index.vue");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Use meta.role to determine if the current user has permission
|
* Use meta.role to determine if the current user has permission
|
||||||
@@ -17,10 +17,10 @@ const Layout = () => import('@/layout/index.vue');
|
|||||||
const hasPermission = (roles: string[], route: RouteRecordRaw) => {
|
const hasPermission = (roles: string[], route: RouteRecordRaw) => {
|
||||||
if (route.meta && route.meta.roles) {
|
if (route.meta && route.meta.roles) {
|
||||||
// 角色【超级管理员】拥有所有权限,忽略校验
|
// 角色【超级管理员】拥有所有权限,忽略校验
|
||||||
if (roles.includes('ROOT')) {
|
if (roles.includes("ROOT")) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return roles.some(role => {
|
return roles.some((role) => {
|
||||||
if (route.meta?.roles !== undefined) {
|
if (route.meta?.roles !== undefined) {
|
||||||
return (route.meta.roles as string[]).includes(role);
|
return (route.meta.roles as string[]).includes(role);
|
||||||
}
|
}
|
||||||
@@ -39,12 +39,12 @@ const hasPermission = (roles: string[], route: RouteRecordRaw) => {
|
|||||||
const filterAsyncRoutes = (routes: RouteRecordRaw[], roles: string[]) => {
|
const filterAsyncRoutes = (routes: RouteRecordRaw[], roles: string[]) => {
|
||||||
const asyncRoutes: RouteRecordRaw[] = [];
|
const asyncRoutes: RouteRecordRaw[] = [];
|
||||||
|
|
||||||
routes.forEach(route => {
|
routes.forEach((route) => {
|
||||||
const tmpRoute = { ...route }; // ES6扩展运算符复制新对象
|
const tmpRoute = { ...route }; // ES6扩展运算符复制新对象
|
||||||
|
|
||||||
// 判断用户(角色)是否有该路由的访问权限
|
// 判断用户(角色)是否有该路由的访问权限
|
||||||
if (hasPermission(roles, tmpRoute)) {
|
if (hasPermission(roles, tmpRoute)) {
|
||||||
if (tmpRoute.component?.toString() == 'Layout') {
|
if (tmpRoute.component?.toString() == "Layout") {
|
||||||
tmpRoute.component = Layout;
|
tmpRoute.component = Layout;
|
||||||
console.log();
|
console.log();
|
||||||
} else {
|
} else {
|
||||||
@@ -68,7 +68,7 @@ const filterAsyncRoutes = (routes: RouteRecordRaw[], roles: string[]) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// setup
|
// setup
|
||||||
export const usePermissionStore = defineStore('permission', () => {
|
export const usePermissionStore = defineStore("permission", () => {
|
||||||
// state
|
// state
|
||||||
const routes = ref<RouteRecordRaw[]>([]);
|
const routes = ref<RouteRecordRaw[]>([]);
|
||||||
|
|
||||||
@@ -92,7 +92,7 @@ export const usePermissionStore = defineStore('permission', () => {
|
|||||||
setRoutes(accessedRoutes);
|
setRoutes(accessedRoutes);
|
||||||
resolve(accessedRoutes);
|
resolve(accessedRoutes);
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch((error) => {
|
||||||
reject(error);
|
reject(error);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,34 +1,34 @@
|
|||||||
import { defineStore } from 'pinia';
|
import { defineStore } from "pinia";
|
||||||
import defaultSettings from '@/settings';
|
import defaultSettings from "@/settings";
|
||||||
import { useStorage } from '@vueuse/core';
|
import { useStorage } from "@vueuse/core";
|
||||||
|
|
||||||
export const useSettingsStore = defineStore('setting', () => {
|
export const useSettingsStore = defineStore("setting", () => {
|
||||||
// state
|
// state
|
||||||
const tagsView = useStorage<boolean>('tagsView', defaultSettings.tagsView);
|
const tagsView = useStorage<boolean>("tagsView", defaultSettings.tagsView);
|
||||||
|
|
||||||
const showSettings = ref<boolean>(defaultSettings.showSettings);
|
const showSettings = ref<boolean>(defaultSettings.showSettings);
|
||||||
const fixedHeader = ref<boolean>(defaultSettings.fixedHeader);
|
const fixedHeader = ref<boolean>(defaultSettings.fixedHeader);
|
||||||
const sidebarLogo = ref<boolean>(defaultSettings.sidebarLogo);
|
const sidebarLogo = ref<boolean>(defaultSettings.sidebarLogo);
|
||||||
|
|
||||||
const layout = useStorage<string>('layout', defaultSettings.layout);
|
const layout = useStorage<string>("layout", defaultSettings.layout);
|
||||||
|
|
||||||
// actions
|
// actions
|
||||||
function changeSetting(param: { key: string; value: any }) {
|
function changeSetting(param: { key: string; value: any }) {
|
||||||
const { key, value } = param;
|
const { key, value } = param;
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case 'showSettings':
|
case "showSettings":
|
||||||
showSettings.value = value;
|
showSettings.value = value;
|
||||||
break;
|
break;
|
||||||
case 'fixedHeader':
|
case "fixedHeader":
|
||||||
fixedHeader.value = value;
|
fixedHeader.value = value;
|
||||||
break;
|
break;
|
||||||
case 'tagsView':
|
case "tagsView":
|
||||||
tagsView.value = value;
|
tagsView.value = value;
|
||||||
break;
|
break;
|
||||||
case 'sidevarLogo':
|
case "sidevarLogo":
|
||||||
sidebarLogo.value = value;
|
sidebarLogo.value = value;
|
||||||
break;
|
break;
|
||||||
case 'layout':
|
case "layout":
|
||||||
layout.value = value;
|
layout.value = value;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -42,6 +42,6 @@ export const useSettingsStore = defineStore('setting', () => {
|
|||||||
fixedHeader,
|
fixedHeader,
|
||||||
sidebarLogo,
|
sidebarLogo,
|
||||||
layout,
|
layout,
|
||||||
changeSetting
|
changeSetting,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,30 +1,30 @@
|
|||||||
import { defineStore } from 'pinia';
|
import { defineStore } from "pinia";
|
||||||
import { ref } from 'vue';
|
import { ref } from "vue";
|
||||||
import { RouteLocationNormalized } from 'vue-router';
|
import { RouteLocationNormalized } from "vue-router";
|
||||||
|
|
||||||
export interface TagView extends Partial<RouteLocationNormalized> {
|
export interface TagView extends Partial<RouteLocationNormalized> {
|
||||||
title?: string;
|
title?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
// setup
|
// setup
|
||||||
export const useTagsViewStore = defineStore('tagsView', () => {
|
export const useTagsViewStore = defineStore("tagsView", () => {
|
||||||
// state
|
// state
|
||||||
const visitedViews = ref<TagView[]>([]);
|
const visitedViews = ref<TagView[]>([]);
|
||||||
const cachedViews = ref<string[]>([]);
|
const cachedViews = ref<string[]>([]);
|
||||||
|
|
||||||
// actions
|
// actions
|
||||||
function addVisitedView(view: TagView) {
|
function addVisitedView(view: TagView) {
|
||||||
if (visitedViews.value.some(v => v.path === view.path)) return;
|
if (visitedViews.value.some((v) => v.path === view.path)) return;
|
||||||
if (view.meta && view.meta.affix) {
|
if (view.meta && view.meta.affix) {
|
||||||
visitedViews.value.unshift(
|
visitedViews.value.unshift(
|
||||||
Object.assign({}, view, {
|
Object.assign({}, view, {
|
||||||
title: view.meta?.title || 'no-name'
|
title: view.meta?.title || "no-name",
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
visitedViews.value.push(
|
visitedViews.value.push(
|
||||||
Object.assign({}, view, {
|
Object.assign({}, view, {
|
||||||
title: view.meta?.title || 'no-name'
|
title: view.meta?.title || "no-name",
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -39,7 +39,7 @@ export const useTagsViewStore = defineStore('tagsView', () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function delVisitedView(view: TagView) {
|
function delVisitedView(view: TagView) {
|
||||||
return new Promise(resolve => {
|
return new Promise((resolve) => {
|
||||||
for (const [i, v] of visitedViews.value.entries()) {
|
for (const [i, v] of visitedViews.value.entries()) {
|
||||||
if (v.path === view.path) {
|
if (v.path === view.path) {
|
||||||
visitedViews.value.splice(i, 1);
|
visitedViews.value.splice(i, 1);
|
||||||
@@ -52,7 +52,7 @@ export const useTagsViewStore = defineStore('tagsView', () => {
|
|||||||
|
|
||||||
function delCachedView(view: TagView) {
|
function delCachedView(view: TagView) {
|
||||||
const viewName = view.name as string;
|
const viewName = view.name as string;
|
||||||
return new Promise(resolve => {
|
return new Promise((resolve) => {
|
||||||
const index = cachedViews.value.indexOf(viewName);
|
const index = cachedViews.value.indexOf(viewName);
|
||||||
index > -1 && cachedViews.value.splice(index, 1);
|
index > -1 && cachedViews.value.splice(index, 1);
|
||||||
resolve([...cachedViews.value]);
|
resolve([...cachedViews.value]);
|
||||||
@@ -60,8 +60,8 @@ export const useTagsViewStore = defineStore('tagsView', () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function delOtherVisitedViews(view: TagView) {
|
function delOtherVisitedViews(view: TagView) {
|
||||||
return new Promise(resolve => {
|
return new Promise((resolve) => {
|
||||||
visitedViews.value = visitedViews.value.filter(v => {
|
visitedViews.value = visitedViews.value.filter((v) => {
|
||||||
return v.meta?.affix || v.path === view.path;
|
return v.meta?.affix || v.path === view.path;
|
||||||
});
|
});
|
||||||
resolve([...visitedViews.value]);
|
resolve([...visitedViews.value]);
|
||||||
@@ -70,7 +70,7 @@ export const useTagsViewStore = defineStore('tagsView', () => {
|
|||||||
|
|
||||||
function delOtherCachedViews(view: TagView) {
|
function delOtherCachedViews(view: TagView) {
|
||||||
const viewName = view.name as string;
|
const viewName = view.name as string;
|
||||||
return new Promise(resolve => {
|
return new Promise((resolve) => {
|
||||||
const index = cachedViews.value.indexOf(viewName);
|
const index = cachedViews.value.indexOf(viewName);
|
||||||
if (index > -1) {
|
if (index > -1) {
|
||||||
cachedViews.value = cachedViews.value.slice(index, index + 1);
|
cachedViews.value = cachedViews.value.slice(index, index + 1);
|
||||||
@@ -97,30 +97,32 @@ export const useTagsViewStore = defineStore('tagsView', () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function delView(view: TagView) {
|
function delView(view: TagView) {
|
||||||
return new Promise(resolve => {
|
return new Promise((resolve) => {
|
||||||
delVisitedView(view);
|
delVisitedView(view);
|
||||||
delCachedView(view);
|
delCachedView(view);
|
||||||
resolve({
|
resolve({
|
||||||
visitedViews: [...visitedViews.value],
|
visitedViews: [...visitedViews.value],
|
||||||
cachedViews: [...cachedViews.value]
|
cachedViews: [...cachedViews.value],
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function delOtherViews(view: TagView) {
|
function delOtherViews(view: TagView) {
|
||||||
return new Promise(resolve => {
|
return new Promise((resolve) => {
|
||||||
delOtherVisitedViews(view);
|
delOtherVisitedViews(view);
|
||||||
delOtherCachedViews(view);
|
delOtherCachedViews(view);
|
||||||
resolve({
|
resolve({
|
||||||
visitedViews: [...visitedViews.value],
|
visitedViews: [...visitedViews.value],
|
||||||
cachedViews: [...cachedViews.value]
|
cachedViews: [...cachedViews.value],
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function delLeftViews(view: TagView) {
|
function delLeftViews(view: TagView) {
|
||||||
return new Promise(resolve => {
|
return new Promise((resolve) => {
|
||||||
const currIndex = visitedViews.value.findIndex(v => v.path === view.path);
|
const currIndex = visitedViews.value.findIndex(
|
||||||
|
(v) => v.path === view.path
|
||||||
|
);
|
||||||
if (currIndex === -1) {
|
if (currIndex === -1) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -137,13 +139,15 @@ export const useTagsViewStore = defineStore('tagsView', () => {
|
|||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
resolve({
|
resolve({
|
||||||
visitedViews: [...visitedViews.value]
|
visitedViews: [...visitedViews.value],
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
function delRightViews(view: TagView) {
|
function delRightViews(view: TagView) {
|
||||||
return new Promise(resolve => {
|
return new Promise((resolve) => {
|
||||||
const currIndex = visitedViews.value.findIndex(v => v.path === view.path);
|
const currIndex = visitedViews.value.findIndex(
|
||||||
|
(v) => v.path === view.path
|
||||||
|
);
|
||||||
if (currIndex === -1) {
|
if (currIndex === -1) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -160,33 +164,33 @@ export const useTagsViewStore = defineStore('tagsView', () => {
|
|||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
resolve({
|
resolve({
|
||||||
visitedViews: [...visitedViews.value]
|
visitedViews: [...visitedViews.value],
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function delAllViews() {
|
function delAllViews() {
|
||||||
return new Promise(resolve => {
|
return new Promise((resolve) => {
|
||||||
const affixTags = visitedViews.value.filter(tag => tag.meta?.affix);
|
const affixTags = visitedViews.value.filter((tag) => tag.meta?.affix);
|
||||||
visitedViews.value = affixTags;
|
visitedViews.value = affixTags;
|
||||||
cachedViews.value = [];
|
cachedViews.value = [];
|
||||||
resolve({
|
resolve({
|
||||||
visitedViews: [...visitedViews.value],
|
visitedViews: [...visitedViews.value],
|
||||||
cachedViews: [...cachedViews.value]
|
cachedViews: [...cachedViews.value],
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function delAllVisitedViews() {
|
function delAllVisitedViews() {
|
||||||
return new Promise(resolve => {
|
return new Promise((resolve) => {
|
||||||
const affixTags = visitedViews.value.filter(tag => tag.meta?.affix);
|
const affixTags = visitedViews.value.filter((tag) => tag.meta?.affix);
|
||||||
visitedViews.value = affixTags;
|
visitedViews.value = affixTags;
|
||||||
resolve([...visitedViews.value]);
|
resolve([...visitedViews.value]);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function delAllCachedViews() {
|
function delAllCachedViews() {
|
||||||
return new Promise(resolve => {
|
return new Promise((resolve) => {
|
||||||
cachedViews.value = [];
|
cachedViews.value = [];
|
||||||
resolve([...cachedViews.value]);
|
resolve([...cachedViews.value]);
|
||||||
});
|
});
|
||||||
@@ -209,6 +213,6 @@ export const useTagsViewStore = defineStore('tagsView', () => {
|
|||||||
delRightViews,
|
delRightViews,
|
||||||
delAllViews,
|
delAllViews,
|
||||||
delAllVisitedViews,
|
delAllVisitedViews,
|
||||||
delAllCachedViews
|
delAllCachedViews,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user