story
/* eslint-disable */
/**
*
* @param {vuex实例} store
* @param {qiankun下发的props} props
*/
function registerGlobalModule(store, props = {}) {
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(state, subtitle) {
window.document.title = subtitle + '-' + state.title
},
setGlobalState(state, payload) {
// eslint-disable-next-line
state = Object.assign(state, payload)
},
// 通知父应用
emitGlobalState(state) {
if (props.setGlobalState) {
props.setGlobalState(state)
}
},
updateUser(state, data) {
state.user = data
},
updateSecretKey(state, obj) {
state.user.secretID = obj.secretID
state.user.secretKey = obj.secretKey
},
updateBusinessCode(state, businessCode) {
state.businessCode = businessCode
},
updateMenu(state, data) {
state.menu = data
},
updateCommonMicroApps(state, data) {
state.commonMicroApps = data
},
updateUserMicroApps(state, data) {
state.commonMicroApps = []
state.userMicroApps = data
},
updateUserAuthorize(state, data) {
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(state, page) {
state.openPages.push(page)
},
removePage(state, id) {
var index = state.openPages.findIndex((item) => item.id == id)
state.openPages.splice(index, 1)
},
},
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开发框架网发布内容,转载请附上原文出处连接
YESWEB YES开发框架