feat: Добавлена вкладка управления резервными копиями.
This commit is contained in:
parent
1a12d389fc
commit
22c1a9ca80
35
web-app/src/Api/backupsApi.js
Normal file
35
web-app/src/Api/backupsApi.js
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
import {createApi} from "@reduxjs/toolkit/query/react";
|
||||||
|
import {baseQueryWithAuth} from "./baseQuery.js";
|
||||||
|
|
||||||
|
|
||||||
|
export const backupsApi = createApi({
|
||||||
|
reducerPath: 'backupsApi',
|
||||||
|
baseQuery: baseQueryWithAuth,
|
||||||
|
tagTypes: ['Backup'],
|
||||||
|
endpoints: (builder) => ({
|
||||||
|
getBackups: builder.query({
|
||||||
|
query: () => `/backups/`,
|
||||||
|
providesTags: ['Backup'],
|
||||||
|
}),
|
||||||
|
createBackup: builder.mutation({
|
||||||
|
query: () => ({
|
||||||
|
url: '/backups/',
|
||||||
|
method: 'POST',
|
||||||
|
}),
|
||||||
|
invalidatesTags: ['Backup'],
|
||||||
|
}),
|
||||||
|
deleteBackup: builder.mutation({
|
||||||
|
query: (backupId) => ({
|
||||||
|
url: `/backups/${backupId}/`,
|
||||||
|
method: 'DELETE',
|
||||||
|
}),
|
||||||
|
invalidatesTags: ['Backup'],
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
export const {
|
||||||
|
useGetBackupsQuery,
|
||||||
|
useCreateBackupMutation,
|
||||||
|
useDeleteBackupMutation,
|
||||||
|
} = backupsApi;
|
||||||
@ -1,24 +1,30 @@
|
|||||||
import {Button, Space, Spin, Typography, Upload} from "antd";
|
import {Button, Divider, List, Result, Space, Typography, Upload} from "antd";
|
||||||
import {CloudDownloadOutlined, UploadOutlined} from "@ant-design/icons";
|
import {CloudDownloadOutlined, UploadOutlined} from "@ant-design/icons";
|
||||||
|
import useBackupManageTab from "./useBackupManageTab.js";
|
||||||
|
import LoadingIndicator from "../../../../Widgets/LoadingIndicator/LoadingIndicator.jsx";
|
||||||
|
|
||||||
const BackupManageTab = () => {
|
const BackupManageTab = () => {
|
||||||
|
const backupManageTabData = useBackupManageTab();
|
||||||
|
|
||||||
|
if (backupManageTabData.isLoadingBackups) {
|
||||||
|
return <LoadingIndicator/>;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (backupManageTabData.isErrorBackups) {
|
||||||
|
return <Result status={500} title="Произошла ошибка при загрузке резервных копий"/>
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Spin spinning={false}>
|
<>
|
||||||
<Typography>
|
<Space direction="horizontal" size="large" style={{width: "100%"}}>
|
||||||
<Typography.Title level={4}>Управление резервными копиями</Typography.Title>
|
|
||||||
<Typography.Paragraph>
|
|
||||||
Здесь вы можете создать резервную копию системы и восстановить её из архива.
|
|
||||||
</Typography.Paragraph>
|
|
||||||
</Typography>
|
|
||||||
<Space direction="vertical" size="large" style={{width: "100%"}}>
|
|
||||||
<Button
|
<Button
|
||||||
type="primary"
|
type="primary"
|
||||||
icon={<CloudDownloadOutlined/>}
|
icon={<CloudDownloadOutlined/>}
|
||||||
// onClick={handleCreateBackup}
|
onClick={backupManageTabData.createBackupHandler}
|
||||||
// disabled={loading}
|
loading={backupManageTabData.isCreatingBackup}
|
||||||
block
|
|
||||||
>
|
>
|
||||||
Создать и скачать бэкап
|
Создать и скачать резервную копию
|
||||||
</Button>
|
</Button>
|
||||||
<Upload
|
<Upload
|
||||||
// beforeUpload={handleUpload}
|
// beforeUpload={handleUpload}
|
||||||
@ -27,11 +33,39 @@ const BackupManageTab = () => {
|
|||||||
// disabled={loading}
|
// disabled={loading}
|
||||||
>
|
>
|
||||||
<Button icon={<UploadOutlined/>} block>
|
<Button icon={<UploadOutlined/>} block>
|
||||||
Загрузить бэкап для восстановления
|
Загрузить резервную копию для восстановления
|
||||||
</Button>
|
</Button>
|
||||||
</Upload>
|
</Upload>
|
||||||
</Space>
|
</Space>
|
||||||
</Spin>
|
<Divider/>
|
||||||
|
<List
|
||||||
|
dataSource={backupManageTabData.backups}
|
||||||
|
renderItem={(backup) => (
|
||||||
|
<List.Item>
|
||||||
|
<Typography.Text>{backup.filename}</Typography.Text>
|
||||||
|
<Typography.Text>Создан: {new Date(backup.timestamp).toLocaleString()}</Typography.Text>
|
||||||
|
<Button
|
||||||
|
type="primary"
|
||||||
|
icon={<CloudDownloadOutlined/>}
|
||||||
|
onClick={() => backupManageTabData.downloadBackupHandler(backup.id, backup.filename)}
|
||||||
|
loading={backupManageTabData.isDownloadingBackup}
|
||||||
|
>
|
||||||
|
Скачать
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
type="primary"
|
||||||
|
icon={<CloudDownloadOutlined/>}
|
||||||
|
onClick={() => backupManageTabData.deleteBackupHandler(backup.id)}
|
||||||
|
loading={backupManageTabData.isDeletingBackup}
|
||||||
|
danger
|
||||||
|
>
|
||||||
|
Удалить
|
||||||
|
</Button>
|
||||||
|
</List.Item>
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user