## MODIFIED Requirements ### Requirement: 内容创作 Tab 的 UI 代码迁移至独立模块 `ui/tab_create.py` SHALL 包含「内容创作 Tab」的全部 Gradio 组件定义和事件绑定,并导出 `build_tab(...) -> dict` 函数,返回跨 Tab 共享组件的字典(key 集合不得变更)。 内容创作 Tab 内部 SHALL 采用**三栏布局**: - **左栏(scale=3)**:人设选择、话题/风格、文案生成参数(高级设置 Accordion) - **中栏(scale=4)**:文案输出区(标题、正文、标签、提示词)+ 文案操作按钮组 - **右栏(scale=3)**:图片预览 Gallery + 图片操作按钮组(含美化强度滑块) 三栏通过 `gr.Row()` 包裹三个 `gr.Column(scale=...)` 实现,所有高频操作 SHALL 在无需垂直滚动的情况下可见(≥1280px 宽度分辨率)。 #### Scenario: main.py/app.py 正常启动并显示内容创作 Tab - **WHEN** 运行应用启动 Gradio - **THEN** 内容创作 Tab 正常显示三栏布局,所有组件与迁移前功能一致 #### Scenario: tab_create 模块可独立导入 - **WHEN** 在 Python 中执行 `from ui.tab_create import build_tab` - **THEN** 不抛出任何导入错误,`build_tab` 为可调用对象 #### Scenario: 三栏布局在宽屏下无需滚动 - **WHEN** 用户在 ≥1280px 宽度的浏览器中打开内容创作 Tab - **THEN** 左栏参数、中栏文案输出、右栏图片预览 SHALL 同时可见,无需垂直滚动 #### Scenario: build_tab 返回字典 key 保持不变 - **WHEN** `build_tab(...)` 被调用并返回字典 - **THEN** 返回字典 SHALL 至少包含 `res_title`、`res_content`、`res_prompt`、`res_tags`、`quality_mode`、`steps`、`cfg_scale`、`neg_prompt` 等原有 key ### Requirement: ui/ 目录结构规范 `ui/` 目录 SHALL 包含 `__init__.py`,每个 Tab 模块文件命名约定为 `tab_.py`,不在 Tab 模块中直接调用全局服务初始化代码。 #### Scenario: 新增 Tab 模块的标准结构 - **WHEN** 开发者创建新的 `ui/tab_*.py` 文件 - **THEN** 该文件导出 `build_tab(...)` 函数,且顶层不包含副作用代码 ### Requirement: 自动运营 Tab 采用卡片式两列网格布局 「🤖 自动运营」Tab 内的各自动化任务 SHALL 以 **2 列 × N 行** 的卡片网格展示,每个任务使用 `gr.Group()` 包裹,卡片内 SHALL 包含:任务名称标题、启用开关(`gr.Checkbox`)、执行间隔(`gr.Number` 或 `gr.Slider`)、上次执行时间(`gr.Markdown`)。 #### Scenario: 自动运营任务以两列网格显示 - **WHEN** 用户切换到「🤖 自动运营」Tab - **THEN** 各自动化任务(自动评论、自动点赞、自动收藏、自动发布、自动回复等)SHALL 以两列卡片网格排列,每列宽度相等 #### Scenario: 每张卡片包含完整任务控制 - **WHEN** 用户查看某个任务卡片 - **THEN** 卡片内 SHALL 显示任务开关、执行间隔设置项,功能与原单列布局完全一致 #### Scenario: 自定义 CSS 增强视觉效果 - **WHEN** 应用加载完成 - **THEN** `gr.Blocks(css=...)` SHALL 注入自定义样式,包含:字体层级优化、按钮圆角(≥6px)、`gr.Group` 卡片轻微阴影(`box-shadow`),不破坏 Gradio 内部组件样式