1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- import { VuexModule, Module, Action, Mutation, getModule } from 'vuex-module-decorators'
- import { login, logout, getUserInfo } from '@/api/users'
- import { getToken, setToken, removeToken } from '@/utils/cookies'
- import store from '@/store'
- export interface IUserState {
- token: string
- name: string
- avatar: string
- introduction: string
- roles: string[]
- }
- @Module({ dynamic: true, store, name: 'user' })
- class User extends VuexModule implements IUserState {
- public token = getToken() || ''
- public name = ''
- public avatar = ''
- public introduction = ''
- public roles: string[] = []
- @Mutation
- private SET_TOKEN(token: string) {
- this.token = token
- }
- @Mutation
- private SET_NAME(name: string) {
- this.name = name
- }
- @Mutation
- private SET_AVATAR(avatar: string) {
- this.avatar = avatar
- }
- @Mutation
- private SET_INTRODUCTION(introduction: string) {
- this.introduction = introduction
- }
- @Mutation
- private SET_ROLES(roles: string[]) {
- this.roles = roles
- }
- @Action
- public async Login(userInfo: { username: string, password: string }) {
- let { username, password } = userInfo
- username = username.trim()
- const { data } = await login({ username, password })
- setToken(data.accessToken)
- this.SET_TOKEN(data.accessToken)
- }
- @Action
- public ResetToken() {
- removeToken()
- this.SET_TOKEN('')
- this.SET_ROLES([])
- }
- @Action
- public async GetUserInfo() {
- if (this.token === '') {
- throw Error('GetUserInfo: token is undefined!')
- }
- const { data } = await getUserInfo({ /* Your params here */ })
- if (!data) {
- throw Error('Verification failed, please Login again.')
- }
- const { roles, name, avatar, introduction } = data.user
- // roles must be a non-empty array
- if (!roles || roles.length <= 0) {
- throw Error('GetUserInfo: roles must be a non-null array!')
- }
- this.SET_ROLES(roles)
- this.SET_NAME(name)
- this.SET_AVATAR(avatar)
- this.SET_INTRODUCTION(introduction)
- }
- @Action
- public async LogOut() {
- if (this.token === '') {
- throw Error('LogOut: token is undefined!')
- }
- await logout()
- removeToken()
- this.SET_TOKEN('')
- this.SET_ROLES([])
- }
- }
- export const UserModule = getModule(User)
|