|
@@ -1,66 +1,66 @@
|
|
import { defineStore } from "pinia";
|
|
import { defineStore } from "pinia";
|
|
-
|
|
|
|
-import { loginApi, logoutApi, getUserInfo } from "@/api/auth";
|
|
|
|
|
|
+import { loginApi, logoutApi } from "@/api/auth";
|
|
import { resetRouter } from "@/router";
|
|
import { resetRouter } from "@/router";
|
|
import { store } from "@/store";
|
|
import { store } from "@/store";
|
|
-
|
|
|
|
-import { LoginData, UserInfo } from "@/api/auth/types";
|
|
|
|
-
|
|
|
|
import { useStorage } from "@vueuse/core";
|
|
import { useStorage } from "@vueuse/core";
|
|
|
|
+import { LoginData, LoginResult } from "@/api/auth/types";
|
|
|
|
|
|
export const useUserStore = defineStore("user", () => {
|
|
export const useUserStore = defineStore("user", () => {
|
|
// state
|
|
// state
|
|
- const userId = ref();
|
|
|
|
const token = useStorage("accessToken", "");
|
|
const token = useStorage("accessToken", "");
|
|
|
|
+ const userInfo = useStorage("userInfo", "");
|
|
|
|
+ const schoolId = useStorage("schoolId", 0);
|
|
|
|
+ const routeStatus = ref(false);
|
|
const nickname = ref("");
|
|
const nickname = ref("");
|
|
- const avatar = ref("");
|
|
|
|
- const roles = ref<Array<string>>([]); // 用户角色编码集合 → 判断路由权限
|
|
|
|
|
|
+ const phone = ref("");
|
|
|
|
+ const role = ref(""); // 用户角色 → 判断路由权限
|
|
const perms = ref<Array<string>>([]); // 用户权限编码集合 → 判断按钮权限
|
|
const perms = ref<Array<string>>([]); // 用户权限编码集合 → 判断按钮权限
|
|
- const schoolId = ref(0);
|
|
|
|
- /**
|
|
|
|
- * 登录调用
|
|
|
|
- *
|
|
|
|
- * @param {LoginData}
|
|
|
|
- * @returns
|
|
|
|
- */
|
|
|
|
|
|
+
|
|
|
|
+ // 登录调用
|
|
function login(loginData: LoginData) {
|
|
function login(loginData: LoginData) {
|
|
return new Promise<void>((resolve, reject) => {
|
|
return new Promise<void>((resolve, reject) => {
|
|
loginApi(loginData)
|
|
loginApi(loginData)
|
|
- .then((response) => {
|
|
|
|
- const { tokenType, accessToken } = response.data;
|
|
|
|
- token.value = tokenType + " " + accessToken; // Bearer eyJhbGciOiJIUzI1NiJ9.xxx.xxx
|
|
|
|
|
|
+ .then(({ data }) => {
|
|
|
|
+ userInfo.value = JSON.stringify(data);
|
|
|
|
+ setUserData(data);
|
|
resolve();
|
|
resolve();
|
|
})
|
|
})
|
|
.catch((error) => {
|
|
.catch((error) => {
|
|
|
|
+ console.log(error);
|
|
reject(error);
|
|
reject(error);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
- // 获取信息(用户昵称、头像、角色集合、权限集合)
|
|
|
|
|
|
+ // 动态路由调用
|
|
function getInfo() {
|
|
function getInfo() {
|
|
- return new Promise<UserInfo>((resolve, reject) => {
|
|
|
|
- getUserInfo()
|
|
|
|
- .then(({ data }) => {
|
|
|
|
- if (!data) {
|
|
|
|
- return reject("Verification failed, please Login again.");
|
|
|
|
- }
|
|
|
|
- if (!data.roles || data.roles.length <= 0) {
|
|
|
|
- reject("getUserInfo: roles must be a non-null array!");
|
|
|
|
- }
|
|
|
|
- userId.value = data.userId;
|
|
|
|
- nickname.value = data.nickname;
|
|
|
|
- avatar.value = data.avatar;
|
|
|
|
- roles.value = data.roles;
|
|
|
|
- perms.value = data.perms;
|
|
|
|
- resolve(data);
|
|
|
|
- })
|
|
|
|
- .catch((error) => {
|
|
|
|
- reject(error);
|
|
|
|
- });
|
|
|
|
|
|
+ return new Promise<string>((resolve, reject) => {
|
|
|
|
+ const userInfoStr = localStorage.getItem("userInfo");
|
|
|
|
+ if (null != userInfoStr) {
|
|
|
|
+ const userInfo = JSON.parse(userInfoStr);
|
|
|
|
+ const role = setUserData(userInfo);
|
|
|
|
+ resolve(role);
|
|
|
|
+ } else {
|
|
|
|
+ reject("本地数据丢失,请重新登录!");
|
|
|
|
+ }
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // 设置用户信息
|
|
|
|
+ function setUserData(data: LoginResult) {
|
|
|
|
+ token.value = data.token;
|
|
|
|
+ nickname.value = data.name;
|
|
|
|
+ phone.value = data.phone;
|
|
|
|
+ // todo: 接口写好后需要修改
|
|
|
|
+ if (data.role) {
|
|
|
|
+ role.value = data.role;
|
|
|
|
+ } else {
|
|
|
|
+ role.value = "SCHOOL";
|
|
|
|
+ }
|
|
|
|
+ perms.value = data.perms;
|
|
|
|
+ return role.value;
|
|
|
|
+ }
|
|
|
|
+
|
|
// 注销
|
|
// 注销
|
|
function logout() {
|
|
function logout() {
|
|
return new Promise<void>((resolve, reject) => {
|
|
return new Promise<void>((resolve, reject) => {
|
|
@@ -80,33 +80,37 @@ export const useUserStore = defineStore("user", () => {
|
|
// 重置
|
|
// 重置
|
|
function resetToken() {
|
|
function resetToken() {
|
|
token.value = "";
|
|
token.value = "";
|
|
|
|
+ userInfo.value = "";
|
|
nickname.value = "";
|
|
nickname.value = "";
|
|
- avatar.value = "";
|
|
|
|
- roles.value = [];
|
|
|
|
|
|
+ phone.value = "";
|
|
|
|
+ role.value = "";
|
|
perms.value = [];
|
|
perms.value = [];
|
|
}
|
|
}
|
|
|
|
+
|
|
// 切换学校
|
|
// 切换学校
|
|
- function changeSchool(id: number){
|
|
|
|
- schoolId.value = id;
|
|
|
|
|
|
+ function changeSchool(id: number) {
|
|
|
|
+ schoolId.value = id;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 路由加载后设置
|
|
|
|
+ function setRouteStatus(status: boolean) {
|
|
|
|
+ routeStatus.value = status;
|
|
}
|
|
}
|
|
|
|
|
|
return {
|
|
return {
|
|
token,
|
|
token,
|
|
|
|
+ routeStatus,
|
|
|
|
+ schoolId,
|
|
nickname,
|
|
nickname,
|
|
- avatar,
|
|
|
|
- roles,
|
|
|
|
|
|
+ phone,
|
|
|
|
+ role,
|
|
perms,
|
|
perms,
|
|
login,
|
|
login,
|
|
- getInfo,
|
|
|
|
logout,
|
|
logout,
|
|
|
|
+ getInfo,
|
|
resetToken,
|
|
resetToken,
|
|
|
|
+ setRouteStatus,
|
|
changeSchool,
|
|
changeSchool,
|
|
- /**
|
|
|
|
- * 当前登录用户ID
|
|
|
|
- */
|
|
|
|
- userId,
|
|
|
|
- schoolId,
|
|
|
|
-
|
|
|
|
};
|
|
};
|
|
});
|
|
});
|
|
|
|
|