DictDrawer.tsx 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import React from 'react';
  2. import { Drawer, Form, Input, Button, message } from 'antd';
  3. import type { DrawerProps } from 'antd';
  4. import { useCreateDict } from '../apis/dicts';
  5. interface DictDrawerProps extends DrawerProps {
  6. refresh: () => void;
  7. onClose: () => void;
  8. }
  9. const DictDrawer: React.FC<DictDrawerProps> = ({ refresh, ...props }) => {
  10. const createDict = useCreateDict();
  11. return (
  12. <Drawer title="创建新词库" destroyOnClose {...props}>
  13. <Form
  14. name="dict"
  15. labelCol={{ span: 6 }}
  16. wrapperCol={{ span: 18 }}
  17. onFinish={(values: {
  18. name: string;
  19. value: string;
  20. meaning: string;
  21. extra: string;
  22. }) =>
  23. void (async () => {
  24. try {
  25. await createDict(values);
  26. void message.success('创建成功');
  27. refresh();
  28. props.onClose();
  29. } catch (err) {
  30. if (err instanceof Error) {
  31. void message.error(err.message);
  32. }
  33. }
  34. })()
  35. }
  36. >
  37. <Form.Item
  38. label="词库名称"
  39. name="name"
  40. rules={[{ required: true, message: '请输入词库名称' }]}
  41. validateTrigger="onBlur"
  42. >
  43. <Input placeholder="请输入词库名称" />
  44. </Form.Item>
  45. <Form.Item
  46. label="单词标题"
  47. name="value"
  48. rules={[{ required: true, message: '请输入单词标题' }]}
  49. validateTrigger="onBlur"
  50. >
  51. <Input placeholder="请输入单词标题(如:英文/日文)" />
  52. </Form.Item>
  53. <Form.Item
  54. label="词义标题"
  55. name="meaning"
  56. rules={[{ required: true, message: '请输入词义标题' }]}
  57. validateTrigger="onBlur"
  58. >
  59. <Input placeholder="请输入词义标题(如:中文)" />
  60. </Form.Item>
  61. <Form.Item label="附加标题" name="extra">
  62. <Input placeholder="请输入附加标题(如:音标/假名)" />
  63. </Form.Item>
  64. <Form.Item label=" " colon={false}>
  65. <Button htmlType="submit" type="primary">
  66. 创建
  67. </Button>
  68. </Form.Item>
  69. </Form>
  70. </Drawer>
  71. );
  72. };
  73. export default DictDrawer;