Jelajahi Sumber

1:1문의, 상품문의 추가

gagamel 5 tahun lalu
induk
melakukan
028f9054c5

+ 18 - 3
src/main/java/com/style24/front/biz/web/TsfCallcenterController.java

@@ -182,7 +182,7 @@ public class TsfCallcenterController extends TsfBaseController {
 		// 1:1문의 건수 정보
 		mav.addObject("qnaCountInfo", counselService.getOneToOneQnaCountInfo());
 
-		mav.setViewName("customer/OneToOneQnaForm");
+		mav.setViewName(super.getDeviceViewName("callcenter/OneToOneQnaForm"));
 
 		return mav;
 	}
@@ -241,6 +241,21 @@ public class TsfCallcenterController extends TsfBaseController {
 		return super.ok(message.getMessage("SUCC_0003"));
 	}
 
+	/**
+	 * 1:1문의 등록 화면
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 2. 19
+	 */
+	@GetMapping("/onetoone/qna/register/form")
+	public ModelAndView oneToOneQnaRegisterForm() {
+		ModelAndView mav = new ModelAndView();
+
+		mav.setViewName(super.getDeviceViewName("callcenter/OneToOneQnaRegisterForm"));
+
+		return mav;
+	}
+
 	/**
 	 * 1:1문의 상세 화면
 	 * @param counselSq - 상담일련번호
@@ -255,7 +270,7 @@ public class TsfCallcenterController extends TsfBaseController {
 		// 1:1문의 상세
 		mav.addObject("qnaDetailInfo", counselService.getOneToOneQna(counselSq));
 
-		mav.setViewName("customer/OneToOneQnaDetailForm");
+		mav.setViewName(super.getDeviceViewName("callcenter/OneToOneQnaDetailForm"));
 
 		return mav;
 	}
@@ -315,7 +330,7 @@ public class TsfCallcenterController extends TsfBaseController {
 		// 상품문의 건수 정보
 		mav.addObject("qnaCountInfo", counselService.getGoodsQnaCountInfo());
 
-		mav.setViewName("customer/GoodsQnaForm");
+		mav.setViewName(super.getDeviceViewName("callcenter/GoodsQnaForm"));
 
 		return mav;
 	}

+ 4 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfCounsel.xml

@@ -290,6 +290,10 @@
 		     , A.SMS_REQ_YN                                       /*SMS(알림톡)답변수신여부*/
 		     , A.REL_GOODS_CD                                     /*관련상품코드*/
 		     , G.GOODS_NM                                         /*상품명*/
+		     , A.QUEST_TITLE                                      /*문의제목*/
+		     , A.QUEST_CONTENT                                    /*질문내용*/
+		     , A.ANS_TITLE                                        /*답변제목*/
+		     , A.ANS_CONTENT                                      /*답변내용*/
 		     , A.ANS_STAT                                         /*답변상태*/
 		     , FN_GET_CODE_NM('G060',ANS_STAT)     AS ANS_STAT_NM /*답변상태명*/
 		     , DATE_FORMAT(A.ANS_DT,'%Y.%m.%d')    AS ANS_DT      /*답변일자*/

+ 2 - 20
src/main/webapp/WEB-INF/views/web/callcenter/FaqFormWeb.html

@@ -31,25 +31,7 @@
 			<div class="content faq">
 				<div class="cont_body">
 					<!-- CONT-BODY -->
-					<div class="lnb">
-						<div class="lnb_tit">
-							<h2>고객센터</h2>
-						</div>
-						<div class="lnb_list">
-							<ul id="callcenterLnbList">
-								<li><a href="javascript:void(0);" class="on">FAQ</a></li>
-								<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA);">1:1문의</a></li>
-								<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_GOODS_QNA);">상품문의</a></li>
-								<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_NOTICE);">공지</a></li>
-							</ul>
-						</div>
-						<div class="lnb_foot">
-							<ul>
-								<li><p>고객센터 운영안내</p></li>
-								<li><p>1544-5336</p></li>
-								<li><p>평일 09:00~18:00<br>토,일,공휴일 휴무</p></li>
-							</ul>
-						</div>
+					<div class="lnb" id="callcenterLnb">
 					</div>
 					<div class="cont">
 						<div>
