blob: 02aedc591e0dd95f536b08b952538c39d6570758 [file] [log] [blame]
import React from 'react';
import { UploadOutlined } from '@ant-design/icons';
import { Button, Input, Upload, message } from 'antd';
import ProForm, {
ProFormDependency,
ProFormFieldSet,
ProFormSelect,
ProFormText,
ProFormTextArea,
} from '@ant-design/pro-form';
import { useRequest } from 'umi';
import { queryCurrent } from '../service';
import { queryProvince, queryCity } from '../service';
import styles from './BaseView.less';
const validatorPhone = (rule, value, callback) => {
if (!value[0]) {
callback('Please input your area code!');
}
if (!value[1]) {
callback('Please input your phone number!');
}
callback();
}; // 头像组件 方便以后独立,增加裁剪之类的功能
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 BaseView = () => {
const { data: currentUser, loading } = useRequest(() => {
return queryCurrent();
});
const getAvatarURL = () => {
if (currentUser) {
if (currentUser.avatar) {
return currentUser.avatar;
}
const url = 'https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png';
return url;
}
return '';
};
const handleFinish = async () => {
message.success('更新基本信息成功');
};
return (
<div className={styles.baseView}>
{loading ? null : (
<>
<div className={styles.left}>
<ProForm
layout="vertical"
onFinish={handleFinish}
submitter={{
resetButtonProps: {
style: {
display: 'none',
},
},
submitButtonProps: {
children: '更新基本信息',
},
}}
initialValues={{ ...currentUser, phone: currentUser?.phone.split('-') }}
hideRequiredMark
>
<ProFormText
width="md"
name="email"
label="邮箱"
rules={[
{
required: true,
message: '请输入您的邮箱!',
},
]}
/>
<ProFormText
width="md"
name="name"
label="昵称"
rules={[
{
required: true,
message: '请输入您的昵称!',
},
]}
/>
<ProFormTextArea
name="profile"
label="个人简介"
rules={[
{
required: true,
message: '请输入个人简介!',
},
]}
placeholder="个人简介"
/>
<ProFormSelect
width="sm"
name="country"
label="国家/地区"
rules={[
{
required: true,
message: '请输入您的国家或地区!',
},
]}
options={[
{
label: '中国',
value: 'China',
},
]}
/>
<ProForm.Group title="所在省市" size={8}>
<ProFormSelect
rules={[
{
required: true,
message: '请输入您的所在省!',
},
]}
width="sm"
fieldProps={{
labelInValue: true,
}}
name="province"
className={styles.item}
request={async () => {
return queryProvince().then(({ data }) => {
return data.map((item) => {
return {
label: item.name,
value: item.id,
};
});
});
}}
/>
<ProFormDependency name={['province']}>
{({ province }) => {
return (
<ProFormSelect
params={{
key: province?.value,
}}
name="city"
width="sm"
rules={[
{
required: true,
message: '请输入您的所在城市!',
},
]}
disabled={!province}
className={styles.item}
request={async () => {
if (!province?.key) {
return [];
}
return queryCity(province.key || '').then(({ data }) => {
return data.map((item) => {
return {
label: item.name,
value: item.id,
};
});
});
}}
/>
);
}}
</ProFormDependency>
</ProForm.Group>
<ProFormText
width="md"
name="address"
label="街道地址"
rules={[
{
required: true,
message: '请输入您的街道地址!',
},
]}
/>
<ProFormFieldSet
name="phone"
label="联系电话"
rules={[
{
required: true,
message: '请输入您的联系电话!',
},
{
validator: validatorPhone,
},
]}
>
<Input className={styles.area_code} />
<Input className={styles.phone_number} />
</ProFormFieldSet>
</ProForm>
</div>
<div className={styles.right}>
<AvatarView avatar={getAvatarURL()} />
</div>
</>
)}
</div>
);
};
export default BaseView;