From d4554eb1afc70bd05ad08f043e5ba4e4571d403f Mon Sep 17 00:00:00 2001 From: LuminousRuoxi <2494735589@qq.com> Date: Thu, 10 Sep 2026 15:05:01 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A4=8D=E5=88=B6=E5=8E=9F=E6=96=87?= =?UTF-8?q?=E5=88=B0=E6=94=B9=E5=86=99=E5=8C=BA=E6=8C=89=E9=92=AE=20+=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=94=B9=E5=AE=8C=E5=AD=97=E7=82=B9=E6=AE=B5?= =?UTF-8?q?=E5=8F=B7=E7=AC=AC=E4=B8=80=E6=AC=A1=E7=82=B9=E5=87=BB=E4=B8=A2?= =?UTF-8?q?=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 改写区新增「复制原文到改写区 →」: 一键以原文为起点手动改写; 改写区已有内容时二次确认,避免覆盖已写的工作 - 修复既有 bug: 改写区 blur(点段号的 mousedown 触发)会重建段号按钮, mouseup 时按钮已被替换 → 第一次点击丢失(改完字要点两次才切段)。 onRewriteInput/onRewriteBlur 改用轻量 class 更新(updateParagraphSwitcherState), 不再重建 DOM - 浏览器实测: 复制/确认/覆盖/切段 9/9 + 核心回归 6/6 通过 --- index.html | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index 71508f5..5f10364 100644 --- a/index.html +++ b/index.html @@ -193,7 +193,7 @@ button,input,textarea{font:inherit}button{cursor:pointer}.hidden{display:none!im
基于左侧原意重新表达这一整段,不需要逐句对应原文。
自动保存0 characters
-
+
需要一点帮助?
@@ -1022,6 +1022,18 @@ function renderParagraphSwitcher(){ $('#focusOriginal').classList.toggle('active', originalView==='focus'); $('#fullOriginal').classList.toggle('active', originalView==='full'); } +// 轻量更新段号按钮状态(active / has-copy),不重建 DOM: +// 改写区 blur(点段号的 mousedown 触发)若重建按钮,mouseup 时按钮已被替换, +// 第一次点击会丢失(用户实测:改完字点段号要连点两次)。 +function updateParagraphSwitcherState(){ + const wrap = $('#paragraphSwitcher'); + if(!wrap) return; + wrap.querySelectorAll('[data-para-index]').forEach(btn=>{ + const i = Number(btn.dataset.paraIndex); + btn.classList.toggle('active', i===current); + btn.classList.toggle('has-copy', hasRewrite(i)); + }); +} function renderOriginalPane(){ const wrap=$('#originalFull'); wrap.innerHTML=''; @@ -1144,6 +1156,18 @@ async function toggleTranslate(){ btn.disabled = false; renderTranslateBtn(); renderTranslateBox(); } +// 体验优化:把当前段原文一键复制到改写区 —— 顾问以原文为起点手动改写 +// (改写区已有内容时二次确认,避免覆盖已写的工作)。 +function copyOriginalToRewrite(){ + const area = $('#rewriteArea'); + const text = String(paragraphs[current]||'').trim(); + if(!area || !text) return; + if(String(area.value||'').trim() && !confirm('改写区已有内容,确定用原文覆盖吗?')) return; + area.value = text; + area.focus(); + onRewriteInput({target: area}); // 复用输入处理:状态/字数提示/译文过期/保存调度 + track('original_copied_to_rewrite', {paragraph_id: pidOf(current)}); +} // 体验优化:原文中文对照(逐句)—— 顾问读英文吃力时,特别是被高亮标注 // 「需要改写」的句子,需要它的中文意思才能判断怎么改。 // 句子由前端拆分(en 为原文精确文本,服务端原样回填),命中批注 evidence 的 @@ -1312,7 +1336,7 @@ function onRewriteInput(e){ } } scheduleSave(current); - renderParagraphSwitcher(); + updateParagraphSwitcherState(); updateProgress(); } function onRewriteBlur(){ @@ -1321,7 +1345,7 @@ function onRewriteBlur(){ if(hasRewrite(current)) rewriteStatus[current] = 'REWRITTEN'; else rewriteStatus[current] = 'UNTOUCHED'; flushSave(current); - renderParagraphSwitcher(); + updateParagraphSwitcherState(); // 不重建按钮:避免点击段号时 mousedown→blur 重建导致第一次点击丢失 updateProgress(); } function recordExposure(kind, text){ @@ -1604,6 +1628,7 @@ $('#rewriteArea').addEventListener('input', onRewriteInput); $('#rewriteArea').addEventListener('blur', onRewriteBlur); $('#showScaffold').onclick=toggleScaffold; $('#showReference').onclick=toggleReference; +$('#copyOriginalBtn').onclick=copyOriginalToRewrite; $('#translateBtn').onclick=toggleTranslate; $('#recheckHistoryBtn').onclick=()=>toggleRecheckHistory(); // 点击复检历史面板与开关按钮以外的区域自动收起