Files
yu-zhi-ran/docs/upgrade-plan.md
T
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

8.8 KiB
Raw Blame History

宇之然平台升级计划

基于 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 生成:

# writer.py 成功后
if run_step("writer.py", topic_id):
    run_step("image_generator.py", topic_id)

image_generator.py 接收 topic_id 参数,生成路径存回 DB:

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)

APIGET /api/articles/{topic_id}/images 返回三平台封面 URL。

估计1 天。

1.2 文章管理页面

现状:无独立文章页。

新建 platform/frontend/articles.html

字段: 选题ID | 平台 | 标题片段 | 状态 | 合规分 | 创建时间 | 操作
功能: 按选题/平台/状态筛选, 预览, 复制

新增 API GET /api/articles/list

@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 改动

class MultiPublishRequest(BaseModel):
    topic_id: str
    platforms: List[str]  # ["zhihu", "wechat", "xiaohongshu"]
    scheduled_at: Optional[datetime] = None

PublishRecordplatform 字段(当前写死 "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_sync06: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.jsnavbar-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