ExchangeRequestForm.html 35 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039
  1. <!DOCTYPE html>
  2. <html lang="ko" xmlns:th="http://www.thymeleaf.org">
  3. <!--
  4. *******************************************************************************
  5. * @source : ExchangeRequestForm.html
  6. * @desc : 교환요청 화면
  7. *============================================================================
  8. * STYLE24
  9. * Copyright(C) 2021 TSIT, All rights reserved.
  10. *============================================================================
  11. * VER DATE AUTHOR DESCRIPTION
  12. * === =========== ========== =============================================
  13. * 1.0 2021.01.15 card007 최초 작성
  14. *******************************************************************************
  15. -->
  16. <div class="modalPopup" data-width="1400" data-height="600">
  17. <div class="panelStyle">
  18. <div class="panelTitle">
  19. <h2>교환요청</h2>
  20. <button type="button" class="close" onclick="uifnPopupClose('popupExchangeRequestForm');"><i class="fa fa-times"></i></button>
  21. </div>
  22. <div class="panelContent" style="height:90%; overflow-y:auto; padding:0px 20px !important; ">
  23. <form id="exchangeRequestFrm" name="exchangeRequestFrm" action="/orderChange/exchange" method="post" target="hdFrameForOrderExchange">
  24. <input type="hidden" name="ordNo" th:value="${ordNo}"/>
  25. <input type="hidden" name="chgReason" value=""/>
  26. <input type="hidden" name="chgReasonDesc" value=""/>
  27. <h4>주문정보</h4>
  28. <div id="gridOrderCancelRequestList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
  29. <h4>배송정보</h4>
  30. <div id="gridDelvCdList" style="width:100%; height: 140px;" class="ag-theme-balham"></div>
  31. <div style="text-align:right; padding-bottom:5px; padding-top:5px;">
  32. <button type="button" class="btn btn-success" th:unless="${ordChgSq > 0}" id="fnExchangeRequestSubmit" onclick="fnExchange()">교환요청</button>
  33. <button type="button" class="btn btn-success" th:if="${ordChgSq > 0}" id="fnExchangeCancelRequestSubmit" onclick="fnExchangeCancel()">교환철회</button>
  34. </div>
  35. <table class="frmStyle">
  36. <colgroup>
  37. <col style="width:160px;" />
  38. <col style="width:320px;" />
  39. <col style="width:160px;" />
  40. <col />
  41. </colgroup>
  42. <tbody>
  43. <tr>
  44. <th>교환사유 <i class="star"></i></th>
  45. <td th:unless="${ordChgSq > 0}">
  46. <select name="selectChgReason" onchange="fnChangeChgReason($(this).val());">
  47. <option value="">[선택하세요]</option>
  48. <option th:if="${chgReasonList}" th:each="oneData, status : ${chgReasonList}" th:value="|${oneData.cd}:${oneData.cdNm}|" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
  49. </select>
  50. </td>
  51. <td th:if="${ordChgSq > 0}" th:id="chgReason"></td>
  52. <th>귀책사유</th>
  53. <td><span id="imputeReason"></span></td>
  54. </tr>
  55. <tr>
  56. <th>회수방법</th>
  57. <td>
  58. <label class="rdoBtn"><input type="radio" name="wdGb" th:id="wdGb" value="W" onclick="fnChangeWdGb(this)"/>회수요청<span></span></label>
  59. <label class="rdoBtn"><input type="radio" name="wdGb" th:id="wdGb" value="D" onclick="fnChangeWdGb(this)"/>직접발송<span></span></label>
  60. </td>
  61. <th>추가배송비</th>
  62. <td id="addDelvFee"></td>
  63. </tr>
  64. <tr>
  65. <th>요청메모</th>
  66. <td colspan="3">
  67. <textarea id="chgMemo" name="chgMemo" style="height:80px;" placeholder="교환사유를 300자내외로 작성해 주세요"></textarea>
  68. </td>
  69. </tr>
  70. </tbody>
  71. </table>
  72. <h4 class="chger">회수지 정보</h4>
  73. <table class="frmStyle chger">
  74. <colgroup>
  75. <col style="width:160px;" />
  76. <col style="width:320px;" />
  77. <col style="width:160px;" />
  78. <col />
  79. </colgroup>
  80. <tbody>
  81. <tr>
  82. <th>보내는사람 <i class="star"></i></th>
  83. <td colspan="3"><input type="text" name ="chgerNm" class=""/></td>
  84. </tr>
  85. <tr>
  86. <th>회수지주소 <i class="star"></i></th>
  87. <td colspan="3">
  88. <input type="text" name ="chgerZipcode" class="w100" readonly="readonly"/>
  89. <button type="button" class="btn btn-info" th:unless="${ordChgSq > 0}" onclick="fnOpenDaumAddr('withdraw');">우편번호찾기</button>
  90. <input type="text" name ="chgerBaseAddr" class="w300"/>
  91. <input type="text" name ="chgerDtlAddr" class="w300"/>
  92. </td>
  93. </tr>
  94. <tr>
  95. <th>일반전화</th>
  96. <td>
  97. <select name="chgerTelno1" class="w100">
  98. <option value="">[선택하세요]</option>
  99. <option th:if="${TelExcNoList}" th:each="oneData, status : ${TelExcNoList}" th:value="${oneData.cd}" th:text="${oneData.cd}"></option>
  100. </select>
  101. - <input type="text" name ="chgerTelno2" class="w60"/>
  102. - <input type="text" name ="chgerTelno3" class="w60"/>
  103. </td>
  104. <th>휴대전화 <i class="star"></i></th>
  105. <td>
  106. <select name="chgerPhnno1" class="w100">
  107. <option value="">[선택하세요]</option>
  108. <option th:if="${PhnExcNoList}" th:each="oneData, status : ${PhnExcNoList}" th:value="${oneData.cd}" th:text="${oneData.cd}"></option>
  109. </select>
  110. - <input type="text" name ="chgerPhnno2" class="w60"/>
  111. - <input type="text" name ="chgerPhnno3" class="w60"/>
  112. </td>
  113. </tr>
  114. <tr>
  115. <th>반품메모</th>
  116. <td colspan="3">
  117. <textarea id="chgerRtnMemo" name="chgerRtnMemo" style="height:80px;" placeholder="반품메모(수거시요청사항)를 300자내외로 작성해 주세요"></textarea>
  118. </td>
  119. </tr>
  120. </tbody>
  121. </table>
  122. <h4>교환지 정보</h4>
  123. <table class="frmStyle">
  124. <colgroup>
  125. <col style="width:160px;" />
  126. <col style="width:320px;" />
  127. <col style="width:160px;" />
  128. <col />
  129. </colgroup>
  130. <tbody>
  131. <tr>
  132. <th>받는사람 <i class="star"></i></th>
  133. <td colspan="3"><input type="text" name ="recipNm" class=""/></td>
  134. </tr>
  135. <tr>
  136. <th>교환지주소 <i class="star"></i></th>
  137. <td colspan="3">
  138. <input type="text" name ="recipZipcode" class="w100" readonly="readonly"/>
  139. <button type="button" class="btn btn-info" th:unless="${ordChgSq > 0}" onclick="fnOpenDaumAddr('exchange');">우편번호찾기</button>
  140. <input type="text" name ="recipBaseAddr" class="w300"/>
  141. <input type="text" name ="recipDtlAddr" class="w300"/>
  142. </td>
  143. </tr>
  144. <tr>
  145. <th>일반전화</th>
  146. <td>
  147. <select name="recipTelno1" class="w100">
  148. <option value="">[선택하세요]</option>
  149. <option th:if="${TelExcNoList}" th:each="oneData, status : ${TelExcNoList}" th:value="${oneData.cd}" th:text="${oneData.cd}"></option>
  150. </select>
  151. - <input type="text" name ="recipTelno2" class="w60"/>
  152. - <input type="text" name ="recipTelno3" class="w60"/>
  153. </td>
  154. <th>휴대전화 <i class="star"></i></th>
  155. <td>
  156. <select name="recipPhnno1" class="w100">
  157. <option value="">[선택하세요]</option>
  158. <option th:if="${PhnExcNoList}" th:each="oneData, status : ${PhnExcNoList}" th:value="${oneData.cd}" th:text="${oneData.cd}"></option>
  159. </select>
  160. - <input type="text" name ="recipPhnno2" class="w60"/>
  161. - <input type="text" name ="recipPhnno3" class="w60"/>
  162. </td>
  163. </tr>
  164. <tr>
  165. <th>배송메모</th>
  166. <td colspan="3">
  167. <textarea id="delvMemo" name="delvMemo" style="height:80px;" placeholder="배송메모를 300자내외로 작성해 주세요"></textarea>
  168. </td>
  169. </tr>
  170. </tbody>
  171. </table>
  172. </form>
  173. </div>
  174. </div>
  175. </div>
  176. <!-- data -->
  177. <script th:inline="javascript">
  178. /*<![CDATA[*/
  179. var cancelRequestTargetList = [[${cancelRequestTargetList}]]; // 교환대상목록
  180. var ordNo = [[${ordNo}]]; // 주문번호
  181. var ordChgSq = [[${ordChgSq}]]; // 주문변경번호
  182. var orderInfoList = [[${orderInfoList}]]; // 주문기본정보
  183. var payMeans = orderInfoList[0].payMeans; // 결제수단
  184. var orderDelvAddrInfo = [[${orderDelvAddrInfo}]]; // 회수지정보
  185. var addDelvFee = 0; // 추가배송비
  186. var addDelvFeeList = []; // 추가배송비정보
  187. var exchangeRequestList = []; // 교환요청목록
  188. var exchangeInfoList; // 교환정보
  189. var wdGb; // 회수방법
  190. var chgerRtnMemo; // 반품메모
  191. var delvMemo; // 배송메모
  192. var temp1 = true;
  193. var temp2 = true;
  194. // 변경요청정보 승인, 철회
  195. if (ordChgSq > 0) {
  196. exchangeInfoList = [[${exchangeInfoList}]]; // 교환정보
  197. chgReason = exchangeInfoList[0].chgReason; // 변경사유코드
  198. chgReasonNm = exchangeInfoList[0].chgReasonNm; // 변경사유코드명
  199. chgMemo = exchangeInfoList[0].chgMemo; // 변경사유메모
  200. chgerRtnMemo = exchangeInfoList[0].chgerRtnMemo; // 반품메모
  201. delvMemo = exchangeInfoList[0].delvMemo; // 배송메모
  202. wdGb = exchangeInfoList[0].wdGb; // 회수방법
  203. }
  204. // 1. 주문정보(교환대상)
  205. var columnExchangeReqList = [
  206. {
  207. headerName : "주문상세정보",
  208. children : [
  209. {headerName: "주문번호" , field: "ordNo" , width: 80 , cellClass: 'text-center', hide: temp1},
  210. {headerName: "주문상세" , field: "ordDtlNo" , width: 80 , cellClass: 'text-center'},
  211. {headerName: "주문상세" , field: "ordDtlStat" , width: 80 , cellClass: 'text-center', hide: temp1},
  212. {headerName: "주문상세상태" , field: "ordDtlStatNm" , width: 100 , cellClass: 'text-center', hide: temp1},
  213. {headerName: "상품코드" , field: "goodsCd" , width: 100 , cellClass: 'text-center', hide: temp1},
  214. {headerName: "상품명" , field: "goodsNm" , width: 200 , cellClass: 'text-center', hide: temp1},
  215. {headerName: "상품타입" , field: "goodsTypeNm" , width: 100 , cellClass: 'text-center', hide: temp2}
  216. ]
  217. },
  218. {
  219. headerName : "주문상세단품정보",
  220. children : [
  221. {headerName: "단품번호" , field: "ordDtlItemSq" , width: 100 , cellClass: 'text-center', hide: temp2},
  222. {headerName: "단품코드" , field: "itemCd" , width: 100 , cellClass: 'text-center', hide: temp2},
  223. {headerName: "단품명" , field: "itemNm" , width: 200 , cellClass: 'text-center', hide: temp2},
  224. {headerName: "옵션1" , field: "optCd1" , width: 80 , cellClass: 'text-center', hide: temp1},
  225. {headerName: "옵션2" , field: "optCd2" , width: 80 , cellClass: 'text-center', hide: temp2},
  226. {
  227. headerName : "단품수량"
  228. , field : "itemQty"
  229. , width : 80
  230. , cellClass : 'text-center'
  231. , cellRenderer : function (params) {
  232. return params.value.addComma();
  233. }
  234. },
  235. {
  236. headerName : "단품금액"
  237. , field : "itemPrice"
  238. , width : 80
  239. , cellClass : 'text-right'
  240. , cellRenderer : function (params) {
  241. return params.value.addComma();
  242. }
  243. },
  244. {
  245. headerName : "단품옵션금액"
  246. , field : "optAddPrice"
  247. , width : 80
  248. , cellClass : 'text-right'
  249. , cellRenderer : function (params) {
  250. return params.value.addComma();
  251. }
  252. }
  253. ]
  254. },
  255. {
  256. headerName : "주문상세수량",
  257. children : [
  258. {
  259. headerName : "주문"
  260. , field : "ordQty"
  261. , width : 80
  262. , cellClass : 'text-center'
  263. , cellRenderer : function (params) {
  264. return params.value.addComma();
  265. }
  266. },
  267. {
  268. headerName : "취소/요청"
  269. , field : "cnclRtnQty"
  270. , width : 80
  271. , cellClass : 'text-center'
  272. , cellRenderer : function (params) {
  273. var cnclRtnReqQty = parseInt(params.data.cnclRtnQty) + parseInt(params.data.ordReqChgQty);
  274. return cnclRtnReqQty;
  275. }
  276. },
  277. {headerName: "교환가능옵션" , field: "optCd2s" , width: 200 , cellClass: 'text-center', hide: temp2},
  278. {
  279. headerName : "교환옵션"
  280. , field : "ordChgOpt"
  281. , width : 100
  282. , cellClass : "text-center"
  283. , cellRenderer : function (params) {
  284. if (ordChgSq > 0) {
  285. $.each(exchangeInfoList, function(idx, item) {
  286. if (params.data.itemCd == item.itemCd && params.data.optCd1 == item.optCd1) {
  287. strVal = item.optCd2;
  288. }
  289. });
  290. } else {
  291. var optArr = params.data.optCd2s.split(',');
  292. var ordChgOpt = params.data.ordChgOpt;
  293. var strVal = '';
  294. strVal += '<select class="ordChgOpt" name="ordChgOpt" ordDtlNo="' + params.data.ordDtlNo + '" ordDtlItemSq="' + params.data.ordDtlItemSq + '" onchange="fnChangeOption(this)">';
  295. if (gagajf.isNull(ordChgOpt)) {
  296. strVal += '<option value="">선택</option>';
  297. } else {
  298. strVal += '<option value="" selected>선택</option>';
  299. }
  300. $.each(optArr, function (idx, item) {
  301. if (ordChgOpt == item) {
  302. strVal += '<option value="' + item + '" selected>' + item + '</option>';
  303. } else {
  304. strVal += '<option value="' + item + '">' + item + '</option>';
  305. }
  306. });
  307. }
  308. return strVal;
  309. }
  310. },
  311. {headerName: "재고수량" , field: "currStockQty" , width: 100 , cellClass: 'text-center', hide: temp2},
  312. {
  313. headerName : "교환신청수량"
  314. , field : "chgQty"
  315. , width : 100
  316. , cellClass : 'text-center'
  317. , cellRenderer : function (params) {
  318. if (ordChgSq > 0) {
  319. $.each(exchangeInfoList, function(idx, item) {
  320. if (params.data.itemCd == item.itemCd && params.data.optCd1 == item.optCd1) {
  321. strVal = item.chgQty;
  322. }
  323. });
  324. } else {
  325. var ordQty = parseInt(params.data.ordQty);
  326. var cnclRtnQty = parseInt(params.data.cnclRtnQty);
  327. var ordReqChgQty = parseInt(params.data.ordReqChgQty);
  328. var ordCanChgQty = ordQty - (cnclRtnQty + ordReqChgQty);
  329. var strVal = "";
  330. strVal += '<select class="ordCanChgQty ' + params.data.ordDtlNo + '" name="chgQty" ordDtlNo="' + params.data.ordDtlNo + '" onchange="fnChangeQty(this)">';
  331. for (i = 0; i <= ordCanChgQty; i++) {
  332. if (i == params.data.chgQty) {
  333. strVal += " <option value='" + i + "' selected>" + i + "</option>";
  334. } else {
  335. strVal += " <option value='" + i + "'>" + i + "</option>";
  336. }
  337. }
  338. strVal += "</select>";
  339. }
  340. return strVal;
  341. }
  342. }
  343. ]
  344. },
  345. {
  346. headerName : "주문단품금액",
  347. children : [
  348. {
  349. headerName : "주문"
  350. , field : "ordAmt"
  351. , width : 80
  352. , cellClass : 'text-right'
  353. , cellRenderer : function (params) {
  354. return params.value.addComma();
  355. }
  356. },
  357. {
  358. headerName : "취소"
  359. , field : "cnclRtnAmt"
  360. , width : 80
  361. , cellClass : 'text-right'
  362. , cellRenderer : function (params) {
  363. return params.value.addComma();
  364. }
  365. },
  366. {
  367. headerName : "즉시할인"
  368. , field : "cpn1DcAmt"
  369. , width : 80
  370. , cellClass : 'text-right'
  371. , cellRenderer : function (params) {
  372. return params.value.addComma();
  373. }
  374. },
  375. {
  376. headerName : "다다익선1"
  377. , field : "tmtb1DcAmt"
  378. , width : 80
  379. , cellClass : 'text-right'
  380. , cellRenderer : function (params) {
  381. return params.value.addComma();
  382. }
  383. },
  384. {
  385. headerName : "다다익선2"
  386. , field : "tmtb2DcAmt"
  387. , width : 80
  388. , cellClass : 'text-right'
  389. , cellRenderer : function (params) {
  390. return params.value.addComma();
  391. }
  392. },
  393. {
  394. headerName : "상품쿠폰"
  395. , field : "goodsCpnDcAmt"
  396. , width : 80
  397. , cellClass : 'text-right'
  398. , cellRenderer : function (params) {
  399. return params.value.addComma();
  400. }
  401. },
  402. {
  403. headerName : "장바구니쿠폰"
  404. , field : "cartCpnDcAmt"
  405. , width : 80
  406. , cellClass : 'text-right'
  407. , cellRenderer : function (params) {
  408. return params.value.addComma();
  409. }
  410. },
  411. {
  412. headerName : "포인트"
  413. , field : "pntDcAmt"
  414. , width : 80
  415. , cellClass : 'text-right'
  416. , cellRenderer : function (params) {
  417. return params.value.addComma();
  418. }
  419. },
  420. {
  421. headerName : "선포인트"
  422. , field : "prePntDcAmt"
  423. , width : 80
  424. , cellClass : 'text-right'
  425. , cellRenderer : function (params) {
  426. return params.value.addComma();
  427. }
  428. },
  429. {
  430. headerName : "상품권"
  431. , field : "gfcdUseAmt"
  432. , width : 80
  433. , cellClass : 'text-right'
  434. , cellRenderer : function (params) {
  435. return params.value.addComma();
  436. }
  437. },
  438. {
  439. headerName : "실결제금액"
  440. , field : "realOrdAmt"
  441. , width : 80
  442. , cellClass : 'text-right'
  443. , cellRenderer : function (params) {
  444. return params.value.addComma();
  445. }
  446. }
  447. ]
  448. },
  449. {
  450. headerName : "주문배송비정보",
  451. children : [
  452. {
  453. headerName : "배송비"
  454. , field : "delvFee"
  455. , width : 80
  456. , cellClass : 'text-right'
  457. , cellRenderer : function (params) {
  458. return params.value.addComma();
  459. }
  460. , hide : temp2
  461. },
  462. {headerName: "업체" , field: "supplyCompCd" , width: 100 , cellClass: 'text-center', hide: temp2},
  463. {headerName: "배송비코드" , field: "delvFeeCd" , width: 100 , cellClass: 'text-center', hide: temp2},
  464. {
  465. headerName : "무료배송비"
  466. , field : "minOrdAmt"
  467. , width : 80
  468. , cellClass : 'text-right'
  469. , cellRenderer : function (params) {
  470. return params.value.addComma();
  471. }
  472. , hide : temp2
  473. },
  474. {
  475. headerName : "기본배송비"
  476. , field : "orgDelvFee"
  477. , width : 80
  478. , cellClass : 'text-right'
  479. , cellRenderer : function (params) {
  480. return params.value.addComma();
  481. }
  482. , hide : temp2
  483. },
  484. {
  485. headerName : "반품배송비"
  486. , field : "rtnDelvFee"
  487. , width : 80
  488. , cellClass : 'text-right'
  489. , cellRenderer : function (params) {
  490. return params.value.addComma();
  491. }
  492. , hide : temp2
  493. },
  494. {
  495. headerName : "교환배송비"
  496. , field : "excDelvFee"
  497. , width : 80
  498. , cellClass : 'text-right'
  499. , cellRenderer : function (params) {
  500. return params.value.addComma();
  501. }
  502. , hide : temp2
  503. },
  504. {headerName: "전체취소가능" , field: "allCanYn" , width: 100 , cellClass: 'text-center', hide: temp2},
  505. ]
  506. }
  507. ];
  508. var gridOptionsExchangeReqList = gagaAgGrid.getGridOptions(columnExchangeReqList);
  509. // Add on options
  510. gridOptionsExchangeReqList.suppressRowClickSelection = true;
  511. gridOptionsExchangeReqList.rowSelection = 'multiple';
  512. // 3. 배송정보(환불정보)
  513. var columnDelvCdList = [
  514. {headerName: "업체" , field: "supplyCompNm" , width: 100 , cellClass: 'text-center'},
  515. {headerName: "배송비코드" , field: "delvFeeCd" , width: 100 , cellClass: 'text-center'},
  516. {
  517. headerName : "추가배송비"
  518. , field : "addDelvFee"
  519. , width : 100
  520. , cellClass : 'text-right'
  521. , cellRenderer : function (params) {
  522. return params.value.addComma();
  523. }
  524. },
  525. {headerName: "반품지명" , field: "rtnLocNm" , width: 100 , cellClass: 'text-center'},
  526. {headerName: "반품지전화번호" , field: "rtnLocTelno" , width: 100 , cellClass: 'text-center'},
  527. {headerName: "반품지우편번호" , field: "rtnLocZipcode" , width: 100 , cellClass: 'text-center'},
  528. {headerName: "반품지기본주소" , field: "rtnLocBaseAddr" , width: 300 , cellClass: 'text-center'},
  529. {headerName: "반품지상세주소" , field: "rtnLocDtlAddr" , width: 300 , cellClass: 'text-center'},
  530. ];
  531. var gridOptionsDelvCdList = gagaAgGrid.getGridOptions(columnDelvCdList);
  532. </script>
  533. <script>
  534. //현재 사유는 회사 입니다.
  535. var isCustomer = false;
  536. // 사유 변경
  537. var fnChangeChgReason = function(reasonCd){
  538. var arrReasonCd = reasonCd.split(":");
  539. var customerReasonArr = ['G689_10', 'G689_30'];
  540. isCustomer = false;
  541. // 취소, 반품, 교환 사유 판단
  542. for (i=0 ; i<customerReasonArr.length ; i++) {
  543. if (customerReasonArr[i] == arrReasonCd[0]) {
  544. isCustomer = true;
  545. }
  546. }
  547. // 귀책사유설정 회사, 고객
  548. if (isCustomer) {
  549. $("#imputeReason").text("고객");
  550. } else {
  551. $("#imputeReason").text("회사");
  552. }
  553. $('#exchangeRequestFrm input[name=chgReason]').val(arrReasonCd[0]);
  554. $('#exchangeRequestFrm input[name=chgReasonDesc]').val(arrReasonCd[1]);
  555. // 추가배송비 설정
  556. fnChangeQty();
  557. }
  558. // 교환요청
  559. var fnExchange = function () {
  560. var qty = false;
  561. var opt = false;
  562. var wdGb = $('#wdGb:checked').val();
  563. // 1. 교환수량 체크
  564. $.each(cancelRequestTargetList, function(idx, item) {
  565. if (item.chgQty > 0) {
  566. qty = true;
  567. if (!gagajf.isNull(item.ordChgOpt)) {
  568. opt = true;
  569. }
  570. }
  571. });
  572. if (qty == false) {
  573. mcxDialog.alert('교환 할 수량을 입력하세요.');
  574. return;
  575. }
  576. if (opt == false) {
  577. mcxDialog.alert('교환옵션을 선택해주세요.');
  578. return;
  579. }
  580. // 2. 교환사유 체크
  581. var chgReason = $("#exchangeRequestFrm select[name=selectChgReason]").val();
  582. if (gagajf.isNull(chgReason)) {
  583. mcxDialog.alert("교환사유를 입력하세요.");
  584. return ;
  585. }
  586. // 5. 회수지정보설정
  587. if (wdGb == 'W') {
  588. var chgerNm = $("#exchangeRequestFrm input[name=chgerNm]").val();
  589. var chgerZipcode = $("#exchangeRequestFrm input[name=chgerZipcode]").val();
  590. var chgerBaseAddr = $("#exchangeRequestFrm input[name=chgerBaseAddr]").val();
  591. var chgerDtlAddr = $("#exchangeRequestFrm input[name=chgerDtlAddr]").val();
  592. var chgerPhnno1 = $("#exchangeRequestFrm select[name=chgerPhnno1]").val();
  593. var chgerPhnno2 = $("#exchangeRequestFrm input[name=chgerPhnno2]").val();
  594. var chgerPhnno3 = $("#exchangeRequestFrm input[name=chgerPhnno3]").val();
  595. var chgerTelno1 = $("#exchangeRequestFrm select[name=chgerTelno1]").val();
  596. var chgerTelno2 = $("#exchangeRequestFrm input[name=chgerTelno2]").val();
  597. var chgerTelno3 = $("#exchangeRequestFrm input[name=chgerTelno3]").val();
  598. if (gagajf.isNull(chgerZipcode)) {
  599. mcxDialog.alert("회수지주소를 입력하세요."); return;
  600. }
  601. if (gagajf.isNull(chgerBaseAddr)) {
  602. mcxDialog.alert("회수지주소를 입력하세요."); return;
  603. }
  604. if (gagajf.isNull(chgerDtlAddr)) {
  605. mcxDialog.alert("회수지주소를 입력하세요."); return;
  606. }
  607. if (gagajf.isNull(chgerPhnno1)) {
  608. mcxDialog.alert("휴대전화를 입력하세요."); return;
  609. }
  610. if (gagajf.isNull(chgerPhnno2)) {
  611. mcxDialog.alert("휴대전화를 입력하세요."); return;
  612. }
  613. if (gagajf.isNull(chgerPhnno3)) {
  614. mcxDialog.alert("휴대전화를 입력하세요."); return;
  615. }
  616. var chgerPhnno = chgerPhnno1 + '-' + chgerPhnno2 + '-' + chgerPhnno3;
  617. var chgerEmail = orderInfoList[0].ordEmail;
  618. var chgerTelno;
  619. if (gagajf.isNull(chgerTelno1) && gagajf.isNull(chgerTelno2) && gagajf.isNull(chgerTelno3)) {
  620. chgerTelno = '';
  621. } else {
  622. chgerTelno = chgerTelno1 + '-' + chgerTelno2 + '-' + chgerTelno3;
  623. }
  624. }
  625. // 교환지정보 설정
  626. var recipNm = $("#exchangeRequestFrm input[name=recipNm]").val();
  627. var recipZipcode = $("#exchangeRequestFrm input[name=recipZipcode]").val();
  628. var recipBaseAddr = $("#exchangeRequestFrm input[name=recipBaseAddr]").val();
  629. var recipDtlAddr = $("#exchangeRequestFrm input[name=recipDtlAddr]").val();
  630. var recipPhnno1 = $("#exchangeRequestFrm select[name=recipPhnno1]").val();
  631. var recipPhnno2 = $("#exchangeRequestFrm input[name=recipPhnno2]").val();
  632. var recipPhnno3 = $("#exchangeRequestFrm input[name=recipPhnno3]").val();
  633. var recipTelno1 = $("#exchangeRequestFrm select[name=recipTelno1]").val();
  634. var recipTelno2 = $("#exchangeRequestFrm input[name=recipTelno2]").val();
  635. var recipTelno3 = $("#exchangeRequestFrm input[name=recipTelno3]").val();
  636. if (gagajf.isNull(recipZipcode)) {
  637. mcxDialog.alert("교환지주소를 입력하세요."); return;
  638. }
  639. if (gagajf.isNull(recipBaseAddr)) {
  640. mcxDialog.alert("교환지주소를 입력하세요."); return;
  641. }
  642. if (gagajf.isNull(recipDtlAddr)) {
  643. mcxDialog.alert("교환지주소를 입력하세요."); return;
  644. }
  645. if (gagajf.isNull(recipPhnno1)) {
  646. mcxDialog.alert("휴대전화를 입력하세요."); return;
  647. }
  648. if (gagajf.isNull(recipPhnno2)) {
  649. mcxDialog.alert("휴대전화를 입력하세요."); return;
  650. }
  651. if (gagajf.isNull(recipPhnno3)) {
  652. mcxDialog.alert("휴대전화를 입력하세요."); return;
  653. }
  654. var recipPhnno = recipPhnno1 + '-' + recipPhnno2 + '-' + recipPhnno3;
  655. var recipEmail = orderInfoList[0].ordEmail;
  656. var recipTelno;
  657. if (gagajf.isNull(recipTelno1) && gagajf.isNull(recipTelno2) && gagajf.isNull(recipTelno3)) {
  658. recipTelno = '';
  659. } else {
  660. recipTelno = recipTelno1 + '-' + recipTelno2 + '-' + recipTelno3;
  661. }
  662. var jsonObj = {
  663. "ordNo" : $('#exchangeRequestFrm input[name=ordNo]').val()
  664. ,"chgReason" : $('#exchangeRequestFrm input[name=chgReason]').val()
  665. ,"chgMemo" : $('#chgMemo').val()
  666. ,"cancelReqList" : exchangeRequestList
  667. ,"isCustomer" : isCustomer
  668. ,"wdGb" : wdGb
  669. ,"addPayCost" : addDelvFee
  670. ,"chgerNm" : chgerNm
  671. ,"chgerEmail" : chgerEmail
  672. ,"chgerZipcode" : chgerZipcode
  673. ,"chgerBaseAddr" : chgerBaseAddr
  674. ,"chgerDtlAddr" : chgerDtlAddr
  675. ,"chgerPhnno" : chgerPhnno
  676. ,"chgerTelno" : chgerTelno
  677. ,"chgerRtnMemo" : $("#exchangeRequestFrm textarea[name=chgerRtnMemo]").val()
  678. ,"recipNm" : recipNm
  679. ,"recipEmail" : recipEmail
  680. ,"recipZipcode" : recipZipcode
  681. ,"recipBaseAddr" : recipBaseAddr
  682. ,"recipDtlAddr" : recipDtlAddr
  683. ,"recipPhnno" : recipPhnno
  684. ,"recipTelno" : recipTelno
  685. ,"delvMemo" : $("#exchangeRequestFrm textarea[name=delvMemo]").val()
  686. }
  687. // 주문번호, 교환사유, 교환메모, (취소, 반품, 교환 신청 정보 목록)
  688. var jsonData = JSON.stringify(jsonObj);
  689. mcxDialog.confirm('교환요청하시겠습니까?', {
  690. cancelBtnText : "반품",
  691. sureBtnClick : function(){
  692. // 교환 실행
  693. gagajf.ajaxJsonSubmit(
  694. '/orderChange/exchangeRequest/'
  695. , jsonData
  696. , function() {
  697. uifnPopupClose('popupOrderDetail');
  698. fnReOpenOrderDetailPopup();
  699. uifnPopupClose('popupExchangeRequestForm');
  700. }
  701. );
  702. }
  703. });
  704. }
  705. // 교환철회 처리
  706. var fnExchangeCancel = function() {
  707. let data = {};
  708. data.ordChgSq = ordChgSq;
  709. data.ordNo = ordNo;
  710. let jsonData = JSON.stringify(data);
  711. mcxDialog.confirm('요청번호 [' + ordChgSq + '] 에 대한 요청철회 처리를 하시겠습니까?', {
  712. cancelBtnText : "취소",
  713. sureBtnClick : function(){
  714. // 교환 실행
  715. gagajf.ajaxJsonSubmit(
  716. '/orderChange/exchangeCancelRequest/'
  717. , jsonData
  718. , function() {
  719. uifnPopupClose('popupOrderDetail');
  720. fnReOpenOrderDetailPopup();
  721. uifnPopupClose('popupExchangeRequestForm');
  722. }
  723. );
  724. }
  725. });
  726. }
  727. // 우편번호 DAUM을 이용한 우편번호 팝업 레이어
  728. var fnOpenDaumAddr = function(loc) {
  729. let daumZip = new daum.Postcode({
  730. oncomplete: function(data) {
  731. // 우편번호와 주소 정보를 해당 필드에 넣는다.
  732. if (loc == 'withdraw') {
  733. $('#exchangeRequestFrm input[name=chgerZipcode]').val(data.zonecode);
  734. $('#exchangeRequestFrm input[name=chgerBaseAddr]').val(cfnGetDaumRoadAddr(data));
  735. $('#exchangeRequestFrm input[name=chgerDtlAddr]').focus();
  736. } else if (loc == 'exchange') {
  737. $('#exchangeRequestFrm input[name=recipZipcode]').val(data.zonecode);
  738. $('#exchangeRequestFrm input[name=recipBaseAddr]').val(cfnGetDaumRoadAddr(data));
  739. $('#exchangeRequestFrm input[name=recipDtlAddr]').focus();
  740. }
  741. cfnCloseDaumAddr();
  742. },
  743. width: '100%'
  744. });
  745. cfnOpenDaumAddr(daumZip);
  746. }
  747. // 회수지정보 설정
  748. var fnSetChger = function(){
  749. var data;
  750. if (ordChgSq > 0) {
  751. data = exchangeInfoList[0];
  752. } else {
  753. data = orderDelvAddrInfo[0];
  754. }
  755. var spRecipPhnno = (data.recipPhnno != null) ? data.recipPhnno.split('-') : null;
  756. var spRecipTelno = (data.recipTelno != null) ? data.recipTelno.split('-') : null;
  757. $("#exchangeRequestFrm input[name=chgerNm]").val(data.recipNm);
  758. $("#exchangeRequestFrm input[name=chgerZipcode]").val(data.recipZipcode);
  759. $("#exchangeRequestFrm input[name=chgerBaseAddr]").val(data.recipBaseAddr);
  760. $("#exchangeRequestFrm input[name=chgerDtlAddr]").val(data.recipDtlAddr);
  761. $("#exchangeRequestFrm textarea[name=chgerRtnMemo]").val(data.chgerRtnMemo);
  762. if (spRecipPhnno) {
  763. $("#exchangeRequestFrm select[name=chgerPhnno1]").val(spRecipPhnno[0]);
  764. $("#exchangeRequestFrm input[name=chgerPhnno2]").val(spRecipPhnno[1]);
  765. $("#exchangeRequestFrm input[name=chgerPhnno3]").val(spRecipPhnno[2]);
  766. }
  767. if (spRecipTelno) {
  768. $("#exchangeRequestFrm select[name=chgerTelno1]").val(spRecipTelno[0]);
  769. $("#exchangeRequestFrm input[name=chgerTelno2]").val(spRecipTelno[1]);
  770. $("#exchangeRequestFrm input[name=chgerTelno3]").val(spRecipTelno[2]);
  771. }
  772. }
  773. // 교환지정보 설정
  774. var fnSetExchangeAddr = function(){
  775. var data;
  776. if (ordChgSq > 0) {
  777. data = exchangeInfoList[0];
  778. } else {
  779. data = orderDelvAddrInfo[0];
  780. }
  781. var spRecipPhnno = (data.recipPhnno != null) ? data.recipPhnno.split('-') : null;
  782. var spRecipTelno = (data.recipTelno != null) ? data.recipTelno.split('-') : null;
  783. $("#exchangeRequestFrm input[name=recipNm]").val(data.recipNm);
  784. $("#exchangeRequestFrm input[name=recipZipcode]").val(data.recipZipcode);
  785. $("#exchangeRequestFrm input[name=recipBaseAddr]").val(data.recipBaseAddr);
  786. $("#exchangeRequestFrm input[name=recipDtlAddr]").val(data.recipDtlAddr);
  787. $("#exchangeRequestFrm textarea[name=delvMemo]").val(data.delvMemo);
  788. if (spRecipPhnno) {
  789. $("#exchangeRequestFrm select[name=recipPhnno1]").val(spRecipPhnno[0]);
  790. $("#exchangeRequestFrm input[name=recipPhnno2]").val(spRecipPhnno[1]);
  791. $("#exchangeRequestFrm input[name=recipPhnno3]").val(spRecipPhnno[2]);
  792. }
  793. if (spRecipTelno) {
  794. $("#exchangeRequestFrm select[name=recipTelno1]").val(spRecipTelno[0]);
  795. $("#exchangeRequestFrm input[name=recipTelno2]").val(spRecipTelno[1]);
  796. $("#exchangeRequestFrm input[name=recipTelno3]").val(spRecipTelno[2]);
  797. }
  798. }
  799. // 교환옵션 변경 이벤트
  800. var fnChangeOption = function(param) {
  801. var optCd2 = $(param).val();
  802. var ordDtlNo = $(param).attr('ordDtlNo');
  803. var ordDtlItemSq = $(param).attr('ordDtlItemSq');
  804. $.each(cancelRequestTargetList, function(idx, item){
  805. if (item.ordDtlNo == ordDtlNo && item.ordDtlItemSq == ordDtlItemSq) {
  806. var stockQtyArr = item.currStockQtys.split(',');
  807. var sizeCdArr = item.optCd2s.split(',');
  808. var stockIdx = sizeCdArr.indexOf(optCd2);
  809. var stockQty = stockQtyArr[stockIdx];
  810. item.currStockQty = stockQty;
  811. item.ordChgOpt = optCd2;
  812. }
  813. });
  814. gridOptionsExchangeReqList.api.setRowData(cancelRequestTargetList);
  815. }
  816. // 교환수량 변경 이벤트
  817. var fnChangeQty = function(param) {
  818. var chgQty = $(param).val();
  819. var ordDtlNo = $(param).attr('ordDtlNo');
  820. var exchangeRequestTargetList = [];
  821. $.each(cancelRequestTargetList, function(idx, item){
  822. if (item.ordDtlNo == ordDtlNo) {
  823. if (gagajf.isNull(item.ordChgOpt)) {
  824. mcxDialog.alert('교환옵션을 선택해주세요.');
  825. return false;
  826. }
  827. item.chgQty = chgQty;
  828. if (chgQty > 0) {
  829. exchangeRequestTargetList.push(item);
  830. }
  831. } else if (item.chgQty > 0) {
  832. exchangeRequestTargetList.push(item);
  833. } else if (ordChgSq > 0 && item.ordCanChgQty > 0) {
  834. exchangeRequestTargetList.push(item);
  835. }
  836. });
  837. // 추가배송비 설정
  838. fnAddDelvFee(exchangeRequestTargetList);
  839. // 교환대상목록 설정
  840. exchangeRequestList = exchangeRequestTargetList;
  841. gridOptionsExchangeReqList.api.setRowData(cancelRequestTargetList);
  842. }
  843. // 추가배송비 설정
  844. var fnAddDelvFee = function (exchangeRequestTargetList) {
  845. var delvCdList = [];
  846. var delvFeeList = [];
  847. var delvFee = 0;
  848. // 고객 귀책사유에 한하여 추가배송비 설정
  849. $.each(exchangeRequestTargetList, function (idx, item) {
  850. if (!delvCdList.includes(item.delvFeeCd)) {
  851. if (isCustomer) {
  852. var delvFeeTmp = $('#wdGb:checked').val() == 'W' ? item.excDelvFee : item.rtnDelvFee;
  853. delvFee += delvFeeTmp;
  854. item.addDelvFeeYn = 'Y';
  855. item.addDelvFee = delvFeeTmp;
  856. } else {
  857. item.addDelvFeeYn = 'N';
  858. item.addDelvFee = 0;
  859. }
  860. delvCdList.push(item.delvFeeCd);
  861. delvFeeList.push(item);
  862. }
  863. });
  864. addDelvFee = delvFee;
  865. addDelvFeeList = delvFeeList;
  866. // 회수방법 > 직접발송일 경우 그리드 표시
  867. if ($('#wdGb:checked').val() == 'D') {
  868. gridOptionsDelvCdList.api.setRowData(addDelvFeeList);
  869. } else {
  870. gridOptionsDelvCdList.api.setRowData();
  871. }
  872. $('#addDelvFee').text(addDelvFee.addComma() + '원');
  873. }
  874. // 회수방법 라디오 클릭 이벤트
  875. var fnChangeWdGb = function(param) {
  876. let wdGb = $(param).val();
  877. // 회수지정보 히든 처리
  878. if (wdGb == 'D') {
  879. $('.chger').css('display', 'none');
  880. } else {
  881. $('.chger').css('display', '');
  882. }
  883. // 추가배송비 계산
  884. fnChangeQty();
  885. }
  886. $(document).ready(function() {
  887. // 1. 그리드생성
  888. gagaAgGrid.createGrid('gridOrderCancelRequestList' , gridOptionsExchangeReqList); // 주문정보
  889. gagaAgGrid.createGrid('gridDelvCdList' , gridOptionsDelvCdList); // 배송정보
  890. gridOptionsExchangeReqList.api.setRowData(cancelRequestTargetList);
  891. // 2.1 TOTAL ROWS 없애기
  892. gagaAgGrid.hideStatusBar('gridOrderCancelRequestList');
  893. gagaAgGrid.hideStatusBar('gridOrderCancelRequestToBeList');
  894. gagaAgGrid.hideStatusBar('gridDelvCdList');
  895. // 3. 회수지정보설정
  896. fnSetChger();
  897. // 4. 교환지정보설정
  898. fnSetExchangeAddr();
  899. // 5. 회수방법 라디오 체크 처리
  900. if (wdGb == 'D') {
  901. $('input:radio[name="wdGb"]:radio[value="D"]').prop('checked', true);
  902. } else {
  903. $('input:radio[name="wdGb"]:radio[value="W"]').prop('checked', true);
  904. }
  905. // 교환철회 처리
  906. if (ordChgSq > 0) {
  907. // 5. 교환사유설정
  908. $('#chgReason').text(chgReasonNm);
  909. // 6. 교환요청메모설정
  910. $('#chgMemo').text(chgMemo);
  911. // 7. 귀책사유 설정
  912. fnChangeChgReason(chgReason);
  913. // 8. 데이터 Disabled 처리
  914. $('input:radio[name=wdGb]').attr('disabled', true); // 8-1. 회수방법
  915. $('#chgMemo').attr('readOnly', true); // 8-2. 요청메모
  916. $('input[name=chgerNm]').attr('readOnly', true); // 8-3. 회수지정보 > 보내는사람
  917. $('input[name=chgerBaseAddr]').attr('readOnly', true); // 8-4. 회수지정보 > 기본주소
  918. $('input[name=chgerDtlAddr]').attr('readOnly', true); // 8-5. 회수지정보 > 상세주소
  919. $('select[name=chgerTelno1]').attr('disabled', true); // 8-6. 회수지정보 > 일반전화
  920. $('input[name=chgerTelno2]').attr('readOnly', true); // 8-6. 회수지정보 > 일반전화
  921. $('input[name=chgerTelno3]').attr('readOnly', true); // 8-6. 회수지정보 > 일반전화
  922. $('select[name=chgerPhnno1]').attr('disabled', true); // 8-7. 회수지정보 > 휴대전화
  923. $('input[name=chgerPhnno2]').attr('readOnly', true); // 8-7. 회수지정보 > 휴대전화
  924. $('input[name=chgerPhnno3]').attr('readOnly', true); // 8-7. 회수지정보 > 휴대전화
  925. $('#chgerRtnMemo').attr('readOnly', true); // 8-8. 회수지정보 > 반품메모
  926. $('input[name=recipNm]').attr('readOnly', true); // 8-9. 교환지정보 > 받는사람
  927. $('input[name=recipBaseAddr]').attr('readOnly', true); // 8-10. 교환지정보 > 기본주소
  928. $('input[name=recipDtlAddr]').attr('readOnly', true); // 8-11. 교환지정보 > 상세주소
  929. $('select[name=recipTelno1]').attr('disabled', true); // 8-12. 교환지정보 > 일반전화
  930. $('input[name=recipTelno2]').attr('readOnly', true); // 8-12. 교환지정보 > 일반전화
  931. $('input[name=recipTelno3]').attr('readOnly', true); // 8-12. 교환지정보 > 일반전화
  932. $('select[name=recipPhnno1]').attr('disabled', true); // 8-13. 교환지정보 > 휴대전화
  933. $('input[name=recipPhnno2]').attr('readOnly', true); // 8-13. 교환지정보 > 휴대전화
  934. $('input[name=recipPhnno3]').attr('readOnly', true); // 8-13. 교환지정보 > 휴대전화
  935. $('#delvMemo').prop('readOnly', true); // 8-14. 교환지정보 > 배송메모
  936. }
  937. });
  938. </script>
  939. </html>