diff --git a/web/src/components/OperationSetting.js b/web/src/components/OperationSetting.js
index ecf3d77..829e981 100644
--- a/web/src/components/OperationSetting.js
+++ b/web/src/components/OperationSetting.js
@@ -2,6 +2,7 @@ import React, { useEffect, useState } from 'react';
import { Divider, Form, Grid, Header } from 'semantic-ui-react';
import { Card } from '@douyinfe/semi-ui';
import GeneralSettings from '../pages/Setting/Operation/GeneralSettings.js';
+import DrawingSettings from '../pages/Setting/Operation/DrawingSettings.js';
import {
API,
showError,
@@ -235,50 +236,17 @@ const OperationSetting = () => {
};
return (
<>
+ {/* 通用设置 */}
- {/* 通用设置 */}
+ {/* 绘图设置 */}
+
+
+
-
-
-
-
-
-
-
diff --git a/web/src/pages/Setting/Operation/DrawingSettings.js b/web/src/pages/Setting/Operation/DrawingSettings.js
new file mode 100644
index 0000000..46187f0
--- /dev/null
+++ b/web/src/pages/Setting/Operation/DrawingSettings.js
@@ -0,0 +1,179 @@
+import React, { useEffect, useState, useRef } from 'react';
+import { Button, Col, Form, Row, Spin, Tag } from '@douyinfe/semi-ui';
+import {
+ compareObjects,
+ API,
+ showError,
+ showSuccess,
+ showWarning,
+} from '../../../helpers';
+
+export default function GeneralSettings(props) {
+ const [loading, setLoading] = useState(false);
+ const [inputs, setInputs] = useState({
+ DrawingEnabled: false,
+ MjNotifyEnabled: false,
+ MjAccountFilterEnabled: false,
+ MjForwardUrlEnabled: false,
+ MjModeClearEnabled: false,
+ });
+ const refForm = useRef();
+ const [inputsRow, setInputsRow] = useState(inputs);
+
+ function onSubmit() {
+ const updateArray = compareObjects(inputs, inputsRow);
+ if (!updateArray.length) return showWarning('你似乎并没有修改什么');
+ const requestQueue = updateArray.map((item) => {
+ let value = '';
+ if (typeof inputs[item.key] === 'boolean') {
+ value = String(inputs[item.key]);
+ } else {
+ value = inputs[item.key];
+ }
+ return API.put('/api/option/', {
+ key: item.key,
+ value,
+ });
+ });
+ setLoading(true);
+ Promise.all(requestQueue)
+ .then((res) => {
+ if (requestQueue.length === 1) {
+ if (res.includes(undefined)) return;
+ } else if (requestQueue.length > 1) {
+ if (res.includes(undefined)) return showError('部分更新失败');
+ }
+ showSuccess('更新成功');
+ })
+ .catch(() => {
+ showError('更新失败');
+ })
+ .finally(() => {
+ setLoading(false);
+ setInputsRow(structuredClone(inputs));
+ });
+ }
+
+ useEffect(() => {
+ const currentInputs = {};
+ for (let key in props.options) {
+ if (Object.keys(inputs).includes(key)) {
+ currentInputs[key] = props.options[key];
+ }
+ }
+ setInputs(currentInputs);
+ setInputsRow(structuredClone(currentInputs));
+ refForm.current.setValues(currentInputs);
+ }, [props.options]);
+ return (
+ <>
+
+
+
+
+ {
+ setInputs({
+ ...inputs,
+ DrawingEnabled: value,
+ });
+ }}
+ />
+
+
+
+ setInputs({
+ ...inputs,
+ MjNotifyEnabled: value,
+ })
+ }
+ />
+
+
+
+ setInputs({
+ ...inputs,
+ MjAccountFilterEnabled: value,
+ })
+ }
+ />
+
+
+
+ setInputs({
+ ...inputs,
+ MjForwardUrlEnabled: value,
+ })
+ }
+ />
+
+
+
+ 开启之后会清除用户提示词中的 --fast 、
+ --relax 以及 --turbo 参数
+ >
+ }
+ size='large'
+ checkedText='|'
+ uncheckedText='〇'
+ defaultChecked={false}
+ checked={false}
+ onChange={(value) =>
+ setInputs({
+ ...inputs,
+ MjModeClearEnabled: value,
+ })
+ }
+ />
+
+
+
+
+
+
+
+
+ >
+ );
+}