feat: 创作工作台统一 + AI味检测/白标 + 移动端补全 + 合规发布闭环
- 新增创作工作台 studio.html:合并选题/内容工厂/文章管理为单一 tab 入口(iframe embed 模式) - 新增 AI味检测模块(ai_slop API + 页面,合规软硬问题分级) - 新增白标品牌配置(branding API + 页面 + deploy 私有化交付包) - 发布闭环:publishing 放宽至 editor + records/mark-published 接口 - 移动端响应式补全(admin/calendar/ai-slop 表格卡片兜底) - 修复菜单幂等播种缺陷(按 path 对齐,避免功能页孤立) - 新增短视频脚本 shortvideo.py 与 2026 市场调研简报
This commit is contained in:
+163
-1
@@ -3,7 +3,7 @@
|
||||
> 本文件为项目进度唯一真理源,所有进度信息以此为准。
|
||||
> 其他文档中的进度描述一律以本文为准。
|
||||
|
||||
**最后更新**:2026-06-23 (v25)
|
||||
**最后更新**:2026-07-04 (v26)
|
||||
|
||||
---
|
||||
|
||||
@@ -652,6 +652,53 @@ admin.html 新增「GEO 就绪度」标签页包含:
|
||||
|
||||
---
|
||||
|
||||
## 十三、2026 合规与市场契合升级(v26 · 2026-07-04)
|
||||
|
||||
### 背景:2025-09-01《人工智能生成合成内容标识办法》正式施行
|
||||
微信/小红书/抖音/B站/微博 强制 AI 生成内容**主动声明标识**;未标识/疑似 AI 内容限流、下架、封号。微信 3-27 新规明确禁"非真人自动化创作行为"(脚本/程序托管全程代写代发)。叠加创作者痛点从"怎么写快"转向"怎么不被限流/怎么有活人感/怎么变现",项目做了一轮合规与市场化升级。
|
||||
|
||||
### P0 — 合规生存(已落地)
|
||||
|
||||
| 改造 | 文件 | 说明 |
|
||||
|------|------|------|
|
||||
| 强制 AI 生成标识注入 | `scripts/writer.py` | 新增 `inject_ai_disclosure()`:按《标识办法》给三平台正文文末注入「AI 辅助创作」声明(显式),head 注入 `ai-generated` meta + AIGC 隐式标识 JSON-LD(隐式)。默认开启,可由 `SystemConfig(disclose_ai=false)` 或 `YZR_DISCLOSE_AI=0` 关闭 |
|
||||
| 发布模块去伪 | `platform/backend/app/api/publishing.py` | **删除伪造的 `status='success'`**:发布接口改为生成发布稿 + 置选题为 `pending_publish`(待人工发布),PublishRecord 状态为 `pending_manual`;明确"AI 稿须真人校验声明后手动发布,系统不代发" |
|
||||
| LLM 降级响亮失败 | `scripts/writer.py` | `_expand_section` 在 LLM 缺失时标记 `_degraded`,`run()` 结尾对降级稿报错告警,不再静默吐稀薄内容混入库 |
|
||||
|
||||
### P1 — 市场契合(已落地)
|
||||
|
||||
| 改造 | 文件 | 说明 |
|
||||
|------|------|------|
|
||||
| AI味检测+净化 可见化 | `platform/backend/app/api/ai_slop.py` + `platform/frontend/ai-slop.html` | 新 API(GET /report 跑合规检测、POST /purify 一键净化)+ 新前端页 + 导航"AI味检测"。把已有的去套话/合规能力变成用户可感知卖点(直击 2026 限流焦虑) |
|
||||
| 长文→短视频拆条 | `scripts/shortvideo.py` + `scheduler.py` | 新脚本将选题长文拆成 N 条短视频脚本(口播/分镜/适配平台),入库 `articles(platform=shortvideo_i)`;新增定时任务 `scheduled_shortvideo` 08:00,对前日待发布选题自动拆条 |
|
||||
| 外部推广去伪 | `platform/backend/app/api/external_promotion.py` | 新增 `POST /api/external/audit/run` 真实调用 `seo_auditor.py`(此前该脚本从未被任何接口/调度触发),让 SEO 审计可用而非摆设 |
|
||||
|
||||
### P2 — 健壮性(已落地)
|
||||
|
||||
| 改造 | 文件 | 说明 |
|
||||
|------|------|------|
|
||||
| 指标同步扩平台 | `platform/backend/app/core/scheduler.py` | `_run_metrics_sync` 从仅知乎扩展为遍历 `platform_urls`;微信/小红书无公开 API 时优雅跳过并日志说明,不再伪装"仅知乎有数据" |
|
||||
| 合规闸门防绕过 | `scripts/compliance_optimizer.py` | `force_pass` 选题不自动推进到 `ready`(保留待审查),避免绕过合规闸门直接进发布 |
|
||||
|
||||
### 关键文件变更汇总
|
||||
|
||||
| 文件 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `scripts/writer.py` | 修改 | AI 标识注入 + 降级标记 |
|
||||
| `platform/backend/app/api/publishing.py` | 修改 | 发布去伪,改待人工发布 |
|
||||
| `scripts/compliance_optimizer.py` | 修改 | force_pass 不推进状态 |
|
||||
| `platform/backend/app/api/ai_slop.py` | 新建 | AI味检测/净化 API |
|
||||
| `platform/frontend/ai-slop.html` | 新建 | AI味检测页 |
|
||||
| `scripts/shortvideo.py` | 新建 | 长文→短视频拆条 |
|
||||
| `platform/backend/app/core/scheduler.py` | 修改 | 指标扩平台 + 短视频定时任务 |
|
||||
| `platform/backend/app/api/external_promotion.py` | 修改 | SEO 审计可触发 |
|
||||
|
||||
### 验证
|
||||
- 全部修改文件 `ast.parse` 通过;`app.api.ai_slop / publishing / external_promotion` 与 `core.scheduler` 在 venv 下 `import` 成功
|
||||
- 注:本次为代码升级,**未重启服务/未跑全量测试套件**;发布/净化/拆条需运营在真实平台按声明手动完成
|
||||
|
||||
---
|
||||
|
||||
## 十二、规范说明
|
||||
|
||||
### 规划文档
|
||||
@@ -679,3 +726,118 @@ admin.html 新增「GEO 就绪度」标签页包含:
|
||||
↓
|
||||
如需 → 同步 README.md 摘要
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 第十四章:前端布局修复 + 盈利模式(私有化/白标)升级
|
||||
|
||||
**日期**:2026-07-11
|
||||
**目标**:① 修复前端布局/样式不合理项;② 将项目从"自用中台"升级为"可私有化部署 / 白标转售"产品。
|
||||
|
||||
### 一、前端布局/样式修复
|
||||
- **A1 导航未固定 + 顶部双空隙**:`uni-nav.js` 删除 `<nav>` 内联 `position:relative`,恢复 CSS `position:fixed`。(同步修复 A3 移动端下拉菜单脱离)
|
||||
- **A2 平板导航裁切**:汉堡菜单断点由 `max-width:768px` 提升至 `1000px`,769–1000px 链接改走下拉,不再静默丢失。
|
||||
- **A4 预览弹窗偏右**:`theme-modern.css` 移除 `@media(min-width:769px)` 下 `.preview-dialog-custom{left:90px}`,对话框恢复居中(影响 articles.html / factory.html)。
|
||||
- **A6 卡片横向滚动条**:`.card` 去掉 `overflow-x:auto`(el-table 自带内部滚动,重复滚动条消除,阴影不再被裁)。
|
||||
- **A5 暗色模式半成品(对比度不可读)**:暂禁用 `prefers-color-scheme:dark` 块,统一亮色主题,待引入 EP 暗色变量后启用。
|
||||
- **topics.html 筛选表单响应式**:6 个 `el-col` 加 `:xs/:sm/:md` 断点,移动端堆叠不溢出。
|
||||
- **metrics.html 统计卡**:`.stats-grid` 由 `repeat(4,1fr)` 改为 `repeat(auto-fit,minmax(180px,1fr))`,平板自适应列数。
|
||||
- **factory.html**:`.topic-grid` 用 `minmax(min(340px,100%),1fr)`,≤320px 屏不溢出。
|
||||
|
||||
### 二、盈利模式升级:白标 + 私有化部署
|
||||
- **白标配置后端**:新增 `api/branding.py`
|
||||
- `GET /api/branding`(公开,无需登录):返回 `brand_name/brand_logo/brand_primary_color/brand_support_email/version`。
|
||||
- `PUT /api/branding`(管理员):更新白标配置,写入 `system_configs`。
|
||||
- `main.py` 注册 `branding.router`。
|
||||
- **白标种子**:`initial_data.py` 写入 `brand_name/brand_logo/brand_primary_color/brand_support_email` 默认。
|
||||
- **前端应用品牌**:`uni-nav.js` `mounted` 调 `/api/branding`,动态设置平台名、Logo、导航渐变主色,并写入 `--color-primary`;新增 `branding.html` 白标设置页(管理员,含实时预览)。
|
||||
- **导航入口**:`initial_data.py` 菜单加「白标设置」(admin),`uni-nav.js` 默认 admin 项补充。
|
||||
- **部署包 `deploy/`**:
|
||||
- `Dockerfile`(python:3.11-slim,默认 SQLite,零依赖)
|
||||
- `docker-compose.yml`(含可选 PostgreSQL 服务与数据卷)
|
||||
- `.env.example`(管理员密码 / LLM Key / 数据库)
|
||||
- `README.md`(私有化 + 白标交付指南、定价建议)
|
||||
|
||||
### 验证
|
||||
- 服务 `yzr-platform.service` 重启成功,无启动错误。
|
||||
- `GET /api/branding` 返回种子默认值;`PUT` 管理员保存后持久化生效,重置回默认。
|
||||
- `node --check uni-nav.js`、`ast.parse(branding.py)` 均通过。
|
||||
|
||||
### 待办(已解决,见第十六章)
|
||||
- ~~`init_db()` 的 SQLite `topics.series` 迁移缺口(测试 32/33)~~:经复跑为陈旧 `test.db` 所致,当前 33/33 全过;迁移 fallback 对 SQLite 正常。
|
||||
- 菜单幂等播种缺陷(见第十六章):`initial_data.py` 原 `if Menu.count()==0` 全有/全无逻辑导致已在库时章节四新增的"文章管理/内容工厂/白标设置"未入库,导航不可达,已修复。
|
||||
|
||||
---
|
||||
|
||||
## 第十五章:移动端响应式补全
|
||||
|
||||
**日期**:2026-07-11
|
||||
**目标**:审计并补全全部前端的移动端(≤420px)适配。
|
||||
|
||||
### 审计结论
|
||||
- 已良好适配:topics / articles / campaigns / tasks / metrics / insights / platforms / assets / factory / index / landing / login / users / logs(表格均有 card-list 兜底或本就是卡片布局;固定宽弹窗由全局 `≤768px` 全宽规则兜底)。
|
||||
- 真实破裂点(3 处 el-table 无移动端兜底):
|
||||
1. `ai-slop.html` 问题明细表(line 47)
|
||||
2. `calendar.html` 日程弹窗内 `selectedDayEntries` 表(line 189)
|
||||
3. `admin.html` 平台配置表(line 202,缺 `data-table` 类,全局隐藏规则未覆盖)
|
||||
|
||||
### 修复
|
||||
- 三处统一改为「`el-table`(`.card-table`/`.data-table`) + `.card-list-mobile` 卡片列表」的 `v-if`/`v-else` 兜底,沿用 `theme-modern.css` 的 `.card-list-mobile` 全局样式(≤768px 自动切换)。
|
||||
- 桌面端表格保留,移动端自动转为可点列表,操作按钮(编辑/删除/查看)一并带入卡片。
|
||||
- 校验:三页结构 `v-if`/`v-else` 配对正确,HTTP 200 正常服务。
|
||||
|
||||
### 结论
|
||||
前端现已**完整支持移动端响应式**:所有数据表在窄屏均以卡片列表呈现,导航/筛选/弹窗/统计网格均自适应,无横向溢出。
|
||||
|
||||
---
|
||||
|
||||
## 第十六章:菜单播种缺陷修复(导航可达性)
|
||||
|
||||
**日期**:2026-07-11
|
||||
**触发**:生产服务重启后核对 `/api/menus/active`,发现导航缺少"文章管理 / 内容工厂 / 白标设置",而 `articles.html`(章节四重写)、`factory.html`、`branding.html` 均为真实页面 → 这些入口被"孤立",用户无法从导航进入。
|
||||
|
||||
### 根因
|
||||
- `initial_data.py` 菜单播种原逻辑为 `if db.query(Menu).count() == 0:` —— **仅当菜单表完全为空时才播种**。
|
||||
- 生产库此前已有旧菜单集,故章节四新增的三个菜单从未插入;`uni-nav.js` 运行时以 DB 菜单覆盖 fallback,于是三个入口从导航消失。
|
||||
- 另:旧库首页菜单 `path="index.html"`(无斜杠)与新种子 `"/index.html"` 不匹配,初次修复导致"工作台"重复出现(count 13)。
|
||||
|
||||
### 修复
|
||||
- 菜单播种改为**按 path 幂等对齐**:已存在则更新 `sort_order/roles/icon/is_active`(保留原名称,避免意外重命名),缺失则插入。
|
||||
- 新增首页路径归一化:若同时存在 `index.html` 与 `/index.html` 则删除旧的;若仅 `index.html` 则改路径为 `/index.html`,消除重复入口。
|
||||
- `init_db()` 在每次启动执行,重启后自动对齐。
|
||||
|
||||
### 验证
|
||||
- 重启 `yzr-platform.service` 后 `/api/menus/active` 返回 **12 个菜单**,顺序正确、无重复:工作台→选题→文章管理→内容工厂→数据→日历→素材→任务→外推营销→AI味检测→白标设置→系统。
|
||||
- 12 个对应 HTML 页面均 HTTP 200。
|
||||
- `python3 tests/test_new_features.py`:**33/33 通过**(菜单播种变更未破坏 seeding)。
|
||||
|
||||
### 当前完整导航(运营闭环)
|
||||
选题 → 内容工厂生成 → 文章管理编辑/AI味检测 → 发布记录标记已发布(合规:系统不代发,真人校验后手动发布)。
|
||||
|
||||
---
|
||||
|
||||
## 第十七章:创作流程统一(导航去碎片化)
|
||||
|
||||
**日期**:2026-07-11
|
||||
**目标**:将分散的「选题 / 内容工厂 / 文章管理」三个独立导航入口合并为单一「创作工作台」,减少导航碎片化。
|
||||
|
||||
### 方案
|
||||
采用 **`studio.html` 单一入口 + `el-tabs` 内嵌三个已有页面(`?embed=1` 模式)**,而非重写三套逻辑——复用已验证页面,零逻辑重复、风险最低。
|
||||
|
||||
### 实现
|
||||
- **新增 `studio.html`「创作工作台」**:`el-tabs` 三个标签页(选题 / 内容生成 / 文章管理),各以 `<iframe>` 懒加载对应页面(`topics.html?embed=1` 等);首次切到才加载,保留各页状态。整页 flex 布局填满视口,iframe `position:absolute; inset:0` 自适应。
|
||||
- **嵌入模式 `?embed=1`**:`topics.html` / `factory.html` / `articles.html` 在 `mounted` 检测 `embed` 参数 → `isEmbed=true` 且 `<body class="embed">`:
|
||||
- `<uni-nav>` 加 `v-if="!isEmbed"` 隐藏子页面自身导航(避免双层导航);
|
||||
- `theme-modern.css` 新增 `body.embed .main-content { padding-top:0 }` 去掉顶部留白;
|
||||
- 跨页链接(`redirectToPage` / `goToArticles`)在 embed 下改用 `window.top.location.href`,整页跳转而非 iframe 内嵌套。
|
||||
- **导航收敛**:`initial_data.py` 菜单种子以「创作工作台→studio.html」替换原三入口,并将 `topics.html/factory.html/articles.html` 置 `is_active=False`(页面仍可被 studio 内嵌与直接 URL 访问,不丢失功能);`uni-nav.js` fallback 同步更新。
|
||||
- 排序:工作台(0) → 创作工作台(1) → 数据(2) → 日历(3) → 素材(4) → 任务(5) → 外推营销(6) → AI味检测(7) → 白标设置(8,admin) → 系统(9,admin)。
|
||||
|
||||
### 验证
|
||||
- 重启 `yzr-platform.service`;`/api/menus/active` 返回 **10 个菜单**,含「创作工作台(studio.html)」,原三入口已不在主导航。
|
||||
- `studio.html / topics.html / factory.html / articles.html` 均 HTTP 200;studio 内 iframe `src` 带 `embed=1`。
|
||||
- 三个页面内联脚本 `node --check` 通过;`initial_data.py` 编译通过。
|
||||
- `python3 tests/test_new_features.py`:**33/33 通过**。
|
||||
|
||||
### 当前导航(10 项,创作闭环归于单一入口)
|
||||
工作台 → **创作工作台(选题·生成·文章)** → 数据 / 日历 / 素材 / 任务 / 外推营销 / AI味检测 / 白标设置 / 系统。
|
||||
|
||||
Reference in New Issue
Block a user