간단 소스 편집기
허용:
css/
,
page/
· 확장자:
html/css/js
페이지 추가
새로고침
파일 목록
css
css/app.js
css/app.js
css/style.css
css/style.css
page
page/account
계정 수동 생성 ❓
page/account/account_create.html
무료 계정 ❓
page/account/free_account_list.html
무료 계정 > 상세 정보 (탭형) ❓
page/account/free_account_view_tab.html
유료 계정 ❓
page/account/paid_account_list.html
유료 계정 상세 정보 ❓
page/account/paid_account_view.html
유료 계정 > 상세 정보 (탭형) ❓
page/account/paid_account_view_tab.html
page/main
대시보드 ❓
page/main/main.html
page/ops
관리자 추가 ❓
page/ops/admin_form.html
관리자 리스트 ❓
page/ops/admin_list.html
관리자 수정 ❓
page/ops/admin_modify.html
API 로그 ❓
page/ops/api_log.html
메일발송 로그 ❓
page/ops/mail_log.html
SMS 발송 로그 ❓
page/ops/sms_log.html
page/payment
page/payment/customer_pay_log.html
page/payment/customer_pay_log.html
page/payment/customer_refund_list.html
page/payment/customer_refund_list.html
도메인 SSL 연장 로그 ❓
page/payment/domain_log.html
결제 리스트 ❓
page/payment/pay_log.html
포인트 사용 로그 ❓
page/payment/point_log.html
환불 등록 ❓
page/payment/refund_form.html
환불 리스트 ❓
page/payment/refund_list.html
세금/현금영수증 ❓
page/payment/tax_doc.html
page/payment/user_pay_log.html
page/payment/user_pay_log.html
page/payment/user_refund_log.html
page/payment/user_refund_log.html
page/product
상품 등록 ❓
page/product/product_form.html
상품 리스트 ❓
page/product/product_list.html
상품 상세 ❓
page/product/product_view.html
page/settle
계정 정산 리스트 ❓
page/settle/month_list.html
page/settle/settle_log.html
page/settle/settle_log.html
page/sidebar_menu.html
page/sidebar_menu.html
page/sidebar_menu.html
page/site
FAQ 등록 ❓
page/site/faq_form.html
FAQ ❓
page/site/faq_list.html
공지사항 등록 ❓
page/site/notice_form.html
공지사항 ❓
page/site/notice_list.html
공지사항 상세 ❓
page/site/notice_view.html
페이지 추가 ❓
page/site/page_form.html
페이지 관리 ❓
page/site/page_list.html
페이지 수정 ❓
page/site/page_modify.html
팝업창 수정 ❓
page/site/popup_form.html
팝업창 ❓
page/site/popup_list.html
page/site/popup_modify.html
page/site/popup_modify.html
1:1 문의 상세 ❓
page/site/qna_form.html
1:1 문의 ❓
page/site/qna_list.html
SEO 관리 ❓
page/site/seo.html
page/stats
page/stats/account.html
page/stats/account.html
page/stats/sales.html
page/stats/sales.html
page/stats/visit.html
page/stats/visit.html
편집
page/settle/month_list.html
<!-- /page/settle/month_list.html --> <!-- 상단 검색 박스 --> <style> /* 검색영역 전용: 세로 1열(상하 1레코드) + 라벨/입력 좌우 분리 */ .filter-stack { display:flex; flex-direction:column; gap:.65rem; } .filter-rowline { display:flex; gap:12px; align-items:flex-start; } .filter-rowline .filter-label { width:140px; padding-top:6px; font-weight:600; color:#374151; white-space:nowrap; } .filter-rowline .filter-input { flex:1; min-width:0; text-align:left; } .filter-actions { display:flex; justify-content:center; margin-top:12px; } .filter-actions .btn { min-width:180px; font-weight:700; } .table-settle td, .table-settle th { white-space:nowrap; } .code-mono { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; font-size:.9rem; } /* 상세 모달: 간단 KV */ .kv-list{ display:flex; flex-direction:column; gap:.55rem; } .kv-row{ display:flex; align-items:flex-start; gap:12px; } .kv-label{ width:140px; font-weight:600; color:#374151; white-space:nowrap; padding-top:2px; } .kv-sep{ width:1px; background:rgba(0,0,0,.08); } .kv-value{ flex:1; min-width:0; } /* 모달 내 결제로그 */ .table-mini td, .table-mini th { white-space:nowrap; } /* 계산서 셀 */ .bill-cell { display:flex; align-items:center; justify-content:center; gap:.4rem; } /* 선택 카운트 */ .sel-count { font-size:.9rem; } </style> <div class="d-flex align-items-center justify-content-between mb-3"> <div> <h1 class="h4 mb-1">계정 정산 리스트 <button type="button" class="btn btn-link btn-sm p-0 ms-2 align-baseline" onclick="openPageHelp(this)" data-title="계정 정산 리스트"> ❓ </button> </h1> <div class="text-muted">계정별로 월간 정산 내역을 집계하여 보여 줍니다</div> </div> </div> <div class="card mb-3 filter-card"> <div class="card-body"> <div class="filter-stack"> <!-- 키워드 검색 --> <div class="filter-rowline"> <div class="filter-label">키워드 검색</div> <div class="filter-input"> <div class="d-flex gap-2 flex-wrap"> <select class="form-select" style="max-width:180px;" id="kwField"> <option value="account_title">계정 타이틀</option> <option value="account_id">계정 아이디</option> <option value="email">이메일</option> <option value="name">사용자명</option> <option value="phone">전화번호</option> <option value="settle_id">정산ID</option> </select> <input type="text" class="form-control" placeholder="검색어를 입력하세요" id="kwText" maxlength="60" style="max-width:600px;" /> </div> </div> </div> <!-- 정산월 --> <div class="filter-rowline"> <div class="filter-label">정산월</div> <div class="filter-input"> <div class="d-flex gap-2 flex-wrap align-items-center"> <select class="form-select" style="max-width:220px;" id="settleMonth"> <option value="">전체</option> <option value="2026-02">2026-02</option> <option value="2026-01">2026-01</option> <option value="2025-12">2025-12</option> <option value="2025-11">2025-11</option> <option value="2025-10">2025-10</option> </select> <div class="text-muted small">* 기간 검색으로 변경도 가능</div> </div> </div> </div> <!-- 버튼 --> <div class="filter-actions"> <div class="d-flex gap-2"> <button class="btn btn-primary" type="button">검색</button> <button class="btn btn-outline-secondary" type="button">조건 초기화</button> </div> </div> </div> </div> </div> <!-- 리스트 --> <div class="card"> <div class="card-header d-flex align-items-center justify-content-between flex-wrap gap-2"> <div class="text-muted"> 검색결과 <span class="fw-semibold">24</span>건 / 총 <span class="fw-semibold">520</span>건 </div> <div class="d-flex align-items-center gap-2 flex-wrap"> <div class="text-muted sel-count">선택 <span class="fw-semibold" id="selCount">0</span>건</div> <div class="form-check mb-0"> <input class="form-check-input" type="checkbox" id="onlyUnissued"> <label class="form-check-label text-muted small" for="onlyUnissued">미발행만</label> </div> <button class="btn btn-primary btn-sm" type="button" id="btnBulkIssue">계산서 일괄발행</button> <div class="d-flex align-items-center gap-2 ms-2"> <div class="text-muted small">리스팅 개수</div> <select class="form-select form-select-sm" style="width:120px;"> <option value="10">10</option> <option value="20" selected>20</option> <option value="30">30</option> <option value="50">50</option> </select> </div> </div> </div> <div class="card-body"> <div class="table-responsive"> <table class="table table-hover align-middle mb-0 table-settle"> <thead> <tr class="text-muted text-center"> <th style="width:44px;"> <input class="form-check-input" type="checkbox" id="chkAll" aria-label="전체선택"> </th> <th style="width:70px;">번호</th> <th>계정 ID</th> <th>이메일</th> <th>계정 타이틀</th> <th>사용자명</th> <th>전화번호</th> <th>정산월</th> <th>정산ID</th> <th>총매출</th> <th>수수료</th> <th>정산액</th> <th>계산서</th> <th>정산예정일</th> <th>상태</th> <th style="width:90px;">상세</th> </tr> </thead> <tbody class="text-center"> <tr> <td> <input class="form-check-input js-rowchk" type="checkbox" aria-label="선택" data-billstatus="미발행" data-settleid="STL-202602-0012" data-month="2026-02" data-accountid="settle6"> </td> <td class="fw-semibold">6</td> <td>settle6</td> <td>settle6@example.com</td> <td>반응형 테스트 사이트</td> <td>송하늘</td> <td>010-2310-1370</td> <td class="code-mono">2026-02</td> <td class="code-mono">STL-202602-0012</td> <td class="text-end">₩1,500,000</td> <td class="text-end">₩250,000(10%)</td> <td class="text-end">₩1,250,000(90%)</td> <td> <div class="bill-cell"> <span class="badge text-bg-light">미발행</span> <a class="btn btn-primary btn-sm" href="#" onclick="alert('프로토타입: 계산서 발행'); return false;">발행</a> </div> </td> <td>2026-03-10</td> <td><span class="badge text-bg-warning">예정</span></td> <td> <a class="btn btn-outline-secondary btn-sm js-open-detail" href="#" data-bs-toggle="modal" data-bs-target="#settleDetailModal" data-accountid="settle6" data-no="12" data-email="settle12@example.com" data-title="반응형 테스트 사이트" data-name="송하늘" data-phone="010-2310-1370" data-month="2026-02" data-settleid="STL-202602-0012" data-total="₩1,500,000" data-fee="₩250,000(10%)" data-amount="₩1,250,000(90%)" data-date="2026-03-10" data-status="예정" data-billstatus="미발행" data-billno="-" data-billdate="-" >상세</a> </td> </tr> <tr> <td> <input class="form-check-input js-rowchk" type="checkbox" aria-label="선택" data-billstatus="발행완료" data-settleid="STL-202602-0011" data-month="2026-02" data-accountid="settle5"> </td> <td class="fw-semibold">5</td> <td>settle5</td> <td>settle5@example.com</td> <td>데모 사이트 003</td> <td>김민수</td> <td>010-2301-1037</td> <td class="code-mono">2026-02</td> <td class="code-mono">STL-202602-0011</td> <td class="text-end">$1,200</td> <td class="text-end">$280(10%)</td> <td class="text-end">$920(90%)</td> <td> <div class="bill-cell"> <span class="badge text-bg-success">발행완료</span> </div> </td> <td>2026-03-10</td> <td><span class="badge text-bg-warning">예정</span></td> <td> <a class="btn btn-outline-secondary btn-sm js-open-detail" href="#" data-bs-toggle="modal" data-bs-target="#settleDetailModal" data-accountid="settle5" data-no="11" data-email="settle11@example.com" data-title="데모 사이트 003" data-name="김민수" data-phone="010-2301-1037" data-month="2026-02" data-settleid="STL-202602-0011" data-total="$1,200" data-fee="$280(10%)" data-amount="$920(90%)" data-date="2026-03-10" data-status="예정" data-billstatus="발행완료" data-billno="BILL-202602-7781" data-billdate="2026-03-01" >상세</a> </td> </tr> <tr> <td> <input class="form-check-input js-rowchk" type="checkbox" aria-label="선택" data-billstatus="발행완료" data-settleid="STL-202601-0010" data-month="2026-01" data-accountid="settle4"> </td> <td class="fw-semibold">4</td> <td>settle4</td> <td>settle4@example.com</td> <td>데모 사이트 002</td> <td>이서연</td> <td>010-2302-1074</td> <td class="code-mono">2026-01</td> <td class="code-mono">STL-202601-0010</td> <td class="text-end">₩450,000</td> <td class="text-end">₩60,000(10%)</td> <td class="text-end">₩390,000(90%)</td> <td> <div class="bill-cell"> <span class="badge text-bg-success">발행완료</span> </div> </td> <td>2026-02-10</td> <td><span class="badge text-bg-success">완료</span></td> <td> <a class="btn btn-outline-secondary btn-sm js-open-detail" href="#" data-bs-toggle="modal" data-bs-target="#settleDetailModal" data-accountid="settle4" data-no="10" data-email="settle10@example.com" data-title="데모 사이트 002" data-name="이서연" data-phone="010-2302-1074" data-month="2026-01" data-settleid="STL-202601-0010" data-total="₩450,000" data-fee="₩60,000(10%)" data-amount="₩390,000(90%)" data-date="2026-02-10" data-status="완료" data-billstatus="발행완료" data-billno="BILL-202601-2210" data-billdate="2026-02-01" >상세</a> </td> </tr> <tr> <td> <input class="form-check-input js-rowchk" type="checkbox" aria-label="선택" data-billstatus="미발행" data-settleid="STL-202601-0009" data-month="2026-01" data-accountid="settle3"> </td> <td class="fw-semibold">3</td> <td>settle3</td> <td>settle3@example.com</td> <td>데모 사이트 001</td> <td>박지훈</td> <td>010-2303-1111</td> <td class="code-mono">2026-01</td> <td class="code-mono">STL-202601-0009</td> <td class="text-end">$260</td> <td class="text-end">$61(10%)</td> <td class="text-end">$199(90%)</td> <td> <div class="bill-cell"> <span class="badge text-bg-light">미발행</span> <a class="btn btn-primary btn-sm" href="#" onclick="alert('프로토타입: 계산서 발행'); return false;">발행</a> </div> </td> <td>2026-02-10</td> <td><span class="badge text-bg-success">완료</span></td> <td> <a class="btn btn-outline-secondary btn-sm js-open-detail" href="#" data-bs-toggle="modal" data-bs-target="#settleDetailModal" data-accountid="settle3" data-no="9" data-email="settle09@example.com" data-title="데모 사이트 001" data-name="박지훈" data-phone="010-2303-1111" data-month="2026-01" data-settleid="STL-202601-0009" data-total="$260" data-fee="$61(10%)" data-amount="$199(90%)" data-date="2026-02-10" data-status="완료" data-billstatus="미발행" data-billno="-" data-billdate="-" >상세</a> </td> </tr> <tr> <td> <input class="form-check-input js-rowchk" type="checkbox" aria-label="선택" data-billstatus="발행불가(보류)" data-settleid="STL-202512-0008" data-month="2025-12" data-accountid="settle2"> </td> <td class="fw-semibold">2</td> <td>settle2</td> <td>settle2@example.com</td> <td>반응형 테스트 사이트</td> <td>윤아름</td> <td>010-2308-1296</td> <td class="code-mono">2025-12</td> <td class="code-mono">STL-202512-0008</td> <td class="text-end">₩3,400,000</td> <td class="text-end">₩410,000(10%)</td> <td class="text-end">₩2,990,000(90%)</td> <td> <div class="bill-cell"> <span class="badge text-bg-secondary">발행불가(보류)</span> </div> </td> <td>2026-01-10</td> <td><span class="badge text-bg-secondary">보류</span></td> <td> <a class="btn btn-outline-secondary btn-sm js-open-detail" href="#" data-bs-toggle="modal" data-bs-target="#settleDetailModal" data-accountid="settle2" data-no="8" data-email="settle08@example.com" data-title="반응형 테스트 사이트" data-name="윤아름" data-phone="010-2308-1296" data-month="2025-12" data-settleid="STL-202512-0008" data-total="₩3,400,000" data-fee="₩410,000(10%)" data-amount="₩2,990,000(90%)" data-date="2026-01-10" data-status="보류" data-billstatus="발행불가(보류)" data-billno="-" data-billdate="-" >상세</a> </td> </tr> <tr> <td> <input class="form-check-input js-rowchk" type="checkbox" aria-label="선택" data-billstatus="발행불가(보류)" data-settleid="STL-202512-0007" data-month="2025-12" data-accountid="settle1"> </td> <td class="fw-semibold">1</td> <td>settle1</td> <td>settle1@example.com</td> <td>데모 사이트 003</td> <td>한지민</td> <td>010-2306-1222</td> <td class="code-mono">2025-12</td> <td class="code-mono">STL-202512-0007</td> <td class="text-end">$70</td> <td class="text-end">$20(10%)</td> <td class="text-end">$50(90%)</td> <td> <div class="bill-cell"> <span class="badge text-bg-secondary">발행불가(보류)</span> </div> </td> <td>2026-01-10</td> <td><span class="badge text-bg-secondary">보류</span></td> <td> <a class="btn btn-outline-secondary btn-sm js-open-detail" href="#" data-bs-toggle="modal" data-bs-target="#settleDetailModal" data-accountid="settle1" data-no="7" data-email="settle07@example.com" data-title="데모 사이트 003" data-name="한지민" data-phone="010-2306-1222" data-month="2025-12" data-settleid="STL-202512-0007" data-total="$70" data-fee="$20(10%)" data-amount="$50(90%)" data-date="2026-01-10" data-status="보류" data-billstatus="발행불가(보류)" data-billno="-" data-billdate="-" >상세</a> </td> </tr> </tbody> </table> </div> <nav class="mt-3 d-flex justify-content-center" aria-label="pagination"> <ul class="pagination pagination-sm mb-0"> <li class="page-item disabled"><a class="page-link" href="#">이전</a></li> <li class="page-item active"><a class="page-link" href="#">1</a></li> <li class="page-item"><a class="page-link" href="#">2</a></li> <li class="page-item"><a class="page-link" href="#">3</a></li> <li class="page-item"><a class="page-link" href="#">4</a></li> <li class="page-item"><a class="page-link" href="#">5</a></li> <li class="page-item"><a class="page-link" href="#">다음</a></li> </ul> </nav> </div> </div> <!-- 상세 레이어 팝업(부트스트랩 모달) --> <div class="modal fade" id="settleDetailModal" tabindex="-1" aria-hidden="true"> <div class="modal-dialog modal-xl modal-dialog-scrollable"> <div class="modal-content"> <div class="modal-header"> <div> <div class="fw-semibold">월간 정산 상세</div> <div class="text-muted small" id="md_subtitle">-</div> </div> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <div class="kv-list"> <div class="kv-row"> <div class="kv-label">번호</div><div class="kv-sep"></div> <div class="kv-value" id="md_no">-</div> </div> <div class="kv-row"> <div class="kv-label">계정 ID</div><div class="kv-sep"></div> <div class="kv-value code-mono" id="md_accountid">-</div> </div> <div class="kv-row"> <div class="kv-label">이메일</div><div class="kv-sep"></div> <div class="kv-value" id="md_email">-</div> </div> <div class="kv-row"> <div class="kv-label">계정 타이틀</div><div class="kv-sep"></div> <div class="kv-value" id="md_title">-</div> </div> <div class="kv-row"> <div class="kv-label">사용자명</div><div class="kv-sep"></div> <div class="kv-value" id="md_name">-</div> </div> <div class="kv-row"> <div class="kv-label">전화번호</div><div class="kv-sep"></div> <div class="kv-value" id="md_phone">-</div> </div> <hr class="my-2" /> <div class="kv-row"> <div class="kv-label">정산월</div><div class="kv-sep"></div> <div class="kv-value" id="md_month">-</div> </div> <div class="kv-row"> <div class="kv-label">정산ID</div><div class="kv-sep"></div> <div class="kv-value code-mono" id="md_settleid">-</div> </div> <div class="kv-row"> <div class="kv-label">총매출</div><div class="kv-sep"></div> <div class="kv-value fw-semibold" id="md_total">-</div> </div> <div class="kv-row"> <div class="kv-label">수수료</div><div class="kv-sep"></div> <div class="kv-value" id="md_fee">-</div> </div> <div class="kv-row"> <div class="kv-label">정산액</div><div class="kv-sep"></div> <div class="kv-value fw-semibold" id="md_amount">-</div> </div> <div class="kv-row"> <div class="kv-label">정산예정일</div><div class="kv-sep"></div> <div class="kv-value" id="md_date">-</div> </div> <div class="kv-row"> <div class="kv-label">상태</div><div class="kv-sep"></div> <div class="kv-value" id="md_status">-</div> </div> <hr class="my-2" /> <div class="kv-row"> <div class="kv-label">계산서 상태</div><div class="kv-sep"></div> <div class="kv-value" id="md_bill_status">-</div> </div> <div class="kv-row"> <div class="kv-label">계산서번호</div><div class="kv-sep"></div> <div class="kv-value code-mono" id="md_bill_no">-</div> </div> <div class="kv-row"> <div class="kv-label">발행일</div><div class="kv-sep"></div> <div class="kv-value" id="md_bill_date">-</div> </div> <hr class="my-2" /> <div class="card"> <div class="card-header py-2 d-flex align-items-center justify-content-between flex-wrap gap-2"> <div class="fw-semibold">해당월 결제 로그</div> <div class="text-muted small" id="md_paylog_hint">-</div> </div> <div class="card-body"> <div class="table-responsive"> <table class="table table-hover align-middle mb-0 table-mini"> <thead> <tr class="text-muted text-center"> <th style="width:60px;">No</th> <th>결제시각</th> <th>결제코드</th> <th>거래ID</th> <th>결제구분</th> <th>상태</th> <th>PG사</th> <th class="text-end">결제액</th> </tr> </thead> <tbody class="text-center" id="md_paylog_tbody"> <tr><td colspan="8" class="text-muted py-4">-</td></tr> </tbody> </table> </div> <div class="text-muted small mt-2">* 프로토타입: 정산ID 기준으로 샘플 로그 표시</div> </div> </div> <div class="text-muted small mt-2"> * 프로토타입용 팝업입니다. 실제 기능(저장/수정/정산처리)은 포함하지 않습니다. </div> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">닫기</button> <a class="btn btn-outline-secondary" href="#" onclick="alert('프로토타입: 이 버튼은 해당 계정/정산월 필터가 적용된 결제 로그로 이동할 수 있습니다.'); return false;">결제 로그 페이지로</a> </div> </div> </div> </div> <script> (function(){ function setText(id, v){ var el = document.getElementById(id); if (!el) return; el.textContent = (v === undefined || v === null || v === "") ? "-" : v; } function escapeHtml(s){ return String(s).replace(/[&<>"']/g, function(m){ return ({'&':'&','<':'<','>':'>','"':'"',"'":'''}[m]); }); } // --- 선택 카운트/전체선택 --- var selCountEl = document.getElementById("selCount"); var chkAll = document.getElementById("chkAll"); var onlyUnissued = document.getElementById("onlyUnissued"); function getRowChecks(){ return Array.prototype.slice.call(document.querySelectorAll(".js-rowchk")); } function updateSelCount(){ var n = getRowChecks().filter(function(c){ return c.checked; }).length; if (selCountEl) selCountEl.textContent = String(n); } function syncChkAll(){ var rows = getRowChecks(); var allChecked = rows.length && rows.every(function(c){ return c.checked; }); if (chkAll) chkAll.checked = !!allChecked; } if (chkAll){ chkAll.addEventListener("change", function(){ var rows = getRowChecks(); for (var i=0; i<rows.length; i++){ rows[i].checked = chkAll.checked; } updateSelCount(); }, false); } document.addEventListener("change", function(e){ if (e.target && e.target.classList && e.target.classList.contains("js-rowchk")){ updateSelCount(); syncChkAll(); } }, false); // --- 일괄 발행(프로토타입) --- var btnBulk = document.getElementById("btnBulkIssue"); if (btnBulk){ btnBulk.addEventListener("click", function(){ var rows = getRowChecks().filter(function(c){ return c.checked; }); if (!rows.length){ alert("프로토타입: 선택된 항목이 없습니다."); return; } var only = !!(onlyUnissued && onlyUnissued.checked); var targets = rows; if (only){ targets = rows.filter(function(c){ return (c.dataset && c.dataset.billstatus === "미발행"); }); } if (!targets.length){ alert("프로토타입: (미발행만) 조건에 해당하는 선택 항목이 없습니다."); return; } var ids = targets.map(function(c){ return c.dataset.settleid; }).join(", "); alert("프로토타입: 계산서 일괄발행\n- 대상: " + targets.length + "건\n- 정산ID: " + ids); }, false); } // --- 상세 결제로그 샘플 --- var payLogs = { "STL-202602-0012": [ {dt:"2026-02-09 10:21:14", pay:"PAY-202602-0010", txn:"TXN-TOSS-8F3A21", type:"월 결제(자동)", status:"성공", pg:"토스페이먼츠", amt:"₩39,000"}, {dt:"2026-02-02 08:14:03", pay:"PAY-202602-0003", txn:"TXN-TOSS-2B9C10", type:"포인트 충전", status:"실패", pg:"토스페이먼츠", amt:"₩100,000"}, {dt:"2026-02-01 12:44:19", pay:"PAY-202602-0001", txn:"TXN-TOSS-1F0A77", type:"월 결제(자동)", status:"취소", pg:"토스페이먼츠", amt:"₩39,000"} ], "STL-202602-0011": [ {dt:"2026-02-09 09:58:02", pay:"PAY-202602-0009", txn:"TXN-STRIPE-7C19D0", type:"년 결제", status:"실패", pg:"Stripe", amt:"$299"}, {dt:"2026-02-08 11:42:56", pay:"PAY-202602-0006", txn:"TXN-STRIPE-2E0A77", type:"년 결제", status:"성공", pg:"Stripe", amt:"$199"}, {dt:"2026-02-04 17:10:20", pay:"PAY-202602-0002", txn:"TXN-PAYPAL-1A3B99", type:"포인트 충전", status:"환불", pg:"PayPal", amt:"$50"} ], "STL-202601-0010": [ {dt:"2026-01-28 13:02:09", pay:"PAY-202601-0102", txn:"TXN-STRIPE-BC0F14", type:"포인트 충전", status:"환불", pg:"Stripe", amt:"₩100,000"}, {dt:"2026-01-15 09:10:33", pay:"PAY-202601-0077", txn:"TXN-TOSS-18D3F2", type:"월 결제(자동)", status:"성공", pg:"토스페이먼츠", amt:"₩39,000"} ], "STL-202601-0009": [ {dt:"2026-01-20 20:44:18", pay:"PAY-202601-0051", txn:"TXN-PAYPAL-7E2AA0", type:"년 결제", status:"취소", pg:"PayPal", amt:"$260"}, {dt:"2026-01-05 08:31:47", pay:"PAY-202601-0001", txn:"TXN-PAYPAL-7E2AA0", type:"월 결제(자동)", status:"성공", pg:"PayPal", amt:"$29"} ], "STL-202512-0008": [ {dt:"2025-12-22 11:03:11", pay:"PAY-202512-0099", txn:"TXN-TOSS-0C2F9A", type:"월 결제(자동)", status:"환불", pg:"토스페이먼츠", amt:"₩15,000"}, {dt:"2025-12-10 15:22:04", pay:"PAY-202512-0060", txn:"TXN-TOSS-9B10C4", type:"포인트 충전", status:"실패", pg:"토스페이먼츠", amt:"₩100,000"} ], "STL-202512-0007": [ {dt:"2025-12-14 10:12:50", pay:"PAY-202512-0033", txn:"TXN-PAYPAL-18D3F2", type:"월 결제(자동)", status:"성공", pg:"PayPal", amt:"$29"}, {dt:"2025-12-03 09:58:12", pay:"PAY-202512-0008", txn:"TXN-STRIPE-2E0A77", type:"포인트 충전", status:"실패", pg:"Stripe", amt:"$50"} ] }; function renderPayLogs(settleId){ var tbody = document.getElementById("md_paylog_tbody"); if (!tbody) return; var rows = payLogs[settleId] || []; if (!rows.length){ tbody.innerHTML = '<tr><td colspan="8" class="text-muted py-4">해당월 결제 로그가 없습니다(샘플).</td></tr>'; return; } var html = ""; for (var i=0; i<rows.length; i++){ var r = rows[i]; html += '' + '<tr>' + ' <td class="fw-semibold">' + (i+1) + '</td>' + ' <td>' + escapeHtml(r.dt) + '</td>' + ' <td class="code-mono">' + escapeHtml(r.pay) + '</td>' + ' <td class="code-mono">' + escapeHtml(r.txn) + '</td>' + ' <td><span class="badge text-bg-light">' + escapeHtml(r.type) + '</span></td>' + ' <td>' + escapeHtml(r.status) + '</td>' + ' <td>' + escapeHtml(r.pg) + '</td>' + ' <td class="text-end">' + escapeHtml(r.amt) + '</td>' + '</tr>'; } tbody.innerHTML = html; } // 상세 버튼 클릭 시 모달 값 채우기(프로토타입) document.addEventListener("click", function(e){ var a = e.target.closest(".js-open-detail"); if (!a) return; e.preventDefault(); var d = a.dataset || {}; setText("md_no", d.no); setText("md_accountid", d.accountid); setText("md_email", d.email); setText("md_title", d.title); setText("md_name", d.name); setText("md_phone", d.phone); setText("md_month", d.month); setText("md_settleid", d.settleid); setText("md_total", d.total); setText("md_fee", d.fee); setText("md_amount", d.amount); setText("md_date", d.date); setText("md_status", d.status); setText("md_bill_status", d.billstatus); setText("md_bill_no", d.billno); setText("md_bill_date", d.billdate); var subtitle = (d.title ? d.title : "-") + " / " + (d.month ? d.month : "-") + " / " + (d.settleid ? d.settleid : "-"); setText("md_subtitle", subtitle); setText("md_paylog_hint", "정산ID: " + (d.settleid || "-")); renderPayLogs(d.settleid || ""); }, false); // 초기 카운트 updateSelCount(); syncChkAll(); })(); </script>
저장
페이지 추가
디렉토리
page (root)
page/account
page/main
page/marketing
page/ops
page/payment
page/product
page/settle
page/site
page/stats
* page/ 하위 1레벨 폴더만 선택
파일명
.html
* 영문 소문자/숫자/_/- 만, 최대 32자
비밀번호