Jelajahi Sumber

Merge branch 'develop' into bin2107

bin2107 4 tahun lalu
induk
melakukan
eb2e073d06

+ 11 - 0
src/main/java/com/style24/admin/biz/dao/TsaRendererDao.java

@@ -7,6 +7,7 @@ import com.style24.persistence.domain.Brand;
 import com.style24.persistence.domain.Color;
 import com.style24.persistence.domain.CommonCode;
 import com.style24.persistence.domain.DeliveryLoc;
+import com.style24.persistence.domain.DelvFeePolicy;
 import com.style24.persistence.domain.Itemkind;
 import com.style24.persistence.domain.SupplyCompany;
 
@@ -234,6 +235,16 @@ public interface TsaRendererDao {
 	 * @since 2020. 11. 24
 	 */
 	Collection<CommonCode> getSupplyDeliveryFeePolicyList(String supplyCompCd);
+	
+	/**
+	 * 업체별 배송비정책 목록(정책명)
+	 *
+	 * @param supplyCompCd - 업체코드
+	 * @return 배송비정책 목록
+	 * @author eskim
+	 * @since 2021. 07. 19
+	 */
+	Collection<DelvFeePolicy> getSupplyDeliveryPolicyList(String supplyCompCd);
 
 	/**
 	 * 전체 제휴채널 목록

+ 12 - 0
src/main/java/com/style24/admin/biz/service/TsaRendererService.java

@@ -11,6 +11,7 @@ import com.style24.persistence.domain.Brand;
 import com.style24.persistence.domain.Color;
 import com.style24.persistence.domain.CommonCode;
 import com.style24.persistence.domain.DeliveryLoc;
+import com.style24.persistence.domain.DelvFeePolicy;
 import com.style24.persistence.domain.Itemkind;
 import com.style24.persistence.domain.SupplyCompany;
 
@@ -379,6 +380,17 @@ public class TsaRendererService {
 	public Collection<CommonCode> getSupplyDeliveryFeePolicyList(String supplyCompCd) {
 		return rendererDao.getSupplyDeliveryFeePolicyList(supplyCompCd);
 	}
+	
+	/**
+	 * 업체별 배송비정책 목록(정책명)
+	 * @param supplyCompCd - 공급업체코드
+	 * @return 배송비정책 목록
+	 * @author eskim
+	 * @since 2021. 07. 19
+	 */
+	public Collection<DelvFeePolicy> getSupplyDeliveryPolicyList(String supplyCompCd) {
+		return rendererDao.getSupplyDeliveryPolicyList(supplyCompCd);
+	}
 
 //	/**
 //	 * 직송매장 목록

+ 27 - 0
src/main/java/com/style24/admin/biz/web/TsaGoodsController.java

@@ -558,6 +558,16 @@ public class TsaGoodsController extends TsaBaseController {
 				throw new IllegalStateException("업체코드 검색중 오류로 인해 조회되지 않았습니다.");
 			}
 		}
+		
+		if (!StringUtils.isBlank(goodsSearch.getItemkindList())) {
+			try {
+				String[] arrItemkind = mapper.readValue(goodsSearch.getItemkindList(), String[].class);
+				goodsSearch.setMultiItemkindCd(arrItemkind);
+			} catch (Exception e) {
+				e.printStackTrace();
+				throw new IllegalStateException("품목 검색중 오류로 인해 조회되지 않았습니다.");
+			}
+		}
 
 		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
@@ -1577,6 +1587,10 @@ public class TsaGoodsController extends TsaBaseController {
 	public Collection<GoodsSupplyPrice> getGoodsSupplyPriceList(@RequestBody GoodsSupplyPrice goodsSupplyPrice) {
 
 		// multi row 검색관련 처리
+		if (!StringUtils.isBlank(goodsSupplyPrice.getCondition())) {
+			goodsSupplyPrice.setConditionList(goodsSupplyPrice.getCondition().replaceAll("\r", "").trim().split("\n"));
+		}
+		
 		if (!StringUtils.isBlank(goodsSupplyPrice.getBrandList())) {
 			try {
 				String[] arrBrandCd = mapper.readValue(goodsSupplyPrice.getBrandList(), String[].class);
@@ -1596,6 +1610,8 @@ public class TsaGoodsController extends TsaBaseController {
 				throw new IllegalStateException("업체코드 검색중 오류로 인해 조회되지 않았습니다.");
 			}
 		}
+		
+		
 		return goodsService.getGoodsSupplyPriceList(goodsSupplyPrice);
 	}
 
@@ -2395,6 +2411,17 @@ public class TsaGoodsController extends TsaBaseController {
 				throw new IllegalStateException("업체코드 검색중 오류로 인해 조회되지 않았습니다.");
 			}
 		}
+		
+		if (!StringUtils.isBlank(goodsSearch.getItemkindList())) {
+			try {
+				String[] arrItemkind = mapper.readValue(goodsSearch.getItemkindList(), String[].class);
+				goodsSearch.setMultiItemkindCd(arrItemkind);
+			} catch (Exception e) {
+				e.printStackTrace();
+				throw new IllegalStateException("품목 검색중 오류로 인해 조회되지 않았습니다.");
+			}
+		}
+		
 		//log.info("[getPopupGoodsList] goodsSearch=>{}", goodsSearch);
 		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));

+ 14 - 0
src/main/java/com/style24/admin/biz/web/TsaRendererController.java

@@ -13,6 +13,7 @@ import com.style24.admin.biz.service.TsaRendererService;
 import com.style24.admin.support.controller.TsaBaseController;
 import com.style24.persistence.domain.Color;
 import com.style24.persistence.domain.CommonCode;
