Files
ChouJuGEO/docs/analysis/TAB2_OPTIMIZATION_PLAN.md
T
刘国栋 8f7f082c3d feat: 重构项目结构并添加平台同步基础架构
- 重构项目目录结构,将功能模块移至 modules/ 目录
- 创建平台同步基础架构,包括发布器基类和 GitHub 发布器
- 新增 UI 状态管理模块 (modules/ui/state.py) 统一管理会话状态
- 更新依赖配置,添加平台同步所需依赖 (httpx, pyperclip)
- 整理文档结构,将所有文档分类移至 docs/ 目录
- 添加 .cursorrules 文件定义项目开发规范
- 清理根目录重复文件,保持项目结构整洁
2026-01-30 10:21:29 +08:00

28 KiB
Raw Blame History

Tab2(自动创作)优化方案

一、重排后的 Tab 结构草图

Tab2: 自动创作
├── 【区域1:快速生成区】(默认展开,紧凑布局)
│   ├── 生成模式选择(单篇/批量)- 横向radio
│   ├── 关键词选择(单篇:selectbox | 批量:multiselect
│   ├── 平台选择(单篇:selectbox | 批量:selectbox统一平台)
│   ├── 高级优化技巧(折叠,默认收起)
│   └── 生成按钮(主按钮,醒目)
│
├── 【区域2:生成结果概览】(生成后显示)
│   ├── 生成统计卡片(3列:总篇数、平均评分、生成时间)
│   ├── 批量生成:内容列表(可展开查看每篇)
│   └── 单篇生成:直接进入详情
│
├── 【区域3:内容详情区】(单篇或选中篇)
│   ├── Tab组:内容预览 | 质量分析 | 增强工具
│   │   ├── Tab1: 内容预览
│   │   │   ├── 内容展示(代码块/文本区)
│   │   │   ├── 快速操作(下载、复制、优化)
│   │   │   └── JSON-LD(仅GitHub平台,折叠)
│   │   │
│   │   ├── Tab2: 质量分析
│   │   │   ├── 内容评分(5个指标卡片)
│   │   │   ├── E-E-A-T评估(折叠)
│   │   │   └── 事实密度评估(折叠)
│   │   │
│   │   └── Tab3: 增强工具
│   │       ├── 多模态提示生成(配图/视频)
│   │       ├── 图片生成(通义万相)
│   │       └── E-E-A-T强化(折叠)
│   │
│   └── 下载区(底部固定)
│       ├── 单篇下载
│       └── 批量ZIP下载(批量模式)
│
└── 【区域4:辅助工具】(折叠,默认收起)
    ├── JSON-LD Schema生成(移至Tab3或独立Tab)
    └── 技术配置生成(移至Tab3或独立Tab)

二、问题清单(含严重级别)

P0 - 必改(逻辑漏洞/体验阻塞)

  1. 批量生成无法查看所有内容 ⚠️ P0

    • 问题:只显示最后一篇预览,其他内容无法查看
    • 影响:用户无法验证批量生成的所有内容
    • 位置:3124-4118行
  2. 内容评分可能静默失败 ⚠️ P0

    • 问题:评分失败只显示warning,但用户可能看不到
    • 影响:用户以为内容已评分,实际未评分
    • 位置:3086-3099行
  3. 图片生成入口混乱 ⚠️ P0

    • 问题:有"直接生成"、"基于描述生成"、"多模态生成"多个入口
    • 影响:用户不知道用哪个,容易重复操作
    • 位置:3173-3756行
  4. JSON-LD和技术配置功能归属错误 ⚠️ P0

    • 问题:放在内容生成Tab,但属于"优化"范畴
    • 影响:用户流程混乱,应该在优化Tab使用
    • 位置:2271-2572行
  5. 批量生成时ZIP下载位置不明确 ⚠️ P0

    • 问题:ZIP下载按钮在单篇预览下方,批量模式时位置不明显
    • 影响:用户找不到批量下载入口
    • 位置:4093-4101行

P1 - 建议(体验优化)

  1. 信息层级混乱 ⚠️ P1

    • 问题:评分、多模态、E-E-A-T等功能平铺,没有分组
    • 影响:页面冗长,用户需要滚动很多才能找到功能
    • 位置:3124-4118行
  2. 生成状态反馈不足 ⚠️ P1

    • 问题:批量生成时,只有spinner,没有进度条和完成提示
    • 影响:用户不知道生成进度,可能误以为卡死
    • 位置:2669-3122行
  3. 优化技巧选择器位置不当 ⚠️ P1

    • 问题:放在表单中间,容易被忽略
    • 影响:用户可能不知道有这个功能
    • 位置:2628-2652行
  4. 内容预览区域过大 ⚠️ P1

    • 问题:单篇内容预览占用大量空间,其他功能被挤到下方
    • 影响:用户需要大量滚动才能看到其他功能
    • 位置:4010-4091行
  5. 缺少内容对比功能 ⚠️ P1

    • 问题:批量生成时,无法对比不同关键词生成的内容
    • 影响:用户无法快速筛选优质内容
    • 位置:无此功能

P2 - 可做(锦上添花)

  1. 缺少内容模板预览 ⚠️ P2

    • 问题:用户选择平台时,看不到该平台的模板特点
    • 影响:用户可能选错平台
    • 位置:2591-2612行
  2. 批量生成缺少筛选功能 ⚠️ P2

    • 问题:批量生成后,无法按评分、平台、关键词筛选
    • 影响:内容多时难以管理
    • 位置:3124行后
  3. 缺少内容历史记录快速入口 ⚠️ P2

    • 问题:无法快速查看之前生成的内容
    • 影响:用户需要切换到Tab5查看
    • 位置:无此功能
  4. 优化技巧说明不够直观 ⚠️ P2

    • 问题:只有文字说明,没有示例
    • 影响:用户不理解技巧的实际效果
    • 位置:2642-2652行
  5. 缺少批量操作功能 ⚠️ P2

    • 问题:无法批量下载、批量优化、批量删除
    • 影响:内容多时操作繁琐
    • 位置:无此功能

三、改动方案(含具体交互/文案/状态设计)

改动1:重组布局结构(P0

目标:将内容生成作为核心,其他功能按需展示

具体改动

with tab2:
    # === 区域1:快速生成区 ===
    st.markdown("### ✍️ 内容生成")
    
    with st.container(border=True):
        with st.form("content_form", clear_on_submit=False):
            # 第一行:模式选择
            mode = st.radio(
                "生成模式", 
                ["单篇生成", "批量生成"], 
                horizontal=True, 
                key="content_mode"
            )
            
            # 第二行:关键词和平台(紧凑布局)
            if mode == "单篇生成":
                col1, col2 = st.columns([2, 1])
                with col1:
                    selected_keyword = st.selectbox(
                        "选择关键词", 
                        st.session_state.keywords, 
                        key="content_kw_single"
                    )
                with col2:
                    platform = st.selectbox(
                        "平台", 
                        platforms, 
                        key="content_platform_single"
                    )
            else:
                col1, col2 = st.columns([3, 1])
                with col1:
                    selected_keywords = st.multiselect(
                        "选择关键词(可多选)", 
                        st.session_state.keywords, 
                        key="content_kw_multi"
                    )
                with col2:
                    platform = st.selectbox(
                        "统一平台", 
                        platforms, 
                        key="content_platform_multi"
                    )
            
            # 第三行:高级优化技巧(折叠)
            with st.expander("🎨 高级优化技巧(可选)", expanded=False):
                technique_manager = OptimizationTechniqueManager()
                all_techniques = technique_manager.list_techniques()
                technique_options = [f"{tech['icon']} {tech['name']}" for tech in all_techniques]
                
                selected_technique_names = st.multiselect(
                    "选择优化技巧",
                    options=technique_options,
                    default=[],
                    key="content_techniques",
                    help="选择要应用的优化技巧,可多选"
                )
                
                if selected_technique_names:
                    st.caption("已选择:" + "、".join(selected_technique_names))
            
            # 生成按钮
            run_content_disabled = (not st.session_state.cfg_valid) or (gen_llm is None) or (not keywords_to_generate)
            run_content = st.form_submit_button(
                "🚀 生成内容", 
                use_container_width=True, 
                disabled=run_content_disabled,
                type="primary"
            )
    
    # === 区域2:生成结果概览 ===
    if st.session_state.generated_contents:
        # 统计卡片
        col1, col2, col3 = st.columns(3)
        with col1:
            st.metric("生成篇数", len(st.session_state.generated_contents))
        with col2:
            avg_score = sum(
                item.get("score", {}).get("scores", {}).get("total", 0) 
                for item in st.session_state.generated_contents 
                if item.get("score")
            ) / len([item for item in st.session_state.generated_contents if item.get("score")]) if any(item.get("score") for item in st.session_state.generated_contents) else 0
            st.metric("平均评分", f"{avg_score:.1f}/100" if avg_score > 0 else "未评分")
        with col3:
            st.metric("生成时间", datetime.now().strftime("%H:%M:%S"))
        
        # 批量模式:内容列表
        if len(st.session_state.generated_contents) > 1:
            st.markdown("#### 📋 生成内容列表")
            
            # 添加筛选和排序
            filter_col1, filter_col2, filter_col3 = st.columns(3)
            with filter_col1:
                filter_platform = st.selectbox(
                    "筛选平台",
                    ["全部"] + list(set(item["platform"] for item in st.session_state.generated_contents)),
                    key="content_filter_platform"
                )
            with filter_col2:
                sort_by = st.selectbox(
                    "排序方式",
                    ["生成顺序", "评分降序", "评分升序", "关键词"],
                    key="content_sort_by"
                )
            with filter_col3:
                if st.button("📥 批量下载ZIP", use_container_width=True):
                    # ZIP下载逻辑
                    pass
            
            # 内容列表(可展开)
            for idx, item in enumerate(st.session_state.generated_contents):
                with st.expander(
                    f"{idx+1}. {item['keyword']} - {item['platform']} | 评分: {item.get('score', {}).get('scores', {}).get('total', 'N/A')}/100",
                    expanded=False
                ):
                    # 快速预览和操作
                    col1, col2 = st.columns([3, 1])
                    with col1:
                        st.text_area(
                            "内容预览",
                            item["content"][:500] + "..." if len(item["content"]) > 500 else item["content"],
                            height=150,
                            disabled=True,
                            key=f"preview_{idx}"
                        )
                    with col2:
                        if st.button("查看详情", key=f"view_{idx}"):
                            st.session_state.selected_content_idx = idx
                        if st.button("下载", key=f"dl_{idx}"):
                            # 下载逻辑
                            pass
        
        # 单篇模式或选中篇:详情展示
        selected_idx = st.session_state.get("selected_content_idx", 0) if len(st.session_state.generated_contents) > 1 else 0
        item = st.session_state.generated_contents[selected_idx]
        
        # 使用Tabs组织详情
        detail_tab1, detail_tab2, detail_tab3 = st.tabs(["📄 内容预览", "📊 质量分析", "🎨 增强工具"])
        
        with detail_tab1:
            # 内容预览
            st.markdown(f"**关键词**: {item['keyword']} | **平台**: {item['platform']}")
            if item["ext"] == "md":
                st.code(item["content"], language="markdown")
            else:
                st.text_area("内容", item["content"], height=400, key="content_preview")
            
            # 快速操作
            col1, col2, col3 = st.columns(3)
            with col1:
                st.download_button("下载单篇", item["content"], f"{item['filename']}", use_container_width=True)
            with col2:
                if st.button("🔧 优化内容", use_container_width=True):
                    # 跳转到Tab3或打开优化面板
                    pass
            with col3:
                if st.button("📋 复制内容", use_container_width=True):
                    # 复制到剪贴板
                    pass
            
            # JSON-LD(仅GitHub平台,折叠)
            if item.get("json_ld") or item["platform"] == "GitHubREADME/文档)":
                with st.expander("📋 JSON-LD Schema(可选)", expanded=False):
                    if item.get("json_ld"):
                        st.code(item["json_ld"], language="json")
                    else:
                        # 生成JSON-LD
                        pass
        
        with detail_tab2:
            # 质量分析
            if item.get("score"):
                # 评分卡片
                score_data = item["score"]
                scores = score_data.get("scores", {})
                col1, col2, col3, col4, col5 = st.columns(5)
                with col1:
                    st.metric("总分", f"{scores.get('total', 0)}/100")
                with col2:
                    st.metric("结构化", f"{scores.get('structure', 0)}/25")
                with col3:
                    st.metric("品牌提及", f"{scores.get('brand_mention', 0)}/25")
                with col4:
                    st.metric("权威性", f"{scores.get('authority', 0)}/25")
                with col5:
                    st.metric("可引用性", f"{scores.get('citations', 0)}/25")
                
                # 详细分析(折叠)
                with st.expander("📝 详细分析", expanded=False):
                    # 显示详细评分和改进建议
                    pass
            else:
                st.info("内容未评分,点击下方按钮进行评估")
                if st.button("📊 评估内容质量", use_container_width=True):
                    # 评估逻辑
                    pass
            
            # E-E-A-T和事实密度评估(折叠)
            with st.expander("🎯 E-E-A-T 评估", expanded=False):
                # E-E-A-T评估逻辑
                pass
            
            with st.expander("📊 事实密度评估", expanded=False):
                # 事实密度评估逻辑
                pass
        
        with detail_tab3:
            # 增强工具
            st.markdown("#### 🎨 多模态增强")
            
            # 图片生成(统一入口)
            image_gen_col1, image_gen_col2 = st.columns([2, 1])
            with image_gen_col1:
                image_gen_mode = st.radio(
                    "图片生成方式",
                    ["直接生成(基于内容)", "基于配图描述生成"],
                    horizontal=True,
                    key="image_gen_mode"
                )
            with image_gen_col2:
                num_images = st.selectbox("生成数量", [1, 2, 3], key="num_images")
            
            if st.button("🎨 生成图片", use_container_width=True, type="primary"):
                # 统一的图片生成逻辑
                pass
            
            # 视频脚本生成(仅B站)
            if "B站" in item["platform"]:
                if st.button("🎬 生成视频脚本", use_container_width=True):
                    # 视频脚本生成逻辑
                    pass
            
            # E-E-A-T强化(折叠)
            with st.expander("✨ E-E-A-T 强化", expanded=False):
                # E-E-A-T强化逻辑
                pass

改动2:修复批量生成查看问题(P0

目标:批量生成后,用户可以查看所有生成的内容

具体改动

# 在区域2中添加内容列表
if len(st.session_state.generated_contents) > 1:
    st.markdown("#### 📋 生成内容列表")
    
    # 使用DataFrame展示列表
    list_data = []
    for idx, item in enumerate(st.session_state.generated_contents):
        list_data.append({
            "序号": idx + 1,
            "关键词": item["keyword"],
            "平台": item["platform"],
            "评分": item.get("score", {}).get("scores", {}).get("total", "未评分"),
            "字数": len(item["content"]),
            "操作": f"查看_{idx}"
        })
    
    df = pd.DataFrame(list_data)
    
    # 可交互的表格
    selected_rows = st.dataframe(
        df,
        use_container_width=True,
        hide_index=True,
        on_select="rerun",
        selection_mode="single-row"
    )
    
    # 根据选择显示详情
    if selected_rows.selection.rows:
        selected_idx = selected_rows.selection.rows[0]
        st.session_state.selected_content_idx = selected_idx
        st.rerun()

改动3:统一图片生成入口(P0

目标:将多个图片生成入口合并为一个,通过选项区分

具体改动

# 在detail_tab3中
st.markdown("#### 🖼️ 图片生成")

# 生成方式选择
gen_mode = st.radio(
    "生成方式",
    ["智能生成(推荐)", "基于配图描述", "自定义Prompt"],
    key="image_gen_mode",
    help="智能生成:AI自动分析内容生成图片;基于描述:使用已生成的配图描述;自定义:手动输入Prompt"
)

if gen_mode == "智能生成(推荐)":
    # 直接基于内容生成
    if st.button("🎨 生成图片", use_container_width=True, type="primary"):
        # 调用直接生成逻辑
        pass
elif gen_mode == "基于配图描述":
    # 检查是否有配图描述
    if st.session_state.get("image_descriptions"):
        if st.button("🎨 基于描述生成", use_container_width=True, type="primary"):
            # 调用基于描述生成逻辑
            pass
    else:
        st.info("💡 请先生成配图描述")
        if st.button("📝 生成配图描述", use_container_width=True):
            # 生成配图描述
            pass
else:
    # 自定义Prompt
    custom_prompt = st.text_area("输入图片生成Prompt", height=100)
    if st.button("🎨 生成图片", use_container_width=True, type="primary"):
        # 使用自定义Prompt生成
        pass

改动4:改进生成进度反馈(P1

目标:批量生成时显示清晰的进度

具体改动

if run_content:
    # 初始化进度
    total_items = len(keywords_to_generate)
    progress_bar = st.progress(0)
    status_text = st.empty()
    
    contents = []
    zip_buffer = io.BytesIO()
    
    with zipfile.ZipFile(zip_buffer, "w", zipfile.ZIP_DEFLATED) as zip_file:
        for idx, (keyword, plat) in enumerate(keywords_to_generate):
            # 更新进度
            progress = (idx + 1) / total_items
            progress_bar.progress(progress)
            status_text.text(f"正在生成 {idx + 1}/{total_items}: {keyword} - {plat}")
            
            # 生成逻辑
            with st.spinner(f"生成 {plat}{keyword}"):
                # ... 原有生成逻辑 ...
                contents.append({...})
            
            # 完成提示
            if idx == total_items - 1:
                status_text.success(f"✅ 全部完成!共生成 {len(contents)} 篇内容")
    
    # 清理进度显示
    progress_bar.empty()
    status_text.empty()

改动5:移动JSON-LD和技术配置到Tab3P0

目标:将不属于"创作"的功能移到"优化"Tab

具体改动

# 从Tab2中删除2271-2572行的JSON-LD和技术配置代码

# 在Tab3(文章优化)中添加:
with tab3:
    # ... 原有优化功能 ...
    
    # 新增:结构化数据生成
    st.markdown("---")
    st.markdown("#### 📋 结构化数据生成")
    
    struct_tab1, struct_tab2 = st.tabs(["JSON-LD Schema", "技术配置"])
    
    with struct_tab1:
        # JSON-LD生成逻辑(从Tab2移过来)
        pass
    
    with struct_tab2:
        # 技术配置生成逻辑(从Tab2移过来)
        pass

四、测试用例清单

测试用例1:单篇生成流程

前置条件

  • 已配置API Key
  • 已生成关键词(至少1个)

测试步骤

  1. 进入Tab2
  2. 选择"单篇生成"
  3. 选择一个关键词
  4. 选择一个平台(如"知乎")
  5. 点击"生成内容"按钮

预期结果

  • 显示生成进度(spinner
  • 生成完成后显示内容预览
  • 自动显示内容评分(如果有)
  • 可以下载单篇内容
  • 可以查看质量分析
  • 可以使用增强工具

测试用例2:批量生成流程

前置条件

  • 已配置API Key
  • 已生成关键词(至少3个)

测试步骤

  1. 进入Tab2
  2. 选择"批量生成"
  3. 选择3个关键词
  4. 选择一个平台
  5. 点击"生成内容"按钮

预期结果

  • 显示进度条和状态文本
  • 逐个生成内容
  • 生成完成后显示内容列表
  • 可以查看每篇内容的详情
  • 可以批量下载ZIP
  • 可以筛选和排序内容

测试用例3:内容评分失败处理

前置条件

  • 已配置API Key
  • 已生成关键词

测试步骤

  1. 生成一篇内容
  2. 模拟评分失败(如API错误)

预期结果

  • 内容仍然生成成功
  • 显示明确的警告信息:"内容已生成,但评分失败"
  • 提供"重新评分"按钮
  • 不影响其他功能使用

测试用例4:图片生成入口

前置条件

  • 已生成一篇内容
  • 已配置通义万相API Key

测试步骤

  1. 进入"增强工具"Tab
  2. 查看图片生成选项
  3. 选择"智能生成"
  4. 点击"生成图片"

预期结果

  • 只显示一个图片生成入口
  • 生成方式选择清晰
  • 生成过程有进度提示
  • 生成成功后显示图片预览

测试用例5:批量生成查看所有内容

前置条件

  • 已批量生成5篇内容

测试步骤

  1. 查看内容列表
  2. 点击不同行的内容
  3. 使用筛选功能
  4. 使用排序功能

预期结果

  • 列表显示所有生成的内容
  • 可以点击查看每篇详情
  • 筛选功能正常工作
  • 排序功能正常工作

测试用例6:优化技巧应用

前置条件

  • 已配置API Key
  • 已生成关键词

测试步骤

  1. 展开"高级优化技巧"
  2. 选择2-3个技巧
  3. 生成内容

预期结果

  • 技巧选择器清晰可见
  • 已选择的技巧有明确提示
  • 生成的内容应用了选择的技巧
  • 技巧效果在内容中体现

测试用例7:边界条件测试

测试场景

  1. 关键词列表为空
  2. 批量生成时未选择关键词
  3. API Key无效
  4. 生成过程中网络中断
  5. 批量生成20篇内容(压力测试)

预期结果

  • 所有边界条件都有明确的错误提示
  • 不会导致页面崩溃
  • 用户可以清楚知道问题所在
  • 提供解决方案或重试选项

五、最小改动 MVP 优化清单(1天内完成)

优先级排序

P0(必须完成)

  1. 修复批量生成查看问题(2小时)
  2. 统一图片生成入口(1小时)
  3. 改进生成进度反馈(1小时)
  4. 修复内容评分失败提示(0.5小时)

P1(建议完成) 5. 重组布局结构(使用Tabs组织详情)(2小时) 6. 优化技巧选择器位置(0.5小时) 7. 添加批量生成内容列表(1小时)

P2(可选) 8. ⚠️ 添加内容筛选和排序(1小时) 9. ⚠️ 移动JSON-LD到Tab31小时)

实施顺序

  1. 第一步2小时):修复批量生成查看问题

    • 添加内容列表展示
    • 实现内容选择功能
    • 测试批量生成流程
  2. 第二步2小时):重组布局结构

    • 使用Tabs组织详情区域
    • 调整功能分组
    • 优化信息层级
  3. 第三步1.5小时):统一图片生成入口

    • 合并多个生成入口
    • 添加生成方式选择
    • 测试图片生成流程
  4. 第四步1小时):改进进度反馈

    • 添加进度条
    • 添加状态文本
    • 测试批量生成进度
  5. 第五步0.5小时):修复评分失败提示

    • 改进错误提示
    • 添加重试按钮
    • 测试错误处理

