Files
Yuzhiran Dev 52564ad036 fix: 今日新增筛选统计不准 + LLM提示词动态当前日期 + 微信配图按选题生成
topics.html:
- 今日新增筛选时全量拉取 allTopics 用于保持 stats 统计正确,todayTopics
  存储服务端日期过滤结果
- filteredTopics 对 'today' 返回 todayTopics,不按不存在的 status 过滤

writer.py/research.py/outline.py:
- 所有 LLM 提示词注入今天的动态年月日(datetime.now)
- 禁用过时数据的年份改为动态 {当前年-1}-{当前年}
- 每个论点必须配真实最新案例+数据来源

writer.py WeChat 配图:
- 从 null placeholder 改为动态 SVG,展示选题标题+领域
- 标题自动换行(24字/行),附蓝色装饰条 + 渐变背景
2026-05-18 06:25:47 +08:00

260 lines
8.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 宇之然平台升级计划
> 基于 2026-05 代码库现状分析
---
## 现状能力矩阵
| 能力 | 状态 | 备注 |
|------|------|------|
| 趋势采集 → 选题 | ✅ 跑通 | APScheduler 01:30 定时采集 |
| 研究/大纲/创作 | ✅ 跑通 | 全链路LLM |
| 多平台适配(3平台) | ✅ 跑通 | writer.py 独立适配 |
| 合规审查 | ✅ 跑通 | LLM迭代修复 |
| 配图/封面生成 | ❌ 未接入 | `image_generator.py` 独立脚本,API 未整合 |
| 文章管理页面 | ❌ 缺失 | 只有选题管理,无独立文章列表页 |
| 发布 UI | ⚠️ 简陋 | topics.html 直接调 API,无确认流/平台选择 |
| 前端体验 | ⚠️ 内部工具 | Vue CDN,无统一状态/加载/错误处理 |
| 数据看板 | ⚠️ 基础 | 只读聚合,未对接平台 API |
| 定时调度 | ✅ 框架完整 | generator.py → optimizer.py → sync.py |
| 任务状态追踪 | ✅ 有框架 | ContentTask + tasks.html |
---
## Phase 1 — 高收益低投入(约 3 天)
### 1.1 配图整合到创作流程
**现状**`scripts/image_generator.py` 已能生成封面/图表/概念图,但只独立运行。
**改动**
`scripts/creator.py` 在 writer 成功后追加 image 生成:
```python
# writer.py 成功后
if run_step("writer.py", topic_id):
run_step("image_generator.py", topic_id)
```
`image_generator.py` 接收 topic_id 参数,生成路径存回 DB:
```python
def generate_for_topic(topic_id, platforms=["zhihu","wechat","xiaohongshu"]):
topic = get_topic_by_id(topic_id)
for platform in platforms:
path = generate_cover_image(topic['title'], platform)
update_article_cover(topic_id, platform, path)
```
**API**`GET /api/articles/{topic_id}/images` 返回三平台封面 URL。
**估计**1 天。
### 1.2 文章管理页面
**现状**:无独立文章页。
**新建** `platform/frontend/articles.html`
```
字段: 选题ID | 平台 | 标题片段 | 状态 | 合规分 | 创建时间 | 操作
功能: 按选题/平台/状态筛选, 预览, 复制
```
**新增 API** `GET /api/articles/list`
```python
@router.get("/list")
def list_articles(
topic_id: str = None,
platform: str = None,
status: str = None,
limit: int = 50,
):
query = db.query(Article).join(Topic).add_columns(Topic.title.label("topic_title"))
# 筛选 + 分页
```
**估计**1.5 天。
### 1.3 统一前端体验
**每页 30 分钟**批量改进:
- 所有 fetch 类方法加 try/catch + loading 状态
- 空数据时显示 `.empty-state` UIadmin.html 已有现成样式)
- 操作反馈用 `this.$message`
**估计**0.5 天。
---
## Phase 2 — 体验闭环(约 5 天)
### 2.1 发布审批 UI
**现状**`topics.html` 点"发布" → 直接调 API 标记已发布。
**改进**:发布按钮改为弹窗,可选平台、确认。
**API 改动**
```python
class MultiPublishRequest(BaseModel):
topic_id: str
platforms: List[str] # ["zhihu", "wechat", "xiaohongshu"]
scheduled_at: Optional[datetime] = None
```
`PublishRecord``platform` 字段(当前写死 "all")。
**估计**2 天。
### 2.2 日历关联文章状态
日历卡片加文章状态指示(已完成/待审查/已发布)+ 平台图标。
**估计**1 天。
### 2.3 CSS 收敛 + 移动端适配
- 公共样式从各 HTML 移到 `theme-modern.css`
- 补全移动端卡片布局(当前 admin.html 有,metrics.html/tasks.html 等没有)
- 统一按钮尺寸、间距、颜色
**估计**1-2 天。
---
## Phase 3 — 数据闭环(约 7 天)
### 3.1 平台数据对接
`scripts/sync_metrics.py` 每天自动拉取各平台阅读量/互动数据,存入 `ContentMetrics`
调度:scheduler.py 加 `scheduled_metrics_sync`06:00)。
**估计**:3-5 天(取决于平台 API 复杂度)。
### 3.2 数据看板增强
- 趋势图(周/月/季)
- 各平台对比
- 最佳发布时间分析
前端用 Chart.js(CDN),数据来自现有 `GET /api/metrics/dashboard`
**估计**2 天。
---
## Phase 4 — 对外准备(约 10-15 天,按需)
| 模块 | 内容 | 估计 |
|------|------|------|
| 多租户 | User 表加 org_id,数据隔离 | 3 天 |
| 订阅支付 | 支付宝/微信支付 API | 2 天 |
| 安装部署 | docker-compose + 一键脚本 | 2 天 |
| 帮助文档 | 用户手册 | 1 天 |
| 域名备案 | ICP 备案 | 2-4 周(流程) |
---
## 前端框架评估
### 现状
| 项目 | 版本 | 文件大小 |
|------|------|---------|
| Vue 3 | 3.5.32 (2024 Q4) | 160KB min |
| Element Plus | 2.13.7 (2025/2026) | 2.1MB full |
| 构建工具 | 无 | — |
### 选项对比
| 方案 | 成本 | 收益 | 推荐 |
|------|------|------|------|
| **A. 维持 CDN 现状** | 0 | — | ⭐ 自用首选 |
| B. 升级到最新 Vue 3.5.x + Element Plus CDN | ~0 | 兼容性修复 | 没必要(已是最新) |
| C. CDN → ESM + importmap 渐进 | 1-2d | 按需加载,减 1.5MB | 可选优化 |
| D. Vue 3 + Vite + SFC | 3-5d | TS、HMR、组件化 | 对外前做 |
| E. Nuxt 3 | 5-10d | SSR、路由 | 杀鸡用牛刀 |
### 建议:维持 CDN,暂不换框架
**理由**
1. **版本够新**Vue 3.5.32 + Element Plus 2.13.7 都是最新生态版本,没有升级动力
2. **CDN 是优势**:对于自用工具,`edit file → refresh browser` 的迭代速度远快于 `npm run dev`
3. **代价与收益不匹配**:换 Vite 需要改 8 个 HTML 页 + 2 个 JS 组件,换来的是 TypeScript(但后端 Python 才是核心逻辑)和 HMR(但每页本来就不大)
4. **唯一值得做的优化**:改用 `importmap` + Element Plus 按需引入,可以把 2.1MB bundle 减到 ~500KB。但这对自用工具感知不强
**如果要对外商用**Phase 4 时再切 Vite + SFC,用 Vue 3 + Vite 标准模版重写前端。
## 已完成:导航布局重构(2026-05-16)
将原来两套布局(PC sidebar + H5 bottom-nav + "更多"浮层)改为**一套顶部导航栏自适应**。
**改动**
- 新建 `uni-nav.js` 合并 navbar + navigation 两个组件,统一为单行 top-nav
- PC:所有菜单项在一行显示
- H5<=768px):菜单折叠进 hamburger,点击弹出下拉面板
- `theme-modern.css` 添加 `.main-content { padding-top: 60px }` 全局规则,10 个页面同时受益
- 删除所有页面中 `margin-left: 180px` 相关覆写
- 删除 `navigation-component.js``navbar-component.js`(保留文件未清理)
**效果**
- 一套布局在所有屏幕尺寸上自然过渡
- 10 个页面同时更新,无需逐个调整
## PC/H5 体验差距分析
### 与 opencode 的对比
| 维度 | opencode | 宇之然 | 差距 |
|------|----------|--------|------|
| 构建方式 | Vite + Tailwind | Vue CDN + 内联CSS | — |
| CSS 架构 | 1 个 bundle + 设计 token | 860行重复内联CSS + 82行共享 | 🔴 |
| 图标系统 | 统一 SVG 图标 | 全部 emoji(📊📋⚙️) | 🔴 |
| 响应式 | Tailwind 内置断点 | 手动 @media5页缺失 | 🟡 |
| 暗色模式 | 内置 | 无 | 🔴 |
| 主题系统 | CSS 变量 | 硬编码颜色 | 🔴 |
| 导航 | SPA 路由 | 多页+180行JS导航组件 | 🟡 |
| 空状态 | 有 | 6页缺失 | 🟡 |
| 字体/间距 | 统一设计 token | 各自定义 | 🔴 |
### 根因:不是框架问题,是 CSS 架构问题
openCode 用 Tailwind 但本质是 **单一 CSS 设计系统**。宇之然的问题是**没有设计系统**,而不是没有用 Tailwind。
即使维持 Vue CDN,也能通过以下方式大幅提升体验一致性。
### PC/H5 优化计划(投入与收益评估)
| # | 问题 | 修复方式 | 估计 | 体验提升 |
|---|------|---------|------|---------|
| 1 | calendar.html 缺少 `</template>` | 修复该 bug | 5min | ❌ 修复 bug |
| 2 | index.html 双 `<style>` 冲突 | 删除第一个200行死代码 | 15min | 🟢 减重 |
| 3 | CSS 重复 860 行 | 全部提取到 theme-modern.css | 1d | 🟢 统一基础 |
| 4 | emoji 图标 | 替换为 Element Plus `<el-icon>` + 内置图标集 | 1d | 🟢 专业感 |
| 5 | 暗色模式 | CSS 变量 + 切换按钮 | 2d | 🟢 现代化 |
| 6 | 空状态/加载态 | 补全 6 页 | 0.5d | 🟡 体验完整 |
| 7 | H5 缺失卡片布局 | 补全 5 页 | 0.5d | 🟡 移动可用 |
| 8 | 导航组件简化 | 去掉 DOM 注入路径,只用 Vue 组件 | 0.5d | 🟡 减少复杂度 |
### 推荐执行顺序
1. **立即** — 修复 calendar.html bug + index.html 死代码(15 分钟)
2. **Phase 2b** — CSS 收敛 + emoji 替换 + 空状态补全(1.5 天)
3. **Phase 2c** — 暗色模式(2 天,可选)
4. **不做** — 不需要切框架,不需要 Tailwind,不需要 SPA
## 执行建议
1. **先做 Phase 1.2(文章页)** — 每天使用,数据已存在
2. **再做 Phase 1.1(配图)** — 创作完自动配封面,体验提升明显
3. **Phase 1.3 穿插各页** — 逐步打磨
4. **按需进入 Phase 2** — 看自用感受决定
5. **只有决定对外才进 Phase 4**