import { Effect, Reducer, Subscription } from 'umi'; import { TagType } from './data.d'; import { queryTags,getClassInfo,execApi,execScene, } from './service'; import emitter from './events'; export interface StateType { tags: TagType[]; classInfo:any } export interface ModelType { namespace: string; state: StateType; effects: { fetchTags: Effect; getClassInfo: Effect; exec: Effect; execScene: Effect; }; reducers: { saveTags: Reducer; save: Reducer; }; subscriptions: { setup: Subscription }; } const Model: ModelType = { namespace: 'dashboardAndmonitor', state: { tags: [], classInfo:{} }, effects: { *fetchTags(_, { call, put }) { const response = yield call(queryTags); yield put({ type: 'saveTags', payload: response.list, }); }, //获取教室设备信息(通过Rest API) *getClassInfo({ payload, callback }, { call, put }) { const response = yield call(getClassInfo, payload); yield put({ type: 'save', payload: { classInfo: response, }, }); }, //开关设备 *exec({ payload, callback }, { call, put }) { const response = yield call(execApi, payload); }, //场景开关 *execScene({ payload, callback }, { call, put }) { const response = yield call(execScene, payload); }, }, reducers: { saveTags(state, action) { return { ...state, tags: action.payload, }; }, save(state, { payload }) { return { ...state, ...payload, }; }, update(state:any, action:any) { if(state.classInfo.devices && state.classInfo.devices.length > 0){ state.classInfo.devices.map((item:any)=>{ if(item.number == action.payload.model.device.number){ item.data.map((item1:any)=>{ if(item1.key == 'State'){ item1.value = action.payload.model.value } }) } }) } // alert(JSON.stringify(action.payload.model)) debugger console.log(state) let val = ''; // switch( action.payload.model.value ) { // case '开': // val = 'on'; // break; // case '关': // val = 'off'; // break; // default: // ''; // } return { ...state, status: val, }; }, }, subscriptions: { setup({ dispatch, history }): void { emitter.on('message', function (payload) { /** * deviceId: "75bae534-a2ff-4355-97cf-06e7acbacc57" * id: "f9f71b12-134e-4b18-ba33-335620ea6bc5" */ if(payload.event === "dataEntityUpdated"){ // debugger if (dispatch) { dispatch({ type: 'update', payload }); } //console.log('message::::', payload) } }) }, }, }; export default Model;