관리자 회원상세 팝업

최근문자전송 리스트 팝업 상세 리스트 조회 화면 추가
This commit is contained in:
rosewiper 2024-09-24 18:29:19 +09:00
parent ec6550dbc0
commit 39a9da9e50
3 changed files with 468 additions and 2 deletions

View File

@ -1958,6 +1958,57 @@ public class EgovUserManageController {
return "cmm/uss/umt/EgovGnrlUserSelectMsgDataListPop";
}
/**
* 사용자정보 발송 문자내역 상세(Msg Group List) 리스트 팝업 띄우기
* @param selectedUserId -> uniqId 상세조회대상 사용자아이디
* @param userSearchVO 검색조건
* @return cmm/uss/umt/EgovGnrlUserSelectUpdtPopup
* @param model 화면모델
* @throws Exception
*/
@RequestMapping("/uss/umt/user/EgovGnrlselectedUserMsgDataDetailListAjax.do")
public String EgovGnrlselectedUserMsgDataDetailListAjax(@ModelAttribute("searchVO") MjonMsgVO searchVO,
HttpServletRequest request,
Model model) throws Exception {
searchVO.setUserId(searchVO.getUserId());
//회원정보 불러오기
MberManageVO mberManageVO = mberManageService.selectMber(searchVO.getUserId());
/** pageing */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(searchVO.getPageIndex());
paginationInfo.setRecordCountPerPage(searchVO.getPageUnit());
paginationInfo.setPageSize(searchVO.getPageSize());
searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
searchVO.setLastIndex(paginationInfo.getLastRecordIndex());
searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
if("".equals(searchVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
searchVO.setSearchSortCnd("msgGroupId");
searchVO.setSearchSortOrd("desc");
}
List<MjonMsgVO> resultList = new ArrayList<MjonMsgVO>();
resultList = mjonMsgService.selectMjonMsgGroupDtList(searchVO);
model.addAttribute("resultList", resultList);
model.addAttribute("searchVO", searchVO);
//문자발송 실패 결과 코드정보 리스트 불러오기
MjonMsgResultCodeVO mjonMsgResultCodeVO = new MjonMsgResultCodeVO();
List<MjonMsgResultCodeVO> resultMsgCodeList = mjonMsgService.selectMsgResultCodeAllList(mjonMsgResultCodeVO);
model.addAttribute("resultMsgCodeList", resultMsgCodeList);
paginationInfo.setTotalRecordCount(resultList.size() > 0 ? ((MjonMsgVO)resultList.get(0)).getTotCnt() : 0);
model.addAttribute("paginationInfo", paginationInfo);
return "cmm/uss/umt/EgovGnrlUserSelectMsgDataDetailListPop";
}
/**
* @Method Name : EgovGnrlselectedUserKakaoDataListAjax

View File

@ -0,0 +1,397 @@
<%--
Class Name : EgovGnrlUserSelectMsgDataListPop.jsp
Description : 사용자 문자전송리스트(전체)
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2022.07.01 우영두 최초 생성
author : 우영두
since : 2022.07.01
Copyright (C) 2009 by MOPAS All right reserved.
--%>
<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%>
<% pageContext.setAttribute("newLineChar", "\r\n"); %>
<% pageContext.setAttribute("newLineChar2", "\n"); %>
<%
response.setHeader("Cache-Control","no-store");
response.setHeader("Pragma","no-cache");
response.setDateHeader("Expires",0);
if (request.getProtocol().equals("HTTP/1.1")) response.setHeader("Cache-Control", "no-cache");
%>
<!DOCTYPE html>
<html lang="ko">
<head>
<title>사용자 문자전송 관리</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="/pb/css/reset.css">
<link rel="stylesheet" href="/pb/css/common.css">
<link rel="stylesheet" href="/pb/css/content.css">
<link rel="stylesheet" href="/pb/css/popup.css">
<style>
.pageCont .tbType1 tbody tr td.sms_detail {overflow:inherit;text-overflow:inherit;position:relative;}
.pageCont .tbType1 tbody tr td.sms_detail p {overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.pageCont .tbType1 tbody tr td.sms_detail .sms_detail_hover {overflow:hidden;text-overflow:ellipsis;display:none;word-wrap:break-word;-webkit-line-clamp:20;-webkit-box-orient:vertical;position:absolute;left:-5px;top:45px;width:calc(100% + 150px);padding:15px;line-height:20px;white-space:normal;border:1px solid #e5e5e5;background:#fff;border-radius:5px;box-sizing:border-box;box-shadow:0px 3px 10px 0px rgb(0 0 0 / 0.2);z-index:1;font-size:14px;text-align:left;}
.pageCont .tbType1 tbody tr td.sms_detail .sms_detail_hover:after {content:'';position:absolute;left:0;bottom:0;width:100%;height:10px;background:#fff;border-radius:0 0 5px 5px;}
.pageCont .tbType1 tbody tr td.sms_detail:hover .sms_detail_hover {display:-webkit-box;}
</style>
<script type="text/javascript" src="/pb/js/jquery-3.5.0.js"></script>
<script type="text/javascript" src="/pb/js/common.js"></script>
<script type="text/javascript" src="<c:url value='/js/EgovMultiFile.js'/>"></script>
<script type="text/javascript" src="<c:url value='/js/EgovCalPopup.js'/>"></script>
<script type="text/javascript" src="<c:url value='/js/ncms_common.js' />"></script>
<script type="text/javaScript" language="javascript">
function fn_search(){
var searchKeyword = $('input[name=searchKeyword]').val();
$('input[name=searchKeyword]').val(searchKeyword.replace(/(\s*)/g, ""));
linkPage(1);
}
function linkPage(pageNo){
var listForm = document.listForm ;
listForm.pageIndex.value = pageNo ;
listForm.action = "<c:url value='/uss/umt/user/EgovGnrlselectedUserMsgDataDetailListAjax.do'/>";
listForm.submit();
}
function fnCheckAll() {
if( $("#checkAll").is(':checked') ){
$("input[name=del]").prop("checked", true);
}else{
$("input[name=del]").prop("checked", false);
}
}
/* 체크된 메인배너 목록 삭제 */
function fn_delete(){
if($("input[name=del]:checked").length == 0){
alert("선택된 항목이 없습니다.");
return;
}
if (confirm("해당 문자를 삭제하시겠습니까?")){
frm = document.listForm;
frm.action = "<c:url value='/uss/ion/msg/SendMsgDelete.do' />";
frm.submit();
}
}
/* 수정 화면*/
function fn_modify(msgId){
var frm = document.modiForm ;
frm.msgId.value = msgId ;
//frm.submit();
}
/* 수정 화면*/
function fn_detail_list(msgGroupId){
var frm = document.modiForm ;
frm.msgGroupId.value = msgGroupId ;
frm.submit();
}
//엑셀 다운로드
function sendMsgDtlExcelDownload(){
var frm = document.listForm;
frm.method = "post";
frm.action = "<c:url value='/uss/ion/msg/SendMsgDtlExcelDownload.do'/>";
frm.submit();
}
function goList(){
var form = document.msgListForm;
form.action="/uss/umt/user/EgovGnrlselectedUserMsgDataListAjax.do";
form.submit();
}
</script>
<style>
.calBtn{
border: none;
background-color: transparent !important;
background-image: url(/pb/img/common/calendarIcon.png);
background-repeat: no-repeat;
width: 25px;
height: 25px !important;
vertical-align: middle;
margin-left: -38px !important;
margin-top: -2px !important;
cursor: pointer;
}
.pageCont {width:100%;padding:50px 30px;box-sizing:border-box;}
.tableWrapTotal {margin:0 0 20px;}
.tableWrapTotal .tbType1 thead tr:first-child {border-width:1px;}
.tableWrapTotal .tbType1 thead tr th {border-left:1px solid #e6e6e6;}
.tableWrapTotal .tbType1 thead tr th:first-child {border-left:0 none;}
.tableWrapTotal .tbType1 thead tr.content th {font-size:14px;}
.tableWrapTotal .tbType1 tbody tr td {border-left:1px solid #e6e6e6;}
.tableWrapTotal .tbType1 tbody tr td:first-child {border-left:0 none;}
.listSerch .select {height:42px;vertical-align:top;}
.pageCont .tbType1 tbody tr td.msg_detail {overflow:inherit;}
.pageCont .tbType1 tbody tr td.msg_detail a {overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;}
/* .layer_msg_wrap {position:relative;} */
.layer_msg_wrap .layer_msg_detail {overflow:hidden;display:none;position:absolute;left:50%;top:600px;width:400px;max-height:600px;background:#eee;transform:translateX(-50%);z-index:1;}
.layer_msg_wrap .layer_msg_detail button {position:absolute;right:0;top:0;width:35px;height:35px;}
.layer_msg_wrap .layer_msg_detail button:before {content:'';position:absolute;left:50%;top:50%;width:1px;height:14px;margin:-7px 0 0;background:#fff;transform:rotate(-45deg);}
.layer_msg_wrap .layer_msg_detail button:after {content:'';position:absolute;left:50%;top:50%;width:1px;height:14px;margin:-7px 0 0;background:#fff;transform:rotate(45deg);}
.layer_msg_wrap .layer_msg_detail .title {height:35px;padding:0 15px;font-size:16px;line-height:35px;text-align:left;color:#fff;background:#456ded;border-radius:5px 5px 0 0;}
.layer_msg_wrap .layer_msg_detail .content {overflow-y:auto;max-height:535px;margin:15px;padding:10px 15px;line-height:20px;white-space:normal;background:#fff;}
.layer_msg_wrap .layer_msg_detail .content .rev_cont {text-align:left;}
@media screen and (max-width:916px){
.pageCont .tableWrap table thead tr th {padding:15px 0;}
}
</style>
</head>
<body>
<div class="loading_layer">
<div class="loading_container">
<div class="bar"></div>
<div class="text">Loading</div>
</div>
</div>
<form name="listForm" action="<c:url value='/uss/umt/user/EgovGnrlselectedUserMsgDataDetailListAjax.do'/>" method="post">
<input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
<input type="hidden" name="delFlag" value="Y" />
<input type="hidden" name="selectedId" />
<input type="hidden" name="msgGroupId" value="<c:out value='${searchVO.msgGroupId}'/>"/>
<input type="hidden" name="pageType" />
<input type="hidden" name="searchSortCnd" value="<c:out value="${searchVO.searchSortCnd}" />" />
<input type="hidden" name="searchSortOrd" value="<c:out value="${searchVO.searchSortOrd}" />" />
<input type="hidden" name="detailType" value="<c:out value="${searchVO.detailType}" />" />
<input type="hidden" name="userId" id="userId" value="<c:out value='${searchVO.userId}'/>" />
<div class="contWrap" style="width:100%;position:relative;left:inherit;top:inherit;min-height:auto;padding:40px;">
<div class="pageTitle">
<!-- <div class="pageIcon"><img src="/pb/img/pageTitIcon4.png" alt=""></div> -->
<h2 class="titType1 c_222222 fwBold">'<c:out value="${searchVO.userId}"/>'의 문자전송 리스트</h2>
<!-- <p class="tType6 c_999999">문자전송리스트 현황을 파악할 수 있습니다.</p> -->
</div>
<div class="pageCont">
<div class="listSerch">
<select name="searchCondition" class="select" title="검색조건 선택">
<option value="" <c:if test="${searchVO.searchCondition == ''}">selected="selected"</c:if>>수신번호/내용(전체)</option>
<option value="1" <c:if test="${searchVO.searchCondition == '1'}">selected="selected"</c:if>>수신번호</option>
<option value="2" <c:if test="${searchVO.searchCondition == '2'}">selected="selected"</c:if>>내용</option>
</select>
<ec:select codeId="ITN021" name="searchCondition4" id="searchCondition4" css="class='select'" selectedValue="${searchVO.searchCondition4}"
defaultValue="" defaultText="메시지상태(전체)" />
<ec:select codeId="ITN019" name="searchCondition2" id="searchCondition2" css="class='select'" selectedValue="${searchVO.searchCondition2}"
defaultValue="" defaultText="전송사(전체)" />
<select name="searchMsgResultCode" class="select" title="발송결과 선택">
<option value="" <c:if test="${searchVO.searchMsgResultCode == ''}">selected="selected"</c:if>>발송결과(전체)</option>
<option value="S" <c:if test="${searchVO.searchMsgResultCode == 'S'}">selected="selected"</c:if>>발송성공</option>
<option value="W" <c:if test="${searchVO.searchMsgResultCode == 'W'}">selected="selected"</c:if>>발송대기</option>
<option value="F" <c:if test="${searchVO.searchMsgResultCode == 'F'}">selected="selected"</c:if>>발송실패</option>
</select>
<ec:select codeId="ITN023" name="searchCondition3" id="searchCondition3" css="class='select'" selectedValue="${searchVO.searchCondition3}"
defaultValue="" defaultText="삭제여부(전체)" />
<input id="searchKeyword" name="searchKeyword" class="recentSearch" type="text" value="<c:out value='${searchVO.searchKeyword}'/>" size="25" title="검색" maxlength="100" />
<input type="button" class="btnType1" value="검색" onclick="fn_search(); return false;">
</div>
<div class="listTop">
<p class="tType5">총 <span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${paginationInfo.totalRecordCount}" pattern="#,###" /></span>건</p>
<div class="rightWrap">
<input type="button" class="excelBtn" onclick="javascript:sendMsgDtlExcelDownload();">
<input type="button" class="printBtn">
<select name="pageUnit" id="pageUnit" class="select" title="검색조건선택" onchange="linkPage(1);">
<option value='10' <c:if test="${searchVO.pageUnit == '10' or searchVO.pageUnit == ''}">selected</c:if>>10줄</option>
<option value='20' <c:if test="${searchVO.pageUnit == '20'}">selected</c:if>>20줄</option>
<option value='30' <c:if test="${searchVO.pageUnit == '30'}">selected</c:if>>30줄</option>
</select>
</div>
</div>
<div class="tableWrap">
<table class="tbType1">
<colgroup>
<%-- <col style="width: 3%"> --%>
<col style="width: 4%">
<col style="width: 7%">
<col style="width: 10%">
<col style="width: 10%">
<col style="width: 9%">
<col style="width: *%">
<col style="width: 6%">
<col style="width: 6%">
<col style="width: 6%">
<%-- <col style="width: 6%"> --%>
<col style="width: 6%">
<col style="width: 5%">
<col style="width: 6%">
</colgroup>
<thead>
<tr>
<!-- <th><input type="checkbox" name="checkAll" id="checkAll" class="check2" value="1" onClick="fnCheckAll();"></th> -->
<th>번호<input type="button" class="sort sortBtn" id="sort_userData"></th>
<th>아이디<input type="button" class="sort sortBtn" id="sort_userId"></th>
<th>발신번호<input type="button" class="sort sortBtn" id="sort_callFrom"></th>
<th>수신번호<input type="button" class="sort sortBtn" id="sort_callTo"></th>
<th>전송시간<input type="button" class="sort sortBtn" id="sort_sentDateTxt"></th>
<th>내용<input type="button" class="sort sortBtn" id="sort_smsTxt"></th>
<th>상태<input type="button" class="sort sortBtn" id="sort_curStateTxt"></th>
<th>결과<input type="button" class="sort sortBtn" id="sort_rsltCode"></th>
<th>타입<input type="button" class="sort sortBtn" id="sort_msgTypeTxt"></th>
<!-- <th>기기<input type="button" class="sort sortBtn" id="sort_conectMthdTxt"></th> -->
<th>전송사<input type="button" class="sort sortBtn" id="sort_agentCode"></th>
<th>통신사<input type="button" class="sort sortBtn" id="sort_rsltNet"></th>
<th>삭제여부<input type="button" class="sort sortBtn" id="sort_delFlag"></th>
</tr>
</thead>
<tbody>
<c:forEach var="result" items="${resultList}" varStatus="status">
<tr>
<%-- <td>
<input name="del" id="del_${status.index}" type="checkbox" value="${result.msgId}" />
</td> --%>
<td>
<c:if test="${searchVO.searchSortOrd eq 'desc' }">
<c:out value="${ ( paginationInfo.totalRecordCount - ((paginationInfo.currentPageNo -1)*paginationInfo.recordCountPerPage) ) - status.index }"/>
</c:if>
<c:if test="${searchVO.searchSortOrd eq 'asc' }">
<c:out value="${(paginationInfo.currentPageNo - 1) * paginationInfo.recordCountPerPage + status.count}"/>
</c:if>
</td>
<td><a href="#" onclick="fn_modify('${result.userData}'); return false;"><c:out value="${result.userId}"/></a></td>
<td><a href="#" onclick="fn_modify('${result.userData}'); return false;"><c:out value="${result.callFrom}"/></a></td>
<td><a href="#" onclick="fn_modify('${result.userData}'); return false;"><c:out value="${result.callTo}"/></a></td>
<td title="<c:out value="${result.sentDateTxt}"/>">
<fmt:parseDate value="${result.sentDateTxt}" var="sentDateValue" pattern="yyyy-MM-dd HH:mm"/>
<fmt:formatDate value="${sentDateValue}" pattern="MM-dd HH:mm"/>
</td>
<c:choose>
<c:when test="${empty result.smsTxt}">
<c:choose>
<c:when test="${result.msgType eq '4'}">
<td title="내용없음">
</c:when>
<c:otherwise>
<td title="그림문자">
</c:otherwise>
</c:choose>
</c:when>
<c:otherwise>
<td title="<c:out value="${result.smsTxt}"/>">
</c:otherwise>
</c:choose>
<a href="#" onclick="fn_modify('${result.userData}'); return false;">
<c:choose>
<c:when test="${empty result.smsTxt}">
<c:choose>
<c:when test="${result.msgType eq '4'}">
내용없음
</c:when>
<c:otherwise>
그림문자
</c:otherwise>
</c:choose>
</c:when>
<c:otherwise>
<c:out value="${result.smsTxt}"/>
</c:otherwise>
</c:choose>
</a>
</td>
<td>
<c:choose>
<c:when test="${result.reserveCYn == 'Y'}">
예약 취소
</c:when>
<c:otherwise>
<c:out value="${result.curStateTxt}"/>
</c:otherwise>
</c:choose>
</td>
<td>
<%-- <c:out value="${result.rsltCode}"/> / <c:out value="${result.rsltCode2}"/> --%>
<c:choose>
<c:when test="${result.resultCodeTxt == 'S'}">
발송성공
</c:when>
<c:when test="${result.resultCodeTxt == 'W'}">
발송대기
</c:when>
<c:otherwise>
발송실패
</c:otherwise>
</c:choose>
</td>
<td><c:out value="${result.msgTypeTxt}"/></td>
<%-- <td><c:out value="${result.conectMthdTxt}"/></td> --%>
<td><c:out value="${result.agentCodeTxt}"/></td>
<td><c:out value="${result.rsltNet}"/></td>
<td><c:out value="${result.delFlagTxt}"/></td>
</tr>
</c:forEach>
<c:if test="${empty resultList}">
<tr><td colspan="14"><spring:message code="common.nodata.msg" /></td></tr>
</c:if>
</tbody>
</table>
</div>
<div class="btnWrap">
<!-- <input type="button" class="btnType2" value="삭제" onclick="fn_delete(); return false;"> -->
<!-- <input type="button" class="btnType1" value="등록" onclick="location.href='/uss/ion/msg/SendMsgModify.do'; return false;" value="등록" > -->
<input type="button" class="btnType1" value="목록" onclick="goList(); return false;" value="목록" >
</div>
<!-- 페이지 네비게이션 시작 -->
<c:if test="${!empty resultList}">
<div class="page">
<ul class="inline">
<ui:pagination paginationInfo = "${paginationInfo}" type="image" jsFunction="linkPage" />
</ul>
</div>
</c:if>
<!-- //페이지 네비게이션 끝 -->
</div>
</div>
</form>
<form name="modiForm" method="get" action="<c:url value='/uss/ion/msg/SendMsgDetailList.do'/>" >
<input name="msgId" type="hidden" />
<input name="userId" type="hidden" value="<c:out value='${searchVO.userId}'/>"/>
<input name="msgGroupId" type="hidden" />
<input name="detailType" type="hidden" value="sendMsgList" />
</form>
<form name="msgListForm" id="msgListForm" method="post">
<input type="hidden" name="reserveType" id="reserveType" value="<c:out value='${searchVO.reserveType}'/>"/>
<input type="hidden" name="mberId" id="mberId" value="<c:out value='${searchVO.userId}'/>"/>
</form>
</body>
</html>

View File

@ -276,6 +276,18 @@ function fn_updateSendRealTime(userId, msgGroupId){
}
function fnGoMsgGroupList(msgGroupId){
var form = document.msgGrpListForm;
form.msgGroupId.value = msgGroupId;
form.action="/uss/umt/user/EgovGnrlselectedUserMsgDataDetailListAjax.do";
form.submit();
}
</script>
<style>
.calBtn{
@ -336,7 +348,7 @@ function fn_updateSendRealTime(userId, msgGroupId){
<input type="hidden" name="ntceEndde" id="ntceEndde" value="">
<input type="hidden" name="reserveType" id="reserveType" value="${searchVO.reserveType}">
<div class="contWrap" style="position:relative;left:inherit;top:inherit;min-height:auto;padding:40px;">
<div class="contWrap" style="width:100%;position:relative;left:inherit;top:inherit;min-height:auto;padding:40px;">
<div class="pageTitle">
<!-- <div class="pageIcon"><img src="/pb/img/pageTitIcon4.png" alt=""></div> -->
<h2 class="titType1 c_222222 fwBold">'<c:out value="${searchVO.userId}"/>'의 문자전송 리스트</h2>
@ -597,7 +609,7 @@ function fn_updateSendRealTime(userId, msgGroupId){
</c:otherwise>
</c:choose>
</td>
<td class="sms_detail left">
<td class="sms_detail left" onclick="fnGoMsgGroupList('<c:out value="${result.msgGroupId}"/>');" style="cursor:pointer;">
<c:choose>
<c:when test="${empty result.smsTxt}">
<c:choose>
@ -741,5 +753,11 @@ function fn_updateSendRealTime(userId, msgGroupId){
<input name="msgGroupId" type="hidden" />
<input name="detailType" type="hidden" value="sendMsgList" />
</form>
<form name="msgGrpListForm" id="msgGrpListForm" method="post">
<input name="userId" type="hidden" value="<c:out value='${searchVO.userId}'/>"/>
<input name="msgGroupId" type="hidden" value=""/>
<input type="hidden" name="reserveType" id="reserveType1" value="${searchVO.reserveType}">
</form>
</body>
</html>