import intl from 'react-intl-universal'; import React, { useState, useEffect, useRef } from 'react'; import { Button, InputNumber, Form, Radio, message, Input, Upload, Modal, Select, } 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'; import pick from 'lodash/pick'; const dataMap = { 'log-remove-frequency': 'logRemoveFrequency', 'cron-concurrency': 'cronConcurrency', }; const Other = ({ systemInfo, 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 [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 handleLangChange = (v: string) => { localStorage.setItem('lang', v); setTimeout(() => { window.location.reload(); }, 500); }; 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 = (path: keyof typeof dataMap) => { request .put( `${config.apiPrefix}system/config/${path}`, pick(systemConfig, dataMap[path]), ) .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('备份数据上传成功,确认覆盖数据')}
{intl.get('如果恢复失败,可进入容器执行')} ql reload data
), 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 (
{intl.get('亮色')} {intl.get('暗色')} {intl.get('跟随系统')} { setSystemConfig({ ...systemConfig, logRemoveFrequency: value }); }} /> { setSystemConfig({ ...systemConfig, cronConcurrency: value }); }} />