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/b3f0c93f3dc4a017964e62dd7dabc688b11ae4f7d6df8f0271444e698ee040b6.json
2025-06-13 15:31:12 +08:00

1 line
41 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 UserManagement from './UserManagement';\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 TitleSection = styled.div`\n display: flex;\n flex-direction: column;\n gap: 8px;\n`;\n_c3 = TitleSection;\nconst Title = styled.h1`\n color: #333;\n font-size: 32px;\n font-weight: 300;\n margin: 0;\n`;\n_c4 = Title;\nconst UserInfo = styled.div`\n color: #666;\n font-size: 14px;\n display: flex;\n align-items: center;\n gap: 8px;\n\n .username {\n font-weight: 500;\n color: #667eea;\n }\n\n .role {\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 500;\n }\n\n .admin {\n background: rgba(255, 152, 0, 0.1);\n color: #ff9800;\n }\n\n .user {\n background: rgba(102, 126, 234, 0.1);\n color: #667eea;\n }\n`;\n_c5 = UserInfo;\nconst HeaderActions = styled.div`\n display: flex;\n gap: 12px;\n align-items: center;\n flex-wrap: wrap;\n\n @media (max-width: 768px) {\n flex-direction: column;\n align-items: stretch;\n gap: 8px;\n }\n`;\n_c6 = HeaderActions;\nconst ActionButton = styled.button`\n background: ${({\n variant,\n theme\n}) => {\n var _theme$colors;\n switch (variant) {\n case 'primary':\n return (theme === null || theme === void 0 ? void 0 : (_theme$colors = theme.colors) === null || _theme$colors === void 0 ? void 0 : _theme$colors.primary) || '#667eea';\n case 'warning':\n return '#ff9800';\n case 'success':\n return '#00B894';\n case 'danger':\n return '#e74c3c';\n default:\n return 'transparent';\n }\n}};\n color: ${({\n variant\n}) => variant === 'default' ? '#666' : 'white'};\n border: ${({\n variant\n}) => variant === 'default' ? '2px solid #e1e5e9' : 'none'};\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 white-space: nowrap;\n\n &:hover {\n transform: translateY(-1px);\n ${({\n variant\n}) => {\n if (variant === 'default') {\n return `\n border-color: #667eea;\n color: #667eea;\n `;\n }\n return 'opacity: 0.9;';\n}}\n }\n\n &::before {\n content: ${({\n icon\n}) => icon ? `'${icon}'` : 'none'};\n font-size: 16px;\n }\n`;\n_c7 = ActionButton;\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 currentUser\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 [showUserManagement, setShowUserManagement] = 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 (showUserManagement) {\n return /*#__PURE__*/_jsxDEV(AppContainer, {\n children: /*#__PURE__*/_jsxDEV(UserManagement, {\n onBack: () => setShowUserManagement(false)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 294,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 293,\n columnNumber: 7\n }, this);\n }\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: 303,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 302,\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: 312,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 311,\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: 320,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 319,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/_jsxDEV(AppContainer, {\n children: [/*#__PURE__*/_jsxDEV(Header, {\n children: [/*#__PURE__*/_jsxDEV(TitleSection, {\n children: [/*#__PURE__*/_jsxDEV(Title, {\n children: \"\\u5DE5\\u4F5C\\u5F85\\u529E\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 329,\n columnNumber: 11\n }, this), currentUser && /*#__PURE__*/_jsxDEV(UserInfo, {\n children: [\"\\u6B22\\u8FCE\\uFF0C\", /*#__PURE__*/_jsxDEV(\"span\", {\n className: \"username\",\n children: currentUser.username\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 332,\n columnNumber: 18\n }, this), /*#__PURE__*/_jsxDEV(\"span\", {\n className: `role ${currentUser.is_admin ? 'admin' : 'user'}`,\n children: currentUser.is_admin ? '管理员' : '用户'\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 333,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 331,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 328,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(HeaderActions, {\n children: [/*#__PURE__*/_jsxDEV(ActionButton, {\n variant: \"warning\",\n icon: \"\\uD83D\\uDCE6\",\n onClick: handleMigratePendingTodos,\n children: \"\\u8FC1\\u79FB\\u672A\\u5B8C\\u6210\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 340,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(ActionButton, {\n variant: \"success\",\n icon: \"\\u23F8\\uFE0F\",\n onClick: () => setShowSuspended(true),\n children: \"\\u6302\\u8D77\\u5F85\\u529E\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 347,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(ActionButton, {\n variant: \"primary\",\n icon: \"\\uD83D\\uDCDA\",\n onClick: () => setShowHistory(true),\n children: \"\\u5386\\u53F2\\u8BB0\\u5F55\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 354,\n columnNumber: 11\n }, this), (currentUser === null || currentUser === void 0 ? void 0 : currentUser.is_admin) && /*#__PURE__*/_jsxDEV(ActionButton, {\n variant: \"primary\",\n icon: \"\\uD83D\\uDC65\",\n onClick: () => setShowUserManagement(true),\n children: \"\\u7528\\u6237\\u7BA1\\u7406\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 362,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(ActionButton, {\n variant: \"default\",\n onClick: onLogout,\n children: \"\\u9000\\u51FA\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 370,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 339,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 327,\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: 380,\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: 383,\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: 389,\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: 403,\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: 412,\n columnNumber: 15\n }, this);\n })]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 379,\n columnNumber: 7\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 326,\n columnNumber: 5\n }, this);\n}\n_s(TodoApp, \"63l4QgJ1S2zOr+A5Qp1BKbVZ1MM=\");\n_c1 = TodoApp;\nexport default TodoApp;\nvar _c, _c2, _c3, _c4, _c5, _c6, _c7, _c8, _c9, _c0, _c1;\n$RefreshReg$(_c, \"AppContainer\");\n$RefreshReg$(_c2, \"Header\");\n$RefreshReg$(_c3, \"TitleSection\");\n$RefreshReg$(_c4, \"Title\");\n$RefreshReg$(_c5, \"UserInfo\");\n$RefreshReg$(_c6, \"HeaderActions\");\n$RefreshReg$(_c7, \"ActionButton\");\n$RefreshReg$(_c8, \"Content\");\n$RefreshReg$(_c9, \"LoadingMessage\");\n$RefreshReg$(_c0, \"EmptyMessage\");\n$RefreshReg$(_c1, \"TodoApp\");","map":{"version":3,"names":["React","useState","useEffect","styled","format","parseISO","isToday","isYesterday","isTomorrow","getTodos","createTodo","updateTodo","deleteTodo","migratePendingTodos","suspendTodo","TodoForm","TodoList","HistoryTodos","SuspendedTodos","UserManagement","jsxDEV","_jsxDEV","AppContainer","div","_c","Header","_c2","TitleSection","_c3","Title","h1","_c4","UserInfo","_c5","HeaderActions","_c6","ActionButton","button","variant","theme","_theme$colors","colors","primary","icon","_c7","Content","_c8","LoadingMessage","_c9","EmptyMessage","_c0","TodoApp","onLogout","currentUser","_s","todos","setTodos","loading","setLoading","error","setError","showHistory","setShowHistory","showSuspended","setShowSuspended","showUserManagement","setShowUserManagement","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","className","username","is_admin","onClick","onAddTodo","style","color","textAlign","padding","fontSize","background","borderRadius","marginBottom","length","dateObj","isTodayList","dateLabel","onToggleTodo","onDeleteTodo","onSuspendTodo","_c1","$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\nimport UserManagement from './UserManagement';\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 TitleSection = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\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 UserInfo = styled.div`\r\n color: #666;\r\n font-size: 14px;\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n\r\n .username {\r\n font-weight: 500;\r\n color: #667eea;\r\n }\r\n\r\n .role {\r\n padding: 2px 8px;\r\n border-radius: 12px;\r\n font-size: 12px;\r\n font-weight: 500;\r\n }\r\n\r\n .admin {\r\n background: rgba(255, 152, 0, 0.1);\r\n color: #ff9800;\r\n }\r\n\r\n .user {\r\n background: rgba(102, 126, 234, 0.1);\r\n color: #667eea;\r\n }\r\n`;\r\n\r\nconst HeaderActions = styled.div`\r\n display: flex;\r\n gap: 12px;\r\n align-items: center;\r\n flex-wrap: wrap;\r\n\r\n @media (max-width: 768px) {\r\n flex-direction: column;\r\n align-items: stretch;\r\n gap: 8px;\r\n }\r\n`;\r\n\r\nconst ActionButton = styled.button`\r\n background: ${({ variant, theme }) => {\r\n switch (variant) {\r\n case 'primary': return theme?.colors?.primary || '#667eea';\r\n case 'warning': return '#ff9800';\r\n case 'success': return '#00B894';\r\n case 'danger': return '#e74c3c';\r\n default: return 'transparent';\r\n }\r\n }};\r\n color: ${({ variant }) => variant === 'default' ? '#666' : 'white'};\r\n border: ${({ variant }) => variant === 'default' ? '2px solid #e1e5e9' : 'none'};\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 white-space: nowrap;\r\n\r\n &:hover {\r\n transform: translateY(-1px);\r\n ${({ variant }) => {\r\n if (variant === 'default') {\r\n return `\r\n border-color: #667eea;\r\n color: #667eea;\r\n `;\r\n }\r\n return 'opacity: 0.9;';\r\n }}\r\n }\r\n\r\n &::before {\r\n content: ${({ icon }) => icon ? `'${icon}'` : 'none'};\r\n font-size: 16px;\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, currentUser }) {\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 [showUserManagement, setShowUserManagement] = 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 (showUserManagement) {\r\n return (\r\n <AppContainer>\r\n <UserManagement onBack={() => setShowUserManagement(false)} />\r\n </AppContainer>\r\n );\r\n }\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 <TitleSection>\r\n <Title>工作待办</Title>\r\n {currentUser && (\r\n <UserInfo>\r\n 欢迎,<span className=\"username\">{currentUser.username}</span>\r\n <span className={`role ${currentUser.is_admin ? 'admin' : 'user'}`}>\r\n {currentUser.is_admin ? '管理员' : '用户'}\r\n </span>\r\n </UserInfo>\r\n )}\r\n </TitleSection>\r\n <HeaderActions>\r\n <ActionButton\r\n variant=\"warning\"\r\n icon=\"📦\"\r\n onClick={handleMigratePendingTodos}\r\n >\r\n 迁移未完成\r\n </ActionButton>\r\n <ActionButton\r\n variant=\"success\"\r\n icon=\"⏸️\"\r\n onClick={() => setShowSuspended(true)}\r\n >\r\n 挂起待办\r\n </ActionButton>\r\n <ActionButton\r\n variant=\"primary\"\r\n icon=\"📚\"\r\n onClick={() => setShowHistory(true)}\r\n >\r\n 历史记录\r\n </ActionButton>\r\n {currentUser?.is_admin && (\r\n <ActionButton\r\n variant=\"primary\"\r\n icon=\"👥\"\r\n onClick={() => setShowUserManagement(true)}\r\n >\r\n 用户管理\r\n </ActionButton>\r\n )}\r\n <ActionButton\r\n variant=\"default\"\r\n onClick={onLogout}\r\n >\r\n 退出\r\n </ActionButton>\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":[]}