초기소스

This commit is contained in:
jazz
2025-10-29 17:08:05 +09:00
parent e531aa9540
commit 439a379a02
7551 changed files with 1234427 additions and 3 deletions

View File

@@ -0,0 +1,582 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ 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="ui" uri="http://www.winbit.kr/ctl/ui"%>
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%--
Class Name : ItrntMngrTentcpnDtlFormR.jsp
Description : 인트라넷 관리자 입점사 상세 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-03-18 유재현 최초 생성(퍼블리싱 적용)
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@ include file="/WEB-INF/views/comm/itrnt/Include.jsp"%>
<script>
/* ********************************************************
* 시작 화면 조작 함수
******************************************************** */
$(document).ready(function(){
let urlParams = new URLSearchParams(window.location.search);
});
/**********************************************
* 인트라넷 관리자 목록 화면 이동
***********************************************/
const fn_move_itrnMngrList = function () {
location.href='/itrnt/mngr/selectItrntMngrList';
}
/**********************************************
* 관리자 입점사 수정
***********************************************/
const fn_update_itrntMngrTentcpn = function() {
//비밀번호 입력되었는지 확인
const tentcpnPassword = $('#tentcpnPassword').val();
const tentcpnPasswordChk = $('#tentcpnPasswordChk').val();
const pwdChangeChk = $('#pwdChangeChk:checked')
if(pwdChangeChk < 1 && (tentcpnPassword < 1 || tentcpnPasswordChk < 1)){
alert('비밀번호를 입력해 주세요');
return;
}else if(pwdChangeChk < 1 && (tentcpnPassword !== tentcpnPasswordChk)){
alert('비밀번호가 일치하지 않습니다');
return;
}
//비밀번호 정규식 확인
const pwdChkNoticeResult = $('#pwdChkNoticeRs').val();
if(pwdChangeChk < 1 && (pwdChkNoticeResult !=='Y')){
alert('비밀번호 조합 조건을 확인해 주세요')
return;
}
const url = '<c:url value="/itrnt/mngr/updateItrntMngrTentcpnDtlForm"/>';
const saveForm = $('#itrntMngrTentcpnDtlUptFrom');
let formData = new FormData();
saveForm.serializeArray().forEach(function(item) {
formData.append(item.name,item.value);
});
//관리자 권한 배열에 담기
let mngrAuthor = '';
$('input:checkbox[name=mngrAuthor]').each(function(index, item){
if ($(item).is(':checked')) {
mngrAuthor += $(item).attr("id") +'='+ 'Y' + '||';
} else {
mngrAuthor += $(item).attr("id") +'='+ 'N' + '||';
}
});
const manager_act = $('#manager_act');
mngrAuthor += manager_act.attr("id") +'='+ manager_act.val() + '||';
formData.append("mngrAuthor",mngrAuthor);
if(confirm('관리자를 <spring:message code="confirm.common.insert"/>')) {
$.ajax({
type : 'post',
url : url,
data : formData,
processData: false,
contentType: false,
success : function(result) {
if (JSON.parse(result.resBody.result).message ==='success') {
alert('<spring:message code="success.common.insert"/>');
location.href='/itrnt/mngr/selectItrntMngrList';
} else {
alert('<spring:message code="fail.common.insert"/>');
}
}
});
}
}
$(document).ready(function () {
// 관리자 권한 전체 체크
const adminAuthCheckAll = $('#adminAuthCheckAll');
const adminCategory = $('.adminCategory');
const adminCategoryCheck = $('.adminCategory > input');
const adminWrite = $('.adminWrite');
const adminWriteCheck = $('.adminWrite > input');
adminAuthCheckAll.on('click', function () {
if ($(this).hasClass('checked')) {
adminCategoryCheck.prop('checked', false);
$(this).removeClass('checked');
isCategoryChecked();
} else {
adminCategoryCheck.prop('checked', true);
$(this).addClass('checked');
isCategoryChecked();
}
});
adminCategoryCheck.on('click', function () {
isCategoryChecked();
});
function isCategoryChecked() {
$('.adminCategory').each(function () {
if ($(this).find('input').prop('checked')) {
$(this).closest('.b-checkbox-container').find(adminWrite).removeAttr('disabled');
$(this).closest('.b-checkbox-container').find(adminWriteCheck).removeAttr('disabled');
$(this).closest('.b-checkbox-container').find(adminWriteCheck).prop('checked', true);
} else {
$(this).closest('.b-checkbox-container').find(adminWrite).attr('disabled', 'disabled');
$(this).closest('.b-checkbox-container').find(adminWriteCheck).attr('disabled', 'disabled');
$(this).closest('.b-checkbox-container').find(adminWriteCheck).prop('checked', false);
}
});
}
//비밀번호 정규식 확인
const pwdChk = $('#tentcpnPasswordChk').on('propertychange change keyup paste input', function () {
const pwdRegex = /^(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[!#$%&()*+-\/:<>?@\[\\\]^_{|}~]).{10,20}$/;
let tentcpnPassword = $('#tentcpnPassword').val().trim();
let tentcpnPasswordChk = $('#tentcpnPasswordChk').val().trim();
let pwdChkNotice = $('#pwdChkNotice');
let pwdChkNoticeResult = $('#pwdChkNoticeRs')
if (pwdRegex.test(tentcpnPassword) === false
|| pwdRegex.test(tentcpnPasswordChk) === false) {
pwdChkNotice.attr('value', '비밀번호 조합 조건을 확인해 주세요.');
pwdChkNotice.attr('type', 'text').css('visibility', 'visible');
pwdChkNotice.css('pointer-events','none'); //클릭 방지
pwdChkNoticeResult.attr('value', 'N')
} else if(tentcpnPassword === tentcpnPasswordChk){
pwdChkNotice.attr('value', '사용 가능한 비밀번호 입니다')
pwdChkNotice.attr('type', 'text').css('visibility', 'visible')
pwdChkNotice.css('pointer-events','none');
pwdChkNoticeResult.attr('value', 'Y')
}else{
pwdChkNotice.attr('value', '입력하신 비밀번호가 일치하지 않습니다.')
pwdChkNotice.attr('type', 'text').css('visibility', 'visible')
pwdChkNotice.css('pointer-events','none');
pwdChkNoticeResult.attr('value', 'N')
}
});
setTimeout(pwdChk, 3000);
//관리자 권한 표시
//관리자 쓰기 권한
const adminWriteInput = $('.adminWrite');
adminWriteInput.each(function(){
if($(this).children('input').val() ==='Y'){
$(this).removeAttr('disabled')
$(this).children('input').prop('checked', true)
$(this).children('input').removeAttr('disabled')
}
});
//관리자 권한
const adminCategoryInput = $('.adminCategory');
adminCategoryInput.each(function(){
if($(this).children('input').val() ==='Y'){
$(this).children('input').prop('checked', true)
}
});
// 비밀번호 변경 창 OnOff
$('#pwdChangeChk').on("click",function(){
if($(this).attr("checked")){
$(".pwdChangeDiv").hide();
$(this).removeAttr('checked', false)
}else{
$(".pwdChangeDiv").show();
$(this).attr('checked', true)
}
});
})
</script>
</head>
<body>
<%@ include file="/WEB-INF/views/comm/itrnt/Header.jsp"%>
<main class="main">
<%@ include file="/WEB-INF/views/comm/itrnt/Left.jsp"%>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h2 class="page-title__title">관리자 정보</h2>
<div class="page-title__btn-container">
<button type="button" class="btn outline" onclick="fn_move_itrnMngrList();"> <spring:message code="button.list"/> </button>
<button type="button" class="btn primary" onclick="fn_update_itrntMngrTentcpn();"> <spring:message code="button.save"/> </button>
</div>
</div>
<section class="content-section">
<form id="itrntMngrTentcpnDtlUptFrom" name="itrntMngrTentcpnDtlUptFrom">
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 12%;">
<col>
</colgroup>
<tbody>
<c:if test="${not empty resultMap.result}"/>
<tr>
<th>최초입점일</th>
<td>
<div class="td-inner">
<p><c:out value="${resultMap.result.registDt}"/></p>
</div>
</td>
<th>최근접속일</th>
<td>
<div class="td-inner">
<p><c:out value="${resultMap.result.lastLoginDt}"/></p>
</div>
</td>
<th style="width: 13%">최근 변경(정상/종료)일</th>
<td>
<div class="td-inner">
<p><c:out value="${resultMap.result.updtDt}"/></p>
</div>
</td>
</tr>
<tr>
<th>구분</th>
<td>
<div class="td-inner">
<%-- TODO : as-is{? c.__FROMHEAD__ === true}매장{:}본사{/}
to-be tentGroup 으로 구분여부 (확인 필요)
--%>
<c:choose>
<c:when test="${resultMap.result.tentGroup == '01'}">
<p><c:out value="본사" default="매장"/></p>
</c:when>
<c:otherwise>
<p><c:out value="매장"/></p>
</c:otherwise>
</c:choose>
</div>
</td>
<th>매장(업체)명</th>
<td>
<div class="td-inner">
<p><c:out value="${resultMap.result.tentcpnNm}"/></p>
</div>
</td>
</tr>
<tr>
<th>매장ID</th>
<td>
<div class="td-inner">
<p><c:out value="${resultMap.result.tentcpnId}"/></p>
</div>
</td>
</tr>
<tr>
<th>매장 비밀번호
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input type="checkbox" id="pwdChangeChk">
<span class="check"></span>
<span class="control-label"> 변경</span>
</label>
</div>
</th>
<td colspan="3">
<div class="td-inner">
<div class="table-wrapper pwdChangeDiv" style="width: 800px; display: none" >
<table class="table transparent">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 18%;">
<col>
</colgroup>
<tbody>
<tr>
<th class="text-left">현재 비밀번호</th>
<td>
<div class="td-inner">
<input type="password" class="input-text" value="" id="currentPassword" name="currentPassword" autocomplete="new-password"
title="해당 인풋에 대한 설명">
</div>
</td>
</tr>
<tr>
<th class="text-left">비밀번호 변경</th>
<td>
<div class="td-inner">
<input type="password" class="input-text" value="" id="tentcpnPassword" name="tentcpnPassword" autocomplete="new-password"
title="해당 인풋에 대한 설명">
<p class="fyi fs-13 gray-7 ml-4">10-20자, 영문 대소문자
또는
숫자,
특수문자 중 2가지 이상 조합</p>
</div>
</td>
</tr>
<tr>
<th class="text-left">비밀번호 변경 확인</th>
<td>
<div class="td-inner">
<input type="password" class="input-text" value="" id="tentcpnPasswordChk" autocomplete="new-password"
title="해당 인풋에 대한 설명">
<p class="fyi fs-13 gray-7 ml-4">사용가능 특수문자 : ! #
$ %
&amp; ( ) * + - / : &lt; =
&gt; ? @ [ \ ] ^ _ { | } ~</p>
</div>
<input type="hidden" class="fyi fs-13 gray-7 ml-4 w-full" id="pwdChkNotice" tabindex="-1" readonly />
<input type="hidden" id="pwdChkNoticeRs" />
</td>
</tr>
</tbody>
</table>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</form>
</section>
<section class="content-section">
<div class="form-control-container mb-10">
<div class="left">
<h3 class="delivery-info__title">
관리자 권한
</h3>
</div>
<div class="center">
</div>
<div class="right">
<button id="adminAuthCheckAll" class="btn sm primary outline">전체체크</button>
</div>
</div>
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 12%;">
<col>
</colgroup>
<c:choose>
<c:when test="${ not empty resultMap.result.mngrAuthor}">
<tr>
<th>매출분석</th>
<td>
<input type="hidden" id="manager_act" name="mngrAuthor" value="<c:out value="${resultMap.result.reprsntMngrAt}" default="N"/>" >
<div class="td-inner">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="daily_revenue" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.dailyRevenue}"/>">
<span class="check"></span>
<span class="control-label">일별매출</span>
</label>
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="weekly_revenue" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.weeklyRevenue}"/>">
<span class="check"></span>
<span class="control-label">주별매출</span>
</label>
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="monthly_revenue" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.monthlyRevenue}"/>">
<span class="check"></span>
<span class="control-label">월별매출</span>
</label>
</div>
</div>
</td>
</tr>
<tr>
<th>판매분석</th>
<td>
<div class="td-inner">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="daily_static" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.dailyStatic}"/>">
<span class="check"></span>
<span class="control-label">금일 판매내역</span>
</label>
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="weekly_static" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.weeklyStatic}"/>">
<span class="check"></span>
<span class="control-label">주간 판매내역</span>
</label>
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="monthly_static" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.monthlyStatic}"/>">
<span class="check"></span>
<span class="control-label">월간 판매내역</span>
</label>
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="revenue_static" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.revenueStatic}"/>">
<span class="check"></span>
<span class="control-label">판매 상품 순위</span>
</label>
</div>
</div>
</td>
</tr>
<tr>
<th>마이페이지</th>
<td>
<div class="td-inner">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="catalog" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.catalog}"/>">
<span class="check"></span>
<span class="control-label">회원리스트</span>
</label>
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="member_sms" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.memberSns}"/>">
<span class="check"></span>
<span class="control-label">SMS발송관리</span>
</label>
</div>
</div>
</td>
</tr>
<tr>
<th>관리자</th>
<td>
<div class="td-inner vertical gap-15">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="gs_seller_notice" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.gsSellerNotice}"/>">
<span class="check"></span>
<span class="control-label">공지사항</span>
</label>
<span class="stone-7">→</span>
<label class="b-checkbox checkbox adminWrite" disabled>
<input disabled type="checkbox" id="gs_seller_notice_act" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.gsSellerNoticeAct}"/>">
<span class="check"></span>
<span class="control-label">쓰기/삭제</span>
</label>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="shop_education" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.shopEducation}"/>">
<span class="check"></span>
<span class="control-label">교육자료</span>
</label>
<span class="stone-7">→</span>
<label class="b-checkbox checkbox adminWrite" disabled>
<input disabled type="checkbox" id="shop_education_act" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.shopEducationAct}"/>">
<span class="check"></span>
<span class="control-label">쓰기/삭제</span>
</label>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="member_edit_req" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.memberEditReq}"/>">
<span class="check"></span>
<span class="control-label">회원정보수정요청</span>
</label>
<span class="stone-7">→</span>
<label class="b-checkbox checkbox adminWrite" disabled>
<input disabled type="checkbox" id="member_edit_req_act" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.memberEditReqAct}"/>">
<span class="check"></span>
<span class="control-label">쓰기/삭제</span>
</label>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="point_edit_req" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.pointEditReq}"/>">
<span class="check"></span>
<span class="control-label">마일리지(포인트)수정요청</span>
</label>
<span class="stone-7">→</span>
<label class="b-checkbox checkbox adminWrite" disabled>
<input disabled type="checkbox" id="point_edit_req_act" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.pointEditReqAct}"/>">
<span class="check"></span>
<span class="control-label">쓰기/삭제</span>
</label>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="logistics_req" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.logisticsReq}"/>">
<span class="check"></span>
<span class="control-label">물류관련요청</span>
</label>
<span class="stone-7">→</span>
<label class="b-checkbox checkbox adminWrite" disabled>
<input disabled type="checkbox" id="logistics_req_act" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.logisticsReqAct}"/>">
<span class="check"></span>
<span class="control-label">쓰기/삭제</span>
</label>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="shop_edit_req" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.shopEditReq}"/>">
<span class="check"></span>
<span class="control-label">매장정보변경</span>
</label>
<span class="stone-7">→</span>
<label class="b-checkbox checkbox adminWrite" disabled>
<input disabled type="checkbox" id="shop_edit_req_act" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.shopEditReqAct}"/>">
<span class="check"></span>
<span class="control-label">쓰기/삭제</span>
</label>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="family_qna_edit_req" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.familyQnaEditReq}"/>">
<span class="check"></span>
<span class="control-label">가맹점 Q&A</span>
</label>
<span class="stone-7">→</span>
<label class="b-checkbox checkbox adminWrite" disabled>
<input disabled type="checkbox" id="family_qna_edit_req_act" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.familyQnaEditReqAct}"/>">
<span class="check"></span>
<span class="control-label">쓰기/삭제</span>
</label>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="admin_list" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.adminList}"/>">
<span class="check"></span>
<span class="control-label">관리자 리스트</span>
</label>
</div>
</div>
</td>
</tr>
</c:when>
<c:otherwise>
<tr>
<td class="row-no-data" colspan="8">조회된 관리자 권한이 없습니다.</td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
</div>
</section>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
</body>
</html>