+import com.style24.persistence.domain.DelvFeePolicy;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -107,6 +108,19 @@ public class TsaRendererController extends TsaBaseController {
 	public Collection<CommonCode> getDeliveryFeeList(@PathVariable String supplyCompCd) {
 		return rendererService.getSupplyDeliveryFeePolicyList(supplyCompCd);
 	}
+	
+	/**
+	 * 업체별 배송비정책 목록(정책명)
+	 * @param supplyCompCd - 공급업체코드
+	 * @return
+	 * @author eskim
+	 * @since 2021. 07. 19
+	 */
+	@GetMapping("/delvPolicy/list/{supplyCompCd}")
+	@ResponseBody
+	public Collection<DelvFeePolicy> getSupplyDeliveryPolicyList(@PathVariable String supplyCompCd) {
+		return rendererService.getSupplyDeliveryPolicyList(supplyCompCd);
+	}
 
 	/**
 	 * 벤더외부몰 목록

+ 2 - 0
src/main/java/com/style24/persistence/domain/DelvFeePolicy.java

@@ -22,5 +22,7 @@ public class DelvFeePolicy extends TscBaseDomain {
 	private int rtnDelvFee;			// 반품배송비
 	private String useYn;			// 사용여부
 	private String distributionGb;	// 유통구분
+	
+	private String delvFeeNm;		// 배송비정책명
 
 }

+ 1 - 0
src/main/java/com/style24/persistence/domain/GoodsSearch.java

@@ -88,6 +88,7 @@ public class GoodsSearch extends TscBaseDomain {
 	private String callbackFn;
 	private String brandList;
 	private String supplyCompList;
+	private String itemkindList;
 	private String goodsContentsType;
 
 	//@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)

+ 4 - 0
src/main/java/com/style24/persistence/domain/GoodsSupplyPrice.java

@@ -42,6 +42,8 @@ public class GoodsSupplyPrice extends TscBaseDomain {
 	private String goodsPriceYn;
 	private String brandList;
 	private String supplyCompList;
+	private String search; // 키워드 종류
+	private String condition; // 키워드 종류별 값
 	
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] arrGoodsCd;
@@ -49,6 +51,8 @@ public class GoodsSupplyPrice extends TscBaseDomain {
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private int[] arrSupplyGoodsPriceSq;
 
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] conditionList;
 
 	/* Multi CheckBox 항목*/
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)

+ 16 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaRenderer.xml

@@ -393,6 +393,22 @@
 		ORDER BY DELV_FEE_CD
 	</select>
 	
+	<!-- 업체별 배송비정책 목록(정책명) -->
+	<select id="getSupplyDeliveryPolicyList" parameterType="String" resultType="DelvFeePolicy">
+		/* TsaRenderer.getSupplyDeliveryPolicyList */
+		SELECT DELV_FEE_CD
+		     , CASE WHEN DELV_FEE_CRITE = 'G078_10' THEN CONCAT(MIN_ORD_AMT,'원 미만시 ', DELV_FEE,'원 부과' )
+		            WHEN DELV_FEE_CRITE = 'G078_20' THEN '무료배송'
+		            ELSE CONCAT('유료배송 ', DELV_FEE,'원 부과' ) END DELV_FEE_NM
+		     , MIN_ORD_AMT
+		     , DELV_FEE
+		FROM TB_DELV_FEE_POLICY
+		WHERE 1=1
+		AND SUPPLY_COMP_CD = #{supplyCompCd}
+		AND USE_YN = 'Y'
+		ORDER BY DELV_FEE_CD
+	</select>
+	
 	<!-- 전체 제휴채널 목록 -->
 	<select id="getAllAflinkList" resultType="CommonCode">
 		/* TsaRenderer.getAllAflinkList */

+ 16 - 1
src/main/webapp/WEB-INF/views/goods/GoodsDetailForm.html

@@ -1096,7 +1096,8 @@
 			$('#goodsDetailForm input[name=sellEdYMD]').val(result.sellEddt.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD") );
 			$('#goodsDetailForm input[name=sellEdHH]').val(result.sellEddt.toDate("YYYYMMDDHHmmss").format("HH") );
 			
-			cfnCreateCombo('/renderer/delvFee/list/' + result.supplyCompCd, $('#goodsDetailForm select[name=delvFeeCd]'), "[선택]", result.delvFeeCd);
+			//cfnCreateCombo('/renderer/delvFee/list/' + result.supplyCompCd, $('#goodsDetailForm select[name=delvFeeCd]'), "[선택]", result.delvFeeCd);
+			cfnCreateDelvPolicyCombo( result.supplyCompCd, $('#goodsDetailForm select[name=delvFeeCd]'), "[선택]", result.delvFeeCd);
 			$('#goodsDetailForm input[name=delvFeeCdOrg]').val(result.delvFeeCd);
 			cfnCreateCombo('/renderer/delvloc/list/' + result.supplyCompCd, $('#goodsDetailForm select[name=delvLocCd]'), "[선택]", result.delvLocCd);
 			$('#goodsDetailForm input[name=delvLocCdOrg]').val(result.delvLocCd);
@@ -2544,6 +2545,20 @@
 		});
 	});
 	
