| | |
| | | import { |
| | | ProForm, |
| | | ProFormText, |
| | | ProFormTextArea, |
| | | ProFormSelect, |
| | | ProFormDigit |
| | | } from '@ant-design/pro-components'; |
| | | import { Button, Input, message, Upload, Form } from 'antd'; |
| | | import { FormattedMessage, useIntl } from '@umijs/max'; |
| | | import React from 'react'; |
| | | import useStyles from './index.style'; |
| | | import Http from '@/utils/http'; |
| | | |
| | | import defaultAvat from '/public/img/defaultAva.jpg' |
| | | |
| | | const handleUpdate = async (val, intl) => { |
| | | const hide = message.loading(intl.formatMessage({ id: 'page.updating', defaultMessage: '正在更新' })); |
| | | try { |
| | | const resp = await Http.doPost('api/user/update', val); |
| | | if (resp.code === 200) { |
| | | message.success(intl.formatMessage({ id: 'page.update.success', defaultMessage: '更新成功' })); |
| | | return true; |
| | | } else { |
| | | message.error(resp.msg); |
| | | return false; |
| | | } |
| | | } catch (error) { |
| | | message.error(intl.formatMessage({ id: 'page.update.fail', defaultMessage: '更新失败请重试!' })); |
| | | return false; |
| | | } finally { |
| | | hide(); |
| | | } |
| | | }; |
| | | |
| | | const BaseView = () => { |
| | | const intl = useIntl(); |
| | | const { styles } = useStyles(); |
| | | const [loading, setLoading] = React.useState(false); |
| | | const [currentUser, setCurrentUser] = React.useState({}); |
| | | const [form] = Form.useForm(); |
| | | |
| | | const AvatarView = ({ avatar }) => ( |
| | | <> |
| | | <div className={styles.avatar_title}>头像</div> |
| | | <div className={styles.avatar}> |
| | | <img src={avatar} alt="avatar" /> |
| | | </div> |
| | | <Upload showUploadList={false}> |
| | | <div className={styles.button_view}> |
| | | {/* <Button> |
| | | <UploadOutlined /> |
| | | 更换头像 |
| | | </Button> */} |
| | | </div> |
| | | </Upload> |
| | | </> |
| | | ); |
| | | |
| | | const queryCurrent = () => { |
| | | setLoading(true); |
| | | Http.doGetPromise('api/auth/user', {}, (res) => { |
| | | setLoading(false); |
| | | setCurrentUser(res.data); |
| | | }).catch((err) => { |
| | | console.error(err); |
| | | setLoading(false); |
| | | }) |
| | | } |
| | | |
| | | React.useEffect(() => { |
| | | queryCurrent(); |
| | | }, []); |
| | | |
| | | const getAvatarURL = () => { |
| | | if (currentUser) { |
| | | if (currentUser.avatar) { |
| | | return currentUser.avatar; |
| | | } |
| | | } |
| | | return defaultAvat; |
| | | }; |
| | | |
| | | const handleFinish = async (values) => { |
| | | handleUpdate(values, intl); |
| | | }; |
| | | |
| | | return ( |
| | | <div className={styles.baseView}> |
| | | {loading ? null : ( |
| | | <> |
| | | <div className={styles.left}> |
| | | <ProForm |
| | | form={form} |
| | | layout="vertical" |
| | | onFinish={handleFinish} |
| | | submitter={{ |
| | | searchConfig: { |
| | | submitText: intl.formatMessage({ id: 'personal.base.button.name', defaultMessage: '更新基本信息' }), |
| | | }, |
| | | render: (_, dom) => dom[1], |
| | | }} |
| | | initialValues={{ |
| | | ...currentUser, |
| | | }} |
| | | hideRequiredMark |
| | | > |
| | | <ProFormDigit |
| | | name="id" |
| | | disabled |
| | | hidden={true} |
| | | /> |
| | | <ProFormText |
| | | width="md" |
| | | name="username" |
| | | label={intl.formatMessage({ id: 'common.username', defaultMessage: "账号" })} |
| | | disabled |
| | | rules={[ |
| | | { |
| | | required: true, |
| | | }, |
| | | ]} |
| | | /> |
| | | <ProFormText |
| | | width="md" |
| | | name="nickname" |
| | | label={intl.formatMessage({ id: 'common.nickname', defaultMessage: "名称" })} |
| | | rules={[ |
| | | { |
| | | required: true, |
| | | }, |
| | | ]} |
| | | /> |
| | | <ProFormSelect |
| | | width="md" |
| | | name="sex" |
| | | label={intl.formatMessage({ id: 'common.sex', defaultMessage: "性别" })} |
| | | colProps={{ md: 12, xl: 12 }} |
| | | options={[ |
| | | { label: intl.formatMessage({ id: 'common.undefined', defaultMessage: "未知" }), value: 0 }, |
| | | { label: intl.formatMessage({ id: 'common.male', defaultMessage: '男' }), value: 1 }, |
| | | { label: intl.formatMessage({ id: 'common.female', defaultMessage: '女' }), value: 2 }, |
| | | ]} |
| | | /> |
| | | <ProFormText |
| | | width="md" |
| | | name="phone" |
| | | label={intl.formatMessage({ id: 'common.phone', defaultMessage: "手机号" })} |
| | | rules={[ |
| | | { |
| | | required: false, |
| | | }, |
| | | ]} |
| | | /> |
| | | <ProFormText |
| | | width="md" |
| | | name="email" |
| | | label={intl.formatMessage({ id: 'common.email', defaultMessage: "邮箱" })} |
| | | rules={[ |
| | | { |
| | | required: false, |
| | | }, |
| | | ]} |
| | | /> |
| | | <ProFormText |
| | | width="md" |
| | | name="realName" |
| | | label={intl.formatMessage({ id: 'common.realname', defaultMessage: "真实姓名" })} |
| | | rules={[ |
| | | { |
| | | required: false, |
| | | }, |
| | | ]} |
| | | /> |
| | | <ProFormText |
| | | width="md" |
| | | name="idCard" |
| | | label={intl.formatMessage({ id: 'common.idcard', defaultMessage: "身份证号" })} |
| | | rules={[ |
| | | { |
| | | required: false, |
| | | }, |
| | | ]} |
| | | /> |
| | | <ProFormTextArea |
| | | name="introduction" |
| | | label={intl.formatMessage({ id: 'common.introduction', defaultMessage: "个人简介" })} |
| | | rules={[ |
| | | { |
| | | required: false, |
| | | }, |
| | | ]} |
| | | /> |
| | | </ProForm> |
| | | </div> |
| | | <div className={styles.right}> |
| | | <AvatarView avatar={getAvatarURL()} /> |
| | | </div> |
| | | </> |
| | | )} |
| | | </div> |
| | | ); |
| | | }; |
| | | |
| | | export default BaseView; |
| | | import {
|
| | | ProForm,
|
| | | ProFormText,
|
| | | ProFormTextArea,
|
| | | ProFormSelect,
|
| | | ProFormDigit
|
| | | } from '@ant-design/pro-components';
|
| | | import { Button, Input, message, Upload, Form } from 'antd';
|
| | | import { FormattedMessage, useIntl } from '@umijs/max';
|
| | | import React from 'react';
|
| | | import useStyles from './index.style';
|
| | | import Http from '@/utils/http';
|
| | |
|
| | | import defaultAvat from '/public/img/defaultAva.jpg'
|
| | |
|
| | | const handleUpdate = async (val, intl) => {
|
| | | const hide = message.loading(intl.formatMessage({ id: 'page.updating', defaultMessage: '正在更新' }));
|
| | | try {
|
| | | const resp = await Http.doPost('api/user/update', val);
|
| | | if (resp.code === 200) {
|
| | | message.success(intl.formatMessage({ id: 'page.update.success', defaultMessage: '更新成功' }));
|
| | | return true;
|
| | | } else {
|
| | | message.error(resp.msg);
|
| | | return false;
|
| | | }
|
| | | } catch (error) {
|
| | | message.error(intl.formatMessage({ id: 'page.update.fail', defaultMessage: '更新失败请重试!' }));
|
| | | return false;
|
| | | } finally {
|
| | | hide();
|
| | | }
|
| | | };
|
| | |
|
| | | const BaseView = () => {
|
| | | const intl = useIntl();
|
| | | const { styles } = useStyles();
|
| | | const [loading, setLoading] = React.useState(false);
|
| | | const [currentUser, setCurrentUser] = React.useState({});
|
| | | const [form] = Form.useForm();
|
| | |
|
| | | const AvatarView = ({ avatar }) => (
|
| | | <>
|
| | | <div className={styles.avatar_title}>头像</div>
|
| | | <div className={styles.avatar}>
|
| | | <img src={avatar} alt="avatar" />
|
| | | </div>
|
| | | <Upload showUploadList={false}>
|
| | | <div className={styles.button_view}>
|
| | | {/* <Button>
|
| | | <UploadOutlined />
|
| | | 更换头像
|
| | | </Button> */}
|
| | | </div>
|
| | | </Upload>
|
| | | </>
|
| | | );
|
| | |
|
| | | const queryCurrent = () => {
|
| | | setLoading(true);
|
| | | Http.doGetPromise('api/auth/user', {}, (res) => {
|
| | | setLoading(false);
|
| | | setCurrentUser(res.data);
|
| | | }).catch((err) => {
|
| | | console.error(err);
|
| | | setLoading(false);
|
| | | })
|
| | | }
|
| | |
|
| | | React.useEffect(() => {
|
| | | queryCurrent();
|
| | | }, []);
|
| | |
|
| | | const getAvatarURL = () => {
|
| | | if (currentUser) {
|
| | | if (currentUser.avatar) {
|
| | | return currentUser.avatar;
|
| | | }
|
| | | }
|
| | | return defaultAvat;
|
| | | };
|
| | |
|
| | | const handleFinish = async (values) => {
|
| | | handleUpdate(values, intl);
|
| | | };
|
| | |
|
| | | return (
|
| | | <div className={styles.baseView}>
|
| | | {loading ? null : (
|
| | | <>
|
| | | <div className={styles.left}>
|
| | | <ProForm
|
| | | form={form}
|
| | | layout="vertical"
|
| | | onFinish={handleFinish}
|
| | | submitter={{
|
| | | searchConfig: {
|
| | | submitText: intl.formatMessage({ id: 'personal.base.button.name', defaultMessage: '更新基本信息' }),
|
| | | },
|
| | | render: (_, dom) => dom[1],
|
| | | }}
|
| | | initialValues={{
|
| | | ...currentUser,
|
| | | }}
|
| | | hideRequiredMark
|
| | | >
|
| | | <ProFormDigit
|
| | | name="id"
|
| | | disabled
|
| | | hidden={true}
|
| | | />
|
| | | <ProFormText
|
| | | width="md"
|
| | | name="username"
|
| | | label={intl.formatMessage({ id: 'common.username', defaultMessage: "账号" })}
|
| | | disabled
|
| | | rules={[
|
| | | {
|
| | | required: true,
|
| | | },
|
| | | ]}
|
| | | />
|
| | | <ProFormText
|
| | | width="md"
|
| | | name="nickname"
|
| | | label={intl.formatMessage({ id: 'common.nickname', defaultMessage: "名称" })}
|
| | | rules={[
|
| | | {
|
| | | required: true,
|
| | | },
|
| | | ]}
|
| | | />
|
| | | <ProFormSelect
|
| | | width="md"
|
| | | name="sex"
|
| | | label={intl.formatMessage({ id: 'common.sex', defaultMessage: "性别" })}
|
| | | colProps={{ md: 12, xl: 12 }}
|
| | | options={[
|
| | | { label: intl.formatMessage({ id: 'common.undefined', defaultMessage: "未知" }), value: 0 },
|
| | | { label: intl.formatMessage({ id: 'common.male', defaultMessage: '男' }), value: 1 },
|
| | | { label: intl.formatMessage({ id: 'common.female', defaultMessage: '女' }), value: 2 },
|
| | | ]}
|
| | | />
|
| | | <ProFormText
|
| | | width="md"
|
| | | name="phone"
|
| | | label={intl.formatMessage({ id: 'common.phone', defaultMessage: "手机号" })}
|
| | | rules={[
|
| | | {
|
| | | required: false,
|
| | | },
|
| | | ]}
|
| | | />
|
| | | <ProFormText
|
| | | width="md"
|
| | | name="email"
|
| | | label={intl.formatMessage({ id: 'common.email', defaultMessage: "邮箱" })}
|
| | | rules={[
|
| | | {
|
| | | required: false,
|
| | | },
|
| | | ]}
|
| | | />
|
| | | <ProFormText
|
| | | width="md"
|
| | | name="realName"
|
| | | label={intl.formatMessage({ id: 'common.realname', defaultMessage: "真实姓名" })}
|
| | | rules={[
|
| | | {
|
| | | required: false,
|
| | | },
|
| | | ]}
|
| | | />
|
| | | <ProFormText
|
| | | width="md"
|
| | | name="idCard"
|
| | | label={intl.formatMessage({ id: 'common.idcard', defaultMessage: "身份证号" })}
|
| | | rules={[
|
| | | {
|
| | | required: false,
|
| | | },
|
| | | ]}
|
| | | />
|
| | | <ProFormTextArea
|
| | | name="introduction"
|
| | | label={intl.formatMessage({ id: 'common.introduction', defaultMessage: "个人简介" })}
|
| | | rules={[
|
| | | {
|
| | | required: false,
|
| | | },
|
| | | ]}
|
| | | />
|
| | | </ProForm>
|
| | | </div>
|
| | | <div className={styles.right}>
|
| | | <AvatarView avatar={getAvatarURL()} />
|
| | | </div>
|
| | | </>
|
| | | )}
|
| | | </div>
|
| | | );
|
| | | };
|
| | |
|
| | | export default BaseView;
|