| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368 |
- import React, {Component} from 'react';
- import {FormattedMessage} from 'react-intl';
- import {Icon, Row, Col, Input, Button, Spin} from 'antd';
- import './index.css'
- import avatar from '../images/avatar.jpg';
- import classnames from 'classnames';
- import {Mutation, Query} from "react-apollo";
- import {GET_USER, UPDATE_USER} from "../gql";
- import gql from "graphql-tag";
- import {getCookie} from "../cookie";
- class AccountConfig extends Component {
- constructor(props) {
- super(props);
- this.state = {
- overNickname: false,
- editNickname: false,
- overTelephone: false,
- editTelephone: false,
- overEmail: false,
- editEmail: false,
- userID: ''
- };
- }
- componentWillMount() {
- this.setState({
- userID: getCookie('user_id')
- })
- }
- cancelEdit = (kind) => {
- let key = `edit${kind[0].toUpperCase()}${kind.slice(1)}`;
- this.setState({
- [key]: false
- })
- };
- render() {
- let {userID} = this.state;
- return (
- <Query query={gql(GET_USER)} variables={{id: userID}}>
- {
- ({loading, error, data}) => {
- if (loading) {
- return <Spin style={{marginLeft: 3}}/>
- }
- if (error) {
- return 'error!';
- }
- if (data.user_by_id === null) {
- return (
- <Row style={{marginTop: 100}}>
- <Col span={12} offset={6} className={'login-wrapper'}>
- <Row>
- <Col span={4} offset={20}>
- <div className="back-to-login" onClick={() => {
- this.props.history.push({
- pathname: '/login',
- })
- }}>
- <FormattedMessage id="login"/> <Icon type="right"
- style={{color: '#848fa6'}}/>
- </div>
- </Col>
- </Row>
- <div className={'no-login-tip'}>
- <span>你还没有登录</span>
- </div>
- </Col>
- </Row>
- )
- } else {
- return (
- <div>
- <Row style={{marginTop: 100}}>
- <Col span={12} offset={6} className={'login-wrapper'}>
- <div className={'mask'} style={{backgroundImage: `url(${avatar})`}}>
- <div className={'mask-black'}>
- <div className={'tip'}>
- <Icon style={{fontSize: 30, display: 'block'}} type="camera"/>
- <span style={{paddingTop: 5, display: 'block'}}
- className={'tip-span'}><FormattedMessage
- id="modify avatar"/></span>
- </div>
- </div>
- </div>
- <Row>
- <Col span={20} offset={4} className={'message-wrapper'}>
- <Row>
- <Col span={20}>
- {
- this.state.editNickname ?
- <EditNickname cancelEdit={this.cancelEdit}
- userID={userID}
- data={data.user_by_id}/>
- :
- <div className={'nickname'} onMouseOver={() => {
- this.setState({overNickname: true})
- }} onMouseLeave={() => {
- this.setState({overNickname: false})
- }}>
- {
- data.user_by_id.nickname || 'please input'
- }
- {
- this.state.overNickname ?
- <span style={{
- paddingLeft: '5px',
- paddingRight: '5px'
- }}
- onClick={() => {
- this.setState({
- editNickname: true,
- overNickname: false
- })
- }}>
- <Icon style={{fontSize: '18px'}} type="edit"
- theme="twoTone"/>
- <span className={'modify'}> <FormattedMessage
- id="modify"/></span></span>
- :
- ''
- }
- </div>
- }
- </Col>
- <Col span={4}>
- <div className="back-to-login" onClick={() => {
- this.props.history.push({
- pathname: '/login',
- })
- }}>
- <FormattedMessage id="login"/> <Icon type="right"
- style={{color: '#848fa6'}}/>
- </div>
- </Col>
- </Row>
- <Row className={'message'}>
- <Col span={5}>
- <span className={'message-title'}><FormattedMessage
- id="tel"/></span>
- </Col>
- <Col span={19}>
- {
- this.state.editTelephone ?
- <Edit kind={'telephone'} cancelEdit={this.cancelEdit} userID={userID} data={data.user_by_id}/>
- :
- <div className={'message-content'}
- onMouseOver={() => {
- this.setState({overTelephone: true})
- }} onMouseLeave={() => {
- this.setState({overTelephone: false})
- }}>
- {
- data.user_by_id.telephone || 'please input'
- }
- {
- this.state.overTelephone ?
- <span style={{
- paddingLeft: '5px',
- paddingRight: '5px'
- }}
- onClick={() => {
- this.setState({
- editTelephone: true,
- overTelephone: false
- })
- }}>
- <Icon style={{fontSize: '18px'}} type="edit"
- theme="twoTone"/>
- <span className={'modify'}> <FormattedMessage
- id="modify"/></span></span>
- :
- ''
- }
- </div>
- }
- </Col>
- </Row>
- <Row className={'message'}>
- <Col span={5}>
- <span className={'message-title'}><FormattedMessage
- id="email"/></span>
- </Col>
- <Col span={19}>
- {
- this.state.editEmail ?
- <Edit kind={'email'} cancelEdit={this.cancelEdit} userID={userID} data={data.user_by_id}/>
- :
- <div className={'message-content'}
- onMouseOver={() => {
- this.setState({overEmail: true})
- }} onMouseLeave={() => {
- this.setState({overEmail: false})
- }}>
- {
- data.user_by_id.email || 'please input'
- }
- {
- this.state.overEmail ?
- <span style={{
- paddingLeft: '5px',
- paddingRight: '5px'
- }}
- onClick={() => {
- this.setState({
- editEmail: true,
- overEmail: false
- })
- }}>
- <Icon style={{fontSize: '18px'}} type="edit"
- theme="twoTone"/>
- <span className={'modify'}> <FormattedMessage
- id="modify"/></span>
- </span>
- :
- ''
- }
- </div>
- }
- </Col>
- </Row>
- </Col>
- </Row>
- </Col>
- </Row>
- </div>
- )
- }
- }
- }
- </Query>
- )
- }
- }
- export default AccountConfig;
- class EditNickname extends Component {
- constructor(props) {
- super(props);
- this.state = {
- nickname: this.props.data.nickname
- }
- }
- componentWillReceiveProps(next) {
- this.setState({
- nickname: next.data.nickname
- });
- }
- render() {
- let {email, telephone, openid, avatar} = this.props.data;
- return (
- <Mutation
- mutation={gql(UPDATE_USER)}
- onCompleted={(data) => this.props.cancelEdit('nickname')}
- >
- {(update_schema, {loading, error}) => {
- if (loading)
- return <Spin style={{marginLeft: 30, marginTop: 10}}/>;
- if (error)
- return 'error';
- let varObj = {
- id: this.props.userID,
- email,
- updatedAt: new Date().getTime(),
- telephone,
- openid,
- avatar,
- nickname: this.state.nickname
- };
- return (
- <Row className={'message-top'}>
- <Col span={5}>
- <span className={'message-title message-title-high'}><FormattedMessage
- id="nickname"/></span>
- </Col>
- <Col span={19}>
- <span className={'message-content'}>
- <Input onChange={(e) => {
- this.setState({nickname: e.target.value})
- }} value={this.state.nickname}/>
- <Button type={'primary'} onClick={() => {
- update_schema({variables: varObj});
- }}><FormattedMessage id="save"/></Button>
- <Button onClick={() => this.props.cancelEdit('nickname')}><FormattedMessage
- id="cancel"/></Button>
- </span>
- </Col>
- </Row>
- )
- }}
- </Mutation>
- )
- }
- }
- class Edit extends Component {
- constructor(props) {
- super(props);
- this.state = {
- telephone: props.data.telephone,
- email: props.data.email,
- avatar: props.data.avatar,
- }
- }
- componentWillReceiveProps(next) {
- this.setState({
- telephone: next.data.telephone,
- email: next.data.email,
- avatar: next.data.avatar,
- });
- }
- render() {
- let {kind} = this.props;
- return (
- <Mutation
- mutation={gql(UPDATE_USER)}
- onCompleted={(data) => this.props.cancelEdit(kind)}
- >
- {(update_schema, {loading, error}) => {
- if (loading)
- return <Spin style={{marginLeft: 30, marginTop: 10}}/>;
- if (error)
- return 'error';
- let {email, telephone, openid, avatar, nickname} = this.props.data;
- let varObj = {
- id: this.props.userID,
- email,
- updatedAt: new Date().getTime(),
- telephone,
- openid,
- avatar,
- nickname
- };
- return (
- <span className={'message-content'}>
- <Input onChange={(e) => {
- this.setState({[kind]: e.target.value})
- }} value={this.state[kind]}/>
- <Button type={'primary'} onClick={() => {
- update_schema({variables: {...varObj, [kind]:this.state[kind]}});
- }}><FormattedMessage id="save"/></Button>
- <Button onClick={() => this.props.cancelEdit(kind)}><FormattedMessage id="cancel"/></Button>
- </span>
- )
- }}
- </Mutation>
- )
- }
- }
|