From 4fa3c206642a49e0d3f0bb9ec1387c5626af0ff8 Mon Sep 17 00:00:00 2001 From: Your Name <2499342078@qq.com> Date: Tue, 20 May 2025 11:49:59 +0800 Subject: [PATCH] ADD --- .../app/main/devicepage/dashboard/page.tsx | 10 +++++++ .../app/main/devicepage/devicetable/page.tsx | 26 +++++++++++++++---- apps/web/src/app/main/devicepage/page.tsx | 4 +-- .../src/app/main/layout/NavigationMenu.tsx | 2 ++ apps/web/src/routes/index.tsx | 14 +++++++--- 5 files changed, 44 insertions(+), 12 deletions(-) create mode 100644 apps/web/src/app/main/devicepage/dashboard/page.tsx diff --git a/apps/web/src/app/main/devicepage/dashboard/page.tsx b/apps/web/src/app/main/devicepage/dashboard/page.tsx new file mode 100644 index 0000000..37989f2 --- /dev/null +++ b/apps/web/src/app/main/devicepage/dashboard/page.tsx @@ -0,0 +1,10 @@ +const DashboardPage = () => { + + return ( +
+

Dashboard

+
+ ); +}; + +export default DashboardPage; diff --git a/apps/web/src/app/main/devicepage/devicetable/page.tsx b/apps/web/src/app/main/devicepage/devicetable/page.tsx index 0a80751..01345b4 100755 --- a/apps/web/src/app/main/devicepage/devicetable/page.tsx +++ b/apps/web/src/app/main/devicepage/devicetable/page.tsx @@ -1,4 +1,4 @@ -import { Button, Modal, Table, Upload } from "antd"; +import { Button, Checkbox, Modal, Table, Upload } from "antd"; import { ColumnsType } from "antd/es/table"; import { api, useDevice, useStaff } from "@nice/client"; import { useEffect, useState, useImperativeHandle, forwardRef, useRef } from "react"; @@ -221,7 +221,7 @@ const DeviceTable = forwardRef(({ onSelectedChange }: DeviceTableProps, ref) => const [selectedRowKeys, setSelectedRowKeys] = useState([]); - const onSelectChange = (newSelectedRowKeys: React.Key[]) => { + const onSelectChange = (newSelectedRowKeys: React.Key[], selectedRows: any[]) => { setSelectedRowKeys(newSelectedRowKeys); }; //导出函数 @@ -252,7 +252,8 @@ const DeviceTable = forwardRef(({ onSelectedChange }: DeviceTableProps, ref) => }; return statusMap[item.deviceStatus] || "未知"; })(), - '时间': item.createdAt ? dayjs(item.createdAt).format('YYYY-MM-DD') : "未知" + '时间': item.createdAt ? dayjs(item.createdAt).format('YYYY-MM-DD') : "未知", + '描述': item.notes || "无描述" })); // 创建工作簿 @@ -261,7 +262,7 @@ const DeviceTable = forwardRef(({ onSelectedChange }: DeviceTableProps, ref) => utils.book_append_sheet(wb, ws, "故障数据"); // 导出Excel文件 - writeFile(wb, `故障数据_${dayjs().format('YYYYMMDD_HHmmss')}.xlsx`); + writeFile(wb, `故障数据_${dayjs().format('YYYYMMDD_HHm mss')}.xlsx`); toast.success(`成功导出 ${selectedData.length} 条数据`); } catch (error) { @@ -447,7 +448,21 @@ const DeviceTable = forwardRef(({ onSelectedChange }: DeviceTableProps, ref) => const rowSelection = { selectedRowKeys, onChange: onSelectChange, - columnWidth: 60, + columnWidth: 70, + columnTitle: ( +
+ 0 && selectedRowKeys?.length < (devices?.length || 0)} + checked={(devices?.length || 0) > 0 && selectedRowKeys?.length === (devices?.length || 0)} + onChange={(e) => { + const checked = e.target.checked; + const newSelectedRowKeys = checked ? (devices || []).map(item => item.id) : []; + onSelectChange(newSelectedRowKeys, checked ? devices: []); + }} + /> + 全选 +
+ ), preserveSelectedRowKeys: true // 这个属性保证翻页时选中状态不丢失 } const TableHeader = () => ( @@ -496,6 +511,7 @@ const DeviceTable = forwardRef(({ onSelectedChange }: DeviceTableProps, ref) => rowKey="id" columns={columns} dataSource={devices} + size="middle" tableLayout="fixed" rowClassName={(record, index) => index % 2 === 0 ? "bg-white" : "bg-gray-100" diff --git a/apps/web/src/app/main/devicepage/page.tsx b/apps/web/src/app/main/devicepage/page.tsx index 7941ce2..8d301cc 100755 --- a/apps/web/src/app/main/devicepage/page.tsx +++ b/apps/web/src/app/main/devicepage/page.tsx @@ -46,9 +46,7 @@ export default function DeviceMessage() { const [expanded, setExpanded] = useState(false); // 添加所有筛选条件的状态 const [selectedSystem, setSelectedSystem] = useState(null); - const [selectedDeviceType, setSelectedDeviceType] = useState( - null - ); + const [selectedDeviceType, setSelectedDeviceType] = useState(null); const [selectedDept, setSelectedDept] = useState(null) const [time, setTime] = useState(""); const [ipAddress, setIpAddress] = useState(""); diff --git a/apps/web/src/app/main/layout/NavigationMenu.tsx b/apps/web/src/app/main/layout/NavigationMenu.tsx index e36a5a5..00ef337 100755 --- a/apps/web/src/app/main/layout/NavigationMenu.tsx +++ b/apps/web/src/app/main/layout/NavigationMenu.tsx @@ -8,6 +8,7 @@ import { UserOutlined, TeamOutlined, KeyOutlined, + HomeOutlined, } from "@ant-design/icons"; function getItem( @@ -28,6 +29,7 @@ function getItem( }; } const items = [ + getItem("首页", "/dashboard", , null, null), getItem("故障收录检索", "/device", , null, null), getItem( "系统设置", diff --git a/apps/web/src/routes/index.tsx b/apps/web/src/routes/index.tsx index aea469f..251e563 100755 --- a/apps/web/src/routes/index.tsx +++ b/apps/web/src/routes/index.tsx @@ -9,6 +9,8 @@ import { MainLayout } from "../app/main/layout/MainLayout"; import DeviceMessage from "../app/main/devicepage/page"; import AdminLayout from "../components/layout/admin/AdminLayout"; import { adminRoute } from "./admin-route"; +import WithAuth from "../components/utils/with-auth"; +import DashboardPage from "../app/main/devicepage/dashboard/page"; interface CustomIndexRouteObject extends IndexRouteObject { name?: string; breadcrumb?: string; @@ -37,22 +39,26 @@ export const routes: CustomRouteObject[] = [ children: [ { children: [ - { + { index: true, - element: , + element: , }, { path: "/device", - element: , + element: , }, { path: "/admin", - element: , + element: , children: adminRoute.children, } ], },] }, + { + path: "/dashboard", + element: , + }, { path: "/login", breadcrumb: "登录",