// app/routes/rule-groups.new.tsx import { json, redirect, type ActionFunctionArgs, type MetaFunction } from "@remix-run/node"; import { Form, useNavigation, useActionData } from "@remix-run/react"; import { useState, useEffect } from "react"; export const meta: MetaFunction = () => { return [ { title: "新建评查点分组 - 中国烟草AI合同及卷宗审核系统" }, { name: "description", content: "创建新的评查点分组,包括分组名称、编码、描述和状态" }, ]; }; export async function action({ request }: ActionFunctionArgs) { const formData = await request.formData(); const name = formData.get("name"); const code = formData.get("code"); const description = formData.get("description"); const status = formData.get("status") || "active"; const sortOrder = formData.get("sortOrder") || "0"; // 基本验证 const errors = {}; if (!name) errors.name = "分组名称不能为空"; if (!code) errors.code = "分组编码不能为空"; if (Object.keys(errors).length > 0) { return json({ errors, values: Object.fromEntries(formData) }); } // 构建创建数据 const createData = { name, code, description, status, sortOrder: Number(sortOrder) || 0, }; // 真实环境中,这里会调用API创建数据 // const response = await fetch(`${process.env.API_URL}/api/rule-groups`, { // method: "POST", // headers: { "Content-Type": "application/json" }, // body: JSON.stringify(createData), // }); // // if (!response.ok) { // throw new Response("创建评查点分组失败", { status: response.status }); // } // 模拟创建成功 console.log('创建分组数据:', createData); // 重定向回列表页 return redirect('/rule-groups'); } export default function NewRuleGroup() { const actionData = useActionData(); const navigation = useNavigation(); const isSubmitting = navigation.state === "submitting"; const [formData, setFormData] = useState({ name: "", code: "", description: "", status: "active", sortOrder: "0", }); // 当actionData中有错误时,保留用户输入的值 useEffect(() => { if (actionData?.values) { setFormData({ name: actionData.values.name, code: actionData.values.code, description: actionData.values.description || "", status: actionData.values.status, sortOrder: actionData.values.sortOrder, }); } }, [actionData]); const handleChange = (e) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: value })); }; return (

新建评查点分组

{actionData?.errors?.name && (

{actionData.errors.name}

)}
{actionData?.errors?.code && (

{actionData.errors.code}

)}
{ e.preventDefault(); window.history.back(); }} > 取消
); }