@elementspanel/epanel-plugin-backup 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -5
- package/daemon/backend/index.cjs +28 -28
- package/daemon/plugin.json +0 -3
- package/package.json +8 -7
- package/panel/backend/index.cjs +1 -1
- package/panel/frontend/assets/style-0-_panel-plugin-build-entry_backup-c93271f6.css +1 -0
- package/panel/frontend/{panel-plugin-backup-8c3e4e51.js → panel-plugin-backup-0be52516.js} +3 -3
- package/panel/plugin.json +1 -4
- package/panel/frontend/assets/style-0-_panel-plugin-build-entry_backup-ac79254a.css +0 -1
package/README.md
CHANGED
package/daemon/backend/index.cjs
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/******/ "use strict";
|
|
3
3
|
/******/ var __webpack_modules__ = ({
|
|
4
4
|
|
|
5
|
-
/***/ "
|
|
5
|
+
/***/ "../../plugins/backup/daemon/src/backend/index.ts"
|
|
6
6
|
(__unused_webpack_module, exports, __webpack_require__) {
|
|
7
7
|
|
|
8
8
|
|
|
@@ -19,7 +19,7 @@ const os_1 = __importDefault(__webpack_require__("os"));
|
|
|
19
19
|
const path_1 = __importDefault(__webpack_require__("path"));
|
|
20
20
|
const promises_1 = __webpack_require__("stream/promises");
|
|
21
21
|
const uuid_1 = __webpack_require__("uuid");
|
|
22
|
-
const i18n_1 = __webpack_require__("
|
|
22
|
+
const i18n_1 = __webpack_require__("../../plugins/backup/daemon/src/i18n/index.ts");
|
|
23
23
|
exports.inject = [
|
|
24
24
|
"i18n",
|
|
25
25
|
"protocol",
|
|
@@ -559,7 +559,7 @@ function apply(ctx) {
|
|
|
559
559
|
|
|
560
560
|
/***/ },
|
|
561
561
|
|
|
562
|
-
/***/ "
|
|
562
|
+
/***/ "../../plugins/backup/daemon/src/i18n/index.ts"
|
|
563
563
|
(__unused_webpack_module, exports, __webpack_require__) {
|
|
564
564
|
|
|
565
565
|
|
|
@@ -568,18 +568,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
568
568
|
};
|
|
569
569
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
570
570
|
exports.localeMessages = void 0;
|
|
571
|
-
const de_DE_json_1 = __importDefault(__webpack_require__("
|
|
572
|
-
const en_US_json_1 = __importDefault(__webpack_require__("
|
|
573
|
-
const es_ES_json_1 = __importDefault(__webpack_require__("
|
|
574
|
-
const fr_FR_json_1 = __importDefault(__webpack_require__("
|
|
575
|
-
const ja_JP_json_1 = __importDefault(__webpack_require__("
|
|
576
|
-
const ko_KR_json_1 = __importDefault(__webpack_require__("
|
|
577
|
-
const pt_BR_json_1 = __importDefault(__webpack_require__("
|
|
578
|
-
const ru_RU_json_1 = __importDefault(__webpack_require__("
|
|
579
|
-
const th_TH_json_1 = __importDefault(__webpack_require__("
|
|
580
|
-
const tr_TR_json_1 = __importDefault(__webpack_require__("
|
|
581
|
-
const zh_CN_json_1 = __importDefault(__webpack_require__("
|
|
582
|
-
const zh_TW_json_1 = __importDefault(__webpack_require__("
|
|
571
|
+
const de_DE_json_1 = __importDefault(__webpack_require__("../../plugins/backup/daemon/src/i18n/de_DE.json"));
|
|
572
|
+
const en_US_json_1 = __importDefault(__webpack_require__("../../plugins/backup/daemon/src/i18n/en_US.json"));
|
|
573
|
+
const es_ES_json_1 = __importDefault(__webpack_require__("../../plugins/backup/daemon/src/i18n/es_ES.json"));
|
|
574
|
+
const fr_FR_json_1 = __importDefault(__webpack_require__("../../plugins/backup/daemon/src/i18n/fr_FR.json"));
|
|
575
|
+
const ja_JP_json_1 = __importDefault(__webpack_require__("../../plugins/backup/daemon/src/i18n/ja_JP.json"));
|
|
576
|
+
const ko_KR_json_1 = __importDefault(__webpack_require__("../../plugins/backup/daemon/src/i18n/ko_KR.json"));
|
|
577
|
+
const pt_BR_json_1 = __importDefault(__webpack_require__("../../plugins/backup/daemon/src/i18n/pt_BR.json"));
|
|
578
|
+
const ru_RU_json_1 = __importDefault(__webpack_require__("../../plugins/backup/daemon/src/i18n/ru_RU.json"));
|
|
579
|
+
const th_TH_json_1 = __importDefault(__webpack_require__("../../plugins/backup/daemon/src/i18n/th_TH.json"));
|
|
580
|
+
const tr_TR_json_1 = __importDefault(__webpack_require__("../../plugins/backup/daemon/src/i18n/tr_TR.json"));
|
|
581
|
+
const zh_CN_json_1 = __importDefault(__webpack_require__("../../plugins/backup/daemon/src/i18n/zh_CN.json"));
|
|
582
|
+
const zh_TW_json_1 = __importDefault(__webpack_require__("../../plugins/backup/daemon/src/i18n/zh_TW.json"));
|
|
583
583
|
// The lines a backup prints into the instance console, plus the errors its
|
|
584
584
|
// protocol handlers throw. Registered with the daemon's i18next instance at
|
|
585
585
|
// setup, so the daemon catalogue carries nothing backup-specific.
|
|
@@ -650,84 +650,84 @@ module.exports = require("stream/promises");
|
|
|
650
650
|
|
|
651
651
|
/***/ },
|
|
652
652
|
|
|
653
|
-
/***/ "
|
|
653
|
+
/***/ "../../plugins/backup/daemon/src/i18n/de_DE.json"
|
|
654
654
|
(module) {
|
|
655
655
|
|
|
656
656
|
module.exports = /*#__PURE__*/JSON.parse('{"TXT_CODE_DBACKUP_FORMAT":"Archivformat","TXT_CODE_DBACKUP_LEVEL":"Kompressionsstufe","TXT_CODE_DBACKUP_LEVEL_TIP":"0 speichert ohne Kompression, 9 komprimiert am stärksten. Wird von tar.gz- und 7z-Voreinstellungen mit eigener Stufe ignoriert.","TXT_CODE_DBACKUP_MAX_SIZE":"Maximale Backup-Größe pro Instanz (GB)","TXT_CODE_DBACKUP_MAX_SIZE_TIP":"Gesamtspeicherplatz, den die Backups einer Instanz belegen dürfen. 0 bedeutet unbegrenzt. Reicht der verbleibende Platz nicht für ein durchschnittliches Backup, werden manuelle Backups abgelehnt und geplante Backups löschen das älteste Archiv.","TXT_CODE_DBACKUP_PATH":"Backup-Verzeichnis","TXT_CODE_DBACKUP_PATH_TIP":"Wohin Instanz-Backups geschrieben werden. Relative Pfade gelten ab dem Daemon-Verzeichnis; leer bedeutet data/backups.","TXT_CODE_INSTANCE_BACKUP_AUTO_DELETE_OLDEST":"Backup-Speicherplatz erschöpft, das älteste Backup wurde automatisch gelöscht: {{name}}","TXT_CODE_INSTANCE_BACKUP_COMPRESSING":"Instanzdateien werden komprimiert, bitte warten...","TXT_CODE_INSTANCE_BACKUP_EXCLUDED":"{{num}} Dateien/Verzeichnisse durch .epbaklst-Regeln ausgeschlossen","TXT_CODE_INSTANCE_BACKUP_FAILED":"Instanzsicherung fehlgeschlagen: {{err}}","TXT_CODE_INSTANCE_BACKUP_QUOTA_EXCEEDED":"Nicht genügend Backup-Speicherplatz: Das Limit dieser Instanz beträgt {{limit}}GB, {{used}}GB sind belegt und ein Backup ist durchschnittlich {{average}}GB groß. Löschen Sie alte Backups und versuchen Sie es erneut.","TXT_CODE_INSTANCE_BACKUP_RESTORE_FAILED":"Wiederherstellung der Sicherung fehlgeschlagen: {{err}}","TXT_CODE_INSTANCE_BACKUP_RESTORE_SUCCESS":"Sicherung erfolgreich wiederhergestellt!","TXT_CODE_INSTANCE_BACKUP_RESTORING":"Sicherung wird wiederhergestellt...","TXT_CODE_INSTANCE_BACKUP_START":"Instanzsicherung wird gestartet...","TXT_CODE_INSTANCE_BACKUP_STOPPING":"Instanz wird angehalten...","TXT_CODE_INSTANCE_BACKUP_STOP_TIMEOUT":"Zeitüberschreitung beim Anhalten der Instanz, Sicherung abgebrochen.","TXT_CODE_INSTANCE_BACKUP_SUCCESS":"Instanzsicherung erfolgreich! Datei: {{name}}","TXT_CODE_instanceConf.instanceBusy":"Die Instanz befindet sich derzeit in einem ausgelasteten Zustand und kann keine Aktionen ausführen."}');
|
|
657
657
|
|
|
658
658
|
/***/ },
|
|
659
659
|
|
|
660
|
-
/***/ "
|
|
660
|
+
/***/ "../../plugins/backup/daemon/src/i18n/en_US.json"
|
|
661
661
|
(module) {
|
|
662
662
|
|
|
663
663
|
module.exports = /*#__PURE__*/JSON.parse('{"TXT_CODE_DBACKUP_FORMAT":"Archive Format","TXT_CODE_DBACKUP_LEVEL":"Compression Level","TXT_CODE_DBACKUP_LEVEL_TIP":"0 stores without compressing, 9 compresses hardest. Ignored by tar.gz and 7z presets that set their own.","TXT_CODE_DBACKUP_MAX_SIZE":"Max Backup Size per Instance (GB)","TXT_CODE_DBACKUP_MAX_SIZE_TIP":"Total space one instance\'s backups may occupy. 0 means unlimited. When the space left is smaller than an average backup, manual backups are refused and scheduled backups delete the oldest archive.","TXT_CODE_DBACKUP_PATH":"Backup Directory","TXT_CODE_DBACKUP_PATH_TIP":"Where instance backups are written. Relative paths resolve against the daemon directory; empty means data/backups.","TXT_CODE_INSTANCE_BACKUP_AUTO_DELETE_OLDEST":"Backup space is full, the oldest backup was deleted automatically: {{name}}","TXT_CODE_INSTANCE_BACKUP_COMPRESSING":"Compressing instance files, please wait...","TXT_CODE_INSTANCE_BACKUP_EXCLUDED":"{{num}} files/directories excluded by .epbaklst rules","TXT_CODE_INSTANCE_BACKUP_FAILED":"Instance backup failed: {{err}}","TXT_CODE_INSTANCE_BACKUP_QUOTA_EXCEEDED":"Not enough backup space: the limit for this instance is {{limit}}GB, {{used}}GB is used and a backup averages {{average}}GB. Delete old backups before trying again.","TXT_CODE_INSTANCE_BACKUP_RESTORE_FAILED":"Backup restoration failed: {{err}}","TXT_CODE_INSTANCE_BACKUP_RESTORE_SUCCESS":"Backup restored successfully!","TXT_CODE_INSTANCE_BACKUP_RESTORING":"Restoring backup...","TXT_CODE_INSTANCE_BACKUP_START":"Starting instance backup...","TXT_CODE_INSTANCE_BACKUP_STOPPING":"Stopping instance...","TXT_CODE_INSTANCE_BACKUP_STOP_TIMEOUT":"Stop instance timeout, backup cancelled.","TXT_CODE_INSTANCE_BACKUP_SUCCESS":"Instance backup successful! File: {{name}}","TXT_CODE_instanceConf.instanceBusy":"The current instance is busy and cannot perform any operations."}');
|
|
664
664
|
|
|
665
665
|
/***/ },
|
|
666
666
|
|
|
667
|
-
/***/ "
|
|
667
|
+
/***/ "../../plugins/backup/daemon/src/i18n/es_ES.json"
|
|
668
668
|
(module) {
|
|
669
669
|
|
|
670
670
|
module.exports = /*#__PURE__*/JSON.parse('{"TXT_CODE_DBACKUP_FORMAT":"Formato de archivo","TXT_CODE_DBACKUP_LEVEL":"Nivel de compresión","TXT_CODE_DBACKUP_LEVEL_TIP":"0 almacena sin comprimir, 9 comprime al máximo. Se ignora en tar.gz y 7z cuando fijan el suyo.","TXT_CODE_DBACKUP_MAX_SIZE":"Tamaño máximo de copias por instancia (GB)","TXT_CODE_DBACKUP_MAX_SIZE_TIP":"Espacio total que pueden ocupar las copias de una instancia. 0 significa sin límite. Si el espacio restante es menor que el tamaño medio de una copia, las copias manuales se rechazan y las copias programadas eliminan el archivo más antiguo.","TXT_CODE_DBACKUP_PATH":"Directorio de copias","TXT_CODE_DBACKUP_PATH_TIP":"Dónde se escriben las copias de seguridad. Las rutas relativas se resuelven desde el directorio del demonio; vacío significa data/backups.","TXT_CODE_INSTANCE_BACKUP_AUTO_DELETE_OLDEST":"Espacio de copias agotado, se eliminó automáticamente la copia más antigua: {{name}}","TXT_CODE_INSTANCE_BACKUP_COMPRESSING":"Comprimiendo los archivos de la instancia, espera...","TXT_CODE_INSTANCE_BACKUP_EXCLUDED":"{{num}} archivos/directorios excluidos por las reglas de .epbaklst","TXT_CODE_INSTANCE_BACKUP_FAILED":"Error al crear la copia de la instancia: {{err}}","TXT_CODE_INSTANCE_BACKUP_QUOTA_EXCEEDED":"Espacio de copias insuficiente: el límite de esta instancia es {{limit}}GB, se usan {{used}}GB y una copia ocupa {{average}}GB de media. Elimine copias antiguas antes de reintentar.","TXT_CODE_INSTANCE_BACKUP_RESTORE_FAILED":"Error al restaurar la copia: {{err}}","TXT_CODE_INSTANCE_BACKUP_RESTORE_SUCCESS":"¡Copia restaurada correctamente!","TXT_CODE_INSTANCE_BACKUP_RESTORING":"Restaurando copia...","TXT_CODE_INSTANCE_BACKUP_START":"Iniciando la copia de la instancia...","TXT_CODE_INSTANCE_BACKUP_STOPPING":"Deteniendo la instancia...","TXT_CODE_INSTANCE_BACKUP_STOP_TIMEOUT":"Se agotó el tiempo al detener la instancia; se canceló la copia.","TXT_CODE_INSTANCE_BACKUP_SUCCESS":"¡Copia de la instancia creada! Archivo: {{name}}","TXT_CODE_instanceConf.instanceBusy":"La instancia se encuentra actualmente en un estado ocupado y no puede realizar ninguna acción."}');
|
|
671
671
|
|
|
672
672
|
/***/ },
|
|
673
673
|
|
|
674
|
-
/***/ "
|
|
674
|
+
/***/ "../../plugins/backup/daemon/src/i18n/fr_FR.json"
|
|
675
675
|
(module) {
|
|
676
676
|
|
|
677
677
|
module.exports = /*#__PURE__*/JSON.parse('{"TXT_CODE_DBACKUP_FORMAT":"Format d archive","TXT_CODE_DBACKUP_LEVEL":"Niveau de compression","TXT_CODE_DBACKUP_LEVEL_TIP":"0 stocke sans compresser, 9 compresse au maximum. Ignoré par tar.gz et 7z qui fixent le leur.","TXT_CODE_DBACKUP_MAX_SIZE":"Taille maximale des sauvegardes par instance (GB)","TXT_CODE_DBACKUP_MAX_SIZE_TIP":"Espace total que les sauvegardes d’une instance peuvent occuper. 0 signifie illimité. Lorsque l’espace restant est inférieur à la taille moyenne d’une sauvegarde, les sauvegardes manuelles sont refusées et les sauvegardes planifiées suppriment l’archive la plus ancienne.","TXT_CODE_DBACKUP_PATH":"Répertoire de sauvegarde","TXT_CODE_DBACKUP_PATH_TIP":"Où les sauvegardes d instances sont écrites. Les chemins relatifs partent du répertoire du démon ; vide signifie data/backups.","TXT_CODE_INSTANCE_BACKUP_AUTO_DELETE_OLDEST":"Espace de sauvegarde insuffisant, la sauvegarde la plus ancienne a été supprimée automatiquement : {{name}}","TXT_CODE_INSTANCE_BACKUP_COMPRESSING":"Compression des fichiers de l’instance, veuillez patienter...","TXT_CODE_INSTANCE_BACKUP_EXCLUDED":"{{num}} fichiers/répertoires exclus par les règles .epbaklst","TXT_CODE_INSTANCE_BACKUP_FAILED":"Échec de la sauvegarde de l’instance : {{err}}","TXT_CODE_INSTANCE_BACKUP_QUOTA_EXCEEDED":"Espace de sauvegarde insuffisant : la limite de cette instance est de {{limit}}GB, {{used}}GB sont utilisés et une sauvegarde fait en moyenne {{average}}GB. Supprimez d’anciennes sauvegardes avant de réessayer.","TXT_CODE_INSTANCE_BACKUP_RESTORE_FAILED":"Échec de la restauration : {{err}}","TXT_CODE_INSTANCE_BACKUP_RESTORE_SUCCESS":"Sauvegarde restaurée avec succès !","TXT_CODE_INSTANCE_BACKUP_RESTORING":"Restauration de la sauvegarde...","TXT_CODE_INSTANCE_BACKUP_START":"Démarrage de la sauvegarde de l’instance...","TXT_CODE_INSTANCE_BACKUP_STOPPING":"Arrêt de l’instance...","TXT_CODE_INSTANCE_BACKUP_STOP_TIMEOUT":"Délai d’arrêt de l’instance dépassé, sauvegarde annulée.","TXT_CODE_INSTANCE_BACKUP_SUCCESS":"Sauvegarde de l’instance réussie ! Fichier : {{name}}","TXT_CODE_instanceConf.instanceBusy":"L\'instance est actuellement dans un état occupé et ne peut effectuer aucune action."}');
|
|
678
678
|
|
|
679
679
|
/***/ },
|
|
680
680
|
|
|
681
|
-
/***/ "
|
|
681
|
+
/***/ "../../plugins/backup/daemon/src/i18n/ja_JP.json"
|
|
682
682
|
(module) {
|
|
683
683
|
|
|
684
684
|
module.exports = /*#__PURE__*/JSON.parse('{"TXT_CODE_DBACKUP_FORMAT":"アーカイブ形式","TXT_CODE_DBACKUP_LEVEL":"圧縮レベル","TXT_CODE_DBACKUP_LEVEL_TIP":"0 は無圧縮で格納、9 が最高圧縮です。独自のレベルを持つ tar.gz と 7z では無視されます。","TXT_CODE_DBACKUP_MAX_SIZE":"インスタンスごとの最大バックアップ容量 (GB)","TXT_CODE_DBACKUP_MAX_SIZE_TIP":"1 つのインスタンスのバックアップが占有できる合計容量です。0 は無制限を意味します。残り容量が平均バックアップサイズを下回る場合、手動バックアップは拒否され、スケジュールされたバックアップは最も古いアーカイブを削除します。","TXT_CODE_DBACKUP_PATH":"バックアップ先ディレクトリ","TXT_CODE_DBACKUP_PATH_TIP":"インスタンスのバックアップの保存先。相対パスはデーモンディレクトリ基準です。空欄の場合は data/backups になります。","TXT_CODE_INSTANCE_BACKUP_AUTO_DELETE_OLDEST":"バックアップ容量が不足しているため、最も古いバックアップを自動削除しました:{{name}}","TXT_CODE_INSTANCE_BACKUP_COMPRESSING":"インスタンスファイルを圧縮中です。お待ちください...","TXT_CODE_INSTANCE_BACKUP_EXCLUDED":".epbaklstルールにより{{num}}個のファイル/ディレクトリを除外しました","TXT_CODE_INSTANCE_BACKUP_FAILED":"インスタンスのバックアップに失敗しました:{{err}}","TXT_CODE_INSTANCE_BACKUP_QUOTA_EXCEEDED":"バックアップ容量が不足しています:このインスタンスの上限は {{limit}}GB、使用量は {{used}}GB、平均バックアップサイズは {{average}}GB です。古いバックアップを削除してから再試行してください。","TXT_CODE_INSTANCE_BACKUP_RESTORE_FAILED":"バックアップの復元に失敗しました:{{err}}","TXT_CODE_INSTANCE_BACKUP_RESTORE_SUCCESS":"バックアップを復元しました!","TXT_CODE_INSTANCE_BACKUP_RESTORING":"バックアップを復元中...","TXT_CODE_INSTANCE_BACKUP_START":"インスタンスのバックアップを開始中...","TXT_CODE_INSTANCE_BACKUP_STOPPING":"インスタンスを停止中...","TXT_CODE_INSTANCE_BACKUP_STOP_TIMEOUT":"インスタンスの停止がタイムアウトしたため、バックアップをキャンセルしました。","TXT_CODE_INSTANCE_BACKUP_SUCCESS":"インスタンスのバックアップに成功しました!ファイル:{{name}}","TXT_CODE_instanceConf.instanceBusy":"インスタンスは現在ビジー状態にあるため、アクションを実行できません。"}');
|
|
685
685
|
|
|
686
686
|
/***/ },
|
|
687
687
|
|
|
688
|
-
/***/ "
|
|
688
|
+
/***/ "../../plugins/backup/daemon/src/i18n/ko_KR.json"
|
|
689
689
|
(module) {
|
|
690
690
|
|
|
691
691
|
module.exports = /*#__PURE__*/JSON.parse('{"TXT_CODE_DBACKUP_FORMAT":"압축 형식","TXT_CODE_DBACKUP_LEVEL":"압축 수준","TXT_CODE_DBACKUP_LEVEL_TIP":"0은 압축 없이 저장하고 9는 가장 강하게 압축합니다. 자체 수준을 쓰는 tar.gz와 7z에서는 무시됩니다.","TXT_CODE_DBACKUP_MAX_SIZE":"인스턴스별 최대 백업 용량 (GB)","TXT_CODE_DBACKUP_MAX_SIZE_TIP":"한 인스턴스의 백업이 차지할 수 있는 총 용량입니다. 0은 무제한입니다. 남은 용량이 평균 백업 크기보다 작으면 수동 백업은 거부되고, 예약 백업은 가장 오래된 백업을 삭제합니다.","TXT_CODE_DBACKUP_PATH":"백업 디렉터리","TXT_CODE_DBACKUP_PATH_TIP":"인스턴스 백업을 저장할 위치입니다. 상대 경로는 데몬 디렉터리를 기준으로 하며, 비워 두면 data/backups 입니다.","TXT_CODE_INSTANCE_BACKUP_AUTO_DELETE_OLDEST":"백업 공간이 부족하여 가장 오래된 백업을 자동으로 삭제했습니다: {{name}}","TXT_CODE_INSTANCE_BACKUP_COMPRESSING":"인스턴스 파일을 압축하는 중입니다. 잠시 기다려 주세요...","TXT_CODE_INSTANCE_BACKUP_EXCLUDED":".epbaklst 규칙으로 {{num}}개 파일/디렉터리 제외","TXT_CODE_INSTANCE_BACKUP_FAILED":"인스턴스 백업 실패: {{err}}","TXT_CODE_INSTANCE_BACKUP_QUOTA_EXCEEDED":"백업 공간이 부족합니다: 이 인스턴스의 한도는 {{limit}}GB, 사용량은 {{used}}GB, 평균 백업 크기는 {{average}}GB입니다. 이전 백업을 삭제한 후 다시 시도하세요.","TXT_CODE_INSTANCE_BACKUP_RESTORE_FAILED":"백업 복원 실패: {{err}}","TXT_CODE_INSTANCE_BACKUP_RESTORE_SUCCESS":"백업을 복원했습니다!","TXT_CODE_INSTANCE_BACKUP_RESTORING":"백업 복원 중...","TXT_CODE_INSTANCE_BACKUP_START":"인스턴스 백업 시작 중...","TXT_CODE_INSTANCE_BACKUP_STOPPING":"인스턴스 중지 중...","TXT_CODE_INSTANCE_BACKUP_STOP_TIMEOUT":"인스턴스 중지 시간이 초과되어 백업이 취소되었습니다.","TXT_CODE_INSTANCE_BACKUP_SUCCESS":"인스턴스 백업 성공! 파일: {{name}}","TXT_CODE_instanceConf.instanceBusy":"인스턴스가 현재 사용 중 상태이므로 어떤 작업도 수행할 수 없습니다."}');
|
|
692
692
|
|
|
693
693
|
/***/ },
|
|
694
694
|
|
|
695
|
-
/***/ "
|
|
695
|
+
/***/ "../../plugins/backup/daemon/src/i18n/pt_BR.json"
|
|
696
696
|
(module) {
|
|
697
697
|
|
|
698
698
|
module.exports = /*#__PURE__*/JSON.parse('{"TXT_CODE_DBACKUP_FORMAT":"Formato do arquivo","TXT_CODE_DBACKUP_LEVEL":"Nível de compressão","TXT_CODE_DBACKUP_LEVEL_TIP":"0 armazena sem compactar, 9 compacta ao máximo. Ignorado por tar.gz e 7z que definem o seu.","TXT_CODE_DBACKUP_MAX_SIZE":"Tamanho máximo de backup por instância (GB)","TXT_CODE_DBACKUP_MAX_SIZE_TIP":"Espaço total que os backups de uma instância podem ocupar. 0 significa ilimitado. Quando o espaço restante é menor que o tamanho médio de um backup, backups manuais são recusados e backups agendados excluem o arquivo mais antigo.","TXT_CODE_DBACKUP_PATH":"Diretório de backups","TXT_CODE_DBACKUP_PATH_TIP":"Onde os backups de instâncias são gravados. Caminhos relativos partem do diretório do daemon; vazio significa data/backups.","TXT_CODE_INSTANCE_BACKUP_AUTO_DELETE_OLDEST":"Espaço de backup insuficiente, o backup mais antigo foi excluído automaticamente: {{name}}","TXT_CODE_INSTANCE_BACKUP_COMPRESSING":"Compactando os arquivos da instância, aguarde...","TXT_CODE_INSTANCE_BACKUP_EXCLUDED":"{{num}} arquivos/diretórios excluídos pelas regras de .epbaklst","TXT_CODE_INSTANCE_BACKUP_FAILED":"Falha no backup da instância: {{err}}","TXT_CODE_INSTANCE_BACKUP_QUOTA_EXCEEDED":"Espaço de backup insuficiente: o limite desta instância é {{limit}}GB, {{used}}GB estão em uso e um backup tem em média {{average}}GB. Exclua backups antigos antes de tentar novamente.","TXT_CODE_INSTANCE_BACKUP_RESTORE_FAILED":"Falha ao restaurar o backup: {{err}}","TXT_CODE_INSTANCE_BACKUP_RESTORE_SUCCESS":"Backup restaurado com sucesso!","TXT_CODE_INSTANCE_BACKUP_RESTORING":"Restaurando backup...","TXT_CODE_INSTANCE_BACKUP_START":"Iniciando o backup da instância...","TXT_CODE_INSTANCE_BACKUP_STOPPING":"Parando a instância...","TXT_CODE_INSTANCE_BACKUP_STOP_TIMEOUT":"O tempo limite para parar a instância foi atingido; o backup foi cancelado.","TXT_CODE_INSTANCE_BACKUP_SUCCESS":"Backup da instância concluído! Arquivo: {{name}}","TXT_CODE_instanceConf.instanceBusy":"A instância atual está ocupada e não pode realizar nenhuma operação."}');
|
|
699
699
|
|
|
700
700
|
/***/ },
|
|
701
701
|
|
|
702
|
-
/***/ "
|
|
702
|
+
/***/ "../../plugins/backup/daemon/src/i18n/ru_RU.json"
|
|
703
703
|
(module) {
|
|
704
704
|
|
|
705
705
|
module.exports = /*#__PURE__*/JSON.parse('{"TXT_CODE_DBACKUP_FORMAT":"Формат архива","TXT_CODE_DBACKUP_LEVEL":"Уровень сжатия","TXT_CODE_DBACKUP_LEVEL_TIP":"0 — без сжатия, 9 — максимальное. Игнорируется для tar.gz и 7z, задающих свой уровень.","TXT_CODE_DBACKUP_MAX_SIZE":"Максимальный объем резервных копий на экземпляр (GB)","TXT_CODE_DBACKUP_MAX_SIZE_TIP":"Общий объем, который могут занимать резервные копии одного экземпляра. 0 означает без ограничений. Если оставшегося места меньше среднего размера копии, ручное резервное копирование отклоняется, а запланированное удаляет самый старый архив.","TXT_CODE_DBACKUP_PATH":"Каталог резервных копий","TXT_CODE_DBACKUP_PATH_TIP":"Куда записываются резервные копии экземпляров. Относительные пути отсчитываются от каталога демона; пусто означает data/backups.","TXT_CODE_INSTANCE_BACKUP_AUTO_DELETE_OLDEST":"Недостаточно места для резервных копий, самая старая копия удалена автоматически: {{name}}","TXT_CODE_INSTANCE_BACKUP_COMPRESSING":"Сжатие файлов экземпляра, подождите...","TXT_CODE_INSTANCE_BACKUP_EXCLUDED":"{{num}} файлов/каталогов исключено правилами .epbaklst","TXT_CODE_INSTANCE_BACKUP_FAILED":"Ошибка резервного копирования экземпляра: {{err}}","TXT_CODE_INSTANCE_BACKUP_QUOTA_EXCEEDED":"Недостаточно места для резервной копии: лимит этого экземпляра — {{limit}}GB, использовано {{used}}GB, средний размер копии — {{average}}GB. Удалите старые резервные копии и повторите попытку.","TXT_CODE_INSTANCE_BACKUP_RESTORE_FAILED":"Ошибка восстановления резервной копии: {{err}}","TXT_CODE_INSTANCE_BACKUP_RESTORE_SUCCESS":"Резервная копия успешно восстановлена!","TXT_CODE_INSTANCE_BACKUP_RESTORING":"Восстановление резервной копии...","TXT_CODE_INSTANCE_BACKUP_START":"Запуск резервного копирования экземпляра...","TXT_CODE_INSTANCE_BACKUP_STOPPING":"Остановка экземпляра...","TXT_CODE_INSTANCE_BACKUP_STOP_TIMEOUT":"Превышено время остановки экземпляра, резервное копирование отменено.","TXT_CODE_INSTANCE_BACKUP_SUCCESS":"Резервная копия экземпляра создана! Файл: {{name}}","TXT_CODE_instanceConf.instanceBusy":"Текущий экземпляр занят и не может выполнять операции."}');
|
|
706
706
|
|
|
707
707
|
/***/ },
|
|
708
708
|
|
|
709
|
-
/***/ "
|
|
709
|
+
/***/ "../../plugins/backup/daemon/src/i18n/th_TH.json"
|
|
710
710
|
(module) {
|
|
711
711
|
|
|
712
712
|
module.exports = /*#__PURE__*/JSON.parse('{"TXT_CODE_DBACKUP_FORMAT":"รูปแบบไฟล์บีบอัด","TXT_CODE_DBACKUP_LEVEL":"ระดับการบีบอัด","TXT_CODE_DBACKUP_LEVEL_TIP":"0 คือเก็บโดยไม่บีบอัด 9 คือบีบอัดสูงสุด จะถูกละเว้นสำหรับ tar.gz และ 7z ที่กำหนดระดับของตัวเอง","TXT_CODE_DBACKUP_MAX_SIZE":"ขนาดสำรองข้อมูลสูงสุดต่ออินสแตนซ์ (GB)","TXT_CODE_DBACKUP_MAX_SIZE_TIP":"พื้นที่รวมที่ข้อมูลสำรองของอินสแตนซ์หนึ่งสามารถใช้ได้ 0 หมายถึงไม่จำกัด เมื่อพื้นที่ที่เหลือน้อยกว่าขนาดเฉลี่ยของข้อมูลสำรอง การสำรองข้อมูลด้วยตนเองจะถูกปฏิเสธ และการสำรองข้อมูลตามกำหนดจะลบข้อมูลที่เก่าที่สุด","TXT_CODE_DBACKUP_PATH":"ไดเรกทอรีสำรองข้อมูล","TXT_CODE_DBACKUP_PATH_TIP":"ตำแหน่งที่เก็บข้อมูลสำรองของอินสแตนซ์ เส้นทางแบบสัมพัทธ์อ้างอิงจากไดเรกทอรีของดีมอน เว้นว่างไว้จะเป็น data/backups","TXT_CODE_INSTANCE_BACKUP_AUTO_DELETE_OLDEST":"พื้นที่สำรองข้อมูลไม่เพียงพอ ลบข้อมูลสำรองที่เก่าที่สุดโดยอัตโนมัติแล้ว: {{name}}","TXT_CODE_INSTANCE_BACKUP_COMPRESSING":"กำลังบีบอัดไฟล์อินสแตนซ์ โปรดรอ...","TXT_CODE_INSTANCE_BACKUP_EXCLUDED":"ยกเว้นไฟล์/ไดเรกทอรี {{num}} รายการตามกฎ .epbaklst","TXT_CODE_INSTANCE_BACKUP_FAILED":"สำรองข้อมูลอินสแตนซ์ล้มเหลว: {{err}}","TXT_CODE_INSTANCE_BACKUP_QUOTA_EXCEEDED":"พื้นที่สำรองข้อมูลไม่เพียงพอ: ขีดจำกัดของอินสแตนซ์นี้คือ {{limit}}GB ใช้งานไป {{used}}GB และข้อมูลสำรองเฉลี่ย {{average}}GB กรุณาลบข้อมูลสำรองเก่าก่อนลองใหม่","TXT_CODE_INSTANCE_BACKUP_RESTORE_FAILED":"กู้คืนข้อมูลสำรองล้มเหลว: {{err}}","TXT_CODE_INSTANCE_BACKUP_RESTORE_SUCCESS":"กู้คืนข้อมูลสำรองสำเร็จ!","TXT_CODE_INSTANCE_BACKUP_RESTORING":"กำลังกู้คืนข้อมูลสำรอง...","TXT_CODE_INSTANCE_BACKUP_START":"กำลังเริ่มสำรองข้อมูลอินสแตนซ์...","TXT_CODE_INSTANCE_BACKUP_STOPPING":"กำลังหยุดอินสแตนซ์...","TXT_CODE_INSTANCE_BACKUP_STOP_TIMEOUT":"หยุดอินสแตนซ์หมดเวลา ยกเลิกการสำรองข้อมูลแล้ว","TXT_CODE_INSTANCE_BACKUP_SUCCESS":"สำรองข้อมูลอินสแตนซ์สำเร็จ! ไฟล์: {{name}}","TXT_CODE_instanceConf.instanceBusy":"อินสแตนซ์ปัจจุบันกำลังยุ่งและไม่สามารถดำเนินการใดๆ ได้"}');
|
|
713
713
|
|
|
714
714
|
/***/ },
|
|
715
715
|
|
|
716
|
-
/***/ "
|
|
716
|
+
/***/ "../../plugins/backup/daemon/src/i18n/tr_TR.json"
|
|
717
717
|
(module) {
|
|
718
718
|
|
|
719
719
|
module.exports = /*#__PURE__*/JSON.parse('{"TXT_CODE_DBACKUP_FORMAT":"Arşiv biçimi","TXT_CODE_DBACKUP_LEVEL":"Sıkıştırma düzeyi","TXT_CODE_DBACKUP_LEVEL_TIP":"0 sıkıştırmadan saklar, 9 en çok sıkıştırır. Kendi düzeyini belirleyen tar.gz ve 7z için yok sayılır.","TXT_CODE_DBACKUP_MAX_SIZE":"Örnek başına maksimum yedek boyutu (GB)","TXT_CODE_DBACKUP_MAX_SIZE_TIP":"Bir örneğin yedeklerinin kullanabileceği toplam alan. 0 sınırsız anlamına gelir. Kalan alan ortalama bir yedekten küçükse elle yedekleme reddedilir ve zamanlanmış yedekleme en eski arşivi siler.","TXT_CODE_DBACKUP_PATH":"Yedek dizini","TXT_CODE_DBACKUP_PATH_TIP":"Örnek yedeklerinin yazılacağı yer. Göreli yollar daemon dizinine göre çözümlenir; boş bırakılırsa data/backups kullanılır.","TXT_CODE_INSTANCE_BACKUP_AUTO_DELETE_OLDEST":"Yedek alanı yetersiz, en eski yedek otomatik olarak silindi: {{name}}","TXT_CODE_INSTANCE_BACKUP_COMPRESSING":"Örnek dosyaları sıkıştırılıyor, lütfen bekleyin...","TXT_CODE_INSTANCE_BACKUP_EXCLUDED":".epbaklst kurallarıyla {{num}} dosya/dizin hariç tutuldu","TXT_CODE_INSTANCE_BACKUP_FAILED":"Örnek yedekleme başarısız: {{err}}","TXT_CODE_INSTANCE_BACKUP_QUOTA_EXCEEDED":"Yedek alanı yetersiz: bu örneğin sınırı {{limit}}GB, {{used}}GB kullanılıyor ve bir yedek ortalama {{average}}GB. Yeniden denemeden önce eski yedekleri silin.","TXT_CODE_INSTANCE_BACKUP_RESTORE_FAILED":"Yedek geri yüklenemedi: {{err}}","TXT_CODE_INSTANCE_BACKUP_RESTORE_SUCCESS":"Yedek başarıyla geri yüklendi!","TXT_CODE_INSTANCE_BACKUP_RESTORING":"Yedek geri yükleniyor...","TXT_CODE_INSTANCE_BACKUP_START":"Örnek yedeklemesi başlatılıyor...","TXT_CODE_INSTANCE_BACKUP_STOPPING":"Örnek durduruluyor...","TXT_CODE_INSTANCE_BACKUP_STOP_TIMEOUT":"Örneği durdurma zaman aşımına uğradı, yedekleme iptal edildi.","TXT_CODE_INSTANCE_BACKUP_SUCCESS":"Örnek yedekleme başarılı! Dosya: {{name}}","TXT_CODE_instanceConf.instanceBusy":"Geçerli örnek meşgul ve herhangi bir işlem gerçekleştiremiyor."}');
|
|
720
720
|
|
|
721
721
|
/***/ },
|
|
722
722
|
|
|
723
|
-
/***/ "
|
|
723
|
+
/***/ "../../plugins/backup/daemon/src/i18n/zh_CN.json"
|
|
724
724
|
(module) {
|
|
725
725
|
|
|
726
726
|
module.exports = /*#__PURE__*/JSON.parse('{"TXT_CODE_DBACKUP_FORMAT":"压缩格式","TXT_CODE_DBACKUP_LEVEL":"压缩等级","TXT_CODE_DBACKUP_LEVEL_TIP":"0 表示只打包不压缩,9 为最高压缩率。tar.gz 与 7z 自带等级时会忽略此项。","TXT_CODE_DBACKUP_MAX_SIZE":"每个实例最大备份数据量 (GB)","TXT_CODE_DBACKUP_MAX_SIZE_TIP":"单个实例全部备份文件可占用的总空间上限,0 表示不限制。当剩余空间小于平均每个备份的大小时,手动备份会被拒绝并提示删除旧备份,计划任务备份会自动删除最旧的备份。","TXT_CODE_DBACKUP_PATH":"备份目录","TXT_CODE_DBACKUP_PATH_TIP":"实例备份的存放位置。相对路径相对于守护进程目录;留空则为 data/backups。","TXT_CODE_INSTANCE_BACKUP_AUTO_DELETE_OLDEST":"备份空间不足,已自动删除最旧的备份:{{name}}","TXT_CODE_INSTANCE_BACKUP_COMPRESSING":"正在压缩实例文件...","TXT_CODE_INSTANCE_BACKUP_EXCLUDED":"已有 {{num}} 个文件/目录被 .epbaklst 规则排除","TXT_CODE_INSTANCE_BACKUP_FAILED":"实例备份失败:{{err}}","TXT_CODE_INSTANCE_BACKUP_QUOTA_EXCEEDED":"备份空间不足,无法备份:该实例的备份上限为 {{limit}}GB,已使用 {{used}}GB,平均每个备份 {{average}}GB。请先删除旧备份后重试。","TXT_CODE_INSTANCE_BACKUP_RESTORE_FAILED":"备份恢复失败:{{err}}","TXT_CODE_INSTANCE_BACKUP_RESTORE_SUCCESS":"备份恢复成功!","TXT_CODE_INSTANCE_BACKUP_RESTORING":"正在恢复备份...","TXT_CODE_INSTANCE_BACKUP_START":"开始备份实例...","TXT_CODE_INSTANCE_BACKUP_STOPPING":"正在停止实例...","TXT_CODE_INSTANCE_BACKUP_STOP_TIMEOUT":"停止实例超时,备份已取消。","TXT_CODE_INSTANCE_BACKUP_SUCCESS":"实例备份成功:{{name}}","TXT_CODE_instanceConf.instanceBusy":"当前实例正处于忙碌状态,无法执行任何操作."}');
|
|
727
727
|
|
|
728
728
|
/***/ },
|
|
729
729
|
|
|
730
|
-
/***/ "
|
|
730
|
+
/***/ "../../plugins/backup/daemon/src/i18n/zh_TW.json"
|
|
731
731
|
(module) {
|
|
732
732
|
|
|
733
733
|
module.exports = /*#__PURE__*/JSON.parse('{"TXT_CODE_DBACKUP_FORMAT":"壓縮格式","TXT_CODE_DBACKUP_LEVEL":"壓縮等級","TXT_CODE_DBACKUP_LEVEL_TIP":"0 表示只打包不壓縮,9 為最高壓縮率。tar.gz 與 7z 自帶等級時會忽略此項。","TXT_CODE_DBACKUP_MAX_SIZE":"每個實例最大備份資料量 (GB)","TXT_CODE_DBACKUP_MAX_SIZE_TIP":"單個實例全部備份檔案可佔用的總空間上限,0 表示不限制。當剩餘空間小於平均每個備份的大小時,手動備份會被拒絕並提示刪除舊備份,排程任務備份會自動刪除最舊的備份。","TXT_CODE_DBACKUP_PATH":"備份目錄","TXT_CODE_DBACKUP_PATH_TIP":"實例備份的存放位置。相對路徑相對於守護行程目錄;留空則為 data/backups。","TXT_CODE_INSTANCE_BACKUP_AUTO_DELETE_OLDEST":"備份空間不足,已自動刪除最舊的備份:{{name}}","TXT_CODE_INSTANCE_BACKUP_COMPRESSING":"正在壓縮實例文件...","TXT_CODE_INSTANCE_BACKUP_EXCLUDED":"已有 {{num}} 个文件/目錄被 .epbaklst 規則排除","TXT_CODE_INSTANCE_BACKUP_FAILED":"實例備份失败:{{err}}","TXT_CODE_INSTANCE_BACKUP_QUOTA_EXCEEDED":"備份空間不足,無法備份:此實例的備份上限為 {{limit}}GB,已使用 {{used}}GB,平均每個備份 {{average}}GB。請先刪除舊備份後再試。","TXT_CODE_INSTANCE_BACKUP_RESTORE_FAILED":"備份恢復失败:{{err}}","TXT_CODE_INSTANCE_BACKUP_RESTORE_SUCCESS":"備份恢復成功!","TXT_CODE_INSTANCE_BACKUP_RESTORING":"正在恢復備份...","TXT_CODE_INSTANCE_BACKUP_START":"開始備份實例...","TXT_CODE_INSTANCE_BACKUP_STOPPING":"正在停止實例...","TXT_CODE_INSTANCE_BACKUP_STOP_TIMEOUT":"停止實例超時,備份已取消。","TXT_CODE_INSTANCE_BACKUP_SUCCESS":"實例備份成功:{{name}}","TXT_CODE_instanceConf.instanceBusy":"目前實例正處於忙碌狀態,無法執行任何動作."}');
|
|
@@ -765,7 +765,7 @@ module.exports = /*#__PURE__*/JSON.parse('{"TXT_CODE_DBACKUP_FORMAT":"壓縮格
|
|
|
765
765
|
/******/ // startup
|
|
766
766
|
/******/ // Load entry module and return exports
|
|
767
767
|
/******/ // This entry module is referenced by other modules so it can't be inlined
|
|
768
|
-
/******/ var __webpack_exports__ = __webpack_require__("
|
|
768
|
+
/******/ var __webpack_exports__ = __webpack_require__("../../plugins/backup/daemon/src/backend/index.ts");
|
|
769
769
|
/******/ module.exports = __webpack_exports__;
|
|
770
770
|
/******/
|
|
771
771
|
/******/ })()
|
package/daemon/plugin.json
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elementspanel/epanel-plugin-backup",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.0.2",
|
|
4
|
+
"description": "Instance backup management.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Csituka_D <694428809@qq.com> (https://github.com/JessDaodao)",
|
|
7
7
|
"repository": {
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
},
|
|
28
28
|
"elementspanel": {
|
|
29
29
|
"id": "backup",
|
|
30
|
+
"dual": true,
|
|
30
31
|
"panel": {
|
|
31
32
|
"priority": 150,
|
|
32
33
|
"frontendInject": [
|
|
@@ -34,24 +35,24 @@
|
|
|
34
35
|
"i18n",
|
|
35
36
|
"instance"
|
|
36
37
|
],
|
|
38
|
+
"description": "Instance backup management.",
|
|
37
39
|
"styles": [
|
|
38
|
-
"frontend/assets/style-0-_panel-plugin-build-entry_backup-
|
|
40
|
+
"frontend/assets/style-0-_panel-plugin-build-entry_backup-c93271f6.css"
|
|
39
41
|
],
|
|
40
|
-
"description": "Provides instance backup management in normal and Desktop modes.",
|
|
41
42
|
"directory": "panel",
|
|
42
43
|
"folder": "backup"
|
|
43
44
|
},
|
|
44
45
|
"daemon": {
|
|
45
46
|
"priority": 100,
|
|
46
47
|
"displayName": "Instance Backup",
|
|
47
|
-
"description": "
|
|
48
|
+
"description": "Instance backup and restore.",
|
|
48
49
|
"directory": "daemon",
|
|
49
50
|
"folder": "backup"
|
|
50
51
|
}
|
|
51
52
|
},
|
|
52
53
|
"peerDependencies": {
|
|
53
|
-
"@elementspanel/panel": "1.0.
|
|
54
|
-
"@elementspanel/daemon": "1.0.
|
|
54
|
+
"@elementspanel/panel": "1.0.1",
|
|
55
|
+
"@elementspanel/daemon": "1.0.1"
|
|
55
56
|
},
|
|
56
57
|
"peerDependenciesMeta": {
|
|
57
58
|
"@elementspanel/panel": {
|
package/panel/backend/index.cjs
CHANGED
|
@@ -9,7 +9,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
|
9
9
|
exports.inject = void 0;
|
|
10
10
|
exports.apply = apply;
|
|
11
11
|
// Panel side of instance backup: the browser talks to the panel, the panel
|
|
12
|
-
// forwards to the node that owns the instance. See `
|
|
12
|
+
// forwards to the node that owns the instance. See `plugins/backup/daemon`.
|
|
13
13
|
exports.inject = ["koa", "middleware", "roles", "remote"];
|
|
14
14
|
function apply(ctx) {
|
|
15
15
|
const router = ctx.koa.router("/api/protected_instance");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.ds-backup[data-v-efa79ee2]{height:100%;display:flex;flex-direction:column;color:var(--desktop-window-text);font-size:13px;overflow:hidden}.ds-backup-body[data-v-efa79ee2]{flex:1;overflow-y:auto;display:flex;flex-direction:column;padding:16px 20px 0}.ds-backup-footer[data-v-efa79ee2]{padding:12px 20px;display:flex;justify-content:flex-end;gap:8px;border-top:1px solid var(--desktop-window-border);flex-shrink:0}.ds-dialog-btn[data-v-efa79ee2]{padding:7px 16px;border:none;border-radius:6px;font-size:13px;cursor:pointer;display:inline-flex;align-items:center;gap:6px;transition:all .2s;color:var(--desktop-window-text);white-space:nowrap}.ds-dialog-btn[data-v-efa79ee2]:disabled{opacity:.5;cursor:not-allowed}.ds-dialog-btn--primary[data-v-efa79ee2]{background:var(--color-blue-5, #1677ff);color:#fff;border-color:var(--color-blue-5, #1677ff)}.ds-dialog-btn--primary[data-v-efa79ee2]:hover:not(:disabled){background:var(--color-blue-6, #4096ff)}.ds-dialog-btn--default[data-v-efa79ee2]{background:var(--desktop-window-titlebar-bg);border:1px solid var(--desktop-window-border)}.ds-dialog-btn--default[data-v-efa79ee2]:hover:not(:disabled){background:var(--desktop-window-control-hover)}.ds-backup-list-container[data-v-efa79ee2]{width:100%;flex:1;display:flex;flex-direction:column;position:relative}.ds-backup-list-container .list-header[data-v-efa79ee2]{display:flex;align-items:center;gap:8px;font-weight:600;margin-bottom:16px;color:var(--desktop-window-text)}.ds-backup-list-container .list-header .refresh-btn[data-v-efa79ee2]{margin-left:auto;cursor:pointer;opacity:.7}.ds-backup-list-container .list-header .refresh-btn[data-v-efa79ee2]:hover{opacity:1}.ds-backup-list-container .backup-list[data-v-efa79ee2]{display:flex;flex-direction:column;gap:10px;padding-bottom:20px}.ds-backup-list-container .backup-item[data-v-efa79ee2]{background:var(--desktop-window-titlebar-bg);border:1px solid var(--desktop-window-border);border-radius:16px;overflow:hidden;padding:12px 16px;display:flex;align-items:center;justify-content:space-between;transition:all .2s}.ds-backup-list-container .backup-item[data-v-efa79ee2]:hover{border-color:var(--color-blue-5)}.ds-backup-list-container .backup-item__info[data-v-efa79ee2]{flex:1;min-width:0;margin-right:16px}.ds-backup-list-container .backup-item__name[data-v-efa79ee2]{font-weight:500;margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ds-backup-list-container .backup-item__meta[data-v-efa79ee2]{font-size:12px;color:var(--desktop-window-text-muted);display:flex;align-items:center;gap:8px}.ds-backup-list-container .backup-item__meta .separator[data-v-efa79ee2]{opacity:.3}.ds-backup-list-container .backup-item__actions[data-v-efa79ee2]{display:flex;gap:8px}.ds-backup-list-container .backup-item .action-btn[data-v-efa79ee2]{background:transparent;border:none;padding:6px;border-radius:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:16px;transition:all .2s}.ds-backup-list-container .backup-item .action-btn--restore[data-v-efa79ee2]{color:var(--color-blue-5)}.ds-backup-list-container .backup-item .action-btn--restore[data-v-efa79ee2]:hover{background:rgba(22,119,255,.1)}.ds-backup-list-container .backup-item .action-btn--delete[data-v-efa79ee2]{color:#ff4d4f}.ds-backup-list-container .backup-item .action-btn--delete[data-v-efa79ee2]:hover{background:rgba(255,77,79,.1)}.ds-backup-list-container .list-loading[data-v-efa79ee2]{flex:1;display:flex;align-items:center;justify-content:center;font-size:24px;color:var(--color-blue-5)}.ds-backup-intro[data-v-efa79ee2]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}.ds-backup-intro .intro-icon[data-v-efa79ee2]{font-size:64px;color:var(--desktop-window-text-muted);margin-bottom:20px;opacity:.5}.ds-backup-intro h3[data-v-efa79ee2]{font-size:18px;font-weight:600;margin-bottom:12px;color:var(--desktop-window-text)}.ds-backup-intro p[data-v-efa79ee2]{font-size:14px;color:var(--desktop-window-text-secondary);line-height:1.6;margin:0}.instance-backup-container[data-v-d5dfc3ba]{display:flex;flex-direction:column;gap:16px}.list-header[data-v-d5dfc3ba]{display:flex;align-items:center;min-height:40px;margin-bottom:4px}.list-header .refresh-btn[data-v-d5dfc3ba]{margin-left:auto}.backup-list[data-v-d5dfc3ba]{max-height:400px;overflow-y:auto;padding:0;background:transparent}.backup-item[data-v-d5dfc3ba]{min-height:72px;margin-bottom:8px;border-radius:16px;overflow:hidden;background:rgba(var(--v-theme-on-surface),.035)}.backup-item .backup-name[data-v-d5dfc3ba]{color:var(--text-color);font-weight:600}.backup-item-icon[data-v-d5dfc3ba]{margin-right:14px;color:var(--color-gray-8)}.backup-item-actions[data-v-d5dfc3ba]{display:flex;align-items:center;gap:4px}.backup-loading[data-v-d5dfc3ba]{display:flex;min-height:220px;align-items:center;justify-content:center}.empty-backup[data-v-d5dfc3ba]{text-align:center;padding:40px 20px}.empty-backup .empty-icon[data-v-d5dfc3ba]{font-size:64px;color:var(--color-gray-5);margin-bottom:16px}.empty-backup p[data-v-d5dfc3ba]{color:var(--color-gray-7)}.backup-footer[data-v-d5dfc3ba]{display:flex;justify-content:flex-end;padding-top:16px;gap:8px}@media (max-width: 720px){.backup-item[data-v-d5dfc3ba] .v-list-item__append{align-self:stretch;margin-inline-start:0;padding-top:8px}.backup-item-actions[data-v-d5dfc3ba]{justify-content:flex-end;flex-wrap:wrap}.backup-footer[data-v-d5dfc3ba]{flex-wrap:wrap}}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{i as n_,h as o_}from"../../../assets/useInstanceActionAvailability-
|
|
2
|
-
`}}),R(C("TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATED"),"success"),$("open-file-editor",t,E)}catch(T){R(T.message,"error")}}}}},G=t=>{K.value={show:!0,name:t,resolve:async E=>{if(K.value.show=!1,E)try{const{execute:_}=N_();await _({params:{daemonId:s.daemonId,uuid:s.instanceUuid,backupName:t}}),R(C("TXT_CODE_INSTANCE_BACKUP_RESTORE_STARTED"),"success")}catch(_){R(_.message||C("TXT_CODE_INSTANCE_BACKUP_FAILED_RESTORE"),"error")}}}},Q=t=>{if(t===0)return"0 B";const E=1024,_=["B","KB","MB","GB","TB"],T=Math.floor(Math.log(t)/Math.log(E));return parseFloat((t/Math.pow(E,T)).toFixed(2))+" "+_[T]};return I_(()=>{M()}),E_(()=>{l&&clearInterval(l)}),(t,E)=>(I(),X("div",B_,[o("div",P_,[o("div",K_,[o("div",u_,[d(c(A(C)("TXT_CODE_INSTANCE_BACKUP_LIST"))+" ",1),N(A(v),{icon:"mdi-sync",class:D_([{"desktop-icon-spin":p.value},"refresh-btn"]),onClick:M},null,8,["class"])]),k.value.length>0?(I(),X("div",R_,[(I(!0),X(W,null,C_(k.value,_=>(I(),X("div",{key:_.name,class:"backup-item"},[o("div",U_,[o("div",{class:"backup-item__name",title:_.name},c(_.name),9,d_),o("div",X_,[o("span",null,c(Q(_.size)),1),E[12]||(E[12]=o("span",{class:"separator"},"|",-1)),o("span",null,c(_.time),1)])]),o("div",L_,[N(A(L),{icon:"",variant:"text",class:"action-btn action-btn--restore",title:A(C)("TXT_CODE_INSTANCE_BACKUP_RESTORE"),onClick:T=>G(_.name)},{default:S(()=>[N(A(v),{icon:"mdi-restore"})]),_:1},8,["title","onClick"]),N(A(L),{icon:"",variant:"text",class:"action-btn action-btn--delete",title:A(C)("TXT_CODE_INSTANCE_BACKUP_DELETE"),onClick:T=>Y(_.name)},{default:S(()=>[N(A(v),{icon:"mdi-delete-outline"})]),_:1},8,["title","onClick"])])]))),128))])):p.value?(I(),X("div",p_,[N(A(v),{icon:"mdi-loading"})])):(I(),X("div",m_,[N(A(v),{icon:"mdi-cloud-download-outline",class:"intro-icon"}),o("p",null,c(A(C)("TXT_CODE_INSTANCE_BACKUP_INTRO")),1)]))])]),o("div",F_,[N(A(L),{class:"ds-dialog-btn ds-dialog-btn--default",variant:"text",disabled:r.value,onClick:j},{default:S(()=>[d(c(A(C)("TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST")),1)]),_:1},8,["disabled"]),N(A(L),{class:"ds-dialog-btn ds-dialog-btn--primary",variant:"text",disabled:r.value,onClick:w},{default:S(()=>[d(c(A(C)("TXT_CODE_INSTANCE_BACKUP_CREATE")),1)]),_:1},8,["disabled"])]),u.value?(I(),b(g(u.value),{key:0,modelValue:P.value.show,"onUpdate:modelValue":E[0]||(E[0]=_=>P.value.show=_),id:"backup-delete-dialog",title:A(C)("TXT_CODE_71155575"),message:A(C)("TXT_CODE_INSTANCE_BACKUP_DELETE_CONFIRM",{name:P.value.name}),danger:"",onCancel:E[1]||(E[1]=_=>{var T,e;return(e=(T=P.value).resolve)==null?void 0:e.call(T,!1)}),onConfirm:E[2]||(E[2]=_=>{var T,e;return(e=(T=P.value).resolve)==null?void 0:e.call(T,!0)})},null,40,["modelValue","title","message"])):y("",!0),u.value?(I(),b(g(u.value),{key:1,modelValue:K.value.show,"onUpdate:modelValue":E[3]||(E[3]=_=>K.value.show=_),id:"backup-restore-dialog",height:250,title:A(C)("TXT_CODE_INSTANCE_BACKUP_RESTORE"),message:A(C)("TXT_CODE_INSTANCE_BACKUP_RESTORE_CONFIRM",{name:K.value.name}),onCancel:E[4]||(E[4]=_=>{var T,e;return(e=(T=K.value).resolve)==null?void 0:e.call(T,!1)}),onConfirm:E[5]||(E[5]=_=>{var T,e;return(e=(T=K.value).resolve)==null?void 0:e.call(T,!0)})},null,40,["modelValue","title","message"])):y("",!0),u.value?(I(),b(g(u.value),{key:2,modelValue:n.value.show,"onUpdate:modelValue":E[6]||(E[6]=_=>n.value.show=_),id:"backup-epbaklst-confirm-dialog",title:A(C)("TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST"),message:A(C)("TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATE_CONFIRM"),onCancel:E[7]||(E[7]=_=>{var T,e;return(e=(T=n.value).resolve)==null?void 0:e.call(T,!1)}),onConfirm:E[8]||(E[8]=_=>{var T,e;return(e=(T=n.value).resolve)==null?void 0:e.call(T,!0)})},null,40,["modelValue","title","message"])):y("",!0),u.value?(I(),b(g(u.value),{key:3,modelValue:F.value.show,"onUpdate:modelValue":E[9]||(E[9]=_=>F.value.show=_),id:"backup-confirm-dialog",title:A(C)("TXT_CODE_INSTANCE_BACKUP_CREATE"),message:A(C)("TXT_CODE_INSTANCE_BACKUP_CREATE_CONFIRM"),onCancel:E[10]||(E[10]=_=>{var T,e;return(e=(T=F.value).resolve)==null?void 0:e.call(T,!1)}),onConfirm:E[11]||(E[11]=_=>{var T,e;return(e=(T=F.value).resolve)==null?void 0:e.call(T,!0)})},null,40,["modelValue","title","message"])):y("",!0)]))}});const $_=A_(k_,[["__scopeId","data-v-bebeefcb"]]),v_="Instanz sichern",b_="Sicherung abgeschlossen",f_="Neue Sicherung",M_="Möchten Sie wirklich eine neue Sicherung erstellen? Dadurch wird die Instanz angehalten!",h_="Entfernen",g_="Möchten Sie die Sicherung {name} wirklich löschen?",y_=".epbaklst bearbeiten",w_=".epbaklst erstellt",x_="Die Datei .epbaklst existiert nicht. Möchten Sie sie erstellen?",z_="Sicherung konnte nicht gelöscht werden.",H_="Sicherungsliste konnte nicht geladen werden.",V_="Sicherung konnte nicht wiederhergestellt werden.",q_="Sicherungsaufgabe konnte nicht gestartet werden",Y_="Klicken Sie unten, um die aktuelle Instanz zu sichern.",j_="Sicherungsliste",G_="Wiederherstellen",Q_="Möchten Sie die Sicherung {name} wirklich in der aktuellen Instanz wiederherstellen? Dabei werden vorhandene Dateien überschrieben.",W_="Wiederherstellungsaufgabe gestartet.",J_="Sicherungsaufgabe gestartet",Z_={TXT_CODE_INSTANCE_BACKUP:v_,TXT_CODE_INSTANCE_BACKUP_COMPLETED:b_,TXT_CODE_INSTANCE_BACKUP_CREATE:f_,TXT_CODE_INSTANCE_BACKUP_CREATE_CONFIRM:M_,TXT_CODE_INSTANCE_BACKUP_DELETE:h_,TXT_CODE_INSTANCE_BACKUP_DELETE_CONFIRM:g_,TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST:y_,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATED:w_,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATE_CONFIRM:x_,TXT_CODE_INSTANCE_BACKUP_FAILED_DELETE:z_,TXT_CODE_INSTANCE_BACKUP_FAILED_FETCH:H_,TXT_CODE_INSTANCE_BACKUP_FAILED_RESTORE:V_,TXT_CODE_INSTANCE_BACKUP_FAILED_START:q_,TXT_CODE_INSTANCE_BACKUP_INTRO:Y_,TXT_CODE_INSTANCE_BACKUP_LIST:j_,TXT_CODE_INSTANCE_BACKUP_RESTORE:G_,TXT_CODE_INSTANCE_BACKUP_RESTORE_CONFIRM:Q_,TXT_CODE_INSTANCE_BACKUP_RESTORE_STARTED:W_,TXT_CODE_INSTANCE_BACKUP_STARTED:J_},_T="Backup Instance",TT="Backup completed",ET="New Backup",CT="Are you sure you want to create a new backup? This action will stop the instance!",eT="Delete",AT="Are you sure you want to delete backup {name}?",tT="Edit .epbaklst",aT="Created .epbaklst",NT="The .epbaklst file does not exist. Would you like to create it?",sT="Failed to delete the backup.",nT="Failed to load the backup list.",oT="Failed to restore the backup.",IT="Failed to start backup task",DT="Click the button below to start backing up the current instance.",ST="Backup List",cT="Restore",OT="Are you sure you want to restore backup {name} to the current instance? This will overwrite existing files.",iT="Backup restoration task started.",lT="Backup task started",rT={TXT_CODE_INSTANCE_BACKUP:_T,TXT_CODE_INSTANCE_BACKUP_COMPLETED:TT,TXT_CODE_INSTANCE_BACKUP_CREATE:ET,TXT_CODE_INSTANCE_BACKUP_CREATE_CONFIRM:CT,TXT_CODE_INSTANCE_BACKUP_DELETE:eT,TXT_CODE_INSTANCE_BACKUP_DELETE_CONFIRM:AT,TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST:tT,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATED:aT,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATE_CONFIRM:NT,TXT_CODE_INSTANCE_BACKUP_FAILED_DELETE:sT,TXT_CODE_INSTANCE_BACKUP_FAILED_FETCH:nT,TXT_CODE_INSTANCE_BACKUP_FAILED_RESTORE:oT,TXT_CODE_INSTANCE_BACKUP_FAILED_START:IT,TXT_CODE_INSTANCE_BACKUP_INTRO:DT,TXT_CODE_INSTANCE_BACKUP_LIST:ST,TXT_CODE_INSTANCE_BACKUP_RESTORE:cT,TXT_CODE_INSTANCE_BACKUP_RESTORE_CONFIRM:OT,TXT_CODE_INSTANCE_BACKUP_RESTORE_STARTED:iT,TXT_CODE_INSTANCE_BACKUP_STARTED:lT},BT="Copia de seguridad de instancia",PT="Copia completada",KT="Nueva copia",uT="¿Seguro que quieres crear una copia nueva? ¡La instancia se detendrá!",RT="Eliminar",UT="¿Seguro que quieres eliminar la copia {name}?",dT="Editar .epbaklst",XT=".epbaklst creado",LT="El archivo .epbaklst no existe. ¿Quieres crearlo?",mT="No se pudo eliminar la copia de seguridad.",pT="No se pudo cargar la lista de copias de seguridad.",FT="No se pudo restaurar la copia de seguridad.",kT="No se pudo iniciar la tarea de copia",$T="Pulsa el botón inferior para crear una copia de la instancia actual.",vT="Lista de copias",bT="Restaurar",fT="¿Seguro que quieres restaurar la copia {name} en la instancia actual? Los archivos existentes se sobrescribirán.",MT="Tarea de restauración iniciada.",hT="Tarea de copia iniciada",gT={TXT_CODE_INSTANCE_BACKUP:BT,TXT_CODE_INSTANCE_BACKUP_COMPLETED:PT,TXT_CODE_INSTANCE_BACKUP_CREATE:KT,TXT_CODE_INSTANCE_BACKUP_CREATE_CONFIRM:uT,TXT_CODE_INSTANCE_BACKUP_DELETE:RT,TXT_CODE_INSTANCE_BACKUP_DELETE_CONFIRM:UT,TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST:dT,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATED:XT,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATE_CONFIRM:LT,TXT_CODE_INSTANCE_BACKUP_FAILED_DELETE:mT,TXT_CODE_INSTANCE_BACKUP_FAILED_FETCH:pT,TXT_CODE_INSTANCE_BACKUP_FAILED_RESTORE:FT,TXT_CODE_INSTANCE_BACKUP_FAILED_START:kT,TXT_CODE_INSTANCE_BACKUP_INTRO:$T,TXT_CODE_INSTANCE_BACKUP_LIST:vT,TXT_CODE_INSTANCE_BACKUP_RESTORE:bT,TXT_CODE_INSTANCE_BACKUP_RESTORE_CONFIRM:fT,TXT_CODE_INSTANCE_BACKUP_RESTORE_STARTED:MT,TXT_CODE_INSTANCE_BACKUP_STARTED:hT},yT="Sauvegarde de l’instance",wT="Sauvegarde terminée",xT="Nouvelle sauvegarde",zT="Voulez-vous vraiment créer une nouvelle sauvegarde ? L’instance sera arrêtée !",HT="Supprimer",VT="Voulez-vous vraiment supprimer la sauvegarde {name} ?",qT="Modifier .epbaklst",YT=".epbaklst créé",jT="Le fichier .epbaklst n’existe pas. Voulez-vous le créer ?",GT="Échec de la suppression de la sauvegarde.",QT="Échec du chargement de la liste des sauvegardes.",WT="Échec de la restauration de la sauvegarde.",JT="Impossible de démarrer la tâche de sauvegarde",ZT="Cliquez sur le bouton ci-dessous pour sauvegarder l’instance actuelle.",_E="Liste des sauvegardes",TE="Restaurer",EE="Voulez-vous vraiment restaurer la sauvegarde {name} dans l’instance actuelle ? Les fichiers existants seront écrasés.",CE="Tâche de restauration démarrée.",eE="Tâche de sauvegarde démarrée",AE={TXT_CODE_INSTANCE_BACKUP:yT,TXT_CODE_INSTANCE_BACKUP_COMPLETED:wT,TXT_CODE_INSTANCE_BACKUP_CREATE:xT,TXT_CODE_INSTANCE_BACKUP_CREATE_CONFIRM:zT,TXT_CODE_INSTANCE_BACKUP_DELETE:HT,TXT_CODE_INSTANCE_BACKUP_DELETE_CONFIRM:VT,TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST:qT,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATED:YT,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATE_CONFIRM:jT,TXT_CODE_INSTANCE_BACKUP_FAILED_DELETE:GT,TXT_CODE_INSTANCE_BACKUP_FAILED_FETCH:QT,TXT_CODE_INSTANCE_BACKUP_FAILED_RESTORE:WT,TXT_CODE_INSTANCE_BACKUP_FAILED_START:JT,TXT_CODE_INSTANCE_BACKUP_INTRO:ZT,TXT_CODE_INSTANCE_BACKUP_LIST:_E,TXT_CODE_INSTANCE_BACKUP_RESTORE:TE,TXT_CODE_INSTANCE_BACKUP_RESTORE_CONFIRM:EE,TXT_CODE_INSTANCE_BACKUP_RESTORE_STARTED:CE,TXT_CODE_INSTANCE_BACKUP_STARTED:eE},tE="インスタンスをバックアップ",aE="バックアップ完了",NE="新しいバックアップ",sE="新しいバックアップを作成しますか?インスタンスは停止します!",nE="削除",oE="バックアップ {name} を削除しますか?",IE=".epbaklstを編集",DE=".epbaklstを作成しました",SE=".epbaklstファイルがありません。作成しますか?",cE="バックアップの削除に失敗しました。",OE="バックアップ一覧の取得に失敗しました。",iE="バックアップの復元に失敗しました。",lE="バックアップタスクを開始できませんでした",rE="下のボタンをクリックして現在のインスタンスをバックアップします。",BE="バックアップ一覧",PE="復元",KE="バックアップ {name} を現在のインスタンスに復元しますか?既存のファイルは上書きされます。",uE="復元タスクを開始しました。",RE="バックアップタスクを開始しました",UE={TXT_CODE_INSTANCE_BACKUP:tE,TXT_CODE_INSTANCE_BACKUP_COMPLETED:aE,TXT_CODE_INSTANCE_BACKUP_CREATE:NE,TXT_CODE_INSTANCE_BACKUP_CREATE_CONFIRM:sE,TXT_CODE_INSTANCE_BACKUP_DELETE:nE,TXT_CODE_INSTANCE_BACKUP_DELETE_CONFIRM:oE,TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST:IE,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATED:DE,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATE_CONFIRM:SE,TXT_CODE_INSTANCE_BACKUP_FAILED_DELETE:cE,TXT_CODE_INSTANCE_BACKUP_FAILED_FETCH:OE,TXT_CODE_INSTANCE_BACKUP_FAILED_RESTORE:iE,TXT_CODE_INSTANCE_BACKUP_FAILED_START:lE,TXT_CODE_INSTANCE_BACKUP_INTRO:rE,TXT_CODE_INSTANCE_BACKUP_LIST:BE,TXT_CODE_INSTANCE_BACKUP_RESTORE:PE,TXT_CODE_INSTANCE_BACKUP_RESTORE_CONFIRM:KE,TXT_CODE_INSTANCE_BACKUP_RESTORE_STARTED:uE,TXT_CODE_INSTANCE_BACKUP_STARTED:RE},dE="인스턴스 백업",XE="백업 완료",LE="새 백업",mE="새 백업을 만드시겠습니까? 인스턴스가 중지됩니다!",pE="제거",FE="백업 {name}을(를) 삭제하시겠습니까?",kE=".epbaklst 편집",$E=".epbaklst 생성됨",vE=".epbaklst 파일이 없습니다. 생성하시겠습니까?",bE="백업을 삭제하지 못했습니다.",fE="백업 목록을 불러오지 못했습니다.",ME="백업을 복원하지 못했습니다.",hE="백업 작업을 시작하지 못했습니다",gE="아래 버튼을 눌러 현재 인스턴스를 백업하세요.",yE="백업 목록",wE="복원",xE="백업 {name}을(를) 현재 인스턴스로 복원하시겠습니까? 기존 파일을 덮어씁니다.",zE="복원 작업이 시작되었습니다.",HE="백업 작업이 시작되었습니다",VE={TXT_CODE_INSTANCE_BACKUP:dE,TXT_CODE_INSTANCE_BACKUP_COMPLETED:XE,TXT_CODE_INSTANCE_BACKUP_CREATE:LE,TXT_CODE_INSTANCE_BACKUP_CREATE_CONFIRM:mE,TXT_CODE_INSTANCE_BACKUP_DELETE:pE,TXT_CODE_INSTANCE_BACKUP_DELETE_CONFIRM:FE,TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST:kE,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATED:$E,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATE_CONFIRM:vE,TXT_CODE_INSTANCE_BACKUP_FAILED_DELETE:bE,TXT_CODE_INSTANCE_BACKUP_FAILED_FETCH:fE,TXT_CODE_INSTANCE_BACKUP_FAILED_RESTORE:ME,TXT_CODE_INSTANCE_BACKUP_FAILED_START:hE,TXT_CODE_INSTANCE_BACKUP_INTRO:gE,TXT_CODE_INSTANCE_BACKUP_LIST:yE,TXT_CODE_INSTANCE_BACKUP_RESTORE:wE,TXT_CODE_INSTANCE_BACKUP_RESTORE_CONFIRM:xE,TXT_CODE_INSTANCE_BACKUP_RESTORE_STARTED:zE,TXT_CODE_INSTANCE_BACKUP_STARTED:HE},qE="Backup da instância",YE="Backup concluído",jE="Novo backup",GE="Tem certeza de que deseja criar um novo backup? A instância será parada!",QE="Excluir",WE="Tem certeza de que deseja excluir o backup {name}?",JE="Editar .epbaklst",ZE=".epbaklst criado",_C="O arquivo .epbaklst não existe. Deseja criá-lo?",TC="Falha ao excluir o backup.",EC="Falha ao carregar a lista de backups.",CC="Falha ao restaurar o backup.",eC="Falha ao iniciar a tarefa de backup",AC="Clique no botão abaixo para fazer backup da instância atual.",tC="Lista de backups",aC="Restaurar",NC="Tem certeza de que deseja restaurar o backup {name} na instância atual? Os arquivos existentes serão sobrescritos.",sC="Tarefa de restauração iniciada.",nC="Tarefa de backup iniciada",oC={TXT_CODE_INSTANCE_BACKUP:qE,TXT_CODE_INSTANCE_BACKUP_COMPLETED:YE,TXT_CODE_INSTANCE_BACKUP_CREATE:jE,TXT_CODE_INSTANCE_BACKUP_CREATE_CONFIRM:GE,TXT_CODE_INSTANCE_BACKUP_DELETE:QE,TXT_CODE_INSTANCE_BACKUP_DELETE_CONFIRM:WE,TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST:JE,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATED:ZE,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATE_CONFIRM:_C,TXT_CODE_INSTANCE_BACKUP_FAILED_DELETE:TC,TXT_CODE_INSTANCE_BACKUP_FAILED_FETCH:EC,TXT_CODE_INSTANCE_BACKUP_FAILED_RESTORE:CC,TXT_CODE_INSTANCE_BACKUP_FAILED_START:eC,TXT_CODE_INSTANCE_BACKUP_INTRO:AC,TXT_CODE_INSTANCE_BACKUP_LIST:tC,TXT_CODE_INSTANCE_BACKUP_RESTORE:aC,TXT_CODE_INSTANCE_BACKUP_RESTORE_CONFIRM:NC,TXT_CODE_INSTANCE_BACKUP_RESTORE_STARTED:sC,TXT_CODE_INSTANCE_BACKUP_STARTED:nC},IC="Создать резервную копию",DC="Резервное копирование завершено",SC="Новая резервная копия",cC="Создать новую резервную копию? Экземпляр будет остановлен!",OC="Удалить",iC="Удалить резервную копию {name}?",lC="Изменить .epbaklst",rC=".epbaklst создан",BC="Файл .epbaklst не существует. Создать его?",PC="Не удалось удалить резервную копию.",KC="Не удалось загрузить список резервных копий.",uC="Не удалось восстановить резервную копию.",RC="Не удалось запустить задачу резервного копирования",UC="Нажмите кнопку ниже, чтобы создать резервную копию текущего экземпляра.",dC="Список резервных копий",XC="Восстановить",LC="Восстановить резервную копию {name} в текущий экземпляр? Существующие файлы будут перезаписаны.",mC="Задача восстановления запущена.",pC="Задача резервного копирования запущена",FC={TXT_CODE_INSTANCE_BACKUP:IC,TXT_CODE_INSTANCE_BACKUP_COMPLETED:DC,TXT_CODE_INSTANCE_BACKUP_CREATE:SC,TXT_CODE_INSTANCE_BACKUP_CREATE_CONFIRM:cC,TXT_CODE_INSTANCE_BACKUP_DELETE:OC,TXT_CODE_INSTANCE_BACKUP_DELETE_CONFIRM:iC,TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST:lC,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATED:rC,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATE_CONFIRM:BC,TXT_CODE_INSTANCE_BACKUP_FAILED_DELETE:PC,TXT_CODE_INSTANCE_BACKUP_FAILED_FETCH:KC,TXT_CODE_INSTANCE_BACKUP_FAILED_RESTORE:uC,TXT_CODE_INSTANCE_BACKUP_FAILED_START:RC,TXT_CODE_INSTANCE_BACKUP_INTRO:UC,TXT_CODE_INSTANCE_BACKUP_LIST:dC,TXT_CODE_INSTANCE_BACKUP_RESTORE:XC,TXT_CODE_INSTANCE_BACKUP_RESTORE_CONFIRM:LC,TXT_CODE_INSTANCE_BACKUP_RESTORE_STARTED:mC,TXT_CODE_INSTANCE_BACKUP_STARTED:pC},kC="สำรองข้อมูลอินสแตนซ์",$C="สำรองข้อมูลเสร็จแล้ว",vC="ข้อมูลสำรองใหม่",bC="ต้องการสร้างข้อมูลสำรองใหม่หรือไม่ อินสแตนซ์จะถูกหยุด",fC="ลบ",MC="ต้องการลบข้อมูลสำรอง {name} หรือไม่",hC="แก้ไข .epbaklst",gC="สร้าง .epbaklst แล้ว",yC="ไม่มีไฟล์ .epbaklst ต้องการสร้างหรือไม่",wC="ไม่สามารถลบข้อมูลสำรองได้",xC="ไม่สามารถโหลดรายการข้อมูลสำรองได้",zC="ไม่สามารถกู้คืนข้อมูลสำรองได้",HC="เริ่มงานสำรองข้อมูลไม่สำเร็จ",VC="คลิกปุ่มด้านล่างเพื่อสำรองข้อมูลอินสแตนซ์ปัจจุบัน",qC="รายการข้อมูลสำรอง",YC="กู้คืน",jC="ต้องการกู้คืนข้อมูลสำรอง {name} ไปยังอินสแตนซ์ปัจจุบันหรือไม่ ไฟล์เดิมจะถูกเขียนทับ",GC="เริ่มงานกู้คืนแล้ว",QC="เริ่มงานสำรองข้อมูลแล้ว",WC={TXT_CODE_INSTANCE_BACKUP:kC,TXT_CODE_INSTANCE_BACKUP_COMPLETED:$C,TXT_CODE_INSTANCE_BACKUP_CREATE:vC,TXT_CODE_INSTANCE_BACKUP_CREATE_CONFIRM:bC,TXT_CODE_INSTANCE_BACKUP_DELETE:fC,TXT_CODE_INSTANCE_BACKUP_DELETE_CONFIRM:MC,TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST:hC,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATED:gC,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATE_CONFIRM:yC,TXT_CODE_INSTANCE_BACKUP_FAILED_DELETE:wC,TXT_CODE_INSTANCE_BACKUP_FAILED_FETCH:xC,TXT_CODE_INSTANCE_BACKUP_FAILED_RESTORE:zC,TXT_CODE_INSTANCE_BACKUP_FAILED_START:HC,TXT_CODE_INSTANCE_BACKUP_INTRO:VC,TXT_CODE_INSTANCE_BACKUP_LIST:qC,TXT_CODE_INSTANCE_BACKUP_RESTORE:YC,TXT_CODE_INSTANCE_BACKUP_RESTORE_CONFIRM:jC,TXT_CODE_INSTANCE_BACKUP_RESTORE_STARTED:GC,TXT_CODE_INSTANCE_BACKUP_STARTED:QC},JC="Örneği yedekle",ZC="Yedekleme tamamlandı",_e="Yeni yedek",Te="Yeni bir yedek oluşturmak istediğinizden emin misiniz? Örnek durdurulacak!",Ee="Sil",Ce="{name} yedeğini silmek istiyor musunuz?",ee=".epbaklst dosyasını düzenle",Ae=".epbaklst oluşturuldu",te=".epbaklst dosyası yok. Oluşturulsun mu?",ae="Yedek silinemedi.",Ne="Yedek listesi yüklenemedi.",se="Yedek geri yüklenemedi.",ne="Yedekleme görevi başlatılamadı",oe="Geçerli örneği yedeklemek için aşağıdaki düğmeye tıklayın.",Ie="Yedek listesi",De="Geri yükle",Se="{name} yedeği geçerli örneğe geri yüklensin mi? Mevcut dosyaların üzerine yazılacak.",ce="Geri yükleme görevi başlatıldı.",Oe="Yedekleme görevi başlatıldı",ie={TXT_CODE_INSTANCE_BACKUP:JC,TXT_CODE_INSTANCE_BACKUP_COMPLETED:ZC,TXT_CODE_INSTANCE_BACKUP_CREATE:_e,TXT_CODE_INSTANCE_BACKUP_CREATE_CONFIRM:Te,TXT_CODE_INSTANCE_BACKUP_DELETE:Ee,TXT_CODE_INSTANCE_BACKUP_DELETE_CONFIRM:Ce,TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST:ee,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATED:Ae,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATE_CONFIRM:te,TXT_CODE_INSTANCE_BACKUP_FAILED_DELETE:ae,TXT_CODE_INSTANCE_BACKUP_FAILED_FETCH:Ne,TXT_CODE_INSTANCE_BACKUP_FAILED_RESTORE:se,TXT_CODE_INSTANCE_BACKUP_FAILED_START:ne,TXT_CODE_INSTANCE_BACKUP_INTRO:oe,TXT_CODE_INSTANCE_BACKUP_LIST:Ie,TXT_CODE_INSTANCE_BACKUP_RESTORE:De,TXT_CODE_INSTANCE_BACKUP_RESTORE_CONFIRM:Se,TXT_CODE_INSTANCE_BACKUP_RESTORE_STARTED:ce,TXT_CODE_INSTANCE_BACKUP_STARTED:Oe},le="备份实例",re="备份已完成",Be="新建备份",Pe="确定要创建新备份吗?此操作将会停止实例!",Ke="删除",ue="确定要删除备份 {name} 吗?",Re="编辑 .epbaklst",Ue="已创建 .epbaklst",de="文件 .epbaklst 不存在。是否要创建它?",Xe="删除备份失败",Le="获取备份列表失败",me="恢复备份失败",pe="启动备份任务失败",Fe="点击下方按钮开始备份当前实例。",ke="备份列表",$e="恢复",ve="确定要将备份 {name} 恢复到当前实例吗?此操作将停止实例并覆盖现有文件!",be="备份恢复任务已启动",fe="备份任务已启动",Me={TXT_CODE_INSTANCE_BACKUP:le,TXT_CODE_INSTANCE_BACKUP_COMPLETED:re,TXT_CODE_INSTANCE_BACKUP_CREATE:Be,TXT_CODE_INSTANCE_BACKUP_CREATE_CONFIRM:Pe,TXT_CODE_INSTANCE_BACKUP_DELETE:Ke,TXT_CODE_INSTANCE_BACKUP_DELETE_CONFIRM:ue,TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST:Re,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATED:Ue,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATE_CONFIRM:de,TXT_CODE_INSTANCE_BACKUP_FAILED_DELETE:Xe,TXT_CODE_INSTANCE_BACKUP_FAILED_FETCH:Le,TXT_CODE_INSTANCE_BACKUP_FAILED_RESTORE:me,TXT_CODE_INSTANCE_BACKUP_FAILED_START:pe,TXT_CODE_INSTANCE_BACKUP_INTRO:Fe,TXT_CODE_INSTANCE_BACKUP_LIST:ke,TXT_CODE_INSTANCE_BACKUP_RESTORE:$e,TXT_CODE_INSTANCE_BACKUP_RESTORE_CONFIRM:ve,TXT_CODE_INSTANCE_BACKUP_RESTORE_STARTED:be,TXT_CODE_INSTANCE_BACKUP_STARTED:fe},he="備份實例",ge="備份已完成",ye="新建備份",we="確定要創建新備份嗎?此操作將會停止實例!",xe="移除",ze="確定要刪除備份 {name} 嗎?",He="編輯 .epbaklst",Ve="已創建 .epbaklst",qe="文件 .epbaklst 不存在。是否要創建它?",Ye="刪除備份失敗",je="取得備份清單失敗",Ge="還原備份失敗",Qe="啟動備份任務失败",We="點击下方按钮開始備份當前實例。",Je="備份列表",Ze="恢復",_A="確定要將備份 {name} 恢復到當前實例嗎?此操作將停止實例並覆盖现有文件!",TA="備份恢復任務已啟動",EA="備份任務已啟動",CA={TXT_CODE_INSTANCE_BACKUP:he,TXT_CODE_INSTANCE_BACKUP_COMPLETED:ge,TXT_CODE_INSTANCE_BACKUP_CREATE:ye,TXT_CODE_INSTANCE_BACKUP_CREATE_CONFIRM:we,TXT_CODE_INSTANCE_BACKUP_DELETE:xe,TXT_CODE_INSTANCE_BACKUP_DELETE_CONFIRM:ze,TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST:He,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATED:Ve,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATE_CONFIRM:qe,TXT_CODE_INSTANCE_BACKUP_FAILED_DELETE:Ye,TXT_CODE_INSTANCE_BACKUP_FAILED_FETCH:je,TXT_CODE_INSTANCE_BACKUP_FAILED_RESTORE:Ge,TXT_CODE_INSTANCE_BACKUP_FAILED_START:Qe,TXT_CODE_INSTANCE_BACKUP_INTRO:We,TXT_CODE_INSTANCE_BACKUP_LIST:Je,TXT_CODE_INSTANCE_BACKUP_RESTORE:Ze,TXT_CODE_INSTANCE_BACKUP_RESTORE_CONFIRM:_A,TXT_CODE_INSTANCE_BACKUP_RESTORE_STARTED:TA,TXT_CODE_INSTANCE_BACKUP_STARTED:EA},eA={de_de:Z_,en_us:rT,es_es:gT,fr_fr:AE,ja_jp:UE,ko_kr:VE,pt_br:oC,ru_ru:FC,th_th:WC,tr_tr:ie,zh_cn:Me,zh_tw:CA},AA={class:"instance-backup-container"},tA={class:"backup-list-area"},aA={class:"list-header"},NA={key:0,class:"backup-loading"},sA={class:"backup-item-actions"},nA={key:2,class:"empty-backup"},oA={class:"backup-footer"},IA=T_({__name:"InstanceBackupModal",props:{instanceUuid:{},daemonId:{}},emits:["close"],setup(B,{expose:f,emit:u}){const a=B,s=u,$=O(!1),r=O(!1),m=O(null),D=O(0),k=O([]),p=O(!1),P=O(),K=()=>{const _=V("file");if(!_)throw new Error("file plugin is not installed");return _.api},F=e_(()=>{var _;return(_=V("file"))==null?void 0:_.FileEditor});let n=null;const l=async()=>{var _;p.value=!0;try{const{execute:T}=q(),e=await T({params:{daemonId:a.daemonId,uuid:a.instanceUuid,task_name:"instance_backup"},data:{taskId:""}});let i=null;Array.isArray(e.value)?i=e.value.find(s_=>{var Z;return((Z=s_.detail)==null?void 0:Z.instanceUuid)===a.instanceUuid}):e.value&&((_=e.value.detail)==null?void 0:_.instanceUuid)===a.instanceUuid&&(i=e.value),i?(D.value=i.status,D.value===1&&(m.value=i.taskId,w())):D.value=0;const{execute:h}=t_(),z=await h({params:{daemonId:a.daemonId,uuid:a.instanceUuid}});z.value&&(k.value=z.value)}catch(T){U.error(T.message||C("TXT_CODE_INSTANCE_BACKUP_FAILED_FETCH"))}finally{p.value=!1}},M=async()=>{D.value===1||r.value||H.confirm({title:C("TXT_CODE_INSTANCE_BACKUP_CREATE"),content:C("TXT_CODE_INSTANCE_BACKUP_CREATE_CONFIRM"),onOk:async()=>{if(!(D.value===1||r.value)){r.value=!0;try{const{execute:_}=__(),T=await _({params:{daemonId:a.daemonId,uuid:a.instanceUuid,task_name:"instance_backup"},data:{time:new Date().getTime(),newInstanceName:""}});T.value&&(m.value=T.value.taskId,U.success(C("TXT_CODE_INSTANCE_BACKUP_STARTED")),w())}catch(_){U.error(_.message||C("TXT_CODE_INSTANCE_BACKUP_FAILED_START"))}finally{r.value=!1}}}})},w=()=>{n&&clearInterval(n),n=setInterval(async()=>{if(m.value)try{const{execute:_}=q(),T=await _({params:{daemonId:a.daemonId,uuid:a.instanceUuid,task_name:"instance_backup"},data:{taskId:m.value}});T.value&&(D.value=T.value.status,D.value!==1&&(clearInterval(n),n=null,l(),D.value===0&&U.success(C("TXT_CODE_INSTANCE_BACKUP_COMPLETED"))))}catch{clearInterval(n),n=null}},2e3)},x=_=>{H.confirm({title:C("TXT_CODE_71155575"),content:C("TXT_CODE_INSTANCE_BACKUP_DELETE_CONFIRM",{name:_}),okButtonProps:{danger:!0},onOk:async()=>{try{const{execute:T}=a_();await T({params:{daemonId:a.daemonId,uuid:a.instanceUuid,backupName:_}}),U.success(C("TXT_CODE_28190dbc")),l()}catch(T){U.error(T.message||C("TXT_CODE_INSTANCE_BACKUP_FAILED_DELETE"))}}})},Y=_=>{H.confirm({title:C("TXT_CODE_INSTANCE_BACKUP_RESTORE"),content:C("TXT_CODE_INSTANCE_BACKUP_RESTORE_CONFIRM",{name:_}),onOk:async()=>{try{const{execute:T}=N_();await T({params:{daemonId:a.daemonId,uuid:a.instanceUuid,backupName:_}}),U.success(C("TXT_CODE_INSTANCE_BACKUP_RESTORE_STARTED"))}catch(T){U.error(T.message||C("TXT_CODE_INSTANCE_BACKUP_FAILED_RESTORE"))}}})},j=async()=>{var e;const _=".epbaklst",T=".epbaklst";try{const{execute:i}=K().fileContent(),h=await i({params:{daemonId:a.daemonId,uuid:a.instanceUuid},data:{target:_}});(e=P.value)==null||e.openDialog(_,T)}catch{H.confirm({title:C("TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST"),content:C("TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATE_CONFIRM"),onOk:async()=>{var i;try{const{execute:h}=K().touchFile();await h({params:{daemonId:a.daemonId,uuid:a.instanceUuid},data:{target:_}});const{execute:z}=K().fileContent();await z({params:{daemonId:a.daemonId,uuid:a.instanceUuid},data:{target:_,text:`$black
|
|
3
|
-
`}}),U.success(C("TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATED")),(i=P.value)==null||i.openDialog(_,T)}catch(h){U.error(h.message)}}})}},G=_=>{if(_===0)return"0 B";const T=1024,e=["B","KB","MB","GB","TB"],i=Math.floor(Math.log(_)/Math.log(T));return parseFloat((_/Math.pow(T,i)).toFixed(2))+" "+e[i]},Q=()=>{$.value=!0,l()},t=()=>{$.value=!1},E=()=>{n&&clearInterval(n),n=null,s("close")};return E_(()=>{n&&clearInterval(n)}),
|
|
1
|
+
import{i as n_,h as o_}from"../../../assets/useInstanceActionAvailability-16de3001.js";import{t as C}from"../../../assets/i18n-e810b9fa.js";import{u as V}from"../../../assets/context-cc90576e.js";import{q,c as __}from"../../../assets/instance-cc59e210.js";import{n as R}from"../../../assets/desktopNotice-5ca3448c.js";import{u as J,m as U}from"../../../assets/useDefineApi-b726db1e.js";import{a1 as T_,ay as I_,aC as E_,aE as I,Q as X,R as o,_ as d,bP as c,bJ as A,$ as N,bM as D_,gE as v,F as W,aK as C_,ba as S,gC as L,O as f,aO as g,P as y,N as e_,bz as O,gM as S_,gN as c_,gO as O_,gP as i_,gQ as l_}from"../../../assets/vue-6b52a630.js";import{_ as A_}from"../../../assets/_plugin-vue_export-helper-c27b6911.js";import{M as H}from"../../../assets/vuetifyModal-8382b175.js";import{_ as r_}from"../../../assets/AppDialog.vue_vue_type_style_index_0_lang-e6e38e8b.js";import"../../../assets/instance_contract-0115efe5.js";import"../../../assets/_elements-sdk_cordis-e3bebc89.js";import"../../../assets/_elements-sdk_cosmokit-e4842f5c.js";import"../../../assets/htmlparser2-bcb8f9db.js";import"../../../assets/lodash-001e4f93.js";const t_=J({url:"/api/protected_instance/backup",method:"GET"}),a_=J({url:"/api/protected_instance/backup",method:"DELETE"}),N_=J({url:"/api/protected_instance/backup/restore",method:"POST"}),B_={class:"ds-backup"},P_={class:"ds-backup-body"},K_={class:"ds-backup-list-container"},u_={class:"list-header"},R_={key:0,class:"backup-list"},U_={class:"backup-item__info"},d_=["title"],X_={class:"backup-item__meta"},L_={class:"backup-item__actions"},m_={key:1,class:"ds-backup-intro"},p_={key:2,class:"list-loading"},F_={class:"ds-backup-footer"},k_=T_({__name:"DesktopInstanceBackup",props:{instanceUuid:{},daemonId:{}},emits:["close","open-file-editor"],setup(B,{emit:b}){const u=e_(()=>{var t;return(t=V("desktop"))==null?void 0:t.confirmation}),a=()=>{const t=V("file");if(!t)throw new Error("file plugin is not installed");return t.api},s=B,$=b,r=O(!1),m=O(null),D=O(0),k=O([]),p=O(!1),P=O({show:!1,name:"",resolve:null}),K=O({show:!1,name:"",resolve:null}),F=O({show:!1,resolve:null}),n=O({show:!1,resolve:null});let l=null;const M=async()=>{p.value=!0;try{const{execute:t}=q(),E=await t({params:{daemonId:s.daemonId,uuid:s.instanceUuid,task_name:"instance_backup"},data:{taskId:""}});E.value&&E.value.status===1&&(D.value=1,m.value=E.value.taskId,x());const{execute:_}=t_(),T=await _({params:{daemonId:s.daemonId,uuid:s.instanceUuid}});T.value&&(k.value=T.value)}catch(t){R(t.message||C("TXT_CODE_INSTANCE_BACKUP_FAILED_FETCH"),"error")}finally{p.value=!1}},w=async()=>{D.value===1||r.value||(F.value={show:!0,resolve:async t=>{if(F.value.show=!1,t){if(D.value===1||r.value)return;r.value=!0;try{const{execute:E}=__(),_=await E({params:{daemonId:s.daemonId,uuid:s.instanceUuid,task_name:"instance_backup"},data:{time:new Date().getTime(),newInstanceName:""}});_.value&&(m.value=_.value.taskId,R(C("TXT_CODE_INSTANCE_BACKUP_STARTED"),"success"),x())}catch(E){R(E.message||C("TXT_CODE_INSTANCE_BACKUP_FAILED_START"),"error")}finally{r.value=!1}}}})},x=()=>{l&&clearInterval(l),l=setInterval(async()=>{if(m.value)try{const{execute:t}=q(),E=await t({params:{daemonId:s.daemonId,uuid:s.instanceUuid,task_name:"instance_backup"},data:{taskId:m.value}});E.value&&(D.value=E.value.status,D.value!==1&&(clearInterval(l),l=null,M(),D.value===0&&R(C("TXT_CODE_INSTANCE_BACKUP_COMPLETED"),"success")))}catch{clearInterval(l),l=null}},2e3)},Y=t=>{P.value={show:!0,name:t,resolve:async E=>{if(P.value.show=!1,E)try{const{execute:_}=a_();await _({params:{daemonId:s.daemonId,uuid:s.instanceUuid,backupName:t}}),R(C("TXT_CODE_28190dbc"),"success"),M()}catch(_){R(_.message||C("TXT_CODE_INSTANCE_BACKUP_FAILED_DELETE"),"error")}}}},j=async()=>{const t=".epbaklst",E=".epbaklst";try{const{execute:_}=a().fileContent();(await _({params:{daemonId:s.daemonId,uuid:s.instanceUuid},data:{target:t}})).value!==void 0&&$("open-file-editor",t,E)}catch{n.value={show:!0,resolve:async _=>{if(n.value.show=!1,_)try{const{execute:T}=a().touchFile();await T({params:{daemonId:s.daemonId,uuid:s.instanceUuid},data:{target:t}});const{execute:e}=a().fileContent();await e({params:{daemonId:s.daemonId,uuid:s.instanceUuid},data:{target:t,text:`$black
|
|
2
|
+
`}}),R(C("TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATED"),"success"),$("open-file-editor",t,E)}catch(T){R(T.message,"error")}}}}},G=t=>{K.value={show:!0,name:t,resolve:async E=>{if(K.value.show=!1,E)try{const{execute:_}=N_();await _({params:{daemonId:s.daemonId,uuid:s.instanceUuid,backupName:t}}),R(C("TXT_CODE_INSTANCE_BACKUP_RESTORE_STARTED"),"success")}catch(_){R(_.message||C("TXT_CODE_INSTANCE_BACKUP_FAILED_RESTORE"),"error")}}}},Q=t=>{if(t===0)return"0 B";const E=1024,_=["B","KB","MB","GB","TB"],T=Math.floor(Math.log(t)/Math.log(E));return parseFloat((t/Math.pow(E,T)).toFixed(2))+" "+_[T]};return I_(()=>{M()}),E_(()=>{l&&clearInterval(l)}),(t,E)=>(I(),X("div",B_,[o("div",P_,[o("div",K_,[o("div",u_,[d(c(A(C)("TXT_CODE_INSTANCE_BACKUP_LIST"))+" ",1),N(A(v),{icon:"mdi-sync",class:D_([{"desktop-icon-spin":p.value},"refresh-btn"]),onClick:M},null,8,["class"])]),k.value.length>0?(I(),X("div",R_,[(I(!0),X(W,null,C_(k.value,_=>(I(),X("div",{key:_.name,class:"backup-item"},[o("div",U_,[o("div",{class:"backup-item__name",title:_.name},c(_.name),9,d_),o("div",X_,[o("span",null,c(Q(_.size)),1),E[12]||(E[12]=o("span",{class:"separator"},"|",-1)),o("span",null,c(_.time),1)])]),o("div",L_,[N(A(L),{icon:"",variant:"text",class:"action-btn action-btn--restore",title:A(C)("TXT_CODE_INSTANCE_BACKUP_RESTORE"),onClick:T=>G(_.name)},{default:S(()=>[N(A(v),{icon:"mdi-restore"})]),_:1},8,["title","onClick"]),N(A(L),{icon:"",variant:"text",class:"action-btn action-btn--delete",title:A(C)("TXT_CODE_INSTANCE_BACKUP_DELETE"),onClick:T=>Y(_.name)},{default:S(()=>[N(A(v),{icon:"mdi-delete-outline"})]),_:1},8,["title","onClick"])])]))),128))])):p.value?(I(),X("div",p_,[N(A(v),{icon:"mdi-loading"})])):(I(),X("div",m_,[N(A(v),{icon:"mdi-cloud-download-outline",class:"intro-icon"}),o("p",null,c(A(C)("TXT_CODE_INSTANCE_BACKUP_INTRO")),1)]))])]),o("div",F_,[N(A(L),{class:"ds-dialog-btn ds-dialog-btn--default",variant:"text",disabled:r.value,onClick:j},{default:S(()=>[d(c(A(C)("TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST")),1)]),_:1},8,["disabled"]),N(A(L),{class:"ds-dialog-btn ds-dialog-btn--primary",variant:"text",disabled:r.value,onClick:w},{default:S(()=>[d(c(A(C)("TXT_CODE_INSTANCE_BACKUP_CREATE")),1)]),_:1},8,["disabled"])]),u.value?(I(),f(g(u.value),{key:0,modelValue:P.value.show,"onUpdate:modelValue":E[0]||(E[0]=_=>P.value.show=_),id:"backup-delete-dialog",title:A(C)("TXT_CODE_71155575"),message:A(C)("TXT_CODE_INSTANCE_BACKUP_DELETE_CONFIRM",{name:P.value.name}),danger:"",onCancel:E[1]||(E[1]=_=>{var T,e;return(e=(T=P.value).resolve)==null?void 0:e.call(T,!1)}),onConfirm:E[2]||(E[2]=_=>{var T,e;return(e=(T=P.value).resolve)==null?void 0:e.call(T,!0)})},null,40,["modelValue","title","message"])):y("",!0),u.value?(I(),f(g(u.value),{key:1,modelValue:K.value.show,"onUpdate:modelValue":E[3]||(E[3]=_=>K.value.show=_),id:"backup-restore-dialog",height:250,title:A(C)("TXT_CODE_INSTANCE_BACKUP_RESTORE"),message:A(C)("TXT_CODE_INSTANCE_BACKUP_RESTORE_CONFIRM",{name:K.value.name}),onCancel:E[4]||(E[4]=_=>{var T,e;return(e=(T=K.value).resolve)==null?void 0:e.call(T,!1)}),onConfirm:E[5]||(E[5]=_=>{var T,e;return(e=(T=K.value).resolve)==null?void 0:e.call(T,!0)})},null,40,["modelValue","title","message"])):y("",!0),u.value?(I(),f(g(u.value),{key:2,modelValue:n.value.show,"onUpdate:modelValue":E[6]||(E[6]=_=>n.value.show=_),id:"backup-epbaklst-confirm-dialog",title:A(C)("TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST"),message:A(C)("TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATE_CONFIRM"),onCancel:E[7]||(E[7]=_=>{var T,e;return(e=(T=n.value).resolve)==null?void 0:e.call(T,!1)}),onConfirm:E[8]||(E[8]=_=>{var T,e;return(e=(T=n.value).resolve)==null?void 0:e.call(T,!0)})},null,40,["modelValue","title","message"])):y("",!0),u.value?(I(),f(g(u.value),{key:3,modelValue:F.value.show,"onUpdate:modelValue":E[9]||(E[9]=_=>F.value.show=_),id:"backup-confirm-dialog",title:A(C)("TXT_CODE_INSTANCE_BACKUP_CREATE"),message:A(C)("TXT_CODE_INSTANCE_BACKUP_CREATE_CONFIRM"),onCancel:E[10]||(E[10]=_=>{var T,e;return(e=(T=F.value).resolve)==null?void 0:e.call(T,!1)}),onConfirm:E[11]||(E[11]=_=>{var T,e;return(e=(T=F.value).resolve)==null?void 0:e.call(T,!0)})},null,40,["modelValue","title","message"])):y("",!0)]))}});const $_=A_(k_,[["__scopeId","data-v-efa79ee2"]]),v_="Instanz sichern",f_="Sicherung abgeschlossen",b_="Neue Sicherung",M_="Möchten Sie wirklich eine neue Sicherung erstellen? Dadurch wird die Instanz angehalten!",h_="Entfernen",g_="Möchten Sie die Sicherung {name} wirklich löschen?",y_=".epbaklst bearbeiten",w_=".epbaklst erstellt",x_="Die Datei .epbaklst existiert nicht. Möchten Sie sie erstellen?",z_="Sicherung konnte nicht gelöscht werden.",H_="Sicherungsliste konnte nicht geladen werden.",V_="Sicherung konnte nicht wiederhergestellt werden.",q_="Sicherungsaufgabe konnte nicht gestartet werden",Y_="Klicken Sie unten, um die aktuelle Instanz zu sichern.",j_="Sicherungsliste",G_="Wiederherstellen",Q_="Möchten Sie die Sicherung {name} wirklich in der aktuellen Instanz wiederherstellen? Dabei werden vorhandene Dateien überschrieben.",W_="Wiederherstellungsaufgabe gestartet.",J_="Sicherungsaufgabe gestartet",Z_={TXT_CODE_INSTANCE_BACKUP:v_,TXT_CODE_INSTANCE_BACKUP_COMPLETED:f_,TXT_CODE_INSTANCE_BACKUP_CREATE:b_,TXT_CODE_INSTANCE_BACKUP_CREATE_CONFIRM:M_,TXT_CODE_INSTANCE_BACKUP_DELETE:h_,TXT_CODE_INSTANCE_BACKUP_DELETE_CONFIRM:g_,TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST:y_,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATED:w_,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATE_CONFIRM:x_,TXT_CODE_INSTANCE_BACKUP_FAILED_DELETE:z_,TXT_CODE_INSTANCE_BACKUP_FAILED_FETCH:H_,TXT_CODE_INSTANCE_BACKUP_FAILED_RESTORE:V_,TXT_CODE_INSTANCE_BACKUP_FAILED_START:q_,TXT_CODE_INSTANCE_BACKUP_INTRO:Y_,TXT_CODE_INSTANCE_BACKUP_LIST:j_,TXT_CODE_INSTANCE_BACKUP_RESTORE:G_,TXT_CODE_INSTANCE_BACKUP_RESTORE_CONFIRM:Q_,TXT_CODE_INSTANCE_BACKUP_RESTORE_STARTED:W_,TXT_CODE_INSTANCE_BACKUP_STARTED:J_},_T="Backup Instance",TT="Backup completed",ET="New Backup",CT="Are you sure you want to create a new backup? This action will stop the instance!",eT="Delete",AT="Are you sure you want to delete backup {name}?",tT="Edit .epbaklst",aT="Created .epbaklst",NT="The .epbaklst file does not exist. Would you like to create it?",sT="Failed to delete the backup.",nT="Failed to load the backup list.",oT="Failed to restore the backup.",IT="Failed to start backup task",DT="Click the button below to start backing up the current instance.",ST="Backup List",cT="Restore",OT="Are you sure you want to restore backup {name} to the current instance? This will overwrite existing files.",iT="Backup restoration task started.",lT="Backup task started",rT={TXT_CODE_INSTANCE_BACKUP:_T,TXT_CODE_INSTANCE_BACKUP_COMPLETED:TT,TXT_CODE_INSTANCE_BACKUP_CREATE:ET,TXT_CODE_INSTANCE_BACKUP_CREATE_CONFIRM:CT,TXT_CODE_INSTANCE_BACKUP_DELETE:eT,TXT_CODE_INSTANCE_BACKUP_DELETE_CONFIRM:AT,TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST:tT,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATED:aT,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATE_CONFIRM:NT,TXT_CODE_INSTANCE_BACKUP_FAILED_DELETE:sT,TXT_CODE_INSTANCE_BACKUP_FAILED_FETCH:nT,TXT_CODE_INSTANCE_BACKUP_FAILED_RESTORE:oT,TXT_CODE_INSTANCE_BACKUP_FAILED_START:IT,TXT_CODE_INSTANCE_BACKUP_INTRO:DT,TXT_CODE_INSTANCE_BACKUP_LIST:ST,TXT_CODE_INSTANCE_BACKUP_RESTORE:cT,TXT_CODE_INSTANCE_BACKUP_RESTORE_CONFIRM:OT,TXT_CODE_INSTANCE_BACKUP_RESTORE_STARTED:iT,TXT_CODE_INSTANCE_BACKUP_STARTED:lT},BT="Copia de seguridad de instancia",PT="Copia completada",KT="Nueva copia",uT="¿Seguro que quieres crear una copia nueva? ¡La instancia se detendrá!",RT="Eliminar",UT="¿Seguro que quieres eliminar la copia {name}?",dT="Editar .epbaklst",XT=".epbaklst creado",LT="El archivo .epbaklst no existe. ¿Quieres crearlo?",mT="No se pudo eliminar la copia de seguridad.",pT="No se pudo cargar la lista de copias de seguridad.",FT="No se pudo restaurar la copia de seguridad.",kT="No se pudo iniciar la tarea de copia",$T="Pulsa el botón inferior para crear una copia de la instancia actual.",vT="Lista de copias",fT="Restaurar",bT="¿Seguro que quieres restaurar la copia {name} en la instancia actual? Los archivos existentes se sobrescribirán.",MT="Tarea de restauración iniciada.",hT="Tarea de copia iniciada",gT={TXT_CODE_INSTANCE_BACKUP:BT,TXT_CODE_INSTANCE_BACKUP_COMPLETED:PT,TXT_CODE_INSTANCE_BACKUP_CREATE:KT,TXT_CODE_INSTANCE_BACKUP_CREATE_CONFIRM:uT,TXT_CODE_INSTANCE_BACKUP_DELETE:RT,TXT_CODE_INSTANCE_BACKUP_DELETE_CONFIRM:UT,TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST:dT,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATED:XT,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATE_CONFIRM:LT,TXT_CODE_INSTANCE_BACKUP_FAILED_DELETE:mT,TXT_CODE_INSTANCE_BACKUP_FAILED_FETCH:pT,TXT_CODE_INSTANCE_BACKUP_FAILED_RESTORE:FT,TXT_CODE_INSTANCE_BACKUP_FAILED_START:kT,TXT_CODE_INSTANCE_BACKUP_INTRO:$T,TXT_CODE_INSTANCE_BACKUP_LIST:vT,TXT_CODE_INSTANCE_BACKUP_RESTORE:fT,TXT_CODE_INSTANCE_BACKUP_RESTORE_CONFIRM:bT,TXT_CODE_INSTANCE_BACKUP_RESTORE_STARTED:MT,TXT_CODE_INSTANCE_BACKUP_STARTED:hT},yT="Sauvegarde de l’instance",wT="Sauvegarde terminée",xT="Nouvelle sauvegarde",zT="Voulez-vous vraiment créer une nouvelle sauvegarde ? L’instance sera arrêtée !",HT="Supprimer",VT="Voulez-vous vraiment supprimer la sauvegarde {name} ?",qT="Modifier .epbaklst",YT=".epbaklst créé",jT="Le fichier .epbaklst n’existe pas. Voulez-vous le créer ?",GT="Échec de la suppression de la sauvegarde.",QT="Échec du chargement de la liste des sauvegardes.",WT="Échec de la restauration de la sauvegarde.",JT="Impossible de démarrer la tâche de sauvegarde",ZT="Cliquez sur le bouton ci-dessous pour sauvegarder l’instance actuelle.",_E="Liste des sauvegardes",TE="Restaurer",EE="Voulez-vous vraiment restaurer la sauvegarde {name} dans l’instance actuelle ? Les fichiers existants seront écrasés.",CE="Tâche de restauration démarrée.",eE="Tâche de sauvegarde démarrée",AE={TXT_CODE_INSTANCE_BACKUP:yT,TXT_CODE_INSTANCE_BACKUP_COMPLETED:wT,TXT_CODE_INSTANCE_BACKUP_CREATE:xT,TXT_CODE_INSTANCE_BACKUP_CREATE_CONFIRM:zT,TXT_CODE_INSTANCE_BACKUP_DELETE:HT,TXT_CODE_INSTANCE_BACKUP_DELETE_CONFIRM:VT,TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST:qT,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATED:YT,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATE_CONFIRM:jT,TXT_CODE_INSTANCE_BACKUP_FAILED_DELETE:GT,TXT_CODE_INSTANCE_BACKUP_FAILED_FETCH:QT,TXT_CODE_INSTANCE_BACKUP_FAILED_RESTORE:WT,TXT_CODE_INSTANCE_BACKUP_FAILED_START:JT,TXT_CODE_INSTANCE_BACKUP_INTRO:ZT,TXT_CODE_INSTANCE_BACKUP_LIST:_E,TXT_CODE_INSTANCE_BACKUP_RESTORE:TE,TXT_CODE_INSTANCE_BACKUP_RESTORE_CONFIRM:EE,TXT_CODE_INSTANCE_BACKUP_RESTORE_STARTED:CE,TXT_CODE_INSTANCE_BACKUP_STARTED:eE},tE="インスタンスをバックアップ",aE="バックアップ完了",NE="新しいバックアップ",sE="新しいバックアップを作成しますか?インスタンスは停止します!",nE="削除",oE="バックアップ {name} を削除しますか?",IE=".epbaklstを編集",DE=".epbaklstを作成しました",SE=".epbaklstファイルがありません。作成しますか?",cE="バックアップの削除に失敗しました。",OE="バックアップ一覧の取得に失敗しました。",iE="バックアップの復元に失敗しました。",lE="バックアップタスクを開始できませんでした",rE="下のボタンをクリックして現在のインスタンスをバックアップします。",BE="バックアップ一覧",PE="復元",KE="バックアップ {name} を現在のインスタンスに復元しますか?既存のファイルは上書きされます。",uE="復元タスクを開始しました。",RE="バックアップタスクを開始しました",UE={TXT_CODE_INSTANCE_BACKUP:tE,TXT_CODE_INSTANCE_BACKUP_COMPLETED:aE,TXT_CODE_INSTANCE_BACKUP_CREATE:NE,TXT_CODE_INSTANCE_BACKUP_CREATE_CONFIRM:sE,TXT_CODE_INSTANCE_BACKUP_DELETE:nE,TXT_CODE_INSTANCE_BACKUP_DELETE_CONFIRM:oE,TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST:IE,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATED:DE,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATE_CONFIRM:SE,TXT_CODE_INSTANCE_BACKUP_FAILED_DELETE:cE,TXT_CODE_INSTANCE_BACKUP_FAILED_FETCH:OE,TXT_CODE_INSTANCE_BACKUP_FAILED_RESTORE:iE,TXT_CODE_INSTANCE_BACKUP_FAILED_START:lE,TXT_CODE_INSTANCE_BACKUP_INTRO:rE,TXT_CODE_INSTANCE_BACKUP_LIST:BE,TXT_CODE_INSTANCE_BACKUP_RESTORE:PE,TXT_CODE_INSTANCE_BACKUP_RESTORE_CONFIRM:KE,TXT_CODE_INSTANCE_BACKUP_RESTORE_STARTED:uE,TXT_CODE_INSTANCE_BACKUP_STARTED:RE},dE="인스턴스 백업",XE="백업 완료",LE="새 백업",mE="새 백업을 만드시겠습니까? 인스턴스가 중지됩니다!",pE="제거",FE="백업 {name}을(를) 삭제하시겠습니까?",kE=".epbaklst 편집",$E=".epbaklst 생성됨",vE=".epbaklst 파일이 없습니다. 생성하시겠습니까?",fE="백업을 삭제하지 못했습니다.",bE="백업 목록을 불러오지 못했습니다.",ME="백업을 복원하지 못했습니다.",hE="백업 작업을 시작하지 못했습니다",gE="아래 버튼을 눌러 현재 인스턴스를 백업하세요.",yE="백업 목록",wE="복원",xE="백업 {name}을(를) 현재 인스턴스로 복원하시겠습니까? 기존 파일을 덮어씁니다.",zE="복원 작업이 시작되었습니다.",HE="백업 작업이 시작되었습니다",VE={TXT_CODE_INSTANCE_BACKUP:dE,TXT_CODE_INSTANCE_BACKUP_COMPLETED:XE,TXT_CODE_INSTANCE_BACKUP_CREATE:LE,TXT_CODE_INSTANCE_BACKUP_CREATE_CONFIRM:mE,TXT_CODE_INSTANCE_BACKUP_DELETE:pE,TXT_CODE_INSTANCE_BACKUP_DELETE_CONFIRM:FE,TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST:kE,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATED:$E,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATE_CONFIRM:vE,TXT_CODE_INSTANCE_BACKUP_FAILED_DELETE:fE,TXT_CODE_INSTANCE_BACKUP_FAILED_FETCH:bE,TXT_CODE_INSTANCE_BACKUP_FAILED_RESTORE:ME,TXT_CODE_INSTANCE_BACKUP_FAILED_START:hE,TXT_CODE_INSTANCE_BACKUP_INTRO:gE,TXT_CODE_INSTANCE_BACKUP_LIST:yE,TXT_CODE_INSTANCE_BACKUP_RESTORE:wE,TXT_CODE_INSTANCE_BACKUP_RESTORE_CONFIRM:xE,TXT_CODE_INSTANCE_BACKUP_RESTORE_STARTED:zE,TXT_CODE_INSTANCE_BACKUP_STARTED:HE},qE="Backup da instância",YE="Backup concluído",jE="Novo backup",GE="Tem certeza de que deseja criar um novo backup? A instância será parada!",QE="Excluir",WE="Tem certeza de que deseja excluir o backup {name}?",JE="Editar .epbaklst",ZE=".epbaklst criado",_C="O arquivo .epbaklst não existe. Deseja criá-lo?",TC="Falha ao excluir o backup.",EC="Falha ao carregar a lista de backups.",CC="Falha ao restaurar o backup.",eC="Falha ao iniciar a tarefa de backup",AC="Clique no botão abaixo para fazer backup da instância atual.",tC="Lista de backups",aC="Restaurar",NC="Tem certeza de que deseja restaurar o backup {name} na instância atual? Os arquivos existentes serão sobrescritos.",sC="Tarefa de restauração iniciada.",nC="Tarefa de backup iniciada",oC={TXT_CODE_INSTANCE_BACKUP:qE,TXT_CODE_INSTANCE_BACKUP_COMPLETED:YE,TXT_CODE_INSTANCE_BACKUP_CREATE:jE,TXT_CODE_INSTANCE_BACKUP_CREATE_CONFIRM:GE,TXT_CODE_INSTANCE_BACKUP_DELETE:QE,TXT_CODE_INSTANCE_BACKUP_DELETE_CONFIRM:WE,TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST:JE,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATED:ZE,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATE_CONFIRM:_C,TXT_CODE_INSTANCE_BACKUP_FAILED_DELETE:TC,TXT_CODE_INSTANCE_BACKUP_FAILED_FETCH:EC,TXT_CODE_INSTANCE_BACKUP_FAILED_RESTORE:CC,TXT_CODE_INSTANCE_BACKUP_FAILED_START:eC,TXT_CODE_INSTANCE_BACKUP_INTRO:AC,TXT_CODE_INSTANCE_BACKUP_LIST:tC,TXT_CODE_INSTANCE_BACKUP_RESTORE:aC,TXT_CODE_INSTANCE_BACKUP_RESTORE_CONFIRM:NC,TXT_CODE_INSTANCE_BACKUP_RESTORE_STARTED:sC,TXT_CODE_INSTANCE_BACKUP_STARTED:nC},IC="Создать резервную копию",DC="Резервное копирование завершено",SC="Новая резервная копия",cC="Создать новую резервную копию? Экземпляр будет остановлен!",OC="Удалить",iC="Удалить резервную копию {name}?",lC="Изменить .epbaklst",rC=".epbaklst создан",BC="Файл .epbaklst не существует. Создать его?",PC="Не удалось удалить резервную копию.",KC="Не удалось загрузить список резервных копий.",uC="Не удалось восстановить резервную копию.",RC="Не удалось запустить задачу резервного копирования",UC="Нажмите кнопку ниже, чтобы создать резервную копию текущего экземпляра.",dC="Список резервных копий",XC="Восстановить",LC="Восстановить резервную копию {name} в текущий экземпляр? Существующие файлы будут перезаписаны.",mC="Задача восстановления запущена.",pC="Задача резервного копирования запущена",FC={TXT_CODE_INSTANCE_BACKUP:IC,TXT_CODE_INSTANCE_BACKUP_COMPLETED:DC,TXT_CODE_INSTANCE_BACKUP_CREATE:SC,TXT_CODE_INSTANCE_BACKUP_CREATE_CONFIRM:cC,TXT_CODE_INSTANCE_BACKUP_DELETE:OC,TXT_CODE_INSTANCE_BACKUP_DELETE_CONFIRM:iC,TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST:lC,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATED:rC,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATE_CONFIRM:BC,TXT_CODE_INSTANCE_BACKUP_FAILED_DELETE:PC,TXT_CODE_INSTANCE_BACKUP_FAILED_FETCH:KC,TXT_CODE_INSTANCE_BACKUP_FAILED_RESTORE:uC,TXT_CODE_INSTANCE_BACKUP_FAILED_START:RC,TXT_CODE_INSTANCE_BACKUP_INTRO:UC,TXT_CODE_INSTANCE_BACKUP_LIST:dC,TXT_CODE_INSTANCE_BACKUP_RESTORE:XC,TXT_CODE_INSTANCE_BACKUP_RESTORE_CONFIRM:LC,TXT_CODE_INSTANCE_BACKUP_RESTORE_STARTED:mC,TXT_CODE_INSTANCE_BACKUP_STARTED:pC},kC="สำรองข้อมูลอินสแตนซ์",$C="สำรองข้อมูลเสร็จแล้ว",vC="ข้อมูลสำรองใหม่",fC="ต้องการสร้างข้อมูลสำรองใหม่หรือไม่ อินสแตนซ์จะถูกหยุด",bC="ลบ",MC="ต้องการลบข้อมูลสำรอง {name} หรือไม่",hC="แก้ไข .epbaklst",gC="สร้าง .epbaklst แล้ว",yC="ไม่มีไฟล์ .epbaklst ต้องการสร้างหรือไม่",wC="ไม่สามารถลบข้อมูลสำรองได้",xC="ไม่สามารถโหลดรายการข้อมูลสำรองได้",zC="ไม่สามารถกู้คืนข้อมูลสำรองได้",HC="เริ่มงานสำรองข้อมูลไม่สำเร็จ",VC="คลิกปุ่มด้านล่างเพื่อสำรองข้อมูลอินสแตนซ์ปัจจุบัน",qC="รายการข้อมูลสำรอง",YC="กู้คืน",jC="ต้องการกู้คืนข้อมูลสำรอง {name} ไปยังอินสแตนซ์ปัจจุบันหรือไม่ ไฟล์เดิมจะถูกเขียนทับ",GC="เริ่มงานกู้คืนแล้ว",QC="เริ่มงานสำรองข้อมูลแล้ว",WC={TXT_CODE_INSTANCE_BACKUP:kC,TXT_CODE_INSTANCE_BACKUP_COMPLETED:$C,TXT_CODE_INSTANCE_BACKUP_CREATE:vC,TXT_CODE_INSTANCE_BACKUP_CREATE_CONFIRM:fC,TXT_CODE_INSTANCE_BACKUP_DELETE:bC,TXT_CODE_INSTANCE_BACKUP_DELETE_CONFIRM:MC,TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST:hC,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATED:gC,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATE_CONFIRM:yC,TXT_CODE_INSTANCE_BACKUP_FAILED_DELETE:wC,TXT_CODE_INSTANCE_BACKUP_FAILED_FETCH:xC,TXT_CODE_INSTANCE_BACKUP_FAILED_RESTORE:zC,TXT_CODE_INSTANCE_BACKUP_FAILED_START:HC,TXT_CODE_INSTANCE_BACKUP_INTRO:VC,TXT_CODE_INSTANCE_BACKUP_LIST:qC,TXT_CODE_INSTANCE_BACKUP_RESTORE:YC,TXT_CODE_INSTANCE_BACKUP_RESTORE_CONFIRM:jC,TXT_CODE_INSTANCE_BACKUP_RESTORE_STARTED:GC,TXT_CODE_INSTANCE_BACKUP_STARTED:QC},JC="Örneği yedekle",ZC="Yedekleme tamamlandı",_e="Yeni yedek",Te="Yeni bir yedek oluşturmak istediğinizden emin misiniz? Örnek durdurulacak!",Ee="Sil",Ce="{name} yedeğini silmek istiyor musunuz?",ee=".epbaklst dosyasını düzenle",Ae=".epbaklst oluşturuldu",te=".epbaklst dosyası yok. Oluşturulsun mu?",ae="Yedek silinemedi.",Ne="Yedek listesi yüklenemedi.",se="Yedek geri yüklenemedi.",ne="Yedekleme görevi başlatılamadı",oe="Geçerli örneği yedeklemek için aşağıdaki düğmeye tıklayın.",Ie="Yedek listesi",De="Geri yükle",Se="{name} yedeği geçerli örneğe geri yüklensin mi? Mevcut dosyaların üzerine yazılacak.",ce="Geri yükleme görevi başlatıldı.",Oe="Yedekleme görevi başlatıldı",ie={TXT_CODE_INSTANCE_BACKUP:JC,TXT_CODE_INSTANCE_BACKUP_COMPLETED:ZC,TXT_CODE_INSTANCE_BACKUP_CREATE:_e,TXT_CODE_INSTANCE_BACKUP_CREATE_CONFIRM:Te,TXT_CODE_INSTANCE_BACKUP_DELETE:Ee,TXT_CODE_INSTANCE_BACKUP_DELETE_CONFIRM:Ce,TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST:ee,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATED:Ae,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATE_CONFIRM:te,TXT_CODE_INSTANCE_BACKUP_FAILED_DELETE:ae,TXT_CODE_INSTANCE_BACKUP_FAILED_FETCH:Ne,TXT_CODE_INSTANCE_BACKUP_FAILED_RESTORE:se,TXT_CODE_INSTANCE_BACKUP_FAILED_START:ne,TXT_CODE_INSTANCE_BACKUP_INTRO:oe,TXT_CODE_INSTANCE_BACKUP_LIST:Ie,TXT_CODE_INSTANCE_BACKUP_RESTORE:De,TXT_CODE_INSTANCE_BACKUP_RESTORE_CONFIRM:Se,TXT_CODE_INSTANCE_BACKUP_RESTORE_STARTED:ce,TXT_CODE_INSTANCE_BACKUP_STARTED:Oe},le="备份实例",re="备份已完成",Be="新建备份",Pe="确定要创建新备份吗?此操作将会停止实例!",Ke="删除",ue="确定要删除备份 {name} 吗?",Re="编辑 .epbaklst",Ue="已创建 .epbaklst",de="文件 .epbaklst 不存在。是否要创建它?",Xe="删除备份失败",Le="获取备份列表失败",me="恢复备份失败",pe="启动备份任务失败",Fe="点击下方按钮开始备份当前实例。",ke="备份列表",$e="恢复",ve="确定要将备份 {name} 恢复到当前实例吗?此操作将停止实例并覆盖现有文件!",fe="备份恢复任务已启动",be="备份任务已启动",Me={TXT_CODE_INSTANCE_BACKUP:le,TXT_CODE_INSTANCE_BACKUP_COMPLETED:re,TXT_CODE_INSTANCE_BACKUP_CREATE:Be,TXT_CODE_INSTANCE_BACKUP_CREATE_CONFIRM:Pe,TXT_CODE_INSTANCE_BACKUP_DELETE:Ke,TXT_CODE_INSTANCE_BACKUP_DELETE_CONFIRM:ue,TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST:Re,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATED:Ue,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATE_CONFIRM:de,TXT_CODE_INSTANCE_BACKUP_FAILED_DELETE:Xe,TXT_CODE_INSTANCE_BACKUP_FAILED_FETCH:Le,TXT_CODE_INSTANCE_BACKUP_FAILED_RESTORE:me,TXT_CODE_INSTANCE_BACKUP_FAILED_START:pe,TXT_CODE_INSTANCE_BACKUP_INTRO:Fe,TXT_CODE_INSTANCE_BACKUP_LIST:ke,TXT_CODE_INSTANCE_BACKUP_RESTORE:$e,TXT_CODE_INSTANCE_BACKUP_RESTORE_CONFIRM:ve,TXT_CODE_INSTANCE_BACKUP_RESTORE_STARTED:fe,TXT_CODE_INSTANCE_BACKUP_STARTED:be},he="備份實例",ge="備份已完成",ye="新建備份",we="確定要創建新備份嗎?此操作將會停止實例!",xe="移除",ze="確定要刪除備份 {name} 嗎?",He="編輯 .epbaklst",Ve="已創建 .epbaklst",qe="文件 .epbaklst 不存在。是否要創建它?",Ye="刪除備份失敗",je="取得備份清單失敗",Ge="還原備份失敗",Qe="啟動備份任務失败",We="點击下方按钮開始備份當前實例。",Je="備份列表",Ze="恢復",_A="確定要將備份 {name} 恢復到當前實例嗎?此操作將停止實例並覆盖现有文件!",TA="備份恢復任務已啟動",EA="備份任務已啟動",CA={TXT_CODE_INSTANCE_BACKUP:he,TXT_CODE_INSTANCE_BACKUP_COMPLETED:ge,TXT_CODE_INSTANCE_BACKUP_CREATE:ye,TXT_CODE_INSTANCE_BACKUP_CREATE_CONFIRM:we,TXT_CODE_INSTANCE_BACKUP_DELETE:xe,TXT_CODE_INSTANCE_BACKUP_DELETE_CONFIRM:ze,TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST:He,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATED:Ve,TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATE_CONFIRM:qe,TXT_CODE_INSTANCE_BACKUP_FAILED_DELETE:Ye,TXT_CODE_INSTANCE_BACKUP_FAILED_FETCH:je,TXT_CODE_INSTANCE_BACKUP_FAILED_RESTORE:Ge,TXT_CODE_INSTANCE_BACKUP_FAILED_START:Qe,TXT_CODE_INSTANCE_BACKUP_INTRO:We,TXT_CODE_INSTANCE_BACKUP_LIST:Je,TXT_CODE_INSTANCE_BACKUP_RESTORE:Ze,TXT_CODE_INSTANCE_BACKUP_RESTORE_CONFIRM:_A,TXT_CODE_INSTANCE_BACKUP_RESTORE_STARTED:TA,TXT_CODE_INSTANCE_BACKUP_STARTED:EA},eA={de_de:Z_,en_us:rT,es_es:gT,fr_fr:AE,ja_jp:UE,ko_kr:VE,pt_br:oC,ru_ru:FC,th_th:WC,tr_tr:ie,zh_cn:Me,zh_tw:CA},AA={class:"instance-backup-container"},tA={class:"backup-list-area"},aA={class:"list-header"},NA={key:0,class:"backup-loading"},sA={class:"backup-item-actions"},nA={key:2,class:"empty-backup"},oA={class:"backup-footer"},IA=T_({__name:"InstanceBackupModal",props:{instanceUuid:{},daemonId:{}},emits:["close"],setup(B,{expose:b,emit:u}){const a=B,s=u,$=O(!1),r=O(!1),m=O(null),D=O(0),k=O([]),p=O(!1),P=O(),K=()=>{const _=V("file");if(!_)throw new Error("file plugin is not installed");return _.api},F=e_(()=>{var _;return(_=V("file"))==null?void 0:_.FileEditor});let n=null;const l=async()=>{var _;p.value=!0;try{const{execute:T}=q(),e=await T({params:{daemonId:a.daemonId,uuid:a.instanceUuid,task_name:"instance_backup"},data:{taskId:""}});let i=null;Array.isArray(e.value)?i=e.value.find(s_=>{var Z;return((Z=s_.detail)==null?void 0:Z.instanceUuid)===a.instanceUuid}):e.value&&((_=e.value.detail)==null?void 0:_.instanceUuid)===a.instanceUuid&&(i=e.value),i?(D.value=i.status,D.value===1&&(m.value=i.taskId,w())):D.value=0;const{execute:h}=t_(),z=await h({params:{daemonId:a.daemonId,uuid:a.instanceUuid}});z.value&&(k.value=z.value)}catch(T){U.error(T.message||C("TXT_CODE_INSTANCE_BACKUP_FAILED_FETCH"))}finally{p.value=!1}},M=async()=>{D.value===1||r.value||H.confirm({title:C("TXT_CODE_INSTANCE_BACKUP_CREATE"),content:C("TXT_CODE_INSTANCE_BACKUP_CREATE_CONFIRM"),onOk:async()=>{if(!(D.value===1||r.value)){r.value=!0;try{const{execute:_}=__(),T=await _({params:{daemonId:a.daemonId,uuid:a.instanceUuid,task_name:"instance_backup"},data:{time:new Date().getTime(),newInstanceName:""}});T.value&&(m.value=T.value.taskId,U.success(C("TXT_CODE_INSTANCE_BACKUP_STARTED")),w())}catch(_){U.error(_.message||C("TXT_CODE_INSTANCE_BACKUP_FAILED_START"))}finally{r.value=!1}}}})},w=()=>{n&&clearInterval(n),n=setInterval(async()=>{if(m.value)try{const{execute:_}=q(),T=await _({params:{daemonId:a.daemonId,uuid:a.instanceUuid,task_name:"instance_backup"},data:{taskId:m.value}});T.value&&(D.value=T.value.status,D.value!==1&&(clearInterval(n),n=null,l(),D.value===0&&U.success(C("TXT_CODE_INSTANCE_BACKUP_COMPLETED"))))}catch{clearInterval(n),n=null}},2e3)},x=_=>{H.confirm({title:C("TXT_CODE_71155575"),content:C("TXT_CODE_INSTANCE_BACKUP_DELETE_CONFIRM",{name:_}),okButtonProps:{danger:!0},onOk:async()=>{try{const{execute:T}=a_();await T({params:{daemonId:a.daemonId,uuid:a.instanceUuid,backupName:_}}),U.success(C("TXT_CODE_28190dbc")),l()}catch(T){U.error(T.message||C("TXT_CODE_INSTANCE_BACKUP_FAILED_DELETE"))}}})},Y=_=>{H.confirm({title:C("TXT_CODE_INSTANCE_BACKUP_RESTORE"),content:C("TXT_CODE_INSTANCE_BACKUP_RESTORE_CONFIRM",{name:_}),onOk:async()=>{try{const{execute:T}=N_();await T({params:{daemonId:a.daemonId,uuid:a.instanceUuid,backupName:_}}),U.success(C("TXT_CODE_INSTANCE_BACKUP_RESTORE_STARTED"))}catch(T){U.error(T.message||C("TXT_CODE_INSTANCE_BACKUP_FAILED_RESTORE"))}}})},j=async()=>{var e;const _=".epbaklst",T=".epbaklst";try{const{execute:i}=K().fileContent(),h=await i({params:{daemonId:a.daemonId,uuid:a.instanceUuid},data:{target:_}});(e=P.value)==null||e.openDialog(_,T)}catch{H.confirm({title:C("TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST"),content:C("TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATE_CONFIRM"),onOk:async()=>{var i;try{const{execute:h}=K().touchFile();await h({params:{daemonId:a.daemonId,uuid:a.instanceUuid},data:{target:_}});const{execute:z}=K().fileContent();await z({params:{daemonId:a.daemonId,uuid:a.instanceUuid},data:{target:_,text:`$black
|
|
3
|
+
`}}),U.success(C("TXT_CODE_INSTANCE_BACKUP_EPBAKLST_CREATED")),(i=P.value)==null||i.openDialog(_,T)}catch(h){U.error(h.message)}}})}},G=_=>{if(_===0)return"0 B";const T=1024,e=["B","KB","MB","GB","TB"],i=Math.floor(Math.log(_)/Math.log(T));return parseFloat((_/Math.pow(T,i)).toFixed(2))+" "+e[i]},Q=()=>{$.value=!0,l()},t=()=>{$.value=!1},E=()=>{n&&clearInterval(n),n=null,s("close")};return E_(()=>{n&&clearInterval(n)}),b({open:Q}),(_,T)=>(I(),X(W,null,[N(r_,{open:$.value,"onUpdate:open":T[0]||(T[0]=e=>$.value=e),title:A(C)("TXT_CODE_INSTANCE_BACKUP"),"max-width":800,footer:null,onAfterClose:E},{default:S(()=>[o("div",AA,[o("div",tA,[o("div",aA,[N(A(L),{class:"refresh-btn",icon:"mdi-refresh",variant:"text",loading:p.value,onClick:l},null,8,["loading"])]),p.value&&k.value.length===0?(I(),X("div",NA,[N(A(S_),{indeterminate:"",color:"primary",size:"32",width:"3"})])):k.value.length>0?(I(),f(A(l_),{key:1,class:"backup-list"},{default:S(()=>[(I(!0),X(W,null,C_(k.value,e=>(I(),f(A(c_),{key:e.name,class:"backup-item",rounded:"xl"},{prepend:S(()=>[N(A(v),{icon:"mdi-cloud-check-outline",class:"backup-item-icon"})]),append:S(()=>[o("div",sA,[N(A(L),{variant:"text","prepend-icon":"mdi-backup-restore",onClick:i=>Y(e.name)},{default:S(()=>[d(c(A(C)("TXT_CODE_INSTANCE_BACKUP_RESTORE")),1)]),_:1},8,["onClick"]),N(A(L),{color:"error",variant:"text","prepend-icon":"mdi-delete-outline",onClick:i=>x(e.name)},{default:S(()=>[d(c(A(C)("TXT_CODE_INSTANCE_BACKUP_DELETE")),1)]),_:1},8,["onClick"])])]),default:S(()=>[N(A(O_),{class:"backup-name"},{default:S(()=>[d(c(e.name),1)]),_:2},1024),N(A(i_),null,{default:S(()=>[d(c(G(e.size))+" · "+c(e.time),1)]),_:2},1024)]),_:2},1024))),128))]),_:1})):(I(),X("div",nA,[N(A(v),{icon:"mdi-cloud-outline",class:"empty-icon"}),o("p",null,c(A(C)("TXT_CODE_INSTANCE_BACKUP_INTRO")),1)]))]),o("div",oA,[N(A(L),{variant:"text",onClick:t},{default:S(()=>[d(c(A(C)("TXT_CODE_b1dedda3")),1)]),_:1}),N(A(L),{variant:"text",onClick:j},{default:S(()=>[d(c(A(C)("TXT_CODE_INSTANCE_BACKUP_EDIT_EPBAKLST")),1)]),_:1}),N(A(L),{color:"primary",loading:r.value,disabled:D.value===1,onClick:M},{default:S(()=>[d(c(A(C)("TXT_CODE_INSTANCE_BACKUP_CREATE")),1)]),_:1},8,["loading","disabled"])])])]),_:1},8,["open","title"]),F.value&&B.daemonId&&B.instanceUuid?(I(),f(g(F.value),{key:0,ref_key:"fileEditorDialog",ref:P,"daemon-id":B.daemonId,"instance-id":B.instanceUuid},null,8,["daemon-id","instance-id"])):y("",!0)],64))}});const DA=A_(IA,[["__scopeId","data-v-d5dfc3ba"]]),mA=["console","i18n","actions","instance"];function pA(B){B.i18n.define(eA),B.actions.schedule({type:"backup",title:()=>C("TXT_CODE_INSTANCE_BACKUP")}),B.actions.instance({id:"backup",title:()=>C("TXT_CODE_INSTANCE_BACKUP"),icon:"mdi-cloud-outline",mdiIcon:"mdi-cloud-outline",normalComponent:DA,desktopComponent:$_,condition:b=>n_(b)&&o_(b,"instanceBackup"),desktopInitialWidth:700,desktopInitialHeight:500})}export{pA as apply,mA as inject};
|
package/panel/plugin.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.ds-backup[data-v-bebeefcb]{height:100%;display:flex;flex-direction:column;color:var(--desktop-window-text);font-size:13px;overflow:hidden}.ds-backup-body[data-v-bebeefcb]{flex:1;overflow-y:auto;display:flex;flex-direction:column;padding:16px 20px 0}.ds-backup-footer[data-v-bebeefcb]{padding:12px 20px;display:flex;justify-content:flex-end;gap:8px;border-top:1px solid var(--desktop-window-border);flex-shrink:0}.ds-dialog-btn[data-v-bebeefcb]{padding:7px 16px;border:none;border-radius:6px;font-size:13px;cursor:pointer;display:inline-flex;align-items:center;gap:6px;transition:all .2s;color:var(--desktop-window-text);white-space:nowrap}.ds-dialog-btn[data-v-bebeefcb]:disabled{opacity:.5;cursor:not-allowed}.ds-dialog-btn--primary[data-v-bebeefcb]{background:var(--color-blue-5, #1677ff);color:#fff;border-color:var(--color-blue-5, #1677ff)}.ds-dialog-btn--primary[data-v-bebeefcb]:hover:not(:disabled){background:var(--color-blue-6, #4096ff)}.ds-dialog-btn--default[data-v-bebeefcb]{background:var(--desktop-window-titlebar-bg);border:1px solid var(--desktop-window-border)}.ds-dialog-btn--default[data-v-bebeefcb]:hover:not(:disabled){background:var(--desktop-window-control-hover)}.ds-backup-list-container[data-v-bebeefcb]{width:100%;flex:1;display:flex;flex-direction:column;position:relative}.ds-backup-list-container .list-header[data-v-bebeefcb]{display:flex;align-items:center;gap:8px;font-weight:600;margin-bottom:16px;color:var(--desktop-window-text)}.ds-backup-list-container .list-header .refresh-btn[data-v-bebeefcb]{margin-left:auto;cursor:pointer;opacity:.7}.ds-backup-list-container .list-header .refresh-btn[data-v-bebeefcb]:hover{opacity:1}.ds-backup-list-container .backup-list[data-v-bebeefcb]{display:flex;flex-direction:column;gap:10px;padding-bottom:20px}.ds-backup-list-container .backup-item[data-v-bebeefcb]{background:var(--desktop-window-titlebar-bg);border:1px solid var(--desktop-window-border);border-radius:16px;overflow:hidden;padding:12px 16px;display:flex;align-items:center;justify-content:space-between;transition:all .2s}.ds-backup-list-container .backup-item[data-v-bebeefcb]:hover{border-color:var(--color-blue-5)}.ds-backup-list-container .backup-item__info[data-v-bebeefcb]{flex:1;min-width:0;margin-right:16px}.ds-backup-list-container .backup-item__name[data-v-bebeefcb]{font-weight:500;margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ds-backup-list-container .backup-item__meta[data-v-bebeefcb]{font-size:12px;color:var(--desktop-window-text-muted);display:flex;align-items:center;gap:8px}.ds-backup-list-container .backup-item__meta .separator[data-v-bebeefcb]{opacity:.3}.ds-backup-list-container .backup-item__actions[data-v-bebeefcb]{display:flex;gap:8px}.ds-backup-list-container .backup-item .action-btn[data-v-bebeefcb]{background:transparent;border:none;padding:6px;border-radius:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:16px;transition:all .2s}.ds-backup-list-container .backup-item .action-btn--restore[data-v-bebeefcb]{color:var(--color-blue-5)}.ds-backup-list-container .backup-item .action-btn--restore[data-v-bebeefcb]:hover{background:rgba(22,119,255,.1)}.ds-backup-list-container .backup-item .action-btn--delete[data-v-bebeefcb]{color:#ff4d4f}.ds-backup-list-container .backup-item .action-btn--delete[data-v-bebeefcb]:hover{background:rgba(255,77,79,.1)}.ds-backup-list-container .list-loading[data-v-bebeefcb]{flex:1;display:flex;align-items:center;justify-content:center;font-size:24px;color:var(--color-blue-5)}.ds-backup-intro[data-v-bebeefcb]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}.ds-backup-intro .intro-icon[data-v-bebeefcb]{font-size:64px;color:var(--desktop-window-text-muted);margin-bottom:20px;opacity:.5}.ds-backup-intro h3[data-v-bebeefcb]{font-size:18px;font-weight:600;margin-bottom:12px;color:var(--desktop-window-text)}.ds-backup-intro p[data-v-bebeefcb]{font-size:14px;color:var(--desktop-window-text-secondary);line-height:1.6;margin:0}.instance-backup-container[data-v-aaeb2cec]{display:flex;flex-direction:column;gap:16px}.list-header[data-v-aaeb2cec]{display:flex;align-items:center;min-height:40px;margin-bottom:4px}.list-header .refresh-btn[data-v-aaeb2cec]{margin-left:auto}.backup-list[data-v-aaeb2cec]{max-height:400px;overflow-y:auto;padding:0;background:transparent}.backup-item[data-v-aaeb2cec]{min-height:72px;margin-bottom:8px;border-radius:16px;overflow:hidden;background:rgba(var(--v-theme-on-surface),.035)}.backup-item .backup-name[data-v-aaeb2cec]{color:var(--text-color);font-weight:600}.backup-item-icon[data-v-aaeb2cec]{margin-right:14px;color:var(--color-gray-8)}.backup-item-actions[data-v-aaeb2cec]{display:flex;align-items:center;gap:4px}.backup-loading[data-v-aaeb2cec]{display:flex;min-height:220px;align-items:center;justify-content:center}.empty-backup[data-v-aaeb2cec]{text-align:center;padding:40px 20px}.empty-backup .empty-icon[data-v-aaeb2cec]{font-size:64px;color:var(--color-gray-5);margin-bottom:16px}.empty-backup p[data-v-aaeb2cec]{color:var(--color-gray-7)}.backup-footer[data-v-aaeb2cec]{display:flex;justify-content:flex-end;padding-top:16px;gap:8px}@media (max-width: 720px){.backup-item[data-v-aaeb2cec] .v-list-item__append{align-self:stretch;margin-inline-start:0;padding-top:8px}.backup-item-actions[data-v-aaeb2cec]{justify-content:flex-end;flex-wrap:wrap}.backup-footer[data-v-aaeb2cec]{flex-wrap:wrap}}
|