"use client"; import {UserDetailInfo} from "@/app/_modules/definies"; import {PageContainer, ProCard, ProDescriptions, ProForm, ProFormRadio, ProFormText,} from "@ant-design/pro-components"; import type {GetProp, TabsProps, UploadProps} from "antd"; import {App, Col, Divider, Flex, Row, Space, Tabs, Upload} from "antd"; import {fetchApi} from "@/app/_modules/func"; import {CalendarOutlined, MailOutlined, PhoneOutlined, UserOutlined,} from "@ant-design/icons"; import {faSitemap, faUsers} from "@fortawesome/free-solid-svg-icons"; import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; import {useRouter} from "@/node_modules/next/navigation"; import {useState} from "react"; import globalMessage from "@/app/_modules/globalMessage"; type FileType = Parameters>[0]; const getBase64 = (img: FileType, callback: (url: string) => void) => { const reader = new FileReader(); reader.addEventListener("load", () => callback(reader.result as string)); reader.readAsDataURL(img); }; //上传图片前校验 const beforeUpload = (file: FileType) => { const isJpgOrPng = file.type === "image/jpeg" || file.type === "image/png"; if (!isJpgOrPng) { globalMessage.error("只能上传 JPG/PNG 格式图片!"); } const isLt2M = file.size / 1024 / 1024 < 2; if (!isLt2M) { globalMessage.error("图片大小不能超过 2MB!"); } return isJpgOrPng && isLt2M; }; export default function Profile() { const { message } = App.useApp(); const [imageUrl, setImageUrl] = useState(); const { push } = useRouter(); const [user, setUser] = useState({} as UserDetailInfo); //获取用户profile const getProfile = async () => { const body = await fetchApi("/api/system/user/profile", push); if (body !== undefined) { const data = body.data; const userData: UserDetailInfo = { userName: data.userName, phonenumber: data.phonenumber, email: data.email, deptName: data.dept.deptName, postGroup: body.postGroup, roleName: data.roles[0].roleName, nickName: data.nickName, sex: data.sex, createTime: data.createTime, }; setUser(userData); setImageUrl( data.avatar === "" ? userData.sex === "1" ? "/avatar1.jpeg" : "/avatar0.jpeg" : "/api" + data.avatar ); return userData; } }; const handleChange: UploadProps["onChange"] = (info) => { if (info.file.status === "uploading") { return; } if (info.file.status === "done") { // Get this url from response in real world. getBase64(info.file.originFileObj as FileType, (url) => { setImageUrl(url); }); } }; //更新用户基本信息 const updateProfile = async (values: any) => { const body = await fetchApi("/api/system/user/profile", push, { method: "PUT", headers: { "Content-Type": "application/json", }, body: JSON.stringify(values), }); return body; }; //修改用户密码 const updatePassword = async (values: any) => { const params = { oldPassword: values.oldPassword, newPassword: values.newPassword, }; const body = await fetchApi( `/api/system/user/profile/updatePwd?${new URLSearchParams(params)}`, push, { method: "PUT", } ); return body; }; const uploadAvatar = async (options: any) => { const formData = new FormData(); formData.append("avatarfile", options.file); const body = await fetchApi("/api/system/user/profile/avatar", push, { method: "POST", body: formData, }); if (body.code == 200) { globalMessage.success("上传头像成功"); setImageUrl("/api" + body.imgUrl); } else { globalMessage.error(body.msg); } }; const executeUpdateProfile = async (values: any) => { const body = await updateProfile(values); if (body.code == 200) { globalMessage.success("修改成功"); } else { globalMessage.error(body.msg); } }; const executeUpdatePassword = async (values: any) => { const body = await updatePassword(values); if (body.code == 200) { globalMessage.success("修改成功"); } else { globalMessage.error(body.msg); } }; //定义的基本资料的tab页 const items: TabsProps["items"] = [ { key: "1", label: "基本资料", children: ( { return ( {doms} ); }, }} onFinish={executeUpdateProfile} request={getProfile} > ), }, { key: "2", label: "修改密码", children: ( labelCol={{ span: 6 }} wrapperCol={{ span: 14 }} layout="horizontal" submitter={{ render: (props, doms) => { return ( {doms} ); }, }} onFinish={executeUpdatePassword} params={{}} > ({ validator(_, value) { if (!value || getFieldValue("newPassword") === value) { return Promise.resolve(); } return Promise.reject(new Error("新密码两次输入不一致")); }, }), ]} /> ), }, ]; return (
{imageUrl && ( avatar )}
用户名 } > {user.userName} 手机号码 } > {user.phonenumber} 用户邮箱 } > {user.email} 所属部门 } > {user.deptName}/{user.postGroup} 所属角色 } > {user.roleName} 创建时间 } > {user.createTime}
); }