fix: 日志导出移至日志顶栏, 搜索引擎Bing优先

This commit is contained in:
thzxx
2026-04-19 17:10:42 +08:00
parent e2cb87a060
commit 1f99d61a12
3 changed files with 56 additions and 68 deletions
+1 -55
View File
@@ -6,7 +6,7 @@ import { state, KEYS } from '../state/state.js';
import { debounce } from '../utils/utils.js';
import { encryptData, decryptData } from '../services/crypto.js';
import { setMemoryEnabled, setEmbeddingModel, getEmbeddingModel, isVectorMemoryEnabled, getMemoryCache } from '../services/memory-manager.js';
import { logSetting, logInfo, logWarn, logError, logSuccess, getLogs } from '../services/log-service.js';
import { logSetting, logInfo, logWarn, logError, logSuccess } from '../services/log-service.js';
import { checkConnection, updateConnectionInfo, updateRunningModels } from './header.js';
import { loadModels } from './model-bar.js';
import { showToast } from './toast.js';
@@ -84,9 +84,6 @@ export function initSettingsModal(): void {
}, 500);
document.querySelector('#inputMaxTurns')!.addEventListener('input', saveMaxTurns);
// ── v5.1.1 执行日志导出 ──
document.querySelector('#btnExportLog')!.addEventListener('click', exportExecutionLog);
// ── v4.2 人格模式切换 ──
const PERSONALITY_TEMPERATURES: Record<string, number> = {
default: -1, // 使用用户设置
@@ -392,57 +389,6 @@ export function closeSettingsModal(): void {
settingsModalEl.style.display = 'none';
}
/** 导出执行日志为 TXT 文件 */
async function exportExecutionLog(): Promise<void> {
const logs = getLogs();
if (logs.length === 0) {
showToast('没有可导出的日志', 'warning');
return;
}
const formatTime = (ts: number): string => {
const d = new Date(ts);
return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')} ${String(d.getHours()).padStart(2, '0')}:${String(d.getMinutes()).padStart(2, '0')}:${String(d.getSeconds()).padStart(2, '0')}`;
};
const lines = logs.map(e => {
let line = `[${formatTime(e.time)}] ${e.level.toUpperCase()} ${e.icon} ${e.message}`;
if (e.detail) line += `\n ${e.detail}`;
return line;
});
const content = `Metona Ollama Desktop — 执行日志\n导出时间: ${formatTime(Date.now())}\n日志条数: ${logs.length}\n${'═'.repeat(60)}\n\n${lines.join('\n')}`;
try {
const bridge = (window as any).metonaDesktop;
if (bridge) {
const ts = new Date().toISOString().slice(0, 19).replace(/[T:]/g, '-');
const filePath = await bridge.dialog.saveFile({
defaultPath: `metona-log-${ts}.txt`,
filters: [{ name: '文本文件', extensions: ['txt'] }]
});
if (!filePath) return;
const result = await bridge.fs.writeFile(filePath, content, 'utf-8');
if (!result.success) {
showToast(`导出失败: ${result.error}`, 'error');
return;
}
} else {
const blob = new Blob([content], { type: 'text/plain;charset=utf-8' });
const a = document.createElement('a');
a.href = URL.createObjectURL(blob);
a.download = `metona-log-${Date.now()}.txt`;
a.click();
}
showToast(`已导出 ${logs.length} 条日志`, 'success');
logSuccess(`日志导出完成: ${logs.length}`);
} catch (err) {
showToast(`导出失败: ${(err as Error).message}`, 'error');
logError('日志导出失败', (err as Error).message);
}
}
async function exportAllSessions(): Promise<void> {
const db = state.get<ChatDB | null>(KEYS.DB);
if (!db) return;