1112 lines
59 KiB
Plaintext
1112 lines
59 KiB
Plaintext
<%@ 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" %>
|
|
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
|
|
|
|
<%--
|
|
Class Name : BndeUpdtU.jsp
|
|
Description : 상품 일괄 업데이트
|
|
Modification Information
|
|
|
|
수정일 수정자 수정내용
|
|
------- -------- ---------------------------
|
|
2024-09-08 유재현 최초생성
|
|
--%>
|
|
<!DOCTYPE html>
|
|
<html lang="ko">
|
|
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>일반 관리자</title>
|
|
<%-- 공통 include --%>
|
|
<%@ include file="/WEB-INF/views/comm/mngr/Include.jsp"%>
|
|
</head>
|
|
<script>
|
|
$(document).ready(function () {
|
|
const resveGoodsTable = document.getElementById('resveGoods');
|
|
disableTableInputs(resveGoodsTable);
|
|
|
|
});
|
|
|
|
|
|
/* ********************************************************
|
|
* 예약 판매 설정 enable-disable
|
|
******************************************************** */
|
|
function handleRadioClick(radio) {
|
|
const firstRadio = document.querySelector('input[name="goodsSttusCd"]:first-of-type');
|
|
const checkbox = document.getElementById('goodsExpsrTy02');
|
|
const resveGoodsTable = document.getElementById('resveGoods');
|
|
|
|
if (radio === firstRadio) {
|
|
checkbox.disabled = false;
|
|
if(checkbox.checked){
|
|
enableTableInputs(resveGoodsTable);
|
|
} else {
|
|
disableTableInputs(resveGoodsTable);
|
|
}
|
|
} else {
|
|
checkbox.disabled = true;
|
|
checkbox.checked = false; // 체크 상태 해제
|
|
disableTableInputs(resveGoodsTable);
|
|
}
|
|
}
|
|
|
|
function updateHiddenField(checkbox) {
|
|
const hiddenField = document.getElementById('goodsExpsrTy02');
|
|
const resveGoodsTable = document.getElementById('resveGoods');
|
|
|
|
//예약 판매 체크가 되어있을 때만 상태값 02
|
|
if (checkbox.checked) {
|
|
hiddenField.value = "02";
|
|
enableTableInputs(resveGoodsTable);
|
|
} else {
|
|
hiddenField.value = "01";
|
|
disableTableInputs(resveGoodsTable);
|
|
}
|
|
}
|
|
|
|
/* ********************************************************
|
|
* 노출여부 enable-disable
|
|
******************************************************** */
|
|
function handleRadioClick2(radio) {
|
|
const lastRadio = document.querySelector('#expsrCdList3')
|
|
const table = document.getElementById('expsrSet');
|
|
|
|
if (radio === lastRadio) {
|
|
enableTableInputs(table);
|
|
} else {
|
|
disableTableInputs(table);
|
|
}
|
|
|
|
}
|
|
|
|
/* ********************************************************
|
|
* 재고에 따른 판매 enable-disable
|
|
******************************************************** */
|
|
function handleRadioClickDisable(radio) {
|
|
const firstRadio = document.querySelector('input[name="invntryPolicyCd"]:first-of-type');
|
|
const inputText = document.getElementById('avlinvLmttQy');
|
|
|
|
if(radio === firstRadio) {
|
|
inputText.disabled = false;
|
|
} else {
|
|
inputText.disabled = true;
|
|
}
|
|
}
|
|
|
|
|
|
/* ********************************************************
|
|
* enable-disable
|
|
******************************************************** */
|
|
function enableTableInputs(table) {
|
|
const inputs = table.querySelectorAll('input');
|
|
inputs.forEach(input => input.disabled = false);
|
|
}
|
|
|
|
function disableTableInputs(table) {
|
|
const inputs = table.querySelectorAll('input');
|
|
inputs.forEach(input => input.disabled = true);
|
|
}
|
|
|
|
/* ********************************************************
|
|
* 일괄업데이트 AJAX
|
|
******************************************************** */
|
|
const fn_update_bnde_updt = function () {
|
|
const url = '<c:url value="/mngr/goods/goodsmngr/updateBndeUpdt"/>';
|
|
const formData = new FormData();
|
|
|
|
if ($('#hiddenForm') != null) {
|
|
$('#hiddenForm').remove();
|
|
}
|
|
|
|
/* ********************************************************
|
|
* 데이터 검증 START
|
|
******************************************************** */
|
|
|
|
|
|
//추가정보 업데이트 정보 선택 확인
|
|
|
|
const goodsAdditionUptAt = $('#goodsAdditionUptAt').prop('checked')
|
|
if(goodsAdditionUptAt){
|
|
if(fn_is_empty($('[name="infoSj"]').eq(0).val()) || fn_is_empty($('[name="infoCn"]').eq(0).val())){
|
|
$('[name="infoSj"]').eq(0).focus()
|
|
alert('추가정보를 입력해주세요')
|
|
return false;
|
|
}
|
|
}
|
|
|
|
$('[name="goodsAdditionDeleteAt"]:checked').val()
|
|
|
|
|
|
//노출예약설정 입력 확인
|
|
const expsrDvUptAt = $('#expsrDvUptAt').prop('checked')
|
|
if(expsrDvUptAt){
|
|
let hasEmptyExpsr = false;
|
|
if($('#expsrCdList3').prop('checked')){
|
|
$('#expsrSet input').each(function (){
|
|
if(fn_is_empty($(this).val())){
|
|
hasEmptyExpsr = true;
|
|
return false;
|
|
}
|
|
})
|
|
|
|
if(hasEmptyExpsr){
|
|
alert('노출예약 정보를 입력해 주세요')
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// 반품교환정보 선택여부
|
|
const cmnuseInfoUptAt = $('#cmnuseInfoUptAt').prop('checked')
|
|
if(cmnuseInfoUptAt){
|
|
const cmnuseInfoInnb = $('div.cmnuseInfoInnb')
|
|
const cmnuseInfoInnbSelect = $('#cmnuseInfoInnb option:selected')
|
|
if(fn_is_empty(cmnuseInfoInnbSelect.val())){
|
|
cmnuseInfoInnb.focus()
|
|
alert('반품교환정보를 선택해 주세요')
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// 배송일 선택여부
|
|
const dlvyGroupUptAt = $('#dlvyGroupUptAt').prop('checked')
|
|
if(dlvyGroupUptAt){
|
|
const dlvyGroupInnb = $('div.dlvyGroupInnb')
|
|
const dlvyGroupInnbSelect = $('#dlvyGroupInnb option:selected')
|
|
if(fn_is_empty(dlvyGroupInnbSelect.val())){
|
|
dlvyGroupInnb.focus()
|
|
alert('배송일을 선택해 주세요')
|
|
return false;
|
|
}
|
|
}
|
|
|
|
//배송안내문구 입력여부
|
|
const dlvyGuidanceWordsCnUptAt = $('#dlvyGuidanceWordsCnUptAt').prop('checked')
|
|
if(dlvyGuidanceWordsCnUptAt){
|
|
if(fn_is_empty($('#dlvyGuidanceWordsCn').val())){
|
|
$('#dlvyGuidanceWordsCn').focus()
|
|
alert('배송 안내 문구를 입력해주세요');
|
|
return false;
|
|
}
|
|
}
|
|
|
|
//입점마케팅 연동여부 선택 여부
|
|
const epIntrlckUptAt = $('#epIntrlckUptAt').prop('checked');
|
|
if(epIntrlckUptAt){
|
|
let hasEmptyEpIntrlck = true;
|
|
$('input[name="epIntrlckAt"]').each(function (idx){
|
|
|
|
if($(this).prop('checked')){
|
|
hasEmptyEpIntrlck = false;
|
|
}
|
|
})
|
|
|
|
if(hasEmptyEpIntrlck){
|
|
$('#naverEpIntrlckAt').focus()
|
|
alert('입점마케팅 연동여부를 선택해 주세요')
|
|
return false;
|
|
}
|
|
}
|
|
|
|
//일괄 업데이트 선택 상품 배열 저장
|
|
let goodsInnbs = [];
|
|
$('[name=relatedGoodsId]').each(function (idx) {
|
|
goodsInnbs.push($('[name=relatedGoodsId]').eq(idx).val());
|
|
});
|
|
|
|
|
|
//상품 선택 여부 valid
|
|
let goodChoiceAllAt = $('#goodsChoiceAll').prop('checked')?'Y':'N';
|
|
if(goodChoiceAllAt === 'N' && fn_is_empty(goodsInnbs)){
|
|
$('#goodsChoiceAll').focus()
|
|
alert('일괄 업데이트 할 상품을 선택해 주세요');
|
|
return false;
|
|
}
|
|
|
|
//상품 판매상태 수정여부
|
|
const goodsSttusUptAt = $('#goodsSttusUptAt').prop('checked')
|
|
|
|
//상품만 선택하고 수정 구분을 선택하지 않았을 경우
|
|
if((goodChoiceAllAt === 'N' && fn_is_empty(goodsInnbs)
|
|
|| (!goodsAdditionUptAt && !goodsSttusUptAt && !expsrDvUptAt && !cmnuseInfoUptAt && !dlvyGroupUptAt && !dlvyGuidanceWordsCnUptAt && !epIntrlckUptAt))){
|
|
alert('수정 하실 정보를 선택해 주세요');
|
|
return false;
|
|
}
|
|
|
|
/* ********************************************************
|
|
* 데이터 검증 END
|
|
******************************************************** */
|
|
const hiddenForm = document.createElement('form');
|
|
hiddenForm.name = 'hiddenForm';
|
|
hiddenForm.id = 'hiddenForm';
|
|
hiddenForm.method = 'post';
|
|
hiddenForm.action = '';
|
|
|
|
//상품 쇼핑몰코드
|
|
const sopmalCd = $('#sopmalCd').val()
|
|
|
|
//추가항목 배열 저장
|
|
if($('#goodsAdditionUptAt').prop('checked')){
|
|
$('[name=infoSj]').each(function (idx) {
|
|
fn_create_input('hidden', "goodsAdditionVOList[" + idx + "].infoSj", $('[name=infoSj]').eq(idx).val(), hiddenForm);
|
|
fn_create_input('hidden', "goodsAdditionVOList[" + idx + "].infoCn", $('[name=infoCn]').eq(idx).val(), hiddenForm);
|
|
});
|
|
}
|
|
fn_create_input('hidden', "goodsAdditionUptAt", $('#goodsAdditionUptAt').prop('checked')?'Y':'N', hiddenForm);
|
|
|
|
|
|
|
|
//일괄 업데이트 선택 상품 저장
|
|
fn_create_input('hidden', "goodsInnbs",goodsInnbs, hiddenForm);
|
|
|
|
|
|
//상품 선택 여부
|
|
fn_create_input('hidden', "goodsChoiceAll", goodChoiceAllAt, hiddenForm);
|
|
|
|
//판매상태 선택 여부
|
|
fn_create_input('hidden', "goodsSttusUptAt", $('#goodsSttusUptAt').prop('checked')?'Y':'N', hiddenForm);
|
|
|
|
//노출여부 선택 여부
|
|
fn_create_input('hidden', "expsrDvUptAt", $('#expsrDvUptAt').prop('checked')?'Y':'N', hiddenForm);
|
|
|
|
if($('#expsrDvUptAt').prop('checked') && $('#expsrCdList3').prop('checked')){
|
|
//노출기간
|
|
const expsrBgnDtPicker = $('#datepicker_1').val();
|
|
const expsrEndDtPicker = $('#datepicker_2').val();
|
|
if(!fn_is_empty(expsrBgnDtPicker) && !fn_is_empty(expsrEndDtPicker)){
|
|
|
|
const expsrBgnDt_time =$('#expsrBgnDt_time').val()
|
|
const expsrEndDt_time = $('#expsrEndDt_time').val()
|
|
const expsrBgnDt = expsrBgnDtPicker+' '+expsrBgnDt_time +':00'
|
|
const expsrEndDt = expsrEndDtPicker+' '+expsrEndDt_time +':00'
|
|
|
|
formData.append('expsrBgnDt', expsrBgnDt)
|
|
formData.append('expsrEndDt', expsrEndDt)
|
|
|
|
}
|
|
const expsrSetupFwords = $('#expsrSetupFwords').val();
|
|
formData.append('expsrSetupFwords', expsrSetupFwords)
|
|
}
|
|
|
|
//반품교환정보 선택 여부
|
|
fn_create_input('hidden', "cmnuseInfoUptAt", $('#cmnuseInfoUptAt').prop('checked')?'Y':'N', hiddenForm);
|
|
//배송일 선택 여부
|
|
fn_create_input('hidden', "dlvyGroupUptAt", $('#dlvyGroupUptAt').prop('checked')?'Y':'N', hiddenForm);
|
|
//배송안내문구 여부
|
|
fn_create_input('hidden', "dlvyGuidanceWordsCnUptAt", $('#dlvyGuidanceWordsCnUptAt').prop('checked')?'Y':'N', hiddenForm);
|
|
//입점마케팅 선택 여부
|
|
fn_create_input('hidden', "epIntrlckUptAt", $('#epIntrlckUptAt').prop('checked')?'Y':'N', hiddenForm);
|
|
|
|
|
|
//입점마케팅 - 네이버연동여부
|
|
formData.append('naverEpIntrlckAt', $('#naverEpIntrlckAt').prop('checked')?$('#naverEpIntrlckAt').val():'N')
|
|
//입점마케팅 - 구글연동여부
|
|
formData.append('googleEpIntrlckAt', $('#googleEpIntrlckAt').prop('checked')?$('#googleEpIntrlckAt').val():'N')
|
|
//입점마케팅 - 메타연동여부
|
|
formData.append('metaEpIntrlckAt', $('#metaEpIntrlckAt').prop('checked')?$('#metaEpIntrlckAt').val():'N')
|
|
//입점마케팅 - 모비온연동여부
|
|
formData.append('mobionEpIntrlckAt', $('#mobionEpIntrlckAt').prop('checked')?$('#mobionEpIntrlckAt').val():'N')
|
|
|
|
|
|
document.body.appendChild(hiddenForm);
|
|
|
|
|
|
$('#listForm').serializeArray().forEach(function (item) {
|
|
formData.append(item.name, item.value);
|
|
});
|
|
|
|
// hidden form data append
|
|
$('#hiddenForm').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.message === 'success') {
|
|
alert('<spring:message code="success.common.update"/>');
|
|
window.location.reload()
|
|
|
|
} else {
|
|
alert('<spring:message code="fail.common.update"/>');
|
|
}
|
|
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
|
|
function convertToDate(dateStr) {
|
|
// 입력된 문자열을 Date 객체로 변환
|
|
const date = new Date(dateStr);
|
|
|
|
// 유효하지 않은 날짜인 경우 null 반환
|
|
if (isNaN(date.getTime())) {
|
|
return null;
|
|
}
|
|
|
|
return date;
|
|
}
|
|
|
|
|
|
//마지막 컴마 지우기
|
|
const remove_Last_Comma = function removeLastComma(str) {
|
|
const lastCommaIndex = str.lastIndexOf(',');
|
|
if (lastCommaIndex !== -1) {
|
|
return str.substring(0, lastCommaIndex);
|
|
} else {
|
|
return str;
|
|
}
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
|
|
/* ********************************************************
|
|
* 목록 조회
|
|
******************************************************** */
|
|
const fn_select_list = function () {
|
|
window.location.href = '/mngr/goods/goodsmngr/selectGoodsListForm?pageIndex=1'
|
|
};
|
|
|
|
/* ********************************************************
|
|
* 추가 항목 행 추가
|
|
******************************************************** */
|
|
const fn_add_box = function (_target) {
|
|
|
|
let trClone = '';
|
|
let target = '#' + _target;
|
|
|
|
$(target + 'NoData').hide();
|
|
|
|
trClone = `<tr>
|
|
<td><input class="input-text full" type="text" id="infoSj" name="infoSj"></td>
|
|
<td><input class="input-text full" type="text" id="infoCn" name="infoCn"></td>
|
|
<td><button class="circle-btn delete" onclick="fn_remove_row(this); return false;">
|
|
<span class="visually-hidden">삭제</span></button></td>
|
|
</tr>`;
|
|
|
|
$(target).append(trClone);
|
|
|
|
//행 추가 후, tableDnd 업데이트
|
|
$(target + '-row-add').tableDnDUpdate();
|
|
$(target + 'NoData').hide();
|
|
|
|
}
|
|
|
|
|
|
|
|
/* ********************************************************
|
|
* 상품 검색 팝업 > 상품 목록 조회
|
|
******************************************************** */
|
|
const fn_goods_search_popup_list = function (pageIndex, selected) {
|
|
let dataStr;
|
|
if (!pageIndex) {
|
|
$('#pageIndex').val(1);
|
|
} else {
|
|
$('#pageIndex').val(pageIndex);
|
|
}
|
|
|
|
$('#popupListForm').find('input[name=pageIndex]').eq(0).val(pageIndex);
|
|
const popupListForm = $("#popupListForm").serialize();
|
|
|
|
$.ajax({
|
|
type: "post",
|
|
url: "<c:url value="/mngr/goods/goodsmngr/selectGoodsSrchPopupList"/>",
|
|
data: popupListForm,
|
|
success: function (resultHtml) {
|
|
$('#goodsList').empty();
|
|
$('#goodsList').html(resultHtml);
|
|
}
|
|
});
|
|
}
|
|
|
|
/* ********************************************************
|
|
* 상품 검색 팝업 배열 값 불러오기
|
|
******************************************************** */
|
|
var selected = [];
|
|
|
|
function fn_select_goods_search() {
|
|
|
|
selected = [];
|
|
|
|
$('#appendList tr').each(function () {
|
|
const goodsId = $(this).attr('id').replace('choiseListId', '');
|
|
const goodsImg = $(this).find('input[name="goodsImgCours"]').val();
|
|
const goodsNm = $(this).find('input[name="goodsNm"]').val();
|
|
const goodsPrice = $(this).find('input[name="slepric"]').val();
|
|
const goodsSttusNm = $(this).find('input[name="goodsSttusNm"]').val();
|
|
const expsrNm = $(this).find('input[name="expsrNm"]').val();
|
|
|
|
selected.push({
|
|
goodsId: goodsId,
|
|
goodsImg: goodsImg,
|
|
goodsNm: goodsNm,
|
|
goodsPrice: goodsPrice,
|
|
goodsSttusNm: goodsSttusNm,
|
|
expsrNm: expsrNm
|
|
});
|
|
});
|
|
|
|
// 각 화면에 맞춰서 HTML 변경 START
|
|
var tableBody = $("#parentGoodsContainer");
|
|
tableBody.empty();
|
|
|
|
selected.forEach((good, index) => {
|
|
var productHtml = `
|
|
<div class="product-group__item">
|
|
<input type="hidden" id="relatedGoodsId" name="relatedGoodsId" value="` + good.goodsId + `">
|
|
<input type="hidden" id="goodsSttusNm" name="goodsSttusNm" value="` + good.goodsSttusNm + `">
|
|
<span class="product-group__item-number">` + (index + 1) + `</span>
|
|
<div class="product-group__image">
|
|
<img src="` + good.goodsImg + `" width="140" alt="` + good.goodsNm + `">
|
|
</div>
|
|
<div class="product-group__description">
|
|
<p>` + good.goodsNm + `</p>
|
|
<p class="product-group__description-price">` + fn_format_comma(good.goodsPrice) + `원</p>
|
|
</div>
|
|
</div>
|
|
`;
|
|
|
|
tableBody.append(productHtml);
|
|
});
|
|
// 각 화면에 맞춰서 HTML 변경 END
|
|
|
|
fn_close_modal('product-search');
|
|
}
|
|
|
|
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
|
// 하이픈 뒤에 숫자한자리만 남기기
|
|
function removeTrailingNumber(id) {
|
|
if(fn_is_empty(id)){
|
|
return '0';
|
|
}else{
|
|
return id.replace(/-(\d)\d*$/, '-$1');
|
|
}
|
|
}
|
|
|
|
|
|
</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()" class="btn outline"><spring:message
|
|
code="button.list"/></button>
|
|
<button class="btn primary" onclick="fn_update_bnde_updt();"><spring:message code="button.update"/></button>
|
|
</div>
|
|
</div>
|
|
<div class="content-tab content-tab__fixed">
|
|
<a href="#section02" class="content-tab__scroll-btn">기본정보</a>
|
|
<a href="#section03" class="content-tab__scroll-btn">판매정보</a>
|
|
<%-- <a href="#section04" class="content-tab__scroll-btn">옵션</a>--%>
|
|
<%-- <a href="#section06" class="content-tab__scroll-btn">상품 사진</a>--%>
|
|
<%-- <a href="#section07" class="content-tab__scroll-btn">상세 설명</a>--%>
|
|
<%-- <a href="#section08" class="content-tab__scroll-btn">모바일용 상세 설명</a>--%>
|
|
<a href="#section09" class="content-tab__scroll-btn">반품교환정보</a>
|
|
<a href="#section10" class="content-tab__scroll-btn">배송</a>
|
|
<a href="#section11" class="content-tab__scroll-btn">입점 마케팅</a>
|
|
<%-- <a href="#section13" class="content-tab__scroll-btn">추천 상품</a>--%>
|
|
</div>
|
|
|
|
<form id="listForm" method="post" action="" enctype="multipart/form-data">
|
|
<input type="hidden" id="goodsKndCd" name="goodsKndCd" value="01">
|
|
<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"/>
|
|
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.cdnurl')" var="cdnurl"/>
|
|
<%-- <section id="section01" 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>카테고리 선택</th>--%>
|
|
<%-- <td>--%>
|
|
<%-- <div class="td-inner">--%>
|
|
<%-- <div class="table-wrapper">--%>
|
|
<%-- <table class="table vertical">--%>
|
|
<%-- <caption>카테고리</caption>--%>
|
|
<%-- <colgroup>--%>
|
|
<%-- <col style="width: 25%;">--%>
|
|
<%-- <col style="width: 25%;">--%>
|
|
<%-- <col style="width: 25%;">--%>
|
|
<%-- <col style="width: 25%;">--%>
|
|
<%-- </colgroup>--%>
|
|
<%-- <thead>--%>
|
|
<%-- <tr>--%>
|
|
<%-- <th>1차 카테고리</th>--%>
|
|
<%-- <th>2차 카테고리</th>--%>
|
|
<%-- <th>3차 카테고리</th>--%>
|
|
<%-- <th>4차 카테고리</th>--%>
|
|
<%-- </tr>--%>
|
|
<%-- </thead>--%>
|
|
<%-- <tbody>--%>
|
|
<%-- <tr>--%>
|
|
<%-- <td>--%>
|
|
<%-- <select class="category-select" multiple id="ctgryDepth1" title="1차 카테고리">--%>
|
|
<%-- <c:forEach items="${resultMap.goodsCategoryList}" var="goodsCategory" varStatus="status">--%>
|
|
<%-- <option value="${goodsCategory.ctgryId}">${goodsCategory.ctgryNm}</option>--%>
|
|
<%-- </c:forEach>--%>
|
|
<%-- </select>--%>
|
|
<%-- </td>--%>
|
|
<%-- <td>--%>
|
|
<%-- <select class="category-select" multiple id="ctgryDepth2" title="2차 카테고리"> </select>--%>
|
|
<%-- </td>--%>
|
|
<%-- <td>--%>
|
|
<%-- <select class="category-select" multiple id="ctgryDepth3" title="3차 카테고리"></select>--%>
|
|
<%-- </td>--%>
|
|
<%-- <td>--%>
|
|
<%-- <select class="category-select" multiple id="ctgryDepth4" title="4차 카테고리"></select>--%>
|
|
<%-- </td>--%>
|
|
<%-- </tr>--%>
|
|
<%-- </tbody>--%>
|
|
<%-- </table>--%>
|
|
<%-- <div class="form-control-container mt-10">--%>
|
|
<%-- <div class="left"></div>--%>
|
|
<%-- <div class="center">--%>
|
|
<%-- <button class="btn primary" id="selectCategoriesBtn">선택</button>--%>
|
|
<%-- </div>--%>
|
|
<%-- <div class="right">--%>
|
|
<%-- </div>--%>
|
|
<%-- </div>--%>
|
|
<%-- </div>--%>
|
|
<%-- </div>--%>
|
|
<%-- </td>--%>
|
|
<%-- </tr>--%>
|
|
<%-- <tr>--%>
|
|
<%-- <th>선택한 카테고리</th>--%>
|
|
<%-- <td>--%>
|
|
<%-- <div class="td-inner">--%>
|
|
<%-- <div class="table-wrapper">--%>
|
|
<%-- <table class="table vertical" id="selectedCategoriesTable">--%>
|
|
<%-- <caption>선택한 카테고리</caption>--%>
|
|
<%-- <colgroup>--%>
|
|
<%-- <col style="width: 100px;">--%>
|
|
<%-- <col style="width: auto;">--%>
|
|
<%-- <col style="width: 200px;">--%>
|
|
<%-- </colgroup>--%>
|
|
<%-- <thead>--%>
|
|
<%-- <tr>--%>
|
|
<%-- <th>대표</th>--%>
|
|
<%-- <th>카테고리</th>--%>
|
|
<%-- <th>삭제</th>--%>
|
|
<%-- </tr>--%>
|
|
<%-- </thead>--%>
|
|
<%-- <tbody>--%>
|
|
<%-- <!-- 선택한 카테고리들이 여기에 추가됩니다 -->--%>
|
|
<%-- </tbody>--%>
|
|
<%-- </table>--%>
|
|
<%-- </div>--%>
|
|
<%-- </div>--%>
|
|
<%-- </td>--%>
|
|
<%-- </tr>--%>
|
|
<%-- </tbody>--%>
|
|
<%-- </table>--%>
|
|
<%-- </div>--%>
|
|
<%-- </div>--%>
|
|
<%-- </section>--%>
|
|
<section id="section02" 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 style="width: 38%">
|
|
<col style="width: 12%;">
|
|
<col style="width: 38%">
|
|
</colgroup>
|
|
<tbody>
|
|
<tr>
|
|
<th>
|
|
<div class="b-checkbox-container inner">
|
|
추가정보
|
|
<label class="b-checkbox checkbox">
|
|
<input type="checkbox" id="goodsAdditionUptAt">
|
|
<span class="check"></span>
|
|
<span class="control-label"></span>
|
|
</label>
|
|
</div>
|
|
</th>
|
|
<td colspan="3">
|
|
<div class="td-inner">
|
|
<div class="custom-radio-container mt-10">
|
|
<div class="custom-radio" style="display: flex;align-items: center;justify-content: center;height: 24px;">
|
|
<input type="radio" id="goodsAddition_delete_N" name="goodsAdditionDeleteAt" value="N" onclick="handleRadioClick(this)" checked="checked">
|
|
<label for="goodsAddition_delete_N"><span>현재 추가정보 유지하면서 업데이트</span> </label>
|
|
</div>
|
|
<div class="custom-radio" style="display: flex;align-items: center;justify-content: center;height: 24px;">
|
|
<input type="radio" id="goodsAddition_delete_Y" name="goodsAdditionDeleteAt" value="Y" onclick="handleRadioClick(this)">
|
|
<label for="goodsAddition_delete_Y"><span>현재 추가정보 삭제 후 업데이트</span></label>
|
|
</div>
|
|
</div>
|
|
<div class="table-wrapper">
|
|
<table class="table vertical" id="goodsAddition-row-add">
|
|
<caption>추가정보</caption>
|
|
<colgroup>
|
|
<col style="width: 320px;">
|
|
<col style="width: auto;">
|
|
<col style="width: 200px;">
|
|
</colgroup>
|
|
<thead>
|
|
<tr>
|
|
<th>추가 정보명</th>
|
|
<th>내용</th>
|
|
<th>
|
|
<button class="circle-btn add" onclick="fn_add_box('goodsAddition'); return false;"><span class="visually-hidden">추가</span></button>
|
|
</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody id="goodsAddition">
|
|
<tr id="goodsAdditionNoData">
|
|
<td colspan="100%">추가 항목이 없습니다.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
<section id="section03" 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>
|
|
<col style="width: 12%;">
|
|
<col>
|
|
</colgroup>
|
|
<tbody>
|
|
<tr>
|
|
<th>
|
|
<div class="b-checkbox-container inner">
|
|
판매 상태
|
|
<label class="b-checkbox checkbox">
|
|
<input type="checkbox" id="goodsSttusUptAt">
|
|
<span class="check"></span>
|
|
<span class="control-label"></span>
|
|
</label>
|
|
</div>
|
|
</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="checked"</c:if>
|
|
onclick="handleRadioClick(this)">
|
|
<label for="${goodsDftinfoSttus.cd}">${goodsDftinfoSttus.cdNm}</label>
|
|
</div>
|
|
<%-- <c:if test="${status.first}">--%>
|
|
<%-- <span class="parentheses">(</span>--%>
|
|
<%-- <div class="b-checkbox-container inner">--%>
|
|
<%-- <label class="b-checkbox checkbox">--%>
|
|
<%-- <input type="checkbox" id="goodsExpsrTy02" name="goodsExpsrTy02" onclick="updateHiddenField(this)">--%>
|
|
<%-- <span class="check"></span>--%>
|
|
<%-- <span class="control-label">예약 판매 사용</span>--%>
|
|
<%-- </label>--%>
|
|
<%-- </div>--%>
|
|
<%-- <span class="parentheses">)</span>--%>
|
|
<%-- </c:if>--%>
|
|
</c:forEach>
|
|
</div>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<%-- <tr id="resveGoods">--%>
|
|
<%-- <th>예약 판매 설정</th>--%>
|
|
<%-- <td colspan="3">--%>
|
|
<%-- <div class="td-inner">--%>
|
|
<%-- <div class="table-wrapper">--%>
|
|
<%-- <table class="table">--%>
|
|
<%-- <caption>예약 판매 설정</caption>--%>
|
|
<%-- <colgroup>--%>
|
|
<%-- <col style="width: 16%;">--%>
|
|
<%-- <col>--%>
|
|
<%-- </colgroup>--%>
|
|
<%-- <tbody>--%>
|
|
<%-- <tr>--%>
|
|
<%-- <th>예약 상품 배송일자</th>--%>
|
|
<%-- <td>--%>
|
|
<%-- <div class="td-inner">--%>
|
|
<%-- <input type="text" id="datepicker_3"--%>
|
|
<%-- class="datepicker" title="시작 날짜 선택"--%>
|
|
<%-- autocomplete="off" name="resveGoodsDlvyDe">--%>
|
|
<%-- </div>--%>
|
|
<%-- </td>--%>
|
|
<%-- </tr>--%>
|
|
<%-- <tr>--%>
|
|
<%-- <th>예약 상품 안내문구</th>--%>
|
|
<%-- <td>--%>
|
|
<%-- <div class="td-inner">--%>
|
|
<%-- <input class="input-text xl" type="text"--%>
|
|
<%-- id="resveGoodsGuidanceWordsCn" name="resveGoodsGuidanceWordsCn"--%>
|
|
<%-- title="예약 상품 안내문구">--%>
|
|
<%-- </div>--%>
|
|
<%-- </td>--%>
|
|
<%-- </tr>--%>
|
|
<%-- </tbody>--%>
|
|
<%-- </table>--%>
|
|
<%-- </div>--%>
|
|
<%-- </div>--%>
|
|
<%-- </td>--%>
|
|
<%-- </tr>--%>
|
|
<tr>
|
|
<th>
|
|
<div class="b-checkbox-container inner">
|
|
노출 여부
|
|
<label class="b-checkbox checkbox">
|
|
<input type="checkbox" id="expsrDvUptAt">
|
|
<span class="check"></span>
|
|
<span class="control-label"></span>
|
|
</label>
|
|
</div>
|
|
</th>
|
|
<td colspan="3">
|
|
<div class="td-inner vertical">
|
|
<div class="custom-radio-container mt-10">
|
|
<c:forEach items="${resultMap.expsrCdList}" var="expsrCdList" varStatus="status">
|
|
<div class="custom-radio">
|
|
<input type="radio" id="expsrCdList${status.count}" name="expsrDvCd" value="${expsrCdList.cd}"
|
|
<c:if test="${status.first}">checked="checked"</c:if>
|
|
onclick="handleRadioClick2(this)"
|
|
>
|
|
<label for="expsrCdList${status.count}">${expsrCdList.cdNm}</label>
|
|
</div>
|
|
</c:forEach>
|
|
</div>
|
|
<div class="table-wrapper mt-10">
|
|
<table class="table">
|
|
<caption>노출 여부</caption>
|
|
<colgroup>
|
|
<col style="width: 16%;">
|
|
<col>
|
|
</colgroup>
|
|
<tbody id="expsrSet">
|
|
<tr>
|
|
<th>노출 기간</th>
|
|
<td>
|
|
<div class="td-inner">
|
|
<input type="text" id="datepicker_1" class="datepicker" title="시작 날짜 선택" autocomplete="off" disabled>
|
|
<div class="timepicker-container">
|
|
<input type="text" class="bs-timepicker" title="시간 설정" value="00:00" id="expsrBgnDt_time" disabled>
|
|
</div>
|
|
<span class="tilde">~</span>
|
|
<input type="text" id="datepicker_2" class="datepicker" title="종료 날짜 선택" autocomplete="off" disabled>
|
|
<div class="timepicker-container">
|
|
<input type="text" class="bs-timepicker" title="시간 설정" value="00:00" id="expsrEndDt_time" disabled>
|
|
</div>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<th>노출 문구</th>
|
|
<td>
|
|
<input class="input-text xl" type="text" title="노출 문구" id="expsrSetupFwords" disabled>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
<section id="section09" 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 style="width: 44%;">
|
|
<col style="width: 44%;">
|
|
</colgroup>
|
|
<tbody>
|
|
<tr>
|
|
<th>
|
|
<div class="b-checkbox-container inner">
|
|
반품교환정보
|
|
<label class="b-checkbox checkbox">
|
|
<input type="checkbox" id="cmnuseInfoUptAt">
|
|
<span class="check"></span>
|
|
<span class="control-label"></span>
|
|
</label>
|
|
</div>
|
|
</th>
|
|
<td colspan="2">
|
|
<div class="td-inner">
|
|
<div class="select-box">
|
|
<select title="반품교환정보" id="cmnuseInfoInnb" class="cmnuseInfoInnb" name="cmnuseInfoInnb">
|
|
<option value="">선택</option>
|
|
<c:forEach var="infoList" items="${ resultMap.infoList }" varStatus="">
|
|
<option value="${ infoList.cmnuseInfoInnb }" >${ infoList.cmnuseInfoSj }</option>
|
|
<%-- <input type="text" value="${infoList.infoCn}" name="cmnuseInfoCn">--%>
|
|
</c:forEach>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<%-- <tr>--%>
|
|
<%-- <th>반품교환정보 설명</th>--%>
|
|
<%-- <td colspan="2">--%>
|
|
<%--<%– <div class="td-inner" readonly="">–%>--%>
|
|
<%--<%– <textarea class="textarea" title="에디터 입력" cols="30" id="cmnuseInfoCn"–%>--%>
|
|
<%--<%– rows="10"></textarea>–%>--%>
|
|
<%--<%– </div>–%>--%>
|
|
<%-- <div class="ck-content">--%>
|
|
|
|
|
|
<%-- </div>--%>
|
|
<%-- </td>--%>
|
|
<%-- </tr>--%>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
<section id="section10" 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>
|
|
<col style="width: 12%;">
|
|
<col>
|
|
</colgroup>
|
|
<tbody>
|
|
<tr>
|
|
<th>
|
|
<div class="b-checkbox-container inner">
|
|
배송일
|
|
<label class="b-checkbox checkbox">
|
|
<input type="checkbox" id="dlvyGroupUptAt">
|
|
<span class="check"></span>
|
|
<span class="control-label"></span>
|
|
</label>
|
|
</div>
|
|
</th>
|
|
<td>
|
|
<div class="td-inner">
|
|
<div class="select-box">
|
|
<select title="배송그룹" class="dlvyGroupInnb" id="dlvyGroupInnb" name="dlvyGroupInnb">
|
|
<option value="" >선택</option>
|
|
<c:forEach var="dlvyGrpList" items="${ resultMap.dlvyGrpList }" varStatus="">
|
|
<option value="${ dlvyGrpList.dlvyGroupInnb }" >${ dlvyGrpList.dlvyGroupNm }</option>
|
|
</c:forEach>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
</td>
|
|
<th>
|
|
<div class="b-checkbox-container inner">
|
|
배송 안내 문구
|
|
<label class="b-checkbox checkbox">
|
|
<input type="checkbox" id="dlvyGuidanceWordsCnUptAt">
|
|
<span class="check"></span>
|
|
<span class="control-label"></span>
|
|
</label>
|
|
</div>
|
|
</th>
|
|
<td>
|
|
<div class="td-inner">
|
|
<input class="input-text full" type="text" id="dlvyGuidanceWordsCn" name="dlvyGuidanceWordsCn" title="배송안내문구">
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
<section id="section11" 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>
|
|
<div class="b-checkbox-container inner">
|
|
입점마케팅 연동여부
|
|
<label class="b-checkbox checkbox">
|
|
<input type="checkbox" id="epIntrlckUptAt">
|
|
<span class="check"></span>
|
|
<span class="control-label"></span>
|
|
</label>
|
|
</div>
|
|
</th>
|
|
<td>
|
|
<div class="b-checkbox-container">
|
|
<c:forEach var="epInfo" items="${ resultMap.epList }" varStatus="status">
|
|
<label class="b-checkbox checkbox" for="${epInfo.cd}EpIntrlckAt">
|
|
<input type="checkbox" value="Y" name="EpIntrlckAt" id="${epInfo.cd}EpIntrlckAt">
|
|
<span class="check"></span>
|
|
<span class="control-label">
|
|
<span class="text">${epInfo.cdNm}</span>
|
|
</span>
|
|
</label>
|
|
</c:forEach>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<p class="fyi gray-7">입점 마케팅 세부 설정은 입점 마케팅에서 가능합니다.</p>
|
|
</div>
|
|
</section>
|
|
<section id="section13" 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>
|
|
<div>
|
|
<span class="ml-10">상품</span>
|
|
<button type="button" onclick="fn_open_modal('#modalDiv','#product-search','/mngr/goods/goodsmngr/selectGoodsSrchPopupForm',{'goodsKndCd':'01'}); return false;"
|
|
class="btn xsm primary mt-5">검색</button>
|
|
</div>
|
|
<br/>
|
|
<div class="b-checkbox-container inner">
|
|
전체 상품 선택
|
|
<label class="b-checkbox checkbox">
|
|
<input type="checkbox" id="goodsChoiceAll">
|
|
<span class="check"></span>
|
|
<span class="control-label"></span>
|
|
</label>
|
|
</div>
|
|
</th>
|
|
<td>
|
|
<div class="td-inner">
|
|
<div id="parentGoodsContainer" class="product-group">
|
|
<!-- 여기에 선택한 상품 정보가 추가됩니다 -->
|
|
</div>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</form>
|
|
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="modalDiv">
|
|
|
|
</div>
|
|
|
|
</main>
|
|
</body>
|
|
</html> |