CustomerDetailForm.html 56 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527
  1. <!DOCTYPE html>
  2. <html lang="ko"
  3. xmlns:th="http://www.thymeleaf.org">
  4. <!--
  5. *******************************************************************************
  6. * @source : CustomerDetailForm.html
  7. * @desc : 회원 상세 팝업 Page
  8. *============================================================================
  9. * STYLE24
  10. * Copyright(C) 2021 TSIT, All rights reserved.
  11. *============================================================================
  12. * VER DATE AUTHOR DESCRIPTION
  13. * === =========== ========== =============================================
  14. * 1.0 2021.01.18 jsshin 최초 작성
  15. *******************************************************************************
  16. -->
  17. <div class="modalPopup" data-width="1820" data-height="750">
  18. <div class="panelStyle">
  19. <!-- TITLE -->
  20. <div class="panelTitle">
  21. <strong>회원상세</strong>
  22. <button type="button" class="close" onclick="uifnPopupClose('popupCustomerDetail');"><em class="fa fa-times"></em></button>
  23. </div>
  24. <!-- //TITLE -->
  25. <!-- CONTENT -->
  26. <div class="panelContent" >
  27. <table class="frmStyle" aria-describedby="회원정보">
  28. <colgroup>
  29. <col style="width:10%;"/>
  30. <col style="width:15%;"/>
  31. <col style="width:10%;"/>
  32. <col style="width:15%;"/>
  33. <col style="width:10%;"/>
  34. <col style="width:15%;"/>
  35. </colgroup>
  36. <tbody>
  37. <th>이름</th>
  38. <td>
  39. <span id="spanCustNm" name="spanCustNm"></span>
  40. <span id="managedRsnNm" name="managedRsnNm" class="infoTxt cRed h5"></span>
  41. </td>
  42. <th>아이디</th>
  43. <td>
  44. <span id="custId" name="custId"></span>
  45. <th:block th:if="${sessionInfo.userId == 'jsshin'}">
  46. <button type="button" id="btnLogin" class="btn btnRight btn-success btn-lg">Login</button>
  47. </th:block>
  48. </td>
  49. <th>가입사이트</th>
  50. <td>
  51. <span id="siteNm" name="siteNm"></span>
  52. </td>
  53. </tbody>
  54. </table>
  55. <!-- TABS SPACE -->
  56. <div class="tabs">
  57. <!-- TABS NAVI -->
  58. <div class="tabsNav">
  59. <ul>
  60. <li class="on"><a href="#tab1" onclick="fnSearchCustInfo();">기본정보</a></li>
  61. <li><a href="#tab2" onclick="fnSearchOrder();">주문내역</a></li>
  62. <li><a href="#tab3" onclick="fnSearchDelivery();">배송지정보</a></li>
  63. <li><a href="#tab4" onclick="fnSearchCoupon();">쿠폰내역</a></li>
  64. <li><a href="#tab5" onclick="fnSearchPoint();">포인트내역</a></li>
  65. <li><a href="#tab6" onclick="fnSearchGiftCard()">상품권내역</a></li>
  66. <li><a href="#tab7" onclick="fnSearchReview();">상품평내역</a></li>
  67. <li><a href="#tab8" onclick="fnSearchCounsel();">1:1문의내역</a></li>
  68. <li><a href="#tab9" onclick="fnSearchGoodsQna();">상품문의내역</a></li>
  69. <li><a href="#tab10" onclick="fnSearchContact();">회원접촉이력</a></li>
  70. <li><a href="#tab11" onclick="fnSearchChangeGrade();">회원등급변경이력</a></li>
  71. </ul>
  72. </div>
  73. <!-- //TABS NAVI -->
  74. <!-- TABS CONTENTS -->
  75. <ul class="tabsCont">
  76. <!-- TAB1 : 회원정보 -->
  77. <li class="tab on" id="tab1">
  78. <!-- TAB1 PANELSTYLE -->
  79. <div class="panelStyle">
  80. <form id="custInfoForm" name="custInfoForm" action="#" method="post">
  81. <input type="hidden" name="custNo" th:value="${custNo}"/>
  82. <h4>기본정보</h4>
  83. <table class="frmStyle">
  84. <colgroup>
  85. <col style="width:10%;"/>
  86. <col style="width:40%;"/>
  87. <col style="width:10%;"/>
  88. <col/>
  89. </colgroup>
  90. <tbody>
  91. <tr>
  92. <th class="dashR">회원구분<em class="required" title="필수"></em></th>
  93. <td class="dashR">
  94. <select id="custGb" name="custGb">
  95. <option th:if="${custGbList}" th:each="oneData, status : ${custGbList}" th:value="${oneData.cd}"
  96. th:text="${'[' + oneData.cd + '] '+oneData.cdNm}"></option>
  97. </select>
  98. </td>
  99. <th class="dashR">회원등급<em class="required" title="필수"></em></th>
  100. <td class="dashR">
  101. <select id="custGrade" name="custGrade">
  102. <option th:if="${custGradeList}" th:each="oneData, status : ${custGradeList}" th:value="${oneData.cd}"
  103. th:text="${'[' + oneData.cd + '] '+oneData.cdNm}"></option>
  104. </select>
  105. </td>
  106. </tr>
  107. <tr>
  108. <th class="dashR">관리대상</th>
  109. <td class="dashR">
  110. <select id="managedRsn" name="managedRsn">
  111. <option value="">일반</option>
  112. <option th:if="${managedRsnList}" th:each="oneData, status : ${managedRsnList}" th:value="${oneData.cd}"
  113. th:text="${'[' + oneData.cd + '] '+oneData.cdNm}"></option>
  114. </select>
  115. <span class="infoTxt cRed h5" id="managedRsnDp" name="managedRsnDp"></span>
  116. </td>
  117. <th class="dashR">관리대상 지정 날짜</th>
  118. <td class="dashR" id="managedDt" name="managedDt">
  119. </td>
  120. </tr>
  121. <tr>
  122. <th class="dashR">관리대상 지정 사유</th>
  123. <td class="dashR" colspan="3">
  124. <input type="text" id="managedDtlRsn" name="managedDtlRsn" class="w600" />
  125. </td>
  126. </tr>
  127. <tr>
  128. <th class="dashR">비밀번호</th>
  129. <td class="dashR" colspan="3">
  130. *******
  131. <button type="button" id="btnResetPassword" class="btn btn-info btn-lg">초기화</button>
  132. <span class="infoTxt cBlue">
  133. <i class="fa fa-info-circle"></i>회원에게 임시비밀번호를 발송합니다. (이메일, 알림톡)
  134. </span>
  135. </td>
  136. </tr>
  137. <tr>
  138. <th class="dashR">생년월일</th>
  139. <td class="dashR">
  140. <input type="text" id="birthYmd" name="birthYmd" class="schDate w100" data-valid-name="생년월일"/>
  141. </td>
  142. <th class="dashR">성별</th>
  143. <td class="dashR" id="sexGb" name="sexGb"></td>
  144. </tr>
  145. <tr>
  146. <th class="dashR">자택주소</th>
  147. <td class="dashR" colspan="3">
  148. <input type="text" id="homeZipcode" name="homeZipcode" class="w100" readonly="readonly"/>
  149. <button type="button" class="btn btn-info btn-lg" onclick="fnOpenDaumAddr('custInfoForm');">우편번호찾기</button>
  150. <br/>
  151. <input type="text" id="homeBaseAddr" name="homeBaseAddr" class="w300" readonly="readonly"/>
  152. <input type="text" id="homeDtlAddr" name="homeDtlAddr" class="w300"/>
  153. </td>
  154. </tr>
  155. <tr>
  156. <th class="dashR">휴대전화번호<em class="required" title="필수"></em></th>
  157. <td class="dashR">
  158. <input type="text" name="cellPhnno" class="w130" readonly="readonly"/>
  159. <button type="button" id="btnCustSendLms" class="btn btn-info btn-lg">LMS전송</button>
  160. <button type="button" id="btnCustCrtfd" class="btn btn-info btn-lg">번호변경</button>
  161. </td>
  162. <th class="dashR">SMS수신여부<em class="required" title="필수"></em></th>
  163. <td class="dashR">
  164. <label class="rdoBtn"><input type="radio" name="smsAgreeYn" value="Y"/>수신</label>
  165. <label class="rdoBtn"><input type="radio" name="smsAgreeYn" value="N"/>미수신</label>
  166. </td>
  167. </tr>
  168. <tr>
  169. <th class="dashR">이메일<em class="required" title="필수"></em></th>
  170. <td class="dashR">
  171. <input type="hidden" name="email" data-valid-name="이메일"/>
  172. <input type="text" id="emailId" name="emailId" class="w200" maxlength="30"/>
  173. @
  174. <input type="text" id="emailDomain" name="emailDomain" class="w150" maxlength="20"/>
  175. <select id="emailDomainList" name="emailDomainList">
  176. <option value="">선택하세요</option>
  177. <option th:if="${emailDomainList}" th:each="oneData, status : ${emailDomainList}" th:value="${oneData.cd}"
  178. th:text="|${oneData.cdNm}|"></option>
  179. </select>
  180. <button type="button" id="btnCustSendEmail" class="btn btn-info btn-lg" >이메일발송</button>
  181. </td>
  182. <th class="dashR">메일수신여부<em class="required" title="필수"></em></th>
  183. <td class="dashR">
  184. <label class="rdoBtn"><input type="radio" name="emailAgreeYn" value="Y"/>수신</label>
  185. <label class="rdoBtn"><input type="radio" name="emailAgreeYn" value="N"/>미수신</label>
  186. </td>
  187. </tr>
  188. <tr>
  189. <th class="dashR">가입일시</th>
  190. <td class="dashR" id="joinDt" name="joinDt"></td>
  191. <th class="dashR">최종로그인일시</th>
  192. <td class="dashR" id="loginDt" name="loginDt"></td>
  193. </tr>
  194. <tr>
  195. <th class="dashR">내외국인</th>
  196. <td class="dashR" id="foreignerYn" name="foreignerYn"></td>
  197. <th class="dashR">탈퇴여부</th>
  198. <td class="dashR">
  199. <spna id="secedeRsnYn" name="secedeRsnYn" ></spna>
  200. <button type="button" id="btnCustSecede" class="btn btn-danger btn-lg marL5" style="display: none">
  201. 회원탈퇴
  202. </button>
  203. </td>
  204. </tr>
  205. <tr>
  206. <th class="dashR">SNS가입유형</th>
  207. <td class="dashR" id="snsType" name="snsType" colspan="3"></td>
  208. </tr>
  209. </tbody>
  210. </table>
  211. <ul class="panelBar">
  212. <li class="right">
  213. <button type="button" id="btnCustInfoSave" class="btn btn-success btn-lg">저장</button>
  214. </li>
  215. </ul>
  216. </form>
  217. </div>
  218. <!-- //TAB1 PANELSTYLE -->
  219. </li>
  220. <!-- //TAB1 : 회원정보 -->
  221. <!-- TAB2 : 주문내역 -->
  222. <li id="tab2" class="tab">
  223. <!-- TAB2 PANELSTYLE -->
  224. <div class="panelStyle">
  225. <h4>주문내역</h4>
  226. <div id="custOrderList" class="ag-theme-balham" style="width: 100%; height: 510px;"></div>
  227. </div>
  228. <!-- //TAB2 PANELSTYLE -->
  229. </li>
  230. <!-- //TAB2 : 주문내역 -->
  231. <!-- TAB3 : 배송지정보 -->
  232. <li id="tab3" class="tab">
  233. <!-- TAB3 PANELSTYLE -->
  234. <div class="panelStyle">
  235. <form id="custAddrForm" name="custAddrForm" action="#" method="post">
  236. <input type="hidden" name="custDelvAddrSq"/>
  237. <input type="hidden" name="custNo" th:value="${custNo}"/>
  238. <h4>배송지정보</h4>
  239. <div id="custAddrList" class="ag-theme-balham" style="width: 100%; height: 300px;" ></div>
  240. <table class="frmStyle">
  241. <colgroup>
  242. <col style="width:5%;"/>
  243. <col style="width:25%;"/>
  244. <col style="width:5%;"/>
  245. <col style="width:25%;"/>
  246. <col style="width:5%;"/>
  247. <col style="width:25%;"/>
  248. <col/>
  249. </colgroup>
  250. <tbody>
  251. <tr>
  252. <th>배송지명<em class="required" title="필수"></em></th>
  253. <td>
  254. <input type="text" class="w200" name="delvAddrNm" maxlength="30" required="required" data-valid-name="배송지명"/>
  255. <label class="chkBox">
  256. <input type="checkbox" name="defaultYn" value="Y"/>기본
  257. </label>
  258. </td>
  259. <th>수령인<em class="required" title="필수"></em></th>
  260. <td>
  261. <input type="text" class="w200" name="recipNm" maxlength="10" required="required" data-valid-name="수령인"/>
  262. </td>
  263. <th>삭제여부</th>
  264. <td>
  265. <label class="chkBox">
  266. <input type="checkbox" name="delYn" value="Y"/>
  267. </label>
  268. </td>
  269. </tr>
  270. <tr>
  271. <th>전화번호</th>
  272. <td >
  273. <input type="hidden" id="recipTelno" name="recipTelno"/>
  274. <select class="w100" id="telFirstNo" name="telFirstNo">
  275. <option value="">선택</option>
  276. <option th:if="${nationalNumberList}" th:each="oneData, status : ${nationalNumberList}"
  277. th:value="${oneData.cd}" th:text="|${oneData.cd}|"></option>
  278. </select> -
  279. <input type="text" class="w100" name="telMiddleNo" maxlength="4" data-valid-type="numeric"
  280. data-valid-name="전화번호"/> -
  281. <input type="text" class="w100" name="telLastNo" maxlength="4" data-valid-type="numeric"
  282. data-valid-name="전화번호"/>
  283. </td>
  284. <th>휴대전화번호<em class="required" title="필수"></em></th>
  285. <td colspan="4">
  286. <input type="hidden" id="recipPhnno" name="recipPhnno"/>
  287. <select class="w100" id="recipFirstNo" name="recipFirstNo">
  288. <option value="">선택</option>
  289. <option th:if="${nationalHpNumberList}" th:each="oneData, status : ${nationalHpNumberList}"
  290. th:value="${oneData.cd}" th:text="|${oneData.cd}|"></option>
  291. </select> -
  292. <input type="text" class="w100" id="recipMiddleNo" name="recipMiddleNo" maxlength="4" required="required" data-valid-type="numeric"
  293. data-valid-name="휴대전화번호"/> -
  294. <input type="text" class="w100" id="recipLastNo" name="recipLastNo" maxlength="4" required="required" data-valid-type="numeric"
  295. data-valid-name="휴대전화번호"/>
  296. </td>
  297. </tr>
  298. <tr>
  299. <th>주소<em class="required" title="필수"></em></th>
  300. <td colspan="5">
  301. <input type="text" id="recipZipcode" name="recipZipcode" class="w100" maxlength="10" required="required" data-valid-name="주소"/>
  302. <button type="button" class="btn btn-info btn-lg" onclick="fnOpenDaumAddr('custAddrForm');">우편번호찾기</button>
  303. <br/>
  304. <input type="text" id="recipBaseAddr" name="recipBaseAddr" class="w300" maxlength="50" required="required" data-valid-name="주소"/>
  305. <input type="text" id="recipDtlAddr" name="recipDtlAddr" class="w300" maxlength="30" required="required" data-valid-name="상세주소"/>
  306. </td>
  307. </tr>
  308. </tbody>
  309. </table>
  310. <ul class="panelBar">
  311. <li class="right">
  312. <button type="button" class="btn btn-info btn-lg" id="btnCustAddrNew">신규</button>
  313. <button type="button" class="btn btn-success btn-lg" id="btnCustAddrSave">저장</button>
  314. </li>
  315. </ul>
  316. </form>
  317. </div>
  318. <!-- //TAB3 PANELSTYLE -->
  319. </li>
  320. <!-- //TAB3 : 배송지정보 -->
  321. <!-- TAB4 : 쿠폰 내역 -->
  322. <li id="tab4" class="tab">
  323. <!-- TAB4 PANELSTYLE -->
  324. <div class="panelStyle">
  325. <h4>쿠폰 내역</h4>
  326. <div id="custCouponList" class="ag-theme-balham" style="width: 100%; height: 510px;" ></div>
  327. <ul class="panelBar">
  328. <li class="right">
  329. <button type="button" id="btnCustCouponCreate" class="btn btn-info btn-lg" >쿠폰발급</button>
  330. </li>
  331. </ul>
  332. </div>
  333. <!-- //TAB4 PANELSTYLE -->
  334. </li>
  335. <!-- //TAB4 : 쿠폰 내역 -->
  336. <!-- TAB5 : 포인트 내역 -->
  337. <li id="tab5" class="tab">
  338. <!-- TAB5 PANELSTYLE -->
  339. <div class="panelStyle">
  340. <form id="custPointForm" name="custPointForm" action="#" method="post">
  341. <h4>포인트 내역</h4>
  342. <table class="tableStyle">
  343. <colgroup>
  344. <col style="width:15%;"/>
  345. <col style="width:15%;"/>
  346. <col style="width:15%;"/>
  347. <col style="width:20%;"/>
  348. <col style="width:20%;"/>
  349. <col style="width:25%;"/>
  350. </colgroup>
  351. <tbody>
  352. <tr>
  353. <th>가용포인트</th>
  354. <th>누적포인트</th>
  355. <th>사용포인트</th>
  356. <th>소멸포인트</th>
  357. <th>적립예정포인트</th>
  358. <th>소멸예정포인트(30일)</th>
  359. </tr>
  360. <tr>
  361. <td name="availPntAmt">0 P</td>
  362. <td name="accumPntAmt">0 P</td>
  363. <td name="usePntAmt">0 P</td>
  364. <td name="expirePntAmt">0 P</td>
  365. <td name="expectedPntAmt">0 P</td>
  366. <td name="expectedExpirePntAmt">0 P</td>
  367. </tr>
  368. </tbody>
  369. </table>
  370. <br/>
  371. <div id="custPointList" class="ag-theme-balham" style="width: 100%; height: 420px;"></div>
  372. <ul class="panelBar">
  373. <li class="right">
  374. <button type="button" id="btnCustPointCreate" class="btn btn-info btn-lg">포인트부여</button>
  375. </li>
  376. </ul>
  377. </form>
  378. </div>
  379. <!-- //TAB5 PANELSTYLE -->
  380. </li>
  381. <!-- //TAB5 : 포인트 내역 -->
  382. <!-- TAB6 : 상품권 내역 -->
  383. <li id="tab6" class="tab">
  384. <!-- TAB6 PANELSTYLE -->
  385. <div class="panelStyle">
  386. <h4>상품권 내역</h4>
  387. <div id="custGiftCardList" class="ag-theme-balham" style="width: 100%; height: 510px;"></div>
  388. </div>
  389. <!-- //TAB6 PANELSTYLE -->
  390. </li>
  391. <!-- //TAB6 : 상품권 내역 -->
  392. <!-- TAB7 : 상품평 -->
  393. <li id="tab7" class="tab">
  394. <!-- TAB7 PANELSTYLE -->
  395. <div class="panelStyle">
  396. <h4>상품평 내역</h4>
  397. <div id="custReviewList" class="ag-theme-balham" style="width: 100%; height: 510px;"></div>
  398. </div>
  399. <!-- //TAB7 PANELSTYLE -->
  400. </li>
  401. <!-- //TAB7 : 상품평 내역 -->
  402. <!-- TAB8 : 1:1문의 내역 -->
  403. <li id="tab8" class="tab">
  404. <!-- TAB8 PANELSTYLE -->
  405. <div class="panelStyle">
  406. <h4>1:1문의 내역</h4>
  407. <div id="custCounselList" class="ag-theme-balham" style="width: 100%; height: 510px;"></div>
  408. </div>
  409. <!-- //TAB8 PANELSTYLE -->
  410. </li>
  411. <!-- //TAB8 : 1:1문의 내역 -->
  412. <!-- TAB9 : 상품문의 내역 -->
  413. <li id="tab9" class="tab">
  414. <!-- TAB9 PANELSTYLE -->
  415. <div class="panelStyle">
  416. <h4>상품문의 내역</h4>
  417. <div id="custGoodsQnaList" class="ag-theme-balham" style="width: 100%; height: 510px;"></div>
  418. </div>
  419. <!-- //TAB9 PANELSTYLE -->
  420. </li>
  421. <!-- //TAB9 : 상품문의 내역 -->
  422. <!-- TAB10 : 회원접촉이력 -->
  423. <li id="tab10" class="tab">
  424. <!-- TAB10 PANELSTYLE -->
  425. <div class="panelStyle">
  426. <form id="custContactHstForm" name="custContactHstForm" action="#" method="post">
  427. <input type="hidden" name="custNo" th:value="${custNo}"/>
  428. <h4>회원접촉이력</h4>
  429. <table class="frmStyle">
  430. <colgroup>
  431. <col style="width:3%;"/>
  432. <col style="width:7%;"/>
  433. <col style="width:6%;"/>
  434. <col style="width:5%;"/>
  435. <col style="width:6%;"/>
  436. <col style="width:29%;"/>
  437. <col/>
  438. </colgroup>
  439. <tbody>
  440. <tr>
  441. <th>접촉유형<em class="required" title="필수"></em></th>
  442. <td>
  443. <select name="contactType" class="w150" required="required" data-valid-type="select" data-valid-name="접촉유형">
  444. <option value="">[선택]</option>
  445. <option th:if="${contactTypeList}" th:each="oneData, status : ${contactTypeList}" th:value="${oneData.cd}"
  446. th:text="${oneData.cdNm}"></option>
  447. </select>
  448. </td>
  449. <th>접촉방법<em class="required" title="필수"></em></th>
  450. <td>
  451. <select name="contactMethod" class="w150" required="required" data-valid-type="select" data-valid-name="접촉방법">
  452. <option value="">[선택]</option>
  453. <option th:if="${contactMethodList}" th:each="oneData, status : ${contactMethodList}"
  454. th:value="${oneData.cd}" th:text="${oneData.cdNm}"></option>
  455. </select>
  456. </td>
  457. <th>내용<em class="required" title="필수"></em></th>
  458. <td>
  459. <textarea class="textareaR2 w600" name="contactContents" required="required" data-valid-name="내용"></textarea>
  460. <button type="button" id="btnSaveContact" class="btn btn-success btn-lg">저장</button>
  461. </td>
  462. </tr>
  463. </tbody>
  464. </table>
  465. <br/>
  466. <div id="custContactList" class="ag-theme-balham" style="width: 100%; height: 420px;"></div>
  467. </form>
  468. </div>
  469. <!-- //TAB10 PANELSTYLE -->
  470. </li>
  471. <!-- //TAB10 : 회원접촉이력 -->
  472. <!-- TAB11 : 등급변경이력 -->
  473. <li id="tab11" class="tab">
  474. <!-- TAB11 PANELSTYLE -->
  475. <div class="panelStyle">
  476. <h4>등급변경이력</h4>
  477. <div id="custGradeList" class="ag-theme-balham" style="width: 100%; height: 510px;"></div>
  478. </div>
  479. <!-- //TAB11 PANELSTYLE -->
  480. </li>
  481. <!-- //TAB11 : 등급변경이력 -->
  482. </ul>
  483. <!-- //TABS CONTENTS -->
  484. </div>
  485. <!-- // TABS SPACE -->
  486. </div>
  487. <!-- //CONTENT -->
  488. </div>
  489. </div>
  490. <script th:inline="javascript">
  491. /*<![CDATA[*/
  492. const custNo = [[${custNo}]]; //고객번호
  493. const siteList = gagajf.convertToArray([[${siteList}]]); //사이트목록
  494. //const custGbList = gagajf.convertToArray([[${custGbList}]]); //회원구분
  495. const custGradeList = gagajf.convertToArray([[${custGradeList}]]); //회원등급
  496. //const managedRsnList = gagajf.convertToArray([[${managedRsnList}]]); //관리대상
  497. const mallGbList = gagajf.convertToArray([[${mallGbList}]]); //몰구분
  498. const orderStatList = gagajf.convertToArray([[${orderStatList}]]); //주문상태
  499. const orderDtlStatList = gagajf.convertToArray([[${orderDtlStatList}]]); //주문상세상태
  500. const cpnType = gagajf.convertToArray([[${cpnType}]]); //쿠폰유형
  501. //const dcWayList = gagajf.convertToArray([[${dcWayList}]]); //쿠폰할인방식
  502. const pubReasonList = gagajf.convertToArray([[${pubReasonList}]]); //쿠폰발행사유
  503. const pntOccurGbList = gagajf.convertToArray([[${pntOccurGbList}]]); //포인트반영구분
  504. const pntUploadStatList = gagajf.convertToArray([[${pntUploadStatList}]]); //포인트반영상태
  505. const giftCardOccurGbList = gagajf.convertToArray([[${giftCardOccurGbList}]]); //상품권유형
  506. const counselClsfList = gagajf.convertToArray([[${counselClsfList}]]); //상담분류
  507. const contactTypeList = gagajf.convertToArray([[${contactTypeList}]]); //회원접촉유형
  508. const contactMethodList = gagajf.convertToArray([[${contactMethodList}]]); //회원접촉방법
  509. const genderGbList = gagajf.convertToArray([[${genderGbList}]]); // 성별
  510. let orgData;
  511. //구매내역 그리드
  512. const columnOrderDefs = [
  513. {
  514. headerName: "주문번호", field: "ordNo", width: 100, cellClass: 'text-center',
  515. cellRenderer: function (params) {
  516. return '<a href="javascript:void(0);">' + params.value + '</a>';
  517. }
  518. },
  519. {headerName: "주문상세번호", field: "ordDtlNo", width: 100, cellClass: 'text-center'},
  520. {
  521. headerName: "몰구분", field: "mallGb", width: 100, cellClass: 'text-center',
  522. valueFormatter: function (params) {
  523. return gagaAgGrid.lookupValue(mallGbList, params.value);
  524. }
  525. },
  526. {
  527. headerName: "결제일시", field: "payDt", width: 150, cellClass: 'text-center',
  528. cellRenderer: function (params) {
  529. return gagaAgGrid.toDateTimeFormat(params.value);
  530. }
  531. },
  532. {
  533. headerName: "배송완료일시", field: "delvEddt", width: 150, cellClass: 'text-center',
  534. cellRenderer: function (params) {
  535. return gagaAgGrid.toDateTimeFormat(params.value);
  536. }
  537. },
  538. {headerName: "주문자전화번호", field: "ordTelno", width: 120, cellClass: 'text-center'},
  539. {headerName: "주문자휴대폰", field: "ordPhnno", width: 130, cellClass: 'text-center'},
  540. {
  541. headerName: "주문상세상태", field: "ordDtlStat", width: 100, cellClass: 'text-center',
  542. valueFormatter: function (params) {
  543. return gagaAgGrid.lookupValue(orderDtlStatList, params.value);
  544. }
  545. },
  546. {headerName: "수령인", field: "recipNm", width: 100, cellClass: 'text-center'},
  547. {
  548. headerName: "상품코드", field: "goodsCd", width: 100, cellClass: 'text-center',
  549. cellRenderer: function (params) {
  550. return '<a href="javascript:void(0);">' + params.value + '</a>';
  551. }
  552. },
  553. {headerName: "색상", field: "optCd1", width: 100, cellClass: 'text-center'},
  554. {headerName: "사이즈", field: "optCd2", width: 100, cellClass: 'text-center'},
  555. {headerName: "상품명", field: "goodsNm", width: 250, cellClass: 'text-left'},
  556. {headerName: "주문수량", field: "ordQty", width: 100, cellClass: 'text-center'},
  557. {headerName: "판매상품가격", field: "currPrice", width: 100, cellClass: 'text-center'},
  558. ];
  559. // 1:1문의 내역 그리드
  560. const columnCounselDefs = [
  561. {
  562. headerName: "상담분류", field: "counselClsf", width: 100, cellClass: 'text-center',
  563. valueFormatter: function (params) {
  564. return gagaAgGrid.lookupValue(counselClsfList, params.value);
  565. }
  566. },
  567. {headerName: "상담상세분류", field: "counselDclsf", width: 200, cellClass: 'text-center'},
  568. {headerName: "주문번호", field: "relOrdNo", width: 100, cellClass: 'text-center'},
  569. {
  570. headerName: "질문제목", field: "questTitle", width: 300, cellClass: 'text-center',
  571. cellRenderer: function (params) {
  572. return '<a href="javascript:void(0);">' + params.value + '</a>';
  573. }
  574. },
  575. {
  576. headerName: "등록일시", field: "questDt", width: 150, cellClass: 'text-center',
  577. cellRenderer: function (params) {
  578. return gagaAgGrid.toDateTimeFormat(params.value);
  579. }
  580. },
  581. {
  582. headerName: "답변일시", field: "ansTransDt", width: 150, cellClass: 'text-center',
  583. cellRenderer: function (params) {
  584. return gagaAgGrid.toDateTimeFormat(params.value);
  585. }
  586. },
  587. {headerName: "확인NO", field: "ansNo", width: 100, cellClass: 'text-center'},
  588. {headerName: "확인자", field: "userNm", width: 100, cellClass: 'text-center'}
  589. ];
  590. // 상품문의 내역 그리드
  591. const columnGoodsQnaDefs = [
  592. {headerName: "상품코드", field: "relGoodsCd", width: 200, cellClass: 'text-center'},
  593. {
  594. headerName: "질문제목", field: "questTitle", width: 300, cellClass: 'text-center',
  595. cellRenderer: function (params) {
  596. return '<a href="javascript:void(0);">' + params.value + '</a>';
  597. }
  598. },
  599. {
  600. headerName: "등록일시", field: "questDt", width: 150, cellClass: 'text-center',
  601. cellRenderer: function (params) {
  602. return gagaAgGrid.toDateTimeFormat(params.value);
  603. }
  604. },
  605. {
  606. headerName: "답변일시", field: "ansTransDt", width: 150, cellClass: 'text-center',
  607. cellRenderer: function (params) {
  608. return gagaAgGrid.toDateTimeFormat(params.value);
  609. }
  610. },
  611. {headerName: "확인NO", field: "ansNo", width: 100, cellClass: 'text-center'},
  612. {headerName: "확인자", field: "userNm", width: 100, cellClass: 'text-center'}
  613. ];
  614. //쿠폰내역 그리드
  615. const columnCouponDefs = [
  616. // {width: 40, minWidth: 40, cellClass: 'text-center', pinned: 'left', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
  617. {headerName: "회원쿠폰SQ", field: "custCpnSq", width: 100, cellClass: 'text-center', hide: true},
  618. {headerName: "쿠폰ID", field: "cpnId", width: 100, cellClass: 'text-center'},
  619. {headerName: "쿠폰명", field: "cpnNm", width: 300, cellClass: 'text-center'},
  620. {
  621. headerName: "유효기간 시작일시", field: "availStdt", width: 150, cellClass: 'text-center',
  622. cellRenderer: function (params) {
  623. return gagaAgGrid.toDateTimeFormat(params.value);
  624. }
  625. },
  626. {
  627. headerName: "유효기간 종료일시", field: "availEddt", width: 150, cellClass: 'text-center',
  628. cellRenderer: function (params) {
  629. return gagaAgGrid.toDateTimeFormat(params.value);
  630. }
  631. },
  632. {headerName: "주문번호", field: "ordNo", width: 130, cellClass: 'text-center'},
  633. {
  634. headerName: "사용일시", field: "usedDt", width: 100, cellClass: 'text-center',
  635. cellRenderer: function (params) {
  636. return gagaAgGrid.toDateTimeFormat(params.value);
  637. }
  638. },
  639. {
  640. headerName: "쿠폰발행 사유", field: "pubReason", width: 200, cellClass: 'text-center',
  641. valueFormatter: function (params) {
  642. return gagaAgGrid.lookupValue(pubReasonList, params.value);
  643. }
  644. },
  645. {headerName: "쿠폰발행 상세사유", field: "pubReasonDtl", width: 300, cellClass: 'text-center'},
  646. {headerName: "만료알림발송여부", field: "endAlimSendYn", width: 150, cellClass: 'text-center'},
  647. {headerName: "등록자", field: "regNm", width: 100, cellClass: 'text-center'},
  648. {
  649. headerName: "등록일시", field: "regDt", width: 150, cellClass: 'text-center',
  650. cellRenderer: function (params) {
  651. return gagaAgGrid.toDateTimeFormat(params.value);
  652. }
  653. }
  654. ];
  655. //포인트내역 그리드
  656. const columnPointDefs = [
  657. {
  658. headerName: "등록일시", field: "regDt", width: 150, cellClass: 'text-center',
  659. cellRenderer: function (params) {
  660. return gagaAgGrid.toDateTimeFormat(params.value);
  661. }
  662. },
  663. {
  664. headerName: "반영일시", field: "pntUploadDt", width: 150, cellClass: 'text-center',
  665. cellRenderer: function (params) {
  666. return gagaAgGrid.toDateTimeFormat(params.value);
  667. }
  668. },
  669. {headerName: "주문번호", field: "ordNo", width: 100, cellClass: 'text-center'},
  670. {
  671. headerName: "반영상태", field: "pntUploadStat", width: 100, cellClass: 'text-center',
  672. valueFormatter: function (params) { return gagaAgGrid.lookupValue(pntUploadStatList, params.value); }
  673. },
  674. {
  675. headerName: "포인트", field: "pntAmt", width: 100, cellClass: 'text-center',
  676. cellRenderer: function (params) {
  677. return !gagajf.isNull(params.value) ? params.value.addComma() : '0';
  678. }
  679. },
  680. {
  681. headerName: "포인트사유", field: "occurGb", width: 100, cellClass: 'text-center',
  682. valueFormatter: function (params) {
  683. return gagaAgGrid.lookupValue(pntOccurGbList, params.value);
  684. }
  685. },
  686. {headerName: "포인트상세사유", field: "occurDtlDesc", width: 300, cellClass: 'text-center'},
  687. {
  688. headerName: "만료예정일시", field: "expBeDt", width: 150, cellClass: 'text-center',
  689. cellRenderer: function (params) {
  690. return gagaAgGrid.toDateTimeFormat(params.value);
  691. }
  692. },
  693. {
  694. headerName: "만료완료일시", field: "expCmpDt", width: 150, cellClass: 'text-center',
  695. cellRenderer: function (params) {
  696. return gagaAgGrid.toDateTimeFormat(params.value);
  697. }
  698. },
  699. {headerName: "등록자", field: "regNm", width: 100, cellClass: 'text-center'}
  700. ];
  701. //상품권내역 그리드
  702. const columnGiftCardDefs = [
  703. {
  704. headerName: "등록일시", field: "regDt", width: 150, cellClass: 'text-center',
  705. cellRenderer: function (params) {
  706. return gagaAgGrid.toDateTimeFormat(params.value);
  707. }
  708. },
  709. {headerName: "주문번호", field: "ordNo", width: 100, cellClass: 'text-center'},
  710. {
  711. headerName: "금액", field: "gfcdAmt", width: 100, cellClass: 'text-center',
  712. cellRenderer: function (params) {
  713. return !gagajf.isNull(params.value) ? params.value.addComma() : '0';
  714. }
  715. },
  716. {
  717. headerName: "발생구분", field: "occurGb", width: 100, cellClass: 'text-center',
  718. valueFormatter: function (params) { return gagaAgGrid.lookupValue(giftCardOccurGbList, params.value); }
  719. },
  720. {
  721. headerName: "발생상세설명", field: "occurDtlDesc", width: 300, cellClass: 'text-center',
  722. valueFormatter: function (params) {
  723. return gagaAgGrid.lookupValue(pntOccurGbList, params.value);
  724. }
  725. },
  726. {headerName: "등록자", field: "regNo", width: 100, cellClass: 'text-center'}
  727. ];
  728. //상품평 그리드
  729. const columnReviewDefs = [
  730. {headerName: "상품코드", field: "goodsCd", width: 100, cellClass: 'text-center'},
  731. {
  732. headerName: "제목", field: "reviewTitle", width: 300, cellClass: 'text-center',
  733. cellRenderer: function (params) {
  734. return '<a href="javascript:void(0);">' + params.value + '</a>';
  735. }
  736. },
  737. {headerName: "만족도", field: "score", width: 100, cellClass: 'text-center'},
  738. {
  739. headerName: "작성일시", field: "regDt", width: 150, cellClass: 'text-center',
  740. cellRenderer: function (params) {
  741. return gagaAgGrid.toDateTimeFormat(params.value);
  742. }
  743. },
  744. {
  745. headerName: "지급일시", field: "confirmDt", width: 150, cellClass: 'text-center',
  746. cellRenderer: function (params) {
  747. return gagaAgGrid.toDateTimeFormat(params.value);
  748. }
  749. },
  750. {headerName: "지급No", field: "confirmNo", width: 130, cellClass: 'text-center'},
  751. {headerName: "게시여부", field: "dispYn", width: 100, cellClass: 'text-center'},
  752. {
  753. headerName: "지급예정포인트", field: "giveDuePnt", width: 120, cellClass: 'text-center',
  754. cellRenderer: function (params) {
  755. return !gagajf.isNull(params.value) ? params.value.addComma() : '0';
  756. }
  757. },
  758. {
  759. headerName: "포인트지급상태", field: "pntGiveStat", width: 120, cellClass: 'text-center',
  760. valueFormatter: function (params) {
  761. return gagaAgGrid.lookupValue(pntUploadStatList, params.value);
  762. }
  763. }
  764. ];
  765. //등급변경 그리드
  766. const columnGradeDefs = [
  767. {headerName: "적용연월일", field: "applyYmd", width: 150, cellClass: 'text-center'},
  768. {headerName: "고객ID", field: "custId", width: 100, cellClass: 'text-center'},
  769. {
  770. headerName: "이전회원등급", field: "gradeBcd", width: 100, cellClass: 'text-center',
  771. valueFormatter: function (params) {
  772. return gagaAgGrid.lookupValue(custGradeList, params.value);
  773. }
  774. },
  775. {
  776. headerName: "변경회원등급", field: "gradeAcd", width: 100, cellClass: 'text-center',
  777. valueFormatter: function (params) {
  778. return gagaAgGrid.lookupValue(custGradeList, params.value);
  779. }
  780. },
  781. {
  782. headerName: "3개월간 총 주문건수", field: "ordCnt", width: 150, cellClass: 'text-center',
  783. cellRenderer: function (params) {
  784. return !gagajf.isNull(params.value) ? params.value.addComma() : '0';
  785. }
  786. },
  787. {
  788. headerName: "3개월간 총 결제금액", field: "realOrdAmt", width: 150, cellClass: 'text-center',
  789. cellRenderer: function (params) {
  790. return !gagajf.isNull(params.value) ? params.value.addComma() : '0';
  791. }
  792. }
  793. ];
  794. //주소정보 그리드
  795. const columnAddrDefs = [
  796. {
  797. headerName: "배송지명", field: "delvAddrNm", width: 100, cellClass: 'text-center',
  798. cellRenderer: function (params) {
  799. return '<a href="javascript:void(0);">' + params.value + '</a>';
  800. }
  801. },
  802. {headerName: "수령자", field: "recipNm", width: 100, cellClass: 'text-center'},
  803. {headerName: "전화번호", field: "recipTelno", width: 130, cellClass: 'text-center'},
  804. {headerName: "휴대전화번호", field: "recipPhnno", width: 130, cellClass: 'text-center'},
  805. {headerName: "우편번호", field: "recipZipcode", width: 100, cellClass: 'text-center'},
  806. {headerName: "기본주소", field: "recipBaseAddr", width: 300, cellClass: 'text-left'},
  807. {headerName: "상세주소", field: "recipDtlAddr", width: 150, cellClass: 'text-left'},
  808. {
  809. headerName: "등록일시", field: "regDt", width: 150, cellClass: 'text-center',
  810. cellRenderer: function (params) {
  811. return gagaAgGrid.toDateTimeFormat(params.value);
  812. }
  813. },
  814. {headerName: "삭제", field: "delYn", width: 50, cellClass: 'text-center'},
  815. {headerName: "수정자", field: "updNo", width: 100, cellClass: 'text-center'},
  816. {
  817. headerName: "수정일시", field: "updDt", width: 150, cellClass: 'text-center',
  818. cellRenderer: function (params) {
  819. return gagaAgGrid.toDateTimeFormat(params.value);
  820. }
  821. },
  822. {headerName: "기본배송지", field: "defaultYn", width: 90, cellClass: 'text-center'}
  823. ];
  824. //회원접촉이력 그리드
  825. const columnContactDefs = [
  826. {
  827. headerName: "접촉유형", field: "contactType", width: 150, cellClass: 'text-center',
  828. valueFormatter: function (params) {
  829. return gagaAgGrid.lookupValue(contactTypeList, params.value);
  830. }
  831. },
  832. {
  833. headerName: "접촉방법", field: "contactMethod", width: 120, cellClass: 'text-center',
  834. valueFormatter: function (params) {
  835. return gagaAgGrid.lookupValue(contactMethodList, params.value);
  836. }
  837. },
  838. {headerName: "내용", field: "contactContents", width: 1000, cellClass: 'text-center'},
  839. {headerName: "등록자", field: "regNo", width: 100, cellClass: 'text-center'},
  840. {
  841. headerName: "등록일", field: "regDt", width: 150, cellClass: 'text-center',
  842. cellRenderer: function (params) {
  843. return gagaAgGrid.toDateTimeFormat(params.value);
  844. }
  845. }
  846. ];
  847. let gridOrderOptions = gagaAgGrid.getGridOptions(columnOrderDefs); //구매내역 그리드
  848. let gridCounselOptions = gagaAgGrid.getGridOptions(columnCounselDefs); //1:1문의내역 그리드
  849. let gridGoodsQnaOptions = gagaAgGrid.getGridOptions(columnGoodsQnaDefs);//상품문의내역 그리드
  850. let gridCouponOptions = gagaAgGrid.getGridOptions(columnCouponDefs); //쿠폰내역 그리드
  851. let gridPointOptions = gagaAgGrid.getGridOptions(columnPointDefs); //포인트내역 그리드
  852. let gridGiftCardOptions = gagaAgGrid.getGridOptions(columnGiftCardDefs);//상품권내역 그리드
  853. let gridReviewOptions = gagaAgGrid.getGridOptions(columnReviewDefs); //상품평 그리드
  854. let gridGradeOptions = gagaAgGrid.getGridOptions(columnGradeDefs); //등급변경 그리드
  855. let gridAddrOptions = gagaAgGrid.getGridOptions(columnAddrDefs); //주소정보 그리드
  856. let gridContactOptions = gagaAgGrid.getGridOptions(columnContactDefs); //회원접촉이력 그리드
  857. gridOrderOptions.suppressRowClickSelection = true;
  858. gridCounselOptions.suppressRowClickSelection = true;
  859. gridGoodsQnaOptions.suppressRowClickSelection = true;
  860. gridCouponOptions.suppressRowClickSelection = true;
  861. gridPointOptions.suppressRowClickSelection = true;
  862. gridGiftCardOptions.suppressRowClickSelection = true;
  863. gridReviewOptions.suppressRowClickSelection = true;
  864. gridGradeOptions.suppressRowClickSelection = true;
  865. gridAddrOptions.suppressRowClickSelection = true;
  866. gridContactOptions.suppressRowClickSelection = true;
  867. // 기본정보 - 비밀번호 초기화 버튼
  868. $('#btnResetPassword').on('click', function () {
  869. if (!fnCheckValidationEmail('#custInfoForm')) {
  870. return false;
  871. }
  872. mcxDialog.confirm("초기화 하시겠습니까?", {
  873. cancelBtnText: "취소",
  874. sureBtnText: "확인",
  875. sureBtnClick: function () {
  876. let jsonData = JSON.stringify($('#custInfoForm').serializeObject());
  877. gagajf.ajaxJsonSubmit('/customer/password/reset', jsonData, fnSearchCustInfo);
  878. }
  879. });
  880. });
  881. // 기본정보 - LMS발송 버튼
  882. $('#btnCustSendLms').on('click', function () {
  883. if (!fnCheckValidationPhnno('#custInfoForm')) {
  884. return false;
  885. }
  886. let param = {};
  887. param.elementCellPhnno = '#custInfoForm input[name=cellPhnno]';
  888. param.elementCustNo = '#custInfoForm input[name=custNo]';
  889. cfnOpenLmsPopup(param);
  890. });
  891. // 기본정보 - 번호변경
  892. $('#btnCustCrtfd').on('click', function () {
  893. if (!fnCheckValidationPhnno('#custInfoForm')) {
  894. return false;
  895. }
  896. let elementCellPhnno = '#custInfoForm input[name=cellPhnno]';
  897. let elementCustNo = '#custInfoForm input[name=custNo]';
  898. const actionUrl = '/customer/cellphone/change/popup/form?elementCellPhnno=' + encodeURIComponent(elementCellPhnno)
  899. + '&elementCustNo=' + encodeURIComponent(elementCustNo)
  900. cfnOpenModalPopup(actionUrl, 'popupCellphoneForm');
  901. });
  902. // 기본정보 - 이메일발송 버튼
  903. $('#btnCustSendEmail').on('click', function () {
  904. if (!fnCheckValidationEmail('#custInfoForm')) {
  905. return false;
  906. }
  907. let param = {};
  908. param.elementEmail = '#custInfoForm input[name=email]';
  909. param.elementCustNo ='#custInfoForm input[name=custNo]';
  910. cfnOpenEmailPopup(param);
  911. });
  912. // 기본정보 - 이메일 도메인 선택 이벤트
  913. $('#emailDomainList').on('change', function () {
  914. let domain = $(this).val();
  915. let $emailDomain = $('#emailDomain');
  916. if (domain === '99') { //기타(직접입력)
  917. $emailDomain.val('');
  918. } else if (domain !== '99' && !gagajf.isNull(domain)) {
  919. $emailDomain.val(domain);
  920. }
  921. });
  922. $('#btnCustSecede').on('click', function () {
  923. let custNo = $('#custInfoForm input[name=custNo]').val();
  924. if (gagajf.isNull(custNo)) {
  925. mcxDialog.alert("탈퇴시킬 회원번호가 없습니다.");
  926. return;
  927. }
  928. let elementCustNo ='#custInfoForm input[name=custNo]';
  929. const actionUrl = '/customer/secede/popup/form?elementCustNo='+ encodeURIComponent(elementCustNo)
  930. cfnOpenModalPopup(actionUrl, 'popupCustSecedeForm');
  931. });
  932. // 기본정보 - 저장버튼
  933. $('#btnCustInfoSave').on('click', function () {
  934. //휴대폰번호
  935. if (!fnCheckValidationPhnno('#custInfoForm'))
  936. return false;
  937. //이메일
  938. if (!fnCheckValidationEmail('#custInfoForm'))
  939. return false;
  940. let customer = $('#custInfoForm').serializeObject();
  941. if (!gagajf.isNull(customer.managedRsn) && gagajf.isNull(customer.managedDtlRsn)) {
  942. mcxDialog.alert("관리대상 지정 사유를 입력해주세요");
  943. return;
  944. }
  945. // 마케팅 수신여부가 기존하고 바꼈는지 확인
  946. // 데이터 변경 없으면 공배처리
  947. if (customer.emailAgreeYn === orgData.emailAgreeYn) {
  948. customer.emailAgreeYn = '';
  949. }
  950. // 데이터 변경 없으면 공배처리
  951. if (customer.smsAgreeYn === orgData.smsAgreeYn) {
  952. customer.smsAgreeYn = '';
  953. }
  954. mcxDialog.confirm("기본정보를 수정 하시겠습니까?", {
  955. cancelBtnText: "취소",
  956. sureBtnText: "확인",
  957. sureBtnClick: function () {
  958. let jsonData = JSON.stringify(customer);
  959. //console.log(jsonData);
  960. gagajf.ajaxJsonSubmit('/customer/info/save', jsonData, fnSearchCustInfo);
  961. }
  962. });
  963. });
  964. // 배송지정보 - 신규버튼
  965. $('#btnCustAddrNew').on('click', function () {
  966. $('#custAddrForm')[0].reset();
  967. $('#custAddrForm input[name=custDelvAddrSq]').val('');
  968. $('#custAddrForm input[name=recipPhnno]').val('');
  969. $('#custAddrForm input[name=recipTelno]').val('');
  970. fnDisplayDeliveryCheckBox('N', 'N');
  971. });
  972. // 배송지정보 - 저장버튼
  973. $('#btnCustAddrSave').on('click', function () {
  974. if (!gagajf.validation('#custAddrForm'))
  975. return false;
  976. // 전화번호
  977. let telFirstNo = $('#custAddrForm select[name=telFirstNo]').val();
  978. let telMiddleNo = $('#custAddrForm input[name=telMiddleNo]').val();
  979. let telLastNo = $('#custAddrForm input[name=telLastNo]').val();
  980. $('#custAddrForm input[name=recipTelno]').val(telFirstNo + '-' + telMiddleNo + '-' + telLastNo);
  981. // 핸드폰번호 필수값 validation 함수에서 null 체크
  982. let recipFirstNo = $('#custAddrForm select[name=recipFirstNo]').val();
  983. let recipMiddleNo = $('#custAddrForm input[name=recipMiddleNo]').val();
  984. let recipLastNo = $('#custAddrForm input[name=recipLastNo]').val();
  985. $('#custAddrForm input[name=recipPhnno]').val(recipFirstNo + '-' + recipMiddleNo + '-' + recipLastNo);
  986. mcxDialog.confirm("저장하시겠습니까?", {
  987. cancelBtnText: "취소",
  988. sureBtnText: "확인",
  989. sureBtnClick: function () {
  990. gagajf.removeCommaAtNumberFormattedInput('#custAddrForm');
  991. let jsonData = JSON.stringify($('#custAddrForm').serializeObject());
  992. gagajf.ajaxJsonSubmit('/customer/delivery/addr/save', jsonData, fnSearchDelivery);
  993. }
  994. });
  995. });
  996. // 쿠폰삭제 버튼
  997. $('#btnCustCouponDelete').on('click', function () {
  998. let removedData = gagaAgGrid.removeRowData(gridCouponOptions);
  999. if (removedData.length < 1) {
  1000. mcxDialog.alert("선택된 데이터가 없습니다.");
  1001. return;
  1002. }
  1003. mcxDialog.confirm("삭제 하시겠습니까?", {
  1004. cancelBtnText: "취소",
  1005. sureBtnText: "확인",
  1006. sureBtnClick: function () {
  1007. let updatedData = [];
  1008. $.each(removedData, function (idx, item) {
  1009. let param = {};
  1010. param.custCpnSq = item.custCpnSq;
  1011. param.custNo = item.custNo;
  1012. updatedData.push(param);
  1013. });
  1014. let jsonData = JSON.stringify(updatedData);
  1015. gagajf.ajaxJsonSubmit('/marketing/coupon/cust/delete', jsonData, fnSearchCoupon);
  1016. }
  1017. });
  1018. });
  1019. // 포인트부여 버튼
  1020. $('#btnCustPointCreate').on('click', function () {
  1021. let elementCustNo ='#custInfoForm input[name=custNo]';
  1022. const actionUrl = '/marketing/point/grant/popup/form?elementCustNo=' + encodeURIComponent(elementCustNo);
  1023. cfnOpenModalPopup(actionUrl, 'popupPointGrantForm');
  1024. });
  1025. // 쿠폰발급 버튼
  1026. $('#btnCustCouponCreate').on('click', function () {
  1027. let elementCustNo ='#custInfoForm input[name=custNo]';
  1028. const actionUrl = '/marketing/coupon/issue/popup/form?elementCustNo=' + encodeURIComponent(elementCustNo);
  1029. cfnOpenModalPopup(actionUrl, 'popupCouponIssue');
  1030. });
  1031. // 회원접촉이력 저장
  1032. $('#btnSaveContact').on('click', function () {
  1033. if (!gagajf.validation('#custContactHstForm')) {
  1034. return;
  1035. }
  1036. mcxDialog.confirm("저장하시겠습니까?", {
  1037. cancelBtnText: "취소",
  1038. sureBtnText: "확인",
  1039. sureBtnClick: function () {
  1040. var jsonData = JSON.stringify($('#custContactHstForm').serializeObject());
  1041. gagajf.ajaxJsonSubmit('/customer/contact/create', jsonData, fnSearchContact);
  1042. }
  1043. });
  1044. });
  1045. // 주문내역 셀 클릭 이벤트
  1046. gridOrderOptions.onCellClicked = function (event) {
  1047. if (event.colDef.field === 'goodsCd') {
  1048. let goodsCd = event.data.goodsCd;
  1049. cfnOpenGoodsDetailPopup('U', goodsCd);
  1050. }
  1051. if (event.colDef.field === 'ordNo') {
  1052. let ordNo = event.data.ordNo;
  1053. cfnOpenOrderDetailPopup(ordNo);
  1054. }
  1055. };
  1056. // 1:1문의 내역 셀 클릭 이벤트
  1057. gridCounselOptions.onCellClicked = function (event) {
  1058. if (event.colDef.field === 'questTitle') {
  1059. let counselSq = event.data.counselSq;
  1060. cfnOpenOneToOneQnaDetailPopup(counselSq);
  1061. }
  1062. };
  1063. // 상품문의 내역 셀 클릭 이벤트
  1064. gridGoodsQnaOptions.onCellClicked = function (event) {
  1065. if (event.colDef.field === 'questTitle') {
  1066. let counselSq = event.data.counselSq;
  1067. cfnOpenGoodsQnaDetailPopup(counselSq);
  1068. }
  1069. };
  1070. // 상품평내역 셀 클릭 이벤트
  1071. gridReviewOptions.onCellClicked = function (event) {
  1072. if (event.colDef.field === 'reviewTitle') {
  1073. let reviewSq = event.data.reviewSq;
  1074. cfnOpenReviewDetailPopup(reviewSq);
  1075. }
  1076. };
  1077. // 주소지 셀 클릭 이벤트
  1078. gridAddrOptions.onCellClicked = function (event) {
  1079. if (event.colDef.field !== 'delvAddrNm')
  1080. return;
  1081. if (!gagajf.isNull(event.data)) {
  1082. $('#custAddrForm input[name=custDelvAddrSq]').val(event.data.custDelvAddrSq);
  1083. $('#custAddrForm input[name=delvAddrNm]').val(event.data.delvAddrNm);
  1084. $('#custAddrForm input[name=recipNm]').val(event.data.recipNm);
  1085. if (!gagajf.isNull(event.data.recipPhnno)) {
  1086. let phnNoSplit = event.data.recipPhnno.split("-");
  1087. $('#custAddrForm select[name=recipFirstNo]').val(phnNoSplit[0]);
  1088. $('#custAddrForm input[name=recipMiddleNo]').val(phnNoSplit[1]);
  1089. $('#custAddrForm input[name=recipLastNo]').val(phnNoSplit[2]);
  1090. }
  1091. if (!gagajf.isNull(event.data.recipTelno)) {
  1092. let telNoSplit = event.data.recipTelno.split("-");
  1093. $('#custAddrForm select[name=telFirstNo]').val(telNoSplit[0]);
  1094. $('#custAddrForm input[name=telMiddleNo]').val(telNoSplit[1]);
  1095. $('#custAddrForm input[name=telLastNo]').val(telNoSplit[2]);
  1096. }
  1097. $('#custAddrForm input[name=recipZipcode]').val(event.data.recipZipcode);
  1098. $('#custAddrForm input[name=recipBaseAddr]').val(event.data.recipBaseAddr);
  1099. $('#custAddrForm input[name=recipDtlAddr]').val(event.data.recipDtlAddr);
  1100. fnDisplayDeliveryCheckBox(event.data.defaultYn, event.data.delYn);
  1101. }
  1102. };
  1103. // 회원정보 조회
  1104. var fnSearchCustInfo = function () {
  1105. $.get('/customer/info/' + custNo
  1106. , function (data) {
  1107. if (!gagajf.isNull(data)) {
  1108. $('#spanCustNm').text(data.maskingCustNm);
  1109. $('#custId').text(data.maskingCustId);
  1110. $('#siteNm').text(gagaAgGrid.lookupValue(siteList, data.siteCd));
  1111. $('#custGrade').val(data.custGrade);
  1112. $('#custGb').val(data.custGb);
  1113. $('#managedRsn').val(data.managedRsn);
  1114. $('#managedDtlRsn').val(data.managedDtlRsn);
  1115. $('#managedDt').text(gagaAgGrid.toDateTimeFormat(data.managedDt));
  1116. $('#joinDt').text(gagaAgGrid.toDateTimeFormat(data.joinDt));
  1117. let loginDt = fnGetLoginDt(data.loginDt);
  1118. $('#loginDt').text(loginDt);
  1119. let foreignerYn = data.foreignerYn === 'Y' ? '외국인' : '내국인';
  1120. $('#foreignerYn').text(foreignerYn);
  1121. fnGetSecedeRsnYn(data.custStat, data.secedeRsn); // 탈퇴여부
  1122. let snsType = fnGetSnsType(data.nvJoinId, data.kkJoinId, data.ysJoinId);
  1123. $('#snsType').text(snsType);
  1124. $('#homeZipcode').val(data.homeZipcode);
  1125. $('#homeBaseAddr').val(data.homeBaseAddr);
  1126. $('#homeDtlAddr').val(data.homeDtlAddr);
  1127. $('#sexGb').text(gagaAgGrid.lookupValue(genderGbList, data.sexGb));
  1128. $('#birthYmd').val(gagaAgGrid.toDateFormat(data.birthYmd));
  1129. fnDisplayEmailAgree(data.emailAgreeYn); // 이메일 수신여부
  1130. fnDisplaySmsAgree(data.smsAgreeYn); // SMS 수신여부
  1131. fnDisplayEmail(data.maskingEmail); // EMAIL
  1132. fnDisplayCellPhnno(data.maskingCellPhnno); // 핸드폰
  1133. fnDisplayManaged(data.managedRsn); // 관리대상
  1134. orgData = data; // 기존 데이터
  1135. }
  1136. });
  1137. };
  1138. // 구매내역 조회
  1139. var fnSearchOrder = function () {
  1140. const actionUrl = "/customer/order/list/" + custNo;
  1141. gagaAgGrid.fetch(actionUrl, gridOrderOptions);
  1142. };
  1143. // 배송지 조회
  1144. var fnSearchDelivery = function () {
  1145. const actionUrl = "/customer/delivery/list/" + custNo;
  1146. gagaAgGrid.fetch(actionUrl, gridAddrOptions);
  1147. $('#btnCustAddrNew').trigger('click');
  1148. };
  1149. // 쿠폰내역 조회
  1150. var fnSearchCoupon = function () {
  1151. const actionUrl = "/customer/coupon/list/" + custNo;
  1152. gagaAgGrid.fetch(actionUrl, gridCouponOptions);
  1153. };
  1154. // 포인트내역 조회
  1155. var fnSearchPoint = function () {
  1156. $.get('/customer/point/' + custNo
  1157. , function (data) {
  1158. if (!gagajf.isNull(data)) {
  1159. $('#custPointForm td[name=availPntAmt]').text(data.rmPntAmt.addComma() + ' P');
  1160. $('#custPointForm td[name=accumPntAmt]').text(data.gvPntAmt.addComma() + ' P');
  1161. $('#custPointForm td[name=usePntAmt]').text(data.usPntAmt.addComma() + ' P');
  1162. $('#custPointForm td[name=expirePntAmt]').text(data.expirePntAmt.addComma() + ' P');
  1163. $('#custPointForm td[name=expectedPntAmt]').text(data.expectedPntAmt.addComma() + ' P');
  1164. $('#custPointForm td[name=expectedExpirePntAmt]').text(data.expectedExpirePntAmt.addComma() + ' P');
  1165. }
  1166. });
  1167. const actionUrl = "/customer/point/list/" + custNo;
  1168. gagaAgGrid.fetch(actionUrl, gridPointOptions);
  1169. };
  1170. // 상품권 조회
  1171. var fnSearchGiftCard = function () {
  1172. const actionUrl = "/customer/giftcard/list/" + custNo;
  1173. gagaAgGrid.fetch(actionUrl, gridGiftCardOptions);
  1174. };
  1175. // 상품평내역 조회
  1176. var fnSearchReview = function () {
  1177. const actionUrl = "/customer/review/list/" + custNo;
  1178. gagaAgGrid.fetch(actionUrl, gridReviewOptions);
  1179. };
  1180. // 1:1문의 내역 조회
  1181. var fnSearchCounsel = function () {
  1182. const actionUrl = "/customer/counsel/list/" + custNo;
  1183. gagaAgGrid.fetch(actionUrl, gridCounselOptions);
  1184. };
  1185. // 상품문의 내역 조회
  1186. var fnSearchGoodsQna = function () {
  1187. const actionUrl = "/customer/goodsQna/list/" + custNo;
  1188. gagaAgGrid.fetch(actionUrl, gridGoodsQnaOptions);
  1189. };
  1190. // 회원접촉이력 조회
  1191. var fnSearchContact = function () {
  1192. $('#custContactHstForm')[0].reset();
  1193. const actionUrl = "/customer/contact/list/" + custNo;
  1194. gagaAgGrid.fetch(actionUrl, gridContactOptions);
  1195. };
  1196. // 회원등급변경이력 조회
  1197. var fnSearchChangeGrade = function () {
  1198. const actionUrl = "/customer/change/grade/list/" + custNo;
  1199. gagaAgGrid.fetch(actionUrl, gridGradeOptions);
  1200. };
  1201. /**
  1202. * DAUM을 이용한 우편번호 팝업 레이어
  1203. */
  1204. var fnOpenDaumAddr = function(id) {
  1205. let daumZip = new daum.Postcode({
  1206. oncomplete: function(data) {
  1207. // 우편번호와 주소 정보를 해당 필드에 넣는다.
  1208. if (id === 'custInfoForm') {
  1209. $('#homeZipcode').val(data.zonecode);
  1210. $('#homeBaseAddr').val(cfnGetDaumRoadAddr(data));
  1211. $('#homeDtlAddr').focus();
  1212. }
  1213. if (id === 'custAddrForm') {
  1214. $('#recipZipcode').val(data.zonecode);
  1215. $('#recipBaseAddr').val(cfnGetDaumRoadAddr(data));
  1216. $('#recipDtlAddr').focus();
  1217. }
  1218. cfnCloseDaumAddr();
  1219. },
  1220. width: '100%'
  1221. });
  1222. cfnOpenDaumAddr(daumZip);
  1223. }
  1224. // 휴대전화 유효성 체크 및 데이터 셋팅
  1225. var fnCheckValidationPhnno = function (formId) {
  1226. let result = true;
  1227. if (!gagajf.testRegexp($(formId + ' input[name=cellPhnno]'), /^(01(?:0|1|[6-9])-(?:\d{3}|\d{4})-\d{4})$/)) {
  1228. result = false;
  1229. }
  1230. return result;
  1231. };
  1232. // 이메일 체크 및 데이터 셋팅
  1233. var fnCheckValidationEmail = function (formId) {
  1234. let result = true;
  1235. let emailId = $(formId + ' input[name=emailId]').val();
  1236. let emailDomain = $(formId + ' input[name=emailDomain]').val();
  1237. $(formId + ' input[name=email]').val(emailId + '@' + emailDomain);
  1238. if (!gagajf.testRegexp($(formId + ' input[name=email]'), /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/)) {
  1239. result = false;
  1240. }
  1241. return result;
  1242. };
  1243. // 관리대상
  1244. var fnDisplayManaged = function (managedRsn) {
  1245. const $managedRsnNm = $('#managedRsnNm');
  1246. const $managedRsnDp = $('#managedRsnDp');
  1247. $managedRsnNm.text('');
  1248. $managedRsnNm.hide();
  1249. $managedRsnDp.text('');
  1250. $managedRsnDp.hide();
  1251. if (!gagajf.isNull(managedRsn)) {
  1252. let html = '<i class="fa fa-info-circle"></i>';
  1253. $managedRsnNm.html(html);
  1254. $managedRsnNm.show();
  1255. $managedRsnDp.html(html);
  1256. $managedRsnDp.show();
  1257. }
  1258. };
  1259. // 탈퇴여부
  1260. var fnGetSecedeRsnYn = function (custStat, secedeRsn) {
  1261. const activeCustomer = 'G104_10';
  1262. let secedeRsnYn = gagajf.isNull(secedeRsn) ? '아니요' : '예';
  1263. $('#secedeRsnYn').text(secedeRsnYn);
  1264. if (custStat === activeCustomer) {
  1265. $('#btnCustSecede').show();
  1266. }
  1267. }
  1268. // 휴대전화번호
  1269. var fnDisplayCellPhnno = function (cellPhnno) {
  1270. $('#custInfoForm input[name=cellPhnno]').val(cellPhnno);
  1271. };
  1272. // 이메일
  1273. var fnDisplayEmail = function (email) {
  1274. if (!gagajf.isNull(email)) {
  1275. let emailSplit = email.split("@");
  1276. $('#emailId').val(emailSplit[0]);
  1277. $('#emailDomain').val(emailSplit[1]);
  1278. }
  1279. };
  1280. // 이메일 수신동의
  1281. var fnDisplayEmailAgree = function (emailAgreeYn) {
  1282. let emailEq = emailAgreeYn === 'Y' ? 0 : 1;
  1283. const $emailAgreeYn = $('input:radio[name=emailAgreeYn]');
  1284. $emailAgreeYn.eq(emailEq).prop('checked', true);
  1285. $emailAgreeYn.eq(emailEq).parent().addClass('checked');
  1286. };
  1287. // SMS 수신동의
  1288. var fnDisplaySmsAgree = function (smsAgreeYn) {
  1289. let smsEq = smsAgreeYn === 'Y' ? 0 : 1;
  1290. const $smsAgreeYn = $('input:radio[name=smsAgreeYn]');
  1291. $smsAgreeYn.eq(smsEq).prop('checked', true);
  1292. $smsAgreeYn.eq(smsEq).parent().addClass('checked');
  1293. };
  1294. // 최종로그인 일시
  1295. var fnGetLoginDt = function (loginDt) {
  1296. let result = '로그인 이력이 없습니다.';
  1297. if (!gagajf.isNull(loginDt)) {
  1298. result = gagaAgGrid.toDateTimeFormat(loginDt);
  1299. }
  1300. return result;
  1301. };
  1302. // SNS가입유형
  1303. var fnGetSnsType = function (nvJoinId, kkJoinId, ysJoinId) {
  1304. let snsType = '';
  1305. if (!gagajf.isNull(nvJoinId)) {
  1306. snsType = 'NAVER'
  1307. }
  1308. if (!gagajf.isNull(kkJoinId)) {
  1309. if (!gagajf.isNull(snsType)) {
  1310. snsType += ','
  1311. }
  1312. snsType += 'KAKAO';
  1313. }
  1314. if (!gagajf.isNull(ysJoinId)) {
  1315. if (!gagajf.isNull(snsType)) {
  1316. snsType += ','
  1317. }
  1318. snsType += 'YES24';
  1319. }
  1320. return snsType;
  1321. };
  1322. // 생년월일 달력 설정
  1323. var fnDisplayBirthYmd = function () {
  1324. const $birthYmd = $('#birthYmd');
  1325. let currentYear = new Date().format('YYYY');
  1326. $birthYmd.datepicker("destroy");
  1327. $birthYmd.datepicker({
  1328. changeMonth: true,
  1329. changeYear: true,
  1330. yearRange: (currentYear - 100) + ' : ' + (currentYear - 14),
  1331. defaultDate: $birthYmd.val()
  1332. });
  1333. };
  1334. // 배송지 기본,삭제 체크박스 설정
  1335. var fnDisplayDeliveryCheckBox = function (defaultYn, delYn) {
  1336. let $defaultYn = $('#custAddrForm input:checkbox[name=defaultYn]');
  1337. let $delYn = $('#custAddrForm input:checkbox[name=delYn]');
  1338. let defaultBoolean;
  1339. let delBoolean;
  1340. if (defaultYn === 'Y') {
  1341. defaultBoolean = true;
  1342. $defaultYn.parent().addClass('checked');
  1343. } else {
  1344. defaultBoolean = false;
  1345. $defaultYn.parent().removeClass('checked');
  1346. }
  1347. if (delYn === 'Y') {
  1348. delBoolean = true;
  1349. $delYn.parent().addClass('checked');
  1350. } else {
  1351. delBoolean = false;
  1352. $delYn.parent().removeClass('checked');
  1353. }
  1354. $defaultYn.prop('checked', defaultBoolean);
  1355. $delYn.prop('checked', delBoolean);
  1356. }
  1357. $('#btnLogin').on('click', function () {
  1358. let custId = $('span[name=custId]').text();
  1359. const actionUrl = _frontUrl + '/customer/front/login?custId=' + custId;
  1360. let popupWidth = window.screen.width;
  1361. let popupHeight = window.screen.height;
  1362. window.open(actionUrl);
  1363. })
  1364. $(document).ready(function () {
  1365. fnDisplayBirthYmd(); //생년월일 달력 설정
  1366. fnSearchCustInfo(); //회원정보 조회
  1367. gagaAgGrid.createGrid('custOrderList', gridOrderOptions); // 주문내역
  1368. gagaAgGrid.createGrid('custAddrList', gridAddrOptions); // 주소정보 그리드
  1369. gagaAgGrid.createGrid('custCouponList', gridCouponOptions); // 쿠폰내역
  1370. gagaAgGrid.createGrid('custPointList', gridPointOptions); // 포인트내역 그리드
  1371. gagaAgGrid.createGrid('custGiftCardList', gridGiftCardOptions); // 상품권내역 그리드
  1372. gagaAgGrid.createGrid('custCounselList', gridCounselOptions); // 1:1문의 내역
  1373. gagaAgGrid.createGrid('custGoodsQnaList', gridGoodsQnaOptions); // 상품문의 내역
  1374. gagaAgGrid.createGrid('custReviewList', gridReviewOptions); // 상품평 그리드
  1375. gagaAgGrid.createGrid('custGradeList', gridGradeOptions); // 등급변경 그리드
  1376. gagaAgGrid.createGrid('custContactList', gridContactOptions); // 회원접촉이력 그리드
  1377. });
  1378. /*]]>*/
  1379. </script>
  1380. </html>