초기소스

This commit is contained in:
jazz
2025-10-29 17:08:05 +09:00
parent e531aa9540
commit 439a379a02
7551 changed files with 1234427 additions and 3 deletions

View File

@@ -0,0 +1,320 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="java.util.Date" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui" %>
<%--
Class Name : PrsntC.jsp
Description : 사은품 등록 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
since : 2024.04.15 리브가 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>GC ONE 관리자</title>
<%-- 공통 include --%>
<%@ include file="/WEB-INF/views/comm/mngr/Include.jsp"%>
</head>
<script>
$(document).ready(function () {
});
/* ********************************************************
* 등록 AJAX
******************************************************** */
const fn_regist = function () {
const url = '<c:url value="/mngr/goods/prsnt/insertPrsnt"/>';
if(fn_is_empty($('#goodsNm').val())){
$('#goodsNm').focus()
alert('상품명을 입력해 주세요.')
return;
}
if(fn_is_empty($('input[name="goodsCd"]').val())){
$('input[name="goodsCd"]').focus()
alert('상품코드를 입력해 주세요.')
return;
}
const invntryPolicyCd = $('input[name="invntryPolicyCd"]:checked').val()
if(invntryPolicyCd ==='01' && fn_is_empty($('#invntryQy').val())){
$('#invntryQy').focus()
alert('재고수량을 입력해 주세요')
return;
}
const formData = new FormData();
$('#listForm').serializeArray().forEach(function (item) {
formData.append(item.name, item.value);
});
formData.append('invntryQy',String(fn_comma_del_str_to_number($('#invntryQy').val())))
formData.append('cnsmrpric',String(fn_comma_del_str_to_number($('#cnsmrpric').val())))
//파일데이터
var myDropzone = Dropzone.forElement("#my-dropzone");
let fileAt = 'N';
myDropzone.files.forEach(function (file) {
if(!fn_is_empty(file)){
fileAt='Y'
}
formData.append('files', file); // 서버에서 파일을 받을 때 'files'라는 이름으로 전송
});
//등록된 사진이 없거나 이미지삭제가 아닌경우
if(fn_is_empty($('#sortable div.file-preview__container')) && fileAt==='N'){
alert('사은품 이미지를 등록해주세요');
return false;
}
if (confirm('사은품을 <spring:message code="confirm.common.insert"/>')) {
$.ajax({
type: 'post',
enctype: 'multipart/form-data',
url: url,
data: formData,
contentType: false,
processData: false,
success: function (data) {
let str = JSON.parse(data.resBody.result);
if (str.result == 'success') {
alert('<spring:message code="success.common.insert"/>');
//등록 후 수정화면으로 이동
fn_move_dtl_uptpage(data.resBody.result.replace(/[^0-9]/g, ""));
} else {
alert('<spring:message code="fail.common.insert"/>');
}
}
});
}
};
/* ********************************************************
* 수정폼 이동
******************************************************** */
const fn_move_dtl_uptpage = function (Innb) {
const url = '<c:url value="/mngr/goods/prsnt/selectPrsntDtlForm"/>';
$('#listForm').attr('action', url);
$('#listForm').attr('method', 'get');
$('#pageIndex').val(1);
$('#goodsInnb').val(Innb);
$('#listForm').submit();
}
/* ********************************************************
* 목록 조회
******************************************************** */
const fn_select_list = function () {
const url = '<c:url value="/mngr/goods/prsnt/selectPrsntListForm"/>';
$('#listForm').attr('action', url);
$('#listForm').attr('method', 'post');
$('#listForm').submit();
};
//모든 컴마 삭제 및 문자를 숫자로 변환
const fn_comma_del_str_to_number = function (str) {
// null이나 undefined인 경우 0을 반환
if (str === null || str === undefined || str.trim() === '') {
return 0;
}
// 쉼표를 제거하고 숫자로 변환
const numberWithoutCommas = str.replace(/,/g, '');
const number = parseFloat(numberWithoutCommas);
// 변환된 값이 NaN인 경우 0을 반환
if (isNaN(number)) {
return 0;
}
return number;
}
</script>
<body>
<%@ include file="/WEB-INF/views/comm/mngr/Header.jsp"%>
<main class="main">
<%@ include file="/WEB-INF/views/comm/mngr/Left.jsp"%>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h2 class="page-title__title">사은품 등록</h2>
<div class="page-title__btn-container">
<button onclick="fn_select_list()" onkeypress="this.onclick" class="btn outline"><spring:message code="button.list"/></button>
<button class="btn primary" onclick="fn_regist();"><spring:message code="button.insert"/></button>
</div>
</div>
<form id="listForm" method="post" action="<c:url value="/mngr/goods/prsnt/insertPrsnt"/>" enctype="multipart/form-data">
<section class="content-section content-scroll-detect content-fold">
<spring:eval expression="@environment.getProperty('spring.servlet.multipart.max-file-size')" var="maxFileSize"/>
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.extensions.images')" var="acceptFileExtensions"/>
<div class="content-fold__header">
<h3 class="content-section__title">기본정보</h3>
<button class="content-fold__btn"><span class="visually-hidden">접기</span></button>
</div>
<div class="content-fold__content">
<div class="table-wrapper">
<table class="table">
<caption>사은품</caption>
<colgroup>
<col style="width: 12%;">
<col style="width: 38%;">
<col style="width: 12%;">
<col style="width: 38%;">
</colgroup>
<tbody>
<tr>
<th>상품 명<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text lg" type="text" id="goodsNm" name="goodsNm" title="상품 명" maxlength="35">
</div>
</td>
<th>판매 상태</th>
<td colspan="2">
<div class="td-inner">
<div class="custom-radio-container">
<c:forEach items="${resultMap.goodsDftinfoSttusList}"
var="goodsDftinfoSttus"
varStatus="status">
<div class="custom-radio">
<input type="radio" id="${goodsDftinfoSttus.cd}"
name="goodsSttusCd"
value="${goodsDftinfoSttus.cd}" <c:if test="${status.first}">checked</c:if> >
<label for="${goodsDftinfoSttus.cd}">${goodsDftinfoSttus.cdNm}</label>
</div>
</c:forEach>
</div>
</div>
</td>
</tr>
<tr>
<th>재고에 따른 판매</th>
<td colspan="3">
<div class="td-inner">
<div class="custom-radio-container">
<c:forEach items="${resultMap.goodsDftinfoInvntryPolicyList}"
var="goodsDftinfoInvntryPolicy" varStatus="status">
<div class="custom-radio">
<input type="radio"
id="goodsDftinfoInvntryPolicy${status.count}"
name="invntryPolicyCd"
value="${goodsDftinfoInvntryPolicy.cd}" <c:if test="${status.last}">checked</c:if> >
<label for="goodsDftinfoInvntryPolicy${status.count}">${goodsDftinfoInvntryPolicy.cdNm}</label>
</div>
</c:forEach>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="table-wrapper">
<table class="table vertical draggable">
<colgroup>
<col style="width: auto;">
<col style="width: 20%;">
<col style="width: 30%;">
<col style="width: 30%;">
</colgroup>
<thead>
<tr>
<th>상품코드<span class="red-7">*</span></th>
<th>재고</th>
<th>정가</th>
<th>판매가</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<input class="input-text full" type="text" name="goodsCd" title="상품코드" maxlength="35">
</td>
<td>
<input class="input-text number full" type="text" id="invntryQy" title="재고" maxlength="20">
</td>
<td>
<input class="input-text number full" type="text" id="cnsmrpric" title="정가" maxlength="20">
</td>
<td>
<input class="input-text number full" type="text" name="" title="판매가" maxlength="20" disabled>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</section>
<section class="content-section content-scroll-detect content-fold">
<div class="content-fold__header">
<h3 class="content-section__title">상품 사진</h3>
<button class="content-fold__btn"><span class="visually-hidden">접기</span></button>
</div>
<div class="content-fold__content">
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 12%;">
<col>
</colgroup>
<tbody>
<tr>
<th>사진 등록<span class="red-7">*</span></th>
<td>
<div class="td-inner vertical">
<div class="dropzone-wrapper">
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.extensions.images')" var="acceptFileExtensions"/>
<div class="dropzone" id="my-dropzone">
</div>
<p class="fyi gray-7 mt-15">여러 개의 이미지를 한 번에 등록 가능합니다.</p>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</section>
<!--검색 조건 , 페이징 조건 -->
<input type="hidden" id="goodsInnb" name="goodsInnb" value=""/>
<input type="hidden" id="sopmalCd" name="sopmalCd" value="${resultMap.BOGoodsVO.sopmalCd}"/>
<input type="hidden" id="srchType" name="srchType" title="검색타입" value="<c:out value="${ resultMap.BOGoodsVO.srchType }"/>">
<input type="hidden" id="srchStr" name="srchStr" title="검색어" value="<c:out value="${ resultMap.BOGoodsVO.srchStr }"/>">
<input type="hidden" id="dateDv" name="dateDv" title="검색날짜" value="<c:out value="${ resultMap.BOGoodsVO.dateDv }"/>">
<input type="hidden" id="startDate" name="startDate" title="검색날짜" value="<c:out value="${ resultMap.BOGoodsVO.startDate }"/>">
<input type="hidden" id="endDate" name="endDate" title="검색날짜" value="<c:out value="${ resultMap.BOGoodsVO.endDate }"/>">
<input type="hidden" id="pageIndex" name="pageIndex" value="<c:out value="${ resultMap.BOGoodsVO.pageIndex }"/>"/>
<input type="hidden" id="pageUnit" name="pageUnit" value="<c:out value="${ resultMap.BOGoodsVO.pageUnit }"/>"/>
</form>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,477 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="java.util.Date" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui" %>
<%--
Class Name : PrsntDtlU.jsp
Description : 사은품 상세 조회 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
since : 2024.04.15 리브가 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>GC ONE 관리자</title>
<%-- 공통 include --%>
<%@ include file="/WEB-INF/views/comm/mngr/Include.jsp"%>
<%--등록한 사진 순서 변경 관련 --%>
<script defer src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<style>
#sortable {
display: flex;
list-style-type: none;
padding: 0;
margin: 0;
overflow: hidden;
}
#sortable div.file-preview__container {
display: flex;
flex-direction: column;
align-items: center;
margin-right: 10px;
cursor: move;
transition: transform 0.2s ease;
user-select: none;
}
</style>
</head>
<script>
$(document).ready(function () {
// // 등록한 사진 순서 변경 관련
$("#sortable").sortable({
axis: "x"
});
$("#sortable").disableSelection();
});
/* ********************************************************
* 수정 AJAX
******************************************************** */
const fn_regist = function () {
const url = '<c:url value="/mngr/goods/prsnt/updatePrsntDtl"/>';
if(fn_is_empty($('#goodsNm').val())){
$('#goodsNm').focus()
alert('상품명을 입력해 주세요.')
return;
}
if(fn_is_empty($('input[name="goodsCd"]').val())){
$('input[name="goodsCd"]').focus()
alert('상품코드를 입력해 주세요.')
return;
}
const invntryPolicyCd = $('input[name="invntryPolicyCd"]:checked').val()
if(invntryPolicyCd ==='01' && fn_is_empty($('#invntryQy').val())){
$('#invntryQy').focus()
alert('재고수량을 입력해 주세요')
return;
}
const formData = new FormData();
const listForm = document.getElementById('listForm')
// '#invntryQy' 입력란에서 콤마 제거
let invntryQyValue = $('#invntryQy').val();
$('#invntryQy').val(invntryQyValue.replace(/,/g, ''));
// '#cnsmrpric' 입력란에서 콤마 제거
let cnsmrpricValue = $('#cnsmrpric').val();
$('#cnsmrpric').val(cnsmrpricValue.replace(/,/g, ''));
//선택한 재고정책
const choiceInvntryPolicyCd = $('input[name="invntryPolicyCd"]:checked').val()
const prevInvntryPolicyCd = $('#invntryPolicyCdAsIs').val()
//재고에 따른 판매(재고정책)가 수정되었을 경우
if(choiceInvntryPolicyCd !== prevInvntryPolicyCd){
alert('재고정책 변경에 따라 판매가능재고수량을 초기화합니다.')
fn_create_input('hidden', 'usefulInvntryQyInit','Y', listForm)
}
//추가한 이미지 정보
// 파일데이터 , 이미지 append
var myDropzone = Dropzone.forElement("#my-dropzone");
let fileAt = 'N';
myDropzone.files.forEach(function (file) {
if(!fn_is_empty(file)){
fileAt='Y'
}
});
//등록된 사진이 없거나 이미지삭제가 아닌경우
if(fn_is_empty($('#hiddenForm_del_img')) && fn_is_empty($('#sortable div.file-preview__container')) && fileAt==='N'){
alert('사은품 이미지를 등록해주세요');
return false;
}
//삭제 이미지 정보
let deleteImgId = $('#hiddenForm_del_img').find('input[name="deleteImgId"]');
let cutNb = $('#hiddenForm_del_img').find('input[name="cutNb"]');
deleteImgId.each(function (idx) {
fn_create_input('hidden', 'delGoodsImageVOList['+idx+'].delGoodsImgInnb', deleteImgId.eq(idx).val(), listForm)
fn_create_input('hidden', 'delGoodsImageVOList['+idx+'].cutNb', cutNb.eq(idx).val(), listForm)
fn_create_input('hidden', 'delGoodsImageVOList['+idx+'].goodsInnb', parseInt($('#goodsInnb').val()) , listForm)
fn_create_input('hidden', 'delGoodsImageVOList['+idx+'].sopmalCd', $('#sopmalCd').val(), listForm)
})
//등록된 이미지
$('#sortable div.file-preview__container').each(function (idx) {
fn_create_input('hidden', 'goodsImageVOList['+idx+'].goodsImgInnb', $(this).find('input[name="goodsImgInnb"]').val(), listForm)
fn_create_input('hidden', 'goodsImageVOList['+idx+'].cutNb', $(this).find('input[name="cutNb"]').val(), listForm)
})
//파일데이터
if(fileAt==='Y'){
myDropzone.files.forEach(function (file) {
formData.append('files', file); // 서버에서 파일을 받을 때 'files'라는 이름으로 전송
});
}
$('#listForm').serializeArray().forEach(function (item) {
formData.append(item.name, item.value);
});
if (confirm('사은품을 <spring:message code="confirm.common.update"/>')) {
$.ajax({
type: 'post',
enctype: 'multipart/form-data',
url: url,
data: formData,
contentType: false,
processData: false,
success: function (data) {
let str = JSON.parse(data.resBody.result);
if (str.result == 'success') {
alert('<spring:message code="success.common.update"/>');
window.location.reload();
} else {
alert('<spring:message code="fail.common.update"/>');
}
}
});
}
};
/* ********************************************************
* 수정폼 이동
******************************************************** */
const fn_move_dtl_uptpage = function (Innb) {
const url = '<c:url value="/mngr/goods/prsnt/selectPrsntDtlForm"/>';
$('#listForm').attr('action', url);
$('#listForm').attr('method', 'get');
$('#pageIndex').val(1);
$('#goodsInnb').val(Innb);
$('#listForm').submit();
}
/* ********************************************************
* 목록 조회
******************************************************** */
const fn_select_list = function () {
const url = '<c:url value="/mngr/goods/prsnt/selectPrsntListForm"/>';
// '#invntryQy' 입력란에서 콤마 제거
let invntryQyValue = $('#invntryQy').val();
$('#invntryQy').val(invntryQyValue.replace(/,/g, ''));
// '#cnsmrpric' 입력란에서 콤마 제거
let cnsmrpricValue = $('#cnsmrpric').val();
$('#cnsmrpric').val(cnsmrpricValue.replace(/,/g, ''));
$('#listForm').attr('action', url);
$('#listForm').attr('method', 'post');
$('#listForm').submit();
};
//삭제된 이미지 번호 저장 폼
let hiddenForm_del_img = document.createElement('form');
hiddenForm_del_img.name = 'hiddenForm_del_img';
hiddenForm_del_img.id = 'hiddenForm_del_img';
hiddenForm_del_img.method = 'post';
hiddenForm_del_img.action = '';
//삭제 상품이미지 정보
const deleteFileImg = function (obj) {
const rmImg = $(obj).siblings('div.file-preview__image')
const rmImgId = rmImg.children('input[name="goodsImgInnb"]').val()
const cutNb = rmImg.children('input[name="cutNb"]').val()
fn_create_input('hidden', "deleteImgId", rmImgId, hiddenForm_del_img);
fn_create_input('hidden', "cutNb", cutNb, hiddenForm_del_img);
document.body.append(hiddenForm_del_img);
$(obj).parent('div.file-preview').parent('div.file-preview__container').remove()
}
const fn_create_input = function (type, name, value, tgtForm) {
const input = document.createElement('input');
input.setAttribute("type", type);
input.setAttribute("name", name);
input.setAttribute("value", value);
tgtForm.appendChild(input);
}
</script>
<body>
<%@ include file="/WEB-INF/views/comm/mngr/Header.jsp"%>
<main class="main">
<%@ include file="/WEB-INF/views/comm/mngr/Left.jsp"%>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h2 class="page-title__title">사은품 수정</h2>
<div class="page-title__btn-container">
<button onclick="fn_select_list()" onkeypress="this.onclick" class="btn outline"><spring:message
code="button.list"/></button>
<button class="btn primary" onclick="fn_regist();"><spring:message code="button.update"/></button>
</div>
</div>
<form id="listForm" method="post" action="" enctype="multipart/form-data">
<spring:eval expression="@environment.getProperty('spring.servlet.multipart.max-file-size')" var="maxFileSize"/>
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.extensions.images')" var="acceptFileExtensions"/>
<section class="content-section content-scroll-detect content-fold">
<input type="hidden" id="goodsInnb" name="goodsInnb" value="${resultMap.list.goodsInnb}"/>
<input type="hidden" id="goodsOptnInnb" name="goodsOptnInnb" value="${resultMap.list.goodsOptnInnb}"/>
<input type="hidden" id="sopmalCd" name="sopmalCd" value="${resultMap.list.sopmalCd}"/>
<input type="hidden" id="optnVal1" name="optnVal1" value="${resultMap.list.optnVal1}"/>
<input type="hidden" id="optnCd1" name="optnCd1" value="${resultMap.list.optnCd1}"/>
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.cdnurl')" var="cdnurl"/>
<div class="content-fold__header">
<h3 class="content-section__title">기본정보</h3>
<button class="content-fold__btn"><span class="visually-hidden">접기</span></button>
</div>
<div class="content-fold__content">
<div class="table-wrapper">
<table class="table">
<caption>사은품</caption>
<colgroup>
<col style="width: 12%;">
<col style="width: 38%;">
<col style="width: 12%;">
<col style="width: 38%;">
</colgroup>
<tbody>
<tr>
<th>상품 명<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text lg" type="text" id="goodsNm" name="goodsNm"
title="상품 명" maxlength="35" value="${resultMap.list.goodsNm}">
</div>
</td>
<th>판매 상태</th>
<td colspan="2">
<div class="td-inner">
<div class="custom-radio-container">
<c:forEach items="${resultMap.goodsDftinfoSttusList}"
var="goodsDftinfoSttus" varStatus="status">
<div class="custom-radio">
<input type="radio" id="${goodsDftinfoSttus.cd}"
name="goodsSttusCd" value="${goodsDftinfoSttus.cd}"
<c:if test="${goodsDftinfoSttus.cd eq resultMap.list.goodsSttusCd}">checked</c:if>>
<label for="${goodsDftinfoSttus.cd}">${goodsDftinfoSttus.cdNm}</label>
</div>
</c:forEach>
</div>
</div>
</td>
</tr>
<tr>
<th>재고에 따른 판매</th>
<td colspan="3">
<div class="td-inner">
<div class="custom-radio-container">
<c:forEach items="${resultMap.goodsDftinfoInvntryPolicyList}"
var="goodsDftinfoInvntryPolicy" varStatus="status">
<div class="custom-radio">
<input type="radio"
id="goodsDftinfoInvntryPolicy${status.count}"
name="invntryPolicyCd"
value="${goodsDftinfoInvntryPolicy.cd}"
<c:if test="${goodsDftinfoInvntryPolicy.cd eq resultMap.list.invntryPolicyCd}">checked</c:if>>
<label for="goodsDftinfoInvntryPolicy${status.count}">${goodsDftinfoInvntryPolicy.cdNm}</label>
<input type="hidden" id="invntryPolicyCdAsIs" value="${resultMap.list.invntryPolicyCd}"/>
</div>
</c:forEach>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="table-wrapper">
<table class="table vertical draggable">
<colgroup>
<col style="width: auto;">
<col style="width: 20%;">
<col style="width: 20%;">
<col style="width: 20%;">
<col style="width: 20%;">
</colgroup>
<thead>
<tr>
<th>상품코드<span class="red-7">*</span></th>
<th>재고</th>
<th>가용 재고</th>
<th>정가</th>
<th>판매가</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<input class="input-text full" type="text" id="goodsCd" name="goodsCd" value="${resultMap.list.goodsCd}" />
</td>
<td>
<input class="input-text number full" type="text" id="invntryQy" name="invntryQy" title="재고" maxlength="10" value="${resultMap.list.invntryQy}">
</td>
<td>
<input class="input-text full" type="text" title="가용 재고" maxlength="10" value="${resultMap.list.ableQy}" readonly>
</td>
<td>
<input class="input-text number full" type="text" id="cnsmrpric" name="cnsmrpric" title="정가" maxlength="10" value="${resultMap.list.cnsmrpric}">
</td>
<td>
<input class="input-text full" type="text" name="" title="판매가" maxlength="20" disabled>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</section>
<section class="content-section content-scroll-detect content-fold">
<div class="content-fold__header">
<h3 class="content-section__title">상품 사진</h3>
<button class="content-fold__btn"><span class="visually-hidden">접기</span></button>
</div>
<div class="content-fold__content">
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 12%;">
<col>
</colgroup>
<tbody>
<tr>
<th>사진 등록<span class="red-7">*</span></th>
<td>
<div class="td-inner vertical">
<div class="dropzone-wrapper">
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.extensions.images')" var="acceptFileExtensions"/>
<div class="dropzone" id="my-dropzone">
</div>
<p class="fyi gray-7 mt-15">여러 개의 이미지를 한 번에 등록 가능합니다.</p>
</div>
</div>
</td>
</tr>
<tr>
<th>등록한 사진</th>
<td>
<div class="td-inner" id="sortable">
<c:if test="${not empty resultMap.imglist}">
<c:forEach items="${resultMap.imglist}" var="img" varStatus="status">
<c:if test="${img.imgKnd eq '02'}">
<div class="file-preview__container">
<div class="file-preview">
<span class="file-preview__number"></span>
<button class="file-preview__delete" id="file-preview__delete" onclick="deleteFileImg(this)">
<span class="visually-hidden">삭제</span></button>
<div class="file-preview__image">
<img src="<c:out value="${cdnurl}${img.img}"/>" alt="상품 이미지" onerror="this.src='/mngr/images/image_placeholder.png'" >
<input type="hidden" name="goodsImgInnb" value="${img.goodsImgInnb}"/>
<input type="hidden" name="imgKnd" value="${img.imgKnd}"/>
<input type="hidden" name="cutNb" value="${img.cutNb}"/>
</div>
</div>
</div>
</c:if>
</c:forEach>
</c:if>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</section>
<section class="content-section content-scroll-detect content-fold">
<div class="content-fold__header">
<h3 class="content-section__title">변경 내역</h3>
<button class="content-fold__btn"><span class="visually-hidden">접기</span></button>
</div>
<div class="content-fold__content">
<div class="change-log">
<c:if test="${not empty resultMap.list}">
<p class="change-log__list" align="left">
<span class="change-log__date"><c:out value="${resultMap.list.updtDt}"/></span>
<span class="change-log__description">관리자 <c:out
value="${resultMap.list.mngrNm}"/>님 (이)가 </span> 사은품의 정보를 수정하였습니다.
</p>
</c:if>
<c:if test="${ empty resultMap.list}">
<p class="change-log__list">변경 내역이 없습니다.</p>
</c:if>
</div>
</div>
</section>
<!--검색 조건 , 페이징 조건 -->
<input type="hidden" id="srchType" name="srchType" title="검색타입" value="<c:out value="${ resultMap.BOGoodsVO.srchType }"/>">
<input type="hidden" id="srchStr" name="srchStr" title="검색어" value="<c:out value="${ resultMap.BOGoodsVO.srchStr }"/>">
<input type="hidden" id="dateDv" name="dateDv" title="검색날짜" value="<c:out value="${ resultMap.BOGoodsVO.dateDv }"/>">
<input type="hidden" id="startDate" name="startDate" title="검색날짜" value="<c:out value="${ resultMap.BOGoodsVO.startDate }"/>">
<input type="hidden" id="endDate" name="endDate" title="검색날짜" value="<c:out value="${ resultMap.BOGoodsVO.endDate }"/>">
<input type="hidden" id="pageIndex" name="pageIndex" value="<c:out value="${ resultMap.BOGoodsVO.pageIndex }"/>"/>
<input type="hidden" id="pageUnit" name="pageUnit" value="<c:out value="${ resultMap.BOGoodsVO.pageUnit }"/>"/>
</form>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,145 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui" %>
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld" %>
<%--
Class Name : PrsntListR.jsp
Description : 사은품 조회 리스트
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-04-11 리브가 최초 생성
--%>
<section class="content-section">
<div class="form-control-container">
<div class="left">
<div class="search-number">
<span class="search-number__text">총 <strong><c:out value="${ resultMap.paginationInfo.totalRecordCount }"/></strong>건</span>
</div>
</div>
<div class="center">
</div>
<div class="right">
<div class="select-box">
<select title="정렬순" name="sortDv" id="sortDv" onchange="fn_select_list(1);return false;">
<option value="goodsNmAsc" <c:if test="${resultMap.BOGoodsVO.sortDv eq 'goodsNmAsc'}">selected="selected"</c:if>>상품명 오름차순</option>
<option value="goodsNmDesc" <c:if test="${resultMap.BOGoodsVO.sortDv eq 'goodsNmDesc'}">selected="selected"</c:if>>상품명 내림차순</option>
<option value="slepricAsc" <c:if test="${resultMap.BOGoodsVO.sortDv eq 'slepricAsc'}">selected="selected"</c:if>>정가 오름차순</option>
<option value="slepricDesc" <c:if test="${resultMap.BOGoodsVO.sortDv eq 'slepricDesc'}">selected="selected"</c:if>>정가 내림차순</option>
<option value="invntryQyAsc" <c:if test="${resultMap.BOGoodsVO.sortDv eq 'invntryQyAsc'}">selected="selected"</c:if>>재고 오름차순</option>
<option value="invntryQyDesc" <c:if test="${resultMap.BOGoodsVO.sortDv eq 'invntryQyDesc'}">selected="selected"</c:if>>재고 내림차순</option>
<option value="registDtAsc" <c:if test="${resultMap.BOGoodsVO.sortDv eq 'registDtAsc'}">selected="selected"</c:if>>등록일순 오름차순</option>
<option value="registDtDesc" <c:if test="${resultMap.BOGoodsVO.sortDv eq 'registDtDesc' || resultMap.BOGoodsVO.sortDv eq null}">selected="selected"</c:if>>등록일순 내림차순</option>
</select>
</div>
<div class="select-box">
<select id="pageUnit" name="pageUnit" title="페이지당 출력될 목록건수" onchange="fn_select_list(1);">
<c:forEach items="${ resultMap.paginationInfo.pageUnitArr }" var="pageUnit"
varStatus="pageUnitStatus">
<option value="<c:out value="${ pageUnit }"/>"
<c:if test="${ resultMap.paginationInfo.recordCountPerPage eq pageUnit}">selected="selected"</c:if>>
<c:out value="${ pageUnit }"/>개씩
</option>
</c:forEach>
</select>
</div>
</div>
</div>
<hr class="horizontal-line">
<div class="form-control-container">
<div class="left">
<button class="btn outline sm" onclick="fn_delete_check();" >선택 삭제</button>
</div>
<div class="center">
</div>
</div>
<hr class="spacing">
<div class="table-wrapper">
<table class="table vertical">
<caption>사은품 조회</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 4%;">
<col style="width: 4%;">
<col style="width: 7%;">
<col style="width: auto;">
<col style="width: 7%;">
<col style="width: 7%;">
<col style="width: 7%;">
<col style="width: 14%;">
<col style="width: 6%;">
<col style="width: 7%;">
</colgroup>
<thead>
<tr>
<th>
<label class="b-checkbox checkbox is-medium">
<input type="checkbox" id="checkAll" value="">
<span class="check"></span>
</label>
</th>
<th>번호</th>
<th colspan="2">상품명</th>
<th>정가</th>
<th>판매가</th>
<th>재고</th>
<th>등록일/수정일</th>
<th>판매상태</th>
<th>관리</th>
</tr>
</thead>
<tbody>
<c:choose>
<c:when test="${ not empty resultMap.list }">
<c:forEach items="${ resultMap.list }" var="list" varStatus="status">
<tr>
<td>
<label class="b-checkbox checkbox is-medium">
<input type="checkbox" name="goodsInnbChk" class="goodsInnb" value="${list.goodsInnb},${list.sopmalCd}">
<span class="check"></span>
</label>
</td>
<td><c:out value="${ resultMap.paginationInfo.totalRecordCount - list.rnum + 1 }" /></td>
<td>
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.cdnurl')" var="cdnurl"/>
<img src="<c:out value="${cdnurl}${list.goodsImgCours}"/> " onerror="this.src='<c:url value="/mngr/images/image_placeholder.png"/>'" alt="${list.goodsNm}" width="56" height="56">
</td>
<td><a class="under-line" onclick="fn_move_goods_dtl_common(<c:out value="${list.goodsInnb}"/>, 'mngr','02','_self')">${list.goodsNm}</a>
</td>
<td>${list.cnsmrpric}</td>
<td>${list.slepric}</td>
<td>${list.invntryQy}</td>
<td>
<span>${list.registDt}</span>
<br>
<span>${list.updtDt}</span>
</td>
<td>${list.goodsSttusNm}</td>
<td>
<div class="manage-btn-container">
<button class="btn xsm primary outline" type="button" onclick="fn_move_goods_dtl_common(<c:out value="${list.goodsInnb}"/>, 'mngr','02', '_self')">
<spring:message code="button.update"/></button>
</div>
</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="100%"><spring:message code="common.nodata"/></td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
</div>
</section>
<div class="pagination__container">
<ui:pagination paginationInfo="${resultMap.paginationInfo}" type="image" jsFunction="fn_select_list"/>
</div>

