feat: 워크스페이스 분할 보기(2·4분할) + 구분선 드래그 크기 조절
- 탭바에 분할 레이아웃 버튼 추가: 1분할 / 2분할(좌우) / 2분할(상하) / 4분할 - iframe reparent 없이 absolute 위치만 재계산해 작업 상태 보존 - 포커스된 칸에 탭 클릭으로 화면 배치, 칸 헤더(↻ 새로고침 · × 비우기) - 칸 안 클릭 시 해당 칸 포커스 - 분할 구분선 드래그로 칸 크기(비율) 조절, 더블클릭 50% 초기화 - 드래그 중 투명 오버레이로 iframe 위에서도 이벤트 유지 - 비율 12~88% 제한 - 레이아웃·칸 배치·비율을 세션에 저장/복원(계정별 격리 유지) - 단축키를 포커스 칸 기준으로 동작하도록 정리 - 매뉴얼: [화면 구성·워크스페이스] 에 분할 보기·크기 조절 절 추가, 개요 안내 보강 - e2e: 분할 보기(2·4분할 전환) 케이스 추가 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -93,6 +93,46 @@ test.describe('워크스페이스 탭', () => {
|
||||
await expect(page.locator('.ws-tab')).toHaveCount(1);
|
||||
});
|
||||
|
||||
test('분할 보기: 2분할(좌우)·4분할에서 여러 화면 동시 표시', async ({ page }) => {
|
||||
await login(page, 'admin');
|
||||
await page.goto('/admin/select-local-government');
|
||||
await page.evaluate(() => {
|
||||
const r = document.querySelector('input[name="lg_idx"][value="1"]');
|
||||
if (r) { r.checked = true; r.form.submit(); }
|
||||
});
|
||||
await page.waitForTimeout(700);
|
||||
await page.goto('/workspace');
|
||||
await page.waitForTimeout(2500);
|
||||
|
||||
// 분할 컨트롤 버튼 4개 존재
|
||||
await expect(page.locator('#wsLayout button')).toHaveCount(4);
|
||||
|
||||
// 소메뉴 2개를 탭으로 열기
|
||||
await page.locator('.sidebar .my-menu-list a').nth(0).click();
|
||||
await page.waitForTimeout(1200);
|
||||
await page.locator('.sidebar .my-menu-list a').nth(1).click();
|
||||
await page.waitForTimeout(1200);
|
||||
// 단일 모드: 화면에 보이는 프레임은 1개
|
||||
await expect(page.locator('.ws-frame:visible')).toHaveCount(1);
|
||||
|
||||
// 2분할(좌우) → 보이는 프레임 2개 + 칸 헤더 2개
|
||||
await page.locator('#wsLayout button[data-mode="lr"]').click();
|
||||
await page.waitForTimeout(600);
|
||||
await expect(page.locator('.ws-frame:visible')).toHaveCount(2);
|
||||
await expect(page.locator('.ws-slot-head:visible')).toHaveCount(2);
|
||||
|
||||
// 4분할 → 칸 헤더 4개
|
||||
await page.locator('#wsLayout button[data-mode="quad"]').click();
|
||||
await page.waitForTimeout(600);
|
||||
await expect(page.locator('.ws-slot-head:visible')).toHaveCount(4);
|
||||
|
||||
// 다시 1분할 → 보이는 프레임 1개
|
||||
await page.locator('#wsLayout button[data-mode="single"]').click();
|
||||
await page.waitForTimeout(600);
|
||||
await expect(page.locator('.ws-frame:visible')).toHaveCount(1);
|
||||
await expect(page.locator('.ws-slot-head:visible')).toHaveCount(0);
|
||||
});
|
||||
|
||||
test('편의: 가운데클릭 닫기·사이드바 동기화', async ({ page }) => {
|
||||
await login(page, 'admin');
|
||||
await page.goto('/admin/select-local-government');
|
||||
|
||||
Reference in New Issue
Block a user