@@ -156,7 +138,7 @@
 /*<![CDATA[*/
 	$(document).ready(function() {
 		// 고객센터 LNB 설정
-		fnSetCallcenterLnbList(1);
+		fnSetCallcenterLnb(1);
 		
 		fnGetList();
 	});

+ 188 - 0
src/main/webapp/WEB-INF/views/web/callcenter/GoodsQnaFormWeb.html

@@ -0,0 +1,188 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="web/common/layout/CallcenterLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : GoodsQnaFormWeb.html
+ * @desc    : 상품문의 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.02.19   gagamel     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+	<div id="container" class="container cs"> 
+		<div class="breadcrumb"> 
+			<ul>
+				<li class="bread_home"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MAIN);">홈</a></li>
+				<li class="bread_2depth"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_FAQ);">고객센터</a></li>
+				<li class="bread_3depth">상품문의</li>
+			</ul> 
+		</div>
+		<div class="wrap">
+			<div class="content faq">
+				<div class="cont_body">
+					<!-- CONT-BODY -->
+					<div class="lnb" id="callcenterLnb">
+					</div>
+					<div class="cont">
+						<div>
+							<div class="sec_head">
+								<h3>1:1 문의</h3>
+							</div>
+							<div class="sec_body">
+								<div class="history_wrap clear">
+									<div class="hist_status">
+										<ul>
+											<li>
+												<span>총 문의</span>
+												<a href="javascript:void(0);" onclick="" th:text="${qnaCountInfo.totCnt}">12</a>
+											</li>
+											<li>
+												<span>답변 완료</span>
+												<a href="javascript:void(0);" onclick="" th:text="${qnaCountInfo.ansCnt}">8</a>
+											</li>
+											<li>
+												<span>처리 중</span>
+												<a href="javascript:void(0);" onclick="" th:text="${qnaCountInfo.ingCnt}" class="doing">0</a>
+											</li>
+										</ul>
+									</div>
+									<div class="txt">
+										<p>상품에 관련된 문의 내용을 확일할 수 있습니다.<br/>상품별 문의는 해당 상품 페이지에서 등록 가능하며 답변이 달린<br/>내용은 고객센터 또는 해당 상품페이지에서 확인 가능합니다.</p>
+									</div>
+								</div>
+								<div class="ui_row" id="divQna"> <!-- 데이터 없을시 클래스 nodata 추가 -->
+									<!-- list -->
+									<div class="foldGroup case1">
+										<ul id="ulQna">
+										</ul>
+									</div>
+									<!-- //list -->
+								</div>
+								<div class="ui_foot">
+									<div class="ui_row">
+										<ul class="pageNav">
+										</ul>
+									</div>
+								</div>
+							</div>
+						</div>
+					</div>
+					<!-- // CONT-BODY -->
+				</div>
+			</div>
+		</div>
+	</div>
+	<!-- // container -->
+	
+	<form id="qnaForm" name="qnaForm" action="#" th:action="@{'/callcenter/goods/qna/list'}">
+		<input type="hidden" name="pageNo" value ="1"/>
+		<input type="hidden" name="pageSize" value ="10"/>
+	</form>
+
+<script src="/ux/plugins/gaga/gaga.paging.js"></script>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	$(document).ready(function() {
+		// 고객센터 LNB 설정
+		fnSetCallcenterLnb(3);
+		
+		fnGetList();
+	});
+	
+	let fnGetList = function() {
+		// Initialize a pagination
+		gagaPaging.init('qnaForm', fnGetListCallback, 'pageNav', 10);
+
+		// Load data
+		gagaPaging.load(1);
+	}
+	
+	var fnGetListCallback = function(result) {
+		$('#ulQna').html('');
+
+		// 목록
+		if (result.dataList != null && result.dataList.length > 0) {
+			$.each(result.dataList, function(idx, item) {
+				let tag = '<li>\n';
+				tag += '	<div class="fold_head">\n';
+				tag += '		<a href="javascript:void(0)">\n';
+				tag += '			<div>\n';
+				tag += '				<span class="fold_state ' + (item.ansStat == "G060_10" ? "doing" : "done") + '">' + item.ansStatNm + '</span>\n'; //답변완료 : done / 처리중 : doing
+				tag += '				<div class="fold_tit">\n';
+				tag += '					<span class="prod">' + item.goodsNm + ' ' + item.relGoodsCd + '</span>\n';
+				tag += '					<span>' + item.questTitle + '</span>\n';
+				tag += '				</div>\n';
+				tag += '				<span class="data">' + item.questDt + '</span>\n';
+				tag += '			</div>\n';
+				tag += '		</a>\n';
+				tag += '	</div>\n';
+				tag += '	<div class="fold_cont" style="display: none;">\n';
+				tag += '		<div class="fold_detail">\n'; //문의 내용
+				tag += '			<div>\n';
+				tag += '				<p>' + item.questContent + '</p>\n';
+				tag += '			</div>\n';
+				
+				if (item.ansStat == 'G060_10') { // 처리중일때
+					tag += '			<button type="button" class="btn btn_default btn_del" onclick="fnDeleteQna(' + item.counselSq + ');"><span><i class="ico ico_trash"></i>삭제</span></button>\n';
+				}
+				
+				tag += '		</div>\n';
+				
+				if (item.ansStat == 'G060_20') { // 답변완료 상태일 때
+					tag += '		<div class="fold_answer">\n'; //문의 답변
+					tag += '			<div class="answer_head">답변이 등록되었습니다.</div>\n';
+					tag += '			<div class="answer_body">' + item.ansContent + '</div>\n';
+					tag += '			<span class="data">' + item.ansDt + '</span>\n';
+					tag += '		</div>\n';
+				}
+				
+				tag += '	</div>\n';
+				tag += '</li>\n';
+				
+				$('#ulQna').append(tag);
+			});
+		} else {
+			let tag = '<li>내역이 없습니다.</li>\n';
+			$('#ulQna').append(tag);
+			$('#divQna').addClass('nodata');
+		}
+
+		// Create pagination
+		gagaPaging.createPagination(result.paging.pageable);
+	}
+	
+	// 삭제
+	let fnDeleteQna = function(counselSq) {
+		mcxDialog.confirm("등록된 내용을 삭제하시겠습니까?", {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				let params = new Object();
+				params.counselSq = counselSq;
+				
+				var jsonData = JSON.stringify(params);
+				gagajf.ajaxJsonSubmit('/callcenter/goods/qna/delete'
+						, jsonData
+						, function() {
+							fnGetList();
+						});
+			}
+		});
+	}
+/*]]>*/
+</script>
+
+</th:block>
+
+</body>
+</html>

