user.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import router from '@/router'
  2. import { ElMessageBox, } from 'element-plus'
  3. import { login, logout, getInfo } from '@/api/login'
  4. import { getToken, setToken, removeToken } from '@/utils/auth'
  5. import { isHttp, isEmpty } from "@/utils/validate"
  6. import defAva from '@/assets/images/profile.jpg'
  7. const useUserStore = defineStore(
  8. 'user',
  9. {
  10. state: () => ({
  11. token: getToken(),
  12. id: '',
  13. name: '',
  14. nickName: '',
  15. avatar: '',
  16. roles: [],
  17. permissions: []
  18. }),
  19. actions: {
  20. // 登录
  21. login(userInfo) {
  22. const username = userInfo.username.trim()
  23. const password = userInfo.password
  24. const code = userInfo.code
  25. const uuid = userInfo.uuid
  26. return new Promise((resolve, reject) => {
  27. login(username, password, code, uuid).then(res => {
  28. if (res.isInitPassword) {
  29. // 如果是初始密码,直接返回响应
  30. resolve(res)
  31. } else {
  32. setToken(res.token)
  33. this.token = res.token
  34. resolve(res)
  35. }
  36. }).catch(error => {
  37. reject(error)
  38. })
  39. })
  40. },
  41. // 获取用户信息
  42. getInfo() {
  43. return new Promise((resolve, reject) => {
  44. getInfo().then(res => {
  45. const user = res.user
  46. let avatar = user.avatar || ""
  47. if (!isHttp(avatar)) {
  48. avatar = (isEmpty(avatar)) ? defAva : import.meta.env.VITE_APP_BASE_API + avatar
  49. }
  50. if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组
  51. this.roles = res.roles
  52. this.permissions = res.permissions
  53. } else {
  54. this.roles = ['ROLE_DEFAULT']
  55. }
  56. this.id = user.userId
  57. this.name = user.userName
  58. this.nickName = user.nickName
  59. this.avatar = avatar
  60. /* 初始密码提示 */
  61. if(res.isDefaultModifyPwd) {
  62. ElMessageBox.confirm('您的密码还是初始密码,请修改密码!', '安全提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => {
  63. router.push({ name: 'Profile', params: { activeTab: 'resetPwd' } })
  64. }).catch(() => {})
  65. }
  66. /* 过期密码提示 */
  67. if(!res.isDefaultModifyPwd && res.isPasswordExpired) {
  68. ElMessageBox.confirm('您的密码已过期,请尽快修改密码!', '安全提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => {
  69. router.push({ name: 'Profile', params: { activeTab: 'resetPwd' } })
  70. }).catch(() => {})
  71. }
  72. resolve(res)
  73. }).catch(error => {
  74. reject(error)
  75. })
  76. })
  77. },
  78. // 退出系统
  79. logOut() {
  80. return new Promise((resolve, reject) => {
  81. logout(this.token).then(() => {
  82. this.token = ''
  83. this.roles = []
  84. this.permissions = []
  85. removeToken()
  86. resolve()
  87. }).catch(error => {
  88. reject(error)
  89. })
  90. })
  91. }
  92. }
  93. })
  94. export default useUserStore