import React, {Component} from 'react'; import {Layout, Input, Button, Spin} from 'antd'; import Config from './Config' 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'; axios.defaults.withCredentials = true; const {Content} = Layout; const idGen = (kind) => { return kind + '_' + Date.now() + '_' + Math.random().toString().slice(-8); }; class Login 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; // todo: should be post axios.get(`${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 }); 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: { // antd 获取不到 target,百度来的下面这句代码 e.persist(); this.setState({register_password: e.target.value}); }} style={{width: 200}} />
nickname: { // antd 获取不到 target,百度来的下面这句代码 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 !== '') { _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: { // antd 获取不到 target,百度来的下面这句代码 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 Login;