1 line
31 KiB
JSON
1 line
31 KiB
JSON
|
|
{"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, deleteTodo, copyPendingTodos } from '../services/api';\nimport TodoForm from './TodoForm';\nimport TodoList from './TodoList';\nimport HistoryTodos from './HistoryTodos';\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: 40px;\n box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);\n width: 100%;\n max-width: 1200px;\n max-height: 95vh;\n overflow-y: auto;\n min-height: 600px;\n`;\n_c = AppContainer;\nconst Header = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 40px;\n padding-bottom: 25px;\n border-bottom: 2px solid #f0f0f0;\n`;\n_c2 = Header;\nconst Title = styled.h1`\n color: #333;\n font-size: 32px;\n font-weight: 300;\n margin: 0;\n`;\n_c3 = Title;\nconst HeaderActions = styled.div`\n display: flex;\n gap: 12px;\n align-items: center;\n`;\n_c4 = HeaderActions;\nconst CopyPendingButton = styled.button`\n background: rgba(255, 152, 0, 0.1);\n color: #ff9800;\n border: 2px solid rgba(255, 152, 0, 0.2);\n padding: 10px 20px;\n border-radius: 8px;\n font-size: 14px;\n cursor: pointer;\n transition: all 0.3s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n\n &:hover {\n background: rgba(255, 152, 0, 0.15);\n border-color: #ff9800;\n transform: translateY(-1px);\n }\n\n &::before {\n content: '📋';\n font-size: 16px;\n }\n`;\n_c5 = CopyPendingButton;\nconst HistoryButton = styled.button`\n background: rgba(102, 126, 234, 0.1);\n color: #667eea;\n border: 2px solid rgba(102, 126, 234, 0.2);\n padding: 10px 20px;\n border-radius: 8px;\n font-size: 14px;\n cursor: pointer;\n transition: all 0.3s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n\n &:hover {\n background: rgba(102, 126, 234, 0.15);\n border-color: #667eea;\n transform: translateY(-1px);\n }\n\n &::before {\n content: '📚';\n font-size: 16px;\n }\n`;\n_c6 = HistoryButton;\nconst LogoutButton = styled.button`\n background: transparent;\n color: #666;\n border: 2px solid #e1e5e9;\n padding: 10px 20px;\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_c7 = LogoutButton;\nconst Content = styled.div`\n display: flex;\n flex-direction: column;\n gap: 35px;\n`;\n_c8 = Content;\nconst LoadingMessage = styled.div`\n text-align: center;\n color: #666;\n font-size: 18px;\n padding: 60px;\n`;\n_c9 = LoadingMessage;\nconst EmptyMessage = styled.div`\n text-align: center;\n color: #999;\n font-size: 18px;\n padding: 60px;\n background: rgba(102, 126, 234, 0.05);\n border-radius: 16px;\n border: 2px dashed #e1e5e9;\n`;\n_c0 = 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 const [showHistory, setShowHistory] = useState(false);\n const [successMessage, setSuccessMessage] = 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('添加待办事<EFBFBD>
|