import { defineStore } from 'pinia' import pinia from '@/store' import { useTokenStore, ls } from '@/store/token' import { HTTPClient } from '@rjgf/http-client' import { InitAppUserInfoOutput } from '@/api/swagger' import { api } from '@/api' import { useMenuStore } from '@/store/menu' import Vue from 'vue' import { GlobalActions } from '@/utils/enums' const tokenStore = useTokenStore(pinia) const menuStore = useMenuStore(pinia) interface UserState { userInfo: InitAppUserInfoOutput } export const useUserStore = defineStore('useUserStore', { state(): UserState { return { userInfo: { userId: '', userName: '', realName: '', phoneNumber: '', enterpriseName: '', sex: 1, status: 1, userType: 0, }, } }, actions: { async logged() { try { const token = tokenStore.getToken() if (this.userInfo.id) { HTTPClient.setToken(token, 'Bearer') return Promise.resolve(token) } if (token) { HTTPClient.setToken(token, 'Bearer') const res = await this.init() if (res.data.userInfo) { this.setUserInfo(res.data.userInfo) ls.set('user', res.data.userInfo) menuStore.init(res.data) Vue.prototype.$setGlobalState({ action: GlobalActions.InitMenu, menus: res.data.menus, buttons: res.data.buttons, }) } return token } else return false } catch (e) { console.log(e) } }, logout() { tokenStore.clear() this.clearUserInfo() }, setUserInfo(info: InitAppUserInfoOutput) { this.userInfo = info }, clearUserInfo() { this.userInfo = { userId: '', userName: '', realName: '', phoneNumber: '', enterpriseName: '', sex: 1, status: 1, userType: 0, } }, init() { return api.get('/api/App/Init', { client: 1, }) }, }, getters: { info: (state: UserState) => state.userInfo, }, })