1 line
89 KiB
JSON
1 line
89 KiB
JSON
|
|
{"ast":null,"code":"var _jsxFileName = \"/home/node/.openclaw/workspace/flying-hero/projects/meeting-room/frontend/src/App.js\",\n _s = $RefreshSig$(),\n _s2 = $RefreshSig$(),\n _s3 = $RefreshSig$();\nimport React, { useState, useEffect } from 'react';\nimport { BrowserRouter as Router, Routes, Route, Link, useNavigate, useParams } from 'react-router-dom';\nimport axios from 'axios';\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nconst API_BASE = 'http://localhost:8000/api/v1';\naxios.interceptors.request.use(config => {\n const token = localStorage.getItem('token');\n if (token) config.headers.Authorization = `Bearer ${token}`;\n return config;\n});\n\n// ============ 登录页面 ============\nfunction LoginPage() {\n _s();\n const [username, setUsername] = useState('test');\n const [password, setPassword] = useState('test123');\n const [mode, setMode] = useState('solo');\n const [agents, setAgents] = useState([]);\n const [selectedAgents, setSelectedAgents] = useState([]);\n const navigate = useNavigate();\n\n // 扫描本机龙虾\n useEffect(() => {\n scanAgents();\n }, []);\n const scanAgents = async () => {\n try {\n // 传递 username 参数,获取绑定的龙虾信息\n const res = await axios.get(`${API_BASE}/user/scan-local-agents/?username=${username}`);\n setAgents(res.data.agents || []);\n } catch (error) {\n console.error('扫描龙虾失败:', error);\n }\n };\n const handleLogin = async e => {\n e.preventDefault();\n try {\n const payload = {\n username,\n password,\n mode\n };\n if (mode !== 'solo' && selectedAgents.length > 0) {\n payload.agent_ids = selectedAgents;\n }\n const res = await axios.post(`${API_BASE}/auth/login/`, payload);\n localStorage.setItem('token', res.data.token);\n localStorage.setItem('user', JSON.stringify(res.data.user));\n localStorage.setItem('sessions', JSON.stringify(res.data.sessions));\n localStorage.setItem('mode', res.data.mode);\n navigate('/meetings');\n } catch (error) {\n var _error$response, _error$response$data, _error$response2, _error$response2$data;\n alert('登录失败:' + (((_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.detail) || ((_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : (_error$response2$data = _error$response2.data) === null || _error$response2$data === void 0 ? void 0 : _error$response2$data.error) || error.message));\n }\n };\n const toggleAgent = agentId => {\n setSelectedAgents(prev => prev.includes(agentId) ? prev.filter(id => id !== agentId) : [...prev, agentId]);\n };\n return /*#__PURE__*/_jsxDEV(\"div\", {\n style: styles.center,\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n style: styles.card,\n children: [/*#__PURE__*/_jsxDEV(\"h1\", {\n style: styles.title,\n children: \"\\uD83C\\uDFDB\\uFE0F \\u9F99\\u867E\\u8BAE\\u4E8B\\u5385\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 72,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"form\", {\n onSubmit: handleLogin,\n style: {\n ...styles.form,\n flexDirection: 'column'\n },\n children: [/*#__PURE__*/_jsxDEV(\"input\", {\n type: \"text\",\n placeholder: \"\\u7528\\u6237\\u540D\",\n value: username,\n onChange: e => setUsername(e.target.value),\n style: styles.input,\n required: true\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 74,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n type: \"password\",\n placeholder: \"\\u5BC6\\u7801\",\n value: password,\n onChange: e => setPassword(e.target.value),\n style: styles.input,\n
|