初始化 antd-pro
This commit is contained in:
141
admin-web/src/models/global.js
Normal file
141
admin-web/src/models/global.js
Normal file
@@ -0,0 +1,141 @@
|
||||
import { queryNotices } from '@/services/api';
|
||||
|
||||
export default {
|
||||
namespace: 'global',
|
||||
|
||||
state: {
|
||||
collapsed: false,
|
||||
notices: [],
|
||||
loadedAllNotices: false,
|
||||
},
|
||||
|
||||
effects: {
|
||||
*fetchNotices(_, { call, put, select }) {
|
||||
const data = yield call(queryNotices);
|
||||
const loadedAllNotices = data && data.length && data[data.length - 1] === null;
|
||||
yield put({
|
||||
type: 'setLoadedStatus',
|
||||
payload: loadedAllNotices,
|
||||
});
|
||||
yield put({
|
||||
type: 'saveNotices',
|
||||
payload: data.filter(item => item),
|
||||
});
|
||||
const unreadCount = yield select(
|
||||
state => state.global.notices.filter(item => !item.read).length
|
||||
);
|
||||
yield put({
|
||||
type: 'user/changeNotifyCount',
|
||||
payload: {
|
||||
totalCount: data.length,
|
||||
unreadCount,
|
||||
},
|
||||
});
|
||||
},
|
||||
*fetchMoreNotices({ payload }, { call, put, select }) {
|
||||
const data = yield call(queryNotices, payload);
|
||||
const loadedAllNotices = data && data.length && data[data.length - 1] === null;
|
||||
yield put({
|
||||
type: 'setLoadedStatus',
|
||||
payload: loadedAllNotices,
|
||||
});
|
||||
yield put({
|
||||
type: 'pushNotices',
|
||||
payload: data.filter(item => item),
|
||||
});
|
||||
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, { payload }) {
|
||||
return {
|
||||
...state,
|
||||
collapsed: payload,
|
||||
};
|
||||
},
|
||||
saveNotices(state, { payload }) {
|
||||
return {
|
||||
...state,
|
||||
notices: payload,
|
||||
};
|
||||
},
|
||||
saveClearedNotices(state, { payload }) {
|
||||
return {
|
||||
...state,
|
||||
notices: state.notices.filter(item => item.type !== payload),
|
||||
};
|
||||
},
|
||||
pushNotices(state, { payload }) {
|
||||
return {
|
||||
...state,
|
||||
notices: [...state.notices, ...payload],
|
||||
};
|
||||
},
|
||||
setLoadedStatus(state, { payload }) {
|
||||
return {
|
||||
...state,
|
||||
loadedAllNotices: payload,
|
||||
};
|
||||
},
|
||||
},
|
||||
|
||||
subscriptions: {
|
||||
setup({ history }) {
|
||||
// Subscribe history(url) change, trigger `load` action if pathname is `/`
|
||||
return history.listen(({ pathname, search }) => {
|
||||
if (typeof window.ga !== 'undefined') {
|
||||
window.ga('send', 'pageview', pathname + search);
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user