| | |
| | | AutocompleteInput, |
| | | Toolbar, |
| | | required, |
| | | useDataProvider, |
| | | PasswordInput, |
| | | useNotify, |
| | | Form, |
| | | useCreateController, |
| | | email, |
| | | } from 'react-admin'; |
| | | import { |
| | | Dialog, |
| | |
| | | import StatusSelectInput from "../components/StatusSelectInput"; |
| | | import MemoInput from "../components/MemoInput"; |
| | | import TreeSelectInput from "../components/TreeSelectInput"; |
| | | import RolesSelect from './RolesSelect' |
| | | |
| | | const UserCreate = (props) => { |
| | | const { open, setOpen } = props; |
| | |
| | | disableRestoreFocus |
| | | maxWidth="md" // 'xs' | 'sm' | 'md' | 'lg' | 'xl' |
| | | > |
| | | <Form> |
| | | <Form 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 && values.password !== values.confirmPassword) { |
| | | errors.confirmPassword = 'resources.customers.errors.password_mismatch'; |
| | | } |
| | | return errors; |
| | | }}> |
| | | <DialogTitle id="form-dialog-title" sx={{ |
| | | position: 'sticky', |
| | | top: 0, |
| | |
| | | /> |
| | | </Grid> |
| | | <Grid item xs={6} display="flex" gap={1}> |
| | | <TextInput |
| | | label="table.field.user.code" |
| | | source="code" |
| | | parse={v => v} |
| | | <TreeSelectInput |
| | | resource="dept" |
| | | label="table.field.user.deptId" |
| | | source="deptId" |
| | | /> |
| | | </Grid> |
| | | <Grid item xs={6} display="flex" gap={1}> |
| | | <RolesSelect |
| | | label="table.field.user.role" |
| | | source="roleIds" |
| | | /> |
| | | </Grid> |
| | | <Grid item xs={6} display="flex" gap={1}> |
| | | <PasswordInput source="password" /> |
| | | </Grid> |
| | | <Grid item xs={6} display="flex" gap={1}> |
| | | <PasswordInput source="confirmPassword" /> |
| | | </Grid> |
| | | <Grid item xs={6} display="flex" gap={1}> |
| | | <SelectInput |
| | |
| | | { id: 1, name: '男' }, |
| | | { id: 2, name: '女' }, |
| | | ]} |
| | | /> |
| | | </Grid> |
| | | <Grid item xs={6} display="flex" gap={1}> |
| | | <TextInput |
| | | label="table.field.user.code" |
| | | source="code" |
| | | parse={v => v} |
| | | /> |
| | | </Grid> |
| | | <Grid item xs={6} display="flex" gap={1}> |
| | |
| | | /> |
| | | </Grid> |
| | | <Grid item xs={6} display="flex" gap={1}> |
| | | <TreeSelectInput |
| | | resource="dept" |
| | | label="table.field.user.deptId" |
| | | source="deptId" |
| | | /> |
| | | </Grid> |
| | | <Grid item xs={6} display="flex" gap={1}> |
| | | <TextInput |
| | | label="table.field.user.realName" |
| | | source="realName" |
| | |
| | | source="idCard" |
| | | parse={v => v} |
| | | /> |
| | | </Grid> |
| | | <Grid item xs={6} display="flex" gap={1}> |
| | | <TextInput |
| | | label="table.field.user.birthday" |
| | | source="birthday" |
| | | parse={v => v} |
| | | /> |
| | | </Grid> |
| | | <Grid item xs={6} display="flex" gap={1}> |
| | | <TextInput |
| | | label="table.field.user.introduction" |
| | | source="introduction" |
| | | parse={v => v} |
| | | /> |
| | | </Grid> |
| | | |
| | | <Grid item xs={6} display="flex" gap={1}> |
| | | <StatusSelectInput /> |
| | | </Grid> |
| | | <Grid item xs={12} display="flex" gap={1}> |
| | | <Stack direction="column" spacing={1} width={'100%'}> |