diff --git a/web/src/components/OperationSetting.js b/web/src/components/OperationSetting.js index 6835e1a..09acab0 100644 --- a/web/src/components/OperationSetting.js +++ b/web/src/components/OperationSetting.js @@ -5,6 +5,7 @@ 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 SettingsLog from '../pages/Setting/Operation/SettingsLog.js'; +import SettingsDataDashboard from '../pages/Setting/Operation/SettingsDataDashboard.js'; import { API, @@ -48,7 +49,7 @@ const OperationSetting = () => { MjModeClearEnabled: false, MjForwardUrlEnabled: false, DrawingEnabled: false, - DataExportEnabled: '', + DataExportEnabled: false, DataExportDefaultTime: 'hour', DataExportInterval: 5, DefaultCollapseSidebar: false, // 默认折叠侧边栏 @@ -56,15 +57,7 @@ const OperationSetting = () => { }); const [originInputs, setOriginInputs] = useState({}); let [loading, setLoading] = useState(false); - let [historyTimestamp, setHistoryTimestamp] = useState( - timestamp2string(now.getTime() / 1000 - 30 * 24 * 3600), - ); // a month ago - // 精确时间选项(小时,天,周) - const timeOptions = [ - { key: 'hour', text: '小时', value: 'hour' }, - { key: 'day', text: '天', value: 'day' }, - { key: 'week', text: '周', value: 'week' }, - ]; + const getOptions = async () => { const res = await API.get('/api/option/'); const { success, message, data } = res.data; @@ -242,6 +235,10 @@ const OperationSetting = () => { + {/* 数据看板 */} + + +
@@ -265,37 +262,6 @@ const OperationSetting = () => { {/* />*/} {/**/} -
- 数据看板 -
- - - - -
监控设置 diff --git a/web/src/pages/Setting/Operation/SettingsDataDashboard.js b/web/src/pages/Setting/Operation/SettingsDataDashboard.js new file mode 100644 index 0000000..85fd1dc --- /dev/null +++ b/web/src/pages/Setting/Operation/SettingsDataDashboard.js @@ -0,0 +1,147 @@ +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 DataDashboard(props) { + const optionsDataExportDefaultTime = [ + { key: 'hour', label: '小时', value: 'hour' }, + { key: 'day', label: '天', value: 'day' }, + { key: 'week', label: '周', value: 'week' }, + ]; + const [loading, setLoading] = useState(false); + const [inputs, setInputs] = useState({ + DataExportEnabled: false, + DataExportInterval: '', + DataExportDefaultTime: '', + }); + 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); + localStorage.setItem( + 'data_export_default_time', + String(inputs.DataExportDefaultTime), + ); + }, [props.options]); + + return ( + <> + + (refForm.current = formAPI)} + style={{ marginBottom: 15 }} + > + + + + { + setInputs({ + ...inputs, + DataExportEnabled: value, + }); + }} + /> + + + + + + setInputs({ + ...inputs, + DataExportInterval: String(value), + }) + } + /> + + + + setInputs({ + ...inputs, + DataExportDefaultTime: String(value), + }) + } + /> + + + + + + + + + + ); +} diff --git a/web/src/pages/Setting/Operation/SettingsDrawing.js b/web/src/pages/Setting/Operation/SettingsDrawing.js index 085cfd1..560bbc7 100644 --- a/web/src/pages/Setting/Operation/SettingsDrawing.js +++ b/web/src/pages/Setting/Operation/SettingsDrawing.js @@ -64,6 +64,7 @@ export default function SettingsDrawing(props) { setInputs(currentInputs); setInputsRow(structuredClone(currentInputs)); refForm.current.setValues(currentInputs); + localStorage.setItem('mj_notify_enabled', String(inputs.MjNotifyEnabled)); }, [props.options]); return ( <>