diff --git a/app/game-frontend/e2e/commandArguments.spec.ts b/app/game-frontend/e2e/commandArguments.spec.ts index 47621e83..5746fcd1 100644 --- a/app/game-frontend/e2e/commandArguments.spec.ts +++ b/app/game-frontend/e2e/commandArguments.spec.ts @@ -751,7 +751,7 @@ const chiefCenter = { officerLevel, name: officerLevel === 5 ? '장수' : `수뇌${officerLevel}`, npcState: officerLevel === 8 ? 2 : 0, - turnTime: null, + turnTime: '2026-08-30T01:46:47.590Z', revision: 0, turns: officerLevel === 12 @@ -2799,6 +2799,15 @@ test('physical mobile touch drag selects general and nation turns in advanced mo } }); +test('renders chief turn rows in the fixed UTC+9 server timezone', async ({ page }) => { + await install(page); + await page.goto('chief-center'); + + await expect(page.getByRole('heading', { name: '사령부', exact: true })).toBeVisible(); + await expect(page.locator('.chief-grid-row').first().locator('.row-time').nth(0)).toHaveText('10:46'); + await expect(page.locator('.chief-grid-row').first().locator('.row-time').nth(1)).toHaveText('10:56'); +}); + test('keeps the shared main and chief shell geometry and interaction states', async ({ page }) => { const requests = await install(page); await page.setViewportSize({ width: 1000, height: 900 }); diff --git a/app/game-frontend/src/views/ChiefCenterView.vue b/app/game-frontend/src/views/ChiefCenterView.vue index 696806ba..7533765d 100644 --- a/app/game-frontend/src/views/ChiefCenterView.vue +++ b/app/game-frontend/src/views/ChiefCenterView.vue @@ -3,6 +3,7 @@ import { computed, onMounted, ref, watch } from 'vue'; import { useMediaQuery } from '@vueuse/core'; import { addMinutes } from 'date-fns'; import { useRouter } from 'vue-router'; +import { formatServerDateTime } from '@sammo-ts/common/time/ServerDateTime'; import SkeletonLines from '../components/ui/SkeletonLines.vue'; import ChiefTurnCard from '../components/chief/ChiefTurnCard.vue'; import ChiefCommandEditor from '../components/chief/ChiefCommandEditor.vue'; @@ -219,8 +220,8 @@ const buildTurnRows = (chief: ChiefEntry): TurnRow[] => { baseTime && Number.isFinite(turnTermMinutes) ? addMinutes(baseTime, idx * turnTermMinutes) : null; const timeLabel = turnDate ? turnTermMinutes >= 5 - ? `${String(turnDate.getUTCHours()).padStart(2, '0')}:${String(turnDate.getUTCMinutes()).padStart(2, '0')}` - : `${String(turnDate.getUTCMinutes()).padStart(2, '0')}:${String(turnDate.getUTCSeconds()).padStart(2, '0')}` + ? formatServerDateTime(turnDate, { format: 'hourMinute' }) + : formatServerDateTime(turnDate, { format: 'minuteSecond' }) : '--:--'; const actionLabel = formatReservedCommandBrief('nation', turn.action, turn.args, commandTable.value) ??