diff --git a/web/src/components/OperationSetting.js b/web/src/components/OperationSetting.js
index 829e981..3da0dcc 100644
--- a/web/src/components/OperationSetting.js
+++ b/web/src/components/OperationSetting.js
@@ -1,8 +1,10 @@
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 SettingsGeneral from '../pages/Setting/Operation/SettingsGeneral.js';
+import SettingsDrawing from '../pages/Setting/Operation/SettingsDrawing.js';
+import SettingsSensitiveWords from '../pages/Setting/Operation/SettingsSensitiveWords.js';
+
import {
API,
showError,
@@ -238,40 +240,19 @@ const OperationSetting = () => {
<>
{/* 通用设置 */}
-
+
{/* 绘图设置 */}
-
+
+
+ {/* 屏蔽词过滤设置 */}
+
+
-
-
-
-
- {/**/}
-
{/**/}
{/* {
{/* placeholder="例如:10"*/}
{/* />*/}
{/**/}
-
-
-
- {
- submitConfig('words').then();
- }}
- >
- 保存屏蔽词设置
-
-
+
diff --git a/web/src/pages/Setting/Operation/DrawingSettings.js b/web/src/pages/Setting/Operation/SettingsDrawing.js
similarity index 99%
rename from web/src/pages/Setting/Operation/DrawingSettings.js
rename to web/src/pages/Setting/Operation/SettingsDrawing.js
index 46187f0..4815d2f 100644
--- a/web/src/pages/Setting/Operation/DrawingSettings.js
+++ b/web/src/pages/Setting/Operation/SettingsDrawing.js
@@ -8,7 +8,7 @@ import {
showWarning,
} from '../../../helpers';
-export default function GeneralSettings(props) {
+export default function SettingsDrawing(props) {
const [loading, setLoading] = useState(false);
const [inputs, setInputs] = useState({
DrawingEnabled: false,
diff --git a/web/src/pages/Setting/Operation/GeneralSettings.js b/web/src/pages/Setting/Operation/SettingsGeneral.js
similarity index 100%
rename from web/src/pages/Setting/Operation/GeneralSettings.js
rename to web/src/pages/Setting/Operation/SettingsGeneral.js
diff --git a/web/src/pages/Setting/Operation/SettingsSensitiveWords.js b/web/src/pages/Setting/Operation/SettingsSensitiveWords.js
new file mode 100644
index 0000000..3a2a4cd
--- /dev/null
+++ b/web/src/pages/Setting/Operation/SettingsSensitiveWords.js
@@ -0,0 +1,139 @@
+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 SettingsSensitiveWords(props) {
+ const [loading, setLoading] = useState(false);
+ const [inputs, setInputs] = useState({
+ CheckSensitiveEnabled: false,
+ CheckSensitiveOnPromptEnabled: false,
+ SensitiveWords: '',
+ });
+ 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,
+ CheckSensitiveEnabled: value,
+ });
+ }}
+ />
+
+
+
+ setInputs({
+ ...inputs,
+ CheckSensitiveOnPromptEnabled: value,
+ })
+ }
+ />
+
+
+
+
+
+ setInputs({
+ ...inputs,
+ SensitiveWords: value,
+ })
+ }
+ style={{ fontFamily: 'JetBrains Mono, Consolas' }}
+ autosize={{ minRows: 6, maxRows: 12 }}
+ />
+
+
+
+
+
+
+
+
+ >
+ );
+}