import React, { useEffect, useState } from 'react'; import type { UploadProps } from 'antd'; import { Cascader } from 'antd'; import { Checkbox, Col, Form, Input, message, Modal, Row, Select, Upload } from 'antd'; import { createUser, editUser, queryRoleUser, queryTreeList } from '@/services/setting'; import { LoadingOutlined, PlusOutlined } from '@ant-design/icons'; import md5 from 'js-md5'; import { queryRoleList } from '@/services/role'; import { infoQuery } from '@/services/ReportingManagement'; interface userEditPros { visible: boolean; editCallback: () => void; detailData: any; } /** * 用户管理编辑 * @param props * @constructor */ const Edit: React.FC = (props) => { const { visible, editCallback, detailData } = props; const [form] = Form.useForm(); const uploadHeaders = { Authorization: `${localStorage.getItem('token')}` }; const [fileUrl, setFileUrl]: any = useState( detailData && detailData.photo ? detailData.photo : '', ); const [loading, setLoading] = useState(false); const [roleList, setRoleList] = useState([]); const [selectList, setSelectList] = useState([]); const [areaList, setAreaList] = useState([]); const [isCurrent, setIsCurrent] = useState(false); const getBase64 = (img: any) => { const reader = new FileReader(); reader.readAsDataURL(img); reader.onloadend = () => { const url = reader.result; setFileUrl(url); }; }; useEffect(() => { // 编辑时 if (detailData) { infoQuery().then((res) => { if (res?.code === 0) { // 判断当前编辑用户数据和登录账号是否为同一个 // 同一个则直接显示用户数据中user_role(角色名称)和parent_name(所属名称) if (res.data.record_id === detailData.record_id) { setIsCurrent(true); const user_role_list: any = []; const obj = { name: '', record_id: '', }; detailData.user_role.forEach((el: { role_id: string; role_name: string }) => { obj.name = el.role_name; obj.record_id = el.role_id; user_role_list.push(obj); }); setRoleList(user_role_list); } else { // 角色列表 queryRoleList({ q: 'list' }).then((item) => { if (item.code === 0) { setRoleList(item.data.list); } }); } } }); // 编辑时,所属地区根据角色id回显数据 const data = [...detailData?.user_role].sort((a: any, b: any) => b.level - a.level); if (data && data.length) { const param = { q: 'list', role_id: data[0].role_id, user_id: detailData.record_id, }; // 根据角色id请求用户列表接口 保证所属名称字段编辑时回显 queryRoleUser(param).then((item) => { if (item.code === 0) { setSelectList(item?.data || []); } }); } } else { // 新增 // 角色列表 queryRoleList({ q: 'list' }).then((res) => { if (res.code === 0) { setRoleList(res.data.list); } }); } // 地区列表 queryTreeList({ q: 'tree' }).then((res) => { if (res && res.code === 0) { setAreaList(res.data.list || []); } }); }, []); const handleLevel = (values: any) => { const data: any = roleList.filter((option: { record_id: string }) => values.includes(option.record_id), ); return [...data].sort((a: any, b: any) => b.level - a.level); }; // 角色选择 const onRoleChange = (selectedValues: any) => { // 切换角色时,所属名称要清空重新选择 form.setFieldsValue({ parent_id: '' }); const sortedData = handleLevel(selectedValues); if (sortedData && sortedData.length > 0) { const maxLevelObject = sortedData[0]; const param = { q: 'list', role_id: maxLevelObject.record_id, }; queryRoleUser(param).then((res) => { if (res.code === 0) { setSelectList(res?.data || []); } }); } else { setSelectList([]); } }; const filesProps: UploadProps = { maxCount: 1, action: '/web/v1/files', headers: uploadHeaders, listType: 'picture-card', showUploadList: false, onChange(info) { if (info.file.status === 'uploading') { setLoading(true); return; } if (info.file.status === 'done') { setLoading(false); getBase64(info.file.originFileObj); } else if (info.file.status === 'error') { setLoading(false); message.error('文件上传失败'); } }, }; /** * 确定 */ const onOk = () => { form.validateFields().then((values) => { if (values) { const data = { ...values }; if (values?.photo) { data.photo = values?.photo?.file?.response?.data?.url; } if (values?.password) { data.password = md5(values.password); } if (values?.role_id) { const user_role: { role_id: any }[] = []; values?.role_id.forEach((el: any) => { user_role.push({ role_id: el }); }); data.user_role = user_role; delete data.role_id; } if (values?.area) { data.province = values.area[0]; data.city = values.area[1]; data.district = values.area[2]; delete data.area; } if (values?.parent_id) { data.parent_id = values?.parent_id; } if (detailData) { data.record_id = detailData.record_id; // 编辑 editUser(data) .then((res) => { if (res.code === 0) { message.success('编辑成功'); editCallback(); } else { message.error(res?.message); editCallback(); } }) .catch((e) => { message.error(e?.message); editCallback(); }); } else { // 新增 createUser(data) .then((res) => { if (res.code === 0) { message.success('保存成功'); editCallback(); } else { message.error(res?.message); editCallback(); } }) .catch((e) => { message.error(e?.message); editCallback(); }); } } }); }; /** * 取消 */ const onCancel = () => { editCallback(); }; const formItemLayout = { labelCol: { span: 6, }, wrapperCol: { span: 16, }, }; const formItemLayoutTwo = { labelCol: { span: 3, }, wrapperCol: { span: 21, }, }; const uploadButton = (
{loading ? : }
上传
); return (
item.role_id) : [] } > ({ label: option.name, value: option.record_id, record_id: option.record_id, }))} disabled={isCurrent} onChange={onRoleChange} /> {fileUrl === '' ? ( uploadButton ) : ( data )}
); }; export default Edit;