feat : Front Page [Ver 0.1] - 견적 기능 주성 및 수주 리스트 추가
This commit is contained in:
@@ -65,7 +65,7 @@
|
||||
.q-badge{display:inline-block; padding:.25rem .45rem; border-radius:.5rem; font-weight:600;}
|
||||
.q-접수{background:#e8f0ff; color:#204a9a;}
|
||||
.q-견적{background:#fff1bf; color:#6a5300;}
|
||||
.q-발주{background:#d7f5e6; color:#0b6b3e;}
|
||||
.q-산출{background:#d7f5e6; color:#0b6b3e;}
|
||||
.q-생산{background:#e6f0ff; color:#164f96;}
|
||||
.q-출고{background:#e9ecef; color:#495057;}
|
||||
/* 현장명 말줄임 */
|
||||
@@ -76,21 +76,21 @@
|
||||
$(function(){
|
||||
// ---- 샘플 데이터 ----
|
||||
const rows = [
|
||||
{no:1, recv:'2025-07-15', status:'접수', lot:'KD-PR-250715-11', type:'철재', buyer:'SK텔레콤', model:'KWE01', site:'판교센터', qty:3, ship:'2025-07-25', shipstat:'택배'},
|
||||
{no:1, recv:'2025-07-15', status:'접수', lot:'KD-PR-250715-11', type:'철재', buyer:'SK텔레콤', model:'KWE01', site:'판교센터', qty:3, ship:'2025-07-25', shipstat:'-'},
|
||||
{no:2, recv:'2025-07-14', status:'견적', lot:'KD-PR-250714-12', type:'스크린', buyer:'현대건설', model:'KQTS01', site:'서울현장', qty:2, ship:'2025-07-28', shipstat:'화물차'},
|
||||
{no:3, recv:'2025-07-13', status:'발주', lot:'KD-PR-250713-13', type:'철재', buyer:'KT', model:'KTE01', site:'강남센터', qty:5, ship:'2025-07-30', shipstat:'트럭'},
|
||||
{no:4, recv:'2025-07-12', status:'생산', lot:'KD-PR-250712-14', type:'스크린', buyer:'LG전자', model:'KDSS01', site:'평택공장', qty:1, ship:'2025-08-01', shipstat:'택배'},
|
||||
{no:5, recv:'2025-07-11', status:'출고', lot:'KD-PR-250711-15', type:'철재', buyer:'삼성SDI', model:'KSS01', site:'천안사업장', qty:5, ship:'2025-08-01', shipstat:'화물차'},
|
||||
{no:6, recv:'2025-07-10', status:'출고', lot:'KD-PR-250710-01', type:'스크린', buyer:'롯데쇼핑', model:'KSS01', site:'서울물류센터', qty:3, ship:'2025-08-02', shipstat:'택배'},
|
||||
{no:7, recv:'2025-07-09', status:'생산', lot:'KD-PR-250709-02', type:'스크린', buyer:'두산중공업',model:'KSS02', site:'울산공장', qty:1, ship:'2025-08-05', shipstat:'트럭'},
|
||||
{no:8, recv:'2025-07-08', status:'발주', lot:'KD-PR-250708-03', type:'철재', buyer:'CJ대한통운',model:'KSS02', site:'인천사업장', qty:3, ship:'2025-08-02', shipstat:'화물차'},
|
||||
{no:3, recv:'2025-07-13', status:'산출', lot:'KD-PR-250713-13', type:'철재', buyer:'KT', model:'KTE01', site:'강남센터', qty:5, ship:'2025-07-30', shipstat:'트럭'},
|
||||
{no:4, recv:'2025-07-12', status:'산출', lot:'KD-PR-250712-14', type:'스크린', buyer:'LG전자', model:'KDSS01', site:'평택공장', qty:1, ship:'2025-08-01', shipstat:'택배'},
|
||||
{no:5, recv:'2025-07-11', status:'견적', lot:'KD-PR-250711-15', type:'철재', buyer:'삼성SDI', model:'KSS01', site:'천안사업장', qty:5, ship:'2025-08-01', shipstat:'화물차'},
|
||||
{no:6, recv:'2025-07-10', status:'견적', lot:'KD-PR-250710-01', type:'스크린', buyer:'롯데쇼핑', model:'KSS01', site:'서울물류센터', qty:3, ship:'2025-08-02', shipstat:'택배'},
|
||||
{no:7, recv:'2025-07-09', status:'산출', lot:'KD-PR-250709-02', type:'스크린', buyer:'두산중공업',model:'KSS02', site:'울산공장', qty:1, ship:'2025-08-05', shipstat:'트럭'},
|
||||
{no:8, recv:'2025-07-08', status:'산출', lot:'KD-PR-250708-03', type:'철재', buyer:'CJ대한통운',model:'KSS02', site:'인천사업장', qty:3, ship:'2025-08-02', shipstat:'화물차'},
|
||||
{no:9, recv:'2025-07-07', status:'견적', lot:'KD-PR-250707-04', type:'스크린', buyer:'포스코', model:'KSS01', site:'포항공장', qty:2, ship:'2025-07-28', shipstat:'택배'},
|
||||
{no:10, recv:'2025-07-06', status:'접수', lot:'KD-PR-250706-05', type:'철재', buyer:'현대자동차',model:'KSS02', site:'울산공장', qty:8, ship:'2025-08-03', shipstat:'화물차'},
|
||||
{no:6, recv:'2025-07-10', status:'출고', lot:'KD-PR-250710-01', type:'스크린', buyer:'롯데쇼핑', model:'KSS01', site:'서울물류센터', qty:3, ship:'2025-08-02', shipstat:'택배'},
|
||||
{no:7, recv:'2025-07-09', status:'생산', lot:'KD-PR-250709-02', type:'스크린', buyer:'두산중공업',model:'KSS02', site:'울산공장', qty:1, ship:'2025-08-05', shipstat:'트럭'},
|
||||
{no:8, recv:'2025-07-08', status:'발주', lot:'KD-PR-250708-03', type:'철재', buyer:'CJ대한통운',model:'KSS02', site:'인천사업장', qty:3, ship:'2025-08-02', shipstat:'화물차'},
|
||||
{no:6, recv:'2025-07-10', status:'견적', lot:'KD-PR-250710-01', type:'스크린', buyer:'롯데쇼핑', model:'KSS01', site:'서울물류센터', qty:3, ship:'2025-08-02', shipstat:'택배'},
|
||||
{no:7, recv:'2025-07-09', status:'견적', lot:'KD-PR-250709-02', type:'스크린', buyer:'두산중공업',model:'KSS02', site:'울산공장', qty:1, ship:'2025-08-05', shipstat:'트럭'},
|
||||
{no:8, recv:'2025-07-08', status:'산출', lot:'KD-PR-250708-03', type:'철재', buyer:'CJ대한통운',model:'KSS02', site:'인천사업장', qty:3, ship:'2025-08-02', shipstat:'화물차'},
|
||||
{no:9, recv:'2025-07-07', status:'견적', lot:'KD-PR-250707-04', type:'스크린', buyer:'포스코', model:'KSS01', site:'포항공장', qty:2, ship:'2025-07-28', shipstat:'택배'},
|
||||
{no:10, recv:'2025-07-06', status:'접수', lot:'KD-PR-250706-05', type:'철재', buyer:'현대자동차',model:'KSS02', site:'울산공장', qty:8, ship:'2025-08-03', shipstat:'화물차'},
|
||||
{no:10, recv:'2025-07-06', status:'접수', lot:'KD-PR-250706-05', type:'철재', buyer:'현대자동차',model:'KSS02', site:'울산공장', qty:8, ship:'2025-08-03', shipstat:'-'},
|
||||
];
|
||||
|
||||
// ---- 상태 배지 ----
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<!-- SAM RULES: include=../inc/header.php; base=/tenant; width=1280; js=jQuery+BS5 -->
|
||||
<?php
|
||||
$CURRENT_SECTION='estimate';
|
||||
$CURRENT_SECTION='order';
|
||||
include '../inc/header.php';
|
||||
?>
|
||||
<div class="container" style="max-width:1280px; margin-top:18px;">
|
||||
@@ -10,41 +10,41 @@
|
||||
<div class="card-header"><strong>기본정보 입력</strong></div>
|
||||
<div class="card-body">
|
||||
<form id="baseForm" class="row g-2 align-items-center">
|
||||
<div class="col-sm-3">
|
||||
<div class="col-sm-2">
|
||||
<label class="form-label mb-1">접수일</label>
|
||||
<input type="date" class="form-control" id="recvDate">
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<div class="col-sm-1">
|
||||
<label class="form-label mb-1">작성자</label>
|
||||
<input type="text" class="form-control" id="writer" placeholder="작성자">
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<div class="col-sm-2">
|
||||
<label class="form-label mb-1">발주처</label>
|
||||
<div class="input-group">
|
||||
<input type="text" class="form-control" id="customer" placeholder="검색">
|
||||
<button class="btn btn-outline-secondary" type="button" id="btnFindCust">🔍</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<div class="col-sm-1">
|
||||
<label class="form-label mb-1">업체담당자</label>
|
||||
<input type="text" class="form-control" id="custManager" placeholder="담당자명">
|
||||
</div>
|
||||
|
||||
<div class="col-sm-3">
|
||||
<div class="col-sm-2">
|
||||
<label class="form-label mb-1">연락처</label>
|
||||
<input type="text" class="form-control" id="phone" placeholder="연락처">
|
||||
</div>
|
||||
<div class="col-sm-9">
|
||||
<div class="col-sm-4">
|
||||
<label class="form-label mb-1">현장</label>
|
||||
<input type="text" class="form-control" id="site" placeholder="현장명">
|
||||
</div>
|
||||
|
||||
<div class="col-12">
|
||||
<div class="col-6">
|
||||
<label class="form-label mb-1">메모</label>
|
||||
<input type="text" class="form-control" id="memo" placeholder="메모입력">
|
||||
</div>
|
||||
|
||||
<div class="col-12">
|
||||
<div class="col-6">
|
||||
<label class="form-label mb-1">첨부파일 <span class="text-muted">(파일당 20MB, 총 100MB, 여러개 가능)</span></label>
|
||||
<input type="file" class="form-control" id="files" multiple>
|
||||
</div>
|
||||
@@ -71,24 +71,24 @@
|
||||
<!-- 기본 설정 바 (항상 위로 붙음 / 세트 생성 시 복사 원본) -->
|
||||
<div class="sam-sticky p-3 border-bottom bg-white">
|
||||
<div class="row g-2">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-1">
|
||||
<label class="form-label mb-1">층수</label>
|
||||
<select id="g_floor" class="form-select">
|
||||
<option>1</option><option>2</option><option>3</option><option>4</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="col-md-1">
|
||||
<label class="form-label mb-1">부호(호수)</label>
|
||||
<input id="g_room" class="form-control" placeholder="예: 1205">
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="col-md-1">
|
||||
<label class="form-label mb-1">본체종류</label>
|
||||
<select id="g_body" class="form-select">
|
||||
<option value="일반">일반</option>
|
||||
<option value="일반">실리카</option>
|
||||
<option value="내화">내화</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="col-md-1">
|
||||
<label class="form-label mb-1">마감유형</label>
|
||||
<select id="g_finish" class="form-select">
|
||||
<option value="EGI">EGI</option>
|
||||
@@ -96,7 +96,7 @@
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-2">
|
||||
<label class="form-label mb-1">오픈사이즈</label>
|
||||
<div class="input-group">
|
||||
<input id="g_open_w" class="form-control" placeholder="가로(mm)" inputmode="numeric">
|
||||
@@ -104,7 +104,7 @@
|
||||
<input id="g_open_h" class="form-control" placeholder="세로(mm)" inputmode="numeric">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-2">
|
||||
<label class="form-label mb-1">제작사이즈</label>
|
||||
<div class="input-group">
|
||||
<input id="g_make_w" class="form-control" placeholder="가로(mm)" inputmode="numeric">
|
||||
@@ -112,7 +112,7 @@
|
||||
<input id="g_make_h" class="form-control" placeholder="세로(mm)" inputmode="numeric">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="col-md-3">
|
||||
<label class="form-label mb-1">제작치수</label>
|
||||
<div class="row g-2">
|
||||
<div class="col"><input id="g_mk_w" class="form-control" placeholder="가로" inputmode="numeric"></div>
|
||||
@@ -206,24 +206,24 @@ function setCardTpl(idx, presetLabel, base){
|
||||
|
||||
<!-- 세트별 설정 (기본설정 복사본) -->
|
||||
<div class="row g-2 mb-2">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-1">
|
||||
<label class="form-label mb-1">층수</label>
|
||||
<select class="form-select s_floor">
|
||||
${[1,2,3,4].map(n=>`<option ${v.floor==n?'selected':''}>${n}</option>`).join('')}
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="col-md-1">
|
||||
<label class="form-label mb-1">부호(호수)</label>
|
||||
<input class="form-control s_room" placeholder="예: 1205" value="${v.room||''}">
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="col-md-1">
|
||||
<label class="form-label mb-1">본체종류</label>
|
||||
<select class="form-select s_body">
|
||||
<option ${v.body==='일반'?'selected':''}>일반</option>
|
||||
<option ${v.body==='내화'?'selected':''}>내화</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="col-md-1">
|
||||
<label class="form-label mb-1">마감유형</label>
|
||||
<select class="form-select s_finish">
|
||||
<option ${v.finish==='EGI'?'selected':''} value="EGI">EGI</option>
|
||||
@@ -231,7 +231,7 @@ function setCardTpl(idx, presetLabel, base){
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-2">
|
||||
<label class="form-label mb-1">오픈사이즈</label>
|
||||
<div class="input-group">
|
||||
<input class="form-control s_open_w" placeholder="가로(mm)" value="${v.open_w||''}">
|
||||
@@ -239,7 +239,7 @@ function setCardTpl(idx, presetLabel, base){
|
||||
<input class="form-control s_open_h" placeholder="세로(mm)" value="${v.open_h||''}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-2">
|
||||
<label class="form-label mb-1">제작사이즈</label>
|
||||
<div class="input-group">
|
||||
<input class="form-control s_make_w" placeholder="가로(mm)" value="${v.make_w||''}">
|
||||
@@ -247,7 +247,7 @@ function setCardTpl(idx, presetLabel, base){
|
||||
<input class="form-control s_make_h" placeholder="세로(mm)" value="${v.make_h||''}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="col-md-3">
|
||||
<label class="form-label mb-1">제작치수</label>
|
||||
<div class="row g-2">
|
||||
<div class="col"><input class="form-control s_mk_w" placeholder="가로" value="${v.mk_w||''}"></div>
|
||||
|
||||
@@ -2,7 +2,173 @@
|
||||
$CURRENT_SECTION='order';
|
||||
include '../inc/header.php';
|
||||
?>
|
||||
<div class="container" style="max-width:1280px; margin-top:18px;">
|
||||
|
||||
화면 준비중입니다.
|
||||
<!-- 상단 툴바 -->
|
||||
<div class="sam-toolbar mb-2">
|
||||
<div class="sam-title">수주 리스트</div>
|
||||
<div class="sam-actions">
|
||||
<select class="form-select form-select-sm" id="selStatus">
|
||||
<option value="">상태(전체)</option>
|
||||
<option>접수</option><option>견적</option><option>발주</option>
|
||||
<option>생산</option><option>출고</option>
|
||||
</select>
|
||||
<select class="form-select form-select-sm" id="selType">
|
||||
<option value="">구분(전체)</option>
|
||||
<option>스크린</option><option>철재</option>
|
||||
</select>
|
||||
<input type="date" class="form-control form-control-sm" id="fromDate" />
|
||||
<span class="text-muted">~</span>
|
||||
<input type="date" class="form-control form-control-sm" id="toDate" />
|
||||
<input type="text" class="form-control form-control-sm" id="keyword" placeholder="발주처/현장/모델 등" />
|
||||
<button class="btn btn-sm btn-outline-secondary" id="btnSearch">검색</button>
|
||||
<button class="btn btn-sm btn-primary" id="btnNew">+ 신규 생산</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body p-2">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-hover table-sam m-0" id="estTable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width:60px;">NO</th>
|
||||
<th style="width:110px;">접수일</th>
|
||||
<th style="width:80px;">상태</th>
|
||||
<th style="width:160px;">생산로트</th>
|
||||
<th style="width:80px;">구분</th>
|
||||
<th style="width:140px;">발주처</th>
|
||||
<th style="width:110px;">제품모델명</th>
|
||||
<th>현장명</th>
|
||||
<th style="width:80px;">수량</th>
|
||||
<th style="width:110px;">출고일</th>
|
||||
<th style="width:90px;">운송현황</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="estTbody"><!-- JS 렌더 --></tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<!-- 페이지네이션 -->
|
||||
<div class="d-flex justify-content-between align-items-center mt-2">
|
||||
<div class="text-muted small" id="resultInfo"></div>
|
||||
<nav aria-label="pagination">
|
||||
<ul class="pagination pagination-sm mb-0" id="pager"><!-- JS --></ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
/* 상태 배지 */
|
||||
.q-badge{display:inline-block; padding:.25rem .45rem; border-radius:.5rem; font-weight:600;}
|
||||
.q-접수{background:#e8f0ff; color:#204a9a;}
|
||||
.q-견적{background:#fff1bf; color:#6a5300;}
|
||||
.q-대기{background:#d7f5e6; color:#0b6b3e;}
|
||||
/* 현장명 말줄임 */
|
||||
#estTable td:nth-child(8){max-width:320px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
$(function(){
|
||||
// ---- 샘플 데이터 ----
|
||||
const rows = [
|
||||
{no:1, recv:'2025-07-15', status:'대기', lot:'KD-PR-250715-11', type:'철재', buyer:'SK텔레콤', model:'KWE01', site:'판교센터', qty:3, ship:'2025-07-25', shipstat:'택배'},
|
||||
{no:2, recv:'2025-07-14', status:'견적', lot:'KD-PR-250714-12', type:'스크린', buyer:'현대건설', model:'KQTS01', site:'서울현장', qty:2, ship:'2025-07-28', shipstat:'화물차'},
|
||||
{no:3, recv:'2025-07-13', status:'견적', lot:'KD-PR-250713-13', type:'철재', buyer:'KT', model:'KTE01', site:'강남센터', qty:5, ship:'2025-07-30', shipstat:'트럭'},
|
||||
{no:4, recv:'2025-07-12', status:'견적', lot:'KD-PR-250712-14', type:'스크린', buyer:'LG전자', model:'KDSS01', site:'평택공장', qty:1, ship:'2025-08-01', shipstat:'택배'},
|
||||
{no:5, recv:'2025-07-11', status:'대기', lot:'KD-PR-250711-15', type:'철재', buyer:'삼성SDI', model:'KSS01', site:'천안사업장', qty:5, ship:'2025-08-01', shipstat:'화물차'},
|
||||
{no:6, recv:'2025-07-10', status:'대기', lot:'KD-PR-250710-01', type:'스크린', buyer:'롯데쇼핑', model:'KSS01', site:'서울물류센터', qty:3, ship:'2025-08-02', shipstat:'택배'},
|
||||
{no:7, recv:'2025-07-09', status:'대기', lot:'KD-PR-250709-02', type:'스크린', buyer:'두산중공업',model:'KSS02', site:'울산공장', qty:1, ship:'2025-08-05', shipstat:'트럭'},
|
||||
{no:8, recv:'2025-07-08', status:'견적', lot:'KD-PR-250708-03', type:'철재', buyer:'CJ대한통운',model:'KSS02', site:'인천사업장', qty:3, ship:'2025-08-02', shipstat:'화물차'},
|
||||
{no:9, recv:'2025-07-07', status:'대기', lot:'KD-PR-250707-04', type:'스크린', buyer:'포스코', model:'KSS01', site:'포항공장', qty:2, ship:'2025-07-28', shipstat:'택배'},
|
||||
{no:10, recv:'2025-07-06', status:'견적', lot:'KD-PR-250706-05', type:'철재', buyer:'현대자동차',model:'KSS02', site:'울산공장', qty:8, ship:'2025-08-03', shipstat:'화물차'},
|
||||
{no:6, recv:'2025-07-10', status:'대기', lot:'KD-PR-250710-01', type:'스크린', buyer:'롯데쇼핑', model:'KSS01', site:'서울물류센터', qty:3, ship:'2025-08-02', shipstat:'택배'},
|
||||
{no:7, recv:'2025-07-09', status:'대기', lot:'KD-PR-250709-02', type:'스크린', buyer:'두산중공업',model:'KSS02', site:'울산공장', qty:1, ship:'2025-08-05', shipstat:'트럭'},
|
||||
{no:8, recv:'2025-07-08', status:'견적', lot:'KD-PR-250708-03', type:'철재', buyer:'CJ대한통운',model:'KSS02', site:'인천사업장', qty:3, ship:'2025-08-02', shipstat:'화물차'},
|
||||
{no:9, recv:'2025-07-07', status:'견적', lot:'KD-PR-250707-04', type:'스크린', buyer:'포스코', model:'KSS01', site:'포항공장', qty:2, ship:'2025-07-28', shipstat:'택배'},
|
||||
{no:10, recv:'2025-07-06', status:'견적', lot:'KD-PR-250706-05', type:'철재', buyer:'현대자동차',model:'KSS02', site:'울산공장', qty:8, ship:'2025-08-03', shipstat:'화물차'},
|
||||
];
|
||||
|
||||
// ---- 상태 배지 ----
|
||||
const badge = s => `<span class="q-badge q-${s}">${s}</span>`;
|
||||
|
||||
// ---- 페이징 ----
|
||||
const pageSize = 10;
|
||||
let curPage = 1, filtered = [...rows];
|
||||
|
||||
function render(){
|
||||
const start = (curPage-1)*pageSize;
|
||||
const slice = filtered.slice(start, start+pageSize);
|
||||
$('#estTbody').html(slice.map(r=>`
|
||||
<tr data-no="${r.no}" class="row-open">
|
||||
<td>${r.no}</td>
|
||||
<td>${r.recv}</td>
|
||||
<td>${badge(r.status)}</td>
|
||||
<td>${r.lot}</td>
|
||||
<td>${r.type}</td>
|
||||
<td>${r.buyer}</td>
|
||||
<td>${r.model}</td>
|
||||
<td title="${r.site}">${r.site}</td>
|
||||
<td>${r.qty}</td>
|
||||
<td>${r.ship}</td>
|
||||
<td>${r.shipstat}</td>
|
||||
</tr>
|
||||
`).join(''));
|
||||
|
||||
const total = Math.max(1, Math.ceil(filtered.length/pageSize));
|
||||
let p = `
|
||||
<li class="page-item ${curPage===1?'disabled':''}"><a class="page-link" href="#" data-p="prev">«</a></li>`;
|
||||
for(let i=1;i<=total;i++){
|
||||
p += `<li class="page-item ${i===curPage?'active':''}"><a class="page-link" href="#" data-p="${i}">${i}</a></li>`;
|
||||
}
|
||||
p += `<li class="page-item ${curPage===total?'disabled':''}"><a class="page-link" href="#" data-p="next">»</a></li>`;
|
||||
$('#pager').html(p);
|
||||
$('#resultInfo').text(`총 ${filtered.length.toLocaleString()}건`);
|
||||
}
|
||||
|
||||
// 검색
|
||||
$('#btnSearch').on('click', function(){
|
||||
const st = $('#selStatus').val();
|
||||
const tp = $('#selType').val();
|
||||
const kw = ($('#keyword').val()||'').toLowerCase();
|
||||
const from = $('#fromDate').val();
|
||||
const to = $('#toDate').val();
|
||||
filtered = rows.filter(r=>{
|
||||
const okSt = !st || r.status===st;
|
||||
const okTp = !tp || r.type===tp;
|
||||
const okKw = !kw || [r.buyer,r.site,r.model,r.lot].some(v=>String(v).toLowerCase().includes(kw));
|
||||
const okDt = (!from || r.recv>=from) && (!to || r.recv<=to);
|
||||
return okSt && okTp && okKw && okDt;
|
||||
});
|
||||
curPage=1; render();
|
||||
});
|
||||
|
||||
// 페이징
|
||||
$(document).on('click', '#pager .page-link', function(e){
|
||||
e.preventDefault();
|
||||
const v = $(this).data('p');
|
||||
const total = Math.max(1, Math.ceil(filtered.length/pageSize));
|
||||
if(v==='prev'){ if(curPage>1) curPage--; }
|
||||
else if(v==='next'){ if(curPage<total) curPage++; }
|
||||
else curPage = parseInt(v,10);
|
||||
render();
|
||||
});
|
||||
|
||||
// 행 클릭 (상세로 이동/모달 호출 등)
|
||||
$(document).on('click', 'tr.row-open', function(){
|
||||
const no = $(this).data('no');
|
||||
// 예시: 상세 페이지로 이동
|
||||
// location.href = '/tenant/estimate/estimate_view.php?no='+no;
|
||||
alert('견적 상세 열기 (NO: '+no+')');
|
||||
});
|
||||
|
||||
// 버튼
|
||||
$('#btnNew').on('click', ()=>location.href='estimate_form.php');
|
||||
|
||||
render();
|
||||
});
|
||||
</script>
|
||||
|
||||
<?php include '../inc/footer.php'; ?>
|
||||
|
||||
Reference in New Issue
Block a user