+ 2 - 20
src/main/webapp/WEB-INF/views/web/callcenter/NoticeFormWeb.html

@@ -31,25 +31,7 @@
 			<div class="content faq">
 				<div class="cont_body">
 					<!-- CONT-BODY -->
-					<div class="lnb">
-						<div class="lnb_tit">
-							<h2>고객센터</h2>
-						</div>
-						<div class="lnb_list">
-							<ul id="callcenterLnbList">
-								<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_FAQ);">FAQ</a></li>
-								<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA);">1:1문의</a></li>
-								<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_GOODS_QNA);">상품문의</a></li>
-								<li><a href="javascript:void(0);" class="on">공지</a></li>
-							</ul>
-						</div>
-						<div class="lnb_foot">
-							<ul>
-								<li><p>고객센터 운영안내</p></li>
-								<li><p>1544-5336</p></li>
-								<li><p>평일 09:00~18:00<br>토,일,공휴일 휴무</p></li>
-							</ul>
-						</div>
+					<div class="lnb" id="callcenterLnb">
 					</div>
 					<div class="cont">
 						<div>
@@ -91,7 +73,7 @@
 /*<![CDATA[*/
 	$(document).ready(function() {
 		// 고객센터 LNB 설정
-		fnSetCallcenterLnbList(4);
+		fnSetCallcenterLnb(4);
 		
 		fnGetList();
 	});

+ 210 - 0
src/main/webapp/WEB-INF/views/web/callcenter/OneToOneQnaFormWeb.html

