Procházet zdrojové kódy

Merge branch 'develop' into eskim

eskim před 5 roky
rodič
revize
792d2de3cb

+ 3 - 1
style24.admin/.gitignore

@@ -1 +1,3 @@
-/target/
+target/
+.settings/
+.classpath

+ 43 - 0
style24.admin/src/main/java/com/style24/admin/biz/dao/TsaFaqDao.java

@@ -0,0 +1,43 @@
+package com.style24.admin.biz.dao;
+
+import java.util.Collection;
+
+import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.Faq;
+
+/**
+ * FAQ Dao
+ * 
+ * @author gagamel
+ * @since 2020. 11. 3
+ */
+@ShopDs
+public interface TsaFaqDao {
+
+	/**
+	 * FAQ 목록
+	 * @param faq - FAQ 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 11. 3
+	 */
+	Collection<Faq> getFaqList(Faq faq);
+
+	/**
+	 * FAQ 등록/수정
+	 * @param faq - FAQ 정보
+	 * @author gagamel
+	 * @since 2020. 11. 3
+	 */
+	void saveFaq(Faq faq);
+
+	/**
+	 * FAQ 상세
+	 * @param faqSq - FAQ일련번호
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 11. 3
+	 */
+	Faq getFaq(Integer faqSq);
+
+}

+ 66 - 0
style24.admin/src/main/java/com/style24/admin/biz/service/TsaFaqService.java

@@ -0,0 +1,66 @@
+package com.style24.admin.biz.service;
+
+import java.util.Collection;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.style24.admin.biz.dao.TsaFaqDao;
+import com.style24.persistence.domain.Faq;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * FAQ Service
+ *
+ * @author gagamel
+ * @since 2020. 11. 3
+ */
+@Service
+@Slf4j
+public class TsaFaqService {
+
+	@Autowired
+	private TsaFaqDao faqDao;
+
+	/**
+	 * FAQ 목록
+	 * @param faq - FAQ 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 11. 3
+	 */
+	public Collection<Faq> getFaqList(Faq faq) {
+		return faqDao.getFaqList(faq);
+	}
+
+	/**
+	 * FAQ 등록/수정
+	 * @param faq - FAQ 정보
+	 * @author gagamel
+	 * @since 2020. 11. 3
+	 */
+	@Transactional("shopTxnManager")
+	public void saveFaq(Faq faq) {
+		// 내용 유무 확인
+		if (StringUtils.isNotBlank(faq.getAnswer())) {
+			faq.setAnswer(faq.getAnswer().replaceAll("&lt;", "<").replaceAll("&gt;", ">"));
+		}
+
+		faqDao.saveFaq(faq);
+	}
+
+	/**
+	 * FAQ 상세
+	 * @param faqSq - FAQ일련번호
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 11. 3
+	 */
+	public Faq getFaq(Integer faqSq) {
+		return faqDao.getFaq(faqSq);
+	}
+
+}

+ 87 - 0
style24.admin/src/main/java/com/style24/admin/biz/web/TsaBoardController.java

@@ -11,14 +11,18 @@ import org.springframework.web.bind.annotation.PathVariable;
 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.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 
+import com.style24.admin.biz.service.TsaFaqService;
 import com.style24.admin.biz.service.TsaNoticeService;
 import com.style24.admin.biz.service.TsaRendererService;
 import com.style24.admin.support.controller.TsaBaseController;
 import com.style24.admin.support.env.TsaConstants;
+import com.style24.admin.support.security.session.TsaSession;
 import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.persistence.domain.Faq;
 import com.style24.persistence.domain.Notice;
 
 import lombok.extern.slf4j.Slf4j;
