数通互联化工云平台
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

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);
}