GoodsImageForm.html 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. <!DOCTYPE html>
  2. <html lang="ko"
  3. xmlns:th="http://www.thymeleaf.org">
  4. <!--
  5. *******************************************************************************
  6. * @source : GoodsImageMassForm.html
  7. * @desc : 상품 이미지 보기 화면(대량등록)
  8. *============================================================================
  9. * STYLE24
  10. * Copyright(C) 2019 TSIT, All rights reserved.
  11. *============================================================================
  12. * VER DATE AUTHOR DESCRIPTION
  13. * === =========== ========== =============================================
  14. * 1.0 2020.11.27 eskim 최초 작성
  15. *******************************************************************************
  16. -->
  17. <div class="modalPopup" data-width="1400" data-height="800">
  18. <!-- PANELSTYLE -->
  19. <div class="panelStyle">
  20. <!-- TITLE -->
  21. <div class="panelTitle">
  22. <h2>상품 이미지 <th:block th:text="${goodsImg.mode =='U'}? '상세':'등록'"></th:block>&nbsp;<button type="button" class="btn icn" onclick="fnOpenCommentPopup('comment')" ><i class="fa fa-cog" aria-hidden="true"></i></button></h2>
  23. <button type="button" class="close" onclick="fnGoodsImgFormClose()"><i class="fa fa-times"></i></button>
  24. </div>
  25. <!-- //TITLE -->
  26. <!-- CONTENT -->
  27. <div class="panelContent">
  28. <form id="goodsImgForm" name="goodsImgForm" action="#" th:method="post">
  29. <input type="hidden" name="goodsCd" th:value="${goodsImg.goodsCd}"/>
  30. <input type="hidden" name="colorCd" th:value="${goodsImg.colorCd}"/>
  31. <ul class="notice">
  32. <li>[업로드/수정] 버튼 클릭 하면 프론트에 바로 적용되므로 최종 확인 후 업로드를 권장합니다.</li>
  33. <li>이미지 미리보기 리스트는 <em>업로드 후</em> 확인 할 수 있습니다.</li>
  34. <li>상품이미지 업로드시 오류가 발생하면 화면 종료 후 다시 창의 띄어 파일 추가작업을 다시 해주세요.</li>
  35. <li>자사 상품의 <em>셋트/딜 상품</em> 이미지 등록시 파일명의 색상코드는 <em>'XX'</em>로 생성하여 진행해 주세요.</li>
  36. <li>자사 상품의 <em>외부몰용</em> 상품이미지(상품코드_색상코드_<em>X1</em>.jpg)의 사이즈는 <em>1000 x 1000</em> 입니다.</li>
  37. </ul>
  38. <table class="frmStyle">
  39. <colgroup>
  40. <col width="7%"/>
  41. <col/>
  42. <col width="7%"/>
  43. <col width="10%"/>
  44. <col width="10%"/>
  45. <col width="5%"/>
  46. <col width="10%"/>
  47. <col width="5%"/>
  48. <col width="7%"/>
  49. <col width="18%"/>
  50. </colgroup>
  51. <tr>
  52. <th>상품코드</th>
  53. <td th:text="${goodsImg.goodsCd}">14373767</td>
  54. <th>컬러명</th>
  55. <td th:text="${goodsImg.colorNm}">PINK</td>
  56. <th>대표 이미지순번</th>
  57. <td><input type="text" class="text-right" name="defaultImgOrd" maxlength="3" th:value="${defaultImgOrd}" required="required" data-valid-type="numeric" data-valid-name="대표이미지순번"/></td>
  58. <th>마우스오버 이미지순번</th>
  59. <td><input type="text" class="text-right" name="mouseoverImgOrd" maxlength="3" th:value="${mouseoverImgOrd}" required="required" data-valid-type="numeric" data-valid-name="마우스오버 이미지순번"/></td>
  60. <th>모델정보</th>
  61. <td><input type="text" name="modelInfo" maxlength="50" th:value="${modelInfo}" required="required" /></td>
  62. </tr>
  63. <tr>
  64. <th>이미지등록</th>
  65. <td class="dexterArea" colspan="3">
  66. <!-- 덱스터 테이블 영역 -->
  67. <ul class="dexterTable">
  68. <li class="dexterNo" id="dx5Index">
  69. <!-- 덱스터 테이블 번호 -->
  70. <!-- //덱스터 테이블 번호 -->
  71. </li>
  72. <li>
  73. <!-- 덱스터 테이블 삽입 -->
  74. <!-- 덱스터 테이블 삽입<br/>공간은 테이블 넓이에 따라 자동으로 넓어집니다.<br/>
  75. (최소 넓이 : 350px로 설정됨)<br/> -->
  76. <div id="dext5-container" style="width: 100%; height: 450px;"></div>
  77. <!-- //덱스터 테이블 -->
  78. <li>
  79. </ul>
  80. <!-- //덱스터 테이블 영역 -->
  81. </td>
  82. <td colspan="6" class="verticalTop">
  83. <!-- 이미지 카드 영역 -->
  84. <div class="cardArea" id="dx5CardArea">
  85. <!-- 이미지 카드 -->
  86. </div>
  87. <!-- //이미지 카드 영역 -->
  88. </td>
  89. </tr>
  90. </table>
  91. </form>
  92. </div>
  93. <!-- 버튼 배치 영역 -->
  94. <ul class="panelBar marT10">
  95. <li class="center">
  96. <button type="button" class="btn btn-base btn-sm" id="btnAddFiles">파일 추가</button>
  97. <button type="button" class="btn btn-default btn-sm" onclick="gagaDx5.deleteChooseFile();">선택 삭제</button>
  98. <button type="button" class="btn btn-default btn-sm" onclick="gagaDx5.deleteAllFiles();">전체 삭제</button>
  99. <button type="button" class="btn btn-info btn-sm" onclick="gagaDx5.moveFile(true);">위로 이동</button>
  100. <button type="button" class="btn btn-info btn-sm" onclick="gagaDx5.moveFile(false);">아래로 이동</button>
  101. <button type="button" class="btn btn-base btn-sm" onclick="gagaDx5.uploadFiles();">업로드/수정</button>
  102. </li>
  103. </ul>
  104. <!-- //버튼 배치 영역 -->
  105. </div>
  106. </div>
  107. <script type="text/javascript" src="/dx5/dextuploadx5-configuration.js?v=2020122101"></script>
  108. <script type="text/javascript" src="/dx5/dextuploadx5.js?v=2020122101"></script>
  109. <script type="text/javascript" src="/ux/plugins/gaga/gaga.dx5.js?2020122101"></script>
  110. <script th:inline="javascript">
  111. /*<![CDATA[*/
  112. var goodsImgList = [[${goodsImgList}]];
  113. //--------------------------------------------------------------------------
  114. // Dextupload X5 이벤트 Start
  115. //--------------------------------------------------------------------------
  116. // Dextupload X5 생성
  117. gagaDx5.createDX5("dext5", "btnAddFiles", _goodsUrl, "goods");
  118. // Dextupload X5 생성 후 호출되는 이벤트
  119. var onDX5Created = function(id) {
  120. var actionUrl = '/dext/files/upload/goods';
  121. gagaDx5.onDX5Created(actionUrl, goodsImgList);
  122. }
  123. // Dextupload X5 에러 시 호출되는 이벤트
  124. var onDX5Error = function(id, code, msg) {
  125. mcxDialog.alert(id + " => " + code + "\n" + msg);
  126. }
  127. // Dextupload X5 업로드 성공 시 호출되는 이벤트
  128. var onDX5UploadCompleted = function(id) {
  129. gagaDx5.uploadAfterProcess();
  130. }
  131. // Dextupload X5 이미지 등록이 완료된 후 호출되는 이벤트
  132. var onDX5ItemsAdded = function(id, count) {
  133. gagaDx5.resortDX5FileList();
  134. }
  135. //--------------------------------------------------------------------------
  136. // Dextupload X5 이벤트 End
  137. //--------------------------------------------------------------------------
  138. // 업로드 후처리. 반드시 구현해야 함. (gaga.dx5.js 파일에서 호출됨)
  139. var fnUploadAfterProcess = function(id, result) {
  140. // if (typeof(result) != 'undefined') {
  141. // if (!gagajf.isNull(result.error.message)) {
  142. // gagaAlert.alert(result.error.message);
  143. // return;
  144. // }
  145. // }
  146. console.log(result);
  147. var dx = dx5.get(id);
  148. var updatedData = [];
  149. // 삭제한 파일 설정
  150. var deleteFiles = dx.getRemovedFiles();
  151. if (deleteFiles.length > 0) {
  152. $.each(deleteFiles, function(idx, item) {
  153. var params = new Object();
  154. params.mode = 'D';
  155. params.goodsCd = $('#goodsImgForm input[name=goodsCd]').val();
  156. params.colorCd = $('#goodsImgForm input[name=colorCd]').val();
  157. params.dispOrd = idx + 1;
  158. params.orgImgNm = item.name;
  159. params.sysImgNm = item.name;
  160. params.sysImgUrl = item.url;
  161. params.defaultImgYn = 'N';
  162. updatedData.push(params);
  163. });
  164. }
  165. // 업로드한 파일 및 순서 변경한 파일 설정
  166. var totCnt = dx.getTotalItemCount();
  167. if (totCnt > 0) {
  168. for (var i = 0; i < totCnt; i++) {
  169. var item = dx.getItemByIndex(i);
  170. var params = new Object();
  171. params.mode = (item.type == 'FILE') ? 'C' : '';
  172. params.goodsCd = $('#goodsImgForm input[name=goodsCd]').val();
  173. params.colorCd = $('#goodsImgForm input[name=colorCd]').val();
  174. params.dispOrd = i + 1;
  175. params.orgImgNm = item.name;
  176. params.sysImgNm = item.name;
  177. params.sysImgUrl = item.url;
  178. params.defaultImgYn = ($('#goodsImgForm input[name=defaultImgOrd]').val() == (i + 1)) ? 'Y' : 'N';
  179. params.mouseoverImgYn = ($('#goodsImgForm input[name=mouseoverImgOrd]').val() == (i + 1)) ? 'Y' : 'N';
  180. params.modelInfo = $('#goodsImgForm input[name=modelInfo]').val();
  181. updatedData.push(params);
  182. }
  183. }
  184. var jsonData = JSON.stringify(updatedData);
  185. console.log(jsonData);
  186. gagajf.ajaxJsonSubmit('/goods/thumbnail/image/save', jsonData, fnUploadCallback);
  187. }
  188. // 콜백함수
  189. var fnUploadCallback = function(result) {
  190. // 기본이미지명 조회
  191. var actionUrl = '/goods/default/image/url'
  192. + '?goodsCd=' + $('#goodsImgForm input[name=goodsCd]').val()
  193. + '&colorCd=' + $('#goodsImgForm input[name=colorCd]').val();
  194. $.get(actionUrl
  195. , function(url) {
  196. //console.log(url);
  197. // 상세메인
  198. $("#goodsDetailForm").find("#goodsImgUrl").attr('src', url+"?RS=130");
  199. // 상세옵션
  200. $("#goodsDetailForm").find("#defaultImg").attr('src', url+"?RS=60");
  201. if (gagajf.isNull(url)){
  202. $("#goodsDetailForm").find("#btnDefaultImg").text("등록");
  203. }else{
  204. $("#goodsDetailForm").find("#btnDefaultImg").text("수정");
  205. }
  206. fnGoodsImgFormClose();
  207. });
  208. }
  209. // 더블클릭시 썸네일 지정 후 첫번째로 이동
  210. function onDX5ItemDoubleClick(id, itemIndex, itemId, itemType) {
  211. var dx = dx5.get(id);
  212. var gubun = $("#gubun").val();
  213. gagaAlert.confirm('선택하신 이미지를 대표이미지로 선택하시겠습니까?', function() {
  214. firstMoveUp(itemIndex);
  215. return false;
  216. });
  217. }
  218. // 선택 항목을 첫번째로 이동
  219. function firstMoveUp(selIndex){
  220. ti = parseInt(selIndex, 10);
  221. for(var i = ti; i > 0; i--) {
  222. dx5.get("dext5").moveItemUp(i);
  223. }
  224. }
  225. //창종료
  226. var fnGoodsImgFormClose = function(){
  227. $('.dx5-pop-up').remove();
  228. $('.dx5-pop-dn').remove();
  229. $('.dx5-pop-pv').remove();
  230. $('.dx5-pop-cp').remove();
  231. $('.dx5-pop-ud').remove();
  232. uifnPopupClose('popupGoodsImage');
  233. }
  234. //안내팝업
  235. var fnOpenCommentPopup = function(id) {
  236. var str = '<div class="popupWrap" id="'+id+'" style="z-index:30">';
  237. str = str + '<div class="modalPopup" data-width="500">';
  238. str = str + '<div class="panelStyle">';
  239. str = str + '<div class="panelTitle"><button type="button" class="close" onclick="uifnPopupClose(\''+id+'\')"><i class="fa fa-times"></i></button></div>';
  240. str = str + '<div class="panelContent">';
  241. str = str + '<ul class="notice ">';
  242. str = str + '<em><b>* 자사 상품 이미지 파일명</b></em>';
  243. str = str + '<li><b>상품메인컷</b> : 상품코드_색상코드_<b>01</b>.jpg<em>(앞)</em>,상품코드_색상코드_<b>02</b>.jpg<em>(뒤)</em></li>';
  244. str = str + '<li><b>상품모델컷</b> : 상품코드_색상코드_<b>C1</b>.jpg ~ 상품코드_색상코드_<b>C5</b>.jpg</li>';
  245. str = str + '<li><b>상품상세컷</b> : 상품코드_색상코드_<b>D1</b>.jpg ~ 상품코드_색상코드_<b>D20</b>.jpg</li>';
  246. str = str + '<li><b>상품소재컷</b> : 상품코드_색상코드_<b>F1</b>.jpg</li>';
  247. str = str + '<li><b>상품라벨컷</b> : 상품코드_색상코드_<b>L1</b>.jpg, (상품코드_색상코드_<b>L2</b>.jpg)</li>';
  248. str = str + '<li><b>상품외부몰용</b> : 상품코드_색상코드_<b>X1</b>.jpg</li>';
  249. str = str + '<br/>';
  250. str = str + '<em><b>* 입점 상품 이미지 파일명</b></em>';
  251. str = str + '<li><b>상품메인컷</b> : 상품코드_<b>01</b>.jpg<em>(앞)</em>,상품코드_<b>02</b>.jpg<em>(뒤)</em></li>';
  252. str = str + '<li><b>상품모델컷</b> : 상품코드_<b>C1</b>.jpg ~ 상품코드_<b>C5</b>.jpg</li>';
  253. str = str + '<li><b>상품상세컷</b> : 상품코드_<b>D1</b>.jpg ~ 상품코드_<b>D20</b>.jpg</li>';
  254. str = str + '<li><b>상품소재컷</b> : 상품코드_<b>F1</b>.jpg</li>';
  255. str = str + '<li><b>상품라벨컷</b> : 상품코드_<b>L1</b>.jpg, (상품코드_<b>L2</b>.jpg)</li>';
  256. str = str + '</ul>';
  257. str = str + '</div></div></div></div>';
  258. if ($('#'+ id).length == 0) {
  259. $('body').append(str);
  260. }
  261. uifnPopupOpen(id);
  262. //$("#"+id).css({display:"block"});
  263. }
  264. /*]]>*/
  265. </script>
  266. </html>