jcloud/dashboard_backup/src2/components/SiteDatabaseRestoreDialog.vue
2025-12-28 00:20:10 +08:00

104 lines
2.4 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<Dialog
:options="{
title: '恢复',
actions: [
{
label: '恢复',
variant: 'solid',
theme: 'red',
loading: $resources.restoreBackup.loading,
onClick: () => {
$resources.restoreBackup.submit();
showRestoreDialog = false;
}
}
]
}"
v-model="showRestoreDialog"
>
<template v-slot:body-content>
<div class="space-y-4">
<p class="text-base">使用之前的备份恢复您的数据库</p>
<div
class="flex items-center rounded border border-gray-200 bg-gray-100 p-4 text-sm text-gray-600"
>
<i-lucide-alert-triangle class="mr-4 inline-block h-6 w-6" />
<div>
此操作将用备份中的<b>数据</b><b>应用</b>替换您站点中的所有内容
</div>
</div>
<BackupFilesUploader v-model:backupFiles="selectedFiles" />
</div>
<div class="mt-3">
<!-- 跳过失败复选框 -->
<input
id="skip-failing"
type="checkbox"
class="h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500"
v-model="skipFailingPatches"
/>
<label for="skip-failing" class="ml-2 text-sm text-gray-900">
跳过失败的补丁如果有任何补丁失败
</label>
</div>
<ErrorMessage class="mt-2" :message="$resources.restoreBackup.error" />
</template>
</Dialog>
</template>
<script>
import { DashboardError } from '../utils/error';
export default {
name: 'SiteDatabaseRestoreDialog',
props: {
site: {
type: String,
required: true
}
},
data() {
return {
showRestoreDialog: true,
selectedFiles: {
database: null,
public: null,
private: null,
config: null
},
skipFailingPatches: false
};
},
resources: {
restoreBackup() {
return {
url: 'jcloud.api.site.restore',
params: {
name: this.site,
files: this.selectedFiles,
skip_failing_patches: this.skipFailingPatches
},
validate() {
if (!this.filesUploaded) {
throw new DashboardError(
'请上传数据库、公共和私有文件以进行恢复。'
);
}
},
onSuccess() {
this.selectedFiles = {};
this.$router.push({
name: 'Site Jobs',
params: { name: this.site }
});
}
};
}
},
computed: {
filesUploaded() {
return this.selectedFiles.database;
}
}
};
</script>