eskim 4 лет назад
Родитель
Сommit
a2202de098

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

@@ -152,6 +152,15 @@ public class TsaGoodsController extends TsaBaseController {
 	@PostMapping("/itemkind/base/list")
 	@ResponseBody
 	public Collection<Itemkind> getItemkindList(@RequestBody Itemkind itemkind) {
+		
+		// multi row 검색관련 처리
+		if (!StringUtils.isBlank(itemkind.getSearchItemkindCd())) {
+			itemkind.setMultiItemkindCd(itemkind.getSearchItemkindCd().replaceAll("\r", "").trim().split("\n"));
+		}
+		if (!StringUtils.isBlank(itemkind.getSearchItemkindNm())) {
+			itemkind.setMultiItemkindNm(itemkind.getSearchItemkindNm().replaceAll("\r", "").trim().split("\n"));
+		}
+		
 		return goodsService.getItemkindList(itemkind);
 	}
 
@@ -3491,5 +3500,20 @@ public class TsaGoodsController extends TsaBaseController {
 		return super.ok(message.getMessage("SUCC_0003"));
 	}
 
+	/**
+	 * 품목 목록 화면(팝업)
+	 * @param
+	 * @return
+	 * @author eskim
+	 * @since 2021. 07. 16
+	 */
+	@GetMapping("/itemkind/popup/form")
+	public ModelAndView itemkindPopupForm(Itemkind itemkind) {
+		ModelAndView mav = new ModelAndView();
+
+		mav.addObject("params", itemkind);
+		mav.setViewName("goods/ItemkindPopupForm");
+		return mav;
+	}
 
 }

+ 15 - 1
src/main/java/com/style24/persistence/domain/Itemkind.java

@@ -1,5 +1,6 @@
 package com.style24.persistence.domain;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.style24.persistence.TscBaseDomain;
 
 import lombok.Data;
@@ -21,7 +22,20 @@ public class Itemkind extends TscBaseDomain {
 	private String sizeGb;			// 사이즈구분(T:상의, B:하의, S:신발)
 	private String useYn;			// 사용여부
 	private String itemkindLeafNm;		// leaf 품목명
+	
+	// 검색조건
+	private String searchTxt;		// 검색어
+	private String callbackFn;		// 콜백함수
+	private String multiGb;			// 멀티 셀렉트 구분
+	private String searchItemkindCd;
+	private String searchItemkindNm;
+	
+	/* 품목검색 Multi CheckBox 항목*/
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiItemkindCd;
 
-//	private String index;
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiItemkindNm;
+	/* 품목검색 Multi CheckBox 항목*/
 
 }

+ 13 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml

@@ -22,6 +22,19 @@
 		<if test="useYn != null and useYn != ''">
 		AND USE_YN = #{useYn} 
 		</if>
