Selaa lähdekoodia

공급업체관리 추가

gagamel 5 vuotta sitten
vanhempi
commit
0b1bcbcbaf

+ 34 - 0
style24.admin/src/main/java/com/style24/admin/biz/dao/TsaBusinessDao.java

@@ -0,0 +1,34 @@
+package com.style24.admin.biz.dao;
+
+import java.util.Collection;
+
+import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.SupplyCompany;
+
+/**
+ * 영업관리 Dao
+ * 
+ * @author gagamel
+ * @since 2020. 10. 14
+ */
+@ShopDs
+public interface TsaBusinessDao {
+
+	/**
+	 * 공급업체 목록
+	 * @param supplyComp - 공급업체 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 14
+	 */
+	Collection<SupplyCompany> getSupplyCompanyList(SupplyCompany supplyComp);
+
+	/**
+	 * 공급업체 저장 처리
+	 * @param supplyComp - 공급업체 정보
+	 * @author gagamel
+	 * @since 2020. 10. 14
+	 */
+	void saveSupplyCompany(SupplyCompany supplyComp);
+
+}

+ 51 - 0
style24.admin/src/main/java/com/style24/admin/biz/service/TsaBusinessService.java

@@ -0,0 +1,51 @@
+package com.style24.admin.biz.service;
+
+import java.util.Collection;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.style24.admin.biz.dao.TsaBusinessDao;
+import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.persistence.domain.SupplyCompany;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 영업관리 Service
+ *
+ * @author gagamel
+ * @since 2020. 10. 14
+ */
+@Service
+@Slf4j
+public class TsaBusinessService {
+
+	@Autowired
+	private TscMessageByLocale message;
+
+	@Autowired
+	private TsaBusinessDao businessDao;
+
+	/**
+	 * 공급업체 목록
+	 * @param supplyComp - 공급업체 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 14
+	 */
+	public Collection<SupplyCompany> getSupplyCompanyList(SupplyCompany supplyComp) {
+		return businessDao.getSupplyCompanyList(supplyComp);
+	}
+
+	/**
+	 * 공급업체 저장 처리
+	 * @param supplyComp - 공급업체 정보
+	 * @author gagamel
+	 * @since 2020. 10. 14
+	 */
+	public void saveSupplyCompany(SupplyCompany supplyComp) {
+		businessDao.saveSupplyCompany(supplyComp);
+	}
+
+}

+ 100 - 0
style24.admin/src/main/java/com/style24/admin/biz/web/TsaBusinessController.java

