修正版本号

This commit is contained in:
xunbu
2025-06-19 19:20:31 +08:00
parent a7de5bc5b9
commit 7f885542fa
4 changed files with 196 additions and 63 deletions

View File

@@ -267,6 +267,10 @@
font-weight: bold;
}
.clickable {
cursor: pointer;
}
@media (max-width: 768px) {
.form-grid {
grid-template-columns: 1fr;
@@ -409,6 +413,28 @@
<details>
<summary>高级选项</summary>
<div class="form-group">
<div>
<label for="chunk-size-slider"><span
style="display:inline-block;min-width: 15vw">分块大小(bytes):</span><span
id="chunk-size-display"></span><span class="clickable" id="chunk-size-reset"
style="color: #2e7d32">🗘</span></label>
<input type="range" id="chunk-size-slider" name="chunk_size" min="1000" max="6000" step="100">
</div>
<div>
<label for="concurrent-slider"><span
style="display:inline-block;min-width: 15vw">并发请求数:</span><span
id="concurrent-display"></span><span class="clickable" id="concurrent-reset"
style="color: #2e7d32">🗘</span></label>
<input type="range" id="concurrent-slider" name="concurrent" min="1" max="60" step="1">
</div>
<div>
<label for="temperature-slider"><span
style="display:inline-block;min-width: 15vw">temperature:</span><span
id="temperature-display"></span><span class="clickable" id="temperature-reset"
style="color: #2e7d32">🗘</span></label>
<input type="range" id="temperature-slider" name="temperature" min="0" max="1" step="0.1">
</div>
<label for="custom_prompt_translate"></label>
<textarea class="prompt-area" type="text" id="custom_prompt_translate"
name="custom_prompt_translate" placeholder="翻译提示"></textarea>
@@ -470,7 +496,7 @@
</div>
<iframe id="printFrame" style="display:none;"></iframe>
<script>
<script type="module">
const platformSelect = document.getElementById('platform_select');
const apiHref = document.getElementById('api_href')
const baseUrlGroup = document.getElementById('baseUrlGroup');
@@ -486,6 +512,17 @@
const mineruTokenGroup = document.getElementById('mineruTokenGroup');
const mineruTokenInput = document.getElementById('mineru_token');
const chunkSizeSlider = document.getElementById('chunk-size-slider')
const chunkSizeDisplay = document.getElementById('chunk-size-display')
const chunkSizeReset = document.getElementById('chunk-size-reset')
const concurrentSlider = document.getElementById('concurrent-slider')
const concurrentDisplay = document.getElementById('concurrent-display')
const concurrentReset = document.getElementById("concurrent-reset")
const temperatureSlider = document.getElementById('temperature-slider')
const temperatureDisplay = document.getElementById('temperature-display')
const temperatureReset = document.getElementById("temperature-reset")
const form = document.getElementById('translateForm');
const submitButton = document.getElementById('submitButton');
const logArea = document.getElementById('logArea');
@@ -521,6 +558,64 @@
let statusPollIntervalId = null;
let isTranslating = false;
let default_param;
// 初始化调用
async function init() {
try {
const response = await fetch("/meta")
const meta = await response.json();
versionDisplay.textContent = `版本号:${meta.version}`;
} catch (error) {
console.warn("获取版本号失败", error);
}
try {
const response = await fetch('/get-engin-list')
if (!response.ok) {
console.warn(`get engine list failed: ${response.status}`);
return;
}
const enginList = await response.json();
statusMsg.textContent = '正在初始化';
let options = convertEnginSelect.querySelectorAll(`option`);
let currentEngineDisabled = false;
options.forEach((option) => {
if (!enginList.includes(option.value)) {
option.disabled = true;
option.textContent += " (不可用)";
if (option.value === convertEnginSelect.value) {
currentEngineDisabled = true;
}
}
});
if (currentEngineDisabled) {
const mineruOption = convertEnginSelect.querySelector('option[value="mineru"]');
if (mineruOption && !mineruOption.disabled) {
convertEnginSelect.value = "mineru";
} else {
const firstAvailable = convertEnginSelect.querySelector('option:not([disabled])');
if (firstAvailable) convertEnginSelect.value = firstAvailable.value;
}
updateConvertEnginUI();
}
statusMsg.textContent = '初始化完成';
} catch (error) {
console.warn("Error get engin-list", error);
statusMsg.textContent = '引擎列表初始化失败';
statusMsg.className = 'error-message';
}
try {
const response = await fetch("/translate/default_param")
default_param = await response.json();
} catch (error) {
statusMsg.textContent = error.toString();
statusMsg.className = 'error-message';
}
}
await init()
function saveToStorage(key, value) {
try {
localStorage.setItem(key, value);
@@ -572,6 +667,7 @@
saveToStorage('translator_last_platform', selectedPlatformValue);
}
function updateConvertEnginUI() {
const selectedEngin = convertEnginSelect.value;
if (selectedEngin === 'mineru') {
@@ -585,11 +681,50 @@
saveToStorage('translator_convert_engin', selectedEngin);
}
function updateChunkSizeUI() {
let value = chunkSizeSlider.value
chunkSizeDisplay.textContent = value;
if (value !== default_param["chunk_size"].toString()) {
chunkSizeReset.style.visibility = 'visible';
} else {
chunkSizeReset.style.visibility = 'hidden';
}
saveToStorage('chunk_size', value)
}
function updateTemperatureUI() {
let value = temperatureSlider.value
temperatureDisplay.textContent = value;
if (value !== default_param["temperature"].toString()) {
temperatureReset.style.visibility = 'visible';
} else {
temperatureReset.style.visibility = 'hidden';
}
saveToStorage('temperature', value)
}
function updateConcurrentUI() {
let value = concurrentSlider.value
concurrentDisplay.textContent = value;
if (value !== default_param["concurrent"].toString()) {
concurrentReset.style.visibility = 'visible';
} else {
concurrentReset.style.visibility = 'hidden';
}
saveToStorage('concurrent', value)
}
function loadSettings() {
platformSelect.value = getFromStorage('translator_last_platform', 'custom');
updatePlatformUI();
convertEnginSelect.value = getFromStorage('translator_convert_engin', 'mineru');
updateConvertEnginUI();
chunkSizeSlider.value = getFromStorage("chunk_size", default_param["chunk_size"])
updateChunkSizeUI()
concurrentSlider.value = getFromStorage("concurrent", default_param["concurrent"])
updateConcurrentUI()
temperatureSlider.value = getFromStorage("temperature", default_param["temperature"])
updateTemperatureUI()
toLangSelect.value = getFromStorage('translator_to_lang', '中文');
formulaCheckbox.checked = getFromStorage('translator_formula_ocr') === 'true';
codeCheckbox.checked = getFromStorage('translator_code_ocr') === 'true';
@@ -710,52 +845,6 @@
}
}, false);
// 初始化调用
(async () => {
try {
const response = await fetch("/meta")
let meta = await response.json();
versionDisplay.textContent = `版本号:${meta.version}`;
} catch (error) {
console.warn("获取版本号失败", error);
}
try {
const response = await fetch('/get-engin-list')
if (!response.ok) {
console.warn(`get engine list failed: ${response.status}`);
return;
}
const enginList = await response.json();
statusMsg.textContent = '正在初始化';
let options = convertEnginSelect.querySelectorAll(`option`);
let currentEngineDisabled = false;
options.forEach((option) => {
if (!enginList.includes(option.value)) {
option.disabled = true;
option.textContent += " (不可用)";
if (option.value === convertEnginSelect.value) {
currentEngineDisabled = true;
}
}
});
if (currentEngineDisabled) {
const mineruOption = convertEnginSelect.querySelector('option[value="mineru"]');
if (mineruOption && !mineruOption.disabled) {
convertEnginSelect.value = "mineru";
} else {
const firstAvailable = convertEnginSelect.querySelector('option:not([disabled])');
if (firstAvailable) convertEnginSelect.value = firstAvailable.value;
}
updateConvertEnginUI();
}
statusMsg.textContent = '初始化完成';
} catch (error) {
console.warn("Error get engin-list", error);
statusMsg.textContent = '引擎列表初始化失败';
statusMsg.className = 'error-message';
}
})();
async function pollLogs() {
try {
@@ -990,6 +1079,23 @@
}
}
chunkSizeSlider.addEventListener('input', updateChunkSizeUI)
chunkSizeReset.addEventListener('click', () => {
chunkSizeSlider.value = default_param["chunk_size"]
updateChunkSizeUI()
})
concurrentSlider.addEventListener('input', updateConcurrentUI)
concurrentReset.addEventListener('click', () => {
concurrentSlider.value = default_param["concurrent"]
updateConcurrentUI()
})
temperatureSlider.addEventListener('input', updateTemperatureUI)
temperatureReset.addEventListener('click', () => {
temperatureSlider.value = default_param["temperature"]
updateTemperatureUI()
})
submitButton.addEventListener('click', async function (event) {
event.preventDefault();
console.log(fileInput)