@@ -0,0 +1,210 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="web/common/layout/CallcenterLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : OneToOneQnaFormWeb.html
+ * @desc    : 1:1문의 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.02.19   gagamel     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+	<div id="container" class="container cs"> 
+		<div class="breadcrumb"> 
+			<ul>
+				<li class="bread_home"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MAIN);">홈</a></li>
+				<li class="bread_2depth"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_FAQ);">고객센터</a></li>
+				<li class="bread_3depth">1:1문의</li>
+			</ul> 
+		</div>
+		<div class="wrap">
+			<div class="content faq">
+				<div class="cont_body">
+					<!-- CONT-BODY -->
+					<div class="lnb" id="callcenterLnb">
+					</div>
+					<div class="cont">
+						<div>
+							<div class="sec_head">
+								<h3>1:1 문의</h3>
+							</div>
+							<div class="sec_body">
+								<div class="history_wrap clear">
+									<div class="hist_status">
+										<ul>
+											<li>
+												<span>총 문의</span>
+												<a href="javascript:void(0);" onclick="" th:text="${qnaCountInfo.totCnt}">12</a>
+											</li>
+											<li>
+												<span>답변 완료</span>
+												<a href="javascript:void(0);" onclick="" th:text="${qnaCountInfo.ansCnt}">8</a>
+											</li>
+											<li>
+												<span>처리 중</span>
+												<a href="javascript:void(0);" onclick="" th:text="${qnaCountInfo.ingCnt}" class="doing">0</a>
+											</li>
+										</ul>
+									</div>
+									<div class="txt">
+										<p>궁금하신 점은 우측 문의하기를 통해 남겨주세요.<br/>문의를 남겨 주시면 24시간 이내(토/일/공휴일 제외)에<br/> 답변 드릴 수 있도록 최선을 다 하겠습니다.</p>
+									</div>
+									<div class="fr btn_area">
+										<button type="button" class="btn" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA_REG);"><span>1:1 문의하기</span></button>
+									</div>
+								</div>
+								<div class="ui_row" id="divQna"> <!-- 데이터 없을시 클래스 nodata 추가 -->
+									<!-- list -->
+									<div class="foldGroup case1">
+										<ul id="ulQna">
+										</ul>
+									</div>
+									<!-- //list -->
+								</div>
+								<div class="ui_foot">
+									<div class="ui_row">
+										<ul class="pageNav">
+										</ul>
+									</div>
+								</div>
+							</div>
+						</div>
+					</div>
+					<!-- // CONT-BODY -->
+				</div>
+			</div>
+		</div>
+	</div>
+	<!-- // container -->
+	
+	<form id="qnaForm" name="qnaForm" action="#" th:action="@{'/callcenter/onetoone/qna/list'}">
+		<input type="hidden" name="pageNo" value ="1"/>
+		<input type="hidden" name="pageSize" value ="10"/>
+	</form>
+
+<script src="/ux/plugins/gaga/gaga.paging.js"></script>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	$(document).ready(function() {
+		// 고객센터 LNB 설정
+		fnSetCallcenterLnb(2);
+		
+		fnGetList();
+	});
+	
+	let fnGetList = function() {
+		// Initialize a pagination
+		gagaPaging.init('qnaForm', fnGetListCallback, 'pageNav', 10);
+
+		// Load data
+		gagaPaging.load(1);
+	}
+	
+	var fnGetListCallback = function(result) {
+		$('#ulQna').html('');
+
+		// 목록
+		if (result.dataList != null && result.dataList.length > 0) {
+			$.each(result.dataList, function(idx, item) {
+				let tag = '<li>\n';
+				tag += '	<div class="fold_head">\n';
+				tag += '		<a href="javascript:void(0)">\n';
+				tag += '			<div>\n';
+				tag += '				<span class="fold_state ' + (item.ansStat == "G060_10" ? "doing" : "done") + '">' + item.ansStatNm + '</span>\n'; //답변완료 : done / 처리중 : doing
+				tag += '				<div class="fold_tit">\n';
+// 				tag += '					<span class="prod">클립더블포켓 롱패딩점퍼(털안감) MOW2FZPM04</span>\n';
+				tag += '					<span>' + item.questTitle + '</span>\n';
+				tag += '				</div>\n';
+				tag += '				<span class="data">' + item.questDt + '</span>\n';
+				tag += '			</div>\n';
+				tag += '		</a>\n';
+				tag += '	</div>\n';
+				tag += '	<div class="fold_cont" style="display: none;">\n';
+				tag += '		<div class="fold_detail">\n'; //문의 내용
+				tag += '			<div>\n';
+				tag += '				<p>' + item.questContent + '</p>\n';
+				
+				if (!gagajf.isNull(item.sysFileNm1) || !gagajf.isNull(item.sysFileNm2)) {
+					tag += '				<p class="img_group">\n';
+					
+					if (!gagajf.isNull(item.sysFileNm1)) {
+						tag += '					<span class="thumb_pic">\n';
+						tag += '						<img src="' + _uploadImageUrl + '/counsel/' + item.sysFileNm1 + '" alt="" onerror="this.src=\'/image/bg_profile.png\'">\n';
+						tag += '					</span>\n';
+					}
+					
+					if (!gagajf.isNull(item.sysFileNm2)) {
+						tag += '					<span class="thumb_pic">\n';
+						tag += '						<img src="' + _uploadImageUrl + '/counsel/' + item.sysFileNm2 + '" alt="" onerror="this.src=\'/image/bg_profile.png\'">\n';
+						tag += '					</span>\n';
+					}
+					
+					tag += '				</p>\n';
+				}
+				
+				tag += '			</div>\n';
+				
+				if (item.ansStat == 'G060_10') { // 처리중일때
+					tag += '			<button type="button" class="btn btn_default btn_del" onclick="fnDeleteQna(' + item.counselSq + ');"><span><i class="ico ico_trash"></i>삭제</span></button>\n';
+				}
+				
+				tag += '		</div>\n';
+				
+				if (item.ansStat == 'G060_20') { // 답변완료 상태일 때
+					tag += '		<div class="fold_answer">\n'; //문의 답변
+					tag += '			<div class="answer_head">답변이 등록되었습니다.</div>\n';
+					tag += '			<div class="answer_body">' + item.ansContent + '</div>\n';
+					tag += '			<span class="data">' + item.ansDt + '</span>\n';
+					tag += '		</div>\n';
+				}
+				
+				tag += '	</div>\n';
+				tag += '</li>\n';
+				
+				$('#ulQna').append(tag);
+			});
+		} else {
+			let tag = '<li>내역이 없습니다.</li>\n';
+			$('#ulQna').append(tag);
+			$('#divQna').addClass('nodata');
+		}
+
+		// Create pagination
+		gagaPaging.createPagination(result.paging.pageable);
+	}
+	
+	// 삭제
+	let fnDeleteQna = function(counselSq) {
+		mcxDialog.confirm("등록된 내용을 삭제하시겠습니까?", {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				let params = new Object();
+				params.counselSq = counselSq;
+				
+				var jsonData = JSON.stringify(params);
+				gagajf.ajaxJsonSubmit('/callcenter/onetoone/qna/delete'
+						, jsonData
+						, function() {
+							fnGetList();
+						});
+			}
+		});
+	}
+/*]]>*/
+</script>
+
+</th:block>
+
+</body>
+</html>

