AddUser.js 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import React, {useState} from 'react';
  2. import {API, isMobile, showError, showSuccess} from '../../helpers';
  3. import Title from "@douyinfe/semi-ui/lib/es/typography/title";
  4. import {Button, SideSheet, Space, Input, Spin} from "@douyinfe/semi-ui";
  5. const AddUser = (props) => {
  6. const originInputs = {
  7. username: '',
  8. display_name: '',
  9. password: '',
  10. };
  11. const [inputs, setInputs] = useState(originInputs);
  12. const [loading, setLoading] = useState(false);
  13. const {username, display_name, password} = inputs;
  14. const handleInputChange = (name, value) => {
  15. setInputs((inputs) => ({...inputs, [name]: value}));
  16. };
  17. const submit = async () => {
  18. setLoading(true);
  19. if (inputs.username === '' || inputs.password === '') return;
  20. const res = await API.post(`/api/user/`, inputs);
  21. const {success, message} = res.data;
  22. if (success) {
  23. showSuccess('用户账户创建成功!');
  24. setInputs(originInputs);
  25. props.refresh();
  26. props.handleClose();
  27. } else {
  28. showError(message);
  29. }
  30. setLoading(false);
  31. };
  32. const handleCancel = () => {
  33. props.handleClose();
  34. }
  35. return (
  36. <>
  37. <SideSheet
  38. placement={'left'}
  39. title={<Title level={3}>{'添加用户'}</Title>}
  40. headerStyle={{borderBottom: '1px solid var(--semi-color-border)'}}
  41. bodyStyle={{borderBottom: '1px solid var(--semi-color-border)'}}
  42. visible={props.visible}
  43. footer={
  44. <div style={{display: 'flex', justifyContent: 'flex-end'}}>
  45. <Space>
  46. <Button theme='solid' size={'large'} onClick={submit}>提交</Button>
  47. <Button theme='solid' size={'large'} type={'tertiary'} onClick={handleCancel}>取消</Button>
  48. </Space>
  49. </div>
  50. }
  51. closeIcon={null}
  52. onCancel={() => handleCancel()}
  53. width={isMobile() ? '100%' : 600}
  54. >
  55. <Spin spinning={loading}>
  56. <Input
  57. style={{marginTop: 20}}
  58. label="用户名"
  59. name="username"
  60. addonBefore={'用户名'}
  61. placeholder={'请输入用户名'}
  62. onChange={value => handleInputChange('username', value)}
  63. value={username}
  64. autoComplete="off"
  65. />
  66. <Input
  67. style={{marginTop: 20}}
  68. addonBefore={'显示名'}
  69. label="显示名称"
  70. name="display_name"
  71. autoComplete="off"
  72. placeholder={'请输入显示名称'}
  73. onChange={value => handleInputChange('display_name', value)}
  74. value={display_name}
  75. />
  76. <Input
  77. style={{marginTop: 20}}
  78. label="密 码"
  79. name="password"
  80. type={'password'}
  81. addonBefore={'密码'}
  82. placeholder={'请输入密码'}
  83. onChange={value => handleInputChange('password', value)}
  84. value={password}
  85. autoComplete="off"
  86. />
  87. </Spin>
  88. </SideSheet>
  89. </>
  90. );
  91. };
  92. export default AddUser;