import { reactive, computed, toRefs } from 'vue' import { getFileUrl } from '@/filters' import { queryLoginData } from '@/services/api/account' import { useLoginStore } from './login' import { defineStore } from '../store' import eventBus from '@/services/bus' import { ETradeMode } from '@/constants/client' /** * 用户存储对象 * @returns */ export const useUserStore = defineStore(() => { const loginStore = useLoginStore() const state = reactive({ loading: false, userData: { arearole: [], externalExchanges: [], goodsgroups: [], markets: [], systemParams: [] }, }) // 用户信息 const userInfo = computed(() => state.userData.userInfo) // 登录机构名称 const accountName = computed(() => { const { userAccount } = state.userData return userAccount?.accountname }) // 账户类型 const userType = computed(() => { const { userAccount } = state.userData return userAccount?.usertype }) // 用户头像 const userAvatar = computed(() => { const file = userInfo.value?.headurl return file ? getFileUrl(file) : '' }) // 是否已实名认证 const hasAuth = computed(() => { const { userAccount } = state.userData return userAccount?.hasauth === 1 }) // 获取用户数据 const getUserData = async () => { try { state.loading = true const res = await queryLoginData({ data: { loginID: loginStore.loginId } }) state.userData = res.data } finally { state.loading = false } } // 获取市场ID const getMarketId = (tradeMode: keyof typeof ETradeMode) => { const { marketid } = state.userData.markets.find(obj => obj.trademode === ETradeMode[tradeMode]) ?? {} return marketid ?? 0 } // 获取用户数据 const getUserDataInfo = (key: K) => { return state.userData[key]! } // 获取对应系统参数的对应值 const getSystemParamValue = (paramcode: string) => { const { systemParams } = state.userData return systemParams.find(obj => { return obj.paramcode === paramcode })?.paramvalue } // 接收账户变更通知 const userChangeNtf = eventBus.$on('UserChangeNtf', () => getUserData()) return { ...toRefs(state), userInfo, accountName, userType, userAvatar, hasAuth, getUserData, getUserDataInfo, getSystemParamValue, userChangeNtf, getMarketId } })