MypageReviewCreateFormWeb.html 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541
  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 myReviewWrite"> <!-- 페이지특정 클래스 = myReviewWrite -->
  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="cont">
  32. <div class="sec_head">
  33. <h3 class="subH1">리뷰</h3>
  34. </div>
  35. <div class="sec_body">
  36. <div class="com_info_txt">
  37. <p class="tit">리뷰 안내</p>
  38. <ul>
  39. <li>일반 리뷰 작성 시 150P, 포토/영상 리뷰는 350P가 추가 적립됩니다!</li>
  40. <li>월 최대 10,000 P까지 적립 가능합니다.(합산 후 월 1회 지급)</li>
  41. <li>베스트 리뷰로 선정되면 10,000P가 추가 적립됩니다!</li>
  42. <li>리뷰 작성시 욕설, 비방, 선정적인 내용등이 있을 경우 통보 없이 관리자에 의해 삭제 될 수 있습니다.</li>
  43. </ul>
  44. </div>
  45. <th:block th:each="review, status : ${completeReviewList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
  46. <form class="form_wrap" id="reviewForm" th:action="@{'/mypage/review/save'}">
  47. <input type="hidden" name="ordNo" th:value="${review.ordNo}">
  48. <input type="hidden" name="ordDtlNo" th:value="${review.ordDtlNo}">
  49. <input type="hidden" name="goodsCd" th:value="${review.goodsCd}">
  50. <input type="hidden" name="custNo" th:value="${review.custNo}">
  51. <h4 class="subH3">리뷰쓰기</h4>
  52. <div class="part_goods">
  53. <div class="goods_cont">
  54. <!-- 주문상품 -->
  55. <div class="goods_info">
  56. <div class="order_desc">
  57. <div class="goods_box">
  58. <div class="gd_item">
  59. <a href="">
  60. <span class="thumb">
  61. <img th:src="${imageUrl + '/' + review.sysImgNm}" width="100%" alt="">
  62. </span>
  63. <p>
  64. <span class="buy_date"><em th:text="${review.payDt}"></em>&nbsp;구매</span>
  65. </p>
  66. <p>
  67. <span class="brand" th:text="${review.brandEnm}"></span>
  68. <!-- <span class="tag">STYLE24 일반배송</span> -->
  69. </p>
  70. <p>
  71. <span class="name" th:text="${review.goodsNm}"></span>
  72. </p>
  73. </a>
  74. </div>
  75. <div class="gd_opt">
  76. <div class="option_wrap">
  77. <span class="title sr-only">주문 옵션</span>
  78. <span class="option">[[${review.optCd1}]]K&nbsp;/&nbsp;[[${review.optCd2}]]</span>
  79. </div>
  80. </div>
  81. </div>
  82. </div>
  83. </div>
  84. <!-- //주문상품 -->
  85. </div>
  86. </div>
  87. <h4 class="subH3">별점 선택</h4>
  88. <div class="tbl type1">
  89. <table>
  90. <colgroup>
  91. <col width="170">
  92. <col width="*">
  93. </colgroup>
  94. <tr>
  95. <th>
  96. 별점
  97. </th>
  98. <td>
  99. <div class="input_starscore" id="star">
  100. <input type="hidden" id="score" name="score">
  101. <button type="button" id="starBtn"></button>
  102. <button type="button" id="starBtn"></button>
  103. <button type="button" id="starBtn"></button>
  104. <button type="button" id="starBtn"></button>
  105. <button type="button" id="starBtn"></button>
  106. </div>
  107. </td>
  108. </tr>
  109. </table>
  110. </div>
  111. <h4 class="subH3">키 / 몸무게</h4>
  112. <div class="tbl type1">
  113. <table>
  114. <colgroup>
  115. <col width="170">
  116. <col width="*">
  117. </colgroup>
  118. <tr>
  119. <th>
  120. </th>
  121. <td>
  122. <div class="input_my_physical">
  123. <div class="form_field">
  124. <div class="input_wrap">
  125. <input type="text" class="form_control" placeholder="숫자만 입력해 주세요." data-valid-type="numeric" maxlength="3" id="height" name="height">
  126. <span class="unit">cm</span>
  127. </div>
  128. </div>
  129. </div>
  130. </td>
  131. </tr>
  132. <tr>
  133. <th>
  134. 몸무게
  135. </th>
  136. <td>
  137. <div class="input_my_physical">
  138. <div class="form_field">
  139. <div class="input_wrap">
  140. <input type="text" class="form_control" placeholder="숫자만 입력해 주세요." data-valid-type="numeric" maxlength="3" id="weight" name="weight">
  141. <span class="unit">kg</span>
  142. </div>
  143. </div>
  144. </div>
  145. </td>
  146. </tr>
  147. </table>
  148. </div>
  149. <!-- <th:block th:if="${review.sizeGb == 'T' or review.sizeGb == 'B' or review.sizeGb == 'S'}"> -->
  150. <h4 class="subH3">상품 평가</h4>
  151. <div class="tbl type1">
  152. <table>
  153. <colgroup>
  154. <col width="170">
  155. <col width="*">
  156. </colgroup>
  157. <!-- <th:block th:if="${review.sizeGb == 'T' or review.sizeGb == 'B' or review.sizeGb == 'S'}"> -->
  158. <tr>
  159. <th>
  160. 사이즈
  161. </th>
  162. <td>
  163. <div class="input_simple_review">
  164. <div class="form_field">
  165. <div>
  166. <input type="radio" name="scoreSize" id="rdi_review_size1" value="1">
  167. <label for="rdi_review_size1"><span>작음</span></label>
  168. </div>
  169. <div>
  170. <input type="radio" name="scoreSize" id="rdi_review_size2" value="2">
  171. <label for="rdi_review_size2"><span>딱맞음</span></label>
  172. </div>
  173. <div>
  174. <input type="radio" name="scoreSize" id="rdi_review_size3" value="3">
  175. <label for="rdi_review_size3"><span>큼</span></label>
  176. </div>
  177. </div>
  178. </div>
  179. </td>
  180. </tr>
  181. <tr>
  182. <th>
  183. 컬러
  184. </th>
  185. <td>
  186. <div class="input_simple_review">
  187. <div class="form_field">
  188. <div>
  189. <input type="radio" name="scoreColor" id="rdi_review_color1" value="1">
  190. <label for="rdi_review_color1"><span>밝음</span></label>
  191. </div>
  192. <div>
  193. <input type="radio" name="scoreColor" id="rdi_review_color2" value="2">
  194. <label for="rdi_review_color2"><span>똑같음</span></label>
  195. </div>
  196. <div>
  197. <input type="radio" name="scoreColor" id="rdi_review_color3" value="3">
  198. <label for="rdi_review_color3"><span>어두움</span></label>
  199. </div>
  200. </div>
  201. </div>
  202. </td>
  203. </tr>
  204. <!-- </th:block>
  205. <th:block th:if="${review.sizeGb == 'T' or review.sizeGb == 'B'}"> -->
  206. <tr>
  207. <th>
  208. </th>
  209. <td>
  210. <div class="input_simple_review">
  211. <div class="form_field">
  212. <div>
  213. <input type="radio" name="scoreFit" id="rdi_review_fit1" value="1">
  214. <label for="rdi_review_fit1"><span>슬림</span></label>
  215. </div>
  216. <div>
  217. <input type="radio" name="scoreFit" id="rdi_review_fit2" value="2">
  218. <label for="rdi_review_fit2"><span>레귤러</span></label>
  219. </div>
  220. <div>
  221. <input type="radio" name="scoreFit" id="rdi_review_fit3" value="3">
  222. <label for="rdi_review_fit3"><span>오버</span></label>
  223. </div>
  224. </div>
  225. </div>
  226. </td>
  227. </tr>
  228. <tr>
  229. <th>
  230. 두께감
  231. </th>
  232. <td>
  233. <div class="input_simple_review">
  234. <div class="form_field">
  235. <div>
  236. <input type="radio" name="scoreThick" id="rdi_review_thick1" value="1">
  237. <label for="rdi_review_thick1"><span>얇음</span></label>
  238. </div>
  239. <div>
  240. <input type="radio" name="scoreThick" id="rdi_review_thick2" value="2">
  241. <label for="rdi_review_thick2"><span>적당함</span></label>
  242. </div>
  243. <div>
  244. <input type="radio" name="scoreThick" id="rdi_review_thick3" value="3">
  245. <label for="rdi_review_thick3"><span>도톰함</span></label>
  246. </div>
  247. </div>
  248. </div>
  249. </td>
  250. </tr>
  251. <!-- </th:block>
  252. <th:block th:if="${review.sizeGb == 'S'}"> -->
  253. <tr>
  254. <th>
  255. 무게감
  256. </th>
  257. <td>
  258. <div class="input_simple_review">
  259. <div class="form_field">
  260. <div>
  261. <input type="radio" name="scoreWeight" id="rdi_review_weight1" value="1">
  262. <label for="rdi_review_weight1"><span>가벼움</span></label>
  263. </div>
  264. <div>
  265. <input type="radio" name="scoreWeight" id="rdi_review_weight2" value="2">
  266. <label for="rdi_review_weight2"><span>적당함</span></label>
  267. </div>
  268. <div>
  269. <input type="radio" name="scoreWeight" id="rdi_review_weight3" value="3">
  270. <label for="rdi_review_weight3"><span>무거움</span></label>
  271. </div>
  272. </div>
  273. </div>
  274. </td>
  275. </tr>
  276. <tr>
  277. <th>
  278. 볼너비
  279. </th>
  280. <td>
  281. <div class="input_simple_review">
  282. <div class="form_field">
  283. <div>
  284. <input type="radio" name="scoreBall" id="rdi_review_width1" value="1">
  285. <label for="rdi_review_width1"><span>작음</span></label>
  286. </div>
  287. <div>
  288. <input type="radio" name="scoreBall" id="rdi_review_width2" value="2">
  289. <label for="rdi_review_width2"><span>딱맞음</span></label>
  290. </div>
  291. <div>
  292. <input type="radio" name="scoreBall" id="rdi_review_width3" value="3">
  293. <label for="rdi_review_width3"><span>큼</span></label>
  294. </div>
  295. </div>
  296. </div>
  297. </td>
  298. </tr>
  299. <!-- </th:block> -->
  300. </table>
  301. </div>
  302. <!-- </th:block> -->
  303. <h4 class="subH3">고객님의 리뷰가 다른 고객들에게 도움이 될 수 있어요!</h4>
  304. <div class="tbl type1">
  305. <table>
  306. <colgroup>
  307. <col width="170">
  308. <col width="*">
  309. </colgroup>
  310. <tr>
  311. <th>
  312. 리뷰내용
  313. </th>
  314. <td>
  315. <div class="input_txt_review">
  316. <div class="form_field">
  317. <div class="input_wrap">
  318. <textarea class="doc_review" name="reviewContent" id="reviewContent" cols="30" rows="10" placeholder="·&nbsp;리뷰 내용은 최소 10자 이상 입력해 주세요.&#13;&#10;·&nbsp;상품과 무관하거나 스팸, 음란, 불법적인 내용의 리뷰는 통보 없이 삭제되며, 지급한 포인트는 회수 될 수 있습니다.&#13;&#10;·&nbsp;리뷰 등록 후 관리자 승인이 필요한 경우 바로 노출이 되지 않을 수 있습니다." style="resize: none;"></textarea>
  319. <p class="txt_cnt"><span id="review_cnt" class="c_primary">0</span>/500</p>
  320. </div>
  321. </div>
  322. </div>
  323. </td>
  324. </tr>
  325. <tr>
  326. <th>
  327. 포토/영상 첨부
  328. </th>
  329. <td>
  330. <div class="form_field">
  331. <div class="input_wrap">
  332. <!-- 이미지첨부 -->
  333. <div class="form_field">
  334. <div class="imgUpload">
  335. <label for="fileAdd" class="fileAdd">첫번째업로드</label>
  336. <input type="file" id="fileAdd" name="files[]">
  337. </div>
  338. </div>
  339. <!-- //이미지첨부 -->
  340. </div>
  341. </div>
  342. <div class="txt_info">
  343. <ul>
  344. <li>
  345. 최대 10개까지 등록 가능
  346. </li>
  347. </ul>
  348. </div>
  349. </td>
  350. </tr>
  351. </table>
  352. </div>
  353. <div class="btn_footer_area">
  354. <button type="button" class="btn btn_default btn_md" onclick="reviewCancel()"><span>취소</span></button>
  355. <button type="button" id="btn_review_registration" class="btn btn_dark btn_md" onclick="reviewCreate()"><span>리뷰 등록</span></button>
  356. </div>
  357. </form>
  358. </th:block>
  359. </div>
  360. </div>
  361. <!-- // CONT-BODY -->
  362. </div>
  363. </div>
  364. <script src="/ux/plugins/gaga/gaga.paging.js"></script>
  365. <script th:inline="javascript">
  366. let reviewList = [[${completeReviewList}]];
  367. // 별점 class="on"
  368. var $starEls = $('#star button#starBtn');
  369. var rate = 0;
  370. $starEls.each(function (index, el) {
  371. $(el).on('click', function () {
  372. rating(index);
  373. $("#score").attr("value",index+1);
  374. });
  375. });
  376. function rating(score) {
  377. $starEls.each(function (i, el) {
  378. if (i <= score) {
  379. $(el).addClass('on');
  380. } else {
  381. $(el).removeClass('on');
  382. }
  383. });
  384. rate = score + 1;
  385. }
  386. // 리뷰 취소
  387. var reviewCancel = function() {
  388. mcxDialog.confirm('취소하시겠습니까"?', {
  389. cancelBtnText: "취소",
  390. sureBtnText: "확인",
  391. sureBtnClick: function(){
  392. cfnGoToPage(_PAGE_MYPAGE_REVIEW);
  393. }
  394. });
  395. }
  396. // 리뷰 등록
  397. var reviewCreate = function () {
  398. if($("#score").val()=='' || $("#score").val()==null){
  399. mcxDialog.alert('별점을 선택하세요.');
  400. return;
  401. }
  402. if($("#reviewForm input[name=height]").val() == '' || $("#reviewForm input[name=height]").val() == null){
  403. mcxDialog.alert('키를 입력하세요.');
  404. return;
  405. }
  406. if($("#reviewForm input[name=weight]").val() == '' || $("#reviewForm input[name=weight]").val() == null){
  407. mcxDialog.alert('몸무게를 입력하세요.');
  408. return;
  409. }
  410. if(reviewList[0].sizeGb == 'T' || reviewList[0].sizeGb == 'B' || reviewList[0].sizeGb == 'S'){
  411. if($('#reviewForm input:radio[name=scoreSize]').prop('checked') == false){
  412. mcxDialog.alert('상품 사이즈를 평가해주세요.');
  413. return;
  414. }
  415. if($('#reviewForm input:radio[name=scoreColor]').prop('checked') == false){
  416. mcxDialog.alert('상품 컬러를 평가해주세요.');
  417. return;
  418. }
  419. }
  420. if(reviewList[0].sizeGb == 'T' || reviewList[0].sizeGb == 'B'){
  421. if($('#reviewForm input:radio[name=scoreFit]').prop('checked') == false){
  422. mcxDialog.alert('상품 핏을 평가해주세요.');
  423. return;
  424. }
  425. if($('#reviewForm input:radio[name=scoreThick]').prop('checked') == false){
  426. mcxDialog.alert('상품 두께감을 평가해주세요.');
  427. return;
  428. }
  429. }
  430. if(reviewList[0].sizeGb == 'S' ){
  431. if($('#reviewForm input:radio[name=scoreWeight]').prop('checked') == false){
  432. mcxDialog.alert('상품 무게감을 평가해주세요.');
  433. return;
  434. }
  435. if($('#reviewForm input:radio[name=scoreBall]').prop('checked') == false){
  436. mcxDialog.alert('상품 볼넓이를 평가해주세요.');
  437. return;
  438. }
  439. }
  440. if($('#reviewContent').val().length<10){
  441. mcxDialog.alert("리뷰 내용을 10자 이상 입력해주세요.");
  442. return;
  443. }
  444. mcxDialog.confirm('리뷰를 등록하시겠습니까"?', {
  445. cancelBtnText: "취소",
  446. sureBtnText: "확인",
  447. sureBtnClick: function(){
  448. gagajf.ajaxFormSubmit($('#reviewForm').prop('action'), '#reviewForm', fnSaveCallback);
  449. }
  450. });
  451. }
  452. var fnSaveCallback = function (result) {
  453. if(result.status == "200"){
  454. mcxDialog.alert("상품 리뷰를 등록하였습니다.");
  455. //포인트 예정금액 고지해야함
  456. cfnGoToPage(_PAGE_MYPAGE_REVIEW);
  457. }
  458. }
  459. // 글자 카운팅
  460. $('#reviewContent').keyup(function (e){
  461. var content = $(this).val();
  462. $('.txt_cnt').html('<span id="review_cnt" class="c_primary">'+content.length+'</span>/500'); //글자수 실시간 카운팅
  463. if (content.length > 500){
  464. mcxDialog.alert("최대 500자까지 입력 가능합니다.");
  465. $(this).val(content.substring(0, 500));
  466. $('.txt_cnt').html('<span id="review_cnt" class="c_primary">500</span>/500');
  467. }
  468. });
  469. $('#fileAdd').on('change', function() { fnChooseFile(this); });
  470. var fnChooseFile = function(obj) {
  471. // multiple 속성이 있으면 files에는 다수의 객체가 할당됨
  472. var file = obj.files[0];
  473. if (!gagajf.isNull(file.size) && Number(file.size) > 10 * 1000000) {
  474. mcxDialog.alertC('이미지는 최대 10MB 이하 파일만 가능합니다.', {
  475. sureBtnText: "확인",
  476. sureBtnClick: function() {
  477. $(obj).parent('.imgUpload').find('.removes').trigger('click');
  478. }
  479. });
  480. return false;
  481. }
  482. // 파일 업로드
  483. gagajf.ajaxFileUpload('/common/file/upload?subDir=/review'
  484. , file
  485. , function(result) {
  486. // 업로드한 파일명 설정
  487. $('input[name=' + obj.name + 'OrgFileNm]').val(result.oldFileName);
  488. $('input[name=' + obj.name + 'SysFileNm]').val(result.newFileName);
  489. }
  490. );
  491. }
  492. $(document).ready(function() {
  493. // 마이페이지 LNB 설정
  494. fnSetMypageLnbList(7);
  495. // 마이페이지 location 설정
  496. fnSetMypageLocation('리뷰', '_PAGE_MYPAGE_REVIEW');
  497. });
  498. </script>
  499. </th:block>
  500. </body>
  501. </html>