gagamel 5 лет назад
Родитель
Сommit
b0d56db44d

+ 7 - 14
style24.admin/src/main/java/com/style24/admin/biz/service/TsaClauseService.java

@@ -48,28 +48,21 @@ public class TsaClauseService {
 	}
 
 	/**
-	 * 약관 생성
+	 * 약관 생성/수정
 	 * @param clause - 약관 정보
 	 * @author gagamel
 	 * @since 2020. 10. 29
 	 */
 	@Transactional("shopTxnManager")
-	public void createClause(Clause clause) {
+	public void saveClause(Clause clause) {
 		clause.setRegNo(TsaSession.getInfo().getUserNo());
 		clause.setUpdNo(TsaSession.getInfo().getUserNo());
-		clauseDao.createClause(clause);
-	}
 
-	/**
-	 * 약관 수정
-	 * @param clause - 약관 정보
-	 * @author gagamel
-	 * @since 2020. 10. 29
-	 */
-	@Transactional("shopTxnManager")
-	public void updateClause(Clause clause) {
-		clause.setUpdNo(TsaSession.getInfo().getUserNo());
-		clauseDao.updateClause(clause);
+		if (clause.getMode().equals("N")) {
+			clauseDao.createClause(clause);
+		} else {
+			clauseDao.updateClause(clause);
+		}
 	}
 
 }

+ 4 - 18
style24.admin/src/main/java/com/style24/admin/biz/web/TsaEnvsetController.java

@@ -206,30 +206,16 @@ public class TsaEnvsetController extends TsaBaseController {
 	}
 
 	/**
-	 * 약관 생성
+	 * 약관 생성/수정
 	 * @param clause - 약관 정보
 	 * @return
 	 * @author gagamel
 	 * @since 2020. 10. 29
 	 */
-	@PostMapping("/clause/detail/create")
+	@PostMapping("/clause/save")
 	@ResponseBody
