| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- import React, { useState } from "react";
- import { Card, Form, Input, Switch, Button, message } from "antd";
- import { useNavigate } from "react-router-dom";
- import { userToolsSetApi } from "../services/api";
- const UserAdd = () => {
- const [form] = Form.useForm();
- const [loading, setLoading] = useState(false);
- const navigate = useNavigate();
- const onFinish = async (values) => {
- const name = String(values.name || "").trim();
- if (!name) {
- message.error("请输入有效的用户名");
- return;
- }
- // 先查询是否已存在同名用户(admin 能查询到所有用户)
- try {
- const usersRes = await userToolsSetApi.getUsers();
- const users = usersRes.data?.users || [];
- const exists = users.some((u) => String(u.name).trim().toLowerCase() === name.toLowerCase());
- if (exists) {
- message.error("用户名已存在");
- return;
- }
- } catch (err) {
- // 查询失败不影响后续创建,但提示一下
- console.warn("检查用户名重名失败", err);
- }
- const payload = {
- name,
- password: values.password,
- is_admin: values.is_admin ? 1 : 0,
- };
- try {
- setLoading(true);
- const res = await userToolsSetApi.addUser(payload);
- if (res.data?.success) {
- message.success("新增用户成功");
- navigate("/user-tools-set", { replace: true });
- } else {
- message.error(res.data?.error || "新增失败");
- }
- } catch (error) {
- if (error?.response?.status === 409) {
- message.error("用户名已存在");
- } else {
- message.error(error.response?.data?.error || "新增失败");
- }
- } finally {
- setLoading(false);
- }
- };
- return (
- <Card
- title="新增用户"
- extra={<Button onClick={() => navigate(-1)}>返回</Button>}
- >
- <Form
- form={form}
- layout="vertical"
- onFinish={onFinish}
- >
- <Form.Item
- label="用户名"
- name="name"
- rules={[{ required: true, message: "请输入用户名" }]}
- >
- <Input placeholder="请输入用户名" />
- </Form.Item>
- <Form.Item
- label="用户密码"
- name="password"
- rules={[{ required: true, message: "请输入用户密码" }]}
- >
- <Input.Password placeholder="请输入用户密码" />
- </Form.Item>
- <Form.Item
- label="是否管理员"
- name="is_admin"
- valuePropName="checked"
- >
- <Switch
- checkedChildren="管理员"
- unCheckedChildren="普通用户"
- />
- </Form.Item>
- <Form.Item>
- <div className="flex justify-center">
- <Button
- type="primary"
- htmlType="submit"
- loading={loading}
- >
- 保存
- </Button>
- </div>
- </Form.Item>
- </Form>
- </Card>
- );
- };
- export default UserAdd;
|