{"ast":null,"code":"var _jsxFileName = \"/Users/max_liu/max_liu/company/tools_auto_pt/src/pages/PendingToolsList.js\",\n _s = $RefreshSig$();\nimport React, { useState, useEffect } from \"react\";\nimport { Table, Button, Input, Space, Tag, message, Modal, Popover } from \"antd\";\nimport { SearchOutlined, EditOutlined, DeleteOutlined, EyeOutlined } from \"@ant-design/icons\";\nimport { useNavigate } from \"react-router-dom\";\nimport { pendingToolsApi } from \"../services/api\";\nimport moment from \"moment\";\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nconst {\n Search\n} = Input;\nconst {\n confirm\n} = Modal;\nconst PendingToolsList = () => {\n _s();\n const [data, setData] = useState([]);\n const [loading, setLoading] = useState(false);\n const [pagination, setPagination] = useState({\n current: 1,\n pageSize: 10,\n total: 0\n });\n const [searchText, setSearchText] = useState(\"\");\n const navigate = useNavigate();\n const getStatusColor = status => {\n const statusMap = {\n 0: \"processing\",\n 1: \"warning\",\n 2: \"success\",\n 3: \"error\"\n };\n return statusMap[status] || \"default\";\n };\n const getStatusText = status => {\n const statusMap = {\n 0: \"待处理\",\n 1: \"处理中\",\n 2: \"已完成\",\n 3: \"失败\"\n };\n return statusMap[status] || \"未知\";\n };\n\n // 文本截断函数\n const truncateText = (text, maxLength = 150) => {\n if (!text) return \"\";\n return text.length > maxLength ? text.substring(0, maxLength) + \"...\" : text;\n };\n const columns = [{\n title: \"工具ID\",\n dataIndex: \"search_task_id\",\n key: \"search_task_id\",\n width: 150,\n render: text => {\n const displayText = truncateText(text, 150);\n const needsTruncation = text && text.length > 150;\n return needsTruncation ? /*#__PURE__*/_jsxDEV(Popover, {\n content: /*#__PURE__*/_jsxDEV(\"div\", {\n style: {\n maxHeight: \"calc(100vh - 35px)\",\n overflowY: \"auto\",\n wordBreak: \"break-word\",\n whiteSpace: \"pre-wrap\",\n maxWidth: 300\n },\n children: text\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 61,\n columnNumber: 15\n }, this),\n title: \"\\u5B8C\\u6574\\u5185\\u5BB9\",\n children: /*#__PURE__*/_jsxDEV(\"span\", {\n style: {\n cursor: \"pointer\"\n },\n children: displayText\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 75,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 59,\n columnNumber: 11\n }, this) : /*#__PURE__*/_jsxDEV(\"span\", {\n children: displayText\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 78,\n columnNumber: 11\n }, this);\n }\n }, {\n title: \"工具名称\",\n dataIndex: \"tools_name\",\n key: \"tools_name\",\n width: 150\n }, {\n title: \"工具功能名称\",\n dataIndex: \"tools_function_name\",\n key: \"tools_function_name\",\n width: 200\n }, {\n title: \"工具功能描述\",\n dataIndex: \"tools_function_desc\",\n key: \"tools_function_desc\",\n width: 300,\n render: text => {\n const displayText = truncateText(text, 150);\n const needsTruncation = text && text.length > 150;\n return needsTruncation ? /*#__PURE__*/_jsxDEV(Popover, {\n content: /*#__PURE__*/_jsxDEV(\"div\", {\n style: {\n maxHeight: \"calc(100vh - 35px)\",\n overflowY: \"auto\",\n wordBreak: \"break-word\",\n whiteSpace: \"pre-wrap\",\n maxWidth: 400\n },\n children: text\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 106,\n columnNumber: 15\n }, this),\n title: \"\\u5B8C\\u6574\\u63CF\\u8FF0\",\n children: /*#__PURE__*/_jsxDEV(\"span\", {\n style: {\n cursor: \"pointer\"\n },\n children: displayText\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 120,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 104,\n columnNumber: 11\n }, this) : /*#__PURE__*/_jsxDEV(\"span\", {\n children: displayText\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 123,\n columnNumber: 11\n }, this);\n }\n }, {\n title: \"状态\",\n dataIndex: \"status\",\n key: \"status\",\n width: 100,\n render: status => /*#__PURE__*/_jsxDEV(Tag, {\n color: getStatusColor(status),\n children: getStatusText(status)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 132,\n columnNumber: 27\n }, this)\n }, {\n title: \"失败原因\",\n dataIndex: \"fail_reason\",\n key: \"fail_reason\",\n width: 200,\n render: text => {\n if (!text) return \"-\";\n const displayText = truncateText(text, 150);\n const needsTruncation = text && text.length > 150;\n return needsTruncation ? /*#__PURE__*/_jsxDEV(Popover, {\n content: /*#__PURE__*/_jsxDEV(\"div\", {\n style: {\n maxHeight: \"calc(100vh - 35px)\",\n overflowY: \"auto\",\n wordBreak: \"break-word\",\n whiteSpace: \"pre-wrap\",\n maxWidth: 400\n },\n children: text\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 148,\n columnNumber: 15\n }, this),\n title: \"\\u5B8C\\u6574\\u5931\\u8D25\\u539F\\u56E0\",\n children: /*#__PURE__*/_jsxDEV(\"span\", {\n style: {\n cursor: \"pointer\",\n color: \"#ff4d4f\"\n },\n children: displayText\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 162,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 146,\n columnNumber: 11\n }, this) : /*#__PURE__*/_jsxDEV(\"span\", {\n style: {\n color: text ? \"#ff4d4f\" : \"inherit\"\n },\n children: displayText\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 165,\n columnNumber: 11\n }, this);\n }\n }, {\n title: \"创建时间\",\n dataIndex: \"create_time\",\n key: \"create_time\",\n width: 180,\n render: time => moment(time).format(\"YYYY-MM-DD HH:mm:ss\")\n }, {\n title: \"更新时间\",\n dataIndex: \"update_time\",\n key: \"update_time\",\n width: 180,\n render: time => moment(time).format(\"YYYY-MM-DD HH:mm:ss\")\n }, {\n title: \"操作\",\n key: \"action\",\n width: 240,\n fixed: \"right\",\n render: (_, record) => /*#__PURE__*/_jsxDEV(Space, {\n size: \"small\",\n children: [/*#__PURE__*/_jsxDEV(Button, {\n type: \"primary\",\n size: \"small\",\n icon: /*#__PURE__*/_jsxDEV(EyeOutlined, {}, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 193,\n columnNumber: 19\n }, this),\n onClick: () => navigate(`/pending-tools/${record.search_task_id}`),\n children: \"\\u8BE6\\u60C5\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 190,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(Button, {\n size: \"small\",\n icon: /*#__PURE__*/_jsxDEV(EditOutlined, {}, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 200,\n columnNumber: 19\n }, this),\n onClick: () => navigate(`/pending-tools/${record.search_task_id}?mode=edit`),\n children: \"\\u7F16\\u8F91\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 198,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(Button, {\n danger: true,\n size: \"small\",\n icon: /*#__PURE__*/_jsxDEV(DeleteOutlined, {}, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 208,\n columnNumber: 19\n }, this),\n onClick: () => handleDelete(record.search_task_id),\n children: \"\\u5220\\u9664\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 205,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 189,\n columnNumber: 9\n }, this)\n }];\n const fetchData = async (page = 1, pageSize = 10, search = \"\") => {\n setLoading(true);\n try {\n const response = await pendingToolsApi.getList({\n page,\n pageSize,\n search\n });\n setData(response.data.data);\n setPagination({\n current: response.data.page,\n pageSize: response.data.pageSize,\n total: response.data.total\n });\n } catch (error) {\n message.error(\"获取数据失败\");\n } finally {\n setLoading(false);\n }\n };\n const handleTableChange = paginationConfig => {\n fetchData(paginationConfig.current, paginationConfig.pageSize, searchText);\n };\n const handleSearch = value => {\n setSearchText(value);\n fetchData(1, pagination.pageSize, value);\n };\n const handleDelete = id => {\n confirm({\n title: \"确认删除\",\n content: \"确定要删除这个工具吗?\",\n okText: \"确认\",\n cancelText: \"取消\",\n onOk: async () => {\n try {\n await pendingToolsApi.delete(id);\n message.success(\"删除成功\");\n fetchData(pagination.current, pagination.pageSize, searchText);\n } catch (error) {\n message.error(\"删除失败\");\n }\n }\n });\n };\n useEffect(() => {\n fetchData();\n }, []);\n return /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"space-y-6\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"page-header\",\n children: [/*#__PURE__*/_jsxDEV(\"h1\", {\n className: \"page-title\",\n children: \"\\u5F85\\u63A5\\u5165\\u5DE5\\u5177\\u5217\\u8868\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 273,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"page-description\",\n children: \"\\u7BA1\\u7406\\u548C\\u67E5\\u770B\\u5F85\\u63A5\\u5165\\u7684\\u5DE5\\u5177\\uFF0C\\u5305\\u62EC\\u641C\\u7D22\\u3001\\u8BE6\\u60C5\\u67E5\\u770B\\u3001\\u7F16\\u8F91\\u548C\\u5220\\u9664\\u529F\\u80FD\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 274,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 272,\n columnNumber: 7\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"table-container\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"mb-6\",\n children: /*#__PURE__*/_jsxDEV(Search, {\n placeholder: \"\\u641C\\u7D22\\u5DE5\\u5177\\u540D\\u79F0\\u3001\\u529F\\u80FD\\u540D\\u79F0\\u6216\\u63CF\\u8FF0\",\n allowClear: true,\n enterButton: /*#__PURE__*/_jsxDEV(SearchOutlined, {}, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 282,\n columnNumber: 26\n }, this),\n size: \"large\",\n onSearch: handleSearch,\n className: \"max-w-md\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 279,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 278,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(Table, {\n columns: columns,\n dataSource: data,\n rowKey: \"search_task_id\",\n pagination: pagination,\n loading: loading,\n onChange: handleTableChange,\n scroll: {\n x: 1500\n },\n size: \"middle\",\n className: \"shadow-sm\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 288,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 277,\n columnNumber: 7\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 271,\n columnNumber: 5\n }, this);\n};\n_s(PendingToolsList, \"TB/H5YC/cmHSutrILtBFR9krqW0=\", false, function () {\n return [useNavigate];\n});\n_c = PendingToolsList;\nexport default PendingToolsList;\nvar _c;\n$RefreshReg$(_c, \"PendingToolsList\");","map":{"version":3,"names":["React","useState","useEffect","Table","Button","Input","Space","Tag","message","Modal","Popover","SearchOutlined","EditOutlined","DeleteOutlined","EyeOutlined","useNavigate","pendingToolsApi","moment","jsxDEV","_jsxDEV","Search","confirm","PendingToolsList","_s","data","setData","loading","setLoading","pagination","setPagination","current","pageSize","total","searchText","setSearchText","navigate","getStatusColor","status","statusMap","getStatusText","truncateText","text","maxLength","length","substring","columns","title","dataIndex","key","width","render","displayText","needsTruncation","content","style","maxHeight","overflowY","wordBreak","whiteSpace","maxWidth","children","fileName","_jsxFileName","lineNumber","columnNumber","cursor","color","time","format","fixed","_","record","size","type","icon","onClick","search_task_id","danger","handleDelete","fetchData","page","search","response","getList","error","handleTableChange","paginationConfig","handleSearch","value","id","okText","cancelText","onOk","delete","success","className","placeholder","allowClear","enterButton","onSearch","dataSource","rowKey","onChange","scroll","x","_c","$RefreshReg$"],"sources":["/Users/max_liu/max_liu/company/tools_auto_pt/src/pages/PendingToolsList.js"],"sourcesContent":["import React, { useState, useEffect } from \"react\";\nimport { Table, Button, Input, Space, Tag, message, Modal, Popover } from \"antd\";\nimport { SearchOutlined, EditOutlined, DeleteOutlined, EyeOutlined } from \"@ant-design/icons\";\nimport { useNavigate } from \"react-router-dom\";\nimport { pendingToolsApi } from \"../services/api\";\nimport moment from \"moment\";\n\nconst { Search } = Input;\nconst { confirm } = Modal;\n\nconst PendingToolsList = () => {\n const [data, setData] = useState([]);\n const [loading, setLoading] = useState(false);\n const [pagination, setPagination] = useState({\n current: 1,\n pageSize: 10,\n total: 0,\n });\n const [searchText, setSearchText] = useState(\"\");\n const navigate = useNavigate();\n\n const getStatusColor = (status) => {\n const statusMap = {\n 0: \"processing\",\n 1: \"warning\",\n 2: \"success\",\n 3: \"error\",\n };\n return statusMap[status] || \"default\";\n };\n\n const getStatusText = (status) => {\n const statusMap = {\n 0: \"待处理\",\n 1: \"处理中\",\n 2: \"已完成\",\n 3: \"失败\",\n };\n return statusMap[status] || \"未知\";\n };\n\n // 文本截断函数\n const truncateText = (text, maxLength = 150) => {\n if (!text) return \"\";\n return text.length > maxLength ? text.substring(0, maxLength) + \"...\" : text;\n };\n\n const columns = [\n {\n title: \"工具ID\",\n dataIndex: \"search_task_id\",\n key: \"search_task_id\",\n width: 150,\n render: (text) => {\n const displayText = truncateText(text, 150);\n const needsTruncation = text && text.length > 150;\n\n return needsTruncation ? (\n
管理和查看待接入的工具,包括搜索、详情查看、编辑和删除功能
\n