sowon4187 5 лет назад
Родитель
Сommit
a2b9767aa3

+ 0 - 24
src/main/java/com/style24/front/biz/web/TsfMypageController.java

@@ -1594,30 +1594,6 @@ public class TsfMypageController extends TsfBaseController {
 
 		return mav;
 	}
-	
-	/*
-	@GetMapping("/review/create/form/{ordNo}/{ordDtlNo}/{goodsCd}/{reviewStat}")
-	public ModelAndView mypageReviewCreateForm(@PathVariable(value = "ordNo") Integer ordNo, @PathVariable(value = "ordDtlNo") Integer ordDtlNo, @PathVariable(value = "goodsCd") String goodsCd, @PathVariable(value = "reviewStat") String reviewStat, Device device) {
-		Review review = new Review();
-		ModelAndView mav = new ModelAndView();
-
-		review.setCustNo(TsfSession.getInfo().getCustNo());
-		review.setSiteCd(TscConstants.Site.STYLE24.value());
-		review.setOrdNo(ordNo);
-		review.setOrdDtlNo(ordDtlNo);
-		review.setGoodsCd(goodsCd);
-		review.setReviewStat(reviewStat);
-
-		mav.addObject("reviewStat", reviewStat);
-		mav.addObject("reviewInfo", reviewService.getReviewGoodsInfo(review));
-
-		mav.setViewName(super.getDeviceViewName("mypage/MypageReviewCreateForm"));
-
-		return mav;
-	}
-
-	*/
-	
 
 	/**
 	 * 마이페이지 리뷰 저장

+ 31 - 1
src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml

@@ -659,7 +659,6 @@
 					AND O.ORD_NO NOT IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N' AND DISP_YN = 'Y')
 					</otherwise>
 				</choose>
-				AND O.ORD_NO NOT IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N' AND DISP_YN = 'Y')
 				AND O.CUST_NO = #{custNo}
 				AND O.DISP_YN = 'Y'
 			 	AND O.SITE_CD = 'G000_10'
@@ -1052,4 +1051,35 @@
 		   ,RPL_CFM_DT = NOW()
 		WHERE CUST_NO = #{custNo}
 	</update>
+	
+	<insert id="saveReviewAttach" parameterType="ReviewAttach">
+		/* TsfReivew.saveReviewAttach */	
+		INSERT INTO TB_REVIEW_ATTACH
+		(
+		  REVIEW_SQ
+		, FILE_GB
+		, ORG_FILE_NM
+		, SYS_FILE_NM
+		, KMC_KEY
+		, KUF_KEY
+		, DEL_YN
+		, REG_NO
+		, REG_DT
+		, UPD_NO
+		, UPD_DT
+		)
+		VALUES(
+		  #{reviewSq}
+		, #{fileGb}
+		, #{orgFileNm}
+		, #{sysFileNm}
+		, #{kmcKey}
+		, #{kufKey}
+		, #{delYn}
+		, #{custNo}
+		, CURRENT_TIMESTAMP
+		, #{custNo}
+		, CURRENT_TIMESTAMP
+		)
+	</insert>
 </mapper>

+ 32 - 14
src/main/webapp/WEB-INF/views/web/mypage/MypageReviewCreateFormWeb.html

@@ -353,6 +353,11 @@
 														<li>
 															최대 10개까지 등록 가능
 														</li>
+														<!-- 210419_수정 : 텍스트 추가 -->
+														<li>
+															동영상 첨부 시 관리자 승인이 필요하여 바로 노출이 되지 않을 수 있습니다.
+														</li>
+														<!-- //210419_수정 : 텍스트 추가 -->
 													</ul>
 												</div>
 											</td>
@@ -371,7 +376,7 @@
 					<!-- // CONT-BODY -->					
 				</div>
 			</div>
-
+<script type="text/javascript" src="/ux/plugins/gaga/gaga.kollus.js"></script>
 <script src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script th:inline="javascript">
 let reviewList = [[${reviewInfo}]];
