✏️ 새 개선 항목 등록하기
admin_source_improvements_form.php 페이지에서 새 개선 항목을 등록합니다. 총 23개 컬럼 중 17개 입력 필드가 폼에 노출됩니다.
페이지 모드:
id 파라미터 유무로 결정 — 없으면 create (신규등록), 있으면 edit (수정)폼 섹션 구성 (5단계)
📌 1. 기본 정보
- 작업 날짜 (date, 필수)
- 프로젝트 (select, 필수)
- 카테고리 (select, 필수)
- 상태 (select, 필수)
- 제목 (text, 필수, 200자)
- 상세 설명 (textarea)
🔧 2. 기술 상세
- 수정 파일 수 (number)
- 추가 라인 수 (number)
- 삭제 라인 수 (number)
🌍 3. 배포 환경
- DEV / TEST / PROD 체크박스 (복수 선택, 쉼표 구분)
📦 4. 배포 정보
- 배포 일시 (datetime-local)
- 배포자 (text)
⚡ 5. 영향도
- 영향도 (select, 필수: 낮음/중간/높음/긴급)
- 테스트 결과 (select: PASS/FAIL/SKIP)
- 추가 메모 (textarea)
필수 항목 vs 선택 항목
| 필드 | 구분 | 타입 |
|---|---|---|
date | 필수 | date |
project | 필수 | select (5개) |
category | 필수 | select (6개) |
status | 필수 | select (5개) |
title | 필수 | text (200자) |
impact_level | 필수 | select (4개) |
description | 선택 | textarea |
files_changed | 선택 | number |
lines_added | 선택 | number |
lines_deleted | 선택 | number |
environments | 선택 | checkbox group → CSV |
deployed_date | 선택 | datetime-local |
deployed_by | 선택 | text |
test_result | 선택 | select (3개) |
notes | 선택 | textarea |
AJAX 저장 플로우
submit event → e.preventDefault() → 유효성 검증(6개 필수 체크)
→ FormData 수집 → fetch POST → loading spinner 표시
→ /admin/ajax/source_improvements_save.php 호출
→ JSON 응답 {success: true/false, message: "..."}
→ 성공: alert(message) → admin_source_improvements.php 리다이렉트
→ 실패: alert('오류: ' + data.message)
클라이언트 유효성 검증 로직
const date = document.getElementById('date').value;
const project = document.getElementById('project').value;
const category = document.getElementById('category').value;
const status = document.getElementById('status').value;
const title = document.getElementById('title').value;
const impactLevel = document.getElementById('impact_level').value;
if (!date) { alert('작업 날짜를 선택하세요.'); return; }
if (!project) { alert('프로젝트를 선택하세요.'); return; }
if (!category) { alert('카테고리를 선택하세요.'); return; }
if (!status) { alert('상태를 선택하세요.'); return; }
if (!title) { alert('제목을 입력하세요.'); return; }
if (!impactLevel) { alert('영향도를 선택하세요.'); return; }
서버 저장 API 상세
저장 엔드포인트: /admin/ajax/source_improvements_save.php
수신 데이터: FormData (multipart/form-data)
응답 형식: JSON {success: bool, message: string}
성공 시: window.location.href = 'admin_source_improvements.php' 로 리다이렉트
💡 팁: 등록 즉시 목록 페이지로 돌아가므로, 방금 등록한 항목이 최상단에 표시됩니다. 날짜가 오늘이면 「오늘 개선」 KPI 카드에 집계됩니다.