From facce53aba4a1b4bde1dcb51ed0be253c5cf28fd Mon Sep 17 00:00:00 2001 From: Julian Freeman Date: Sun, 22 Mar 2026 19:24:01 -0400 Subject: [PATCH] export json --- src/App.vue | 54 +++++++++++++++-------------------------------------- 1 file changed, 15 insertions(+), 39 deletions(-) diff --git a/src/App.vue b/src/App.vue index f5a5f77..38d2226 100644 --- a/src/App.vue +++ b/src/App.vue @@ -350,52 +350,37 @@ const isTagSelectOpen = ref(false); const isExportModalOpen = ref(false); const exportStartDate = ref(new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toLocaleDateString('sv')); const exportEndDate = ref(currentDate.value); -const exportSelectedTags = ref([]); - -const toggleExportTag = (tagId: number) => { - if (exportSelectedTags.value.includes(tagId)) { - exportSelectedTags.value = exportSelectedTags.value.filter(id => id !== tagId); - } else { - exportSelectedTags.value.push(tagId); - } -}; - -const selectAllTags = () => { - exportSelectedTags.value = tags.value.map(t => t.id); -}; const openExportModal = () => { exportEndDate.value = currentDate.value; - selectAllTags(); isExportModalOpen.value = true; }; const handleExport = async () => { try { const events: DBEvent[] = await invoke("get_events_range", { startDate: exportStartDate.value, endDate: exportEndDate.value }); - const filteredEvents = events.filter(e => exportSelectedTags.value.includes(e.main_tag_id) || (e.sub_tag_id && exportSelectedTags.value.includes(e.sub_tag_id))); - if (filteredEvents.length === 0) { - showToast("所选范围内没有找到匹配的记录", "error"); + if (events.length === 0) { + showToast("所选范围内没有找到记录", "error"); return; } const savePath = await save({ - filters: [{ name: "CSV 逗号分隔值文件", extensions: ["csv"] }], - defaultPath: `ChronoSnap_Export_${exportStartDate.value}_${exportEndDate.value}.csv` + filters: [{ name: "JSON 文件", extensions: ["json"] }], + defaultPath: `ChronoSnap_Export_${exportStartDate.value}_${exportEndDate.value}.json` }); if (savePath) { - let csvContent = "日期,开始时间,结束时间,主标签,副标签,事件内容\n"; - for (const e of filteredEvents) { - const start = logicalMinutesToTime(e.start_minute); - const end = logicalMinutesToTime(e.end_minute); - const mainTag = getTagName(e.main_tag_id); - const subTag = getTagName(e.sub_tag_id); - const content = `"${e.content.replace(/"/g, '""')}"`; - csvContent += `${e.date},${start},${end},${mainTag},${subTag},${content}\n`; - } - await writeTextFile(savePath, "\uFEFF" + csvContent); + const exportData = events.map(e => ({ + date: e.date, + start_time: logicalMinutesToTime(e.start_minute), + end_time: logicalMinutesToTime(e.end_minute), + main_tag: getTagName(e.main_tag_id), + sub_tag: getTagName(e.sub_tag_id), + content: e.content + })); + + await writeTextFile(savePath, JSON.stringify(exportData, null, 2)); isExportModalOpen.value = false; showToast("导出成功"); } @@ -628,17 +613,8 @@ const handleExport = async () => { -
-
- - -
-
- -
-
- +