Skip to content

근무 스케줄표 (Table 2 · .sched-grid)

Hereby 표는 두 종류

이 페이지 = Table 2 — 근무 스케줄표(간호사 스케줄러)의 스프레드시트형 패턴. 일반 리스트/현황/내역 표는 Data table (Table 1)을 따르세요.

Table 1 스펙을 적용하지 마세요

Table 2는 Table 1(36px 행·12px 폰트 바닥선·중앙정렬 카드 표·풀 격자)을 의도적으로 따르지 않습니다. 셀이 더 작고(2rem·11.2px) 스프레드시트처럼 동작합니다. admin 글로벌 CSS도 table:not(.sched-grid)로 스케줄표를 명시적으로 제외합니다.

규칙 (강제) · 코딩 에이전트용 — 사람은 접힌 채로 두어도 됩니다

Table 2(근무 스케줄표 .sched-grid) 강제 규칙. 상세·데모는 아래 본문. admin·team-manager에 .sched-grid 복제본이 있고 .pref-*·.memo-corner·환자수 행은 admin 네이티브 스케줄러 전용.

  • 하드 경계: Table 1 스펙(36px 행·12px 바닥선·중앙정렬 카드·풀 격자) 적용 금지. admin 글로벌 CSS는 table:not(.sched-grid)로 명시 제외 — 이 셀렉터 규약 유지.
  • .sched-cell: min-width:2.5rem·height:2rem·font-size:0.7rem·font-weight:600·flex 중앙, cursor:pointer; user-select:none.
  • 동결: .freeze-nurse(left:0, 80px)·.freeze-type(left:80px, 80px), position:sticky 흰 배경(thead 동결 셀은 neutral-50).
  • 근무 유형 .shift-* 8종(배경/글자): D yellow-100/hr-amber-800 · E hr-emerald-100/hr-emerald-800 · N blue-100/hr-indigo-800 · OFF neutral-50/hr-gray-400 · 연차 hr-pink-100/hr-pink-700 · 경조 hr-indigo-50/hr-violet-600 · 교육 hr-aquablue-100/hr-aquablue-700 · 불가 hr-red-100/hr-red-600.
  • 출결 배지 .att-badge 5종(셀 우상단 원형, pointer-events:none): 정상 hr-green-100/hr-green-600 · 지각/조퇴 yellow-100/hr-amber-600 · 결근 hr-red-100/hr-red-600 · 휴가 hr-indigo-50/hr-violet-600.
  • 코너 표식 3종(겹치지 않게 분리): 좌상단 .memo-corner(메모, 삼각 8px neutral-900) · 우상단 .att-badge(출결) · 우하단 .pref-corner--*(희망근무 색 배지).
  • 희망근무 팔레트(공유 토큰 강제): D=--color-yellow-500·E=--color-hr-emerald-600·N=--color-blue-500(배지 .pref-corner--*·틴트 .pref-tint-*·피커 .pref-shift--* 공통). 임의값(emerald-500/indigo-500) 금지. 피커 2종 구분: 연한 셀+어두운 글자(.shift-*, 근무 변경) vs 채움+흰 글자(.pref-shift--*, 희망근무 입력). .shift-btn은 hover brightness(.95)/active .9, box-shadow 금지(focus ring 충돌).
  • 기타: .fill-handle(선택 우하단, blue-500, cursor:crosshair). 주말 .col-weekend=--color-purple-50, 공휴일 .col-holiday=--color-red-50. .sched-grid.is-dragging=텍스트 선택 off + crosshair. 인력부족 .staffing-short=hr-red-600 700. 인쇄는 @page landscape 전용.
  • 인터랙션: 셀 더블클릭 또는 드래그 2칸+ 선택 완료 시 「근무 변경」 피커 팝오버(마지막 셀 위치, 인라인 순환 아님). 단일 클릭은 선택만.
  • 주의: 스타일 단일 출처는 team-manager/main.css(docs 데모는 복제본). .att-badge 크기 7px/10px 표기 불일치 있어 구현 전 실제 CSS 확인.

라이브 미리보기 2026-06-18

실제 .sched-grid/.sched-cell/.shift-*/.att-badge 스타일을 docs 데모에 포팅해 렌더해요. 셀에 마우스를 올려 hover 링을, 클릭해 선택(우하단 fill-handle)을, 더블클릭 또는 드래그로 2칸 이상 선택 완료 시 「근무 변경」 피커(마지막 셀 위치에 뜨는 팝오버 — admin과 동일, 인라인 순환 아님)를, 일부 셀 좌상단의 메모 세모(우상단 출결 배지와 안 겹침)를 확인하세요.

