chore(WEB): 다수 컴포넌트 개선 및 CEO 대시보드 추가

- CEO 대시보드 컴포넌트 추가
- AuthenticatedLayout 개선
- 각 모듈 actions.ts 에러 핸들링 개선
- API fetch-wrapper, refresh-token 로직 개선
- ReceivablesStatus 컴포넌트 업데이트
- globals.css 스타일 업데이트
- 기타 다수 컴포넌트 수정

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
byeongcheolryu
2026-01-08 17:15:42 +09:00
parent 387672b5b2
commit 29e7b41615
92 changed files with 7695 additions and 409 deletions

View File

@@ -9,6 +9,7 @@
import { cookies } from 'next/headers';
import { redirect } from 'next/navigation';
import { isRedirectError } from 'next/dist/client/components/redirect';
import { createErrorResponse, type ApiErrorResponse } from './errors';
import { refreshAccessToken } from './refresh-token';
@@ -175,17 +176,8 @@ export async function serverFetch(
return { response, error: null };
} catch (error) {
// Next.js 15: redirect()는 digest 프로퍼티를 가진 에러를 throw
// 이 에러는 다시 throw해서 Next.js가 처리하도록 해야 함
if (
error &&
typeof error === 'object' &&
'digest' in error &&
typeof (error as { digest: unknown }).digest === 'string' &&
(error as { digest: string }).digest.startsWith('NEXT_REDIRECT')
) {
throw error;
}
// Next.js 15: redirect()는 특수한 에러를 throw하므로 다시 throw해서 Next.js가 처리하도록 함
if (isRedirectError(error)) throw error;
console.error(`[serverFetch] Network error: ${url}`, error);
return {
response: null,