Skip to content

Commit b31f95b

Browse files
authored
Merge pull request #1732 from jumpserver/pr@dev@fix_chen_query_alert
fix(chen): keep query alerts until dismissed
2 parents 0ea5b25 + 075ade2 commit b31f95b

1 file changed

Lines changed: 11 additions & 43 deletions

File tree

‎ui/chen/components/QueryConsolePanel.vue‎

Lines changed: 11 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -58,16 +58,13 @@ const sqlEditor = ref<{
5858
} | null>(null);
5959
const sqlUploadInput = ref<HTMLInputElement | null>(null);
6060
const hasSelection = ref(false);
61-
const messageOpen = ref(false);
6261
const saveSnippetDialogOpen = ref(false);
6362
const selectSnippetDialogOpen = ref(false);
6463
const queryPanel = ref<HTMLElement | null>(null);
6564
const editorHeightRatio = ref(58);
6665
const resizingQueryPanel = ref(false);
6766
const QUERY_PANEL_MIN_RATIO = 20;
6867
const QUERY_PANEL_RESIZE_STEP = 5;
69-
const DEFAULT_MESSAGE_CLOSE_DELAY_SECONDS = 5;
70-
let messageCloseTimer: ReturnType<typeof setTimeout> | null = null;
7168
const toast = useToast();
7269
const { t } = useI18n();
7370
const { addErrorToast } = useErrorToast();
@@ -273,20 +270,8 @@ async function deleteSqlSnippet(snippet: ChenSqlSnippet) {
273270
}
274271
}
275272
276-
function clearMessageTimer() {
277-
if (messageCloseTimer === null) return;
278-
clearTimeout(messageCloseTimer);
279-
messageCloseTimer = null;
280-
}
281-
282-
function dismissMessage() {
283-
clearMessageTimer();
284-
messageOpen.value = false;
285-
if (props.tab.message) emit("dismissMessage", props.tab);
286-
}
287-
288273
function handleMessageOpen(open: boolean) {
289-
if (!open) dismissMessage();
274+
if (!open && props.tab.message) emit("dismissMessage", props.tab);
290275
}
291276
292277
function setEditorHeightRatio(ratio: number) {
@@ -328,24 +313,7 @@ function resizeQueryPanelWithKeyboard(event: KeyboardEvent) {
328313
event.preventDefault();
329314
}
330315
331-
watch(
332-
() => props.tab.message,
333-
(message) => {
334-
clearMessageTimer();
335-
messageOpen.value = Boolean(message);
336-
if (!message) return;
337-
338-
const closeDelay =
339-
typeof message.closeDelay === "number" && message.closeDelay > 0
340-
? message.closeDelay
341-
: DEFAULT_MESSAGE_CLOSE_DELAY_SECONDS;
342-
messageCloseTimer = setTimeout(dismissMessage, closeDelay * 1000);
343-
},
344-
{ immediate: true }
345-
);
346-
347316
onBeforeUnmount(() => {
348-
clearMessageTimer();
349317
if (!resizingQueryPanel.value) return;
350318
document.body.style.cursor = "";
351319
document.body.style.userSelect = "";
@@ -449,16 +417,6 @@ defineExpose({ editorSnapshot });
449417
<div v-if="tab.state.loading" class="absolute inset-0 z-10 grid place-items-center rounded-md bg-default/65">
450418
<UIcon name="i-lucide-loader-circle" class="size-5 animate-spin text-muted" />
451419
</div>
452-
<UAlert
453-
v-if="tab.message && messageOpen"
454-
class="absolute bottom-3 left-1/2 z-20 max-h-32 w-3/4 -translate-x-1/2 overflow-y-auto"
455-
:color="messageColor"
456-
variant="subtle"
457-
:title="tab.message.title || t('Chen.Message')"
458-
:description="tab.message.message"
459-
close
460-
@update:open="handleMessageOpen"
461-
/>
462420
</div>
463421
</div>
464422

@@ -498,6 +456,16 @@ defineExpose({ editorSnapshot });
498456
{{ t("ExecutionPlan.title") }}
499457
</button>
500458
</div>
459+
<div v-if="tab.message" class="mx-2 my-2 max-h-32 shrink-0 overflow-y-auto">
460+
<UAlert
461+
:color="messageColor"
462+
variant="subtle"
463+
:title="tab.message.title || t('Chen.Message')"
464+
:description="tab.message.message"
465+
close
466+
@update:open="handleMessageOpen"
467+
/>
468+
</div>
501469
<QueryResultTabs
502470
v-if="tab.activeBottomPane !== 'plan'"
503471
class="min-h-0 min-w-0 flex-1"

0 commit comments

Comments
 (0)