+		<if test="multiItemkindCd != null and multiItemkindCd.length > 0">
+		AND ITEMKIND_CD IN
+		    <foreach collection="multiItemkindCd" item="item" index="index"  open="(" close=")" separator=",">
+		     UPPER(#{item})
+		    </foreach>
+		</if>
+		<if test="multiItemkindNm != null and multiItemkindNm.length > 0">
+		AND (
+		    <foreach collection="multiItemkindNm" item="item" index="index" separator="or">
+		    ITEMKIND_NM LIKE CONCAT('%',#{item},'%')
+		  </foreach>
+		 )
+		</if>
 		ORDER BY ITEMKIND_CD
 	</select>
 

+ 138 - 0
src/main/webapp/WEB-INF/views/goods/ItemkindPopupForm.html

@@ -0,0 +1,138 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : ItemkindPopupForm.html
+ * @desc    : 품복 팝업 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.07.16   eskim       최초 작성
+ *******************************************************************************
+ -->
+<div class="modalPopup" data-width="600" id="popupItemkindList">
+	<div class="panelStyle"  style="max-height:700px;">
+		<!-- TITLE -->
+		<div class="panelTitle">
+			<strong>품목 목록</strong>
+			<button type="button" class="close" onclick="uifnPopupClose('popupItemkindList');"><em class="fa fa-times"></em></button>
+		</div>
+		<!-- //TITLE -->
+		<!-- 검색 조건 -->
+		<div class="panelContent">
+			<form id="searchItemkindListForm" name="searchItemkindListForm" action="#" th:action="@{'/goods/itemkind/base/list'}" onsubmit="$('#btnSearchItemkindList').trigger('click'); return false;">
+				<table class="frmStyle" aria-describedby="검색조건">
+					<colgroup>
+						<col style="width:15%;"/>
+						<col style="width:35%;"/>
+						<col style="width:15%;"/>
+						<col/>
+					</colgroup>
+					<tbody>
+						<tr>
+							<th>품목코드</th>
+							<td>
+								<textarea class="textareaR2" name="searchItemkindCd" id="searchItemkindCd"></textarea>
+							</td>
+							<th>품목명</th>
+							<td>
+								<textarea class="textareaR2" name="searchItemkindNm" id="searchItemkindNm"></textarea>
+							</td>
+						</tr>
+					</tbody>
+				</table>
+				<ul class="panelBar">
+					<li class="center">
+						<button type="button" class="btn btn-base btn-lg" id="btnSearchItemkindList">조회</button>
+					</li>
+				</ul>
+			</form>
+			<!-- 리스트 영역 -->
+			<div class="panelContent">
+				<div id="gridItemkindList" style="width: 100%; height: 380px" class="ag-theme-balham"></div>
+			</div>
+			<!-- //리스트 영역 -->
+			
+			<!-- 버튼 배치 영역 -->
+			<ul class="panelBar">
+				<li class="right">
+					<button type="button" class="btn btn-info btn-lg" id="btnConfirmItemkind">확인</button>
+				</li>
+			</ul>
+		</div>
+		<!-- //검색 조건 -->
+	</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	let headerSelection = false;
+	if([[${params.multiGb}]] == "M") headerSelection = true;
+	let columnDefsMdList = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: headerSelection, checkboxSelection: true, filter: false},
+		{headerName: "품목코드", field: "itemkindCd", width: 150, cellClass: 'text-center'},
+		{headerName: "품목명", field: "itemkindNm", width: 370, cellClass: 'text-left',
+			cellRenderer: function(params) {
+				return params.value.replaceAll("&gt;", ">");
+			}
+		}
+	];
+
+	let gridOptionsItemkindList = gagaAgGrid.getGridOptions(columnDefsMdList);
+	if(headerSelection) {	gridOptionsItemkindList.rowSelection = "multiple";	}
+
+	// Row double click
+	gridOptionsItemkindList.onRowDoubleClicked = function(event) {
+		$('#btnConfirmItemkind').trigger('click');
+	}
+
+	// 조회
+	$('#btnSearchItemkindList').on('click', function() {
+		// Fetch data
+		gagaAgGrid.fetch($('#searchItemkindListForm').prop('action'), gridOptionsItemkindList, '#searchItemkindListForm');
+	});
+	
+	// 확인
+	$('#btnConfirmItemkind').on('click', function() {
+		var selectedData = gagaAgGrid.selectedRowData(gridOptionsItemkindList);
+		
+		if (selectedData.length == 0) {
+			mcxDialog.alert('선택된 품목이 없습니다.');
+			return false;
+		}
+		
+		var callbackFn = [[${params.callbackFn}]];
+
+		var jsonData = JSON.stringify(selectedData);
+
+		if (typeof callbackFn != 'undefined' && callbackFn) {
+			if (typeof callbackFn == 'function') {
+				callbackFn(jsonData);
+			} else {
+				if (callbackFn) {
+					if (callbackFn.indexOf("(") == -1) {
+						(new Function(callbackFn + "(" + jsonData + ");"))();
+					} else {
+						(new Function(callbackFn(jsonData)))();
+					}
+				}
+			}
+			uifnPopupClose('popupItemkindList');
+		}
+	});
+	
+	$(document).ready(function() {
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridItemkindList', gridOptionsItemkindList);
+		
+		//$('#btnSearchItemkindList').trigger('click');
+	});
+/*]]>*/
+</script>
+
+</div>
+
+</html>

+ 22 - 1
src/main/webapp/ux/js/admin.popup.js

@@ -1030,4 +1030,25 @@ var cfnOpenExtmallOrderPopup = function(ordNo) {
 	var actionUrl = "/shoplinker/order/extmall/info";
 	if (typeof(ordNo) != 'undefined') actionUrl += "?ordNo=" + ordNo;
 	cfnOpenModalPopup(actionUrl, "popupExtmallOrderDetail");
-}
+}
+
+/**
+ * @type   : function
+ * @access : public
+ * @desc   : 품목 목록 팝업
+ * <pre>
+ *     cfnOpenItemkindListPopup('fnResult');
+ *     or
+ *     cfnOpenItemkindListPopup('fnResult', 'S');
+ *     or
+ *     cfnOpenItemkindListPopup('fnResult', 'S', 'TBJ');
+ * </pre>
+ * @since  : 2021/07/16
+ * @author : eskim
+ */
+var cfnOpenItemkindListPopup = function(callbackfn, multiGb, searchTxt) {
+	var actionUrl = '/goods/itemkind/popup/form?callbackFn=' + callbackfn;
+	if (typeof(multiGb) != 'undefined' && multiGb != null && multiGb == "M") actionUrl += "&multiGb=" + multiGb; else actionUrl += "&multiGb=S";
+	if (typeof(searchTxt) != 'undefined') actionUrl += "&searchTxt=" + encodeURIComponent(searchTxt);
+	cfnOpenModalPopup(actionUrl, "popupItemkindList");
+}