From bf13dabc01aff322c5f41264f8bb9c4bdf438b4c Mon Sep 17 00:00:00 2001 From: hided62 Date: Mon, 31 Aug 2026 14:55:52 +0000 Subject: [PATCH] =?UTF-8?q?=EB=8F=85=EB=A6=BD=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=ED=95=98=EB=8B=A8=20=EB=B2=84=ED=8A=BC=20=ED=81=AC?= =?UTF-8?q?=EA=B8=B0=EB=A5=BC=20=ED=86=B5=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/game-frontend/e2e/auction.spec.ts | 3 +++ app/game-frontend/e2e/board.spec.ts | 10 +++++-- .../e2e/commandArguments.spec.ts | 22 ++++++++++++++++ app/game-frontend/e2e/inGameInfo.spec.ts | 11 ++++++-- app/game-frontend/e2e/inGameMenus.spec.ts | 24 +++++++++++++++++ app/game-frontend/e2e/mainNavigation.spec.ts | 26 +++++++++++++++++++ app/game-frontend/src/views/AuctionView.vue | 10 ++++++- .../src/views/BattleCenterView.vue | 11 ++++++-- app/game-frontend/src/views/BoardView.vue | 7 +---- .../src/views/ChiefCenterView.vue | 11 ++++++-- .../src/views/CurrentCityView.vue | 18 ------------- app/game-frontend/src/views/SurveyView.vue | 8 ++++-- 12 files changed, 126 insertions(+), 35 deletions(-) diff --git a/app/game-frontend/e2e/auction.spec.ts b/app/game-frontend/e2e/auction.spec.ts index 80fa9fc1..f8bde14b 100644 --- a/app/game-frontend/e2e/auction.spec.ts +++ b/app/game-frontend/e2e/auction.spec.ts @@ -270,6 +270,8 @@ test('resource auction preserves the legacy desktop structure, geometry, and int return { container: { x: containerRect.x, width: containerRect.width }, topBar: box('.top-back-bar'), + topClose: box('.top-back-bar .close-button'), + bottomClose: box('.bottom-bar .close-button'), row: { width: rowRect.width, height: rowRect.height }, cells, button: { @@ -282,6 +284,7 @@ test('resource auction preserves the legacy desktop structure, geometry, and int }); expect(geometry.container).toEqual({ x: 0, width: 1000 }); expect(geometry.topBar).toMatchObject({ x: 0, width: 1000, height: 32 }); + expect(geometry.bottomClose).toMatchObject({ width: geometry.topClose.width, height: geometry.topClose.height }); expect(geometry.row).toEqual({ width: 1000, height: 22 }); expect(geometry.cells[0]).toBeCloseTo(66.66, 1); expect(geometry.cells[1]).toBeCloseTo(133.34, 1); diff --git a/app/game-frontend/e2e/board.spec.ts b/app/game-frontend/e2e/board.spec.ts index 183f2aa3..40319f20 100644 --- a/app/game-frontend/e2e/board.spec.ts +++ b/app/game-frontend/e2e/board.spec.ts @@ -294,6 +294,7 @@ test('matches the ref meeting-room geometry, typography, textures, and controls' return { container: rect('#container'), topBar: rect('.top-back-bar'), + topButton: rect('.top-back-bar .back-button'), titleLabel: rect('.form-label'), submitArticle: rect('#submitArticle'), articleAuthor: rect('.article-header .author-name'), @@ -319,7 +320,7 @@ test('matches the ref meeting-room geometry, typography, textures, and controls' }; }); - expect(geometry.container).toMatchObject({ width: 1000, height: 397.3125 }); + expect(geometry.container).toMatchObject({ width: 1000, height: 393.8125 }); expect(geometry.topBar.height).toBe(32); expect(geometry.titleLabel.width).toBeCloseTo(83.33, 1); expect(geometry.titleLabel).toMatchObject({ y: 64.1875, height: 22.1875 }); @@ -333,7 +334,12 @@ test('matches the ref meeting-room geometry, typography, textures, and controls' expect(geometry.commentAuthor.width).toBe(120); expect(geometry.commentAuthor).toMatchObject({ y: 271.25, height: 20.1875 }); expect(geometry.submitComment).toMatchObject({ y: 292.4375, height: 29.375 }); - expect(geometry.bottomButton).toMatchObject({ x: 0, y: 361.8125, width: 71, height: 35.5 }); + expect(geometry.bottomButton).toMatchObject({ + x: 0, + y: 361.8125, + width: geometry.topButton.width, + height: geometry.topButton.height, + }); expect(geometry.font.family).toContain('Pretendard'); expect(geometry.font).toMatchObject({ size: '14px', lineHeight: '18.2px' }); expect(geometry.whiteSpace).toBe('pre'); diff --git a/app/game-frontend/e2e/commandArguments.spec.ts b/app/game-frontend/e2e/commandArguments.spec.ts index 21b27664..a20f392f 100644 --- a/app/game-frontend/e2e/commandArguments.spec.ts +++ b/app/game-frontend/e2e/commandArguments.spec.ts @@ -3062,3 +3062,25 @@ test('keeps the shared main and chief shell geometry and interaction states', as })); expect(chiefMobile).toEqual({ width: 500, padding: '0px', headerWidth: 500 }); }); + +test('keeps the chief footer return button the same size as the top return button', async ({ page }) => { + await install(page); + const measure = () => + page.locator('.chief-page').evaluate((element) => { + const top = element.querySelector('.chief-top .chief-nav')!.getBoundingClientRect(); + const bottom = element.querySelector('.chief-footer .chief-nav')!.getBoundingClientRect(); + return { + top: { width: top.width, height: top.height }, + bottom: { width: bottom.width, height: bottom.height }, + }; + }); + + await page.setViewportSize({ width: 1200, height: 900 }); + await page.goto('/che/chief-center'); + const desktop = await measure(); + expect(desktop.bottom).toEqual(desktop.top); + + await page.setViewportSize({ width: 500, height: 900 }); + const mobile = await measure(); + expect(mobile.bottom).toEqual(mobile.top); +}); diff --git a/app/game-frontend/e2e/inGameInfo.spec.ts b/app/game-frontend/e2e/inGameInfo.spec.ts index fa3c70b6..5157be79 100644 --- a/app/game-frontend/e2e/inGameInfo.spec.ts +++ b/app/game-frontend/e2e/inGameInfo.spec.ts @@ -1111,6 +1111,13 @@ test('current-city hides values and general rows for a wandering user', async ({ await expect(page.locator('.generals')).toHaveCount(0); }); +test('current-city keeps only the top and footer return buttons', async ({ page }) => { + await install(page, 'admin'); + await go(page, 'current-city'); + await expect(page.locator('.city-page .back-link')).toHaveCount(2); + await expect(page.locator('.city-page .back-row')).toHaveCount(0); +}); + test('current-city exposes own general details to a member and admin fixture', async ({ page }) => { await install(page, 'admin'); await page.setViewportSize({ width: 1200, height: 900 }); @@ -1138,8 +1145,8 @@ test('current-city exposes own general details to a member and admin fixture', a }; }); expect(legacyGeometry.selector).toMatchObject({ width: 400, height: 19 }); - expect(legacyGeometry.stats).toEqual({ x: 100, y: 165.375, width: 1000, height: 106.9375 }); - expect(legacyGeometry.generals).toMatchObject({ x: 88, y: 290.3125, width: 1024 }); + expect(legacyGeometry.stats).toEqual({ x: 100, y: 130.875, width: 1000, height: 106.9375 }); + expect(legacyGeometry.generals).toMatchObject({ x: 100, y: 255.8125, width: 1000 }); expect(legacyGeometry.titleAlign).toBe('start'); expect(legacyGeometry.icon).toMatchObject({ width: 64, height: 64, naturalWidth: 64, naturalHeight: 64 }); if (artifactRoot) { diff --git a/app/game-frontend/e2e/inGameMenus.spec.ts b/app/game-frontend/e2e/inGameMenus.spec.ts index eb31e18d..93b1549e 100644 --- a/app/game-frontend/e2e/inGameMenus.spec.ts +++ b/app/game-frontend/e2e/inGameMenus.spec.ts @@ -2454,3 +2454,27 @@ test('감찰부 keeps the selector interaction and shows the permission error pa await page.reload(); await expect(page.getByRole('alert')).toContainText('권한이 부족합니다.'); }); + +test('감찰부 하단 창 닫기 버튼은 상단 버튼과 같은 크기를 유지한다', async ({ page }) => { + const head: FixtureState = { permission: 'head', myset: 3, settingMutations: [], accessPages: [] }; + await install(page, head); + const measure = () => + page.locator('.battle-page').evaluate((element) => { + const top = element.querySelector('.battle-top .battle-nav')!.getBoundingClientRect(); + const bottom = element.querySelector('.battle-footer .battle-nav')!.getBoundingClientRect(); + return { + top: { width: top.width, height: top.height }, + bottom: { width: bottom.width, height: bottom.height }, + }; + }); + + await page.setViewportSize({ width: 1000, height: 900 }); + await page.goto('battle-center'); + await expect(page.getByRole('heading', { name: '감찰부' })).toBeVisible(); + const desktop = await measure(); + expect(desktop.bottom).toEqual(desktop.top); + + await page.setViewportSize({ width: 500, height: 900 }); + const mobile = await measure(); + expect(mobile.bottom).toEqual(mobile.top); +}); diff --git a/app/game-frontend/e2e/mainNavigation.spec.ts b/app/game-frontend/e2e/mainNavigation.spec.ts index 2c947d83..6b2f88eb 100644 --- a/app/game-frontend/e2e/mainNavigation.spec.ts +++ b/app/game-frontend/e2e/mainNavigation.spec.ts @@ -1237,6 +1237,32 @@ test('keeps the active survey title after voting without reopening the new-surve await expect(page.locator('.survey-notice')).toHaveCount(0); }); +test('keeps the survey footer close button the same size as the top close button', async ({ page }) => { + const state: NavigationFixture = { + officerLevel: 0, + permission: 0, + nationLevel: 0, + stage: 0, + npcMode: 1, + generalMeCalls: 0, + operations: [], + }; + await installFixture(page, state); + await page.goto(`${basePath}/survey`); + for (const width of [1000, 500]) { + await page.setViewportSize({ width, height: 900 }); + const geometry = await page.locator('.pageVote').evaluate((element) => { + const top = element.querySelector('.back_bar .back_btn')!.getBoundingClientRect(); + const bottom = element.querySelector('.bottom_bar .back_btn')!.getBoundingClientRect(); + return { + top: { width: top.width, height: top.height }, + bottom: { width: bottom.width, height: bottom.height }, + }; + }); + expect(geometry.bottom).toEqual(geometry.top); + } +}); + test('notifies only for a new incoming private message and marks it read from the notice', async ({ page, }, testInfo) => { diff --git a/app/game-frontend/src/views/AuctionView.vue b/app/game-frontend/src/views/AuctionView.vue index 45b7f56c..5c1c49d8 100644 --- a/app/game-frontend/src/views/AuctionView.vue +++ b/app/game-frontend/src/views/AuctionView.vue @@ -494,7 +494,11 @@ onMounted(() => {
-
@@ -762,6 +766,10 @@ input:focus-visible { .bottom-bar { padding-top: 20px; } +.bottom-bar .close-button { + --legacy-button-height: 32px; + width: 88px; +} @media (max-width: 991px) { .legacy-auction-page { max-width: none; diff --git a/app/game-frontend/src/views/BattleCenterView.vue b/app/game-frontend/src/views/BattleCenterView.vue index 9ecf1ad8..66720a4c 100644 --- a/app/game-frontend/src/views/BattleCenterView.vue +++ b/app/game-frontend/src/views/BattleCenterView.vue @@ -317,7 +317,11 @@ onMounted(() => {