근무 유형 8종D 주간E 오후N 야간OFF 휴무연차 연차(AL)경조 경조(BV)교육 교육(ED)불가 불가(UA)
출결 배지 5종 정상 지각 조퇴 결근 휴가— 배지에 마우스 올리면 출근현황 툴팁
간호사근무형태
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
김간호
2019-101
3교대
D
E
N
OFF
D
연차
N
OFF
D
OFF
N
E
D
OFF
D
E
N
OFF
D
E
OFF
이간호
2020-108
3교대
OFF
D
E
N
OFF
D
OFF
N
E
D
OFF
D
E
N
OFF
D
E
OFF
D
E
N
박간호
2021-115
주간
N
OFF
D
OFF
교육
E
D
OFF
D
E
N
OFF
D
E
OFF
D
E
N
OFF
D
E
최간호
2022-122
3교대
OFF
N
E
D
OFF
D
E
N
OFF
D
E
OFF
D
E
경조
OFF
D
E
N
OFF
D
정간호
2023-129
야간
D
OFF
D
E
N
OFF
D
E
OFF
D
E
N
OFF
D
E
N
OFF
D
연차
N
E
강수간
2019-136
3교대
E
N
OFF
D
E
OFF
D
E
N
불가
D
E
N
OFF
D
OFF
N
E
D
OFF
D
조간호
2020-143
3교대
D
E
OFF
D
E
N
OFF
D
E
N
OFF
D
OFF
N
E
D
OFF
D
E
N
OFF
윤간호
2021-150
주간
D
E
N
OFF
D
E
N
OFF
D
OFF
N
연차
D
OFF
D
E
N
OFF
D
E
OFF
장간호
2022-157
3교대
OFF
D
E
N
OFF
D
OFF
N
E
D
OFF
D
E
N
OFF
D
E
OFF
D
E
N
임간호
2023-164
야간
N
OFF
교육
OFF
N
E
D
OFF
D
E
N
OFF
D
E
OFF
D
E
N
OFF
D
E
한간호
2019-171
3교대
OFF
N
E
D
OFF
D
E
N
교육
D
E
OFF
D
E
N
OFF
D
E
N
OFF
D
오간호
2020-178
주간
D
OFF
D
E
N
OFF
D
E
OFF
D
E
N
OFF
D
E
N
경조
D
OFF
N
E
서간호
2021-185
3교대
E
N
OFF
D
E
OFF
불가
E
N
OFF
D
E
N
OFF
D
OFF
N
E
D
OFF
D
신간호
2022-192
3교대
D
E
OFF
D
E
N
OFF
D
E
N
OFF
D
OFF
N
E
D
OFF
D
E
N
OFF
환자 수병상 32
22
27
32
26
31
25
30
24
29
23
28
22
27
32
26
31
25
30
24
29
23
합계
D:6/4
E:2/3
N:2/3
D:2/4
E:4/3
N:4/3
D:3/4
E:4/3
N:2/3
D:6/4
E:2/3
N:2/3
D:2/4
E:4/3
N:3/3
D:4/4
E:3/3
N:2/3
D:5/4
E:2/3
N:2/3
D:2/4
E:4/3
N:4/3
D:4/4
E:4/3
N:2/3
D:6/4
E:2/3
N:2/3
D:2/4
E:4/3
N:4/3
D:4/4
E:3/3
N:2/3
D:6/4
E:2/3
N:2/3
D:2/4
E:4/3
N:4/3
D:4/4
E:4/3
N:1/3
D:6/4
E:2/3
N:2/3
D:2/4
E:4/3
N:4/3
D:4/4
E:4/3
N:2/3
D:6/4
E:2/3
N:2/3
D:2/4
E:4/3
N:4/3
D:4/4
E:4/3
N:2/3

세로/가로로 스크롤하면 상단 헤더 · 하단 합계 · 좌측 2열(간호사/근무형태)이 고정돼요.
클릭/드래그 선택(검정 사각형 + tint-12 배경 + 검정 fill-handle). 더블클릭 또는 드래그로 2칸+ 선택 완료근무 변경 피커가 마지막 셀에 뜸(admin과 동일 — 다중 선택이면 선택 전체에 적용). 셀 좌상단 메모 세모(우상단 출결 배지와 안 겹침), 출결 배지 호버 시 출근현황 툴팁. 전부 admin(4001) 마크업 그대로.

