style: 💄 代碼統一格式化

Former-commit-id: 7639f722803b80a3e1391f9652430d8e759e1a64
This commit is contained in:
郝先瑞
2023-04-18 23:16:13 +08:00
parent dcf30a7793
commit 5efbfab47b
7 changed files with 119 additions and 115 deletions

View File

@@ -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 });

View File

@@ -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();
} }

View File

@@ -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;

View File

@@ -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,
}; };
}); });

View File

@@ -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);
}); });
}); });

View File

@@ -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,
}; };
}); });

View File

@@ -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,
}; };
}); });