user.ts 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import { reactive, computed, toRefs } from 'vue'
  2. import { getFileUrl } from '@/filters'
  3. import { queryLoginData } from '@/services/api/account'
  4. import { useLoginStore } from './login'
  5. import { defineStore } from '../store'
  6. import eventBus from '@/services/bus'
  7. import { ETradeMode } from '@/constants/client'
  8. /**
  9. * 用户存储对象
  10. * @returns
  11. */
  12. export const useUserStore = defineStore(() => {
  13. const loginStore = useLoginStore()
  14. const state = reactive({
  15. loading: false,
  16. userData: <Model.LoginQueryRsp>{
  17. arearole: [],
  18. externalExchanges: [],
  19. goodsgroups: [],
  20. markets: [],
  21. systemParams: []
  22. },
  23. })
  24. // 用户信息
  25. const userInfo = computed(() => state.userData.userInfo)
  26. // 登录机构名称
  27. const accountName = computed(() => {
  28. const { userAccount } = state.userData
  29. return userAccount?.accountname
  30. })
  31. // 账户类型
  32. const userType = computed(() => {
  33. const { userAccount } = state.userData
  34. return userAccount?.usertype
  35. })
  36. // 用户头像
  37. const userAvatar = computed(() => {
  38. const file = userInfo.value?.headurl
  39. return file ? getFileUrl(file) : ''
  40. })
  41. // 是否已实名认证
  42. const hasAuth = computed(() => {
  43. const { userAccount } = state.userData
  44. return userAccount?.hasauth === 1
  45. })
  46. // 获取用户数据
  47. const getUserData = async () => {
  48. try {
  49. state.loading = true
  50. const res = await queryLoginData({
  51. data: {
  52. loginID: loginStore.loginId
  53. }
  54. })
  55. state.userData = res.data
  56. } finally {
  57. state.loading = false
  58. }
  59. }
  60. // 获取市场ID
  61. const getMarketId = (tradeMode: keyof typeof ETradeMode) => {
  62. const { marketid } = state.userData.markets.find(obj => obj.trademode === ETradeMode[tradeMode]) ?? {}
  63. return marketid ?? 0
  64. }
  65. // 获取用户数据
  66. const getUserDataInfo = <K extends keyof Model.LoginQueryRsp>(key: K) => {
  67. return state.userData[key]!
  68. }
  69. // 获取对应系统参数的对应值
  70. const getSystemParamValue = (paramcode: string) => {
  71. const { systemParams } = state.userData
  72. return systemParams.find(obj => {
  73. return obj.paramcode === paramcode
  74. })?.paramvalue
  75. }
  76. // 接收账户变更通知
  77. const userChangeNtf = eventBus.$on('UserChangeNtf', () => getUserData())
  78. return {
  79. ...toRefs(state),
  80. userInfo,
  81. accountName,
  82. userType,
  83. userAvatar,
  84. hasAuth,
  85. getUserData,
  86. getUserDataInfo,
  87. getSystemParamValue,
  88. userChangeNtf,
  89. getMarketId
  90. }
  91. })