133 lines
4.1 KiB
TypeScript
Raw Normal View History

2026-03-09 14:09:14 +08:00
import router from '@/router'
import { ElMessageBox } from 'element-plus'
2026-03-09 18:04:16 +08:00
import { login, logout, getInfo, loginAnonymous } from '@/api/login'
2026-03-09 14:09:14 +08:00
import { getToken, setToken, removeToken } from '@/utils/auth'
import { isHttp, isEmpty } from "@/utils/validate"
import defAva from '@/assets/images/profile.jpg'
2026-03-11 18:08:00 +08:00
interface RoleInfo {
roleName: string
[key: string]: any
}
2026-03-09 14:09:14 +08:00
interface UserState {
token: string | undefined
id: string | number
name: string
nickName: string
2026-03-11 18:08:00 +08:00
roleName: string
2026-03-09 14:09:14 +08:00
avatar: string
roles: string[]
permissions: string[]
2026-03-11 18:08:00 +08:00
sysLoginParam: Object
2026-03-09 14:09:14 +08:00
}
const useUserStore = defineStore(
'user',
{
state: (): UserState => ({
token: getToken(),
id: '',
name: '',
nickName: '',
2026-03-11 18:08:00 +08:00
roleName: '',
2026-03-09 14:09:14 +08:00
avatar: '',
roles: [],
2026-03-11 18:08:00 +08:00
permissions: [],
sysLoginParam: {}, // 登录参数
2026-03-09 14:09:14 +08:00
}),
actions: {
2026-03-09 18:04:16 +08:00
// 单点登录
loginAnonymous(data: { name: string; yljg: string }) {
return new Promise((resolve, reject) => {
loginAnonymous({
username: data.name,
yljg: data.yljg
}).then(res => {
if (res.code == 200) {
setToken(res.token)
this.token = res.token
resolve(true)
}
}).catch(error => {
reject(error)
})
})
},
2026-03-09 14:09:14 +08:00
// 登录
2026-03-11 18:08:00 +08:00
login(userInfo: { username: string; password: string; code: string; uuid: string; loginParam: Object }) {
2026-03-09 14:09:14 +08:00
const username = userInfo.username.trim()
const password = userInfo.password
const code = userInfo.code
const uuid = userInfo.uuid
2026-03-11 18:08:00 +08:00
const loginParam = userInfo.loginParam
2026-03-09 14:09:14 +08:00
return new Promise<void>((resolve, reject) => {
2026-03-11 18:08:00 +08:00
login(username, password, code, uuid, loginParam).then(res => {
2026-03-09 14:09:14 +08:00
setToken(res.token)
this.token = res.token
resolve()
}).catch(error => {
reject(error)
})
})
},
// 获取用户信息
getInfo() {
return new Promise((resolve, reject) => {
getInfo().then(res => {
const user = res.user
let avatar = user.avatar || ''
2026-03-11 18:08:00 +08:00
this.sysLoginParam = user.sysLoginParam
2026-03-09 14:09:14 +08:00
if (!isHttp(avatar)) {
avatar = (isEmpty(avatar)) ? defAva : import.meta.env.VITE_APP_BASE_API + avatar
}
2026-03-11 18:08:00 +08:00
const roles = res.user.roles as any[]
if (roles && roles.length > 0) {
this.roles = roles
2026-03-09 14:09:14 +08:00
this.permissions = res.permissions
2026-03-11 18:08:00 +08:00
this.roleName = (roles[0] as RoleInfo).roleName
2026-03-09 14:09:14 +08:00
} else {
this.roles = ['ROLE_DEFAULT']
}
this.id = user.userId || ''
this.name = user.userName || ''
this.nickName = user.nickName || ''
this.avatar = avatar
/* 初始密码提示 */
2026-03-09 18:04:16 +08:00
if (res.isDefaultModifyPwd) {
ElMessageBox.confirm('您的密码还是初始密码,请修改密码!', '安全提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => {
2026-03-09 14:09:14 +08:00
router.push({ name: 'Profile', params: { activeTab: 'resetPwd' } })
2026-03-09 18:04:16 +08:00
}).catch(() => { })
2026-03-09 14:09:14 +08:00
}
/* 过期密码提示 */
2026-03-09 18:04:16 +08:00
if (!res.isDefaultModifyPwd && res.isPasswordExpired) {
ElMessageBox.confirm('您的密码已过期,请尽快修改密码!', '安全提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => {
2026-03-09 14:09:14 +08:00
router.push({ name: 'Profile', params: { activeTab: 'resetPwd' } })
2026-03-09 18:04:16 +08:00
}).catch(() => { })
2026-03-09 14:09:14 +08:00
}
resolve(res)
}).catch(error => {
reject(error)
})
})
},
// 退出系统
logOut() {
return new Promise<void>((resolve, reject) => {
logout().then(() => {
this.token = ''
this.roles = []
this.permissions = []
removeToken()
resolve()
}).catch((error: any) => {
reject(error)
})
})
}
}
})
export default useUserStore