Merge branch 'master' of https://git.greenoilinc.com/hyojin.ahn/goiintra
This commit is contained in:
commit
82cc0bbd3f
|
|
@ -502,18 +502,18 @@ if ($region_type_result) {
|
||||||
|
|
||||||
.row-total-payment,
|
.row-total-payment,
|
||||||
.row-total-payment td,
|
.row-total-payment td,
|
||||||
.tb-report tbody tr.row-total-payment td,
|
.tb-report tbody tr.row-total-payment td { background-color: #ECEBDE !important; }
|
||||||
.tb-report tbody tr.row-total-payment:hover td { background-color: #ECEBDE !important; }
|
.tb-report tbody tr.row-total-payment:hover td { background-color: #F4F3EC !important; transition: background-color .15s ease; }
|
||||||
|
|
||||||
.row-total-payment-1,
|
.row-total-payment-1,
|
||||||
.row-total-payment-1 td,
|
.row-total-payment-1 td,
|
||||||
.tb-report tbody tr.row-total-payment-1 td,
|
.tb-report tbody tr.row-total-payment-1 td { background-color: #D7D3BF !important; }
|
||||||
.tb-report tbody tr.row-total-payment-1:hover td { background-color: #D7D3BF !important; }
|
.tb-report tbody tr.row-total-payment-1:hover td { background-color: #E3E0D2 !important; transition: background-color .15s ease; }
|
||||||
|
|
||||||
.row-total-payment-2,
|
.row-total-payment-2,
|
||||||
.row-total-payment-2 td,
|
.row-total-payment-2 td,
|
||||||
.tb-report tbody tr.row-total-payment-2 td,
|
.tb-report tbody tr.row-total-payment-2 td { background-color: #C1BAA1 !important; }
|
||||||
.tb-report tbody tr.row-total-payment-2:hover td { background-color: #C1BAA1 !important; }
|
.tb-report tbody tr.row-total-payment-2:hover td { background-color: #CFC9B5 !important; transition: background-color .15s ease; }
|
||||||
|
|
||||||
.row-total-tc,
|
.row-total-tc,
|
||||||
.row-total-tc td,
|
.row-total-tc td,
|
||||||
|
|
@ -628,6 +628,21 @@ if ($region_type_result) {
|
||||||
}
|
}
|
||||||
/* 보조 안전장치: datepicker z-index를 quicknav(1050)보다 위로 강제 */
|
/* 보조 안전장치: datepicker z-index를 quicknav(1050)보다 위로 강제 */
|
||||||
.ui-datepicker { z-index: 1200 !important; }
|
.ui-datepicker { z-index: 1200 !important; }
|
||||||
|
|
||||||
|
/* =========================================================================
|
||||||
|
CSV 다운로드 버튼
|
||||||
|
========================================================================= */
|
||||||
|
.btn-csv-dl {
|
||||||
|
vertical-align: middle;
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
.section-title-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 0;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
|
@ -876,6 +891,50 @@ function goSearch(){
|
||||||
// 버튼 클릭 시에만 검색되도록 이 함수는 아무것도 하지 않습니다.
|
// 버튼 클릭 시에만 검색되도록 이 함수는 아무것도 하지 않습니다.
|
||||||
// document.form_customer.submit();
|
// document.form_customer.submit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -----------------------------------------------------------------------
|
||||||
|
CSV 다운로드: 테이블 ID와 파일명을 받아 CSV로 변환 후 다운로드
|
||||||
|
----------------------------------------------------------------------- */
|
||||||
|
function downloadTableCSV(tableId, filename) {
|
||||||
|
var table = document.getElementById(tableId);
|
||||||
|
if (!table) { alert('Table not found: ' + tableId); return; }
|
||||||
|
|
||||||
|
var rows = table.querySelectorAll('tr');
|
||||||
|
var csv = [];
|
||||||
|
|
||||||
|
rows.forEach(function(row) {
|
||||||
|
// hidden 행 제외 (더보기로 숨겨진 행)
|
||||||
|
if (row.style.display === 'none') return;
|
||||||
|
|
||||||
|
var cols = row.querySelectorAll('th, td');
|
||||||
|
var rowData = [];
|
||||||
|
cols.forEach(function(col) {
|
||||||
|
// rowspan 셀은 textContent 그대로 사용
|
||||||
|
var text = col.innerText || col.textContent || '';
|
||||||
|
text = text.replace(/\s+/g, ' ').trim();
|
||||||
|
// 쉼표·개행·따옴표 처리
|
||||||
|
text = '"' + text.replace(/"/g, '""') + '"';
|
||||||
|
rowData.push(text);
|
||||||
|
});
|
||||||
|
csv.push(rowData.join(','));
|
||||||
|
});
|
||||||
|
|
||||||
|
var csvStr = '\uFEFF' + csv.join('\n'); // BOM for Excel UTF-8
|
||||||
|
var blob = new Blob([csvStr], { type: 'text/csv;charset=utf-8;' });
|
||||||
|
var url = URL.createObjectURL(blob);
|
||||||
|
var link = document.createElement('a');
|
||||||
|
var today = new Date();
|
||||||
|
var dateStr = today.getFullYear()
|
||||||
|
+ ('0'+(today.getMonth()+1)).slice(-2)
|
||||||
|
+ ('0'+today.getDate()).slice(-2);
|
||||||
|
|
||||||
|
link.setAttribute('href', url);
|
||||||
|
link.setAttribute('download', filename + '_' + dateStr + '.csv');
|
||||||
|
document.body.appendChild(link);
|
||||||
|
link.click();
|
||||||
|
document.body.removeChild(link);
|
||||||
|
URL.revokeObjectURL(url);
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<main id="main" class="main">
|
<main id="main" class="main">
|
||||||
|
|
@ -1079,12 +1138,20 @@ function goSearch(){
|
||||||
[섹션 1] Region-wise Customer, Container & Oil Stats
|
[섹션 1] Region-wise Customer, Container & Oil Stats
|
||||||
================================================================= -->
|
================================================================= -->
|
||||||
<div class="container margin-top-25" id="sec-customer-stats" data-aos="fade-up">
|
<div class="container margin-top-25" id="sec-customer-stats" data-aos="fade-up">
|
||||||
<hr><h4 class="text-center">Region-wise Customer, Container & Oil Stats</h4><hr>
|
<hr>
|
||||||
|
<div class="section-title-row" style="justify-content: space-between;">
|
||||||
|
<div style="flex:1;"></div>
|
||||||
|
<h4 class="text-center" style="margin:0;">Region-wise Customer, Container & Oil Stats</h4>
|
||||||
|
<div style="flex:1; display:flex; justify-content:flex-end;">
|
||||||
|
<button type="button" class="btn-add text-center btn-equal-sync btn-csv-dl" onclick="downloadTableCSV('tbl-customer-stats', 'region_customer_container_oil_stats')">DOWNLOAD</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<div class="wrap-overflow forecast-info report-wrap">
|
<div class="wrap-overflow forecast-info report-wrap">
|
||||||
<table class="tb-list tb-report table-compact" style="cursor: default !important;">
|
<table id="tbl-customer-stats" class="tb-list tb-report table-compact" style="cursor: default !important;">
|
||||||
<thead>
|
<thead>
|
||||||
<tr style="cursor: default !important;">
|
<tr style="cursor: default !important;">
|
||||||
<th class="fixed-title-th" style="cursor: default !important;">Classification</th>
|
<th class="fixed-title-th" style="cursor: default !important;">Classification</th>
|
||||||
|
|
@ -1249,12 +1316,15 @@ function goSearch(){
|
||||||
<div>
|
<div>
|
||||||
<div style="font-size:16px; color:#17253a; letter-spacing:-0.01em;">New Customer — Oil Pickup & Visit Stats</div>
|
<div style="font-size:16px; color:#17253a; letter-spacing:-0.01em;">New Customer — Oil Pickup & Visit Stats</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div style="flex:1; display:flex; justify-content:flex-end;">
|
||||||
|
<button type="button" class="btn-add text-center btn-equal-sync btn-csv-dl" onclick="downloadTableCSV('tbl-new-customer-oil', 'new_customer_oil_stats')">DOWNLOAD</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div style="height:1px; background:linear-gradient(90deg,#4C8FC933,#4C8FC9,#4C8FC933); margin-bottom:28px;"></div>
|
<div style="height:1px; background:linear-gradient(90deg,#4C8FC933,#4C8FC9,#4C8FC933); margin-bottom:28px;"></div>
|
||||||
|
|
||||||
<!-- 표 -->
|
<!-- 표 -->
|
||||||
<div class="wrap-overflow forecast-info report-wrap" style="margin-bottom:32px;">
|
<div class="wrap-overflow forecast-info report-wrap" style="margin-bottom:32px;">
|
||||||
<table class="tb-list tb-report table-compact" style="cursor:default;">
|
<table id="tbl-new-customer-oil" class="tb-list tb-report table-compact" style="cursor:default;">
|
||||||
<thead>
|
<thead>
|
||||||
<tr style="background-color:#f1f6fb;">
|
<tr style="background-color:#f1f6fb;">
|
||||||
<th class="fixed-title-th" style="cursor:default;">Classification</th>
|
<th class="fixed-title-th" style="cursor:default;">Classification</th>
|
||||||
|
|
@ -1372,11 +1442,19 @@ function goSearch(){
|
||||||
[섹션 4] Region × Container Specification Cross Analysis
|
[섹션 4] Region × Container Specification Cross Analysis
|
||||||
================================================================= -->
|
================================================================= -->
|
||||||
<div class="container margin-top-50" id="sec-container-cross" data-aos="fade-up">
|
<div class="container margin-top-50" id="sec-container-cross" data-aos="fade-up">
|
||||||
<hr><h4 class="text-center">Region × Container Specification Cross Analysis</h4><hr>
|
<hr>
|
||||||
|
<div class="section-title-row" style="justify-content: space-between;">
|
||||||
|
<div style="flex:1;"></div>
|
||||||
|
<h4 class="text-center" style="margin:0;">Region × Container Specification Cross Analysis</h4>
|
||||||
|
<div style="flex:1; display:flex; justify-content:flex-end;">
|
||||||
|
<button type="button" class="btn-add text-center btn-equal-sync btn-csv-dl" onclick="downloadTableCSV('tbl-container-cross', 'region_container_cross_analysis')">DOWNLOAD</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<div class="wrap-overflow forecast-info report-wrap">
|
<div class="wrap-overflow forecast-info report-wrap">
|
||||||
<table class="tb-list tb-report table-compact" style="cursor: default;">
|
<table id="tbl-container-cross" class="tb-list tb-report table-compact" style="cursor: default;">
|
||||||
<thead>
|
<thead>
|
||||||
<tr style="background-color: #f1f3f9;">
|
<tr style="background-color: #f1f3f9;">
|
||||||
<th style="cursor: default;">Container Specification</th>
|
<th style="cursor: default;">Container Specification</th>
|
||||||
|
|
@ -1693,12 +1771,20 @@ function goSearch(){
|
||||||
[섹션 5] Region × Payment Method Cross Analysis
|
[섹션 5] Region × Payment Method Cross Analysis
|
||||||
================================================================= -->
|
================================================================= -->
|
||||||
<div class="container margin-top-50" id="sec-payment-cross" data-aos="fade-up">
|
<div class="container margin-top-50" id="sec-payment-cross" data-aos="fade-up">
|
||||||
<hr><h4 class="text-center">Region × Payment Method Cross Analysis</h4><hr>
|
<hr>
|
||||||
|
<div class="section-title-row" style="justify-content: space-between;">
|
||||||
|
<div style="flex:1;"></div>
|
||||||
|
<h4 class="text-center" style="margin:0;">Region × Payment Method Cross Analysis</h4>
|
||||||
|
<div style="flex:1; display:flex; justify-content:flex-end;">
|
||||||
|
<button type="button" class="btn-add text-center btn-equal-sync btn-csv-dl" onclick="downloadTableCSV('tbl-payment-cross', 'region_payment_method_cross_analysis')">DOWNLOAD</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<div class="wrap-overflow forecast-info report-wrap">
|
<div class="wrap-overflow forecast-info report-wrap">
|
||||||
<table class="tb-list tb-report table-compact" style="cursor: default;">
|
<table id="tbl-payment-cross" class="tb-list tb-report table-compact" style="cursor: default;">
|
||||||
<thead>
|
<thead>
|
||||||
<tr style="background-color: #fcf8e3;">
|
<tr style="background-color: #fcf8e3;">
|
||||||
<th style="min-width:160px; cursor: default;">Payment Method</th>
|
<th style="min-width:160px; cursor: default;">Payment Method</th>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue