| | |
| | | validate: { |
| | | pwdMisMatch: 'The password confirmation is not the same as the password.' |
| | | }, |
| | | settings: { |
| | | base: 'Base', |
| | | security: 'Security', |
| | | }, |
| | | create: { |
| | | title: 'Create' |
| | | }, |
| | |
| | | validate: { |
| | | pwdMisMatch: '密码不一致' |
| | | }, |
| | | settings: { |
| | | base: '基本设置', |
| | | security: '安全设置', |
| | | }, |
| | | create: { |
| | | title: '添加' |
| | | }, |
| | |
| | | NumberField, |
| | | required, |
| | | useRecordContext, |
| | | DeleteButton, |
| | | useTheme, |
| | | } from 'react-admin'; |
| | | import { useWatch, useFormContext } from "react-hook-form"; |
| | | import { Stack, Grid, Box, Typography, Card, CardContent } from '@mui/material'; |
| | | import { Stack, Grid, Box, Typography, Card, CardContent, Tabs, Tab } from '@mui/material'; |
| | | import * as Common from '@/utils/common'; |
| | | import { } from '@/config/setting'; |
| | | |
| | | function TabPanel(props) { |
| | | const { children, value, index, ...other } = props; |
| | | |
| | | return ( |
| | | <div |
| | | role="tabpanel" |
| | | hidden={value !== index} |
| | | id={`vertical-tabpanel-${index}`} |
| | | aria-labelledby={`vertical-tab-${index}`} |
| | | {...other} |
| | | > |
| | | {value === index && ( |
| | | <Box sx={{ p: 3 }}> |
| | | <Typography>{children}</Typography> |
| | | </Box> |
| | | )} |
| | | </div> |
| | | ); |
| | | } |
| | | |
| | | function a11yProps(index) { |
| | | return { |
| | | id: `vertical-tab-${index}`, |
| | | 'aria-controls': `vertical-tabpanel-${index}`, |
| | | }; |
| | | } |
| | | |
| | | const Settings = () => { |
| | | const translate = useTranslate(); |
| | | const theme = useTheme(); |
| | | const [value, setValue] = React.useState(0); |
| | | |
| | | return ( |
| | | <> |
| | | <Card> |
| | | <CardContent> |
| | | |
| | | <Card sx={{ backgroundColor: 'initial' }}> |
| | | <CardContent > |
| | | <Box |
| | | mt={2} |
| | | sx={{ |
| | | flexGrow: 1, |
| | | bgcolor: 'background.paper', |
| | | display: 'flex', |
| | | height: 224, |
| | | border: `1px solid #${theme[0] === 'light' ? 'ddd' : '333'}`, |
| | | borderRadius: 2 |
| | | }} |
| | | > |
| | | <Tabs |
| | | orientation="vertical" |
| | | variant="scrollable" |
| | | value={value} |
| | | onChange={(event, newValue) => { |
| | | setValue(newValue); |
| | | }} |
| | | indicatorColor="secondary" |
| | | textColor="inherit" |
| | | sx={{ |
| | | borderRight: 1, |
| | | borderColor: 'divider', |
| | | width: 150 |
| | | }} |
| | | > |
| | | <Tab label={translate('settings.base')} {...a11yProps(0)} /> |
| | | <Tab label={translate('settings.security')} {...a11yProps(1)} /> |
| | | </Tabs> |
| | | <TabPanel value={value} index={0}> |
| | | {translate('settings.base')} |
| | | </TabPanel> |
| | | <TabPanel value={value} index={1}> |
| | | {translate('settings.security')} |
| | | </TabPanel> |
| | | </Box> |
| | | </CardContent> |
| | | </Card> |
| | | </> |
| | |
| | | primary: { |
| | | main: '#2F68AC', |
| | | }, |
| | | // secondary: { |
| | | // light: '#5f5fc4', |
| | | // main: '#283593', |
| | | // dark: '#001064', |
| | | // contrastText: '#fff', |
| | | // }, |
| | | secondary: { |
| | | light: '#5f5fc4', |
| | | main: '#2F68AC', |
| | | dark: '#001064', |
| | | contrastText: '#fff', |
| | | }, |
| | | background: { |
| | | default: '#fafafb', |
| | | }, |