diff --git a/.claude/skills/vue3/SKILL.md b/.claude/skills/vue3/SKILL.md
index 71cbdb9..f21bf64 100644
--- a/.claude/skills/vue3/SKILL.md
+++ b/.claude/skills/vue3/SKILL.md
@@ -81,7 +81,7 @@ description: Vue 3 프론트엔드(frontend/) 개발 규칙 — Composition API
> 두 포트 모두 `vite.config.ts` 가 **루트 `.env.{mode}` 에서 직접 읽는다** — 프론트 쪽에 포트를 중복 작성하지 않는다.
> **확장 시 따르는 규칙:**
-> - **새 사내 모듈**(캘린더·파일·ERP 등): `app-modules.ts` 에 항목을 활성화하고, 라우트 + `AppShell` 안의 모듈 패널을 메일 모듈처럼 만든다. 셸을 새로 만들지 않는다.
+> - **새 사내 모듈**(캘린더·파일 등): `app-modules.ts` 에 항목을 활성화하고, 라우트 + `AppShell` 안의 모듈 패널을 메일 모듈처럼 만든다. 셸을 새로 만들지 않는다.
> - **새 화면**: 구현 전에 디자인 캔버스로 먼저 확인받고, 확정본을 `docs/design/` 에 둔 뒤 그 기준으로 만든다. 뱃지(안 읽음 점·개수 알약·태그)는 쓰지 않는다.
> - **공통 컴포넌트**: `BaseButton` 패턴을 따라 `src/components/` 에 추가
diff --git a/docs/design/webmail/README.md b/docs/design/webmail/README.md
index 4ffb152..ba61c07 100644
--- a/docs/design/webmail/README.md
+++ b/docs/design/webmail/README.md
@@ -29,7 +29,8 @@
## 디자인 원칙 (사용자 확정)
- 안 읽음 점·개수 알약·코드 태그 같은 **뱃지를 쓰지 않는다** — 굵은 글자와 평범한 숫자로 구분한다.
-- 왼쪽 **전역 앱 레일**(메일·캘린더·파일·ERP·주소록·설정)에 모듈을 계속 붙인다. 지금은 메일만 동작한다.
+- 왼쪽 **전역 앱 레일**(메일·캘린더·파일·주소록·설정)에 모듈을 계속 붙인다. 지금은 메일 · 주소록 · 설정이 동작하고 캘린더 · 파일은 "준비 중"이다.
+ ERP 는 2026-11-04 사용자 요청으로 레일과 로그인 소개 글에서 뺐다 — 그 전에 그린 캔버스(`*.dc.html`)에는 남아 있다.
- 정보 밀도가 높은 데스크톱 화면 — 기본 13px. 목록에 본문 미리보기를 넣지 않는다.
- 분할 보기 행: 2줄(보낸 사람·시간 / 제목+첨부 클립), 약 50px
- 목록 보기 행: 1줄 표, 38px. 칸 = 별 32 · 보낸 사람 168 · 제목(나머지) · 날짜 84 · 크기 64 (px, 칸 사이 12).
diff --git a/frontend/src/components/shell/AppRail.spec.ts b/frontend/src/components/shell/AppRail.spec.ts
index 0474762..f57e6ba 100644
--- a/frontend/src/components/shell/AppRail.spec.ts
+++ b/frontend/src/components/shell/AppRail.spec.ts
@@ -13,11 +13,13 @@ describe('AppRail', () => {
return mount(AppRail, { props: { activeModule: 'mail' }, global: { plugins: [router] } })
}
- it('모듈 목록 하나로 그린다 — 메일 · 캘린더 · 파일 · ERP · 주소록 · 설정', async () => {
+ it('모듈 목록 하나로 그린다 — 메일 · 캘린더 · 파일 · 주소록 · 설정', async () => {
const wrapper = await mountRail()
const labels = wrapper.findAll('.rail-item').map((item) => item.text().replace('(준비 중)', '').trim())
expect(labels).toEqual(APP_MODULES.map((module) => module.label))
+ // 실제 목록도 그대로 본다 — ERP 칸은 2026-11-04 사용자 요청으로 뺐다(다시 넣으면 이 목록도 함께 고친다)
+ expect(labels).toEqual(['메일', '캘린더', '파일', '주소록', '설정'])
})
it('메일 · 주소록(8단계) · 설정이 링크이고, 지금 모듈이 현재로 표시된다', async () => {
diff --git a/frontend/src/pages/LoginPage.vue b/frontend/src/pages/LoginPage.vue
index b25e02a..b78ff78 100644
--- a/frontend/src/pages/LoginPage.vue
+++ b/frontend/src/pages/LoginPage.vue
@@ -376,7 +376,7 @@ void supportContactStore.ensureLoaded()
사내 업무를
한 계정으로
- 메일부터 시작해 캘린더, 파일 저장소, ERP까지 같은 계정으로 이어집니다. + 메일부터 시작해 캘린더와 파일 저장소까지 같은 계정으로 이어집니다.
diff --git a/frontend/src/shared/constants/app-modules.ts b/frontend/src/shared/constants/app-modules.ts index c392074..8ed6e15 100644 --- a/frontend/src/shared/constants/app-modules.ts +++ b/frontend/src/shared/constants/app-modules.ts @@ -7,7 +7,7 @@ import type { IconName } from '@/shared/constants/icons' -export type AppModuleId = 'mail' | 'calendar' | 'files' | 'erp' | 'contacts' | 'settings' +export type AppModuleId = 'mail' | 'calendar' | 'files' | 'contacts' | 'settings' export interface AppModule { id: AppModuleId @@ -24,7 +24,6 @@ export const APP_MODULES: readonly AppModule[] = [ { id: 'mail', label: '메일', icon: 'mail', routeName: 'mail', placement: 'main' }, { id: 'calendar', label: '캘린더', icon: 'calendar', routeName: null, placement: 'main' }, { id: 'files', label: '파일', icon: 'folder', routeName: null, placement: 'main' }, - { id: 'erp', label: 'ERP', icon: 'briefcase', routeName: null, placement: 'main' }, // 8단계 — 주소록 (첫 화면은 전체 연락처, constants/contacts.ts 의 CONTACTS_ROUTES.all) { id: 'contacts', label: '주소록', icon: 'users', routeName: 'contacts', placement: 'main' }, { id: 'settings', label: '설정', icon: 'settings', routeName: 'settings', placement: 'end' },