feat: 지정판매소 관리 화면 개선 — 좌우 배치·상세 폼·리스트 정렬·동코드 표시
- 리스트(좌)/상세정보(우) 좌우 배치, 상세를 라벨-값 폼 형태로 변경 - 리스트 컬럼(번호·대표자·상호·구군(동코드)·지정일·구역·상태) + 컬럼별 정렬 - 페이징 제거 → 전체 로드 후 패널 내 스크롤 - 주소로 동 기본코드(D) 산출해 저장·표시(ds_dong_code), 등록 시 주소 선택하면 동코드 표시 - 인쇄·엑셀저장을 관리 화면에도 추가(엑셀에 동코드·지정일 포함) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -115,8 +115,9 @@
|
||||
</div>
|
||||
|
||||
<div class="flex flex-wrap items-center gap-2">
|
||||
<label class="block text-sm font-bold text-gray-700 w-28">구코드</label>
|
||||
<div class="text-sm text-gray-600">해당 지자체(구·군) 코드로 등록 시 자동 설정</div>
|
||||
<label class="block text-sm font-bold text-gray-700 w-28">구·군(동코드)</label>
|
||||
<input type="text" id="ds_dong_display" class="border border-gray-300 rounded px-3 py-1.5 text-sm w-60 bg-gray-100 text-gray-800 cursor-not-allowed" value="" readonly tabindex="-1" placeholder="주소 검색 시 자동 표시"/>
|
||||
<span id="ds_dong_hint" class="text-xs text-gray-500">주소를 검색하면 해당 동코드가 표시됩니다.</span>
|
||||
</div>
|
||||
|
||||
<div class="flex flex-wrap items-center gap-2">
|
||||
@@ -165,3 +166,53 @@
|
||||
'detailFieldName' => 'ds_addr_detail',
|
||||
]) ?>
|
||||
|
||||
<script>
|
||||
(function () {
|
||||
var form = document.getElementById('designated-shop-create-form');
|
||||
if (!form) return;
|
||||
var display = document.getElementById('ds_dong_display');
|
||||
var hint = document.getElementById('ds_dong_hint');
|
||||
var endpoint = new URL('<?= mgmt_url('designated-shops/resolve-address-codes') ?>', window.location.href).pathname;
|
||||
var csrfName = '<?= csrf_token() ?>';
|
||||
|
||||
function setHint(msg, isError) {
|
||||
if (!hint) return;
|
||||
hint.textContent = msg;
|
||||
hint.className = 'text-xs ' + (isError ? 'text-red-600' : 'text-gray-500');
|
||||
}
|
||||
|
||||
// 주소 검색 완료 시 서버에서 동코드 조회 → 표시
|
||||
form.addEventListener('kakao-address-selected', function () {
|
||||
if (display) display.value = '';
|
||||
setHint('동코드 조회 중…', false);
|
||||
|
||||
var body = new URLSearchParams();
|
||||
body.set('addr_search_sido', (form.querySelector('[name="addr_search_sido"]') || {}).value || '');
|
||||
body.set('addr_search_sigungu', (form.querySelector('[name="addr_search_sigungu"]') || {}).value || '');
|
||||
body.set('ds_addr', (form.querySelector('[name="ds_addr"]') || {}).value || '');
|
||||
body.set('ds_addr_jibun', (form.querySelector('[name="ds_addr_jibun"]') || {}).value || '');
|
||||
body.set('ds_zip', (form.querySelector('[name="ds_zip"]') || {}).value || '');
|
||||
var csrfEl = form.querySelector('[name="' + csrfName + '"]');
|
||||
if (csrfEl) body.set(csrfName, csrfEl.value);
|
||||
|
||||
fetch(endpoint, {
|
||||
method: 'POST',
|
||||
headers: { 'X-Requested-With': 'XMLHttpRequest' },
|
||||
body: body
|
||||
})
|
||||
.then(function (r) { return r.json(); })
|
||||
.then(function (d) {
|
||||
if (d && d.ok) {
|
||||
if (display) display.value = d.dong_code + (d.dong_name ? ' (' + d.dong_name + ')' : '');
|
||||
setHint('등록 시 판매소번호에 이 동코드가 반영됩니다.', false);
|
||||
} else {
|
||||
setHint((d && d.error) ? d.error : '동코드를 조회하지 못했습니다.', true);
|
||||
}
|
||||
})
|
||||
.catch(function () {
|
||||
setHint('동코드 조회 중 오류가 발생했습니다.', true);
|
||||
});
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user