From 773f528668eab347a43a0c0262f2ce329ae4c5fe Mon Sep 17 00:00:00 2001 From: chengma Date: Wed, 8 Jul 2026 11:31:04 +0800 Subject: [PATCH] docs: add T-554 generate status columns --- docs/02-requirements.md | 2 +- docs/routes.md | 10 +++---- docs/tasks/T-554.md | 58 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 6 deletions(-) create mode 100644 docs/tasks/T-554.md diff --git a/docs/02-requirements.md b/docs/02-requirements.md index 457fbcb..e8abbbe 100644 --- a/docs/02-requirements.md +++ b/docs/02-requirements.md @@ -42,7 +42,7 @@ | 导入(①) | 导入多个 Excel,按模板解析输入列(账号名/别名/商品id)为任务列表 | P0 | | 导入校验汇总(①) | 导入后展示文件数、解析行数(原始数据量)、有效/无效行、匹配账号行数(按账号细分)、未匹配行数;跑采集前先纠错 | P0 | | 采集旧数据(①) | 程序只读打开商品页,抓取旧标题、下载旧封面到本地,回写 Excel 旧字段 | P0 | -| AI 生成(②) | 输入标题/封面提示词,AI 据提示词+旧标题生成新标题;封面图片按②本轮「生成封面图片(成本较高)」开关可选生成,避免用户无意产生图片模型成本;点击「开始生成」时清空②界面旧日志,只显示本轮生成日志,历史 run_logs 仍保留 | P0 | +| AI 生成(②) | 输入标题/封面提示词,AI 据提示词+旧标题生成新标题;封面图片按②本轮「生成封面图片(成本较高)」开关可选生成,避免用户无意产生图片模型成本;②任务表格拆分显示「标题状态 / 图片状态」,商品ID列缩窄约 50%,多出的宽度平均给两个状态列;点击「开始生成」时清空②界面旧日志,只显示本轮生成日志,历史 run_logs 仍保留 | P0 | | 提示词管理(②) | 标题提示词「保存」到 `data/title_prompt.txt` 并启动回显;封面提示词多模板(下拉 + 新建/保存/另存为/重命名/删除)+ 插入 `{新标题}` + 预览(变量替换) | P0 | | 查看对照(②) | 双击任务弹窗查看新旧封面(纯查看,无逐条审核阶段);可选对单行重生成 | P0 | | 更新蝦皮(③) | 按批次/店铺/状态筛选;可先「检查本轮更新」确认范围;点击「开始更新」后弹窗确认,确认后对当前筛选出的已生成任务按每批最大条数分批更新蝦皮商品,逐条换标题+封面并点「更新」提交线上;普通正式更新不再受测试商品 ID 限制,可批量更新真实商品;可按状态=失败重试 | P0 | diff --git a/docs/routes.md b/docs/routes.md index d9ae379..1bc082c 100644 --- a/docs/routes.md +++ b/docs/routes.md @@ -11,7 +11,7 @@ | Tab | 职责 | 风险 | | --- | --- | --- | | ① 导入采集 | 导入多个 Excel;任务列表;**采集**商品当前的旧标题/旧封面(只读),封面图下载本地;回写 Excel 旧字段 | 只读,低 | -| ② AI生成 | 左侧标题/封面**提示词**;右侧按批次/店铺/商品ID/状态筛选任务列表;AI 生成新标题,并按本轮开关可选生成新封面;已生成任务可本地微调新标题;双击看新旧封面 | 不触线上,中 | +| ② AI生成 | 左侧标题/封面**提示词**;右侧按批次/店铺/商品ID/状态筛选任务列表;AI 生成新标题,并按本轮开关可选生成新封面;表格拆分显示「标题状态 / 图片状态」;已生成任务可本地微调新标题;双击看新旧封面 | 不触线上,中 | | ③ 更新蝦皮 | 对**已生成**任务点击「开始更新」后弹窗确认;确认后打开编辑页换标题+封面并逐条点「更新」提交;结果回写 Excel | **写线上,高** | | ④ 账号管理 | Shopee 账号(账号名/别名/数据目录/端口/密码本地明文仅参考/登录状态);启动登录、检测登录、生成快捷方式;启动登录必须复用已打开的同账号 Chrome,避免重复开窗口;检测登录遇到 `accounts.shopee.tw/seller/login` 必须显示未登录 | 中 | | ⑤ 设置 | cmhub 网关/API Key、生文/生图别名、生成参数、本地图片目录、Chrome 路径、默认端口、蝦皮更新安全开关等 | — | @@ -81,9 +81,9 @@ │ ┌─左 ~1/4─┐ ┌──────────────── 右 3/4 ──────────────────────┐ │ │ │标题提示词│ │ 批次[本次▼] 店铺[全部▼] 商品ID[____] 状态[全部▼] [筛选] │ │ │ │[ ]│ │ ┌──────────────────────────────────────────┐ │ │ -│ │[ ]│ │ │ 店铺名 商品id 旧标题 新标题 状态 │ │ │ -│ │ │ │ │ 女装店 511..639 …T恤 …百搭 已生成 │ │ │ -│ │封面提示词│ │ │ 女装店 511..640 … — 待生成 │ │ │ +│ │[ ]│ │ │ 店铺名 商品id 旧标题 新标题 标题状态 图片状态 │ │ │ +│ │ │ │ │ 女装店 511..639 …T恤 …百搭 已生成 未启用 │ │ │ +│ │封面提示词│ │ │ 女装店 511..640 … — 待生成 待生成 │ │ │ │ │[ ]│ │ └──────────────────────────────────────────┘ │ │ │ │[ ]│ │ (双击某行 → 弹窗看 旧封面 | 新封面) │ │ │ │ │ │ 运行日志:逐条记录标题/封面生成步骤与失败原因 │ │ @@ -97,7 +97,7 @@ - **封面提示词**:模板下拉(读 `data/prompts/cover/*.txt`)+ 图标工具栏(新建/保存/另存为/重命名/删除)+ 多行输入 + 「插入标题」(插 `{新标题}`)/「预览」(变量替换后查看)。 - 变量:标题提示词本阶段只支持 `{旧标题}`;封面提示词支持 `{旧标题}`/`{新标题}`/`{商品id}`/`{店铺}`,生成前按任务替换。 - 右上:按导入批次 / 店铺 / 商品ID / 状态筛选任务;商品ID输入框按包含匹配 `item_id`,清空表示全部。 -- 右下:任务列表(店铺名、商品id、旧标题、新标题、状态)+ AI生成运行日志;已生成、未提交线上、非运行中的任务可双击「新标题」列本地微调,写回 `tasks.new_title`,清空 `last_error` 并回到可更新;双击其他列弹窗展示旧封面 | 新封面(纯查看)。 +- 右下:任务列表(店铺名、商品id、旧标题、新标题、标题状态、图片状态)+ AI生成运行日志;标题/图片状态由 `new_title`、`new_cover_path`、`stage/status` 和失败步骤推导,帮助用户区分“标题未生成 / 图片未生成 / 标题成功但图片失败”。商品ID列按原等分宽度约 50% 显示,缩出的宽度平均给两个状态列。已生成、未提交线上、非运行中的任务可双击「新标题」列本地微调,写回 `tasks.new_title`,清空 `last_error` 并回到可更新;双击其他列弹窗展示旧封面 | 新封面(纯查看)。 - 底部**单个「开始生成」+「停止」**,并增加「生成封面图片(成本较高)」复选框:默认不勾选,只生成标题;勾选后才在标题完成后按 `image_concurrency` 生成封面。cmhub 模式会把用户设置的图片并发内部限制到最大 5,并用同样最大 5 的独立下载线程池拉取 `image_url`,不新增用户可见下载并发配置;运行日志显示用户设置并发和实际并发。该开关状态持久化到 `config.json` 的 `ai.generate_cover`,但入口放在②,便于用户在每轮生成前做成本判断。 - 生成参数(标题/图片并发数、失败重试、分辨率、jpg 质量、cmhub 网关/Key/别名)在 **⑤ 设置**;②只暴露“本轮是否生成封面”的成本开关。⑤ 不新增“下载并发”控件;cmhub 图片下载并发由程序按实际生图并发自动计算,最大 5。 - 标题-only 模式标题成功即写库并进入 `generated`,`new_cover_path` 留空;标题+封面模式图片成功后写入本地新封面路径。两种模式都写 `run_type=generate` 的 `run_logs/run_log_events` 和用户可读滚动日志;未勾选生成封面时日志明确显示“本轮仅生成标题”。点击「开始生成」时先清空②界面可见日志并写入本轮开始摘要,运行中只追加本轮日志;不删除历史 `run_logs/run_log_events` 或本地 `data/logs/`。进入页面默认可显示“本轮日志会在开始运行后显示”,历史日志不自动混入当前运行界面。「停止」取消未开始项,可再次「开始生成」对剩余继续。 diff --git a/docs/tasks/T-554.md b/docs/tasks/T-554.md new file mode 100644 index 0000000..33f6220 --- /dev/null +++ b/docs/tasks/T-554.md @@ -0,0 +1,58 @@ +--- +id: T-554 +title: ②AI生成表格拆分标题/图片状态列并调整列宽 +phase: 7 +deps: [T-533, T-519, T-552, T-523] +status: TODO +created: 2026-07-08 +--- + +## 问题 / 背景 + +②「AI生成」现在是两步流程:先生成标题,再按本轮开关可选生成图片。但右侧任务表格只有一个「状态」列,显示的是整条任务的整体 `stage/status`,例如「待生成 / 已生成 / 生成失败」。 + +这会带来两个使用问题: + +- 用户看不出当前任务到底是「标题没生成」「图片没生成」,还是「标题成功但图片失败」。 +- 标题成功后当前逻辑会先写入 `new_title` 并把任务设为 `generated/success`;若本轮还在生成图片,表格整体状态可能先显示为「已生成」,需要去看底部进度条或运行日志才能知道图片仍在处理。 + +同时,②表格中商品 ID 通常较短,当前列宽偏大;拆分出两个状态列后,应把商品 ID 列宽缩小,把空间让给状态信息。 + +## 方案 + +1. **表格列拆分** + - 将②AI生成表格原列:`店铺 / 商品ID / 旧标题 / 新标题 / 状态`。 + - 改为:`店铺 / 商品ID / 旧标题 / 新标题 / 标题状态 / 图片状态`。 + - 第一版只改 GUI 展示层和单测,不改 SQLite schema,不新增 `title_status` / `cover_status` 字段。 + +2. **状态推导口径** + - `new_title` 有值:标题状态显示「已生成」。 + - `new_cover_path` 有值:图片状态显示「已生成」。 + - `last_error` 或失败步骤指向标题阶段(如 `title_*`、`请求生成标题`、`标题`):标题状态显示「失败」。 + - `last_error` 或失败步骤指向封面/图片阶段(如 `cover_*`、`请求生成封面`、`封面`、`图片`、`下载`):图片状态显示「失败」。 + - `stage=collected` 且无标题:标题状态显示「待生成」。 + - 本轮未启用生成封面,或任务已生成标题但没有新封面且没有图片失败时,图片状态显示「未启用」;若需要生成封面但还没生成,则显示「待生成」。第一版可通过 ②当前「生成封面图片(成本较高)」开关参与推导,不写入 DB。 + - `stage=imported`:两个状态均显示「未采集」。 + - `stage=applied`:按已有结果显示,标题/图片已有值则显示「已生成」,没有图片则显示「未启用」。 + +3. **列宽调整** + - ②表格原本使用等宽 Stretch。拆分列后,需要自定义列宽。 + - 商品ID列宽按“原等分状态下商品ID列宽”的 `50%` 计算,即从 `1.0` 权重降为 `0.5` 权重。 + - 商品ID列缩出来的 `0.5` 权重,平均分给「标题状态」和「图片状态」两列,每个状态列额外 `0.25` 权重。 + - 推荐权重:`店铺=1.0 / 商品ID=0.5 / 旧标题=1.0 / 新标题=1.0 / 标题状态=1.25 / 图片状态=1.25`。 + - 在表格 resize、刷新后重新应用列宽;避免商品ID过宽,也避免状态文字显示不全。 + +## 验收要点 + +- ②AI生成表格列头显示为:`店铺 / 商品ID / 旧标题 / 新标题 / 标题状态 / 图片状态`。 +- 标题成功但图片未生成时,能显示「标题状态=已生成」「图片状态=待生成/未启用」。 +- 图片失败时,能显示「标题状态=已生成」「图片状态=失败」。 +- 标题失败时,能显示「标题状态=失败」「图片状态=未开始/未启用」。 +- tooltip 仍保留完整 `last_error`,不丢失 T-552 的失败步骤。 +- 商品ID列宽约为原等分宽度的 50%;标题状态和图片状态平均接收缩出来的宽度。 +- 单测覆盖表头、状态推导、列宽权重或 resize 后列宽关系。 + +## 边界(不改什么) + +只改②AI生成表格展示、状态推导和列宽;不改 DB schema、`tasks.stage/status` 语义、AI 生成编排、cmhub HTTP、运行日志、底部进度条、Excel、Shopee/CDP。 +