Compare commits

1 Commits

Author SHA1 Message Date
f23b725c81 react-window 2022-05-22 17:06:40 +08:00
3 changed files with 83 additions and 58 deletions

38
package-lock.json generated
View File

@@ -15,7 +15,8 @@
"better-sqlite3": "^7.5.0", "better-sqlite3": "^7.5.0",
"next": "12.1.2", "next": "12.1.2",
"react": "^17.0.2", "react": "^17.0.2",
"react-dom": "^17.0.2" "react-dom": "^17.0.2",
"react-window": "^1.8.7"
}, },
"devDependencies": { "devDependencies": {
"eslint": "8.12.0", "eslint": "8.12.0",
@@ -2996,6 +2997,11 @@
"node": ">=10" "node": ">=10"
} }
}, },
"node_modules/memoize-one": {
"version": "5.2.1",
"resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-5.2.1.tgz",
"integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q=="
},
"node_modules/merge2": { "node_modules/merge2": {
"version": "1.4.1", "version": "1.4.1",
"resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz",
@@ -3561,6 +3567,22 @@
"react-dom": ">=16.6.0" "react-dom": ">=16.6.0"
} }
}, },
"node_modules/react-window": {
"version": "1.8.7",
"resolved": "https://registry.npmmirror.com/react-window/-/react-window-1.8.7.tgz",
"integrity": "sha512-JHEZbPXBpKMmoNO1bNhoXOOLg/ujhL/BU4IqVU9r8eQPcy5KQnGHIHDRkJ0ns9IM5+Aq5LNwt3j8t3tIrePQzA==",
"dependencies": {
"@babel/runtime": "^7.0.0",
"memoize-one": ">=3.1.1 <6"
},
"engines": {
"node": ">8.0.0"
},
"peerDependencies": {
"react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0",
"react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0"
}
},
"node_modules/readable-stream": { "node_modules/readable-stream": {
"version": "2.3.7", "version": "2.3.7",
"resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.7.tgz", "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.7.tgz",
@@ -6445,6 +6467,11 @@
"yallist": "^4.0.0" "yallist": "^4.0.0"
} }
}, },
"memoize-one": {
"version": "5.2.1",
"resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-5.2.1.tgz",
"integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q=="
},
"merge2": { "merge2": {
"version": "1.4.1", "version": "1.4.1",
"resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz",
@@ -6878,6 +6905,15 @@
"prop-types": "^15.6.2" "prop-types": "^15.6.2"
} }
}, },
"react-window": {
"version": "1.8.7",
"resolved": "https://registry.npmmirror.com/react-window/-/react-window-1.8.7.tgz",
"integrity": "sha512-JHEZbPXBpKMmoNO1bNhoXOOLg/ujhL/BU4IqVU9r8eQPcy5KQnGHIHDRkJ0ns9IM5+Aq5LNwt3j8t3tIrePQzA==",
"requires": {
"@babel/runtime": "^7.0.0",
"memoize-one": ">=3.1.1 <6"
}
},
"readable-stream": { "readable-stream": {
"version": "2.3.7", "version": "2.3.7",
"resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.7.tgz", "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.7.tgz",

View File

@@ -16,7 +16,8 @@
"better-sqlite3": "^7.5.0", "better-sqlite3": "^7.5.0",
"next": "12.1.2", "next": "12.1.2",
"react": "^17.0.2", "react": "^17.0.2",
"react-dom": "^17.0.2" "react-dom": "^17.0.2",
"react-window": "^1.8.7"
}, },
"devDependencies": { "devDependencies": {
"eslint": "8.12.0", "eslint": "8.12.0",

View File

@@ -9,15 +9,13 @@ import {
DialogTitle, DialogTitle,
DialogContent, DialogContent,
DialogActions, DialogActions,
List,
ListItem,
ListItemText,
Typography, Typography,
TextField, TextField,
TableContainer,
Table,
TableHead,
TableRow,
TableCell,
TableBody,
} from "@mui/material"; } from "@mui/material";
import { FixedSizeList } from "react-window";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import config from "../next.config"; import config from "../next.config";
@@ -330,56 +328,46 @@ export default function Time(props) {
服务器负载 (QPS): {stats.apiqps} 服务器负载 (QPS): {stats.apiqps}
</Typography> </Typography>
</Box> </Box>
<TableContainer>
<Table> <Box sx={{
<TableHead> height: "100%",
<TableRow> }}>
<TableCell>名称</TableCell> <FixedSizeList
<TableCell>时间段</TableCell> height={500}
<TableCell>操作</TableCell> width={"100%"}
</TableRow> itemSize={50}
</TableHead> itemData={ranges}
<TableBody> itemCount={ranges.length}
{ranges.map((range) => ( innerElementType={List}
<TableRow key={range.id}> style={{
<TableCell>{range.name}</TableCell> maxWidth: "29rem",
<TableCell>{range.range}</TableCell> }}
<TableCell> >
<Button {({ index, style, data }) => {
sx={{ const range = data[index];
userSelect: "none", return (
}} <ListItem style={style} key={index}>
disabled={range.username !== ""} <Button
variant="contained" sx={{
color="primary" userSelect: "none",
onClick={() => updateUsername(range.id, props.username)} mx: "1rem",
> }}
{range.username ? range.username : "抢!"} disabled={range.username !== ""}
</Button> variant="contained"
{isAdmin() && ( color="primary"
<> onClick={() => updateUsername(range.id, props.username)}
<Button >
variant="contained" {range.username ? range.username : "抢!"}
color="secondary" </Button>
onClick={() => setModifyTime(range)} <ListItemText>
> {range.name} {range.range}
修改 </ListItemText>
</Button> </ListItem>
<Button );
variant="contained" }}
color="secondary" </FixedSizeList>
onClick={() => deleteRange(range.id)} </Box>
>
删除
</Button>
</>
)}
</TableCell>
</TableRow>
))}
</TableBody>
</Table>
</TableContainer>
<Snackbar <Snackbar
open={snackbarError} open={snackbarError}
autoHideDuration={1000} autoHideDuration={1000}