MypageReviewFormWeb.html 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428
  1. <!DOCTYPE html>
  2. <html lang="ko" xmlns:th="http://www.thymeleaf.org"
  3. xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
  4. layout:decorator="web/common/layout/MypageLayoutWeb">
  5. <!--
  6. *******************************************************************************
  7. * @source : MypageReviewFormWeb.html
  8. * @desc : 마이페이지 > 리뷰 Page
  9. *============================================================================
  10. * STYLE24
  11. * Copyright(C) 2021 TSIT, All rights reserved.
  12. *============================================================================
  13. * VER DATE AUTHOR DESCRIPTION
  14. * === =========== ========== =============================================
  15. * 1.0 2021.03.24 sowon 최초 작성
  16. *******************************************************************************
  17. -->
  18. <body>
  19. <th:block layout:fragment="content">
  20. <div class="content myReviewList"> <!-- 페이지특정 클래스 = myReviewList -->
  21. <div class="cont_body">
  22. <!-- CONT-BODY -->
  23. <div class="lnb">
  24. <div class="lnb_tit">
  25. <h2>마이페이지</h2>
  26. </div>
  27. <div class="lnb_list">
  28. <ul id="mypageLnbList"></ul>
  29. </div>
  30. </div>
  31. <!-- <div class="lnb_list">
  32. <ul id="mypageLnbList"></ul>
  33. </div> -->
  34. <div class="cont">
  35. <div class="sec_head">
  36. <h3 class="subH1">리뷰</h3>
  37. </div>
  38. <div class="sec_body">
  39. <div class="com_info_txt">
  40. <p class="tit">리뷰 안내</p>
  41. <ul>
  42. <li>일반 리뷰 작성 시 150P, 포토/영상 리뷰는 350P가 추가 적립됩니다!</li>
  43. <li>월 최대 10,000 P까지 적립 가능합니다.(합산 후 월 1회 지급)</li>
  44. <li>베스트 리뷰로 선정되면 10,000P가 추가 적립됩니다!</li>
  45. <li>리뷰는 주문일 기준 90일간 작성이 가능합니다.</li>
  46. </ul>
  47. </div>
  48. <div class="taps" id="tpasReview">
  49. <div>
  50. <ul>
  51. <li id="completeReview"><a href="javascript:void(0);" >작성 가능한 리뷰<span th:text="'('+${#numbers.formatInteger(completeReviewCount,0,'COMMA')}+')'"></span></a></li>
  52. <li id="alreadyReview"><a href="javascript:void(0);" >내가 쓴 리뷰<span th:text="'('+${#numbers.formatInteger(alreadyReviewCount,0,'COMMA')}+')'"></span></a></li>
  53. </ul>
  54. </div>
  55. </div>
  56. <div class="check_notice" th:if="${adminCount.count>0}">
  57. <p>
  58. 관리자가 댓글을 남긴 상품평이 있습니다.
  59. <a href="javascript:void(0);" th:onclick="fnMove([[${adminCount.reviewSq}]])">
  60. 바로 확인
  61. </a>
  62. </p>
  63. </div>
  64. <div class="area_list" id="reviewList"></div>
  65. <div class="sec_foot" id="comNav">
  66. <div class="ui_row">
  67. <ul class="pageNav" id="paging">
  68. </ul>
  69. </div>
  70. </div>
  71. <div class="sec_foot" id="alrNav">
  72. <div class="ui_row">
  73. <ul class="pageNav" id="paging2">
  74. </ul>
  75. </div>
  76. </div>
  77. <div class="nodata" id="nodata1" style="display:none;">
  78. <div class="txt_box">
  79. <p>
  80. 작성 가능한 리뷰가 없습니다.<br>
  81. </p>
  82. </div>
  83. </div>
  84. <div class="nodata" id="nodata2" style="display:none;">
  85. <div class="txt_box">
  86. <p>
  87. 작성한 리뷰가 없습니다.<br>
  88. </p>
  89. </div>
  90. </div>
  91. </div>
  92. </div>
  93. <!-- // CONT-BODY -->
  94. </div>
  95. </div>
  96. <form id="searchForm1" name="searchForm1" th:action="@{'/mypage/complete/review/list'}" th:method="post">
  97. <input type="hidden" name="pageNo" value="1" />
  98. <input type="hidden" name="pageSize" value="10" />
  99. </form>
  100. <form id="searchForm2" name="searchForm2" th:action="@{'/mypage/already/review/list'}" th:method="post">
  101. <input type="hidden" name="pageNo2" value="1" />
  102. <input type="hidden" name="pageSize2" value="10" />
  103. </form>
  104. <script src="/ux/plugins/gaga/gaga.paging.js"></script>
  105. <script th:inline="javascript">
  106. let imageUrl = [[${@environment.getProperty('upload.goods.view')}]];
  107. let reviewUrl =[[${@environment.getProperty('upload.image.view')}]];
  108. let attachList = [[${alreadyReviewAttach}]];
  109. // 작성가능한 리뷰 클릭 시
  110. $("#completeReview").click(function() {
  111. $("#alreadyReview").removeClass("active");
  112. $("#completeReview").addClass("active");
  113. $(".check_notice").hide();
  114. $("#alrNav").hide();
  115. $("#comNav").show();
  116. gagaPaging.init('searchForm1', fnSearchCallback1, 'paging', 10);
  117. gagaPaging.load(1);
  118. })
  119. $("#alreadyReview").click(function() {
  120. $("#completeReview").removeClass("active");
  121. $("#alreadyReview").addClass("active");
  122. $(".check_notice").show();
  123. $("#comNav").hide();
  124. $("#alrNav").show();
  125. gagaPaging.init('searchForm2', fnSearchCallback2, 'paging2', 10);
  126. gagaPaging.load(1);
  127. })
  128. $(document).ready(function() {
  129. // 마이페이지 LNB 설정
  130. fnSetMypageLnbList(7);
  131. // 마이페이지 location 설정
  132. fnSetMypageLocation('리뷰', '_PAGE_MYPAGE_REVIEW');
  133. // 작성가능한 리뷰표시
  134. $("#completeReview").trigger('click');
  135. });
  136. // 주문 목록 조회 콜백
  137. var fnSearchCallback1 = function(result) {
  138. $('#nodata1').hide();
  139. $('#nodata2').hide();
  140. $('#reviewList').html('');
  141. if (result.dataList1 != null && result.dataList1.length > 0) {
  142. $.each(result.dataList1, function(idx, item) {
  143. let html = '';
  144. html += '<div class="part_goods"> ';
  145. html += ' <div class="goods_cont"> ';
  146. html += ' <div class="goods_info"> ';
  147. html += ' <div class="order_desc"> ';
  148. html += ' <div class="goods_box"> ';
  149. html += ' <div class="gd_item"> ';
  150. html += ' <a href=""> ';
  151. html += ' <span class="thumb"> ';
  152. html += ' <img src="' + imageUrl + '/' + item.sysImgNm + '" width="100%" alt=""> ';
  153. html += ' </span> ';
  154. html += ' <p> ';
  155. html += ' <span class="buy_date"><em>'+item.payDt+'</em>&nbsp;구매</span> ';
  156. html += ' </p> ';
  157. html += ' <p> ';
  158. html += ' <span class="brand">'+item.brandEnm+'</span> ';
  159. html += ' </p> ';
  160. html += ' <p> ';
  161. html += ' <span class="name">'+item.goodsNm+'</span> ';
  162. html += ' </p> ';
  163. html += ' </a> ';
  164. html += ' </div> ';
  165. html += ' <div class="gd_opt"> ';
  166. html += ' <div class="option_wrap"> ';
  167. html += ' <span class="title sr-only">주문 옵션</span> ';
  168. if (item.goodsType =='G056_S') {
  169. $.each(item.colorNmArr, function (index2, option) {
  170. html += ' <span class="option">' + item.itemNmArr[index2] + ' / ' + option + ' / ' + item.optCd2Arr[index2] + '</span>\n';
  171. })
  172. }else{
  173. html += ' <span class="option">'+item.optCd1+'&nbsp;/&nbsp;'+item.optCd2+'</span> ';
  174. }
  175. html += ' </div> ';
  176. html += ' </div> ';
  177. html += ' </div> ';
  178. html += ' <div class="status_box"> ';
  179. html += ' <p>'+item.remainDt+'일 남음</p> ';
  180. html += ' </div> ';
  181. html += ' <div class="button_box"> ';
  182. html += ' <p><button type="button" class="btn btn_primary_line btn_sm" onclick="fnReviewCreate('+item.ordNo+','+item.ordDtlNo+',\'' + item.goodsCd + '\')"><span>리뷰쓰기</span></button></p> ';
  183. html += ' </div> ';
  184. html += ' </div> ';
  185. html += ' </div> ';
  186. html += ' </div> ';
  187. html += '</div> ';
  188. $('#reviewList').append(html);
  189. })
  190. }else{
  191. $('#nodata1').show();
  192. }
  193. // Create pagination
  194. gagaPaging.createPagination(result.paging.pageable);
  195. }
  196. // 주문 목록 조회 콜백
  197. var fnSearchCallback2 = function(result) {
  198. $('#nodata1').hide();
  199. $('#nodata2').hide();
  200. $('#reviewList').html('');
  201. if (result.dataList2 != null && result.dataList2.length > 0) {
  202. $.each(result.dataList2, function(idx, item) {
  203. let html = '';
  204. html+='<div class="part_goods">';
  205. html+=' <div class="goods_cont">';
  206. html+=' <div class="goods_info">';
  207. html+=' <div class="order_desc">';
  208. html+=' <div class="goods_box">';
  209. html+=' <div class="gd_item"> ';
  210. html+=' <a href="">';
  211. html+=' <span class="thumb">';
  212. html+=' <img src="' + imageUrl + '/' + item.sysImgNm + '" width="100%" alt="">';
  213. html+=' </span>';
  214. html+=' <p>';
  215. html+=' <span class="buy_date"><em>'+item.payDt+'</em>&nbsp;구매</span>';
  216. html+=' </p>';
  217. html+=' <p>';
  218. html+=' <span class="brand">'+item.brandEnm+'</span>';
  219. html+=' </p>';
  220. html+=' <p>';
  221. html+=' <span class="name">'+item.goodsNm+'</span> ';
  222. html+=' </p>';
  223. html+=' </a>';
  224. html+=' </div>';
  225. html+=' <div class="gd_opt">';
  226. html+=' <div class="option_wrap">';
  227. html+=' <span class="title sr-only">주문 옵션</span>';
  228. html+=' <span class="option">'+item.optCd1+'&nbsp;/&nbsp;'+item.optCd2+'</span>';
  229. html+=' </div>';
  230. html+=' </div>';
  231. html+=' </div>';
  232. html+=' <div class="button_box">';
  233. if (item.admRpl == null || item.admRpl == '') {
  234. html+=' <p><button type="button" class="btn btn_default btn_sm" onclick="fnReviewUpdate('+item.ordNo+','+item.ordDtlNo+','+item.goodsCd+','+item.reviewSq+')"><span>리뷰 수정</span></button></p>';
  235. }
  236. html+=' <p><button type="button" class="btn btn_default btn_sm" onclick="fnDeleteReview('+item.reviewSq+')"><span>리뷰 삭제</span></button></p>';
  237. html+=' </div>';
  238. html+=' </div>';
  239. html+=' <div class="order_review">';
  240. html+=' <div class="review">';
  241. html+=' <div class="info_box">';
  242. html+=' <div class="star_score">';
  243. html+=' <span class="star">';
  244. html+=' <em class="progbar" style="width:'+(item.score*20)+'%;"></em>';
  245. html+=' </span>';
  246. html+=' </div>';
  247. html+=' <div class="writer">';
  248. html+=' <span class="wr_date">'+item.regDt+'</span>';
  249. html+=' </div>';
  250. html+=' </div>';
  251. html+=' <div class="response_box">';
  252. html+=' <div>';
  253. html+=' <dl>';
  254. html+=' <div>';
  255. html+=' <dt>구매옵션</dt>';
  256. html+=' <dd>'+item.optCd1+' / '+item.optCd2+'</dd>';
  257. html+=' </div>';
  258. html+=' </dl>';
  259. html+=' </div>';
  260. html+=' <div>';
  261. html+=' <dl>';
  262. html+=' <div>';
  263. html+=' <dt>키/몸무게</dt>';
  264. html+=' <dd>'+item.weight+'cm/'+item.height+'kg</dd>';
  265. html+=' </div>';
  266. if (item.sizeGb == 'T' || item.sizeGb == 'B' || item.sizeGb == 'S') {
  267. html+=' <div>';
  268. html+=' <dt>사이즈</dt>';
  269. html+=' <dd>'+item.scoreSize+'</dd>';
  270. html+=' </div>';
  271. html+=' <div>';
  272. html+=' <dt>컬러</dt>';
  273. html+=' <dd>'+item.scoreColor+'</dd>';
  274. html+=' </div>';
  275. }
  276. if (item.sizeGb == 'T' || item.sizeGb == 'B') {
  277. html+=' <div>';
  278. html+=' <dt>핏</dt>';
  279. html+=' <dd>'+item.scoreFit+'</dd>';
  280. html+=' </div>';
  281. html+=' <div>';
  282. html+=' <dt>두께감</dt>';
  283. html+=' <dd>'+item.scoreThick+'</dd>';
  284. html+=' </div>';
  285. }
  286. if (item.sizeGb == 'S') {
  287. html+=' <div>';
  288. html+=' <dt>무게감</dt>';
  289. html+=' <dd>'+item.scoreWeight+'</dd>';
  290. html+=' </div>';
  291. html+=' <div>';
  292. html+=' <dt>볼넓이</dt>';
  293. html+=' <dd>'+item.scoreBall+'</dd>';
  294. html+=' </div>';
  295. }
  296. html+=' </dl>';
  297. html+=' </div>';
  298. html+=' </div>';
  299. if (attachList != null && attachList.length >0) {
  300. for (var i = 0; i < attachList.length; i++) {
  301. if (attachList[i].reviewSq == item.reviewSq) {
  302. html+=' <div class="photo_box">';
  303. html+=' <div class="photo_list">';
  304. html+=' <ul>';
  305. html+=' <li>';
  306. html+=' <a href="">';
  307. html+=' <div class="pic">';
  308. if (attachList[i].fileGb == 'M') {
  309. html+=' <span class="thumb mov" style="background-image:url(' + reviewUrl + '/' + attachList[i].sysFileNm + ');"></span>';
  310. }else{
  311. html+=' <span class="thumb" style="background-image:url(' + reviewUrl + '/' + attachList[i].sysFileNm + ');"></span>';
  312. }
  313. html+=' </div>';
  314. html+=' </a>';
  315. html+=' </li>';
  316. html+=' </ul>';
  317. html+=' </div>';
  318. html+=' </div>';
  319. }
  320. }
  321. }
  322. html+=' <div class="txt_review_box" id="admin_'+item.reviewSq+'">';
  323. html+=' <p>'+item.reviewContent+'</p>';
  324. html+=' </div>';
  325. if (item.admRpl != null && item.admRpl != '') {
  326. html+=' <div class="reply_box" >';
  327. html+=' <div class="reply">';
  328. html+=' <div class="reply_writer">';
  329. html+=' <span class="wr_name">관리자</span>';
  330. html+=' <span class="wr_date">'+item.admRplDt+'</span>';
  331. html+=' </div>';
  332. html+=' <div class="reply_txt">';
  333. html+=' <p>'+item.admRpl+'</p>';
  334. html+=' </div>';
  335. html+=' </div>';
  336. html+=' </div>';
  337. }
  338. html+=' </div>';
  339. html+=' </div>';
  340. html+=' </div>';
  341. html+=' </div>';
  342. html+='</div> ';
  343. $('#reviewList').append(html);
  344. })
  345. }else{
  346. $('#nodata2').show();
  347. }
  348. // Create pagination
  349. gagaPaging.createPagination(result.paging2.pageable2);
  350. }
  351. // 스크롤 이동
  352. var fnMove = function(obj) {
  353. var offset = $("#admin_" + obj).offset();
  354. console.log(offset);
  355. $('html, body').animate({scrollTop : offset.top}, 400);
  356. }
  357. // 리뷰삭제
  358. var fnDeleteReview = function(obj) {
  359. var data = {reviewSq : obj};
  360. var jsonData = JSON.stringify(data);
  361. mcxDialog.confirm("작성한 리뷰를 삭제하시겠습니까?", {
  362. cancelBtnText : "취소",
  363. sureBtnText : "확인",
  364. sureBtnClick : function() {
  365. gagajf.ajaxJsonSubmit('/mypage/review/delete', jsonData, function() {
  366. mcxDialog.alert("삭제되었습니다.");
  367. $("#alreadyReview").trigger('click');
  368. });
  369. }
  370. });
  371. }
  372. // 리뷰 수정
  373. var fnReviewUpdate = function(obj1,obj2,obj3) {
  374. let ordNo = obj1;
  375. let ordDtlNo = obj2;
  376. let goodsCd = obj3;
  377. let reviewStat = 'u';
  378. $('#createReview input[name=ordNo]').val(ordNo);
  379. $('#createReview input[name=ordDtlNo]').val(ordDtlNo);
  380. $('#createReview input[name=goodsCd]').val(goodsCd);
  381. $('#createReview input[name=reviewStat]').val(reviewStat);
  382. document.createReview.submit();
  383. // cfnGoToPage(_PAGE_MYPAGE_CREATE_REVIEW + ordNo +'/'+ordDtlNo+'/'+goodsCd+'/'+reviewStat);
  384. }
  385. </script>
  386. </th:block>
  387. </body>
  388. </html>