Files
xk-admin/apps/web-antd/src/components/canvas-spreadsheet/composables/useUndoRedo.ts
李琦 69862cd982
Some checks failed
CI / Test (ubuntu-latest) (push) Has been cancelled
CI / Test (windows-latest) (push) Has been cancelled
CI / Lint (ubuntu-latest) (push) Has been cancelled
CI / Lint (windows-latest) (push) Has been cancelled
CI / Check (ubuntu-latest) (push) Has been cancelled
CI / Check (windows-latest) (push) Has been cancelled
CI / CI OK (push) Has been cancelled
CodeQL / Analyze (javascript-typescript) (push) Has been cancelled
Deploy Website on push / Deploy Push Playground Ftp (push) Has been cancelled
Deploy Website on push / Deploy Push Docs Ftp (push) Has been cancelled
Deploy Website on push / Deploy Push Antd Ftp (push) Has been cancelled
Deploy Website on push / Deploy Push Element Ftp (push) Has been cancelled
Deploy Website on push / Deploy Push Naive Ftp (push) Has been cancelled
Release Drafter / update_release_draft (push) Has been cancelled
Lock Threads / action (push) Has been cancelled
Issue Close Require / close-issues (push) Has been cancelled
Close stale issues / stale (push) Has been cancelled
1. Excel交互组件封装
2026-06-25 16:09:07 +08:00

48 lines
988 B
TypeScript

import { ref } from 'vue';
import type { SpreadsheetCommand } from '../types';
const MAX_STACK = 100;
export function useUndoRedo() {
const undoStack = ref<SpreadsheetCommand[]>([]);
const redoStack = ref<SpreadsheetCommand[]>([]);
function push(cmd: SpreadsheetCommand) {
undoStack.value.push(cmd);
if (undoStack.value.length > MAX_STACK) {
undoStack.value.shift();
}
redoStack.value = [];
}
async function undo() {
const cmd = undoStack.value.pop();
if (!cmd) return;
await cmd.undo();
redoStack.value.push(cmd);
}
async function redo() {
const cmd = redoStack.value.pop();
if (!cmd) return;
await cmd.redo();
undoStack.value.push(cmd);
}
function canUndo() {
return undoStack.value.length > 0;
}
function canRedo() {
return redoStack.value.length > 0;
}
function clear() {
undoStack.value = [];
redoStack.value = [];
}
return { push, undo, redo, canUndo, canRedo, clear };
}