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/ecf58094cdce18820d25875d93220e640ee4208c6cc88456ae7d411aecee4c13.json
2025-06-13 14:04:40 +08:00

1 line
35 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, migratePendingTodos, suspendTodo } from '../services/api';\nimport TodoForm from './TodoForm';\nimport TodoList from './TodoList';\nimport HistoryTodos from './HistoryTodos';\nimport SuspendedTodos from './SuspendedTodos';\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 MigratePendingButton = 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 = MigratePendingButton;\nconst SuspendedButton = 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_c6 = SuspendedButton;\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_c7 = 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_c8 = LogoutButton;\nconst Content = styled.div`\n display: flex;\n flex-direction: column;\n gap: 35px;\n`;\n_c9 = Content;\nconst LoadingMessage = styled.div`\n text-align: center;\n color: #666;\n font-size: 18px;\n padding: 60px;\n`;\n_c0 = 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_c1 = 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 [showSuspended, setShowSuspended] = 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('添加待办事项失败');\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 const handleDeleteTodo = async id => {\n try {\n await deleteTodo(id);\n setTodos(prev => prev.filter(todo => todo.id !== id));\n setSuccessMessage('待办事项已删除');\n setTimeout(() => setSuccessMessage(''), 3000);\n } catch (err) {\n setError('删除待办事项失败');\n console.error('Delete todo error:', err);\n }\n };\n const handleSuspendTodo = async id => {\n try {\n await suspendTodo(id);\n setTodos(prev => prev.filter(todo => todo.id !== id));\n setSuccessMessage('待办事项已挂起');\n setTimeout(() => setSuccessMessage(''), 3000);\n } catch (err) {\n setError('挂起待办事项失败');\n console.error('Suspend todo error:', err);\n }\n };\n const handleMigratePendingTodos = async () => {\n try {\n const result = await migratePendingTodos();\n if (result.migratedCount > 0) {\n setSuccessMessage(result.message);\n // 重新加载待办事项以显示迁移的内容\n await loadTodos();\n } else {\n setSuccessMessage('没有找到需要迁移的未完成待办事项');\n }\n setTimeout(() => setSuccessMessage(''), 5000);\n } catch (err) {\n setError('迁移待办事项失败');\n console.error('Migrate pending todos 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 (isTomorrow(date)) {\n return '明天';\n } else {\n // 简化日期格式,不使用中文语言包\n const month = date.getMonth() + 1;\n const day = date.getDate();\n const weekdays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];\n const weekday = weekdays[date.getDay()];\n return `${month}月${day}日 ${weekday}`;\n }\n };\n const groupedTodos = groupTodosByDate(todos);\n\n // 如果正在显示历史视图\n if (showHistory) {\n return /*#__PURE__*/_jsxDEV(AppContainer, {\n children: /*#__PURE__*/_jsxDEV(HistoryTodos, {\n onBack: () => setShowHistory(false)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 299,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 298,\n columnNumber: 7\n }, this);\n }\n\n // 如果正在显示挂起视图\n if (showSuspended) {\n return /*#__PURE__*/_jsxDEV(AppContainer, {\n children: /*#__PURE__*/_jsxDEV(SuspendedTodos, {\n onBack: () => setShowSuspended(false)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 308,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 307,\n columnNumber: 7\n }, this);\n }\n if (loading) {\n return /*#__PURE__*/_jsxDEV(AppContainer, {\n children: /*#__PURE__*/_jsxDEV(LoadingMessage, {\n children: \"\\u52A0\\u8F7D\\u4E2D...\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 316,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 315,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/_jsxDEV(AppContainer, {\n children: [/*#__PURE__*/_jsxDEV(Header, {\n children: [/*#__PURE__*/_jsxDEV(Title, {\n children: \"\\u5DE5\\u4F5C\\u5F85\\u529E\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 324,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(HeaderActions, {\n children: [/*#__PURE__*/_jsxDEV(MigratePendingButton, {\n onClick: handleMigratePendingTodos,\n children: \"\\u8FC1\\u79FB\\u672A\\u5B8C\\u6210\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 326,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(SuspendedButton, {\n onClick: () => setShowSuspended(true),\n children: \"\\u6302\\u8D77\\u5F85\\u529E\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 329,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(HistoryButton, {\n onClick: () => setShowHistory(true),\n children: \"\\u5386\\u53F2\\u8BB0\\u5F55\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 332,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(LogoutButton, {\n onClick: onLogout,\n children: \"\\u9000\\u51FA\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 335,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 325,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 323,\n columnNumber: 7\n }, this), /*#__PURE__*/_jsxDEV(Content, {\n children: [/*#__PURE__*/_jsxDEV(TodoForm, {\n onAddTodo: handleAddTodo\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 340,\n columnNumber: 9\n }, this), error && /*#__PURE__*/_jsxDEV(\"div\", {\n style: {\n color: '#e74c3c',\n textAlign: 'center',\n padding: '15px',\n fontSize: '16px'\n },\n children: error\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 343,\n columnNumber: 11\n }, this), successMessage && /*#__PURE__*/_jsxDEV(\"div\", {\n style: {\n color: '#27ae60',\n textAlign: 'center',\n padding: '15px',\n fontSize: '16px',\n background: 'rgba(39, 174, 96, 0.1)',\n borderRadius: '8px',\n marginBottom: '20px'\n },\n children: successMessage\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 349,\n columnNumber: 11\n }, this), groupedTodos.length === 0 ? /*#__PURE__*/_jsxDEV(EmptyMessage, {\n children: \"\\uD83D\\uDCDD \\u8FD8\\u6CA1\\u6709\\u5F85\\u529E\\u4E8B\\u9879\\uFF0C\\u70B9\\u51FB\\u4E0A\\u65B9\\u6DFB\\u52A0\\u7B2C\\u4E00\\u4E2A\\u5427\\uFF01\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 363,\n columnNumber: 11\n }, this) : groupedTodos.map(({\n date,\n todos\n }) => {\n const dateObj = parseISO(date);\n const isTodayList = isToday(dateObj);\n return /*#__PURE__*/_jsxDEV(TodoList, {\n dateLabel: formatDateLabel(date),\n todos: todos,\n onToggleTodo: handleToggleTodo,\n onDeleteTodo: handleDeleteTodo,\n onSuspendTodo: handleSuspendTodo,\n isToday: isTodayList\n }, date, false, {\n fileName: _jsxFileName,\n lineNumber: 372,\n columnNumber: 15\n }, this);\n })]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 339,\n columnNumber: 7\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 322,\n columnNumber: 5\n }, this);\n}\n_s(TodoApp, \"HzX1kg8MXzliiiRsX/hc8/ctVgk=\");\n_c10 = TodoApp;\nexport default TodoApp;\nvar _c, _c2, _c3, _c4, _c5, _c6, _c7, _c8, _c9, _c0, _c1, _c10;\n$RefreshReg$(_c, \"AppContainer\");\n$RefreshReg$(_c2, \"Header\");\n$RefreshReg$(_c3, \"Title\");\n$RefreshReg$(_c4, \"HeaderActions\");\n$RefreshReg$(_c5, \"MigratePendingButton\");\n$RefreshReg$(_c6, \"SuspendedButton\");\n$RefreshReg$(_c7, \"HistoryButton\");\n$RefreshReg$(_c8, \"LogoutButton\");\n$RefreshReg$(_c9, \"Content\");\n$RefreshReg$(_c0, \"LoadingMessage\");\n$RefreshReg$(_c1, \"EmptyMessage\");\n$RefreshReg$(_c10, \"TodoApp\");","map":{"version":3,"names":["React","useState","useEffect","styled","format","parseISO","isToday","isYesterday","isTomorrow","getTodos","createTodo","updateTodo","deleteTodo","migratePendingTodos","suspendTodo","TodoForm","TodoList","HistoryTodos","SuspendedTodos","jsxDEV","_jsxDEV","AppContainer","div","_c","Header","_c2","Title","h1","_c3","HeaderActions","_c4","MigratePendingButton","button","_c5","SuspendedButton","_c6","HistoryButton","_c7","LogoutButton","_c8","Content","_c9","LoadingMessage","_c0","EmptyMessage","_c1","TodoApp","onLogout","_s","todos","setTodos","loading","setLoading","error","setError","showHistory","setShowHistory","showSuspended","setShowSuspended","successMessage","setSuccessMessage","loadTodos","data","err","console","handleAddTodo","todoData","newTodo","prev","handleToggleTodo","id","completed","updatedTodo","map","todo","handleDeleteTodo","filter","setTimeout","handleSuspendTodo","handleMigratePendingTodos","result","migratedCount","message","groupTodosByDate","groups","forEach","date","push","sortedDates","Object","keys","sort","a","b","Date","priorityOrder","urgent","high","medium","low","priority","formatDateLabel","dateString","month","getMonth","day","getDate","weekdays","weekday","getDay","groupedTodos","children","onBack","fileName","_jsxFileName","lineNumber","columnNumber","onClick","onAddTodo","style","color","textAlign","padding","fontSize","background","borderRadius","marginBottom","length","dateObj","isTodayList","dateLabel","onToggleTodo","onDeleteTodo","onSuspendTodo","_c10","$RefreshReg$"],"sources":["D:/aiproject/goAgent/todo/client/src/components/TodoApp.js"],"sourcesContent":["import React, { useState, useEffect } from 'react';\r\nimport styled from 'styled-components';\r\nimport { format, parseISO, isToday, isYesterday, isTomorrow } from 'date-fns';\r\nimport { getTodos, createTodo, updateTodo, deleteTodo, migratePendingTodos, suspendTodo } from '../services/api';\r\nimport TodoForm from './TodoForm';\r\nimport TodoList from './TodoList';\r\nimport HistoryTodos from './HistoryTodos';\r\nimport SuspendedTodos from './SuspendedTodos';\r\n\r\nconst AppContainer = styled.div`\r\n background: rgba(255, 255, 255, 0.95);\r\n backdrop-filter: blur(10px);\r\n border-radius: 20px;\r\n padding: 40px;\r\n box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);\r\n width: 100%;\r\n max-width: 1200px;\r\n max-height: 95vh;\r\n overflow-y: auto;\r\n min-height: 600px;\r\n`;\r\n\r\nconst Header = styled.div`\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n margin-bottom: 40px;\r\n padding-bottom: 25px;\r\n border-bottom: 2px solid #f0f0f0;\r\n`;\r\n\r\nconst Title = styled.h1`\r\n color: #333;\r\n font-size: 32px;\r\n font-weight: 300;\r\n margin: 0;\r\n`;\r\n\r\nconst HeaderActions = styled.div`\r\n display: flex;\r\n gap: 12px;\r\n align-items: center;\r\n`;\r\n\r\nconst MigratePendingButton = styled.button`\r\n background: rgba(255, 152, 0, 0.1);\r\n color: #ff9800;\r\n border: 2px solid rgba(255, 152, 0, 0.2);\r\n padding: 10px 20px;\r\n border-radius: 8px;\r\n font-size: 14px;\r\n cursor: pointer;\r\n transition: all 0.3s ease;\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n\r\n &:hover {\r\n background: rgba(255, 152, 0, 0.15);\r\n border-color: #ff9800;\r\n transform: translateY(-1px);\r\n }\r\n\r\n &::before {\r\n content: '📦';\r\n font-size: 16px;\r\n }\r\n`;\r\n\r\nconst SuspendedButton = styled.button`\r\n background: rgba(255, 152, 0, 0.1);\r\n color: #ff9800;\r\n border: 2px solid rgba(255, 152, 0, 0.2);\r\n padding: 10px 20px;\r\n border-radius: 8px;\r\n font-size: 14px;\r\n cursor: pointer;\r\n transition: all 0.3s ease;\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n\r\n &:hover {\r\n background: rgba(255, 152, 0, 0.15);\r\n border-color: #ff9800;\r\n transform: translateY(-1px);\r\n }\r\n\r\n &::before {\r\n content: '⏸️';\r\n font-size: 16px;\r\n }\r\n`;\r\n\r\nconst HistoryButton = styled.button`\r\n background: rgba(102, 126, 234, 0.1);\r\n color: #667eea;\r\n border: 2px solid rgba(102, 126, 234, 0.2);\r\n padding: 10px 20px;\r\n border-radius: 8px;\r\n font-size: 14px;\r\n cursor: pointer;\r\n transition: all 0.3s ease;\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n\r\n &:hover {\r\n background: rgba(102, 126, 234, 0.15);\r\n border-color: #667eea;\r\n transform: translateY(-1px);\r\n }\r\n\r\n &::before {\r\n content: '📚';\r\n font-size: 16px;\r\n }\r\n`;\r\n\r\nconst LogoutButton = styled.button`\r\n background: transparent;\r\n color: #666;\r\n border: 2px solid #e1e5e9;\r\n padding: 10px 20px;\r\n border-radius: 8px;\r\n font-size: 14px;\r\n cursor: pointer;\r\n transition: all 0.3s ease;\r\n\r\n &:hover {\r\n border-color: #667eea;\r\n color: #667eea;\r\n }\r\n`;\r\n\r\nconst Content = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n gap: 35px;\r\n`;\r\n\r\nconst LoadingMessage = styled.div`\r\n text-align: center;\r\n color: #666;\r\n font-size: 18px;\r\n padding: 60px;\r\n`;\r\n\r\nconst EmptyMessage = styled.div`\r\n text-align: center;\r\n color: #999;\r\n font-size: 18px;\r\n padding: 60px;\r\n background: rgba(102, 126, 234, 0.05);\r\n border-radius: 16px;\r\n border: 2px dashed #e1e5e9;\r\n`;\r\n\r\nfunction TodoApp({ onLogout }) {\r\n const [todos, setTodos] = useState([]);\r\n const [loading, setLoading] = useState(true);\r\n const [error, setError] = useState('');\r\n const [showHistory, setShowHistory] = useState(false);\r\n const [showSuspended, setShowSuspended] = useState(false);\r\n const [successMessage, setSuccessMessage] = useState('');\r\n\r\n useEffect(() => {\r\n loadTodos();\r\n }, []);\r\n\r\n const loadTodos = async () => {\r\n try {\r\n setLoading(true);\r\n const data = await getTodos();\r\n setTodos(data);\r\n } catch (err) {\r\n setError('加载待办事项失败');\r\n console.error('Load todos error:', err);\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleAddTodo = async (todoData) => {\r\n try {\r\n const newTodo = await createTodo(todoData);\r\n setTodos(prev => [newTodo, ...prev]);\r\n } catch (err) {\r\n setError('添加待办事项失败');\r\n console.error('Add todo error:', err);\r\n }\r\n };\r\n\r\n const handleToggleTodo = async (id, completed) => {\r\n try {\r\n const updatedTodo = await updateTodo(id, { completed });\r\n setTodos(prev => \r\n prev.map(todo => \r\n todo.id === id ? { ...todo, completed } : todo\r\n )\r\n );\r\n } catch (err) {\r\n setError('更新待办事项失败');\r\n console.error('Toggle todo error:', err);\r\n }\r\n };\r\n\r\n const handleDeleteTodo = async (id) => {\r\n try {\r\n await deleteTodo(id);\r\n setTodos(prev => prev.filter(todo => todo.id !== id));\r\n setSuccessMessage('待办事项已删除');\r\n setTimeout(() => setSuccessMessage(''), 3000);\r\n } catch (err) {\r\n setError('删除待办事项失败');\r\n console.error('Delete todo error:', err);\r\n }\r\n };\r\n\r\n const handleSuspendTodo = async (id) => {\r\n try {\r\n await suspendTodo(id);\r\n setTodos(prev => prev.filter(todo => todo.id !== id));\r\n setSuccessMessage('待办事项已挂起');\r\n setTimeout(() => setSuccessMessage(''), 3000);\r\n } catch (err) {\r\n setError('挂起待办事项失败');\r\n console.error('Suspend todo error:', err);\r\n }\r\n };\r\n\r\n const handleMigratePendingTodos = async () => {\r\n try {\r\n const result = await migratePendingTodos();\r\n if (result.migratedCount > 0) {\r\n setSuccessMessage(result.message);\r\n // 重新加载待办事项以显示迁移的内容\r\n await loadTodos();\r\n } else {\r\n setSuccessMessage('没有找到需要迁移的未完成待办事项');\r\n }\r\n setTimeout(() => setSuccessMessage(''), 5000);\r\n } catch (err) {\r\n setError('迁移待办事项失败');\r\n console.error('Migrate pending todos error:', err);\r\n }\r\n };\r\n\r\n // 按日期分组待办事项\r\n const groupTodosByDate = (todos) => {\r\n const groups = {};\r\n \r\n todos.forEach(todo => {\r\n const date = todo.date;\r\n if (!groups[date]) {\r\n groups[date] = [];\r\n }\r\n groups[date].push(todo);\r\n });\r\n\r\n // 按日期排序\r\n const sortedDates = Object.keys(groups).sort((a, b) => new Date(b) - new Date(a));\r\n \r\n return sortedDates.map(date => ({\r\n date,\r\n todos: groups[date].sort((a, b) => {\r\n // 按优先级排序\r\n const priorityOrder = { urgent: 4, high: 3, medium: 2, low: 1 };\r\n return priorityOrder[b.priority] - priorityOrder[a.priority];\r\n })\r\n }));\r\n };\r\n\r\n const formatDateLabel = (dateString) => {\r\n const date = parseISO(dateString);\r\n \r\n if (isToday(date)) {\r\n return '今天';\r\n } else if (isYesterday(date)) {\r\n return '昨天';\r\n } else if (isTomorrow(date)) {\r\n return '明天';\r\n } else {\r\n // 简化日期格式,不使用中文语言包\r\n const month = date.getMonth() + 1;\r\n const day = date.getDate();\r\n const weekdays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];\r\n const weekday = weekdays[date.getDay()];\r\n return `${month}月${day}日 ${weekday}`;\r\n }\r\n };\r\n\r\n const groupedTodos = groupTodosByDate(todos);\r\n\r\n // 如果正在显示历史视图\r\n if (showHistory) {\r\n return (\r\n <AppContainer>\r\n <HistoryTodos onBack={() => setShowHistory(false)} />\r\n </AppContainer>\r\n );\r\n }\r\n\r\n // 如果正在显示挂起视图\r\n if (showSuspended) {\r\n return (\r\n <AppContainer>\r\n <SuspendedTodos onBack={() => setShowSuspended(false)} />\r\n </AppContainer>\r\n );\r\n }\r\n\r\n if (loading) {\r\n return (\r\n <AppContainer>\r\n <LoadingMessage>加载中...</LoadingMessage>\r\n </AppContainer>\r\n );\r\n }\r\n\r\n return (\r\n <AppContainer>\r\n <Header>\r\n <Title>工作待办</Title>\r\n <HeaderActions>\r\n <MigratePendingButton onClick={handleMigratePendingTodos}>\r\n 迁移未完成\r\n </MigratePendingButton>\r\n <SuspendedButton onClick={() => setShowSuspended(true)}>\r\n 挂起待办\r\n </SuspendedButton>\r\n <HistoryButton onClick={() => setShowHistory(true)}>\r\n 历史记录\r\n </HistoryButton>\r\n <LogoutButton onClick={onLogout}>退出</LogoutButton>\r\n </HeaderActions>\r\n </Header>\r\n \r\n <Content>\r\n <TodoForm onAddTodo={handleAddTodo} />\r\n \r\n {error && (\r\n <div style={{ color: '#e74c3c', textAlign: 'center', padding: '15px', fontSize: '16px' }}>\r\n {error}\r\n </div>\r\n )}\r\n \r\n {successMessage && (\r\n <div style={{ \r\n color: '#27ae60', \r\n textAlign: 'center', \r\n padding: '15px', \r\n fontSize: '16px',\r\n background: 'rgba(39, 174, 96, 0.1)',\r\n borderRadius: '8px',\r\n marginBottom: '20px'\r\n }}>\r\n {successMessage}\r\n </div>\r\n )}\r\n \r\n {groupedTodos.length === 0 ? (\r\n <EmptyMessage>\r\n 📝 还没有待办事项,点击上方添加第一个吧!\r\n </EmptyMessage>\r\n ) : (\r\n groupedTodos.map(({ date, todos }) => {\r\n const dateObj = parseISO(date);\r\n const isTodayList = isToday(dateObj);\r\n \r\n return (\r\n <TodoList\r\n key={date}\r\n dateLabel={formatDateLabel(date)}\r\n todos={todos}\r\n onToggleTodo={handleToggleTodo}\r\n onDeleteTodo={handleDeleteTodo}\r\n onSuspendTodo={handleSuspendTodo}\r\n isToday={isTodayList}\r\n />\r\n );\r\n })\r\n )}\r\n </Content>\r\n </AppContainer>\r\n );\r\n}\r\n\r\nexport default TodoApp; "],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}