283 lines
7.0 KiB
Markdown
283 lines
7.0 KiB
Markdown
|
|
# 布局升级复杂度评估与实施指南
|
|||
|
|
|
|||
|
|
## 📊 复杂度评估总结
|
|||
|
|
|
|||
|
|
**总体复杂度:⭐⭐⭐☆☆(中等)**
|
|||
|
|
|
|||
|
|
### 为什么是中等复杂度?
|
|||
|
|
|
|||
|
|
✅ **有利因素**:
|
|||
|
|
- 你已经有了基础的 CSS 样式系统
|
|||
|
|
- 已经使用了 `st.tabs` 作为主导航
|
|||
|
|
- 已经部分使用了 `st.container(border=True)` 卡片式设计
|
|||
|
|
- 侧边栏已经有 form 结构
|
|||
|
|
- 代码结构相对清晰
|
|||
|
|
|
|||
|
|
⚠️ **需要注意**:
|
|||
|
|
- 文件较大(5864行),需要系统化改动
|
|||
|
|
- 有 37 个 `st.expander` 需要评估是否改为 tabs/container
|
|||
|
|
- 需要保持功能逻辑不变,只改布局
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 推荐方案:方案2 + 方案4 混合
|
|||
|
|
|
|||
|
|
### 核心改动点
|
|||
|
|
|
|||
|
|
1. **CSS 增强**(30分钟)
|
|||
|
|
- 增强卡片样式
|
|||
|
|
- 优化侧边栏视觉层次
|
|||
|
|
- 统一间距和阴影
|
|||
|
|
|
|||
|
|
2. **Expander → Container/Tabs 转换**(2-3小时)
|
|||
|
|
- 将功能相关的多个 expander 合并为 tabs
|
|||
|
|
- 将单个 expander 改为 container(border=True)
|
|||
|
|
- 保持次要信息用 expander
|
|||
|
|
|
|||
|
|
3. **侧边栏优化**(30分钟)
|
|||
|
|
- 添加分组容器
|
|||
|
|
- 优化视觉层次
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📋 详细实施步骤
|
|||
|
|
|
|||
|
|
### 阶段 1:CSS 增强(低风险,30分钟)
|
|||
|
|
|
|||
|
|
**改动范围**:只修改 CSS 部分(第 36-170 行)
|
|||
|
|
|
|||
|
|
**具体改动**:
|
|||
|
|
|
|||
|
|
```css
|
|||
|
|
/* 1. 增强卡片样式 */
|
|||
|
|
div[data-testid="stVerticalBlockBorderWrapper"] {
|
|||
|
|
border-radius: var(--radius);
|
|||
|
|
box-shadow: var(--shadow);
|
|||
|
|
padding: 1.5rem !important; /* 新增:内边距 */
|
|||
|
|
background: #FFFFFF !important; /* 新增:白色背景 */
|
|||
|
|
margin-bottom: 1rem !important; /* 新增:卡片间距 */
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* 2. 优化侧边栏分组 */
|
|||
|
|
section[data-testid="stSidebar"] .stForm {
|
|||
|
|
background: #FFFFFF;
|
|||
|
|
border-radius: 8px;
|
|||
|
|
padding: 1rem;
|
|||
|
|
margin-bottom: 1rem;
|
|||
|
|
border: 1px solid var(--border);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* 3. Expander 样式优化(保留但美化) */
|
|||
|
|
.streamlit-expanderHeader {
|
|||
|
|
font-weight: 500;
|
|||
|
|
color: var(--text);
|
|||
|
|
}
|
|||
|
|
.streamlit-expanderContent {
|
|||
|
|
padding-top: 0.75rem;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* 4. 增强分隔线 */
|
|||
|
|
hr {
|
|||
|
|
border: none;
|
|||
|
|
border-top: 1px solid var(--border);
|
|||
|
|
margin: 1.5rem 0;
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**风险**:极低,只改样式,不影响功能
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 阶段 2:Expander 重构(中等风险,2-3小时)
|
|||
|
|
|
|||
|
|
#### 2.1 识别需要改动的 Expander
|
|||
|
|
|
|||
|
|
**改为 Tabs 的情况**(功能相关的多个选项):
|
|||
|
|
- ✅ Tab1 中的"组合模式选择" + "词库管理" → 可以合并为一个 tabs
|
|||
|
|
- ✅ Tab1 中的"智能关键词挖掘"已经有 tabs(保持)
|
|||
|
|
- ✅ Tab3 中的多个分析 expander → 可以合并为 tabs
|
|||
|
|
|
|||
|
|
**改为 Container 的情况**(主要功能区域):
|
|||
|
|
- ✅ Tab1 中的"组合模式选择"区域 → 已经是 container,保持
|
|||
|
|
- ✅ Tab2 中的主要输入区域 → 确保用 container
|
|||
|
|
- ✅ Tab3 中的优化结果展示 → 用 container
|
|||
|
|
|
|||
|
|
**保留 Expander 的情况**(次要/详细信息):
|
|||
|
|
- ✅ "查看技巧说明" → 保持 expander
|
|||
|
|
- ✅ "详细评分与改进建议" → 保持 expander
|
|||
|
|
- ✅ "预览最后一篇" → 保持 expander
|
|||
|
|
|
|||
|
|
#### 2.2 具体改动示例
|
|||
|
|
|
|||
|
|
**示例 1:Tab1 中的词库管理区域**
|
|||
|
|
|
|||
|
|
**当前代码**(第 797 行):
|
|||
|
|
```python
|
|||
|
|
with st.expander("词库管理", expanded=False):
|
|||
|
|
# 词库编辑和导入导出
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**改为**:
|
|||
|
|
```python
|
|||
|
|
with st.container(border=True):
|
|||
|
|
st.markdown("### 📚 词库管理")
|
|||
|
|
wordbank_tab1, wordbank_tab2 = st.tabs(["编辑词库", "导入/导出"])
|
|||
|
|
|
|||
|
|
with wordbank_tab1:
|
|||
|
|
# 词库编辑代码
|
|||
|
|
with wordbank_tab2:
|
|||
|
|
# 导入导出代码
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**示例 2:Tab3 中的分析结果**
|
|||
|
|
|
|||
|
|
**当前代码**(多个 expander):
|
|||
|
|
```python
|
|||
|
|
with st.expander("📈 事实密度分析", expanded=False):
|
|||
|
|
# 分析内容
|
|||
|
|
|
|||
|
|
with st.expander("🏗️ 结构化块分析", expanded=False):
|
|||
|
|
# 分析内容
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**改为**:
|
|||
|
|
```python
|
|||
|
|
analysis_tabs = st.tabs(["📈 事实密度", "🏗️ 结构化块", "📝 强化详情"])
|
|||
|
|
|
|||
|
|
with analysis_tabs[0]:
|
|||
|
|
with st.container(border=True):
|
|||
|
|
# 事实密度分析内容
|
|||
|
|
|
|||
|
|
with analysis_tabs[1]:
|
|||
|
|
with st.container(border=True):
|
|||
|
|
# 结构化块分析内容
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 阶段 3:侧边栏优化(低风险,30分钟)
|
|||
|
|
|
|||
|
|
**当前结构**(第 563-697 行):
|
|||
|
|
```python
|
|||
|
|
with st.sidebar:
|
|||
|
|
st.header("全局配置")
|
|||
|
|
with st.form("global_config_form"):
|
|||
|
|
# 所有配置项
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**优化后**:
|
|||
|
|
```python
|
|||
|
|
with st.sidebar:
|
|||
|
|
st.header("⚙️ 全局配置")
|
|||
|
|
|
|||
|
|
# 分组 1:LLM 配置
|
|||
|
|
with st.container(border=True):
|
|||
|
|
st.markdown("#### 🤖 LLM 配置")
|
|||
|
|
with st.form("llm_config_form"):
|
|||
|
|
# LLM 相关配置
|
|||
|
|
|
|||
|
|
# 分组 2:品牌信息
|
|||
|
|
with st.container(border=True):
|
|||
|
|
st.markdown("#### 🏢 品牌信息")
|
|||
|
|
with st.form("brand_config_form"):
|
|||
|
|
# 品牌相关配置
|
|||
|
|
|
|||
|
|
# 分组 3:其他设置
|
|||
|
|
with st.container(border=True):
|
|||
|
|
st.markdown("#### ⚙️ 其他设置")
|
|||
|
|
# 其他配置
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ⏱️ 时间估算
|
|||
|
|
|
|||
|
|
| 阶段 | 任务 | 时间 | 风险 |
|
|||
|
|
|------|------|------|------|
|
|||
|
|
| 阶段 1 | CSS 增强 | 30分钟 | ⭐ 极低 |
|
|||
|
|
| 阶段 2 | Expander 重构 | 2-3小时 | ⭐⭐ 中等 |
|
|||
|
|
| 阶段 3 | 侧边栏优化 | 30分钟 | ⭐ 极低 |
|
|||
|
|
| **总计** | | **3-4小时** | |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎨 改动前后对比
|
|||
|
|
|
|||
|
|
### 改动前
|
|||
|
|
- 大量 expander 折叠,需要点击展开
|
|||
|
|
- 视觉层次不够清晰
|
|||
|
|
- 卡片样式不统一
|
|||
|
|
|
|||
|
|
### 改动后
|
|||
|
|
- 主要功能用 tabs,一目了然
|
|||
|
|
- 次要信息用 expander,保持简洁
|
|||
|
|
- 卡片样式统一,视觉更现代
|
|||
|
|
- 侧边栏分组清晰
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ⚠️ 注意事项
|
|||
|
|
|
|||
|
|
1. **逐步实施**:先改 CSS,测试没问题再改布局
|
|||
|
|
2. **保持功能**:只改布局,不改逻辑
|
|||
|
|
3. **测试每个 Tab**:改完一个 tab 就测试一次
|
|||
|
|
4. **保留 Expander**:不是所有 expander 都要改,次要信息保持 expander 更合适
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🚀 快速开始
|
|||
|
|
|
|||
|
|
### 最小改动方案(1小时)
|
|||
|
|
|
|||
|
|
如果时间紧张,可以先做这些:
|
|||
|
|
|
|||
|
|
1. **只增强 CSS**(30分钟)
|
|||
|
|
- 添加卡片内边距和背景
|
|||
|
|
- 优化侧边栏样式
|
|||
|
|
|
|||
|
|
2. **改 3-5 个关键 Expander**(30分钟)
|
|||
|
|
- Tab1 的词库管理
|
|||
|
|
- Tab3 的分析结果区域
|
|||
|
|
- 其他明显需要改的
|
|||
|
|
|
|||
|
|
这样就能看到明显改善,后续再逐步完善。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📝 检查清单
|
|||
|
|
|
|||
|
|
实施完成后检查:
|
|||
|
|
|
|||
|
|
- [ ] 所有主要功能区域都用 container(border=True) 或 tabs
|
|||
|
|
- [ ] 次要信息保持用 expander
|
|||
|
|
- [ ] 侧边栏有清晰的分组
|
|||
|
|
- [ ] 卡片样式统一(圆角、阴影、内边距)
|
|||
|
|
- [ ] 所有功能正常工作
|
|||
|
|
- [ ] 响应式布局正常(不同屏幕尺寸)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 💡 建议
|
|||
|
|
|
|||
|
|
**推荐实施顺序**:
|
|||
|
|
1. ✅ 先做阶段 1(CSS),立即看到效果
|
|||
|
|
2. ✅ 再做阶段 3(侧边栏),改动小风险低
|
|||
|
|
3. ✅ 最后做阶段 2(Expander),需要仔细测试
|
|||
|
|
|
|||
|
|
**如果遇到问题**:
|
|||
|
|
- 先回退到上一个稳定版本
|
|||
|
|
- 逐个 tab 测试,不要一次性改完
|
|||
|
|
- 保留原代码注释,方便对比
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 预期效果
|
|||
|
|
|
|||
|
|
实施完成后,你的工具将:
|
|||
|
|
- ✨ 视觉更现代,更像产品级应用
|
|||
|
|
- 🎯 功能组织更清晰,减少滚动疲劳
|
|||
|
|
- 📱 用户体验更好,操作更直观
|
|||
|
|
- 🎨 保持专业感,同时更美观
|
|||
|
|
|
|||
|
|
**复杂度总结**:中等,但可以分阶段实施,风险可控!
|