+
updateConfig("imageModel", model)} fullWidth />
+
+ updateConfig("videoModel", model)} fullWidth />
+
updateConfig("textModel", model)} fullWidth />
diff --git a/web/src/components/model-picker.tsx b/web/src/components/model-picker.tsx
index b7af2a7..b1f44e9 100644
--- a/web/src/components/model-picker.tsx
+++ b/web/src/components/model-picker.tsx
@@ -1,6 +1,6 @@
"use client";
-import { useMemo, useState } from "react";
+import { useEffect, useId, useMemo, useState } from "react";
import { Cpu } from "lucide-react";
import { Select, SelectContent, SelectItem, SelectTrigger } from "@/components/ui/select";
@@ -18,10 +18,19 @@ type ModelPickerProps = {
};
export function ModelPicker({ config, value, onChange, className, fullWidth = false, placeholder = "选择模型", onMissingConfig }: ModelPickerProps) {
+ const pickerId = useId();
const [open, setOpen] = useState(false);
const options = useMemo(() => Array.from(new Set([value, ...config.models].filter(Boolean))), [config.models, value]);
const current = value || "";
+ useEffect(() => {
+ const closeOtherPicker = (event: Event) => {
+ if ((event as CustomEvent).detail !== pickerId) setOpen(false);
+ };
+ window.addEventListener("model-picker-open", closeOtherPicker);
+ return () => window.removeEventListener("model-picker-open", closeOtherPicker);
+ }, [pickerId]);
+
return (