import {getInfo, login, logout} from '@/api/login'
|
import {loginF} from "@/views/login.vue";
|
import defAva from '@/assets/images/profile.jpg'
|
|
import {defineStore} from "pinia";
|
import {removeToken, setToken} from "@/utils/auth";
|
import {sm4} from 'sm-crypto'
|
import {encryptSm4} from "@/utils/Sm4Utils";
|
export interface UserState {
|
token: string | undefined,
|
name: string | undefined,
|
avatar: string | undefined,
|
roles: Array<string>,
|
permissions: []
|
}
|
|
|
export const useUserStore = defineStore('user',{
|
state: ():UserState =>({
|
token: '',
|
name: '',
|
avatar: '',
|
roles: [],
|
permissions: [],
|
}),
|
actions:{
|
Login( userInfo: loginF) {
|
const username = userInfo.username.trim();
|
const password = encryptSm4(userInfo.password) ;
|
const code = userInfo.code;
|
const uuid = userInfo.uuid;
|
return new Promise<void>((resolve, reject) => {
|
login({username, password, code, uuid}).then(res => {
|
|
this.token = res.token;
|
setToken(res.token);
|
resolve()
|
}).catch(err => {
|
reject(err)
|
})
|
})
|
},
|
GetInfo() {
|
return new Promise((resolve, reject) => {
|
getInfo().then(res => {
|
const user = res.user
|
const avatar = user.avatar == "" ? defAva : import.meta.env.VITE_APP_BASE_API + user.avatar;
|
if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组
|
this.roles = res.roles;
|
this.permissions = res.permissions;
|
} else {
|
this.roles = ['ROLE_DEFAULT']
|
}
|
this.name = user.userName;
|
this.avatar = avatar;
|
resolve(res)
|
}).catch(error => {
|
reject(error)
|
})
|
})
|
},
|
// 退出系统
|
LogOut() {
|
return new Promise<void>((resolve, reject) => {
|
logout(this.token).then(() => {
|
this.token = '';
|
this.roles = [];
|
this.permissions = [];
|
removeToken()
|
resolve()
|
}).catch(error => {
|
reject(error)
|
})
|
})
|
}
|
},
|
persist:{
|
pick: ["token"]
|
}
|
})
|