import { queryNotices } from '@/services/user' const GlobalModel = { namespace: 'global', state: { collapsed: false, notices: [] }, effects: { *fetchNotices(_, { call, put, select }) { const data = yield call(queryNotices) yield put({ type: 'saveNotices', payload: data }) const unreadCount = yield select( state => state.global.notices.filter(item => !item.read).length ) yield put({ type: 'user/changeNotifyCount', payload: { totalCount: data.length, unreadCount } }) }, *clearNotices({ payload }, { put, select }) { yield put({ type: 'saveClearedNotices', payload }) const count = yield select(state => state.global.notices.length) const unreadCount = yield select( state => state.global.notices.filter(item => !item.read).length ) yield put({ type: 'user/changeNotifyCount', payload: { totalCount: count, unreadCount } }) }, *changeNoticeReadState({ payload }, { put, select }) { const notices = yield select(state => state.global.notices.map(item => { const notice = { ...item } if (notice.id === payload) { notice.read = true } return notice }) ) yield put({ type: 'saveNotices', payload: notices }) yield put({ type: 'user/changeNotifyCount', payload: { totalCount: notices.length, unreadCount: notices.filter(item => !item.read).length } }) } }, reducers: { changeLayoutCollapsed( state = { notices: [], collapsed: true }, { payload } ) { return { ...state, collapsed: payload } }, saveNotices(state, { payload }) { return { collapsed: false, ...state, notices: payload } }, saveClearedNotices( state = { notices: [], collapsed: true }, { payload } ) { return { ...state, collapsed: false, notices: state.notices.filter(item => item.type !== payload) } } } } export default GlobalModel