import { PageContainer } from '@ant-design/pro-layout'; import { Avatar, Button, Card, Col, Descriptions, Divider, message, Popconfirm, Row, Upload, } from 'antd'; import { useEffect, useState } from 'react'; import styles from './index.less'; import { UploadProps } from 'antd/lib/upload'; import Token from '@/utils/token'; import SystemConst from '@/utils/const'; import { EditOutlined, LockOutlined, UploadOutlined, UserOutlined } from '@ant-design/icons'; import InfoEdit from './edit/infoEdit'; import PasswordEdit from './edit/passwordEdit'; import Service from '@/pages/account/Center/service'; import moment from 'moment'; import { useModel } from 'umi'; import usePermissions from '@/hooks/permission'; import { Ellipsis, PermissionButton } from '@/components'; import { isNoCommunity, onlyMessage } from '@/utils/util'; import AccountInit from '@/pages/home/init/accountInit'; export const service = new Service(); const Center = () => { const { initialState, setInitialState } = useModel('@@initialState'); const { permission: userPermission } = usePermissions('system/User'); const [data, setData] = useState(); const [imageUrl, setImageUrl] = useState(''); const [infos, setInfos] = useState(false); const [password, setPassword] = useState(false); const [bindList, setBindList] = useState([]); const [apiUser, setApiUser] = useState(); const iconMap = new Map(); iconMap.set('dingtalk-ent-app', require('/public/images/notice/dingtalk.png')); iconMap.set('wechat-webapp', require('/public/images/notice/wechat.png')); iconMap.set('internal-standalone', require('/public/images/apply/provider1.png')); iconMap.set('third-party', require('/public/images/apply/provider5.png')); // const nameMap = new Map(); // nameMap.set('dingtalk-ent-app', '钉钉'); // nameMap.set('wechat-webapp', '微信'); const bGroundMap = new Map(); bGroundMap.set('dingtalk-ent-app', require('/public/images/notice/dingtalk-background.png')); bGroundMap.set('wechat-webapp', require('/public/images/notice/wechat-background.png')); const getDetail = () => { service.getUserDetail().subscribe((res) => { setData(res.result); setImageUrl(res.result.avatar); }); }; const getApiUser = async () => { const res = await service.queryCurrent(); if (res.status === 200) { const isApiUser = res.result.dimensions.find( (item: any) => item.type === 'api-client' || item.type.id === 'api-client', ); setApiUser(isApiUser); } }; const uploadProps: UploadProps = { showUploadList: false, accept: 'image/jpeg,image/png', action: `/${SystemConst.API_BASE}/file/static`, headers: { 'X-Access-Token': Token.get(), }, beforeUpload(file) { const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png'; if (!isJpgOrPng) { message.error('请上传.png.jpg格式的文件'); } const isSize = file.size / 1024 / 1024 < 4; if (!isSize) { message.error(`图片大小必须小于4M`); } return isJpgOrPng && isSize; }, onChange(info) { if (info.file.status === 'uploading') { // setLoading(true); } if (info.file.status === 'done') { setImageUrl(info.file.response.result); service .saveUserDetail({ name: data.name, avatar: info.file.response.result, }) .subscribe((res) => { if (res.status === 200) { setImageUrl(info.file.response.result); getDetail(); onlyMessage('上传成功'); } }); // setLoading(false); } }, }; const saveInfo = (parms: UserDetail) => { service.saveUserDetail(parms).subscribe((res) => { if (res.status === 200) { onlyMessage('保存成功'); getDetail(); setInfos(false); } else { onlyMessage('保存失败', 'error'); } }); }; const savePassword = (parms: { oldPassword: string; newPassword: string }) => { service.savePassWord(parms).subscribe((res) => { if (res.status === 200) { onlyMessage('保存成功'); setPassword(false); } }); }; const getBindInfo = () => { service.getSsoBinds().then((res) => { if (res.status === 200) { setBindList(res.result); } }); }; const unBind = (appId: string) => { service.unbind(appId).then((res) => { if (res.status === 200) { onlyMessage('解绑成功'); getBindInfo(); } }); }; useEffect(() => { getDetail(); getApiUser(); if (isNoCommunity) { getBindInfo(); } }, []); useEffect(() => { if (data?.name) { const item = { ...initialState?.currentUser?.user, name: data.name, avatar: data.avatar, }; setInitialState({ ...initialState, currentUser: { ...initialState?.currentUser, user: item, }, }); } }, [data]); return (
{data?.avatar ? ( ) : ( } /> )}
{data?.username} {moment(data?.createTime).format('YYYY-MM-DD HH:mm:ss')} {data?.telephone || '-'} {data?.name} {data?.roleList[0]?.name || '-'} {data?.orgList[0]?.name || '-'} {data?.email || '-'}
{ setInfos(true); }} />
修改密码 } extra={ <> { setPassword(true); }} isPermission={userPermission.update} > } >
安全性高的密码可以使帐号更安全。建议您定期更换密码,设置一个包含字母,符号或数字中至少两项且长度超过8位的密码
{isNoCommunity && ( 绑定三方账号 } > {bindList.map((item: any) => (
{item.bound ? (
绑定名:{item.others.name}
绑定时间: {moment(item.bindTime).format('YYYY-MM-DD HH:mm:ss')}
) : (
)}
{item.bound ? ( { unBind(item.id); }} > ) : ( )}
))}
)} {!apiUser && ( 首页视图 } > , )} {infos && ( { saveInfo(item); }} close={() => { setInfos(false); }} /> )} {password && ( { savePassword(item); }} visible={password} close={() => { setPassword(false); }} /> )}
); }; export default Center;