= ({
{isTableSurfaceActive && isV2Ui && cellContextMenu.visible && createPortal(
= ({
return (
= ({
})() : (
= ({
bgContextMenu={bgContextMenu}
cellContextMenu={cellContextMenu}
canModifyData={canModifyData}
+ copiedRowsForPasteLength={copiedRowsForPaste.length}
selectedRowKeysLength={selectedRowKeys.length}
copiedCellPatchAvailable={!!copiedCellPatch}
supportsCopyInsert={supportsCopyInsert}
onClose={() => setCellContextMenu(prev => ({ ...prev, visible: false }))}
onCopyFieldName={handleCopyContextMenuFieldName}
+ onCopyRowData={() => {
+ if (cellContextMenu.record) handleCopyRowData(cellContextMenu.record);
+ }}
+ onCopyRowForPaste={() => {
+ const rowKey = cellContextMenu.record?.[GONAVI_ROW_KEY];
+ if (rowKey === undefined || rowKey === null) {
+ void message.info('未识别到可复制的行');
+ return;
+ }
+ setSelectedRowKeys([rowKey]);
+ copyRowsForPaste([rowKey]);
+ }}
+ onPasteCopiedRowsAsNew={handlePasteCopiedRowsAsNew}
onSetNull={handleCellSetNull}
onEditRow={handleOpenContextMenuRowEditor}
onFillToSelected={() => {
diff --git a/frontend/src/components/DataGridLegacyCellContextMenu.tsx b/frontend/src/components/DataGridLegacyCellContextMenu.tsx
index 44b5c06..7167aaa 100644
--- a/frontend/src/components/DataGridLegacyCellContextMenu.tsx
+++ b/frontend/src/components/DataGridLegacyCellContextMenu.tsx
@@ -16,11 +16,15 @@ interface DataGridLegacyCellContextMenuProps {
bgContextMenu: string;
cellContextMenu: CellContextMenuState;
canModifyData: boolean;
+ copiedRowsForPasteLength: number;
selectedRowKeysLength: number;
copiedCellPatchAvailable: boolean;
supportsCopyInsert: boolean;
onClose: () => void;
onCopyFieldName: () => void;
+ onCopyRowData: () => void;
+ onCopyRowForPaste: () => void;
+ onPasteCopiedRowsAsNew: () => void;
onSetNull: () => void;
onEditRow: () => void;
onFillToSelected: () => void;
@@ -55,11 +59,15 @@ const DataGridLegacyCellContextMenu: React.FC 0;
+ const canPasteRows = copiedRowsForPasteLength > 0;
const makeHoverHandlers = (enabled = true) => ({
onMouseEnter: (e: React.MouseEvent) => {
@@ -129,6 +138,27 @@ const DataGridLegacyCellContextMenu: React.FC
编辑本行
+
+
+ 复制本行为新增行
+
+ {
+ if (canPasteRows) {
+ onPasteCopiedRowsAsNew();
+ onClose();
+ }
+ }}
+ >
+
+ {canPasteRows ? `粘贴为新增行 (${copiedRowsForPasteLength})` : '粘贴为新增行'}
+
>
)}
+
+
+ 复制行数据
+
{supportsCopyInsert && (
<>
复制为 INSERT
diff --git a/frontend/src/components/DataGridToolbarFrame.tsx b/frontend/src/components/DataGridToolbarFrame.tsx
index d9be960..c3384a4 100644
--- a/frontend/src/components/DataGridToolbarFrame.tsx
+++ b/frontend/src/components/DataGridToolbarFrame.tsx
@@ -59,7 +59,6 @@ export interface DataGridToolbarFrameProps {
onToggleFilter?: () => void;
canModifyData: boolean;
selectedRowKeysLength: number;
- copiedRowsForPasteLength: number;
allSelectedAreDeleted: boolean;
cellEditMode: boolean;
selectedCellsSize: number;
@@ -95,8 +94,6 @@ export interface DataGridToolbarFrameProps {
onRefresh: () => void;
onToggleFilterClick: () => void;
onAddRow: () => void;
- onCopySelectedRowsForPaste: () => void;
- onPasteCopiedRowsAsNew: () => void;
onUndoDeleteSelected: () => void;
onDeleteSelected: () => void;
onToggleCellEditMode: () => void;
@@ -155,7 +152,6 @@ const DataGridToolbarFrame: React.FC = ({
onToggleFilter,
canModifyData,
selectedRowKeysLength,
- copiedRowsForPasteLength,
allSelectedAreDeleted,
cellEditMode,
selectedCellsSize,
@@ -191,8 +187,6 @@ const DataGridToolbarFrame: React.FC = ({
onRefresh,
onToggleFilterClick,
onAddRow,
- onCopySelectedRowsForPaste,
- onPasteCopiedRowsAsNew,
onUndoDeleteSelected,
onDeleteSelected,
onToggleCellEditMode,
@@ -301,22 +295,6 @@ const DataGridToolbarFrame: React.FC = ({
<>
{renderToolbarDivider()}
} onClick={onAddRow}>添加行
- }
- disabled={selectedRowKeysLength === 0}
- onClick={onCopySelectedRowsForPaste}
- >
- 复制行
-
- }
- disabled={copiedRowsForPasteLength === 0}
- onClick={onPasteCopiedRowsAsNew}
- >
- {copiedRowsForPasteLength > 0 ? `粘贴行 (${copiedRowsForPasteLength})` : '粘贴行'}
-
{allSelectedAreDeleted ? (
} disabled={selectedRowKeysLength === 0} onClick={onUndoDeleteSelected}>撤销删除
) : (
@@ -394,16 +372,15 @@ const DataGridToolbarFrame: React.FC = ({
{isQueryResultExport && (
<>
{renderToolbarDivider()}
- }
- disabled={!canCopyQueryResult}
- onClick={onCopyQueryResultCsv}
- >
- 复制
-
- } disabled={!canCopyQueryResult} />
+ }
+ disabled={!canCopyQueryResult}
+ onClick={onCopyQueryResultCsv}
+ >
+ 复制
+
>
)}