mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2025-10-11 07:55:59 +08:00
fix: Fix bug in file management with multiple tabs (#10170)
This commit is contained in:
parent
e880df8142
commit
ce69b4de01
14 changed files with 718 additions and 600 deletions
|
@ -219,30 +219,30 @@ defineExpose({
|
||||||
closeRightClick,
|
closeRightClick,
|
||||||
});
|
});
|
||||||
|
|
||||||
onMounted(() => {
|
function calcHeight() {
|
||||||
let heightDiff = 320;
|
let heightDiff = props.heightDiff ?? 320;
|
||||||
let tabHeight = 0;
|
let tabHeight = globalStore.openMenuTabs ? 48 : 0;
|
||||||
if (props.heightDiff) {
|
|
||||||
heightDiff = props.heightDiff;
|
|
||||||
}
|
|
||||||
if (globalStore.openMenuTabs) {
|
|
||||||
tabHeight = 48;
|
|
||||||
}
|
|
||||||
if (props.height) {
|
if (props.height) {
|
||||||
tableHeight.value = props.height - tabHeight;
|
tableHeight.value = props.height - tabHeight;
|
||||||
} else {
|
} else {
|
||||||
tableHeight.value = window.innerHeight - heightDiff - tabHeight;
|
tableHeight.value = window.innerHeight - heightDiff - tabHeight;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
window.onresize = () => {
|
onMounted(() => {
|
||||||
return (() => {
|
calcHeight();
|
||||||
if (props.height) {
|
window.addEventListener('resize', calcHeight);
|
||||||
tableHeight.value = props.height - tabHeight;
|
watch(
|
||||||
} else {
|
() => props.height,
|
||||||
tableHeight.value = window.innerHeight - heightDiff - tabHeight;
|
() => {
|
||||||
}
|
calcHeight();
|
||||||
})();
|
},
|
||||||
};
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
onBeforeUnmount(() => {
|
||||||
|
window.removeEventListener('resize', calcHeight);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -1510,6 +1510,7 @@ const message = {
|
||||||
cancelUpload: 'Cancel Upload',
|
cancelUpload: 'Cancel Upload',
|
||||||
cancelUploadHelper: 'Whether to cancel the upload, after cancellation the upload list will be cleared.',
|
cancelUploadHelper: 'Whether to cancel the upload, after cancellation the upload list will be cleared.',
|
||||||
keepOneTab: 'Keep at least one tab',
|
keepOneTab: 'Keep at least one tab',
|
||||||
|
notCanTab: 'Cannot add more tabs',
|
||||||
},
|
},
|
||||||
ssh: {
|
ssh: {
|
||||||
autoStart: 'Auto start',
|
autoStart: 'Auto start',
|
||||||
|
|
|
@ -1454,6 +1454,7 @@ const message = {
|
||||||
cancelUpload: 'アップロードをキャンセル',
|
cancelUpload: 'アップロードをキャンセル',
|
||||||
cancelUploadHelper: 'アップロードをキャンセルするかどうか、キャンセル後、アップロードリストはクリアされます。',
|
cancelUploadHelper: 'アップロードをキャンセルするかどうか、キャンセル後、アップロードリストはクリアされます。',
|
||||||
keepOneTab: '少なくとも1つのタブを保持してください',
|
keepOneTab: '少なくとも1つのタブを保持してください',
|
||||||
|
notCanTab: 'これ以上タブを追加できません',
|
||||||
},
|
},
|
||||||
ssh: {
|
ssh: {
|
||||||
autoStart: 'オートスタート',
|
autoStart: 'オートスタート',
|
||||||
|
|
|
@ -1439,6 +1439,7 @@ const message = {
|
||||||
cancelUpload: '업로드 취소',
|
cancelUpload: '업로드 취소',
|
||||||
cancelUploadHelper: '업로드를 취소할지 여부, 취소 후 업로드 목록이 비워집니다.',
|
cancelUploadHelper: '업로드를 취소할지 여부, 취소 후 업로드 목록이 비워집니다.',
|
||||||
keepOneTab: '최소한 하나의 탭을 유지하세요',
|
keepOneTab: '최소한 하나의 탭을 유지하세요',
|
||||||
|
notCanTab: '더 이상 탭을 추가할 수 없습니다',
|
||||||
},
|
},
|
||||||
ssh: {
|
ssh: {
|
||||||
autoStart: '자동 시작',
|
autoStart: '자동 시작',
|
||||||
|
|
|
@ -1497,6 +1497,7 @@ const message = {
|
||||||
cancelUploadHelper:
|
cancelUploadHelper:
|
||||||
'Adakah hendak membatalkan muat naik, selepas pembatalan senarai muat naik akan dikosongkan.',
|
'Adakah hendak membatalkan muat naik, selepas pembatalan senarai muat naik akan dikosongkan.',
|
||||||
keepOneTab: 'Pastikan sekurang-kurangnya satu tab dikekalkan',
|
keepOneTab: 'Pastikan sekurang-kurangnya satu tab dikekalkan',
|
||||||
|
notCanTab: 'Tidak dapat menambah tab lagi',
|
||||||
},
|
},
|
||||||
ssh: {
|
ssh: {
|
||||||
autoStart: 'Mula automatik',
|
autoStart: 'Mula automatik',
|
||||||
|
|
|
@ -1484,6 +1484,7 @@ const message = {
|
||||||
cancelUpload: 'Cancelar Upload',
|
cancelUpload: 'Cancelar Upload',
|
||||||
cancelUploadHelper: 'Deseja cancelar o upload, após o cancelamento, a lista de upload será limpa.',
|
cancelUploadHelper: 'Deseja cancelar o upload, após o cancelamento, a lista de upload será limpa.',
|
||||||
keepOneTab: 'Mantenha pelo menos uma aba',
|
keepOneTab: 'Mantenha pelo menos uma aba',
|
||||||
|
notCanTab: 'Não é possível adicionar mais abas',
|
||||||
},
|
},
|
||||||
ssh: {
|
ssh: {
|
||||||
autoStart: 'Início automático',
|
autoStart: 'Início automático',
|
||||||
|
|
|
@ -1485,6 +1485,7 @@ const message = {
|
||||||
cancelUpload: 'Отменить загрузку',
|
cancelUpload: 'Отменить загрузку',
|
||||||
cancelUploadHelper: 'Отменить загрузку или нет, после отмены список загрузок будет очищен.',
|
cancelUploadHelper: 'Отменить загрузку или нет, после отмены список загрузок будет очищен.',
|
||||||
keepOneTab: 'Необходимо оставить как минимум одну вкладку',
|
keepOneTab: 'Необходимо оставить как минимум одну вкладку',
|
||||||
|
notCanTab: 'Невозможно добавить больше вкладок',
|
||||||
},
|
},
|
||||||
ssh: {
|
ssh: {
|
||||||
autoStart: 'Автозапуск',
|
autoStart: 'Автозапуск',
|
||||||
|
|
|
@ -1527,6 +1527,7 @@ const message = {
|
||||||
cancelUpload: 'Yüklemeyi İptal Et',
|
cancelUpload: 'Yüklemeyi İptal Et',
|
||||||
cancelUploadHelper: 'Yüklemeyi iptal etmek ister misiniz, iptal sonrası yükleme listesi temizlenecektir.',
|
cancelUploadHelper: 'Yüklemeyi iptal etmek ister misiniz, iptal sonrası yükleme listesi temizlenecektir.',
|
||||||
keepOneTab: 'En az bir sekme açık kalmalıdır',
|
keepOneTab: 'En az bir sekme açık kalmalıdır',
|
||||||
|
notCanTab: 'Daha fazla sekme eklenemez',
|
||||||
},
|
},
|
||||||
ssh: {
|
ssh: {
|
||||||
autoStart: 'Otomatik başlat',
|
autoStart: 'Otomatik başlat',
|
||||||
|
|
|
@ -1439,6 +1439,7 @@ const message = {
|
||||||
cancelUpload: '取消上傳',
|
cancelUpload: '取消上傳',
|
||||||
cancelUploadHelper: '是否取消上傳,取消後將清空上傳列表',
|
cancelUploadHelper: '是否取消上傳,取消後將清空上傳列表',
|
||||||
keepOneTab: '至少保留一個標籤頁',
|
keepOneTab: '至少保留一個標籤頁',
|
||||||
|
notCanTab: '無法新增更多標籤頁',
|
||||||
},
|
},
|
||||||
ssh: {
|
ssh: {
|
||||||
autoStart: '開機自啟',
|
autoStart: '開機自啟',
|
||||||
|
|
|
@ -1434,6 +1434,7 @@ const message = {
|
||||||
cancelUpload: '取消上传',
|
cancelUpload: '取消上传',
|
||||||
cancelUploadHelper: '是否取消上传,取消后将清空上传列表',
|
cancelUploadHelper: '是否取消上传,取消后将清空上传列表',
|
||||||
keepOneTab: '至少保留一个标签页',
|
keepOneTab: '至少保留一个标签页',
|
||||||
|
notCanTab: '不可增加更多的标签页',
|
||||||
},
|
},
|
||||||
ssh: {
|
ssh: {
|
||||||
autoStart: '开机自启',
|
autoStart: '开机自启',
|
||||||
|
|
|
@ -155,6 +155,7 @@ html.dark {
|
||||||
|
|
||||||
.el-tabs--card > .el-tabs__header .el-tabs__nav {
|
.el-tabs--card > .el-tabs__header .el-tabs__nav {
|
||||||
border: 1px solid var(--panel-main-bg-color-8);
|
border: 1px solid var(--panel-main-bg-color-8);
|
||||||
|
border-bottom: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.el-tabs--card > .el-tabs__header .el-tabs__item.is-active {
|
.el-tabs--card > .el-tabs__header .el-tabs__item.is-active {
|
||||||
|
|
|
@ -257,6 +257,10 @@ html {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.el-tabs--card > .el-tabs__header .el-tabs__item.is-active {
|
||||||
|
border-bottom-color: var(--panel-color-primary) !important;
|
||||||
|
}
|
||||||
|
|
||||||
.logo {
|
.logo {
|
||||||
color: var(--el-color-primary);
|
color: var(--el-color-primary);
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,3 +53,42 @@ export function useSearchableForSelect(paths) {
|
||||||
searchableInputBlur,
|
searchableInputBlur,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function useMultipleSearchable(paths) {
|
||||||
|
const searchableStatus = ref(false);
|
||||||
|
const searchablePath = ref('');
|
||||||
|
const searchableInputRefs = ref<Record<string, HTMLInputElement | null>>({});
|
||||||
|
|
||||||
|
const setSearchableInputRef = (id: string, el: HTMLInputElement | null) => {
|
||||||
|
if (el) {
|
||||||
|
searchableInputRefs.value[id] = el;
|
||||||
|
} else {
|
||||||
|
delete searchableInputRefs.value[id];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
watch(searchableStatus, (val) => {
|
||||||
|
if (val) {
|
||||||
|
searchablePath.value = paths.value.at(-1)?.url || '';
|
||||||
|
nextTick(() => {
|
||||||
|
const keys = Object.keys(searchableInputRefs.value);
|
||||||
|
if (keys.length > 0) {
|
||||||
|
const lastKey = keys[keys.length - 1];
|
||||||
|
searchableInputRefs.value[lastKey]?.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const searchableInputBlur = () => {
|
||||||
|
searchableStatus.value = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
searchableStatus,
|
||||||
|
searchablePath,
|
||||||
|
searchableInputRefs,
|
||||||
|
setSearchableInputRef,
|
||||||
|
searchableInputBlur,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load diff
Loading…
Add table
Reference in a new issue