diff --git a/webui/src/i18n/index.ts b/webui/src/i18n/index.ts index a1cabe9..9141767 100644 --- a/webui/src/i18n/index.ts +++ b/webui/src/i18n/index.ts @@ -31,6 +31,7 @@ const resources = { createTask: 'Create', updateTask: 'Update', deleteTask: 'Delete', + export: 'Export', dailySummary: 'Daily Summary', noDailySummary: 'No autonomy daily summary yet.', error: 'Error', @@ -198,6 +199,7 @@ const resources = { createTask: '新建', updateTask: '更新', deleteTask: '删除', + export: '导出', dailySummary: '日报摘要', noDailySummary: '暂无自治日报。', error: '错误', diff --git a/webui/src/pages/TaskAudit.tsx b/webui/src/pages/TaskAudit.tsx index 599ef1b..55471a2 100644 --- a/webui/src/pages/TaskAudit.tsx +++ b/webui/src/pages/TaskAudit.tsx @@ -34,6 +34,7 @@ const TaskAudit: React.FC = () => { const [statusFilter, setStatusFilter] = useState('all'); const [draft, setDraft] = useState({ id: '', content: '', priority: 'normal', status: 'todo', source: 'manual', due_at: '' }); const [dailyReport, setDailyReport] = useState(''); + const [reportDate, setReportDate] = useState(new Date().toISOString().slice(0,10)); const fetchData = async () => { setLoading(true); @@ -46,7 +47,8 @@ const TaskAudit: React.FC = () => { const sorted = arr.sort((a: any, b: any) => String(b.time || '').localeCompare(String(a.time || ''))); setItems(sorted); if (sorted.length > 0) setSelected(sorted[0]); - const dr = await fetch(`/webui/api/task_daily_summary${q}`); + const rq = q ? `${q}&date=${encodeURIComponent(reportDate)}` : `?date=${encodeURIComponent(reportDate)}`; + const dr = await fetch(`/webui/api/task_daily_summary${rq}`); if (dr.ok) { const dj = await dr.json(); setDailyReport(String(dj.report || '')); @@ -62,9 +64,20 @@ const TaskAudit: React.FC = () => { } }; - useEffect(() => { fetchData(); }, [q]); + useEffect(() => { fetchData(); }, [q, reportDate]); + + const exportDailyReport = () => { + const content = dailyReport || ''; + const blob = new Blob([content], { type: 'text/markdown;charset=utf-8' }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = `autonomy-daily-${reportDate}.md`; + a.click(); + URL.revokeObjectURL(url); + }; const filteredItems = useMemo(() => items.filter((it) => { if (sourceFilter !== 'all' && String(it.source || '-') !== sourceFilter) return false; if (statusFilter !== 'all' && String(it.status || '-') !== statusFilter) return false; @@ -125,7 +138,13 @@ const TaskAudit: React.FC = () => {
-
{t('dailySummary')}
+
+
{t('dailySummary')}
+
+ setReportDate(e.target.value)} className="px-2 py-1 rounded bg-zinc-900 border border-zinc-700 text-xs" /> + +
+
{dailyReport || t('noDailySummary')}