MypageCustModifyFormWeb.html 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534
  1. <!DOCTYPE html>
  2. <html lang="ko"
  3. xmlns:th="http://www.thymeleaf.org"
  4. xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
  5. layout:decorator="web/common/layout/MypageLayoutWeb">
  6. <!--
  7. *******************************************************************************
  8. * @source : MypageCustModifyFormWeb.html
  9. * @desc : 마이페이지 > 회원정보 수정 Page
  10. *============================================================================
  11. * STYLE24
  12. * Copyright(C) 2021 TSIT, All rights reserved.
  13. *============================================================================
  14. * VER DATE AUTHOR DESCRIPTION
  15. * === =========== ========== =============================================
  16. * 1.0 2021.03.15 jsshin 최초 작성
  17. *******************************************************************************
  18. -->
  19. <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
  20. <body>
  21. <th:block layout:fragment="content">
  22. <div class="content myManage"> <!-- 페이지특정 클래스 = myManage -->
  23. <div class="cont_body">
  24. <!-- CONT-BODY -->
  25. <div class="lnb">
  26. <div class="lnb_tit">
  27. <h2>마이페이지</h2>
  28. </div>
  29. <div class="lnb_list">
  30. <ul id="mypageLnbList"></ul>
  31. </div>
  32. </div>
  33. <div class="cont">
  34. <div class="sec_head">
  35. <h3 class="subH1">내 정보 관리</h3>
  36. </div>
  37. <form id="custModiFyForm" class="form_wrap" role="form" method="post" action="/mypage/account/check" accept-charset="EUC-KR" onsubmit="document.charset='euc-kr';">
  38. <div class="sec_body">
  39. <div class="modify_box">
  40. <h4 class="subH3">회원정보</h4>
  41. <button type="button" class="btn btn_default btn_sm" onclick="cfnOpenCellphoneCertify();"><span>개명 본인인증</span></button>
  42. <div class="tbl type1">
  43. <table>
  44. <colgroup>
  45. <col width="210">
  46. <col width="*">
  47. </colgroup>
  48. <tr>
  49. <th>이름</th>
  50. <td id="custNm" name="custNm"></td>
  51. </tr>
  52. <tr>
  53. <th>생년월일</th>
  54. <td id="birthYmd" name="birthYmd"></td>
  55. </tr>
  56. </table>
  57. </div>
  58. <div class="txt_info">
  59. <ul>
  60. <li>
  61. 본인 인증을 통해 자동으로 수집되는 정보 입니다.
  62. </li>
  63. </ul>
  64. </div>
  65. </div>
  66. <div class="modify_box">
  67. <h4 class="sr-only">회원정보 수정</h4>
  68. <div class="tbl type1">
  69. <table>
  70. <colgroup>
  71. <col width="210">
  72. <col width="*">
  73. </colgroup>
  74. <tbody>
  75. <tr>
  76. <th>
  77. <span>아이디</span>
  78. </th>
  79. <td>
  80. <div class="form_field">
  81. <div class="input_wrap">
  82. <input type="text" id="custId" name="custId" class="form_control" placeholder="" readonly="readonly"/>
  83. </div>
  84. </div>
  85. </td>
  86. </tr>
  87. <tr>
  88. <th>
  89. <span>비밀번호</span>
  90. </th>
  91. <td>
  92. <button type="button" class="btn btn_primary_line" onclick="cfnPasswordModify();">
  93. <span>변경하기</span>
  94. </button>
  95. </td>
  96. </tr>
  97. <tr>
  98. <th>이메일</th>
  99. <td>
  100. <div class="form_field">
  101. <div class="input_wrap">
  102. <input type="text" id="email" name="email" class="form_control" placeholder=""/>
  103. </div>
  104. </div>
  105. </td>
  106. </tr>
  107. <tr>
  108. <th>휴대폰 번호</th>
  109. <td>
  110. <div class="form_field">
  111. <div class="input_wrap">
  112. <input type="text" id="cellPhnno" name="cellPhnno" class="form_control" placeholder="휴대폰 인증을 해주세요" readonly="readonly"/>
  113. </div>
  114. <button type="button" class="btn btn_dark" onclick="cfnOpenCellphoneCertify();">
  115. <span>휴대폰 인증</span>
  116. </button>
  117. </div>
  118. </td>
  119. </tr>
  120. </tbody>
  121. </table>
  122. </div>
  123. </div>
  124. <div class="modify_box">
  125. <h4 class="subH3">환불계좌 정보</h4>
  126. <div class="tbl type1">
  127. <table>
  128. <colgroup>
  129. <col width="210">
  130. <col width="*">
  131. </colgroup>
  132. <tbody>
  133. <tr>
  134. <th class="ver_top">예금주</th>
  135. <td>
  136. <div class="form_field">
  137. <div class="input_wrap">
  138. <input type="text" id="accountNm" name="accountNm" class="form_control" placeholder="" readonly="readonly"/>
  139. </div>
  140. </div>
  141. <div class="txt_info">
  142. <ul>
  143. <li>
  144. 회원명 본인이 예금주인 통장으로만 환불이 가능합니다.
  145. </li>
  146. </ul>
  147. </div>
  148. </td>
  149. </tr>
  150. <tr>
  151. <th>
  152. <span>은행명</span>
  153. </th>
  154. <td>
  155. <div class="form_field">
  156. <div class="select_custom select_bank">
  157. <div class="combo">
  158. <div class="select">선택</div>
  159. <ul class="list">
  160. <li id="bankCd_" class="selected">
  161. <div text="선택"></div>
  162. <input type="hidden" name="bankCd" value=""/>
  163. </li>
  164. <th:block th:if="${bankList}" th:each="oneData, status : ${bankList}">
  165. <li th:id="|bankCd_${oneData.cd}|" th:with="cd = ${oneData.cd}">
  166. <div th:text="${oneData.cdNm}"></div>
  167. <input type="hidden" name="bankCd" th:value="${cd}"/>
  168. </li>
  169. </th:block>
  170. </ul>
  171. </div>
  172. </div>
  173. </div>
  174. </td>
  175. </tr>
  176. <tr>
  177. <th>
  178. <span>계좌번호</span>
  179. </th>
  180. <td>
  181. <div class="form_field">
  182. <div class="input_wrap">
  183. <input type="text" id="accountNo" name="accountNo" class="form_control" maxlength="20" data-valid-type="numeric" placeholder="계좌번호를 입력해 주세요"/>
  184. </div>
  185. <button type="button" id="btnAccountCheck" class="btn btn_dark">
  186. <span>계좌인증</span>
  187. </button>
  188. </div>
  189. </td>
  190. </tr>
  191. </tbody>
  192. </table>
  193. </div>
  194. </div>
  195. <div class="modify_box">
  196. <h4 class="subH3">
  197. 마케팅 정보 수신설정
  198. <span class="tit_info">특가상품, 할인쿠폰, 이벤트 소식 수신 동의</span>
  199. </h4>
  200. <div class="tbl type1">
  201. <table>
  202. <colgroup>
  203. <col width="210">
  204. <col width="*">
  205. </colgroup>
  206. <tr>
  207. <th>수신설정</th>
  208. <td>
  209. <div class="form_field">
  210. <div>
  211. <input type="checkbox" id="emailAgreeYn" name="emailAgreeYn" value="Y"/><label for="emailAgreeYn"><span>이메일</span></label>
  212. </div>
  213. <div>
  214. <input type="checkbox" id="smsAgreeYn" name="smsAgreeYn" value="Y"/><label for="smsAgreeYn"><span>SMS</span></label>
  215. </div>
  216. </div>
  217. </td>
  218. </tr>
  219. </table>
  220. </div>
  221. <div class="txt_info">
  222. <ul>
  223. <li>
  224. 회원 정보, 구매 정보 및 서비스 주요 정책 관련 내용은 수신 동의 여부와 관계없이 발송됩니다.
  225. </li>
  226. </ul>
  227. </div>
  228. </div>
  229. <div class="btn_footer_area">
  230. <button type="button" id="btnConfirm" class="btn btn_dark btn_md">
  231. <span>확인</span>
  232. </button>
  233. </div>
  234. </div>
  235. </form>
  236. </div>
  237. </div>
  238. </div>
  239. <script th:inline="javascript">
  240. /*<![CDATA[*/
  241. let orgCustInfo;
  242. let orgAccountInfo;
  243. let accountCheck = false;
  244. // 고객정보
  245. var fnGetCustInfo = function () {
  246. $.get('/mypage/customer/info', fnGetCustInfoCallback);
  247. }
  248. // 고객정보 데이터
  249. var fnGetCustInfoCallback = function (custInfo) {
  250. orgCustInfo = custInfo; // 원본 데이터저장 수정시 비교 작업
  251. $('#custModiFyForm td[name=custNm]').text(custInfo.custNm);
  252. $('#custModiFyForm td[name=birthYmd]').text(custInfo.birthYmd);
  253. let custId = custInfo.custId;
  254. if (custInfo.snsType === 'NV') {
  255. custId = '네이버 간편가입회원'
  256. }
  257. if (custInfo.snsType === 'KK') {
  258. custId = '카카오 간편가입회원'
  259. }
  260. if (custInfo.snsType === 'YS') {
  261. custId = 'YES24 간편가입회원'
  262. }
  263. $('#custModiFyForm input[name=custId]').val(custId);
  264. $('#custModiFyForm input[name=email]').val(custInfo.email);
  265. $('#custModiFyForm input[name=cellPhnno]').val(custInfo.cellPhnno);
  266. $('#custModiFyForm input[name=accountNm]').val(custInfo.custNm);
  267. fnDisplayEmailAgree(custInfo.emailAgreeYn);
  268. fnDisplaySmsAgree(custInfo.smsAgreeYn);
  269. // 회원(고객) 계좌 조회
  270. fnGetCustAccountInfo();
  271. }
  272. // 이메일 수신동의
  273. var fnDisplayEmailAgree = function (emailAgreeYn) {
  274. const $emailAgreeYn = $('#custModiFyForm input[name=emailAgreeYn]');
  275. if (emailAgreeYn === 'Y') {
  276. $emailAgreeYn.prop('checked', true);
  277. } else {
  278. $emailAgreeYn.prop('checked', false);
  279. }
  280. };
  281. // SMS 수신동의
  282. var fnDisplaySmsAgree = function (smsAgreeYn) {
  283. const $smsAgreeYn = $('#custModiFyForm input[name=smsAgreeYn]');
  284. if (smsAgreeYn === 'Y') {
  285. $smsAgreeYn.prop('checked', true);
  286. } else {
  287. $smsAgreeYn.prop('checked', false);
  288. }
  289. };
  290. // 고객계좌정보
  291. var fnGetCustAccountInfo = function () {
  292. $.get('/mypage/customer/account/info', fnGetCustAccountInfoCallback);
  293. }
  294. // 고객계좌 정보 데이터
  295. var fnGetCustAccountInfoCallback = function (result) {
  296. orgAccountInfo = {};
  297. var $accountNm = $('#custModiFyForm input[name=accountNm]');
  298. if (!gagajf.isNull(result)) {
  299. orgAccountInfo.accountNo = result.accountNo;
  300. orgAccountInfo.bankCd = result.bankCd;
  301. //1. 고객명과 환불계좌 예금주가 다른 경우 현재 고객명을 적어주고 계좌번호, 은행코드 초기화 처리
  302. let $bankCd = '';
  303. if ($accountNm.val() === result.accountNm) {
  304. $('#custModiFyForm input[name=accountNo]').val(result.accountNo);
  305. $bankCd = '#bankCd_'+result.bankCd;
  306. } else {
  307. $('#custModiFyForm input[name=accountNo]').val('');
  308. $bankCd = '#bankCd_';
  309. }
  310. $($bankCd).trigger('click'); // 셀렉트 박스 트리거
  311. } else {
  312. orgAccountInfo.accountNo = '';
  313. orgAccountInfo.bankCd ='';
  314. }
  315. }
  316. // 나이스 본인인증 후 콜백
  317. var fnNiceCallBack = function(encData) {
  318. if (!gagajf.isNull(encData)) {
  319. let custInfo = {};
  320. custInfo.encData = encData;
  321. let jsonData = JSON.stringify(custInfo);
  322. gagajf.ajaxJsonSubmit('/mypage/customer/auth/update', jsonData, fnUpdateAuthInfoCallback);
  323. }
  324. };
  325. var fnUpdateAuthInfoCallback = function (result) {
  326. if (result.iSsuccess) {
  327. fnGetCustInfo();
  328. mcxDialog.alert("본인인증을 통해 정보가 변경 되었습니다.");
  329. return;
  330. } else {
  331. mcxDialog.alert("실패하였습니다.<br/>고객센터에 문의하시 바랍니다.");
  332. return;
  333. }
  334. }
  335. // 계좌인증
  336. $('#btnAccountCheck').on('click', function () {
  337. if (!fnGetAccountValidation()) {
  338. return;
  339. }
  340. let custInfo = {};
  341. custInfo.accountNm = $('input[name=accountNm]').val();
  342. custInfo.accountNo = $('input[name=accountNo]').val();
  343. custInfo.bankCd = $('input[name=bankCd]').val();
  344. let jsonData = JSON.stringify(custInfo)
  345. console.log(jsonData);
  346. gagajf.ajaxJsonSubmit('/mypage/account/check', jsonData, fnAccountCheckCallback);
  347. //ajaxSubmit('/mypage/account/check','html','accountHolder')
  348. });
  349. // 계좌인증 콜백
  350. var fnAccountCheckCallback = function (result) {
  351. console.log(result);
  352. let msg = '계좌인증에 성공했습니다.'
  353. if (result.isValid) { // 유효하면 true
  354. accountCheck = true;
  355. } else {
  356. accountCheck = false;
  357. msg = '계좌정보를 다시 확인해주세요.'
  358. }
  359. mcxDialog.alertC(msg ,{
  360. sureBtnText: "확인",
  361. sureBtnClick: function() {
  362. }
  363. });
  364. };
  365. // 수정 버튼
  366. $('#btnConfirm').on('click', function () {
  367. let custModiFy = $('#custModiFyForm').serializeObject();
  368. let marketingModifyYn = 'N';
  369. let accountModifyYn = 'N';
  370. let emailModifyYn = 'N';
  371. if (gagajf.isNull(custModiFy.email)) {
  372. mcxDialog.alertC('이메일 주소를 입력해주세요.',{
  373. sureBtnText: "확인",
  374. sureBtnClick: function() {
  375. $('#custModiFyForm input[name=email]').focus();
  376. }
  377. });
  378. }
  379. if (orgCustInfo.email !== custModiFy.email) {
  380. emailModifyYn = 'Y';
  381. }
  382. if (!fnGetAccountValidation()) {
  383. return;
  384. }
  385. custModiFy.bankCd = $('.combo .select').find('input[name=bankCd]').val();
  386. // 은행코드가 바꼈는지
  387. if (orgAccountInfo.bankCd !== custModiFy.bankCd) {
  388. accountModifyYn = 'Y';
  389. }
  390. if (orgAccountInfo.accountNo !== custModiFy.accountNo) {
  391. accountModifyYn = 'Y';
  392. }
  393. if (accountModifyYn === 'Y') { // 환불계좌정보 변경 됐으면
  394. if (!gagajf.isNull(custModiFy.accountNo) && !gagajf.isNull(custModiFy.bankCd)) {
  395. if (!accountCheck) {
  396. mcxDialog.alertC('계좌인증이 필요합니다.',{
  397. sureBtnText: "확인",
  398. sureBtnClick: function() {
  399. }
  400. });
  401. return;
  402. }
  403. }
  404. }
  405. if (gagajf.isNull(custModiFy.smsAgreeYn)) {
  406. custModiFy.smsAgreeYn = 'N';
  407. }
  408. if (gagajf.isNull(custModiFy.emailAgreeYn)) {
  409. custModiFy.emailAgreeYn = 'N';
  410. }
  411. // SMS 수신여부
  412. if (orgCustInfo.smsAgreeYn !== custModiFy.smsAgreeYn) {
  413. marketingModifyYn = 'Y';
  414. }
  415. // 이메일 수신여부
  416. if (orgCustInfo.emailAgreeYn !== custModiFy.emailAgreeYn) {
  417. marketingModifyYn = 'Y';
  418. }
  419. custModiFy.emailModifyYn = emailModifyYn ;
  420. custModiFy.marketingModifyYn = marketingModifyYn;
  421. custModiFy.accountModifyYn = accountModifyYn;
  422. let jsonData = JSON.stringify(custModiFy);
  423. // console.log('jsonData',jsonData);
  424. gagajf.ajaxJsonSubmit('/mypage/customer/info/save', jsonData, fnSaveCustomerInfoCallback)
  425. });
  426. // 수정 콜백
  427. var fnSaveCustomerInfoCallback = function (result) {
  428. if (result.isSuccess) {
  429. mcxDialog.alert("회원정보가 수정되었습니다.");
  430. fnGetCustInfo();
  431. return;
  432. } else {
  433. mcxDialog.alert("실패하였습니다.<br/>고객센터에 문의하시 바랍니다.");
  434. return;
  435. }
  436. }
  437. // 은행계좌 유효성체크
  438. var fnGetAccountValidation = function () {
  439. let custModiFy = $('#custModiFyForm').serializeObject();
  440. if (gagajf.isNull(custModiFy.bankCd) && !gagajf.isNull(custModiFy.accountNo)) {
  441. mcxDialog.alertC('은행을 선택해주세요.',{
  442. sureBtnText: "확인",
  443. sureBtnClick: function() {
  444. $('#custModiFyForm select[name=bankCd]').focus();
  445. }
  446. });
  447. return false
  448. }
  449. if (!gagajf.isNull(custModiFy.bankCd) && gagajf.isNull(custModiFy.accountNo)) {
  450. mcxDialog.alertC('계좌번호를 입력해주세요.',{
  451. sureBtnText: "확인",
  452. sureBtnClick: function() {
  453. $('#custModiFyForm input[name=accountNo]').focus();
  454. }
  455. });
  456. return false;
  457. }
  458. return true;
  459. }
  460. // 코드 -> 코드명 변경
  461. var fnConvertToValue = function(data, cd, isCodeDisplay) {
  462. if (data.length === 0) {
  463. return "";
  464. }
  465. if (typeof(isCodeDisplay) == 'undefined') {
  466. isCodeDisplay = false;
  467. }
  468. let arrValue = {};
  469. $.each(data, function(idx, item) {
  470. arrValue[item.cd] = (isCodeDisplay ? '[' + item.cd + '] ' : '') + item.cdNm;
  471. });
  472. return arrValue[cd];
  473. };
  474. $(document).ready(function() {
  475. var return_bank_selecter = new sCombo('.modify_box .select_custom.select_bank');
  476. // 마이페이지 LNB 설정
  477. fnSetMypageLnbList(10);
  478. // 마이페이지 location 설정
  479. fnSetMypageLocation('내정보 관리','_PAGE_MYPAGE_CUSTOMER','회원정보 수정');
  480. // 회원(고객) 조회
  481. fnGetCustInfo();
  482. });
  483. /*]]>*/
  484. </script>
  485. </th:block>
  486. </body>
  487. </html>