Merge branch 'advc' of http://yongjoon.cho@vcs.iten.co.kr:9999/hylee/offedu into advc
This commit is contained in:
commit
9b8556a370
@ -1,6 +1,9 @@
|
||||
package kcc.ve.aplct.comweb;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
@ -21,6 +24,8 @@ import kcc.let.utl.fcc.service.EgovCryptoUtil;
|
||||
import kcc.ve.adv.tngr.stngInfo.service.VEACmpltCrtfcMixService;
|
||||
import kcc.ve.adv.tngr.stngInfo.service.VEACmpltCrtfcVO;
|
||||
import kcc.ve.aplct.fndtnEnhanceTrn.service.FndtnEnhanceTrnService;
|
||||
import kcc.ve.instr.tngrVisitEdu.eduInfo.service.VEEduAplctVO;
|
||||
import kcc.ve.instr.tngrVisitEdu.eduInfo.service.VEEduMIXService;
|
||||
import kcc.ve.instr.tngrVisitEdu.instrInfo.service.VEInstrDetailService;
|
||||
import kcc.ve.instr.tngrVisitEdu.instrInfo.service.VEInstrDetailVO;
|
||||
import kcc.ve.instr.tngrVisitEdu.instrInfo.service.VEInstrMixService;
|
||||
@ -140,6 +145,10 @@ public class CrownixAjaxController {
|
||||
@Resource(name = "vEACmpltCrtfcMixService")
|
||||
private VEACmpltCrtfcMixService vEACmpltCrtfcMixService;
|
||||
|
||||
//MIX
|
||||
@Resource(name = "vEEduMIXService")
|
||||
private VEEduMIXService vEEduMIXService;
|
||||
|
||||
//강사MIX 정보
|
||||
@Resource(name="vEInstrMixService")
|
||||
private VEInstrMixService vEInstrMixService;
|
||||
@ -944,4 +953,66 @@ public class CrownixAjaxController {
|
||||
|
||||
return p_modelAndView;
|
||||
}
|
||||
|
||||
/**
|
||||
* 성인강사 결과보고 출력
|
||||
*
|
||||
*/
|
||||
@RequestMapping("/ve/aplct/adultVisitEdu/eduAplct/adultRsltRprtListAjax.do")
|
||||
public ModelAndView adultRsltRprtListAjax(
|
||||
VEEduAplctVO vEEduAplctVO
|
||||
, ModelMap model
|
||||
, HttpServletRequest request
|
||||
) throws Exception {
|
||||
|
||||
ModelAndView modelAndView = new ModelAndView();
|
||||
modelAndView.setViewName("jsonView");
|
||||
System.out.println(" vEInstrDetailVO.getRsltlist().toString() :: "+vEEduAplctVO.getRsltList().toString());
|
||||
List<VEEduAplctVO> vEEduAplctVOList = vEEduMIXService.selectAdultRsltRprtList(vEEduAplctVO);
|
||||
//복호화
|
||||
vEEduAplctVOList = egovCryptoUtil.decryptVEEduAplctVOList(vEEduAplctVOList);
|
||||
|
||||
JSONArray jsReqInfo = new JSONArray(); //신청인 정보
|
||||
|
||||
for (int i=0;i<vEEduAplctVOList.size();i++) {
|
||||
JSONObject jsDrtInfo = new JSONObject(); //전체 정보
|
||||
//장소 처리 (온라인 - 매체 , 오프라인 - 장송)
|
||||
String addr = "";
|
||||
if("10".equals(vEEduAplctVOList.get(i).getEduSlctCd())) { //온라인 교육
|
||||
if("99".equals(vEEduAplctVOList.get(i).getEduMdCd())) {
|
||||
addr = vEEduAplctVOList.get(i).getEduMd();
|
||||
}else {
|
||||
addr = vEEduAplctVOList.get(i).getEduMdCd();
|
||||
}
|
||||
}else { //오프라인 교육
|
||||
addr = vEEduAplctVOList.get(i).getAddr() + vEEduAplctVOList.get(i).getAddrDetail();
|
||||
}
|
||||
//출력일 처리
|
||||
Date currentDate = new Date();
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy.MM.dd", Locale.KOREA);
|
||||
String formattedDate = dateFormat.format(currentDate);
|
||||
|
||||
jsDrtInfo.put("data_1", vEEduAplctVOList.get(i).getLctrSbjct());
|
||||
jsDrtInfo.put("data_2", vEEduAplctVOList.get(i).getEduHopeDt());
|
||||
jsDrtInfo.put("data_3", addr);
|
||||
jsDrtInfo.put("data_4", vEEduAplctVOList.get(i).getEduTrgt());
|
||||
jsDrtInfo.put("data_5", vEEduAplctVOList.get(i).getEduPrsnl());
|
||||
jsDrtInfo.put("data_6", vEEduAplctVOList.get(i).getInstrNm());
|
||||
jsDrtInfo.put("data_7", vEEduAplctVOList.get(i).getPrfsnFld());
|
||||
jsDrtInfo.put("data_8", vEEduAplctVOList.get(i).getInsttNm());
|
||||
jsDrtInfo.put("data_d", formattedDate);
|
||||
//jsDrtInfo.put("image", "http://119.193.215.98:9989/offedu/uss/ion/pwm/getImage.do?atchFileId="+vEInstrDetailVOList.get(i).getPhtAtchFileId());
|
||||
jsDrtInfo.put("image", "http://192.168.0.12:8086/offedu/uss/ion/pwm/getImage.do?atchFileId="+vEEduAplctVOList.get(i).getAtchFileId()+"&fileSn=0");
|
||||
jsDrtInfo.put("image2", "http://192.168.0.12:8086/offedu/uss/ion/pwm/getImage.do?atchFileId="+vEEduAplctVOList.get(i).getAtchFileId()+"&fileSn=1");
|
||||
|
||||
|
||||
jsReqInfo.add(jsDrtInfo);
|
||||
|
||||
}
|
||||
|
||||
modelAndView.addObject("rslts", jsReqInfo);
|
||||
|
||||
return modelAndView;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -469,6 +469,8 @@ public class VEEduAplctVO extends ComDefaultVO implements Serializable {
|
||||
private String instrEmail; //강사이메일
|
||||
private String apptDiv; //강사구분
|
||||
|
||||
private List<String> rsltList; //결과보고 타겟ORD 목록
|
||||
private String prfsnFld; //강사 전문분야
|
||||
|
||||
|
||||
public String getSpecialWorkAllow() {
|
||||
@ -2037,6 +2039,19 @@ public class VEEduAplctVO extends ComDefaultVO implements Serializable {
|
||||
this.qustnrTmplatId = qustnrTmplatId;
|
||||
}
|
||||
|
||||
public List<String> getRsltList() {
|
||||
return rsltList;
|
||||
}
|
||||
public void setRsltList(List<String> rsltList) {
|
||||
this.rsltList = rsltList;
|
||||
}
|
||||
public String getPrfsnFld() {
|
||||
return prfsnFld;
|
||||
}
|
||||
public void setPrfsnFld(String prfsnFld) {
|
||||
this.prfsnFld = prfsnFld;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -103,4 +103,6 @@ public interface VEEduMIXService {
|
||||
List<VEEduAplctVO> selectEduCmpltCrtfcNmbrList(VEEduAplctVO vEEduAplctVO) throws Exception;
|
||||
|
||||
List<VEEduAplctVO> selectCndtnList(VEEduAplctVO paramVO);
|
||||
|
||||
List<VEEduAplctVO> selectAdultRsltRprtList(VEEduAplctVO paramVO) throws Exception;
|
||||
}
|
||||
|
||||
@ -254,5 +254,12 @@ public class VEEduMIXDAO extends EgovAbstractDAO {
|
||||
public List<VEEduAplctVO> selectCndtnList(VEEduAplctVO paramVO) {
|
||||
return (List<VEEduAplctVO>) list("VEEduMIXDAO.selectCndtnList", paramVO);
|
||||
}
|
||||
|
||||
public List<VEEduAplctVO> selectAdultRsltRprtList(VEEduAplctVO paramVO) {
|
||||
@SuppressWarnings("unchecked")
|
||||
List<VEEduAplctVO> tlist = (List<VEEduAplctVO>) list("VEEduMIXDAO.selectAdultRsltRprtList", paramVO);
|
||||
return tlist;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -226,5 +226,10 @@ public class VEEduMIXServiceImpl implements VEEduMIXService {
|
||||
@Override
|
||||
public List<VEEduAplctVO> selectCndtnList(VEEduAplctVO paramVO) {
|
||||
return vEEduMIXDAO.selectCndtnList(paramVO);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<VEEduAplctVO> selectAdultRsltRprtList(VEEduAplctVO paramVO) throws Exception{
|
||||
return vEEduMIXDAO.selectAdultRsltRprtList(paramVO);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2610,7 +2610,7 @@
|
||||
GROUP BY i.edu_aplct_ord , i.edu_chasi_ord
|
||||
),0) AS rowNo
|
||||
, e.rsdne as rsdne
|
||||
|
||||
, o.vea_rslt_rprt_ord AS veaRsltRprtOrd
|
||||
FROM ve_edu_aplct a
|
||||
, ve_edu_chasi b
|
||||
|
||||
@ -2660,7 +2660,9 @@
|
||||
AND b.edu_chasi_ord=g.edu_chasi_ord
|
||||
)
|
||||
LEFT OUTER JOIN ve_edu_instr_dstnc h
|
||||
ON b.edu_aplct_ord = h.edu_aplct_ord AND d.user_id = h.user_id
|
||||
ON b.edu_aplct_ord = h.edu_aplct_ord AND d.user_id = h.user_id
|
||||
LEFT OUTER JOIN vea_rslt_rprt o
|
||||
ON b.edu_aplct_ord = o.edu_aplct_ord
|
||||
WHERE 1=1
|
||||
AND a.edu_aplct_ord=b.edu_aplct_ord
|
||||
AND NVL(A.USE_YN, 'Y') <![CDATA[ <> ]]> 'N'
|
||||
@ -7986,4 +7988,47 @@ VALUES
|
||||
AND vad.EDU_CMPLT_CRTFC_NMBR LIKE TO_CHAR(SYSDATE, 'YYYY') || '%'; /* 현재연도로 시작하는지 확인 */
|
||||
|
||||
</select>
|
||||
|
||||
<!-- 성인 결과보고 리포트 L page -->
|
||||
<select id="VEEduMIXDAO.selectAdultRsltRprtList" parameterClass="VEEduAplctVO" resultClass="VEEduAplctVO" remapResults="true">
|
||||
/* VEEduMIXDAO.selectEduCmpltCrtfcNmbrList */
|
||||
SELECT
|
||||
a.edu_aplct_ord AS eduAplctOrd,
|
||||
a.edu_slct_cd AS eduSlctCd,
|
||||
a.edu_md_cd AS eduMdCd,
|
||||
a.edu_md AS eduMd,
|
||||
a.post AS post,
|
||||
a.addr AS addr,
|
||||
a.addr_detail AS addrDetail,
|
||||
a.edu_trgt AS eduTrgt,
|
||||
a.edu_prsnl AS eduPrsnl,
|
||||
a.instt_nm AS insttNm,
|
||||
b.edu_hope_dt AS eduHopeDt,
|
||||
b.strt_tm AS strtTm,
|
||||
b.end_tm AS endTm,
|
||||
c.lctr_sbjct AS lctrSbjct,
|
||||
c.atch_file_id AS atchFileId,
|
||||
e.instr_nm AS instrNm,
|
||||
e.blng AS blng,
|
||||
e.prfsn_fld AS prfsnFld
|
||||
FROM
|
||||
VE_EDU_APLCT a
|
||||
LEFT JOIN VE_EDU_CHASI b
|
||||
ON
|
||||
a.EDU_APLCT_ORD = b.EDU_APLCT_ORD
|
||||
LEFT JOIN VEA_RSLT_RPRT c
|
||||
ON
|
||||
a.EDU_APLCT_ORD = c.EDU_APLCT_ORD
|
||||
LEFT JOIN ve_edu_chasi_instr_asgnm d
|
||||
ON
|
||||
b.EDU_CHASI_ORD = d.EDU_CHASI_ORD
|
||||
LEFT JOIN VE_INSTR_DETAIL e
|
||||
ON
|
||||
d.USER_ID = e.USER_ID
|
||||
AND e.instr_div = '20'
|
||||
AND e.use_yn = 'Y'
|
||||
WHERE
|
||||
a.LCTR_DIV_CD = '20'
|
||||
<iterate open="(" close=")" conjunction="," property="rsltList" prepend="AND a.edu_aplct_ord IN" > #rsltList[]#</iterate>
|
||||
</select>
|
||||
</sqlMap>
|
||||
|
||||
@ -314,6 +314,7 @@
|
||||
<col style="width: auto">
|
||||
<col style="width: 12%;">
|
||||
<col style="width: 9%;">
|
||||
<col style="width: 9%;">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
@ -324,6 +325,7 @@
|
||||
<th>신청유형</th>
|
||||
<th>기관(단체)명</th>
|
||||
<th>강사이름</th>
|
||||
<th>결과보고<br>제출여부</th>
|
||||
<th>강의만족도<br>제출여부</th>
|
||||
</tr>
|
||||
</thead>
|
||||
@ -341,7 +343,7 @@
|
||||
<input name="chk" class="${list.userId}" value="${list.eduAplctOrd}@${list.eduChasiOrd}" data-phone="<c:out value='${list.clphone}' />" data-cnt="<c:out value='${list.cnt}' />"
|
||||
data-date="<c:out value='${list.eduHopeDt}' /> <c:out value='${list.strtTm}' /> ~ <c:out value='${list.endTm}' />"
|
||||
data-email="<c:out value='${list.email}' />" data-chrgnm="<c:out value='${list.chrgNm}' />" data-userId="<c:out value='${list.userId}' />"
|
||||
title="Check" type="checkbox"/>
|
||||
data-eduaplctord="<c:out value='${list.eduAplctOrd}' />" title="Check" type="checkbox"/>
|
||||
</td>
|
||||
<td onclick="fncGoDetail('${list.eduAplctOrd}','${list.eduChasiOrd}');" style="cursor:pointer">
|
||||
<fmt:parseDate value="${list.eduHopeDt}" var="eduHopeDt" pattern="yyyy.MM.dd"/>
|
||||
@ -364,6 +366,9 @@
|
||||
<td onclick="fncGoDetail('${list.eduAplctOrd}','${list.eduChasiOrd}');" style="cursor:pointer">
|
||||
<c:out value="${list.instrNm}"/>
|
||||
</td>
|
||||
<td onclick="fncGoDetail('${list.eduAplctOrd}','${list.eduChasiOrd}');" style="cursor:pointer">
|
||||
<c:if test="${empty list.veaRsltRprtOrd}">미제출</c:if><c:if test="${!empty list.veaRsltRprtOrd}">제출</c:if>
|
||||
</td>
|
||||
<td onclick="fncGoDetail('${list.eduAplctOrd}','${list.eduChasiOrd}');" style="cursor:pointer">
|
||||
<c:if test="${list.qustnrRsltCnt le 0}">미제출</c:if><c:if test="${list.qustnrRsltCnt gt 0}">제출</c:if>
|
||||
</td>
|
||||
@ -390,6 +395,7 @@
|
||||
<!-- <button type="button" class="btn_type04" onclick="fncSndSms();return false;">결과보고제출요청</button> -->
|
||||
</div>
|
||||
<div class="btn_right">
|
||||
<button type="button" class="btn_type06" onclick="chkRprtPrint(); return false;">결과보고 출력 </button>
|
||||
<button type="button" class="btn_type06" onclick="chkSendSmsEmail(); return false;">강의만족도 제출요청 </button>
|
||||
<%-- <ve:select codeId="VE0016" name="pnltyCd" id="pnltyCd" css="class='sel_type1'" --%>
|
||||
<%-- selectedValue="<c:out value='${info.eduSlctAreaCd}'/>" --%>
|
||||
@ -404,5 +410,48 @@
|
||||
|
||||
</form:form>
|
||||
|
||||
<spring:eval expression="@property['Globals.prod.islocal']" var="isLocal"/>
|
||||
<c:choose>
|
||||
<c:when test="${isLocal eq 'real'}">
|
||||
<script src="http://101.79.81.151/ReportingServer/html5/js/crownix-viewer.min.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="http://101.79.81.151/ReportingServer/html5/css/crownix-viewer.min.css">
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<script src="http://119.193.215.98:8093/ReportingServer/html5/js/crownix-viewer.min.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="http://119.193.215.98:8093/ReportingServer/html5/css/crownix-viewer.min.css">
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
<script>
|
||||
/*
|
||||
* 오버레이 방식
|
||||
*/
|
||||
function chkRprtPrint(){
|
||||
var isLocal = '${isLocal}';
|
||||
var rsltList = [];
|
||||
|
||||
// "chk" 이름을 가진 체크박스가 체크된 항목들을 순회
|
||||
$("input[name='chk']:checked").each(function() {
|
||||
var eduAplctOrdValue = $(this).data('eduaplctord');
|
||||
rsltList.push(eduAplctOrdValue);
|
||||
});
|
||||
|
||||
if (rsltList.length === 0) {
|
||||
alert("선택된 항목이 없습니다. 선택 후 다시 시도하세요.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(isLocal == 'real'){ //운영
|
||||
var viewer = new m2soft.crownix.Viewer('http://101.79.81.151/ReportingServer/service');
|
||||
viewer.hideToolbarItem(["save"]);
|
||||
viewer.openFile('adult_rslts_20240104.mrd', '/rf [http://101.79.81.151/offedu/ve/aplct/adultVisitEdu/eduAplct/adultRsltRprtListAjax.do?rsltList='+rsltList+']');
|
||||
}else{ //개발
|
||||
var viewer = new m2soft.crownix.Viewer('http://119.193.215.98:8093/ReportingServer/service');
|
||||
viewer.hideToolbarItem(["save"]);
|
||||
viewer.openFile('adult_rslts_20240104.mrd', '/rf [http://119.193.215.98:9989/offedu/ve/aplct/adultVisitEdu/eduAplct/adultRsltRprtListAjax.do?rsltList='+rsltList+']');
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -381,7 +381,7 @@
|
||||
viewer.showToolbarItem(["print_pdf"]);
|
||||
|
||||
//viewer.openFile('adult_instrs_20231107.mrd', '/rf [http://119.193.215.98:9989/offedu/ve/aplct/adultVisitEdu/eduAplct/instrDetailListAjax_v2.do?userIdList='+userIdList+']');
|
||||
viewer.openFile('adult_instrs_20231107.mrd', '/rf [http://192.168.0.32:3080/offedu/ve/aplct/adultVisitEdu/eduAplct/instrDetailListAjax_v2.do?userIdList='+userIdList+']');
|
||||
viewer.openFile('adult_instrs_20231107.mrd', '/rf [http://192.168.0.12:8086/offedu/ve/aplct/adultVisitEdu/eduAplct/instrDetailListAjax_v2.do?userIdList='+userIdList+']');
|
||||
|
||||
}
|
||||
</script>
|
||||
@ -89,7 +89,7 @@
|
||||
function linkPage(pageNo){
|
||||
var listForm = document.listForm ;
|
||||
listForm.pageIndex.value = pageNo ;
|
||||
listForm.searchKeyword.value = $('#searchKeyword').val();
|
||||
//listForm.searchKeyword.value = $('#searchKeyword').val();
|
||||
listForm.action = "<c:url value='/kccadr/oprtn/cndtnSspnIdtmt/trgtCmpltList.do'/>";
|
||||
listForm.submit();
|
||||
}
|
||||
@ -177,6 +177,13 @@
|
||||
|
||||
}
|
||||
|
||||
function fncReset(thisObj){
|
||||
var targetObj = $(thisObj).closest('.list_top').find('select,input');
|
||||
$.each(targetObj, function(){
|
||||
$(this).val('');
|
||||
});
|
||||
}
|
||||
|
||||
</script>
|
||||
<title>교육과정관리</title>
|
||||
</head>
|
||||
@ -218,15 +225,31 @@
|
||||
<p>수료자 목록</p>
|
||||
</div>
|
||||
<!-- list_top -->
|
||||
<div class="list_top search-only">
|
||||
<div class="list_top">
|
||||
<div class="list_top_1">
|
||||
<div class="util_left">
|
||||
<p>구분1</p>
|
||||
</div>
|
||||
<div class="util_right">
|
||||
<select name="searchStatus" id="searchStatus" class="sel_type1">
|
||||
<option value="trgt_nm" <c:if test="${cndtnTrgtInfoMngVO.searchStatus == 'trgt_nm' }">selected="selected"</c:if>>이름</option>
|
||||
<option value="d_birth" <c:if test="${cndtnTrgtInfoMngVO.searchStatus == 'd_birth' }">selected="selected"</c:if>>생년월일</option>
|
||||
<option value="frstRegistPnttm" <c:if test="${cndtnTrgtInfoMngVO.searchStatus == 'frstRegistPnttm' }">selected="selected"</c:if>>기간별</option>
|
||||
</select>
|
||||
|
||||
<input type="text" id="trgtNm" name="trgtNm" placeholder="이름을 입력해주세요." title="검색어 입력" class="search_input" value="<c:out value='${cndtnTrgtInfoMngVO.trgtNm}'/>">
|
||||
<button type="button" class="btn_type08" onclick="fncGoList(); return false;">검색</button>
|
||||
<button class="btn_type03" onclick="fncReset(this); return false;">초기화</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="list_top_2">
|
||||
<div class="util_left">
|
||||
<p>구분2</p>
|
||||
</div>
|
||||
<div class="util_right">
|
||||
<input type="text" id="dBirth" name="dBirth" placeholder="생년월일을 입력해 주세요. 19800102" title="검색어 입력" class="search_input" value="<c:out value='${cndtnTrgtInfoMngVO.dBirth}'/>">
|
||||
</div>
|
||||
</div>
|
||||
<div class="list_top_3">
|
||||
<div class="util_left">
|
||||
<p>구분3</p>
|
||||
</div>
|
||||
<div class="util_right">
|
||||
의뢰일:
|
||||
<div id="calendar">
|
||||
<div class="calendar_wrap">
|
||||
<input type="text" class="calendar" placeholder="시작일" title="시작일 선택" id="searchSmbtStartDt" name="searchSmbtStartDt" value="${cndtnTrgtInfoMngVO.searchSmbtStartDt}">
|
||||
@ -236,9 +259,6 @@
|
||||
<input type="text" class="calendar" placeholder="종료일" title="종료일 선택" id="searchSmbtEndDt" name="searchSmbtEndDt" value="${cndtnTrgtInfoMngVO.searchSmbtEndDt}">
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" id="searchKeyword" name="searchKeyword" placeholder="이름을 입력해주세요." title="검색어 입력" class="search_input" value="<c:out value='${cndtnTrgtInfoMngVO.searchKeyword}'/>">
|
||||
<button type="button" class="btn_type08" onclick="fncGoList(); return false;">검색</button>
|
||||
<!-- <button class="btn_type03" onclick="fncReset(this); return false;">초기화</button> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -334,7 +354,7 @@
|
||||
</tr>
|
||||
</c:forEach>
|
||||
<c:if test="${empty list}">
|
||||
<tr><td colspan="3"><spring:message code="common.nodata.msg" /></td></tr>
|
||||
<tr><td colspan="11"><spring:message code="common.nodata.msg" /></td></tr>
|
||||
</c:if>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user