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