- erp-api-list.md: Phase 5 섹션 추가 (12개 API) - erp-api-detail.md: Phase 5 상세 스펙 추가 - 13. 사용자 초대 (5개): 목록, 발송, 수락, 취소, 재발송 - 14. 알림 설정 (3개): 조회, 수정, 일괄수정 - 15. 계정 관리 (4개): 탈퇴, 사용중지, 약관조회, 약관수정
382 lines
15 KiB
Markdown
382 lines
15 KiB
Markdown
# 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 클래스
|
||
```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` | 슬랫 공통 |
|
||
|
||
### 주요 이벤트 처리
|
||
```javascript
|
||
// 수량/단가 변경 시 금액 재계산
|
||
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. 사용자 권한
|
||
|
||
### 접근 레벨
|
||
```php
|
||
// 레벨 5 이하만 접근 가능
|
||
if(!isset($_SESSION["level"]) || $_SESSION["level"]>5) {
|
||
header("Location:" . $WebSite . "login/login_form.php");
|
||
exit;
|
||
}
|
||
```
|
||
|
||
### 작성 권한자
|
||
```php
|
||
$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` - 요청 파라미터 처리 |