| | |
| | | |
| | | const UserEdit = () => { |
| | | const translate = useTranslate(); |
| | | const record = useRecordContext(); |
| | | |
| | | return ( |
| | | <SimpleForm |
| | | shouldUnregister |
| | | warnWhenUnsavedChanges |
| | | toolbar={<FormToolbar />} |
| | | mode="onTouched" |
| | | defaultValues={{}} |
| | | validate={(values) => { |
| | | const errors = {}; |
| | | if (!values.username) { |
| | | errors.username = 'ra.validation.required'; |
| | | } |
| | | if (!values.nickname) { |
| | | errors.nickname = 'ra.validation.required'; |
| | | } |
| | | if (!values.userRoleIds) { |
| | | errors.userRoleIds = 'ra.validation.required'; |
| | | } |
| | | if (!values.email) { |
| | | } else { |
| | | const error = email()(values.email); |
| | | if (error) { |
| | | errors.email = error; |
| | | } |
| | | } |
| | | if (!values.password) { |
| | | errors.password = 'ra.validation.required'; |
| | | } |
| | | if (values.password && values.password !== values.confirmPassword) { |
| | | errors.confirmPassword = 'validate.pwdMisMatch'; |
| | | } |
| | | console.log(values); |
| | | |
| | | return errors; |
| | | }} |
| | | > |
| | | <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}> |
| | | <Grid item xs={12} md={8}> |
| | | <Typography variant="h6" gutterBottom> |
| | | {translate('common.edit.title.main')} |
| | | </Typography> |
| | | <Stack direction='row' gap={2}> |
| | | <TextInput |
| | | label="table.field.user.username" |
| | | source="username" |
| | | parse={v => v} |
| | | autoFocus |
| | | validate={required()} |
| | | /> |
| | | <TextInput |
| | | label="table.field.user.nickname" |
| | | source="nickname" |
| | | parse={v => v} |
| | | /> |
| | | </Stack> |
| | | <Stack direction='row' gap={2}> |
| | | <SelectInput |
| | | label="table.field.user.sex" |
| | | source="sex" |
| | | choices={[ |
| | | { id: 0, name: '未知' }, |
| | | { id: 1, name: '男' }, |
| | | { id: 2, name: '女' }, |
| | | ]} |
| | | /> |
| | | <TextInput |
| | | label="table.field.user.code" |
| | | source="code" |
| | | parse={v => v} |
| | | /> |
| | | </Stack> |
| | | <Stack direction='row' gap={2}> |
| | | <TextInput |
| | | label="table.field.user.phone" |
| | | source="phone" |
| | | parse={v => v} |
| | | /> |
| | | <TextInput |
| | | label="table.field.user.email" |
| | | source="email" |
| | | parse={v => v} |
| | | /> |
| | | </Stack> |
| | | <Stack direction='row' gap={2}> |
| | | <TextInput |
| | | label="table.field.user.realName" |
| | | source="realName" |
| | | parse={v => v} |
| | | /> |
| | | <TextInput |
| | | label="table.field.user.idCard" |
| | | source="idCard" |
| | | parse={v => v} |
| | | /> |
| | | </Stack> |
| | | <Stack direction='row' gap={2}> |
| | | <TextInput |
| | | label="table.field.user.birthday" |
| | | source="birthday" |
| | | parse={v => v} |
| | | /> |
| | | <TextInput |
| | | label="table.field.user.introduction" |
| | | multiline |
| | | source="introduction" |
| | | parse={v => v} |
| | | /> |
| | | </Stack> |
| | | <Typography variant="h6" gutterBottom> |
| | | {translate('common.edit.title.changePwd')} |
| | | </Typography> |
| | | <Stack direction='row' gap={2}> |
| | | <PasswordInput |
| | | label="table.field.user.password" |
| | | source="password" |
| | | /> |
| | | <PasswordInput |
| | | label="table.field.user.confirmPwd" |
| | | source="confirmPassword" |
| | | value={record?.password} |
| | | /> |
| | | </Stack> |
| | | </Grid> |
| | | <Grid item xs={12} md={4}> |
| | | <Typography variant="h6" gutterBottom> |
| | | {translate('common.edit.title.common')} |
| | | </Typography> |
| | | <Stack direction='row' gap={2}> |
| | | <TreeSelectInput |
| | | label="table.field.user.deptId" |
| | | value={record?.deptId} |
| | | resource={'dept'} |
| | | source="deptId" |
| | | /> |
| | | </Stack> |
| | | <Stack direction='row' gap={2}> |
| | | <RolesSelect |
| | | label="table.field.user.role" |
| | | source="userRoleIds" |
| | | /> |
| | | </Stack> |
| | | <Stack direction='row' gap={2}> |
| | | <StatusSelectInput /> |
| | | </Stack> |
| | | <Box mt="2em" /> |
| | | <MemoInput /> |
| | | </Grid> |
| | | </Grid> |
| | | </SimpleForm> |
| | | ) |
| | | } |
| | | |
| | | export default function () { |
| | | return ( |
| | | <Edit |
| | | redirect="list" |
| | | mutationMode={EDIT_MODE} |
| | | actions={<CustomerTopToolBar />} |
| | | aside={<EditBaseAside />} |
| | | transform={(data) => { |
| | | return { |
| | | ...data, |
| | | roleIds: data['userRoleIds'] || [] |
| | | }; |
| | | }} |
| | | > |
| | | <SimpleForm |
| | | shouldUnregister |
| | | warnWhenUnsavedChanges |
| | | toolbar={<FormToolbar />} |
| | | mode="onTouched" |
| | | defaultValues={{}} |
| | | validate={(values) => { |
| | | const errors = {}; |
| | | if (!values.username) { |
| | | errors.username = 'ra.validation.required'; |
| | | } |
| | | if (!values.nickname) { |
| | | errors.nickname = 'ra.validation.required'; |
| | | } |
| | | if (!values.roleIds) { |
| | | errors.roleIds = 'ra.validation.required'; |
| | | } |
| | | if (!values.email) { |
| | | } else { |
| | | const error = email()(values.email); |
| | | if (error) { |
| | | errors.email = error; |
| | | } |
| | | } |
| | | if (!values.password) { |
| | | errors.password = 'ra.validation.required'; |
| | | } |
| | | if (values.password && values.password !== values.confirmPassword) { |
| | | errors.confirmPassword = 'validate.pwdMisMatch'; |
| | | } |
| | | return errors; |
| | | }} |
| | | > |
| | | <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}> |
| | | <Grid item xs={12} md={8}> |
| | | <Typography variant="h6" gutterBottom> |
| | | {translate('common.edit.title.main')} |
| | | </Typography> |
| | | <Stack direction='row' gap={2}> |
| | | <TextInput |
| | | label="table.field.user.username" |
| | | source="username" |
| | | parse={v => v} |
| | | autoFocus |
| | | validate={required()} |
| | | /> |
| | | <TextInput |
| | | label="table.field.user.nickname" |
| | | source="nickname" |
| | | parse={v => v} |
| | | /> |
| | | </Stack> |
| | | <Stack direction='row' gap={2}> |
| | | <SelectInput |
| | | label="table.field.user.sex" |
| | | source="sex" |
| | | choices={[ |
| | | { id: 0, name: '未知' }, |
| | | { id: 1, name: '男' }, |
| | | { id: 2, name: '女' }, |
| | | ]} |
| | | /> |
| | | <TextInput |
| | | label="table.field.user.code" |
| | | source="code" |
| | | parse={v => v} |
| | | /> |
| | | </Stack> |
| | | <Stack direction='row' gap={2}> |
| | | <TextInput |
| | | label="table.field.user.phone" |
| | | source="phone" |
| | | parse={v => v} |
| | | /> |
| | | <TextInput |
| | | label="table.field.user.email" |
| | | source="email" |
| | | parse={v => v} |
| | | /> |
| | | </Stack> |
| | | <Stack direction='row' gap={2}> |
| | | <TextInput |
| | | label="table.field.user.realName" |
| | | source="realName" |
| | | parse={v => v} |
| | | /> |
| | | <TextInput |
| | | label="table.field.user.idCard" |
| | | source="idCard" |
| | | parse={v => v} |
| | | /> |
| | | </Stack> |
| | | <Stack direction='row' gap={2}> |
| | | <TextInput |
| | | label="table.field.user.birthday" |
| | | source="birthday" |
| | | parse={v => v} |
| | | /> |
| | | <TextInput |
| | | label="table.field.user.introduction" |
| | | multiline |
| | | source="introduction" |
| | | parse={v => v} |
| | | /> |
| | | </Stack> |
| | | <Typography variant="h6" gutterBottom> |
| | | {translate('common.edit.title.changePwd')} |
| | | </Typography> |
| | | <Stack direction='row' gap={2}> |
| | | <PasswordInput |
| | | label="table.field.user.password" |
| | | source="password" |
| | | /> |
| | | <PasswordInput |
| | | label="table.field.user.confirmPwd" |
| | | source="confirmPassword" |
| | | /> |
| | | </Stack> |
| | | </Grid> |
| | | <Grid item xs={12} md={4}> |
| | | <Typography variant="h6" gutterBottom> |
| | | {translate('common.edit.title.common')} |
| | | </Typography> |
| | | <Stack direction='row' gap={2}> |
| | | <TreeSelectInput |
| | | label="table.field.user.deptId" |
| | | value={record?.deptId} |
| | | /> |
| | | <ReferenceInput |
| | | source="deptId" |
| | | reference="dept" |
| | | > |
| | | <AutocompleteInput |
| | | label="table.field.user.deptId" |
| | | optionText="name" |
| | | /> |
| | | </ReferenceInput> |
| | | </Stack> |
| | | <Stack direction='row' gap={2}> |
| | | <RolesSelect |
| | | label="table.field.user.role" |
| | | source="roleIds" |
| | | /> |
| | | </Stack> |
| | | <Stack direction='row' gap={2}> |
| | | <StatusSelectInput /> |
| | | </Stack> |
| | | <Box mt="2em" /> |
| | | <MemoInput /> |
| | | </Grid> |
| | | </Grid> |
| | | </SimpleForm> |
| | | </Edit > |
| | | <UserEdit /> |
| | | </Edit> |
| | | ) |
| | | } |
| | | |
| | | export default UserEdit; |
| | | }; |