mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2025-02-08 01:20:07 +08:00
feat: 增加应用备份跳转目录 (#4648)
This commit is contained in:
parent
ac400c7188
commit
3156c84b19
@ -10,6 +10,19 @@
|
|||||||
/>
|
/>
|
||||||
<DrawerHeader v-else :header="$t('commons.button.backup')" :resource="name" :back="handleClose" />
|
<DrawerHeader v-else :header="$t('commons.button.backup')" :resource="name" :back="handleClose" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<div class="mb-5" v-if="type === 'app'">
|
||||||
|
<el-alert :closable="false" type="warning">
|
||||||
|
<div class="mt-2 text-xs">
|
||||||
|
<span>{{ $t('setting.backupJump') }}</span>
|
||||||
|
<span class="jump" @click="goFile()">
|
||||||
|
<el-icon class="ml-2"><Position /></el-icon>
|
||||||
|
{{ $t('firewall.quickJump') }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</el-alert>
|
||||||
|
</div>
|
||||||
|
|
||||||
<ComplexTable
|
<ComplexTable
|
||||||
v-loading="loading"
|
v-loading="loading"
|
||||||
:pagination-config="paginationConfig"
|
:pagination-config="paginationConfig"
|
||||||
@ -60,12 +73,13 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { reactive, ref } from 'vue';
|
import { reactive, ref } from 'vue';
|
||||||
import { computeSize, dateFormat, downloadFile } from '@/utils/util';
|
import { computeSize, dateFormat, downloadFile } from '@/utils/util';
|
||||||
import { handleBackup, handleRecover } from '@/api/modules/setting';
|
import { getBackupList, handleBackup, handleRecover } from '@/api/modules/setting';
|
||||||
import i18n from '@/lang';
|
import i18n from '@/lang';
|
||||||
import DrawerHeader from '@/components/drawer-header/index.vue';
|
import DrawerHeader from '@/components/drawer-header/index.vue';
|
||||||
import { deleteBackupRecord, downloadBackupRecord, searchBackupRecords } from '@/api/modules/setting';
|
import { deleteBackupRecord, downloadBackupRecord, searchBackupRecords } from '@/api/modules/setting';
|
||||||
import { Backup } from '@/api/interface/backup';
|
import { Backup } from '@/api/interface/backup';
|
||||||
import { MsgSuccess } from '@/utils/message';
|
import { MsgSuccess } from '@/utils/message';
|
||||||
|
import router from '@/routers';
|
||||||
|
|
||||||
const selects = ref<any>([]);
|
const selects = ref<any>([]);
|
||||||
const loading = ref();
|
const loading = ref();
|
||||||
@ -83,6 +97,7 @@ const backupVisible = ref(false);
|
|||||||
const type = ref();
|
const type = ref();
|
||||||
const name = ref();
|
const name = ref();
|
||||||
const detailName = ref();
|
const detailName = ref();
|
||||||
|
const backupPath = ref();
|
||||||
|
|
||||||
interface DialogProps {
|
interface DialogProps {
|
||||||
type: string;
|
type: string;
|
||||||
@ -91,6 +106,9 @@ interface DialogProps {
|
|||||||
}
|
}
|
||||||
const acceptParams = (params: DialogProps): void => {
|
const acceptParams = (params: DialogProps): void => {
|
||||||
type.value = params.type;
|
type.value = params.type;
|
||||||
|
if (type.value === 'app') {
|
||||||
|
loadBackupDir();
|
||||||
|
}
|
||||||
name.value = params.name;
|
name.value = params.name;
|
||||||
detailName.value = params.detailName;
|
detailName.value = params.detailName;
|
||||||
backupVisible.value = true;
|
backupVisible.value = true;
|
||||||
@ -100,6 +118,26 @@ const handleClose = () => {
|
|||||||
backupVisible.value = false;
|
backupVisible.value = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const loadBackupDir = () => {
|
||||||
|
getBackupList().then((res) => {
|
||||||
|
let backupList = res.data || [];
|
||||||
|
for (const bac of backupList) {
|
||||||
|
if (bac.type !== 'LOCAL') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (bac.id !== 0) {
|
||||||
|
bac.varsJson = JSON.parse(bac.vars);
|
||||||
|
}
|
||||||
|
backupPath.value = bac.varsJson['dir'];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const goFile = async () => {
|
||||||
|
router.push({ name: 'File', query: { path: `${backupPath.value}/app/${name.value}/${detailName.value}` } });
|
||||||
|
};
|
||||||
|
|
||||||
const search = async () => {
|
const search = async () => {
|
||||||
let params = {
|
let params = {
|
||||||
page: paginationConfig.currentPage,
|
page: paginationConfig.currentPage,
|
||||||
@ -241,3 +279,13 @@ defineExpose({
|
|||||||
acceptParams,
|
acceptParams,
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.jump {
|
||||||
|
color: $primary-color;
|
||||||
|
cursor: pointer;
|
||||||
|
&:hover {
|
||||||
|
color: #74a4f3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
@ -1428,6 +1428,8 @@ const message = {
|
|||||||
rootCrtDownload: 'Root certificate download',
|
rootCrtDownload: 'Root certificate download',
|
||||||
primaryKey: 'Primary key',
|
primaryKey: 'Primary key',
|
||||||
certificate: 'Certificate',
|
certificate: 'Certificate',
|
||||||
|
backupJump:
|
||||||
|
'Backup files not in the current backup list, please try downloading from the file directory and importing for backup.',
|
||||||
|
|
||||||
snapshot: 'Snapshot',
|
snapshot: 'Snapshot',
|
||||||
status: 'Snapshot status',
|
status: 'Snapshot status',
|
||||||
|
@ -1258,6 +1258,7 @@ const message = {
|
|||||||
accountKey: '賬戶密鑰',
|
accountKey: '賬戶密鑰',
|
||||||
address: '地址',
|
address: '地址',
|
||||||
path: '路徑',
|
path: '路徑',
|
||||||
|
backupJump: '未在當前備份列表中的備份檔案,請嘗試從檔案目錄中下載後導入備份。',
|
||||||
|
|
||||||
snapshot: '快照',
|
snapshot: '快照',
|
||||||
status: '快照狀態',
|
status: '快照狀態',
|
||||||
|
@ -1259,6 +1259,7 @@ const message = {
|
|||||||
accountKey: '账户密钥',
|
accountKey: '账户密钥',
|
||||||
address: '地址',
|
address: '地址',
|
||||||
path: '路径',
|
path: '路径',
|
||||||
|
backupJump: '未在当前备份列表中的备份文件,请尝试从文件目录中下载后导入备份。',
|
||||||
|
|
||||||
snapshot: '快照',
|
snapshot: '快照',
|
||||||
ignoreRule: '排除规则',
|
ignoreRule: '排除规则',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user