Commit c07ee7721c42deb86a4a13ea65770beffc921b83
1 parent
6e1cffe4
h3-console: 参考图文件名 caption 挪到图片上方(之前在下面,用户反馈不够显眼)
任务详情页(viewThumb)和上传表单缩略图(wrapWithDelete)都是同一个模式:caption跟media 的DOM顺序对调即可,.thumb-wrap是flex-direction:column,顺序决定视觉位置,不用改CSS。 顺带排查了用户反馈的另一个问题"点击图片变下载"——查了一个具体任务(1cc42a8669a1)的参考图 实际引用的是外部图床(shadiao-2d.oss-cn-aliyuncs.com),那边响应头自己带了 Content-Disposition:attachment,是外部服务器强制的,不是咱们代码的bug;对比测试过咱们 自己/v1/assets上传的图片没有这个问题。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Showing
1 changed file
with
15 additions
and
11 deletions
h3-console/static/index.html
| ... | ... | @@ -347,12 +347,18 @@ function filenameFromUrl(u) { |
| 347 | 347 | } catch (e) { return u; } |
| 348 | 348 | } |
| 349 | 349 | |
| 350 | -// 每个预览项都包一层 .thumb-wrap,媒体本体再包一层 .thumb-media 挂 × 删除按钮, | |
| 351 | -// 下面接一行文件名 caption——上传上去选错了/传多了,之前只能整个表单清空重来, | |
| 352 | -// 2026-08-24 用户要求能单个删;文件名是 2026-08-24 补的,之前只有个位置标签看不出传的是哪个文件。 | |
| 350 | +// 每个预览项都包一层 .thumb-wrap,文件名 caption 放在最上面、媒体本体再包一层 | |
| 351 | +// .thumb-media 挂 × 删除按钮——上传上去选错了/传多了,之前只能整个表单清空重来, | |
| 352 | +// 2026-08-24 用户要求能单个删;文件名是 2026-08-24 补的,之前只有个位置标签看不出传的是 | |
| 353 | +// 哪个文件;2026-08-25 改成放图片上方(之前放下面,用户反馈不够显眼,容易当成没显示)。 | |
| 353 | 354 | function wrapWithDelete(mediaEl, onDelete, caption) { |
| 354 | 355 | const wrap = document.createElement('span'); |
| 355 | 356 | wrap.className = 'thumb-wrap'; |
| 357 | + if (caption) { | |
| 358 | + const cap = document.createElement('span'); | |
| 359 | + cap.className = 'thumb-name'; cap.textContent = caption; cap.title = caption; | |
| 360 | + wrap.appendChild(cap); | |
| 361 | + } | |
| 356 | 362 | const mediaWrap = document.createElement('span'); |
| 357 | 363 | mediaWrap.className = 'thumb-media'; |
| 358 | 364 | const del = document.createElement('button'); |
| ... | ... | @@ -360,11 +366,6 @@ function wrapWithDelete(mediaEl, onDelete, caption) { |
| 360 | 366 | del.onclick = onDelete; |
| 361 | 367 | mediaWrap.appendChild(mediaEl); mediaWrap.appendChild(del); |
| 362 | 368 | wrap.appendChild(mediaWrap); |
| 363 | - if (caption) { | |
| 364 | - const cap = document.createElement('span'); | |
| 365 | - cap.className = 'thumb-name'; cap.textContent = caption; cap.title = caption; | |
| 366 | - wrap.appendChild(cap); | |
| 367 | - } | |
| 368 | 369 | return wrap; |
| 369 | 370 | } |
| 370 | 371 | |
| ... | ... | @@ -827,11 +828,14 @@ async function refreshDetail() { |
| 827 | 828 | if (req.first_frame_url) imgs.push(['首帧', req.first_frame_url]); |
| 828 | 829 | if (req.last_frame_url) imgs.push(['尾帧', req.last_frame_url]); |
| 829 | 830 | (req.reference_image_urls || []).forEach((u, i) => imgs.push(['参考图'+(i+1), u])); |
| 830 | - // 图片点开看大图,参考视频/音频跟生成结果的视频一样用原生播放器直接预览;每个媒体下面 | |
| 831 | - // 再带一行文件名(从上传时 server.py 塞进 URL 里的原名反解出来,见 filenameFromUrl)。 | |
| 831 | + // 图片点开看大图,参考视频/音频跟生成结果的视频一样用原生播放器直接预览;每个媒体上面 | |
| 832 | + // 带一行文件名(从上传时 server.py 塞进 URL 里的原名反解出来,见 filenameFromUrl—— | |
| 833 | + // 引用外部图床的旧任务URL里没有这个原名分段,会退化成显示URL里的原始文件名/hash, | |
| 834 | + // 不算错误,只是没有更好的名字可用)。2026-08-25:caption 挪到图片上方(之前在下面, | |
| 835 | + // 用户反馈不够显眼)。 | |
| 832 | 836 | const thumbCap = (label, u) => `${label} · ${filenameFromUrl(u)}`.replace(/</g, '<'); |
| 833 | 837 | const viewThumb = (mediaHtml, label, u) => |
| 834 | - `<span class="thumb-wrap"><span class="thumb-media">${mediaHtml}</span><span class="thumb-name" title="${thumbCap(label,u)}">${thumbCap(label,u)}</span></span>`; | |
| 838 | + `<span class="thumb-wrap"><span class="thumb-name" title="${thumbCap(label,u)}">${thumbCap(label,u)}</span><span class="thumb-media">${mediaHtml}</span></span>`; | |
| 835 | 839 | const imgTags = imgs.map(([label, u]) => |
| 836 | 840 | viewThumb(`<a href="${u}" target="_blank" title="${label},点击查看大图"><img src="${u}" title="${label}"></a>`, label, u)).join(''); |
| 837 | 841 | const videoTags = (req.reference_video_urls || []).map((u, i) => | ... | ... |