feat: enhance SettingsLog component with confirmation modal for log deletion and improve user feedback

This commit is contained in:
CaIon
2025-10-05 22:51:28 +08:00
parent 1ffbf8918c
commit a058cb1180

View File

@@ -18,7 +18,7 @@ For commercial licensing, please contact support@quantumnous.com
*/
import React, { useEffect, useState, useRef } from 'react';
import { Button, Col, Form, Row, Spin, DatePicker } from '@douyinfe/semi-ui';
import { Button, Col, Form, Row, Spin, DatePicker, Typography, Modal } from '@douyinfe/semi-ui';
import dayjs from 'dayjs';
import { useTranslation } from 'react-i18next';
import {
@@ -29,6 +29,8 @@ import {
showWarning,
} from '../../../helpers';
const { Text } = Typography;
export default function SettingsLog(props) {
const { t } = useTranslation();
const [loading, setLoading] = useState(false);
@@ -78,24 +80,75 @@ export default function SettingsLog(props) {
});
}
async function onCleanHistoryLog() {
try {
setLoadingCleanHistoryLog(true);
if (!inputs.historyTimestamp) throw new Error(t('请选择日志记录时间'));
const res = await API.delete(
`/api/log/?target_timestamp=${Date.parse(inputs.historyTimestamp) / 1000}`,
);
const { success, message, data } = res.data;
if (success) {
showSuccess(`${data} ${t('条日志已清理!')}`);
return;
} else {
throw new Error(t('日志清理失败:') + message);
}
} catch (error) {
showError(error.message);
} finally {
setLoadingCleanHistoryLog(false);
if (!inputs.historyTimestamp) {
showError(t('请选择日志记录时间'));
return;
}
const now = dayjs();
const targetDate = dayjs(inputs.historyTimestamp);
const targetTime = targetDate.format('YYYY-MM-DD HH:mm:ss');
const currentTime = now.format('YYYY-MM-DD HH:mm:ss');
const daysDiff = now.diff(targetDate, 'day');
Modal.confirm({
title: t('确认清除历史日志'),
content: (
<div style={{ lineHeight: '1.8' }}>
<p>
<Text>{t('当前时间')}</Text>
<Text strong style={{ color: '#52c41a' }}>{currentTime}</Text>
</p>
<p>
<Text>{t('选择时间')}</Text>
<Text strong type="danger">{targetTime}</Text>
{daysDiff > 0 && (
<Text type="tertiary"> ({t('约')} {daysDiff} {t('天前')})</Text>
)}
</p>
<div style={{
background: '#fff7e6',
border: '1px solid #ffd591',
padding: '12px',
borderRadius: '4px',
marginTop: '12px'
}}>
<Text type="warning" strong> {t('注意')}</Text>
<Text>{t('将删除')} </Text>
<Text strong type="danger">{targetTime}</Text>
{daysDiff > 0 && (
<Text type="tertiary"> ({t('约')} {daysDiff} {t('天前')})</Text>
)}
<Text> {t('之前的所有日志')}</Text>
</div>
<p style={{ marginTop: '12px' }}>
<Text type="danger">{t('此操作不可恢复,请仔细确认时间后再操作!')}</Text>
</p>
</div>
),
okText: t('确认删除'),
cancelText: t('取消'),
okType: 'danger',
onOk: async () => {
try {
setLoadingCleanHistoryLog(true);
const res = await API.delete(
`/api/log/?target_timestamp=${Date.parse(inputs.historyTimestamp) / 1000}`,
);
const { success, message, data } = res.data;
if (success) {
showSuccess(`${data} ${t('条日志已清理!')}`);
return;
} else {
throw new Error(t('日志清理失败:') + message);
}
} catch (error) {
showError(error.message);
} finally {
setLoadingCleanHistoryLog(false);
}
},
});
}
useEffect(() => {
@@ -138,7 +191,7 @@ export default function SettingsLog(props) {
<Col xs={24} sm={12} md={8} lg={8} xl={8}>
<Spin spinning={loadingCleanHistoryLog}>
<Form.DatePicker
label={t('日志记录时间')}
label={t('清除历史日志')}
field={'historyTimestamp'}
type='dateTime'
inputReadOnly={true}
@@ -149,7 +202,10 @@ export default function SettingsLog(props) {
});
}}
/>
<Button size='default' onClick={onCleanHistoryLog}>
<Text type="tertiary" size="small" style={{ display: 'block', marginTop: 4, marginBottom: 8 }}>
{t('将清除选定时间之前的所有日志')}
</Text>
<Button size='default' type='danger' onClick={onCleanHistoryLog}>
{t('清除历史日志')}
</Button>
</Spin>