From fa482274a588e97784c10099e45d030664aa4ceb Mon Sep 17 00:00:00 2001
From: zhangxiao <898441624@qq.com>
Date: 星期四, 26 九月 2024 10:42:02 +0800
Subject: [PATCH] 登录界面添加新用户注册功能

---
 src/store/modules/user/index.ts |  130 +++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 130 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..22143e5
--- /dev/null
+++ b/src/store/modules/user/index.ts
@@ -0,0 +1,130 @@
+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.loginName,
+          email: res.data.email,
+          role: res.data.roles[0].roleKey,
+        };
+        this.name=res.data.userName
+     
+        if(res.data?.roles.length>0)
+          //閬嶅巻roles
+          for (const r of res.data.roles) {
+            if (!(this.resources)) {
+              this.resources = [];
+            }
+            this.resources = this.resources.concat(r.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