import { addRule, queryRule, removeRule, updateRule } from '@/services/api'; import { Effect } from 'dva'; import { Reducer } from 'redux'; export interface IRuleModelState { data: { list: any[]; pagination: object; }; list?: any[]; } export interface IRuleModel { namespace: 'rule'; state: IRuleModelState; effects: { fetch: Effect; add: Effect; remove: Effect; update: Effect; }; reducers: { save: Reducer; }; } const RuleModel: IRuleModel = { namespace: 'rule', state: { data: { list: [], pagination: {}, }, }, effects: { *fetch({ payload }, { call, put }) { const response = yield call(queryRule, payload); yield put({ type: 'save', payload: response, }); }, *add({ payload, callback }, { call, put }) { const response = yield call(addRule, payload); yield put({ type: 'save', payload: response, }); if (callback) { callback(); } }, *remove({ payload, callback }, { call, put }) { const response = yield call(removeRule, payload); yield put({ type: 'save', payload: response, }); if (callback) { callback(); } }, *update({ payload, callback }, { call, put }) { const response = yield call(updateRule, payload); yield put({ type: 'save', payload: response, }); if (callback) { callback(); } }, }, reducers: { save(state, action) { return { ...state, data: action.payload, }; }, }, }; export default RuleModel;