diff --git a/app/(admin)/settings/agent-workflow/agent-workflow-settings-client.tsx b/app/(admin)/settings/agent-workflow/agent-workflow-settings-client.tsx index e76cb37d3..04cb970fe 100644 --- a/app/(admin)/settings/agent-workflow/agent-workflow-settings-client.tsx +++ b/app/(admin)/settings/agent-workflow/agent-workflow-settings-client.tsx @@ -183,6 +183,8 @@ export function AgentWorkflowSettingsClient({ const [uploadingKey, setUploadingKey] = useState(null); const [expandedSteps, setExpandedSteps] = useState>(new Set()); const [activeTab, setActiveTab] = useState("showcase"); + const [brandDraft, setBrandDraft] = useState(""); + const [storeDraft, setStoreDraft] = useState(""); const fileInputRefs = useRef>({}); useEffect(() => { @@ -220,6 +222,60 @@ export function AgentWorkflowSettingsClient({ () => [...config.steps].sort((left, right) => left.sortOrder - right.sortOrder), [config.steps] ); + const brandOptions = config.inputOptions?.brands || []; + const storeOptions = config.inputOptions?.stores || []; + + const updateInputOptions = (updates: Partial<{ brands: string[]; stores: string[] }>) => { + setConfig((prev) => ({ + ...prev, + inputOptions: { + brands: updates.brands ?? prev.inputOptions?.brands ?? [], + stores: updates.stores ?? prev.inputOptions?.stores ?? [], + }, + })); + }; + + const normalizeInputOptionValue = (value: string) => + value + .replace(/\s+/g, " ") + .trim(); + + const handleAddInputOption = (kind: "brands" | "stores") => { + const draft = kind === "brands" ? brandDraft : storeDraft; + const nextValue = normalizeInputOptionValue(draft); + if (!nextValue) { + toast.error(kind === "brands" ? "请输入品牌名称" : "请输入店铺名称"); + return; + } + + const currentList = kind === "brands" ? brandOptions : storeOptions; + if (currentList.some((item) => item.toLowerCase() === nextValue.toLowerCase())) { + toast.error(kind === "brands" ? "该品牌已存在" : "该店铺已存在"); + return; + } + + if (kind === "brands") { + updateInputOptions({ brands: [...brandOptions, nextValue] }); + setBrandDraft(""); + return; + } + + updateInputOptions({ stores: [...storeOptions, nextValue] }); + setStoreDraft(""); + }; + + const handleRemoveInputOption = (kind: "brands" | "stores", value: string) => { + if (kind === "brands") { + updateInputOptions({ + brands: brandOptions.filter((item) => item !== value), + }); + return; + } + + updateInputOptions({ + stores: storeOptions.filter((item) => item !== value), + }); + }; const enabledStepsCount = useMemo( () => sortedSteps.filter((s) => s.enabled).length, @@ -961,48 +1017,114 @@ export function AgentWorkflowSettingsClient({
- {(config.inputOptions?.brands || []).length} 个品牌 + {brandOptions.length} 个品牌
-