UserAdd.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import React, { useState } from "react";
  2. import { Card, Form, Input, Switch, Button, message } from "antd";
  3. import { useNavigate } from "react-router-dom";
  4. import { userToolsSetApi } from "../services/api";
  5. const UserAdd = () => {
  6. const [form] = Form.useForm();
  7. const [loading, setLoading] = useState(false);
  8. const navigate = useNavigate();
  9. const onFinish = async (values) => {
  10. const name = String(values.name || "").trim();
  11. if (!name) {
  12. message.error("请输入有效的用户名");
  13. return;
  14. }
  15. // 先查询是否已存在同名用户(admin 能查询到所有用户)
  16. try {
  17. const usersRes = await userToolsSetApi.getUsers();
  18. const users = usersRes.data?.users || [];
  19. const exists = users.some((u) => String(u.name).trim().toLowerCase() === name.toLowerCase());
  20. if (exists) {
  21. message.error("用户名已存在");
  22. return;
  23. }
  24. } catch (err) {
  25. // 查询失败不影响后续创建,但提示一下
  26. console.warn("检查用户名重名失败", err);
  27. }
  28. const payload = {
  29. name,
  30. password: values.password,
  31. is_admin: values.is_admin ? 1 : 0,
  32. };
  33. try {
  34. setLoading(true);
  35. const res = await userToolsSetApi.addUser(payload);
  36. if (res.data?.success) {
  37. message.success("新增用户成功");
  38. navigate("/user-tools-set", { replace: true });
  39. } else {
  40. message.error(res.data?.error || "新增失败");
  41. }
  42. } catch (error) {
  43. if (error?.response?.status === 409) {
  44. message.error("用户名已存在");
  45. } else {
  46. message.error(error.response?.data?.error || "新增失败");
  47. }
  48. } finally {
  49. setLoading(false);
  50. }
  51. };
  52. return (
  53. <Card
  54. title="新增用户"
  55. extra={<Button onClick={() => navigate(-1)}>返回</Button>}
  56. >
  57. <Form
  58. form={form}
  59. layout="vertical"
  60. onFinish={onFinish}
  61. >
  62. <Form.Item
  63. label="用户名"
  64. name="name"
  65. rules={[{ required: true, message: "请输入用户名" }]}
  66. >
  67. <Input placeholder="请输入用户名" />
  68. </Form.Item>
  69. <Form.Item
  70. label="用户密码"
  71. name="password"
  72. rules={[{ required: true, message: "请输入用户密码" }]}
  73. >
  74. <Input.Password placeholder="请输入用户密码" />
  75. </Form.Item>
  76. <Form.Item
  77. label="是否管理员"
  78. name="is_admin"
  79. valuePropName="checked"
  80. >
  81. <Switch
  82. checkedChildren="管理员"
  83. unCheckedChildren="普通用户"
  84. />
  85. </Form.Item>
  86. <Form.Item>
  87. <div className="flex justify-center">
  88. <Button
  89. type="primary"
  90. htmlType="submit"
  91. loading={loading}
  92. >
  93. 保存
  94. </Button>
  95. </div>
  96. </Form.Item>
  97. </Form>
  98. </Card>
  99. );
  100. };
  101. export default UserAdd;