index.ts
2.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import {defineStore} from "pinia";
import {
login as userLogin,
logout as userLogout,
getUserInfo,
LoginData,
} from "@/api/user";
import {setToken, clearToken, getToken} from "@/utils/auth";
import {removeRouteListener} from "@/utils/route-listener";
import {UserInfo, UserState} from "./types";
import useAppStore from "../app";
import useDictStore from "../dict";
import {Message} from "@arco-design/web-vue";
import { useCompanyStore } from '@/store'
const useUserStore = defineStore("user", {
state: (): UserState => ({
token: getToken() || "",
user: {} as UserInfo,
roles: [],
permissions: [],
initPassword: false,
}),
getters: {
userInfo(state: UserState): UserState {
return {...state};
},
},
actions: {
switchRoles() {
return new Promise((resolve) => {
resolve(null);
});
},
setInfo(partial: Partial<UserState>) {
this.$patch(partial);
},
// Reset user's information
resetInfo() {
this.$reset();
},
// Update app settings
setState(partial: Partial<UserState>) {
this.$patch(partial);
},
// Get user's information
async info() {
const res: any = await getUserInfo();
const initLogin = Number(localStorage.getItem('initLogin')) || 0;
if (res.code == 200) {
this.setInfo({
permissions: res.permissions,
roles: res.roles,
user: res.user,
initPassword:res.initPassword
});
} else {
await this.logout();
}
},
// Login
async login(loginForm: LoginData) {
try {
const res: any = await userLogin(loginForm);
if (res.code != 200) {
Message.error({
content: res.msg,
duration: 5 * 1000,
})
throw new Error(res.msg);
} else {
setToken(res.data.access_token);
const companyStore = useCompanyStore();
// 设置公司列表
await companyStore.setCompanyList();
}
} catch (err) {
clearToken();
throw err;
}
},
logoutCallBack() {
const appStore = useAppStore();
this.resetInfo();
clearToken();
removeRouteListener();
appStore.clearServerMenu();
const dictStore = useDictStore();
dictStore.cleanDict();
},
// Logout
async logout() {
try {
let res = await userLogout();
} finally {
this.logoutCallBack();
}
},
},
});
export default useUserStore;