ℹ️ docs 렌더 메모: 스케줄표 스타일은 team-manager/main.css에 있고 docs 테마는 이를 로드하지 않으므로, 데모 컴포넌트에 해당 규칙을 복제했습니다(색상은 design-system.css 토큰을 그대로 사용 → 프로덕션과 동일). 실제 동작(다중 선택·키보드·인쇄)은 앱에서 확인하세요.

단일 출처

파트파일
스타일apps/team-manager/src/styles/main.css (/* ===== Nurse Scheduler styles ===== */ 블록)
화면apps/team-manager/src/views/tabs/schedule.html
스타일 (admin 복제 + 확장)apps/admin/src/styles/main.css (.sched-grid·.shift-* 복제 + .pref-*·.memo-corner·.shift-btn 확장)
화면 (admin 네이티브)apps/admin/src/views/scheduler/ (schedule.html·pref-input.html 등)

핵심 스펙

.sched-cell

  • min-width: 2.5rem, height: 2rem, font-size: 0.7rem(≈11.2px), font-weight: 600, flex 중앙정렬.
  • Table 1의 h-9(36px)·12px 바닥선·카드 격자 미적용 — 스케줄표는 의도적 예외.

동결 컬럼 (sticky)

  • .freeze-nurseleft: 0, 80px (간호사 이름)
  • .freeze-typeleft: 80px, 80px (근무 형태)
  • position: sticky, 흰 배경. thead의 동결 셀은 neutral-50.

근무 유형 색상 셀

  • .shift-D / .shift-E / .shift-N / .shift-OFF / .shift-AL / .shift-BV / .shift-ED / .shift-UA
  • 각 유형마다 토큰 배경 + 글자색. 셀 표시 라벨(실제 코드 기준): D(주간) · E(오후) · N(야간) · OFF(휴무) · 연차(AL) · 경조(BV) · 교육(ED) · 불가(UA).

출결 오버레이 배지 .att-badge

  • 7px 원형, 셀 우상단(top-right) 오버레이.
  • 상태: att-ok / att-late / att-early / att-absent / att-leave.

fill-handle

  • Excel식 드래그 복사 핸들 — 선택 셀 우하단 7px, blue-500.

주말 / 공휴일 컬럼

  • .col-weekendpurple-50 배경
  • .col-holidayred-50 배경

sticky 하단 행

  • 요약 / 환자수 행(tr.sticky)은 z-index 상향으로 스크롤 시 하단 고정.

드래그 모드

  • .sched-grid.is-dragging — 텍스트 선택 비활성 + cursor: crosshair.

인쇄

  • @page landscape print 전용 스타일 별도.

인터랙션 & 상태 2026-06-18

스프레드시트처럼 호버·클릭·드래그로 동작하는 표라, 어떤 동작에 어떤 반응이 일어나는지가 핵심이에요. (Table 1엔 없는 인터랙션들)

트리거대상효과출처
셀 hover.sched-grid:not(.is-dragging) .sched-cell:hover셀 안쪽 1px 테두리(inset box-shadow, --color-hr-blue-300)로 호버 힌트. 드래그 중에는 성능을 위해 비활성main.css .sched-cell:hover
셀 클릭/선택.sched-cellcursor: pointer + user-select: none — 클릭으로 셀 선택, 근무 유형 입력 진입점main.css .sched-cell
셀 더블클릭.sched-cell「근무 변경」 피커 팝오버가 셀 위치에 뜸(근무 유형 선택) — 인라인 순환이 아님. 라이브 데모도 동일admin scheduler.ts onCellDblClick
드래그 선택 완료(2칸+).sched-gridmouseup 시 마지막 셀에 근무 변경 피커가 즉시 뜸 → 고른 유형을 선택 전체에 적용. 단일 클릭(드래그 아님)은 선택만, 팝오버 없음admin onMouseUp 드래그 종료 분기
드래그(채우기).sched-grid.is-dragging그리드 전체 텍스트 선택 OFF + cursor: crosshairmain.css .sched-grid.is-dragging
fill-handle 드래그.fill-handle선택 셀 우하단 7px 핸들(blue-500)을 끌어 Excel식 복사. cursor: crosshairmain.css .fill-handle
휴가일 토글 hover.vac-date:hover테두리색 --color-hr-blue-300로 변경(transition: all .15s)main.css .vac-date:hover
휴가일 선택.vac-date-selected선택 상태 강조(별도 클래스 토글)main.css .vac-date-selected
세로/가로 스크롤.freeze-nurse·.freeze-type / tr.sticky좌측 2개 컬럼·하단 요약 행이 스크롤에도 고정main.css sticky 규칙
  • 호버 효과가 있는 것: 근무 셀(.sched-cell), 휴가일 토글(.vac-date). 호버 효과가 없는 것: 출결 배지(.att-badge, pointer-events: none — 표시 전용), 동결 컬럼 헤더.
  • 클릭/드래그가 가능한 것: 근무 셀(선택·입력), fill-handle(복사 드래그), 휴가일 토글. → 이 드래그·fill-handle·선택 동작이 Table 1과 가장 크게 다른 지점이에요.

