GoodsMassRegisterForm.html 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. <!DOCTYPE html>
  2. <html lang="ko"
  3. xmlns:th="http://www.thymeleaf.org" >
  4. <!--
  5. *******************************************************************************
  6. * @source : GoodsMassRegisterForm.html
  7. * @desc : 대량상품등록
  8. *============================================================================
  9. * STYLE24
  10. * Copyright(C) 2020 TSIT, All rights reserved.
  11. *============================================================================
  12. * VER DATE AUTHOR DESCRIPTION
  13. * === =========== ========== =============================================
  14. * 1.0 2020.11.18 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. <!-- 검색조건 영역 -->
  26. <form id="massForm" name="massForm" >
  27. <div class="panelStyle">
  28. <ul class="notice">
  29. <li>상품을 대량으로 수정하는 페이지입니다.</li>
  30. <li>상품을 등록 할 경우 [승인대기] 상태이며, STYLE 관리자의 [승인완료] 상태 변경 후 FRONT애 노출이 가능합니다.</li>
  31. <li><th:block th:if="${wmsSyncYn == 'N'}"><em><b>WMS연동여부가 [N]입니다. 관리자에게 문의하세요.</b></em></th:block></li>
  32. </ul>
  33. <ul class="panelBar">
  34. <li class="center">
  35. <label class="off"><a href="javascript:void(0);" id="excelList" style="display: none;">엑셀다운로드</a></label>
  36. <!-- 추후 대량 수정 권한-->
  37. <span th:if="${sessionInfo.roleCd == 'G001_0000'
  38. or sessionInfo.roleCd == 'G001_A000'
  39. or sessionInfo.roleCd == 'G001_A001'
  40. or sessionInfo.roleCd == 'G001_A100'
  41. or sessionInfo.roleCd == 'G001_A101'
  42. }"
  43. th:style="'padding-left:80px;'">
  44. <button type="button" class="btn btn-default btn-lg" onclick="cfnDownloadSampleFile('SF014');">상품대량수정 등록양식 다운로드</button>
  45. <button th:if="${wmsSyncYn == 'Y'}" type="button" class="btn btn-primary btn-lg" id="btnGoodsUpdate" >대량상품 수정</button>
  46. </span>
  47. </li>
  48. </ul>
  49. </div>
  50. <div class="panelStyle" >
  51. <!-- 검색조건 영역 -->
  52. <div class="panelTitle">
  53. <h3><i class="fa fa-info-circle"></i>아래 검색조건 중 상품코드나 등록일을 꼭 입력해 주세요.</h3>
  54. </div>
  55. <div class="panelContent">
  56. <table class="frmStyle">
  57. <colgroup>
  58. <col width="10%"/>
  59. <col width="40%"/>
  60. <col width="10%"/>
  61. <col/>
  62. </colgroup>
  63. <tr>
  64. <th>상품코드<em class="required" title="필수"></em></th>
  65. <td><input type="text" class="w130" name="condition" id="condition" maxlength="50"/></td>
  66. <th>등록여부</th>
  67. <td>
  68. <select name="regSuccYn" id="regSuccYn">
  69. <option value="">[전체]</option>
  70. <option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  71. </select>
  72. </td>
  73. </tr>
  74. <tr>
  75. <th>등록일<em class="required" title="필수"></em></th>
  76. <td colspan="3" id="sellTerms"></td>
  77. </tr>
  78. </table>
  79. <ul class="panelBar">
  80. <li class="center">
  81. <button type="button" class="btn btn-gray btn-lg" id="btnInit" >초기화</button>
  82. <button type="button" class="btn btn-info btn-lg" id="btnSearch" >조회</button>
  83. </li>
  84. </ul>
  85. </div>
  86. <!-- //검색조건 영역 -->
  87. </div>
  88. <div class="panelStyle">
  89. <!-- 검색결과 영역 -->
  90. <!-- 상단버튼 영역 -->
  91. <ul class="panelBar">
  92. <li class="left">
  93. <!-- 아이콘 툴팁 -->
  94. <div class="iconTooltip">
  95. <i class="fa fa-info" aria-hidden="true"></i>
  96. <span class="left aL" style="width:580px;">
  97. <!-- class="left" 또는 class="right" -->
  98. <em>* 상품미등록 *</em><br/>
  99. - 품번 오류(자사) : 빈값, 길이 10이 아닐경우, FRJ는 '-'제외한 길이<br/>
  100. - 제조년월일 오류 : 빈값, 날짜형식이 맞는지<br/>
  101. - WMS 미존재 품번코드(자사) : 온라인 입고테이블에 품번이 없는 경우<br/>
  102. - 상품코드 중복등록요청 : 등록된 상품코드 등록요청<br/>
  103. - 항목별 오류 : 온라인에서 관리되지 않는 공통코드<br/>
  104. - 품목의 고시정보 없음 : 품목의 고시분류 매핑이 안되어 있는 경우<br/>
  105. - 고시분류 오류 : 등록요청 고시분류 와 온라인에서 품목과 매핑된 고시분류가 다른 경우<br/>
  106. <br/>
  107. <em>* 상품등록 *</em><br/>
  108. - WMS 상품 사이즈 정보 없음 : WMS에 상품코드의 사이즈가 없을 경우<br/>
  109. - 고시항목 필수 항목 오류 : 필수 고시항목의 값이 없을 경우<br/>
  110. </span>
  111. </div>
  112. <!-- //아이콘 툴팁 -->
  113. </li>
  114. </ul>
  115. <!-- //상단버튼 영역 -->
  116. <div id="gridList" style="width: 100%; height: 500px;" class="ag-theme-balham"></div>
  117. <!-- 검색결과 영역 -->
  118. </div>
  119. <!-- //검색조건 영역 -->
  120. </form>
  121. </div>
  122. <script th:inline="javascript">
  123. /*<![CDATA[*/
  124. var niClsfCdList = gagajf.convertToArray([[${niClsfCdList}]]);
  125. var columnDefs = [
  126. {headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
  127. {headerName: "작업일시", field: "regDt", width: 150, cellClass: 'text-center'},
  128. {headerName: "작업자", field: "regNm", width: 120, cellClass: 'text-center'},
  129. {headerName: "상품등록여부", field: "regSuccYn", width: 100, cellClass: 'text-center'},
  130. {headerName: "등록결과메세지", field: "regFailRsn", width: 200, cellClass: 'text-left'},
  131. {headerName: "품번", field: "goodsNum", width: 100, cellClass: 'text-center'},
  132. {headerName: "브랜드코드", field: "brandCd", width: 100, cellClass: 'text-center'},
  133. {headerName: "공급업체상품코드", field: "supplyGoodsCd", width: 130, cellClass: 'text-center'},
  134. {headerName: "공급업체코드", field: "supplyCompCd", width: 100, cellClass: 'text-center'},
  135. {headerName: "상품코드", field: "goodsCd", width: 130, cellClass: 'text-center'},
  136. {headerName: "상품명", field: "goodsNm", width: 150, cellClass: 'text-left'},
  137. {headerName: "상품타이틀", field: "goodsTnm", width: 150, cellClass: 'text-left'},
  138. {headerName: "검색어", field: "goodsSnm1", width: 150, cellClass: 'text-left'},
  139. {headerName: "원산지", field: "originCd", width: 100, cellClass: 'text-center'},
  140. {headerName: "제조일", field: "makeYmd", width: 100, cellClass: 'text-center'},
  141. {headerName: "품목", field: "itemkindCd", width: 100, cellClass: 'text-center'},
  142. {headerName: "스타일연도", field: "styleYear", width: 100, cellClass: 'text-center'},
  143. {headerName: "시즌", field: "seasonCd", width: 100, cellClass: 'text-center'},
  144. {headerName: "성별", field: "sexGb", width: 100, cellClass: 'text-center'},
  145. {headerName: "상품상태", field: "goodsStatCd", width: 100, cellClass: 'text-center'},
  146. {headerName: "정상가", field: "listPrice", width: 100, cellClass: 'text-center'},
  147. {headerName: "판매가", field: "currPrice", width: 100, cellClass: 'text-center'},
  148. {headerName: "원가", field: "costPrice", width: 100, cellClass: 'text-center'},
  149. {headerName: "정상이월", field: "formalGb", width: 100, cellClass: 'text-center'},
  150. {headerName: "상품구분", field: "goodsGb", width: 100, cellClass: 'text-center'},
  151. {headerName: "과세구분", field: "taxGb", width: 100, cellClass: 'text-center'},
  152. {headerName: "성인용품여부", field: "adultYn", width: 100, cellClass: 'text-center'},
  153. {headerName: "옵션정보", field: "optStr", width: 150, cellClass: 'text-center'},
  154. {headerName: "상품상세 html", field: "goodsContent", width: 150, cellClass: 'text-center'},
  155. {headerName: "고시분류코드", field: "niClsfCd", width: 100, cellClass: 'text-center'},
  156. {headerName: "고시내용1", field: "niContent1", width: 200, cellClass: 'text-left'},
  157. {headerName: "고시내용2", field: "niContent2", width: 200, cellClass: 'text-left'},
  158. {headerName: "고시내용3", field: "niContent3", width: 200, cellClass: 'text-left'},
  159. {headerName: "고시내용4", field: "niContent4", width: 200, cellClass: 'text-left'},
  160. {headerName: "고시내용5", field: "niContent5", width: 200, cellClass: 'text-left'},
  161. {headerName: "고시내용6", field: "niContent6", width: 200, cellClass: 'text-left'},
  162. {headerName: "고시내용7", field: "niContent7", width: 200, cellClass: 'text-left'},
  163. {headerName: "고시내용8", field: "niContent8", width: 200, cellClass: 'text-left'},
  164. {headerName: "고시내용9", field: "niContent9", width: 200, cellClass: 'text-left'},
  165. {headerName: "고시내용10", field: "niContent10", width: 200, cellClass: 'text-left'},
  166. {headerName: "고시내용11", field: "niContent11", width: 200, cellClass: 'text-left'},
  167. {headerName: "고시내용12", field: "niContent12", width: 200, cellClass: 'text-left'},
  168. {headerName: "고시내용13", field: "niContent13", width: 200, cellClass: 'text-left'},
  169. {headerName: "고시내용14", field: "niContent14", width: 200, cellClass: 'text-left'},
  170. {headerName: "고시내용15", field: "niContent15", width: 200, cellClass: 'text-left'},
  171. {headerName: "고시내용16", field: "niContent16", width: 200, cellClass: 'text-left'},
  172. {headerName: "고시내용17", field: "niContent17", width: 200, cellClass: 'text-left'},
  173. {headerName: "고시내용18", field: "niContent18", width: 200, cellClass: 'text-left'},
  174. {headerName: "고시내용19", field: "niContent19", width: 200, cellClass: 'text-left'},
  175. {headerName: "고시내용20", field: "niContent20", width: 200, cellClass: 'text-left'},
  176. {headerName: "고시내용21", field: "niContent21", width: 200, cellClass: 'text-left'},
  177. {headerName: "고시내용22", field: "niContent22", width: 200, cellClass: 'text-left'},
  178. {headerName: "고시내용23", field: "niContent23", width: 200, cellClass: 'text-left'},
  179. {headerName: "고시내용24", field: "niContent24", width: 200, cellClass: 'text-left'},
  180. {headerName: "고시내용25", field: "niContent25", width: 200, cellClass: 'text-left'},
  181. {headerName: "고시내용26", field: "niContent26", width: 200, cellClass: 'text-left'},
  182. {headerName: "고시내용27", field: "niContent27", width: 200, cellClass: 'text-left'},
  183. {headerName: "고시내용28", field: "niContent28", width: 200, cellClass: 'text-left'}
  184. ];
  185. // Get GridOptions
  186. var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
  187. $(document).ready(function() {
  188. cfnCreateCalendar('#sellTerms', 'stDate', 'edDate', true, '등록일', 'X');
  189. gagaAgGrid.createGrid('gridList', gridOptions);
  190. });
  191. //자사상품대량등록 클릭시
  192. $('#btnGoodsSelfCreate').on('click', function() {
  193. cfnExcelUploadPopup('createSelfGoods', 'createSelfGoods');
  194. });
  195. var createSelfGoods = function(result){
  196. var data = {procJob : result.procJob
  197. ,excelFileNm : result.excelFileNm
  198. };
  199. var jsonData = JSON.stringify(data);
  200. gagajf.ajaxJsonSubmit('/goods/mass/excelupload/create', jsonData, fnGoodsSelfCreateCallBack);
  201. }
  202. var fnGoodsSelfCreateCallBack = function(result){
  203. var date = new Date();
  204. $("#massForm input[name=stDate]").val(date.format("YYYY-MM-DD"));
  205. $("#massForm input[name=edDate]").val(date.format("YYYY-MM-DD"));
  206. fnGoodsListSearch();
  207. }
  208. //입점상품대량등록 클릭시
  209. $('#btnGoodsCreate').on('click', function() {
  210. cfnExcelUploadPopup('createGoods', 'createGoods');
  211. });
  212. var createGoods = function(result){
  213. var data = {procJob : result.procJob
  214. ,excelFileNm : result.excelFileNm
  215. };
  216. var jsonData = JSON.stringify(data);
  217. gagajf.ajaxJsonSubmit('/goods/mass/excelupload/create', jsonData, fnGoodsCreateCallBack);
  218. }
  219. var fnGoodsCreateCallBack = function(result){
  220. var date = new Date();
  221. $("#massForm input[name=stDate]").val(date.format("YYYY-MM-DD"));
  222. $("#massForm input[name=edDate]").val(date.format("YYYY-MM-DD"));
  223. fnGoodsListSearch();
  224. }
  225. //상품대량수정 클릭시
  226. $('#btnGoodsUpdate').on('click', function() {
  227. cfnExcelUploadPopup('updateGoods', 'updateGoods');
  228. });
  229. var updateGoods = function(result){
  230. var data = {procJob : result.procJob
  231. ,excelFileNm : result.excelFileNm
  232. };
  233. var jsonData = JSON.stringify(data);
  234. gagajf.ajaxJsonSubmit('/goods/mass/excelupload/update', jsonData, fnGoodsUpdateCallBack);
  235. }
  236. var fnGoodsUpdateCallBack = function(result){
  237. var date = new Date();
  238. $("#massForm input[name=stDate]").val(date.format("YYYY-MM-DD"));
  239. $("#massForm input[name=edDate]").val(date.format("YYYY-MM-DD"));
  240. fnGoodsListSearch();
  241. }
  242. // 초기화 클릭시
  243. $('#btnInit').on('click', function() {
  244. $('#massForm')[0].reset();
  245. });
  246. // 조회클릭시
  247. $('#btnSearch').on('click', function() {
  248. if( gagajf.isNull($("#massForm input[name=condition]").val())
  249. && gagajf.isNull($("#massForm input[name=stDate]").val())
  250. && gagajf.isNull($("#massForm input[name=edDate]").val())){
  251. mcxDialog.alertC("검색조건을 입력하세요.", {
  252. sureBtnText: "확인",
  253. sureBtnClick: function() {
  254. $('#massForm input[name=condition]').focus();
  255. }
  256. });
  257. return false;
  258. }
  259. var fromDate = $('#massForm input[name=stDate]').val();
  260. var toDate = $('#massForm input[name=edDate]').val();
  261. if (!gagajf.isNull(fromDate) || !gagajf.isNull(toDate)) {
  262. if (gagajf.isNull(fromDate) || gagajf.isNull(toDate)) {
  263. mcxDialog.alertC("등록일 조회시 시작일자와 종료일자를 입력하세요.", {
  264. sureBtnText: "확인",
  265. sureBtnClick: function() {
  266. $('#massForm input[name=stDate]').focus();
  267. }
  268. });
  269. return false;
  270. }
  271. if (fromDate > toDate) {
  272. mcxDialog.alertC("노출기간 시작일자는 종료일자 보다 클 수 없습니다.", {
  273. sureBtnText: "확인",
  274. sureBtnClick: function() {
  275. $('#massForm input[name=stDate]').focus();
  276. }
  277. });
  278. return false;
  279. }
  280. }
  281. fnGoodsListSearch();
  282. });
  283. // 조회
  284. var fnGoodsListSearch = function(gbn) {
  285. gagaAgGrid.fetch('/goods/reg/log/list', gridOptions, '#massForm');
  286. }
  287. //안내팝업
  288. var fnGoodsOpenCommentPopup = function(id) {
  289. var str = '<div class="popupWrap" id="'+id+'" style="z-index:30">';
  290. str = str + '<div class="popup modeless ui-widget-content ui-draggable ui-draggable-handle" style="display: block; position: relative;">';
  291. str = str + '<button type="button" class="close" onclick="uifnPopClose(\''+id+'\')"><i class="fa fa-times"></i></button>';
  292. str = str + '<div class="mdPopContent">';
  293. str = str + '<ul class="notice ">';
  294. str = str + '- <em>상품미등록</em>';
  295. str = str + '<li>상품코드 오류 : 빈값</li>';
  296. str = str + '<li>업체 오류 : 빈값</li>';
  297. str = str + '<li>상품명 오류 : 빈값</li>';
  298. str = str + '<li>제조국 오류 : 빈값</li>';
  299. str = str + '<li>제조년월일 오류 : 빈값, 날짜형식이 맞는지</li>';
  300. str = str + '<li>WMS 미존재 상품코드 : WMS에 상품코드가 존재하는지</li>';
  301. str = str + '<li>스타일 연도 오류 : 온라인에서 관리되지 않는 스타일 연도</li>';
  302. str = str + '<li>성별 오류 : 온라인에서 관리되지 않는 성별</li>';
  303. str = str + '<li>상품코드 중복등록요청 : 등록된 상품코드 등록요청</li>';
  304. str = str + '<li>품목 오류 : 온라인에서 관리되지 않는 품목</li>';
  305. str = str + '<li>WMS 브랜드 오류 : 온라인에서 관리되지 않는 WMS 브랜드</li>';
  306. str = str + '<li>이미지 유형 오류 : 온라인에서 관리되지 않는 이미지유형</li>';
  307. str = str + '<li>상품이미지 필수 오류 : A타입 : IMG_PATH1: 정사각형이미지(앞면),IMG_PATH3: 작사각형이미지(정면),<br/></li>';
  308. str = str + '<span style="padding-left:185px;"></span>';
  309. str = str + 'IMG_PATH4: 직사각형이미지(뒷면), IMG_PATH5: 상품상세컷(통자)';
  310. str = str + '<li>상품이미지 필수 오류 : B타입 : IMG_PATH1, IMG_PATH2</li>';
  311. str = str + '<li>품목의 고시정보 없음 : 품목의 고시분류 매핑이 안되어 있는 경우</li>';
  312. str = str + '<li>고시분류 오류 : 등록요청 고시분류 와 온라인에서 품목과 매핑된 고시분류가 다른 경우</li>';
  313. str = str + '- <em>상품등록</em>';
  314. str = str + '</ul>';
  315. str = str + '</div></div></div>';
  316. if ($('#'+ id).length == 0) {
  317. $('body').append(str);
  318. }
  319. $("#"+id).css({display:"block"});
  320. }
  321. /*]]>*/
  322. </script>
  323. </html>