ExtmallForm.html 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348
  1. <!DOCTYPE html>
  2. <html lang="ko"
  3. xmlns:th="http://www.thymeleaf.org">
  4. <!--
  5. *******************************************************************************
  6. * @source : ExtmallForm.html
  7. * @desc : 제휴몰관리 Page
  8. *============================================================================
  9. * STYLE24
  10. * Copyright(C) 2020 TSIT, All rights reserved.
  11. *============================================================================
  12. * VER DATE AUTHOR DESCRIPTION
  13. * === =========== ========== =============================================
  14. * 1.0 2020.11.05 gagamel 최초 작성
  15. *******************************************************************************
  16. -->
  17. <div id="main">
  18. <!-- 메인타이틀 영역 -->
  19. <div class="main-title">
  20. </div>
  21. <!-- //메인타이틀 영역 -->
  22. <!-- 메뉴 설명 -->
  23. <div class="infoBox menu-desc">
  24. </div>
  25. <!-- //메뉴 설명 -->
  26. <!-- 검색조건 영역 -->
  27. <div class="panelStyle">
  28. <form id="searchForm" name="searchForm" action="#" th:action="@{'/ocm/extmall/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
  29. <table class="frmStyle" aria-describedby="검색조건">
  30. <colgroup>
  31. <col style="width:10%;"/>
  32. <col/>
  33. </colgroup>
  34. <tr>
  35. <th>제휴몰벤더</th>
  36. <td>
  37. <select name="vendorId">
  38. <option th:if="${vendorList}" th:each="oneData, status : ${vendorList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  39. </select>
  40. </td>
  41. </tr>
  42. </table>
  43. <ul class="panelBar">
  44. <li class="center">
  45. <button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
  46. <button type="button" class="btn btn-gray btn-lg" onclick="$('#searchForm')[0].reset();">초기화</button>
  47. </li>
  48. </ul>
  49. </form>
  50. </div>
  51. <!-- 검색조건 영역 -->
  52. <!-- 리스트 영역 -->
  53. <div class="panelStyle">
  54. <!-- 버튼 배치 영역 -->
  55. <ul class="panelBar">
  56. <li class="right">
  57. <button type="button" class="btn btn-default btn-lg" id="btnExcel">엑셀다운로드</button>
  58. </li>
  59. </ul>
  60. <!-- //버튼 배치 영역 -->
  61. <div id="gridList" style="width: 100%; height: 470px" class="ag-theme-balham"></div>
  62. </div>
  63. <!-- //리스트 영역 -->
  64. <!-- 등록/수정 -->
  65. <div class="panelStyle">
  66. <div class="panelTitle">
  67. <h3><i class="fa fa-info-circle"></i><font color="red">신규등록 시 WMS에도 꼭 등록요청해주세요.</font></h3>
  68. </div>
  69. <form id="detailForm" name="detailForm" action="#" th:action="@{'/ocm/extmall/save'}">
  70. <table class="frmStyle" aria-describedby="등록/수정 폼">
  71. <colgroup>
  72. <col style="width:8%;"/>
  73. <col style="width:17%;"/>
  74. <col style="width:8%;"/>
  75. <col style="width:17%;"/>
  76. <col style="width:8%;"/>
  77. <col style="width:17%;"/>
  78. <col style="width:8%;"/>
  79. <col style="width:17%;"/>
  80. </colgroup>
  81. <tr>
  82. <th>제휴몰벤더<i class="required" title="필수"></i></th>
  83. <td>
  84. <select name="vendorId" required="required" data-valid-name="제휴몰벤더">
  85. <option th:if="${vendorList}" th:each="oneData, status : ${vendorList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  86. </select>
  87. </td>
  88. <th>제휴몰ID<i class="required" title="필수"></i></th>
  89. <td>
  90. <input type="text" class="w150" name="extmallId" maxlength="20" required="required" data-valid-name="제휴몰ID"/>
  91. </td>
  92. <th>제휴몰사용자ID<i class="required" title="필수"></i></th>
  93. <td>
  94. <input type="text" class="w150" name="extmallUserId" maxlength="20" required="required" data-valid-name="제휴몰사용자ID"/>
  95. </td>
  96. <th>제휴몰명<i class="required" title="필수"></i></th>
  97. <td>
  98. <input type="text" name="extmallNm" maxlength="50" required="required" data-valid-name="제휴몰명"/>
  99. </td>
  100. </tr>
  101. <tr>
  102. <th>공급업체</th>
  103. <td>
  104. <select name="supplyCompCd">
  105. <option value="">[선택]</option>
  106. <option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  107. </select>
  108. </td>
  109. <th>고객센터연락처</th>
  110. <td>
  111. <input type="text" class="w150" name="extmallTel" maxlength="20"/>
  112. </td>
  113. <th>수수료율(관리용)</th>
  114. <td>
  115. <input type="text" class="w100 aR" name="sellFeeRate" maxlength="3" required="required" data-valid-type="real" data-valid-name="수수료율(관리용)"/>%
  116. </td>
  117. <th>
  118. <!-- 아이콘 툴팁 -->
  119. <div class="iconTooltip">
  120. <i class="fa fa-info" aria-hidden="true"></i>
  121. <span class="left aL" style="width:350px;">
  122. 샵링커 주문수집 시 제휴몰 별 배송비 산정방식
  123. <br>- YES : 주문서별 배송비 합산(SUM)
  124. <br>- NO : 주문서별 배송비 1개로 계산
  125. </span>
  126. </div>
  127. <!-- //아이콘 툴팁 -->
  128. 배송비합산여부
  129. </th>
  130. <td>
  131. <label class="rdoBtn"><input type="radio" name="delvFeeSumYn" value="Y" checked="checked">Yes<span></span></label>
  132. <label class="rdoBtn"><input type="radio" name="delvFeeSumYn" value="N">No<span></span></label>
  133. </td>
  134. <!-- 숨김처리 사용안하기로 함
  135. <th>판매매장코드</th>
  136. <td>
  137. <input type="text" class="w150" name="sellStoreCd" maxlength="20"/>
  138. </td>
  139. <th>재고판매비율<i class="required" title="필수"></i></th>
  140. <td>
  141. <input type="text" class="w100 aR" name="stockSellRate" maxlength="3" required="required" data-valid-type="real" data-valid-name="재고판매비율"/>%
  142. </td>
  143. <th>가격차이허용율<i class="required" title="필수"></i></th>
  144. <td>
  145. <input type="text" class="w100 aR" name="priceAcceptRate" maxlength="3" required="required" data-valid-type="real" data-valid-name="가격차이허용율"/>%
  146. </td>
  147. -->
  148. </tr>
  149. <tr>
  150. <th>직접회수여부</th>
  151. <td>
  152. <label class="rdoBtn"><input type="radio" name="dwdpYn" value="Y" checked="checked">제휴몰에서 회수<span></span></label>
  153. <label class="rdoBtn"><input type="radio" name="dwdpYn" value="N">자사몰에서 회수<span></span></label>
  154. </td>
  155. <th>취소문자발송여부</th>
  156. <td colspan="3">
  157. <label class="rdoBtn"><input type="radio" name="cnclsmsSendYn" value="Y" checked="checked">제휴몰에서 발송<span></span></label>
  158. <label class="rdoBtn"><input type="radio" name="cnclsmsSendYn" value="N">자사몰에서 발송<span></span></label>
  159. </td>
  160. <th>사용여부<i class="required" title="필수"></i></th>
  161. <td>
  162. <label class="rdoBtn"><input type="radio" name="useYn" value="Y" checked="checked">Yes<span></span></label>
  163. <label class="rdoBtn"><input type="radio" name="useYn" value="N">No<span></span></label>
  164. </td>
  165. </tr>
  166. </table>
  167. </form>
  168. <!-- 버튼 배치 영역 -->
  169. <ul class="panelBar">
  170. <li class="right">
  171. <button type="button" class="btn btn-info btn-lg" id="btnNew">신규</button>
  172. <button type="button" class="btn btn-success btn-lg" id="btnSave">저장</button>
  173. </li>
  174. </ul>
  175. <!-- //버튼 배치 영역 -->
  176. </div>
  177. <!-- 등록/수정 -->
  178. </div>
  179. <script th:inline="javascript">
  180. /*<![CDATA[*/
  181. let vendorList = gagajf.convertToArray([[${vendorList}]]);
  182. let supplyCompList = gagajf.convertToArray([[${supplyCompList}]]);
  183. let columnDefs = [
  184. // {width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
  185. // {headerName: "CRUD", field: "crud", width: 75, minWidth: 75, hide: true},
  186. {
  187. headerName: "제휴몰벤더", field: "vendorId", width: 150, cellClass: 'text-center',
  188. valueGetter: function (params) { return gagaAgGrid.lookupValue(vendorList, params.data.vendorId); }
  189. },
  190. {
  191. headerName: "제휴몰ID", field: "extmallId", width: 120, cellClass: 'text-center',
  192. cellRenderer: function(params) {
  193. return '<a href="javascript:void(0);">' + params.value + '</a>';
  194. }
  195. },
  196. {headerName: "제휴몰사용자ID", field: "extmallUserId", width: 150, cellClass: 'text-center'},
  197. {headerName: "제휴몰명", field: "extmallNm", width: 200},
  198. {
  199. headerName: "업체", field: "supplyCompCd", width: 150, cellClass: 'text-center',
  200. valueGetter: function (params) { return gagaAgGrid.lookupValue(supplyCompList, params.data.supplyCompCd); }
  201. },
  202. {headerName: "고객센터연락처", field: "extmallTel", width: 150, cellClass: 'text-center'},
  203. {headerName: "수수료율(관리용)", field: "sellFeeRate", width: 120, cellClass: 'text-center'},
  204. /* {headerName: "판매매장코드", field: "sellStoreCd", width: 120, cellClass: 'text-center'},
  205. {headerName: "재고판매비율(%)", field: "stockSellRate", width: 150, cellClass: 'text-center'},
  206. {headerName: "가격차이허용율(%)", field: "priceAcceptRate", width: 150, cellClass: 'text-center'}, */
  207. {
  208. headerName: "직접회수여부", field: "dwdpYn", width: 150, cellClass: 'text-center',
  209. cellRenderer: function (params) {
  210. return params.value == 'Y' ? '제휴몰에서회수' : '자사몰에서회수';
  211. }
  212. },
  213. {
  214. headerName: "취소문자발송여부", field: "cnclsmsSendYn", width: 150, cellClass: 'text-center',
  215. cellRenderer: function (params) {
  216. return params.value == 'Y' ? '제휴몰에서발송' : '자사몰에서발송';
  217. }
  218. },
  219. {
  220. headerName: "사용여부", field: "useYn", width: 100, cellClass: 'text-center',
  221. cellRenderer: function (params) {
  222. return params.value == 'Y' ? 'Yes' : 'No';
  223. }
  224. }
  225. ];
  226. let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
  227. // Cell click
  228. gridOptions.onCellClicked = function(event) {
  229. if (event.colDef.field != 'extmallId')
  230. return;
  231. $('#detailForm select[name=vendorId]').val(event.data.vendorId);
  232. $('#detailForm input[name=extmallId]').val(event.data.extmallId);
  233. $('#detailForm input[name=extmallUserId]').val(event.data.extmallUserId);
  234. $('#detailForm input[name=extmallNm]').val(event.data.extmallNm);
  235. $('#detailForm input[name=extmallTel]').val(event.data.extmallTel);
  236. $('#detailForm select[name=supplyCompCd]').val(event.data.supplyCompCd);
  237. $('#detailForm input[name=sellFeeRate]').val(event.data.sellFeeRate);
  238. //$('#detailForm input[name=sellStoreCd]').val(event.data.sellStoreCd);
  239. //$('#detailForm input[name=stockSellRate]').val(event.data.stockSellRate);
  240. //$('#detailForm input[name=priceAcceptRate]').val(event.data.priceAcceptRate);
  241. if (event.data.dwdpYn == 'Y') {
  242. $('#detailForm input:radio[name=dwdpYn]').eq(0).trigger('click');
  243. } else {
  244. $('#detailForm input:radio[name=dwdpYn]').eq(1).trigger('click');
  245. }
  246. if (event.data.cnclsmsSendYn == 'Y') {
  247. $('#detailForm input:radio[name=cnclsmsSendYn]').eq(0).trigger('click');
  248. } else {
  249. $('#detailForm input:radio[name=cnclsmsSendYn]').eq(1).trigger('click');
  250. }
  251. if (event.data.useYn == 'Y') {
  252. $('#detailForm input:radio[name=useYn]').eq(0).trigger('click');
  253. } else {
  254. $('#detailForm input:radio[name=useYn]').eq(1).trigger('click');
  255. }
  256. if (event.data.delvFeeSumYn == 'Y') {
  257. $('#detailForm input:radio[name=delvFeeSumYn]').eq(0).trigger('click');
  258. } else {
  259. $('#detailForm input:radio[name=delvFeeSumYn]').eq(1).trigger('click');
  260. }
  261. fnUnEscapeHtml(); //XSS변환
  262. }
  263. // 검색
  264. $('#btnSearch').on('click', function() {
  265. gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm',fnChangeGrid);
  266. });
  267. // 신규버튼
  268. $('#btnNew').on('click', function() {
  269. $("#detailForm")[0].reset();
  270. });
  271. // 저장
  272. $("#btnSave").on("click", function() {
  273. // 필수값 체크
  274. if (!gagajf.validation('#detailForm'))
  275. return false;
  276. mcxDialog.confirm("저장하시겠습니까?", {
  277. cancelBtnText: "취소",
  278. sureBtnText: "확인",
  279. sureBtnClick: function() {
  280. gagajf.ajaxFormSubmit($('#detailForm').prop('action'), '#detailForm', function() {
  281. $('#btnNew').trigger('click');
  282. $('#btnSearch').trigger('click');
  283. });
  284. }
  285. });
  286. });
  287. // 엑셀다운로드
  288. $('#btnExcel').on('click', function() {
  289. gagaAgGrid.exportToExcel('제휴몰 목록', gridOptions);
  290. });
  291. var fnUnEscapeHtml = function(){ //XSS변환
  292. $('#detailForm input[name=extmallId]').val($('#detailForm input[name=extmallId]').val().replaceXSS());
  293. $('#detailForm input[name=extmallUserId]').val($('#detailForm input[name=extmallUserId]').val().replaceXSS());
  294. $('#detailForm input[name=extmallNm]').val($('#detailForm input[name=extmallNm]').val().replaceXSS());
  295. $('#detailForm input[name=extmallTel]').val($('#detailForm input[name=extmallTel]').val().replaceXSS());
  296. };
  297. var fnChangeGrid = function(){ //그리드 내 XSS변환
  298. var data = gagaAgGrid.getAllRowData(gridOptions);
  299. let modifyList = [];
  300. $.each(data, function(idx, item) {
  301. if(item.extmallTel != null && item.extmallTel != '' && item.extmallTel != 'undefined'){
  302. let extmallTel = item.extmallTel;
  303. item.extmallTel = extmallTel.replaceXSS();
  304. }
  305. let extmallId = item.extmallId;
  306. let extmallUserId = item.extmallUserId;
  307. let extmallNm = item.extmallNm;
  308. item.extmallId = extmallId.replaceXSS();
  309. item.extmallUserId = extmallUserId.replaceXSS();
  310. item.extmallNm = extmallNm.replaceXSS();
  311. modifyList.push(item);
  312. });
  313. gridOptions.api.setRowData(modifyList);
  314. }
  315. $(document).ready(function() {
  316. // Create a agGrid
  317. gagaAgGrid.createGrid('gridList', gridOptions);
  318. });
  319. /*]]>*/
  320. </script>
  321. </html>