G-1: 메신저 Webhook Relay + _send_to_room 실제 httpx 호출 구현 G-2: POST /api/tasks/bulk SR 대량작업 엔드포인트 (최대 100건) G-3: 라이선스 만료 알림 스케줄러 (매일 09:00 KST) G-4: 체험판 upgrade_banner 필드 + license.py 배너 로직 G-5: core/auto_rca.py + incidents/problem auto-rca 엔드포인트 G-6: core/deploy_impact.py + vibe impact-analysis 엔드포인트 G-7: core/ticket_classifier.py + SR 생성 시 AI 분류 + ai-suggestion API G-8: VulnPatchRecord 모델 + vuln_scan 패치추적 4개 엔드포인트 G-9: core/jira_sync.py + gateway Jira/Confluence 연동 엔드포인트 G-10: core/push_notify.py + routers/push.py + PushSubscription 모델 G-11: approvals 다중승인 (위임/서명/기한초과/마감연장) G-12: alembic.ini + migrations/ + cicd/migrate_to_postgres.sh 하네스: guardia-orchestrator 확장기능 Phase 반영 봇명령어: /sr /status /license /bulk 슬래시 명령어 추가 설치스크립트: setup/ (Ubuntu, CentOS, RHEL, Windows) --test 옵션 포함 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
166 lines
4.7 KiB
Plaintext
166 lines
4.7 KiB
Plaintext
<%@ page language="java" pageEncoding="EUC-KR"%>
|
|
<%@ include file="/jsp/include/commonVariable.jspf"%>
|
|
<%
|
|
// pageNav Tag에 넣을 변수를 만들기위해 pageNo 파라미터는 제거하여 연결합니다.
|
|
String linkPattern = new StringBuffer().append(contextPath).append("/user/listUser.do?pageNo=#pageNo").append(removeParam(parameterStr, "pageNo")).toString();
|
|
%>
|
|
<html:html locale="true">
|
|
<head>
|
|
<%@ include file="/jsp/include/header.jspf"%>
|
|
<%@ include file="/jsp/include/css.jspf"%>
|
|
<%@ include file="/jsp/include/javascript.jspf"%>
|
|
<script type="text/javascript">
|
|
function init() {
|
|
Rico.Corner.round(${'searchZone'}); <%//searchZone 엘리먼트의 코너를 둥굴게 하는 스크립트입니다.%>
|
|
}
|
|
</script>
|
|
<title>회원관리</title>
|
|
</head>
|
|
|
|
<bean:define id="userPageInfo" name="userBean" property="userPageInfo" />
|
|
<bean:define id="userList" name="userPageInfo" property="pageList" />
|
|
|
|
<body onload="init()">
|
|
<div class="container">
|
|
<%
|
|
//컨텐츠영역
|
|
%>
|
|
<div style="background-color: transparent; text-align: right">
|
|
회원관리 >
|
|
<strong>가입회원 목록</strong>
|
|
</div>
|
|
|
|
<div class="pageingInfoZone">
|
|
<%
|
|
//목록의 페이징정보 출력영역
|
|
%>
|
|
Total : ${userPageInfo.recordCount} ${userPageInfo.pageNo} /
|
|
${userPageInfo.totalPageNo} page
|
|
</div>
|
|
<div class="tableZone">
|
|
<%
|
|
//테이블영역
|
|
%>
|
|
<table class="list" cellspacing="0">
|
|
<colgroup>
|
|
<col width="40" align="center" class="strong"></col>
|
|
<col width="90" align="center"></col>
|
|
<col width="90" align="center"></col>
|
|
<col width="140" align="center"></col>
|
|
<col width="90" align="center"></col>
|
|
<col width="100" align="center"></col>
|
|
<col width="90" align="center"></col>
|
|
</colgroup>
|
|
<thead>
|
|
<th>
|
|
번호
|
|
</th>
|
|
<th class="bar">
|
|
아이디
|
|
</th>
|
|
<th class="bar">
|
|
이 름
|
|
</th>
|
|
<th class="bar">
|
|
이메일
|
|
</th>
|
|
<th class="bar">
|
|
생년월일
|
|
</th>
|
|
<th class="bar">
|
|
휴대폰
|
|
</th>
|
|
<th class="bar">
|
|
가입일
|
|
</th>
|
|
</thead>
|
|
<tbody>
|
|
<logic:iterate id="userEnt" name="userList" indexId="idx">
|
|
<tr style="cursor:pointer"
|
|
onclick="gotoUrl('<%=contextPath%>/user/viewUser.do?memberID=${userEnt.memberID}<%=parameterStr%>')">
|
|
<td>
|
|
${userPageInfo.recordCount - ((userBean.pageNo -1) *
|
|
userBean.pageSize + idx )}
|
|
</td>
|
|
<td>
|
|
<bean:write name="userEnt" property="memberID" />
|
|
</td>
|
|
<td>
|
|
<bean:write name="userEnt" property="memberName" />
|
|
</td>
|
|
<td>
|
|
<bean:write name="userEnt" property="email" />
|
|
</td>
|
|
<td>
|
|
<bean:write name="userEnt" property="birthDay" />
|
|
</td>
|
|
<td>
|
|
<bean:write name="userEnt" property="handPhone" />
|
|
</td>
|
|
<td id="lastColumn">
|
|
<bean:write name="userEnt" property="startDate"
|
|
format="yyyy-MM-dd" />
|
|
</td>
|
|
</tr>
|
|
</logic:iterate>
|
|
<c:if test="${userPageInfo.recordCount == 0}">
|
|
<%
|
|
//목록이 없을경우
|
|
%>
|
|
<tr>
|
|
<td colspan="4" class="align_2" height="30px">
|
|
<bean:message key="msg.common.listNotFound" />
|
|
</td>
|
|
</tr>
|
|
</c:if>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<tr>
|
|
<td>
|
|
<br>
|
|
</td>
|
|
</tr>
|
|
<div class="pageNaviZone">
|
|
<%
|
|
//페이징 탐색영역
|
|
%>
|
|
<nav:pageLink pageNo="${userBean.pageNo}"
|
|
lastPageNo="${userBean.userPageInfo.totalPageNo}"
|
|
linkPattern="<%=linkPattern%>" stylePrefix="nav_"
|
|
firstPageDisplayPattern="<img src='../../images/user/bbs_prev2.gif' alt='처음'/>"
|
|
prevGroupDisplayPattern="<img src='../../images/user/bbs_prev.gif' alt='이전'/>"
|
|
linkedPageDisplayPattern=" #pageNo "
|
|
currentPageDisplayPattern=" <strong>#pageNo</strong> "
|
|
nextGroupDisplayPattern="<img src='../../images/user/bbs_next.gif' alt='다음'/>"
|
|
lastPageDisplayPattern="<img src='../../images/user/bbs_next2.gif' alt='마지막'/>"
|
|
groupSize="10" />
|
|
</div>
|
|
<br />
|
|
<div class="searchZone" id="searchZone">
|
|
<%
|
|
//목록 검색영역
|
|
%>
|
|
<form action="<%=contextPath%>/user/listUser.do" method="post">
|
|
<html:select property="searchColumn"
|
|
value="${userBean.searchColumn}" style="font-size:9pt;">
|
|
<html:option value="MID">아이디</html:option>
|
|
<html:option value="UNM">이 름</html:option>
|
|
<html:option value="HPHONE">휴대폰</html:option>
|
|
<html:option value="ADDRESS1">주 소</html:option>
|
|
</html:select>
|
|
<input type="text" name="searchKeyword"
|
|
value="${userBean.searchKeyword}" />
|
|
<img src="<%=contextPath%>/images/button/btn_search.gif"
|
|
onclick="javascript:forms[0].submit();" class="hand"
|
|
style="vertical-align:bottom" alt="검색" />
|
|
</form>
|
|
</div>
|
|
|
|
</div>
|
|
<%
|
|
// container
|
|
%>
|
|
</body>
|
|
</html:html>
|