refactor: 系统管理页面重构和ts类型声明优化

Former-commit-id: 40263bbb072596ada41ef33d9170841e7e66cd01
This commit is contained in:
郝先瑞
2022-06-15 00:48:17 +08:00
parent 928ba2dbd8
commit 321b584f9f
116 changed files with 1692 additions and 1485 deletions

View File

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

View File

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

View File

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

View File

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

View File

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