custom export

This commit is contained in:
Julian Freeman
2025-11-26 09:37:29 -04:00
parent b553fb495c
commit c01c1a33d4

View File

@@ -272,7 +272,52 @@ function getProgressStyle(used, total) {
function getBatteryColor(p) { return p < 50 ? '#ff4757' : (p < 80 ? '#ffa502' : '#2ed573'); }
function formatTime(t) { return !t ? "Unknown Time" : t.replace('T', ' ').substring(0, 19); }
async function exportReport() { /* ... */ if (!isReportValid.value) return; try { const blob = new Blob([JSON.stringify(report.value, null, 2)], { type: "application/json" }); const url = URL.createObjectURL(blob); const link = document.createElement('a'); link.href = url; link.download = `SystemDoctor_Report_${new Date().toISOString().slice(0, 19).replace(/[:T]/g, "-")}.json`; document.body.appendChild(link); link.click(); document.body.removeChild(link); URL.revokeObjectURL(url); triggerToast('导出成功', '文件已保存'); } catch (err) { triggerToast('导出失败', err.message, 'error'); } }
// --- 导出/导入 ---
async function exportReport() {
if (!isReportValid.value) return;
const fileName = `SystemDoctor_Report_${new Date().toISOString().slice(0, 19).replace(/[:T]/g, "-")}.json`;
const content = JSON.stringify(report.value, null, 2);
// 1. 尝试使用现代浏览器 API (支持选择保存位置)
if ('showSaveFilePicker' in window) {
try {
const handle = await window.showSaveFilePicker({
suggestedName: fileName,
types: [{
description: 'JSON Report',
accept: { 'application/json': ['.json'] },
}],
});
const writable = await handle.createWritable();
await writable.write(content);
await writable.close();
triggerToast('导出成功', '文件已保存到指定位置', 'success');
return;
} catch (err) {
if (err.name === 'AbortError') return; // 用户取消
console.warn("File System Access API warning:", err);
// 继续执行降级方案
}
}
// 2. 降级方案:传统的 Blob 下载 (通常保存到下载文件夹)
try {
const blob = new Blob([content], { type: "application/json" });
const url = URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = fileName;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
URL.revokeObjectURL(url);
triggerToast('导出成功', '已保存到默认下载目录', 'success');
} catch (err) {
triggerToast('导出失败', err.message, 'error');
}
}
function triggerImport() { fileInput.value.click(); }
function handleFileImport(event) { const file = event.target.files[0]; if (!file) return; const reader = new FileReader(); reader.onload = (e) => { try { const json = JSON.parse(e.target.result); if (json && (json.hardware || json.storage)) { report.value = json; scanFinished.value = false; triggerToast('导入成功', '已加载历史报告'); } else { triggerToast('导入失败', '文件格式错误', 'error'); } } catch (err) { triggerToast('解析失败', err.message, 'error'); } }; reader.readAsText(file); event.target.value = ''; }