login.ts 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import { toRefs, shallowReadonly, ShallowRef } from 'vue'
  2. import { login, queryLoginId } from '@/services/api/account'
  3. import { VueStore } from '../base'
  4. import cryptojs from 'crypto-js'
  5. import WebStorage from '@/utils/storage/base'
  6. interface StoreState {
  7. loading: boolean;
  8. loginInfo: ShallowRef<Proto.LoginRsp>;
  9. }
  10. function getInitData(): Proto.LoginRsp {
  11. return {
  12. AccountIDs: [],
  13. LoginCode: '',
  14. LoginID: 0,
  15. LoginUserType: 0,
  16. AccountStatus: 0,
  17. UserID: 0,
  18. ClientID: 0,
  19. MemberUserID: 0,
  20. Token: '',
  21. }
  22. }
  23. /**
  24. * 登录存储类
  25. */
  26. const store = new (class extends VueStore<StoreState> {
  27. constructor() {
  28. const storage = new WebStorage(sessionStorage, 'loginInfo', getInitData())
  29. const state: StoreState = {
  30. loading: false,
  31. loginInfo: storage.getRef(),
  32. }
  33. super(state)
  34. }
  35. actions = {
  36. /** 用户登录 */
  37. userLogin: (param: Proto.LoginReq) => {
  38. this.state.loading = true
  39. return new Promise<Proto.LoginRsp>((resolve, reject) => {
  40. queryLoginId({
  41. data: {
  42. username: param.LoginID
  43. },
  44. success: (res) => {
  45. login({
  46. data: {
  47. ...param,
  48. LoginID: res.data,
  49. LoginPWD: cryptojs.SHA256(res.data + param.LoginPWD).toString(),
  50. },
  51. success: (res) => {
  52. this.state.loginInfo = res
  53. resolve(res)
  54. },
  55. fail: (err) => {
  56. reject(err)
  57. },
  58. complete: () => {
  59. this.state.loading = false
  60. }
  61. })
  62. },
  63. fail: (err) => {
  64. this.state.loading = false
  65. reject(err)
  66. }
  67. })
  68. })
  69. },
  70. /** 获取用户登录信息 */
  71. getLoginInfo: <K extends keyof Proto.LoginRsp>(key: K) => {
  72. return this.state.loginInfo[key]
  73. },
  74. /** 获取登录令牌 */
  75. getToken: () => {
  76. return this.state.loginInfo.Token
  77. },
  78. /** 获取用户ID */
  79. getUserId: () => {
  80. return this.state.loginInfo.UserID
  81. },
  82. /** 获取登录ID */
  83. getLoginId: () => {
  84. return this.state.loginInfo.LoginID
  85. },
  86. /** 获取首个账户ID */
  87. getFirstAccountId: () => {
  88. const accounts = this.state.loginInfo.AccountIDs
  89. return accounts[0] ?? 0
  90. },
  91. /** 重置数据 */
  92. reset: () => {
  93. this.state.loginInfo = getInitData()
  94. }
  95. }
  96. })
  97. export function useLoginStore() {
  98. return shallowReadonly({
  99. ...toRefs(store.state),
  100. ...store.actions,
  101. ...store.methods,
  102. })
  103. }