/* ===== 0. 全局状态与基础配置 ===== */ let extractedImages = []; let currentImageIndex = -1; let currentMediaImage = null; let currentFilter = ""; let currentMediaDataURL = ""; let isFrameMode = false; let chatContext = [{ role: "system", content: "你是一个得力的 AI 助手,请简明扼要地回答问题。" }]; window.addEventListener('load', () => { const savedKey = localStorage.getItem('datxy_global_api_key'); if(savedKey) document.getElementById('globalApiKey').value = savedKey; updateResolutionState(); document.getElementById('imageModelSelect').addEventListener('change', updateResolutionState); updateStats(); clearApiLogs(); }); document.getElementById('globalApiKey').addEventListener('change', (e) => { localStorage.setItem('datxy_global_api_key', e.target.value.trim()); }); // 全局监听左右键切图 window.addEventListener('keydown', (e) => { const viewMedia = document.getElementById('view-media'); if (viewMedia.style.display !== 'none' && isFrameMode) { if (e.key === 'ArrowLeft') { if (currentImageIndex > 0) { currentImageIndex--; displayExtractedFrame(); } } else if (e.key === 'ArrowRight') { if (currentImageIndex < extractedImages.length - 1) { currentImageIndex++; displayExtractedFrame(); } } } }); function switchTab(tabId) { document.querySelectorAll('.editor-tab').forEach(t => t.classList.remove('active')); document.querySelectorAll('.workspace-view').forEach(v => v.style.display = 'none'); document.getElementById('tab-' + tabId).classList.add('active'); document.getElementById('view-' + tabId).style.display = 'flex'; } function toggleCollapse(contentId, headerElement) { const content = document.getElementById(contentId); content.classList.toggle('collapsed'); headerElement.classList.toggle('collapsed'); } function showError(msg) { const errorMsg = document.getElementById('errorMsg'); errorMsg.innerText = msg; errorMsg.style.display = "block"; setTimeout(() => { errorMsg.style.display = "none"; }, 4000); } /* ===== 1. API 调试日志处理 ===== */ function logApiCall(type, endpoint, reqData, resData, isError = false) { const container = document.getElementById('apiLogContainer'); if (container.innerHTML.includes("暂无 API 调用记录")) container.innerHTML = ""; const time = new Date().toLocaleTimeString(); const logHTML = `