@@ -0,0 +1,100 @@
+package com.style24.admin.biz.web;
+
+import java.util.Collection;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.servlet.ModelAndView;
+
+import com.style24.admin.biz.service.TsaBusinessService;
+import com.style24.admin.biz.service.TsaRendererService;
+import com.style24.admin.support.controller.TsaBaseController;
+import com.style24.admin.support.security.session.TsaSession;
+import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.persistence.domain.SupplyCompany;
+
+import lombok.extern.slf4j.Slf4j;
+
+import com.gagaframework.web.rest.server.GagaResponse;
+
+/**
+ * 영업관리 Controller
+ *
+ * @author jaewonHo
+ * @since 2020. 10. 14
+ */
+@Controller
+@RequestMapping("/business")
+@Slf4j
+public class TsaBusinessController extends TsaBaseController {
+
+	@Autowired
+	private TscMessageByLocale message;
+
+	@Autowired
+	private TsaBusinessService businessService;
+
+	@Autowired
+	private TsaRendererService rendererService;
+
+	/**
+	 * 공급업체관리 화면
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 14
+	 */
+	@GetMapping("/supply/company/form")
+	public ModelAndView supplyCompanyForm() {
+		ModelAndView mav = new ModelAndView();
+
+		// 입점상태
+		mav.addObject("supplyStatList", rendererService.getCommonCodeList("G010"));
+
+		// 유통구분
+		mav.addObject("distributionGbList", rendererService.getCommonCodeList("G065"));
+
+		// 은행
+		mav.addObject("bankList", rendererService.getCommonCodeList("G940"));
+
+		mav.setViewName("business/SupplyCompanyForm");
+
+		return mav;
+	}
+
+	/**
+	 * 공급업체관리 목록
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 14
+	 */
+	@PostMapping("/supply/company/list")
+	@ResponseBody
+	public Collection<SupplyCompany> getCompanyList(@RequestBody SupplyCompany supplyComp) {
+		return businessService.getSupplyCompanyList(supplyComp);
+	}
+
+	/**
+	 * 공급업체관리 저장 처리
+	 * @param supplyComp - 공급업체 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 14
+	 */
+	@PostMapping("/supply/company/save")
+	@ResponseBody
+	public GagaResponse saveSupplyInfo(@RequestBody SupplyCompany supplyComp) {
+		supplyComp.setRegNo(TsaSession.getInfo().getUserNo());
+		supplyComp.setUpdNo(TsaSession.getInfo().getUserNo());
+		log.info("supplyComp: {}", supplyComp);
+
+		businessService.saveSupplyCompany(supplyComp);
+
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+
+}

+ 5 - 5
style24.admin/src/main/java/com/style24/persistence/domain/Brand.java

@@ -26,9 +26,12 @@ public class Brand extends TsaBaseDomain {
 	private String brandEnm;	// 브랜드영문명
 	private String brandKnm;	// 브랜드한글명
 	private String brandGrpNm;	// 브랜드그룹명
+//	private String erpBrandCd;	// ERP브랜드코드
+	private int minOrdAmt;		// 무료배송비최소주문금액
+	private int delvFee;		// 배송비
 	private String delvLocCd;	// 출고처코드
-	private String delvLocNm;	// 출고처이름
-	private String erpBrandCd;	// ERP브랜드코드
+	private String delvLocNm;	// 출고처
+	private float sellFeeRate;	// 판매수수료율
 	private String brandImg;	// 브랜드이미지
 	private float pntPrate10;	// 포인트적립율(PC정상)
 	private float pntMrate10;	// 포인트적립율(모바일정상)
@@ -52,9 +55,6 @@ public class Brand extends TsaBaseDomain {
 //	private String homepageUrl; /*홈페이지URL*/
 //	private String selfYn; /*자사여부(Y:자사, N:입점)*/
 //	private String supplyStat; /*입점상태(공통코드G010)*/
-//	private int minOrdAmt; /*무료배송비최소주문금액*/
-//	private int delvFee; /*배송비*/
-//	private int sellFeeRate; /*판매수수료율*/
 //	private String settleDay; /*정산일(매월)*/
 //	private String bankNm; /*은행명*/
 //	private String accountNo; /*계좌번호*/

+ 9 - 4
style24.admin/src/main/java/com/style24/persistence/domain/SupplyCompany.java

@@ -28,15 +28,20 @@ public class SupplyCompany extends TsaBaseDomain {
 	private String mainFaxno;		// 대표팩스번호
 	private String homepageUrl;		// 홈페이지URL
 	private String selfYn;			// 자사여부(Y:자사, N:입점)
+	private String distributionGb;	// 유통구분(공통코드G065)
 	private String supplyStat;		// 입점상태(공통코드G010)
-	private String minOrdAmt;		// 무료배송비최소주문금액
-	private String delvFee;			// 배송비
-	private String sellFeeRate;		// 판매수수료율
+	private int minOrdAmt;			// 무료배송비최소주문금액
+	private int delvFee;			// 배송비
+	private float sellFeeRate;		// 판매수수료율
 	private String settleDay;		// 정산일(매월)
-	private String bankNm;			// 은행명
+	private String bankCd;			// 은행코드
 	private String accountNo;		// 계좌번호
 	private String depositorNm;		// 예금주명
 	private String remarks;			// 비고
 	private String useYn;			// 사용여부
 
+	// 검색조건
+	private String searchGb;		// 검색구분
+	private String searchTxt;		// 검색어
+
 }

+ 141 - 0
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaBusiness.xml

@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.style24.admin.biz.dao.TsaBusinessDao">
+
+	<!-- 공급업체 목록 -->
+	<select id="getSupplyCompanyList" parameterType="SupplyCompany" resultType="SupplyCompany">
+		/* TsaBusiness.getSupplyCompanyList */
+		SELECT SUPPLY_COMP_CD   /*공급업체코드*/
+		     , SUPPLY_COMP_NM   /*공급업체명*/
+		     , BIZ_GB           /*사업자구분*/
+		     , BIZ_NO           /*사업자등록번호*/
+		     , BIZ_KIND         /*업종*/
+		     , BIZ_TYPE         /*업태*/
+		     , OWNER_NM         /*대표자명*/
+		     , BIZ_ZIPCODE      /*사업장우편번호*/
+		     , BIZ_BASE_ADDR    /*사업장기본주소*/
+		     , BIZ_DTL_ADDR     /*사업장상세주소*/
+		     , MAIN_TELNO       /*대표전화번호*/
+		     , MAIN_FAXNO       /*대표팩스번호*/
+		     , HOMEPAGE_URL     /*홈페이지URL*/
+		     , DISTRIBUTION_GB  /*유통구분*/
+		     , SUPPLY_STAT      /*입점상태*/
+		     , MIN_ORD_AMT      /*무료배송비최소주문금액*/
+		     , DELV_FEE         /*배송비*/
+		     , SELL_FEE_RATE    /*판매수수료율*/
+		     , SETTLE_DAY       /*정산일*/
+		     , BANK_CD          /*은행코드*/
+		     , ACCOUNT_NO       /*계좌번호*/
+		     , DEPOSITOR_NM     /*예금주명*/
+		     , REMARKS          /*비고*/
+		     , USE_YN           /*사용여부*/
+		FROM   TB_SUPPLY_COMPANY
+		WHERE  1 = 1
+		<if test="supplyStat != null and supplyStat != ''">
+		AND    SUPPLY_STAT = #{supplyStat}
+		</if>
+		<if test="searchTxt != null and searchTxt != ''">
+			<if test='searchGb == "NAME"'>
+			AND    UPPER(SUPPLY_COMP_NM) LIKE CONCAT('%',UPPER(#{searchTxt}),'%')
+			</if>
+			<if test='searchGb == "OWNER"'>
+			AND    UPPER(OWNER_NM) LIKE CONCAT('%',UPPER(#{searchTxt}),'%')
+			</if>
+		</if>
+	</select>
+	
+	<!-- 공급업체 저장 -->
+	<insert id="saveSupplyCompany" parameterType="SupplyCompany">
+		/* TsaBusiness.saveSupplyCompany */
+		INSERT INTO TB_SUPPLY_COMPANY (
+		       SUPPLY_COMP_CD
+		     , SUPPLY_COMP_NM
+		     , BIZ_GB
+		     , BIZ_NO
+		     , BIZ_KIND
+		     , BIZ_TYPE
+		     , OWNER_NM
+		     , BIZ_ZIPCODE
+		     , BIZ_BASE_ADDR
+		     , BIZ_DTL_ADDR
+		     , MAIN_TELNO
+		     , MAIN_FAXNO
+		     , HOMEPAGE_URL
+		     , DISTRIBUTION_GB
+		     , SUPPLY_STAT
+		     , MIN_ORD_AMT
+		     , DELV_FEE
+		     , SELL_FEE_RATE
+		     , SETTLE_DAY
+		     , BANK_CD
+		     , ACCOUNT_NO
+		     , DEPOSITOR_NM
+		     , REMARKS
+		     , USE_YN
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		)
+		VALUES (
+		       (SELECT 'S'||LPAD(SUBSTRING(MAX(SUPPLY_COMP_CD),2) + 1,4,'0')
+		        FROM   TB_SUPPLY_COMPANY
+		        WHERE  SUPPLY_COMP_CD LIKE 'S%'
+		       )
+		     , #{supplyCompNm}
+		     , #{bizGb}
+		     , #{bizNo}
+		     , #{bizKind}
+		     , #{bizType}
+		     , #{ownerNm}
+		     , #{bizZipcode}
+		     , #{bizBaseAddr}
+		     , #{bizDtlAddr}
+		     , #{mainTelno}
+		     , #{mainFaxno}
+		     , #{homepageUrl}
+		     , #{distributionGb}
+		     , #{supplyStat}
+		     , IFNULL(#{minOrdAmt},0)
+		     , IFNULL(#{delvFee},0)
+		     , IFNULL(#{sellFeeRate},0.0)
+		     , #{settleDay}
+		     , #{bankCd}
+		     , #{accountNo}
+		     , #{depositorNm}
+		     , #{remarks}
+		     , #{useYn}
+		     , #{regNo}
+		     , NOW()
+		     , #{updNo}
+		     , NOW()
+		)
+		ON DUPLICATE KEY UPDATE
+		       SUPPLY_COMP_NM  = #{supplyCompNm}
+		     , BIZ_GB          = #{bizGb}
+		     , BIZ_NO          = #{bizNo}
+		     , BIZ_KIND        = #{bizKind}
+		     , BIZ_TYPE        = #{bizType}
+		     , OWNER_NM        = #{ownerNm}
+		     , BIZ_ZIPCODE     = #{bizZipcode}
+		     , BIZ_BASE_ADDR   = #{bizBaseAddr}
+		     , BIZ_DTL_ADDR    = #{bizDtlAddr}
+		     , MAIN_TELNO      = #{mainTelno}
+		     , MAIN_FAXNO      = #{mainFaxno}
+		     , HOMEPAGE_URL    = #{homepageUrl}
+		     , DISTRIBUTION_GB = #{distributionGb}
+		     , SUPPLY_STAT     = #{supplyStat}
+		     , MIN_ORD_AMT     = IFNULL(#{minOrdAmt},0)
+		     , DELV_FEE        = IFNULL(#{delvFee},0)
+		     , SELL_FEE_RATE   = IFNULL(#{sellFeeRate},0.0)
+		     , SETTLE_DAY      = #{settleDay}
+		     , BANK_CD         = #{bankCd}
+		     , ACCOUNT_NO      = #{accountNo}
+		     , DEPOSITOR_NM    = #{depositorNm}
+		     , REMARKS         = #{remarks}
+		     , USE_YN          = #{useYn}
+		     , UPD_NO          = #{updNo}
+		     , UPD_DT          = NOW()
+	</insert>
+
+</mapper>

+ 5 - 2
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaRenderer.xml

@@ -12,8 +12,11 @@
 		<if test='supplyCompCd != null and supplyCompCd != ""'>
 		AND    SUPPLY_COMP_CD = #{supplyCompCd}
 		</if>
-		<if test='selfYn != null and selfYn != ""'>
-		AND    SELF_YN = #{selfYn}
+		<if test='selfYn == "Y"'>
+		AND    DISTRIBUTION_GB IN ('G065_10','G065_11','G065_12')
+		</if>
+		<if test='selfYn == "N"'>
+		AND    DISTRIBUTION_GB = 'G065_20'
 		</if>
 		ORDER  BY SUPPLY_COMP_NM
 	</select>

+ 370 - 0
style24.admin/src/main/webapp/WEB-INF/views/business/SupplyCompanyForm.html

@@ -0,0 +1,370 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : SupplyCompanyForm.html
+ * @desc    : 공급업체관리 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.10.14   gagamel     최초 작성
+ *******************************************************************************
+ -->
+	<div id="main">
+		<!-- 메인타이틀 영역 -->
+		<div class="main-title">
+		</div>
+		<!-- //메인타이틀 영역 -->
+		
+		<!-- 검색조건 영역 -->
+		<div class="panelStyle">
+			<form id="searchForm" name="searchForm" action="#" th:action="@{'/business/supply/company/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+				<table class="frmStyle" aria-describedby="검색조건">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col style="width:40%;"/>
+						<col style="width:10%;"/>
+						<col/>
+					</colgroup>
+					<tr>
+						<th>검색어</th>
+						<td>
+							<select name="searchGb">
+								<option value="NAME">업체명</option>
+								<option value="OWNER">대표자명</option>
+							</select>
+							<input type="text" name="searchTxt" class="w300" maxlength="20"/>
+						</td>
+						<th>입점상태</th>
+						<td>
+							<select name="supplyStat">
+								<option value="">[전체]</option>
+								<option th:if="${supplyStatList}" th:each="oneData, status : ${supplyStatList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+						</td>
+					</tr>
+				</table>
+				
+				<ul class="panelBar">
+					<li class="center">
+						<button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
+						<button type="button" class="btn btn-gray btn-lg" onclick="$('#searchForm')[0].reset();">초기화</button>
+					</li>
+				</ul>
+			</form>
+		</div>
+		<!-- 검색조건 영역 -->
+
+		<!-- 리스트 영역 -->
+		<div class="panelStyle">
+			<!-- 버튼 배치 영역 -->
+			<ul class="panelBar">
+				<li class="right">
+					<button type="button" class="btn btn-default btn-lg" id="btnExcelDown">엑셀다운로드</button>
+				</li>
+			</ul>
+			<!-- //버튼 배치 영역 -->
+			
+			<div id="gridList" style="width: 100%; height: 370px" class="ag-theme-balham"></div>
+		</div>
+		<!-- //리스트 영역 -->
+		
+		<!-- 등록/수정 -->
+		<div class="panelStyle">
+			<form id="detailForm" name="detailForm" action="#" th:action="@{'/business/supply/company/save'}">
+				<table class="frmStyle" aria-describedby="등록/수정 폼">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+					</colgroup>
+					<tr>
+						<th>업체코드</th>
+						<td>
+							<input type="text" class="w150" name="supplyCompCd" placeholder="자동생성" maxlength="5" data-valid-name="업체코드" disabled="disabled"/>
+						</td>
+						<th>업체명<i class="required" title="필수"></i></th>
+						<td>
+							<input type="text" name="supplyCompNm" maxlength="100" required="required" data-valid-name="업체명"/>
+						</td>
+						<th>사업자구분<i class="required" title="필수"></i></th>
+						<td>
+							<label class="rdoBtn"><input type="radio" name="bizGb" id="bizGb" value="C">법인<span></span></label>
+							<label class="rdoBtn"><input type="radio" name="bizGb" id="bizGb" value="P">개인<span></span></label>
+						</td>
+						<th>사업자등록번호<i class="required" title="필수"></i></th>
+						<td>
+							<input type="text" name="bizNo" maxlength="20" required="required" data-valid-name="사업자등록번호"/>
+						</td>
+					</tr>
+					<tr>
+						<th>업종<i class="required" title="필수"></i></th>
+						<td>
+							<input type="text" name="bizKind" maxlength="100" required="required" data-valid-name="업종"/>
+						</td>
+						<th>업태<i class="required" title="필수"></i></th>
+						<td>
+							<input type="text" name="bizType" maxlength="100" required="required" data-valid-name="업태"/>
+						</td>
+						<th>입점상태<i class="required" title="필수"></i></th>
+						<td>
+							<select name="supplyStat" id="supplyStat">
+								<option value="">[선택]</option>
+								<option th:if="${supplyStatList}" th:each="oneData, status : ${supplyStatList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+						</td>
+						<th>대표자명<i class="required" title="필수"></i></th>
+						<td>
+							<input type="text" name="ownerNm" maxlength="50" required="required" data-valid-name="대표자명"/>
+						</td>
+					</tr>
+					<tr>
+						<th rowspan="2">사업장주소<i class="required" title="필수"></i></th>
+						<td colspan="3" rowspan="2">
+							<input type="text" name="bizZipcode"  class="w100" data-valid-name="우편번호" readonly="readonly"/>
+							&nbsp;&nbsp;&nbsp;
+							<button type="button" class="btn btn-info btn-sm" onclick="cfnOpenPostFindPopup();">우편번호찾기</button>
+							<br>
+							<input type="text" name="bizBaseAddr" class="w300" required="required" data-valid-name="사업장주소" readonly="readonly"/>
+							-
+							<input type="text" name="bizDtlAddr" class="w300" required="required" data-valid-name="사업장상세주소"/>
+						</td>
+						<th>홈페이지URL</th>
+						<td colspan="3">
+							<input type="text" name="homepageUrl" data-valid-name="홈페이지URL"/>
+						</td>
+					</tr>
+					<tr>
+						<th>대표전화<i class="required" title="필수"></i></th>
+						<td>
+							<input type="text" name="mainTelno" placeholder="02-0000-0000" maxlength="20" required="required" data-valid-name="대표전화"/>
+						</td>
+						<th>대표팩스번호</th>
+						<td>
+							<input type="text" name="mainFaxno" placeholder="02-0000-0000" maxlength="20" data-valid-name="대표팩스번호"/>
+						</td>
+					</tr>
+					<tr>
+						<th>유통구분<i class="required" title="필수"></i></th>
+						<td>
+							<select name="distributionGb" data-valid-name="유통구분">
+								<option value="">[선택]</option>
+								<option th:if="${distributionGbList}" th:each="oneData, status : ${distributionGbList}" th:value="${oneData.cd}" th:text="${oneData.cdNm}" th:selected="${bankNm}"></option>
+							</select>
+						</td>
+						<th>무료배송비최소주문금액<i class="required" title="필수"></i></th>
+						<td>
+							<input type="text" name="minOrdAmt" class="w100 aR" placeholder="30,000" maxlength="7" required="required" data-valid-type="integer" data-valid-name="무료배송비최소주문금액"/>원
+						</td>
+						<th>배송비<i class="required" title="필수"></i></th>
+						<td>
+							<input type="text" name="delvFee" class="w100 aR" placeholder="2,500" maxlength="7" required="required" data-valid-type="integer" data-valid-name="배송비"/>원
+						</td>
+						<th>판매수수료율<i class="required" title="필수"></i></th>
+						<td>
+							<input type="text" name="sellFeeRate" class="w100 aR" placeholder="0.0" maxlength="5" required="required" data-valid-type="real" data-valid-name="판매수수료율"/>%
+						</td>
+					</tr>
+					<tr>
+						<th>정산일<i class="required" title="필수"></i></th>
+						<td>
+							매일&nbsp;<input type="text" name="settleDay" class="w100 aR" maxlength="2" required="required" data-valid-type="numeric" data-valid-name="정산일"/>일
+						</td>
+						<th>거래은행</th>
+						<td>
+							<select name="bankCd">
+								<option value="">[선택]</option>
+								<option th:if="${bankList}" th:each="oneData, status : ${bankList}"	th:value="${oneData.cd}"th:text="${oneData.cdNm}"th:selected="${bankNm}" ></option>
+							</select>
+						</td>
+						<th>계좌번호</th>
+						<td>
+							<input type="text" name="accountNo" maxlength="20"/>
+						</td>
+						<th>예금주명</th>
+						<td>
+							<input type="text" name="depositorNm" maxlength="50"/>
+						</td>
+					</tr>
+					<tr>
+						<th>사용여부<i class="required" title="필수"></i></th>
+						<td colspan="7">
+							<label class="rdoBtn"><input type="radio" name="useYn" id="useYn" value="Y" checked="checked">Yes<span></span></label>
+							<label class="rdoBtn"><input type="radio" name="useYn" id="useYn" value="N">No<span></span></label>
+						</td>
+					</tr>
+					<tr>
+						<th>비고</th>
+						<td colspan="7">
+							<textarea name="remarks" class="textareaR3"  data-valid-name="비고" ></textarea>
+						</td>
+					</tr>
+				</table>
+			</form>
+			
+			<!-- 버튼 배치 영역 -->
+			<ul class="panelBar">
+				<li class="right">
+					<button type="button" class="btn btn-info btn-lg" id="btnNew">신규</button>
+					<button type="button" class="btn btn-success btn-lg" id="btnSave">저장</button>
+				</li>
+			</ul>
+			<!-- //버튼 배치 영역 -->
+		</div>
+		<!-- 등록/수정 -->
+	</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	let supplyStatList = gagajf.convertToArray([[${supplyStatList}]]);
+	let distributionGbList = gagajf.convertToArray([[${distributionGbList}]]);
+	let bankList = gagajf.convertToArray([[${bankList}]]);
+
+	let columnDefs = [
+		{headerName: "업체코드", field: "supplyCompCd", width: 100, cellClass: 'text-center' },
+		{
+			headerName: "업체명", field: "supplyCompNm", width: 150, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				return '<a href="javascript:void(0);">' + params.value + '</a>';
+			}
+		},
+		{
+			headerName: "사업자구분", field: "bizGb", width: 100, cellClass: 'text-center',
+			valueGetter: function (params) { return params.data.bizGb == 'C' ? '법인' : '개인'; }
+		},
+		{headerName: "사업장자록번호", field: "bizNo", width: 120, cellClass: 'text-center' },
+		{headerName: "업종", field: "bizKind", width: 200 },
+		{headerName: "업태", field: "bizType", width: 200 },
+		{
+			headerName: "입점상태", field: "supplyStat", width: 100, cellClass: 'text-center',
+			valueGetter: function (params) {
+				return gagaAgGrid.lookupValue(supplyStatList, params.data.supplyStat);
+			}
+		},
+		{headerName: "대표자명", field: "ownerNm", width: 100, cellClass: 'text-center' },
+		{headerName: "우편번호", field: "bizZipcode", width: 80, cellClass: 'text-center' },
+		{headerName: "기본주소", field: "bizBaseAddr", width: 250 },
+		{headerName: "상세주소", field: "bizDtlAddr", width: 150 },
+		{headerName: "대표전화번호", field: "mainTelno", width: 120, cellClass: 'text-center' },
+		{headerName: "대표팩스번호", field: "mainFaxno", width: 120, cellClass: 'text-center' },
+		{headerName: "홈페이지URL", field: "homepageUrl", width: 200 },
+		{
+			headerName: "유통구분", field: "distributionGb", width: 100, cellClass: 'text-center',
+			valueGetter: function (params) {
+				return gagaAgGrid.lookupValue(distributionGbList, params.data.distributionGb);
+			}
+		},
+		{
+			headerName: "무료배송비최소주문금액", field: "minOrdAmt", width: 150, cellClass: 'text-center',
+			valueGetter: function(params) {
+				return Number(params.data.minOrdAmt).addComma();
+			}
+		},
+		{
+			headerName: "배송비", field: "delvFee", width: 100, cellClass: 'text-center',
+			valueGetter: function(params) {
+				return Number(params.data.delvFee).addComma();
+			}
+		},
+		{
+			headerName: "판매수수료율", field: "sellFeeRate", width: 120, cellClass: 'text-center',
+			valueGetter: function(params) {
+				return params.data.sellFeeRate + '%';
+			}
+		},
+		{headerName: "정산일(매월)", field: "settleDay", width: 100, cellClass: 'text-center' },
+		{
+			headerName: "은행명", field: "bankCd", width: 150, cellClass: 'text-center',
+			valueGetter: function (params) {
+				return gagaAgGrid.lookupValue(bankList, params.data.bankCd);
+			}
+		},
+		{headerName: "계좌번호", field: "accountNo", width: 150, cellClass: 'text-center' },
+		{headerName: "예금주명", field: "depositorNm", width: 100, cellClass: 'text-center' },
+		{
+			headerName: "사용여부", field: "useYn", width: 100, cellClass: 'text-center',
+			valueGetter: function (params) { return params.data.useYn == 'Y' ? 'Yes' : 'No'; }
+		},
+		{headerName: "비고", field: "remarks", width: 150, hide: true }
+	];
+
+	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+	// Cell click
+	gridOptions.onCellClicked = function(event) {
+		if (event.colDef.field != 'supplyCompNm')
+			return;
+		
+		$('#detailForm input[name=supplyCompCd]').val(event.data.supplyCompCd);
+		$('#detailForm input[name=supplyCompNm]').val(event.data.supplyCompNm);
+		$('#detailForm select[name=supplyStat]').val(event.data.supplyStat);
+		$('#detailForm input[name=ownerNm]').val(event.data.ownerNm);
+		$('#detailForm input:radio[name=useYn]:input[value= ' + event.data.useYn + '] ').click();
+		$('#detailForm input:radio[name=bizGb]:input[value= ' + event.data.bizGb + '] ').click();
+		$('#detailForm input[name=bizNo] ').val(event.data.bizNo);
+		$('#detailForm input[name=bizKind]').val(event.data.bizKind);
+		$('#detailForm input[name=bizType]').val(event.data.bizType);
+		$('#detailForm input[name=bizZipcode]').val(event.data.bizZipcode);
+		$('#detailForm input[name=bizBaseAddr]').val(event.data.bizBaseAddr);
+		$('#detailForm input[name=bizDtlAddr]').val(event.data.bizDtlAddr);
+		$('#detailForm input[name=homepageUrl]').val(event.data.homepageUrl);
+		$('#detailForm select[name=distributionGb]').val(event.data.distributionGb);
+		$('#detailForm input[name=mainTelno]').val(event.data.mainTelno);
+		$('#detailForm input[name=mainFaxno]').val(event.data.mainFaxno);
+		$('#detailForm input[name=sellFeeRate]').val(event.data.sellFeeRate);
+		$('#detailForm input[name=settleDay]').val(event.data.settleDay);
+		$('#detailForm input[name=minOrdAmt]').val(Number(event.data.minOrdAmt).addComma());
+		$('#detailForm input[name=delvFee]').val(Number(event.data.delvFee).addComma());
+		$('#detailForm select[name=bankNm]').val(event.data.bankNm);
+		$('#detailForm input[name=accountNo]').val(event.data.accountNo);
+		$('#detailForm input[name=depositorNm]').val(event.data.depositorNm);
+		$('#detailForm textarea[name=remarks]').val(event.data.remarks);
+	}
+
+	// 신규버튼
+	$('#btnNew').on('click', function() {
+		$("#detailForm")[0].reset();
+	});
+
+	// 검색
+	$('#btnSearch').on('click', function() {
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+	});
+
+	// 저장
+	$("#btnSave").on("click", function() {
+		// 필수값 체크
+		if (!gagajf.validation('#detailForm'))
+			return false;
+
+// 		$('#detailForm input[name=useYn]').val($('#detailForm input:checkbox[name=chkUseYn]').is(":checked") ? 'Y' : 'N');
+		
+		mcxDialog.confirm("저장하시겠습니까?", {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				gagajf.ajaxFormSubmit($('#detailForm').prop('action'), '#detailForm', function() {
+					$('#btnNew').trigger('click');
+					$('#btnSearch').trigger('click');
+				});
+			}
+		});
+	});
+
+	$(document).ready(function() {
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridList', gridOptions);
+	});
+/*]]>*/
+</script>
+
+</html>

+ 2 - 2
style24.admin/src/main/webapp/WEB-INF/views/system/BasicAnswerForm.html

@@ -145,8 +145,8 @@
 
 <script th:inline="javascript">
 /*<![CDATA[*/
-	var siteList = cfnConvertToArray([[${siteList}]]);
-	var ansClsfList = cfnConvertToArray([[${ansClsfList}]]);
+	var siteList = gagajf.convertToArray([[${siteList}]]);
+	var ansClsfList = gagajf.convertToArray([[${ansClsfList}]]);
 
 	var columnDefs = [
 		{headerName: "답변번호", field: "ansSq", width: 150, cellClass: 'text-center'},

+ 2 - 2
style24.admin/src/main/webapp/WEB-INF/views/system/ClauseListForm.html

@@ -73,8 +73,8 @@
 <script th:inline="javascript">
 /*<![CDATA[*/
 	// 사이트목록
-	var siteList = cfnConvertToArray([[${siteList}]]);
-	var clauseTypeList = cfnConvertToArray([[${clauseTypeList}]]);
+	var siteList = gagajf.convertToArray([[${siteList}]]);
+	var clauseTypeList = gagajf.convertToArray([[${clauseTypeList}]]);
 	
 	var columnDefs = [
 		{headerName: "약관번호",		field:'clauseSq',		width:80,	cellClass: 'text-center'},

+ 1 - 1
style24.admin/src/main/webapp/WEB-INF/views/system/HilandDeliveryFeeListForm.html

@@ -47,7 +47,7 @@
 
 <script th:inline="javascript">
 /*<![CDATA[*/
-	var supplyCompList = cfnConvertToArray([[${supplyCompList}]]);
+	var supplyCompList = gagajf.convertToArray([[${supplyCompList}]]);
 	
 	var columnDefs = [
 		//{width: 100, minWidth: 100, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},

+ 8 - 8
style24.admin/src/main/webapp/WEB-INF/views/system/MenuForm.html

@@ -84,17 +84,17 @@
 									<col/>
 								</colgroup>
 								<tr>
-									<th>메뉴ID<i class="star" aria-hidden="true"></i></th>
+									<th>메뉴ID<i class="required" title="필수" aria-hidden="true"></i></th>
 									<td>
 										<input type="text" name="menuId" placeholder="" maxlength="20" required="required" data-valid-type="alphaNumeric" data-valid-name="메뉴ID" onkeyup="$(this).val($(this).val().toUpperCase());"/>
 									</td>
-									<th>메뉴명<i class="star" aria-hidden="true"></i></th>
+									<th>메뉴명<i class="required" title="필수" aria-hidden="true"></i></th>
 									<td>
 										<input type="text" name="menuNm" placeholder="" maxlength="50" required="required" data-valid-name="메뉴명"/>
 									</td>
 								</tr>
 								<tr>
-									<th>메뉴구분<i class="star" aria-hidden="true"></i></th>
+									<th>메뉴구분<i class="required" title="필수" aria-hidden="true"></i></th>
 									<td>
 										<label class="rdoBtn"><input type="radio" name="menuGb" value="M"/>메뉴</label>
 										<label class="rdoBtn"><input type="radio" name="menuGb" value="P"/>프로그램</label>
@@ -145,7 +145,7 @@
 									</td>
 								</tr>
 								<tr>
-									<th>표시순서<i class="star" aria-hidden="true"></i></th>
+									<th>표시순서<i class="required" title="필수" aria-hidden="true"></i></th>
 									<td>
 										<input type="text" class="w100 text-right" name="dispOrd" placeholder="" maxlength="5" required="required" data-valid-type="numeric" data-valid-name="표시순서" />
 									</td>
@@ -186,13 +186,13 @@
 									<td>
 										<input type="text" name="menuId" placeholder="" maxlength="20" readonly="readonly"/>
 									</td>
-									<th>메뉴명<i class="star" aria-hidden="true"></i></th>
+									<th>메뉴명<i class="required" title="필수" aria-hidden="true"></i></th>
 									<td>
 										<input type="text" name="menuNm" placeholder="" maxlength="50" required="required" data-valid-name="메뉴명"/>
 									</td>
 								</tr>
 								<tr>
-									<th>메뉴구분<i class="star" aria-hidden="true"></i></th>
+									<th>메뉴구분<i class="required" title="필수" aria-hidden="true"></i></th>
 									<td>
 										<label class="rdoBtn"><input type="radio" name="menuGb" value="M"/>메뉴</label>
 										<label class="rdoBtn"><input type="radio" name="menuGb" value="P"/>프로그램</label>
@@ -243,11 +243,11 @@
 									</td>
 								</tr>
 								<tr>
-									<th>표시순서<i class="star" aria-hidden="true"></i></th>
+									<th>표시순서<i class="required" title="필수" aria-hidden="true"></i></th>
 									<td>
 										<input type="text" class="w100 text-right" name="dispOrd" placeholder="" maxlength="5" required="required" data-valid-type="numeric" data-valid-name="표시순서" />
 									</td>
-									<th>사용여부<i class="star" aria-hidden="true"></i></th>
+									<th>사용여부<i class="required" title="필수" aria-hidden="true"></i></th>
 									<td>
 										<input type="hidden" name="useYn"/>
 										<label class="chkBox"><input type="checkbox" name="chkUseYn" value="Y"/>사용</label>

+ 1 - 1
style24.admin/src/main/webapp/WEB-INF/views/system/SitePolicyForm.html

@@ -242,7 +242,7 @@
 <script th:inline="javascript">
 /*<![CDATA[*/
 
-	var siteList = cfnConvertToArray([[${siteList}]]);
+	var siteList = gagajf.convertToArray([[${siteList}]]);
 	var benefitGbList = {"C":"쿠폰", "P":"포인트", "B":"쿠폰/포인트"};
 	var usePntUnitList = {"10" :"10:원단위절사", "100" :"100:원단위절사", "1000" :"1000:원단위절사"};
 	var usePossibPntGbList = {"A" : "정액", "R" : "정율"};

+ 7 - 7
style24.admin/src/main/webapp/WEB-INF/views/system/UserDetailForm.html

@@ -32,19 +32,19 @@
 					<col/>
 				</colgroup>
 				<tr>
-					<th>사용자ID<em class="star"></em></th>
+					<th>사용자ID<em class="required" title="필수"></em></th>
 					<td>
 						<input type="hidden" name="userNo" value="" readonly="readonly"/>
 						<input type="text" class="w150" name="userId" placeholder="" maxlength="20" required="required" data-valid-type="alphaNumeric" data-valid-name="사용자ID"/>
 						<button type="button" class="btn btn-default btn-sm" id="userIdDupCheck">중복체크</button>
 					</td>
-					<th>사용자명<em class="star"></em></th>
+					<th>사용자명<em class="required" title="필수"></em></th>
 					<td>
 						<input type="text" name="userNm" placeholder="" maxlength="50" required="required" data-valid-name="사용자명"/>
 					</td>
 				</tr>
 				<tr>
-					<th>비밀번호<em class="star"></em></th>
+					<th>비밀번호<em class="required" title="필수"></em></th>
 					<td colspan="3">
 						<input type="password" name="passwd" placeholder="비밀번호" maxlength="50" required="required" data-valid-type="password" data-valid-name="비밀번호"/> /
 						<input type="password" name="passwdConfirm" placeholder="비밀번호확인" maxlength="50" required="required" data-valid-type="password" data-valid-name="비밀번호확인"/>
@@ -53,7 +53,7 @@
 					</td>
 				</tr>
 				<tr>
-					<th>권한<em class="star"></em></th>
+					<th>권한<em class="required" title="필수"></em></th>
 					<td>
 						<input type="hidden" name="roleChangeYn" value="Y"/>
 						<select name="roleCd" required="required" data-valid-name="권한">
@@ -127,12 +127,12 @@
 					<col/>
 				</colgroup>
 				<tr>
-					<th>사용자ID<em class="star"></em></th>
+					<th>사용자ID<em class="required" title="필수"></em></th>
 					<td>
 						<input type="hidden" name="userNo" readonly="readonly" th:field="*{userNo}"/>
 						<input type="text" name="userId" placeholder="" readonly="readonly" th:field="*{userId}"/>
 					</td>
-					<th>사용자명<em class="star"></em></th>
+					<th>사용자명<em class="required" title="필수"></em></th>
 					<td>
 						<input type="text" name="userNm" placeholder="" maxlength="50" required="required" data-valid-name="사용자명" th:field="*{userNm}"/>
 					</td>
@@ -148,7 +148,7 @@
 					</td>
 				</tr>
 				<tr>
-					<th>권한<em class="star"></em></th>
+					<th>권한<em class="required" title="필수"></em></th>
 					<td>
 						<input type="hidden" name="roleChangeYn" value="N"/>
 						<select name="roleCd" required="required" data-valid-name="권한" th:field="*{roleCd}">

+ 1 - 1
style24.admin/src/main/webapp/WEB-INF/views/system/UserForm.html

@@ -97,7 +97,7 @@
 
 <script th:inline="javascript">
 /*<![CDATA[*/
-	var roleList = cfnConvertToArray([[${roleList}]]);
+	var roleList = gagajf.convertToArray([[${roleList}]]);
 	
 	// specify the columns
 	var columnDefs = [

+ 0 - 25
style24.admin/src/main/webapp/ux/js/admin.common.js

@@ -229,31 +229,6 @@ var cfnShowTab = function(objToShow) {
 	$(objToShow).find('a').trigger('click');
 }
 
-/**
- * 데이터를 배열로 변환
- * 예)
- * 		cfnConvertToArray({cd: "KNE", cdNm: "KNE"});
- * @param  : data - 데이터
- * @param  : isCodeDisplay - 코드표시여부(true/false). default false
- * @author : gagamel
- * @since  : 2019. 6. 7
- */
-var cfnConvertToArray = function(data, isCodeDisplay) {
-	if (data.length == 0)
-		return [];
-
-	if (typeof(isCodeDisplay) == 'undefined')
-		isCodeDisplay = false;
-
-	var arrValue = {};
-
-	$.each(data, function(idx, item) {
-		arrValue[item.cd] = (isCodeDisplay ? '[' + item.cd + '] ' : '') + item.cdNm;
-	});
-
-	return arrValue;
-}
-
 /**
  * Global Ajax Error Handler
  */

+ 132 - 44
style24.admin/src/main/webapp/ux/plugins/gaga/gaga.validation.js

@@ -113,9 +113,13 @@ var gagajf = {
 		}
 
 		if (!regexp.test(val)) {
-			mcxDialog.alert($(el).data('validName') + '의 형식이 잘못되었습니다.');
-			$(el).select();
-			$(el).focus();
+			mcxDialog.alertC($(el).data('validName') + '의 형식이 잘못되었습니다.', {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$(el).select();
+					$(el).focus();
+				}
+			});
 			return false;
 		}
 
@@ -133,9 +137,19 @@ var gagajf = {
 		var validNm = $(el).data('validName');
 
 		if (mgsType == 'input') {
-			mcxDialog.alert(validNm + '을(를) 입력해 주세요.');
+			mcxDialog.alertC(validNm + '을(를) 입력해 주세요.', {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$(el).focus();
+				}
+			});
 		} else if (mgsType == 'select') {
-			mcxDialog.alert(validNm + '을(를) 선택해 주세요.');
+			mcxDialog.alertC(validNm + '을(를) 선택해 주세요.', {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$(el).focus();
+				}
+			});
 		}
 	},
 
@@ -174,22 +188,34 @@ var gagajf = {
 
 		if (cnt >= 3) {
 			if (passwd.length < 8) {
-				mcxDialog.alert('3가지 이상으로 구성 시 8 자리 이상으로 입력해 주세요.');
-				$(el).select();
-				$(el).focus();
+				mcxDialog.alertC('3가지 이상으로 구성 시 8 자리 이상으로 입력해 주세요.', {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$(el).select();
+						$(el).focus();
+					}
+				});
 				return false;
 			}
 		} else if (cnt >= 2) {
 			if (passwd.length < 10) {
-				mcxDialog.alert('2가지 이상으로 구성 시 10 자리 이상으로 입력해 주세요.');
-				$(el).select();
-				$(el).focus();
+				mcxDialog.alertC('2가지 이상으로 구성 시 10 자리 이상으로 입력해 주세요.', {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$(el).select();
+						$(el).focus();
+					}
+				});
 				return false;
 			}
 		} else {
-			mcxDialog.alert('대/소문자, 특수문자, 숫자로 구성해 주세요.');
-			$(el).select();
-			$(el).focus();
+			mcxDialog.alertC('대/소문자, 특수문자, 숫자로 구성해 주세요.', {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$(el).select();
+					$(el).focus();
+				}
+			});
 			return false;
 		}
 
@@ -220,8 +246,6 @@ var gagajf = {
 						return true;
 
 					gagajf.alertMessage($(el), 'input');
-//					alert(msg + "을(를) 입력해 주세요.");
-					$(el).focus();
 					isInvalid = false;
 					return false;
 				case 'select':
@@ -229,9 +253,7 @@ var gagajf = {
 					if (!gagajf.isNull(value))
 						return true;
 
-//					alert(msg + "을(를) 선택해 주세요.");
 					gagajf.alertMessage($(el), 'select');
-					$(el).focus();
 					isInvalid = false;
 					return false;
 				case 'checkbox':
@@ -239,7 +261,6 @@ var gagajf = {
 					if (gagajf.isCheckedCheckbox($(el)))
 						return true;
 
-//					alert(msg + '을(를) 선택해 주세요.');
 					gagajf.alertMessage($(el), 'select');
 					isInvalid = false;
 					return false;
@@ -248,7 +269,6 @@ var gagajf = {
 					if (!gagajf.isNull(value))
 						return true;
 
-//					alert(msg + '을(를) 선택해 주세요.');
 					gagajf.alertMessage($(el), 'select');
 					isInvalid = false;
 					return false;
@@ -353,16 +373,24 @@ var gagajf = {
 					//최대값
 					if ($(el).attr("max")) {
 						if ($(el).val() > $(el).attr("max")) {
-							mcxDialog.alert($(el).data('validName')+"은(는) 최대 "+$(el).attr("max")+"보다 작아야 합니다.");
-							$(el).focus();
+							mcxDialog.alertC($(el).data('validName') + '은(는) 최대 ' + $(el).attr("max") + '보다 작아야 합니다.', {
+								sureBtnText: "확인",
+								sureBtnClick: function() {
+									$(el).focus();
+								}
+							});
 							isInvalid = false;
 						}
 					}
 					//최소값
 					if ($(el).attr("min")) {
 						if ($(el).val() < $(el).attr("min")) {
-							mcxDialog.alert($(el).data('validName')+"은(는) 최소 "+$(el).attr("min")+"보다 커야 합니다.");
-							$(el).focus();
+							mcxDialog.alertC($(el).data('validName') + '은(는) 최소 ' + $(el).attr("min") + '보다 커야 합니다.', {
+								sureBtnText: "확인",
+								sureBtnClick: function() {
+									$(el).focus();
+								}
+							});
 							isInvalid = false;
 						}
 					}
@@ -371,16 +399,24 @@ var gagajf = {
 					//최대값
 					if ($(el).attr("max")) {
 						if ($(el).val() > $(el).attr("max")) {
-							mcxDialog.alert($(el).data('validName')+"은(는) 최대 "+$(el).attr("max")+"보다 작아야 합니다.");
-							$(el).focus();
+							mcxDialog.alertC($(el).data('validName') + '은(는) 최대 ' + $(el).attr("max") + '보다 작아야 합니다.', {
+								sureBtnText: "확인",
+								sureBtnClick: function() {
+									$(el).focus();
+								}
+							});
 							isInvalid = false;
 						}
 					}
 					//최소값
 					if ($(el).attr("min")) {
 						if ($(el).val() < $(el).attr("min")) {
-							mcxDialog.alert($(el).data('validName')+"은(는) 최소 "+$(el).attr("min")+"보다 커야 합니다.");
-							$(el).focus();
+							mcxDialog.alertC($(el).data('validName') + '은(는) 최소 ' + $(el).attr("min") + '보다 커야 합니다.', {
+								sureBtnText: "확인",
+								sureBtnClick: function() {
+									$(el).focus();
+								}
+							});
 							isInvalid = false;
 						}
 					}
@@ -389,23 +425,30 @@ var gagajf = {
 					//최대값
 					if ($(el).attr("max")) {
 						if ($(el).val() > $(el).attr("max")) {
-							mcxDialog.alert($(el).data('validName')+"은(는) 최대 "+$(el).attr("max")+"보다 작아야 합니다.");
-							$(el).focus();
+							mcxDialog.alertC($(el).data('validName') + '은(는) 최대 ' + $(el).attr("max") + '보다 작아야 합니다.', {
+								sureBtnText: "확인",
+								sureBtnClick: function() {
+									$(el).focus();
+								}
+							});
 							isInvalid = false;
 						}
 					}
 					//최소값
 					if ($(el).attr("min")) {
 						if ($(el).val() < $(el).attr("min")) {
-							mcxDialog.alert($(el).data('validName')+"은(는) 최소 "+$(el).attr("min")+"보다 커야 합니다.");
-							$(el).focus();
+							mcxDialog.alertC($(el).data('validName') + '은(는) 최소 ' + $(el).attr("min") + '보다 커야 합니다.', {
+								sureBtnText: "확인",
+								sureBtnClick: function() {
+									$(el).focus();
+								}
+							});
 							isInvalid = false;
 						}
 					}
 			}
-
-
 		});
+		
 		return isInvalid;
 	},
 
@@ -513,8 +556,12 @@ var gagajf = {
 
 				// 세션이 없다. 로그인 페이지로 이동
 				if (xhr.status == 901) {
-					mcxDialog.alert("세션이 없습니다. 로그인 페이지로 이동합니다.");
-					document.location.href = "/error/noSession";
+					mcxDialog.alertC('세션이 없습니다. 로그인 페이지로 이동합니다.', {
+						sureBtnText: "확인",
+						sureBtnClick: function() {
+							document.location.href = "/error/noSession";
+						}
+					});
 				}
 			},
 			success : function(result) {
@@ -585,8 +632,12 @@ var gagajf = {
 
 				// 세션이 없다. 로그인 페이지로 이동
 				if (xhr.status == 901) {
-					mcxDialog.alert("세션이 없습니다. 로그인 페이지로 이동합니다.");
-					document.location.href = "/error/noSession";
+					mcxDialog.alertC('세션이 없습니다. 로그인 페이지로 이동합니다.', {
+						sureBtnText: "확인",
+						sureBtnClick: function() {
+							document.location.href = "/error/noSession";
+						}
+					});
 				}
 			},
 			success : function(result) {
@@ -660,8 +711,12 @@ var gagajf = {
 
 				// 세션이 없다. 로그인 페이지로 이동
 				if (xhr.status == 901) {
-					mcxDialog.alert("세션이 없습니다. 로그인 페이지로 이동합니다.");
-					document.location.href = "/error/noSession";
+					mcxDialog.alertC('세션이 없습니다. 로그인 페이지로 이동합니다.', {
+						sureBtnText: "확인",
+						sureBtnClick: function() {
+							document.location.href = "/error/noSession";
+						}
+					});
 				}
 			},
 			success : function(result) {
@@ -737,8 +792,12 @@ var gagajf = {
 
 				// 세션이 없다. 로그인 페이지로 이동
 				if (xhr.status == 901) {
-					mcxDialog.alert("세션이 없습니다. 로그인 페이지로 이동합니다.");
-					document.location.href = "/error/noSession";
+					mcxDialog.alertC('세션이 없습니다. 로그인 페이지로 이동합니다.', {
+						sureBtnText: "확인",
+						sureBtnClick: function() {
+							document.location.href = "/error/noSession";
+						}
+					});
 				}
 			},
 			success : function(result) {
@@ -801,8 +860,12 @@ var gagajf = {
 			complete: function(xhr) {
 				// 세션이 없다. 로그인 페이지로 이동
 				if (xhr.status == 901) {
-					mcxDialog.alert("세션이 없습니다. 로그인 페이지로 이동합니다.");
-					document.location.href = "/error/noSession";
+					mcxDialog.alertC('세션이 없습니다. 로그인 페이지로 이동합니다.', {
+						sureBtnText: "확인",
+						sureBtnClick: function() {
+							document.location.href = "/error/noSession";
+						}
+					});
 				}
 			}
 		});
@@ -928,6 +991,31 @@ var gagajf = {
 		}
 
 		return "";
+	},
+	
+	/**
+	 * 데이터를 배열로 변환
+	 * 예)
+	 * 		convertToArray({cd: "KNE", cdNm: "KNE"});
+	 * @param  : data - 데이터
+	 * @param  : isCodeDisplay - 코드표시여부(true/false). default false
+	 * @author : gagamel
+	 * @since  : 2019. 6. 7
+	 */
+	convertToArray : function(data, isCodeDisplay) {
+		if (data.length == 0)
+			return [];
+
+		if (typeof(isCodeDisplay) == 'undefined')
+			isCodeDisplay = false;
+
+		var arrValue = {};
+
+		$.each(data, function(idx, item) {
+			arrValue[item.cd] = (isCodeDisplay ? '[' + item.cd + '] ' : '') + item.cdNm;
+		});
+
+		return arrValue;
 	}
 };