custom export
This commit is contained in:
47
src/App.vue
47
src/App.vue
@@ -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 = ''; }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user