import { queryCurrent, query as queryUsers, checkUserLoginStatus } from '@/services/user'; import { Effect } from 'dva'; import { Reducer } from 'redux'; export interface CurrentUser { avatar?: string; name?: string; title?: string; group?: string; signature?: string; tags?: { key: string; label: string; }[]; unreadCount?: number; } export interface UserModelState { currentUser?: CurrentUser; } export interface UserModelType { namespace: 'user'; state: UserModelState; effects: { fetch: Effect; fetchCurrent: Effect; checkUserLoginStatus: Effect; }; reducers: { saveCurrentUser: Reducer; changeNotifyCount: Reducer; }; } const UserModel: UserModelType = { namespace: 'user', state: { currentUser: {}, }, effects: { *fetch(_, { call, put }) { const response = yield call(queryUsers); yield put({ type: 'save', payload: response, }); }, *fetchCurrent(_, { call, put }) { const response = yield call(queryCurrent); yield put({ type: 'saveCurrentUser', payload: response, }); }, *checkUserLoginStatus({ payload }, { call }) { const res = yield call(checkUserLoginStatus, payload); return res; }, }, reducers: { saveCurrentUser(state, action) { return { ...state, currentUser: action.payload || {}, }; }, changeNotifyCount( state = { currentUser: {}, }, action, ) { return { ...state, currentUser: { ...state.currentUser, notifyCount: action.payload.totalCount, unreadCount: action.payload.unreadCount, }, }; }, }, }; export default UserModel;