export function CreateOrEditRoleModal()

in frontend/src/routes/admin/people/role/list/create-or-edit-modal.tsx [24:103]


export function CreateOrEditRoleModal(props: any) {
    const { t } = useTranslation();
    const { onCancel, role } = props;
    const [loading, setLoading] = useState(false);
    const title = role ? t`editRole` : t`createRole`;

    useEffect(() => {
        props.form.setFieldsValue({ name: props.role ? props.role.name : '' });
    }, [props.role]);

    async function handleCreate(values: any) {
        setLoading(true);
        try {
            const res = await RoleAPI.createRole(values);
            setLoading(false);
            if (isSuccess(res)) {
                message.success(t`createSuccess`);
                props.onSuccess && props.onSuccess();
            } else {
                message.error(res.msg);
            }
        } catch (err) {
            setLoading(false);
        }
    }
    async function handleEdit(values: any) {
        setLoading(true);
        const res = await RoleAPI.updateRole({
            id: (role as any).id,
            name: values.name,
        });
        setLoading(false);
        if (isSuccess(res)) {
            message.success(t`SuccessfullyModified`);
            props.onSuccess && props.onSuccess();
        } else {
            message.error(res.msg);
        }
    }
    return (
        <Modal
            title={title}
            visible={true}
            onCancel={onCancel}
            confirmLoading={loading}
            onOk={() => {
                props.form
                    .validateFields()
                    .then((values: any) => {
                        if (!role) {
                            handleCreate(values);
                        } else {
                            console.log(values);
                            handleEdit(values);
                        }
                    })
                    .catch((info: any) => {
                        console.log('Validate Failed:', info);
                    });
            }}
        >
            <Form form={props.form} name="form_in_modal">
                <Form.Item
                    name="name"
                    label="名称"
                    rules={[
                        { required: true, message: t`pleaseInputRoleName` },
                        { min: 1, max: 20, message: t`roleNameLengthMessage` },
                        {
                            pattern: /^[a-zA-Z0-9_\u4e00-\u9fa5]+$/,
                            message: t`roleNamePatternMessage`,
                        },
                    ]}
                >
                    <Input placeholder={t`pleaseInputRoleName`} />
                </Form.Item>
            </Form>
        </Modal>
    );
}