| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | import React, { useState, useRef } from 'react'; |
| | import { API, showError, showSuccess } from '../../../../helpers'; |
| | import { useIsMobile } from '../../../../hooks/common/useIsMobile'; |
| | import { |
| | Button, |
| | SideSheet, |
| | Space, |
| | Spin, |
| | Typography, |
| | Card, |
| | Tag, |
| | Avatar, |
| | Form, |
| | Row, |
| | Col, |
| | } from '@douyinfe/semi-ui'; |
| | import { IconSave, IconClose, IconUserAdd } from '@douyinfe/semi-icons'; |
| | import { useTranslation } from 'react-i18next'; |
| |
|
| | const { Text, Title } = Typography; |
| |
|
| | const AddUserModal = (props) => { |
| | const { t } = useTranslation(); |
| | const formApiRef = useRef(null); |
| | const [loading, setLoading] = useState(false); |
| | const isMobile = useIsMobile(); |
| |
|
| | const getInitValues = () => ({ |
| | username: '', |
| | display_name: '', |
| | password: '', |
| | remark: '', |
| | }); |
| |
|
| | const submit = async (values) => { |
| | setLoading(true); |
| | const res = await API.post(`/api/user/`, values); |
| | const { success, message } = res.data; |
| | if (success) { |
| | showSuccess(t('用户账户创建成功!')); |
| | formApiRef.current?.setValues(getInitValues()); |
| | props.refresh(); |
| | props.handleClose(); |
| | } else { |
| | showError(message); |
| | } |
| | setLoading(false); |
| | }; |
| |
|
| | const handleCancel = () => { |
| | props.handleClose(); |
| | }; |
| |
|
| | return ( |
| | <> |
| | <SideSheet |
| | placement={'left'} |
| | title={ |
| | <Space> |
| | <Tag color='green' shape='circle'> |
| | {t('新建')} |
| | </Tag> |
| | <Title heading={4} className='m-0'> |
| | {t('添加用户')} |
| | </Title> |
| | </Space> |
| | } |
| | bodyStyle={{ padding: '0' }} |
| | visible={props.visible} |
| | width={isMobile ? '100%' : 600} |
| | footer={ |
| | <div className='flex justify-end bg-white'> |
| | <Space> |
| | <Button |
| | theme='solid' |
| | onClick={() => formApiRef.current?.submitForm()} |
| | icon={<IconSave />} |
| | loading={loading} |
| | > |
| | {t('提交')} |
| | </Button> |
| | <Button |
| | theme='light' |
| | type='primary' |
| | onClick={handleCancel} |
| | icon={<IconClose />} |
| | > |
| | {t('取消')} |
| | </Button> |
| | </Space> |
| | </div> |
| | } |
| | closeIcon={null} |
| | onCancel={() => handleCancel()} |
| | > |
| | <Spin spinning={loading}> |
| | <Form |
| | initValues={getInitValues()} |
| | getFormApi={(api) => (formApiRef.current = api)} |
| | onSubmit={submit} |
| | onSubmitFail={(errs) => { |
| | const first = Object.values(errs)[0]; |
| | if (first) showError(Array.isArray(first) ? first[0] : first); |
| | formApiRef.current?.scrollToError(); |
| | }} |
| | > |
| | <div className='p-2'> |
| | <Card className='!rounded-2xl shadow-sm border-0'> |
| | <div className='flex items-center mb-2'> |
| | <Avatar size='small' color='blue' className='mr-2 shadow-md'> |
| | <IconUserAdd size={16} /> |
| | </Avatar> |
| | <div> |
| | <Text className='text-lg font-medium'>{t('用户信息')}</Text> |
| | <div className='text-xs text-gray-600'> |
| | {t('创建新用户账户')} |
| | </div> |
| | </div> |
| | </div> |
| | |
| | <Row gutter={12}> |
| | <Col span={24}> |
| | <Form.Input |
| | field='username' |
| | label={t('用户名')} |
| | placeholder={t('请输入用户名')} |
| | rules={[{ required: true, message: t('请输入用户名') }]} |
| | showClear |
| | /> |
| | </Col> |
| | <Col span={24}> |
| | <Form.Input |
| | field='display_name' |
| | label={t('显示名称')} |
| | placeholder={t('请输入显示名称')} |
| | showClear |
| | /> |
| | </Col> |
| | <Col span={24}> |
| | <Form.Input |
| | field='password' |
| | label={t('密码')} |
| | type='password' |
| | placeholder={t('请输入密码')} |
| | rules={[{ required: true, message: t('请输入密码') }]} |
| | showClear |
| | /> |
| | </Col> |
| | <Col span={24}> |
| | <Form.Input |
| | field='remark' |
| | label={t('备注')} |
| | placeholder={t('请输入备注(仅管理员可见)')} |
| | showClear |
| | /> |
| | </Col> |
| | </Row> |
| | </Card> |
| | </div> |
| | </Form> |
| | </Spin> |
| | </SideSheet> |
| | </> |
| | ); |
| | }; |
| |
|
| | export default AddUserModal; |
| |
|