Fix:修复数据表保存快捷键与提示不一致

This commit is contained in:
zipg 2026-06-29 12:01:52 +08:00 committed by GitHub
parent bc409cffc0
commit ded6e002b5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 32 additions and 11 deletions

View File

@ -117,7 +117,7 @@ import { buildDataGridCellDetail, buildDataGridColumnDetail, buildDataGridRowDet
import { applyColumnFormatter, buildColumnFormatterKey, normalizeColumnFormatter, resolveColumnFormatter, type ColumnFormatterConfig, type DateTimeFormatterUnit } from "@/lib/columnFormatter";
import { temporalCellEditorKind, type TemporalCellEditorKind } from "@/lib/dataGridTemporalEditor";
import { isEnumColumn, enumValuesForColumn } from "@/lib/dataGridEnumEditor";
import { isCancelSearchShortcut, isCopyCurrentRowShortcut, isDeleteCurrentRowShortcut, isFocusSearchShortcut, isModRShortcut, isToggleTransposeShortcut } from "@/lib/keyboardShortcuts";
import { isCancelSearchShortcut, isCopyCurrentRowShortcut, isDeleteCurrentRowShortcut, isFocusSearchShortcut, isModRShortcut, isSaveShortcut, isToggleTransposeShortcut } from "@/lib/keyboardShortcuts";
import { dataGridHeaderContentWidth, scrollbarGutterWidth } from "@/lib/dataGridScrollGutter";
import { canGoNextDataGridPage } from "@/lib/dataGridPagination";
import { dataGridScrollPosition, isDataGridNearScrollBottom, shouldCheckInfiniteScrollAfterScroll, type DataGridScrollPosition } from "@/lib/dataGridInfiniteScroll";
@ -151,6 +151,7 @@ import { forgetDataGridConditionHistory, loadDataGridConditionHistory, rememberD
import { caretPositionInsideInsertedSqlSingleQuotes, insertedSqlSingleQuoteAtCaret } from "@/lib/sqlQuoteCaret";
import { effectiveDatabaseTypeForConnection } from "@/lib/jdbcDialect";
import { isMacOS } from "@/lib/platform";
import { formatShortcut } from "@/lib/shortcutRegistry";
const SqlPreviewPanel = defineAsyncComponent(() => import("@/components/editor/SqlPreviewPanel.vue"));
const FORMATTED_JSON_EDIT_WARNING_STORAGE_KEY = "dbx-cell-detail-formatted-json-edit-warning-shown";
@ -227,6 +228,7 @@ const dataGridCreatedAt = performance.now();
const dataGridElapsed = () => `${Math.round(performance.now() - dataGridCreatedAt)}ms`;
const isMac = isMacOS();
const shortcutMod = isMac ? "Cmd" : "Ctrl";
const saveShortcutLabel = computed(() => formatShortcut(settingsStore.editorSettings.shortcuts.saveSql));
const DATA_GRID_COMPACT_TOPBAR_WIDTH = 900;
const emit = defineEmits<{
@ -5587,6 +5589,26 @@ function commitGridEdit() {
nextTick(() => gridRef.value?.focus({ preventScroll: true }));
}
async function saveGridChangesFromShortcut() {
if (!saveToolbarState.value.showActions || saveToolbarState.value.actionsDisabled) return false;
await onToolbarCommit();
return true;
}
async function onCellEditKeydown(event: KeyboardEvent) {
if (isSaveShortcut(event, settingsStore.editorSettings.shortcuts)) {
event.preventDefault();
event.stopPropagation();
commitEdit();
await nextTick();
if (await saveGridChangesFromShortcut()) {
gridRef.value?.focus({ preventScroll: true });
}
return;
}
onEditKeydown(event);
}
function undoGridChange(): boolean {
if (editingCell.value || !canUndoPendingChange.value) return false;
undoPendingChange();
@ -5641,11 +5663,10 @@ async function onGridKeydown(event: KeyboardEvent) {
}
return;
}
if ((event.metaKey || event.ctrlKey) && !event.shiftKey && event.key.toLowerCase() === "s") {
if (saveToolbarState.value.showActions && !saveToolbarState.value.actionsDisabled) {
if (isSaveShortcut(event, settingsStore.editorSettings.shortcuts)) {
if (await saveGridChangesFromShortcut()) {
event.preventDefault();
event.stopPropagation();
await onToolbarCommit();
}
return;
}
@ -7561,7 +7582,7 @@ const gridContextMenuItems = computed<ContextMenuItem[]>(() => {
<span class="data-grid-topbar-action-label" :class="{ 'data-grid-topbar-action-label--compact': compactDataGridToolbar }">{{ t(saveActionMode.labelKey, { count: pendingChangeCount }) }}</span>
</Button>
</TooltipTrigger>
<TooltipContent side="bottom" class="max-w-sm"> {{ t(saveActionMode.tooltipKey, { count: pendingChangeCount }) }} ({{ shortcutMod }}+S) </TooltipContent>
<TooltipContent side="bottom" class="max-w-sm"> {{ t(saveActionMode.tooltipKey, { count: pendingChangeCount }) }} ({{ saveShortcutLabel }}) </TooltipContent>
</Tooltip>
<Tooltip>
<TooltipTrigger as-child>
@ -7739,7 +7760,7 @@ const gridContextMenuItems = computed<ContextMenuItem[]>(() => {
@click.stop
@focus="onCellEditTextareaInput"
@input="onCellEditTextareaInput"
@keydown.stop="onEditKeydown"
@keydown.stop="onCellEditKeydown"
@paste.stop="onCellEditTextareaPaste"
/>
<input
@ -7753,7 +7774,7 @@ const gridContextMenuItems = computed<ContextMenuItem[]>(() => {
@blur="commitEditFromBlur"
@click.stop
@input="onCellEditTextareaInput"
@keydown.stop="onEditKeydown"
@keydown.stop="onCellEditKeydown"
@paste.stop="onCellEditTextareaPaste"
/>
</template>
@ -8197,7 +8218,7 @@ const gridContextMenuItems = computed<ContextMenuItem[]>(() => {
@click.stop
@focus="onCellEditTextareaInput"
@input="onCellEditTextareaInput"
@keydown.stop="onEditKeydown"
@keydown.stop="onCellEditKeydown"
@paste.stop="onCellEditTextareaPaste"
/>
<input
@ -8211,7 +8232,7 @@ const gridContextMenuItems = computed<ContextMenuItem[]>(() => {
@blur="commitEditFromBlur"
@click.stop
@input="onCellEditTextareaInput"
@keydown.stop="onEditKeydown"
@keydown.stop="onCellEditKeydown"
@paste.stop="onCellEditTextareaPaste"
/>
</div>
@ -8329,7 +8350,7 @@ const gridContextMenuItems = computed<ContextMenuItem[]>(() => {
@click.stop
@focus="onCellEditTextareaInput"
@input="onCellEditTextareaInput"
@keydown.stop="onEditKeydown"
@keydown.stop="onCellEditKeydown"
@paste.stop="onCellEditTextareaPaste"
/>
<input
@ -8343,7 +8364,7 @@ const gridContextMenuItems = computed<ContextMenuItem[]>(() => {
@blur="commitEditFromBlur"
@click.stop
@input="onCellEditTextareaInput"
@keydown.stop="onEditKeydown"
@keydown.stop="onCellEditKeydown"
@paste.stop="onCellEditTextareaPaste"
/>
</template>