Files
douyin/app/src/store/account.ts
T

80 lines
2.2 KiB
TypeScript

import { defineStore } from 'pinia';
import http from './http';
import { Response } from '@/types';
import { useMenuStore } from './menu';
import { useAuthStore } from '@/plugins';
export interface Profile {
account: Account;
permissions: string[];
role: string;
}
export interface Account {
username: string;
avatar: string;
gender: number;
}
export type TokenResult = {
token: string;
expires: number;
code: number,
erro: string,
};
export const useAccountStore = defineStore('account', {
state() {
return {
account: {} as Account,
permissions: [] as string[],
role: '',
logged: true,
logged2: false
};
},
actions: {
async login(username: string, password: string) {
return http
.request<TokenResult, Response<TokenResult>>('api/auth/login', 'post_json', { username, password })
.then(async (response) => {
if (response.code === 200 && response.data.code === 0) {
this.logged = true;
this.logged2 = true
// console.log(response)
http.setAuthorization(`Bearer ${response.data.token}`, response.data.expires);
// await useMenuStore().getMenuList();
return response.data;
} else {
this.logged2 = false
return Promise.reject(response);
}
});
},
async logout() {
return new Promise<boolean>((resolve) => {
localStorage.removeItem('stepin-menu');
http.removeAuthorization();
// this.logged = false;
resolve(true);
});
},
async profile() {
return http.request<Account, Response<Profile>>('/account', 'get').then((response) => {
if (response.code === 0) {
const { setAuthorities } = useAuthStore();
const { account, permissions, role } = response.data;
this.account = account;
this.permissions = permissions;
this.role = role;
setAuthorities(permissions);
return response.data;
} else {
return Promise.reject(response);
}
});
},
setLogged(logged: boolean) {
this.logged = logged;
},
},
});