import { defineStore } from 'pinia' import pinia from '@/store' import { InitAppUserInfoOutput } from '@/api/swagger' import { api } from '@/api' import { useMenuStore } from '@/store/menu' import * as Auth from '@/util/auth' const menuStore = useMenuStore(pinia) interface ILoginInfoState { token?: string info?: UserInfo } export type UserInfo = InitAppUserInfoOutput export const useUserStore = defineStore('useUserMainStore', { state(): ILoginInfoState { return { token: undefined, info: undefined, } }, actions: { logged(token: string) { if (this.info && this.info.id) { return Promise.resolve(token) } return new Promise((resolve, reject) => { if (token) { Auth.setToken(token) this.setToken(token) return api.get('/api/App/Init', { client: 1 }).then((res) => { menuStore.init({ buttons: res.data.buttons || [], menus: res.data.menus || [], }) if (res.data.userInfo) { this.setInfo(res.data.userInfo) resolve(token) } else reject() }) } else { reject() } }) }, logout() { return new Promise((resolve) => { Auth.removeToken() menuStore.clear() this.setToken('') this.info = void 0 this.token = void 0 resolve(true) }) }, init() { return api.get('/api/App/Init', { client: 1, }) }, setToken(token: string) { this.token = token }, setInfo(info: UserInfo) { this.info = info }, }, })