blob: 4028e1125d9f0839f9829502f3627cb638909594 [file] [log] [blame]
import {
ClusterOutlined,
MailOutlined,
TeamOutlined,
UserOutlined,
MobileOutlined,
ManOutlined,
} from '@ant-design/icons';
import { Card, Col, Divider, List, Row } from 'antd';
import React, { useState } from 'react';
import styles from './Center.less';
import BaseInfo from './components/BaseInfo';
import ResetPassword from './components/ResetPassword';
import AvatarCropper from './components/AvatarCropper';
import { useRequest } from '@umijs/max';
import { getUserInfo } from '@/services/session';
import { getUserRateInfo } from '@/services/system/user';
import { PageLoading } from '@ant-design/pro-components';
const operationTabList = [
{
key: 'base',
tab: (
<span>
基本资料
</span>
),
},
{
key: 'password',
tab: (
<span>
重置密码
</span>
),
},
];
export type tabKeyType = 'base' | 'password';
const Center: React.FC = () => {
const [tabKey, setTabKey] = useState<tabKeyType>('base');
const [cropperModalOpen, setCropperModalOpen] = useState<boolean>(false);
// 获取用户信息
const { data: userInfo, loading } = useRequest(async () => {
return { data: await getUserInfo() };
});
const { data: userRateInfo } = useRequest(async () => {
return { data: await getUserRateInfo() };
});
if (loading) {
return <div>loading...</div>;
}
const currentUser = { ...userInfo?.user, ...userRateInfo?.data };
// 渲染用户信息
// @ts-ignore
const renderUserInfo = ({
userName,
phonenumber,
email,
sex,
dept,
uploadCount,
downloadCount,
rateCount,
score,
level,
}: Partial<API.CurrentUser>) => {
return (
<List>
<List.Item>
<div>
<UserOutlined style={{ marginRight: 8 }} />
用户名
</div>
<div>{userName}</div>
</List.Item>
<List.Item>
<div>
<ManOutlined style={{ marginRight: 8 }} />
性别
</div>
<div>{sex === '1' ? '女' : '男'}</div>
</List.Item>
<List.Item>
<div>
<MobileOutlined style={{ marginRight: 8 }} />
电话
</div>
<div>{phonenumber}</div>
</List.Item>
<List.Item>
<div>
<MailOutlined style={{ marginRight: 8 }} />
邮箱
</div>
<div>{email}</div>
</List.Item>
<List.Item>
<div>
<MailOutlined style={{ marginRight: 8 }} />
上传量
</div>
<div>{uploadCount}</div>
</List.Item>
<List.Item>
<div>
<MailOutlined style={{ marginRight: 8 }} />
下载量
</div>
<div>{downloadCount}</div>
</List.Item>
<List.Item>
<div>
<MailOutlined style={{ marginRight: 8 }} />
分享率
</div>
<div>{rateCount}</div>
</List.Item>
<List.Item>
<div>
<MailOutlined style={{ marginRight: 8 }} />
积分
</div>
<div>{score}</div>
</List.Item>
<List.Item>
<div>
<MailOutlined style={{ marginRight: 8 }} />
用户等级
</div>
<div>{level}</div>
</List.Item>
</List>
);
};
// 渲染tab切换
const renderChildrenByTabKey = (tabValue: tabKeyType) => {
if (tabValue === 'base') {
return <BaseInfo values={currentUser} />;
}
if (tabValue === 'password') {
return <ResetPassword />;
}
return null;
};
if (!currentUser) {
return <PageLoading />;
}
return (
<div>
<Row gutter={[16, 24]}>
<Col lg={8} md={24}>
<Card
title="个人信息"
bordered={false}
loading={loading}
>
{!loading && (
<div style={{ textAlign: "center" }}>
<div className={styles.avatarHolder} onClick={() => { setCropperModalOpen(true) }}>
<img alt="" src={currentUser.avatar} />
</div>
`` `````````````````````````````````1
{renderUserInfo(currentUser)}
<Divider dashed />
{/* <div className={styles.team}>
<div className={styles.teamTitle}>角色</div>
<Row gutter={36}>
{currentUser.roles &&
currentUser.roles.map((item: any) => (
<Col key={item.roleId} lg={24} xl={12}>
<TeamOutlined
style={{
marginRight: 8,
}}
/>
{item.roleName}
</Col>
))}
</Row>
</div> */}
</div>
)}
</Card>
</Col>
<Col lg={16} md={24}>
<Card
bordered={false}
tabList={operationTabList}
activeTabKey={tabKey}
onTabChange={(_tabKey: string) => {
setTabKey(_tabKey as tabKeyType);
}}
>
{renderChildrenByTabKey(tabKey)}
</Card>
</Col>
</Row>
<AvatarCropper
onFinished={() => {
setCropperModalOpen(false);
}}
open={cropperModalOpen}
data={currentUser.avatar}
/>
</div>
);
};
export default Center;