fix(web): renderPreview 中 task 变量遮蔽全局 t() 翻译函数导致预览点击无效
将 renderPreview 内 const t = tasks.find() 改名为 task, 避免局部变量 t(任务对象)遮蔽全局翻译函数 t(), 使预览面板渲染时抛 't is not a function' 导致面板无法打开。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+15
-15
@@ -1191,14 +1191,14 @@ function renderTranscript(messages) {
|
|||||||
function renderPreview() {
|
function renderPreview() {
|
||||||
const root = $('#previewRoot');
|
const root = $('#previewRoot');
|
||||||
if (!S.previewId) { root.hidden = true; root.innerHTML = ''; return; }
|
if (!S.previewId) { root.hidden = true; root.innerHTML = ''; return; }
|
||||||
const t = S.approvals.find((x) => x.id === S.previewId) || S.tasks.find((x) => x.id === S.previewId);
|
const task = S.approvals.find((x) => x.id === S.previewId) || S.tasks.find((x) => x.id === S.previewId);
|
||||||
// 任务已离开闸(被裁决/状态变化)→ 自动关闭
|
// 任务已离开闸(被裁决/状态变化)→ 自动关闭
|
||||||
if (!t || !GATE_OF[t.status]) { S.previewId = null; S.previewReject = false; root.hidden = true; root.innerHTML = ''; return; }
|
if (!task || !GATE_OF[task.status]) { S.previewId = null; S.previewReject = false; root.hidden = true; root.innerHTML = ''; return; }
|
||||||
const gate = GATE_OF[t.status];
|
const gate = GATE_OF[task.status];
|
||||||
const pp = S.projects.find((x) => x.id === S.currentProjectId);
|
const pp = S.projects.find((x) => x.id === S.currentProjectId);
|
||||||
const defBranch = pp ? pp.defaultBranch : 'main';
|
const defBranch = pp ? pp.defaultBranch : 'main';
|
||||||
const onlyPassBtn = gate === 'exec'
|
const onlyPassBtn = gate === 'exec'
|
||||||
? `<button class="btn btn-ghost btn-xs" data-action="gate-accept" data-merge="false" data-id="${esc(t.id)}" title="${t('gateOnlyPass')}">${t('gateOnlyPass')}</button>`
|
? `<button class="btn btn-ghost btn-xs" data-action="gate-accept" data-merge="false" data-id="${esc(task.id)}" title="${t('gateOnlyPass')}">${t('gateOnlyPass')}</button>`
|
||||||
: '';
|
: '';
|
||||||
root.hidden = false;
|
root.hidden = false;
|
||||||
root.innerHTML = `
|
root.innerHTML = `
|
||||||
@@ -1206,28 +1206,28 @@ function renderPreview() {
|
|||||||
<div class="preview-panel">
|
<div class="preview-panel">
|
||||||
<div class="preview-head">
|
<div class="preview-head">
|
||||||
<span class="gate-kind">${gateLabel(gate)}</span>
|
<span class="gate-kind">${gateLabel(gate)}</span>
|
||||||
<span class="preview-title">${esc(t.title)}</span>
|
<span class="preview-title">${esc(task.title)}</span>
|
||||||
${cplxBadge(t.complexity)}
|
${cplxBadge(task.complexity)}
|
||||||
${statusChip(t.status)}
|
${statusChip(task.status)}
|
||||||
<span class="spacer"></span>
|
<span class="spacer"></span>
|
||||||
<button class="btn btn-ghost" data-action="preview-close" title="${t('closeTip')}">${icon('close')}</button>
|
<button class="btn btn-ghost" data-action="preview-close" title="${t('closeTip')}">${icon('close')}</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="preview-body">${gateDocs(t)}</div>
|
<div class="preview-body">${gateDocs(task)}</div>
|
||||||
<div class="preview-foot">
|
<div class="preview-foot">
|
||||||
<button class="btn btn-accept" data-action="gate-accept" data-id="${esc(t.id)}">${gate === 'exec' ? t('gateAcceptMerge') : t('gateAccept')}</button>${onlyPassBtn}
|
<button class="btn btn-accept" data-action="gate-accept" data-id="${esc(task.id)}">${gate === 'exec' ? t('gateAcceptMerge') : t('gateAccept')}</button>${onlyPassBtn}
|
||||||
<button class="btn btn-reject" data-action="preview-reject-toggle" data-id="${esc(t.id)}">${t('gateReject')}</button>
|
<button class="btn btn-reject" data-action="preview-reject-toggle" data-id="${esc(task.id)}">${t('gateReject')}</button>
|
||||||
${gate === 'exec' ? `<span class="proj-meta">${t('gateMergeNote', { branch: esc(defBranch) })}</span>` : ''}
|
${gate === 'exec' ? `<span class="proj-meta">${t('gateMergeNote', { branch: esc(defBranch) })}</span>` : ''}
|
||||||
<span class="proj-meta">id ${esc(t.id)} · ${fmtTime(t.updatedAt)}</span>
|
<span class="proj-meta">id ${esc(task.id)} · ${fmtTime(task.updatedAt)}</span>
|
||||||
${S.previewReject ? `
|
${S.previewReject ? `
|
||||||
<div class="reject-form preview-reject">
|
<div class="reject-form preview-reject">
|
||||||
<textarea id="prev-rej-${esc(t.id)}" placeholder="${t('rejectPlaceholder')}"></textarea>
|
<textarea id="prev-rej-${esc(task.id)}" placeholder="${t('rejectPlaceholder')}"></textarea>
|
||||||
<button class="btn btn-reject" data-action="gate-reject-confirm" data-id="${esc(t.id)}" data-ta="prev-rej-${esc(t.id)}">${t('confirmReject')}</button>
|
<button class="btn btn-reject" data-action="gate-reject-confirm" data-id="${esc(task.id)}" data-ta="prev-rej-${esc(task.id)}">${t('confirmReject')}</button>
|
||||||
<button class="btn" data-action="preview-reject-toggle" data-id="${esc(t.id)}">${t('collapse')}</button>
|
<button class="btn" data-action="preview-reject-toggle" data-id="${esc(task.id)}">${t('collapse')}</button>
|
||||||
</div>` : ''}
|
</div>` : ''}
|
||||||
</div>
|
</div>
|
||||||
</div>`;
|
</div>`;
|
||||||
if (S.previewReject) {
|
if (S.previewReject) {
|
||||||
const ta = document.getElementById(`prev-rej-${t.id}`);
|
const ta = document.getElementById(`prev-rej-${task.id}`);
|
||||||
if (ta) ta.focus();
|
if (ta) ta.focus();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user