+ 6 - 4
src/main/webapp/ux/style24_link.js

@@ -40,10 +40,12 @@ const _PAGE_SECEDE = _frontUrl + "/mypage/customer/secede/form";				// 마이페
 //== 기획전 ==/
 
 //== 고객센터 ==/
-const _PAGE_FAQ = _frontUrl + "/callcenter/faq/form";				// 고객센터 > FAQ
-const _PAGE_ONETOONE_QNA = _frontUrl + "/mypage/onetoone/qna/form";	// 고객센터 > 1:1문의
-const _PAGE_GOODS_QNA = _frontUrl + "/mypage/goods/qna/form";		// 고객센터 > 상품문의
-const _PAGE_NOTICE = _frontUrl + "/callcenter/notice/form";			// 고객센터 > 공지사항
+const _PAGE_FAQ = _frontUrl + "/callcenter/faq/form";									// 고객센터 > FAQ
+const _PAGE_ONETOONE_QNA = _frontUrl + "/callcenter/onetoone/qna/form";					// 고객센터 > 1:1문의
+const _PAGE_ONETOONE_QNA_REG = _frontUrl + "/callcenter/onetoone/qna/register/form";	// 고객센터 > 1:1문의등록
+const _PAGE_ONETOONE_QNA_DTL = _frontUrl + "/callcenter/onetoone/qna/detail/form";		// 고객센터 > 1:1문의상세
+const _PAGE_GOODS_QNA = _frontUrl + "/callcenter/goods/qna/form";						// 고객센터 > 상품문의
+const _PAGE_NOTICE = _frontUrl + "/callcenter/notice/form";								// 고객센터 > 공지사항
 
 //== 기타 ==/