1+ /**
2+ * Action - login
3+ * 登录,控制登录操作
4+ */
5+ //加载依赖
6+ import fetch from 'isomorphic-fetch' ;
7+ import {
8+ API_LOGIN , API_LOGOUT
9+ }
10+ from '../config' ;
11+ import {
12+ push
13+ }
14+ from 'react-router-redux' ; //router跳转方法
15+
16+ /*
17+ * action 类型
18+ */
19+ //登入请求
20+ export const LOGIN_REQUEST = 'LOGIN_REQUEST' ;
21+ export const LOGIN_RECEIVE = 'LOGIN_RECEIVE' ;
22+ export const LOGIN_ERROR = 'LOGIN_ERROR' ;
23+ //登出请求
24+ export const LOGOUT_REQUEST = 'LOGOUT_REQUEST' ;
25+ export const LOGOUT_RECEIVE = 'LOGOUT_RECEIVE' ;
26+ export const LOGOUT_ERROR = 'LOGOUT_ERROR' ;
27+ //状态
28+ export const LOGIN_STATUS_OUT = 'out' ; //登出
29+ export const LOGIN_STATUS_IN = 'in' ; //登入
30+ export const LOGIN_STATUS_LOAD = 'load' ; //加载
31+ export const LOGIN_STATUS_ERROR = 'error' ; //出错
32+ /*
33+ * action 创建函数
34+ */
35+ //登录
36+ export function loginRequest ( ) {
37+ return {
38+ type : LOGIN_REQUEST
39+ }
40+ }
41+
42+ export function loginReceive ( data ) {
43+ return {
44+ type : LOGIN_RECEIVE ,
45+ info : data
46+ }
47+ }
48+
49+ export function loginError ( data ) {
50+ return {
51+ type : LOGIN_ERROR ,
52+ msg : data
53+ }
54+ }
55+
56+ export function loginPost ( data ) {
57+ return function ( dispatch ) {
58+ if ( ! data . name || ! data . password ) {
59+ dispatch ( loginError ( '没有输入用户名或密码' ) ) ;
60+ return false ;
61+ }
62+ dispatch ( loginRequest ( ) ) ;
63+ let headers = new Headers ( data ) ;
64+ let request = new Request ( API_LOGIN , {
65+ method : 'GET' ,
66+ headers : headers
67+ } )
68+ fetch ( request ) . then ( response => response . json ( ) )
69+ . then ( json => {
70+ if ( json . head . status === 200 ) {
71+ dispatch ( loginReceive ( json . body ) ) ;
72+ //跳转到登录后首页
73+ dispatch ( push ( '/dashboard/' ) ) ;
74+ } else {
75+ dispatch ( loginError ( json . head . msg ) ) ;
76+ }
77+ } ) . catch ( error => {
78+ console . log ( error ) ;
79+ dispatch ( loginError ( '网络错误,请重试' ) ) ;
80+ } )
81+ }
82+ }
83+
84+ //登出
85+ export function logoutRequest ( ) {
86+ return {
87+ type : LOGOUT_REQUEST
88+ }
89+ }
90+
91+ export function logoutReceive ( data ) {
92+ return {
93+ type : LOGOUT_RECEIVE ,
94+ info : data
95+ }
96+ }
97+
98+ export function logoutError ( data ) {
99+ return {
100+ type : LOGOUT_ERROR ,
101+ msg : data
102+ }
103+ }
104+
105+ export function logoutPost ( ) {
106+ return function ( dispatch ) {
107+ dispatch ( logoutRequest ( ) ) ;
108+ let request = new Request ( API_LOGOUT , {
109+ method : 'GET'
110+ } ) ;
111+ fetch ( request ) . then ( response => response . json ( ) )
112+ . then ( json => {
113+ if ( json . head . status === 200 ) {
114+ dispatch ( logoutReceive ( json . body ) ) ;
115+ //跳转到登录后首页
116+ dispatch ( push ( '/' ) ) ;
117+ } else {
118+ dispatch ( logoutError ( json . head . msg ) ) ;
119+ }
120+ } ) . catch ( error =>
121+ dispatch ( loginError ( '网络错误,请重试' ) )
122+ )
123+ }
124+ }
0 commit comments