Files
antd-admin/src/models/app.js
T
2017-03-13 18:03:28 +08:00

173 lines
3.6 KiB
JavaScript

import {login, userInfo, logout} from '../services/app'
import {parse} from 'qs'
export default {
namespace: 'app',
state: {
login: false,
user: {
name: '吴彦祖'
},
loginButtonLoading: false,
menuPopoverVisible: false,
siderFold: localStorage.getItem('antdAdminSiderFold') === 'true',
darkTheme: localStorage.getItem('antdAdminDarkTheme') !== 'false',
isNavbar: document.body.clientWidth < 769,
navOpenKeys: JSON.parse(localStorage.getItem('navOpenKeys') || '[]')
},
subscriptions: {
setup ({dispatch}) {
dispatch({type: 'queryUser'})
window.onresize = function () {
dispatch({type: 'changeNavbar'})
}
}
},
effects: {
*login ({
payload
}, {call, put}) {
yield put({type: 'showLoginButtonLoading'})
const data = yield call(login, parse(payload))
if (data.success) {
yield put({
type: 'loginSuccess',
payload: {
user: {
name: payload.username
}
}})
} else {
yield put({
type: 'loginFail'
})
}
},
*queryUser ({
payload
}, {call, put}) {
yield put({type: 'showLoading'})
const data = yield call(userInfo, parse(payload))
if (data.success) {
yield put({
type: 'loginSuccess',
payload: {
user: {
name: data.username
}
}
})
}
yield put({type: 'hideLoading'})
},
*logout ({
payload
}, {call, put}) {
const data = yield call(logout, parse(payload))
if (data.success) {
yield put({
type: 'logoutSuccess'
})
}
},
*switchSider ({
payload
}, {put}) {
yield put({
type: 'handleSwitchSider'
})
},
*changeTheme ({
payload
}, {put}) {
yield put({
type: 'handleChangeTheme'
})
},
*changeNavbar ({
payload
}, {put}) {
if (document.body.clientWidth < 769) {
yield put({type: 'showNavbar'})
} else {
yield put({type: 'hideNavbar'})
}
},
*switchMenuPopver ({
payload
}, {put}) {
yield put({
type: 'handleSwitchMenuPopver'
})
}
},
reducers: {
loginSuccess (state, action) {
return {
...state,
...action.payload,
login: true,
loginButtonLoading: false
}
},
logoutSuccess (state) {
return {
...state,
login: false
}
},
loginFail (state) {
return {
...state,
login: false,
loginButtonLoading: false
}
},
showLoginButtonLoading (state) {
return {
...state,
loginButtonLoading: true
}
},
handleSwitchSider (state) {
localStorage.setItem('antdAdminSiderFold', !state.siderFold)
return {
...state,
siderFold: !state.siderFold
}
},
handleChangeTheme (state) {
localStorage.setItem('antdAdminDarkTheme', !state.darkTheme)
return {
...state,
darkTheme: !state.darkTheme
}
},
showNavbar (state) {
return {
...state,
isNavbar: true
}
},
hideNavbar (state) {
return {
...state,
isNavbar: false
}
},
handleSwitchMenuPopver (state) {
return {
...state,
menuPopoverVisible: !state.menuPopoverVisible
}
},
handleNavOpenKeys (state, action) {
return {
...state,
...action.payload
}
}
}
}