GoodsListForm.html 51 KB

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