import * as React from "react"; import { useState } from "react"; import { FolderRegular, DocumentRegular, DocumentPdfRegular, VideoRegular, ChevronDown16Filled, TextField16Regular, Calendar16Regular, SelectAllOn16Regular, CommentAdd16Regular, MoreHorizontal16Filled, NumberCircle116Regular, Add16Filled } from "@fluentui/react-icons"; import { DataGridBody, DataGridRow, DataGrid, DataGridHeader, DataGridHeaderCell, DataGridCell, TableCellLayout, createTableColumn, Button, Menu, MenuTrigger, MenuList, MenuItem, MenuPopover, Tooltip, MenuDivider, Input, Select, } from "@fluentui/react-components"; import { DatePicker } from "@fluentui/react-datepicker-compat"; const List = (editType) => { // const defaultSelectedItems = React.useMemo(() => new Set([1]), []); //数据类型常量 const DATA_TYPE = { 文本: "文本", 数字: "数字", 日期: "日期", 选项: "选项" } /** * 列头下拉菜单 * @param {*} dataType 表现类型 */ const HeaderMenuList = (props) => { return ( {props.dataType == DATA_TYPE.数字 && { ascendingData(props.columnId); }}>从小到大 } {props.dataType == DATA_TYPE.数字 && { descendingData(props.columnId); }}>从大到小} {(props.dataType == DATA_TYPE.文本 || props.dataType == DATA_TYPE.选项) && { ascendingData(props.columnId); }}>A到Z } {(props.dataType == DATA_TYPE.文本 || props.dataType == DATA_TYPE.选项) && { descendingData(props.columnId); }}>Z到A } {(props.dataType == DATA_TYPE.日期) && { ascendingData(props.columnId); }}>从旧到新 } {(props.dataType == DATA_TYPE.日期) && { descendingData(props.columnId); }}>从新到旧 } 筛选方式 按“{props.columnId}”分组 ); } const [dataSortType, setDataSortType] = useState(({ sortColumn: "序号", sortDirection: "ascending", })); const ascendingData = (columnId) => { setDataSortType(({ sortColumn: columnId, sortDirection: "ascending", })); } const descendingData = (columnId) => { setDataSortType(({ sortColumn: columnId, sortDirection: "descending", })); } /** * 列设置的二级菜单 * @returns */ const HeaderMenuColumnSet = (props) => { return ( 列设置 编辑 隐藏此列 设置此列的格式 向左移动 向右移动 显示/隐藏列 加宽列 窄列 固定到筛选器窗口 添加列 ); } /** * 列头“合计”二级菜单 */ const HeaderMenuAmount = (props) => { return ( 合计 计数 {props.dataType == DATA_TYPE.数字 && 平均值} {props.dataType == DATA_TYPE.数字 && 最大值} {props.dataType == DATA_TYPE.数字 && 最小值} {props.dataType == DATA_TYPE.数字 && 求和} {props.dataType == DATA_TYPE.数字 && 标准偏差} {props.dataType == DATA_TYPE.数字 && 方差} ); } /** * 鼠标移动到姓名列上时,显示两个按钮 * @param item 包含姓名标签的对象 * @returns 返回 JSX 元素 */ const ChangeBtnShowType = (props) => { const [showButton, setShowButton] = useState(false); const handleMouseEnter = () => { setShowButton(true); }; const handleMouseLeave = () => { setShowButton(false); }; return (
{editType.edit == "true" ? : props.cellData} {showButton && (
)}
); }; const tableData = [ { 序号: { label: 1 }, 姓名: { label: "陈丹" }, 性别: { label: "女" }, 年龄: { label: "18岁" }, 最后在线时间: { label: "2024-11-03" }, }, { 序号: { label: 2 }, 姓名: { label: "蔡青松" }, 性别: { label: "男", }, 年龄: { label: "30岁" }, 最后在线时间: { label: "2024-11-04" }, }, { 序号: { label: 3 }, 姓名: { label: "杨东明" }, 性别: { label: "男" }, 年龄: { label: "25岁" }, 最后在线时间: { label: "2024-11-05" }, }, { 序号: { label: 4 }, 姓名: { label: "吴瑞强" }, 性别: { label: "男" }, 年龄: { label: "25岁" }, 最后在线时间: { label: "2024-11-06" }, }, ] const [newTableData, setTabeData] = useState(tableData); /** * 新增空行 */ const AddNewRow = () => { setTabeData(newTableData.concat([{ 序号: { label: newTableData.length + 1 }, 姓名: { label: "" }, 性别: { label: "" }, 年龄: { label: "" }, 最后在线时间: { label: "" }, }])); } return ( { return a.姓名.label.localeCompare(b.姓名.label); }, renderHeaderCell: () => { return ( }> 姓名 ); }, renderCell: (item) => { return }, }), createTableColumn({ columnId: "序号", fixed: true, compare: (a, b) => { return a.序号.label - b.序号.label; }, renderHeaderCell: () => { return ( }> 序号 ); }, renderCell: (item) => { return editType.edit == "true" ? : item.序号.label; }, }), createTableColumn({ columnId: "性别", compare: (a, b) => { return a.性别.label.localeCompare(b.性别.label); }, renderHeaderCell: () => { return ( }> 性别 ); }, renderCell: (item) => { return editType.edit == "true" ? : item.性别.label; }, }), createTableColumn({ columnId: "年龄", compare: (a, b) => { return a.年龄.timestamp - b.年龄.timestamp; }, renderHeaderCell: () => { return ( }> 年龄 ); }, renderCell: (item) => { return item.年龄.label; }, }), createTableColumn({ columnId: "最后在线时间", compare: (a, b) => { return new Date(a.最后在线时间.label) - new Date(b.最后在线时间.label); }, renderHeaderCell: () => { return ( }> 最后在线时间 ); }, renderCell: (item) => { return editType.edit == "true" ? : item.最后在线时间.label; }, }), ]} selectionMode="multiselect" sortable sortState={dataSortType} subtleSelection resizableColumns // defaultSelectedItems={defaultSelectedItems} style={{ minWidth: "550px" }} > {({ renderHeaderCell }) => ( {renderHeaderCell()} )} {({ item, rowId }) => ( {({ renderCell }) => ( {renderCell(item)} )} )} ); }; export default List;