Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
new-api
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
c395fc28
authored
May 11, 2024
by
QuentinHsu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactor: 运营设置-数据看板设置
parent
d38839d3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
155 additions
and
41 deletions
+155
-41
web/src/components/OperationSetting.js
+7
-41
web/src/pages/Setting/Operation/SettingsDataDashboard.js
+147
-0
web/src/pages/Setting/Operation/SettingsDrawing.js
+1
-0
No files found.
web/src/components/OperationSetting.js
View file @
c395fc28
...
...
@@ -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 = () => {
<
Card
style
=
{{
marginTop
:
'10px'
}}
>
<
SettingsLog
options
=
{
inputs
}
/
>
<
/Card
>
{
/* 数据看板 */
}
<
Card
style
=
{{
marginTop
:
'10px'
}}
>
<
SettingsDataDashboard
options
=
{
inputs
}
/
>
<
/Card
>
<
Grid
columns
=
{
1
}
>
<
Grid
.
Column
>
<
Form
loading
=
{
loading
}
inverted
=
{
isDark
}
>
...
...
@@ -265,37 +262,6 @@ const OperationSetting = () => {
{
/* />*/
}
{
/*</Form.Group>*/
}
<
Header
as
=
'h3'
inverted
=
{
isDark
}
>
数据看板
<
/Header
>
<
Form
.
Checkbox
checked
=
{
inputs
.
DataExportEnabled
===
'true'
}
label
=
'启用数据看板(实验性)'
name
=
'DataExportEnabled'
onChange
=
{
handleInputChange
}
/
>
<
Form
.
Group
>
<
Form
.
Input
label
=
'数据看板更新间隔(分钟,设置过短会影响数据库性能)'
name
=
'DataExportInterval'
type
=
{
'number'
}
step
=
'1'
min
=
'1'
onChange
=
{
handleInputChange
}
autoComplete
=
'new-password'
value
=
{
inputs
.
DataExportInterval
}
placeholder
=
'数据看板更新间隔(分钟,设置过短会影响数据库性能)'
/>
<
Form
.
Select
label
=
'数据看板默认时间粒度(仅修改展示粒度,统计精确到小时)'
options
=
{
timeOptions
}
name
=
'DataExportDefaultTime'
onChange
=
{
handleInputChange
}
autoComplete
=
'new-password'
value
=
{
inputs
.
DataExportDefaultTime
}
placeholder
=
'数据看板默认时间粒度'
/>
<
/Form.Group
>
<
Divider
/>
<
Header
as
=
'h3'
inverted
=
{
isDark
}
>
监控设置
...
...
web/src/pages/Setting/Operation/SettingsDataDashboard.js
0 → 100644
View file @
c395fc28
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
(
<>
<
Spin
spinning
=
{
loading
}
>
<
Form
values
=
{
inputs
}
getFormApi
=
{(
formAPI
)
=>
(
refForm
.
current
=
formAPI
)}
style
=
{{
marginBottom
:
15
}}
>
<
Form
.
Section
text
=
{
'数据看板设置'
}
>
<
Row
gutter
=
{
16
}
>
<
Col
span
=
{
8
}
>
<
Form
.
Switch
field
=
{
'DataExportEnabled'
}
label
=
{
'启用数据看板(实验性)'
}
size
=
'large'
checkedText
=
'|'
uncheckedText
=
'〇'
onChange
=
{(
value
)
=>
{
setInputs
({
...
inputs
,
DataExportEnabled
:
value
,
});
}}
/
>
<
/Col
>
<
/Row
>
<
Row
>
<
Col
span
=
{
8
}
>
<
Form
.
InputNumber
label
=
{
'数据看板更新间隔 '
}
step
=
{
1
}
min
=
{
1
}
suffix
=
{
'分钟'
}
extraText
=
{
'设置过短会影响数据库性能'
}
placeholder
=
{
'数据看板更新间隔'
}
field
=
{
'DataExportInterval'
}
onChange
=
{(
value
)
=>
setInputs
({
...
inputs
,
DataExportInterval
:
String
(
value
),
})
}
/
>
<
/Col
>
<
Col
span
=
{
8
}
>
<
Form
.
Select
label
=
'数据看板默认时间粒度'
optionList
=
{
optionsDataExportDefaultTime
}
field
=
{
'DataExportDefaultTime'
}
extraText
=
{
'仅修改展示粒度,统计精确到小时'
}
placeholder
=
{
'数据看板默认时间粒度'
}
style
=
{{
width
:
180
}}
onChange
=
{(
value
)
=>
setInputs
({
...
inputs
,
DataExportDefaultTime
:
String
(
value
),
})
}
/
>
<
/Col
>
<
/Row
>
<
Row
>
<
Button
size
=
'large'
onClick
=
{
onSubmit
}
>
保存数据看板设置
<
/Button
>
<
/Row
>
<
/Form.Section
>
<
/Form
>
<
/Spin
>
<
/
>
);
}
web/src/pages/Setting/Operation/SettingsDrawing.js
View file @
c395fc28
...
...
@@ -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
(
<>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment