You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
3.2 KiB
Plaintext
145 lines
3.2 KiB
Plaintext
import { Modal } from 'ant-design-vue'
|
|
import { defineStore } from 'pinia'
|
|
import { h } from 'vue'
|
|
import HttpHandler from '@/utils/gener/HttpHandler'
|
|
import { router } from '@/router'
|
|
import { Port_Login, Port_Logout } from '@/api/user'
|
|
|
|
export interface TokenInfo {
|
|
Token: string
|
|
UserNo: string
|
|
OrgNo: string
|
|
}
|
|
|
|
export interface User {
|
|
No: string
|
|
Name: string
|
|
OrgNo: string
|
|
OrgName: string
|
|
FK_Dept: string
|
|
FK_DeptName: string
|
|
SysLang: string
|
|
CCBPMRunModel: number
|
|
IsAdmin: boolean | number
|
|
Token: string
|
|
homePath?: string
|
|
avatar?: string
|
|
}
|
|
|
|
export interface LoginParams {
|
|
username: string
|
|
password: string
|
|
OrgNo?: string //SAAS版 登录需要组织编号
|
|
verifyCode?: string
|
|
}
|
|
|
|
export const useUserStore = defineStore({
|
|
id: 'app-user',
|
|
state: (): { webUser: User } => ({
|
|
webUser: {
|
|
No: '',
|
|
Name: '',
|
|
OrgNo: '',
|
|
OrgName: '',
|
|
FK_Dept: '',
|
|
FK_DeptName: '',
|
|
SysLang: '',
|
|
CCBPMRunModel: -1,
|
|
IsAdmin: 0,
|
|
Token: '',
|
|
homePath: '/',
|
|
avatar: ''
|
|
}
|
|
}),
|
|
getters: {
|
|
getToken(): string {
|
|
return this.getWebUser.Token || ''
|
|
},
|
|
getWebUser(): User {
|
|
if(!this.webUser.No) {
|
|
try {
|
|
this.webUser = JSON.parse(localStorage.getItem('userInfo') || '{}');
|
|
} catch(e) { /* empty */ }
|
|
}
|
|
return this.webUser || ''
|
|
}
|
|
},
|
|
actions: {
|
|
setUserInfo(user: User | null) {
|
|
if (!user) {
|
|
this.webUser = {
|
|
No: '',
|
|
Name: '',
|
|
OrgNo: '',
|
|
OrgName: '',
|
|
FK_Dept: '',
|
|
FK_DeptName: '',
|
|
SysLang: '',
|
|
CCBPMRunModel: -1,
|
|
IsAdmin: 0,
|
|
Token: '',
|
|
homePath: '/',
|
|
avatar: ''
|
|
}
|
|
localStorage.removeItem('userInfo')
|
|
return
|
|
}
|
|
this.webUser = user
|
|
localStorage.setItem('userInfo', JSON.stringify(user))
|
|
},
|
|
setToken(token: string) {
|
|
this.webUser.Token = token // for null or undefined value
|
|
localStorage.setItem('Token', token)
|
|
},
|
|
async fetchUserInfo() {
|
|
const userHandler = new HttpHandler('')
|
|
return await userHandler.CustomRequest<User>({
|
|
DoType: 'WebUser_Init',
|
|
Token: this.getToken,
|
|
t: Date.now()
|
|
})
|
|
},
|
|
async login(
|
|
params: LoginParams & {
|
|
goHome?: boolean
|
|
type?: string
|
|
}
|
|
) {
|
|
const data = await Port_Login(params.username, params.OrgNo || '')
|
|
|
|
if (!data.Token) {
|
|
Modal.error({
|
|
title: () => h('span', '错误'),
|
|
content: () => h('span', '未获取到登录凭证')
|
|
})
|
|
return null
|
|
}
|
|
this.setUserInfo(data)
|
|
router.replace('/')
|
|
},
|
|
async logout() {
|
|
if (this.getToken) {
|
|
try {
|
|
await Port_Logout(this.webUser.No);
|
|
} catch {
|
|
console.log('注销Token失败')
|
|
}
|
|
}
|
|
this.setToken('')
|
|
this.setUserInfo(null)
|
|
router.push('/login')
|
|
},
|
|
confirmLoginOut() {
|
|
Modal.confirm({
|
|
title: () => h('span', '提示'),
|
|
content: () => h('span', '确定要退出登录吗?'),
|
|
cancelText: '取消',
|
|
okText: '确定',
|
|
onOk: async () => {
|
|
await this.logout()
|
|
}
|
|
})
|
|
}
|
|
}
|
|
})
|