@@ -558,8 +563,21 @@ var fnChooseFile = function(obj) {
 
 	if (!gagajf.isNull(file.name)) {
 		var extension = "\.(jpg|jpeg|png)$";
-		if (!(new RegExp(extension, "i")).test(file.name)) {
-			mcxDialog.alertC('이미지는 [jpg, jpeg, png] 파일만 가능합니다.', {
+		if ((new RegExp(extension, "i")).test(file.name)) {
+			 gagajf.ajaxFileUpload('/common/file/upload?subDir=/review'
+						, file
+						, function(result) {
+							// 업로드한 파일명 설정
+							$(".pics").children().eq(0).append("<input type='hidden' name='orgFileNmArr' id='orgFileNm"+(picLength+1)+"' value='"+result.oldFileName+"'>");
+							$(".pics").children().eq(0).append("<input type='hidden' name='sysFileNmArr' id='sysFileNm"+(picLength+1)+"' value='"+result.newFileName+"'>");
+						}
+				); 
+		}else if((new RegExp("mp4", "i")).test(file.name)){
+			$(".pics").eq(0).find('removes').append("<input type='hidden' name='kufKey' id='kufKey"+(picLength+1)+"'>");
+			$(".pics").eq(0).find('removes').append("<input type='hidden' name='kmcKey' id='kmcKey"+(picLength+1)+"'>");
+			//gagaKollus.upload('Review', file, $('#kufKey'+(picLength+1)));
+		}else{
+			mcxDialog.alertC('첨부할 수 없는 파일 형식입니다.', {
 				sureBtnText: "확인",
 				sureBtnClick: function() {
 					$(obj).parent('.imgUpload').find('.removes').trigger('click');
@@ -569,25 +587,25 @@ var fnChooseFile = function(obj) {
 		}
 	}
 	// 이거 왜 안먹히지 
-	if (!gagajf.isNull(file.size) && Number(file.size) > (10 * 1000000)) {
-		mcxDialog.alertC('이미지는 최대 10MB 이하 파일만 가능합니다.', {
-			sureBtnText: "확인",
-			sureBtnClick: function() {
-				$(obj).parent('.imgUpload').find('.removes').trigger('click');
-			}
-		});
-		return false;
-	}
+//	if (!gagajf.isNull(file.size) && Number(file.size) > (10 * 1000000)) {
+//		mcxDialog.alertC('이미지는 최대 10MB 이하 파일만 가능합니다.', {
+//			sureBtnText: "확인",
+//			sureBtnClick: function() {
+//				$(obj).parent('.imgUpload').find('.removes').trigger('click');
+//			}
+//		});
+//		return false;
+//	} 
 	
 	// 파일 업로드
-	 gagajf.ajaxFileUpload('/common/file/upload?subDir=/review'
+/* 	 gagajf.ajaxFileUpload('/common/file/upload?subDir=/review'
 			, file
 			, function(result) {
 				// 업로드한 파일명 설정
 				$(".pics").children().eq(0).append("<input type='hidden' name='orgFileNmArr' id='orgFileNm"+(picLength+1)+"' value='"+result.oldFileName+"'>");
 				$(".pics").children().eq(0).append("<input type='hidden' name='sysFileNmArr' id='sysFileNm"+(picLength+1)+"' value='"+result.newFileName+"'>");
 			}
-	); 
+	);   */
 }
 
 

+ 115 - 0
src/main/webapp/ux/plugins/gaga/gaga.kollus.js

@@ -0,0 +1,115 @@
+/*
+ * Kollus video upload (https://support.catenoid.net/) Common Java Script written by gagamel.
+ *
+ * Copyright (c) 2021 gagamel
+ * Dual licensed under GPL (GPL-LICENSE.txt) licenses.
+ *
+ * $Date: 2021-04-16 $
+ * 
+ * 사용 예)
+ * 		// Kollus 동영상 업로드는 다음과 같이 처리된다.
+ * 		// 1. 동영상 업로드 URL를 조회
+ * 		//    조회 한 데이터 중에 upload_file_key 값이 나오며,
+ * 		//    DB 처리를 위해 이 값을 input hidden 변수(예, kufKey)를 만들어 설정한다.
+ * 		// 2. 동영상 업로드 URL의 upload_url로 실제 업로드가 수행된다. (uploadVideo 함수)
+ *		// 3. Kollus 어드민에 등록된 채널별 콜백URL로 업로드 결과가 보내지면, 그 데이터를 가지고 DB 처리를 한다.
+ * 		<input type="hidden" name="kufKey"/>
+ * 
+ * 		// Import할 자바스크립트 파일
+ * 		<script type="text/javascript" src="/ux/plugins/gaga/gaga.kollus.js"></script>
+ * 
+ * 		<script type="text/javascript">
+ * 			// 동영상파일 선택 시
+ * 			$('#detailForm input[name=file]').on('change', function() {
+ * 				var file = this.files[0];
+ * 				gagaKollus.upload('Goods', file, $('input[name=kufKey]'));
+ * 			});
+ *		</script>
+ */
+
+var gagaKollus = {
+	
+	/**
+	 * 업로드
+	 * @param cateNm - 카테고리명(상품:Goods, 리뷰:Review, 전시:Display). 필수
+	 * @param file - 업로드할 파일. 필수
+	 * @param callback - 콜백함수. 필수
+	 * @author gagamel
+	 * @since 2021. 4. 19
+	 */
+	upload : function(cateNm, file, tgt) {
+		// 업로드 URL 정보 얻기
+		$.ajax({
+			url: '/kollus/video/upload/url/' + cateNm,
+			method: 'POST',
+			ContentType: 'application/x-www-forurlencoded',
+		}).always(function (data, status, xhr) {
+			// Do nothing
+		}).done(function (data) {
+//			console.log('====================== RESPONSE =======================\n');
+//			console.log(JSON.stringify(data, null, 4) + '\n');
+			
+			// 업로드파일키 설정
+			$(tgt).val(data.result['upload_file_key']);
+			
+			// 동영상 업로드
+			gagaKollus.uploadVideo(data, file);
+		}).fail(function (xhr, status, err) {
+			console.log('====================== Fail =======================\n');
+			console.log('xhr: ', xhr + '\n');
+			console.log('status: ', status);
+			console.log('err: ', err);
+		});
+	},
+	
+	/**
+	 * 동영상 업로드
+	 * @param uploadUrlInfo - 업로드 URL 정보
+	 * @param file - 업로드할 파일
+	 * @author gagamel
+	 * @since 2021. 4. 19
+	 */
+	uploadVideo : function(uploadUrlInfo, file) {
+		var uploadUrl = uploadUrlInfo.result['upload_url'];
+		
+		var uploadData = new FormData();
+		uploadData.append("upload-file", file);
+		uploadData.append('disable_alert', '1'); // 결과 메시지를 alert 미출력
+		uploadData.append('redirection_scope', 'no'); // 업로드 완료 후 redirect할 domain scope을 지정(outer → window.top.location을 이용, inner → window.location을 이용, no → redirect 하지 않음)
+		uploadData.append('accept', 'application/json');
+
+		$.ajax({
+			url: uploadUrl,
+			method: 'POST',
+			mimeType: 'multipart/form-data',
+			cache: false,
+			contentType: false,
+			processData: false,
+			data: uploadData,
+			timeout: 0
+		}).always(function (data, status, xhr) {
+			// Do nothing
+		}).done(function (data) {
+			console.log('====================== RESPONSE =======================\n');
+			console.log(JSON.stringify(data, null, 4) + '\n');
+		}).fail(function (xhr, status, err) {
+			console.log('====================== Fail =======================\n');
+			console.log('xhr: ', xhr + '\n');
+			console.log('status: ', status);
+			console.log('err: ', err);
+		});
+		
+		// 진행상태 확인
+//		let progressUrl = uploadUrlInfo.result['progress_url'];
+//		let uploadInterval = setInterval(function() {
+//			$.get(progressUrl, function (data) {
+//				console.log(data);
+//				$('.progress-bar').css('width', data.result.progress + '%');
+//				if (data.result.progress >= 100) {
+//					clearInterval(uploadInterval);
+//				}
+//			});
+//		}, 1000);
+	}
+	
+}