From 926b60214e2fa81f26beb4d4325949241d820b3e Mon Sep 17 00:00:00 2001
From: HFO4 <912394456@qq.com>
Date: Sun, 31 Oct 2021 09:35:37 +0800
Subject: [PATCH] Feat: edit node
---
src/Admin.js | 5 ++
src/component/Admin/Node/EditNode.js | 55 +++++++++++++++++++++
src/component/Admin/Node/Guide/Aria2RPC.js | 30 +++++------
src/component/Admin/Node/Guide/NodeGuide.js | 12 ++---
4 files changed, 81 insertions(+), 21 deletions(-)
create mode 100644 src/component/Admin/Node/EditNode.js
diff --git a/src/Admin.js b/src/Admin.js
index c65b042..701036b 100644
--- a/src/Admin.js
+++ b/src/Admin.js
@@ -34,6 +34,7 @@ import Import from "./component/Admin/File/Import";
import Captcha from "./component/Admin/Setting/Captcha";
import Node from "./component/Admin/Node/Node";
import AddNode from "./component/Admin/Node/AddNode";
+import EditNode from "./component/Admin/Node/EditNode";
const useStyles = makeStyles((theme) => ({
root: {
@@ -193,6 +194,10 @@ export default function Admin() {
+
+
+
+
)}
/>
diff --git a/src/component/Admin/Node/EditNode.js b/src/component/Admin/Node/EditNode.js
new file mode 100644
index 0000000..016f947
--- /dev/null
+++ b/src/component/Admin/Node/EditNode.js
@@ -0,0 +1,55 @@
+import React, { useCallback, useEffect, useState } from "react";
+import { makeStyles } from "@material-ui/core/styles";
+import Paper from "@material-ui/core/Paper";
+import NodeGuide from "./Guide/NodeGuide";
+import { useParams } from "react-router";
+import { useDispatch } from "react-redux";
+import { toggleSnackbar } from "../../../actions";
+import API from "../../../middleware/Api";
+
+const useStyles = makeStyles((theme) => ({
+ root: {
+ [theme.breakpoints.up("md")]: {
+ marginLeft: 100,
+ },
+ marginBottom: 40,
+ },
+ content: {
+ padding: theme.spacing(2),
+ },
+}));
+
+export default function EditNode() {
+ const classes = useStyles();
+ const { id } = useParams();
+ const [node, setNode] = useState(null);
+
+ const dispatch = useDispatch();
+ const ToggleSnackbar = useCallback(
+ (vertical, horizontal, msg, color) =>
+ dispatch(toggleSnackbar(vertical, horizontal, msg, color)),
+ [dispatch]
+ );
+
+ useEffect(() => {
+ API.get("/admin/node/" + id)
+ .then((response) => {
+ response.data.Rank = response.data.Rank.toString();
+ response.data.Aria2Enabled = response.data.Aria2Enabled
+ ? "true"
+ : "false";
+ setNode(response.data);
+ })
+ .catch((error) => {
+ ToggleSnackbar("top", "right", error.message, "error");
+ });
+ }, [id]);
+
+ return (
+
+ );
+}
diff --git a/src/component/Admin/Node/Guide/Aria2RPC.js b/src/component/Admin/Node/Guide/Aria2RPC.js
index fcde8fe..b1f937e 100644
--- a/src/component/Admin/Node/Guide/Aria2RPC.js
+++ b/src/component/Admin/Node/Guide/Aria2RPC.js
@@ -100,8 +100,8 @@ export default function Aria2RPC(props) {
type: props.node.Type,
server: props.node.Server,
secret: props.node.SlaveKey,
- rpc: props.node.Aria2OptionsSerialized.Server,
- token: props.node.Aria2OptionsSerialized.Token,
+ rpc: props.node.Aria2OptionsSerialized.server,
+ token: props.node.Aria2OptionsSerialized.token,
})
.then((response) => {
ToggleSnackbar(
@@ -219,7 +219,7 @@ export default function Aria2RPC(props) {
# RPC 授权令牌,可自行设定
- rpc-secure={props.node.Aria2OptionsSerialized.Token}
+ rpc-secret={props.node.Aria2OptionsSerialized.token}
@@ -254,10 +254,10 @@ export default function Aria2RPC(props) {
required
type={"url"}
value={
- props.node.Aria2OptionsSerialized.Server
+ props.node.Aria2OptionsSerialized.server
}
onChange={props.handleOptionChange(
- "Server"
+ "server"
)}
/>
@@ -281,8 +281,8 @@ export default function Aria2RPC(props) {
@@ -301,9 +301,9 @@ export default function Aria2RPC(props) {
@@ -331,10 +331,10 @@ export default function Aria2RPC(props) {
required
value={
props.node.Aria2OptionsSerialized
- .Interval
+ .interval
}
onChange={props.handleOptionChange(
- "Interval"
+ "interval"
)}
/>
@@ -356,10 +356,10 @@ export default function Aria2RPC(props) {
required
value={
props.node.Aria2OptionsSerialized
- .Timeout
+ .timeout
}
onChange={props.handleOptionChange(
- "Timeout"
+ "timeout"
)}
/>
@@ -377,10 +377,10 @@ export default function Aria2RPC(props) {
required
value={
props.node.Aria2OptionsSerialized
- .Options
+ .options
}
onChange={props.handleOptionChange(
- "Options"
+ "options"
)}
/>
diff --git a/src/component/Admin/Node/Guide/NodeGuide.js b/src/component/Admin/Node/Guide/NodeGuide.js
index e399ca4..873076e 100644
--- a/src/component/Admin/Node/Guide/NodeGuide.js
+++ b/src/component/Admin/Node/Guide/NodeGuide.js
@@ -63,9 +63,9 @@ export default function NodeGuide(props) {
MasterKey: randomStr(64),
Rank: "0",
Aria2OptionsSerialized: {
- Token: randomStr(32),
- Options: "{}",
- Interval: 10,
+ token: randomStr(32),
+ options: "{}",
+ interval: 10,
},
}
);
@@ -88,8 +88,8 @@ export default function NodeGuide(props) {
const handleOptionChange = (name) => (event) => {
setNode({
...node,
- Aria2Options: {
- ...node.Aria2Options,
+ Aria2OptionsSerialized: {
+ ...node.Aria2OptionsSerialized,
[name]: event.target.value,
},
});
@@ -119,7 +119,7 @@ export default function NodeGuide(props) {
ToggleSnackbar(
"top",
"right",
- "节点已" + (props.policy ? "保存" : "添加"),
+ "节点已" + (props.node ? "保存" : "添加"),
"success"
);
setActiveStep(activeStep + 1);