베리에이션 2026-06-18

같은 그리드 안에서 셀·컬럼·행·배지가 상태에 따라 어떻게 나뉘는지 정리했어요.

근무 유형 셀(8종) — 각 유형마다 배경 + 글자색 토큰 한 쌍:

클래스라벨배경 / 글자 토큰
.shift-DD(주간)yellow-100 / hr-amber-800
.shift-EE(오후)hr-emerald-100 / hr-emerald-800
.shift-NN(야간)blue-100 / hr-indigo-800
.shift-OFFOFF(휴무)neutral-50 / hr-gray-400
.shift-AL연차hr-pink-100 / hr-pink-700
.shift-BV경조hr-indigo-50 / hr-violet-600
.shift-ED교육hr-aquablue-100 / hr-aquablue-700
.shift-UA불가hr-red-100 / hr-red-600

출결 오버레이 배지(5종) — 셀 우상단 7px 원형, 표시 전용:

클래스의미배경 / 글자 토큰
.att-ok정상hr-green-100 / hr-green-600
.att-late지각yellow-100 / hr-amber-600
.att-early조퇴yellow-100 / hr-amber-600
.att-absent결근hr-red-100 / hr-red-600
.att-leave휴가hr-indigo-50 / hr-violet-600

컬럼 / 행 / 기타 변형:

베리에이션클래스무엇이 달라지나
주말 컬럼.col-weekend배경 --color-purple-50
공휴일 컬럼.col-holiday배경 --color-red-50
동결 컬럼.freeze-nurse(left:0)·.freeze-type(left:80px)가로 스크롤에도 고정, 흰 배경(헤더는 neutral-50)
하단 고정 행tr.sticky요약·환자수 행을 z-index 상향으로 하단 고정
인력 부족.staffing-short글자색 --color-hr-red-600 + font-weight: 700
초안 배지.badge-draftneutral-50 / hr-gray-600 — 스케줄 상태 표시
드래그 모드.sched-grid.is-dragging선택 OFF + crosshair(위 인터랙션 참고)
인쇄@page landscape화면용과 다른 인쇄 전용 레이아웃

관리자 네이티브 스케줄러 확장 (희망근무·메모·환자수) 2026-07-07

두 스케줄러 — admin(네이티브) vs team-manager

.sched-grid/.sched-cell/.shift-*admin·team-manager 두 앱에 복제돼 있어요(대부분의 admin 화면은 team-manager iframe이지만 스케줄러는 예외 — admin 네이티브 화면). 아래 희망근무 표식·셀 메모·환자수 행admin 네이티브 스케줄러 전용 확장입니다(team-manager sched-grid엔 없음).

셀 코너 표식 3종 — 서로 다른 코너

한 근무 셀에 최대 3개의 코너 표식이 붙고, 겹치지 않도록 코너를 나눠 씁니다.

표식코너클래스조건
메모(사유)좌상단 삼각형 8px(--color-neutral-900).memo-corner희망근무 보기 + 셀 메모 있음
출결 상태우상단 원형 10px.att-badge(att-ok/late/… )출근현황 보기 + 출결 있음
희망근무 종류우하단 색 배지.pref-corner--*희망근무 보기 + 희망 지정
  • .memo-corner가 좌상단인 이유: 희망근무 보기·출근현황 보기는 독립 토글이라 함께 켤 수 있는데, 그러면 메모와 출결 배지가 우상단에서 겹쳤어요 → 메모를 좌상단으로 옮겨(2026-07-07) 세 표식이 각기 다른 코너를 차지하도록 정리. 삼각형은 pointer-events: none(표시 전용). 간호사 이름 셀(월 단위 메모)·근무 셀(날짜별 메모) 공용.

희망근무(preferred) 표식 & 팔레트

희망근무 보기(prefShow)에서 셀별 희망/제한/불가/휴가를 세 층위로 표시해요.

