| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- import React, { Component, Fragment } from 'react';
- import { formatMessage, FormattedMessage } from 'umi/locale';
- import { Form, Input, Upload, Select, Button } from 'antd';
- import { connect } from 'dva';
- import styles from './BaseView.less';
- import GeographicView from './GeographicView';
- import PhoneView from './PhoneView';
- // import { getTimeDistance } from '@/utils/utils';
- const FormItem = Form.Item;
- const { Option } = Select;
- // 头像组件 方便以后独立,增加裁剪之类的功能
- const AvatarView = ({ avatar }) => (
- <Fragment>
- <div className={styles.avatar_title}>Avatar</div>
- <div className={styles.avatar}>
- <img src={avatar} alt="avatar" />
- </div>
- <Upload fileList={[]}>
- <div className={styles.button_view}>
- <Button icon="upload">
- <FormattedMessage id="app.settings.basic.avatar" defaultMessage="Change avatar" />
- </Button>
- </div>
- </Upload>
- </Fragment>
- );
- const validatorGeographic = (rule, value, callback) => {
- const { province, city } = value;
- if (!province.key) {
- callback('Please input your province!');
- }
- if (!city.key) {
- callback('Please input your city!');
- }
- callback();
- };
- const validatorPhone = (rule, value, callback) => {
- const values = value.split('-');
- if (!values[0]) {
- callback('Please input your area code!');
- }
- if (!values[1]) {
- callback('Please input your phone number!');
- }
- callback();
- };
- @connect(({ user }) => ({
- currentUser: user.currentUser,
- }))
- @Form.create()
- class BaseView extends Component {
- componentDidMount() {
- this.setBaseInfo();
- }
- setBaseInfo = () => {
- const { currentUser, form } = this.props;
- Object.keys(form.getFieldsValue()).forEach(key => {
- const obj = {};
- obj[key] = currentUser[key] || null;
- form.setFieldsValue(obj);
- });
- };
- getAvatarURL() {
- const { currentUser } = this.props;
- if (currentUser.avatar) {
- return currentUser.avatar;
- }
- const url = 'https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png';
- return url;
- }
- getViewDom = ref => {
- this.view = ref;
- };
- render() {
- const {
- form: { getFieldDecorator },
- } = this.props;
- return (
- <div className={styles.baseView} ref={this.getViewDom}>
- <div className={styles.left}>
- <Form layout="vertical" onSubmit={this.handleSubmit} hideRequiredMark>
- <FormItem label={formatMessage({ id: 'app.settings.basic.email' })}>
- {getFieldDecorator('email', {
- rules: [
- {
- required: true,
- message: formatMessage({ id: 'app.settings.basic.email-message' }, {}),
- },
- ],
- })(<Input />)}
- </FormItem>
- <FormItem label={formatMessage({ id: 'app.settings.basic.nickname' })}>
- {getFieldDecorator('name', {
- rules: [
- {
- required: true,
- message: formatMessage({ id: 'app.settings.basic.nickname-message' }, {}),
- },
- ],
- })(<Input />)}
- </FormItem>
- <FormItem label={formatMessage({ id: 'app.settings.basic.profile' })}>
- {getFieldDecorator('profile', {
- rules: [
- {
- required: true,
- message: formatMessage({ id: 'app.settings.basic.profile-message' }, {}),
- },
- ],
- })(
- <Input.TextArea
- placeholder={formatMessage({ id: 'app.settings.basic.profile-placeholder' })}
- rows={4}
- />
- )}
- </FormItem>
- <FormItem label={formatMessage({ id: 'app.settings.basic.country' })}>
- {getFieldDecorator('country', {
- rules: [
- {
- required: true,
- message: formatMessage({ id: 'app.settings.basic.country-message' }, {}),
- },
- ],
- })(
- <Select style={{ maxWidth: 220 }}>
- <Option value="China">中国</Option>
- </Select>
- )}
- </FormItem>
- <FormItem label={formatMessage({ id: 'app.settings.basic.geographic' })}>
- {getFieldDecorator('geographic', {
- rules: [
- {
- required: true,
- message: formatMessage({ id: 'app.settings.basic.geographic-message' }, {}),
- },
- {
- validator: validatorGeographic,
- },
- ],
- })(<GeographicView />)}
- </FormItem>
- <FormItem label={formatMessage({ id: 'app.settings.basic.address' })}>
- {getFieldDecorator('address', {
- rules: [
- {
- required: true,
- message: formatMessage({ id: 'app.settings.basic.address-message' }, {}),
- },
- ],
- })(<Input />)}
- </FormItem>
- <FormItem label={formatMessage({ id: 'app.settings.basic.phone' })}>
- {getFieldDecorator('phone', {
- rules: [
- {
- required: true,
- message: formatMessage({ id: 'app.settings.basic.phone-message' }, {}),
- },
- { validator: validatorPhone },
- ],
- })(<PhoneView />)}
- </FormItem>
- <Button type="primary">
- <FormattedMessage
- id="app.settings.basic.update"
- defaultMessage="Update Information"
- />
- </Button>
- </Form>
- </div>
- <div className={styles.right}>
- <AvatarView avatar={this.getAvatarURL()} />
- </div>
- </div>
- );
- }
- }
- export default BaseView;
|