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
需要一点帮助?
@@ -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();
// 点击复检历史面板与开关按钮以外的区域自动收起