diff --git a/docutranslate/static/index.html b/docutranslate/static/index.html
index 872685f..e00813f 100644
--- a/docutranslate/static/index.html
+++ b/docutranslate/static/index.html
@@ -67,9 +67,11 @@
background-color: var(--bs-secondary-bg);
}
+ /* --- 修改点: 添加了文件选中后的样式 --- */
.file-drop-area.file-selected {
border-style: solid;
border-color: var(--bs-success);
+ background-color: var(--bs-success-bg-subtle);
}
.file-drop-area.input-error {
@@ -391,10 +393,20 @@
@@ -663,13 +675,16 @@
const cardElement = cardFragment.querySelector('.task-card');
cardElement.dataset.taskId = taskId;
+ // --- 修改点: 更新元素选择器以获取新的和现有的元素 ---
const elements = {
card: cardElement,
taskIdDisplay: cardElement.querySelector('.task-id-display'),
removeBtn: cardElement.querySelector('.remove-task-btn'),
fileInput: cardElement.querySelector('.file-input'),
fileDropArea: cardElement.querySelector('.file-drop-area'),
- fileDropPrompt: cardElement.querySelector('.file-drop-prompt'),
+ fileDropDefault: cardElement.querySelector('.file-drop-default'),
+ fileDropSelected: cardElement.querySelector('.file-drop-selected'),
+ fileNameDisplayWrapper: cardElement.querySelector('.file-name-display-wrapper'),
fileNameDisplay: cardElement.querySelector('.file-name-display'),
logArea: cardElement.querySelector('.log-area'),
statusMessage: cardElement.querySelector('.status-message'),
@@ -692,7 +707,10 @@
file: null,
htmlUrl: null,
fileNameStem: null,
- isSubmitted: false
+ // === 修改点 1: 正确设置恢复任务的初始状态 ===
+ // 如果任务是从之前的会话中恢复的(restoreState为true),
+ // 那么它一定是一个已经提交过的任务。
+ isSubmitted: restoreState
},
intervals: {
log: null,
@@ -758,15 +776,23 @@
});
}
+ // --- 修改点: 更新 handleFileSelect 函数以改变拖放区外观 ---
function handleFileSelect(taskId) {
const { elements, state } = tasks[taskId];
const file = elements.fileInput.files[0];
if (file) {
state.file = file;
- elements.fileNameDisplay.textContent = `已选: ${file.name}`;
+
+ // 更新外部文件名显示
+ elements.fileNameDisplay.textContent = file.name;
+ elements.fileNameDisplayWrapper.style.display = 'block';
+
+ // 更新拖放区外观为“已选择”状态
elements.fileDropArea.classList.add('file-selected');
- elements.fileDropPrompt.style.display = 'none';
- // Clear any previous error states
+ elements.fileDropDefault.style.display = 'none';
+ elements.fileDropSelected.style.display = 'block';
+
+ // 清除任何之前的错误状态
elements.fileDropArea.classList.remove('input-error');
elements.fileNameDisplay.classList.remove('input-error-text');
}
@@ -934,13 +960,11 @@
}
const status = await response.json();
- // Restore filename display from status
- if (status.original_filename && !state.file) {
- elements.fileNameDisplay.textContent = `已上传: ${status.original_filename}`;
- elements.fileDropArea.classList.add('file-selected');
- elements.fileDropPrompt.style.display = 'none';
- elements.fileDropArea.classList.remove('input-error');
- elements.fileNameDisplay.classList.remove('input-error-text');
+ // 页面刷新时,从后端状态恢复文件名显示
+ // 注意: 这里不改变拖放区的绿色状态,以满足“刷新后恢复”的需求
+ if (status.original_filename && (!state.file || isRestore)) {
+ elements.fileNameDisplay.textContent = status.original_filename;
+ elements.fileNameDisplayWrapper.style.display = 'block';
}
elements.statusMessage.textContent = status.status_message || '正在获取状态...';
@@ -979,6 +1003,16 @@
elements.startBtn.disabled = false;
elements.progress.style.display = 'block';
elements.downloadButtons.style.display = 'none';
+
+ // === 修改点 2: 刷新后启动轮询 ===
+ // 这是实现需求的核心改动。
+ // 如果此函数是在页面刷新恢复任务时被调用的 (isRestore为true),
+ // 并且服务器确认任务仍在处理中,
+ // 我们就必须启动客户端的轮询,以继续接收后续的日志和状态更新。
+ // 我们也检查轮询间隔是否已存在,避免重复启动。
+ if (isRestore && !tasks[taskId].intervals.status) {
+ startPolling(taskId);
+ }
}
} catch (error) {