diff --git a/app/ScreenAdapter.tsx b/app/ScreenAdapter.tsx new file mode 100644 index 0000000..7f9dc2a --- /dev/null +++ b/app/ScreenAdapter.tsx @@ -0,0 +1,16 @@ +'use client' + +import { useEffect } from 'react'; +import { createScreenAdapter } from '@/utils/tools'; + +export function ScreenAdapter() { + useEffect(() => { + // 页面加载时应用 + window.addEventListener('load', createScreenAdapter) + + // 窗口大小改变时重新应用 + window.addEventListener('resize', createScreenAdapter) + }, []); + + return null; // 这个组件不渲染任何内容 +} diff --git a/app/layout.tsx b/app/layout.tsx index cd01797..358bf6c 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -2,6 +2,9 @@ import './globals.css'; import type { Metadata } from 'next'; import { Providers } from '@/components/providers'; import { ConfigProvider, theme } from 'antd'; +import { useEffect } from 'react'; +import { createScreenAdapter } from '@/utils/tools'; +import { ScreenAdapter } from './ScreenAdapter'; export const metadata: Metadata = { title: 'AI Movie Flow - Create Amazing Videos with AI', @@ -29,6 +32,7 @@ export default function RootLayout({ }} > + {children} diff --git a/components/ChatInputBox/ChatInputBox.tsx b/components/ChatInputBox/ChatInputBox.tsx index ee022d7..4b3e669 100644 --- a/components/ChatInputBox/ChatInputBox.tsx +++ b/components/ChatInputBox/ChatInputBox.tsx @@ -84,7 +84,9 @@ const RenderTemplateStoryMode = ({ // 本地加载状态,用于 UI 反馈 const [localLoading, setLocalLoading] = useState(0); // 控制输入框显示状态 - const [inputVisible, setInputVisible] = useState<{ [key: string]: boolean }>({}); + const [inputVisible, setInputVisible] = useState<{ [key: string]: boolean }>( + {} + ); const router = useRouter(); // 组件挂载时获取模板列表 useEffect(() => { @@ -98,15 +100,18 @@ const RenderTemplateStoryMode = ({ const handleClickOutside = (event: MouseEvent) => { const target = event.target as Element; // 检查是否点击了输入框相关的元素 - if (!target.closest('.ant-tooltip') && !target.closest('[data-alt*="field-ai-button"]')) { + if ( + !target.closest(".ant-tooltip") && + !target.closest('[data-alt*="field-ai-button"]') + ) { // 关闭所有打开的输入框 setInputVisible({}); } }; - document.addEventListener('mousedown', handleClickOutside); + document.addEventListener("mousedown", handleClickOutside); return () => { - document.removeEventListener('mousedown', handleClickOutside); + document.removeEventListener("mousedown", handleClickOutside); }; }, []); @@ -164,7 +169,7 @@ const RenderTemplateStoryMode = ({ const templateListRender = () => { return (
-
+
{templateStoryList.map((template, index) => (
{/* 左侧图片 */}
-
- {selectedTemplate.name} -
-
+ {selectedTemplate.name}
{/* 右侧信息 - 增加文本渲染空间 */} @@ -217,7 +216,7 @@ const RenderTemplateStoryMode = ({ {selectedTemplate.name}
0 && ( -
+

({ ...prev, [field.field_name]: false })); + setInputVisible((prev) => ({ + ...prev, + [field.field_name]: false, + })); }} icon={} width="w-8" @@ -289,14 +291,19 @@ const RenderTemplateStoryMode = ({ root: "max-w-none", }} open={inputVisible[field.field_name]} - onOpenChange={(visible) => setInputVisible(prev => ({ ...prev, [field.field_name]: visible }))} + onOpenChange={(visible) => + setInputVisible((prev) => ({ + ...prev, + [field.field_name]: visible, + })) + } trigger="contextMenu" styles={{ root: { zIndex: 1000 } }} > {/* 图片 */}