{"ast":null,"code":"var _jsxFileName = \"/Users/nili/Documents/trae_projects/client/src/pages/Login.js\",\n  _s = $RefreshSig$();\nimport React, { useState } from 'react';\nimport { Form, Input, Button, Card, message } from 'antd';\nimport { UserOutlined, LockOutlined } from '@ant-design/icons';\nimport { useAuth } from '../contexts/AuthContext';\nimport { useNavigate, useLocation } from 'react-router-dom';\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nconst Login = () => {\n  _s();\n  var _location$state, _location$state$from;\n  const [loading, setLoading] = useState(false);\n  const {\n    login\n  } = useAuth();\n  const navigate = useNavigate();\n  const location = useLocation();\n  const from = ((_location$state = location.state) === null || _location$state === void 0 ? void 0 : (_location$state$from = _location$state.from) === null || _location$state$from === void 0 ? void 0 : _location$state$from.pathname) || '/';\n  const onFinish = async values => {\n    setLoading(true);\n    try {\n      await login(values);\n      message.success('登录成功');\n      navigate(from, {\n        replace: true\n      });\n    } catch (error) {\n      var _error$response, _error$response$data;\n      message.error(((_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.message) || '登录失败');\n    } finally {\n      setLoading(false);\n    }\n  };\n  return /*#__PURE__*/_jsxDEV(\"div\", {\n    className: \"login-container\",\n    children: /*#__PURE__*/_jsxDEV(Card, {\n      className: \"login-card\",\n      children: [/*#__PURE__*/_jsxDEV(\"div\", {\n        style: {\n          textAlign: 'center',\n          marginBottom: 24\n        },\n        children: [/*#__PURE__*/_jsxDEV(\"h1\", {\n          style: {\n            fontSize: 24,\n            marginBottom: 8\n          },\n          children: \"\\u79C1\\u52DF\\u80A1\\u6743\\u6295\\u8D44\\u7BA1\\u7406\\u7CFB\\u7EDF\"\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 32,\n          columnNumber: 11\n        }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n          style: {\n            color: '#666'\n          },\n          children: \"\\u8BF7\\u767B\\u5F55\\u60A8\\u7684\\u8D26\\u6237\"\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 33,\n          columnNumber: 11\n        }, this)]\n      }, void 0, true, {\n        fileName: _jsxFileName,\n        lineNumber: 31,\n        columnNumber: 9\n      }, this), /*#__PURE__*/_jsxDEV(Form, {\n        name: \"login\",\n        onFinish: onFinish,\n        autoComplete: \"off\",\n        size: \"large\",\n        children: [/*#__PURE__*/_jsxDEV(Form.Item, {\n          name: \"username\",\n          rules: [{\n            required: true,\n            message: '请输入用户名'\n          }],\n          children: /*#__PURE__*/_jsxDEV(Input, {\n            prefix: /*#__PURE__*/_jsxDEV(UserOutlined, {}, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 46,\n              columnNumber: 23\n            }, this),\n            placeholder: \"\\u7528\\u6237\\u540D\"\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 45,\n            columnNumber: 13\n          }, this)\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 41,\n          columnNumber: 11\n        }, this), /*#__PURE__*/_jsxDEV(Form.Item, {\n          name: \"password\",\n          rules: [{\n            required: true,\n            message: '请输入密码'\n          }],\n          children: /*#__PURE__*/_jsxDEV(Input.Password, {\n            prefix: /*#__PURE__*/_jsxDEV(LockOutlined, {}, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 56,\n              columnNumber: 23\n            }, this),\n            placeholder: \"\\u5BC6\\u7801\"\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 55,\n            columnNumber: 13\n          }, this)\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 51,\n          columnNumber: 11\n        }, this), /*#__PURE__*/_jsxDEV(Form.Item, {\n          children: /*#__PURE__*/_jsxDEV(Button, {\n            type: \"primary\",\n            htmlType: \"submit\",\n            loading: loading,\n            block: true,\n            children: \"\\u767B\\u5F55\"\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 62,\n            columnNumber: 13\n          }, this)\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 61,\n          columnNumber: 11\n        }, this)]\n      }, void 0, true, {\n        fileName: _jsxFileName,\n        lineNumber: 35,\n        columnNumber: 9\n      }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n        style: {\n          textAlign: 'center',\n          color: '#999',\n          fontSize: 12\n        },\n        children: \"\\u9ED8\\u8BA4\\u7BA1\\u7406\\u5458: admin / admin123\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 67,\n        columnNumber: 9\n      }, this)]\n    }, void 0, true, {\n      fileName: _jsxFileName,\n      lineNumber: 30,\n      columnNumber: 7\n    }, this)\n  }, void 0, false, {\n    fileName: _jsxFileName,\n    lineNumber: 29,\n    columnNumber: 5\n  }, this);\n};\n_s(Login, \"8DsNkqyIXuiM0sb45EgeoKho3Wg=\", false, function () {\n  return [useAuth, useNavigate, useLocation];\n});\n_c = Login;\nexport default Login;\nvar _c;\n$RefreshReg$(_c, \"Login\");","map":{"version":3,"names":["React","useState","Form","Input","Button","Card","message","UserOutlined","LockOutlined","useAuth","useNavigate","useLocation","jsxDEV","_jsxDEV","Login","_s","_location$state","_location$state$from","loading","setLoading","login","navigate","location","from","state","pathname","onFinish","values","success","replace","error","_error$response","_error$response$data","response","data","className","children","style","textAlign","marginBottom","fontSize","fileName","_jsxFileName","lineNumber","columnNumber","color","name","autoComplete","size","Item","rules","required","prefix","placeholder","Password","type","htmlType","block","_c","$RefreshReg$"],"sources":["/Users/nili/Documents/trae_projects/client/src/pages/Login.js"],"sourcesContent":["import React, { useState } from 'react';\nimport { Form, Input, Button, Card, message } from 'antd';\nimport { UserOutlined, LockOutlined } from '@ant-design/icons';\nimport { useAuth } from '../contexts/AuthContext';\nimport { useNavigate, useLocation } from 'react-router-dom';\n\nconst Login = () => {\n  const [loading, setLoading] = useState(false);\n  const { login } = useAuth();\n  const navigate = useNavigate();\n  const location = useLocation();\n\n  const from = location.state?.from?.pathname || '/';\n\n  const onFinish = async (values) => {\n    setLoading(true);\n    try {\n      await login(values);\n      message.success('登录成功');\n      navigate(from, { replace: true });\n    } catch (error) {\n      message.error(error.response?.data?.message || '登录失败');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  return (\n    <div className=\"login-container\">\n      <Card className=\"login-card\">\n        <div style={{ textAlign: 'center', marginBottom: 24 }}>\n          <h1 style={{ fontSize: 24, marginBottom: 8 }}>私募股权投资管理系统</h1>\n          <p style={{ color: '#666' }}>请登录您的账户</p>\n        </div>\n        <Form\n          name=\"login\"\n          onFinish={onFinish}\n          autoComplete=\"off\"\n          size=\"large\"\n        >\n          <Form.Item\n            name=\"username\"\n            rules={[{ required: true, message: '请输入用户名' }]}\n          >\n            <Input\n              prefix={<UserOutlined />}\n              placeholder=\"用户名\"\n            />\n          </Form.Item>\n\n          <Form.Item\n            name=\"password\"\n            rules={[{ required: true, message: '请输入密码' }]}\n          >\n            <Input.Password\n              prefix={<LockOutlined />}\n              placeholder=\"密码\"\n            />\n          </Form.Item>\n\n          <Form.Item>\n            <Button type=\"primary\" htmlType=\"submit\" loading={loading} block>\n              登录\n            </Button>\n          </Form.Item>\n        </Form>\n        <div style={{ textAlign: 'center', color: '#999', fontSize: 12 }}>\n          默认管理员: admin / admin123\n        </div>\n      </Card>\n    </div>\n  );\n};\n\nexport default Login;\n"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AACvC,SAASC,IAAI,EAAEC,KAAK,EAAEC,MAAM,EAAEC,IAAI,EAAEC,OAAO,QAAQ,MAAM;AACzD,SAASC,YAAY,EAAEC,YAAY,QAAQ,mBAAmB;AAC9D,SAASC,OAAO,QAAQ,yBAAyB;AACjD,SAASC,WAAW,EAAEC,WAAW,QAAQ,kBAAkB;AAAC,SAAAC,MAAA,IAAAC,OAAA;AAE5D,MAAMC,KAAK,GAAGA,CAAA,KAAM;EAAAC,EAAA;EAAA,IAAAC,eAAA,EAAAC,oBAAA;EAClB,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGlB,QAAQ,CAAC,KAAK,CAAC;EAC7C,MAAM;IAAEmB;EAAM,CAAC,GAAGX,OAAO,CAAC,CAAC;EAC3B,MAAMY,QAAQ,GAAGX,WAAW,CAAC,CAAC;EAC9B,MAAMY,QAAQ,GAAGX,WAAW,CAAC,CAAC;EAE9B,MAAMY,IAAI,GAAG,EAAAP,eAAA,GAAAM,QAAQ,CAACE,KAAK,cAAAR,eAAA,wBAAAC,oBAAA,GAAdD,eAAA,CAAgBO,IAAI,cAAAN,oBAAA,uBAApBA,oBAAA,CAAsBQ,QAAQ,KAAI,GAAG;EAElD,MAAMC,QAAQ,GAAG,MAAOC,MAAM,IAAK;IACjCR,UAAU,CAAC,IAAI,CAAC;IAChB,IAAI;MACF,MAAMC,KAAK,CAACO,MAAM,CAAC;MACnBrB,OAAO,CAACsB,OAAO,CAAC,MAAM,CAAC;MACvBP,QAAQ,CAACE,IAAI,EAAE;QAAEM,OAAO,EAAE;MAAK,CAAC,CAAC;IACnC,CAAC,CAAC,OAAOC,KAAK,EAAE;MAAA,IAAAC,eAAA,EAAAC,oBAAA;MACd1B,OAAO,CAACwB,KAAK,CAAC,EAAAC,eAAA,GAAAD,KAAK,CAACG,QAAQ,cAAAF,eAAA,wBAAAC,oBAAA,GAAdD,eAAA,CAAgBG,IAAI,cAAAF,oBAAA,uBAApBA,oBAAA,CAAsB1B,OAAO,KAAI,MAAM,CAAC;IACxD,CAAC,SAAS;MACRa,UAAU,CAAC,KAAK,CAAC;IACnB;EACF,CAAC;EAED,oBACEN,OAAA;IAAKsB,SAAS,EAAC,iBAAiB;IAAAC,QAAA,eAC9BvB,OAAA,CAACR,IAAI;MAAC8B,SAAS,EAAC,YAAY;MAAAC,QAAA,gBAC1BvB,OAAA;QAAKwB,KAAK,EAAE;UAAEC,SAAS,EAAE,QAAQ;UAAEC,YAAY,EAAE;QAAG,CAAE;QAAAH,QAAA,gBACpDvB,OAAA;UAAIwB,KAAK,EAAE;YAAEG,QAAQ,EAAE,EAAE;YAAED,YAAY,EAAE;UAAE,CAAE;UAAAH,QAAA,EAAC;QAAU;UAAAK,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OAAI,CAAC,eAC7D/B,OAAA;UAAGwB,KAAK,EAAE;YAAEQ,KAAK,EAAE;UAAO,CAAE;UAAAT,QAAA,EAAC;QAAO;UAAAK,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OAAG,CAAC;MAAA;QAAAH,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OACrC,CAAC,eACN/B,OAAA,CAACX,IAAI;QACH4C,IAAI,EAAC,OAAO;QACZpB,QAAQ,EAAEA,QAAS;QACnBqB,YAAY,EAAC,KAAK;QAClBC,IAAI,EAAC,OAAO;QAAAZ,QAAA,gBAEZvB,OAAA,CAACX,IAAI,CAAC+C,IAAI;UACRH,IAAI,EAAC,UAAU;UACfI,KAAK,EAAE,CAAC;YAAEC,QAAQ,EAAE,IAAI;YAAE7C,OAAO,EAAE;UAAS,CAAC,CAAE;UAAA8B,QAAA,eAE/CvB,OAAA,CAACV,KAAK;YACJiD,MAAM,eAAEvC,OAAA,CAACN,YAAY;cAAAkC,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAAE,CAAE;YACzBS,WAAW,EAAC;UAAK;YAAAZ,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OAClB;QAAC;UAAAH,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OACO,CAAC,eAEZ/B,OAAA,CAACX,IAAI,CAAC+C,IAAI;UACRH,IAAI,EAAC,UAAU;UACfI,KAAK,EAAE,CAAC;YAAEC,QAAQ,EAAE,IAAI;YAAE7C,OAAO,EAAE;UAAQ,CAAC,CAAE;UAAA8B,QAAA,eAE9CvB,OAAA,CAACV,KAAK,CAACmD,QAAQ;YACbF,MAAM,eAAEvC,OAAA,CAACL,YAAY;cAAAiC,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAAE,CAAE;YACzBS,WAAW,EAAC;UAAI;YAAAZ,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OACjB;QAAC;UAAAH,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OACO,CAAC,eAEZ/B,OAAA,CAACX,IAAI,CAAC+C,IAAI;UAAAb,QAAA,eACRvB,OAAA,CAACT,MAAM;YAACmD,IAAI,EAAC,SAAS;YAACC,QAAQ,EAAC,QAAQ;YAACtC,OAAO,EAAEA,OAAQ;YAACuC,KAAK;YAAArB,QAAA,EAAC;UAEjE;YAAAK,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OAAQ;QAAC;UAAAH,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OACA,CAAC;MAAA;QAAAH,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OACR,CAAC,eACP/B,OAAA;QAAKwB,KAAK,EAAE;UAAEC,SAAS,EAAE,QAAQ;UAAEO,KAAK,EAAE,MAAM;UAAEL,QAAQ,EAAE;QAAG,CAAE;QAAAJ,QAAA,EAAC;MAElE;QAAAK,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OAAK,CAAC;IAAA;MAAAH,QAAA,EAAAC,YAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,OACF;EAAC;IAAAH,QAAA,EAAAC,YAAA;IAAAC,UAAA;IAAAC,YAAA;EAAA,OACJ,CAAC;AAEV,CAAC;AAAC7B,EAAA,CAlEID,KAAK;EAAA,QAESL,OAAO,EACRC,WAAW,EACXC,WAAW;AAAA;AAAA+C,EAAA,GAJxB5C,KAAK;AAoEX,eAAeA,KAAK;AAAC,IAAA4C,EAAA;AAAAC,YAAA,CAAAD,EAAA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}