From 31a48e3a3c7d4e37a05ef43fa4b65c84989cc353 Mon Sep 17 00:00:00 2001
From: yinbangzhong <zhongbangyin@126.com>
Date: 星期四, 29 八月 2024 09:26:25 +0800
Subject: [PATCH] select role
---
src/store/modules/user/index.ts | 123 +++++++++++++++++++++++++++++++++++++++++
1 files changed, 123 insertions(+), 0 deletions(-)
diff --git a/src/store/modules/user/index.ts b/src/store/modules/user/index.ts
new file mode 100644
index 0000000..56d90b8
--- /dev/null
+++ b/src/store/modules/user/index.ts
@@ -0,0 +1,123 @@
+import { defineStore } from 'pinia';
+import {
+ login as userLogin,
+ logout as userLogout,
+ getUserInfo,
+ LoginData,
+} from '@/api/user';
+import { setToken, clearToken, setUserInfo, setUserResources, clearUserResources } from "@/utils/auth";
+import { removeRouteListener } from '@/utils/route-listener';
+import { UserState } from './types';
+import useAppStore from '../app';
+import router from "@/router";
+
+
+const useUserStore = defineStore('user', {
+ state: (): UserState => ({
+ name: undefined,
+ avatar: undefined,
+ job: undefined,
+ organization: undefined,
+ location: undefined,
+ email: undefined,
+ introduction: undefined,
+ personalWebsite: undefined,
+ jobName: undefined,
+ organizationName: undefined,
+ locationName: undefined,
+ phone: undefined,
+ registrationDate: undefined,
+ accountId: undefined,
+ certification: undefined,
+ role: '',
+ resources:undefined,
+ hrefUrl:undefined
+ }),
+
+ getters: {
+ userInfo(state: UserState): UserState {
+ return { ...state };
+ },
+ },
+
+ actions: {
+ switchRoles() {
+ return new Promise((resolve) => {
+ this.role = this.role === 'user' ? 'admin' : 'user';
+ resolve(this.role);
+ });
+ },
+ // Set user's information
+ setInfo(partial: Partial<UserState>) {
+ this.$patch(partial);
+ },
+
+ // Reset user's information
+ resetInfo() {
+ clearUserResources()
+ this.$reset();
+ },
+
+ // Get user's information
+ async info() {
+ const res = await getUserInfo();
+
+ this.setInfo(res.data);
+ },
+
+ // Login
+ async login(loginForm: LoginData):string {
+ try {
+ const res = await userLogin(loginForm);
+
+ setToken(res.data.access_token);
+
+ const userInfo = {
+ avatar: res.data.avatar,
+ name: res.data.userName,
+ email: res.data.email,
+ role: res.data.roles[0].roleKey,
+ };
+ this.name=res.data.userName
+
+ if(res.data?.roles.length>0)
+ this.resources=res.data.roles[0].resources;
+ setUserInfo(JSON.stringify(userInfo));
+ setUserResources(JSON.stringify(this.resources))
+ for (const r of this.resources) {
+ if (r.menuType == 0) {
+ return r.component
+ }
+ }
+ } catch (err) {
+ clearToken();
+ throw err;
+ }
+ },
+ logoutCallBack() {
+ const appStore = useAppStore();
+ this.resetInfo();
+ clearToken();
+ removeRouteListener();
+ appStore.clearServerMenu();
+ },
+ // Logout
+ async logout() {
+ try {
+ await userLogout();
+ } finally {
+ router.push({
+ name: "login",
+ });
+ this.logoutCallBack();
+ }
+ },
+
+
+ getHreFurl(url: string) {
+ this.hrefUrl=url
+ },
+ },
+});
+
+export default useUserStore;
--
Gitblit v1.8.0