feat(发布计划): 标题 + 正文(标题 || 正文 _手机号_日期_编号)+ 发布流程多一步填正文;账号名称全面下线
一、正文(video_plan.body,schema v10→v11)
- 标题 txt 一行里可带正文,用 `||` 分隔(标题/正文都常带下划线,不能再用下划线分列;
只切第一处,正文里再出现 `||` 原样保留):`标题 || 正文 _手机号_日期_编号`
正文可省(老文件照收);两种写法(标题在前 / 手机号在前)都能带正文
- 长度:标题 ≤100 字、正文 ≤1000 字,超了**拒收不截断**
- 「待发布」判据从"有没有标题"改成"**标题或正文有没有内容**"(`_sync_content_status` 一处定义,
改标题/改正文/批量导入三处共用),只给正文的行也照样待发
- 导入配对:同标题补一条新正文**要收下**(不能当重复跳过);已有别的标题仍然拒收(不静默覆盖)
二、发布流程多一步
- 骨架 15 → **17 步**:⑪ 输入文字(计划的标题) → ⑫ 点击正文框 → ⑬ 输入文字(计划的正文) → ⑭ 发布 → ⑮ 标记
- 「输入文字」取值来源集中到 `RELEASE_TEXT_SOURCES`:release_title(_topics) / release_body(_topics) /
release_title_body(标题+正文,只有一个输入框的抖音版本用);`build_caption(key=…)` 支持三种来源
- 任务编辑器与发布计划就地编辑器的下拉都补齐这 6 档;待抓的空选择器 5 → 6 个(多了正文框)
三、账号名称下线(用户要求:只要抖音号)
- 发布计划:卡片 / 明细表 / 搜索 / 导出 CSV 都不再有账号名称(CSV 改为
发布日期/设备号/手机号/抖音号/编号/标题/正文/分享链接/发布时间)
- 账号台账:列表列 / 编辑弹窗 / 粘贴导入预览 / 设备维度弹窗 / 导入说明与示例都去掉;
**粘贴导入忽略这一列**(不报错、不落库),库里的历史值保留(不删列)
- 设备端 Agent 身份页:平台不再下发名称(传空串,**不改 APK 也能生效**,避免老版本解析失败)
四、文档 / 测试
- DATA_MODEL:body 列 + schema 11;API:upload_titles(`||` 语义)、PUT {title,body}、CSV 列、骨架 17 步
- TASK_DEV:骨架 17 步、`input_text` 六个取值来源表、正文长度上限
- ARCHITECTURE:release.js 说明(正文、不显示账号名称)
- 测试(%TEMP% 被系统清理后重建):test_plan_body.py 33 项(解析/取内容/骨架/入库/导入配对)、
smoke_app_body.py 10 项(整机装配:页面、PUT 改正文、时间线、CSV 表头)—— 全过
This commit is contained in:
+5
-2
@@ -525,7 +525,8 @@ class VideoPlan(db.Model):
|
||||
release_date = db.Column(db.String(10), default="", index=True) # "YYYY-MM-DD"(纯日期,等值比较)
|
||||
seq = db.Column(db.Integer, default=1) # 编号,从 1 起(不用 0 表示"无")
|
||||
seq_auto = db.Column(db.Boolean, default=True) # 编号是自动分配出来的(界面要提示)
|
||||
title = db.Column(db.Text, default="") # 文案
|
||||
title = db.Column(db.Text, default="") # 标题(抖音发布页的「标题」框)
|
||||
body = db.Column(db.Text, default="") # 正文/文案(发布页的文案框;标题 txt 里用 || 分隔)
|
||||
video_file = db.Column(db.String(120), default="") # 平台落盘文件名(不含绝对路径)
|
||||
video_name = db.Column(db.String(200), default="") # 原始上传名(排查用)
|
||||
video_size = db.Column(db.Integer, default=0)
|
||||
@@ -557,7 +558,8 @@ class VideoPlan(db.Model):
|
||||
"nickname": self.nickname or "", "douyin_id": self.douyin_id or "",
|
||||
"serial": self.serial or "", "release_date": self.release_date or "",
|
||||
"seq": int(self.seq or 1), "seq_auto": bool(self.seq_auto),
|
||||
"title": self.title or "", "video_file": self.video_file or "",
|
||||
"title": self.title or "", "body": self.body or "",
|
||||
"video_file": self.video_file or "",
|
||||
"video_name": self.video_name or "", "video_size": int(self.video_size or 0),
|
||||
"video_sha1": self.video_sha1 or "", "status": self.status or "",
|
||||
"stage": self.stage or "", "attempts": int(self.attempts or 0),
|
||||
@@ -600,6 +602,7 @@ SCHEMA_MIGRATIONS = [
|
||||
(9, "视频发布计划:video_plan 表(账号×发布日期×编号 → 素材 + 标题 + 发布状态 + 分享链接)", None),
|
||||
(10, "视频发布计划:video_plan 新增 push_verify(推送后相册校验:ok/no_index/nofile)"
|
||||
"与 push_remote(手机上的绝对路径,删它/排查用)", None),
|
||||
(11, "视频发布计划:video_plan 新增 body(正文)—— 标题 txt 一行里用 || 分隔「标题 || 正文」", None),
|
||||
]
|
||||
|
||||
# 当前 schema 版本(备份/恢复用它判断新旧,也写进 app_meta.schema_version)
|
||||
|
||||
Reference in New Issue
Block a user