+	//배송비정책변경시
+	$('#goodsDetailForm select[name=delvFeeCd]').on('change', function() {
+		var delvFeeCd = $("#goodsDetailForm select[name=delvFeeCd]").val();
+		
+		if (gagajf.isNull(delvFeeCd)){
+			$("#goodsDetailForm input[name=delvFee]").val('');
+			$("#goodsDetailForm input[name=minOrdAmt]").val('');
+		}else{
+			
+			var obj = $('#goodsDetailForm select[name=delvFeeCd] option:selected');
+			$("#goodsDetailForm input[name=delvFee]").val(obj.attr("delvFee").addComma());
+			$("#goodsDetailForm input[name=minOrdAmt]").val(obj.attr("minOrdAmt").addComma());
+		}
+	});	
 
 	//품목코드변경시
 	$('#goodsDetailForm select[name=itemkindCd]').on('change', function() {

+ 46 - 14
src/main/webapp/WEB-INF/views/goods/GoodsItemkindForm.html

@@ -85,24 +85,31 @@
 							<span id="brandText"></span>
 							<input type="hidden" name="brandList"/>
 						</td>
-						<th>키워드</th>
-						<td>
+						<th rowspan="3">키워드</th>
+						<td rowspan="3">
 							<select name="search" id="search">
 								<option value="searchGoodsCd">상품코드</option>
 								<option value="searchGoodsNm">상품명</option>
 								<option value="searchGoodsNum">품번</option>
 								<option value="searchSupplyGoodsCd">업체상품코드</option>
 							</select>
-							<input type="text" class="w40p" name="condition" id="condition" maxlength="50"/>
+							<textarea class="textareaR3 w50p" name="condition" id="condition"></textarea>
 						</td>
 						
 					</tr>
 					<tr>
 					<th>품목</th>
-						<td colspan="5">
-							<select name="itemkindCd" id="itemkindCdSearch">
+						<td>
+							<input type="text" class="w100" name="itemkindSearchTxt" id="itemkindSearchTxt" maxlength="20" />
+							<button type="button" class="btn icn" id="btnSearchItemkind"><i class="fa fa-search"></i></button>
+							<span id="itemkindText"></span>
+							<input type="hidden" name="itemkindList"/>
+						</td>
+						<th>담당MD</th>
+						<td>
+							<select  name="mdNo" id="mdNo">
 								<option value="">[전체]</option>
-								<option th:if="${itemkindList}" th:each="oneData, status : ${itemkindList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+								<option th:if="${brandMdList}" th:each="oneData, status : ${brandMdList}" th:value="${oneData.cd}" th:text="${oneData.cdNm}"></option>
 							</select>
 						</td>
 					</tr>
@@ -125,13 +132,7 @@
 								<option th:if="${formalGbList}" th:each="oneData, status : ${formalGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 							</select>
 						</td>
-						<th>담당MD</th>
-						<td>
-							<select  name="mdNo" id="mdNo">
-								<option value="">[전체]</option>
-								<option th:if="${brandMdList}" th:each="oneData, status : ${brandMdList}" th:value="${oneData.cd}" th:text="${oneData.cdNm}"></option>
-							</select>
-						</td>
+						
 					</tr>
 				</table>
 				<ul class="panelBar">
@@ -272,9 +273,10 @@
 
 	// 조회
 	$('#btnSearch').on('click', function() {
-		if(gagajf.isNull($("#selCate2").val()) && gagajf.isNull($("#supplyCompCd").val()) && gagajf.isNull($("#condition").val()) && gagajf.isNull($("#itemkindCdSearch").val())
+		if(gagajf.isNull($("#selCate2").val()) && gagajf.isNull($("#supplyCompCd").val()) && gagajf.isNull($("#condition").val()) 
 			&& gagajf.isNull($("#styleYear").val()) && gagajf.isNull($("#formalGb").val()) && gagajf.isNull($("#mdNo").val())
 			&& gagajf.isNull($("#searchForm input[name=supplyCompList]").val()) && gagajf.isNull($("#searchForm input[name=brandList]").val())
+			&& gagajf.isNull($("#searchForm input[name=itemkindList]").val())
 			){
 			mcxDialog.alert('검색조건을 입력해 주세요.');
 			return;
@@ -330,6 +332,8 @@
 		$('#searchForm input[name=supplyCompList]').val('');
 		$('#searchForm').find('#brandText').html('');
 		$('#searchForm').find('#supplyCompText').html('');
+		$('#searchForm input[name=itemkindList]').val('');
+		$('#searchForm').find('#itemkindText').html('');
 	});
 
 	$("#btnChangeItemKindCd").on("click", function(){
@@ -405,6 +409,34 @@
 		cfnOpenBrandListPopup('fnSetBrandInfo', 'M');
 	});
 	
+	// 품목 조회 선택시
+	$('#btnSearchItemkind').on('click', function() {
+		cfnOpenItemkindListPopup('fnSetItemkindInfo', 'M');
+	});
+	
+	// 품목 조회 팝업에서 호출
+	var fnSetItemkindInfo = function(result) {
+		var arrItemkind = [];
+		var itemkindText = "";
+		var sIndex = 0;
+		$('#searchForm').find('#itemkindText').html('');
+		$('#searchForm input[name=itemkindSearchTxt]').val('');
+		result.forEach(function(itemkind){
+			sIndex++; 
+			arrItemkind.push(itemkind.itemkindCd);
+		});
+
+		// 조회값이 하나일 경우 화면에 코드 노출 그외는 갯수 처리 
+		if (sIndex == 1) {
+			$('#searchForm input[name=itemkindSearchTxt]').val(arrItemkind[0]);
+		}else{
+			itemkindText = sIndex + " 개";
+			$('#searchForm').find('#itemkindText').html(itemkindText);	
+		}
+		var jsonData = JSON.stringify(arrItemkind);
+		$("#searchForm input[name=itemkindList]").val(jsonData);
+	}
+	
 	$("#btnSave").on("click", function(){
 		var rowData = gagaAgGrid.getAllRowData(gridOptions);
 		var dataArr = [];

+ 55 - 50
src/main/webapp/WEB-INF/views/goods/GoodsListForm.html

@@ -58,19 +58,11 @@
 							<button type="button" class="btn icn" id="btnSearchSupplyComp"><i class="fa fa-search"></i></button>
 							<span id="supplyCompText"></span>
 							<input type="hidden" name="supplyCompList"/>
-							<!-- <label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnY" value="Y"  checked/>자사</label>
-							<label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnN" value="N"/>입점</label>
-							<select name="supplyCompCd" id="supplyCompCd">
-								<option value="" th:if="${sessionInfo.roleCd} != 'G001_B000'">[전체]</option>
-								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-							</select>
-							<span id="multiBrand"></span> -->
 						</td>
 						<th>브랜드<em class="required" title="필수"></em></th>
 						<td>
 							<input type="text" class="w100" name="searchTxt" id="searchTxt" maxlength="20" />
 							<button type="button" class="btn icn" id="btnSearchBrand"><i class="fa fa-search"></i></button>
-							<!-- <input type="text" class="w100" name="brandCd" readonly="readonly"/> -->
 							<span id="brandText"></span>
 							<input type="hidden" name="brandList"/>
 						</td>
@@ -95,13 +87,18 @@
 					<tr>
 						<th>품목</th>
 						<td>
-							<div class="multiCheckBox"  style="width:300px">
+							<!-- <div class="multiCheckBox"  style="width:300px">
 								<button type="button" class="sltBtn" data-name="[전체]">[전체]</button>
 								<ul style="overflow:auto; height:170px;" id="grpItemkind">
 									<li><label class="chkBox" onclick="uifnAllCheck(this,'grpItemkind')"><input type="checkbox" name="전체선택" >전체선택</label></li>
 									<li th:if="${itemkindList}" th:each="oneData, status : ${itemkindList}"><label class="chkBox" data-group="grpItemkind"><input type="checkbox" name="multiItemkindCd" th:id="${'itemkindCd' + oneData.cd}" th:value="${oneData.cd}" ><th:block th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></th:block></label></li>
 								</ul>
-							</div>
+							</div> -->
+							
+							<input type="text" class="w100" name="itemkindSearchTxt" id="itemkindSearchTxt" maxlength="20" />
+							<button type="button" class="btn icn" id="btnSearchItemkind"><i class="fa fa-search"></i></button>
+							<span id="itemkindText"></span>
+							<input type="hidden" name="itemkindList"/>
 						</td>
 						<th>상품상태</th>
 						<td>
@@ -124,14 +121,6 @@
 					<tr>
 						<th>년도/시즌</th>
 						<td>
-							<!-- <select  name="styleYear" id="styleYear">
-								<option value="">[전체]</option>
-								<option th:if="${styleYearList}" th:each="oneData, status : ${styleYearList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-							</select>
-							<select  name="seasonCd" id="seasonCd">
-								<option value="">[전체]</option>
-								<option th:if="${seasonList}" th:each="oneData, status : ${seasonList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-							</select> -->
 							<div class="multiCheckBox" style="width:140px;">
 								<button type="button" class="sltBtn" data-name="[전체]">[전체]</button>
 								<ul style="overflow:auto; height:140px" id="grpStyle">
@@ -192,10 +181,6 @@
 								<option value="">[전체]</option>
 								<option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 							</select>
-							<!-- <label class="chkBox"><input type="checkbox" name="returnableYn" value="Y"/>반품가능</label>
-							<label class="chkBox"><input type="checkbox" name="changeableYn" value="Y"/>교환가능</label>
-							<label class="chkBox"><input type="checkbox" name="returnFeeFreeYn" value="Y"/>무료반품</label>
-							<label class="chkBox"><input type="checkbox" name="changeFeeFreeYn" value="Y"/>무료교환</label> -->
 						</td>
 						<th>담당MD</th>
 						<td>
@@ -376,13 +361,6 @@
 							<td colspan="3">
 								<input type="text" class="w100" name="statSupplyCompCd" id="statSupplyCompCd" maxlength="20" />
 								<button type="button" class="btn icn" id="btnSearchSupplyCompStat"><i class="fa fa-search"></i></button>
-								
-							<!-- 	<label class="rdoBtn"><input type="radio" name="statSelfYn" id="statSelfYnY" value="Y"  checked/>자사</label>
-								<label class="rdoBtn"><input type="radio" name="statSelfYn" id="statSelfYnN" value="N"/>입점</label>
-								<select name="statSupplyCompCd" id="statSupplyCompCd">
-									<option value="" th:if="${sessionInfo.roleCd} != 'G001_B000'">[선택]</option>
-									<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-								</select> -->
 								<select name="delvFeeCdC" id="delvFeeCdC" >
 									<option value="">[선택]</option>
 								</select>
@@ -402,7 +380,7 @@
 							<th>판매일시</th>
 							<td colspan="7">
 								<input name="sellStYMDC" id="sellStYMDC" type="text" class="w80 schDate" maxlength="10" required="required" data-valid-name="판매시작일" />
-								<select name="sellStHHC" id="sellStHCHC" required="required" data-valid-name="판매 시작시간">
+								<select name="sellStHHC" id="sellStHHC" required="required" data-valid-name="판매 시작시간">
 									<th:block th:each="num, index  : ${#numbers.sequence(0,23)}">
 									<option  th:value="${#numbers.formatInteger(num,2)}" th:text="|${#numbers.formatInteger(num,2)}시|" th:selected="${#numbers.formatInteger(num,2)}==0 ? 'true'">시간</option>
 									</th:block>
@@ -486,6 +464,7 @@
 			valueFormatter: function (params) { return gagaAgGrid.lookupValue(seasonList, params.value); },
 			valueParser: function (params) { return gagaAgGrid.lookupKey(seasonList, params.newValue); }
 		},
+		{headerName: "수수료율", field: "sellFeeRate" , width: 80, cellClass: 'text-center'},
 		{headerName: "정상가", field: "listPrice" , width: 100, cellClass: 'text-right'
 			,valueFormatter: function(params) {return params.value.addComma();},
 			cellEditor: 'textCellEditor',
@@ -496,7 +475,6 @@
 			cellEditor: 'textCellEditor',
 			cellEditorParams: { maxlength: 14, validType: 'numeric'}
 		},
-		/*{headerName: "할인율", field: "dcRate" , width: 90, cellClass: 'text-right'},*/
 		{headerName: "자사즉시할인가", field: "benefitPrice" , width: 120, cellClass: 'text-right'
 			,valueFormatter: function(params) {
 				if (params.value > 0) {
@@ -568,9 +546,11 @@
 		$("#searchForm input[type=radio][checked]").parent("label").addClass("checked");
 		$("#multiBrand").empty();
 		$('#searchForm input[name=brandList]').val('');
-		$('#searchForm input[name=supplyCompList]').val('');
 		$('#searchForm').find('#brandText').html('');
+		$('#searchForm input[name=supplyCompList]').val('');
 		$('#searchForm').find('#supplyCompText').html('');
+		$('#searchForm input[name=itemkindList]').val('');
+		$('#searchForm').find('#itemkindText').html('');
 		
 		$(document).find('#searchForm').find(".multiCheckBox").each(function(i, e){
 			let btnNm = $(this).find(".sltBtn").attr("data-name");
@@ -686,20 +666,7 @@
 				return false;
 			}
 		}
-
-/* 		if (!gagajf.isNull($('#searchForm input[name=supplyCompList]').val())){
-			var jsonData = JSON.parse($('#searchForm input[name=supplyCompList]').val()); 
-			if (jsonData.length > 500){
-				mcxDialog.alertC("키워드 조회값을 500 이하로 조회 하세요.", {
-					sureBtnText: "확인",
-					sureBtnClick: function() {
-						$('#searchForm textarea[name=condition]').focus();
-					}
-				});
-				return false;
-			}
-		}
- */		
+	
 		if (!gagajf.isNull($('#searchForm textarea[name=condition]').val())){
 			var arrData = $('#searchForm textarea[name=condition]').val().replace(/\r\n/g,"\n").split("\n"); 
 			if (arrData.length > 500){
@@ -819,6 +786,19 @@
 				});	
 				return false;
 			}
+			
+			var fromDate = $("#searchForm input[name=sellStYMDC]").val().replaceAll('-', '')+ $("#searchForm select[name=sellStHHC]").val();
+			var toDate = $("#searchForm input[name=sellEdYMDC]").val().replaceAll('-', '')+ $("#searchForm select[name=sellEdHHC]").val();
+
+			if (fromDate > toDate) {
+				mcxDialog.alertC("판매기간의 시작일시는 종료일시 보다 클 수 없습니다.", {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('#searchForm input[name=sellStYMDC]').focus();
+					}
+				});
+				return false;
+			}
 
 		}else{
 			if (gagajf.isNull($(objId).val())){
@@ -1036,8 +1016,6 @@
 		}
 	}
 	
-	
-	
 	//세트상품구성 클릭 시
 	$('#btnGoodsSetMake').click(function(e) {
 		cfnOpenGoodsSetPopup();
@@ -1145,6 +1123,33 @@
 		cfnOpenBrandListPopup('fnSetBrandInfo', 'M');
 	});
 	
+	// 품목 조회 선택시
+	$('#btnSearchItemkind').on('click', function() {
+		cfnOpenItemkindListPopup('fnSetItemkindInfo', 'M');
+	});
+	
+	// 품목 조회 팝업에서 호출
+	var fnSetItemkindInfo = function(result) {
+		var arrItemkind = [];
+		var itemkindText = "";
+		var sIndex = 0;
+		$('#searchForm').find('#itemkindText').html('');
+		$('#searchForm input[name=itemkindSearchTxt]').val('');
+		result.forEach(function(itemkind){
+			sIndex++; 
+			arrItemkind.push(itemkind.itemkindCd);
+		});
+
+		// 조회값이 하나일 경우 화면에 코드 노출 그외는 갯수 처리 
+		if (sIndex == 1) {
+			$('#searchForm input[name=itemkindSearchTxt]').val(arrItemkind[0]);
+		}else{
+			itemkindText = sIndex + " 개";
+			$('#searchForm').find('#itemkindText').html(itemkindText);	
+		}
+		var jsonData = JSON.stringify(arrItemkind);
+		$("#searchForm input[name=itemkindList]").val(jsonData);
+	}
 	
 	// 상태일괄변경 - 배송정책 
 	$('#btnSearchSupplyCompStat').on('click', function() {
@@ -1161,9 +1166,9 @@
 			sIndex++; 
 			arrSupplyComp.push(supplyComp.supplyCompCd);
 		});
-		
+
 		$('#searchForm input[name=statSupplyCompCd]').val(arrSupplyComp[0]);
-		cfnCreateCombo('/renderer/delvFee/list/' + $('#searchForm input[name=statSupplyCompCd]').val(), $('#searchForm select[name=delvFeeCdC]'), "[선택]");
+		cfnCreateDelvPolicyCombo( $('#searchForm input[name=statSupplyCompCd]').val(), $('#searchForm select[name=delvFeeCdC]'), "[선택]");
 	}
 	
 	// 상품이미지 미리보기 레이어에서 창 종료 이벤트

+ 32 - 7
src/main/webapp/WEB-INF/views/goods/GoodsPopupListForm.html

@@ -78,13 +78,10 @@
 				<tr>
 					<th>품목</th>
 					<td>
-						<div class="multiCheckBox"  style="width:300px">
-							<button type="button" class="sltBtn" data-name="[전체]">[전체]</button>
-							<ul style="overflow:auto; height:170px;" id="grpPItemkind">
-								<li><label class="chkBox" onclick="uifnAllCheck(this,'grpPItemkind')"><input type="checkbox" name="전체선택" >전체선택</label></li>
-								<li th:if="${itemkindList}" th:each="oneData, status : ${itemkindList}"><label class="chkBox" data-group="grpPItemkind"><input type="checkbox" name="multiItemkindCd" th:id="${'itemkindCd' + oneData.cd}" th:value="${oneData.cd}" ><th:block th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></th:block></label></li>
-							</ul>
-						</div>
+						<input type="text" class="w100" name="itemkindSearchTxt" id="itemkindSearchTxt" maxlength="20" />
+						<button type="button" class="btn icn" id="btnPopupSearchItemkind"><i class="fa fa-search"></i></button>
+						<span id="itemkindText"></span>
+						<input type="hidden" name="itemkindList"/>
 					</td>
 					<th>상품상태</th>
 					<td>
@@ -619,7 +616,35 @@
 		cfnOpenBrandListPopup('fnSetPopupBrandInfo', 'M');
 		
 	});
+	
+	// 품목 조회 선택시
+	$('#btnPopupSearchItemkind').on('click', function() {
+		cfnOpenItemkindListPopup('fnSetPopupItemkindInfo', 'M');
+	});
+	
+	// 품목 조회 팝업에서 호출
+	var fnSetPopupItemkindInfo = function(result) {
+		var arrItemkind = [];
+		var itemkindText = "";
+		var sIndex = 0;
+		$('#goodsPopupForm').find('#itemkindText').html('');
+		$('#goodsPopupForm input[name=itemkindSearchTxt]').val('');
+		result.forEach(function(itemkind){
+			sIndex++; 
+			arrItemkind.push(itemkind.itemkindCd);
+		});
 
+		// 조회값이 하나일 경우 화면에 코드 노출 그외는 갯수 처리 
+		if (sIndex == 1) {
+			$('#goodsPopupForm input[name=itemkindSearchTxt]').val(arrItemkind[0]);
+		}else{
+			itemkindText = sIndex + " 개";
+			$('#goodsPopupForm').find('#itemkindText').html(itemkindText);	
+		}
+		var jsonData = JSON.stringify(arrItemkind);
+		$("#goodsPopupForm input[name=itemkindList]").val(jsonData);
+	}
+	
 	$(document).ready(function() {
 		cfnCreateCalendar('#sellTermsP', 'stDate', 'edDate', true, '등록일', 'X');
 

+ 6 - 5
src/main/webapp/WEB-INF/views/goods/GoodsSalfRegisterForm.html

@@ -661,7 +661,8 @@
 		
 		//배송지 정책
 		$("#goodsDetailForm select[name=delvFeeCd] option:gt(0)").remove();
-		cfnCreateCombo("/renderer/delvFee/list/" + supplyCompCd, $('#goodsDetailForm select[name=delvFeeCd]'), "[선택]", '');
+		cfnCreateDelvPolicyCombo( supplyCompCd, $('#goodsDetailForm select[name=delvFeeCd]'), "[선택]");
+		//cfnCreateCombo("/renderer/delvFee/list/" + supplyCompCd, $('#goodsDetailForm select[name=delvFeeCd]'), "[선택]", '');
 		
 		//출고처
 		$("#goodsDetailForm select[name=delvLocCd] option:gt(0)").remove();
@@ -691,10 +692,10 @@
 			$("#goodsDetailForm input[name=delvFee]").val('');
 			$("#goodsDetailForm input[name=minOrdAmt]").val('');
 		}else{
-			var arrDelvFeeed = $('#goodsDetailForm select[name=delvFeeCd] option:selected').text().split('/');
-			$("#goodsDetailForm input[name=delvFee]").val(arrDelvFeeed[1].addComma());
-			var minOrdAmt = arrDelvFeeed[0].split(']');
-			$("#goodsDetailForm input[name=minOrdAmt]").val(minOrdAmt[1].addComma());
+			
+			var obj = $('#goodsDetailForm select[name=delvFeeCd] option:selected');
+			$("#goodsDetailForm input[name=delvFee]").val(obj.attr("delvFee").addComma());
+			$("#goodsDetailForm input[name=minOrdAmt]").val(obj.attr("minOrdAmt").addComma());
 		}
 	});	
 	

+ 13 - 12
src/main/webapp/WEB-INF/views/goods/GoodsSupplyPriceForm.html

@@ -32,13 +32,13 @@
 			<div class="panelContent">
 				<table class="frmStyle">
 					<colgroup>
-						<col width="10%"/>
-						<col width="15%"/>
-						<col width="10%"/>
-						<col width="15%"/>
-						<col width="10%"/>
-						<col width="15%"/>
-						<col width="10%"/>
+						<col width="8%"/>
+						<col width="17%"/>
+						<col width="8%"/>
+						<col width="17%"/>
+						<col width="8%"/>
+						<col width="20%"/>
+						<col width="8%"/>
 						<col />
 					</colgroup>
 					<tr>
@@ -64,10 +64,6 @@
 							<span id="brandText"></span>
 							<input type="hidden" name="brandList"/>
 						</td>
-						<th>상품코드<em class="required" title="필수"></em></th>
-						<td>
-							<input type="text" class="w150" name="goodsCd" id="goodsCd" maxlength="50"/>
-						</td>
 						<th>승인여부</th>
 						<td>
 							<select  name="cfrmYn" id="cfrmYn">
@@ -75,6 +71,11 @@
 								<option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 							</select>
 						</td>
+						<th rowspan="2">상품코드<em class="required" title="필수"></em></th>
+						<td rowspan="2">
+							<input type="hidden" name="search" value="searchGoodsCd"/>
+							<textarea class="textareaR2 w70p" name="condition" id="condition"></textarea>
+						</td>
 					</tr>
 					<tr>
 						<th>발생일<em class="required" title="필수"></em></th>
@@ -265,7 +266,7 @@
 		var cnt = 0;
 
 		 if( !gagajf.isNull($("#goodsPriceHstForm input[name=supplyCompList]").val())
-				|| !gagajf.isNull($("#goodsPriceHstForm input[name=goodsCd]").val())
+				|| !gagajf.isNull($("#goodsPriceHstForm textarea[name=condition]").val())
 				|| (!gagajf.isNull($("#goodsPriceHstForm input[name=stDate]").val()) && !gagajf.isNull($("#goodsPriceHstForm input[name=edDate]").val()))
 				|| !gagajf.isNull($("#goodsPriceHstForm input[name=brandList]").val())
 			){

+ 5 - 2
src/main/webapp/WEB-INF/views/withdraw/WithdrawExceptionListForm.html

@@ -494,7 +494,7 @@
 						cfnOpenModalPopup(actionUrl, 'popupReturnRequestForm');
 					}
 				*/
-
+				
 					
 				} else if (event.data.reasonCode == '02' || event.data.reasonCode == '03') { // 미착 , 과착 
 					param += "&ordNo=" 			+ event.data.orderNo;
@@ -563,7 +563,7 @@
 				param += "&ordNo=" 			+ event.data.orderNo;
 				param += "&ordDtlNo=" 		+ event.data.orderDtlNo;
 				param += "&delvFeeCd="		+ event.data.delvFeeCd;
-				param += "&ordChgGb="		+ "G681_50"";
+				param += "&ordChgGb="		+ "G681_50";
 				param += "&delvFeeCdGrp="	+ "WMS";
 				param += "&ordChgSq=" 		+ ordChgSq;
 				param += "&ordDtlNoArr=" 	+ ordDtlNoList.split(",");
@@ -572,7 +572,10 @@
 				
 				var actionUrl = "/orderChange/rtn/req/form?" + param;
 				cfnOpenModalPopup(actionUrl, 'popupReturnRequestForm');
+				
 			}
