This repository has been archived on 2026-03-06. You can view files and clone it, but cannot push or open issues or pull requests.
todo/client/node_modules/.cache/babel-loader/b37375a2f0cd9352b56eaa736c2d73ba4f35337235ef5ec9719638d61c211c19.json

1 line
20 KiB
JSON
Raw Normal View History

2025-06-13 06:04:40 +00:00
{"ast":null,"code":"var _jsxFileName = \"D:\\\\aiproject\\\\goAgent\\\\todo\\\\client\\\\src\\\\components\\\\TodoApp.js\",\n _s = $RefreshSig$();\nimport React, { useState, useEffect } from 'react';\nimport styled from 'styled-components';\nimport { format, parseISO, isToday, isYesterday, isTomorrow } from 'date-fns';\nimport { getTodos, createTodo, updateTodo } from '../services/api';\nimport TodoForm from './TodoForm';\nimport TodoList from './TodoList';\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nconst AppContainer = styled.div`\n background: rgba(255, 255, 255, 0.95);\n backdrop-filter: blur(10px);\n border-radius: 20px;\n padding: 30px;\n box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);\n width: 100%;\n max-width: 800px;\n max-height: 90vh;\n overflow-y: auto;\n`;\n_c = AppContainer;\nconst Header = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 30px;\n padding-bottom: 20px;\n border-bottom: 2px solid #f0f0f0;\n`;\n_c2 = Header;\nconst Title = styled.h1`\n color: #333;\n font-size: 28px;\n font-weight: 300;\n margin: 0;\n`;\n_c3 = Title;\nconst LogoutButton = styled.button`\n background: transparent;\n color: #666;\n border: 2px solid #e1e5e9;\n padding: 8px 16px;\n border-radius: 8px;\n font-size: 14px;\n cursor: pointer;\n transition: all 0.3s ease;\n\n &:hover {\n border-color: #667eea;\n color: #667eea;\n }\n`;\n_c4 = LogoutButton;\nconst Content = styled.div`\n display: flex;\n flex-direction: column;\n gap: 30px;\n`;\n_c5 = Content;\nconst LoadingMessage = styled.div`\n text-align: center;\n color: #666;\n font-size: 16px;\n padding: 40px;\n`;\n_c6 = LoadingMessage;\nconst EmptyMessage = styled.div`\n text-align: center;\n color: #999;\n font-size: 16px;\n padding: 40px;\n background: rgba(102, 126, 234, 0.05);\n border-radius: 12px;\n border: 2px dashed #e1e5e9;\n`;\n_c7 = EmptyMessage;\nfunction TodoApp({\n onLogout\n}) {\n _s();\n const [todos, setTodos] = useState([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState('');\n useEffect(() => {\n loadTodos();\n }, []);\n const loadTodos = async () => {\n try {\n setLoading(true);\n const data = await getTodos();\n setTodos(data);\n } catch (err) {\n setError('');\n console.error('Load todos error:', err);\n } finally {\n setLoading(false);\n }\n };\n const handleAddTodo = async todoData => {\n try {\n const newTodo = await createTodo(todoData);\n setTodos(prev => [newTodo, ...prev]);\n } catch (err) {\n setError('');\n console.error('Add todo error:', err);\n }\n };\n const handleToggleTodo = async (id, completed) => {\n try {\n const updatedTodo = await updateTodo(id, {\n completed\n });\n setTodos(prev => prev.map(todo => todo.id === id ? {\n ...todo,\n completed\n } : todo));\n } catch (err) {\n setError('');\n console.error('Toggle todo error:', err);\n }\n };\n\n // 按日期分组待办事项\n const groupTodosByDate = todos => {\n const groups = {};\n todos.forEach(todo => {\n const date = todo.date;\n if (!groups[date]) {\n groups[date] = [];\n }\n groups[date].push(todo);\n });\n\n // 按日期排序\n const sortedDates = Object.keys(groups).sort((a, b) => new Date(b) - new Date(a));\n return sortedDates.map(date => ({\n date,\n todos: groups[date].sort((a, b) => {\n // 按优先级排序\n const priorityOrder = {\n urgent: 4,\n high: 3,\n medium: 2,\n low: 1\n };\n return priorityOrder[b.priority] - priorityOrder[a.priority];\n })\n }));\n };\n const formatDateLabel = dateString => {\n const date = parseISO(dateString);\n if (isToday(date)) {\n return '今天';\n } else if (isYesterday(date)) {\n return '昨天';\n } else if (isT