store-mixin.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import { createNamespacedHelpers } from 'vuex'
  2. import cloneDeep from 'lodash.clonedeep'
  3. import store from '@/common/store'
  4. import qs from 'qs'
  5. import { state } from './store-common'
  6. const { mapState } = createNamespacedHelpers('sd/common')
  7. function getRunAs() {
  8. const query = qs.parse(window.location?.search?.replace('?', ''))
  9. return query?.srcTrustId?.toString() || 'default'
  10. }
  11. const userInfo = (state) => {
  12. return state.userInfo[getRunAs()]
  13. }
  14. const userPerms = (state) => state.userPerms[getRunAs()]
  15. const storeMixin = {
  16. computed: {
  17. // store-common下的值,除了userInfo和userPerms都自动映射
  18. ...mapState(Object.keys(state).filter((key) => key !== 'userInfo' && key !== 'userPerms')),
  19. // 手工映射userInfo和userPerms
  20. ...mapState({
  21. userInfo,
  22. userPerms,
  23. }),
  24. },
  25. }
  26. function getStoreCommon() {
  27. // @ts-ignore
  28. return store.state.sd.common
  29. }
  30. /**
  31. * 从Vuex获取用户信息
  32. */
  33. export function getUserInfo() {
  34. return cloneDeep(userInfo(getStoreCommon()))
  35. }
  36. /**
  37. * 从Vuex获取用户权限
  38. */
  39. export function getUserPerms() {
  40. return cloneDeep(userPerms(getStoreCommon()))
  41. }
  42. /**
  43. * 用户信息写入到Vuex
  44. */
  45. export function setUserInfo(info, runAs = getRunAs()) {
  46. store.commit('sd/common/setUserInfo', { [runAs]: info })
  47. }
  48. /**
  49. * 用户权限写入到Vuex
  50. */
  51. export function setUserPerms(perms, runAs = getRunAs()) {
  52. store.commit('sd/common/setUserPerms', { [runAs]: perms })
  53. }
  54. export default storeMixin