MypageCustModifyFormMob.html 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581
  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="mob/common/layout/MypageLayoutMob">
  6. <!--
  7. *******************************************************************************
  8. * @source : MypageCustModifyFormMob.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.04.26 jsshin 최초 작성
  17. *******************************************************************************
  18. -->
  19. <body>
  20. <th:block layout:fragment="content">
  21. <main class="container my">
  22. <section class="content my_page_edit">
  23. <form id="custModiFyForm" name="custModiFyForm" class="form_wrap">
  24. <div class="inner">
  25. <div class="tbl_wrap">
  26. <div class="tbl_tit">
  27. <h3>회원 정보</h3>
  28. <button type="button" id="btnNameCertify" class="btn_popup">
  29. <span>개명 본인인증</span>
  30. </button>
  31. </div>
  32. <div class="tbl">
  33. <div class="tbl_row">
  34. <table>
  35. <colgroup>
  36. <col width="*">
  37. </colgroup>
  38. <tr>
  39. <th>이름</th>
  40. <td>
  41. <div class="form_field">
  42. <input type="text" id="custNm" name="custNm" class="form_control" readonly="readonly">
  43. </div>
  44. </td>
  45. </tr>
  46. <tr>
  47. <th>생년월일</th>
  48. <td>
  49. <div class="form_field">
  50. <input type="text" id="birthYmd" name="birthYmd" class="form_control" readonly="readonly"/>
  51. </div>
  52. </td>
  53. </tr>
  54. </table>
  55. <p class="desc_txt">본인인증을 통해 자동으로 수집되는 정보입니다.</p>
  56. </div>
  57. <div class="tbl_row">
  58. <table>
  59. <colgroup>
  60. <col width="*">
  61. </colgroup>
  62. <tr>
  63. <th>아이디</th>
  64. <td>
  65. <div class="form_field">
  66. <input type="text" id="custId" name="custId" class="form_control" placeholder="" readonly="readonly"/>
  67. </div>
  68. </td>
  69. </tr>
  70. <tr>
  71. <th>비밀번호</th>
  72. <td>
  73. <div class="form_field password">
  74. <button type="button" id="btn_password_pop" class="btn btn_primary" onclick="cfnPasswordModify();">
  75. <span>비밀번호 변경하기</span>
  76. </button>
  77. </div>
  78. </td>
  79. </tr>
  80. <tr>
  81. <th>이메일</th>
  82. <td>
  83. <div class="form_field">
  84. <input type="text" id="email" name="email" data-valid-type="email" class="form_control"/>
  85. </div>
  86. </td>
  87. </tr>
  88. <tr>
  89. <th>휴대폰 인증</th>
  90. <td>
  91. <div class="input_wrap certi_wrap">
  92. <input type="text" id="cellPhnno" name="cellPhnno" class="form_control" readonly="readonly"/>
  93. <button type="button" id="btnCellCertify" class="btn btn_dark">
  94. <span>본인인증</span>
  95. </button>
  96. </div>
  97. </td>
  98. </tr>
  99. </table>
  100. </div>
  101. </div>
  102. </div>
  103. </div>
  104. <div class="inner">
  105. <div class="tbl_wrap">
  106. <div class="tbl_tit">
  107. <h3>마케팅 정보 수신설정</h3>
  108. </div>
  109. <div class="tbl tbl_radio">
  110. <table>
  111. <colgroup>
  112. <col width="*">
  113. </colgroup>
  114. <tr>
  115. <th class="sr-only">이름</th>
  116. <td>
  117. <div class="form_field">
  118. <input type="checkbox" id="emailAgreeYn" name="emailAgreeYn" value="Y"/>
  119. <label for="emailAgreeYn"><span>이메일</span></label>
  120. </div>
  121. </td>
  122. </tr>
  123. <tr>
  124. <th class="sr-only">생년월일</th>
  125. <td>
  126. <div class="form_field">
  127. <input type="checkbox" id="smsAgreeYn" name="smsAgreeYn" value="Y"/>
  128. <label for="smsAgreeYn"><span>SMS</span></label>
  129. </div>
  130. </td>
  131. </tr>
  132. </table>
  133. <p class="desc_txt">회원정보, 구매 정보 및 서비스 주요 정책 관련 내용은 수신동의 여부와<br>관계없이 발송됩니다.</p>
  134. </div>
  135. </div>
  136. </div>
  137. <div class="inner">
  138. <div class="tbl_wrap">
  139. <div class="tbl_tit">
  140. <h3>환불 계좌정보</h3>
  141. <button type="button" id="btnInitilizeAccount" class="btn_popup">
  142. <span>계좌초기화</span>
  143. </button>
  144. </div>
  145. <div class="tbl type1">
  146. <table>
  147. <colgroup>
  148. <col width="*">
  149. </colgroup>
  150. <tr>
  151. <th>예금주</th>
  152. <td>
  153. <div class="form_field">
  154. <input type="text" id="accountNm" name="accountNm" class="form_control" placeholder="" readonly="readonly"/>
  155. </div>
  156. </td>
  157. </tr>
  158. <tr>
  159. <th>은행명</th>
  160. <td>
  161. <div class="form_field">
  162. <div class="select_custom select_bank"> <!-- 210408_ 수정 : select_bank 클래스 변경 -->
  163. <div class="combo">
  164. <div class="select">선택</div>
  165. <input type="hidden" name="bankCd" value=""/>
  166. </div>
  167. </div>
  168. </div>
  169. </td>
  170. </tr>
  171. <tr>
  172. <th>계좌번호</th>
  173. <td>
  174. <div class="input_wrap certi_wrap">
  175. <input type="number" pattern="\d*" id="accountNo" name="accountNo" class="form_control" maxlength="20" data-valid-type="numeric" placeholder="계좌번호를 입력해 주세요"/>
  176. <button type="button" id="btnAccountCheck" class="btn btn_dark">
  177. <span>계좌인증</span>
  178. </button>
  179. </div>
  180. </td>
  181. </tr>
  182. </table>
  183. </div>
  184. </div>
  185. <div class="btn_group_flex">
  186. <div class="">
  187. <button type="button" id="btnConfirm" class="btn btn_dark btn_block">
  188. <span>확인</span>
  189. </button>
  190. </div>
  191. </div>
  192. </div>
  193. </form>
  194. </section>
  195. </main>
  196. <!-- 210408_ 추가 : 은행 선택 팝업 -->
  197. <div id="refundBankPop" class="popup_box refundBankPop">
  198. <div class="lap">
  199. <div class="popup_close">카테고리닫기</div>
  200. <div class="popup_head sr-only">
  201. <h2 class="">은행 선택 팝업</h2>
  202. </div>
  203. <div class="popup_con">
  204. <div class="button_list clear">
  205. <th:block th:if="${bankList}" th:each="oneData, status : ${bankList}">
  206. <button type="button" th:id="|bankCd_${oneData.cd}|" th:with="cd = ${oneData.cd}">
  207. <span th:text="${oneData.cdNm}"></span>
  208. <input type="hidden" name="bankCd" th:value="${cd}"/>
  209. </button>
  210. </th:block>
  211. </div>
  212. </div>
  213. </div>
  214. </div>
  215. <!-- //210408_ 추가 : 은행 선택 팝업 -->
  216. <script th:src="@{'/biz/customer.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/biz/customer.js"></script>
  217. <script th:inline="javascript">
  218. /*<![CDATA[*/
  219. let sEncData = [[${sEncData}]]; //인증 후 해당 페이지로 리다이렉트함
  220. let authMethod = [[${authMethod}]]; //인증 후 해당 페이지로 리다이렉트함
  221. let orgCustInfo;
  222. let accountCheck = false;
  223. let orgBankCd;
  224. let orgAccountNo;
  225. let accountInitYn = 'N'; // 계좌초기화여부
  226. // 고객정보
  227. var fnGetCustInfo = function () {
  228. $.get('/mypage/customer/info', fnGetCustInfoCallback);
  229. }
  230. // 고객정보 데이터
  231. var fnGetCustInfoCallback = function (custInfo) {
  232. orgCustInfo = custInfo; // 원본 데이터저장 수정시 비교 작업
  233. $('#custModiFyForm input[name=custNm]').val(custInfo.custNm);
  234. $('#custModiFyForm input[name=birthYmd]').val(custInfo.birthYmd);
  235. let custId = custInfo.custId;
  236. if (custInfo.snsType === 'NV') {
  237. custId = '네이버 간편가입회원'
  238. }
  239. if (custInfo.snsType === 'KK') {
  240. custId = '카카오 간편가입회원'
  241. }
  242. if (custInfo.snsType === 'YS') {
  243. custId = 'YES24 간편가입회원'
  244. }
  245. $('#custModiFyForm input[name=custId]').val(custId);
  246. $('#custModiFyForm input[name=email]').val(custInfo.email);
  247. $('#custModiFyForm input[name=cellPhnno]').val(custInfo.cellPhnno);
  248. $('#custModiFyForm input[name=accountNm]').val(custInfo.custNm);
  249. fnDisplayEmailAgree(custInfo.emailAgreeYn);
  250. fnDisplaySmsAgree(custInfo.smsAgreeYn);
  251. // 회원(고객) 계좌 조회
  252. fnGetCustAccountInfo();
  253. }
  254. // 이메일 수신동의
  255. var fnDisplayEmailAgree = function (emailAgreeYn) {
  256. const $emailAgreeYn = $('#custModiFyForm input[name=emailAgreeYn]');
  257. if (emailAgreeYn === 'Y') {
  258. $emailAgreeYn.prop('checked', true);
  259. } else {
  260. $emailAgreeYn.prop('checked', false);
  261. }
  262. };
  263. // SMS 수신동의
  264. var fnDisplaySmsAgree = function (smsAgreeYn) {
  265. const $smsAgreeYn = $('#custModiFyForm input[name=smsAgreeYn]');
  266. if (smsAgreeYn === 'Y') {
  267. $smsAgreeYn.prop('checked', true);
  268. } else {
  269. $smsAgreeYn.prop('checked', false);
  270. }
  271. };
  272. // 고객계좌정보
  273. var fnGetCustAccountInfo = function () {
  274. $.get('/mypage/customer/account/info', fnGetCustAccountInfoCallback);
  275. }
  276. // 고객계좌 정보 데이터
  277. var fnGetCustAccountInfoCallback = function (result) {
  278. orgAccountInfo = {};
  279. var $accountNm = $('#custModiFyForm input[name=accountNm]');
  280. if (!gagajf.isNull(result)) {
  281. orgAccountNo = result.accountNo;
  282. orgBankCd = result.bankCd;
  283. //1. 고객명과 환불계좌 예금주가 다른 경우 현재 고객명을 적어주고 계좌번호, 은행코드 초기화 처리
  284. let $bankCd = '';
  285. if ($accountNm.val() === result.accountNm) {
  286. $('#custModiFyForm input[name=accountNo]').val(result.accountNo);
  287. $bankCd = '#bankCd_'+result.bankCd;
  288. } else {
  289. $('#custModiFyForm input[name=accountNo]').val('');
  290. $bankCd = '#bankCd_';
  291. }
  292. $($bankCd).trigger('click'); // 셀렉트 박스 트리거
  293. } else {
  294. orgAccountNo = '';
  295. orgBankCd ='';
  296. }
  297. }
  298. // 나이스 본인인증 후 콜백
  299. var fnNiceCallBack = function(encData) {
  300. if (!gagajf.isNull(encData)) {
  301. let custInfo = {};
  302. custInfo.encData = encData;
  303. let jsonData = JSON.stringify(custInfo);
  304. gagajf.ajaxJsonSubmit('/mypage/customer/auth/update', jsonData, fnUpdateAuthInfoCallback);
  305. }
  306. };
  307. var fnUpdateAuthInfoCallback = function (result) {
  308. if (result.isSuccess) {
  309. fnGetCustInfo();
  310. mcxDialog.alert("본인인증을 통해 정보가 변경 되었습니다.");
  311. return;
  312. } else {
  313. mcxDialog.alert("실패하였습니다.<br/>고객센터에 문의하시 바랍니다.");
  314. return;
  315. }
  316. }
  317. // 계좌초기화
  318. $('#btnInitilizeAccount').on('click', function () {
  319. $('#custModiFyForm input[name=accountNm]').val(orgCustInfo.custNm);
  320. $('#custModiFyForm input[name=accountNo]').val('');
  321. $('div.select_bank').find('div.select').html('선택');
  322. accountCheck = false;
  323. accountInitYn = 'Y';
  324. });
  325. // 계좌인증
  326. $('#btnAccountCheck').on('click', function () {
  327. if (!fnGetAccountValidation()) {
  328. return;
  329. }
  330. let custInfo = {};
  331. custInfo.accountNm = $('#custModiFyForm input[name=accountNm]').val();
  332. custInfo.accountNo = $('#custModiFyForm input[name=accountNo]').val();
  333. custInfo.bankCd = $('#custModiFyForm input[name=bankCd]').val();
  334. let jsonData = JSON.stringify(custInfo);
  335. //console.log(jsonData);
  336. gagajf.ajaxJsonSubmit('/mypage/account/check', jsonData, fnAccountCheckCallback);
  337. });
  338. // 계좌인증 콜백
  339. var fnAccountCheckCallback = function (result) {
  340. let msg = '계좌인증에 성공했습니다.'
  341. if (result.isValid) { // 유효하면 true
  342. accountCheck = true;
  343. accountInitYn = 'N'; // 계좌초기화 버튼 클릭 안한것으로
  344. } else {
  345. accountCheck = false;
  346. msg = '계좌정보를 다시 확인해주세요.';
  347. }
  348. mcxDialog.alertC(msg ,{
  349. sureBtnText: "확인",
  350. sureBtnClick: function() {
  351. }
  352. });
  353. };
  354. // 수정 버튼
  355. $('#btnConfirm').on('click', function () {
  356. let custModiFy = $('#custModiFyForm').serializeObject();
  357. let $bankCd = $('#custModiFyForm input[name=bankCd]');
  358. let $accountNo = $('#custModiFyForm input[name=accountNo]');
  359. let marketingModifyYn = 'N';
  360. let accountModifyYn = 'N';
  361. let emailModifyYn = 'N';
  362. if (gagajf.isNull(custModiFy.email)) {
  363. mcxDialog.alertC('이메일 주소를 입력해주세요.',{
  364. sureBtnText: "확인",
  365. sureBtnClick: function() {
  366. $('#custModiFyForm input[name=email]').focus();
  367. }
  368. });
  369. return;
  370. }
  371. if (!fnCheckValidationEmail(custModiFy.email)) {
  372. mcxDialog.alertC('이메일 형식에 맞게 입력해주세요.',{
  373. sureBtnText: "확인",
  374. sureBtnClick: function() {
  375. $('#custModiFyForm input[name=email]').focus();
  376. }
  377. });
  378. return;
  379. }
  380. if (orgCustInfo.email !== custModiFy.email) {
  381. emailModifyYn = 'Y';
  382. }
  383. if (!fnGetAccountValidation()) {
  384. return;
  385. }
  386. if (accountInitYn == 'N') { // 계좌초기화버튼 클릭 안 했으면
  387. // 은행코드가 바꼈는지
  388. if (orgBankCd !== $bankCd.val()) {
  389. accountModifyYn = 'Y';
  390. }
  391. if (orgAccountNo !== $accountNo.val()) {
  392. accountModifyYn = 'Y';
  393. }
  394. if (accountModifyYn === 'Y') { // 환불계좌정보 변경 됐으면
  395. if (!gagajf.isNull($bankCd.val()) && !gagajf.isNull($accountNo.val())) {
  396. if (!accountCheck) {
  397. mcxDialog.alertC('계좌인증이 필요합니다.',{
  398. sureBtnText: "확인",
  399. sureBtnClick: function() {
  400. }
  401. });
  402. return;
  403. }
  404. }
  405. }
  406. } else { // 계좌초기화버튼 클릭
  407. accountModifyYn = 'D'; // 삭제
  408. }
  409. if (gagajf.isNull(custModiFy.smsAgreeYn)) {
  410. custModiFy.smsAgreeYn = 'N';
  411. }
  412. if (gagajf.isNull(custModiFy.emailAgreeYn)) {
  413. custModiFy.emailAgreeYn = 'N';
  414. }
  415. // SMS 수신여부
  416. if (orgCustInfo.smsAgreeYn !== custModiFy.smsAgreeYn) {
  417. marketingModifyYn = 'Y';
  418. }
  419. // 이메일 수신여부
  420. if (orgCustInfo.emailAgreeYn !== custModiFy.emailAgreeYn) {
  421. marketingModifyYn = 'Y';
  422. }
  423. custModiFy.bankCd = $bankCd.val();
  424. custModiFy.emailModifyYn = emailModifyYn ;
  425. custModiFy.marketingModifyYn = marketingModifyYn;
  426. custModiFy.accountModifyYn = accountModifyYn;
  427. let jsonData = JSON.stringify(custModiFy);
  428. gagajf.ajaxJsonSubmit('/mypage/customer/info/save', jsonData, fnSaveCustomerInfoCallback)
  429. });
  430. // 수정 콜백
  431. var fnSaveCustomerInfoCallback = function (result) {
  432. accountCheck = false;
  433. if (result.isSuccess) {
  434. mcxDialog.alert("회원정보가 수정되었습니다.");
  435. fnGetCustInfo();
  436. fnGetCustAccountInfo();
  437. return;
  438. } else {
  439. let msg = '실패하였습니다.<br/>고객센터에 문의하시 바랍니다.'
  440. if (result.resultType === 'INVALID_ACCOUNT') {
  441. msg = '환불 계좌정보를 다시 확인하시고 계좌인증을 해주세요.'
  442. }
  443. mcxDialog.alert(msg);
  444. return;
  445. }
  446. }
  447. // 은행계좌 유효성체크
  448. var fnGetAccountValidation = function () {
  449. let $bankCd = $('#custModiFyForm input[name=bankCd]');
  450. let $accountNo = $('#custModiFyForm input[name=accountNo]');
  451. if (gagajf.isNull($bankCd.val()) && !gagajf.isNull($accountNo.val())) {
  452. mcxDialog.alertC('은행을 선택해주세요.',{
  453. sureBtnText: "확인",
  454. sureBtnClick: function() {
  455. $bankCd.focus();
  456. }
  457. });
  458. return false;
  459. }
  460. if (!gagajf.isNull($bankCd.val()) && gagajf.isNull($accountNo.val())) {
  461. mcxDialog.alertC('계좌번호를 입력해주세요.',{
  462. sureBtnText: "확인",
  463. sureBtnClick: function() {
  464. $accountNo.focus();
  465. }
  466. });
  467. return false;
  468. }
  469. return true;
  470. };
  471. // 나이스 본인인증 후 콜백
  472. var fnNiceCallBack = function(encData) {
  473. if (!gagajf.isNull(encData)) {
  474. let custInfo = {};
  475. custInfo.encData = encData;
  476. let jsonData = JSON.stringify(custInfo);
  477. gagajf.ajaxJsonSubmit('/mypage/customer/auth/update', jsonData, fnUpdateAuthInfoCallback);
  478. }
  479. };
  480. var fnUpdateAuthInfoCallback = function (result) {
  481. if (result.isSuccess) {
  482. fnGetCustInfo();
  483. mcxDialog.alert("본인인증을 통해 정보가 변경 되었습니다.");
  484. return;
  485. } else {
  486. mcxDialog.alert("실패하였습니다.<br/>고객센터에 문의하시 바랍니다.");
  487. return;
  488. }
  489. }
  490. //개명 본인인증
  491. $('#btnNameCertify').on('click', function () {
  492. cfnOpenCellphoneCertify(_PAGE_MYPAGE_CUSTOMER_MODIFY+'?confirmYn=Y');
  493. });
  494. $('#btnCellCertify').on('click', function () {
  495. cfnOpenCellphoneCertify(_PAGE_MYPAGE_CUSTOMER_MODIFY+'?confirmYn=Y');
  496. });
  497. $(document).ready(function(){
  498. if (!gagajf.isNull(sEncData)) {
  499. fnNiceCallBack(sEncData, authMethod);
  500. }
  501. $('#htopTitle').text('내 정보 관리');
  502. // 회원(고객) 조회
  503. fnGetCustInfo();
  504. //버튼 색
  505. $(document).on('click','.popup_box .button_list button',function(){
  506. $('.popup_box .button_list button').removeClass('on');
  507. $(this).addClass('on');
  508. $('.combo .select').html($(this)[0].innerHTML); // 값변경
  509. });
  510. //210408_ 추가 : 은행선택 팝업 스크립트
  511. $(document).on("click",".select_bank",function(e){
  512. $('#refundBankPop').show().addClass("active");
  513. $('#refundBankPop').css({"z-index":"1000"});
  514. $("body").css({"overflow":"hidden"});
  515. });
  516. //210408_ 추가 : 은행선택 팝업 스크립트 닫기
  517. $('.refundBankPop .popup_close').on("click",function(){
  518. $('.refundBankPop').hide().removeClass('active');
  519. $("body").css({"overflow":"visible"});
  520. });
  521. $(document).on('click','.popup_box.refundBankPop .button_list button',function(){
  522. $(this).parents('.popup_box.refundBankPop').hide().removeClass('active');
  523. $("body").css({"overflow":"visible"});
  524. })
  525. })
  526. /*]]>*/
  527. </script>
  528. </th:block>
  529. </body>
  530. </html>