- erp-api-list.md: Phase 5 섹션 추가 (12개 API) - erp-api-detail.md: Phase 5 상세 스펙 추가 - 13. 사용자 초대 (5개): 목록, 발송, 수락, 취소, 재발송 - 14. 알림 설정 (3개): 조회, 수정, 일괄수정 - 15. 계정 관리 (4개): 탈퇴, 사용중지, 약관조회, 약관수정
15 KiB
15 KiB
UI/화면 분석
분석 대상: 5130 레거시 견적 시스템 화면 분석 일자: 2025-12-19
화면 목록
메인 화면
| 파일 | 화면명 | 설명 |
|---|---|---|
list.php |
견적 목록 | 견적서 리스트, 검색, 필터링 |
write_form.php |
견적 작성 | 견적서 작성/수정 폼 (103KB, 핵심 파일) |
viewEstimate.php |
견적서 보기 | 견적서 조회/출력 |
statistics.php |
견적 통계 | 통계 대시보드 |
견적 유형별 화면
| 파일 | 화면명 | 설명 |
|---|---|---|
estimate.php |
스크린 견적 | 스크린 견적서 메인 |
estimateSlat.php |
슬랫 견적 | 슬랫(철재) 견적서 메인 |
estimateUnit.php |
단가 견적 | 단가 기반 견적서 |
screen_view_original.php |
스크린 상세 | 스크린 견적 상세 뷰 |
slat_view_original.php |
슬랫 상세 | 슬랫 견적 상세 뷰 |
상세/수정 화면
| 파일 | 화면명 | 설명 |
|---|---|---|
edit.php |
견적 수정 | 스크린 견적 수정 |
edit_slat.php |
슬랫 수정 | 슬랫 견적 수정 |
viewEstimateDetail.php |
상세 보기 | 견적 상세 정보 |
EsDetail_screen.php |
스크린 상세 | 스크린 항목 상세 |
EsDetail_slat.php |
슬랫 상세 | 슬랫 항목 상세 |
compare.php |
견적 비교 | 견적 버전 비교 |
출력/다운로드
| 파일 | 화면명 | 설명 |
|---|---|---|
print_list.php |
목록 인쇄 | 견적 목록 인쇄용 |
downloadExcel.php |
엑셀 다운로드 | 견적서 엑셀 내보내기 |
saveExcel.php |
엑셀 저장 | 엑셀 파일 저장 |
1. 견적 목록 (list.php)
화면 구조
┌─────────────────────────────────────────────────────────────┐
│ 견적 List [새로고침] │
├─────────────────────────────────────────────────────────────┤
│ ▷ 123건 접수일 [2025-02-19] ~ [2025-12-19] │
│ [전체] [스크린] [철재] 제품모델▼ 검색[______] [검색] │
│ [신규] │
├─────────────────────────────────────────────────────────────┤
│ 번호│접수일 │견적번호 │구분 │제품│수량│금액 │발주처...│
│─────│────────│────────────│──────│────│────│──────│─────────│
│ 123 │25-12-19│KD-PR-251219│스크린│KSS01│ 5 │5,000K│(주)ABC │
│ 122 │25-12-18│KD-PR-251218│철재 │KFS01│ 3 │3,200K│(주)DEF │
│ ... │ │ │ │ │ │ │ │
└─────────────────────────────────────────────────────────────┘
필터/검색 조건
| 항목 | 타입 | 설명 |
|---|---|---|
fromdate |
date | 시작일 (기본: -10개월) |
todate |
date | 종료일 (기본: +1개월) |
major_category |
radio | 전체/스크린/철재 |
model_name |
select | 제품 모델 선택 |
search |
text | 전체 컬럼 검색 |
테이블 컬럼
| 컬럼 | 폭 | 설명 |
|---|---|---|
| 번호 | 30px | 일련번호 (역순) |
| 접수일 | 100px | indate |
| 견적번호 | 100px | pjnum |
| 구분 | 80px | major_category (스크린/철재) |
| 제품코드 | 80px | model_name |
| 수량 | 80px | estimateSurang |
| 금액 | 80px | estimateTotal |
| 발주처 | 150px | secondord |
| 담당자 | 80px | secondordman |
| 연락처 | 120px | secondordmantel |
| 현장명 | 200px | outworkplace |
| 작성자 | 80px | orderman |
| 비고 | 300px | comment |
기능 버튼
- 새로고침:
location.reload() - 검색: 필터 조건으로 목록 갱신
- 신규:
write_form.php이동
2. 견적 작성 폼 (write_form.php)
화면 모드
| 모드 | 설명 |
|---|---|
신규 (mode='') |
새 견적 작성 |
수정 (mode=modify) |
기존 견적 수정 |
복사 (mode=copy) |
기존 견적 복사하여 신규 생성 |
발주 (header=header) |
수주에서 발주 산출 |
스크린 수정 (itemoption=screen) |
스크린 발주서 수정 |
슬랫 수정 (itemoption=slat) |
철재스라트 발주서 수정 |
화면 구조 (추정)
┌─────────────────────────────────────────────────────────────┐
│ 견적 산출 │
├─────────────────────────────────────────────────────────────┤
│ ┌──────────── 기본 정보 ────────────┐ │
│ │ 접수일: [2025-12-19] │ │
│ │ 견적번호: KD-PR-251219-01 │ │
│ │ 담당자: 홍길동 │ │
│ │ 현장명: (주)ABC 빌딩 │ │
│ └───────────────────────────────────┘ │
│ │
│ ┌──────────── 발주처 정보 ──────────┐ │
│ │ 발주처: ____________ │ │
│ │ 담당자: ____________ 연락처: ____│ │
│ └───────────────────────────────────┘ │
│ │
│ ┌──────────── 제품 정보 ────────────┐ │
│ │ 대분류: (●)스크린 (○)철재 │ │
│ │ 모델명: [KSS01 ▼] │ │
│ │ 제작폭: [160] 제작높이: [350] │ │
│ │ 마구리윙: [50] │ │
│ └───────────────────────────────────┘ │
│ │
│ ┌──────────── 옵션 체크 ────────────┐ │
│ │ [✓] 절곡 [✓] 모터 [✓] 보증 │ │
│ │ [✓] 슬랫 [✓] 부자재 │ │
│ └───────────────────────────────────┘ │
│ │
│ ┌──────────── 견적 항목 ────────────┐ │
│ │ 검사비: [50,000] │ │
│ │ │ │
│ │ [스크린 견적 테이블] │ │
│ │ [슬랫 견적 테이블] │ │
│ └───────────────────────────────────┘ │
│ │
│ ┌──────────── 금액 합계 ────────────┐ │
│ │ 수량: 5 합계: 5,000,000 │ │
│ │ 할인율: 10% 할인액: 500,000 │ │
│ │ 최종금액: 4,500,000 │ │
│ └───────────────────────────────────┘ │
│ │
│ [저장] [취소] [삭제] │
└─────────────────────────────────────────────────────────────┘
주요 입력 필드
기본 정보
| 필드 | 변수명 | 타입 | 기본값 |
|---|---|---|---|
| 접수일 | indate |
date | 오늘 |
| 견적번호 | pjnum |
text | 자동생성 |
| 담당자 | orderman |
text | 로그인 사용자 |
| 현장명 | outworkplace |
text | - |
발주처 정보
| 필드 | 변수명 | 타입 |
|---|---|---|
| 발주처 | secondord |
text |
| 담당자 | secondordman |
text |
| 연락처 | secondordmantel |
text |
제품 정보
| 필드 | 변수명 | 타입 | 기본값 |
|---|---|---|---|
| 대분류 | major_category |
radio | 스크린 |
| 모델명 | model_name |
select | - |
| 제작폭 | makeWidth |
number | 160 (스크린), 110 (슬랫) |
| 제작높이 | makeHeight |
number | 350 |
| 마구리윙 | maguriWing |
number | 50 |
옵션 체크박스
| 필드 | 변수명 | 영향 |
|---|---|---|
| 절곡 | steel |
케이스, 레일, 연기차단재, 하장바, L바, 보강평철 |
| 모터 | motor |
모터 가격 포함 |
| 보증 | warranty |
보증기간 표시 |
| 슬랫 | slatcheck |
주자재(슬랫), 조인트바 |
| 부자재 | partscheck |
샤프트, 각파이프, 앵글 |
금액 정보
| 필드 | 변수명 | 설명 |
|---|---|---|
| 검사비 | inspectionFee |
인정검사비 (기본: 50,000) |
| 수량 | estimateSurang |
총 수량 |
| 합계 | estimateTotal |
견적 총액 |
| 최초합계 | EstimateFirstSum |
최초 견적 합계 |
| 수정합계 | EstimateUpdatetSum |
수정 견적 합계 |
| 차액 | EstimateDiffer |
최초-수정 차액 |
| 할인율 | EstimateDiscountRate |
% |
| 할인액 | EstimateDiscount |
원 |
| 최종금액 | EstimateFinalSum |
최종 결정 금액 |
CSS 클래스
/* 수동 편집된 셀 강조 */
.manually-edited {
background-color: #f8d7da !important;
}
/* readonly 체크박스 */
.readonly-checkbox,
.readonly-radio {
pointer-events: none;
opacity: 1;
}
/* 커스텀 너비 */
.w-40, .w-50, .w-60, .w-85 { ... }
3. 견적 항목 테이블
스크린 견적 테이블 (estimateList)
| 열 | 필드명 | 설명 |
|---|---|---|
| 항목명 | item_name |
품목 이름 |
| 규격 | specification |
규격/사양 |
| 단위 | unit |
EA, m², m, kg |
| 수량 | quantity |
수량 |
| 단가 | unit_price |
단가 |
| 금액 | amount |
quantity × unit_price |
| 비고 | remark |
메모 |
슬랫 견적 테이블 (estimateSlatList)
스크린과 동일 구조
자동계산 테이블 (estimateList_auto, estimateSlatList_auto)
| 열 | 필드명 | 설명 |
|---|---|---|
| 항목코드 | item_code |
자동계산 항목 코드 |
| 항목명 | item_name |
품목 이름 |
| 계산타입 | calc_type |
per_meter, per_area 등 |
| 기준값 | base_value |
계산 기준 수치 |
| 단가 | unit_price |
단가 |
| 금액 | amount |
계산 결과 |
4. API 엔드포인트 (AJAX 호출)
데이터 조회
| 엔드포인트 | 용도 |
|---|---|
fetch_unitprice.php |
단가 조회 |
fetch_date.php |
날짜 정보 |
fetch_receiver.php |
수신자 정보 |
fetch_outworkplace.php |
현장 목록 |
fetch_length_data.php |
길이 데이터 |
fetch_price.php |
가격 정보 |
금액 계산
| 엔드포인트 | 용도 |
|---|---|
get_estimate_amount.php |
견적 금액 라우터 |
get_screen_amount.php |
스크린 금액 계산 |
get_slat_amount.php |
슬랫 금액 계산 |
recalc_row.php |
행 재계산 |
데이터 저장
| 엔드포인트 | 용도 |
|---|---|
insert.php |
견적 저장 (신규) |
update.php |
견적 수정 |
delete.php |
견적 삭제 |
insert_estimate.php |
견적 등록 |
insert_detail.php |
상세 저장 |
기타
| 엔드포인트 | 용도 |
|---|---|
generate_serial_pjnum.php |
견적번호 생성 |
get_initial_pjnum.php |
초기 견적번호 |
insert_logmenu.php |
로그 기록 |
5. JavaScript 처리
공통 스크립트 (common/)
| 파일 | 용도 |
|---|---|
calculation.js |
행 계산 로직 |
lastJS.php |
페이지 공통 JS |
common_screen.php |
스크린 공통 |
common_slat.php |
슬랫 공통 |
주요 이벤트 처리
// 수량/단가 변경 시 금액 재계산
function calculateRowTotal(row) { ... }
// 옵션 체크박스 변경 시 항목 재계산
$('input[name="steel"]').change(function() { ... });
// 모델 변경 시 단가 조회
$('#model_name').change(function() {
// AJAX: fetch_unitprice.php
});
// 크기 변경 시 전체 재계산
$('#makeWidth, #makeHeight').change(function() {
// AJAX: get_estimate_amount.php
});
6. 사용자 권한
접근 레벨
// 레벨 5 이하만 접근 가능
if(!isset($_SESSION["level"]) || $_SESSION["level"]>5) {
header("Location:" . $WebSite . "login/login_form.php");
exit;
}
작성 권한자
$authorities = [
"개발자", "전진", "노완호", "이세희",
"함신옥", "손금주", "이은진", "이경호"
];
SAM 이관 시 UI 고려사항
1. Livewire + Blade 전환
| 5130 | SAM |
|---|---|
| jQuery AJAX | Livewire wire:click |
| PHP 직접 렌더링 | Blade 컴포넌트 |
| 전역 변수 | Livewire 프로퍼티 |
| form submit | wire:submit |
2. 컴포넌트 분리
resources/views/livewire/quotation/
├── quote-list.blade.php # 목록
├── quote-form.blade.php # 작성/수정
├── quote-detail.blade.php # 상세
├── components/
│ ├── quote-table.blade.php # 견적 테이블
│ ├── option-checkboxes.blade.php # 옵션 체크박스
│ └── amount-summary.blade.php # 금액 요약
3. 반응형 개선
- 현재: 고정 너비 테이블
- 개선: Tailwind 반응형 그리드
4. UX 개선점
- 실시간 금액 계산 (debounce 적용)
- 자동저장 (draft 기능)
- 견적 버전 비교 UI
- 모바일 최적화
참조 파일
list.php:111-192- 목록 테이블 구조write_form.php:1-300- 폼 초기화 로직common/calculation.js- 행 계산 로직_row.php- 행 렌더링 공통_request.php- 요청 파라미터 처리