From 7f70cb15d035f0c233b9e62b9e43aa985317c908 Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期一, 04 十一月 2024 10:22:45 +0800 Subject: [PATCH] # --- zy-acs-flow/src/page/user/UserEdit.jsx | 324 ++++++++++++++++++++++++++++++----------------------- 1 files changed, 182 insertions(+), 142 deletions(-) diff --git a/zy-acs-flow/src/page/user/UserEdit.jsx b/zy-acs-flow/src/page/user/UserEdit.jsx index b236f19..b5b48b1 100644 --- a/zy-acs-flow/src/page/user/UserEdit.jsx +++ b/zy-acs-flow/src/page/user/UserEdit.jsx @@ -19,8 +19,10 @@ required, useRecordContext, DeleteButton, + PasswordInput, + email, } from 'react-admin'; -import { useWatch, useFormContext } from "react-hook-form"; +import { useFormContext } from 'react-hook-form'; import { Stack, Grid, Box, Typography } from '@mui/material'; import * as Common from '@/utils/common'; import { EDIT_MODE } from '@/config/setting'; @@ -28,9 +30,11 @@ import CustomerTopToolBar from "../components/EditTopToolBar"; import MemoInput from "../components/MemoInput"; import StatusSelectInput from "../components/StatusSelectInput"; +import RolesSelect from "./RolesSelect"; +import TreeSelectInput from "../components/TreeSelectInput"; const FormToolbar = () => { - const { getValues } = useFormContext(); + const { setValue, getValues } = useFormContext(); return ( <Toolbar sx={{ justifyContent: 'space-between' }}> @@ -40,154 +44,190 @@ ) } +const PasswordInputContainer = () => { + const translate = useTranslate(); + const { setValue } = useFormContext(); + const record = useRecordContext(); + + useEffect(() => { + setTimeout(() => { + if (record && record.password) { + setValue('password', ''); + } + }, 200) + }, [setValue, record]); + + return ( + <> + <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> + </> + ) +} + const UserEdit = () => { const translate = useTranslate(); + const record = useRecordContext(); + return ( + <SimpleForm + shouldUnregister + warnWhenUnsavedChanges + toolbar={<FormToolbar />} + mode="onTouched" + 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 && 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> + <PasswordInputContainer /> + </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) => { }} - > - <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()} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.user.password" - source="password" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.user.nickname" - source="nickname" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.user.avatar" - source="avatar" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.user.code" - source="code" - 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: '濂�' }, - ]} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.user.phone" - source="phone" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.user.email" - source="email" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <SelectInput - label="table.field.user.emailVerified" - source="emailVerified" - choices={[ - { id: 0, name: '鍚�' }, - { id: 1, name: '鏄�' }, - ]} - /> - </Stack> - <Stack direction='row' gap={2}> - <ReferenceInput - source="deptId" - reference="dept" - > - <AutocompleteInput - label="table.field.user.deptId" - optionText="name" - /> - </ReferenceInput> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.user.realName" - source="realName" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <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} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.user.introduction" - source="introduction" - parse={v => v} - /> - </Stack> - - </Grid> - <Grid item xs={12} md={4}> - <Typography variant="h6" gutterBottom> - {translate('common.edit.title.common')} - </Typography> - <StatusSelectInput /> - <Box mt="2em" /> - <MemoInput /> - </Grid> - </Grid> - </SimpleForm> - </Edit > + <UserEdit /> + </Edit> ) -} - -export default UserEdit; +}; -- Gitblit v1.9.1