总计:约7小时,可以在1个工作日内完成

六、额外风险与体验优化

额外风险(至少5条)

  1. 状态同步问题 ⚠️ 高风险

    • 风险:批量生成时,如果用户刷新页面,可能丢失生成进度
    • 解决:将生成进度保存到session_state,支持断点续传
  2. API调用频率限制 ⚠️ 中风险

    • 风险:批量生成时,可能触发API频率限制
    • 解决:添加请求间隔,实现重试机制
  3. 内容过长导致页面卡顿 ⚠️ 中风险

    • 风险:生成的内容很长时,页面渲染可能卡顿
    • 解决:使用虚拟滚动或分页加载
  4. 并发生成冲突 ⚠️ 低风险

    • 风险:用户快速点击生成按钮,可能触发多次生成
    • 解决:添加生成状态锁,防止并发
  5. ZIP文件过大 ⚠️ 低风险

    • 风险:批量生成大量内容时,ZIP文件可能过大
    • 解决:添加文件大小检查,超过限制时分批下载

体验优化建议

  1. 添加快捷操作 💡

    • 在内容预览区域添加快捷按钮:复制、优化、下载
    • 使用图标按钮,节省空间
  2. 添加内容对比功能 💡

    • 批量生成时,可以选择2篇内容进行对比
    • 帮助用户快速筛选优质内容
  3. 添加内容模板预览 💡

    • 选择平台时,显示该平台的模板特点
    • 帮助用户选择合适的平台
  4. 优化错误提示 💡

    • 使用更友好的错误提示
    • 提供具体的解决方案
  5. 添加操作历史 💡

    • 记录用户的操作历史
    • 支持快速重做上次操作

