{"ast":null,"code":"var _jsxFileName = \"D:\\\\aiproject\\\\goAgent\\\\todo\\\\client\\\\src\\\\components\\\\UserManagement.js\",\n _s = $RefreshSig$();\nimport React, { useState, useEffect } from 'react';\nimport styled, { keyframes } from 'styled-components';\nimport { getUsers, registerUser } from '../services/api';\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nconst fadeIn = keyframes`\n from {\n opacity: 0;\n transform: translateY(20px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n`;\nconst UserManagementContainer = styled.div`\n background: ${({\n theme\n}) => theme.colors.glass.light};\n backdrop-filter: blur(10px);\n -webkit-backdrop-filter: blur(10px);\n border-radius: ${({\n theme\n}) => theme.borderRadius.xl};\n padding: ${({\n theme\n}) => theme.spacing.xl};\n box-shadow: ${({\n theme\n}) => theme.shadows.lg};\n border: 1px solid ${({\n theme\n}) => theme.colors.glass.light};\n animation: ${fadeIn} 0.5s ease-out;\n max-width: 800px;\n margin: 0 auto;\n\n @media (prefers-color-scheme: dark) {\n background: ${({\n theme\n}) => theme.colors.glass.dark};\n border-color: ${({\n theme\n}) => theme.colors.glass.dark};\n }\n`;\n_c = UserManagementContainer;\nconst Header = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: ${({\n theme\n}) => theme.spacing.xl};\n padding-bottom: ${({\n theme\n}) => theme.spacing.lg};\n border-bottom: 2px solid ${({\n theme\n}) => theme.colors.glass.light};\n\n @media (prefers-color-scheme: dark) {\n border-bottom-color: ${({\n theme\n}) => theme.colors.glass.dark};\n }\n`;\n_c2 = Header;\nconst Title = styled.h2`\n color: ${({\n theme\n}) => theme.colors.text.primary};\n font-size: ${({\n theme\n}) => theme.typography.fontSize['2xl']};\n font-weight: ${({\n theme\n}) => theme.typography.fontWeight.semibold};\n margin: 0;\n display: flex;\n align-items: center;\n gap: ${({\n theme\n}) => theme.spacing.sm};\n\n &::before {\n content: '👥';\n font-size: 1.2em;\n }\n`;\n_c3 = Title;\nconst BackButton = styled.button`\n background: ${({\n theme\n}) => theme.colors.glass.light};\n color: ${({\n theme\n}) => theme.colors.text.primary};\n border: 2px solid ${({\n theme\n}) => theme.colors.glass.light};\n padding: ${({\n theme\n}) => `${theme.spacing.sm} ${theme.spacing.lg}`};\n border-radius: ${({\n theme\n}) => theme.borderRadius.lg};\n font-size: ${({\n theme\n}) => theme.typography.fontSize.sm};\n cursor: pointer;\n transition: all ${({\n theme\n}) => theme.transitions.default};\n\n &:hover {\n background: ${({\n theme\n}) => theme.colors.primary};\n color: white;\n border-color: ${({\n theme\n}) => theme.colors.primary};\n transform: translateY(-1px);\n }\n\n @media (prefers-color-scheme: dark) {\n background: ${({\n theme\n}) => theme.colors.glass.dark};\n border-color: ${({\n theme\n}) => theme.colors.glass.dark};\n }\n`;\n_c4 = BackButton;\nconst AddUserForm = styled.form`\n display: flex;\n gap: ${({\n theme\n}) => theme.spacing.md};\n margin-bottom: ${({\n theme\n}) => theme.spacing.xl};\n padding: ${({\n theme\n}) => theme.spacing.lg};\n background: ${({\n theme\n}) => theme.colors.glass.light};\n border-radius: ${({\n theme\n}) => theme.borderRadius.lg};\n border: 2px dashed ${({\n theme\n}) => theme.colors.primary}40;\n\n @media (max-width: ${({\n theme\n}) => theme.breakpoints.md}) {\n flex-direction: column;\n }\n\n @media (prefers-color-scheme: dark) {\n background: ${({\n theme\n}) => theme.colors.glass.dark};\n }\n`;\n_c5 = AddUserForm;\nconst InputGroup = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: ${({\n theme\n}) => theme.spacing.xs};\n`;\n_c6 = InputGroup;\nconst Label = styled.label`\n color: ${({\n theme\n}) => theme.colors.text.primary};\n font-size: ${({\n theme\n}) => theme.typography.fontSize.sm};\n font-weight: ${({\n theme\n}) => theme.typography.fontWeight.medium};\n`;\n_c7 = Label;\nconst Input = styled.input`\n padding: ${({\n theme\n}) => theme.spacing.md};\n font-size: ${({\n theme\n}) => theme.typography.fontSize.base};\n border: 2px solid ${({\n theme\n}) => theme.colors.glass.light};\n border-radius: ${({\n theme\n}) => theme.borderRadius.md};\n background: ${({\n theme\n}) => theme.colors.glass.light};\n color: ${({\n theme\n}) => theme.colors.text.primary};\n transition: all ${({\n theme\n}) => theme.transitions.default};\n\n &:focus {\n outline: none;\n border-color: ${({\n theme\n}) => theme.colors.primary};\n box-shadow: 0 0 0 3px ${({\n theme\n}) => theme.colors.primary}40;\n }\n\n &::placeholder {\n color: ${({\n theme\n}) => theme.colors.text.secondary};\n }\n\n @media (prefers-color-scheme: dark) {\n background: ${({\n theme\n}) => theme.colors.glass.dark};\n border-color: ${({\n theme\n}) => theme.colors.glass.dark};\n }\n`;\n_c8 = Input;\nconst AddButton = styled.button`\n background: ${({\n theme\n}) => theme.colors.primary};\n color: white;\n border: none;\n padding: ${({\n theme\n}) => `${theme.spacing.md} ${theme.spacing.lg}`};\n border-radius: ${({\n theme\n}) => theme.borderRadius.md};\n font-size: ${({\n theme\n}) => theme.typography.fontSize.base};\n font-weight: ${({\n theme\n}) => theme.typography.fontWeight.medium};\n cursor: pointer;\n transition: all ${({\n theme\n}) => theme.transitions.default};\n align-self: end;\n\n &:hover {\n background: ${({\n theme\n}) => theme.colors.primary}dd;\n transform: translateY(-1px);\n }\n\n &:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n transform: none;\n }\n`;\n_c9 = AddButton;\nconst UserList = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${({\n theme\n}) => theme.spacing.md};\n`;\n_c0 = UserList;\nconst UserItem = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: ${({\n theme\n}) => theme.spacing.lg};\n background: ${({\n theme\n}) => theme.colors.glass.light};\n border-radius: ${({\n theme\n}) => theme.borderRadius.lg};\n border: 1px solid ${({\n theme\n}) => theme.colors.glass.light};\n transition: all ${({\n theme\n}) => theme.transitions.default};\n\n &:hover {\n transform: translateY(-1px);\n box-shadow: ${({\n theme\n}) => theme.shadows.md};\n }\n\n @media (prefers-color-scheme: dark) {\n background: ${({\n theme\n}) => theme.colors.glass.dark};\n border-color: ${({\n theme\n}) => theme.colors.glass.dark};\n }\n`;\n_c1 = UserItem;\nconst UserInfo = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${({\n theme\n}) => theme.spacing.xs};\n`;\n_c10 = UserInfo;\nconst Username = styled.span`\n color: ${({\n theme\n}) => theme.colors.text.primary};\n font-size: ${({\n theme\n}) => theme.typography.fontSize.lg};\n font-weight: ${({\n theme\n}) => theme.typography.fontWeight.medium};\n`;\n_c11 = Username;\nconst UserRole = styled.span`\n color: ${({\n theme,\n isAdmin\n}) => isAdmin ? theme.colors.status.warning : theme.colors.text.secondary};\n font-size: ${({\n theme\n}) => theme.typography.fontSize.sm};\n font-weight: ${({\n theme\n}) => theme.typography.fontWeight.medium};\n`;\n_c12 = UserRole;\nconst UserDate = styled.span`\n color: ${({\n theme\n}) => theme.colors.text.secondary};\n font-size: ${({\n theme\n}) => theme.typography.fontSize.sm};\n`;\n_c13 = UserDate;\nconst Message = styled.div`\n padding: ${({\n theme\n}) => theme.spacing.md};\n border-radius: ${({\n theme\n}) => theme.borderRadius.md};\n margin-bottom: ${({\n theme\n}) => theme.spacing.lg};\n text-align: center;\n font-size: ${({\n theme\n}) => theme.typography.fontSize.sm};\n animation: ${fadeIn} 0.3s ease-out;\n\n ${({\n type,\n theme\n}) => {\n if (type === 'success') {\n return `\n background: ${theme.colors.status.success}20;\n color: ${theme.colors.status.success};\n border: 1px solid ${theme.colors.status.success}40;\n `;\n }\n if (type === 'error') {\n return `\n background: ${theme.colors.status.error}20;\n color: ${theme.colors.status.error};\n border: 1px solid ${theme.colors.status.error}40;\n `;\n }\n return '';\n}}\n`;\n_c14 = Message;\nfunction UserManagement({\n onBack\n}) {\n _s();\n const [users, setUsers] = useState([]);\n const [username, setUsername] = useState('');\n const [password, setPassword] = useState('');\n const [loading, setLoading] = useState(true);\n const [submitting, setSubmitting] = useState(false);\n const [message, setMessage] = useState({\n text: '',\n type: ''\n });\n useEffect(() => {\n loadUsers();\n }, []);\n const loadUsers = async () => {\n try {\n setLoading(true);\n const userData = await getUsers();\n setUsers(userData);\n } catch (error) {\n setMessage({\n text: '加载用户列表失败',\n type: 'error'\n });\n } finally {\n setLoading(false);\n }\n };\n const handleSubmit = async e => {\n e.preventDefault();\n if (!username.trim() || !password.trim()) {\n setMessage({\n text: '用户名和密码不能为空',\n type: 'error'\n });\n return;\n }\n setSubmitting(true);\n try {\n await registerUser(username.trim(), password);\n setMessage({\n text: '用户添加成功',\n type: 'success'\n });\n setUsername('');\n setPassword('');\n await loadUsers();\n } catch (error) {\n var _error$response, _error$response$data;\n setMessage({\n text: ((_error$response = error.response) === null || _error$response === void 0 ? void 0 : (_error$response$data = _error$response.data) === null || _error$response$data === void 0 ? void 0 : _error$response$data.error) || '添加用户失败',\n type: 'error'\n });\n } finally {\n setSubmitting(false);\n }\n\n // 清除消息\n setTimeout(() => setMessage({\n text: '',\n type: ''\n }), 5000);\n };\n const formatDate = dateString => {\n return new Date(dateString).toLocaleDateString('zh-CN', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit'\n });\n };\n return /*#__PURE__*/_jsxDEV(UserManagementContainer, {\n children: [/*#__PURE__*/_jsxDEV(Header, {\n children: [/*#__PURE__*/_jsxDEV(Title, {\n children: \"\\u7528\\u6237\\u7BA1\\u7406\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 306,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(BackButton, {\n onClick: onBack,\n children: \"\\u8FD4\\u56DE\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 307,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 305,\n columnNumber: 7\n }, this), message.text && /*#__PURE__*/_jsxDEV(Message, {\n type: message.type,\n children: message.text\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 311,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(AddUserForm, {\n onSubmit: handleSubmit,\n children: [/*#__PURE__*/_jsxDEV(InputGroup, {\n children: [/*#__PURE__*/_jsxDEV(Label, {\n children: \"\\u7528\\u6237\\u540D\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 316,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(Input, {\n type: \"text\",\n placeholder: \"\\u8BF7\\u8F93\\u5165\\u7528\\u6237\\u540D\",\n value: username,\n onChange: e => setUsername(e.target.value),\n disabled: submitting,\n required: true\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 317,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 315,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(InputGroup, {\n children: [/*#__PURE__*/_jsxDEV(Label, {\n children: \"\\u5BC6\\u7801\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 327,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(Input, {\n type: \"password\",\n placeholder: \"\\u8BF7\\u8F93\\u5165\\u5BC6\\u7801\",\n value: password,\n onChange: e => setPassword(e.target.value),\n disabled: submitting,\n required: true\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 328,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 326,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(AddButton, {\n type: \"submit\",\n disabled: submitting,\n children: submitting ? '添加中...' : '添加用户'\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 337,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 314,\n columnNumber: 7\n }, this), /*#__PURE__*/_jsxDEV(UserList, {\n children: loading ? /*#__PURE__*/_jsxDEV(\"div\", {\n style: {\n textAlign: 'center',\n padding: '2rem'\n },\n children: \"\\u52A0\\u8F7D\\u4E2D...\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 344,\n columnNumber: 11\n }, this) : users.length === 0 ? /*#__PURE__*/_jsxDEV(\"div\", {\n style: {\n textAlign: 'center',\n padding: '2rem',\n color: '#999'\n },\n children: \"\\u6682\\u65E0\\u7528\\u6237\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 348,\n columnNumber: 11\n }, this) : users.map(user => /*#__PURE__*/_jsxDEV(UserItem, {\n children: /*#__PURE__*/_jsxDEV(UserInfo, {\n children: [/*#__PURE__*/_jsxDEV(Username, {\n children: user.username\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 355,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(UserRole, {\n isAdmin: user.is_admin,\n children: user.is_admin ? '管理员' : '普通用户'\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 356,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(UserDate, {\n children: [\"\\u521B\\u5EFA\\u4E8E \", formatDate(user.created_at)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 359,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 354,\n columnNumber: 15\n }, this)\n }, user.id, false, {\n fileName: _jsxFileName,\n lineNumber: 353,\n columnNumber: 13\n }, this))\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 342,\n columnNumber: 7\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 304,\n columnNumber: 5\n }, this);\n}\n_s(UserManagement, \"kD1DilUl1pPd4G+q3+6hMBaCtxw=\");\n_c15 = UserManagement;\nexport default UserManagement;\nvar _c, _c2, _c3, _c4, _c5, _c6, _c7, _c8, _c9, _c0, _c1, _c10, _c11, _c12, _c13, _c14, _c15;\n$RefreshReg$(_c, \"UserManagementContainer\");\n$RefreshReg$(_c2, \"Header\");\n$RefreshReg$(_c3, \"Title\");\n$RefreshReg$(_c4, \"BackButton\");\n$RefreshReg$(_c5, \"AddUserForm\");\n$RefreshReg$(_c6, \"InputGroup\");\n$RefreshReg$(_c7, \"Label\");\n$RefreshReg$(_c8, \"Input\");\n$RefreshReg$(_c9, \"AddButton\");\n$RefreshReg$(_c0, \"UserList\");\n$RefreshReg$(_c1, \"UserItem\");\n$RefreshReg$(_c10, \"UserInfo\");\n$RefreshReg$(_c11, \"Username\");\n$RefreshReg$(_c12, \"UserRole\");\n$RefreshReg$(_c13, \"UserDate\");\n$RefreshReg$(_c14, \"Message\");\n$RefreshReg$(_c15, \"UserManagement\");","map":{"version":3,"names":["React","useState","useEffect","styled","keyframes","getUsers","registerUser","jsxDEV","_jsxDEV","fadeIn","UserManagementContainer","div","theme","colors","glass","light","borderRadius","xl","spacing","shadows","lg","dark","_c","Header","_c2","Title","h2","text","primary","typography","fontSize","fontWeight","semibold","sm","_c3","BackButton","button","transitions","default","_c4","AddUserForm","form","md","breakpoints","_c5","InputGroup","xs","_c6","Label","label","medium","_c7","Input","input","base","secondary","_c8","AddButton","_c9","UserList","_c0","UserItem","_c1","UserInfo","_c10","Username","span","_c11","UserRole","isAdmin","status","warning","_c12","UserDate","_c13","Message","type","success","error","_c14","UserManagement","onBack","_s","users","setUsers","username","setUsername","password","setPassword","loading","setLoading","submitting","setSubmitting","message","setMessage","loadUsers","userData","handleSubmit","e","preventDefault","trim","_error$response","_error$response$data","response","data","setTimeout","formatDate","dateString","Date","toLocaleDateString","year","month","day","hour","minute","children","fileName","_jsxFileName","lineNumber","columnNumber","onClick","onSubmit","placeholder","value","onChange","target","disabled","required","style","textAlign","padding","length","color","map","user","is_admin","created_at","id","_c15","$RefreshReg$"],"sources":["D:/aiproject/goAgent/todo/client/src/components/UserManagement.js"],"sourcesContent":["import React, { useState, useEffect } from 'react';\r\nimport styled, { keyframes } from 'styled-components';\r\nimport { getUsers, registerUser } from '../services/api';\r\n\r\nconst fadeIn = keyframes`\r\n from {\r\n opacity: 0;\r\n transform: translateY(20px);\r\n }\r\n to {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n`;\r\n\r\nconst UserManagementContainer = styled.div`\r\n background: ${({ theme }) => theme.colors.glass.light};\r\n backdrop-filter: blur(10px);\r\n -webkit-backdrop-filter: blur(10px);\r\n border-radius: ${({ theme }) => theme.borderRadius.xl};\r\n padding: ${({ theme }) => theme.spacing.xl};\r\n box-shadow: ${({ theme }) => theme.shadows.lg};\r\n border: 1px solid ${({ theme }) => theme.colors.glass.light};\r\n animation: ${fadeIn} 0.5s ease-out;\r\n max-width: 800px;\r\n margin: 0 auto;\r\n\r\n @media (prefers-color-scheme: dark) {\r\n background: ${({ theme }) => theme.colors.glass.dark};\r\n border-color: ${({ theme }) => theme.colors.glass.dark};\r\n }\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: ${({ theme }) => theme.spacing.xl};\r\n padding-bottom: ${({ theme }) => theme.spacing.lg};\r\n border-bottom: 2px solid ${({ theme }) => theme.colors.glass.light};\r\n\r\n @media (prefers-color-scheme: dark) {\r\n border-bottom-color: ${({ theme }) => theme.colors.glass.dark};\r\n }\r\n`;\r\n\r\nconst Title = styled.h2`\r\n color: ${({ theme }) => theme.colors.text.primary};\r\n font-size: ${({ theme }) => theme.typography.fontSize['2xl']};\r\n font-weight: ${({ theme }) => theme.typography.fontWeight.semibold};\r\n margin: 0;\r\n display: flex;\r\n align-items: center;\r\n gap: ${({ theme }) => theme.spacing.sm};\r\n\r\n &::before {\r\n content: '👥';\r\n font-size: 1.2em;\r\n }\r\n`;\r\n\r\nconst BackButton = styled.button`\r\n background: ${({ theme }) => theme.colors.glass.light};\r\n color: ${({ theme }) => theme.colors.text.primary};\r\n border: 2px solid ${({ theme }) => theme.colors.glass.light};\r\n padding: ${({ theme }) => `${theme.spacing.sm} ${theme.spacing.lg}`};\r\n border-radius: ${({ theme }) => theme.borderRadius.lg};\r\n font-size: ${({ theme }) => theme.typography.fontSize.sm};\r\n cursor: pointer;\r\n transition: all ${({ theme }) => theme.transitions.default};\r\n\r\n &:hover {\r\n background: ${({ theme }) => theme.colors.primary};\r\n color: white;\r\n border-color: ${({ theme }) => theme.colors.primary};\r\n transform: translateY(-1px);\r\n }\r\n\r\n @media (prefers-color-scheme: dark) {\r\n background: ${({ theme }) => theme.colors.glass.dark};\r\n border-color: ${({ theme }) => theme.colors.glass.dark};\r\n }\r\n`;\r\n\r\nconst AddUserForm = styled.form`\r\n display: flex;\r\n gap: ${({ theme }) => theme.spacing.md};\r\n margin-bottom: ${({ theme }) => theme.spacing.xl};\r\n padding: ${({ theme }) => theme.spacing.lg};\r\n background: ${({ theme }) => theme.colors.glass.light};\r\n border-radius: ${({ theme }) => theme.borderRadius.lg};\r\n border: 2px dashed ${({ theme }) => theme.colors.primary}40;\r\n\r\n @media (max-width: ${({ theme }) => theme.breakpoints.md}) {\r\n flex-direction: column;\r\n }\r\n\r\n @media (prefers-color-scheme: dark) {\r\n background: ${({ theme }) => theme.colors.glass.dark};\r\n }\r\n`;\r\n\r\nconst InputGroup = styled.div`\r\n flex: 1;\r\n display: flex;\r\n flex-direction: column;\r\n gap: ${({ theme }) => theme.spacing.xs};\r\n`;\r\n\r\nconst Label = styled.label`\r\n color: ${({ theme }) => theme.colors.text.primary};\r\n font-size: ${({ theme }) => theme.typography.fontSize.sm};\r\n font-weight: ${({ theme }) => theme.typography.fontWeight.medium};\r\n`;\r\n\r\nconst Input = styled.input`\r\n padding: ${({ theme }) => theme.spacing.md};\r\n font-size: ${({ theme }) => theme.typography.fontSize.base};\r\n border: 2px solid ${({ theme }) => theme.colors.glass.light};\r\n border-radius: ${({ theme }) => theme.borderRadius.md};\r\n background: ${({ theme }) => theme.colors.glass.light};\r\n color: ${({ theme }) => theme.colors.text.primary};\r\n transition: all ${({ theme }) => theme.transitions.default};\r\n\r\n &:focus {\r\n outline: none;\r\n border-color: ${({ theme }) => theme.colors.primary};\r\n box-shadow: 0 0 0 3px ${({ theme }) => theme.colors.primary}40;\r\n }\r\n\r\n &::placeholder {\r\n color: ${({ theme }) => theme.colors.text.secondary};\r\n }\r\n\r\n @media (prefers-color-scheme: dark) {\r\n background: ${({ theme }) => theme.colors.glass.dark};\r\n border-color: ${({ theme }) => theme.colors.glass.dark};\r\n }\r\n`;\r\n\r\nconst AddButton = styled.button`\r\n background: ${({ theme }) => theme.colors.primary};\r\n color: white;\r\n border: none;\r\n padding: ${({ theme }) => `${theme.spacing.md} ${theme.spacing.lg}`};\r\n border-radius: ${({ theme }) => theme.borderRadius.md};\r\n font-size: ${({ theme }) => theme.typography.fontSize.base};\r\n font-weight: ${({ theme }) => theme.typography.fontWeight.medium};\r\n cursor: pointer;\r\n transition: all ${({ theme }) => theme.transitions.default};\r\n align-self: end;\r\n\r\n &:hover {\r\n background: ${({ theme }) => theme.colors.primary}dd;\r\n transform: translateY(-1px);\r\n }\r\n\r\n &:disabled {\r\n opacity: 0.6;\r\n cursor: not-allowed;\r\n transform: none;\r\n }\r\n`;\r\n\r\nconst UserList = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n gap: ${({ theme }) => theme.spacing.md};\r\n`;\r\n\r\nconst UserItem = styled.div`\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n padding: ${({ theme }) => theme.spacing.lg};\r\n background: ${({ theme }) => theme.colors.glass.light};\r\n border-radius: ${({ theme }) => theme.borderRadius.lg};\r\n border: 1px solid ${({ theme }) => theme.colors.glass.light};\r\n transition: all ${({ theme }) => theme.transitions.default};\r\n\r\n &:hover {\r\n transform: translateY(-1px);\r\n box-shadow: ${({ theme }) => theme.shadows.md};\r\n }\r\n\r\n @media (prefers-color-scheme: dark) {\r\n background: ${({ theme }) => theme.colors.glass.dark};\r\n border-color: ${({ theme }) => theme.colors.glass.dark};\r\n }\r\n`;\r\n\r\nconst UserInfo = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n gap: ${({ theme }) => theme.spacing.xs};\r\n`;\r\n\r\nconst Username = styled.span`\r\n color: ${({ theme }) => theme.colors.text.primary};\r\n font-size: ${({ theme }) => theme.typography.fontSize.lg};\r\n font-weight: ${({ theme }) => theme.typography.fontWeight.medium};\r\n`;\r\n\r\nconst UserRole = styled.span`\r\n color: ${({ theme, isAdmin }) => isAdmin ? theme.colors.status.warning : theme.colors.text.secondary};\r\n font-size: ${({ theme }) => theme.typography.fontSize.sm};\r\n font-weight: ${({ theme }) => theme.typography.fontWeight.medium};\r\n`;\r\n\r\nconst UserDate = styled.span`\r\n color: ${({ theme }) => theme.colors.text.secondary};\r\n font-size: ${({ theme }) => theme.typography.fontSize.sm};\r\n`;\r\n\r\nconst Message = styled.div`\r\n padding: ${({ theme }) => theme.spacing.md};\r\n border-radius: ${({ theme }) => theme.borderRadius.md};\r\n margin-bottom: ${({ theme }) => theme.spacing.lg};\r\n text-align: center;\r\n font-size: ${({ theme }) => theme.typography.fontSize.sm};\r\n animation: ${fadeIn} 0.3s ease-out;\r\n\r\n ${({ type, theme }) => {\r\n if (type === 'success') {\r\n return `\r\n background: ${theme.colors.status.success}20;\r\n color: ${theme.colors.status.success};\r\n border: 1px solid ${theme.colors.status.success}40;\r\n `;\r\n }\r\n if (type === 'error') {\r\n return `\r\n background: ${theme.colors.status.error}20;\r\n color: ${theme.colors.status.error};\r\n border: 1px solid ${theme.colors.status.error}40;\r\n `;\r\n }\r\n return '';\r\n }}\r\n`;\r\n\r\nfunction UserManagement({ onBack }) {\r\n const [users, setUsers] = useState([]);\r\n const [username, setUsername] = useState('');\r\n const [password, setPassword] = useState('');\r\n const [loading, setLoading] = useState(true);\r\n const [submitting, setSubmitting] = useState(false);\r\n const [message, setMessage] = useState({ text: '', type: '' });\r\n\r\n useEffect(() => {\r\n loadUsers();\r\n }, []);\r\n\r\n const loadUsers = async () => {\r\n try {\r\n setLoading(true);\r\n const userData = await getUsers();\r\n setUsers(userData);\r\n } catch (error) {\r\n setMessage({ text: '加载用户列表失败', type: 'error' });\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleSubmit = async (e) => {\r\n e.preventDefault();\r\n if (!username.trim() || !password.trim()) {\r\n setMessage({ text: '用户名和密码不能为空', type: 'error' });\r\n return;\r\n }\r\n\r\n setSubmitting(true);\r\n try {\r\n await registerUser(username.trim(), password);\r\n setMessage({ text: '用户添加成功', type: 'success' });\r\n setUsername('');\r\n setPassword('');\r\n await loadUsers();\r\n } catch (error) {\r\n setMessage({ \r\n text: error.response?.data?.error || '添加用户失败', \r\n type: 'error' \r\n });\r\n } finally {\r\n setSubmitting(false);\r\n }\r\n\r\n // 清除消息\r\n setTimeout(() => setMessage({ text: '', type: '' }), 5000);\r\n };\r\n\r\n const formatDate = (dateString) => {\r\n return new Date(dateString).toLocaleDateString('zh-CN', {\r\n year: 'numeric',\r\n month: 'short',\r\n day: 'numeric',\r\n hour: '2-digit',\r\n minute: '2-digit'\r\n });\r\n };\r\n\r\n return (\r\n \r\n
\r\n 用户管理\r\n 返回\r\n
\r\n\r\n {message.text && (\r\n {message.text}\r\n )}\r\n\r\n \r\n \r\n \r\n setUsername(e.target.value)}\r\n disabled={submitting}\r\n required\r\n />\r\n \r\n \r\n \r\n setPassword(e.target.value)}\r\n disabled={submitting}\r\n required\r\n />\r\n \r\n \r\n {submitting ? '添加中...' : '添加用户'}\r\n \r\n \r\n\r\n \r\n {loading ? (\r\n
\r\n 加载中...\r\n
\r\n ) : users.length === 0 ? (\r\n
\r\n 暂无用户\r\n
\r\n ) : (\r\n users.map(user => (\r\n \r\n \r\n {user.username}\r\n \r\n {user.is_admin ? '管理员' : '普通用户'}\r\n \r\n 创建于 {formatDate(user.created_at)}\r\n \r\n \r\n ))\r\n )}\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default UserManagement; "],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}