-	public GagaResponse createClause(@RequestBody Clause clause) {
-		clauseService.createClause(clause);
-		return super.ok(message.getMessage("SUCC_0001"));
-	}
-
-	/**
-	 * 약관 수정
-	 * @param clause - 약관 정보
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 10. 29
-	 */
-	@PostMapping("/clause/detail/update")
-	@ResponseBody
-	public GagaResponse updateClause(@RequestBody Clause clause) {
-		clauseService.updateClause(clause);
+	public GagaResponse saveClause(@RequestBody Clause clause) {
+		clauseService.saveClause(clause);
 		return super.ok(message.getMessage("SUCC_0001"));
 	}
 

+ 10 - 6
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaClause.xml

@@ -12,9 +12,9 @@
 		     , CLAUSE_CONTENT
 		     , DATE_FORMAT(EFFECT_DT,'%Y%m%d')    AS EFFECT_DT
 		     , DISP_YN
-		     , REG_NO
+		     , FN_GET_USER_NM(REG_NO)             AS REG_NM
 		     , DATE_FORMAT(REG_DT,'%Y%m%d%H%i%S') AS REG_DT
-		     , UPD_NO
+		     , FN_GET_USER_NM(UPD_NO)             AS UPD_NM
 		     , DATE_FORMAT(UPD_DT,'%Y%m%d%H%i%S') AS UPD_DT
 		FROM   TB_CLAUSE
 		WHERE  SITE_CD = #{siteCd}
@@ -32,10 +32,11 @@
 		     , CLAUSE_TYPE
 		     , CLAUSE_TITLE
 		     , CLAUSE_CONTENT
+		     , DATE_FORMAT(EFFECT_DT,'%Y%m%d')    AS EFFECT_DT
 		     , DISP_YN
-		     , REG_NO
+		     , FN_GET_USER_NM(REG_NO)             AS REG_NM
 		     , DATE_FORMAT(REG_DT,'%Y%m%d%H%i%S') AS REG_DT
-		     , UPD_NO
+		     , FN_GET_USER_NM(UPD_NO)             AS UPD_NM
 		     , DATE_FORMAT(UPD_DT,'%Y%m%d%H%i%S') AS UPD_DT
 		FROM   TB_CLAUSE
 		WHERE  CLAUSE_SQ = #{clauseSq}
@@ -50,10 +51,11 @@
 		     , CLAUSE_TYPE
 		     , CLAUSE_TITLE
 		     , CLAUSE_CONTENT
+		     , EFFECT_DT
 		     , DISP_YN
-		     , REG_ID
+		     , REG_NO
 		     , REG_DT
-		     , UPD_ID
+		     , UPD_NO
 		     , UPD_DT
 		)
 		VALUES (
@@ -62,6 +64,7 @@
 		     , #{clauseType}
 		     , #{clauseTitle}
 		     , #{clauseContent}
+		     , STR_TO_DATE(#{effectDt},'%Y-%m-%d')
 		     , #{dispYn}
 		     , #{regNo}
 		     , NOW()
@@ -78,6 +81,7 @@
 		     , CLAUSE_TYPE = #{clauseType}
 		     , CLAUSE_TITLE = #{clauseTitle}
 		     , CLAUSE_CONTENT = #{clauseContent}
+		     , EFFECT_DT = STR_TO_DATE(#{effectDt},'%Y-%m-%d')
 		     , DISP_YN = #{dispYn}
 		     , UPD_NO = #{updNo}
 		     , UPD_DT = NOW()

+ 80 - 26
style24.admin/src/main/webapp/WEB-INF/views/envset/ClauseDetailForm.html

@@ -14,7 +14,7 @@
  * 1.0  2020.10.29   gagamel     최초 작성
  *******************************************************************************
  -->
-<div class="modalPopup" data-width="900" id="popupUser">
+<div class="modalPopup" data-width="900" id="popupClause">
 	<div class="panelStyle">
 		<!-- TITLE -->
 		<div class="panelTitle">
@@ -61,24 +61,84 @@
 							</td>
 						</tr>
 						<tr>
-							<th>표시여부</th>
+							<th>노출여부</th>
 							<td colspan="3">
 								<input type="hidden" name="dispYn" value="Y"/>
-								<label class="chkBox"><input type="checkbox" name="chkDispYn" value="Y" checked="checked"/>표시</label>
-								<span class="cBlue"><i class="fa fa-info-circle" aria-hidden="true"></i> 표시여부를 체크할 경우, 현재 약관으로 노출됩니다.</span>
+								<label class="chkBox"><input type="checkbox" name="chkDispYn" value="Y" checked="checked"/>노출</label>
+								<span class="cBlue"><i class="fa fa-info-circle" aria-hidden="true"></i> 노출여부를 체크할 경우, 현재 약관으로 노출됩니다.</span>
 							</td>
 						</tr>
 						<tr>
 							<th>약관 제목<em class="required" title="필수"></em></th>
 							<td colspan="3">
-								<input type="text" name="clauseTitle" placeholder="" maxlength="100"/>
+								<input type="text" name="clauseTitle" placeholder="" maxlength="100" data-valid-name="약관 제목"/>
 							</td>
 						</tr>
 						<tr>
 							<th>약관 내용<em class="required" title="필수"></em></th>
 							<td colspan="3">
-								<div id="summernote"></div>
-<!-- 								<textarea class="textareaR4" name="clauseContent" style="height:350px;"></textarea> -->
+								<textarea class="textareaR4 summernote" name="clauseContent" data-valid-name="약관 내용"></textarea>
+							</td>
+						</tr>
+					</tbody>
+				</table>
+			</form>
+		</div>
+		
+		<div class="panelContent" th:if="${mode == 'U'}">
+			<form id="clauseDetailForm" name="clauseDetailForm" action="#" th:action="@{'/envset/clause/save'}" th:method="post" th:object="${clauseInfo}">
+				<input type="hidden" name="mode" th:value="${mode}"/>
+				
+				<table class="frmStyle" aria-describedby="상세폼">
+					<colgroup>
+						<col style="width:15%;"/>
+						<col style="width:25%;"/>
+						<col style="width:15%;"/>
+						<col style="width:45%;"/>
+					</colgroup>
+					<tbody>
+						<tr>
+							<th>약관번호</th>
+							<td>
+								<input type="text" name="clauseSq" maxlength="20" placeholder="자동생성" readonly="readonly" th:field="*{clauseSq}"/>
+							</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>
+						</tr>
+						<tr>
+							<th>약관유형<em class="required" title="필수"></em></th>
+							<td>
+								<select name="clauseType" required="required" th:field="*{clauseType}">
+									<option th:if="${clauseTypeList}" th:each="oneData, status : ${clauseTypeList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|" th:selected="${clauseType == oneData.cd}"></option>
+								</select>
+							</td>
+							<th>시행일자<em class="required" title="필수"></em></th>
+							<td>
+								<input type="text" class="schDate w80" name="effectDt" maxlength="10" required="required" data-valid-type="calendar" data-valid-name="시행일자" th:field="*{effectDt}"/>
+							</td>
+						</tr>
+						<tr>
+							<th>노출여부</th>
+							<td colspan="3">
+								<input type="hidden" name="dispYn" value="Y" th:value="${clauseInfo.dispYn}"/>
+								<label class="chkBox"><input type="checkbox" name="chkDispYn" value="Y" th:checked="${clauseInfo.dispYn == 'Y'}"/>노출</label>
+								<span class="cBlue"><i class="fa fa-info-circle" aria-hidden="true"></i> 노출여부를 체크할 경우, 현재 약관으로 노출됩니다.</span>
+							</td>
+						</tr>
+						<tr>
+							<th>약관 제목<em class="required" title="필수"></em></th>
+							<td colspan="3">
+								<input type="text" name="clauseTitle" placeholder="" maxlength="100" data-valid-name="약관 제목" th:field="*{clauseTitle}"/>
+							</td>
+						</tr>
+						<tr>
+							<th>약관 내용<em class="required" title="필수"></em></th>
+							<td colspan="3">
+								<textarea class="textareaR4 summernote" name="clauseContent" data-valid-name="약관 내용" th:field="*{clauseContent}"></textarea>
 							</td>
 						</tr>
 					</tbody>
@@ -97,33 +157,27 @@
 	</div>
 </div>
 
-<script src="/ux/plugins/summernote/bootstrap.min.js"></script><!-- summernote : default  -->
-<script src="/ux/plugins/summernote/summernote.js"></script><!-- summernote : default  -->
-<script src="/ux/plugins/summernote/summernote-ext-print.js"></script><!-- summernote : 인쇄 -->
-<script src="/ux/plugins/summernote/summernote-emoji.js"></script><!-- summernote : 이모티콘 -->
+<script type="text/javascript" src="/ux/plugins/summernote/summernote.js"></script>
 <script th:inline="javascript">
 /*<![CDATA[*/
-// 	let seOptions = gagaSe.getEditorOptions();
 	let mode = [[${mode}]];
 	
 	// 초기화
 	let fnInitialize = function() {
-		let clauseInfo = [[${clauseInfo}]];
-		
-		$('#clauseDetailForm input[name=clauseSq]').val(clauseInfo.clauseSq);
-		$('#clauseDetailForm select[name=siteCd]').val(clauseInfo.siteCd);
-		$('#clauseDetailForm select[name=clauseType]').val(clauseInfo.clauseType);
-		$('#clauseDetailForm input[name=effectDt]').val(clauseInfo.effectDt.toDate("YYYYMMDD").format("YYYY-MM-DD"));
-		$('#clauseDetailForm input[name=clauseTitle]').val(clauseInfo.clauseTitle);
+// 		let clauseInfo = [[${clauseInfo}]];
 		
-		if (clauseInfo.dispYn == 'Y') {
-			$('#clauseDetailForm input:checkbox[name=chkDispYn]').attr('checked', true);
-		} else {
-			$("#clauseDetailForm input:checkbox[name=chkDispYn]").attr('checked', false);
-		}
+// 		$('#clauseDetailForm input[name=clauseSq]').val(clauseInfo.clauseSq);
+// 		$('#clauseDetailForm select[name=siteCd]').val(clauseInfo.siteCd);
+// 		$('#clauseDetailForm select[name=clauseType]').val(clauseInfo.clauseType);
+// 		$('#clauseDetailForm input[name=effectDt]').val(clauseInfo.effectDt.toDate("YYYYMMDD").format("YYYY-MM-DD"));
+// 		$('#clauseDetailForm input[name=clauseTitle]').val(clauseInfo.clauseTitle);
+// 		$('#clauseDetailForm textarea[name=clauseContent]').val(clauseInfo.clauseContent);
 		
-// 		gagaSe.createSmartEditor(seOptions, 'clauseContent');
-// 		gagaSe.setContents('clauseContent', clauseInfo.clauseContent);
+// 		if (clauseInfo.dispYn == 'Y') {
+// 			$('#clauseDetailForm input:checkbox[name=chkDispYn]').attr('checked', true);
+// 		} else {
+// 			$("#clauseDetailForm input:checkbox[name=chkDispYn]").attr('checked', false);
+// 		}
 	}
 	
 	// 저장

+ 3 - 2
style24.admin/src/main/webapp/WEB-INF/views/envset/ClauseForm.html

@@ -99,7 +99,9 @@
 				return '<a href="javascript:void(0);">' + params.value + '</a>';
 			}
 		},
-		{headerName: "표시여부", field: "useYn", width: 100, cellClass: 'text-center'}
+		{headerName: "노출여부", field: "dispYn", width: 100, cellClass: 'text-center'},
+		{headerName: "등록자", field: "regNm", width: 100, cellClass: 'text-center'},
+		{headerName: "수정자", field: "updNm", width: 100, cellClass: 'text-center'}
 	];
 	
 	// Get GridOptions
