GoodsListForm.html 50 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300
  1. <!DOCTYPE html>
  2. <html lang="ko"
  3. xmlns:th="http://www.thymeleaf.org">
  4. <!--
  5. *******************************************************************************
  6. * @source : GoodsListForm.html
  7. * @desc : 상품목록 Page
  8. *============================================================================
  9. * STYLE24
  10. * Copyright(C) 2020 TSIT, All rights reserved.
  11. *============================================================================
  12. * VER DATE AUTHOR DESCRIPTION
  13. * === =========== ========== =============================================
  14. * 1.0 2020.10.19 eskim 최초 작성
  15. *******************************************************************************
  16. -->
  17. <div id="main">
  18. <!-- 메인타이틀 영역 -->
  19. <div class="main-title">
  20. </div>
  21. <!-- //메인타이틀 영역 -->
  22. <!-- 메뉴 설명 -->
  23. <div class="infoBox menu-desc">
  24. </div>
  25. <form id="searchForm" name="searchForm" action="#" th:action="@{'/goods/list'}" >
  26. <input type="hidden" id="searchGb" name="searchGb" />
  27. <input type="hidden" id="imageViewYn" name="imageViewYn" />
  28. <input type="hidden" id="goodsPriceYn" name="goodsPriceYn" value="Y"/> <!-- 즉시할인판매가 조회 -->
  29. <!-- 패널 영역1 -->
  30. <div class="panelStyle" >
  31. <!-- 검색조건 영역 -->
  32. <!-- TITLE -->
  33. <div class="panelTitle">
  34. <h3><i class="fa fa-info-circle"></i>아래 검색조건 중 <font color="red">업체, 브랜드, 키워드, 발생일</font>중 하나를 꼭 입력해 주세요.</h3>
  35. <span class="panelControl">
  36. <i class="fa fa-chevron-up"></i>
  37. </span>
  38. </div>
  39. <!-- //TITLE -->
  40. <div class="panelContent">
  41. <table class="frmStyle">
  42. <colgroup>
  43. <col style="width: 7%;"/>
  44. <col/>
  45. <col style="width: 7%;"/>
  46. <col style="width: 16%;"/>
  47. <col style="width: 7%;"/>
  48. <col style="width: 18%;"/>
  49. <col style="width: 7%;"/>
  50. <col style="width: 16%;"/>
  51. </colgroup>
  52. <tr>
  53. <th>업체<em class="required" title="필수"></em></th>
  54. <td>
  55. <input type="text" class="w100" name="supplyCompSearchTxt" id="supplyCompSearchTxt" maxlength="20" />
  56. <button type="button" class="btn icn" id="btnSearchSupplyComp"><i class="fa fa-search"></i></button>
  57. <span id="supplyCompText"></span>
  58. <input type="hidden" name="supplyCompList"/>
  59. </td>
  60. <th>브랜드<em class="required" title="필수"></em></th>
  61. <td>
  62. <input type="text" class="w100" name="searchTxt" id="searchTxt" maxlength="20" />
  63. <button type="button" class="btn icn" id="btnSearchBrand"><i class="fa fa-search"></i></button>
  64. <span id="brandText"></span>
  65. <input type="hidden" name="brandList"/>
  66. </td>
  67. <th>상품타입</th>
  68. <td>
  69. <select name="goodsType" id="goodsType">
  70. <option value="">[전체]</option>
  71. <option th:if="${goodsTypeList}" th:each="oneData, status : ${goodsTypeList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  72. </select>
  73. </td>
  74. <th rowspan="4">키워드<em class="required" title="필수"></em></th>
  75. <td rowspan="4">
  76. <select name="search" id="search">
  77. <option value="searchGoodsCd">상품코드</option>
  78. <option value="searchGoodsNm">상품명</option>
  79. <option value="searchGoodsNum">품번</option>
  80. <option value="searchSupplyGoodsCd">업체상품코드</option>
  81. <option value="searchProductCode">PRODUCTCODE</option>
  82. </select>
  83. <textarea class="textareaR3 w70p" name="condition" id="condition"></textarea>
  84. </td>
  85. </tr>
  86. <tr>
  87. <th>품목</th>
  88. <td>
  89. <!-- <div class="multiCheckBox" style="width:300px">
  90. <button type="button" class="sltBtn" data-name="[전체]">[전체]</button>
  91. <ul style="overflow:auto; height:170px;" id="grpItemkind">
  92. <li><label class="chkBox" onclick="uifnAllCheck(this,'grpItemkind')"><input type="checkbox" name="전체선택" >전체선택</label></li>
  93. <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>
  94. </ul>
  95. </div> -->
  96. <input type="text" class="w100" name="itemkindSearchTxt" id="itemkindSearchTxt" maxlength="20" />
  97. <button type="button" class="btn icn" id="btnSearchItemkind"><i class="fa fa-search"></i></button>
  98. <span id="itemkindText"></span>
  99. <input type="hidden" name="itemkindList"/>
  100. </td>
  101. <th>상품상태</th>
  102. <td>
  103. <div class="multiCheckBox" style="width:200px">
  104. <button type="button" class="sltBtn btGoodsStat" data-name="[전체]">[G008_90] 승인완료</button>
  105. <ul style="overflow:auto; height:170px" id="grpGoodsStat">
  106. <li><label class="chkBox" onclick="uifnAllCheck(this,'grpGoodsStat')"><input type="checkbox" name="전체선택" >전체선택</label></li>
  107. <li th:if="${goodsStatList}" th:each="oneData, status : ${goodsStatList}">
  108. <label class="chkBox" data-group="grpGoodsStat">
  109. <input type="checkbox" name="multiGoodsStat" th:id="${'goodsStat' + oneData.cd}" th:value="${oneData.cd}" th:attr="checked=${oneData.cd == 'G008_90'}">
  110. <th:block th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></th:block>
  111. </label>
  112. </li>
  113. </ul>
  114. </div>
  115. </td>
  116. <th>정상/이월 구분</th>
  117. <td>
  118. <select name="formalGb" id="formalGb">
  119. <option value="">[전체]</option>
  120. <option th:if="${formalGbList}" th:each="oneData, status : ${formalGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  121. </select>
  122. </td>
  123. </tr>
  124. <tr>
  125. <th>년도/시즌</th>
  126. <td>
  127. <div class="multiCheckBox" style="width:140px;">
  128. <button type="button" class="sltBtn" data-name="[전체]">[전체]</button>
  129. <ul style="overflow:auto; height:140px" id="grpStyle">
  130. <li><label class="chkBox" onclick="uifnAllCheck(this,'grpStyle')"><input type="checkbox" name="전체선택" id="multiStyleYear" >전체선택</label></li>
  131. <li th:if="${styleYearList}" th:each="oneData, status : ${styleYearList}"><label class="chkBox" data-group="grpStyle"><input type="checkbox" name="multiStyleYear" th:id="${'styleYear' + oneData.cd}" th:value="${oneData.cd}" ><th:block th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></th:block></label></li>
  132. </ul>
  133. </div>
  134. <div class="multiCheckBox" style="width:170px;">
  135. <button type="button" class="sltBtn" data-name="[전체]">[전체]</button>
  136. <ul style="overflow:auto; height:170px" id="grpSeason">
  137. <li><label class="chkBox" onclick="uifnAllCheck(this,'grpSeason')"><input type="checkbox" name="전체선택" id="multiSeasonCd" >전체선택</label></li>
  138. <li th:if="${seasonList}" th:each="oneData, status : ${seasonList}"><label class="chkBox" data-group="grpSeason"><input type="checkbox" name="multiSeasonCd" th:id="${'seasonCd' + oneData.cd}" th:value="${oneData.cd}" ><th:block th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></th:block></label></li>
  139. </ul>
  140. </div>
  141. </td>
  142. <th>연령대</th>
  143. <td>
  144. <select name="ageGrpCd" id="ageGrpCd">
  145. <option value="">[전체]</option>
  146. <option th:if="${ageGrpCdList}" th:each="oneData, status : ${ageGrpCdList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  147. </select>
  148. </td>
  149. <th>성별</th>
  150. <td>
  151. <select name="sexGb" id="sexGb">
  152. <option value="">[전체]</option>
  153. <option th:if="${sexGbList}" th:each="oneData, status : ${sexGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  154. </select>
  155. </td>
  156. </tr>
  157. <tr>
  158. <th>재고연동여부</th>
  159. <td>
  160. <select name="erpStockLinkYn" id="erpStockLinkYn">
  161. <option value="">[전체]</option>
  162. <option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  163. </select>
  164. </td>
  165. <th>자사몰노출여부</th>
  166. <td>
  167. <select name="selfMallYn" id="selfMallYn">
  168. <option value="">[전체]</option>
  169. <option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  170. </select>
  171. </td>
  172. <th>품절여부</th>
  173. <td>
  174. <select name="soldOutYn" id="soldOutYn">
  175. <option value="">[전체]</option>
  176. <option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  177. </select>
  178. </td>
  179. </tr>
  180. <tr>
  181. <th>반품가능여부</th>
  182. <td>
  183. <select name="returnableYn" id="returnableYn">
  184. <option value="">[전체]</option>
  185. <option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  186. </select>
  187. </td>
  188. <th>담당MD</th>
  189. <td>
  190. <select name="mdId" id="mdId">
  191. <option value="">[전체]</option>
  192. <option th:if="${brandMdList}" th:each="oneData, status : ${brandMdList}" th:value="${oneData.cd}" th:text="${oneData.cdNm}"></option>
  193. </select>
  194. </td>
  195. <th>판매가</th>
  196. <td>
  197. <input type="text" class="w90 aR" name="currPriceSt" id="currPriceSt" maxlength="10" data-valid-type="numeric"/>원 ~ <input type="text" class="w90 aR" name="currPriceEd" id="currPriceEd" maxlength="10" data-valid-type="numeric"/>원
  198. </td>
  199. <th>할인율</th>
  200. <td>
  201. <input type="text" class="w70" name="dcRateSt" id="dcRateSt" maxlength="3" data-valid-type="numeric"/> % ~ <input type="text" class="w70" name="dcRateEd" id="dcRateEd" maxlength="3" data-valid-type="numeric"/> %
  202. </td>
  203. </tr>
  204. <tr>
  205. <th>발생일<em class="required" title="필수"></em></th>
  206. <td colspan="7" id="sellTerms"></td>
  207. </tr>
  208. </table>
  209. <ul class="panelBar">
  210. <li class="center">
  211. <button type="button" class="btn btn-gray btn-lg" id="btnInit" >초기화</button>
  212. <button type="button" class="btn btn-info btn-lg" id="btnSearch" >조회</button>
  213. </li>
  214. </ul>
  215. </div>
  216. <!-- //검색조건 영역 -->
  217. </div>
  218. <!-- 패널 영역1 -->
  219. <div class="panelStyle">
  220. <!-- 검색결과 영역 -->
  221. <!-- 상단버튼 영역 -->
  222. <ul class="panelBar">
  223. <li>
  224. <button type="button" class="btn btn-default btn-lg" onclick="fnGoodsExcelDownLoad('');">엑셀다운로드</button>
  225. <button type="button" class="btn btn-default btn-lg" onclick="fnGoodsExcelDownLoad('Y');">엑셀다운로드(이미지포함)</button>
  226. <button type="button" class="btn btn-default btn-lg" onclick="cfnDownloadSampleFile('SF003');">상품엑셀조회 양식 다운로드</button>
  227. <button type="button" class="btn btn-base btn-lg" id="btnGoodsExcelUpLoad">엑셀조회</button>
  228. </li>
  229. <li class="right">
  230. <button type="button" class="btn btn-primary btn-lg" id="btnGoodsSetMake">세트상품구성</button>
  231. <button type="button" class="btn btn-primary btn-lg" id="btnGoodsSetDeal">딜상품구성</button>
  232. 검색결과 : <strong><span id="gridRowTotalCount">0</span> 건</strong>&nbsp;
  233. 쪽번호 <span id="pgNo">0</span>/ <strong id="endPgNo">0</strong>&nbsp;&nbsp;
  234. <select id="pageSize" name="pageSize">
  235. <option value="50" selected="selected">50개씩 보기</option>
  236. <option value="100">100개씩 보기</option>
  237. <option value="500">500개씩 보기</option>
  238. <option value="1000">1000개씩 보기</option>
  239. <option value="2000">2000개씩 보기</option>
  240. </select>
  241. <input type="hidden" name="pageNo" id="pageNo" value ="1"/>
  242. </li>
  243. </ul>
  244. <!-- //상단버튼 영역 -->
  245. <div id="gridList" style="width: 100%; height: 700px;" class="ag-theme-balham lh60"></div>
  246. <ul class="panelBar">
  247. <li class="center">
  248. <div class="tablePaging" id="goodsListPagination"></div>
  249. </li>
  250. </ul>
  251. <ul class="panelBar off">
  252. <li class="right">
  253. <th:block th:if="${sessionInfo.roleCd == 'G001_0000' OR sessionInfo.roleCd == 'G001_A000' OR sessionInfo.roleCd == 'G001_A101' OR sessionInfo.roleCd == 'G001_A100' OR sessionInfo.roleCd == 'G001_A001'}">
  254. <button type="button" class="btn btn-info btn-sm" onclick="fnGoodsStatArea();" >상태일괄적용</button>
  255. </th:block>
  256. </li>
  257. </ul>
  258. <label class="off">
  259. <a href="javascript:void(0);" id="GoodsExcelList" style="display: none;">상품목록 엑셀다운로드</a>
  260. </label>
  261. <ul class="boxContent" id="goodsStatArea">
  262. <li class="pad20">
  263. <table class="frmStyle">
  264. <colgroup>
  265. <col style="width: 7%;"/>
  266. <col style="width: 18%;"/>
  267. <col style="width: 7%;"/>
  268. <col style="width: 18%;"/>
  269. <col style="width: 7%;"/>
  270. <col style="width: 18%;"/>
  271. <col style="width: 7%;"/>
  272. <col/>
  273. </colgroup>
  274. <tr>
  275. <th>상품상태</th>
  276. <td>
  277. <select name="goodsStatC" id="goodsStatC">
  278. <option value="">[선택]</option>
  279. <option th:if="${goodsStatList}" th:each="oneData, status : ${goodsStatList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  280. </select>
  281. <button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('goodsStat')">적용</button>
  282. </td>
  283. <th>재고연동여부</th>
  284. <td >
  285. <select id="erpStockLinkYnC" name="erpStockLinkYnC">
  286. <option value="">[선택]</option>
  287. <option value="Y">연동</option>
  288. <option value="N">비연동</option>
  289. </select>
  290. <button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('erpStockLinkYn')" >적용</button>
  291. </td>
  292. <th>정상/이월 구분</th>
  293. <td>
  294. <select name="formalGbC" id="formalGbC">
  295. <option value="">[선택]</option>
  296. <option th:if="${formalGbList}" th:each="oneData, status : ${formalGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  297. </select>
  298. <button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('formalGb')" >적용</button>
  299. </td>
  300. <th>반품가능여부</th>
  301. <td>
  302. <select id="returnableYnC" name="returnableYnC">
  303. <option value="">[선택]</option>
  304. <option value="Y">가능</option>
  305. <option value="N">불가</option>
  306. </select>
  307. <button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('returnableYn')" >적용</button>
  308. </td>
  309. </tr>
  310. <tr>
  311. <th>상품타이틀</th>
  312. <td colspan="3">
  313. <input id="goodsTnmC" name="goodsTnmC" type="text" class="w200" maxlength="70"/>
  314. <label class="chkBox"><input type="checkbox" name="blankFlag" value="Y"/>BLANK 적용<span></span></label>
  315. <button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('goodsTnm')" >적용</button>
  316. </td>
  317. <th>교환가능여부</th>
  318. <td>
  319. <select id="changeableYnC" name="changeableYnC">
  320. <option value="">[선택]</option>
  321. <option value="Y">가능</option>
  322. <option value="N">불가</option>
  323. </select>
  324. <button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('changeableYn')" >적용</button>
  325. </td>
  326. <th>ID당1일최대구매수량</th>
  327. <td>
  328. <input id="dayMaxOrdQtyC" name="dayMaxOrdQtyC" type="text" class="w100" data-valid-type="numeric" />
  329. <button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('dayMaxOrdQty')" >적용</button>
  330. </td>
  331. </tr>
  332. <tr>
  333. <th>최소주문수량</th>
  334. <td>
  335. <input id="minOrdQtyC" name="minOrdQtyC" type="text" class="w100" data-valid-type="numeric" />
  336. <button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('minOrdQty')" >적용</button>
  337. </td>
  338. <th>최대주문수량</th>
  339. <td>
  340. <input id="maxOrdQtyC" name="maxOrdQtyC" type="text" class="w100" data-valid-type="numeric" />
  341. <button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('maxOrdQty')" >적용</button>
  342. </td>
  343. <th>PC포인트</th>
  344. <td>
  345. <input type="text" class="w100 aR" id="pntPrateC" name="pntPrateC" data-valid-type="preal" maxlength="4"/> %
  346. <button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('pntPrate')" >적용</button>
  347. </td>
  348. <th>모바일포인트</th>
  349. <td>
  350. <input type="text" class="w100 aR" id="pntMrateC" name="pntMrateC" data-valid-type="preal" maxlength="4"/> %
  351. <button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('pntMrate')" >적용</button>
  352. </td>
  353. </tr>
  354. <tr>
  355. <th>선물 주문가능</th>
  356. <td>
  357. <select id="giftPackYnC" name="giftPackYnC">
  358. <option value="">[선택]</option>
  359. <option value="Y">가능</option>
  360. <option value="N">불가</option>
  361. </select>
  362. <button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('giftPackYn')" >적용</button>
  363. </td>
  364. <th>배송정책</th>
  365. <td colspan="5">
  366. <input type="text" class="w100" name="statSupplyCompCd" id="statSupplyCompCd" maxlength="20" />
  367. <button type="button" class="btn icn" id="btnSearchSupplyCompStat"><i class="fa fa-search"></i></button>
  368. <select name="delvFeeCdC" id="delvFeeCdC" >
  369. <option value="">[선택]</option>
  370. </select>
  371. <button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('delvFeeCd')" >적용</button>
  372. </td>
  373. </tr>
  374. <tr>
  375. <th>판매일시</th>
  376. <td colspan="3">
  377. <input name="sellStYMDC" id="sellStYMDC" type="text" class="w80 schDate" maxlength="10" required="required" data-valid-name="판매시작일" />
  378. <select name="sellStHHC" id="sellStHHC" required="required" data-valid-name="판매 시작시간">
  379. <th:block th:each="num, index : ${#numbers.sequence(0,23)}">
  380. <option th:value="${#numbers.formatInteger(num,2)}" th:text="|${#numbers.formatInteger(num,2)}시|" th:selected="${#numbers.formatInteger(num,2)}==0 ? 'true'">시간</option>
  381. </th:block>
  382. </select>
  383. <input name="sellStdtC" id="sellStdtC" type="hidden" />
  384. ~
  385. <input name="sellEdYMDC" id="sellEdYMDC" type="text" class="w80 schDate" maxlength="10" required="required" data-valid-name="판매 종료일" />
  386. <select name="sellEdHHC" id="sellEdHHC" required="required" data-valid-name="판매 종료시간">
  387. <th:block th:each="num: ${#numbers.sequence(0,23)}">
  388. <option th:value="${#numbers.formatInteger(num,2)}" th:text="|${#numbers.formatInteger(num,2)}시|" th:selected="${#numbers.formatInteger(num,2)}==23 ? 'true'">시간</option>
  389. </th:block>
  390. </select>
  391. <input name="sellEddtC" id="sellEddtC" type="hidden" />
  392. <button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('sellDate')" >적용</button>
  393. </td>
  394. <th>신규고객 주문가능</th>
  395. <td colspan="3">
  396. <select id="newCustOrdYnC" name="newCustOrdYnC">
  397. <option value="">[선택]</option>
  398. <option value="Y">가능</option>
  399. <option value="N">불가</option>
  400. </select>
  401. <input name="newCustOrdStdtC" id="newCustOrdStdtC" type="text" class="w80 schDate" maxlength="10" required="required" data-valid-name="신규고객시작일" />
  402. ~
  403. <input name="newCustOrdEddtC" id="newCustOrdEddtC" type="text" class="w80 schDate" maxlength="10" required="required" data-valid-name="신규고객종료일" />
  404. <button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('newCustOrdYn')" >적용</button>
  405. </td>
  406. </tr>
  407. </table>
  408. </li>
  409. </ul>
  410. <!-- 검색결과 영역 -->
  411. </div>
  412. </form>
  413. <!-- //패널 영역2 -->
  414. <script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js?v=20210114"></script>
  415. <script th:inline="javascript">
  416. /*<![CDATA[*/
  417. var sessRoleCd = [[${sessionInfo.roleCd}]];
  418. var goodsStatList = gagajf.convertToArray([[${goodsStatList}]]);
  419. var formalGbList = gagajf.convertToArray([[${formalGbList}]]);
  420. var seasonList = gagajf.convertToArray([[${seasonList}]]);
  421. var columnDefs = [];
  422. columnDefs = [
  423. {width: 40, minWidth: 40, cellClass: 'text-right', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
  424. {headerName: 'No', width: 60, cellClass: 'text-center',
  425. valueGetter: function(params) { return cfnGridNumner('searchForm',params.node.rowIndex, 'A');}
  426. },
  427. {
  428. headerName : "미리보기"
  429. , field : "goodsCd"
  430. , width : 100
  431. , cellClass : 'text-center'
  432. , cellRenderer: function (params) {
  433. var retStr = '<button type="button" class="btn btn-base btn-sm" onclick="btnGoodsDetailPreview(\'' + params.data.goodsCd + '\');">미리보기</button>';
  434. return retStr;
  435. }
  436. },
  437. {headerName: "이미지", field: "sysImgNm", width: 100, height: 60, cellClass: 'text-center'
  438. ,cellRenderer: function(params) {
  439. return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '?RS=60" alt="" onclick="cfnOpenImagePreViewPopup(\'goodsImgView\', \''+ _goodsUrl+ "/" + params.value +'\')" onerror="this.src=\'/image/no.png\';"/>';
  440. }
  441. },
  442. {headerName: "브랜드", field: "brandCd", width: 80, cellClass: 'text-center'},
  443. {headerName: "브랜드명", field: "brandEnm", width: 130, cellClass: 'text-center'},
  444. {headerName: "상품코드", field: "goodsCd", width: 140, cellClass: 'text-center'},
  445. {headerName: "상품명", field: "goodsNm", width: 200, cellClass: 'text-left'
  446. ,cellRenderer: function(params) {
  447. return '<a href="javascript:void(0);">' + params.value + '</a>';
  448. }
  449. },
  450. {headerName: "품목", field: "itemkindNm", width: 150, cellClass: 'text-center',
  451. cellRenderer: function (params) {
  452. if (gagajf.isNull( params.value)){
  453. return params.value;
  454. }else{
  455. return params.value.replaceAll("&gt;", ">");
  456. }
  457. }
  458. },
  459. {headerName: "전시재고", field: "stockQtySum", width: 120, cellClass: 'text-right',
  460. valueFormatter: function(params) { return params.value.addComma();},
  461. cellStyle : function(params){
  462. if ("00" == params.data.goodsStat || "10" == params.data.goodsStat || "20" == params.data.goodsStat || "30" == params.data.goodsStat) {
  463. return;
  464. }
  465. var color = "";
  466. if (params.value <= 0){
  467. color = '#ff96689c';
  468. }
  469. return { 'background-color': color};
  470. }
  471. },
  472. {headerName: "상품상태", field: "goodsStat" , width: 100, cellClass: 'text-center',
  473. cellEditorParams: { values: gagaAgGrid.extractValues(goodsStatList) },
  474. valueFormatter: function (params) { return gagaAgGrid.lookupValue(goodsStatList, params.value); },
  475. valueParser: function (params) { return gagaAgGrid.lookupKey(goodsStatList, params.newValue); }
  476. },
  477. {headerName: "년도", field: "styleYear" , width: 80, cellClass: 'text-center'},
  478. {headerName: "시즌", field: "seasonCd" , width: 80, cellClass: 'text-center',
  479. cellEditorParams: { values: gagaAgGrid.extractValues(seasonList) },
  480. valueFormatter: function (params) { return gagaAgGrid.lookupValue(seasonList, params.value); },
  481. valueParser: function (params) { return gagaAgGrid.lookupKey(seasonList, params.newValue); }
  482. },
  483. {headerName: "수수료율", field: "sellFeeRate" , width: 80, cellClass: 'text-center'},
  484. {headerName: "정상가", field: "listPrice" , width: 100, cellClass: 'text-right'
  485. ,valueFormatter: function(params) {return params.value.addComma();},
  486. cellEditor: 'textCellEditor',
  487. cellEditorParams: { maxlength: 14, validType: 'numeric'}
  488. },
  489. {headerName: "판매가", field: "currPrice" , width: 100, cellClass: 'text-right'
  490. ,valueFormatter: function(params) {return params.value.addComma();},
  491. cellEditor: 'textCellEditor',
  492. cellEditorParams: { maxlength: 14, validType: 'numeric'}
  493. },
  494. {headerName: "자사즉시할인가", field: "benefitPrice" , width: 120, cellClass: 'text-right'
  495. ,valueFormatter: function(params) {
  496. if (params.value > 0) {
  497. return params.value.addComma();
  498. }else{
  499. return '';
  500. }
  501. }
  502. },
  503. {headerName: "가격변경일", field: "priceUpdDt", width: 150, cellClass: 'text-center',
  504. cellRenderer: function(params) {
  505. return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
  506. }
  507. },
  508. {headerName: "ERP재고연동여부", field: "erpStockLinkYn", width: 120, cellClass: 'text-center'},
  509. {headerName: "이월구분", field: "formalGb", width: 100, cellClass: 'text-center',
  510. cellEditorParams: { values: gagaAgGrid.extractValues(formalGbList) },
  511. valueFormatter: function (params) { return gagaAgGrid.lookupValue(formalGbList, params.value); },
  512. valueParser: function (params) { return gagaAgGrid.lookupKey(formalGbList, params.newValue); }
  513. },
  514. {headerName: "반품가능", field: "returnableYn" , width: 90, cellClass: 'text-center'},
  515. {headerName: "등록일시", field: "regDt", width: 150, cellClass: 'text-center',
  516. cellRenderer: function(params) {
  517. return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
  518. }
  519. },
  520. {headerName: "등록자", field: "regNm" , width: 100, cellClass: 'text-center'},
  521. {headerName: "수정일시", field: "updDt", width: 150, cellClass: 'text-center',
  522. cellRenderer: function(params) {
  523. return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
  524. }
  525. },
  526. {headerName: "수정자", field: "updNm" , width: 100, cellClass: 'text-center'}
  527. ];
  528. // Get GridOptions
  529. var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
  530. // 중복 선택 가능
  531. gridOptions.rowSelection = 'multiple';
  532. gridOptions.suppressRowClickSelection = true;
  533. gridOptions.rowHeight = 60; //이미지가 있을경우 높이 지정해야함.
  534. // Row Click
  535. gridOptions.onCellClicked = function(event) {
  536. var goodsCd = event.data.goodsCd;
  537. if (event.colDef.field == "goodsNm"){
  538. cfnOpenGoodsDetailPopup('U',goodsCd);
  539. }else if (event.colDef.field == "goodsCd"){
  540. //cfnOpenFrontGoodsPopup(goodsCd, event.data.siteCd);
  541. }
  542. }
  543. gridOptions.getRowStyle = function(params) {
  544. if ("G008_00" == params.data.goodsStat || "G008_10" == params.data.goodsStat || "G008_20" == params.data.goodsStat || "G008_30" == params.data.goodsStat) {
  545. return { background: '#B5EAD7' };
  546. }
  547. }
  548. // 초기화 클릭시
  549. $('#btnInit').on('click', function() {
  550. $('#searchForm')[0].reset();
  551. //$("#searchForm input[type=radio]").removeClass("checked");
  552. $("#searchForm input[type=checkbox]").removeClass("checked");
  553. //$("#searchForm input[type=radio]").parent("label").removeClass("checked");
  554. $("#searchForm input[type=checkbox]").parent("label").removeClass("checked");
  555. $("#searchForm input[type=radio][checked]").parent("label").addClass("checked");
  556. $("#multiBrand").empty();
  557. $('#searchForm input[name=brandList]').val('');
  558. $('#searchForm').find('#brandText').html('');
  559. $('#searchForm input[name=supplyCompList]').val('');
  560. $('#searchForm').find('#supplyCompText').html('');
  561. $('#searchForm input[name=itemkindList]').val('');
  562. $('#searchForm').find('#itemkindText').html('');
  563. $(document).find('#searchForm').find(".multiCheckBox").each(function(i, e){
  564. let btnNm = $(this).find(".sltBtn").attr("data-name");
  565. $(this).find(".sltBtn").text(btnNm);
  566. });
  567. // 상품상태
  568. $(".btGoodsStat").text("[G008_90] 승인완료");
  569. });
  570. // 조회클릭시
  571. $('#btnSearch').on('click', function() {
  572. $("#searchForm input[name=pageNo]").val('1');
  573. fnGoodsListSearch('BASIC');
  574. });
  575. // 조회
  576. var fnGoodsListSearch = function(gbn) {
  577. if (typeof(gbn) != 'undefined' && gbn == 'EXCEL'){
  578. $("#searchForm input[name=searchGb]").val("EXCEL");
  579. }else{
  580. $("#searchForm input[name=searchGb]").val("BASIC");
  581. }
  582. if(!fnConditionCheck()) return;
  583. gagaPaging.init('searchForm', fnSearchCallBack, 'goodsListPagination', $('#searchForm').find('#pageSize').val());
  584. gagaPaging.load($("#searchForm input[name=pageNo]").val());
  585. }
  586. //검색 조건 확인
  587. var fnConditionCheck = function(){
  588. var formId = '#searchForm';
  589. var form = document.searchForm;
  590. if (event.keyCode === 13) return false;
  591. if($("#searchForm input[name=searchGb]").val() == "EXCEL") return true;
  592. var searchFlag = false;
  593. var cnt = 0;
  594. if( !gagajf.isNull($("#searchForm input[name=supplyCompList]").val())
  595. || !gagajf.isNull($("#searchForm textarea[name=condition]").val())
  596. || (!gagajf.isNull($("#searchForm input[name=stDate]").val()) && !gagajf.isNull($("#searchForm input[name=edDate]").val()))
  597. || !gagajf.isNull($("#searchForm input[name=brandList]").val())
  598. ){
  599. searchFlag = true;
  600. }else{
  601. /* for (i = 0; i < form.elements.length; i++ ) {
  602. var el = form.elements[i];
  603. if ($(el).prop("type") == "text" || ($(el).prop("type") == "select-one" && el.name != "search" && el.name != "pageSize")) {
  604. if (!(el.value == null || el.value == "")) {
  605. cnt++;
  606. }
  607. }
  608. }
  609. if(cnt > 0) searchFlag = true; */
  610. }
  611. if(searchFlag == false){
  612. mcxDialog.alert("검색조건을 입력하세요.");
  613. return false;
  614. }
  615. if(!gagajf.isNull($("#searchForm input[name=currPriceSt]").val()) && !gagajf.isNull($("#searchForm input[name=currPriceEd]").val())){
  616. if (Number($("#searchForm input[name=currPriceSt]").val().removeComma()) > Number($("#searchForm input[name=currPriceEd]").val().removeComma()) ){
  617. mcxDialog.alertC("판매가를 확인해 주세요.", {
  618. sureBtnText: "확인",
  619. sureBtnClick: function() {
  620. $("#searchForm input[name=currPriceEd]").focus();
  621. }
  622. });
  623. return false;
  624. }
  625. }
  626. if(!gagajf.isNull($("#searchForm input[name=dcRateSt]").val()) && !gagajf.isNull($("#searchForm input[name=dcRateEd]").val())){
  627. if (Number($("#searchForm input[name=dcRateSt]").val().removeComma()) > Number($("#searchForm input[name=dcRateEd]").val().removeComma()) ){
  628. mcxDialog.alertC("할인율를 확인해 주세요.", {
  629. sureBtnText: "확인",
  630. sureBtnClick: function() {
  631. $("#searchForm input[name=dcRateEd]").focus();
  632. }
  633. });
  634. return false;
  635. }
  636. }
  637. var fromDate = $('#searchForm input[name=stDate]').val();
  638. var toDate = $('#searchForm input[name=edDate]').val();
  639. if (!gagajf.isNull(fromDate) || !gagajf.isNull(toDate)) {
  640. if (gagajf.isNull(fromDate) || gagajf.isNull(toDate)) {
  641. mcxDialog.alertC("등록일 조회시 시작일자와 종료일자를 입력하세요.", {
  642. sureBtnText: "확인",
  643. sureBtnClick: function() {
  644. $('#searchForm input[name=stDate]').focus();
  645. }
  646. });
  647. return false;
  648. }
  649. if (fromDate > toDate) {
  650. mcxDialog.alertC("등록 시작일자는 종료일자 보다 클 수 없습니다.", {
  651. sureBtnText: "확인",
  652. sureBtnClick: function() {
  653. $('#searchForm input[name=stDate]').focus();
  654. }
  655. });
  656. return false;
  657. }
  658. }
  659. if (!gagajf.isNull($('#searchForm textarea[name=condition]').val())){
  660. var arrData = $('#searchForm textarea[name=condition]').val().replace(/\r\n/g,"\n").split("\n");
  661. if (arrData.length > 500){
  662. mcxDialog.alertC("키워드 조회값을 500 이하로 조회 하세요.", {
  663. sureBtnText: "확인",
  664. sureBtnClick: function() {
  665. $('#searchForm textarea[name=condition]').focus();
  666. }
  667. });
  668. return false;
  669. }
  670. }
  671. return true;
  672. }
  673. var fnSearchCallBack = function(result){
  674. $('#searchForm').find('#gridRowTotalCount').html(result.pageing.pageable.totalCount.addComma());
  675. $('#searchForm').find('#pageNo').val(result.pageing.pageable.pageNo.addComma());
  676. $('#searchForm').find('#pgNo').html(result.pageing.pageable.pageNo.addComma());
  677. $('#searchForm').find('#endPgNo').html(result.pageing.pageable.totalPage.addComma());
  678. gridOptions.api.setRowData(result.goodsList);
  679. gagaPaging.createPagination(result.pageing.pageable);
  680. }
  681. //페이징
  682. $('#searchForm select[name=pageSize]').on('change', function() {
  683. $("#searchForm input[name=pageNo]").val('1');
  684. fnGoodsListSearch($("#searchForm input[name=searchGb]").val());
  685. });
  686. //업체변경시
  687. $('#searchForm select[name=supplyCompCd]').on('change', function() {
  688. var actionUrl = '/renderer/supplyCompany/brand/list/' + $(this).val();
  689. if(sessRoleCd == "G001_B000"){
  690. actionUrl = '/renderer/brand/AuthBrandlist';
  691. }
  692. //$("#searchForm select[name=brandCd] option:gt(0)").remove();
  693. //cfnCreateCombo(actionUrl, $('#searchForm select[name=brandCd]'), "[전체]", brandCd);
  694. cfnCreateMultiCombo(actionUrl,"multiBrand", "[전체]",null, 'Y');
  695. });
  696. //엑셀다운로드
  697. var fnGoodsExcelDownLoad = function(flag){
  698. var formId = '#searchForm';
  699. if (gridOptions.api.getDisplayedRowCount() <= 0){
  700. mcxDialog.alert("조회된 데이터가 없습니다.<br/>다시 조회 후 다운로드 받으세요.");
  701. return;
  702. }
  703. $("#searchForm input[name=imageViewYn]").val(flag);
  704. var params = $(formId).serialize();
  705. $('#GoodsExcelList').attr({ href : '/goods/info/excel/list?' + params }).get(0).click();
  706. }
  707. //엑셀 상품 조회
  708. $('#btnGoodsExcelUpLoad').on('click', function() {
  709. cfnExcelUploadPopup('goodsExcelUpload', 'goodsExcelUpload');
  710. });
  711. var goodsExcelUpload = function(result){
  712. var data = {procJob : result.procJob
  713. ,excelFileNm : result.excelFileNm
  714. };
  715. var jsonData = JSON.stringify(data);
  716. gagajf.ajaxJsonSubmit('/goods/search/excelupload/save', jsonData, fnGoodsExcelUploadCallBack);
  717. }
  718. var fnGoodsExcelUploadCallBack = function(result){
  719. $("#searchForm input[name=pageNo]").val('1');
  720. fnGoodsListSearch("EXCEL");
  721. }
  722. //상품상태 변경시
  723. var fnChangeGoodsState = function(proc){
  724. if ('G001_0000' != sessRoleCd && 'G001_A000' != sessRoleCd && 'G001_A101' != sessRoleCd && 'G001_A100' != sessRoleCd && 'G001_A001' != sessRoleCd ){
  725. mcxDialog.alert('권한이 없습니다.');
  726. return;
  727. }
  728. var objId = '#'+proc+"C";
  729. if (proc == "goodsTnm"){
  730. if(gagajf.isNull($(objId).val()) && !$("#searchForm input:checkbox[name=blankFlag]").is(':checked')){
  731. mcxDialog.alertC('적용하실 항목을 선택해주세요.', {
  732. sureBtnText: "확인",
  733. sureBtnClick: function() {
  734. $(objId).focus();
  735. }
  736. });
  737. return;
  738. }else if(!gagajf.isNull($(objId).val()) && $("#searchForm input:checkbox[name=blankFlag]").is(':checked')){
  739. mcxDialog.alertC('적용하실 항목을 하나만 선택해주세요.', {
  740. sureBtnText: "확인",
  741. sureBtnClick: function() {
  742. $(objId).focus();
  743. }
  744. });
  745. return;
  746. }
  747. }else if (proc == "sellDate"){
  748. if(isNaN(Date.parse($("#searchForm input[name=sellStYMDC]").val()))){
  749. mcxDialog.alertC('날짜형식이 아닙니다.', {
  750. sureBtnText: "확인",
  751. sureBtnClick: function() {
  752. $("#searchForm input[name=sellStYMDC]").focus();
  753. }
  754. });
  755. return false;
  756. }
  757. if(isNaN(Date.parse($("#searchForm input[name=sellEdYMDC]").val()))){
  758. mcxDialog.alertC('날짜형식이 아닙니다.', {
  759. sureBtnText: "확인",
  760. sureBtnClick: function() {
  761. $("#searchForm input[name=sellEdYMDC]").focus();
  762. }
  763. });
  764. return false;
  765. }
  766. var fromDate = $("#searchForm input[name=sellStYMDC]").val().replaceAll('-', '')+ $("#searchForm select[name=sellStHHC]").val();
  767. var toDate = $("#searchForm input[name=sellEdYMDC]").val().replaceAll('-', '')+ $("#searchForm select[name=sellEdHHC]").val();
  768. if (fromDate > toDate) {
  769. mcxDialog.alertC("판매기간의 시작일시는 종료일시 보다 클 수 없습니다.", {
  770. sureBtnText: "확인",
  771. sureBtnClick: function() {
  772. $('#searchForm input[name=sellStYMDC]').focus();
  773. }
  774. });
  775. return false;
  776. }
  777. }else if (proc == "newCustOrdYn"){
  778. if (gagajf.isNull($(objId).val())){
  779. mcxDialog.alertC('적용하실 항목을 선택(입력)해주세요.', {
  780. sureBtnText: "확인",
  781. sureBtnClick: function() {
  782. $(objId).focus();
  783. }
  784. });
  785. return;
  786. }
  787. if ("Y" == $(objId).val()){
  788. if(isNaN(Date.parse($("#searchForm input[name=newCustOrdStdtC]").val()))){
  789. mcxDialog.alertC('날짜형식이 아닙니다.', {
  790. sureBtnText: "확인",
  791. sureBtnClick: function() {
  792. $("#searchForm input[name=newCustOrdStdtC]").focus();
  793. }
  794. });
  795. return false;
  796. }
  797. if(isNaN(Date.parse($("#searchForm input[name=newCustOrdEddtC]").val()))){
  798. mcxDialog.alertC('날짜형식이 아닙니다.', {
  799. sureBtnText: "확인",
  800. sureBtnClick: function() {
  801. $("#searchForm input[name=newCustOrdEddtC]").focus();
  802. }
  803. });
  804. return false;
  805. }
  806. var fromDate = $("#searchForm input[name=newCustOrdStdtC]").val().replaceAll('-', '')+ "000000";
  807. var toDate = $("#searchForm input[name=newCustOrdEddtC]").val().replaceAll('-', '')+ "235959";
  808. if (fromDate > toDate) {
  809. mcxDialog.alertC("신규고객기간의 시작일시는 종료일시 보다 클 수 없습니다.", {
  810. sureBtnText: "확인",
  811. sureBtnClick: function() {
  812. $('#searchForm input[name=newCustOrdEddtC]').focus();
  813. }
  814. });
  815. return false;
  816. }
  817. }
  818. }else{
  819. if (gagajf.isNull($(objId).val())){
  820. mcxDialog.alertC('적용하실 항목을 선택(입력)해주세요.', {
  821. sureBtnText: "확인",
  822. sureBtnClick: function() {
  823. $(objId).focus();
  824. }
  825. });
  826. return;
  827. }
  828. }
  829. var selectedData = gridOptions.api.getSelectedRows();
  830. if (selectedData.length == 0) {
  831. mcxDialog.alert('선택된 행이 없습니다.');
  832. return;
  833. }
  834. var goodsStatVal = '';
  835. var erpStockLinkYnVal= '';
  836. var formalGbVal= '';
  837. var returnableYnVal= '';
  838. var changeableYnVal= '';
  839. var goodsTnmVal = '';
  840. var blankFlagVal = '';
  841. var minOrdAmtVal = '';
  842. var minOrdQtyVal = '';
  843. var maxOrdQtyVal = '';
  844. var dayMaxOrdQtyVal = '';
  845. var pntPrateVal = '';
  846. var pntMrateVal = '';
  847. var giftPackYnVal = '';
  848. var delvFeeCdVal = '';
  849. var newCustOrdYnVal = '';
  850. var sellStdtVal = '';
  851. var sellEddtVal = '';
  852. var newCustOrdStdtVal = '';
  853. var newCustOrdEddtVal = '';
  854. if (proc == "goodsStat") {
  855. goodsStatVal = $(objId).val();
  856. }else if (proc == "erpStockLinkYn") {
  857. erpStockLinkYnVal = $(objId).val();
  858. }else if (proc == "formalGb") {
  859. formalGbVal = $(objId).val();
  860. }else if (proc == "returnableYn") {
  861. returnableYnVal = $(objId).val();
  862. }else if (proc == "changeableYn") {
  863. changeableYnVal = $(objId).val();
  864. }else if (proc == "goodsTnm"){
  865. if($("#searchForm input:checkbox[name=blankFlag]").is(':checked')){
  866. blankFlagVal = "Y";
  867. }else{
  868. goodsTnmVal = $(objId).val();
  869. }
  870. }else if (proc == "minOrdAmt") {
  871. minOrdAmtVal = $(objId).val().removeComma();
  872. }else if (proc == "minOrdQty") {
  873. if($(objId).val()<=0){
  874. mcxDialog.alertC('0보다 큰값을 입력 해주세요.', {
  875. sureBtnText: "확인",
  876. sureBtnClick: function() {
  877. $(objId).focus();
  878. }
  879. });
  880. return;
  881. }
  882. minOrdQtyVal = $(objId).val();
  883. }else if (proc == "maxOrdQty") {
  884. if($(objId).val()<=0){
  885. mcxDialog.alertC('0보다 큰값을 입력 해주세요.', {
  886. sureBtnText: "확인",
  887. sureBtnClick: function() {
  888. $(objId).focus();
  889. }
  890. });
  891. return;
  892. }
  893. maxOrdQtyVal = $(objId).val();
  894. }else if (proc == "dayMaxOrdQty") {
  895. if($(objId).val()<=0){
  896. mcxDialog.alertC('0보다 큰값을 입력 해주세요.', {
  897. sureBtnText: "확인",
  898. sureBtnClick: function() {
  899. $(objId).focus();
  900. }
  901. });
  902. return;
  903. }
  904. dayMaxOrdQtyVal = $(objId).val();
  905. }else if (proc == "pntPrate") {
  906. if($(objId).val()>100){
  907. mcxDialog.alertC('100보다 작거나 같은 값을 입력 해주세요.', {
  908. sureBtnText: "확인",
  909. sureBtnClick: function() {
  910. $(objId).focus();
  911. }
  912. });
  913. return;
  914. }
  915. pntPrateVal = $(objId).val();
  916. }else if (proc == "pntMrate") {
  917. if($(objId).val()>100){
  918. mcxDialog.alertC('100보다 작거나 같은 값을 입력 해주세요.', {
  919. sureBtnText: "확인",
  920. sureBtnClick: function() {
  921. $(objId).focus();
  922. }
  923. });
  924. return;
  925. }
  926. pntMrateVal = $(objId).val();
  927. }else if (proc == "giftPackYn") {
  928. giftPackYnVal = $(objId).val();
  929. }else if (proc == "delvFeeCd") {
  930. /* if (!fnGoodsDelFeeCdCheck(selectedData)){
  931. return;
  932. } */
  933. var statSupplyCompCd = $('#searchForm input[name=statSupplyCompCd]').val();
  934. var chkFlag = false;
  935. $.each(selectedData, function(idx, item) {
  936. if (item.supplyCompCd != statSupplyCompCd){
  937. mcxDialog.alert(item.goodsCd +" 상품은 배송정책의 업체와 상이합니다.");
  938. chkFlag = true;
  939. return false;
  940. }
  941. });
  942. if (chkFlag){
  943. return;
  944. }
  945. delvFeeCdVal = $(objId).val();
  946. }else if (proc == "sellDate") {
  947. sellStdtVal = $("#searchForm input[name=sellStYMDC]").val().replaceAll('-', '')+ $("#searchForm select[name=sellStHHC]").val()+"0000";
  948. sellEddtVal = $("#searchForm input[name=sellEdYMDC]").val().replaceAll('-', '')+ $("#searchForm select[name=sellEdHHC]").val()+"5959";
  949. }else if (proc == "newCustOrdYn") {
  950. newCustOrdYnVal = $(objId).val();
  951. newCustOrdStdtVal = $("#searchForm input[name=newCustOrdStdtC]").val().replaceAll('-', '')+ "000000";
  952. newCustOrdEddtVal = $("#searchForm input[name=newCustOrdEddtC]").val().replaceAll('-', '')+ "235959";
  953. }else{
  954. return;
  955. }
  956. mcxDialog.confirm('적용 하시겠습니까?', {
  957. cancelBtnText: "취소",
  958. sureBtnText: "확인",
  959. sureBtnClick: function(){
  960. var arrGoodsCd = [];
  961. $.each(selectedData, function(idx, item) {
  962. arrGoodsCd.push(item.goodsCd);
  963. });
  964. var data = {arrGoodsCd: arrGoodsCd
  965. ,goodsStat : goodsStatVal
  966. ,erpStockLinkYn : erpStockLinkYnVal
  967. ,formalGb : formalGbVal
  968. ,returnableYn : returnableYnVal
  969. ,changeableYn : changeableYnVal
  970. ,goodsTnm : goodsTnmVal
  971. ,blankFlag : blankFlagVal
  972. ,minOrdAmt : minOrdAmtVal
  973. ,maxOrdQty : maxOrdQtyVal
  974. ,dayMaxOrdQty : dayMaxOrdQtyVal
  975. ,pntPrate : pntPrateVal
  976. ,pntMrate : pntMrateVal
  977. ,giftPackYn : giftPackYnVal
  978. ,delvFeeCd : delvFeeCdVal
  979. ,newCustOrdYn : newCustOrdYnVal
  980. ,newCustOrdStdt : newCustOrdStdtVal
  981. ,newCustOrdEddt : newCustOrdEddtVal
  982. ,sellStdt : sellStdtVal
  983. ,sellEddt : sellEddtVal
  984. ,procJob : proc
  985. };
  986. var jsonData = JSON.stringify(data);
  987. gagajf.ajaxJsonSubmit('/goods/state/update', jsonData, fnChangeGoodsStateCollback);
  988. }
  989. });
  990. }
  991. // 신규고객주문가능 업체변경시 eskim
  992. // 신규고객 변경시
  993. $("#searchForm select[name=newCustOrdYnC]").bind('change', function () {
  994. var selectValue = $(this).val();
  995. if ("N" == selectValue) {
  996. $("#searchForm input[name=newCustOrdStdtC]").val('');
  997. $("#searchForm input[name=newCustOrdEddtC]").val('');
  998. }
  999. });
  1000. // 배송비정책 관련 확인
  1001. var fnGoodsDelFeeCdCheck = function(selectedData){
  1002. var statSupplyCompCd = $('#searchForm input[name=statSupplyCompCd]').val();
  1003. $.each(selectedData, function(idx, item) {
  1004. if (item.supplyCompCd != statSupplyCompCd){
  1005. mcxDialog.alert(item.goodsCd +" 상품은 배송정책의 업체와 상이합니다.");
  1006. return false;
  1007. }
  1008. });
  1009. return true;
  1010. }
  1011. var fnChangeGoodsStateCollback = function(result){
  1012. if (result.resultFlag == "FAIL"){
  1013. // mcxDialog.alert("[ " + result.returnGoods + " ]은<br/> 필수 이미지나 가격이나 고시정보가 등록되지 않아 '승인대기'나 '승인완료' 상태로 변경할 수 없습니다.<br/>상품을 확인하시고, 다시 시도해주세요.");
  1014. mcxDialog.alert("'승인대기'나 '승인완료' 상태로 변경할 수 없습니다. 아래 실패사유 수정 후 다시 시도해주세요.<br><br>" + result.failGoodsListMsg.replaceAll("&lt;", "<").replaceAll("&gt;", ">"));
  1015. return false;
  1016. }else{
  1017. mcxDialog.alert('성공적으로 저장되었습니다.');
  1018. }
  1019. fnGoodsListSearch($("#searchForm input[name=searchGb]").val());
  1020. }
  1021. //상태일괄변경 버튼 클릭시
  1022. var fnGoodsStatArea = function(){
  1023. if ($("#searchForm").find("#goodsStatArea").hasClass('off')) {
  1024. $("#searchForm").find("#goodsStatArea").removeClass('off');
  1025. $("#searchForm").find("#goodsStatArea").addClass('on');
  1026. }else{
  1027. $("#searchForm").find("#goodsStatArea").removeClass('on');
  1028. $("#searchForm").find("#goodsStatArea").addClass('off');
  1029. }
  1030. }
  1031. //세트상품구성 클릭 시
  1032. $('#btnGoodsSetMake').click(function(e) {
  1033. cfnOpenGoodsSetPopup();
  1034. });
  1035. //딜상품구성 클릭 시
  1036. $('#btnGoodsSetDeal').click(function(e) {
  1037. cfnOpenGoodsDealPopup();
  1038. });
  1039. // 자사/입점 변경여부
  1040. $("#searchForm input[name=selfYn]").bind('click change', function () {
  1041. var radioValue = $(this).val();
  1042. var selfGb = "S"; // 자사 공급 업체
  1043. if (radioValue == "N"){
  1044. selfGb = "E"; //입점 공급업체
  1045. }
  1046. var actionUrl = '/renderer/supply/company/list/'+ selfGb;
  1047. $('#searchForm').find('#multiBrand').empty();
  1048. //$("#searchForm select[name=brandCd] option:gt(0)").remove();
  1049. cfnCreateCombo(actionUrl, $('#searchForm select[name=supplyCompCd]'), "[전체]", "");
  1050. });
  1051. // 상태일괄변경 자사/입점 변경여부
  1052. /* $("#searchForm input[name=statSelfYn]").bind('click change', function () {
  1053. var radioValue = $(this).val();
  1054. var selfGb = "S"; // 자사 공급 업체
  1055. if (radioValue == "N"){
  1056. selfGb = "E"; //입점 공급업체
  1057. }
  1058. var actionUrl = '/renderer/supply/company/list/'+ selfGb;
  1059. $("#searchForm select[name=delvFeeCdC] option:gt(0)").remove();
  1060. cfnCreateCombo(actionUrl, $('#searchForm select[name=statSupplyCompCd]'), "[전체]", "");
  1061. });
  1062. // 상태일괄변경 업체변경시
  1063. $('#searchForm select[name=statSupplyCompCd]').on('change', function() {
  1064. $("#searchForm select[name=delvFeeCdC] option:gt(0)").remove();
  1065. cfnCreateCombo('/renderer/delvFee/list/' + $('#searchForm select[name=statSupplyCompCd]').val(), $('#searchForm select[name=delvFeeCdC]'), "[선택]");
  1066. });
  1067. */
  1068. // 업체 조회 선택시
  1069. $('#btnSearchSupplyComp').on('click', function() {
  1070. cfnOpenCompanyListPopup('fnSetSupplyCompInfo', 'M');
  1071. });
  1072. // 업체 조회 팝업에서 호출
  1073. var fnSetSupplyCompInfo = function(result) {
  1074. var arrSupplyComp = [];
  1075. var supplyCompText = "";
  1076. var sIndex = 0;
  1077. var supplyCompNm = "";
  1078. $('#searchForm').find('#supplyCompText').html('');
  1079. $('#searchForm input[name=supplyCompSearchTxt]').val('');
  1080. result.forEach(function(supplyComp){
  1081. sIndex++;
  1082. arrSupplyComp.push(supplyComp.supplyCompCd);
  1083. supplyCompNm = supplyComp.supplyCompNm;
  1084. });
  1085. // 조회값이 하나일 경우 화면에 코드 노출 그외는 갯수 처리
  1086. if (sIndex == 1) {
  1087. $('#searchForm input[name=supplyCompSearchTxt]').val(supplyCompNm);
  1088. }else{
  1089. supplyCompText = sIndex + " 개";
  1090. $('#searchForm').find('#supplyCompText').html(supplyCompText);
  1091. }
  1092. var jsonData = JSON.stringify(arrSupplyComp);
  1093. $("#searchForm input[name=supplyCompList]").val(jsonData);
  1094. }
  1095. // 브랜드 조회 팝업에서 호출
  1096. var fnSetBrandInfo = function(result) {
  1097. var arrbrandCd = [];
  1098. var brandText = "";
  1099. var bIndex = 0;
  1100. var brandNm = "";
  1101. $('#searchForm').find('#brandText').html('');
  1102. $('#searchForm input[name=searchTxt]').val('');
  1103. result.forEach(function(brand){
  1104. bIndex++;
  1105. arrbrandCd.push(brand.brandCd);
  1106. brandNm = brand.brandKnm;
  1107. });
  1108. // 조회값이 하나일 경우 화면에 코드 노출 그외는 갯수 처리
  1109. if (bIndex == 1) {
  1110. $('#searchForm input[name=searchTxt]').val(brandNm);
  1111. }else{
  1112. brandText = bIndex + " 개";
  1113. $('#searchForm').find('#brandText').html(brandText);
  1114. }
  1115. var jsonData = JSON.stringify(arrbrandCd);
  1116. $("#searchForm input[name=brandList]").val(jsonData);
  1117. }
  1118. // 브랜드 조회 선택시
  1119. $('#btnSearchBrand').on('click', function() {
  1120. /* if (gagajf.isNull($("#searchForm input[name=searchTxt]").val())){
  1121. mcxDialog.alert('브랜드 검색어를 입력하세요.');
  1122. return false;
  1123. } */
  1124. cfnOpenBrandListPopup('fnSetBrandInfo', 'M');
  1125. });
  1126. // 품목 조회 선택시
  1127. $('#btnSearchItemkind').on('click', function() {
  1128. cfnOpenItemkindListPopup('fnSetItemkindInfo', 'M');
  1129. });
  1130. // 품목 조회 팝업에서 호출
  1131. var fnSetItemkindInfo = function(result) {
  1132. var arrItemkind = [];
  1133. var itemkindText = "";
  1134. var sIndex = 0;
  1135. $('#searchForm').find('#itemkindText').html('');
  1136. $('#searchForm input[name=itemkindSearchTxt]').val('');
  1137. result.forEach(function(itemkind){
  1138. sIndex++;
  1139. arrItemkind.push(itemkind.itemkindCd);
  1140. });
  1141. // 조회값이 하나일 경우 화면에 코드 노출 그외는 갯수 처리
  1142. if (sIndex == 1) {
  1143. $('#searchForm input[name=itemkindSearchTxt]').val(arrItemkind[0]);
  1144. }else{
  1145. itemkindText = sIndex + " 개";
  1146. $('#searchForm').find('#itemkindText').html(itemkindText);
  1147. }
  1148. var jsonData = JSON.stringify(arrItemkind);
  1149. $("#searchForm input[name=itemkindList]").val(jsonData);
  1150. }
  1151. // 상태일괄변경 - 배송정책
  1152. $('#btnSearchSupplyCompStat').on('click', function() {
  1153. cfnOpenCompanyListPopup('fnSetSupplyCompInfoStat', 'S');
  1154. });
  1155. // 업체 조회 팝업에서 호출
  1156. var fnSetSupplyCompInfoStat = function(result) {
  1157. var arrSupplyComp = [];
  1158. var supplyCompText = "";
  1159. var sIndex = 0;
  1160. $('#searchForm input[name=statSupplyCompCd]').val('');
  1161. result.forEach(function(supplyComp){
  1162. sIndex++;
  1163. arrSupplyComp.push(supplyComp.supplyCompCd);
  1164. });
  1165. $('#searchForm input[name=statSupplyCompCd]').val(arrSupplyComp[0]);
  1166. cfnCreateDelvPolicyCombo( $('#searchForm input[name=statSupplyCompCd]').val(), $('#searchForm select[name=delvFeeCdC]'), "[선택]");
  1167. }
  1168. // 미리보기
  1169. var btnGoodsDetailPreview = function(cd){
  1170. cfnOpenFrontGoodsPopup(cd);
  1171. }
  1172. // 상품이미지 미리보기 레이어에서 창 종료 이벤트
  1173. $(document).on("mouseleave","#goodsImgView",function(){
  1174. $("#goodsImgView").remove();
  1175. });
  1176. $(document).ready(function() {
  1177. cfnCreateCalendar('#sellTerms', 'stDate', 'edDate', true, '등록일', 'X');
  1178. var selectCode = '<select name="dateGbn" id="dateGbn">';
  1179. selectCode += '<option value="R" seledted>상품등록일</option>';
  1180. selectCode += '<option value="P">가격변경일</option>';
  1181. selectCode += '<option value="S">최초승인일</option>';
  1182. selectCode += '</select>';
  1183. $("#searchForm").find('#sellTerms').prepend(selectCode);
  1184. // Create a agGrid
  1185. gagaAgGrid.createGrid('gridList', gridOptions);
  1186. });
  1187. /*]]>*/
  1188. </script>
  1189. </div>
  1190. </html>