refactor: 系统管理页面重构和ts类型声明优化
Former-commit-id: 40263bbb072596ada41ef33d9170841e7e66cd01
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { AppState } from '@/types';
|
||||
import { AppState } from '@/types/store/app';
|
||||
import { localStorage } from '@/utils/storage';
|
||||
import { defineStore } from 'pinia';
|
||||
import { getLanguage } from '@/lang/index';
|
||||
@@ -11,10 +11,10 @@ const useAppStore = defineStore({
|
||||
opened: localStorage.get('sidebarStatus')
|
||||
? !!+localStorage.get('sidebarStatus')
|
||||
: true,
|
||||
withoutAnimation: false
|
||||
withoutAnimation: false,
|
||||
},
|
||||
language: getLanguage(),
|
||||
size: localStorage.get('size') || 'default'
|
||||
size: localStorage.get('size') || 'default',
|
||||
}),
|
||||
actions: {
|
||||
toggleSidebar() {
|
||||
@@ -41,8 +41,8 @@ const useAppStore = defineStore({
|
||||
setLanguage(language: string) {
|
||||
this.language = language;
|
||||
localStorage.set('language', language);
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
export default useAppStore;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { PermissionState } from '@/types';
|
||||
import { PermissionState } from '@/types/store/permission';
|
||||
import { RouteRecordRaw } from 'vue-router';
|
||||
import { defineStore } from 'pinia';
|
||||
import { constantRoutes } from '@/router';
|
||||
@@ -12,7 +12,7 @@ const hasPermission = (roles: string[], route: RouteRecordRaw) => {
|
||||
if (roles.includes('ROOT')) {
|
||||
return true;
|
||||
}
|
||||
return roles.some(role => {
|
||||
return roles.some((role) => {
|
||||
if (route.meta?.roles !== undefined) {
|
||||
return (route.meta.roles as string[]).includes(role);
|
||||
}
|
||||
@@ -26,7 +26,7 @@ export const filterAsyncRoutes = (
|
||||
roles: string[]
|
||||
) => {
|
||||
const res: RouteRecordRaw[] = [];
|
||||
routes.forEach(route => {
|
||||
routes.forEach((route) => {
|
||||
const tmp = { ...route } as any;
|
||||
if (hasPermission(roles, tmp)) {
|
||||
if (tmp.component == 'Layout') {
|
||||
@@ -53,7 +53,7 @@ const usePermissionStore = defineStore({
|
||||
id: 'permission',
|
||||
state: (): PermissionState => ({
|
||||
routes: [],
|
||||
addRoutes: []
|
||||
addRoutes: [],
|
||||
}),
|
||||
actions: {
|
||||
setRoutes(routes: RouteRecordRaw[]) {
|
||||
@@ -63,18 +63,18 @@ const usePermissionStore = defineStore({
|
||||
generateRoutes(roles: string[]) {
|
||||
return new Promise((resolve, reject) => {
|
||||
listRoutes()
|
||||
.then(response => {
|
||||
.then((response) => {
|
||||
const asyncRoutes = response.data;
|
||||
const accessedRoutes = filterAsyncRoutes(asyncRoutes, roles);
|
||||
this.setRoutes(accessedRoutes);
|
||||
resolve(accessedRoutes);
|
||||
})
|
||||
.catch(error => {
|
||||
.catch((error) => {
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
export default usePermissionStore;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { defineStore } from 'pinia';
|
||||
import { SettingState } from '@/types';
|
||||
import { SettingState } from '@/types/store/setting';
|
||||
import defaultSettings from '../../settings';
|
||||
import { localStorage } from '@/utils/storage';
|
||||
|
||||
@@ -18,7 +18,7 @@ export const useSettingStore = defineStore({
|
||||
? localStorage.get('tagsView')
|
||||
: tagsView,
|
||||
fixedHeader: fixedHeader,
|
||||
sidebarLogo: sidebarLogo
|
||||
sidebarLogo: sidebarLogo,
|
||||
}),
|
||||
actions: {
|
||||
async changeSetting(payload: { key: string; value: any }) {
|
||||
@@ -43,8 +43,8 @@ export const useSettingStore = defineStore({
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
export default useSettingStore;
|
||||
|
||||
@@ -1,38 +1,37 @@
|
||||
import { defineStore } from 'pinia';
|
||||
import { TagsViewState } from '@/types';
|
||||
import { TagsViewState } from '@/types/store/tagsview';
|
||||
|
||||
const useTagsViewStore = defineStore({
|
||||
id: 'tagsView',
|
||||
state: (): TagsViewState => ({
|
||||
visitedViews: [],
|
||||
cachedViews: []
|
||||
cachedViews: [], // keepAlive 缓存页面
|
||||
}),
|
||||
actions: {
|
||||
addVisitedView(view: any) {
|
||||
if (this.visitedViews.some(v => v.path === view.path)) return;
|
||||
if (this.visitedViews.some((v) => v.path === view.path)) return;
|
||||
if (view.meta && view.meta.affix) {
|
||||
this.visitedViews.unshift(
|
||||
Object.assign({}, view, {
|
||||
title: view.meta?.title || 'no-name'
|
||||
title: view.meta?.title || 'no-name',
|
||||
})
|
||||
);
|
||||
} else {
|
||||
this.visitedViews.push(
|
||||
Object.assign({}, view, {
|
||||
title: view.meta?.title || 'no-name'
|
||||
title: view.meta?.title || 'no-name',
|
||||
})
|
||||
);
|
||||
}
|
||||
},
|
||||
addCachedView(view: any) {
|
||||
if (this.cachedViews.includes(view.name)) return;
|
||||
if (!view.meta.noCache) {
|
||||
if (view.meta.keepAlive) {
|
||||
this.cachedViews.push(view.name);
|
||||
}
|
||||
},
|
||||
|
||||
delVisitedView(view: any) {
|
||||
return new Promise(resolve => {
|
||||
return new Promise((resolve) => {
|
||||
for (const [i, v] of this.visitedViews.entries()) {
|
||||
if (v.path === view.path) {
|
||||
this.visitedViews.splice(i, 1);
|
||||
@@ -43,23 +42,22 @@ const useTagsViewStore = defineStore({
|
||||
});
|
||||
},
|
||||
delCachedView(view: any) {
|
||||
return new Promise(resolve => {
|
||||
return new Promise((resolve) => {
|
||||
const index = this.cachedViews.indexOf(view.name);
|
||||
index > -1 && this.cachedViews.splice(index, 1);
|
||||
resolve([...this.cachedViews]);
|
||||
});
|
||||
},
|
||||
|
||||
delOtherVisitedViews(view: any) {
|
||||
return new Promise(resolve => {
|
||||
this.visitedViews = this.visitedViews.filter(v => {
|
||||
return new Promise((resolve) => {
|
||||
this.visitedViews = this.visitedViews.filter((v) => {
|
||||
return v.meta?.affix || v.path === view.path;
|
||||
});
|
||||
resolve([...this.visitedViews]);
|
||||
});
|
||||
},
|
||||
delOtherCachedViews(view: any) {
|
||||
return new Promise(resolve => {
|
||||
return new Promise((resolve) => {
|
||||
const index = this.cachedViews.indexOf(view.name);
|
||||
if (index > -1) {
|
||||
this.cachedViews = this.cachedViews.slice(index, index + 1);
|
||||
@@ -84,29 +82,29 @@ const useTagsViewStore = defineStore({
|
||||
this.addCachedView(view);
|
||||
},
|
||||
delView(view: any) {
|
||||
return new Promise(resolve => {
|
||||
return new Promise((resolve) => {
|
||||
this.delVisitedView(view);
|
||||
this.delCachedView(view);
|
||||
resolve({
|
||||
visitedViews: [...this.visitedViews],
|
||||
cachedViews: [...this.cachedViews]
|
||||
cachedViews: [...this.cachedViews],
|
||||
});
|
||||
});
|
||||
},
|
||||
delOtherViews(view: any) {
|
||||
return new Promise(resolve => {
|
||||
return new Promise((resolve) => {
|
||||
this.delOtherVisitedViews(view);
|
||||
this.delOtherCachedViews(view);
|
||||
resolve({
|
||||
visitedViews: [...this.visitedViews],
|
||||
cachedViews: [...this.cachedViews]
|
||||
cachedViews: [...this.cachedViews],
|
||||
});
|
||||
});
|
||||
},
|
||||
delLeftViews(view: any) {
|
||||
return new Promise(resolve => {
|
||||
return new Promise((resolve) => {
|
||||
const currIndex = this.visitedViews.findIndex(
|
||||
v => v.path === view.path
|
||||
(v) => v.path === view.path
|
||||
);
|
||||
if (currIndex === -1) {
|
||||
return;
|
||||
@@ -124,14 +122,14 @@ const useTagsViewStore = defineStore({
|
||||
return false;
|
||||
});
|
||||
resolve({
|
||||
visitedViews: [...this.visitedViews]
|
||||
visitedViews: [...this.visitedViews],
|
||||
});
|
||||
});
|
||||
},
|
||||
delRightViews(view: any) {
|
||||
return new Promise(resolve => {
|
||||
return new Promise((resolve) => {
|
||||
const currIndex = this.visitedViews.findIndex(
|
||||
v => v.path === view.path
|
||||
(v) => v.path === view.path
|
||||
);
|
||||
if (currIndex === -1) {
|
||||
return;
|
||||
@@ -149,35 +147,35 @@ const useTagsViewStore = defineStore({
|
||||
return false;
|
||||
});
|
||||
resolve({
|
||||
visitedViews: [...this.visitedViews]
|
||||
visitedViews: [...this.visitedViews],
|
||||
});
|
||||
});
|
||||
},
|
||||
delAllViews() {
|
||||
return new Promise(resolve => {
|
||||
const affixTags = this.visitedViews.filter(tag => tag.meta?.affix);
|
||||
return new Promise((resolve) => {
|
||||
const affixTags = this.visitedViews.filter((tag) => tag.meta?.affix);
|
||||
this.visitedViews = affixTags;
|
||||
this.cachedViews = [];
|
||||
resolve({
|
||||
visitedViews: [...this.visitedViews],
|
||||
cachedViews: [...this.cachedViews]
|
||||
cachedViews: [...this.cachedViews],
|
||||
});
|
||||
});
|
||||
},
|
||||
delAllVisitedViews() {
|
||||
return new Promise(resolve => {
|
||||
const affixTags = this.visitedViews.filter(tag => tag.meta?.affix);
|
||||
return new Promise((resolve) => {
|
||||
const affixTags = this.visitedViews.filter((tag) => tag.meta?.affix);
|
||||
this.visitedViews = affixTags;
|
||||
resolve([...this.visitedViews]);
|
||||
});
|
||||
},
|
||||
delAllCachedViews() {
|
||||
return new Promise(resolve => {
|
||||
return new Promise((resolve) => {
|
||||
this.cachedViews = [];
|
||||
resolve([...this.cachedViews]);
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
export default useTagsViewStore;
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
import { defineStore } from 'pinia';
|
||||
import { LoginFormData, UserState } from '@/types';
|
||||
import { LoginFormData } from '@/types/api/system/login';
|
||||
import { UserState } from '@/types/store/user';
|
||||
|
||||
import { localStorage } from '@/utils/storage';
|
||||
import { login, logout } from '@/api/login';
|
||||
import { getUserInfo } from '@/api/system/user';
|
||||
@@ -12,38 +14,33 @@ const useUserStore = defineStore({
|
||||
nickname: '',
|
||||
avatar: '',
|
||||
roles: [],
|
||||
perms: []
|
||||
perms: [],
|
||||
}),
|
||||
actions: {
|
||||
async RESET_STATE() {
|
||||
this.$reset();
|
||||
},
|
||||
/**
|
||||
* 用户登录请求
|
||||
* @param userInfo 登录用户信息
|
||||
* username: 用户名
|
||||
* password: 密码
|
||||
* code: 验证码
|
||||
* uuid: 匹配正确验证码的 key
|
||||
* 登录
|
||||
*/
|
||||
login(userInfo: LoginFormData) {
|
||||
const { username, password, code, uuid } = userInfo;
|
||||
login(loginData: LoginFormData) {
|
||||
const { username, password, code, uuid } = loginData;
|
||||
return new Promise((resolve, reject) => {
|
||||
login({
|
||||
username: username.trim(),
|
||||
password: password,
|
||||
grant_type: 'captcha',
|
||||
code: code,
|
||||
uuid: uuid
|
||||
uuid: uuid,
|
||||
})
|
||||
.then(response => {
|
||||
.then((response) => {
|
||||
const { access_token, token_type } = response.data;
|
||||
const accessToken = token_type + ' ' + access_token;
|
||||
localStorage.set('token', accessToken);
|
||||
this.token = accessToken;
|
||||
resolve(access_token);
|
||||
})
|
||||
.catch(error => {
|
||||
.catch((error) => {
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
@@ -68,7 +65,7 @@ const useUserStore = defineStore({
|
||||
this.perms = perms;
|
||||
resolve(data);
|
||||
})
|
||||
.catch(error => {
|
||||
.catch((error) => {
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
@@ -86,7 +83,7 @@ const useUserStore = defineStore({
|
||||
resetRouter();
|
||||
resolve(null);
|
||||
})
|
||||
.catch(error => {
|
||||
.catch((error) => {
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
@@ -96,13 +93,13 @@ const useUserStore = defineStore({
|
||||
* 清除 Token
|
||||
*/
|
||||
resetToken() {
|
||||
return new Promise(resolve => {
|
||||
return new Promise((resolve) => {
|
||||
localStorage.remove('token');
|
||||
this.RESET_STATE();
|
||||
resolve(null);
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
export default useUserStore;
|
||||
|
||||
Reference in New Issue
Block a user