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 ( + <> + + (refForm.current = formAPI)} + style={{ marginBottom: 15 }} + > + + + + { + 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, + }) + } + /> + + + + + + + + + + ); +}