import intl from 'react-intl-universal'; import React, { useState, useEffect, useRef } from 'react'; import { Button, InputNumber, Form, Radio, message, Input, Upload, Modal, Progress, } from 'antd'; import * as DarkReader from '@umijs/ssr-darkreader'; import config from '@/utils/config'; import { request } from '@/utils/http'; import CheckUpdate from './checkUpdate'; import { SharedContext } from '@/layouts'; import { saveAs } from 'file-saver'; import './index.less'; import { UploadOutlined } from '@ant-design/icons'; import Countdown from 'antd/lib/statistic/Countdown'; import useProgress from './progress'; const optionsWithDisabled = [ { label: intl.get('亮色'), value: 'light' }, { label: intl.get('暗色'), value: 'dark' }, { label: intl.get('跟随系统'), value: 'auto' }, ]; const Other = ({ systemInfo, socketMessage, reloadTheme, }: Pick) => { const defaultTheme = localStorage.getItem('qinglong_dark_theme') || 'auto'; const [systemConfig, setSystemConfig] = useState<{ logRemoveFrequency?: number | null; cronConcurrency?: number | null; }>(); const [form] = Form.useForm(); const modalRef = useRef(); const [exportLoading, setExportLoading] = useState(false); const showUploadProgress = useProgress(intl.get('上传')); const showDownloadProgress = useProgress(intl.get('下载')); const { enable: enableDarkMode, disable: disableDarkMode, exportGeneratedCSS: collectCSS, setFetchMethod, auto: followSystemColorScheme, } = DarkReader || {}; const themeChange = (e: any) => { const _theme = e.target.value; localStorage.setItem('qinglong_dark_theme', e.target.value); setFetchMethod(fetch); if (_theme === 'dark') { enableDarkMode({}); } else if (_theme === 'light') { disableDarkMode(); } else { followSystemColorScheme({}); } reloadTheme(); }; const getSystemConfig = () => { request .get(`${config.apiPrefix}system/config`) .then(({ code, data }) => { if (code === 200 && data.info) { setSystemConfig(data.info); } }) .catch((error: any) => { console.log(error); }); }; const updateSystemConfig = () => { request .put(`${config.apiPrefix}system/config`, systemConfig) .then(({ code, data }) => { if (code === 200) { message.success(intl.get('更新成功')); } }) .catch((error: any) => { console.log(error); }); }; const exportData = () => { setExportLoading(true); request .put( `${config.apiPrefix}system/data/export`, {}, { responseType: 'blob', timeout: 86400000, onDownloadProgress: (e) => { if (e.progress) { showDownloadProgress(parseFloat((e.progress * 100).toFixed(1))); } }, }, ) .then((res) => { saveAs(res, 'data.tgz'); }) .catch((error: any) => { console.log(error); }) .finally(() => setExportLoading(false)); }; const showReloadModal = () => { Modal.confirm({ width: 600, maskClosable: false, title: intl.get('确认重启'), centered: true, content: intl.get('备份数据上传成功,确认覆盖数据'), okText: intl.get('重启'), onOk() { request .put(`${config.apiPrefix}system/reload`, { type: 'data' }) .then(() => { message.success({ content: ( {intl.get('系统将在')} {intl.get('秒后自动刷新')} ), duration: 30, }); setTimeout(() => { window.location.reload(); }, 30000); }) .catch((error: any) => { console.log(error); }); }, }); }; useEffect(() => { getSystemConfig(); }, []); return (
{ setSystemConfig({ ...systemConfig, logRemoveFrequency: value }); }} /> { setSystemConfig({ ...systemConfig, cronConcurrency: value }); }} /> { if (e.event?.percent) { showUploadProgress(parseFloat(e.event?.percent.toFixed(1))); if (e.event?.percent === 100) { showReloadModal(); } } }} name="data" headers={{ Authorization: `Bearer ${localStorage.getItem(config.authKey)}`, }} >
); }; export default Other;