import React, {Component} from 'react'; import {Input, Button, Spin, Icon} from 'antd'; import {ADD_USER, GET_USER, SEARCH_USER} from "../gql"; import {Mutation} from "react-apollo"; import axios from 'axios'; import {request} from 'graphql-request' import gql from "graphql-tag"; // todo: _.debounce 的引入 import _ from 'lodash'; import {setCookie} from "../cookie"; axios.defaults.withCredentials = true; const idGen = (kind) => { return kind + '_' + Date.now() + '_' + Math.random().toString().slice(-8); }; class LoginInput extends Component { constructor() { super(); this.state = { userID: '', hasLogin: false, hasRegister: false, nickname: 'its a default nickname', avatar: '', register_username: '', register_password: '', register_nickname: '', login_username: '', login_password: '', login_url: 'http://123.206.193.98:8999/login', register_url: 'http://123.206.193.98:8999/resetpassword', getID_url: 'http://123.206.193.98:8999/getuserid', loginStatus: '', loginOnce: true, usernameTip: false } } login = () => { let _this = this; axios.post(this.state.login_url, { 'user-name': this.state.login_username, password: this.state.login_password }) .then((res) => { _this.setState({ userID: res.data, loginStatus: 'logined', loginOnce: false }); setCookie("user_id", res.data); _this.props.getUserId(res.data); request('http://123.206.193.98:3000/graphql', GET_USER, {id: res.data}).then(data => { this.setState({ avatar: data.user_by_id.avatar, nickname: data.user_by_id.nickname }) } ) }) .catch((err) => { _this.setState({ loginStatus: 'failed', loginOnce: false }); }); }; register = () => { return ( {(create_user, {loading, error}) => { if (error) return 'error'; if (loading) return ; return (
register:
username: { // antd 获取不到 target,百度来的下面这句代码 e.persist(); this.setState({register_username: e.target.value}); }} style={{width: 200}} /> { this.state.usernameTip ? username has been used! : '' }
password: { e.persist(); this.setState({register_password: e.target.value}); }} style={{width: 200}} />
nickname: { e.persist(); this.setState({register_nickname: e.target.value}); }} style={{width: 200}} />
); }}
) }; componentWillMount() { let _this = this; axios.get(this.state.getID_url) .then((res) => { if (res.data !== '') { setCookie("user_id", res.data); _this.setState({ userID: res.data, hasLogin: true, loginOnce: false, loginStatus: 'logined' }, () => { request('http://123.206.193.98:3000/graphql', GET_USER, {id: res.data}).then(data => { this.setState({ avatar: data.user_by_id.avatar, nickname: data.user_by_id.nickname }) } ) } ) } }) .catch((err) => { console.log(err); }); } render() { return (
{ this.state.hasLogin ? this.state.loginOnce ? this.login() : '' :
login:
username: { e.persist(); this.setState({login_username: e.target.value}); }} style={{width: 200}} />
password: { e.persist(); this.setState({login_password: e.target.value}); }} style={{width: 200}} />
} { this.state.loginStatus === 'logined' ?
welcome, {this.state.nickname}
: this.state.loginStatus === 'failed' ?
login failed
: '' }
{ this.state.hasRegister ?
ok, login please
: this.state.loginStatus === 'logined' ? '' : this.register() }
) } } export default LoginInput;