View File

@@ -0,0 +1,796 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui" %>
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld" %>
<%--
Class Name : PrsntListRForm.jsp
Description : 사은품 조회 폼
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-04-11 리브가 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>GC ONE 통합 관리자</title>
<%-- 공통 include --%>
<%@ include file="/WEB-INF/views/comm/mngr/Include.jsp"%>
</head>
<script>
let goodsDftinfoArr = [];
$(document).ready(function () {
let pageIndex = '<c:out value="${ resultMap.BOGoodsVO.pageIndex }"/>';
let pageUnit = '<c:out value="${ resultMap.BOGoodsVO.pageUnit }"/>';
fn_select_list(pageIndex, pageUnit);
$('#listForm').on('keydown', function (event) {
if (event.keyCode === 13) {
event.preventDefault();
fn_select_list(1);
}
});
fn_event();
});
//판매상태 체크 검색
$(document).on('click','input[name="goodsDftinfoArr"]' , function() {
// 체크된 체크박스의 값을 배열에 추가
if(!goodsDftinfoArr.some(item => item === $(this).val())){
goodsDftinfoArr.push($(this).val());
}else{
//체크된 값이 있으면 제거
for(let i = 0; i < goodsDftinfoArr.length; i++) {
if (goodsDftinfoArr[i] === $(this).val()) {
goodsDftinfoArr.splice(i, 1);
}
}
}
// 조건 확인 및 배열 초기화
if (goodsDftinfoArr.includes("") ||
(goodsDftinfoArr.includes("01") && goodsDftinfoArr.includes("02") && goodsDftinfoArr.includes("03"))) {
goodsDftinfoArr = []; // 배열 초기화
}
});
/* ********************************************************
* 목록 조회
******************************************************** */
const fn_select_list = function (pageIndex, pageUnit) {
let dataStr;
if(goodsDftinfoArr.length !==0){
for( let value of goodsDftinfoArr ){
$('#listForm').append(
$('<input>', {
'type': 'hidden',
'name': 'goodsDftinfoSttus',
'value': value
})
)
}
}
if (!pageIndex) {
$('#pageIndex').val(1);
} else {
$('#pageIndex').val(pageIndex);
}
if (!pageUnit) {
dataStr = $('#listForm').serialize();
} else {
if ($('#pageUnit').length) {
$('#pageUnit').val(pageUnit);
dataStr = $('#listForm').serialize();
} else {
dataStr = $('#listForm').serialize() + '&pageUnit=' + pageUnit;
}
}
$.ajax({
type: "post",
url: "<c:url value="/mngr/goods/prsnt/selectPrsntList"/>",
data: dataStr,
success: function (resultHtml) {
$('#pageDiv').html(resultHtml);
$('#pageUnit').niceSelect();
$('#sortDv').niceSelect();
}
});
}
/* ********************************************************
* 등록폼 이동
******************************************************** */
const fn_move_regpage = function () {
const url = '<c:url value="/mngr/goods/prsnt/insertPrsntForm"/>';
$('#listForm').attr('action', url);
$('#listForm').attr('method', 'post');
$('#listForm').submit();
};
/* ********************************************************
* 수정폼 이동
******************************************************** */
const fn_move_dtl_uptpage = function (Innb) {
const url = '<c:url value="/mngr/goods/prsnt/selectPrsntDtlForm"/>';
$('#listForm').attr('action', url);
$('#listForm').attr('method', 'get');
$('#goodsInnb').val(Innb);
$('#listForm').submit();
}
history.replaceState({}, null, location.pathname);
const fn_event = function () {
/* ****************************
* 공통
******************************/
/* input 숫자만 입력 */
$(document).on('input', '.number-only', function () {
$(this).val(($(this).val().replace(/[^0-9]/g, '')).replace(/^0+/, ''));
});
/* 목록 > 전체선택 체인지 이벤트 */
$(document).on('change', '#checkAll', function() {
let checkbox = $(this).closest('table').find('input[name="goodsInnbChk"]');
$(checkbox).prop('checked', false);
$(checkbox).prop('checked', $(this).is(':checked'));
});
/* ****************************
* 공통
******************************/
/* ****************************
* STEP1. 구매자 시작
******************************/
/* 관리자 주문 > 구매자조회 > 선택 버튼 클릭 이벤트 */
$('input:radio[name="mbrDvCd"]').on('click', function () {
const mbrDvCd = $(this).val();
const isNonMbr = '02' == mbrDvCd;
if (isNonMbr) {
localStorage.removeItem('purchsr');
fn_set_apply_purchsr();
$('input:radio[name="ordrTy"][value="01"]').trigger('click');
}
$('#ordrrInfo').css('display', isNonMbr ? 'block' : 'none');
$('#ordrTyCategory').css('display', isNonMbr ? 'none' : 'block');
});
/* 관리자 주문 > 구매자조회 > 선택 버튼 클릭 이벤트 */
$('#btnChoiceMbr').on('click', function () {
$('input:radio[name="mbrDvCd"][value="01"]').trigger('click');
fn_go_purchsr_popup();
});
/* 관리자 주문 > 구매자조회 > 검색조건 > 초기화 선택 이벤트 */
$(document).on('click', '#initPurchsrCond', function () {
fn_reset_form('purchsrCondForm');
$('#user-select-pop').find('.dateRange-btn').filter('#allDays').trigger('click');
});
/* 관리자 주문 > 상품조회 > 검색조건 > 검색 선택 이벤트 */
$(document).on('click', '#searchPurchsr', function () {
fn_get_purchsr_list(1);
});
/* ****************************
* STEP1. 구매자 종료
******************************/
/* ****************************
* STEP2. 상품 시작
******************************/
/* 관리자 주문 > 상품선택 버튼 클릭 이벤트 */
$('#btnChoiceGoods').on('click', function () {
const mbrInnb = fn_get_mbr_innb();
const isPurchsr = $('input:radio[name="mbrDvCd"]:checked').val() == '01' ? true : false;
if (isPurchsr && fn_is_empty(mbrInnb)) {
alert('구매자를 선택 하세요.');
return false;
}
fn_go_goods_popup(mbrInnb);
});
/* 관리자 주문 > 상품조회 > 검색조건 > 카테고리 선택 이벤트 */
$(document).on('change', '.ctgry', function () {
const upperCtgryId = $(this).val(); // 상위카테고리
const currCtgryDepth = $(this).attr('id').replace('ctgryDepth', '');
const targetDepth = (parseInt(currCtgryDepth) + 1);
const targetCtgryId = 'ctgryDepth' + targetDepth;
if (fn_is_empty(upperCtgryId)) {
for (let i = targetDepth; i < 5; i++) {
$('#search-section').find('#ctgryDepth' + i).empty().append('<option value="">' + i + '차 카테고리</option>').niceSelect('update');
}
} else {
fn_get_goods_ctgry(upperCtgryId, targetCtgryId);
}
$('#search-section').find('#ctgryId').val(upperCtgryId);
});
/* 관리자 주문 > 상품조회 > 검색조건 > 날짜 선택 이벤트 */
$(document).on('click', '.dateRange-btn', function () {
const date = $(this).attr('id');
$('.dateRange-btn').removeClass('selected');
$('#' + date).addClass('selected');
const datepicker = $(this).closest('.td-inner').find('.datepicker');
const start = $(datepicker[0]).attr('id');
const end = $(datepicker[1]).attr('id');
if ('allDays' === date) {
$('#' + start + ', #' + end).val('');
$('#datePeriod').val(date);
return false;
}
fn_set_date(start, end, end, date);
$('#datePeriod').val(date);
});
/* 관리자 주문 > 상품조회 > 검색조건 > 초기화 선택 이벤트 */
$(document).on('click', '#resetBtn', function () {
fn_reset_form('search-section');
const popup = $('#search-section');
$(popup).find('#ctgryDepth1').val('').trigger('change');
if(!$('#goodsDftinfo-all').prop('checked')){
$('#goodsDftinfo-all').click()
}
$(popup).find('.dateRange-btn').filter('#allDays').trigger('click');
fn_select_list(1);
});
/* 관리자 주문 > 상품조회 > 검색조건 > 검색 선택 이벤트 */
$(document).on('click', '#searchGoods', function () {
fn_get_goods_list(1);
});
/* 관리자 주문 > 상품조회 > 옵션선택 > 일반 옵션(추가) 선택 이벤트 */
$(document).on('change', '[id*="nomalOptn"], [id*="addOptn"]', function () {
const goodsOptnInnbs = $(this).val();
if (!fn_is_empty(goodsOptnInnbs)) {
const goodsInnb = $(this).closest('form').find('#goodsInnb').val();
fn_get_goods_nomal_optn(goodsInnb, goodsOptnInnbs);
}
});
/* 관리자 주문 > 상품조회 > 옵션선택 > 재고 옵션 선택 이벤트 */
$(document).on('change', '[id*="stockOptn"]', function () {
const optnId = $(this).attr('id');
const optnVal = $(this).val();
const targetDepth = (parseInt(optnId.replace('stockOptn', '')) + 1);
const targetOptnId = 'stockOptn' + targetDepth;
if (!fn_is_empty(optnVal)) {
const goodsInnb = $(this).closest('form').find('#goodsInnb').val();
const goodsOptnInnbs = optnVal.split('|');
fn_get_goods_stock_optn_list(goodsInnb, goodsOptnInnbs, optnId, targetOptnId);
} else {
for (let i = targetDepth; i < 5; i++) {
const name = $('#option-select-pop').find('#optn' + i + ' option:first').text();
$('#option-select-pop').find('#optn' + i).empty().append('<option value="">' + name + '</option>').niceSelect('update');
}
}
});
/* 관리자 주문 > 상품조회 > 옵션선택 > 옵션 삭제 선택 이벤트 */
$(document).on('click', '[id*="delete-optn-"]', function () {
const optnDiv = $(this).attr('id').replace('delete-', '');
$('.' + optnDiv).remove();
fn_set_choice_goods_optn_total_price();
})
/* 관리자 주문 > 상품조회 > 옵션선택 > 옵션 수량 선택 이벤트 */
$(document).on('click', '[id*="optn-qy-"]', function () {
const div = $(this).closest('.product-count');
const calcDv = $(this).attr('id').replace('optn-qy-', '')
const slepric = parseInt($(div).find('.slepric').val());
let qy = parseInt($(div).find('.qy').val());
if ('plus' === calcDv) {
qy = qy + 1;
} else {
qy = qy - 1;
}
qy = qy < 1 ? 1 : qy;
const optnPric = slepric * qy;
$(div).find('.qy').val(qy);
$(div).find('.subSlepric').val(optnPric);
$(div).find('.optn-qy').empty().text(qy);
$(div).find('.sub-slepric').empty().text(optnPric.toLocaleString());
fn_set_choice_goods_optn_total_price();
})
/* 관리자 주문 > 상품조회 > 옵션선택 > 옵션 선택 이벤트 */
$(document).on('click', '#btnChoiceOption', function () {
const form = $(this).closest('form');
const goodsInnb = $(form).find('#goodsInnb').val();
const div = $(form).find('.product-count');
if (div.length === 0) {
alert('상품을 선택해 주십시요.')
return false;
}
const mbrDvCd = $('input:radio[name="mbrDvCd"]:checked').val();
const mbrInnb = fn_get_mbr_innb();
let options = new Array();
$(div).each(function () {
const goodsOptnInnb = $(this).find('.goodsOptnInnb').val();
const qy = $(this).find('.qy').val();
const inputOptn = $(this).find('.inputOptn').val();
let option = {
'goodsInnb': goodsInnb,
'goodsOptnInnb': goodsOptnInnb,
'qy': qy,
'mbrDvCd': mbrDvCd,
'mbrInnb': mbrInnb,
'inputOptn': inputOptn
}
options.push(option);
});
fn_get_choice_order_goods(options)
})
/* 관리자 주문 > 상품조회 > 옵션선택 > 주문상품 할인내역 팝업 */
$(document).on({
mouseover: function () {
const index = $(this).attr('data-hoverbox');
const selectedHoverContent = $('#' + index).show();
const left = $(this).offset().left;
const top = $(this).offset().top;
const width = $(this).width();
const height = $(this).height();
selectedHoverContent.css({
left: left + width + 10,
top: top + height / 2 - selectedHoverContent.height() / 2,
});
},
mouseleave: function () {
$('.hover-box-content').hide();
}
}, '.hover-box-trigger');
/* 관리자 주문 > 상품조회 > 옵션선택 > 옵션 선택 이벤트 */
$(document).on('click', '#applyGoods', function () {
const tbody = $('#product-select-pop').find('#choiceGoods');
const mbrDvCd = $('input:radio[name="mbrDvCd"]:checked').val();
const mbrInnb = fn_get_mbr_innb();
let goodsList = new Array();
$(tbody).find('tr').each(function () {
const goodsInnb = $(this).find('.goodsInnb').val();
const goodsOptnInnb = $(this).find('.goodsOptnInnb').val();
const qy = $(this).find('.qy').val();
const inputOptn = $(this).find('.inputOptn').val();
let goods = {
'goodsInnb': goodsInnb,
'goodsOptnInnb': goodsOptnInnb,
'qy': qy,
'mbrDvCd': mbrDvCd,
'mbrInnb': mbrInnb,
'inputOptn': inputOptn
}
goodsList.push(goods);
});
fn_get_apply_goods_list(goodsList, null);
});
/* 관리자 주문 > 상품조회 > 적용 쿠폰 목록 선택 이벤트 */
$(document).on('change', '.useCoupons', function () {
const tbody = $('#orderGoodsList');
const mbrDvCd = $('input:radio[name="mbrDvCd"]:checked').val();
const goodsTr = $(this).closest('tr').prev();
const useGoodsInnb = $(goodsTr).find('.goodsInnb').val();
const useGoodsOptnInnb = $(goodsTr).find('.goodsOptnInnb').val();
const option = $('option:selected', this);
const dplctDscntAt = $(option).attr('dplct-dscnt-at');
const otrCouponSmtmUseAt = $(option).attr('otr-coupon-smtm_use-at');
const couponInnb = $(option).attr('coupon-innb');
const dwldCouponInnb = $(this).val();
const mbrInnb = fn_get_mbr_innb();
if ('Y' == otrCouponSmtmUseAt) {
if (!confirm('본 쿠폰은 다른 쿠폰과 함께 사용할 수 없는 단독사용쿠폰입니다.\n적용하시겠습니까?')) {
return false;
}
}
let isNonDwldCoupon = 'N' == dplctDscntAt ? '|' + couponInnb + '-' + dwldCouponInnb : '';
let goodsList = new Array();
$(tbody).find('.ordrGoods').each(function () {
const goodsInnb = $(this).find('.goodsInnb').val();
const goodsOptnInnb = $(this).find('.goodsOptnInnb').val();
const qy = $(this).find('.qy').val();
const inputOptn = $(this).find('.inputOptn').val();
const usedCoupons = 'Y' != otrCouponSmtmUseAt ? $(this).find('.usedCoupons').val() : '';
const seleced = useGoodsInnb == goodsInnb && useGoodsOptnInnb == goodsOptnInnb ? true : false;
let goods = {
'goodsInnb': goodsInnb,
'goodsOptnInnb': goodsOptnInnb,
'qy': qy,
'mbrDvCd': mbrDvCd,
'mbrInnb': mbrInnb,
'inputOptn': inputOptn,
'couponInnb': seleced ? couponInnb : '',
'dwldCouponInnb': seleced ? dwldCouponInnb : '',
'dplctDscntAt': seleced ? dplctDscntAt : '',
'otrCouponSmtmUseAt': seleced ? otrCouponSmtmUseAt : '',
'usedCoupons': 'N' == dplctDscntAt ? usedCoupons.replaceAll(isNonDwldCoupon, '') : usedCoupons
}
goodsList.push(goods);
});
fn_get_apply_goods_list(goodsList, $(this));
});
/* ****************************
* STEP2. 상품 종료
******************************/
}
/* 관리자 주문 > 상품조회 > 카테고리 목록 조회 */
const fn_get_goods_ctgry = function(upperCtgryId, targetCtgryId) {
$.ajax({
type : 'post',
url : '<c:url value="/crm/ordr/selectGoodsCategoryList"/>',
data : {
'upperCtgryId': upperCtgryId
},
success : function(data) {
if (data.resBody != null) {
const result = JSON.parse(data.resBody.result);
const goodsCategoryList = result.goodsCategoryList;
if (goodsCategoryList.length > 0) {
for (let i=0; i < goodsCategoryList.length; i++) {
const goodsCategory = goodsCategoryList[i];
$('#search-section').find('#' + targetCtgryId).append('<option value="' + goodsCategory.ctgryId + '">' + goodsCategory.ctgryNm + '</option>');
}
$('#search-section').find('#' + targetCtgryId).niceSelect('update');
}
}
},
error: function(data) {
fn_proc_error_message(data);
}
});
}
/* 관리자 주문 > 상품조회 > 상품 목록 조회 */
const fn_get_goods_list = function(pageIndex) {
const popup = $('#product-select-pop');
$(popup).find('#pageIndex').val(pageIndex);
$.ajax({
type : 'post',
url : '<c:url value="/mngr/goods/goodsmngr/selectGoodsList"/>',
data : $(popup).find('#goodsCondForm').serialize(),
success : function(html) {
$('#product-select-pop').find('#pageDiv').html(html);
const goodsList = JSON.parse(localStorage.getItem('goodsList'));
if (!fn_is_empty(goodsList)) {
fn_set_choice_order_goods(goodsList);
}
}
});
}
/* 목록 > 전체선택 체인지 이벤트 */
$(document).on('change', '#checkAll', function () {
let checkbox = $(this).closest('table').find('input[name="goodsInnbChk"]');
$(checkbox).prop('checked', false);
$(checkbox).prop('checked', $(this).is(':checked'));
});
/*********************************************************
* 선택 삭제
*********************************************************/
const fn_delete_check = function() {
let url = '<c:url value="/mngr/goods/prsnt/deletePrsnt"/>';
let delInnbArr = [];
// 선택 삭제일 경우
$("input[name='goodsInnbChk']:checked").each(function() {
let values = $(this).val().split(','); // 쉼표로 분리하여 배열로 저장
let delGoods = {
goodsInnb: values[0],
sopmalCd: values[1]
};
delInnbArr.push(delGoods);
});
if (confirm('사은품을 <spring:message code="confirm.common.delete"/>')) {
$.ajax({
type: 'post',
url: url,
data: {
"delInnbArr": delInnbArr
},
dataType: "json",
success: function (result) {
alert('<spring:message code="success.common.delete"/>');
fn_select_list();
}
})
};
}
/* ********************************************************
* 카테고리 체크버튼 이벤트
******************************************************** */
const fn_change_event = function (_target, _arg) {
if (_arg === 'all') {
if ($('#' + _target + '-all').is(':checked')) {
$('[name=' + _target + 'Arr]').prop('checked', true);
} else {
$('[name=' + _target + 'Arr]').prop('checked', false);
}
} else {
let chkCnt = $('[name=' + _target + 'Arr]:checked').length;
let allCnt = $('[name=' + _target + 'Arr]').length;
if (chkCnt !== allCnt && $('#' + _target + '-all').is(':checked')) {
$('#' + _target + '-all').prop('checked', false);
} else if (chkCnt !== allCnt && !$('#' + _target + '-all').is(':checked') && allCnt - chkCnt === 1) {
$('#' + _target + '-all').prop('checked', true);
} else if (chkCnt === allCnt) {
$('#' + _target + '-all').prop('checked', true);
}
}
}
</script>
<body>
<%@ include file="/WEB-INF/views/comm/mngr/Header.jsp"%>
<main class="main">
<%@ include file="/WEB-INF/views/comm/mngr/Left.jsp"%>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h2 class="page-title__title">사은품 조회</h2>
<div class="page-title__btn-container">
<button onclick="fn_move_regpage()" class="btn primary">사은품 <spring:message
code="button.insert"/></button>
</a>
</div>
</div>
<form id='listForm' name="listForm" method="post"
action="<c:url value="/mngr/goods/prsnt/selectPrsntListForm"/>">
<input type="hidden" id="pageIndex" name="pageIndex" value="${ resultMap.BOGoodsVO.pageIndex }"/>
<input type="hidden" id="goodsInnb" name="goodsInnb"/>
<input type="hidden" id="sopmalCd" name="sopmalCd" />
<section class="content-section" id="search-section">
<div class="table-wrapper">
<table class="table">
<colgroup>
<col style="width: 12%;">
<col>
<col style="width: 13%;">
<col style="width: 25%;">
</colgroup>
<tr>
<th>검색어</th>
<td colspan="3">
<div class="td-inner">
<div class="select-box">
<select title="검색타입" id="srchType" name="srchType">
<option value="GOODS_NM" <c:if test="${ resultMap.BOGoodsVO.srchType == 'GOODS_NM'}">selected="selected"</c:if>>상품명</option>
<option value="GOODS_INNB" <c:if test="${ resultMap.BOGoodsVO.srchType == 'GOODS_INNB'}">selected="selected"</c:if>>상품번호</option>
</select>
</div>
<input class="input-text xl" type="text" title="검색어" id="srchStr" name="srchStr" value="<c:out value="${ resultMap.BOGoodsVO.srchStr }" />">
</div>
</td>
</tr>
<tr>
<th>날짜</th>
<td colspan="3">
<div class="td-inner">
<div class="select-box">
<select name="dateDv" title="날짜 구분">
<option value="regist" <c:if test="${ resultMap.BOGoodsVO.dateDv eq 'regist'}">selected="selected"</c:if>>등록일</option>
<option value="updt" <c:if test="${ resultMap.BOGoodsVO.dateDv eq 'updt'}">selected="selected"</c:if>>수정일</option>
</select>
</div>
<div class="input-container">
<input type="text" name="startDate" id="startDate" class="datepicker" value="<c:out value="${ resultMap.BOGoodsVO.startDate }"/>"
title="시작 날짜 선택" autocomplete="off">
<span class="tilde">~</span>
<input type="text" name="endDate" id="endDate" class="datepicker"
title="종료 날짜 선택" autocomplete="off" pattern="yyyy-MM-dd" value="<c:out value="${ resultMap.BOGoodsVO.endDate }"/>">
<input type="hidden" id="datePeriod" name="datePeriod" value=""/>
</div>
<div class="dateRange-btnContainer">
<button type="button" class="dateRange-btn" id="1D">어제</button>
<button type="button" class="dateRange-btn" id="0">오늘</button>
<button type="button" class="dateRange-btn" id="3D">3일간</button>
<button type="button" class="dateRange-btn" id="7D">일주일</button>
<button type="button" class="dateRange-btn" id="1M">1개월</button>
<button type="button" class="dateRange-btn" id="3M">3개월</button>
<button type="button" class="dateRange-btn" id="6M">6개월</button>
<button type="button" class="dateRange-btn" id="1Y">1년</button>
<button type="button" class="dateRange-btn selected" id="allDays">전체
</button>
</div>
</div>
</td>
</tr>
<tr>
<th>판매상태</th>
<td>
<div class="td-inner">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox check-all">
<input type="checkbox" name="goodsDftinfoSttus" value="" id="srchStatusCheckboxAll" onclick="checkAll();" checked>
<span class="check"></span>
<span class="control-label">전체</span>
</label>
<c:forEach items="${resultMap.goodsDftinfoSttusList}" var="goodsDftinfoSttus" varStatus="status">
<label class="b-checkbox checkbox">
<c:choose>
<c:when test="${status.first }">
<input type="checkbox" class="srchStatusCheckbox" name="goodsDftinfoSttus" value="${goodsDftinfoSttus.cd}" onchange="fn_ctr_pCheckbox('#srchStatusCheckboxAll', '.srchStatusCheckbox');" checked>
<span class="check"></span>
<span class="control-label">${goodsDftinfoSttus.cdNm}</span>
</c:when>
<c:otherwise>
<input type="checkbox" class="srchStatusCheckbox" name="goodsDftinfoSttus" value="${goodsDftinfoSttus.cd}" onchange="fn_ctr_pCheckbox('#srchStatusCheckboxAll', '.srchStatusCheckbox');" checked>
<span class="check"></span>
<span class="control-label">${goodsDftinfoSttus.cdNm}</span>
</c:otherwise>
</c:choose>
</label>
</c:forEach>
</div>
</div>
</td>
</tr>
<tr>
<th>재고에 따른 판매</th>
<td>
<div class="td-inner">
<div class="custom-radio-container">
<div class="custom-radio">
<input type="radio" id="goodsDftinfoInvntryPolicy0"
name="goodsDftinfoInvntryPolicy" value="" checked>
<label for="goodsDftinfoInvntryPolicy0">전체</label>
</div>
<c:forEach items="${resultMap.goodsDftinfoInvntryPolicyList}"
var="goodsDftinfoInvntryPolicy" varStatus="status">
<div class="custom-radio">
<input type="radio"
id="goodsDftinfoInvntryPolicy${status.count}"
name="goodsDftinfoInvntryPolicy"
value="${goodsDftinfoInvntryPolicy.cd}">
<label for="goodsDftinfoInvntryPolicy${status.count}">${goodsDftinfoInvntryPolicy.cdNm}</label>
</div>
</c:forEach>
</div>
</div>
</td>
<th>이벤트 중 인 사은품</th>
<td>
<div class="select-box">
<select class="short" name="evtInnb" id="evtGoodsList"
title="이벤트 중 인 사은품"
style="display: none;" >
<option value=""><c:out value="선택"/> </option>
<c:forEach var="goodsEvtNm" items="${resultMap.goodsEvtNmList}">
<option value="${goodsEvtNm.evtInnb}"><c:out value="${goodsEvtNm.evtnm}" /> </option>
</c:forEach>
</select>
</div>
</td>
</tr>
</table>
</div>
<div class="form-control-container">
<div class="left"></div>
<div class="center">
<button class="btn outline" id="resetBtn" type="button">초기화</button>
<button class="btn primary" id="searchBtn" type="button" onclick="fn_select_list(1); return false;">검색</button>
</div>
<div class="right">
</div>
</div>
</section>
<div id="pageDiv">
</div>
</form>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
</body>
</html>