+			
+			
 		}
 	}
 

+ 1 - 1
src/main/webapp/dx5/module/dextuploadx5-application-list.js

@@ -21,7 +21,7 @@ var area = this.uFArea, ch = area.att("height"), unit = gvector.fileItemHeight,
 this.uFArea.att("filter", show ? "url(#UIS-BLURING-JOB)" : ""); } else { this.uJobBk.css("display", show ? "block" : "none"); } this.uJobTxt.replaceText("").css("display", show ? "block" : "none").att("fill", enableFilterFx ? "#000" : "#fff"); }; ApplicationForm.prototype.createUIItem = function (item) { var uitem = svgh.createUnit("svg", item.id, { "class": "css-item", x: 0, y: (gsortedList.length * gvector.fileItemHeight), width: "100%", "layout-dx5": "height:{fileItemHeight};" }); var ugroup = svgh.createUnit("g").into(uitem); var utooltip = svgh.createUnit("title").append(svgh.mkTextNode(item.name)).into(ugroup);
 var uback = svgh.createUnit("rect").attp({ "class": "css-item-back", x: 0, y: 0, width: "100%", height: "100%" }).into(ugroup);   var uchkgroup = svgh.createUnit("g", item.id + "-CHECKER", { "class": "css-item-checker" }).into(ugroup); var uchknot = svgh.createUnit("use", item.id + "-CHECKER-NOT", { "style": "display:" + (item.checked ? "none" : "block"), "xlink:href": "#UIS-CHECKER", x: 7, width: 16, height: 16, "layout-dx5": "y:50%-8.5px;" }).into(uchkgroup); var uchkchk = svgh.createUnit("use", item.id + "-CHECKER-CHK", { "style": "display:" + (item.checked ? "block" : "none"), "xlink:href": "#UIS-CHECKER-CHKED", x: 7, width: 16, height: 16, "layout-dx5": "y:50%-8.5px;" }).into(uchkgroup); if (gvector.checkerWidth === 0) uchkgroup.att("class", "hide", true);
 var uicon = svgh.createUnit("image").attp({ width: 18, height: 19, "layout-dx5": "x:8px+{checkerWidth}; y:50%-10px", "xlink:href": "../assets/icons/" + getIconFilename(item.name) }).into(ugroup);   var nameWidthFormat = "100%-32px-{opWidth}-{sizeColumnWidth}-{checkerWidth}", btnRunDisplay = false, btnDownDisplay = false; if (item.type == "VIRTUAL" && item.openUrl && gvector.openButtonVisible) { nameWidthFormat += "-20px"; btnRunDisplay = true; } if (item.type == "VIRTUAL" && item.downUrl && gvector.downloadButtonVisible) { nameWidthFormat += "-20px";
-btnDownDisplay = true; } var unamearea = svgh.createUnit("svg").attp({ "class": "css-item-name-svg", y: 0, height: "100%", "layout-dx5": "x:28px+{checkerWidth};width:" + nameWidthFormat + ";" }).into(ugroup); var ufname = svgh.createUnit("text").attp({ "class": "css-item-font-name css-item-font-color", x: 0, "layout-dx5": "y:{itemTextBaseline};", "font-size": "11px" }).append(svgh.mkTextNode(item.name)).into(unamearea); var ubtnrun = svgh.createUnit("use", item.id + "-OPRUN", { "class": "css-item-op-run", style: "cursor:pointer;display:" + (btnRunDisplay ? "block" : "none"), "xlink:href": "#UIS-RUN", width: 16, height: 16, "layout-dx5": "x:100%-{opWidth}-{sizeColumnWidth}-40px; y:50%-8px;" }).into(ugroup); var ubtndown = svgh.createUnit("use", item.id + "-OPDOWN", { "class": "css-item-op-down", style: "cursor:pointer;display:" + (btnDownDisplay ? "block" : "none"), "xlink:href": "#UIS-DOWNLOAD", width: 16, height: 16, "layout-dx5": "x:100%-{opWidth}-{sizeColumnWidth}-20px; y:50%-8px;" }).into(ugroup);
+btnDownDisplay = true; } var unamearea = svgh.createUnit("svg").attp({ "class": "css-item-name-svg", y: 0, height: "100%", "layout-dx5": "x:28px+{checkerWidth};width:" + nameWidthFormat + ";" }).into(ugroup); var ufname = svgh.createUnit("text").attp({ "class": "css-item-font-name css-item-font-color", x: 0, "layout-dx5": "y:{itemTextBaseline};", "font-size": "11px" }).append(svgh.mkTextNode(item.name)).into(unamearea); var ubtnrun = svgh.createUnit("use", item.id + "-OPRUN", { "class": "css-item-op-run", style: "cursor:pointer;display:" + (btnRunDisplay ? "block" : "none"), "xlink:href": "#UIS-RUN", width: 16, height: 16, "layout-dx5": "x:100%-{opWidth}-{sizeColumnWidth}-40px; y:50%-8px;" }).into(ugroup); var ubtndown = svgh.createUnit("use", item.id + "-OPDOWN", { "class": "css-item-op-down", style: "cursor:pointer;display:" + (btnDownDisplay ? "none" : "none"), "xlink:href": "#UIS-DOWNLOAD", width: 16, height: 16, "layout-dx5": "x:100%-{opWidth}-{sizeColumnWidth}-20px; y:50%-8px;" }).into(ugroup);
 var usize = svgh.createUnit("text").attp({ "class": "css-item-size css-item-font-name css-item-font-color", "text-anchor": "end", "layout-dx5": "x:100%-{opWidth}-8px; y:{itemTextBaseline};", "font-size": "11px" }).append(svgh.mkTextNode(item.size < 0 ? "" : getFriendlySize(item.size))).into(ugroup); var ustatus = svgh.createUnit("use", item.id + "-STATUS", { width: 16, height: 16, "layout-dx5": "x:100%-{opWidth}+7px; y:50%-8px;" }).into(ugroup); if (item.lock === true) ustatus.att("xlink:href", "#UIS-LOCK"); else if (item.status == "DONE") ustatus.att("xlink:href", "#UIS-UPDONE");
 else if (item.type == "FILE" && item.status == "WAIT") ustatus.att("xlink:href", "#UIS-UPWAIT"); else ustatus.att("xlink:href", "#UIS-VFWAIT"); svgh.createUnit("line").attp({ "class": "css-item-grid css-item-grid-color", y1: 0, y2: "100%", "shape-rendering": "crispEdges", "stroke-width": 1, "layout-dx5": "x1:100%-{opWidth}-{sizeColumnWidth}; x2:100%-{opWidth}-{sizeColumnWidth};" }).into(ugroup); svgh.createUnit("line").attp({ "class": "css-item-grid css-item-grid-color", y1: 0, y2: "100%", "shape-rendering": "crispEdges", "stroke-width": 1, "layout-dx5": "x1:100%-{opWidth}; x2:100%-{opWidth};" }).into(ugroup); svgh.createUnit("line").attp({ "class": "css-item-grid css-item-grid-color", x1: 0, y1: "100%", x2: "100%", y2: "100%", "shape-rendering": "crispEdges", "stroke-width": 1.5 }).into(ugroup);
 ugroup.atto("dataItem", item).bind("click", onItemClickHandler, false);   uchknot.atto("dataItem", item).bind("click", onFileCheckHandler, false); uchkchk.atto("dataItem", item).bind("click", onFileCheckHandler, false); ubtnrun.atto("dataItem", item).bind("click", onRunFileHandler, false); ubtndown.atto("dataItem", item).bind("click", onDownloadFileHandler, false); return uitem.element; }; ApplicationForm.prototype.updateUIItem = function (item) { var op = svgh.getAsUnit(item.id + "-STATUS");   if (op.element.correspondingUseElement) op = new SVGUnit(op.element.correspondingUseElement); if (item.lock === true) op.att("xlink:href", "#UIS-LOCK");

+ 52 - 0
src/main/webapp/ux/js/admin.common.js

@@ -207,6 +207,58 @@ var cfnCreateMultiCombo = function(actionUrl, oTarget, defaultTxt, chooseValArr,
 	}
 }
 
