BaseView.js 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. import React, { Component, Fragment } from 'react';
  2. import { formatMessage, FormattedMessage } from 'umi/locale';
  3. import { Form, Input, Upload, Select, Button } from 'antd';
  4. import { connect } from 'dva';
  5. import styles from './BaseView.less';
  6. import GeographicView from './GeographicView';
  7. import PhoneView from './PhoneView';
  8. // import { getTimeDistance } from '@/utils/utils';
  9. const FormItem = Form.Item;
  10. const { Option } = Select;
  11. // 头像组件 方便以后独立,增加裁剪之类的功能
  12. const AvatarView = ({ avatar }) => (
  13. <Fragment>
  14. <div className={styles.avatar_title}>Avatar</div>
  15. <div className={styles.avatar}>
  16. <img src={avatar} alt="avatar" />
  17. </div>
  18. <Upload fileList={[]}>
  19. <div className={styles.button_view}>
  20. <Button icon="upload">
  21. <FormattedMessage id="app.settings.basic.avatar" defaultMessage="Change avatar" />
  22. </Button>
  23. </div>
  24. </Upload>
  25. </Fragment>
  26. );
  27. const validatorGeographic = (rule, value, callback) => {
  28. const { province, city } = value;
  29. if (!province.key) {
  30. callback('Please input your province!');
  31. }
  32. if (!city.key) {
  33. callback('Please input your city!');
  34. }
  35. callback();
  36. };
  37. const validatorPhone = (rule, value, callback) => {
  38. const values = value.split('-');
  39. if (!values[0]) {
  40. callback('Please input your area code!');
  41. }
  42. if (!values[1]) {
  43. callback('Please input your phone number!');
  44. }
  45. callback();
  46. };
  47. @connect(({ user }) => ({
  48. currentUser: user.currentUser,
  49. }))
  50. @Form.create()
  51. class BaseView extends Component {
  52. componentDidMount() {
  53. this.setBaseInfo();
  54. }
  55. setBaseInfo = () => {
  56. const { currentUser, form } = this.props;
  57. Object.keys(form.getFieldsValue()).forEach(key => {
  58. const obj = {};
  59. obj[key] = currentUser[key] || null;
  60. form.setFieldsValue(obj);
  61. });
  62. };
  63. getAvatarURL() {
  64. const { currentUser } = this.props;
  65. if (currentUser.avatar) {
  66. return currentUser.avatar;
  67. }
  68. const url = 'https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png';
  69. return url;
  70. }
  71. getViewDom = ref => {
  72. this.view = ref;
  73. };
  74. render() {
  75. const {
  76. form: { getFieldDecorator },
  77. } = this.props;
  78. return (
  79. <div className={styles.baseView} ref={this.getViewDom}>
  80. <div className={styles.left}>
  81. <Form layout="vertical" onSubmit={this.handleSubmit} hideRequiredMark>
  82. <FormItem label={formatMessage({ id: 'app.settings.basic.email' })}>
  83. {getFieldDecorator('email', {
  84. rules: [
  85. {
  86. required: true,
  87. message: formatMessage({ id: 'app.settings.basic.email-message' }, {}),
  88. },
  89. ],
  90. })(<Input />)}
  91. </FormItem>
  92. <FormItem label={formatMessage({ id: 'app.settings.basic.nickname' })}>
  93. {getFieldDecorator('name', {
  94. rules: [
  95. {
  96. required: true,
  97. message: formatMessage({ id: 'app.settings.basic.nickname-message' }, {}),
  98. },
  99. ],
  100. })(<Input />)}
  101. </FormItem>
  102. <FormItem label={formatMessage({ id: 'app.settings.basic.profile' })}>
  103. {getFieldDecorator('profile', {
  104. rules: [
  105. {
  106. required: true,
  107. message: formatMessage({ id: 'app.settings.basic.profile-message' }, {}),
  108. },
  109. ],
  110. })(
  111. <Input.TextArea
  112. placeholder={formatMessage({ id: 'app.settings.basic.profile-placeholder' })}
  113. rows={4}
  114. />
  115. )}
  116. </FormItem>
  117. <FormItem label={formatMessage({ id: 'app.settings.basic.country' })}>
  118. {getFieldDecorator('country', {
  119. rules: [
  120. {
  121. required: true,
  122. message: formatMessage({ id: 'app.settings.basic.country-message' }, {}),
  123. },
  124. ],
  125. })(
  126. <Select style={{ maxWidth: 220 }}>
  127. <Option value="China">中国</Option>
  128. </Select>
  129. )}
  130. </FormItem>
  131. <FormItem label={formatMessage({ id: 'app.settings.basic.geographic' })}>
  132. {getFieldDecorator('geographic', {
  133. rules: [
  134. {
  135. required: true,
  136. message: formatMessage({ id: 'app.settings.basic.geographic-message' }, {}),
  137. },
  138. {
  139. validator: validatorGeographic,
  140. },
  141. ],
  142. })(<GeographicView />)}
  143. </FormItem>
  144. <FormItem label={formatMessage({ id: 'app.settings.basic.address' })}>
  145. {getFieldDecorator('address', {
  146. rules: [
  147. {
  148. required: true,
  149. message: formatMessage({ id: 'app.settings.basic.address-message' }, {}),
  150. },
  151. ],
  152. })(<Input />)}
  153. </FormItem>
  154. <FormItem label={formatMessage({ id: 'app.settings.basic.phone' })}>
  155. {getFieldDecorator('phone', {
  156. rules: [
  157. {
  158. required: true,
  159. message: formatMessage({ id: 'app.settings.basic.phone-message' }, {}),
  160. },
  161. { validator: validatorPhone },
  162. ],
  163. })(<PhoneView />)}
  164. </FormItem>
  165. <Button type="primary">
  166. <FormattedMessage
  167. id="app.settings.basic.update"
  168. defaultMessage="Update Information"
  169. />
  170. </Button>
  171. </Form>
  172. </div>
  173. <div className={styles.right}>
  174. <AvatarView avatar={this.getAvatarURL()} />
  175. </div>
  176. </div>
  177. );
  178. }
  179. }
  180. export default BaseView;