七、功能归属检查

属于本Tab的功能

  1. 内容生成

    • 单篇生成
    • 批量生成
    • 平台模板选择
    • 优化技巧应用
  2. 内容预览

    • 内容展示
    • 快速操作(下载、复制)
    • 内容列表(批量模式)
  3. 质量分析

    • 内容评分
    • E-E-A-T评估
    • 事实密度评估
  4. 增强工具

    • 图片生成
    • 视频脚本生成
    • 多模态提示生成

⚠️ 建议调整的功能

  1. JSON-LD Schema生成 ⚠️

    • 当前位置:Tab2
    • 建议位置:Tab3(文章优化)或独立Tab
    • 理由:属于"优化"范畴,不是"创作"核心功能
  2. 技术配置生成 ⚠️

    • 当前位置:Tab2
    • 建议位置:Tab3(文章优化)或独立Tab
    • 理由:属于"优化"范畴,不是"创作"核心功能
  3. E-E-A-T强化 ⚠️

    • 当前位置:Tab2(内容详情中)
    • 建议位置:Tab3(文章优化)
    • 理由:属于"优化"操作,应该在优化Tab进行

不应放在这里的功能

  1. 工作流自动化

    • 当前位置:Tab7
    • 理由:已在独立Tab,无需调整
  2. 平台同步

    • 当前位置:Tab9
    • 理由:已在独立Tab,无需调整

八、实施建议

分阶段实施

第一阶段(MVP:完成P0问题修复

  • 修复批量生成查看问题
  • 统一图片生成入口
  • 改进进度反馈
  • 修复评分失败提示

第二阶段(优化):完成P1优化

  • 重组布局结构
  • 优化技巧选择器
  • 添加内容列表

第三阶段(增强):完成P2功能

  • 添加筛选和排序
  • 移动JSON-LD到Tab3
  • 添加内容对比功能

代码重构建议

  1. 提取内容生成逻辑

    • 将内容生成逻辑提取到独立函数
    • 便于测试和维护
  2. 统一状态管理

    • 使用统一的状态管理方式
    • 避免状态冲突
  3. 优化组件复用

    • 提取可复用的UI组件
    • 减少代码重复

测试建议

  1. 单元测试

    • 测试内容生成逻辑
    • 测试状态管理
  2. 集成测试

    • 测试完整生成流程
    • 测试错误处理
  3. 用户体验测试

    • 邀请真实用户测试
    • 收集反馈意见