+/**
+ * @type   : function
+ * @access : public
+ * @desc   : Combobox 구성
+ * <pre>
+ *     cfnCreateDelvPolicyCombo("3", oTarget, "[선택]");
+ * </pre>
+ * @param  : supplyCompCd - 업체코드. 필수
+ *           oTarget - target 오브젝트. 필수
+ *           defaultTxt - default 텍스트([선택]/[전체]). option
+ *           chooseCd - 선택된 코드 값. option
+ *           isCodeDisp - 코드표시(true/false). option
+ * @return : None
+ * @since  : 2021/07/19
+ * @author : eskim
+ */
+var cfnCreateDelvPolicyCombo = function(supplyCompCd, oTarget, defaultTxt, chooseCd, isCodeDisp) {
+	if (gagajf.isNull(isCodeDisp)) isCodeDisp = true;
+
+	var actionUrl = '/renderer/delvPolicy/list/' + supplyCompCd;
+	$.getJSON(actionUrl
+		, function(result, status) {
+			if (status == 'success') {
+				$('option', oTarget).remove();
+
+				if (!gagajf.isNull(defaultTxt)) {
+					$(oTarget).append('<option value="">' + defaultTxt + '</option>');
+				}
+
+				$.each(result, function(idx, data) {
+					var tag = '<option value="' + data.delvFeeCd + '"';
+
+					if (!gagajf.isNull(chooseCd) && chooseCd == data.delvFeeCd) {
+						tag += ' selected';
+					}
+					
+					tag += ' minOrdAmt="' + data.minOrdAmt+ '"' ;
+					tag += ' delvFee="' + data.delvFee+ '"' ;
+
+					if (isCodeDisp) {
+						tag += '>[' + data.delvFeeCd + '] ' + data.delvFeeNm + '</option>';
+					} else {
+						tag += '>' + data.delvFeeNm + '</option>';
+					}
+
+					$(oTarget).append(tag);
+				});
+			}
+		});
+}
+
+
 /**
  * @type   : function
  * @access : public