generated from ttipo/project-base
468a4377ee
확정된 디자인(docs/design/webmail)을 기준으로 만든 웹메일 화면이다. - 앞으로 붙일 사내 모듈(캘린더·파일·ERP 등)을 위한 전역 앱 레일과 셸, Pretendard 자체 호스팅, 바다 청록 브랜드 토큰과 콘텐츠 열 토큰 - 로그인과 세션 처리: 401 이면 한 번 갱신한 뒤 다시 보내고, 실패하면 세션 만료 대화상자를 띄운다. 로그아웃은 다른 탭에도 알리고, 로그아웃 뒤에 늦게 온 갱신 결과는 버린다 - 메일함(분할·목록 보기), 읽기(외부 HTML 은 sandbox iframe 으로만 그린다), 쓰기(발송 키 규칙, 첨부 형식·크기·합계·개수 사전 검사, 답장·전달 초안 길이 맞춤) - 오류는 코드로만 분기하고, 문구는 생성된 에러 사전에서 가져온다 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
19 lines
711 B
Vue
19 lines
711 B
Vue
<script setup lang="ts">
|
|
// 최상위 레이아웃 — 라우터 뷰 + 전역 피드백(알림 · 세션 만료 대화상자)
|
|
// 모듈별 레이아웃(전역 셸 등)은 라우트 단위로 둔다 (pages/mail/MailLayout.vue)
|
|
import { RouterView } from 'vue-router'
|
|
|
|
import SessionExpiredDialog from '@/components/feedback/SessionExpiredDialog.vue'
|
|
import ToastHost from '@/components/feedback/ToastHost.vue'
|
|
import { useLogoutSync } from '@/composables/useLogoutBroadcast'
|
|
|
|
// 다른 탭에서 로그아웃하면 이 탭도 로그인 화면으로 간다 (계약 1절 "클라이언트 처리 규칙")
|
|
useLogoutSync()
|
|
</script>
|
|
|
|
<template>
|
|
<RouterView />
|
|
<ToastHost />
|
|
<SessionExpiredDialog />
|
|
</template>
|