You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
163 lines
4.4 KiB
163 lines
4.4 KiB
import { defineStore } from "pinia";
|
|
|
|
import { loginApi, logoutApi,loginApiIng } from "@/api/auth";
|
|
import { getUserInfo,getUserInfoIng } from "@/api/user";
|
|
import { resetRouter } from "@/router";
|
|
import { store } from "@/store";
|
|
|
|
import { LoginData } from "@/api/auth/types";
|
|
import { UserInfo } from "@/api/user/types";
|
|
|
|
import { silentLogin } from '@/api/DesignForm/requestapi'
|
|
|
|
import { useStorage } from "@vueuse/core";
|
|
const appTokenKey = import.meta.env.VITE_APP_TOKEN_KEY
|
|
|
|
export const useUserStore = defineStore("user", () => {
|
|
// state
|
|
const tokenIng = useStorage(appTokenKey, "");
|
|
const nickname = ref("");
|
|
const avatar = ref("");
|
|
const roles = ref<Array<string>>([]); // 用户角色编码集合 → 判断路由权限
|
|
const perms = ref<Array<string>>([]); // 用户权限编码集合 → 判断按钮权限
|
|
const userKey = useStorage("userKey", "");
|
|
const userToken = useStorage("userToken", "");
|
|
|
|
const userInfoCont = ref<any>("");
|
|
/**
|
|
* 登录调用
|
|
*
|
|
* @param {LoginData}
|
|
* @returns
|
|
*/
|
|
function login(loginData: LoginData) {
|
|
console.log("登陆使用12222",loginData);
|
|
return new Promise<void>((resolve, reject) => {
|
|
loginApiIng(loginData)
|
|
.then((response:any) => {
|
|
//console.log("登陆使用",response);
|
|
const { tokenType, accessToken, key, token,userinfo } = response.data;
|
|
tokenIng.value = key + "_" + token; // Bearer eyJhbGciOiJIUzI1NiJ9.xxx.xxx
|
|
userKey.value = key;
|
|
userToken.value = token;
|
|
// userInfoCont.value = userinfo
|
|
resolve();
|
|
})
|
|
.catch((error:any) => {
|
|
reject(error);
|
|
});
|
|
});
|
|
}
|
|
|
|
|
|
function loginSilent(loginData: any) {
|
|
//console.log("登陆使用1",loginData);
|
|
return new Promise<void>((resolve, reject) => {
|
|
silentLogin(loginData)
|
|
.then((response:any) => {
|
|
//console.log("登陆使用",response);
|
|
const { tokenType, accessToken, key, token,userinfo } = response.data;
|
|
tokenIng.value = key + "_" + token; // Bearer eyJhbGciOiJIUzI1NiJ9.xxx.xxx
|
|
userKey.value = key;
|
|
userToken.value = token;
|
|
// userInfoCont.value = userinfo
|
|
resolve();
|
|
return response.code
|
|
})
|
|
.catch((error:any) => {
|
|
reject(error);
|
|
});
|
|
});
|
|
}
|
|
|
|
// 获取信息(用户昵称、头像、角色集合、权限集合)
|
|
function getInfo() {
|
|
return new Promise<UserInfo>((resolve, reject) => {
|
|
// getUserInfo()
|
|
// .then(({ data }) => {
|
|
// if (!data) {
|
|
// return reject("验证失败,请重新登录。");
|
|
// }
|
|
// if (!data.roles || data.roles.length <= 0) {
|
|
// reject("获取用户信息:角色必须是非null数组!");
|
|
// }
|
|
// nickname.value = data.nickname;
|
|
// avatar.value = data.avatar;
|
|
// roles.value = data.roles;
|
|
// perms.value = data.perms;
|
|
// resolve(data);
|
|
// })
|
|
// .catch((error) => {
|
|
// reject(error);
|
|
// });
|
|
getUserInfoIng()
|
|
.then(({data})=>{
|
|
// console.log("获取用户信息:角色必须是非null数组!",data);
|
|
// debugger;
|
|
if (!data) {
|
|
return reject("验证失败,请重新登录。");
|
|
}
|
|
if (!data.roles || data.roles.length <= 0) {
|
|
reject("获取用户信息:角色必须是非null数组!");
|
|
}
|
|
nickname.value = data.nickname;
|
|
avatar.value = data.avatar;
|
|
roles.value = data.roles;
|
|
perms.value = data.perms;
|
|
userInfoCont.value = data
|
|
resolve(data);
|
|
})
|
|
.catch((error:any) => {
|
|
reject(error);
|
|
});
|
|
});
|
|
}
|
|
|
|
// 注销
|
|
function logout() {
|
|
return new Promise<void>((resolve, reject) => {
|
|
logoutApi()
|
|
.then(() => {
|
|
resetRouter();
|
|
resetToken();
|
|
location.reload(); // 清空路由
|
|
resolve();
|
|
})
|
|
.catch((error:any) => {
|
|
reject(error);
|
|
});
|
|
});
|
|
}
|
|
|
|
// 重置
|
|
function resetToken() {
|
|
tokenIng.value = "";
|
|
nickname.value = "";
|
|
userKey.value = "";
|
|
userToken.value = "";
|
|
userInfoCont.value = ""
|
|
avatar.value = "";
|
|
roles.value = [];
|
|
perms.value = [];
|
|
}
|
|
return {
|
|
tokenIng,
|
|
userKey,
|
|
userToken,
|
|
userInfoCont,
|
|
nickname,
|
|
avatar,
|
|
roles,
|
|
perms,
|
|
login,
|
|
getInfo,
|
|
logout,
|
|
resetToken,
|
|
loginSilent
|
|
};
|
|
});
|
|
|
|
// 非setup
|
|
export function useUserStoreHook() {
|
|
return useUserStore(store);
|
|
}
|
|
|