mirror of
https://github.com/zuiidea/antd-admin
synced 2026-11-05 21:34:57 +00:00
143 lines
3.2 KiB
JavaScript
143 lines
3.2 KiB
JavaScript
import { query, logout } from '../services/app'
|
|
import { routerRedux } from 'dva/router'
|
|
import { parse } from 'qs'
|
|
import { config } from '../utils'
|
|
const { prefix } = config
|
|
|
|
export default {
|
|
namespace: 'app',
|
|
state: {
|
|
user: {},
|
|
loginButtonLoading: false,
|
|
menuPopoverVisible: false,
|
|
siderFold: localStorage.getItem(`${prefix}siderFold`) === 'true',
|
|
darkTheme: localStorage.getItem(`${prefix}darkTheme`) === 'true',
|
|
isNavbar: document.body.clientWidth < 769,
|
|
navOpenKeys: JSON.parse(localStorage.getItem(`${prefix}navOpenKeys`)) || [],
|
|
},
|
|
subscriptions: {
|
|
setup ({ dispatch }) {
|
|
dispatch({ type: 'queryUser' })
|
|
window.onresize = () => {
|
|
dispatch({ type: 'changeNavbar' })
|
|
}
|
|
},
|
|
},
|
|
effects: {
|
|
*queryUser ({
|
|
payload,
|
|
}, { call, put }) {
|
|
const data = yield call(query, parse(payload))
|
|
if (data.success && data.user) {
|
|
yield put({
|
|
type: 'queryUserSuccess',
|
|
payload: data.user,
|
|
})
|
|
if (location.pathname === '/login') {
|
|
yield put(routerRedux.push('/dashboard'))
|
|
}
|
|
} else {
|
|
if (location.pathname !== '/login') {
|
|
let from = location.pathname
|
|
if (location.pathname === '/dashboard') {
|
|
from = '/dashboard'
|
|
}
|
|
window.location = `${location.origin}/login?from=${from}`
|
|
}
|
|
}
|
|
},
|
|
*logout ({
|
|
payload,
|
|
}, { call, put }) {
|
|
const data = yield call(logout, parse(payload))
|
|
if (data.success) {
|
|
yield put({ type: 'queryUser' })
|
|
} else {
|
|
throw (data)
|
|
}
|
|
},
|
|
*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: {
|
|
queryUserSuccess (state, { payload: user }) {
|
|
return {
|
|
...state,
|
|
user,
|
|
}
|
|
},
|
|
showLoginButtonLoading (state) {
|
|
return {
|
|
...state,
|
|
loginButtonLoading: true,
|
|
}
|
|
},
|
|
handleSwitchSider (state) {
|
|
localStorage.setItem(`${prefix}siderFold`, !state.siderFold)
|
|
return {
|
|
...state,
|
|
siderFold: !state.siderFold,
|
|
}
|
|
},
|
|
handleChangeTheme (state) {
|
|
localStorage.setItem(`${prefix}darkTheme`, !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, { payload: navOpenKeys }) {
|
|
return {
|
|
...state,
|
|
...navOpenKeys,
|
|
}
|
|
},
|
|
},
|
|
}
|