Python内核代码移除,建模界面缩放bug修复

This commit is contained in:
ljz committed 2026-09-10 11:57:39 +08:00
1 parent 743663e3a6
commit 0dcb465d84
27 files changed
+354 -6092

No files matched your search

+71 -10
View File
@@ -257,18 +257,18 @@ test("普通滚轮纵向平移,Ctrl 滚轮缩放且滚动条和中键拖动保
await expect
.poll(async () => (await readModelingViewport(page)).zoom)
.not.toBeCloseTo(beforeZoom.zoom, 2);
const horizontalAfterZoom = await horizontalScrollbar.evaluate(
(element) => element.scrollLeft,
);
const verticalAfterZoom = await verticalScrollbar.evaluate(
(element) => element.scrollTop,
);
expect(
Math.hypot(
await expect.poll(async () => {
const horizontalAfterZoom = await horizontalScrollbar.evaluate(
(element) => element.scrollLeft,
);
const verticalAfterZoom = await verticalScrollbar.evaluate(
(element) => element.scrollTop,
);
return Math.hypot(
horizontalAfterZoom - horizontalBeforeZoom,
verticalAfterZoom - verticalBeforeZoom,
),
).toBeGreaterThan(1);
);
}).toBeGreaterThan(1);
const beforeMiddleDrag = await readModelingViewport(page);
await page.mouse.move(pointer.x, pointer.y);
@@ -404,6 +404,67 @@ test("导入大型工程 JSON 后非接触连线端点与端口保持对齐", as
});
test("大型工程连续缩放时滚动条不逐帧重排且停稳后同步", async ({ page }) => {
await prepareApp(page);
await page.goto("/");
await page.locator('input[type="file"]').setInputFiles(MQL_8_PROJECT_PATH);
await expectAllNodesInsideCanvas(page, ".flow-canvas", mql8Project.nodes.length);
await expect(page.getByRole("scrollbar", { name: "水平滚动画布" }))
.toHaveAttribute("aria-valuemax", /[1-9]/);
const changes = await page.evaluate(async () => {
const canvas = document.querySelector<HTMLElement>(".flow-canvas")!;
const pane = canvas.querySelector<HTMLElement>(".react-flow__pane")!;
const viewport = canvas.querySelector<HTMLElement>(".react-flow__viewport")!;
const scrollbars = canvas.querySelector<HTMLElement>(".flow-viewport-scrollbars")!;
const bounds = canvas.getBoundingClientRect();
let viewportChanges = 0;
let scrollbarChanges = 0;
const observer = new MutationObserver((mutations) => {
for (const mutation of mutations) {
if (mutation.target === viewport) viewportChanges++;
if (scrollbars.contains(mutation.target)) scrollbarChanges++;
}
});
observer.observe(viewport, { attributes: true, attributeFilter: ["style"] });
observer.observe(scrollbars, {
attributes: true, attributeFilter: ["style"], subtree: true,
});
// 连续输入覆盖整个手势,避免驱动侧等待导致其被拆成多个独立缩放。
for (let index = 0; index < 12; index++) {
pane.dispatchEvent(new WheelEvent("wheel", {
bubbles: true, cancelable: true, ctrlKey: true, deltaY: -8,
clientX: bounds.x + bounds.width / 2,
clientY: bounds.y + bounds.height / 2,
}));
await new Promise<void>((resolve) => requestAnimationFrame(() => resolve()));
}
observer.disconnect();
return { viewportChanges, scrollbarChanges };
});
expect(changes.viewportChanges).toBeGreaterThan(5);
expect(changes.scrollbarChanges).toBeLessThan(changes.viewportChanges / 2);
await expect.poll(async () => {
const viewport = await readModelingViewport(page);
const scale = await page.locator(".flow-canvas").evaluate((canvas) =>
Number(canvas.style.getPropertyValue("--port-handle-hit-scale")),
);
return Math.abs(scale * viewport.zoom - 1);
}).toBeLessThan(0.01);
const alignment = await readVisibleEdgeEndpointAlignment(page, mql8Project.edges);
expect(alignment.missingHandles).toEqual([]);
expect(alignment.checkedEdgeCount).toBeGreaterThan(20);
expect(alignment.maxDistance).toBeLessThanOrEqual(4);
const zoom = (await readModelingViewport(page)).zoom;
const horizontal = page.getByRole("scrollbar", { name: "水平滚动画布" });
await horizontal.focus();
const before = await readModelingViewport(page);
await horizontal.press("ArrowRight");
await expect.poll(async () => (await readModelingViewport(page)).x).toBeLessThan(before.x);
expect((await readModelingViewport(page)).zoom).toBeCloseTo(zoom, 5);
});
test("恢复自动保存工程后自动适配建模画布", async ({ page }) => {
await prepareApp(page);
await page.addInitScript((project) => {