@@ -49,6 +53,9 @@ public class TsaBoardController extends TsaBaseController {
 	@Value("${upload.default.target.path}")
 	private String uploadTargetPath;
 
+	@Autowired
+	private TsaFaqService faqService;
+
 	/**
 	 * 공지사항 화면
 	 * @param noticeType - 공지유형(10:사이트공지, 20:내부공지)
@@ -152,4 +159,84 @@ public class TsaBoardController extends TsaBaseController {
 		return super.ok(message.getMessage("SUCC_0003"));
 	}
 
+	/**
+	 * FAQ 화면
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 11. 3
+	 */
+	@GetMapping("/faq/form")
+	public ModelAndView faqForm() {
+		ModelAndView mav = new ModelAndView();
+
+		// 사이트
+		mav.addObject("siteList", rendererService.getAvailCommonCodeList("G000"));
+
+		// FAQ유형
+		mav.addObject("faqTypeList", rendererService.getAvailCommonCodeList("G046"));
+
+		mav.setViewName("board/FaqForm");
+
+		return mav;
+	}
+
+	/**
+	 * FAQ 목록
+	 * @param faq - FAQ 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 11. 3
+	 */
+	@PostMapping("/faq/list")
+	@ResponseBody
+	public Collection<Faq> getFaqList(@RequestBody Faq faq) {
+		return faqService.getFaqList(faq);
+	}
+
+	/**
+	 * FAQ 등록/수정
+	 * @param faq - FAQ 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 11. 3
+	 */
+	@PostMapping("/faq/save")
+	@ResponseBody
+	public GagaResponse saveFaq(@RequestBody Faq faq) {
+		faq.setRegNo(TsaSession.getInfo().getUserNo());
+		faq.setUpdNo(TsaSession.getInfo().getUserNo());
+		faqService.saveFaq(faq);
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+
+	/**
+	 * FAQ 상세
+	 * @param mode - 모드(N:신규, U:상세)
+	 * @param faqSq - FAQ일련번호
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 11. 3
+	 */
+	@GetMapping("/faq/detail/form")
+	public ModelAndView faqDetailForm(@RequestParam(value = "mode") String mode, @RequestParam(value = "faqSq", required = false) Integer faqSq) {
+		ModelAndView mav = new ModelAndView();
+
+		// 사이트
+		mav.addObject("siteList", rendererService.getAvailCommonCodeList("G000"));
+
+		// FAQ유형
+		mav.addObject("faqTypeList", rendererService.getAvailCommonCodeList("G046"));
+
+		// 모드 값
+		mav.addObject("mode", mode);
+
+		if ("U".equals(mode)) {
+			mav.addObject("faqInfo", faqService.getFaq(faqSq));
+		}
+
+		mav.setViewName("board/FaqDetailForm");
+
+		return mav;
+	}
+
 }

+ 2 - 0
style24.admin/src/main/java/com/style24/admin/biz/web/TsaEnvsetController.java

@@ -184,6 +184,8 @@ public class TsaEnvsetController extends TsaBaseController {
 
 	/**
 	 * 약관관리상세 화면
+	 * @param mode - 모드(N:신규, U:상세)
+	 * @param clauseSq - 약관일련번호
 	 * @return
 	 * @author gagamel
 	 * @since 2020. 10. 29

+ 29 - 0
style24.admin/src/main/java/com/style24/persistence/domain/Faq.java

@@ -0,0 +1,29 @@
+package com.style24.persistence.domain;
+
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * FAQ Domain
+ *
+ * @author gagamel
+ * @since 2020. 11. 3
+ */
+@SuppressWarnings("serial")
+@Data
+public class Faq extends TscBaseDomain {
+
+	private Integer faqSq;		// FAQ일련번호
+	private String siteCd;		// 사이트코드
+	private String siteNm;		// 사이트명
+	private String faqType;		// FAQ유형
+	private String question;	// 질문
+	private String answer;		// 답변
+	private String useYn;		// 사용여부
+	private int readCnt;		// 조회수
+
+	// 검색조건
+	private String searchTxt;	//검색어
+
+}

+ 90 - 0
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaFaq.xml

@@ -0,0 +1,90 @@
+<?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.TsaFaqDao">
+
+	<!-- FAQ 목록 -->
+	<select id="getFaqList" parameterType="Faq" resultType="Faq">
+		/* TsaFaq.getFaqList */
+		SELECT FAQ_SQ                                       /*FAQ일련번호(SEQ_FAQ sequence)*/
+		     , SITE_CD                                      /*사이트코드(공통코드G000)*/
+		     , FAQ_TYPE                                     /*FAQ유형(공통코드G046)*/
+		     , QUESTION                                     /*질문*/
+		     , ANSWER                                       /*답변*/
+		     , USE_YN                                       /*사용여부(Y:사용)*/
+		     , READ_CNT                                     /*조회수*/
+		     , FN_GET_USER_NM(REG_NO)             AS REG_NM
+		     , DATE_FORMAT(REG_DT,'%Y%m%d%H%i%S') AS REG_DT
+		     , FN_GET_USER_NM(UPD_NO)             AS UPD_NM
+		     , DATE_FORMAT(UPD_DT,'%Y%m%d%H%i%S') AS UPD_DT
+		FROM   TB_FAQ
+		WHERE  SITE_CD = #{siteCd}
+		<if test='faqType != null and faqType !=""'>
+		AND    FAQ_TYPE = #{faqType}
+		</if>
+		<if test='useYn != null and useYn !=""'>
+		AND    USE_YN = #{useYn}
+		</if>
+		<if test="searchTxt != null and searchTxt !=''">
+		AND    (
+		        LOWER(QUESTION) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
+		        OR
+		        LOWER(ANSWER) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
+		       )
+		</if>
+	</select>
+
+	<!-- FAQ 등록/수정 -->
+	<insert id="saveFaq" parameterType="Faq">
+		/* TsaFaq.saveFaq */
+		INSERT INTO TB_FAQ (
+		       FAQ_SQ
+		     , SITE_CD
+		     , FAQ_TYPE
+		     , QUESTION
+		     , ANSWER
+		     , USE_YN
+		     , READ_CNT
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		)
+		VALUES (
+		       #{faqSq}
+		     , #{siteCd}
+		     , #{faqType}
+		     , #{question}
+		     , #{answer}
+		     , #{useYn}
+		     , 0
+		     , #{regNo}
+		     , NOW()
+		     , #{updNo}
+		     , NOW()
+		)
+		ON DUPLICATE KEY UPDATE
+		       SITE_CD = #{siteCd}
+		     , FAQ_TYPE = #{faqType}
+		     , QUESTION = #{question}
+		     , ANSWER = #{answer}
+		     , USE_YN = #{useYn}
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = NOW()
+	</insert>
+
+	<!-- FAQ 상세 -->
+	<select id="getFaq" parameterType="Integer" resultType="Faq">
+		/* TsaFaq.getFaq */
+		SELECT FAQ_SQ                                    /*FAQ일련번호*/
+		     , SITE_CD                                   /*사이트코드*/
+		     , FN_GET_CODE_NM('G000',SITE_CD) AS SITE_NM /*사이트명*/
+		     , FAQ_TYPE                                  /*유형*/
+		     , QUESTION                                  /*질문*/
+		     , ANSWER                                    /*답변*/
+		     , USE_YN                                    /*사용여부*/
+		     , READ_CNT                                  /*조회수*/
+		FROM   TB_FAQ
+		WHERE  FAQ_SQ = #{faqSq}
+	</select>
+
+</mapper>

+ 187 - 0
style24.admin/src/main/webapp/WEB-INF/views/board/FaqDetailForm.html

@@ -0,0 +1,187 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : FaqDetailForm.html
+ * @desc    : FAQ 상세 팝업 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.10.29   gagamel     최초 작성
+ *******************************************************************************
+ -->
+<div class="modalPopup" data-width="1200" id="popupFaq">
+	<div class="panelStyle">
+		<!-- TITLE -->
+		<div class="panelTitle">
+			<strong th:text="${'FAQ ' + (mode == 'N' ? '등록' : '상세')}">FAQ 상세</strong>
+			<button type="button" class="close" onclick="uifnPopupClose('popupFaq');"><em class="fa fa-times"></em></button>
+		</div>
+		<!-- //TITLE -->
+		
+		<!-- CONTENT -->
+		<div class="panelContent" th:if="${mode == 'N'}">
+			<form id="faqDetailForm" name="faqDetailForm" action="#" th:action="@{'/board/faq/save'}" th:method="post">
+				<input type="hidden" name="mode" th:value="${mode}"/>
+				
+				<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/>
+					</colgroup>
+					<tbody>
+						<tr>
+							<th>FAQ번호</th>
+							<td>
+								<input type="text" name="faqSq" maxlength="20" placeholder="자동생성" readonly="readonly"/>
+							</td>
+							<th>사이트<em class="required" title="필수"></em></th>
+							<td>
+								<select name="siteCd" required="required">
+									<option th:if="${siteList}" th:each="oneData, status : ${siteList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+								</select>
+							</td>
+							<th>FAQ유형<em class="required" title="필수"></em></th>
+							<td>
+								<select name="faqType" required="required">
+									<option th:if="${faqTypeList}" th:each="oneData, status : ${faqTypeList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+								</select>
+							</td>
+							<th>사용여부<em class="required" title="필수"></em></th>
+							<td>
+								<label class="rdoBtn"><input type="radio" name="useYn" value="Y" checked="checked"/>Yes</label>
+								<label class="rdoBtn"><input type="radio" name="useYn" value="N"/>No</label>
+							</td>
+						</tr>
+						<tr>
+							<th>질문<em class="required" title="필수"></em></th>
+							<td colspan="7">
+								<input type="text" name="question" maxlength="200" required="required" data-valid-name="질문"/>
+							</td>
+						</tr>
+						<tr>
+							<th>답변<em class="required" title="필수"></em></th>
+							<td colspan="7">
+								<textarea class="textareaR4" id="answer" name="answer" data-valid-name="답변"></textarea>
+							</td>
+						</tr>
+					</tbody>
+				</table>
+			</form>
+		</div>
+		
+		<div class="panelContent" th:if="${mode == 'U'}">
+			<form id="faqDetailForm" name="faqDetailForm" action="#" th:action="@{'/board/faq/save'}" th:method="post" th:object="${faqInfo}">
+				<input type="hidden" name="mode" th:value="${mode}"/>
+				
+				<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/>
+					</colgroup>
+					<tbody>
+						<tr>
+							<th>FAQ번호</th>
+							<td>
+								<input type="text" name="faqSq" maxlength="20" placeholder="자동생성" readonly="readonly" th:field="*{faqSq}"/>
+							</td>
+							<th>사이트<em class="required" title="필수"></em></th>
+							<td>
+								<select name="siteCd" required="required" th:field="*{siteCd}">
+									<option th:if="${siteList}" th:each="oneData, status : ${siteList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|" th:selected="${siteCd == oneData.cd}"></option>
+								</select>
+							</td>
+							<th>FAQ유형<em class="required" title="필수"></em></th>
+							<td>
+								<select name="faqType" required="required" th:field="*{faqType}">
+									<option th:if="${faqTypeList}" th:each="oneData, status : ${faqTypeList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|" th:selected="${faqType == oneData.cd}"></option>
+								</select>
+							</td>
+							<th>사용여부<em class="required" title="필수"></em></th>
+							<td>
+								<label class="rdoBtn"><input type="radio" name="useYn" value="Y" th:field="*{useYn}"/>Yes</label>
+								<label class="rdoBtn"><input type="radio" name="useYn" value="N" th:field="*{useYn}"/>No</label>
+							</td>
+						</tr>
+						<tr>
+							<th>질문<em class="required" title="필수"></em></th>
+							<td colspan="5">
+								<input type="text" name="question" placeholder="" maxlength="200" required="required" data-valid-name="질문" th:field="*{question}"/>
+							</td>
+							<th>조회수</th>
+							<td><input type="text" name="readCnt" class="w50 aR" readonly="readonly" th:field="*{readCnt}"/></td>
+						</tr>
+						<tr>
+							<th>답변<em class="required" title="필수"></em></th>
+							<td colspan="7">
+								<textarea class="textareaR4" id="answer" name="answer" data-valid-name="답변" th:field="*{answer}"></textarea>
+							</td>
+						</tr>
+					</tbody>
+				</table>
+			</form>
+		</div>
+		<!-- //CONTENT -->
+
+		<!-- 버튼 배치 영역 -->
+		<ul class="panelBar">
+			<li class="right">
+				<button type="button" class="btn btn-info btn-lg" id="btnSaveFaq">저장</button>
+			</li>
+		</ul>
+		<!-- //버튼 배치 영역 -->
+	</div>
+</div>
+
+<script type="text/javascript" src="/ux/plugins/summernote/summernote.js?v=2020102902"></script>
+<script type="text/javascript" src="/ux/plugins/gaga/gaga.summernote.js?v=20201030"></script>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	// 저장
+	$('#btnSaveFaq').on('click', function() {
+		// 입력 값 체크
+		if (!gagajf.validation('#faqDetailForm'))
+			return false;
+		
+		if (gagajf.isNull($('#answer').val())) {
+			mcxDialog.alert('답변을 입력해 주세요.');
+			return false;
+		}
+		
+		mcxDialog.confirm("저장하시겠습니까?", {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				gagajf.ajaxFormSubmit($('#faqDetailForm').prop('action'), '#faqDetailForm', function() {
+					uifnPopupClose('popupFaq');
+					$('#btnSearch').trigger('click');
+				});
+			}
+		});
+	});
+	
+	$(document).ready(function() {
+		// Create a summernote
+		let snOptions = gagaSn.getToolbarOptions();
+		gagaSn.createSummernote(snOptions, '#answer');
+	});
+/*]]>*/
+</script>
+
+</html>

+ 167 - 0
style24.admin/src/main/webapp/WEB-INF/views/board/FaqForm.html

@@ -0,0 +1,167 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : FaqForm.html
+ * @desc    : FAQ Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.11.03   gagamel     최초 작성
+ *******************************************************************************
+ -->
+	<div id="main">
+		<!-- 메인타이틀 영역 -->
+		<div class="main-title">
+		</div>
+		<!-- //메인타이틀 영역 -->
+		
+		<!-- 메뉴 설명 -->
+		<div class="infoBox menu-desc">
+		</div>
+		<!-- //메뉴 설명 -->
+		
+		<!-- 검색조건 영역 -->
+		<div class="panelStyle">
+			<form id="searchForm" name="searchForm" action="#" th:action="@{'/board/faq/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+				<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/>
+					</colgroup>
+					<tr>
+						<th>사이트</th>
+						<td>
+							<select name="siteCd">
+								<option th:if="${siteList}" th:each="oneData, status : ${siteList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+							</select>
+						</td>
+						<th>FAQ유형</th>
+						<td>
+							<select name="faqType">
+								<option value="">[선택]</option>
+								<option th:if="${faqTypeList}" th:each="oneData, status : ${faqTypeList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+						</td>
+						<th>검색어</th>
+						<td>
+							<input type="text" name="searchTxt" placeholder="질문 or 내용" maxlength="50"/>
+						</td>
+						<th>사용여부</th>
+						<td>
+							<select name="useYn">
+								<option value="">[전체]</option>
+								<option value="Y">[Y] Yes</option>
+								<option value="N">[N] No</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-info btn-lg" onclick="fnOpenFaqPopup('N');">등록</button>
+				</li>
+			</ul>
+			<!-- //버튼 배치 영역 -->
+			
+			<div id="gridList" style="width: 100%; height: 570px" class="ag-theme-balham"></div>
+		</div>
+		<!-- //리스트 영역 -->
+	</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	let siteList = gagajf.convertToArray([[${siteList}]]);
+	let faqTypeList = gagajf.convertToArray([[${faqTypeList}]]);
+	
+	// specify the columns
+	let columnDefs = [
+		{
+			headerName: "No", width: 60, cellClass: 'text-center',
+			valueGetter: function(params) { return params.node.rowIndex + 1 }
+		},
+		{
+			headerName: "사이트", field: "siteCd", width: 150, cellClass: 'text-center',
+			valueGetter: function (params) { return gagaAgGrid.lookupValue(siteList, params.data.siteCd); }
+		},
+		{
+			headerName: "FAQ유형", field: "faqType", width: 150, cellClass: 'text-center',
+			valueGetter: function (params) { return gagaAgGrid.lookupValue(faqTypeList, params.data.faqType); }
+		},
+		{
+			headerName: "질문", field: "question", width: 400,
+			cellRenderer: function(params) { return '<a href="javascript:void(0);">' + params.value + '</a>'; }
+		},
+		{
+			headerName: "조회수", field: "readCnt", width: 100, cellClass: 'text-center',
+			cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); }
+		},
+		{headerName: "사용여부", field: "useYn", width: 80, cellClass: 'text-center'},
+		{headerName: "등록자", field: "regNm" , width: 100, cellClass: 'text-center'},
+		{
+			headerName: "등록일시", field: "regDt", width: 150, cellClass: 'text-center',
+			cellRenderer: function(params) { return gagaAgGrid.toDateTimeFormat(params.value); }
+		},
+		{headerName: "수정자", field: "updNm", width: 100, cellClass: 'text-center'},
+		{
+			headerName: "수정일시", field: "updDt", width: 150, cellClass: 'text-center',
+			cellRenderer: function(params) { return gagaAgGrid.toDateTimeFormat(params.value); }
+		}
+	];
+	
+	// Get GridOptions
+	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+	
+	// 셀 클릭 이벤트
+	gridOptions.onCellClicked = function(event) {
+		if (event.colDef.field != 'question')
+			return;
+		
+		fnOpenFaqPopup('U', event.data.faqSq);
+	}
+	
+	// 조회
+	$('#btnSearch').on('click', function() {
+		// Fetch data
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+	});
+	
+	// 등록/상세 팝업
+	var fnOpenFaqPopup = function(mode, faqSq) {
+		var actionUrl = '/board/faq/detail/form' + '?mode=' + mode;
+		if (!gagajf.isNull(faqSq)) actionUrl += '&faqSq=' + faqSq;
+		cfnOpenModalPopup(actionUrl, 'popupFaq');
+	}
+	
+	$(document).ready(function() {
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridList', gridOptions);
+	});
+/*]]>*/
+</script>
+
+</html>

+ 0 - 4
style24.core/.gitignore

@@ -1,7 +1,3 @@
-<<<<<<< HEAD
-/target/
-=======
 target/
 .settings/
 .classpath
->>>>>>> refs/heads/eskim

+ 0 - 4
style24.scm/.gitignore

@@ -1,7 +1,3 @@
-<<<<<<< HEAD
-/target/
-=======
 target/
 .settings/
 .classpath
->>>>>>> refs/heads/eskim