diff --git a/build_log.txt b/build_log.txt new file mode 100644 index 0000000..b896a44 --- /dev/null +++ b/build_log.txt @@ -0,0 +1,223 @@ + +> react-example@0.0.0 build +> vite build + +vite v6.4.2 building for production... +transforming... +鉁?[39m 9318 modules transformed. +rendering chunks... +npm : [plugin vite:reporter] +所在位置 行:1 字符: 25 ++ cd "D:\code\机器人智慧服务系统"; npm run build 2>&1 | Out-String -Width 300 | ... ++ ~~~~~~~~~~~~~~~~~~ + + CategoryInfo : NotSpecified: ([plugin vite:reporter] :String) [], RemoteException + + FullyQualifiedErrorId : NativeCommandError + +(!) D:/code/鏈哄櫒浜烘櫤鎱ф湇鍔$郴缁?src/store/userSlice.ts is dynamically imported by D:/code/鏈哄櫒浜烘櫤鎱ф湇鍔$郴缁?src/api/request.ts but also statically imported by D:/code/鏈哄櫒浜烘櫤鎱ф湇鍔$郴缁?src/components/Layout.tsx, D:/code/鏈哄櫒浜烘櫤鎱ф湇鍔$郴缁?src/pages/Login.tsx, D:/code/鏈哄櫒浜烘櫤鎱ф湇鍔$郴缁?src/pages/Profile.tsx, D:/code/鏈哄櫒浜烘櫤 +鎱ф湇鍔$郴缁?src/store/index.ts, dynamic import will not move module into another chunk. + +[plugin vite:reporter] +(!) D:/code/鏈哄櫒浜烘櫤鎱ф湇鍔$郴缁?src/store/index.ts is dynamically imported by D:/code/鏈哄櫒浜烘櫤鎱ф湇鍔$郴缁?src/api/request.ts but also statically imported by D:/code/鏈哄櫒浜烘櫤鎱ф湇鍔$郴缁?src/components/Layout.tsx, D:/code/鏈哄櫒浜烘櫤鎱ф湇鍔$郴缁?src/main.tsx, D:/code/鏈哄櫒浜烘櫤鎱ф湇鍔$郴缁?src/pages/Login.tsx, D:/code/鏈哄櫒浜烘櫤鎱ф湇鍔$郴缁?src/p +ages/Profile.tsx, dynamic import will not move module into another chunk. + +computing gzip size... +dist/index.html  2.52 kB 鈹?gzip: 1.13 kB +dist/assets/gecaocar-DMp9NnzT.png  16.23 kB +dist/assets/bgmain-DtapCCMy.jpg  71.91 kB +dist/assets/xunjiancar-CAfmDzzl.png  213.39 kB +dist/assets/carplane-f-ISorrw.png  259.24 kB +dist/assets/logincard-B8hQtFRG.png  355.36 kB +dist/assets/logo-BZW_A_MC.png  1,814.58 kB +dist/assets/bgc2-CfINnBvq.png  3,954.80 kB +dist/assets/inspectCar-C-BgLHu6.png 14,801.70 kB +dist/assets/Home-C67sUCdb.css  1.21 kB 鈹?gzip: 0.55 kB +dist/assets/index-bPDl6cOh.css  70.30 kB 鈹?gzip: 12.91 kB +dist/assets/useForceUpdate-DtM2zGu_.js  0.11 kB 鈹?gzip: 0.13 kB +dist/assets/EyeOutlined-BpIrDvhk.js  0.20 kB 鈹?gzip: 0.18 kB +dist/assets/index-BZ2XYiLY.js  0.29 kB 鈹?gzip: 0.17 kB +dist/assets/constants-DwgWOJkA.js  0.31 kB 鈹?gzip: 0.28 kB +dist/assets/chevron-right-C-2t-OOD.js  0.31 kB 鈹?gzip: 0.25 kB +dist/assets/SwapRightOutlined-CaVf5wQU.js  0.32 kB 鈹?gzip: 0.26 kB +dist/assets/index-CPl-Ppnu.js  0.35 kB 鈹?gzip: 0.19 kB +dist/assets/useBreakpoint-B_LmyIb1.js  0.37 kB 鈹?gzip: 0.27 kB +dist/assets/Empty-Ctr5z1y_.js  0.40 kB 鈹?gzip: 0.32 kB +dist/assets/CloseOutlined-DNEu5lOW.js  0.41 kB 鈹?gzip: 0.31 kB +dist/assets/wind-BGkejR8u.js  0.43 kB 鈹?gzip: 0.31 kB +dist/assets/CheckOutlined-DWAq-EXD.js  0.44 kB 鈹?gzip: 0.31 kB +dist/assets/PlusOutlined-9xQFYjfY.js  0.44 kB 鈹?gzip: 0.31 kB +dist/assets/index-Bw21YrWE.js  0.44 kB 鈹?gzip: 0.22 kB +dist/assets/zap-T1mbixAe.js  0.45 kB 鈹?gzip: 0.32 kB +dist/assets/collapse-BbEVqHco.js  0.45 kB 鈹?gzip: 0.20 kB +dist/assets/EyeOutlined-ChMUbuX5.js  0.45 kB 鈹?gzip: 0.32 kB +dist/assets/EditOutlined-D_m5HT9j.js  0.45 kB 鈹?gzip: 0.33 kB +dist/assets/DeleteOutlined-DJWa8o0s.js  0.45 kB 鈹?gzip: 0.32 kB +dist/assets/SearchOutlined-D93E4Oj1.js  0.45 kB 鈹?gzip: 0.33 kB +dist/assets/CalendarOutlined-DZsP2fe7.js  0.45 kB 鈹?gzip: 0.33 kB +dist/assets/DownloadOutlined-RqkGX7Gr.js  0.45 kB 鈹?gzip: 0.33 kB +dist/assets/ClockCircleOutlined-BPcFT2WX.js  0.46 kB 鈹?gzip: 0.33 kB +dist/assets/DownloadOutlined-DTidZHln.js  0.46 kB 鈹?gzip: 0.30 kB +dist/assets/SwapOutlined-MHggqN5a.js  0.47 kB 鈹?gzip: 0.34 kB +dist/assets/DeleteOutlined-DFutYCzo.js  0.50 kB 鈹?gzip: 0.34 kB +dist/assets/shield-check-D8S1FByg.js  0.50 kB 鈹?gzip: 0.36 kB +dist/assets/CalendarOutlined-DKq2sctu.js  0.51 kB 鈹?gzip: 0.31 kB +dist/assets/ClockCircleOutlined-CELcQ7Uv.js  0.53 kB 鈹?gzip: 0.34 kB +dist/assets/EditOutlined-DdmGLkPL.js  0.56 kB 鈹?gzip: 0.38 kB +dist/assets/EyeOutlined-Bmd706kk.js  0.63 kB 鈹?gzip: 0.39 kB +dist/assets/PauseOutlined-BqDFOIsB.js  0.65 kB 鈹?gzip: 0.47 kB +dist/assets/play-B5DtZ9KN.js  0.66 kB 鈹?gzip: 0.36 kB +dist/assets/MoreOutlined-Bojj3j6_.js  0.67 kB 鈹?gzip: 0.43 kB +dist/assets/index-EuwyWURW.js  0.75 kB 鈹?gzip: 0.30 kB +dist/assets/ThunderboltOutlined-Dpsk7I4X.js  0.81 kB 鈹?gzip: 0.57 kB +dist/assets/SearchOutlined-DBDe8SEH.js  0.82 kB 鈹?gzip: 0.52 kB +dist/assets/RiseOutlined-CBId0fo2.js  0.83 kB 鈹?gzip: 0.57 kB +dist/assets/cpu-Sb-QLlDK.js  0.83 kB 鈹?gzip: 0.41 kB +dist/assets/trending-up-CfL4zUOM.js  0.83 kB 鈹?gzip: 0.39 kB +dist/assets/WarningOutlined-iECt8d0C.js  0.84 kB 鈹?gzip: 0.59 kB +dist/assets/DatabaseOutlined-BwouSYc2.js  0.84 kB 鈹?gzip: 0.53 kB +dist/assets/EnterOutlined-DahysLq8.js  0.85 kB 鈹?gzip: 0.46 kB +dist/assets/InfoCircleOutlined-3BD64K2v.js  0.88 kB 鈹?gzip: 0.56 kB +dist/assets/MailOutlined-CqThN_M3.js  0.88 kB 鈹?gzip: 0.59 kB +dist/assets/LockOutlined-Cj1K_c-k.js  0.88 kB 鈹?gzip: 0.60 kB +dist/assets/ExclamationCircleOutlined-DwOXB-Gw.js  0.88 kB 鈹?gzip: 0.57 kB +dist/assets/index-DRJqI9JD.js  0.89 kB 鈹?gzip: 0.28 kB +dist/assets/VideoCameraOutlined-B27jqIy_.js  0.89 kB 鈹?gzip: 0.62 kB +dist/assets/PlayCircleOutlined-BYW1xJTi.js  0.90 kB 鈹?gzip: 0.59 kB +dist/assets/LeftOutlined-D6OBLFDp.js  0.90 kB 鈹?gzip: 0.49 kB +dist/assets/ProtectedRoute-IM0Sy2Xs.js  0.93 kB 鈹?gzip: 0.55 kB +dist/assets/index-DVB2C8Ff.js  0.93 kB 鈹?gzip: 0.56 kB +dist/assets/CheckCircleOutlined-Bxmsq8Kw.js  0.94 kB 鈹?gzip: 0.61 kB +dist/assets/droplets-NAdX3BmJ.js  0.94 kB 鈹?gzip: 0.50 kB +dist/assets/FileTextOutlined-CNX0YM61.js  0.96 kB 鈹?gzip: 0.62 kB +dist/assets/RobotOutlined-BORS_9JP.js  0.97 kB 鈹?gzip: 0.63 kB +dist/assets/BellOutlined-D5GkP0tr.js  0.97 kB 鈹?gzip: 0.65 kB +dist/assets/FormOutlined-BQt8zVxi.js  1.00 kB 鈹?gzip: 0.66 kB +dist/assets/BarChartOutlined-CuaUHpnJ.js  1.01 kB 鈹?gzip: 0.53 kB +dist/assets/BgColorsOutlined-DChci6LA.js  1.01 kB 鈹?gzip: 0.66 kB +dist/assets/CameraOutlined-BVs6tmVA.js  1.02 kB 鈹?gzip: 0.66 kB +dist/assets/AppstoreOutlined-VqZrPBsZ.js  1.06 kB 鈹?gzip: 0.52 kB +dist/assets/ExperimentOutlined-BgHosctB.js  1.06 kB 鈹?gzip: 0.72 kB +dist/assets/BranchesOutlined-DoqceiH7.js  1.07 kB 鈹?gzip: 0.65 kB +dist/assets/index-7tIGlO1L.js  1.10 kB 鈹?gzip: 0.59 kB +dist/assets/SystemSetting-C5nTGJmA.js  1.11 kB 鈹?gzip: 0.69 kB +dist/assets/ExpandOutlined-DmxD2QPe.js  1.12 kB 鈹?gzip: 0.59 kB +dist/assets/CloudOutlined-7Kp-N517.js  1.13 kB 鈹?gzip: 0.74 kB +dist/assets/UserOutlined-C4ebdDKF.js  1.22 kB 鈹?gzip: 0.76 kB +dist/assets/ZoomOutOutlined-CdPjzMfa.js  1.22 kB 鈹?gzip: 0.42 kB +dist/assets/ReloadOutlined-DdNrEJCC.js  1.23 kB 鈹?gzip: 0.77 kB +dist/assets/AlertOutlined-BEmiVn_J.js  1.24 kB 鈹?gzip: 0.73 kB +dist/assets/AimOutlined-DjiWwPPF.js  1.25 kB 鈹?gzip: 0.71 kB +dist/assets/alarmApi-BZ-m506o.js  1.25 kB 鈹?gzip: 0.35 kB +dist/assets/SyncOutlined-CLMibV2z.js  1.27 kB 鈹?gzip: 0.81 kB +dist/assets/MoneyCollectOutlined-DPX31kZt.js  1.30 kB 鈹?gzip: 0.79 kB +dist/assets/FullscreenOutlined-CKE8zdPY.js  1.34 kB 鈹?gzip: 0.77 kB +dist/assets/HistoryOutlined-Cm2yhZBV.js  1.41 kB 鈹?gzip: 0.87 kB +dist/assets/SafetyCertificateOutlined-Cv9Ug_8-.js  1.41 kB 鈹?gzip: 0.77 kB +dist/assets/SwapOutlined-C3QhvSoJ.js  1.42 kB 鈹?gzip: 0.65 kB +dist/assets/ZoomOutOutlined-BsCJgCwM.js  1.47 kB 鈹?gzip: 0.67 kB +dist/assets/satellite-DN23gGtM.js  1.47 kB 鈹?gzip: 0.54 kB +dist/assets/RocketOutlined-D32l95Ej.js  1.49 kB 鈹?gzip: 0.93 kB +dist/assets/EnvironmentOutlined-DqDsf3JY.js  1.49 kB 鈹?gzip: 0.91 kB +dist/assets/useBubbleLock-CnKa9QU1.js  1.54 kB 鈹?gzip: 0.75 kB +dist/assets/index-CVpDycq2.js  1.61 kB 鈹?gzip: 0.85 kB +dist/assets/ApiOutlined-B-23p3zJ.js  1.61 kB 鈹?gzip: 0.87 kB +dist/assets/SunOutlined-DulLtM_U.js  1.75 kB 鈹?gzip: 0.90 kB +dist/assets/DashboardOutlined-BcbkGzZH.js  1.83 kB 鈹?gzip: 0.93 kB +dist/assets/createLucideIcon-DQHekqUj.js  1.86 kB 鈹?gzip: 0.80 kB +dist/assets/CarOutlined-dQz3FjQ0.js  2.00 kB 鈹?gzip: 0.98 kB +dist/assets/index-DFuZdxqB.js  2.04 kB 鈹?gzip: 1.00 kB +dist/assets/systemSetting-Du4ydvo8.js  2.11 kB 鈹?gzip: 0.45 kB +dist/assets/PlayCircleFilled-CpNFZPGa.js  2.14 kB 鈹?gzip: 1.04 kB +dist/assets/LinkOutlined-DIT1vcCm.js  2.19 kB 鈹?gzip: 0.82 kB +dist/assets/index-DUin50PQ.js  2.19 kB 鈹?gzip: 1.14 kB +dist/assets/SettingOutlined-D_j9s6J1.js  2.35 kB 鈹?gzip: 1.21 kB +dist/assets/VideoPlayer-CIv7hT9k.js  2.39 kB 鈹?gzip: 1.33 kB +dist/assets/PictureTwoTone-BaO8R2Hf.js  2.42 kB 鈹?gzip: 1.04 kB +dist/assets/index-B5YBJdOw.js  2.42 kB 鈹?gzip: 1.16 kB +dist/assets/LoadingOutlined-EmNUEJCp.js  2.94 kB 鈹?gzip: 1.38 kB +dist/assets/SaveOutlined-CMHNvWPT.js  3.28 kB 鈹?gzip: 1.40 kB +dist/assets/device-CZX1s96N.js  3.38 kB 鈹?gzip: 0.76 kB +dist/assets/index-CBNqhCuo.js  3.61 kB 鈹?gzip: 1.27 kB +dist/assets/row-DptZftaY.js  3.74 kB 鈹?gzip: 1.64 kB +dist/assets/OnlineUser-B-LR1RQ1.js  3.74 kB 鈹?gzip: 1.77 kB +dist/assets/MonitorOutlined-8H67Im48.js  3.85 kB 鈹?gzip: 1.29 kB +dist/assets/VideoCameraAddOutlined-ujFYsK7R.js  3.86 kB 鈹?gzip: 1.42 kB +dist/assets/VideoManagement-lgnfcqOK.js  3.89 kB 鈹?gzip: 1.78 kB +dist/assets/index-s0uyhwL6.js  4.14 kB 鈹?gzip: 1.74 kB +dist/assets/MenuUnfoldOutlined-oe1UMe64.js  4.16 kB 鈹?gzip: 1.30 kB +dist/assets/ScanOutlined-B9n4kgAv.js  4.19 kB 鈹?gzip: 1.38 kB +dist/assets/index-ChYh3EL1.js  4.21 kB 鈹?gzip: 1.58 kB +dist/assets/index-DaNu9UFa.js  4.38 kB 鈹?gzip: 1.75 kB +dist/assets/Organization-CvcvXgnR.js  4.44 kB 鈹?gzip: 1.95 kB +dist/assets/index-BrtQE5cA.js  4.58 kB 鈹?gzip: 1.91 kB +dist/assets/WomanOutlined-DhEdcpR3.js  4.82 kB 鈹?gzip: 1.76 kB +dist/assets/LineChartOutlined-D9mAa485.js  5.07 kB 鈹?gzip: 1.82 kB +dist/assets/Roles-peab14ff.js  5.30 kB 鈹?gzip: 2.32 kB +dist/assets/index-UaCBHKR_.js  5.44 kB 鈹?gzip: 2.24 kB +dist/assets/index-DedMQGVM.js  5.57 kB 鈹?gzip: 2.20 kB +dist/assets/Users-CMzPBXJp.js  5.60 kB 鈹?gzip: 2.22 kB +dist/assets/index-BL30Qw1c.js  5.83 kB 鈹?gzip: 2.63 kB +dist/assets/Sider-DXAaqKLr.js  6.64 kB 鈹?gzip: 2.85 kB +dist/assets/Input-4q6jt_g5.js  6.73 kB 鈹?gzip: 2.71 kB +dist/assets/LogManagement-O6D_fZci.js  6.94 kB 鈹?gzip: 3.29 kB +dist/assets/dayjs.min-buSFCgKN.js  7.15 kB 鈹?gzip: 3.11 kB +dist/assets/Timeline-CRgNRkZL.js  7.47 kB 鈹?gzip: 2.32 kB +dist/assets/Profile-Cm2WO_xU.js  7.73 kB 鈹?gzip: 2.71 kB +dist/assets/index-6bOsNg-M.js  7.98 kB 鈹?gzip: 2.71 kB +dist/assets/GlobalOutlined-BiQGRkIB.js  8.13 kB 鈹?gzip: 2.73 kB +dist/assets/StationManage-gzXazdWA.js  9.47 kB 鈹?gzip: 3.25 kB +dist/assets/CaretUpOutlined-CJ_QY0uc.js  9.72 kB 鈹?gzip: 3.73 kB +dist/assets/index-D3Ma-lrv.js  9.90 kB 鈹?gzip: 4.14 kB +dist/assets/index-BuRUqopv.js  10.86 kB 鈹?gzip: 3.66 kB +dist/assets/index-ALYSXNVI.js  13.09 kB 鈹?gzip: 4.32 kB +dist/assets/RealTimeMonitor-BJaT8v8y.js  13.49 kB 鈹?gzip: 3.91 kB +dist/assets/Downloads-B6JNnYAG.js  14.52 kB 鈹?gzip: 5.40 kB +dist/assets/UserPage-W6MtChV2.js  14.56 kB 鈹?gzip: 5.10 kB +dist/assets/Layout-B5v7n-84.js  15.26 kB 鈹?gzip: 6.20 kB +dist/assets/mowerAllView-CIVQaOob.js  15.31 kB 鈹?gzip: 5.15 kB +dist/assets/progress-VpEMMtch.js  16.32 kB 鈹?gzip: 5.97 kB +dist/assets/Video-CfHlTupO.js  17.68 kB 鈹?gzip: 6.43 kB +dist/assets/VideoMonitorPage-B8eUkNSX.js  19.41 kB 鈹?gzip: 5.77 kB +dist/assets/Home-CsUKVxVV.js  19.63 kB 鈹?gzip: 5.88 kB +dist/assets/ReportCenter-vBJ0zNbs.js  20.12 kB 鈹?gzip: 5.58 kB +dist/assets/AIAnalysis-BXDx_pZ0.js  20.79 kB 鈹?gzip: 6.03 kB +dist/assets/index-B_4lrhUw.js  21.18 kB 鈹?gzip: 7.75 kB +dist/assets/SystemMaintain-B7rVVlmq.js  21.20 kB 鈹?gzip: 6.39 kB +dist/assets/Agri-Bb29XfiI.js  23.53 kB 鈹?gzip: 6.77 kB +dist/assets/CleanOptimization-CWLVvh62.js  23.86 kB 鈹?gzip: 6.84 kB +dist/assets/BasicSettings-CuuSvPVD.js  24.01 kB 鈹?gzip: 6.95 kB +dist/assets/Pagination-uKW-OnZm.js  24.07 kB 鈹?gzip: 7.27 kB +dist/assets/index-FQVBqmQl.js  24.29 kB 鈹?gzip: 6.84 kB +dist/assets/index-CGjCB8GI.js  24.61 kB 鈹?gzip: 8.41 kB +dist/assets/DeviceAccessPage-CVno98nd.js  27.21 kB 鈹?gzip: 7.74 kB +dist/assets/DeviceStatusPage-uF0YhWCt.js  27.91 kB 鈹?gzip: 8.86 kB +dist/assets/AntdIcon-Vj78gm8A.js  28.67 kB 鈹?gzip: 10.61 kB +dist/assets/index-BPOI5hR7.js  30.34 kB 鈹?gzip: 10.80 kB +dist/assets/index-f3imQPvT.js  31.74 kB 鈹?gzip: 11.04 kB +dist/assets/TextArea-CsLo8K_h.js  33.23 kB 鈹?gzip: 9.32 kB +dist/assets/DeviceOverviewPage-CD8FxotZ.js  35.09 kB 鈹?gzip: 9.63 kB +dist/assets/Map-DUcm8af3.js  35.52 kB 鈹?gzip: 16.50 kB +dist/assets/DeviceParamModal-DSGwPtsu.js  36.02 kB 鈹?gzip: 12.66 kB +dist/assets/Alerts-ZPDUGkfy.js  43.36 kB 鈹?gzip: 13.62 kB +dist/assets/WayLinePage-y2GT_PFs.js  47.95 kB 鈹?gzip: 12.81 kB +dist/assets/RobotTaskPage-CZh-hfge.js  50.72 kB 鈹?gzip: 15.77 kB +dist/assets/index-BTopT9-s.js  53.48 kB 鈹?gzip: 17.46 kB +dist/assets/index-0KzkHCl3.js  85.39 kB 鈹?gzip: 28.40 kB +dist/assets/index-CjPizwAt.js  104.37 kB 鈹?gzip: 33.62 kB +dist/assets/Table-CA0nEd5i.js  105.27 kB 鈹?gzip: 35.10 kB +dist/assets/index-CowEi-GC.js  118.83 kB 鈹?gzip: 40.16 kB +dist/assets/Login-DfIjGkfy.js  127.88 kB 鈹?gzip: 42.31 kB +dist/assets/useMqtt-DpGm36ma.js  372.77 kB 鈹?gzip: 112.38 kB +dist/assets/recharts-CrJS7ZSc.js  376.93 kB 鈹?gzip: 108.14 kB +dist/assets/index-Dt7gCQGU.js  651.89 kB 鈹?gzip: 215.80 kB +dist/assets/DeviceManagement-DpXxWEOS.js  722.91 kB 鈹?gzip: 158.92 kB +dist/assets/MenuList-pnm43MIv.js  857.20 kB 鈹?gzip: 165.01 kB +dist/assets/WorkOrder-DM_q3eps.js  1,507.95 kB 鈹?gzip: 445.53 kB +dist/assets/DroneVideoPlayer-DsyzzCPW.js  2,529.14 kB 鈹?gzip: 708.00 kB + +(!) Some chunks are larger than 1000 kB after minification. Consider: +- Using dynamic import() to code-split the application +- Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/configuration-options/#output-manualchunks +- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit. +[vite-plugin-static-copy] Copied 1 items. +鉁?built in 2m 34s + diff --git a/src/components/SystemSetting/BasicSettings.tsx b/src/components/SystemSetting/BasicSettings.tsx index f3842a1..12aa62b 100644 --- a/src/components/SystemSetting/BasicSettings.tsx +++ b/src/components/SystemSetting/BasicSettings.tsx @@ -169,6 +169,9 @@ const BasicSettings = () => { return (
+
+ 基础设置 +
{/* 顶部统计卡片 */} diff --git a/src/components/SystemSetting/DeviceAccessPage.tsx b/src/components/SystemSetting/DeviceAccessPage.tsx index f8ad7f6..ba55522 100644 --- a/src/components/SystemSetting/DeviceAccessPage.tsx +++ b/src/components/SystemSetting/DeviceAccessPage.tsx @@ -2,6 +2,7 @@ import { useState, useEffect } from 'react'; import { Card, Table, Button, Space, Form, Modal, Input, Select, InputNumber, Tabs, Tag, Popconfirm, message, Divider, Switch, Empty, Checkbox, + Typography, } from 'antd'; import { PlusOutlined, EditOutlined, DeleteOutlined, ProductOutlined, @@ -494,6 +495,9 @@ export default function DeviceAccessPage() { return (
{contextHolder} +
+ 设备接入 +
设备管理} key="device" /> diff --git a/src/components/SystemSetting/DeviceManagement.tsx b/src/components/SystemSetting/DeviceManagement.tsx index 15c94f4..f4cc15d 100644 --- a/src/components/SystemSetting/DeviceManagement.tsx +++ b/src/components/SystemSetting/DeviceManagement.tsx @@ -1,6 +1,7 @@ import React, { useState, useEffect } from 'react'; import { Tabs, + Typography, } from 'antd'; import SerialNumGenerate from "./SerialNumGenerate" @@ -77,6 +78,9 @@ export default function DeviceManagementPage() { return (
+
+ 设备管理 +
+ {renderTabContent()}
); diff --git a/src/components/SystemSetting/LogManagement.tsx b/src/components/SystemSetting/LogManagement.tsx new file mode 100644 index 0000000..6768263 --- /dev/null +++ b/src/components/SystemSetting/LogManagement.tsx @@ -0,0 +1,155 @@ +import React, { useState, useMemo } from 'react'; +import { + Card as AntdCard, Table, Select, Input, Button, Tag, Space, Typography, Row, Col, DatePicker, message +} from 'antd'; +import { + FileTextOutlined, SearchOutlined, ReloadOutlined, DownloadOutlined, + InfoCircleOutlined, WarningOutlined, ExclamationCircleOutlined, CheckCircleOutlined +} from '@ant-design/icons'; +import dayjs from 'dayjs'; + +const { Title, Text } = Typography; +const { RangePicker } = DatePicker; + +// ====================== +// 日志管理(仅 admin 可见) +// 说明:当前为前端展示页,数据使用本地 mock。 +// 接入真实数据时,可对接命令服务日志 GET /api/commands(设备控制流水)、 +// 状态服务历史 GET /api/status/:deviceId/history,或后端 /system/operlog 操作日志接口。 +// ====================== + +const MOCK_LOGS = [ + { id: 1, time: '2026-08-10 13:02:11', level: 'info', source: '系统', operator: '系统', message: '机器人智慧服务系统 Alpha 三服务(接入/状态/命令)启动完成' }, + { id: 2, time: '2026-08-10 12:58:40', level: 'action', source: '命令服务', operator: '张运维', message: '向 ROBOT-001 下发移动命令(seq=d6b5d545),执行结果:成功' }, + { id: 3, time: '2026-08-10 12:51:22', level: 'action', source: '用户管理', operator: '张运维', message: '新增运维工程师账号「李工」,角色:运维工程师' }, + { id: 4, time: '2026-08-10 12:40:05', level: 'warning', source: '设备接入', operator: '系统', message: 'DRONE-001 心跳超时(>60s),已自动置为离线' }, + { id: 5, time: '2026-08-10 12:33:18', level: 'error', source: '命令服务', operator: '系统', message: 'ROBOT-002 执行「自主巡检」超时,已自动重试 1 次后仍失败' }, + { id: 6, time: '2026-08-10 12:20:09', level: 'action', source: '系统设置', operator: '张运维', message: '修改系统名称与数据刷新频率(5min → 1min)' }, + { id: 7, time: '2026-08-10 11:55:44', level: 'info', source: '状态服务', operator: '系统', message: '设备 ROBOT-001 上报状态:电量 85%,模式 patrol' }, + { id: 8, time: '2026-08-10 11:30:02', level: 'warning', source: '告警中心', operator: '系统', message: '逆变器 INV-03 输出功率较昨日下降 16%,触发预警' }, + { id: 9, time: '2026-08-10 10:48:37', level: 'action', source: '视频管理', operator: '王班长', message: '调整 CAM-04 热成像通道码率参数' }, + { id: 10, time: '2026-08-10 10:12:15', level: 'info', source: '系统', operator: '系统', message: '每日自动备份完成,备份文件:backup-20260810-0200.tar' }, + { id: 11, time: '2026-08-10 09:40:50', level: 'error', source: '设备接入', operator: '系统', message: '未知设备尝试注册(secret 校验失败),已拒绝,来源 IP:10.0.12.45' }, + { id: 12, time: '2026-08-10 09:05:23', level: 'action', source: '角色管理', operator: '张运维', message: '为「数据分析师」角色授权「报表中心-导出」权限' }, +]; + +const LEVEL_CONFIG: Record = { + info: { color: 'blue', label: '信息', icon: }, + action: { color: 'green', label: '操作', icon: }, + warning: { color: 'orange', label: '警告', icon: }, + error: { color: 'red', label: '错误', icon: }, +}; + +const LogManagement = () => { + const [data, setData] = useState(MOCK_LOGS); + const [levelFilter, setLevelFilter] = useState('all'); + const [keyword, setKeyword] = useState(''); + const [dateRange, setDateRange] = useState<[any, any] | null>(null); + + const filtered = useMemo(() => { + return data.filter((log) => { + if (levelFilter !== 'all' && log.level !== levelFilter) return false; + if (keyword && !(log.message.includes(keyword) || log.operator.includes(keyword) || log.source.includes(keyword))) return false; + if (dateRange && dateRange[0] && dateRange[1]) { + const t = dayjs(log.time, 'YYYY-MM-DD HH:mm:ss'); + if (t.isBefore(dateRange[0].startOf('day')) || t.isAfter(dateRange[1].endOf('day'))) return false; + } + return true; + }); + }, [data, levelFilter, keyword, dateRange]); + + const handleRefresh = () => { + setData(MOCK_LOGS); + setLevelFilter('all'); + setKeyword(''); + setDateRange(null); + message.success('日志已刷新'); + }; + + const handleExport = () => { + const header = '时间,级别,来源,操作人,消息\n'; + const rows = filtered.map((l) => `${l.time},${LEVEL_CONFIG[l.level].label},${l.source},${l.operator},"${l.message}"`).join('\n'); + const blob = new Blob([header + rows], { type: 'text/csv;charset=utf-8' }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = `系统日志_${dayjs().format('YYYYMMDD_HHmmss')}.csv`; + a.click(); + URL.revokeObjectURL(url); + message.success(`已导出 ${filtered.length} 条日志`); + }; + + const columns = [ + { title: '时间', dataIndex: 'time', key: 'time', width: 170, fixed: 'left' as const }, + { + title: '级别', dataIndex: 'level', key: 'level', width: 80, + render: (lv: string) => { + const c = LEVEL_CONFIG[lv] || LEVEL_CONFIG.info; + return {c.label}; + }, + }, + { title: '来源', dataIndex: 'source', key: 'source', width: 120 }, + { title: '操作人', dataIndex: 'operator', key: 'operator', width: 100 }, + { title: '消息', dataIndex: 'message', key: 'message', ellipsis: true }, + ]; + + return ( +
+
+ 日志管理 + 系统运行、设备控制与管理员操作流水,仅超级管理员可查看 +
+ + + + + } value={keyword} onChange={(e) => setKeyword(e.target.value)} + /> + + + setDateRange(v as any)} + /> + + + + + + + + + + + + `共 ${t} 条` }} + /> + + + ); +}; + +export default LogManagement; diff --git a/src/components/SystemSetting/MenuList.tsx b/src/components/SystemSetting/MenuList.tsx index 63396fb..790aab2 100644 --- a/src/components/SystemSetting/MenuList.tsx +++ b/src/components/SystemSetting/MenuList.tsx @@ -1,7 +1,8 @@ import React, { useState, useEffect } from 'react'; import { Table, Button, Space, Modal, Form, Tree, message, - Input, Popconfirm, Select, Card, InputNumber, Row, Col, Tooltip + Input, Popconfirm, Select, Card, InputNumber, Row, Col, Tooltip, + Typography } from 'antd'; // 引入全部常用图标 import * as AllIcons from '@ant-design/icons'; @@ -186,7 +187,10 @@ export default function MenuList() { return (
{contextHolder} - +
+ 菜单管理 +
+