64 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
import Vue from 'vue';
 | 
						|
import Vuex from 'vuex';
 | 
						|
import user from './user';
 | 
						|
import userAndLogin from '../views/user/login/model';
 | 
						|
import userAndregister from '../views/user/register/model';
 | 
						|
 | 
						|
Vue.use(Vuex);
 | 
						|
 | 
						|
const createLoadingPlugin = ({ namespace: NAMESPACE = 'loading' } = {}) => {
 | 
						|
  const SHOW = '@@ANTDV_LOADING/SHOW';
 | 
						|
  const HIDE = '@@ANTDV_LOADING/HIDE';
 | 
						|
  return store => {
 | 
						|
    if (store.state[NAMESPACE]) {
 | 
						|
      throw new Error(`createLoadingPlugin: ${NAMESPACE} exited in current store`);
 | 
						|
    }
 | 
						|
    store.registerModule(NAMESPACE, {
 | 
						|
      namespaced: true,
 | 
						|
      state: {
 | 
						|
        global: false,
 | 
						|
        models: {},
 | 
						|
        effects: {},
 | 
						|
      },
 | 
						|
      mutations: {
 | 
						|
        [SHOW]: (state, { payload: { actionType } }) => {
 | 
						|
          state.global = true;
 | 
						|
          const _namespace = actionType.split('/')[0];
 | 
						|
          state.models = { ...state.models, [_namespace]: true };
 | 
						|
          state.effects = { ...state.effects, [actionType]: true };
 | 
						|
        },
 | 
						|
        [HIDE]: (state, { payload: { actionType } }) => {
 | 
						|
          state.global = false;
 | 
						|
          const _namespace = actionType.split('/')[0];
 | 
						|
          state.models = { ...state.models, [_namespace]: false };
 | 
						|
          state.effects = { ...state.effects, [actionType]: false };
 | 
						|
        },
 | 
						|
      },
 | 
						|
    });
 | 
						|
    store.subscribeAction({
 | 
						|
      before: action => {
 | 
						|
        store.commit(
 | 
						|
          { type: `${NAMESPACE}/${SHOW}`, payload: { actionType: action.type } },
 | 
						|
          { root: true },
 | 
						|
        );
 | 
						|
      },
 | 
						|
      after: action => {
 | 
						|
        store.commit(
 | 
						|
          { type: `${NAMESPACE}/${HIDE}`, payload: { actionType: action.type } },
 | 
						|
          { root: true },
 | 
						|
        );
 | 
						|
      },
 | 
						|
    });
 | 
						|
  };
 | 
						|
};
 | 
						|
 | 
						|
export default new Vuex.Store({
 | 
						|
  state: {},
 | 
						|
  plugins: [createLoadingPlugin()],
 | 
						|
  modules: {
 | 
						|
    userAndLogin,
 | 
						|
    userAndregister,
 | 
						|
    user,
 | 
						|
  },
 | 
						|
});
 |