@@ -123,7 +125,6 @@
 	var fnOpenClausePopup = function(mode, clauseSq) {
 		var actionUrl = '/envset/clause/detail/form' + '?mode=' + mode;
 		if (!gagajf.isNull(clauseSq)) actionUrl += '&clauseSq=' + clauseSq;
-		console.log('actionUrl: ' + actionUrl);
 		cfnOpenModalPopup(actionUrl, 'popupClause');
 	}
 	

+ 0 - 35
style24.admin/src/main/webapp/ux/js/admin.ui.js

@@ -696,41 +696,6 @@ $(document).ready(function(){
 	//Date Picker End-----------------------------------------------------------
 
 
-	//SUMMERNOTE
-	if ( $(document).find("#summernote").length > 0 ) {
-		document.emojiSource = 'ux/summernote/pngs/'; //이모티콘 경로
-		$(document).find("#summernote").summernote({
-			disableDragAndDrop:true, //drag&drop 사용안함
-			placeholder: '내용을 입력하세요',
-			height: 300, //에디터 기본 높이
-			lang : 'ko-KR', //기본 언어 인코딩
-			fontNames: ['Malgun Gothic', 'HY견고딕', 'Helvetica', 'Verdana', 'Arial', 'Arial Black'], //폰트 스타일
-			fontNamesIgnoreCheck: ['Malgun Gothic'], //기본폰트 스타일
-			focus: true, //로드시 에디터창에 포커싱
-			fontSizes: ['8','9','10','11','12','13','14','15','16','17','18','19','20','24','30','36'],
-			toolbar: [
-				['style', ['style']],
-				['Font Style', ['fontname']],
-				['fontsize', ['fontsize']],
-				['height', ['height']],
-				['style', ['bold', 'italic', 'underline','clear']],
-				['font', ['strikethrough', 'superscript', 'subscript']],
-				['color', ['color']],
-				['para', ['ul', 'ol', 'paragraph']],
-				['Insert', ['table']],
-				['Insert', ['link', 'picture', 'video']],
-				['misc', ['emoji', 'print']],
-				['code', ['fullscreen', 'codeview', 'help']]
-			],
-			callbacks: {
-				onImageUpload: function(files, editor, welEditable) { //이미지 업로드
-					for (var i = files.length - 1; i >= 0; i--) {
-						sendFile(files[i], this);
-					}
-				}
-			}
-		});
-	};