클래스위치·형태용도
.pref-corner--*우하단 색 배지 + 글자(D/E/N·휴·제·불·원)셀별 희망근무 종류
.pref-tint-*셀 배경 틴트(color-mix 35%)희망 종류별 옅은 배경
.pref-shift--*희망근무 입력 피커 버튼(채움 + 흰 글자)pref-input 근무 선택
  • 색을 근무표 D/E/N과 같은 공유 토큰으로 정렬(2026-07-07): D = --color-yellow-500, E = --color-hr-emerald-600, N = --color-blue-500(배지·틴트·피커 공통, 틴트는 -200 계열). 기존 emerald-500/indigo-500 임의값을 이 토큰으로 교체.
  • 피커 두 종류: 연한 셀 + 어두운 글자(.shift-*, entry-edit 「근무 변경」) vs 채운 배경 + 흰 글자(.pref-shift--*, 「희망근무 입력」). .shift-btn은 hover brightness(.95)·active brightness(.9)box-shadow는 Tailwind focus ring과 충돌해 일부러 안 씁니다.

환자수 행 (접기/펼치기 + 열 정렬)

  • 연/월 줄의 인라인 컨트롤(환자수 관리·병동 설정)과 분리해 병동별 입력을 전폭 wrap 그리드로 배치. 셰브론(patientGridOpen)으로 요약(오늘 환자수/합계)만 남기거나 펼칩니다.
  • 병동 이름 슬롯을 고정폭(w-[8rem] truncate)으로 둬서, flex-wrap으로 줄이 바뀌어도 입력칸이 세로 열로 정렬돼요(이름 길이가 달라도 어긋나지 않음). 입력은 patient-count-input ds-input--32 w-12 text-center.

sticky 범례 밴드

  • 희망근무 범례가 sticky top-0로 표 상단에 붙을 때 핀 상태에서만 배경 밴드(bg-white + 하단 hairline)를 얹어요 — 0-높이 sentinel + IntersectionObserverprefLegendStuck을 토글. 스크롤 전(범례가 흐름 안)엔 투명, 핀됐을 때만 흰 배경으로 아래 표 헤더와 겹쳐 보이지 않게 합니다.

적용 규칙

  • "근무표 / 스케줄표 / 간호사 스케줄러" 작업 = Table 2. 셀 크기·격자·폰트를 일반 표(Table 1)에 맞추려 하지 마세요.
  • 그 외 모든 리스트/표 = Table 1Data table.

콘텐츠·라이팅 (UI/UX 정책 연계) 2026-06-16

셀 크기·격자는 Table 1을 따르지 않지만, 라벨·용어·숫자 표기 라이팅은 일반 표와 동일하게 서비스 공통 UI/UX 정책을 따릅니다.

  • 용어 통일: 근무 형태·상태 라벨은 정책 §2 용어표 기준. (예: 정해지지 않은 값은 미지정 — 단 스케줄러의 불가(UA)는 "근무 불가"라는 별개 상태이므로 그대로 둡니다.)
  • 숫자 표기: 환자수·요약 행의 숫자는 천 단위 쉼표 (정책 §5).

변경 이력

날짜내용
2026-07-07관리자 네이티브 스케줄러 확장 섹션 신설 — 셀 코너 표식 3종(좌상=메모 .memo-corner / 우상=출결 .att-badge / 우하=희망근무 .pref-corner)을 코너 분리로 정리(메모를 우상단→좌상단으로 이동해 출결 배지와 겹침 해소), 희망근무 팔레트(.pref-corner--*·.pref-tint-*·.pref-shift--*)를 근무표 D/E/N 공유 토큰(yellow-500·hr-emerald-600·blue-500)으로 정렬, 환자수 행(고정폭 라벨 슬롯 열 정렬 + 접기/펼치기)·sticky 범례 밴드 문서화. admin이 .sched-grid 복제본을 갖는다는 점을 단일 출처에 명시 (design/adjust-table)
2026-06-19라이브 미리보기를 페이지 최상단으로 이동(소개 tip 바로 아래, 단일 출처 위) (사용자 요청)
2026-06-18라이브 미리보기(<DemoScheduleTable> — shift 8색·출결 배지 5종·주말/공휴일·hover·선택+fill-handle·동결 컬럼·드래그 모드) + 인터랙션 & 상태 + 베리에이션 섹션 추가
2026-06-16셀 라벨 오기 수정(출장→경조 BV, 미배정→불가 UA, 실제 코드 기준) + UI/UX 정책 연계 섹션 추가
2026-06-15근무 스케줄표(Table 2 · .sched-grid) 패턴 페이지 신규 작성