user.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  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>Object.create({
  17. arearole: [],
  18. exchangeRateConfigs: [],
  19. externalExchanges: [],
  20. goodsgroups: [],
  21. loginAccount: {},
  22. markets: [],
  23. systemParams: [],
  24. userAccount: {},
  25. userInfo: {},
  26. username: '',
  27. }),
  28. })
  29. // 用户信息
  30. const userInfo = computed(() => state.userData.userInfo)
  31. // 用户信息
  32. const userAccount = computed(() => state.userData.userAccount)
  33. // 登录机构名称
  34. const accountName = computed(() => {
  35. const { userAccount } = state.userData
  36. return userAccount?.accountname
  37. })
  38. // 客户名称
  39. const customerName = computed(() => {
  40. const { userInfo } = state.userData
  41. return userInfo?.customername
  42. })
  43. // 账户类型
  44. const userType = computed(() => {
  45. const { userAccount } = state.userData
  46. return userAccount?.usertype
  47. })
  48. // 用户头像
  49. const userAvatar = computed(() => {
  50. const file = userInfo.value?.headurl
  51. return file ? getFileUrl(file) : ''
  52. })
  53. // 是否已实名认证
  54. const hasAuth = computed(() => {
  55. const { userAccount } = state.userData
  56. return userAccount?.hasauth === 1
  57. })
  58. // 所属会员ID
  59. const memberUserId = computed(() => {
  60. const { userAccount } = state.userData
  61. return userAccount?.memberuserid ?? 0
  62. })
  63. // 获取用户数据
  64. const getUserData = async () => {
  65. try {
  66. state.loading = true
  67. const res = await queryLoginData({
  68. data: {
  69. loginID: loginStore.loginId
  70. }
  71. })
  72. state.userData = res.data
  73. } finally {
  74. state.loading = false
  75. }
  76. }
  77. // 获取市场ID
  78. const getMarketId = (tradeMode: keyof typeof ETradeMode) => {
  79. const { marketid } = state.userData.markets.find(obj => obj.trademode === ETradeMode[tradeMode]) ?? {}
  80. return marketid ?? 0
  81. }
  82. // 是否有某个市场权限
  83. const hasMarket = (tradeMode: keyof typeof ETradeMode) => {
  84. return state.userData.markets.some((e) => e.trademode === ETradeMode[tradeMode])
  85. }
  86. // 获取用户数据
  87. const getUserDataInfo = <K extends keyof Model.LoginQueryRsp>(key: K) => {
  88. return state.userData[key]!
  89. }
  90. // 获取对应系统参数的对应值
  91. const getSystemParamValue = (paramcode: string) => {
  92. const { systemParams } = state.userData
  93. return systemParams.find(obj => {
  94. return obj.paramcode === paramcode
  95. })?.paramvalue
  96. }
  97. // 接收账户变更通知
  98. const userChangeNtf = eventBus.$on('UserChangeNtf', () => getUserData())
  99. return {
  100. ...toRefs(state),
  101. userInfo,
  102. userAccount,
  103. accountName,
  104. customerName,
  105. userType,
  106. userAvatar,
  107. hasAuth,
  108. memberUserId,
  109. getUserData,
  110. getUserDataInfo,
  111. getSystemParamValue,
  112. userChangeNtf,
  113. getMarketId,
  114. hasMarket
  115. }
  116. })