story


/* eslint-disable */
/**
 *
 * @param {vuex实例} store
 * @param {qiankun下发的props} props
 */
function registerGlobalModule(storeprops = {}) {
  if (!store || !store.hasModule) {
    return
  }

  // 获取初始化的state
  const initState = (props.getGlobalState && props.getGlobalState()) || {
    client: '',
    serverHost: '',
    businessCode: '',
    commonMicroApps: [],
    userMicroApps: [],
    userAuthorize:[],
    menu: [],
    openPages: [],
    title: 'YESWEB',
    user: {},
  }
  // 将父应用的数据存储到子应用中,命名空间固定为global
  if (!store.hasModule('global')) {
    const globalModule = {
      namespaced: true,
      state: initState,
      actions: {
        // 子应用改变state并通知父应用
        setGlobalState({ commit }, payload) {
          commit('setGlobalState'payload)
          commit('emitGlobalState')
        },
        // 初始化,只用于mount时同步父应用的数据
        initGlobalState({ commit }, payload) {
          commit('setGlobalState'payload)
        },
        updateSecretKey({ commit }, payload) {
          commit('updateSecretKey'payload)
          commit('emitGlobalState')
        },
        updateUser({ commit }, data) {
          commit('updateUser'data)
          commit('emitGlobalState')
        },
        updateBusinessCode({ commit }, businessCode) {
          commit('updateBusinessCode'businessCode)
          commit('emitGlobalState')
        },
        updateMenu({ commit }, data) {
          commit('updateMenu'data)
          commit('emitGlobalState')
        },
        updateCommonMicroApps({ commit }, data) {
          commit('updateCommonMicroApps'data)
          commit('emitGlobalState')
        },
        updateUserMicroApps({ commit }, data) {
          commit('updateUserMicroApps'data)
          commit('emitGlobalState')
        },
        updateUserAuthorize({ commit }, data) {
          commit('updateUserAuthorize'data)
          commit('emitGlobalState')
        },
        addOpenPage({ commit }, data) {
          commit('addOpenPage'data)
          commit('emitGlobalState')
        },
        removePage({ commit }, name) {
          commit('removePage'name)
          commit('emitGlobalState')
        },
        upateComponentName({ commit }, data) {
          commit('upateComponentName'data)
          commit('emitGlobalState')
        }
      },
      mutations: {
        updateTitle(statesubtitle) {
          window.document.title = subtitle + '-' + state.title
        },
        setGlobalState(statepayload) {
          // eslint-disable-next-line
          state = Object.assign(statepayload)
        },
        // 通知父应用
        emitGlobalState(state) {
          if (props.setGlobalState) {
            props.setGlobalState(state)
          }
        },
        updateUser(statedata) {
          state.user = data
        },
        updateSecretKey(stateobj) {
          state.user.secretID = obj.secretID
          state.user.secretKey = obj.secretKey
        },
        updateBusinessCode(statebusinessCode) {
          state.businessCode = businessCode
        },
        updateMenu(statedata) {
          state.menu = data
        },
        updateCommonMicroApps(statedata) {
          state.commonMicroApps = data
        },
        updateUserMicroApps(statedata) {
          state.commonMicroApps = []
          state.userMicroApps = data
        },
        updateUserAuthorize(statedata) {
          state.userAuthorize = data
        },
        
        upateComponentName(state,data){
          var obj = state.openPages.find(item => item.appName == data.appName && item.routerName == data.routerName)
          obj.componentName = data.componentName
        },

        addOpenPage(statepage) {
          
          state.openPages.push(page)
        },
        removePage(stateid) {
          var index = state.openPages.findIndex((item=> item.id == id)
          state.openPages.splice(index1)
        },
      },
      getters: {
        microApps(state) {
          var allApps = state.commonMicroApps.concat(state.userMicroApps)
          return allApps.map((item=> {
            return {
              ...item,
              props: {
                routerBase: item.activeRule// 下发基础路由
                getGlobalState: props.getGlobalState// 下发getGlobalState方法
              },
            }
          })
        },
      },
    }
    store.registerModule('global'globalModule)
  } else {
    // 每次mount时,都同步一次父应用数据
    store.dispatch('global/initGlobalState'initState)
  }
}

export default registerGlobalModule
版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
YES开发框架
评论列表

发表评论

评论内容
昵称:
关联文章