{"ast":null,"code":"var _jsxFileName = \"/Users/max_liu/max_liu/company/tools_auto_pt/src/components/Dashboard.js\",\n _s = $RefreshSig$();\nimport React, { useState, useEffect } from 'react';\nimport { Card, Row, Col, Statistic } from 'antd';\nimport { ToolOutlined, SearchOutlined, AppstoreOutlined, CheckCircleOutlined } from '@ant-design/icons';\nimport { pendingToolsApi, autoAccessTasksApi, toolsLibraryApi } from '../services/api';\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nconst Dashboard = () => {\n _s();\n const [stats, setStats] = useState({\n pendingTools: 0,\n autoAccessTasks: 0,\n toolsLibrary: 0,\n completedTasks: 0\n });\n const fetchStats = async () => {\n try {\n const [pendingResponse, accessResponse, libraryResponse] = await Promise.all([pendingToolsApi.getList({\n page: 1,\n pageSize: 1\n }), autoAccessTasksApi.getList({\n page: 1,\n pageSize: 1\n }), toolsLibraryApi.getList({\n page: 1,\n pageSize: 1\n })]);\n\n // Count completed pending tools\n const completedPendingResponse = await pendingToolsApi.getList({\n page: 1,\n pageSize: 100\n });\n const completedCount = completedPendingResponse.data.data.filter(item => item.status === '2').length;\n setStats({\n pendingTools: pendingResponse.data.total,\n autoAccessTasks: accessResponse.data.total,\n toolsLibrary: libraryResponse.data.total,\n completedTasks: completedCount\n });\n } catch (error) {\n console.error('获取统计数据失败:', error);\n }\n };\n useEffect(() => {\n fetchStats();\n }, []);\n const statCards = [{\n title: '待接入工具',\n value: stats.pendingTools,\n icon: /*#__PURE__*/_jsxDEV(SearchOutlined, {\n className: \"text-blue-500\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 45,\n columnNumber: 13\n }, this),\n bgColor: 'bg-gradient-to-r from-blue-500 to-blue-600',\n path: '/pending-tools'\n }, {\n title: '自动接入任务',\n value: stats.autoAccessTasks,\n icon: /*#__PURE__*/_jsxDEV(ToolOutlined, {\n className: \"text-green-500\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 52,\n columnNumber: 13\n }, this),\n bgColor: 'bg-gradient-to-r from-green-500 to-green-600',\n path: '/auto-access-tasks'\n }, {\n title: '工具库',\n value: stats.toolsLibrary,\n icon: /*#__PURE__*/_jsxDEV(AppstoreOutlined, {\n className: \"text-purple-500\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 59,\n columnNumber: 13\n }, this),\n bgColor: 'bg-gradient-to-r from-purple-500 to-purple-600',\n path: '/tools-library'\n }, {\n title: '已完成任务',\n value: stats.completedTasks,\n icon: /*#__PURE__*/_jsxDEV(CheckCircleOutlined, {\n className: \"text-orange-500\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 66,\n columnNumber: 13\n }, this),\n bgColor: 'bg-gradient-to-r from-orange-500 to-orange-600',\n path: '/pending-tools'\n }];\n return /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"space-y-8\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"page-header\",\n children: [/*#__PURE__*/_jsxDEV(\"h1\", {\n className: \"page-title\",\n children: \"\\u4EEA\\u8868\\u677F\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 76,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"page-description\",\n children: \"\\u5DE5\\u5177\\u5E93\\u7BA1\\u7406\\u7CFB\\u7EDF\\u603B\\u89C8\\u548C\\u5FEB\\u901F\\u7EDF\\u8BA1\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 77,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 75,\n columnNumber: 7\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6\",\n children: statCards.map((card, index) => /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"group cursor-pointer transform transition-all duration-200 hover:scale-105\",\n onClick: () => window.location.href = card.path,\n children: /*#__PURE__*/_jsxDEV(Card, {\n className: \"h-full border-0 shadow-lg hover:shadow-xl transition-shadow duration-200\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center justify-between\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex-1\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"text-gray-600 text-sm font-medium mb-2\",\n children: card.title\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 91,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"text-3xl font-bold text-gray-800 mb-1\",\n children: card.value\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 94,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 90,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"text-3xl opacity-80 group-hover:opacity-100 transition-opacity\",\n children: card.icon\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 98,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 89,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: `h-1 ${card.bgColor} rounded-full mt-4 opacity-80 group-hover:opacity-100 transition-opacity`\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 102,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 88,\n columnNumber: 13\n }, this)\n }, index, false, {\n fileName: _jsxFileName,\n lineNumber: 83,\n columnNumber: 11\n }, this))\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 81,\n columnNumber: 7\n }, this), /*#__PURE__*/_jsxDEV(Row, {\n gutter: [24, 24],\n children: [/*#__PURE__*/_jsxDEV(Col, {\n xs: 24,\n lg: 12,\n children: /*#__PURE__*/_jsxDEV(Card, {\n title: \"\\u5FEB\\u901F\\u64CD\\u4F5C\",\n className: \"h-full shadow-lg border-0\",\n headStyle: {\n borderBottom: 'none',\n paddingBottom: 0\n },\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"space-y-4\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"p-4 bg-blue-50 hover:bg-blue-100 rounded-lg cursor-pointer transition-colors duration-200 border border-blue-200\",\n onClick: () => window.location.href = '/pending-tools',\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center\",\n children: [/*#__PURE__*/_jsxDEV(SearchOutlined, {\n className: \"text-blue-600 text-lg mr-3\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 122,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"font-medium text-gray-800\",\n children: \"\\u67E5\\u770B\\u5F85\\u63A5\\u5165\\u5DE5\\u5177\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 124,\n columnNumber: 21\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"text-sm text-gray-600\",\n children: \"\\u7BA1\\u7406\\u548C\\u641C\\u7D22\\u5F85\\u63A5\\u5165\\u7684\\u5DE5\\u5177\\u5217\\u8868\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 125,\n columnNumber: 21\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 123,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 121,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 117,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"p-4 bg-green-50 hover:bg-green-100 rounded-lg cursor-pointer transition-colors duration-200 border border-green-200\",\n onClick: () => window.location.href = '/auto-access-tasks',\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center\",\n children: [/*#__PURE__*/_jsxDEV(ToolOutlined, {\n className: \"text-green-600 text-lg mr-3\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 135,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"font-medium text-gray-800\",\n children: \"\\u81EA\\u52A8\\u63A5\\u5165\\u4EFB\\u52A1\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 137,\n columnNumber: 21\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"text-sm text-gray-600\",\n children: \"\\u67E5\\u770B\\u548C\\u7BA1\\u7406\\u81EA\\u52A8\\u63A5\\u5165\\u4EFB\\u52A1\\u8FDB\\u5EA6\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 138,\n columnNumber: 21\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 136,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 134,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 130,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"p-4 bg-purple-50 hover:bg-purple-100 rounded-lg cursor-pointer transition-colors duration-200 border border-purple-200\",\n onClick: () => window.location.href = '/tools-library',\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center\",\n children: [/*#__PURE__*/_jsxDEV(AppstoreOutlined, {\n className: \"text-purple-600 text-lg mr-3\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 148,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"font-medium text-gray-800\",\n children: \"\\u5DE5\\u5177\\u5E93\\u7BA1\\u7406\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 150,\n columnNumber: 21\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"text-sm text-gray-600\",\n children: \"\\u7BA1\\u7406\\u5DF2\\u53D1\\u5E03\\u7684\\u5DE5\\u5177\\u548CAPI\\u914D\\u7F6E\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 151,\n columnNumber: 21\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 149,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 147,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 143,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 116,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 111,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 110,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(Col, {\n xs: 24,\n lg: 12,\n children: /*#__PURE__*/_jsxDEV(Card, {\n title: \"\\u7CFB\\u7EDF\\u72B6\\u6001\",\n className: \"h-full shadow-lg border-0\",\n headStyle: {\n borderBottom: 'none',\n paddingBottom: 0\n },\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"space-y-6\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center justify-between p-4 bg-green-50 rounded-lg border border-green-200\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"w-3 h-3 bg-green-500 rounded-full mr-3\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 168,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"span\", {\n className: \"font-medium text-gray-800\",\n children: \"\\u6570\\u636E\\u5E93\\u8FDE\\u63A5\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 169,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 167,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"span\", {\n className: \"text-green-600 font-medium\",\n children: \"\\u6B63\\u5E38\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 171,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 166,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center justify-between p-4 bg-green-50 rounded-lg border border-green-200\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"w-3 h-3 bg-green-500 rounded-full mr-3\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 176,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"span\", {\n className: \"font-medium text-gray-800\",\n children: \"API\\u670D\\u52A1\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 177,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 175,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"span\", {\n className: \"text-green-600 font-medium\",\n children: \"\\u8FD0\\u884C\\u4E2D\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 179,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 174,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center justify-between p-4 bg-blue-50 rounded-lg border border-blue-200\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"w-3 h-3 bg-blue-500 rounded-full mr-3\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 184,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"span\", {\n className: \"font-medium text-gray-800\",\n children: \"\\u6D3B\\u8DC3\\u5DE5\\u5177\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 185,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 183,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"span\", {\n className: \"text-blue-600 font-medium\",\n children: stats.toolsLibrary\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 187,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 182,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 165,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 160,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 159,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 109,\n columnNumber: 7\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 73,\n columnNumber: 5\n }, this);\n};\n_s(Dashboard, \"XYIIUq5u7ByJ8N3FvyxHkYukIBs=\");\n_c = Dashboard;\nexport default Dashboard;\nvar _c;\n$RefreshReg$(_c, \"Dashboard\");","map":{"version":3,"names":["React","useState","useEffect","Card","Row","Col","Statistic","ToolOutlined","SearchOutlined","AppstoreOutlined","CheckCircleOutlined","pendingToolsApi","autoAccessTasksApi","toolsLibraryApi","jsxDEV","_jsxDEV","Dashboard","_s","stats","setStats","pendingTools","autoAccessTasks","toolsLibrary","completedTasks","fetchStats","pendingResponse","accessResponse","libraryResponse","Promise","all","getList","page","pageSize","completedPendingResponse","completedCount","data","filter","item","status","length","total","error","console","statCards","title","value","icon","className","fileName","_jsxFileName","lineNumber","columnNumber","bgColor","path","children","map","card","index","onClick","window","location","href","gutter","xs","lg","headStyle","borderBottom","paddingBottom","_c","$RefreshReg$"],"sources":["/Users/max_liu/max_liu/company/tools_auto_pt/src/components/Dashboard.js"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport { Card, Row, Col, Statistic } from 'antd';\nimport { ToolOutlined, SearchOutlined, AppstoreOutlined, CheckCircleOutlined } from '@ant-design/icons';\nimport { pendingToolsApi, autoAccessTasksApi, toolsLibraryApi } from '../services/api';\n\nconst Dashboard = () => {\n const [stats, setStats] = useState({\n pendingTools: 0,\n autoAccessTasks: 0,\n toolsLibrary: 0,\n completedTasks: 0\n });\n\n const fetchStats = async () => {\n try {\n const [pendingResponse, accessResponse, libraryResponse] = await Promise.all([\n pendingToolsApi.getList({ page: 1, pageSize: 1 }),\n autoAccessTasksApi.getList({ page: 1, pageSize: 1 }),\n toolsLibraryApi.getList({ page: 1, pageSize: 1 })\n ]);\n\n // Count completed pending tools\n const completedPendingResponse = await pendingToolsApi.getList({ page: 1, pageSize: 100 });\n const completedCount = completedPendingResponse.data.data.filter(item => item.status === '2').length;\n\n setStats({\n pendingTools: pendingResponse.data.total,\n autoAccessTasks: accessResponse.data.total,\n toolsLibrary: libraryResponse.data.total,\n completedTasks: completedCount\n });\n } catch (error) {\n console.error('获取统计数据失败:', error);\n }\n };\n\n useEffect(() => {\n fetchStats();\n }, []);\n\n const statCards = [\n {\n title: '待接入工具',\n value: stats.pendingTools,\n icon:
工具库管理系统总览和快速统计
\n