commit
This commit is contained in:
2
kngil/skin/.htaccess
Normal file
2
kngil/skin/.htaccess
Normal file
@@ -0,0 +1,2 @@
|
||||
#skin direct access control
|
||||
#(production 단계에서 활성화 예정)
|
||||
57
kngil/skin/_footer.php
Normal file
57
kngil/skin/_footer.php
Normal file
@@ -0,0 +1,57 @@
|
||||
|
||||
|
||||
<button class="btn-top" onclick="window.scrollTo(0,0);"><div class="arrow">Top</div></button>
|
||||
<!-- footer -->
|
||||
<footer class="footer">
|
||||
<button class="footer-close">푸터 닫기</button>
|
||||
<div class="footer-wrap">
|
||||
<div class="comp-info">
|
||||
<p class="logo"><img src="/kngil/img/logo_baron.svg" alt="KNGIL"></p>
|
||||
<p class="ceo">대표이사 <em>장종찬</em></p>
|
||||
</div>
|
||||
<div class="comp-inner">
|
||||
<div class="privacy-box">
|
||||
<a class="privacy" href="javascript:privacy('privacy');">개인정보처리방침</a>
|
||||
<a href="javascript:privacy('agreement');">이용약관</a>
|
||||
</div>
|
||||
<!-- comp-contact -->
|
||||
<div class="comp-contact">
|
||||
<ul class="footer-menu">
|
||||
<li>
|
||||
<a href="value.html">KNGIL</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="provided.html">제공데이터</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="primary.html">주요기능</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="analysis.html">데이터분석</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="results.html">성과품</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="footer-family">
|
||||
<button class="btn-family">Family Site</button>
|
||||
<ul class="family-list">
|
||||
<li><a href="https://eg-bim.co.kr" target="_blank">EG-BIM</a></li>
|
||||
<li><a href="http://k-tova.com" target="_blank">TOVA</a></li>
|
||||
<li><a href="http://k-gaia.co.kr" target="_blank">GAIA</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<!-- comp-contact END -->
|
||||
<p class="address">[05774] 서울특별시 송파구 오금로 554(거여동) <span class="tel">Tel : 02-2141-7434</span></p>
|
||||
<p class="copyright">© BARON Consultant Co,.Ltd All Rights Reserved.</p>
|
||||
</div>
|
||||
<!-- comp-area END -->
|
||||
</div>
|
||||
</footer>
|
||||
<!--// footer -->
|
||||
|
||||
|
||||
<!-- // 모든 팝업페이지 경로 -->
|
||||
|
||||
<script src="/kngil/js/common.js"></script>
|
||||
34
kngil/skin/_head.php
Normal file
34
kngil/skin/_head.php
Normal file
@@ -0,0 +1,34 @@
|
||||
<meta charset="UTF-8" />
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1.0, minimum-scale=1.0, viewport-fit=cover"
|
||||
/>
|
||||
<meta http-equiv="X-UA-compatible" content="IE=edge,chrome=1" />
|
||||
<meta name="format-detection" content="telephone=no" />
|
||||
|
||||
<link
|
||||
rel="shortcut icon"
|
||||
type="image/svg+xml"
|
||||
href="/kngil/img/favicon.svg"
|
||||
/>
|
||||
|
||||
<!-- CSS -->
|
||||
<link rel="stylesheet" href="/kngil/css/lib/aos.min.css" />
|
||||
<link rel="stylesheet" type="text/css" href="/kngil/css/lib/lenis.min.css" />
|
||||
<link rel="stylesheet" type="text/css" href="/kngil/css/common.css" />
|
||||
<link rel="stylesheet" type="text/css" href="/kngil/css/style.css" />
|
||||
|
||||
<!-- JS (local) -->
|
||||
<script src="/kngil/js/lib/jquery-3.6.1.min.js"></script>
|
||||
<script src="/kngil/js/lib/jquery.mousewheel.min.js"></script>
|
||||
<script src="/kngil/js/lib/lenis.min.js"></script>
|
||||
<script src="/kngil/js/lib/aos.min.js"></script>
|
||||
<script src="/kngil/js/lib/gsap.min.js"></script>
|
||||
<script src="/kngil/js/lib/scrolltrigger.min.js"></script>
|
||||
<script src="/kngil/js/lib/ScrollToPlugin.min.js"></script>
|
||||
|
||||
<!-- ScrollMagic (외부 CDN 유지) -->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.7/ScrollMagic.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.7/plugins/animation.gsap.min.js"></script>
|
||||
|
||||
<title>KNGIL</title>
|
||||
16
kngil/skin/_head_pop_temp.php
Normal file
16
kngil/skin/_head_pop_temp.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<meta charset="UTF-8" />
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1.0, minimum-scale=1.0, viewport-fit=cover"
|
||||
/>
|
||||
<meta http-equiv="X-UA-compatible" content="IE=edge,chrome=1" />
|
||||
<meta name="format-detection" content="telephone=no" />
|
||||
<link
|
||||
rel="shortcut icon"
|
||||
type="image/svg+xml"
|
||||
href="/kngil/img/favicon.svg"
|
||||
/>
|
||||
<link rel="stylesheet" type="text/css" href="/kngil/css/common.css" />
|
||||
<link rel="stylesheet" type="text/css" href="/kngil/css/style.css" />
|
||||
|
||||
<script src="./js/lib/jquery-3.6.1.min.js"></script>
|
||||
168
kngil/skin/_header.php
Normal file
168
kngil/skin/_header.php
Normal file
@@ -0,0 +1,168 @@
|
||||
<?php
|
||||
if (session_status() === PHP_SESSION_NONE) {
|
||||
session_start();
|
||||
}
|
||||
|
||||
$isLogin = isset($_SESSION['login']);
|
||||
$auth = $_SESSION['login']['auth_bc'] ?? '';
|
||||
|
||||
// 권한 그룹
|
||||
$isSuperAdmin = in_array($auth, ['BS100100', 'BS100200']);
|
||||
$isCompanyAdmin = in_array($auth, ['BS100100', 'BS100200', 'BS100300', 'BS100400']);
|
||||
?>
|
||||
<head>
|
||||
<style>
|
||||
.icon-btn {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
||||
.icon-btn img {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
filter: invert(1); /* 흰색 아이콘 */
|
||||
opacity: 0.8;
|
||||
transition: 0.2s;
|
||||
}
|
||||
|
||||
.icon-btn:hover img {
|
||||
opacity: 1;
|
||||
}
|
||||
/* 툴팁 래퍼 */
|
||||
.tooltip {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* 툴팁 박스 */
|
||||
.tooltip-text {
|
||||
position: absolute;
|
||||
bottom: 120%;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
white-space: nowrap;
|
||||
|
||||
background: rgba(20, 20, 20, 0.95);
|
||||
color: #fff;
|
||||
font-size: 12px;
|
||||
padding: 6px 10px;
|
||||
border-radius: 4px;
|
||||
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
transition: opacity 0.2s ease, transform 0.2s ease;
|
||||
pointer-events: none;
|
||||
z-index: 1000;
|
||||
}
|
||||
|
||||
/* 말풍선 화살표 */
|
||||
.tooltip-text::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
border-width: 6px;
|
||||
border-style: solid;
|
||||
border-color: rgba(20, 20, 20, 0.95) transparent transparent transparent;
|
||||
}
|
||||
|
||||
/* hover 시 노출 */
|
||||
.tooltip:hover .tooltip-text {
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
transform: translateX(-50%) translateY(-4px);
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<!-- header -->
|
||||
<div class="header-wrap">
|
||||
<header class="header">
|
||||
<h1>
|
||||
<a href="/kngil/skin/index.php">KNGIL</a>
|
||||
</h1>
|
||||
|
||||
<div class="header-right">
|
||||
|
||||
<?php if ($isLogin): ?>
|
||||
|
||||
<!-- 통합 회원관리 (관리자/개발자만) -->
|
||||
<?php if ($isSuperAdmin): ?>
|
||||
<a href="/kngil/skin/adm.php"
|
||||
class="icon-btn tooltip">
|
||||
<img src="/kngil/img/ico/ico_super_admin.svg" class="header-icon" alt="통합 회원관리">
|
||||
<span class="tooltip-text">통합 회원관리</span>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- 회사 관리자 (관리자/개발자/메인/서브) -->
|
||||
<?php if ($isCompanyAdmin): ?>
|
||||
<a href="/kngil/skin/adm_comp.php"
|
||||
class="icon-btn tooltip">
|
||||
<img src="/kngil/img/ico/ico_company_admin.svg" class="header-icon" alt="회사 관리자">
|
||||
<span class="tooltip-text">회사 관리자</span>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- 기존 사용자 메뉴 -->
|
||||
<div class="menu-box">
|
||||
<button class="menu-user">
|
||||
<img src="/kngil/img/ico/ico_user.svg" alt="user">
|
||||
</button>
|
||||
|
||||
<ul class="menu-list">
|
||||
<!-- 비로그인 -->
|
||||
<li class="<?= $isLogin ? 'd-none' : '' ?>">
|
||||
<a class="my-join" href="javascript:agreement();">회원가입</a>
|
||||
</li>
|
||||
<li class="<?= $isLogin ? 'd-none' : '' ?>">
|
||||
<a class="my-login" href="javascript:login();">로그인</a>
|
||||
</li>
|
||||
|
||||
<!-- 로그인 -->
|
||||
<li class="<?= $isLogin ? '' : 'd-none' ?>">
|
||||
<a class="my-join" href="javascript:mypage01()">마이페이지</a>
|
||||
</li>
|
||||
<li class="<?= $isLogin ? '' : 'd-none' ?>">
|
||||
<a class="my-login" href="/kngil/bbs/logout.php">로그아웃</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<button class="menu-all">
|
||||
<span></span>
|
||||
<span></span>
|
||||
<span></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
</div>
|
||||
<!--// header -->
|
||||
|
||||
|
||||
<!-- floating_menu -->
|
||||
<div class="floating-menu">
|
||||
<ul>
|
||||
<li class="floating-faq">
|
||||
<a href="/kngil/skin/faq_list.skin.php">
|
||||
<i class="ico-faq"></i>
|
||||
<span>FAQ</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="floating-buy">
|
||||
<a href="/kngil/?page=buy">
|
||||
<i class="ico-buy"></i>
|
||||
<span>구매하기</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- //floating_menu -->
|
||||
48
kngil/skin/_nav.php
Normal file
48
kngil/skin/_nav.php
Normal file
@@ -0,0 +1,48 @@
|
||||
<ul class="sitemap">
|
||||
<li>
|
||||
<a href="value.html">
|
||||
<span>KNGIL</span>
|
||||
<p>
|
||||
공공데이터 기반으로 기초자료를<br>
|
||||
<em>보고서 형태로 제공</em>하는 서비스
|
||||
</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="provided.html">
|
||||
<span>제공데이터</span>
|
||||
<p>
|
||||
<em>쉽고 편리하게 작업</em> 할 수 있는<br>
|
||||
다양한 기능 탑재
|
||||
</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="primary.html">
|
||||
<span>주요기능</span>
|
||||
<p>
|
||||
<em>편의성, 직관성, 효율성 향상</em>을 위한 <br>
|
||||
다양한 기능을 제공
|
||||
</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="analysis.html">
|
||||
<span>데이터분석</span>
|
||||
<p>
|
||||
위치 및 속성 정보 등을 정확히 매칭,<br>
|
||||
<em>신뢰도 높은 분석 결과 제공</em>
|
||||
</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="results.html">
|
||||
<span>성과품</span>
|
||||
<p>
|
||||
<em>항목별 자동생성</em><br>
|
||||
보고서 제공
|
||||
</p>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
17
kngil/skin/_popups.php
Normal file
17
kngil/skin/_popups.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<!-- 팝업 모음 (pop_temp 등에서 사용) -->
|
||||
@@include("mypage/pop_agreement.html")
|
||||
@@include("mypage/pop_join.html")
|
||||
@@include("mypage/pop_join2.html")
|
||||
@@include("mypage/pop_join3.html")
|
||||
@@include("mypage/pop_login.html")
|
||||
@@include("mypage/pop_login2.html")
|
||||
@@include("mypage/pop_mypage01.html")
|
||||
@@include("mypage/pop_mypage02.html")
|
||||
@@include("mypage/pop_mypage03.html")
|
||||
@@include("mypage/pop_mypage04.html")
|
||||
@@include("mypage/pop_mypage05.html")
|
||||
@@include("mypage/pop_mypage06.html")
|
||||
@@include("mypage/pop_cancel.html")
|
||||
@@include("mypage/pop_search.html")
|
||||
@@include("mypage/pop_password.html")
|
||||
@@include("popup/pop_privacy.html")
|
||||
155
kngil/skin/adm.php
Normal file
155
kngil/skin/adm.php
Normal file
@@ -0,0 +1,155 @@
|
||||
<?php
|
||||
require_once $_SERVER['DOCUMENT_ROOT'].'/kngil/bbs/adm_guard.php';
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>큰길회원 list</title>
|
||||
|
||||
<!-- CSS -->
|
||||
<link rel="stylesheet" href="/kngil/css/adm_style.css">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/vitmalina/w2ui@master/dist/w2ui.min.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<a href="/kngil/skin/index.php" class="btn-home-fixed" title="홈으로">
|
||||
<svg class="icon-home"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round">
|
||||
<path d="M3 11L12 3l9 8"/>
|
||||
<path d="M5 10v10h5v-6h4v6h5V10"/>
|
||||
</svg>
|
||||
</a>
|
||||
<!-- =========================
|
||||
페이지 타이틀 + 우측 버튼
|
||||
========================= -->
|
||||
<h1 class="adm-title">
|
||||
큰길회원 list
|
||||
|
||||
<div class="adm-title-actions">
|
||||
<button id="btnfaq" class="btn-faq">
|
||||
F&Q 내용 등록
|
||||
</button>
|
||||
<button id="btnServiceRegister" class="btn-service">
|
||||
서비스등록
|
||||
</button>
|
||||
<button id="btnPurchaseHistory" class="btn-history">
|
||||
구매이력
|
||||
</button>
|
||||
<button id="btnProductManage" class="btn-product">
|
||||
상품등록
|
||||
</button>
|
||||
</div>
|
||||
</h1>
|
||||
<div class="super-search-wrap">
|
||||
|
||||
<!-- 🔹 좌측: 검색 영역 -->
|
||||
<div class="super-search">
|
||||
<select id="schMemberStatus">
|
||||
<option value="">회원상태 전체</option>
|
||||
<option value="Y">사용중</option>
|
||||
<option value="N">미사용</option>
|
||||
</select>
|
||||
|
||||
<input type="text" id="schMemberName" placeholder="회원명 입력">
|
||||
|
||||
<input type="number" id="schRemainArea" placeholder="잔여면적(㎡ 이하)">
|
||||
|
||||
<!-- ✅ 검색버튼은 여기 -->
|
||||
<button id="btnSearch">검색</button>
|
||||
</div>
|
||||
|
||||
<!-- 🔹 우측: 저장 버튼 -->
|
||||
<button id="btnSave">저장</button>
|
||||
|
||||
</div>
|
||||
<!-- =========================
|
||||
상단 Grid (회사 / 관리자)
|
||||
========================= -->
|
||||
<div class="card">
|
||||
<div id="userGrid" style="height:520px;"></div>
|
||||
</div>
|
||||
|
||||
<!-- =========================
|
||||
하단 Grid (회사 사용자 목록)
|
||||
========================= -->
|
||||
<div class="card" id="detailCard" style="display:none;">
|
||||
<div id="detailGrid" style="height:260px;"></div>
|
||||
</div>
|
||||
|
||||
<!-- =========================
|
||||
ES Module
|
||||
========================= -->
|
||||
<script type="module">
|
||||
import { w2ui,w2alert } from 'https://cdn.jsdelivr.net/gh/vitmalina/w2ui@master/dist/w2ui.es6.min.js'
|
||||
import { createSuperAdminGrid, bindSaveButton } from '/kngil/js/adm.js'
|
||||
import { createUserGrid } from '/kngil/js/adm_comp.js'
|
||||
import { openPurchaseHistoryPopup } from '/kngil/js/adm_purch_popup.js' //구매이력
|
||||
import { openProductPopup } from '/kngil/js/adm_product_popup.js'
|
||||
import { openfaqPopup } from '/kngil/js/adm_faq_popup.js'
|
||||
|
||||
// =========================
|
||||
// 상단 회사 Grid 생성
|
||||
// =========================
|
||||
createSuperAdminGrid('#userGrid')
|
||||
bindSaveButton()
|
||||
// =========================
|
||||
// 하단 사용자 Grid 생성 (빈 상태)
|
||||
// =========================
|
||||
createUserGrid('#detailGrid', {
|
||||
loadSummary: false
|
||||
})
|
||||
|
||||
// =========================
|
||||
// 구매이력 버튼
|
||||
// =========================
|
||||
// 구매이력 버튼
|
||||
/*
|
||||
document.getElementById('btnPurchaseHistory')
|
||||
.addEventListener('click', () => {
|
||||
// 실제로는 선택된 회원ID를 넘길 예정
|
||||
openPurchaseHistoryPopup('TEST001')
|
||||
})
|
||||
*/
|
||||
// 💡 PHP 세션에서 로그인한 회원 ID 가져오기
|
||||
// 세션 배열 구조에 따라 $_SESSION['login']['member_id']를 참조합니다.
|
||||
const loginMemberId = "<?php echo $_SESSION['login']['member_id'] ?? ''; ?>";
|
||||
const isSuperAdmin = <?php echo IS_SUPER_ADMIN ? 'true' : 'false'; ?>; // 관리자 여부
|
||||
// 구매이력 버튼 클릭 이벤트
|
||||
document.getElementById('btnPurchaseHistory')
|
||||
.addEventListener('click', () => {
|
||||
if (!loginMemberId) {
|
||||
alert('로그인 세션이 만료되었거나 회원 정보를 찾을 수 없습니다.');
|
||||
return;
|
||||
}
|
||||
|
||||
// 'TEST001' 대신 실제 로그인한 세션 ID를 전달합니다.
|
||||
openPurchaseHistoryPopup('',isSuperAdmin);
|
||||
|
||||
})
|
||||
// =========================
|
||||
// 상품등록 버튼
|
||||
// =========================
|
||||
document.getElementById('btnProductManage')
|
||||
.addEventListener('click', () => {
|
||||
openProductPopup()
|
||||
})
|
||||
|
||||
// =========================
|
||||
// F&Q 버튼
|
||||
// =========================
|
||||
document.getElementById('btnfaq')
|
||||
.addEventListener('click', () => {
|
||||
openfaqPopup()
|
||||
})
|
||||
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
188
kngil/skin/adm_comp.php
Normal file
188
kngil/skin/adm_comp.php
Normal file
@@ -0,0 +1,188 @@
|
||||
<?php
|
||||
require_once $_SERVER['DOCUMENT_ROOT'].'/kngil/bbs/adm_guard.php';
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>관리자 페이지</title>
|
||||
|
||||
<!-- CSS -->
|
||||
<!-- <link rel="stylesheet" href="/css/common.css"> -->
|
||||
<link rel="stylesheet" href="/kngil/css/adm_style.css">
|
||||
<!-- <link rel="stylesheet" href="/css/w2ui-custom.css"> -->
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/vitmalina/w2ui@master/dist/w2ui.min.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<a href="/kngil/skin/index.php" class="btn-home-fixed" title="홈으로">
|
||||
<svg class="icon-home"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round">
|
||||
<path d="M3 11L12 3l9 8"/>
|
||||
<path d="M5 10v10h5v-6h4v6h5V10"/>
|
||||
</svg>
|
||||
</a>
|
||||
<h1 class="adm-title">
|
||||
관리자 페이지
|
||||
<div class="adm-title-actions">
|
||||
<button id="btnUseHistory" class="btn-history">사용이력</button>
|
||||
<button id="btnPurchaseHistory" class="btn-history">구매이력</button>
|
||||
</div>
|
||||
</h1>
|
||||
<!-- 계약 / 사용량 -->
|
||||
<div class="card adm-summary">
|
||||
|
||||
<!-- 1행 -->
|
||||
<div class="adm-row">
|
||||
<div class="adm-item">
|
||||
<span class="label">계약현황</span>
|
||||
<span class="value">회원ID</span>
|
||||
<span class="value bold" id="memberId">-</span>
|
||||
</div>
|
||||
|
||||
<div class="adm-item">
|
||||
<span class="label">요금제</span>
|
||||
<span class="value bold" id="planName">-</span>
|
||||
</div>
|
||||
|
||||
<div class="adm-item right">
|
||||
<span class="label">유효기간</span>
|
||||
<span class="value" id="dateRange">-</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 2행 -->
|
||||
<div class="adm-row usage">
|
||||
|
||||
<div class="adm-item">
|
||||
<span class="label">사용현황</span>
|
||||
<span class="value">발급ID</span>
|
||||
<span class="value bold" id="issuedCnt">-</span>
|
||||
</div>
|
||||
|
||||
<div class="adm-item">
|
||||
<span class="label">사용ID</span>
|
||||
<span class="value bold" id="usedCnt">-</span>
|
||||
</div>
|
||||
|
||||
<div class="usage-box">
|
||||
<div class="usage-text">
|
||||
<span id="usedArea">-</span>
|
||||
<span id="totalArea">-</span>
|
||||
</div>
|
||||
|
||||
<div class="usage-bar">
|
||||
<div class="usage-used" id="usedBar">0%</div>
|
||||
<div class="usage-remain" id="remainBar"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="adm-search">
|
||||
<input type="text" id="schKeyword" placeholder="검색어 입력">
|
||||
|
||||
<select id="schType">
|
||||
<option value="">전체</option>
|
||||
<option value="id">ID</option>
|
||||
<option value="name">이름</option>
|
||||
<option value="dept">부서</option>
|
||||
</select>
|
||||
|
||||
<select id="schUseYn">
|
||||
<option value="">전체</option>
|
||||
<option value="Y">사용</option>
|
||||
<option value="N">미사용</option>
|
||||
</select>
|
||||
|
||||
<button id="btnSearch">검색</button>
|
||||
|
||||
<!-- ✅ 회원ID (관리자 전용 컨트롤) -->
|
||||
<input
|
||||
type="text"
|
||||
id="targetMemberId"
|
||||
class="adm-member-input"
|
||||
placeholder="회원ID"
|
||||
>
|
||||
|
||||
<button id="btnBulkCreate" class="btn-bulk">
|
||||
일괄생성
|
||||
</button>
|
||||
<button id="btnSave_comp">저장</button>
|
||||
<button id="btnDelete">삭제</button>
|
||||
<button id="btnAdd">추가</button>
|
||||
</div>
|
||||
|
||||
<!-- Grid -->
|
||||
<div class="card">
|
||||
<div id="userGrid" style="height:730px;"></div>
|
||||
</div>
|
||||
|
||||
<!-- ✅ ES Module 진입점 -->
|
||||
<script type="module">
|
||||
import { createUserGrid, loadData } from '/kngil/js/adm_comp.js'
|
||||
import { openPurchaseHistoryPopup } from '/kngil/js/adm_purch_popup.js'
|
||||
import { openuseHistoryPopup } from '/kngil/js/adm_use_history.js'
|
||||
// 거래처 관리자 Grid 생성
|
||||
await createUserGrid('#userGrid', {
|
||||
loadSummary: true
|
||||
})
|
||||
//상단
|
||||
loadData()
|
||||
|
||||
// 💡 PHP 세션에서 로그인한 회원 ID 가져오기
|
||||
// 세션 배열 구조에 따라 $_SESSION['login']['member_id']를 참조합니다.
|
||||
const loginMemberId = "<?php echo $_SESSION['login']['member_id'] ?? ''; ?>";
|
||||
const isSuperAdmin = <?php echo IS_SUPER_ADMIN ? 'true' : 'false'; ?>; // 관리자 여부
|
||||
|
||||
// 회원ID input 초기화
|
||||
const memberInput = document.getElementById('targetMemberId');
|
||||
|
||||
if (memberInput) {
|
||||
if (isSuperAdmin) {
|
||||
// 관리자 / 개발자
|
||||
memberInput.value = loginMemberId || '';
|
||||
memberInput.disabled = false;
|
||||
} else {
|
||||
// 메인 / 서브
|
||||
memberInput.value = loginMemberId;
|
||||
memberInput.disabled = true;
|
||||
memberInput.style.display = 'none';
|
||||
}
|
||||
}
|
||||
|
||||
// 구매이력 버튼 클릭 이벤트
|
||||
document.getElementById('btnPurchaseHistory')
|
||||
.addEventListener('click', () => {
|
||||
if (!loginMemberId) {
|
||||
alert('로그인 세션이 만료되었거나 회원 정보를 찾을 수 없습니다.');
|
||||
return;
|
||||
}
|
||||
|
||||
// 'TEST001' 대신 실제 로그인한 세션 ID를 전달합니다.
|
||||
openPurchaseHistoryPopup(loginMemberId,isSuperAdmin);
|
||||
|
||||
})
|
||||
// 구매이력 버튼 클릭 이벤트
|
||||
document.getElementById('btnUseHistory')
|
||||
.addEventListener('click', () => {
|
||||
if (!loginMemberId) {
|
||||
alert('로그인 세션이 만료되었거나 회원 정보를 찾을 수 없습니다.');
|
||||
return;
|
||||
}
|
||||
|
||||
// 'TEST001' 대신 실제 로그인한 세션 ID를 전달합니다.
|
||||
openuseHistoryPopup(loginMemberId,isSuperAdmin);
|
||||
|
||||
})
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
188
kngil/skin/adm_comp1.php
Normal file
188
kngil/skin/adm_comp1.php
Normal file
@@ -0,0 +1,188 @@
|
||||
<?php
|
||||
require_once $_SERVER['DOCUMENT_ROOT'].'/kngil/bbs/adm_guard.php';
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>관리자 페이지</title>
|
||||
|
||||
<!-- CSS -->
|
||||
<!-- <link rel="stylesheet" href="/css/common.css"> -->
|
||||
<link rel="stylesheet" href="/kngil/css/adm_style.css">
|
||||
<link rel="stylesheet" href="/kngil/css/adm_style.clean.css">
|
||||
<!-- <link rel="stylesheet" href="/css/w2ui-custom.css"> -->
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/vitmalina/w2ui@master/dist/w2ui.min.css">
|
||||
</head>
|
||||
|
||||
<body class="page-admin">
|
||||
<a href="/kngil/skin/index.php" class="btn-home-fixed" title="홈으로">
|
||||
<svg class="icon-home"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round">
|
||||
<path d="M3 11L12 3l9 8"/>
|
||||
<path d="M5 10v10h5v-6h4v6h5V10"/>
|
||||
</svg>
|
||||
</a>
|
||||
<h1 class="adm-title">
|
||||
관리자 페이지
|
||||
<div class="adm-title-actions">
|
||||
<button id="btnUseHistory" class="btn-ghost">사용이력</button>
|
||||
<button id="btnPurchaseHistory" class="btn-ghost">구매이력</button>
|
||||
</div>
|
||||
</h1>
|
||||
<!-- 계약 / 사용량 -->
|
||||
<div class="card adm-summary summary-card">
|
||||
|
||||
<!-- 1행 -->
|
||||
<div class="adm-row">
|
||||
<div class="adm-item">
|
||||
<span class="label">계약현황</span>
|
||||
<span class="value">회원ID</span>
|
||||
<span class="value bold" id="memberId">-</span>
|
||||
</div>
|
||||
|
||||
<div class="adm-item">
|
||||
<span class="label">요금제</span>
|
||||
<span class="value bold" id="planName">-</span>
|
||||
</div>
|
||||
|
||||
<div class="adm-item right">
|
||||
<span class="label">유효기간</span>
|
||||
<span class="value" id="dateRange">-</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 2행 -->
|
||||
<div class="adm-row usage">
|
||||
|
||||
<div class="adm-item">
|
||||
<span class="label">사용현황</span>
|
||||
<span class="value">발급ID</span>
|
||||
<span class="value bold" id="issuedCnt">-</span>
|
||||
</div>
|
||||
|
||||
<div class="adm-item">
|
||||
<span class="label">사용ID</span>
|
||||
<span class="value bold" id="usedCnt">-</span>
|
||||
</div>
|
||||
|
||||
<div class="usage-box">
|
||||
<div class="usage-text">
|
||||
<span id="usedArea">-</span>
|
||||
<span id="totalArea">-</span>
|
||||
</div>
|
||||
|
||||
<div class="usage-bar">
|
||||
<div class="usage-used" id="usedBar"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="adm-search search-card">
|
||||
<input type="text" id="schKeyword" placeholder="검색어 입력">
|
||||
|
||||
<select id="schType">
|
||||
<option value="">전체</option>
|
||||
<option value="id">ID</option>
|
||||
<option value="name">이름</option>
|
||||
<option value="dept">부서</option>
|
||||
</select>
|
||||
|
||||
<select id="schUseYn">
|
||||
<option value="">전체</option>
|
||||
<option value="Y">사용</option>
|
||||
<option value="N">미사용</option>
|
||||
</select>
|
||||
|
||||
<button id="btnSearch" class="btn-ghost">검색</button>
|
||||
|
||||
<!-- ✅ 회원ID (관리자 전용 컨트롤) -->
|
||||
<input
|
||||
type="text"
|
||||
id="targetMemberId"
|
||||
class="adm-member-input"
|
||||
placeholder="회원ID"
|
||||
>
|
||||
|
||||
<button id="btnBulkCreate" class="btn-ghost">
|
||||
일괄생성
|
||||
</button>
|
||||
<button id="btnSave_comp" class="btn-primary">저장</button>
|
||||
<button id="btnDelete" class="btn-danger">삭제</button>
|
||||
<button id="btnAdd" class="btn-success">추가</button>
|
||||
</div>
|
||||
|
||||
<!-- Grid -->
|
||||
<div class="card grid-card">
|
||||
<div id="userGrid" style="height:730px;"></div>
|
||||
</div>
|
||||
|
||||
<!-- ✅ ES Module 진입점 -->
|
||||
<script type="module">
|
||||
import { createUserGrid, loadData } from '/kngil/js/adm_comp.js'
|
||||
import { openPurchaseHistoryPopup } from '/kngil/js/adm_purch_popup.js'
|
||||
import { openuseHistoryPopup } from '/kngil/js/adm_use_history.js'
|
||||
// 거래처 관리자 Grid 생성
|
||||
await createUserGrid('#userGrid', {
|
||||
loadSummary: true
|
||||
})
|
||||
//상단
|
||||
loadData()
|
||||
|
||||
// 💡 PHP 세션에서 로그인한 회원 ID 가져오기
|
||||
// 세션 배열 구조에 따라 $_SESSION['login']['member_id']를 참조합니다.
|
||||
const loginMemberId = "<?php echo $_SESSION['login']['member_id'] ?? ''; ?>";
|
||||
const isSuperAdmin = <?php echo IS_SUPER_ADMIN ? 'true' : 'false'; ?>; // 관리자 여부
|
||||
|
||||
// 회원ID input 초기화
|
||||
const memberInput = document.getElementById('targetMemberId');
|
||||
|
||||
if (memberInput) {
|
||||
if (isSuperAdmin) {
|
||||
// 관리자 / 개발자
|
||||
memberInput.value = loginMemberId || '';
|
||||
memberInput.disabled = false;
|
||||
} else {
|
||||
// 메인 / 서브
|
||||
memberInput.value = loginMemberId;
|
||||
memberInput.disabled = true;
|
||||
memberInput.style.display = 'none';
|
||||
}
|
||||
}
|
||||
|
||||
// 구매이력 버튼 클릭 이벤트
|
||||
document.getElementById('btnPurchaseHistory')
|
||||
.addEventListener('click', () => {
|
||||
if (!loginMemberId) {
|
||||
alert('로그인 세션이 만료되었거나 회원 정보를 찾을 수 없습니다.');
|
||||
return;
|
||||
}
|
||||
|
||||
// 'TEST001' 대신 실제 로그인한 세션 ID를 전달합니다.
|
||||
openPurchaseHistoryPopup(loginMemberId,isSuperAdmin);
|
||||
|
||||
})
|
||||
// 구매이력 버튼 클릭 이벤트
|
||||
document.getElementById('btnUseHistory')
|
||||
.addEventListener('click', () => {
|
||||
if (!loginMemberId) {
|
||||
alert('로그인 세션이 만료되었거나 회원 정보를 찾을 수 없습니다.');
|
||||
return;
|
||||
}
|
||||
|
||||
// 'TEST001' 대신 실제 로그인한 세션 ID를 전달합니다.
|
||||
openuseHistoryPopup(loginMemberId,isSuperAdmin);
|
||||
|
||||
})
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
165
kngil/skin/faq_list.skin.php
Normal file
165
kngil/skin/faq_list.skin.php
Normal file
@@ -0,0 +1,165 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<head>
|
||||
<?php include __DIR__ . "/_head.php"; ?>
|
||||
<title>Q&A</title>
|
||||
<!-- <script src="/kngil/js/faq/jquery-1.12.4.min.js?ver=2304171"></script> -->
|
||||
<!-- <script src="/kngil/js/faq/jquery-migrate-1.4.1.min.js?ver=2304171"></script> -->
|
||||
<script src="/kngil/js/faq/jquery.menu.js?ver=2304171"></script>
|
||||
<script src="/kngil/js/faq/wrest.js?ver=2304171"></script>
|
||||
<script src="/kngil/js/faq/placeholders.min.js?ver=2304171"></script>
|
||||
<script src="/kngil/js/faq/owlcarousel/owl.carousel.min.js?ver=2304171"></script>
|
||||
<script src="/kngil/js/faq/jquery.bxslider.js?ver=2304171"></script>
|
||||
<!-- //그누보드 작성 -->
|
||||
|
||||
<!-- 디자인팀 작성 -->
|
||||
<script type="text/javascript" src="/kngil/js/faq/jquery-3.6.1.min.js"></script>
|
||||
<script type="text/javascript" src="/kngil/js/faq/jquery.mousewheel.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/gsap.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollTrigger.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollToPlugin.min.js"></script>
|
||||
<link rel="stylesheet" href="https://unpkg.com/aos@2.3.1/dist/aos.css" type="text/css"/>
|
||||
<link rel="stylesheet" href="https://unpkg.com/lenis@1.1.9/dist/lenis.css">
|
||||
<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
|
||||
<script src="https://unpkg.com/lenis@1.1.9/dist/lenis.min.js"></script>
|
||||
|
||||
<script type="text/javascript" src="/kngil/js/faq/faq_popup.js"></script>
|
||||
|
||||
<link rel="stylesheet" href="/kngil/css/qa/font-awesome.min.css?ver=2303229">
|
||||
|
||||
|
||||
<!-- //디자인팀 작성 -->
|
||||
</head>
|
||||
|
||||
<!-- FAQ 시작 { -->
|
||||
<body>
|
||||
<div class="wrap">
|
||||
|
||||
<!-- HEADER -->
|
||||
<?php include __DIR__ . "/_header.php"; ?>
|
||||
<!-- //HEADER -->
|
||||
|
||||
<?php
|
||||
include __DIR__ . "/pop_login.php";
|
||||
include __DIR__ . "/pop_join.php";
|
||||
include __DIR__ . "/pop_agreement.php";
|
||||
include __DIR__ . "/pop_mypage01.php";
|
||||
include __DIR__ . "/pop_mypage02.php";
|
||||
include __DIR__ . "/pop_mypage03.php";
|
||||
include __DIR__ . "/pop_password.php";
|
||||
include __DIR__ . "/pop_privacy.php";
|
||||
include __DIR__ . "/pop_search.php";
|
||||
// include __DIR__ . "/_nav.php";
|
||||
?>
|
||||
|
||||
<div class="container faq">
|
||||
<!-- 상단 타이틀 -->
|
||||
<section class="sub-header">
|
||||
<div class="page-title">
|
||||
<h2 data-aos="fade-down" data-aos-duration="1000">FAQ</h2>
|
||||
<p class="sub-txt">KNGIL 관련 문의하기</p>
|
||||
</div>
|
||||
|
||||
<ul class="sub-tab">
|
||||
<li class="on">
|
||||
<a href="/kngil/skin/faq_list.skin.php">자주하는 질문(FAQ)</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/kngil/bbs/qa_list.php">문의하기(Q&A)</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://939.co.kr/saman/" target="_blank">원격지원</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
|
||||
<section class="sub-content">
|
||||
<h3 class="sub-tit">자주하는 질문(FAQ)</h3>
|
||||
|
||||
<!-- 검색 -->
|
||||
<fieldset id="faq_sch" class="search-box">
|
||||
<legend>FAQ 검색</legend>
|
||||
<input type="text" id="faqSearch" class="frm-input" placeholder="검색어를 입력하세요">
|
||||
<button type="button" value="검색" class="btn-submit" aria-label="FAQ 검색 실행">
|
||||
<i class="fa fa-search" aria-hidden="true"></i> 검색
|
||||
</button>
|
||||
</fieldset>
|
||||
|
||||
|
||||
|
||||
<!-- FAQ LIST (아코디언은 이 페이지 인라인 스크립트로 동작) -->
|
||||
<ol id="faqList" class="faq-list" data-faq-handled="page">
|
||||
<?php
|
||||
// 1. DB 연결 파일 포함 (파일 경로가 다르면 수정하세요)
|
||||
$db_path = __DIR__ . "/../bbs/db_conn.php";
|
||||
if (file_exists($db_path)) {
|
||||
include_once $db_path;
|
||||
} else {
|
||||
echo "<li style='padding:20px; color:red;'>설정 파일 오류: db_conn.php를 찾을 수 없습니다.</li>";
|
||||
}
|
||||
|
||||
try {
|
||||
// 2. 쿼리 실행 (PDO 방식)
|
||||
$sql = "SELECT fa_subject, fa_content FROM kngil.fa_comments ORDER BY sq_no ASC";
|
||||
$stmt = $pdo->prepare($sql);
|
||||
$stmt->execute();
|
||||
|
||||
$i = 0;
|
||||
// 3. 데이터 패치 및 출력
|
||||
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
|
||||
$question = $row['fa_subject'];
|
||||
$answer = $row['fa_content'];
|
||||
$i++;
|
||||
?>
|
||||
<li class="faq-item">
|
||||
<h3 class="faq-question">
|
||||
<span class="tit-bg">Q</span>
|
||||
<a href="#" class="faq-link"><?php echo htmlspecialchars($question); ?></a>
|
||||
<button type="button" class="faq-icon" aria-label="답변 열기">
|
||||
<i class="ico-plus" aria-hidden="true"></i>
|
||||
</button>
|
||||
</h3>
|
||||
<div class="faq-answer">
|
||||
<div class="con-inner">
|
||||
<?php echo nl2br(htmlspecialchars($answer)); ?>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<?php
|
||||
}
|
||||
|
||||
if ($i == 0) {
|
||||
echo "<li class='no_data' style='text-align:center; padding:50px;'>등록된 FAQ 데이터가 없습니다.</li>";
|
||||
}
|
||||
|
||||
} catch (PDOException $e) {
|
||||
// 에러 발생 시 출력
|
||||
echo "<li style='color:red;'>데이터 로딩 오류: " . $e->getMessage() . "</li>";
|
||||
}
|
||||
?>
|
||||
</ol>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- FOOTER -->
|
||||
<?php include __DIR__ . "/_footer.php"; ?>
|
||||
<!-- //FOOTER -->
|
||||
|
||||
</div>
|
||||
<script src="/kngil/js/index.js"></script>
|
||||
<script src="/kngil/js/mypage.js"></script>
|
||||
<script src="/kngil/js/join.js"></script>
|
||||
<script type="module" src="/kngil/js/login.js"></script>
|
||||
<script src="/kngil/js/login_sms.js"></script>
|
||||
<script>
|
||||
AOS.init();
|
||||
|
||||
</script>
|
||||
|
||||
</body>
|
||||
|
||||
<script src="/kngil/js/viewimageresize.js"></script>
|
||||
59
kngil/skin/index.php
Normal file
59
kngil/skin/index.php
Normal file
@@ -0,0 +1,59 @@
|
||||
<!DOCTYPE html>
|
||||
<!--index.php-->
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<?php include __DIR__ . "/_head.php"; ?>
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrap main">
|
||||
<div class="main-mask">
|
||||
|
||||
<?php include __DIR__ . "/_header.php"; ?>
|
||||
|
||||
<!-- container -->
|
||||
<div class="container">
|
||||
<section class="main-contents">
|
||||
<div class="bg-video">
|
||||
<a href="./value.html" class="main-link" id="main_video_link">
|
||||
<video id="video_play" autoplay muted>
|
||||
<source src="/kngil/img/video/main_1.mp4" type="video/mp4" class="main-video-01">
|
||||
</video>
|
||||
</a>
|
||||
</div>
|
||||
<ul class="main-pagination">
|
||||
<li><div class="page-01 page-on" data-page="1"><img src="/kngil/img/logo_kngil.svg" alt="KNGIL"></div><span>01</span></li>
|
||||
<li><div class="page-02" data-page="2">제공데이터</div><span>02</span></li>
|
||||
<li><div class="page-03" data-page="3">주요기능</div><span>03</span></li>
|
||||
<li><div class="page-04" data-page="4">데이터분석</div><span>04</span></li>
|
||||
<li><div class="page-05" data-page="5">성과품</div><span>05</span></li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
<?php include __DIR__ . "/_footer.php"; ?>
|
||||
<!-- // container -->
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
include __DIR__ . "/pop_login.php";
|
||||
include __DIR__ . "/pop_join.php";
|
||||
include __DIR__ . "/pop_agreement.php";
|
||||
include __DIR__ . "/pop_mypage01.php";
|
||||
include __DIR__ . "/pop_mypage02.php";
|
||||
include __DIR__ . "/pop_mypage03.php";
|
||||
include __DIR__ . "/pop_password.php";
|
||||
include __DIR__ . "/pop_privacy.php";
|
||||
include __DIR__ . "/pop_search.php";
|
||||
include __DIR__ . "/_nav.php";
|
||||
?>
|
||||
<script>
|
||||
window.IS_LOGIN = <?= isset($_SESSION['login']) ? 'true' : 'false' ?>;
|
||||
</script>
|
||||
<script src="/kngil/js/index.js"></script>
|
||||
<script src="/kngil/js/mypage.js"></script>
|
||||
<script src="/kngil/js/join.js"></script>
|
||||
<script type="module" src="/kngil/js/login.js"></script>
|
||||
<script src="/kngil/js/login_sms.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
314
kngil/skin/pop_agreement.php
Normal file
314
kngil/skin/pop_agreement.php
Normal file
@@ -0,0 +1,314 @@
|
||||
<!-- popup_wrap -->
|
||||
<div class="popup-wrap" id="pop_agreement" role="dialog" aria-labelledby="agreement_title" aria-modal="true">
|
||||
<!-- popup_in -->
|
||||
<div class="popup-in member">
|
||||
<button class="btn-close" type="button" aria-label="팝업 닫기">
|
||||
<img src="/kngil/img/ico/ico_close.svg" alt="닫기">
|
||||
</button>
|
||||
<!-- popup_container -->
|
||||
<div class="popup-container join">
|
||||
<!-- pop_header -->
|
||||
<div class="pop-header">
|
||||
<h2 class="tit" id="agreement_title">회원가입</h2>
|
||||
</div>
|
||||
<!-- //pop_header -->
|
||||
<!-- pop_body -->
|
||||
<div class="pop-body">
|
||||
<form action="" method="post" novalidate>
|
||||
<div class="terms-wrap">
|
||||
<div class="terms-area">
|
||||
<div class="check-box">
|
||||
<label for="terms_agree">이용약관</label>
|
||||
<input type="checkbox" id="terms_agree">
|
||||
</div>
|
||||
<div class="terms-box">
|
||||
<em>KNGIL 소프트웨어 이용약관</em> <br>
|
||||
<br>
|
||||
<em>제1장 총칙</em> <br>
|
||||
<em>제1조 (목적)</em><br>
|
||||
이 약관은 바론컨설턴트(이하 "회사"라 합니다)가 제공하는 KNGIL 소프트웨어(이하 "서비스"라 합니다)를 이용함에 있어 회사와 이용자 간의 권리,
|
||||
의무 및 책임사항과 기타 필요한 사항을 정하는 것을 목적으로 합니다.<br>
|
||||
<em>제2조 (용어의 정의)</em> <br>
|
||||
① 본 약관에서 사용하는 용어의 정의는 다음과 같습니다:<br>
|
||||
- “서비스”란 회사가 제공하는 소프트웨어 및 관련 제반 서비스를 의미합니다.<br>
|
||||
- “이용자”란 회사의 서비스에 접속하여 본 약관에 따라 회사가 제공하는 서비스를 이용하는 회원 및 비회원을 말합니다.<br>
|
||||
- “회원”이란 본 약관에 동의하고 회사와 이용계약을 체결한 자를 의미합니다.<br>
|
||||
- “비회원”이란 회원가입을 하지 않고 회사가 제공하는 일부 서비스를 이용하는 자를 말합니다.<br>
|
||||
|
||||
<em>제3조 (약관의 효력 및 변경)</em><br>
|
||||
① 본 약관은 이용자가 본 약관에 동의하고, 회사가 이에 대한 승낙을 완료함으로써 효력이 발생합니다.
|
||||
② 회사는 필요한 경우 본 약관을 변경할 수 있으며, 변경된 약관은 서비스 화면에 공지된 후 효력이 발생합니다.<br>
|
||||
|
||||
<em>제4조 (약관 외 준칙)</em><br>
|
||||
본 약관에 명시되지 않은 사항에 대해서는 대한민국의 관련 법령과 상관습에 따릅니다.<br>
|
||||
|
||||
<em>제2장 서비스 이용계약</em><br>
|
||||
<em>제5조 (이용계약의 성립)</em><br>
|
||||
이용계약은 이용자가 약관의 내용에 동의하고, 회사가 제공하는 소정의 회원가입 신청서를 작성하여 가입을 완료한 후, 회사가 이를 승인함으로써 성립합니다.<br>
|
||||
|
||||
<em>제6조 (이용계약의 유보와 거절)</em><br>
|
||||
① 회사는 다음 각 호에 해당하는 경우 이용계약의 성립을 유보하거나 거절할 수 있습니다:
|
||||
- 신청서의 내용이 허위로 판명된 경우
|
||||
- 서비스 제공이 기술적으로 어려운 경우<br>
|
||||
|
||||
<em>제7조 (계약사항의 변경)</em><br>
|
||||
회원은 개인정보 관리 메뉴를 통해 언제든지 자신의 정보를 열람하고 수정할 수 있습니다. 회원의 정보가 변경된 경우 즉시 수정해야 하며, 수정하지 않아
|
||||
발생하는 문제의 책임은 회원에게 있습니다.<br>
|
||||
|
||||
<em>제3장 개인정보 보호</em><br>
|
||||
|
||||
<em>제8조 (개인정보 보호의 원칙)</em><br>
|
||||
① 회원의 개인정보는 관련 법령에 따라 보호됩니다.
|
||||
② 회사는 개인정보 보호와 관련된 세부 사항을 별도로 마련한 개인정보처리방침에 따라 관리하며, 이용자는 언제든지 해당 방침을 통해 개인정보 관리에 대한
|
||||
자세한 내용을 확인할 수 있습니다.<br>
|
||||
|
||||
<em>제9조 (개인정보처리방침 준수)</em><br>
|
||||
① 회사는 개인정보 보호와 관련된 구체적인 사항을 개인정보처리방침에 따라 관리합니다.
|
||||
② 개인정보의 수집, 이용, 제공, 보관, 보호 등에 관한 사항은 회사의 개인정보처리방침을 따르며, 이용자는 회사 웹사이트에서 이를 확인할 수
|
||||
있습니다.
|
||||
③ 회사는 개인정보 보호를 위해 최선을 다하며, 관련 법령에 따라 이용자의 개인정보를 안전하게 관리합니다.<br>
|
||||
|
||||
<em>제10조 (14세 미만 아동의 개인정보 보호)</em><br>
|
||||
① 회사는 14세 미만 아동의 개인정보를 수집할 경우, 반드시 법정대리인의 동의를 받아야 합니다.
|
||||
② 법정대리인은 아동의 개인정보 열람, 수정, 삭제를 요청할 수 있으며, 회사는 이를 신속하게 처리합니다.
|
||||
③ 14세 미만 아동의 개인정보 보호와 관련된 구체적인 사항은 개인정보처리방침에 명시되어 있습니다.<br>
|
||||
|
||||
<em>제4장 서비스 제공 및 이용</em><br>
|
||||
제11조 (서비스 제공)<br>
|
||||
회사는 회원의 이용 신청을 승인한 때부터 서비스를 개시합니다. 서비스 이용은 연중무휴 24시간을 원칙으로 합니다.<br>
|
||||
|
||||
<em>제12조 (서비스의 변경 및 중단)</em> <br>
|
||||
회사는 서비스 제공이 어려운 경우 사전 고지 후 서비스를 변경하거나 중단할 수 있습니다.<br>
|
||||
|
||||
<em>제5장 정보 제공 및 광고</em><br>
|
||||
제13조 (정보 제공 및 광고)<br>
|
||||
① 회사는 서비스 이용 중 필요하다고 인정되는 정보 및 광고를 제공할 수 있습니다.
|
||||
② 회원은 원치 않는 정보를 수신 거부할 수 있습니다.<br>
|
||||
|
||||
<em>제6장 게시물 관리</em><br>
|
||||
<em>제14조 (게시물의 관리)</em><br>
|
||||
회사는 회원이 게시한 내용이 불법적이거나 약관에 위배될 경우 이를 삭제할 수 있습니다.<br>
|
||||
|
||||
<em>제15조 (게시물의 저작권)</em><br>
|
||||
게시물의 저작권은 회원에게 있으며, 회사는 이를 서비스 홍보 및 개선 목적으로 사용할 수 있습니다.<br>
|
||||
|
||||
<em>제7장 계약 해지 및 이용 제한</em><br>
|
||||
<em>제16조 (계약 해지)</em> <br>
|
||||
회원은 언제든지 계약 해지를 요청할 수 있으며, 회사는 신속하게 처리합니다.<br>
|
||||
|
||||
<em>제17조 (이용 제한)</em><br>
|
||||
회사는 회원이 약관을 위반할 경우 서비스 이용을 제한할 수 있습니다.<br>
|
||||
|
||||
<em>제8장 손해 배상 및 면책 조항</em><br>
|
||||
<em>제18조 (손해 배상)</em><br>
|
||||
회사는 무료로 제공되는 서비스와 관련하여 회원에게 발생한 손해에 대해 책임을 지지 않습니다.<br>
|
||||
|
||||
<em>제19조 (면책 조항)</em><br>
|
||||
회사는 천재지변 등 불가항력적인 사유로 인해 서비스를 제공하지 못하는 경우 책임을 지지 않습니다.<br>
|
||||
|
||||
<em>제9장 유료 서비스</em> <br>
|
||||
<em>20조 (유료 서비스의 이용)</em><br>
|
||||
① 회사는 회원에게 특정 서비스에 대해 유료로 제공할 수 있습니다.
|
||||
② 유료 서비스의 이용 요금, 결제 방식, 환불 절차 등에 대한 상세 내용은 서비스 안내 페이지와 결제 화면에 명시합니다.
|
||||
③ 유료 서비스 이용 요금은 회사가 정한 결제 방식에 따라 결제됩니다. 회원은 신용카드, 계좌이체, 휴대전화 결제 등 회사가 제공하는 다양한 결제
|
||||
방식을 통해 요금을 납부할 수 있습니다.
|
||||
④ 유료 서비스의 이용 요금은 선불 결제를 원칙으로 하며, 이용 기간 중 서비스 중지 및 해지 시 남은 이용 기간에 대한 환불은 회사의 환불 정책에
|
||||
따라 처리됩니다.
|
||||
⑤ 회사는 회원의 유료 서비스 이용과 관련하여 발생한 문제에 대해 최선을 다해 해결하도록 노력합니다. 다만, 회사의 고의 또는 중대한 과실이 없는 한
|
||||
회원이 유료 서비스 이용 중 입은 손해에 대해서는 책임을 지지 않습니다.<br>
|
||||
|
||||
<em>20조 (유료 서비스의 이용)</em> <br>
|
||||
① 회원은 결제 후 7일 이내에 서비스 이용을 시작하지 않은 경우, 요금 전액을 환불받을 수 있습니다.
|
||||
② 유료 서비스 이용 중 부득이한 사유로 서비스가 중지된 경우, 회사는 이용하지 않은 부분에 대해 환불 절차를 밟습니다.
|
||||
③ 회원의 귀책사유로 인해 서비스 이용이 중지된 경우, 환불이 불가능합니다.
|
||||
④ 환불은 회원이 지정한 계좌로 환불 절차를 거치며, 환불 요청 후 7일 이내에 처리됩니다.<br>
|
||||
|
||||
<em>제22조 (유료 서비스의 중지 및 해지)</em><br>
|
||||
① 회원이 유료 서비스를 해지하고자 하는 경우, 회사의 고객 지원 센터에 해지 신청을 해야 합니다.
|
||||
② 회사는 회원이 약관을 위반하거나 부정한 방법으로 유료 서비스를 이용한 경우, 유료 서비스 이용을 즉시 중지하고 계약을 해지할 수 있습니다.<br>
|
||||
|
||||
<em>제10장 양도 금지</em><br>
|
||||
<em>제23조 (양도 금지)</em><br>
|
||||
회원은 서비스 이용권한, 기타 이용계약상의 지위를 제3자에게 양도, 증여할 수 없으며, 이를 담보로 제공할 수 없습니다.<br>
|
||||
|
||||
<em>제11장 관할 법원</em><br>
|
||||
<em>제24조 (분쟁 해결)</em><br>
|
||||
서비스 이용과 관련하여 분쟁이 발생한 경우, 회사와 회원은 성실히 협의하여 해결합니다.<br>
|
||||
|
||||
<em>제25조 (관할 법원)</em><br>
|
||||
본 약관에 따른 분쟁은 서울중앙지방법원을 관할 법원으로 합니다.<br>
|
||||
|
||||
<em>부칙</em><br>
|
||||
본 약관은 2024년 10월 1일부터 시행됩니다.<br>
|
||||
</div>
|
||||
</div>
|
||||
<div class="terms-area">
|
||||
<div class="check-box">
|
||||
<label for="privacy_agree">개인정보 수집 및 이용 동의</label>
|
||||
<input type="checkbox" id="privacy_agree">
|
||||
</div>
|
||||
<div class="terms-box">
|
||||
<em>KNGIL 서비스 개인정보처리방침</em> <br>
|
||||
<br>
|
||||
<em>제1조 (목적)</em><br>
|
||||
<em>제1조 (목적)</em><br>
|
||||
바론컨설턴트(이하 "회사")는 KNGIL 서비스(이하 "서비스")를 이용하는 고객(이하 "이용자")의 개인정보를 보호하고, 「개인정보 보호법」에 따라
|
||||
책임과 의무를 다하기 위해 본 개인정보처리방침을 마련했습니다. 본 방침은 이용자가 제공한 개인정보가 어떻게 수집, 이용, 보관, 보호되는지를
|
||||
설명합니다.<br>
|
||||
|
||||
<em>제2조 (개인정보의 처리목적)</em><br>
|
||||
회사는 다음의 목적을 위해 개인정보를 처리합니다. 처리하고 있는 개인정보는 다음의 목적 이외의 용도로는 이용되지 않으며, 이용 목적이 변경되는 경우에는
|
||||
「개인정보 보호법」 제18조에 따라 별도의 동의를 받는 등 필요한 조치를 이행할 예정입니다.
|
||||
- 본인확인: 회원가입 및 관리를 위한 본인 확인, 전화 또는 이메일을 통한 연락
|
||||
- 서비스 제공: 각종 통보 및 서비스 제공을 위한 업무 처리
|
||||
- 제품소개서 다운로드: 설명자료 전달
|
||||
- 상담 및 데모 신청: 상담 제공 및 데모 제공, 계약 처리자 정보 수집
|
||||
- 행사 참가 신청: 참석 안내 및 세미나/설명회/교육 제공
|
||||
- 보안가이드 제공: 안내자료 전달
|
||||
- 기술지원 문의: 서비스 사용 지원
|
||||
- 서비스 개선 의견 접수: 서비스 품질 개선
|
||||
- 마케팅 활동: 동의한 고객에 한해 뉴스레터 및 매거진 발송<br>
|
||||
|
||||
<em>제3조 (개인정보의 처리 및 보유 기간)</em><br>
|
||||
① 회사는 법령에 따른 개인정보 보유 및 이용기간 또는 정보주체로부터 개인정보를 수집 시 동의받은 개인정보 보유 및 이용기간 내에서 개인정보를 처리 및
|
||||
보유합니다.
|
||||
② 각각의 개인정보 처리 및 보유 기간은 다음과 같습니다:
|
||||
- 회원정보: 회원가입일부터 회원탈퇴 후 1년까지
|
||||
- 홍보, 상담, 계약용 개인정보: 2년<br>
|
||||
|
||||
<em>제4조 (개인정보의 제3자 제공)</em><br>
|
||||
① 회사는 정보주체의 개인정보를 제2조에서 명시한 범위 내에서만 처리하며, 정보 주체의 동의, 법률의 특별한 규정 등 「개인정보 보호법」 제17조 및
|
||||
제18조에 해당하는 경우에만 개인정보를 제3자에게 제공합니다.
|
||||
② 회사는 다음과 같이 개인정보를 제3자에게 제공하고 있습니다:
|
||||
- 제공받는 자: 수사기관 및 유관기관, 피신고업체
|
||||
- 이용 목적: 개인정보 침해 민원 처리
|
||||
- 제공하는 개인정보 항목: 성명, 연락처, 이메일
|
||||
- 보유 및 이용기간: 법령에서 정한 보존기간 및 제공목적 달성 시 파기<br>
|
||||
|
||||
<em>제5조 (개인정보 처리 위탁)</em><br>
|
||||
① 회사는 개인정보 처리업무를 외부 업체에 위탁하지 않으며, 자체적으로 처리하고 있습니다.
|
||||
② 회사가 특정 업무(예: 채용 업무)를 외부 업체에 위탁할 경우, 개인정보 처리방침 시행 전 회사 홈페이지에서 공지한 후 정보주체의 동의를 받은 후
|
||||
위탁합니다.<br>
|
||||
|
||||
<em>제6조 (정보주체의 권리·의무 및 행사 방법)</em><br>
|
||||
① 정보주체는 회사에 대해 언제든지 개인정보 열람, 정정, 삭제, 처리정지 요구 등의 권리를 행사할 수 있습니다.
|
||||
② 권리 행사는 다음과 같은 방법으로 할 수 있습니다:
|
||||
- 서면: 회사 주소로 서면 제출
|
||||
- 전자우편: 회사 이메일로 요청
|
||||
- 모사전송(FAX): 회사 FAX로 요청
|
||||
③ 권리 행사는 정보주체의 법정대리인이나 위임을 받은 자를 통해 대리로도 가능합니다. 이 경우 “개인정보 처리 방법에 관한 고시” 별지 제11호 서식에
|
||||
따른 위임장을 제출해야 합니다.
|
||||
④ 개인정보 열람 및 처리정지 요구는 「개인정보 보호법」 제35조 제4항, 제37조 제2항에 따라 제한될 수 있습니다.
|
||||
⑤ 개인정보의 정정 및 삭제 요구는 다른 법령에 따라 수집된 개인정보인 경우 제한될 수 있습니다.
|
||||
⑥ 회사는 권리 행사를 요청한 자가 본인 또는 정당한 대리인인지를 확인합니다.<br>
|
||||
|
||||
<em>제7조 (처리하는 개인정보의 항목)</em><br>
|
||||
회사는 다음의 개인정보 항목을 처리합니다:
|
||||
- 수집 항목:
|
||||
- 필수 항목: 성명, 휴대전화번호, 이메일
|
||||
- 선택 항목: 회사전화번호, 문의사항
|
||||
- 수집 방법:
|
||||
- 홈페이지, 전화, 이메일을 통해 수집<br>
|
||||
|
||||
<em>제8조 (개인정보의 파기)</em><br>
|
||||
① 회사는 개인정보 보유 기간의 경과, 처리 목적 달성 등 개인정보가 불필요하게 되었을 때 지체 없이 해당 개인정보를 파기합니다.
|
||||
② 정보주체로부터 동의받은 개인정보 보유 기간이 경과하거나 처리 목적이 달성된 경우에도 다른 법령에 따라 개인정보를 계속 보존해야 할 경우에는, 해당
|
||||
개인정보를 별도의 데이터베이스(DB)로 옮기거나 보관 장소를 달리하여 보존합니다.
|
||||
③ 개인정보 파기의 절차 및 방법은 다음과 같습니다:
|
||||
- 파기 절차: 회사는 파기 사유가 발생한 개인정보를 선정하고, 개인정보 보호책임자의 승인을 받아 개인정보를 파기합니다.
|
||||
- 파기 방법: 전자적 파일 형태로 기록된 개인정보는 복구할 수 없도록 기술적 방법을 사용해 삭제하며, 종이 문서에 기록된 개인정보는 분쇄기로
|
||||
분쇄하거나 소각하여 파기합니다.<br>
|
||||
|
||||
<em>제9조 (개인정보의 안전성 확보 조치)</em><br>
|
||||
회사는 개인정보의 안전성 확보를 위해 다음과 같은 조치를 취합니다:
|
||||
- 관리적 조치: 내부관리계획 수립·시행, 정기적 직원 교육
|
||||
- 기술적 조치: 개인정보처리시스템 접근 권한 관리, 접근통제시스템 설치, 고유식별정보 암호화, 보안 프로그램 설치
|
||||
- 물리적 조치: 전산실 및 자료보관실 접근 통제<br>
|
||||
|
||||
<em>제10조 (개인정보 자동 수집 장치의 설치·운영 및 거부에 관한 사항)</em><br>
|
||||
회사는 쿠키(Cookie)를 사용하지 않습니다. 쿠키는 이용자의 이용 정보를 저장하고 수시로 불러오는 작은 파일로, KNGIL 서비스에서는 쿠키를
|
||||
사용하지 않습니다.<br>
|
||||
|
||||
<em>제11조 (개인정보 보호책임자)</em><br>
|
||||
회사는 개인정보 처리에 관한 업무를 총괄하여 책임지고, 개인정보 처리와 관련된 정보주체의 불만처리 및 피해구제를 위해 개인정보 보호책임자를 지정하고
|
||||
있습니다.
|
||||
개인정보 보호책임자:
|
||||
- 성명: 최은혜
|
||||
- 직책: 연구원
|
||||
- 연락처: 02-2141-7443
|
||||
- 팩스번호: 02-408-1927
|
||||
- 이메일: b23065@hanmaceng.co.kr<br>
|
||||
|
||||
<em>제12조 (개인정보 열람청구)</em><br>
|
||||
정보주체는 「개인정보 보호법」 제35조에 따른 개인정보 열람 청구를 아래 부서에 할 수 있습니다. 회사는 정보주체의 개인정보 열람청구가 신속하게
|
||||
처리되도록 노력하겠습니다.
|
||||
개인정보 열람청구 접수·처리 부서:
|
||||
- 부서명: 총괄기획실
|
||||
- 담당자: 박진
|
||||
- 연락처: 02-2141-7485
|
||||
- 팩스번호: 02-2141-7599
|
||||
- 이메일: jpark@baroncs.co.kr<br>
|
||||
|
||||
<em>제13조 (권익침해 구제방법)</em><br>
|
||||
정보주체는 개인정보 침해로 인한 구제를 위해 개인정보분쟁조정위원회, 한국인터넷진흥원 개인정보침해신고센터 등에 분쟁 해결이나 상담을 신청할 수 있습니다.
|
||||
- 개인정보분쟁조정위원회: (국번없이) 1833-6972 (www.kopico.go.kr)
|
||||
- 개인정보침해신고센터: (국번없이) 118 (privacy.kisa.or.kr)
|
||||
- 대검찰청: (국번없이) 1301 (www.spo.go.kr)
|
||||
- 경찰청: (국번없이) 182 (www.police.go.kr)<br>
|
||||
|
||||
<em>제14조 (개인정보 처리방침의 변경)</em><br>
|
||||
본 개인정보처리방침은 법령, 정책 또는 보안 기술의 변경에 따라 내용의 추가, 삭제 및 수정이 있을 시, 개정 최소 7일 전에 홈페이지를 통해 사전
|
||||
공지합니다.<br>
|
||||
|
||||
<br>
|
||||
<em>부칙</em><br>
|
||||
|
||||
<em>제1조 (시행일자)</em><br>
|
||||
이 개인정보처리방침은 2024년 10월 1일부터 시행됩니다.<br>
|
||||
|
||||
<em>제2조 (개정 및 고지의 의무)</em><br>
|
||||
회사는 개인정보처리방침을 변경하는 경우, 변경사항을 시행일자 7일 전부터 서비스 내 공지사항 페이지를 통해 고지할 것입니다. 다만, 이용자의 권리나
|
||||
의무에 중대한 변경이 발생하는 경우에는 시행일자 30일 전부터 고지합니다.<br>
|
||||
|
||||
<em>제3조 (유효성)</em><br>
|
||||
본 개인정보처리방침의 일부 조항이 법적 또는 기타 사유로 인해 무효화되거나 시행할 수 없는 경우, 나머지 조항들은 계속해서 유효합니다. 무효화된 조항은
|
||||
관련 법령에 부합하는 방식으로 수정되어 효력을 지속합니다.<br>
|
||||
|
||||
<em>제4조 (변경 통지의 방법)</em><br>
|
||||
회사는 개인정보처리방침의 변경 시, 다음의 방법으로 이용자에게 고지합니다:
|
||||
- 서비스 초기화면 또는 팝업 공지
|
||||
- 이메일 발송
|
||||
- 회사 홈페이지 공지사항<br>
|
||||
|
||||
<em>제5조 (비회원의 개인정보 보호)</em><br>
|
||||
회사는 비회원의 개인정보도 회원과 동일한 수준으로 보호합니다. 비회원이 개인정보 제공을 거부할 경우 일부 서비스 이용에 제한이 있을 수 있습니다.<br>
|
||||
|
||||
<em>제6조 (14세 미만 아동의 개인정보 보호)</em><br>
|
||||
회사는 14세 미만 아동의 개인정보를 수집하지 않습니다. 만일 14세 미만 아동의 개인정보가 수집된 경우, 법정 대리인의 동의를 받아야 하며, 법정
|
||||
대리인의 동의 없이 수집된 경우 이를 지체 없이 파기합니다.<br>
|
||||
|
||||
<em>제7조 (개인정보의 국외 이전)</em><br>
|
||||
회사는 이용자의 개인정보를 국외로 이전하지 않으며, 향후 필요한 경우, 사전에 이용자의 동의를 받습니다.<br>
|
||||
|
||||
<em>제8조 (기타)</em><br>
|
||||
본 방침에 명시되지 않은 사항은 회사의 내부 방침과 관련 법령에 따릅니다.<br>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="check-box">
|
||||
<label for="all_agree">약관에 모두 동의합니다.</label>
|
||||
<input type="checkbox" id="all_agree" class="chk-all">
|
||||
</div>
|
||||
<div class="btn-wrap">
|
||||
<button class="btn-full" type="button" onclick="javascript:join();">확인</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<!-- //pop_body -->
|
||||
</div>
|
||||
<!-- //popup_container -->
|
||||
</div>
|
||||
<!-- //popup_in -->
|
||||
</div>
|
||||
<!-- //popup_wrap -->
|
||||
46
kngil/skin/pop_cancel.php
Normal file
46
kngil/skin/pop_cancel.php
Normal file
@@ -0,0 +1,46 @@
|
||||
<!-- popup_wrap -->
|
||||
<div class="popup-wrap" id="pop_cancel" role="dialog" aria-labelledby="mypage03_title" aria-modal="true">
|
||||
<!-- popup_in -->
|
||||
<div class="popup-in mypage">
|
||||
<button class="btn-close" type="button" aria-label="팝업 닫기">
|
||||
<img src="/kngil/img/ico/ico_close.svg" alt="닫기">
|
||||
</button>
|
||||
<!-- popup_container -->
|
||||
<div class="popup-container cancel">
|
||||
<!-- pop_header -->
|
||||
<div class="pop-header">
|
||||
<h2 class="tit" id="mypage03_title">회원 탈퇴</h2>
|
||||
<p class="sub-txt">
|
||||
<em>
|
||||
서비스를 이용해주셔서 감사합니다.<br><br>
|
||||
탈퇴 전 내용을 <br>
|
||||
다시 한 번 확인해주세요.
|
||||
</em>
|
||||
</p>
|
||||
</div>
|
||||
<!-- //pop_header -->
|
||||
<!-- pop_body -->
|
||||
<div class="pop-body">
|
||||
<div class="messages">
|
||||
<div class="msg-box">
|
||||
<div class="ico-pw"><img src="/kngil/img/ico/ico_people_del.svg" alt=""></div>
|
||||
<p>
|
||||
탈퇴 시 서비스 이용이 <em class="tc-red">즉시 종료</em>되며, <br />
|
||||
<em>이용 중인 유료 서비스는 더 이상 사용할 수 없습니다.</em>
|
||||
</p>
|
||||
<br/>
|
||||
<p><em>그래도 탈퇴하시겠습니까?</em></p>
|
||||
</div>
|
||||
<div class="btn-wrap">
|
||||
<button class="btn-cancel" type="button">회원탈퇴</button>
|
||||
<button class="btn-full" type="button">취소</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- //pop_body -->
|
||||
</div>
|
||||
<!-- //popup_container -->
|
||||
</div>
|
||||
<!-- //popup_in -->
|
||||
</div>
|
||||
<!-- //popup_wrap -->
|
||||
261
kngil/skin/pop_join.php
Normal file
261
kngil/skin/pop_join.php
Normal file
@@ -0,0 +1,261 @@
|
||||
<!-- popup_wrap -->
|
||||
<div class="popup-wrap" id="pop_join" role="dialog" aria-labelledby="join_title" aria-modal="true">
|
||||
<!-- popup_in -->
|
||||
<div class="popup-in member">
|
||||
<button class="btn-close" type="button" aria-label="팝업 닫기">
|
||||
<img src="/kngil/img/ico/ico_close.svg" alt="닫기">
|
||||
</button>
|
||||
<!-- popup_container -->
|
||||
<div class="popup-container join">
|
||||
<!-- pop_header -->
|
||||
<div class="pop-header">
|
||||
<h2 class="tit" id="join_title">회원가입</h2>
|
||||
</div>
|
||||
<!-- //pop_header -->
|
||||
<!-- pop_body -->
|
||||
<div class="pop-body">
|
||||
<form action="" method="post" name="joinForm" novalidate>
|
||||
<div class="tbl-wrap">
|
||||
<span class="info-msg txt-right">*항목은 필수 항목 입니다.</span>
|
||||
<table>
|
||||
<tbody>
|
||||
<!-- 회원 유형 -->
|
||||
<tr>
|
||||
<th>
|
||||
<label for="company_name">회원유형</label>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<label for="member_type1">
|
||||
<input type="radio" id="member_type1" name="memberType" value="1" checked>
|
||||
<span>기업회원</span>
|
||||
</label>
|
||||
<label for="member_type2">
|
||||
<input type="radio" id="member_type2" name="memberType" value="2">
|
||||
<span>개인회원</span>
|
||||
</label>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- 아이디 -->
|
||||
<tr>
|
||||
<th>
|
||||
<label for="user_id">아이디</label>
|
||||
<span class="point" aria-label="필수">*</span>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box group">
|
||||
<input
|
||||
class="user-id"
|
||||
type="text"
|
||||
id="user_id"
|
||||
name="userId"
|
||||
placeholder="아이디 입력"
|
||||
required
|
||||
pattern="[a-zA-Z][a-zA-Z0-9]{3,11}"
|
||||
aria-describedby="id_help"
|
||||
>
|
||||
<button type="button" id="btn_id_check" class="btn-sm" aria-label="아이디 중복 확인">
|
||||
중복확인
|
||||
</button>
|
||||
</div>
|
||||
<span class="info-msg" id="id_help">
|
||||
영문+숫자 4~12자(영문으로 시작)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- 비밀번호 -->
|
||||
<tr>
|
||||
<th>
|
||||
<label for="user_password">비밀번호</label>
|
||||
<span class="point" aria-label="필수">*</span>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input
|
||||
type="password"
|
||||
id="user_password"
|
||||
name="userPassword"
|
||||
placeholder="비밀번호 입력"
|
||||
required
|
||||
minlength="8"
|
||||
pattern="^(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[!@#$%^&*]).{8,}$"
|
||||
aria-describedby="password_help"
|
||||
>
|
||||
<input
|
||||
type="password"
|
||||
id="user_password_confirm"
|
||||
name="userPasswordConfirm"
|
||||
placeholder="비밀번호 확인"
|
||||
required
|
||||
aria-describedby="password_help"
|
||||
>
|
||||
</div>
|
||||
<span class="info-msg" id="password_help">
|
||||
영문+숫자+특수기호 8 자 이상
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- 이름 -->
|
||||
<tr>
|
||||
<th class="h-4">
|
||||
<label for="user_name">이름</label>
|
||||
<span class="point" aria-label="필수">*</span>
|
||||
</th>
|
||||
<td>
|
||||
<div class="info-box">
|
||||
<input
|
||||
type="text"
|
||||
id="user_name"
|
||||
name="userName"
|
||||
placeholder="이름 입력"
|
||||
required
|
||||
>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- 이메일 -->
|
||||
<tr>
|
||||
<th class="h-4">
|
||||
<label for="user_email">이메일</label>
|
||||
<span class="point" aria-label="필수">*</span>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input
|
||||
type="text"
|
||||
id="user_email"
|
||||
name="userEmail"
|
||||
class="e-id"
|
||||
placeholder="이메일 입력"
|
||||
required
|
||||
aria-describedby="email_help"
|
||||
>
|
||||
<div aria-hidden="true"><span>@</span></div>
|
||||
<input
|
||||
type="text"
|
||||
id="custom_domain"
|
||||
name="customDomain"
|
||||
placeholder="직접 입력"
|
||||
class="custom-domain d-none"
|
||||
aria-label="이메일 도메인 직접 입력"
|
||||
>
|
||||
<select
|
||||
name="emailDomain"
|
||||
id="domain_list"
|
||||
class="domain-list"
|
||||
required
|
||||
aria-describedby="email_help"
|
||||
>
|
||||
<option value="" hidden disabled selected>선택</option>
|
||||
<option value="naver.com">naver.com</option>
|
||||
<option value="gmail.com">gmail.com</option>
|
||||
<option value="daum.net">daum.net</option>
|
||||
<option value="nate.com">nate.com</option>
|
||||
<option value="hotmail.com">hotmail.com</option>
|
||||
<option value="yahoo.com">yahoo.com</option>
|
||||
<option value="type">직접입력</option>
|
||||
</select>
|
||||
</div>
|
||||
<span class="info-msg d-none" id="email_help">이메일 도메인을 선택하거나 직접 입력하세요</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- 휴대전화번호 -->
|
||||
<tr>
|
||||
<th>
|
||||
<label for="user_phone">휴대전화번호</label>
|
||||
<span class="point" aria-label="필수">*</span>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box group">
|
||||
<input
|
||||
type="tel"
|
||||
id="user_phone"
|
||||
name="userPhone"
|
||||
placeholder="휴대폰 번호"
|
||||
required
|
||||
pattern="[0-9]{3}-[0-9]{4}-[0-9]{4}"
|
||||
>
|
||||
<span class="timer d-none">03:00</span>
|
||||
<button type="button" class="btn-sm btn-code" aria-label="인증번호 발송">
|
||||
인증번호
|
||||
</button>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- 휴대전화번호 인증완료 -->
|
||||
<tr class="d-none">
|
||||
<th>
|
||||
<label for="user_phone">휴대전화번호</label>
|
||||
<span class="point" aria-label="필수">*</span>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box group">
|
||||
<input
|
||||
type="tel"
|
||||
id="user_phone"
|
||||
name="userPhone"
|
||||
placeholder="휴대폰 번호"
|
||||
required
|
||||
pattern="[0-9]{3}-[0-9]{4}-[0-9]{4}"
|
||||
>
|
||||
<span class="complete-msg"><i class="ico-check" aria-hidden="true"></i>인증완료</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
<!-- 회사정보 -->
|
||||
<tr class="company-group">
|
||||
<th>
|
||||
<label for="company_name">회사정보</label>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input
|
||||
type="text"
|
||||
id="company_name"
|
||||
name="companyName"
|
||||
placeholder="회사명 입력"
|
||||
>
|
||||
<input
|
||||
type="text"
|
||||
id="department_name"
|
||||
name="departmentName"
|
||||
placeholder="소속부서 입력"
|
||||
>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="btn-wrap">
|
||||
<button type="submit" class="btn-full">
|
||||
가입하기
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<!-- 가입완료 메시지 -->
|
||||
<div class="messages" style="display: none;" role="alert" aria-live="polite">
|
||||
<i class="complete" aria-hidden="true"></i>
|
||||
<span>
|
||||
<em>이지빔님 환영합니다!</em><br>
|
||||
회원가입이 완료 되었습니다.
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- //pop_body -->
|
||||
</div>
|
||||
<!-- //popup_container -->
|
||||
</div>
|
||||
<!-- //popup_in -->
|
||||
</div>
|
||||
<!-- //popup_wrap -->
|
||||
|
||||
261
kngil/skin/pop_join2.php
Normal file
261
kngil/skin/pop_join2.php
Normal file
@@ -0,0 +1,261 @@
|
||||
<!-- popup_wrap -->
|
||||
<div class="popup-wrap" id="pop_join2" role="dialog" aria-labelledby="join_title" aria-modal="true">
|
||||
<!-- popup_in -->
|
||||
<div class="popup-in member">
|
||||
<button class="btn-close" type="button" aria-label="팝업 닫기">
|
||||
<img src="/kngil/img/ico/ico_close.svg" alt="닫기">
|
||||
</button>
|
||||
<!-- popup_container -->
|
||||
<div class="popup-container join">
|
||||
<!-- pop_header -->
|
||||
<div class="pop-header">
|
||||
<h2 class="tit" id="join_title">회원가입</h2>
|
||||
</div>
|
||||
<!-- //pop_header -->
|
||||
<!-- pop_body -->
|
||||
<div class="pop-body">
|
||||
<form action="" method="post" name="joinForm" novalidate>
|
||||
<div class="tbl-wrap">
|
||||
<span class="info-msg txt-right">*항목은 필수 항목 입니다.</span>
|
||||
<table>
|
||||
<tbody>
|
||||
<!-- 회원 유형 -->
|
||||
<tr>
|
||||
<th>
|
||||
<label for="company_name">회원유형</label>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<label for="member_type1">
|
||||
<input type="radio" id="member_type1" name="memberType" value="1" checked>
|
||||
<span>기업회원</span>
|
||||
</label>
|
||||
<label for="member_type2">
|
||||
<input type="radio" id="member_type2" name="memberType" value="2">
|
||||
<span>개인회원</span>
|
||||
</label>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- 아이디 -->
|
||||
<tr>
|
||||
<th>
|
||||
<label for="user_id">아이디</label>
|
||||
<span class="point" aria-label="필수">*</span>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box group">
|
||||
<input
|
||||
class="user-id"
|
||||
type="text"
|
||||
id="user_id"
|
||||
name="userId"
|
||||
placeholder="아이디 입력"
|
||||
required
|
||||
pattern="[a-zA-Z][a-zA-Z0-9]{3,11}"
|
||||
aria-describedby="id_help"
|
||||
>
|
||||
<button type="button" class="btn-sm" aria-label="아이디 중복 확인">
|
||||
중복확인
|
||||
</button>
|
||||
</div>
|
||||
<span class="info-msg" id="id_help">
|
||||
영문+숫자 4~12자(영문으로 시작)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- 비밀번호 -->
|
||||
<tr>
|
||||
<th>
|
||||
<label for="user_password">비밀번호</label>
|
||||
<span class="point" aria-label="필수">*</span>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input
|
||||
type="password"
|
||||
id="user_password"
|
||||
name="userPassword"
|
||||
placeholder="비밀번호 입력"
|
||||
required
|
||||
minlength="8"
|
||||
pattern="^(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[!@#$%^&*]).{8,}$"
|
||||
aria-describedby="password_help"
|
||||
>
|
||||
<input
|
||||
type="password"
|
||||
id="user_password_confirm"
|
||||
name="userPasswordConfirm"
|
||||
placeholder="비밀번호 확인"
|
||||
required
|
||||
aria-describedby="password_help"
|
||||
>
|
||||
</div>
|
||||
<span class="info-msg" id="password_help">
|
||||
영문+숫자+특수기호 12 자 이상
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- 이름 -->
|
||||
<tr>
|
||||
<th class="h-4">
|
||||
<label for="user_name">이름</label>
|
||||
<span class="point" aria-label="필수">*</span>
|
||||
</th>
|
||||
<td>
|
||||
<div class="info-box">
|
||||
<input
|
||||
type="text"
|
||||
id="user_name"
|
||||
name="userName"
|
||||
placeholder="이름 입력"
|
||||
required
|
||||
>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- 이메일 -->
|
||||
<tr>
|
||||
<th class="h-4">
|
||||
<label for="user_email">이메일</label>
|
||||
<span class="point" aria-label="필수">*</span>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input
|
||||
type="text"
|
||||
id="user_email"
|
||||
name="userEmail"
|
||||
class="e-id"
|
||||
placeholder="이메일 입력"
|
||||
required
|
||||
aria-describedby="email_help"
|
||||
>
|
||||
<div aria-hidden="true"><span>@</span></div>
|
||||
<input
|
||||
type="text"
|
||||
id="custom_domain"
|
||||
name="customDomain"
|
||||
placeholder="직접 입력"
|
||||
class="custom-domain d-none"
|
||||
aria-label="이메일 도메인 직접 입력"
|
||||
>
|
||||
<select
|
||||
name="emailDomain"
|
||||
id="domain_list"
|
||||
class="domain-list"
|
||||
required
|
||||
aria-describedby="email_help"
|
||||
>
|
||||
<option value="" hidden disabled selected>선택</option>
|
||||
<option value="naver.com">naver.com</option>
|
||||
<option value="gmail.com">gmail.com</option>
|
||||
<option value="daum.net">daum.net</option>
|
||||
<option value="nate.com">nate.com</option>
|
||||
<option value="hotmail.com">hotmail.com</option>
|
||||
<option value="yahoo.com">yahoo.com</option>
|
||||
<option value="type">직접입력</option>
|
||||
</select>
|
||||
</div>
|
||||
<span class="info-msg d-none" id="email_help">이메일 도메인을 선택하거나 직접 입력하세요</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- 휴대전화번호 -->
|
||||
<tr>
|
||||
<th>
|
||||
<label for="user_phone">휴대전화번호</label>
|
||||
<span class="point" aria-label="필수">*</span>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box group">
|
||||
<input
|
||||
type="tel"
|
||||
id="user_phone"
|
||||
name="userPhone"
|
||||
placeholder="휴대폰 번호"
|
||||
required
|
||||
pattern="[0-9]{3}-[0-9]{4}-[0-9]{4}"
|
||||
>
|
||||
<span class="timer">03:00</span>
|
||||
<button type="button" class="btn-sm btn-code light" aria-label="인증번호 발송">
|
||||
인증번호
|
||||
</button>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- 휴대전화번호 인증완료 -->
|
||||
<tr class="d-none">
|
||||
<th>
|
||||
<label for="user_phone">휴대전화번호</label>
|
||||
<span class="point" aria-label="필수">*</span>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box group">
|
||||
<input
|
||||
type="tel"
|
||||
id="user_phone"
|
||||
name="userPhone"
|
||||
placeholder="휴대폰 번호"
|
||||
required
|
||||
pattern="[0-9]{3}-[0-9]{4}-[0-9]{4}"
|
||||
>
|
||||
<span class="complete-msg"><i class="ico-check" aria-hidden="true"></i>인증완료</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
<!-- 회사정보 -->
|
||||
<tr class="company-group">
|
||||
<th>
|
||||
<label for="company_name">회사정보</label>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input
|
||||
type="text"
|
||||
id="company_name"
|
||||
name="companyName"
|
||||
placeholder="회사명 입력"
|
||||
>
|
||||
<input
|
||||
type="text"
|
||||
id="department_name"
|
||||
name="departmentName"
|
||||
placeholder="소속부서 입력"
|
||||
>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="btn-wrap">
|
||||
<button type="submit" class="btn-full">
|
||||
가입하기
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<!-- 가입완료 메시지 -->
|
||||
<div class="messages" style="display: none;" role="alert" aria-live="polite">
|
||||
<i class="complete" aria-hidden="true"></i>
|
||||
<span>
|
||||
<em>이지빔님 환영합니다!</em><br>
|
||||
회원가입이 완료 되었습니다.
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- //pop_body -->
|
||||
</div>
|
||||
<!-- //popup_container -->
|
||||
</div>
|
||||
<!-- //popup_in -->
|
||||
</div>
|
||||
<!-- //popup_wrap -->
|
||||
|
||||
262
kngil/skin/pop_join3.php
Normal file
262
kngil/skin/pop_join3.php
Normal file
@@ -0,0 +1,262 @@
|
||||
<!-- popup_wrap -->
|
||||
<div class="popup-wrap" id="pop_join3" role="dialog" aria-labelledby="join_title" aria-modal="true">
|
||||
<!-- popup_in -->
|
||||
<div class="popup-in member">
|
||||
<button class="btn-close" type="button" aria-label="팝업 닫기">
|
||||
<img src="/kngil/img/ico/ico_close.svg" alt="닫기">
|
||||
</button>
|
||||
<!-- popup_container -->
|
||||
<div class="popup-container join">
|
||||
<!-- pop_header -->
|
||||
<div class="pop-header">
|
||||
<h2 class="tit" id="join_title">회원가입</h2>
|
||||
</div>
|
||||
<!-- //pop_header -->
|
||||
<!-- pop_body -->
|
||||
<div class="pop-body">
|
||||
<form action="" method="post" name="joinForm" novalidate>
|
||||
<div class="tbl-wrap">
|
||||
<span class="info-msg txt-right">*항목은 필수 항목 입니다.</span>
|
||||
<table>
|
||||
<tbody>
|
||||
<!-- 회원 유형 -->
|
||||
<tr>
|
||||
<th>
|
||||
<label for="company_name">회원유형</label>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<label for="member_type1">
|
||||
<input type="radio" id="member_type1" name="memberType" value="1" checked>
|
||||
<span>기업회원</span>
|
||||
</label>
|
||||
<label for="member_type2">
|
||||
<input type="radio" id="member_type2" name="memberType" value="2">
|
||||
<span>개인회원</span>
|
||||
</label>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- 아이디 -->
|
||||
<tr>
|
||||
<th>
|
||||
<label for="user_id">아이디</label>
|
||||
<span class="point" aria-label="필수">*</span>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box group">
|
||||
<input
|
||||
class="user-id"
|
||||
type="text"
|
||||
id="user_id"
|
||||
name="userId"
|
||||
placeholder="아이디 입력"
|
||||
required
|
||||
pattern="[a-zA-Z][a-zA-Z0-9]{3,11}"
|
||||
aria-describedby="id_help"
|
||||
>
|
||||
<button type="button" class="btn-sm" aria-label="아이디 중복 확인">
|
||||
중복확인
|
||||
</button>
|
||||
</div>
|
||||
<span class="info-msg" id="id_help">
|
||||
영문+숫자 4~12자(영문으로 시작)
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- 비밀번호 -->
|
||||
<tr>
|
||||
<th>
|
||||
<label for="user_password">비밀번호</label>
|
||||
<span class="point" aria-label="필수">*</span>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input
|
||||
type="password"
|
||||
id="user_password"
|
||||
name="userPassword"
|
||||
placeholder="비밀번호 입력"
|
||||
required
|
||||
minlength="8"
|
||||
pattern="^(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[!@#$%^&*]).{8,}$"
|
||||
aria-describedby="password_help"
|
||||
>
|
||||
<input
|
||||
type="password"
|
||||
id="user_password_confirm"
|
||||
name="userPasswordConfirm"
|
||||
placeholder="비밀번호 확인"
|
||||
required
|
||||
aria-describedby="password_help"
|
||||
>
|
||||
</div>
|
||||
<span class="info-msg" id="password_help">
|
||||
영문+숫자+특수기호 12 자 이상
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- 이름 -->
|
||||
<tr>
|
||||
<th class="h-4">
|
||||
<label for="user_name">이름</label>
|
||||
<span class="point" aria-label="필수">*</span>
|
||||
</th>
|
||||
<td>
|
||||
<div class="info-box">
|
||||
<input
|
||||
type="text"
|
||||
id="user_name"
|
||||
name="userName"
|
||||
placeholder="이름 입력"
|
||||
required
|
||||
>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- 이메일 -->
|
||||
<tr>
|
||||
<th class="h-4">
|
||||
<label for="user_email">이메일</label>
|
||||
<span class="point" aria-label="필수">*</span>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input
|
||||
type="text"
|
||||
id="user_email"
|
||||
name="userEmail"
|
||||
class="e-id"
|
||||
placeholder="이메일 입력"
|
||||
required
|
||||
aria-describedby="email_help"
|
||||
>
|
||||
<div aria-hidden="true"><span>@</span></div>
|
||||
<input
|
||||
type="text"
|
||||
id="custom_domain"
|
||||
name="customDomain"
|
||||
placeholder="직접 입력"
|
||||
class="custom-domain d-none"
|
||||
aria-label="이메일 도메인 직접 입력"
|
||||
>
|
||||
<select
|
||||
name="emailDomain"
|
||||
id="domain_list"
|
||||
class="domain-list"
|
||||
required
|
||||
aria-describedby="email_help"
|
||||
>
|
||||
<option value="" hidden disabled selected>선택</option>
|
||||
<option value="naver.com">naver.com</option>
|
||||
<option value="gmail.com">gmail.com</option>
|
||||
<option value="daum.net">daum.net</option>
|
||||
<option value="nate.com">nate.com</option>
|
||||
<option value="hotmail.com">hotmail.com</option>
|
||||
<option value="yahoo.com">yahoo.com</option>
|
||||
<option value="type">직접입력</option>
|
||||
</select>
|
||||
</div>
|
||||
<span class="info-msg d-none" id="email_help">이메일 도메인을 선택하거나 직접 입력하세요</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- 휴대전화번호 -->
|
||||
<tr class="d-none">
|
||||
<th>
|
||||
<label for="user_phone">휴대전화번호</label>
|
||||
<span class="point" aria-label="필수">*</span>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box group">
|
||||
<input
|
||||
type="tel"
|
||||
id="user_phone"
|
||||
name="userPhone"
|
||||
placeholder="휴대폰 번호"
|
||||
required
|
||||
pattern="[0-9]{3}-[0-9]{4}-[0-9]{4}"
|
||||
>
|
||||
<span class="timer">03:00</span>
|
||||
<button type="button" class="btn-sm btn-code light" aria-label="인증번호 발송">
|
||||
인증번호
|
||||
</button>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- 휴대전화번호 인증완료 -->
|
||||
<tr >
|
||||
<th>
|
||||
<label for="user_phone">휴대전화번호</label>
|
||||
<span class="point" aria-label="필수">*</span>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box group">
|
||||
<input
|
||||
type="tel"
|
||||
id="user_phone"
|
||||
name="userPhone"
|
||||
placeholder="휴대폰 번호"
|
||||
required
|
||||
pattern="[0-9]{3}-[0-9]{4}-[0-9]{4}"
|
||||
>
|
||||
<span class="complete-msg"><i class="ico-check" aria-hidden="true"></i>인증완료</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
<!-- 회사정보 -->
|
||||
<tr class="company-group">
|
||||
<th>
|
||||
<label for="company_name">회사정보</label>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input
|
||||
type="text"
|
||||
id="company_name"
|
||||
name="companyName"
|
||||
placeholder="회사명 입력"
|
||||
>
|
||||
<input
|
||||
type="text"
|
||||
id="department_name"
|
||||
name="departmentName"
|
||||
placeholder="소속부서 입력"
|
||||
>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="btn-wrap">
|
||||
<button type="submit" class="btn-full">
|
||||
가입하기
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<!-- 가입완료 메시지 -->
|
||||
<div class="messages" style="display: none;" role="alert" aria-live="polite">
|
||||
<i class="complete" aria-hidden="true"></i>
|
||||
<span>
|
||||
<em>이지빔님 환영합니다!</em><br>
|
||||
회원가입이 완료 되었습니다.
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- //pop_body -->
|
||||
</div>
|
||||
<!-- //popup_container -->
|
||||
</div>
|
||||
<!-- //popup_in -->
|
||||
</div>
|
||||
<!-- //popup_wrap -->
|
||||
|
||||
94
kngil/skin/pop_login.php
Normal file
94
kngil/skin/pop_login.php
Normal file
@@ -0,0 +1,94 @@
|
||||
<!-- popup_wrap -->
|
||||
<div class="popup-wrap" id="pop_login" role="dialog" aria-labelledby="login_title" aria-modal="true">
|
||||
<!-- popup_in -->
|
||||
<div class="popup-in member">
|
||||
<button class="btn-close" type="button" aria-label="팝업 닫기">
|
||||
<img src="/kngil/img/ico/ico_close.svg" alt="닫기">
|
||||
</button>
|
||||
<!-- popup_container -->
|
||||
<div class="popup-container login">
|
||||
<!-- pop_header -->
|
||||
<div class="pop-header">
|
||||
<h2 class="tit" id="login_title">로그인</h2>
|
||||
<p class="sub-txt">
|
||||
KNGIL 로그인 시<br class="pc-only">
|
||||
<em>다운로드 및 1:1문의 서비스를</em><br class="pc-only" /> 이용하실 수 있습니다.
|
||||
</p>
|
||||
</div>
|
||||
<!-- //pop_header -->
|
||||
<!-- pop_body -->
|
||||
<div class="pop-body">
|
||||
<div class="contents-wrap">
|
||||
<ul class="tab-menu round">
|
||||
<li class="tab-phone on"><span>휴대폰 인증</span></li>
|
||||
<li class="tab-id"><span>아이디 로그인</span></li>
|
||||
</ul>
|
||||
<div class="tab-content phone">
|
||||
<form action="" method="post" novalidate>
|
||||
<div class="form-wrap">
|
||||
<div class="input-box group">
|
||||
<i class="phone" aria-hidden="true"></i>
|
||||
<input type="tel" id="login_phone" name="userPhone" placeholder="휴대폰 번호 (예: 010-1234-5678)" required aria-label="휴대폰 번호">
|
||||
<span class="timer d-none">03:00</span>
|
||||
<!-- ✅ 재요청 버튼 -->
|
||||
<button type="button"
|
||||
class="btn-resend d-none"
|
||||
id="sms_resend">
|
||||
재요청
|
||||
</button>
|
||||
</div>
|
||||
<div class="info-box d-none">
|
||||
<p>
|
||||
<em>인증 링크를 문자로 발송했습니다</em><br />
|
||||
인증 문자가 오지 않으면 인증 링크를 재요청 해보세요
|
||||
</p>
|
||||
</div>
|
||||
<div class="btn-wrap">
|
||||
<button class="btn-full" id="sms_button" type="submit">인증 링크 요청</button>
|
||||
</div>
|
||||
<div class="btn-wrap">
|
||||
<a class="go-signup" href="javascript:agreement();">
|
||||
<span>회원가입</span><i class="arrow-r" aria-hidden="true"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="tab-content id">
|
||||
<form action="" method="post" novalidate>
|
||||
<div class="form-wrap">
|
||||
<div class="input-box group">
|
||||
<i class="id" aria-hidden="true"></i>
|
||||
<input type="text" id="login_id" name="userId" placeholder="아이디" required aria-label="아이디">
|
||||
</div>
|
||||
<div class="input-box group">
|
||||
<i class="pw" aria-hidden="true"></i>
|
||||
<input type="password" id="login_password" name="userPassword" placeholder="비밀번호" required aria-label="비밀번호">
|
||||
</div>
|
||||
<div class="btn-wrap">
|
||||
<button class="btn-full" type="submit">로그인</button>
|
||||
</div>
|
||||
<div class="btn-wrap">
|
||||
<a class="go-signup" href="javascript:agreement();">
|
||||
<span>회원가입</span>
|
||||
<i class="arrow-r" aria-hidden="true"></i>
|
||||
</a>
|
||||
<!-- 로그인 팝업 이동 -->
|
||||
<a class="go-login" href="http://172.16.9.44/kngil/skin/popup/callback">
|
||||
<span>로그인</span>
|
||||
<i class="arrow-r" aria-hidden="true"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- //pop_body -->
|
||||
</div>
|
||||
<!-- //popup_container -->
|
||||
</div>
|
||||
<!-- //popup_in -->
|
||||
</div>
|
||||
<!-- //popup_wrap -->
|
||||
83
kngil/skin/pop_login2.php
Normal file
83
kngil/skin/pop_login2.php
Normal file
@@ -0,0 +1,83 @@
|
||||
<!-- popup_wrap -->
|
||||
<div class="popup-wrap" id="pop_login2" role="dialog" aria-labelledby="login_title" aria-modal="true">
|
||||
<!-- popup_in -->
|
||||
<div class="popup-in member">
|
||||
<button class="btn-close" type="button" aria-label="팝업 닫기">
|
||||
<img src="/kngil/img/ico/ico_close.svg" alt="닫기">
|
||||
</button>
|
||||
<!-- popup_container -->
|
||||
<div class="popup-container login">
|
||||
<!-- pop_header -->
|
||||
<div class="pop-header">
|
||||
<h2 class="tit" id="login_title">로그인</h2>
|
||||
<p class="sub-txt">
|
||||
KNGIL 로그인 시<br class="pc-only">
|
||||
<em>다운로드 및 1:1문의 서비스를</em><br class="pc-only" /> 이용하실 수 있습니다.
|
||||
</p>
|
||||
</div>
|
||||
<!-- //pop_header -->
|
||||
<!-- pop_body -->
|
||||
<div class="pop-body">
|
||||
<div class="contents-wrap">
|
||||
<ul class="tab-menu round">
|
||||
<li class="tab-phone on"><span>휴대폰 인증</span></li>
|
||||
<li class="tab-id"><span>아이디 로그인</span></li>
|
||||
</ul>
|
||||
<div class="tab-content phone">
|
||||
<form action="" method="post" novalidate>
|
||||
<div class="form-wrap">
|
||||
<div class="input-box group">
|
||||
<i class="phone" aria-hidden="true"></i>
|
||||
<input type="text" id="login_phone" name="userPhone" placeholder="휴대폰 번호" required aria-label="휴대폰 번호">
|
||||
<span class="timer">03:00</span>
|
||||
</div>
|
||||
<div class="info-box">
|
||||
<p>
|
||||
<em>인증 링크를 문자로 발송했습니다</em><br />
|
||||
인증 문자가 오지 않으면 인증 링크를 재요청 해보세요
|
||||
</p>
|
||||
</div>
|
||||
<div class="btn-wrap">
|
||||
<button class="btn-full" type="submit">인증 링크 요청</button>
|
||||
</div>
|
||||
<div class="btn-wrap">
|
||||
<a class="go-signup" href="javascript:agreement();">
|
||||
<span>회원가입</span><i class="arrow-r" aria-hidden="true"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="tab-content id">
|
||||
<form action="" method="post" novalidate>
|
||||
<div class="form-wrap">
|
||||
<div class="input-box group">
|
||||
<i class="id" aria-hidden="true"></i>
|
||||
<input type="text" id="login_id" name="userId" placeholder="아이디" required aria-label="아이디">
|
||||
</div>
|
||||
<div class="input-box group">
|
||||
<i class="pw" aria-hidden="true"></i>
|
||||
<input type="password" id="login_password" name="userPassword" placeholder="비밀번호" required aria-label="비밀번호">
|
||||
</div>
|
||||
<div class="btn-wrap">
|
||||
<button class="btn-full" type="submit">로그인</button>
|
||||
</div>
|
||||
<div class="btn-wrap">
|
||||
<a class="go-signup" href="javascript:agreement();">
|
||||
<span>회원가입</span>
|
||||
<i class="arrow-r" aria-hidden="true"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- //pop_body -->
|
||||
</div>
|
||||
<!-- //popup_container -->
|
||||
</div>
|
||||
<!-- //popup_in -->
|
||||
</div>
|
||||
<!-- //popup_wrap -->
|
||||
72
kngil/skin/pop_mypage01.php
Normal file
72
kngil/skin/pop_mypage01.php
Normal file
@@ -0,0 +1,72 @@
|
||||
<!-- popup_wrap -->
|
||||
<div class="popup-wrap" id="pop_mypage01" role="dialog" aria-labelledby="mypage01_title" aria-modal="true">
|
||||
<!-- popup_in -->
|
||||
<div class="popup-in mypage">
|
||||
<button class="btn-close" type="button" aria-label="팝업 닫기">
|
||||
<img src="/kngil/img/ico/ico_close.svg" alt="닫기">
|
||||
</button>
|
||||
|
||||
<!-- popup_container -->
|
||||
<div class="popup-container">
|
||||
<!-- pop_header -->
|
||||
<div class="pop-header">
|
||||
<h2 class="tit" id="mypage01_title">마이페이지</h2>
|
||||
<p class="sub-txt">
|
||||
회원님의 <em>정보 보호</em>를 <br>
|
||||
위하여 <em>비밀번호</em>를 한번 더 확인합니다.
|
||||
</p>
|
||||
</div>
|
||||
<!-- //pop_header -->
|
||||
|
||||
<!-- pop_body -->
|
||||
<div class="pop-body password">
|
||||
<div class="contents-wrap">
|
||||
<ul class="tab-menu round">
|
||||
<li class="tab-phone on"><span>휴대폰 인증</span></li>
|
||||
<li class="tab-id"><span>비밀번호 인증</span></li>
|
||||
</ul>
|
||||
|
||||
<div class="tab-content phone">
|
||||
<form action="" method="post" novalidate>
|
||||
<div class="form-wrap">
|
||||
<div class="input-box group">
|
||||
<i class="phone" aria-hidden="true"></i>
|
||||
<input type="text" id="login_phone" name="userPhone" placeholder="휴대폰 번호" required aria-label="휴대폰 번호">
|
||||
<span class="timer d-none">03:00</span>
|
||||
</div>
|
||||
<div class="info-box d-none">
|
||||
<p>
|
||||
<em>인증 링크를 문자로 발송했습니다</em><br>
|
||||
인증 문자가 오지 않으면 인증 링크를 재요청 해보세요
|
||||
</p>
|
||||
</div>
|
||||
<div class="btn-wrap">
|
||||
<button class="btn-full" type="submit">인증 링크 요청</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="tab-content id">
|
||||
<form action="" method="post" novalidate>
|
||||
<div class="form-wrap">
|
||||
<div class="input-box group">
|
||||
<i class="pw" aria-hidden="true"></i>
|
||||
<input type="password" id="login_password" name="userPassword" placeholder="비밀번호 입력" required aria-label="비밀번호 입력">
|
||||
</div>
|
||||
<div class="btn-wrap">
|
||||
<button class="btn-full" type="submit">확인</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- //pop_body -->
|
||||
</div>
|
||||
<!-- //popup_container -->
|
||||
</div>
|
||||
<!-- //popup_in -->
|
||||
</div>
|
||||
<!-- //popup_wrap -->
|
||||
|
||||
122
kngil/skin/pop_mypage02.php
Normal file
122
kngil/skin/pop_mypage02.php
Normal file
@@ -0,0 +1,122 @@
|
||||
<!-- popup_wrap -->
|
||||
<div class="popup-wrap" id="pop_mypage02" role="dialog" aria-labelledby="mypage02_title" aria-modal="true" style="display:none;">
|
||||
<!-- popup_in -->
|
||||
<div class="popup-in mypage">
|
||||
<button class="btn-close" type="button" aria-label="팝업 닫기">
|
||||
<img src="/kngil/img/ico/ico_close.svg" alt="닫기">
|
||||
</button>
|
||||
|
||||
<!-- popup_container -->
|
||||
<div class="popup-container">
|
||||
<!-- pop_header -->
|
||||
<div class="pop-header">
|
||||
<h2 class="tit" id="mypage02_title">마이페이지</h2>
|
||||
<p class="sub-txt">
|
||||
소중한 <em>내 정보</em>를 <br>
|
||||
<em>최신</em>으로 관리하세요.
|
||||
</p>
|
||||
</div>
|
||||
<!-- //pop_header -->
|
||||
<!-- pop_body -->
|
||||
<div class="pop-body">
|
||||
<div class="my-info">
|
||||
<div class="name">
|
||||
<span>
|
||||
<em id="mp_user_nm"></em>님
|
||||
<span class="user-id" id="mp_user_id"></span>
|
||||
</span>
|
||||
<button class="btn-sm" onclick="javascript:mypage03();">내 정보 수정</button>
|
||||
</div>
|
||||
|
||||
<ul class="detail">
|
||||
<li>
|
||||
<h5><i class="tel"></i>연락처</h5>
|
||||
<p id="mp_tel"></p>
|
||||
<p id="mp_email"></p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<h5><i class="company"></i>회사정보</h5>
|
||||
<p id="mp_co_nm"></p>
|
||||
<p id="mp_dept_nm"></p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<h5><i class="usage"></i>사용량 (단위:m2)</h5>
|
||||
<p><span>누적</span><em id="mp_tot_use"></em></p>
|
||||
<p><span>당년</span><em id="mp_year_use"></em></p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="my-history">
|
||||
<h5>서비스 사용이력</h5>
|
||||
<div class="board-list">
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style="width: 10%;">
|
||||
<col style="width: auto;">
|
||||
<col style="width: 15%;">
|
||||
<col style="width: 15%;">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>번호</th>
|
||||
<th>서비스 구분</th>
|
||||
<th>일자</th>
|
||||
<th><em>사용량</em>(단위:m2)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="mp_history_body">
|
||||
<tr>
|
||||
<td>1</td>
|
||||
<td class="tit"><a href="">서비스 01</a></td>
|
||||
<td>24-06-22</td>
|
||||
<td><em>300</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>2</td>
|
||||
<td class="tit"><a href="">서비스 01</a></td>
|
||||
<td>24-06-23</td>
|
||||
<td><em>400</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>3</td>
|
||||
<td class="tit"><a href="">서비스 01</a></td>
|
||||
<td>24-06-23</td>
|
||||
<td><em>300</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>4</td>
|
||||
<td class="tit"><a href="">서비스 01</a></td>
|
||||
<td>24-06-23</td>
|
||||
<td><em>200</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>5</td>
|
||||
<td class="tit"><a href="">서비스 01</a></td>
|
||||
<td>24-06-23</td>
|
||||
<td><em>400</em></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="pagination">
|
||||
<button type="button" class="btn-prev"></button>
|
||||
<ul class="pagination-list">
|
||||
<li class="on"><a href="#">1</a></li>
|
||||
<li><a href="#">2</a></li>
|
||||
<li><a href="#">3</a></li>
|
||||
<li><a href="#">4</a></li>
|
||||
<li><a href="#">5</a></li>
|
||||
</ul>
|
||||
<button type="button" class="btn-next"></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- //pop_body -->
|
||||
</div>
|
||||
<!-- //popup_container -->
|
||||
</div>
|
||||
<!-- //popup_in -->
|
||||
</div>
|
||||
<!-- //popup_wrap -->
|
||||
167
kngil/skin/pop_mypage03.php
Normal file
167
kngil/skin/pop_mypage03.php
Normal file
@@ -0,0 +1,167 @@
|
||||
<!-- popup_wrap -->
|
||||
<div class="popup-wrap" id="pop_mypage03" role="dialog" aria-labelledby="mypage03_title" aria-modal="true">
|
||||
<!-- popup_in -->
|
||||
<div class="popup-in mypage">
|
||||
<button class="btn-close" type="button" aria-label="팝업 닫기">
|
||||
<img src="/kngil/img/ico/ico_close.svg" alt="닫기">
|
||||
</button>
|
||||
<!-- popup_container -->
|
||||
<div class="popup-container edit">
|
||||
<!-- pop_header -->
|
||||
<div class="pop-header">
|
||||
<h2 class="tit" id="mypage03_title">내 정보 수정</h2>
|
||||
<p class="sub-txt">
|
||||
소중한 <em>내 정보</em>를 <br>
|
||||
<em>최신</em>으로 관리하세요.
|
||||
</p>
|
||||
</div>
|
||||
<!-- //pop_header -->
|
||||
<!-- pop_body -->
|
||||
<div class="pop-body">
|
||||
<form action="" method="post" novalidate>
|
||||
<div class="tbl-wrap">
|
||||
<table>
|
||||
<tbody>
|
||||
<tr class="disabled">
|
||||
<th>회원유형</th>
|
||||
<td>
|
||||
<div class="input-box radio">
|
||||
<label for="member_type1">
|
||||
<input type="radio" id="member_type1" name="memberType" value="1" checked disabled>
|
||||
<span>기업회원</span>
|
||||
</label>
|
||||
<label for="member_type2">
|
||||
<input type="radio" id="member_type2" name="memberType" value="2" disabled>
|
||||
<span>개인회원</span>
|
||||
</label>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="disabled">
|
||||
<th>아이디</th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input type="text" placeholder="A1122" readonly disabled>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="row-pw-original">
|
||||
<th>비밀번호 <span class="point" aria-label="필수">*</span></th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input id="current_pw" type="password" placeholder="************" required readonly disabled>
|
||||
<button type="button" class="btn-sm change" id="btnPwChange">비밀번호 변경</button>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr id="row-pw-new">
|
||||
<th>새 비밀번호</th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input
|
||||
type="password"
|
||||
placeholder="새 비밀번호 입력"
|
||||
required
|
||||
id="new_pw"
|
||||
>
|
||||
<input
|
||||
type="password"
|
||||
placeholder="새 비밀번호 확인"
|
||||
required
|
||||
id="new_pw_confirm"
|
||||
>
|
||||
<button
|
||||
type="button"
|
||||
class="btn-sm btn-cancel"
|
||||
id="btnPwCancel"
|
||||
>
|
||||
취소
|
||||
</button>
|
||||
</div>
|
||||
<span
|
||||
class="info-msg d-none"
|
||||
id="pwPolicyMsg"
|
||||
>
|
||||
영문+숫자+특수기호 8자 이상
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr class="disabled">
|
||||
<th>이름 </th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input type="text" placeholder="이지빔" readonly disabled>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>이메일<span class="point" aria-label="필수">*</span></th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input type="text" placeholder="A1122" class="e-id" required>
|
||||
<div><span>@</span></div>
|
||||
<input type="text" id="custom_domain" placeholder="직접 입력" class="d-none domain-domain" required>
|
||||
<select id="domain_list" class="domain-list" required>
|
||||
<option value="" hidden disabled>선택</option>
|
||||
<option value="naver" selected>naver.com</option>
|
||||
<option value="gmail">gmail.com</option>
|
||||
<option value="daum">daum.net</option>
|
||||
<option value="nate">nate.com</option>
|
||||
<option value="hotmail">hotmail.com</option>
|
||||
<option value="yahoo">yahoo.com</option>
|
||||
<option value="type" id="domain_txt">직접입력</option>
|
||||
</select>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- 휴대전화번호 -->
|
||||
<tr>
|
||||
<th>
|
||||
<label for="user_phone">휴대전화번호</label>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box group">
|
||||
<input
|
||||
type="tel"
|
||||
id="user_phone"
|
||||
name="userPhone"
|
||||
placeholder="휴대폰 번호"
|
||||
required
|
||||
pattern="[0-9]{3}-[0-9]{4}-[0-9]{4}"
|
||||
>
|
||||
<span class="timer d-none">03:00</span>
|
||||
<button type="button" class="btn-sm btn-code" aria-label="인증번호 발송">
|
||||
인증요청
|
||||
</button>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr class="company-group disabled">
|
||||
<th>회사정보</th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input type="text" id="company_name" name="companyName" placeholder="(주)BBB" required disabled>
|
||||
<input type="text" id="department_name" name="departmentName" placeholder="XXX부" required disabled>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="btn-wrap">
|
||||
<button type="button" class="btn-cancel" onclick="javascript:mypage02();">취소</button>
|
||||
<button type="button" class="btn-full">수정</button>
|
||||
</div>
|
||||
<div class="sign-out"><a href=""><i class="ico-signout" aria-hidden="true"></i>회원 탈퇴하기</a></div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<!-- //pop_body -->
|
||||
</div>
|
||||
<!-- //popup_container -->
|
||||
</div>
|
||||
<!-- //popup_in -->
|
||||
</div>
|
||||
<!-- //popup_wrap -->
|
||||
183
kngil/skin/pop_mypage04.php
Normal file
183
kngil/skin/pop_mypage04.php
Normal file
@@ -0,0 +1,183 @@
|
||||
<!-- popup_wrap -->
|
||||
<div class="popup-wrap" id="pop_mypage04" role="dialog" aria-labelledby="mypage03_title" aria-modal="true">
|
||||
<!-- popup_in -->
|
||||
<div class="popup-in mypage">
|
||||
<button class="btn-close" type="button" aria-label="팝업 닫기">
|
||||
<img src="/kngil/img/ico/ico_close.svg" alt="닫기">
|
||||
</button>
|
||||
<!-- popup_container -->
|
||||
<div class="popup-container edit">
|
||||
<!-- pop_header -->
|
||||
<div class="pop-header">
|
||||
<h2 class="tit" id="mypage03_title">내 정보 수정</h2>
|
||||
<p class="sub-txt">
|
||||
소중한 <em>내 정보</em>를 <br>
|
||||
<em>최신</em>으로 관리하세요.
|
||||
</p>
|
||||
</div>
|
||||
<!-- //pop_header -->
|
||||
<!-- pop_body -->
|
||||
<div class="pop-body">
|
||||
<form action="" method="post" novalidate>
|
||||
<div class="tbl-wrap">
|
||||
<table>
|
||||
<tbody>
|
||||
<tr class="disabled">
|
||||
<th>회원유형</th>
|
||||
<td>
|
||||
<div class="input-box radio">
|
||||
<label for="member_type1">
|
||||
<input type="radio" id="member_type1" name="memberType" value="1" checked disabled>
|
||||
<span>기업회원</span>
|
||||
</label>
|
||||
<label for="member_type2">
|
||||
<input type="radio" id="member_type2" name="memberType" value="2" disabled>
|
||||
<span>개인회원</span>
|
||||
</label>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="disabled">
|
||||
<th>아이디</th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input type="text" placeholder="A1122" readonly disabled>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr >
|
||||
<th>비밀번호<span class="point" aria-label="필수">*</span></th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input type="password" placeholder="************" required>
|
||||
<button type="button" class="btn-sm btn-cancel">취소</button>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>새 비밀번호 </th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input type="password" placeholder="새 비밀번호 입력" required>
|
||||
<input type="password" placeholder="새 비밀번호 확인" required>
|
||||
<button type="button" class="btn-sm">변경</button>
|
||||
</div>
|
||||
<span class="info-msg d-none">영문+숫자+특수기호 8자 이상</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="disabled">
|
||||
<th>이름 </th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input type="text" placeholder="이지빔" readonly disabled>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>이메일<span class="point" aria-label="필수">*</span></th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input type="text" placeholder="A1122" class="e-id" required>
|
||||
<div><span>@</span></div>
|
||||
<input type="text" id="custom_domain" placeholder="직접 입력" class="d-none domain-domain" required>
|
||||
<select id="domain_list" class="domain-list" required>
|
||||
<option value="" hidden disabled>선택</option>
|
||||
<option value="naver" selected>naver.com</option>
|
||||
<option value="gmail">gmail.com</option>
|
||||
<option value="daum">daum.net</option>
|
||||
<option value="nate">nate.com</option>
|
||||
<option value="hotmail">hotmail.com</option>
|
||||
<option value="yahoo">yahoo.com</option>
|
||||
<option value="type" id="domain_txt">직접입력</option>
|
||||
</select>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- 휴대전화번호 -->
|
||||
<tr>
|
||||
<th>
|
||||
<label for="user_phone">휴대전화번호</label>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box group">
|
||||
<input
|
||||
type="tel"
|
||||
id="user_phone"
|
||||
name="userPhone"
|
||||
placeholder="휴대폰 번호"
|
||||
required
|
||||
pattern="[0-9]{3}-[0-9]{4}-[0-9]{4}"
|
||||
>
|
||||
<span class="timer d-none">03:00</span>
|
||||
<button type="button" class="btn-sm btn-code" aria-label="인증번호 발송">
|
||||
인증요청
|
||||
</button>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- 휴대전화번호 인증완료 -->
|
||||
<tr class="d-none">
|
||||
<th>
|
||||
<label for="user_phone">휴대전화번호</label>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box group">
|
||||
<input
|
||||
type="tel"
|
||||
id="user_phone"
|
||||
name="userPhone"
|
||||
placeholder="휴대폰 번호"
|
||||
required
|
||||
pattern="[0-9]{3}-[0-9]{4}-[0-9]{4}"
|
||||
>
|
||||
<span class="complete-msg"><i class="ico-check" aria-hidden="true"></i>인증완료</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- 휴대전화번호 변경 -->
|
||||
<tr class="d-none">
|
||||
<th>
|
||||
<label for="user_phone">휴대전화번호</label>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box group">
|
||||
<input
|
||||
type="tel"
|
||||
id="user_phone"
|
||||
name="userPhone"
|
||||
placeholder="휴대폰 번호"
|
||||
required
|
||||
pattern="[0-9]{3}-[0-9]{4}-[0-9]{4}"
|
||||
>
|
||||
<button class="btn-sm change" type="button">휴대폰 번호 변경</button>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr class="company-group disabled">
|
||||
<th>회사정보</th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input type="text" id="company_name" name="companyName" placeholder="(주)BBB" required disabled>
|
||||
<input type="text" id="department_name" name="departmentName" placeholder="XXX부" required disabled>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="btn-wrap">
|
||||
<button type="button" class="btn-cancel">취소</button>
|
||||
<button type="button" class="btn-full">정보 수정</button>
|
||||
</div>
|
||||
<div class="sign-out"><a href=""><i class="ico-signout" aria-hidden="true"></i>회원 탈퇴하기</a></div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<!-- //pop_body -->
|
||||
</div>
|
||||
<!-- //popup_container -->
|
||||
</div>
|
||||
<!-- //popup_in -->
|
||||
</div>
|
||||
<!-- //popup_wrap -->
|
||||
174
kngil/skin/pop_mypage05.php
Normal file
174
kngil/skin/pop_mypage05.php
Normal file
@@ -0,0 +1,174 @@
|
||||
<!-- popup_wrap -->
|
||||
<div class="popup-wrap" id="pop_mypage05" role="dialog" aria-labelledby="mypage03_title" aria-modal="true">
|
||||
<!-- popup_in -->
|
||||
<div class="popup-in mypage">
|
||||
<button class="btn-close" type="button" aria-label="팝업 닫기">
|
||||
<img src="/kngil/img/ico/ico_close.svg" alt="닫기">
|
||||
</button>
|
||||
<!-- popup_container -->
|
||||
<div class="popup-container edit">
|
||||
<!-- pop_header -->
|
||||
<div class="pop-header">
|
||||
<h2 class="tit" id="mypage03_title">내 정보 수정</h2>
|
||||
<p class="sub-txt">
|
||||
소중한 <em>내 정보</em>를 <br>
|
||||
<em>최신</em>으로 관리하세요.
|
||||
</p>
|
||||
</div>
|
||||
<!-- //pop_header -->
|
||||
<!-- pop_body -->
|
||||
<div class="pop-body">
|
||||
<form action="" method="post" novalidate>
|
||||
<div class="tbl-wrap">
|
||||
<table>
|
||||
<tbody>
|
||||
<tr class="disabled">
|
||||
<th>회원유형</th>
|
||||
<td>
|
||||
<div class="input-box radio">
|
||||
<label for="member_type1">
|
||||
<input type="radio" id="member_type1" name="memberType" value="1" checked disabled>
|
||||
<span>기업회원</span>
|
||||
</label>
|
||||
<label for="member_type2">
|
||||
<input type="radio" id="member_type2" name="memberType" value="2" disabled>
|
||||
<span>개인회원</span>
|
||||
</label>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="disabled">
|
||||
<th>아이디</th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input type="text" placeholder="A1122" readonly disabled>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th >비밀번호<span class="point" aria-label="필수">*</span></th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input type="password" placeholder="************" required>
|
||||
<button type="button" class="btn-sm change">비밀번호 변경</button>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="disabled">
|
||||
<th >이름 </th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input type="text" placeholder="이지빔" readonly disabled>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th >이메일<span class="point" aria-label="필수">*</span> </th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input type="text" placeholder="A1122" class="e-id" required>
|
||||
<div><span>@</span></div>
|
||||
<input type="text" id="custom_domain" placeholder="직접 입력" class="d-none domain-domain" required>
|
||||
<select id="domain_list" class="domain-list" required>
|
||||
<option value="" hidden disabled>선택</option>
|
||||
<option value="naver" selected>naver.com</option>
|
||||
<option value="gmail">gmail.com</option>
|
||||
<option value="daum">daum.net</option>
|
||||
<option value="nate">nate.com</option>
|
||||
<option value="hotmail">hotmail.com</option>
|
||||
<option value="yahoo">yahoo.com</option>
|
||||
<option value="type" id="domain_txt">직접입력</option>
|
||||
</select>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- 휴대전화번호 -->
|
||||
<tr>
|
||||
<th>
|
||||
<label for="user_phone">휴대전화번호</label>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box group">
|
||||
<input
|
||||
type="tel"
|
||||
id="user_phone"
|
||||
name="userPhone"
|
||||
placeholder="휴대폰 번호"
|
||||
required
|
||||
pattern="[0-9]{3}-[0-9]{4}-[0-9]{4}"
|
||||
>
|
||||
<span class="timer">03:00</span>
|
||||
<button type="button" class="btn-sm btn-code light" aria-label="인증번호 발송">
|
||||
재요청
|
||||
</button>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- 휴대전화번호 인증완료 -->
|
||||
<tr class="d-none">
|
||||
<th>
|
||||
<label for="user_phone">휴대전화번호</label>
|
||||
<span class="point" aria-label="필수">*</span>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box group">
|
||||
<input
|
||||
type="tel"
|
||||
id="user_phone"
|
||||
name="userPhone"
|
||||
placeholder="휴대폰 번호"
|
||||
required
|
||||
pattern="[0-9]{3}-[0-9]{4}-[0-9]{4}"
|
||||
>
|
||||
<span class="complete-msg"><i class="ico-check" aria-hidden="true"></i>인증완료</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- 휴대전화번호 변경 -->
|
||||
<tr class="d-none">
|
||||
<th>
|
||||
<label for="user_phone">휴대전화번호</label>
|
||||
<span class="point" aria-label="필수">*</span>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box group">
|
||||
<input
|
||||
type="tel"
|
||||
id="user_phone"
|
||||
name="userPhone"
|
||||
placeholder="휴대폰 번호"
|
||||
required
|
||||
pattern="[0-9]{3}-[0-9]{4}-[0-9]{4}"
|
||||
>
|
||||
<button class="btn-sm change" type="button">휴대폰 번호 변경</button>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr class="company-group disabled">
|
||||
<th>회사정보</th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input type="text" id="company_name" name="companyName" placeholder="(주)BBB" required disabled>
|
||||
<input type="text" id="department_name" name="departmentName" placeholder="XXX부" required disabled>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="btn-wrap">
|
||||
<button type="button" class="btn-cancel">취소</button>
|
||||
<button type="button" class="btn-full">정보 수정</button>
|
||||
</div>
|
||||
<div class="sign-out"><a href=""><i class="ico-signout" aria-hidden="true"></i>회원 탈퇴하기</a></div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<!-- //pop_body -->
|
||||
</div>
|
||||
<!-- //popup_container -->
|
||||
</div>
|
||||
<!-- //popup_in -->
|
||||
</div>
|
||||
<!-- //popup_wrap -->
|
||||
173
kngil/skin/pop_mypage06.php
Normal file
173
kngil/skin/pop_mypage06.php
Normal file
@@ -0,0 +1,173 @@
|
||||
<!-- popup_wrap -->
|
||||
<div class="popup-wrap" id="pop_mypage06" role="dialog" aria-labelledby="mypage03_title" aria-modal="true">
|
||||
<!-- popup_in -->
|
||||
<div class="popup-in mypage">
|
||||
<button class="btn-close" type="button" aria-label="팝업 닫기">
|
||||
<img src="/kngil/img/ico/ico_close.svg" alt="닫기">
|
||||
</button>
|
||||
<!-- popup_container -->
|
||||
<div class="popup-container edit">
|
||||
<!-- pop_header -->
|
||||
<div class="pop-header">
|
||||
<h2 class="tit" id="mypage03_title">내 정보 수정</h2>
|
||||
<p class="sub-txt">
|
||||
소중한 <em>내 정보</em>를 <br>
|
||||
<em>최신</em>으로 관리하세요.
|
||||
</p>
|
||||
</div>
|
||||
<!-- //pop_header -->
|
||||
<!-- pop_body -->
|
||||
<div class="pop-body">
|
||||
<form action="" method="post" novalidate>
|
||||
<div class="tbl-wrap">
|
||||
<table>
|
||||
<tbody>
|
||||
<tr class="disabled">
|
||||
<th>회원유형</th>
|
||||
<td>
|
||||
<div class="input-box radio">
|
||||
<label for="member_type1">
|
||||
<input type="radio" id="member_type1" name="memberType" value="1" checked disabled>
|
||||
<span>기업회원</span>
|
||||
</label>
|
||||
<label for="member_type2">
|
||||
<input type="radio" id="member_type2" name="memberType" value="2" disabled>
|
||||
<span>개인회원</span>
|
||||
</label>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="disabled">
|
||||
<th>아이디</th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input type="text" placeholder="A1122" readonly disabled>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th >비밀번호<span class="point" aria-label="필수">*</span></th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input type="password" placeholder="************" required>
|
||||
<button type="button" class="btn-sm change">비밀번호 변경</button>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="disabled">
|
||||
<th>이름</th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input type="text" placeholder="이지빔" readonly disabled>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>이메일<span class="point" aria-label="필수">*</span></th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input type="text" placeholder="A1122" class="e-id" required>
|
||||
<div><span>@</span></div>
|
||||
<input type="text" id="custom_domain" placeholder="직접 입력" class="d-none domain-domain" required>
|
||||
<select id="domain_list" class="domain-list" required>
|
||||
<option value="" hidden disabled>선택</option>
|
||||
<option value="naver" selected>naver.com</option>
|
||||
<option value="gmail">gmail.com</option>
|
||||
<option value="daum">daum.net</option>
|
||||
<option value="nate">nate.com</option>
|
||||
<option value="hotmail">hotmail.com</option>
|
||||
<option value="yahoo">yahoo.com</option>
|
||||
<option value="type" id="domain_txt">직접입력</option>
|
||||
</select>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- 휴대전화번호 -->
|
||||
<tr class="d-none">
|
||||
<th>
|
||||
<label for="user_phone">휴대전화번호</label>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box group">
|
||||
<input
|
||||
type="tel"
|
||||
id="user_phone"
|
||||
name="userPhone"
|
||||
placeholder="휴대폰 번호"
|
||||
required
|
||||
pattern="[0-9]{3}-[0-9]{4}-[0-9]{4}"
|
||||
>
|
||||
<span class="timer d-none">03:00</span>
|
||||
<button type="button" class="btn-sm btn-code" aria-label="인증번호 발송">
|
||||
인증번호
|
||||
</button>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- 휴대전화번호 인증완료 -->
|
||||
<tr >
|
||||
<th>
|
||||
<label for="user_phone">휴대전화번호</label>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box group">
|
||||
<input
|
||||
type="tel"
|
||||
id="user_phone"
|
||||
name="userPhone"
|
||||
placeholder="휴대폰 번호"
|
||||
required
|
||||
pattern="[0-9]{3}-[0-9]{4}-[0-9]{4}"
|
||||
>
|
||||
<span class="complete-msg"><i class="ico-check" aria-hidden="true"></i>인증완료</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- 휴대전화번호 변경 -->
|
||||
<tr class="d-none">
|
||||
<th>
|
||||
<label for="user_phone">휴대전화번호</label>
|
||||
<span class="point" aria-label="필수">*</span>
|
||||
</th>
|
||||
<td>
|
||||
<div class="input-box group">
|
||||
<input
|
||||
type="tel"
|
||||
id="user_phone"
|
||||
name="userPhone"
|
||||
placeholder="휴대폰 번호"
|
||||
required
|
||||
pattern="[0-9]{3}-[0-9]{4}-[0-9]{4}"
|
||||
>
|
||||
<button class="btn-sm change" type="button">휴대폰 번호 변경</button>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr class="company-group disabled">
|
||||
<th>회사정보</th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input type="text" id="company_name" name="companyName" placeholder="(주)BBB" required disabled>
|
||||
<input type="text" id="department_name" name="departmentName" placeholder="XXX부" required disabled>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="btn-wrap">
|
||||
<button type="button" class="btn-cancel">취소</button>
|
||||
<button type="button" class="btn-full">정보 수정</button>
|
||||
</div>
|
||||
<div class="sign-out"><a href=""><i class="ico-signout" aria-hidden="true"></i>회원 탈퇴하기</a></div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<!-- //pop_body -->
|
||||
</div>
|
||||
<!-- //popup_container -->
|
||||
</div>
|
||||
<!-- //popup_in -->
|
||||
</div>
|
||||
<!-- //popup_wrap -->
|
||||
42
kngil/skin/pop_password.php
Normal file
42
kngil/skin/pop_password.php
Normal file
@@ -0,0 +1,42 @@
|
||||
<!-- popup_wrap -->
|
||||
<div class="popup-wrap" id="pop_password" role="dialog" aria-labelledby="password_title" aria-modal="true">
|
||||
<!-- popup_in -->
|
||||
<div class="popup-in member">
|
||||
<button class="btn-close" type="button" aria-label="팝업 닫기">
|
||||
<img src="/kngil/img/ico/ico_close.svg" alt="닫기">
|
||||
</button>
|
||||
<!-- popup_container -->
|
||||
<div class="popup-container login">
|
||||
<!-- pop_header -->
|
||||
<div class="pop-header">
|
||||
<h2 class="tit" id="password_title">로그인</h2>
|
||||
<p class="sub-txt">
|
||||
KNGIL 로그인 시<br class="pc-only">
|
||||
<em>다운로드 및 1:1문의 서비스를</em><br class="pc-only" /> 이용하실 수 있습니다.
|
||||
</p>
|
||||
</div>
|
||||
<!-- //pop_header -->
|
||||
<!-- pop_body -->
|
||||
<div class="pop-body">
|
||||
<div class="form-wrap">
|
||||
<div class="messages">
|
||||
<div class="msg-box">
|
||||
<div class="ico-pw"><img src="/kngil/img/ico/ico_password.svg" alt=""></div>
|
||||
<p>관리자에 의해 <em>임시 발급된 비밀번호</em> 입니다.</p>
|
||||
<p>보안을 위해 <em>새 비밀번호</em>로 변경해 주세요.</p>
|
||||
</div>
|
||||
<div class="btn-wrap">
|
||||
<button class="btn-cancel" type="button">나중에 변경</button>
|
||||
<button class="btn-full" type="button">지금 변경</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- //pop_body -->
|
||||
</div>
|
||||
<!-- //popup_container -->
|
||||
</div>
|
||||
<!-- //popup_in -->
|
||||
</div>
|
||||
<!-- //popup_wrap -->
|
||||
544
kngil/skin/pop_privacy.php
Normal file
544
kngil/skin/pop_privacy.php
Normal file
@@ -0,0 +1,544 @@
|
||||
<!-- popup_wrap -->
|
||||
<div class="popup-wrap" id="pop_privacy" role="dialog" aria-labelledby="privacy-title" aria-modal="true">
|
||||
<!-- popup_in -->
|
||||
<div class="popup-in privacy">
|
||||
<button class="btn-close" type="button" aria-label="팝업 닫기">
|
||||
<img src="/kngil/img/ico/ico_close.svg" alt="닫기">
|
||||
</button>
|
||||
<!-- popup_container -->
|
||||
<div class="popup-container">
|
||||
<div class="pop-contents">
|
||||
<ul class="tab-menu">
|
||||
<li class="tab-privacy on"><span>개인정보 보호정책</span></li>
|
||||
<li class="tab-agreement"><span>이용약관</span></li>
|
||||
</ul>
|
||||
<div class="tab-content pri">
|
||||
<ul class="list-1">
|
||||
<li><span class="tit">제1조. 목적</span>
|
||||
<ul class="list-2" maker="1">
|
||||
<li>바론컨설턴트(이하 "회사")는 KNGIL 서비스(이하 "서비스")를 이용하는 고객(이하 "이용자")의<br>
|
||||
개인정보를 보호하고, 「개인정보 보호법」에 따라 책임과 의무를 다하기 위해 본 개인정보처리방침을<br>
|
||||
마련했습니다. 본 방침은 이용자가 제공한 개인정보가 어떻게 수집, 이용, 보관, 보호되는지를 설명합니다.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="list-1">
|
||||
<li><span class="tit">제2조. 개인정보의 처리목적</span>
|
||||
<ul class="list-2">
|
||||
<li>회사는 다음의 목적을 위해 개인정보를 처리합니다.<br>
|
||||
처리하고 있는 개인정보는 다음의 목적 이외의 용도로는 이용되지 않으며, 이용 목적이 변경되는 경우에는 <br>
|
||||
「개인정보 보호법」 제18조에 따라 별도의 동의를 받는 등 필요한 조치를 이행할 예정입니다.<br>
|
||||
<ul class="list-3">
|
||||
<li>본인확인: 회원가입 및 관리를 위한 본인 확인, 전화 또는 이메일을 통한 연락</li>
|
||||
<li>서비스 제공: 각종 통보 및 서비스 제공을 위한 업무 처리</li>
|
||||
<li>제품소개서 다운로드: 설명자료 전달</li>
|
||||
<li>상담 및 데모 신청: 상담 제공 및 데모 제공, 계약 처리자 정보 수집</li>
|
||||
<li>행사 참가 신청: 참석 안내 및 세미나/설명회/교육 제공</li>
|
||||
<li>보안가이드 제공: 안내자료 전달</li>
|
||||
<li>기술지원 문의: 서비스 사용 지원</li>
|
||||
<li>서비스 개선 의견 접수: 서비스 품질 개선</li>
|
||||
<li>마케팅 활동: 동의한 고객에 한해 뉴스레터 및 매거진 발송</li>
|
||||
</ul>
|
||||
</li></ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="list-1">
|
||||
<li><span class="tit">제3조. 개인정보의 처리 및 보유 기간</span>
|
||||
<ul class="list-2">
|
||||
<li>회사는 법령에 따른 개인정보 보유 및 이용기간 또는 정보주체로부터 개인정보를 수집 시 동의받은 개인정보 보유 및 이용기간 내에서
|
||||
개인정보를 처리 및 보유합니다.</li>
|
||||
<li>각각의 개인정보 처리 및 보유 기간은 다음과 같습니다:
|
||||
<ul class="list-3">
|
||||
<li>회원정보: 회원가입일부터 회원탈퇴 후 1년까지</li>
|
||||
<li>홍보, 상담, 계약용 개인정보: 2년</li>
|
||||
</ul>
|
||||
</li></ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="list-1">
|
||||
<li><span class="tit">제4조. 개인정보의 제3자 제공</span>
|
||||
<ul class="list-2">
|
||||
<li>회사는 정보주체의 개인정보를 제2조에서 명시한 범위 내에서만 처리하며, 정보 주체의 동의, 법률의 특별한 규정 등 「개인정보
|
||||
보호법」 제17조 및
|
||||
제18조에 해당하는 경우에만 개인정보를 제3자에게 제공합니다.</li>
|
||||
<li>회사는 다음과 같이 개인정보를 제3자에게 제공하고 있습니다:
|
||||
<ul class="list-3">
|
||||
<li>제공받는 자: 수사기관 및 유관기관, 피신고업체</li>
|
||||
<li>이용 목적: 개인정보 침해 민원 처리</li>
|
||||
<li>제공하는 개인정보 항목: 성명, 연락처, 이메일</li>
|
||||
<li>보유 및 이용기간: 법령에서 정한 보존기간 및 제공목적 달성 시 파기</li>
|
||||
</ul>
|
||||
</li></ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="list-1">
|
||||
<li><span class="tit">제5조. 개인정보 처리 위탁</span>
|
||||
<ul class="list-2">
|
||||
<li>회사는 개인정보 처리업무를 외부 업체에 위탁하지 않으며, 자체적으로 처리하고 있습니다.</li>
|
||||
<li>회사가 특정 업무(예: 채용 업무)를 외부 업체에 위탁할 경우, <br>개인정보 처리방침 시행 전 회사 홈페이지에서 공지한 후
|
||||
정보주체의 동의를 받은 후 위탁합니다.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="list-1">
|
||||
<li><span class="tit">제6조. 정보주체의 권리·의무 및 행사 방법</span>
|
||||
<ul class="list-2">
|
||||
<li>정보주체는 회사에 대해 언제든지 개인정보 열람, 정정, 삭제, 처리정지 요구 등의 권리를 행사할 수 있습니다.</li>
|
||||
<li>권리 행사는 다음과 같은 방법으로 할 수 있습니다:
|
||||
<ul class="list-3">
|
||||
<li>서면: 회사 주소로 서면 제출</li>
|
||||
<li>전자우편: 회사 이메일로 요청</li>
|
||||
<li>모사전송(FAX): 회사 FAX로 요청</li>
|
||||
</ul>
|
||||
</li><li>권리 행사는 정보주체의 법정대리인이나 위임을 받은 자를 통해 대리로도 가능합니다. 이 경우 “개인정보 처리 방법에 관한 고시”
|
||||
별지 제11호 서식에 따른 위임장을 제출해야 합니다.</li>
|
||||
<li>개인정보 열람 및 처리정지 요구는 「개인정보 보호법」 제35조 제4항, 제37조 제2항에 따라 제한될 수 있습니다.</li>
|
||||
<li>개인정보의 정정 및 삭제 요구는 다른 법령에 따라 수집된 개인정보인 경우 제한될 수 있습니다.</li>
|
||||
<li>회사는 권리 행사를 요청한 자가 본인 또는 정당한 대리인인지를 확인합니다.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="list-1">
|
||||
<li><span class="tit">제7조. 처리하는 개인정보의 항목</span>
|
||||
<ul class="list-2">
|
||||
<li>회사는 다음의 개인정보 항목을 처리합니다:</li>
|
||||
<li>수집 항목
|
||||
<ul class="list-3">
|
||||
<li>필수 항목: 성명, 휴대전화번호, 이메일</li>
|
||||
<li>선택 항목: 회사전화번호, 문의사항</li>
|
||||
<li>수집 방법: 홈페이지, 전화, 이메일을 통해 수집</li>
|
||||
</ul>
|
||||
</li></ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="list-1">
|
||||
<li><span class="tit">제8조. 개인정보의 파기</span>
|
||||
<ul class="list-2">
|
||||
<li>회사는 개인정보 보유 기간의 경과, 처리 목적 달성 등 개인정보가 불필요하게 되었을 때 지체 없이 해당 개인정보를 파기합니다.
|
||||
</li>
|
||||
<li>정보주체로부터 동의받은 개인정보 보유 기간이 경과하거나 처리 목적이 달성된 경우에도 다른 법령에 따라 개인정보를 계속 보존해야 할
|
||||
경우에는, 해당 개인정보를 별도의 데이터베이스(DB)로 옮기거나 보관 장소를 달리하여 보존합니다.</li>
|
||||
<li>개인정보 파기의 절차 및 방법은 다음과 같습니다:
|
||||
<ul class="list-3">
|
||||
<li>파기 절차: 회사는 파기 사유가 발생한 개인정보를 선정하고, 개인정보 보호책임자의 승인을 받아 개인정보를
|
||||
파기합니다.</li>
|
||||
<li>파기 방법: 전자적 파일 형태로 기록된 개인정보는 복구할 수 없도록 기술적 방법을 사용해 삭제하며, 종이 문서에
|
||||
기록된 개인정보는 분쇄기로
|
||||
분쇄하거나 소각하여 파기합니다.</li>
|
||||
</ul>
|
||||
</li></ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="list-1">
|
||||
<li><span class="tit">제9조. 개인정보의 안전성 확보 조치</span>
|
||||
<ul class="list-2">
|
||||
<li>회사는 개인정보의 안전성 확보를 위해 다음과 같은 조치를 취합니다:
|
||||
<ul class="list-3">
|
||||
<li>관리적 조치: 내부관리계획 수립·시행, 정기적 직원 교육</li>
|
||||
<li>기술적 조치: 개인정보처리시스템 접근 권한 관리, 접근통제시스템 설치, 고유식별정보 암호화, 보안 프로그램 설치
|
||||
</li>
|
||||
<li>물리적 조치: 전산실 및 자료보관실 접근 통제</li>
|
||||
</ul>
|
||||
</li></ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="list-1">
|
||||
<li><span class="tit">제10조. 개인정보 자동 수집 장치의 설치·운영 및 거부에 관한 사항</span>
|
||||
<ul class="list-2">
|
||||
<li>회사는 쿠키(Cookie)를 사용하지 않습니다. 쿠키는 이용자의 이용 정보를 저장하고 수시로 불러오는 작은 파일로,
|
||||
KNGIL 서비스에서는 쿠키를 사용하지 않습니다.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="list-1">
|
||||
<li><span class="tit">제11조. 개인정보 보호책임자</span>
|
||||
<ul class="list-2">
|
||||
<li>회사는 개인정보 처리에 관한 업무를 총괄하여 책임지고, 개인정보 처리와 관련된 정보주체의 불만처리 및 피해구제를 위해 개인정보
|
||||
보호책임자를 지정하고 있습니다.</li>
|
||||
<li>개인정보 보호책임자:
|
||||
<ul class="list-3">
|
||||
<li>성명: 염승호</li>
|
||||
<li>직책: 수석연구원</li>
|
||||
<li>연락처: 02-2141-7448</li>
|
||||
<li>팩스번호: 02-2141-7599</li>
|
||||
<li>이메일: b23008@baroncs.co.kr</li>
|
||||
</ul>
|
||||
</li></ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="list-1">
|
||||
<li><span class="tit">제12조. 개인정보 열람청구</span>
|
||||
<ul class="list-2">
|
||||
<li>정보주체는 「개인정보 보호법」 제35조에 따른 개인정보 열람 청구를 아래 부서에 할 수 있습니다. 회사는 정보주체의 개인정보
|
||||
열람청구가 신속하게 처리되도록 노력하겠습니다.</li>
|
||||
<li>개인정보 열람청구 접수·처리 부서:
|
||||
<ul class="list-3">
|
||||
<li>부서명: 총괄기획실</li>
|
||||
<li>담당자: 권혁진</li>
|
||||
<li>연락처: 02-2141-7465</li>
|
||||
<li>팩스번호: 02-2141-7599</li>
|
||||
<li>이메일: baroncs@baroncs.co.kr</li>
|
||||
</ul>
|
||||
</li></ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="list-1">
|
||||
<li><span class="tit">제13조. 권익침해 구제방법</span>
|
||||
<ul class="list-2">
|
||||
<li>정보주체는 개인정보 침해로 인한 구제를 위해 개인정보분쟁조정위원회, 한국인터넷진흥원 개인정보침해신고센터 등에 분쟁 해결이나 상담을
|
||||
신청할 수 있습니다.
|
||||
<ul class="list-3">
|
||||
<li>개인정보분쟁조정위원회: (국번없이) 1833-6972 (www.kopico.go.kr)</li>
|
||||
<li>개인정보침해신고센터: (국번없이) 118 (privacy.kisa.or.kr)</li>
|
||||
<li>대검찰청: (국번없이) 1301 (www.spo.go.kr)</li>
|
||||
<li>팩스번호: 02-408-1927</li>
|
||||
<li>경찰청: (국번없이) 182 (www.police.go.kr)</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="list-1">
|
||||
<li><span class="tit">제14조. 개인정보 처리방침의 변경</span>
|
||||
<ul class="list-2">
|
||||
<li>본 개인정보처리방침은 법령, 정책 또는 보안 기술의 변경에 따라 내용의 추가, 삭제 및 수정이 있을 시, 개정 최소 7일 전에
|
||||
홈페이지를 통해 사전
|
||||
공지합니다.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="list-1">
|
||||
<li><span class="tit">부칙</span>
|
||||
<ul class="list-2">
|
||||
<li>제 1조 (시행일자)
|
||||
<ul class="list-3">
|
||||
<li>이 개인정보처리방침은 2024년 10월 1일부터 시행됩니다.</li>
|
||||
|
||||
</ul>
|
||||
</li><li>제2조 (개정 및 고지의 의무)
|
||||
<ul class="list-3">
|
||||
<li>회사는 개인정보처리방침을 변경하는 경우, 변경사항을 시행일자 7일 전부터 서비스 내 공지사항 페이지를 통해 고지할 것입니다.
|
||||
다만, 이용자의 권리나
|
||||
의무에 중대한 변경이 발생하는 경우에는 시행일자 30일 전부터 고지합니다.</li>
|
||||
|
||||
</ul>
|
||||
</li><li>제3조 (유효성)
|
||||
<ul class="list-3">
|
||||
<li>본 개인정보처리방침의 일부 조항이 법적 또는 기타 사유로 인해 무효화되거나 시행할 수 없는 경우, 나머지 조항들은 계속해서 유효합니다.
|
||||
무효화된 조항은
|
||||
관련 법령에 부합하는 방식으로 수정되어 효력을 지속합니다.</li>
|
||||
|
||||
</ul>
|
||||
</li><li>제4조 (변경 통지의 방법)<br>
|
||||
회사는 개인정보처리방침의 변경 시, 다음의 방법으로 이용자에게 고지합니다:
|
||||
<ul class="list-3">
|
||||
<li>서비스 초기화면 또는 팝업 공지</li>
|
||||
<li>이메일 발송</li>
|
||||
<li>회사 홈페이지 공지사항</li>
|
||||
|
||||
</ul>
|
||||
</li><li>제5조 (비회원의 개인정보 보호)
|
||||
<ul class="list-3">
|
||||
<li>회사는 비회원의 개인정보도 회원과 동일한 수준으로 보호합니다. 비회원이 개인정보 제공을 거부할 경우 일부 서비스 이용에 제한이 있을 수
|
||||
있습니다.</li>
|
||||
|
||||
</ul>
|
||||
</li><li>제6조 (14세 미만 아동의 개인정보 보호)
|
||||
<ul class="list-3">
|
||||
<li>회사는 14세 미만 아동의 개인정보를 수집하지 않습니다. 만일 14세 미만 아동의 개인정보가 수집된 경우, 법정 대리인의 동의를 받아야
|
||||
하며, 법정
|
||||
대리인의 동의 없이 수집된 경우 이를 지체 없이 파기합니다.</li>
|
||||
|
||||
</ul>
|
||||
</li><li>제7조 (개인정보의 국외 이전)
|
||||
<ul class="list-3">
|
||||
<li>회사는 이용자의 개인정보를 국외로 이전하지 않으며, 향후 필요한 경우, 사전에 이용자의 동의를 받습니다.</li>
|
||||
|
||||
</ul>
|
||||
</li><li>제8조 (기타)
|
||||
<ul class="list-3">
|
||||
<li>본 방침에 명시되지 않은 사항은 회사의 내부 방침과 관련 법령에 따릅니다.</li>
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="tab-content agr">
|
||||
<ul class="list-1">
|
||||
<li><span class="tit">제1장 총칙</span>
|
||||
<ul class="list-2" maker="1">
|
||||
<li>제1조 (목적)
|
||||
<ul class="list-3">
|
||||
<li>이 약관은 바론컨설턴트(이하 "회사"라 합니다)가 제공하는 KNGIL 소프트웨어(이하 "서비스"라 합니다)를 이용함에
|
||||
있어 회사와 이용자 간의 권리,
|
||||
의무 및 책임사항과 기타 필요한 사항을 정하는 것을 목적으로 합니다.</li>
|
||||
</ul>
|
||||
</li><li>제2조 (용어의 정의)<br>
|
||||
본 약관에서 사용하는 용어의 정의는 다음과 같습니다:
|
||||
<ul class="list-3">
|
||||
<li>“서비스”란 회사가 제공하는 소프트웨어 및 관련 제반 서비스를 의미합니다.</li>
|
||||
<li>“이용자”란 회사의 서비스에 접속하여 본 약관에 따라 회사가 제공하는 서비스를 이용하는 회원 및 비회원을 말합니다.
|
||||
</li>
|
||||
<li>“회원”이란 본 약관에 동의하고 회사와 이용계약을 체결한 자를 의미합니다.</li>
|
||||
<li>“비회원”이란 회원가입을 하지 않고 회사가 제공하는 일부 서비스를 이용하는 자를 말합니다.</li>
|
||||
</ul>
|
||||
</li><li>제3조 (약관의 효력 및 변경)<br>
|
||||
본 약관에서 사용하는 용어의 정의는 다음과 같습니다:
|
||||
<ul class="list-3">
|
||||
<li>본 약관은 이용자가 본 약관에 동의하고, 회사가 이에 대한 승낙을 완료함으로써 효력이 발생합니다.</li>
|
||||
<li>회사는 필요한 경우 본 약관을 변경할 수 있으며, 변경된 약관은 서비스 화면에 공지된 후 효력이 발생합니다.
|
||||
</li>
|
||||
</ul>
|
||||
</li><li>제4조 (약관 외 준칙)
|
||||
<ul class="list-3">
|
||||
<li>본 약관에 명시되지 않은 사항에 대해서는 대한민국의 관련 법령과 상관습에 따릅니다.</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</li></ul>
|
||||
|
||||
<ul class="list-1">
|
||||
<li><span class="tit">제2장 서비스 이용계약</span>
|
||||
<ul class="list-2" maker="1">
|
||||
<li>제5조 (이용계약의 성립)
|
||||
<ul class="list-3">
|
||||
<li>이용계약은 이용자가 약관의 내용에 동의하고, 회사가 제공하는 소정의 회원가입 신청서를 작성하여 가입을 완료한 후,
|
||||
회사가 이를 승인함으로써 성립합니다.</li>
|
||||
</ul>
|
||||
</li><li>제6조 (이용계약의 유보와 거절)<br>
|
||||
회사는 다음 각 호에 해당하는 경우 이용계약의 성립을 유보하거나 거절할 수 있습니다:
|
||||
<ul class="list-3">
|
||||
<li>신청서의 내용이 허위로 판명된 경우</li>
|
||||
<li>서비스 제공이 기술적으로 어려운 경우</li>
|
||||
</ul>
|
||||
|
||||
</li><li>제7조 (계약사항의 변경)<br>
|
||||
<ul class="list-3">
|
||||
<li>회원은 개인정보 관리 메뉴를 통해 언제든지 자신의 정보를 열람하고 수정할 수 있습니다. 회원의 정보가 변경된 경우
|
||||
즉시 수정해야 하며, 수정하지 않아
|
||||
발생하는 문제의 책임은 회원에게 있습니다.</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="list-1">
|
||||
<li><span class="tit">제3장 개인정보 보호</span>
|
||||
<ul class="list-2" maker="1">
|
||||
<li>제8조 (개인정보 보호의 원칙)
|
||||
<ul class="list-3">
|
||||
<li>회원의 개인정보는 관련 법령에 따라 보호됩니다.</li>
|
||||
<li>회사는 개인정보 보호와 관련된 세부 사항을 별도로 마련한 개인정보처리방침에 따라 관리하며, 이용자는 언제든지 해당
|
||||
방침을 통해 개인정보 관리에 대한
|
||||
자세한 내용을 확인할 수 있습니다.</li>
|
||||
</ul>
|
||||
</li><li>제9조 (개인정보처리방침 준수)
|
||||
<ul class="list-3">
|
||||
<li>회사는 개인정보 보호와 관련된 구체적인 사항을 개인정보처리방침에 따라 관리합니다.</li>
|
||||
<li>개인정보의 수집, 이용, 제공, 보관, 보호 등에 관한 사항은 회사의 개인정보처리방침을 따르며, 이용자는 회사
|
||||
웹사이트에서 이를 확인할 수
|
||||
있습니다.</li>
|
||||
<li>회사는 개인정보 보호를 위해 최선을 다하며, 관련 법령에 따라 이용자의 개인정보를 안전하게 관리합니다.</li>
|
||||
</ul>
|
||||
|
||||
</li><li>제10조 (14세 미만 아동의 개인정보 보호)<br>
|
||||
<ul class="list-3">
|
||||
<li>회사는 14세 미만 아동의 개인정보를 수집할 경우, 반드시 법정대리인의 동의를 받아야 합니다.</li>
|
||||
<li>법정대리인은 아동의 개인정보 열람, 수정, 삭제를 요청할 수 있으며, 회사는 이를 신속하게 처리합니다.</li>
|
||||
<li>14세 미만 아동의 개인정보 보호와 관련된 구체적인 사항은 개인정보처리방침에 명시되어 있습니다.</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="list-1">
|
||||
<li><span class="tit">제4장 서비스 제공 및 이용</span>
|
||||
<ul class="list-2" maker="1">
|
||||
<li>제11조 (서비스 제공)
|
||||
<ul class="list-3">
|
||||
<li>회사는 회원의 이용 신청을 승인한 때부터 서비스를 개시합니다. 서비스 이용은 연중무휴 24시간을 원칙으로 합니다.
|
||||
</li>
|
||||
</ul>
|
||||
</li><li>제12조 (서비스의 변경 및 중단)
|
||||
<ul class="list-3">
|
||||
<li>회사는 서비스 제공이 어려운 경우 사전 고지 후 서비스를 변경하거나 중단할 수 있습니다.</li>
|
||||
</ul>
|
||||
|
||||
</li><li>제10조 (14세 미만 아동의 개인정보 보호)<br>
|
||||
<ul class="list-3">
|
||||
<li>회사는 14세 미만 아동의 개인정보를 수집할 경우, 반드시 법정대리인의 동의를 받아야 합니다.</li>
|
||||
<li>법정대리인은 아동의 개인정보 열람, 수정, 삭제를 요청할 수 있으며, 회사는 이를 신속하게 처리합니다.</li>
|
||||
<li>14세 미만 아동의 개인정보 보호와 관련된 구체적인 사항은 개인정보처리방침에 명시되어 있습니다.</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</li></ul>
|
||||
|
||||
<ul class="list-1">
|
||||
<li><span class="tit">제5장 정보 제공 및 광고</span>
|
||||
<ul class="list-2" maker="1">
|
||||
<li>제13조 (정보 제공 및 광고)
|
||||
<ul class="list-3">
|
||||
<li>회사는 서비스 이용 중 필요하다고 인정되는 정보 및 광고를 제공할 수 있습니다.</li>
|
||||
<li>회원은 원치 않는 정보를 수신 거부할 수 있습니다.</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</li></ul>
|
||||
|
||||
<ul class="list-1">
|
||||
<li><span class="tit">제6장 게시물 관리</span>
|
||||
<ul class="list-2" maker="1">
|
||||
<li>제14조 (게시물의 관리)
|
||||
<ul class="list-3">
|
||||
<li>회사는 회원이 게시한 내용이 불법적이거나 약관에 위배될 경우 이를 삭제할 수 있습니다.</li>
|
||||
</ul>
|
||||
</li><li>제15조 (게시물의 저작권)
|
||||
<ul class="list-3">
|
||||
<li>게시물의 저작권은 회원에게 있으며, 회사는 이를 서비스 홍보 및 개선 목적으로 사용할 수 있습니다.</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</li></ul>
|
||||
|
||||
<ul class="list-1">
|
||||
<li><span class="tit">제7장 계약 해지 및 이용 제한</span>
|
||||
<ul class="list-2" maker="1">
|
||||
<li>제16조 (계약 해지)
|
||||
<ul class="list-3">
|
||||
<li>회원은 언제든지 계약 해지를 요청할 수 있으며, 회사는 신속하게 처리합니다.</li>
|
||||
</ul>
|
||||
</li><li>제17조 (이용 제한)
|
||||
<ul class="list-3">
|
||||
<li>회사는 회원이 약관을 위반할 경우 서비스 이용을 제한할 수 있습니다.</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</li></ul>
|
||||
|
||||
<ul class="list-1">
|
||||
<li><span class="tit">제8장 손해 배상 및 면책 조항</span>
|
||||
<ul class="list-2" maker="1">
|
||||
<li>제18조 (손해 배상)
|
||||
<ul class="list-3">
|
||||
<li>회사는 무료로 제공되는 서비스와 관련하여 회원에게 발생한 손해에 대해 책임을 지지 않습니다.</li>
|
||||
</ul>
|
||||
</li><li>제19조 (면책 조항)
|
||||
<ul class="list-3">
|
||||
<li>회사는 천재지변 등 불가항력적인 사유로 인해 서비스를 제공하지 못하는 경우 책임을 지지 않습니다.</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</li></ul>
|
||||
|
||||
<ul class="list-1">
|
||||
<li><span class="tit">제9장 유료 서비스</span>
|
||||
<ul class="list-2" maker="1">
|
||||
<li>제20조 (유료 서비스의 이용)
|
||||
<ul class="list-3">
|
||||
<li>회사는 회원에게 특정 서비스에 대해 유료로 제공할 수 있습니다.</li>
|
||||
<li>유료 서비스의 이용 요금, 결제 방식, 환불 절차 등에 대한 상세 내용은 서비스 안내 페이지와 결제 화면에
|
||||
명시합니다.</li>
|
||||
<li>유료 서비스 이용 요금은 회사가 정한 결제 방식에 따라 결제됩니다. 회원은 신용카드, 계좌이체, 휴대전화 결제 등
|
||||
회사가 제공하는 다양한 결제
|
||||
방식을 통해 요금을 납부할 수 있습니다.</li>
|
||||
<li>유료 서비스의 이용 요금은 선불 결제를 원칙으로 하며, 이용 기간 중 서비스 중지 및 해지 시 남은 이용 기간에
|
||||
대한 환불은 회사의 환불 정책에
|
||||
따라 처리됩니다.</li>
|
||||
<li>회사는 회원의 유료 서비스 이용과 관련하여 발생한 문제에 대해 최선을 다해 해결하도록 노력합니다. 다만, 회사의
|
||||
고의 또는 중대한 과실이 없는 한
|
||||
회원이 유료 서비스 이용 중 입은 손해에 대해서는 책임을 지지 않습니다</li>
|
||||
</ul>
|
||||
</li><li>21조 (환불 정책)
|
||||
<ul class="list-3">
|
||||
<li>회원은 결제 후 7일 이내에 서비스 이용을 시작하지 않은 경우, 요금 전액을 환불받을 수 있습니다.</li>
|
||||
<li>유료 서비스 이용 중 부득이한 사유로 서비스가 중지된 경우, 회사는 이용하지 않은 부분에 대해 환불 절차를
|
||||
밟습니다.</li>
|
||||
<li>회원의 귀책사유로 인해 서비스 이용이 중지된 경우, 환불이 불가능합니다.</li>
|
||||
<li>환불은 회원이 지정한 계좌로 환불 절차를 거치며, 환불 요청 후 7일 이내에 처리됩니다.</li>
|
||||
</ul>
|
||||
</li><li>제22조 (유료 서비스의 중지 및 해지)
|
||||
<ul class="list-3">
|
||||
<li>회원이 유료 서비스를 해지하고자 하는 경우, 회사의 고객 지원 센터에 해지 신청을 해야 합니다.</li>
|
||||
<li>회사는 회원이 약관을 위반하거나 부정한 방법으로 유료 서비스를 이용한 경우, 유료 서비스 이용을 즉시 중지하고
|
||||
계약을 해지할 수 있습니다.</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</li></ul>
|
||||
|
||||
<ul class="list-1">
|
||||
<li><span class="tit">제10장 양도 금지</span>
|
||||
<ul class="list-2" maker="1">
|
||||
<li>제23조 (양도 금지)
|
||||
<ul class="list-3">
|
||||
<li>회원은 서비스 이용권한, 기타 이용계약상의 지위를 제3자에게 양도, 증여할 수 없으며, 이를 담보로 제공할 수
|
||||
없습니다.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="list-1">
|
||||
<li><span class="tit">제11장 관할 법원</span>
|
||||
<ul class="list-2" maker="1">
|
||||
<li>제24조 (분쟁 해결)
|
||||
<ul class="list-3">
|
||||
<li>서비스 이용과 관련하여 분쟁이 발생한 경우, 회사와 회원은 성실히 협의하여 해결합니다.</li>
|
||||
</ul>
|
||||
</li><li>제25조 (관할 법원)
|
||||
<ul class="list-3">
|
||||
<li>본 약관에 따른 분쟁은 서울중앙지방법원을 관할 법원으로 합니다.</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</li></ul>
|
||||
|
||||
<ul class="list-1">
|
||||
<li><span class="tit">부칙</span>
|
||||
<ul class="list-2" maker="1">
|
||||
<li>본 약관은 2024년 10월 1일부터 시행됩니다.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- //popup_container -->
|
||||
</div>
|
||||
<!-- //popup_in -->
|
||||
</div>
|
||||
<!-- //popup_wrap -->
|
||||
143
kngil/skin/pop_search.php
Normal file
143
kngil/skin/pop_search.php
Normal file
@@ -0,0 +1,143 @@
|
||||
<!-- popup_wrap -->
|
||||
<div class="popup-wrap" id="pop_search" role="dialog" aria-labelledby="search_title" aria-modal="true">
|
||||
<!-- popup_in -->
|
||||
<div class="popup-in member">
|
||||
<button class="btn-close" type="button" aria-label="팝업 닫기">
|
||||
<img src="/kngil/img/ico/ico_close.svg" alt="닫기">
|
||||
</button>
|
||||
<!-- popup_container -->
|
||||
<div class="popup-container search">
|
||||
<!-- pop_header -->
|
||||
<div class="pop-header">
|
||||
<h2 class="tit" id="search_title">아이디 찾기 / <br> 비밀번호 변경</h2>
|
||||
</div>
|
||||
<!-- //pop_header -->
|
||||
<!-- pop_body -->
|
||||
<div class="pop-body">
|
||||
<div class="contents-wrap">
|
||||
<ul class="tab-menu">
|
||||
<li class="tab-id on"><span>아이디 찾기</span></li>
|
||||
<li class="tab-pw"><span>비밀번호 찾기</span></li>
|
||||
</ul>
|
||||
<div class="tab-content id">
|
||||
<div class="radio-wrap">
|
||||
<label><input type="radio" class="find-ph on" checked> 휴대전화 번호로 찾기</label>
|
||||
<label><input type="radio" class="find-email"> 이메일 주소로 찾기</label>
|
||||
</div>
|
||||
<div class="form-wrap">
|
||||
<table class="ph">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>이름</th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input type="text" placeholder="이름 입력" required>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>휴대전화번호</th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input type="text" placeholder="휴대전화번호 입력" required>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<table class="email hidden">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>이름</th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input type="text" placeholder="이름 입력" required>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>이메일</th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input type="text" placeholder="이메일 입력" class="e-id" required>
|
||||
<div><span>@</span></div>
|
||||
<input type="text" id="custom_domain" class="domain-domain d-none" placeholder="직접 입력" required>
|
||||
<select id="domain_list" class="domain-list" required>
|
||||
<option value="" hidden disabled selected>선택</option>
|
||||
<option value="naver">naver.com</option>
|
||||
<option value="gmail">gmail.com</option>
|
||||
<option value="daum">daum.net</option>
|
||||
<option value="nate">nate.com</option>
|
||||
<option value="hotmail">hotmail.com</option>
|
||||
<option value="yahoo">yahoo.com</option>
|
||||
<option value="type" id="domain_txt">직접입력</option>
|
||||
</select>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="btn-wrap">
|
||||
<button class="btn-full" type="button">확인</button>
|
||||
</div>
|
||||
<div class="inquiry">계정이 기억나지 않을 경우 <em>baroncs@baroncs.co.kr</em>로 문의하시기 바랍니다.</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-content pw">
|
||||
<div class="form-wrap">
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>아이디</th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input type="text" placeholder="아이디 입력" required>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th >이메일</th>
|
||||
<td>
|
||||
<div class="input-box">
|
||||
<input type="text" placeholder="이메일 입력" class="e-id" required>
|
||||
<div><span>@</span></div>
|
||||
<input type="text" id="custom_domain" placeholder="직접 입력" class="d-none domain-domain" required>
|
||||
<select id="domain_list" class="domain-list" required>
|
||||
<option value="" hidden disabled selected>선택</option>
|
||||
<option value="naver">naver.com</option>
|
||||
<option value="gmail">gmail.com</option>
|
||||
<option value="daum">daum.net</option>
|
||||
<option value="nate">nate.com</option>
|
||||
<option value="hotmail">hotmail.com</option>
|
||||
<option value="yahoo">yahoo.com</option>
|
||||
<option value="type" id="domain_txt">직접입력</option>
|
||||
</select>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="info-box">
|
||||
<p>아이디와 이메일 일치시에 비밀번호는<br> <em>등록된 휴대폰 번호</em>로 변경됩니다.</p>
|
||||
</div>
|
||||
<div class="btn-wrap">
|
||||
<button class="btn-full" type="button">확인</button>
|
||||
</div>
|
||||
<div class="inquiry">계정이 기억나지 않을 경우 <em>baroncs@baroncs.co.kr</em>로 문의하시기 바랍니다.</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="messages pw hidden">
|
||||
<i class="send"></i>
|
||||
<span><em>baroncs@baroncs.co.kr</em> 로 <br>임시 비밀번호를 전송하였습니다.</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- //pop_body -->
|
||||
</div>
|
||||
<!-- //popup_container -->
|
||||
</div>
|
||||
<!-- //popup_in -->
|
||||
</div>
|
||||
<!-- //popup_wrap -->
|
||||
50
kngil/skin/product_mng.php
Normal file
50
kngil/skin/product_mng.php
Normal file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
// 슈퍼관리자 권한 체크
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>상품등록</title>
|
||||
|
||||
<link rel="stylesheet" href="/css/common.css">
|
||||
<link rel="stylesheet" href="/css/adm_style.css">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/vitmalina/w2ui@master/dist/w2ui.min.css">
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div class="product-wrap">
|
||||
|
||||
<!-- 타이틀 -->
|
||||
<div class="product-header">
|
||||
상품등록
|
||||
<span class="btn-close" onclick="window.close()">X</span>
|
||||
</div>
|
||||
|
||||
<!-- 버튼 영역 -->
|
||||
<div class="product-toolbar">
|
||||
<button id="btnAdd">+</button>
|
||||
<button id="btnRemove">-</button>
|
||||
<button id="btnSave">저장</button>
|
||||
</div>
|
||||
|
||||
<!-- Grid -->
|
||||
<div id="productGrid" style="height:260px;"></div>
|
||||
|
||||
</div>
|
||||
|
||||
<script type="module">
|
||||
import { createProductGrid, addProductRow, removeProductRow, saveProducts }
|
||||
from '/js/adm_index.js'
|
||||
|
||||
const grid = createProductGrid('#productGrid')
|
||||
|
||||
document.getElementById('btnAdd').onclick = () => addProductRow()
|
||||
document.getElementById('btnRemove').onclick = () => removeProductRow()
|
||||
document.getElementById('btnSave').onclick = () => saveProducts()
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
614
kngil/skin/qa_detail.skin.php
Normal file
614
kngil/skin/qa_detail.skin.php
Normal file
@@ -0,0 +1,614 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<?php include __DIR__ . "/_head.php"; ?>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Q&A 상세보기</title>
|
||||
|
||||
<link rel="stylesheet" href="/kngil/css/qa/font-awesome.min.css?ver=2303229">
|
||||
|
||||
<!-- 디자인팀 작성 -->
|
||||
<script src="/kngil/js/lib/jquery-3.6.1.min.js" type="text/javascript"></script>
|
||||
<script src="/kngil/js/qa/jquery.mousewheel.min.js" type="text/javascript"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/gsap.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollTrigger.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollToPlugin.min.js"></script>
|
||||
<link rel="stylesheet" href="https://unpkg.com/aos@2.3.1/dist/aos.css" type="text/css"/>
|
||||
<link rel="stylesheet" href="https://unpkg.com/lenis@1.1.9/dist/lenis.css">
|
||||
<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
|
||||
<script src="https://unpkg.com/lenis@1.1.9/dist/lenis.min.js"></script>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrap">
|
||||
|
||||
<?php
|
||||
include __DIR__ . "/_header.php";
|
||||
|
||||
if (!$isLogin) {
|
||||
echo "<script>
|
||||
alert('로그인 후 문의 등록이 가능합니다.');
|
||||
location.href = '/kngil/skin/qa_list.skin.php';
|
||||
</script>";
|
||||
exit;
|
||||
}
|
||||
$isLoggedIn = !empty($_SESSION['login']);
|
||||
?>
|
||||
|
||||
|
||||
<?php
|
||||
include __DIR__ . "/pop_login.php";
|
||||
include __DIR__ . "/pop_join.php";
|
||||
include __DIR__ . "/pop_agreement.php";
|
||||
include __DIR__ . "/pop_mypage01.php";
|
||||
include __DIR__ . "/pop_mypage02.php";
|
||||
include __DIR__ . "/pop_mypage03.php";
|
||||
include __DIR__ . "/pop_password.php";
|
||||
include __DIR__ . "/pop_privacy.php";
|
||||
include __DIR__ . "/pop_search.php";
|
||||
?>
|
||||
|
||||
|
||||
<div class="container faq">
|
||||
<section class="sub-header">
|
||||
<div class="page-title">
|
||||
<h2 data-aos="fade-down" data-aos-duration="1000">Q&A</h2>
|
||||
<p class="sub-txt">KNGIL 관련 문의하기</p>
|
||||
</div>
|
||||
<ul class="sub-tab">
|
||||
<li><a href="/kngil/skin/faq_list.skin.php">자주하는 질문(FAQ)</a></li>
|
||||
<li class="on"><a href="/kngil/bbs/qa_list.php">문의하기(Q&A)</a></li>
|
||||
<li><a href="https://939.co.kr/saman/" target="_blank">원격지원</a></li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="sub-content">
|
||||
<h3 class="sub-tit">문의하기(Q&A)</h3>
|
||||
<article class="qa-detail">
|
||||
<div class="qa-view">
|
||||
<div class="qa-view-header">
|
||||
<div class="title-area">
|
||||
<!-- 왼쪽: 카테고리 + 제목 -->
|
||||
<div class="title-left">
|
||||
<span class="cate"><?=htmlspecialchars($post['category_label'])?></span>
|
||||
<span class="title"><?=htmlspecialchars($post['title'])?></span>
|
||||
</div>
|
||||
|
||||
<!-- 오른쪽: 상태 -->
|
||||
<div class="title-right">
|
||||
<?php if ($isSuperAdmin): ?>
|
||||
<form method="post" action="/kngil/bbs/qa_status.php">
|
||||
<input type="hidden" name="post_id" value="<?= $post['post_id'] ?>">
|
||||
<select name="status" onchange="this.form.submit()" class="status-select status-<?= htmlspecialchars($post['stat_bc']) ?>">
|
||||
<option value="new" <?= $post['stat_bc']==='new'?'selected':'' ?>>문의접수</option>
|
||||
<option value="review" <?= $post['stat_bc']==='review'?'selected':'' ?>>문의검토</option>
|
||||
<option value="deep" <?= $post['stat_bc']==='deep'?'selected':'' ?>>정밀검토</option>
|
||||
<option value="patch" <?= $post['stat_bc']==='patch'?'selected':'' ?>>패치예정</option>
|
||||
<option value="done" <?= $post['stat_bc']==='done'?'selected':'' ?>>답변완료</option>
|
||||
</select>
|
||||
</form>
|
||||
<?php else: ?>
|
||||
<div class="status"><?= htmlspecialchars($post['status_label']) ?></div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="user-info">
|
||||
<div class="user-item">
|
||||
<span>
|
||||
<i class="fa fa-clock-o" aria-hidden="true"></i>
|
||||
<?=htmlspecialchars($post['cdt_dt'])?>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="user-item">
|
||||
<!-- 글번호 -->
|
||||
<span class="post">
|
||||
<i class="fa fa-hashtag" aria-hidden="true"></i>
|
||||
<?= htmlspecialchars($post['post_id']) ?>
|
||||
</span>
|
||||
|
||||
<?php if ($post['category'] === 'notice'): ?>
|
||||
<!-- ✅ 공지사항이면 "관리자"만 표시 -->
|
||||
<span>
|
||||
<i class="fa fa-user" aria-hidden="true"></i>
|
||||
관리자
|
||||
</span>
|
||||
<?php else: ?>
|
||||
<!-- 작성자 이메일 -->
|
||||
<span>
|
||||
<i class="fa fa-envelope-o" aria-hidden="true"></i>
|
||||
<?= htmlspecialchars($post['email']) ?>
|
||||
</span>
|
||||
|
||||
<!-- 회사 -->
|
||||
<span>
|
||||
<i class="fa fa-building-o" aria-hidden="true"></i>
|
||||
<?= htmlspecialchars($post['co_nm'] ?? '') ?>
|
||||
</span>
|
||||
|
||||
<!-- 부서 -->
|
||||
<?php if (!empty($post['dept_nm'])): ?>
|
||||
<span>
|
||||
<i class="fa fa-sitemap" aria-hidden="true"></i>
|
||||
<?= htmlspecialchars($post['dept_nm']) ?>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- 작성자 이름 -->
|
||||
<!-- <span>
|
||||
<i class="fa fa-user" aria-hidden="true"></i>
|
||||
<?= htmlspecialchars($post['display_name']) ?>
|
||||
</span> -->
|
||||
|
||||
<!-- 관리자 전용 -->
|
||||
<?php if ($isSuperAdmin): ?>
|
||||
<?php if (!empty($post['tel_no'])): ?>
|
||||
<span>
|
||||
<i class="fa fa-phone" aria-hidden="true"></i>
|
||||
<?= htmlspecialchars($post['tel_no']) ?>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
<span>
|
||||
<i class="fa fa-key" aria-hidden="true"></i>
|
||||
Q&A : <?= htmlspecialchars($post['post_id']) ?>
|
||||
</span>
|
||||
|
||||
<?php endif; ?>
|
||||
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="content">
|
||||
<?= $post['content'] ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 첨부파일 -->
|
||||
<?php if (!empty($attachments)): ?>
|
||||
<div class="attachments" style="margin-top:20px;">
|
||||
<h3>첨부파일</h3>
|
||||
<ul>
|
||||
<?php foreach ($attachments as $file): ?>
|
||||
<li>
|
||||
<?php if (!empty($_SESSION['user']['userId'])): ?>
|
||||
<!-- ✅ 로그인한 경우: 다운로드 가능 -->
|
||||
<a href="<?= htmlspecialchars($file['save_path']) ?>" download>
|
||||
<?= htmlspecialchars($file['ori_name']) ?>
|
||||
</a>
|
||||
<?php else: ?>
|
||||
<!-- 🚫 비회원: 이름만 표시 (다운로드 막음) -->
|
||||
<?= htmlspecialchars($file['ori_name']) ?> <span style="color:#888;"></span>
|
||||
<?php endif; ?>
|
||||
<small>
|
||||
(<?= round($file['file_size'] / 1024, 1) ?> KB,
|
||||
<?= htmlspecialchars(substr($file['uploaded_at'],0,16)) ?>)
|
||||
</small>
|
||||
</li>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</article>
|
||||
<div class="btn-wrap right">
|
||||
|
||||
<!-- 수정 버튼 (로그인 사용자 == 작성자 인 경우에만) -->
|
||||
<?php if ($me === $_SESSION['login']['user_id'] ?? ''): ?>
|
||||
<button class="btn-secondary" onclick="location.href='/kngil/bbs/qa_write.php?id=<?= $post['post_id'] ?>'">수정</button>
|
||||
<button class="btn-secondary" id="btn-delete" data-status="<?= $post['stat_bc'] ?>" data-id="<?= $post['post_id'] ?>">삭제</button>
|
||||
<?php endif; ?>
|
||||
<!-- <button onclick="history.back()">닫기</button> -->
|
||||
<button class="btn-primary" onclick="location.href='/kngil/bbs/qa_list.php'">
|
||||
<i class="fa fa-list" aria-hidden="true"></i> 목록</button>
|
||||
</div>
|
||||
|
||||
<article class="comment-section">
|
||||
<h4 class="comment-title">댓글 (<span id="comment-count"><?= count($comments ?? []) ?></span>)</h4>
|
||||
|
||||
<div class="comment-wrap form-wrap">
|
||||
<div id="comments" class="comment-list">
|
||||
|
||||
<?php foreach ($comments ?? [] as $c): ?>
|
||||
<div class="comment" id="comment-<?= $c['comment_id'] ?>">
|
||||
<div class="comment-body">
|
||||
|
||||
<!-- 댓글 내용 -->
|
||||
<div class="comment-text">
|
||||
<?= nl2br(htmlspecialchars($c['content'] ?? '')) ?>
|
||||
</div>
|
||||
|
||||
<!-- (이미지 영역 구조 유지 – 아직 로직 안 붙여도 됨) -->
|
||||
<?php if (!empty($c['images'])): ?>
|
||||
<div class="comment-images" style="margin-top:6px; display:flex; gap:12px;">
|
||||
<?php foreach ($c['images'] as $img): ?>
|
||||
<div style="text-align:center;">
|
||||
<img
|
||||
src="<?= htmlspecialchars($img['thumb_path']) ?>"
|
||||
onclick="window.open('<?= htmlspecialchars($img['file_path']) ?>', '_blank')"
|
||||
style="width:140px; border-radius:6px; margin:4px; cursor:pointer;">
|
||||
|
||||
<div style="font-size:12px; color:#555; margin-top:4px; max-width:140px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;">
|
||||
<?= htmlspecialchars($img['file_name']) ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- 작성자 + 날짜 -->
|
||||
<div class="comment-meta">
|
||||
<span class="comment-author">
|
||||
<strong><?= htmlspecialchars($c['user_nm'] ?? '') ?></strong>
|
||||
</span>
|
||||
<span class="comment-date">
|
||||
<small><?= $c['cdt_dt'] ?? '' ?></small>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 수정 / 삭제 버튼 -->
|
||||
<div class="comment-actions" style="text-align:right;">
|
||||
<?php if ($isLoggedIn): ?>
|
||||
<?php if (($_SESSION['login']['user_id'] ?? '') === ($c['commenter'] ?? '')): ?>
|
||||
<button class="btn-edit" data-id="<?= $c['comment_id'] ?>">수정</button>
|
||||
<button class="btn-delete" data-id="<?= $c['comment_id'] ?>">삭제</button>
|
||||
<?php elseif ($isSuperAdmin): ?>
|
||||
<button class="btn-delete" data-id="<?= $c['comment_id'] ?>">삭제</button>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<!-- 수정 모드 textarea (구조 유지) -->
|
||||
<div class="comment-edit-box" style="display:none; margin-top:5px;">
|
||||
<textarea class="comment-edit-input" rows="3"><?= htmlspecialchars($c['content'] ?? '') ?></textarea>
|
||||
<div class="comment-edit-actions" style="text-align:right; margin-top:3px;">
|
||||
<button class="btn-save-edit" data-id="<?= $c['comment_id'] ?>">저장</button>
|
||||
<button class="btn-cancel-edit">취소</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- 신규 댓글 입력 -->
|
||||
<?php if ($isLoggedIn): ?>
|
||||
<form id="commentForm" enctype="multipart/form-data">
|
||||
<div class="comment-row">
|
||||
<textarea id="newComment"
|
||||
name="comment"
|
||||
class="input-text"
|
||||
rows="3"
|
||||
placeholder="댓글을 입력하세요"></textarea>
|
||||
|
||||
<button type="submit" class="btn-save">저장</button>
|
||||
</div>
|
||||
|
||||
<!-- 업로드 영역 (구조 유지) -->
|
||||
<div class="upload-wrap">
|
||||
<label for="commentImages" class="img-upload-btn">📷 이미지 첨부</label>
|
||||
<input type="file" id="commentImages" name="images[]" accept="image/*" multiple>
|
||||
<span id="fileName" class="file-name">선택된 파일 없음</span>
|
||||
|
||||
<div id="previewArea"></div>
|
||||
</div>
|
||||
</form>
|
||||
<?php else: ?>
|
||||
<p style="color:#888;">댓글 작성은 로그인 후 이용 가능합니다.</p>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
</section>
|
||||
</div> <!-- container END -->
|
||||
|
||||
<?php include __DIR__ . "/_footer.php"; ?>
|
||||
</div> <!-- wrapper END -->
|
||||
<script>
|
||||
$(document).on('click', '#btn-delete', function (e) {
|
||||
e.preventDefault();
|
||||
|
||||
const status = $(this).data('status');
|
||||
const postId = $(this).data('id');
|
||||
|
||||
if (status === 'review' || status === 'done') {
|
||||
alert("검토중이거나 답변완료 된 상태에서는 글을 삭제할 수 없습니다.\n관리자에게 문의해 주세요");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!confirm("정말 삭제하시겠습니까?\n댓글과 첨부파일도 함께 삭제됩니다.")) {
|
||||
return;
|
||||
}
|
||||
|
||||
const form = document.createElement('form');
|
||||
form.method = 'post';
|
||||
form.action = "/kngil/bbs/qa_detail.php"; // ✅ 중요
|
||||
|
||||
const actionInput = document.createElement('input');
|
||||
actionInput.type = 'hidden';
|
||||
actionInput.name = 'action';
|
||||
actionInput.value = 'delete';
|
||||
|
||||
const idInput = document.createElement('input');
|
||||
idInput.type = 'hidden';
|
||||
idInput.name = 'post_id';
|
||||
idInput.value = postId;
|
||||
|
||||
form.appendChild(actionInput);
|
||||
form.appendChild(idInput);
|
||||
|
||||
document.body.appendChild(form);
|
||||
form.submit();
|
||||
});
|
||||
</script>
|
||||
<script src="/kngil/js/index.js"></script>
|
||||
<script src="/kngil/js/mypage.js"></script>
|
||||
<script src="/kngil/js/join.js"></script>
|
||||
<script type="module" src="/kngil/js/login.js"></script>
|
||||
<script src="/kngil/js/login_sms.js"></script>
|
||||
|
||||
<script>
|
||||
try{
|
||||
AOS.init();
|
||||
if (typeof Lenis !== 'undefined') {
|
||||
const lenis = new Lenis();
|
||||
lenis.on('scroll', ScrollTrigger.update);
|
||||
gsap.ticker.add((time)=>{ lenis.raf(time * 1000) });
|
||||
gsap.ticker.lagSmoothing(0);
|
||||
window.lenis = lenis;
|
||||
}
|
||||
} catch(e){ console.error(e); }
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
//상태 색상 변경 동적 업데이트
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
document.querySelectorAll('.status-select').forEach(sel => {
|
||||
sel.addEventListener('change', function() {
|
||||
this.className = 'status-select status-' + this.value;
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
// ✅ 댓글 저장 (이미지 포함)
|
||||
document.getElementById('commentForm')?.addEventListener('submit', async (e) => {
|
||||
e.preventDefault();
|
||||
|
||||
const text = document.getElementById('newComment').value.trim();
|
||||
const files = document.getElementById('commentImages').files;
|
||||
if (!text && files.length === 0) {
|
||||
alert('댓글 또는 이미지를 입력하세요.');
|
||||
return;
|
||||
}
|
||||
|
||||
const formData = new FormData();
|
||||
formData.append('postId', <?= json_encode($post['post_id']) ?>);
|
||||
formData.append('comment', text);
|
||||
for (let i = 0; i < files.length; i++) {
|
||||
formData.append('images[]', files[i]);
|
||||
}
|
||||
|
||||
const res = await fetch('/kngil/bbs/qa_comment.php', {
|
||||
method: 'POST',
|
||||
body: formData,
|
||||
credentials: 'include'
|
||||
});
|
||||
|
||||
const json = await res.json();
|
||||
if (json.status !== 'ok') {
|
||||
alert(json.message || '저장 실패');
|
||||
return;
|
||||
}
|
||||
|
||||
// ✅ DOM 추가 (서버에서 이미지 URL 배열 반환한다고 가정)
|
||||
const div = document.createElement('div');
|
||||
div.className = 'comment';
|
||||
div.id = "comment-" + json.comment_id;
|
||||
const safeText = (json.comment_text || '').replace(/\r?\n/g, '<br>');
|
||||
|
||||
let imageHTML = "";
|
||||
if (json.images && json.images.length > 0) {
|
||||
imageHTML = `
|
||||
<div class="comment-images"
|
||||
style="margin-top:6px; display:flex; gap:12px; flex-wrap:wrap;">
|
||||
${json.images
|
||||
.map(
|
||||
(img) => `
|
||||
<div style="text-align:center; width:140px;">
|
||||
<img
|
||||
src="${img.thumb}"
|
||||
onclick="window.open('${img.full}', '_blank')"
|
||||
style="width:140px; height:auto; border-radius:6px; cursor:pointer;"
|
||||
>
|
||||
<div style="
|
||||
font-size:12px;
|
||||
color:#555;
|
||||
margin-top:4px;
|
||||
white-space:nowrap;
|
||||
overflow:hidden;
|
||||
text-overflow:ellipsis;
|
||||
">
|
||||
${img.name}
|
||||
</div>
|
||||
</div>
|
||||
`
|
||||
)
|
||||
.join("")}
|
||||
</div>`;
|
||||
}
|
||||
|
||||
div.innerHTML = `
|
||||
<div class="comment-body">
|
||||
<div class="comment-text">${safeText}</div>
|
||||
${imageHTML}
|
||||
<div class="comment-meta">
|
||||
<span class="comment-author"><strong>${json.user_name || json.login_id}</strong></span>
|
||||
<span class="comment-date"><small>${json.created_at}</small></span>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
|
||||
document.getElementById('comments').append(div);
|
||||
document.getElementById('newComment').value = '';
|
||||
document.getElementById('commentImages').value = '';
|
||||
document.getElementById('previewArea').innerHTML = '';
|
||||
});
|
||||
|
||||
// 댓글 수정 버튼
|
||||
$(document).on('click', '.btn-edit', function() {
|
||||
const id = $(this).data('id');
|
||||
const $comment = $(this).closest('.comment');
|
||||
const $text = $comment.find('.comment-text');
|
||||
const original = $text.text().trim();
|
||||
|
||||
// input으로 교체
|
||||
$text.replaceWith(`<textarea class="edit-input" data-id="${id}" rows="3">${original}</textarea>`);
|
||||
$(this).text("저장").removeClass("btn-edit").addClass("btn-save-edit").attr("data-id", id);;
|
||||
});
|
||||
|
||||
// 댓글 수정 저장
|
||||
$(document).on('click', '.btn-save-edit', function() {
|
||||
const id = $(this).data('id');
|
||||
const $input = $('.edit-input[data-id="'+id+'"]');
|
||||
const newText = $input.val().trim();
|
||||
|
||||
if (!newText) return alert("내용을 입력하세요");
|
||||
console.log("update click", id, newText);
|
||||
$.post("/kngil/bbs/qa_comment_update.php",
|
||||
{ commentId:id, comment:newText },
|
||||
function(res) {
|
||||
if (res.status === 'ok') {
|
||||
alert(res.message || "댓글이 수정되었습니다.");
|
||||
$input.replaceWith(`<div class="comment-text">${newText}</div>`);
|
||||
$('.btn-save-edit[data-id="'+id+'"]').text("수정")
|
||||
.removeClass("btn-save-edit").addClass("btn-edit");
|
||||
} else {
|
||||
alert(res.message || "수정 실패");
|
||||
}
|
||||
}, "json");
|
||||
});
|
||||
|
||||
document.addEventListener('click', function(e) {
|
||||
// 수정 버튼 클릭 → textarea 열기
|
||||
if (e.target.classList.contains('btn-edit')) {
|
||||
const comment = e.target.closest('.comment');
|
||||
comment.querySelector('.comment-text').style.display = 'none';
|
||||
comment.querySelector('.comment-actions').style.display = 'none';
|
||||
comment.querySelector('.comment-edit-box').style.display = 'block';
|
||||
}
|
||||
|
||||
// 취소 버튼 → 원래 상태로
|
||||
if (e.target.classList.contains('btn-cancel-edit')) {
|
||||
const comment = e.target.closest('.comment');
|
||||
comment.querySelector('.comment-text').style.display = 'inline';
|
||||
comment.querySelector('.comment-actions').style.display = 'block';
|
||||
comment.querySelector('.comment-edit-box').style.display = 'none';
|
||||
}
|
||||
|
||||
// 저장 버튼 → AJAX로 수정 요청 (예시)
|
||||
if (e.target.classList.contains('btn-save-edit')) {
|
||||
const comment = e.target.closest('.comment');
|
||||
const id = e.target.dataset.id;
|
||||
const newText = comment.querySelector('.comment-edit-input').value;
|
||||
|
||||
// TODO: AJAX 호출해서 서버 업데이트
|
||||
console.log("수정 저장:", id, newText);
|
||||
|
||||
// UI 갱신
|
||||
comment.querySelector('.comment-text').textContent = newText;
|
||||
comment.querySelector('.comment-text').style.display = 'inline';
|
||||
comment.querySelector('.comment-actions').style.display = 'block';
|
||||
comment.querySelector('.comment-edit-box').style.display = 'none';
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// 댓글 삭제 버튼
|
||||
$(document).on("click", ".btn-delete", function () {
|
||||
if (!confirm("정말 삭제하시겠습니까?")) return;
|
||||
|
||||
var commentId = $(this).data("id");
|
||||
|
||||
$.ajax({
|
||||
url: "/kngil/bbs/qa_comment_delete.php",
|
||||
type: "POST",
|
||||
data: { commentId: commentId },
|
||||
dataType: "json",
|
||||
success: function (res) {
|
||||
if (res.status === "ok") {
|
||||
// DOM에서도 삭제
|
||||
$("#comment-" + commentId).fadeOut(300, function () {
|
||||
$(this).remove();
|
||||
});
|
||||
// ✅ 댓글 수 감소
|
||||
var countEl = $("#comment-count");
|
||||
var current = parseInt(countEl.text(), 10);
|
||||
if (current > 0) {
|
||||
countEl.text(current - 1);
|
||||
}
|
||||
alert("댓글이 삭제되었습니다.");
|
||||
} else {
|
||||
alert(res.message || "삭제 실패");
|
||||
}
|
||||
},
|
||||
error: function (xhr) {
|
||||
alert("삭제 요청 에러: " + xhr.responseText);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
<script>
|
||||
// ✅ 댓글 이미지 미리보기
|
||||
document.addEventListener("change", function (e) {
|
||||
if (e.target.id === "commentImages") {
|
||||
const preview = document.getElementById("previewArea");
|
||||
preview.innerHTML = ""; // 초기화
|
||||
|
||||
[...e.target.files].forEach((file) => {
|
||||
// ▶ 개별 박스 생성
|
||||
const box = document.createElement("div");
|
||||
box.style.width = "80px";
|
||||
box.style.marginRight = "10px";
|
||||
box.style.textAlign = "center";
|
||||
box.style.display = "inline-block";
|
||||
|
||||
// ▶ 썸네일 이미지
|
||||
const img = document.createElement("img");
|
||||
img.src = URL.createObjectURL(file);
|
||||
img.style.width = "80px";
|
||||
img.style.height = "80px";
|
||||
img.style.objectFit = "cover";
|
||||
img.style.borderRadius = "6px";
|
||||
|
||||
// ▶ 파일명 (길면 ... 처리)
|
||||
const name = document.createElement("div");
|
||||
name.textContent = file.name;
|
||||
name.style.marginTop = "4px";
|
||||
name.style.whiteSpace = "nowrap";
|
||||
name.style.overflow = "hidden";
|
||||
name.style.textOverflow = "ellipsis";
|
||||
name.style.width = "80px";
|
||||
|
||||
// ▶ 박스에 넣기
|
||||
box.appendChild(img);
|
||||
box.appendChild(name);
|
||||
|
||||
// ▶ preview 영역에 넣기
|
||||
preview.appendChild(box);
|
||||
});
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
339
kngil/skin/qa_list.skin.php
Normal file
339
kngil/skin/qa_list.skin.php
Normal file
@@ -0,0 +1,339 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<?php include __DIR__ . "/_head.php"; ?>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Q&A 게시판 리스트</title>
|
||||
|
||||
<link rel="stylesheet" href="/kngil/css/qa/font-awesome.min.css?ver=2303229">
|
||||
|
||||
<!-- 디자인팀 작성 -->
|
||||
<script src="/kngil/js/lib/jquery-3.6.1.min.js" type="text/javascript"></script>
|
||||
<script src="/kngil/js/qa/jquery.mousewheel.min.js" type="text/javascript"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/gsap.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollTrigger.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollToPlugin.min.js"></script>
|
||||
<link rel="stylesheet" href="https://unpkg.com/aos@2.3.1/dist/aos.css" type="text/css"/>
|
||||
<link rel="stylesheet" href="https://unpkg.com/lenis@1.1.9/dist/lenis.css">
|
||||
<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
|
||||
<script src="https://unpkg.com/lenis@1.1.9/dist/lenis.min.js"></script>
|
||||
<!-- <script src="/kngil/js/qa/qa_popup.js" type="text/javascript"></script>
|
||||
<script src="/kngil/js/qa/qa_common.js" type="text/javascript"></script>
|
||||
<script src="/kngil/js/qa/qa_index.js" type="text/javascript"></script> -->
|
||||
|
||||
|
||||
<!-- <link rel="stylesheet" href="/kngil/css/style.css"/> -->
|
||||
<!-- //디자인팀 작성 -->
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="wrap">
|
||||
<!-- HEADER -->
|
||||
<?php include __DIR__ . "/_header.php"; ?>
|
||||
<!-- //HEADER -->
|
||||
<?php
|
||||
include __DIR__ . "/pop_login.php";
|
||||
include __DIR__ . "/pop_join.php";
|
||||
include __DIR__ . "/pop_agreement.php";
|
||||
include __DIR__ . "/pop_mypage01.php";
|
||||
include __DIR__ . "/pop_mypage02.php";
|
||||
include __DIR__ . "/pop_mypage03.php";
|
||||
include __DIR__ . "/pop_password.php";
|
||||
include __DIR__ . "/pop_privacy.php";
|
||||
include __DIR__ . "/pop_search.php";
|
||||
// include __DIR__ . "/_nav.php";
|
||||
?>
|
||||
<?php
|
||||
$search = $search ?? '';
|
||||
$cats = $cats ?? [];
|
||||
$writer = $writer ?? '';
|
||||
$status = $status ?? 'all';
|
||||
?>
|
||||
<div class="container faq">
|
||||
<section class="sub-header">
|
||||
<div class="page-title">
|
||||
<h2 data-aos="fade-down" data-aos-duration="1000">Q&A</h2>
|
||||
<p class="sub-txt">KNGIL 관련 문의하기</p>
|
||||
</div>
|
||||
<ul class="sub-tab">
|
||||
<li><a href="/kngil/skin/faq_list.skin.php">자주하는 질문(FAQ)</a></li>
|
||||
<li class="on"><a href="/kngil/bbs/qa_list.php">문의하기(Q&A)</a></li>
|
||||
<li><a href="https://939.co.kr/saman/" target="_blank">원격지원</a></li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="sub-content">
|
||||
<h3 class="sub-tit">1:1 문의하기</h3>
|
||||
<form class="qa-controls" method="get" action="">
|
||||
<div class="search-wrap">
|
||||
<div class="filters">
|
||||
<div class="check-group">
|
||||
<!-- <strong>구분</strong> -->
|
||||
<?php
|
||||
// 선택 여부 유틸
|
||||
$isChecked = function($v) use ($cats) {
|
||||
return in_array($v, $cats ?? [], true) ? 'checked' : '';
|
||||
};
|
||||
// 아무 것도 선택 안되어 있으면 전체 on
|
||||
$allOn = empty($cats);
|
||||
?>
|
||||
<label><input type="checkbox" name="cat[]" value="전체"> 전체</label>
|
||||
<label><input type="checkbox" name="cat[]" value="일반문의"> 일반</label>
|
||||
<label><input type="checkbox" name="cat[]" value="개선문의"> 개선</label>
|
||||
<label><input type="checkbox" name="cat[]" value="오류문의"> 오류</label>
|
||||
<?php if (!empty($_SESSION['login'])): ?>
|
||||
<label><input type="checkbox" name="cat[]" value="관리글"> 관리</label>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<fieldset class="check-box">
|
||||
<legend>작성자</legend>
|
||||
<label><input type="checkbox" name="writer" value="me" <?= $writer==='me' ?'checked':'' ?>> 내가 작성한 글</label>
|
||||
</fieldset>
|
||||
<?php if (!empty($_SESSION['login'])): ?>
|
||||
<?php $status = $_GET['status'] ?? 'all'; ?>
|
||||
<fieldset class="check-box1" style="margin-left:20px;">
|
||||
<legend>상태</legend>
|
||||
<select name="status" class="status-select">
|
||||
<option value="all" <?= $status==='all'?'selected':'' ?>>전체</option>
|
||||
<option value="wait" <?= $status==='wait'?'selected':'' ?>>문의접수</option>
|
||||
<option value="review"<?= $status==='review'?'selected':'' ?>>문의검토</option>
|
||||
<option value="deep" <?= $status==='deep'?'selected':'' ?>>정밀검토</option>
|
||||
<option value="patch" <?= $status==='patch'?'selected':'' ?>>패치예정</option>
|
||||
<option value="done" <?= $status==='done'?'selected':'' ?>>답변완료</option>
|
||||
</select>
|
||||
</fieldset>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
<div class="qa-search search-box">
|
||||
<?php if (!empty($_SESSION['login'])): ?>
|
||||
<input type="number" class="qna-id-input" placeholder="Q&A ID">
|
||||
<button type="button" class="btn-move">이동</button>
|
||||
<?php endif; ?>
|
||||
|
||||
<input type="text" name="q" value="<?= htmlspecialchars($search) ?>" placeholder="제목+내용 검색어를 입력하세요">
|
||||
<button type="submit" class="btn-submit" >
|
||||
<i class="fa fa-search"></i> 검색
|
||||
</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="board-list">
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style="width:5%"><col style="width:7%"><col style="width:12%"><col style="width:12%">
|
||||
<col style="width:7%"><col style="width:auto"><col style="width:9%"><col style="width:9%">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>번호</th><th>구분</th><th>회사</th><th>부서</th>
|
||||
<th>작성자</th><th>제목</th><th>등록일</th><th>상태</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php
|
||||
$totalIndex = $totalCount - ($page - 1) * $pageSize;
|
||||
$idx = 0;
|
||||
?>
|
||||
<?php foreach($posts as $row): ?>
|
||||
<?php
|
||||
$isNotice = ($row['category'] === 'notice');
|
||||
$rowNumber = $totalIndex - $idx; // 연속 번호 재계산
|
||||
?>
|
||||
<?php $isNotice = ($row['category'] === 'notice'); ?>
|
||||
<tr class="<?= $isNotice ? 'row-notice' : '' ?>" onclick="location.href='/kngil/bbs/qa_detail.php?id=<?= urlencode($row['post_id']) ?>'" style="cursor:pointer;">
|
||||
<!-- 번호: 공지 or 연속번호 -->
|
||||
<td><?= $isNotice ? '공지' : $rowNumber ?></td>
|
||||
<!-- 구분 -->
|
||||
<td><?= htmlspecialchars($row['category']) ?></td>
|
||||
<!-- 회사 -->
|
||||
<td><?= htmlspecialchars($row['display_company']) ?></td>
|
||||
<!-- 부서 -->
|
||||
<td><?= htmlspecialchars($row['dept_nm'] ?? '') ?></td>
|
||||
<!-- 작성자 -->
|
||||
<td><?= htmlspecialchars($row['display_name']) ?></td>
|
||||
<!-- 제목 -->
|
||||
<td class="left">
|
||||
<?php if (!empty($row['is_secret'])): ?>
|
||||
<small style="color:#999">[비밀글]</small>
|
||||
<?php endif; ?>
|
||||
|
||||
<span class="title-text">
|
||||
<?= htmlspecialchars($row['title']) ?>
|
||||
</span>
|
||||
|
||||
<!-- 댓글 개수 -->
|
||||
<?php if (!empty($row['comment_count'])): ?>
|
||||
<span class="badge badge-comment" style="color:#007bff; margin-left:5px;">
|
||||
<i class="fa fa-commenting-o"></i> <?= $row['comment_count'] ?>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- 첨부파일 개수 -->
|
||||
<?php if (!empty($row['file_count'])): ?>
|
||||
<span class="badge badge-file" style="color:#28a745; margin-left:5px;">
|
||||
<i class="fa fa-paperclip"></i> <?= $row['file_count'] ?>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
|
||||
<!-- 등록일 -->
|
||||
<td><?= htmlspecialchars(substr($row['created_at'],0,10)) ?></td>
|
||||
<!-- 상태 -->
|
||||
<td>
|
||||
<?php if ($row['category'] === 'notice'): ?>
|
||||
<!-- 공지사항이면 상태값 안 보여줌 -->
|
||||
<span></span>
|
||||
<?php else: ?>
|
||||
<span class="status-<?= htmlspecialchars($row['status']) ?>">
|
||||
<?= $row['status']==='wait' ? '문의접수'
|
||||
: ($row['status']==='review' ? '문의검토'
|
||||
: ($row['status']==='deep' ? '정밀검토'
|
||||
: ($row['status']==='patch' ? '패치예정'
|
||||
: ($row['status']==='done' ? '답변완료'
|
||||
: '')))) ?>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php $idx++; ?>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php if ($totalPages > 1): ?>
|
||||
<div class="pagination">
|
||||
<?php if ($page > 1): ?>
|
||||
<a href="?<?= http_build_query(array_merge($_GET, ['page'=>$page-1])) ?>" class="prev">이전</a>
|
||||
<?php else: ?><span class="prev">이전</span><?php endif ?>
|
||||
|
||||
<?php
|
||||
$blockSize = 10;
|
||||
$currentBlock= ceil($page / $blockSize);
|
||||
$start = ($currentBlock - 1) * $blockSize + 1;
|
||||
$end = min($totalPages, $currentBlock * $blockSize);
|
||||
|
||||
for ($i = $start; $i <= $end; $i++):
|
||||
?>
|
||||
<?php if ($i == $page): ?>
|
||||
<!-- ✅ 여기! 현재 페이지는 span.current -->
|
||||
<span class="current"><?= $i ?></span>
|
||||
<?php else: ?>
|
||||
<a href="?<?= http_build_query(array_merge($_GET, ['page'=>$i])) ?>"><?= $i ?></a>
|
||||
<?php endif ?>
|
||||
<?php endfor ?>
|
||||
|
||||
<?php if ($page < $totalPages): ?>
|
||||
<a href="?<?= http_build_query(array_merge($_GET, ['page'=>$page+1])) ?>" class="next">다음</a>
|
||||
<?php else: ?><span class="next">다음</span><?php endif ?>
|
||||
</div>
|
||||
<?php endif ?>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="btn-wrap right">
|
||||
<button type="button" class="btn-primary" onclick="location.href='/kngil/skin/qa_write.skin.php'">
|
||||
<i class="fa fa-pencil" aria-hidden="true"></i> 문의등록
|
||||
</button>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
<div class="contents">
|
||||
|
||||
|
||||
|
||||
|
||||
</div><!-- contents END /egbim1/skin/qa/basic/descope_qa_write.skin.php-->
|
||||
</div><!-- container END -->
|
||||
|
||||
<button class="btn_top js__top topbtn_on" onclick="window.scrollTo(0,0);" style="bottom:60px;"><div class="arrow"></div></button>
|
||||
|
||||
<!-- FOOTER -->
|
||||
<?php include __DIR__ . "/_footer.php"; ?>
|
||||
<!-- //FOOTER -->
|
||||
</div><!-- wrapper END -->
|
||||
|
||||
|
||||
<script src="/kngil/js/index.js"></script>
|
||||
<script src="/kngil/js/mypage.js"></script>
|
||||
<script src="/kngil/js/join.js"></script>
|
||||
<script type="module" src="/kngil/js/login.js"></script>
|
||||
<script src="/kngil/js/login_sms.js"></script>
|
||||
|
||||
<script>
|
||||
// AOS / Lenis 초기화 (안전 가드)
|
||||
try {
|
||||
AOS.init();
|
||||
if (typeof Lenis !== 'undefined') {
|
||||
const lenis = new Lenis();
|
||||
lenis.on('scroll', ScrollTrigger.update);
|
||||
gsap.ticker.add((time)=>{ lenis.raf(time * 1000) });
|
||||
gsap.ticker.lagSmoothing(0);
|
||||
window.lenis = lenis; // 다른 코드에서 접근할 수 있게
|
||||
}
|
||||
} catch(e) { console.error(e); }
|
||||
</script>
|
||||
|
||||
<script>
|
||||
// ===== 공용 유틸 =====
|
||||
function getQueryString(name){
|
||||
// 페이지 구성 요소가 없을 수 있으므로 가드
|
||||
const intro = document.querySelector('.intro_wrap');
|
||||
if (intro) intro.style.display = "none";
|
||||
const mainMask = document.querySelector('.main_mask');
|
||||
if (mainMask) mainMask.classList.add('skip');
|
||||
return new URLSearchParams(window.location.search).get(name);
|
||||
}
|
||||
|
||||
// 필터 변경 시 자동 제출
|
||||
(function(){
|
||||
const form = document.querySelector('.qa-controls');
|
||||
const boxes = Array.from(document.querySelectorAll('.qa-controls input[name="cat[]"]'));
|
||||
const writer = document.querySelector('.qa-controls input[name="writer"]');
|
||||
|
||||
function submitForm(){ form && form.submit(); }
|
||||
|
||||
function syncAllToggle(changed){
|
||||
const allBox = boxes.find(b => b.value === 'all');
|
||||
const itemBoxes = boxes.filter(b => b.value !== 'all');
|
||||
|
||||
if (!allBox) return;
|
||||
|
||||
if (changed && changed.value === 'all') {
|
||||
// 전체 체크 시 개별은 해제
|
||||
if (allBox.checked) itemBoxes.forEach(b => b.checked = false);
|
||||
} else {
|
||||
// 개별 체크 시 전체 해제
|
||||
if (itemBoxes.some(b => b.checked)) allBox.checked = false;
|
||||
// 개별이 전부 해제되면 전체 자동 체크
|
||||
if (!itemBoxes.some(b => b.checked)) allBox.checked = true;
|
||||
}
|
||||
}
|
||||
|
||||
boxes.forEach(b => {
|
||||
b.addEventListener('change', function(){ syncAllToggle(this); submitForm(); });
|
||||
});
|
||||
if (writer) writer.addEventListener('change', submitForm);
|
||||
})();
|
||||
|
||||
|
||||
|
||||
// Q&A ID 검색
|
||||
$(document).on("click", ".btn-move", function() {
|
||||
const qnaId = $(".qna-id-input").val().trim();
|
||||
if (!qnaId) {
|
||||
alert("Q&A ID를 입력하세요.");
|
||||
return;
|
||||
}
|
||||
location.href = "/kngil/bbs/qa_detail.php?id=" + qnaId;
|
||||
});
|
||||
|
||||
$("#qna-id-search").on("keypress", function(e){
|
||||
if(e.key === "Enter"){
|
||||
$("#qna-id-btn").click();
|
||||
}
|
||||
});
|
||||
|
||||
</script>
|
||||
334
kngil/skin/qa_list.skin_.php
Normal file
334
kngil/skin/qa_list.skin_.php
Normal file
@@ -0,0 +1,334 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<?php include __DIR__ . "/_head.php"; ?>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Q&A 게시판 리스트</title>
|
||||
|
||||
<link rel="stylesheet" href="/kngil/css/qa/font-awesome.min.css?ver=2303229">
|
||||
|
||||
<!-- 디자인팀 작성 -->
|
||||
<script src="/kngil/js/lib/jquery-3.6.1.min.js" type="text/javascript"></script>
|
||||
<script src="/kngil/js/qa/jquery.mousewheel.min.js" type="text/javascript"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/gsap.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollTrigger.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollToPlugin.min.js"></script>
|
||||
<link rel="stylesheet" href="https://unpkg.com/aos@2.3.1/dist/aos.css" type="text/css"/>
|
||||
<link rel="stylesheet" href="https://unpkg.com/lenis@1.1.9/dist/lenis.css">
|
||||
<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
|
||||
<script src="https://unpkg.com/lenis@1.1.9/dist/lenis.min.js"></script>
|
||||
<!-- <script src="/kngil/js/qa/qa_popup.js" type="text/javascript"></script>
|
||||
<script src="/kngil/js/qa/qa_common.js" type="text/javascript"></script>
|
||||
<script src="/kngil/js/qa/qa_index.js" type="text/javascript"></script> -->
|
||||
|
||||
<link rel="stylesheet" href="/kngil/css/qa/qa_reset.css"/>
|
||||
<link rel="stylesheet" href="/kngil/css/qa/qa_font.css"/>
|
||||
<link rel="stylesheet" href="/kngil/css/qa/qa_style.css"/>
|
||||
<!-- <link rel="stylesheet" href="/kngil/css/style.css"/> -->
|
||||
<!-- //디자인팀 작성 -->
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="wrapper">
|
||||
<!-- HEADER -->
|
||||
<?php include __DIR__ . "/_header.php"; ?>
|
||||
<!-- //HEADER -->
|
||||
<?php
|
||||
include __DIR__ . "/pop_login.php";
|
||||
include __DIR__ . "/pop_join.php";
|
||||
include __DIR__ . "/pop_agreement.php";
|
||||
include __DIR__ . "/pop_mypage01.php";
|
||||
include __DIR__ . "/pop_mypage02.php";
|
||||
include __DIR__ . "/pop_mypage03.php";
|
||||
include __DIR__ . "/pop_password.php";
|
||||
include __DIR__ . "/pop_privacy.php";
|
||||
include __DIR__ . "/pop_search.php";
|
||||
// include __DIR__ . "/_nav.php";
|
||||
?>
|
||||
<?php
|
||||
$search = $search ?? '';
|
||||
$cats = $cats ?? [];
|
||||
$writer = $writer ?? '';
|
||||
$status = $status ?? 'all';
|
||||
?>
|
||||
<div class="qa-container container faq">
|
||||
<section class="intro">
|
||||
<div class="top js__dark">
|
||||
<h2 data-aos="fade-down" data-aos-duration="1000">Q&A</h2>
|
||||
<span>EG-BIM 관련 문의하기</span>
|
||||
</div>
|
||||
<ul class="sub_tab">
|
||||
<li><a href="/kngil/skin/faq_list.skin.php">자주하는 질문(FAQ)</a></li>
|
||||
<li class="on"><a href="/kngil/bbs/qa_list.php">문의하기(Q&A)</a></li>
|
||||
<li><a href="https://939.co.kr/saman/" target="_blank">원격지원</a></li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<span class="sub_tit">문의하기(Q&A)</span>
|
||||
|
||||
<div class="contents">
|
||||
<form class="qa-controls" method="get" action="">
|
||||
<div class="search-wrap">
|
||||
<div class="qa-filters">
|
||||
<div class="check-group">
|
||||
<!-- <strong>구분</strong> -->
|
||||
<?php
|
||||
// 선택 여부 유틸
|
||||
$isChecked = function($v) use ($cats) {
|
||||
return in_array($v, $cats ?? [], true) ? 'checked' : '';
|
||||
};
|
||||
// 아무 것도 선택 안되어 있으면 전체 on
|
||||
$allOn = empty($cats);
|
||||
?>
|
||||
<label><input type="checkbox" name="cat[]" value="전체"> 전체</label>
|
||||
<label><input type="checkbox" name="cat[]" value="일반문의"> 일반</label>
|
||||
<label><input type="checkbox" name="cat[]" value="개선문의"> 개선</label>
|
||||
<label><input type="checkbox" name="cat[]" value="오류문의"> 오류</label>
|
||||
<?php if (!empty($_SESSION['login'])): ?>
|
||||
<label><input type="checkbox" name="cat[]" value="관리글"> 관리</label>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<div class="check-box">
|
||||
<strong>작성자</strong>
|
||||
<label><input type="checkbox" name="writer" value="me" <?= $writer==='me' ?'checked':'' ?>> 내가 작성한 글</label>
|
||||
</div>
|
||||
<?php if (!empty($_SESSION['login'])): ?>
|
||||
<?php $status = $_GET['status'] ?? 'all'; ?>
|
||||
<div class="check-box1" style="margin-left:20px;">
|
||||
<strong>상태</strong>
|
||||
<select name="status" class="status-select">
|
||||
<option value="all" <?= $status==='all'?'selected':'' ?>>전체</option>
|
||||
<option value="wait" <?= $status==='wait'?'selected':'' ?>>문의접수</option>
|
||||
<option value="review"<?= $status==='review'?'selected':'' ?>>문의검토</option>
|
||||
<option value="deep" <?= $status==='deep'?'selected':'' ?>>정밀검토</option>
|
||||
<option value="patch" <?= $status==='patch'?'selected':'' ?>>패치예정</option>
|
||||
<option value="done" <?= $status==='done'?'selected':'' ?>>답변완료</option>
|
||||
</select>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
<div class="qa-search search-box">
|
||||
<?php if (!empty($_SESSION['login'])): ?>
|
||||
<input type="number" class="qna-id-input" placeholder="Q&A ID">
|
||||
<button type="button" class="btn-move">이동</button>
|
||||
<?php endif; ?>
|
||||
|
||||
<input type="text" name="q" value="<?= htmlspecialchars($search) ?>" placeholder="제목+내용 검색어를 입력하세요">
|
||||
<button type="submit" class="btn-search">
|
||||
<i class="fa fa-search"></i> 검색
|
||||
</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</form>
|
||||
<div class="tbl-wrap">
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style="width:5%"><col style="width:7%"><col style="width:12%"><col style="width:12%">
|
||||
<col style="width:7%"><col style="width:auto"><col style="width:9%"><col style="width:9%">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>번호</th><th>구분</th><th>회사</th><th>부서</th>
|
||||
<th>작성자</th><th>제목</th><th>등록일</th><th>상태</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php
|
||||
$totalIndex = $totalCount - ($page - 1) * $pageSize;
|
||||
$idx = 0;
|
||||
?>
|
||||
<?php foreach($posts as $row): ?>
|
||||
<?php
|
||||
$isNotice = ($row['category'] === 'notice');
|
||||
$rowNumber = $totalIndex - $idx; // 연속 번호 재계산
|
||||
?>
|
||||
<?php $isNotice = ($row['category'] === 'notice'); ?>
|
||||
<tr class="<?= $isNotice ? 'row-notice' : '' ?>" onclick="location.href='/kngil/bbs/qa_detail.php?id=<?= urlencode($row['post_id']) ?>'" style="cursor:pointer;">
|
||||
<!-- 번호: 공지 or 연속번호 -->
|
||||
<td><?= $isNotice ? '공지' : $rowNumber ?></td>
|
||||
<!-- 구분 -->
|
||||
<td><?= htmlspecialchars($row['category']) ?></td>
|
||||
<!-- 회사 -->
|
||||
<td><?= htmlspecialchars($row['display_company']) ?></td>
|
||||
<!-- 부서 -->
|
||||
<td><?= htmlspecialchars($row['dept_nm'] ?? '') ?></td>
|
||||
<!-- 작성자 -->
|
||||
<td><?= htmlspecialchars($row['display_name']) ?></td>
|
||||
<!-- 제목 -->
|
||||
<td class="left">
|
||||
<?php if (!empty($row['is_secret'])): ?>
|
||||
<span style="color:#999">[비밀글]</span>
|
||||
<?php endif; ?>
|
||||
|
||||
<span class="title-text">
|
||||
<?= htmlspecialchars($row['title']) ?>
|
||||
</span>
|
||||
|
||||
<!-- 댓글 개수 -->
|
||||
<?php if (!empty($row['comment_count'])): ?>
|
||||
<span class="badge badge-comment" style="color:#007bff; margin-left:5px;">
|
||||
<i class="fa fa-commenting-o"></i> <?= $row['comment_count'] ?>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- 첨부파일 개수 -->
|
||||
<?php if (!empty($row['file_count'])): ?>
|
||||
<span class="badge badge-file" style="color:#28a745; margin-left:5px;">
|
||||
<i class="fa fa-paperclip"></i> <?= $row['file_count'] ?>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
|
||||
<!-- 등록일 -->
|
||||
<td><?= htmlspecialchars(substr($row['created_at'],0,10)) ?></td>
|
||||
<!-- 상태 -->
|
||||
<td>
|
||||
<?php if ($row['category'] === 'notice'): ?>
|
||||
<!-- 공지사항이면 상태값 안 보여줌 -->
|
||||
<span></span>
|
||||
<?php else: ?>
|
||||
<span class="status-<?= htmlspecialchars($row['status']) ?>">
|
||||
<?= $row['status']==='wait' ? '문의접수'
|
||||
: ($row['status']==='review' ? '문의검토'
|
||||
: ($row['status']==='deep' ? '정밀검토'
|
||||
: ($row['status']==='patch' ? '패치예정'
|
||||
: ($row['status']==='done' ? '답변완료'
|
||||
: '')))) ?>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php $idx++; ?>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<?php if ($totalPages > 1): ?>
|
||||
<div class="pagination">
|
||||
<?php if ($page > 1): ?>
|
||||
<a href="?<?= http_build_query(array_merge($_GET, ['page'=>$page-1])) ?>" class="prev">이전</a>
|
||||
<?php else: ?><span class="prev">이전</span><?php endif ?>
|
||||
|
||||
<?php
|
||||
$blockSize = 10;
|
||||
$currentBlock= ceil($page / $blockSize);
|
||||
$start = ($currentBlock - 1) * $blockSize + 1;
|
||||
$end = min($totalPages, $currentBlock * $blockSize);
|
||||
|
||||
for ($i = $start; $i <= $end; $i++):
|
||||
?>
|
||||
<?php if ($i == $page): ?>
|
||||
<!-- ✅ 여기! 현재 페이지는 span.current -->
|
||||
<span class="current"><?= $i ?></span>
|
||||
<?php else: ?>
|
||||
<a href="?<?= http_build_query(array_merge($_GET, ['page'=>$i])) ?>"><?= $i ?></a>
|
||||
<?php endif ?>
|
||||
<?php endfor ?>
|
||||
|
||||
<?php if ($page < $totalPages): ?>
|
||||
<a href="?<?= http_build_query(array_merge($_GET, ['page'=>$page+1])) ?>" class="next">다음</a>
|
||||
<?php else: ?><span class="next">다음</span><?php endif ?>
|
||||
</div>
|
||||
<?php endif ?>
|
||||
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn btn-write" onclick="location.href='/kngil/skin/qa_write.skin.php'">
|
||||
<i class="fa fa-pencil" aria-hidden="true"></i> 문의등록
|
||||
</button>
|
||||
</div>
|
||||
</div><!-- contents END /egbim1/skin/qa/basic/descope_qa_write.skin.php-->
|
||||
</div><!-- container END -->
|
||||
|
||||
<button class="btn_top js__top topbtn_on" onclick="window.scrollTo(0,0);" style="bottom:60px;"><div class="arrow"></div></button>
|
||||
|
||||
<!-- FOOTER -->
|
||||
<?php include __DIR__ . "/_footer.php"; ?>
|
||||
<!-- //FOOTER -->
|
||||
</div><!-- wrapper END -->
|
||||
|
||||
|
||||
<script src="/kngil/js/index.js"></script>
|
||||
<script src="/kngil/js/mypage.js"></script>
|
||||
<script src="/kngil/js/join.js"></script>
|
||||
<script type="module" src="/kngil/js/login.js"></script>
|
||||
<script src="/kngil/js/login_sms.js"></script>
|
||||
|
||||
<script>
|
||||
// AOS / Lenis 초기화 (안전 가드)
|
||||
try {
|
||||
AOS.init();
|
||||
if (typeof Lenis !== 'undefined') {
|
||||
const lenis = new Lenis();
|
||||
lenis.on('scroll', ScrollTrigger.update);
|
||||
gsap.ticker.add((time)=>{ lenis.raf(time * 1000) });
|
||||
gsap.ticker.lagSmoothing(0);
|
||||
window.lenis = lenis; // 다른 코드에서 접근할 수 있게
|
||||
}
|
||||
} catch(e) { console.error(e); }
|
||||
</script>
|
||||
|
||||
<script>
|
||||
// ===== 공용 유틸 =====
|
||||
function getQueryString(name){
|
||||
// 페이지 구성 요소가 없을 수 있으므로 가드
|
||||
const intro = document.querySelector('.intro_wrap');
|
||||
if (intro) intro.style.display = "none";
|
||||
const mainMask = document.querySelector('.main_mask');
|
||||
if (mainMask) mainMask.classList.add('skip');
|
||||
return new URLSearchParams(window.location.search).get(name);
|
||||
}
|
||||
|
||||
// 필터 변경 시 자동 제출
|
||||
(function(){
|
||||
const form = document.querySelector('.qa-controls');
|
||||
const boxes = Array.from(document.querySelectorAll('.qa-controls input[name="cat[]"]'));
|
||||
const writer = document.querySelector('.qa-controls input[name="writer"]');
|
||||
|
||||
function submitForm(){ form && form.submit(); }
|
||||
|
||||
function syncAllToggle(changed){
|
||||
const allBox = boxes.find(b => b.value === 'all');
|
||||
const itemBoxes = boxes.filter(b => b.value !== 'all');
|
||||
|
||||
if (!allBox) return;
|
||||
|
||||
if (changed && changed.value === 'all') {
|
||||
// 전체 체크 시 개별은 해제
|
||||
if (allBox.checked) itemBoxes.forEach(b => b.checked = false);
|
||||
} else {
|
||||
// 개별 체크 시 전체 해제
|
||||
if (itemBoxes.some(b => b.checked)) allBox.checked = false;
|
||||
// 개별이 전부 해제되면 전체 자동 체크
|
||||
if (!itemBoxes.some(b => b.checked)) allBox.checked = true;
|
||||
}
|
||||
}
|
||||
|
||||
boxes.forEach(b => {
|
||||
b.addEventListener('change', function(){ syncAllToggle(this); submitForm(); });
|
||||
});
|
||||
if (writer) writer.addEventListener('change', submitForm);
|
||||
})();
|
||||
|
||||
|
||||
|
||||
// Q&A ID 검색
|
||||
$(document).on("click", ".btn-move", function() {
|
||||
const qnaId = $(".qna-id-input").val().trim();
|
||||
if (!qnaId) {
|
||||
alert("Q&A ID를 입력하세요.");
|
||||
return;
|
||||
}
|
||||
location.href = "/kngil/bbs/qa_detail.php?id=" + qnaId;
|
||||
});
|
||||
|
||||
$("#qna-id-search").on("keypress", function(e){
|
||||
if(e.key === "Enter"){
|
||||
$("#qna-id-btn").click();
|
||||
}
|
||||
});
|
||||
|
||||
</script>
|
||||
217
kngil/skin/qa_write.skin.php
Normal file
217
kngil/skin/qa_write.skin.php
Normal file
@@ -0,0 +1,217 @@
|
||||
|
||||
|
||||
<!-- <?php if (!empty($errors)): ?>
|
||||
<div style="margin:20px; padding:15px; border:1px solid #e00; color:#e00;">
|
||||
<strong>오류 발생</strong>
|
||||
<ul>
|
||||
<?php foreach ($errors as $err): ?>
|
||||
<li><?= htmlspecialchars($err) ?></li>
|
||||
<?php endforeach ?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php endif; ?> -->
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<?php include __DIR__ . "/_head.php"; ?>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Q&A 게시판 리스트</title>
|
||||
|
||||
<link rel="stylesheet" href="/kngil/css/qa/font-awesome.min.css?ver=2303229">
|
||||
|
||||
<!-- 디자인팀 작성 -->
|
||||
<script src="/kngil/js/lib/jquery-3.6.1.min.js" type="text/javascript"></script>
|
||||
<script src="/kngil/js/qa/jquery.mousewheel.min.js" type="text/javascript"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/gsap.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollTrigger.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollToPlugin.min.js"></script>
|
||||
<link rel="stylesheet" href="https://unpkg.com/aos@2.3.1/dist/aos.css" type="text/css"/>
|
||||
<link rel="stylesheet" href="https://unpkg.com/lenis@1.1.9/dist/lenis.css">
|
||||
<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
|
||||
<script src="https://unpkg.com/lenis@1.1.9/dist/lenis.min.js"></script>
|
||||
|
||||
|
||||
<!-- CKEditor 5 -->
|
||||
<script src="https://cdn.ckeditor.com/ckeditor5/41.0.0/classic/ckeditor.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="wrap">
|
||||
|
||||
<?php
|
||||
include __DIR__ . "/_header.php";
|
||||
|
||||
if (!$isLogin) {
|
||||
echo "<script>
|
||||
alert('로그인 후 문의 등록이 가능합니다.');
|
||||
location.href = '/kngil/skin/qa_list.skin.php';
|
||||
</script>";
|
||||
exit;
|
||||
}
|
||||
?>
|
||||
|
||||
<?php
|
||||
include __DIR__ . "/pop_login.php";
|
||||
include __DIR__ . "/pop_join.php";
|
||||
include __DIR__ . "/pop_agreement.php";
|
||||
include __DIR__ . "/pop_mypage01.php";
|
||||
include __DIR__ . "/pop_mypage02.php";
|
||||
include __DIR__ . "/pop_mypage03.php";
|
||||
include __DIR__ . "/pop_password.php";
|
||||
include __DIR__ . "/pop_privacy.php";
|
||||
include __DIR__ . "/pop_search.php";
|
||||
?>
|
||||
|
||||
<div class="container faq">
|
||||
<section class="sub-header">
|
||||
<div class="page-title">
|
||||
<h2>Q&A</h2>
|
||||
<p class="sub-txt">KNGIL 관련 문의하기</p>
|
||||
</div>
|
||||
<ul class="sub-tab">
|
||||
<li><a href="/kngil/skin/faq_list.skin.php">자주하는 질문(FAQ)</a></li>
|
||||
<li class="on"><a href="/kngil/bbs/qa_list.php">문의하기(Q&A)</a></li>
|
||||
<li><a href="https://939.co.kr/saman/" target="_blank">원격지원</a></li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="sub-content">
|
||||
<h3 class="sub-tit">문의하기(Q&A)</h3>
|
||||
<form id="qaForm"
|
||||
action="/kngil/bbs/qa_write.php<?= $isEdit ? '?id=' . $post['post_id'] : '' ?>"
|
||||
method="POST"
|
||||
enctype="multipart/form-data">
|
||||
<div class="form-area">
|
||||
|
||||
<div class="form-group">
|
||||
<fieldset class="form-item">
|
||||
<label class="form-tit" for="category">구분</label>
|
||||
<select class="select-sm" name="category" id="category" required>
|
||||
<option value="">-- 선택 --</option>
|
||||
<option value="오류문의" <?= ($post['category'] ?? '')=='오류문의' ? 'selected':'' ?>>오류문의</option>
|
||||
<option value="개선문의" <?= ($post['category'] ?? '')=='개선문의' ? 'selected':'' ?>>개선문의</option>
|
||||
<option value="일반문의" <?= ($post['category'] ?? '')=='일반문의' ? 'selected':'' ?>>일반문의</option>
|
||||
<?php if ($isSuperAdmin): ?>
|
||||
<option value="공지사항" <?= ($post['category'] ?? '')=='공지사항' ? 'selected':'' ?>>공지사항</option>
|
||||
<option value="관리글" <?= ($post['category'] ?? '')=='관리글' ? 'selected':'' ?>>관리글</option>
|
||||
<?php endif; ?>
|
||||
</select>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<div class="form-item">
|
||||
<strong class="form-tit">제목<span class="require">*</span></strong>
|
||||
<input type="text" name="title" style="width:100%;" placeholder="제목을 입력하세요" class="input-text" required
|
||||
value="<?= htmlspecialchars($post['title'] ?? '', ENT_QUOTES) ?>">
|
||||
</div>
|
||||
|
||||
<div class="form-item">
|
||||
<strong class="form-tit">비밀글</strong>
|
||||
<label>
|
||||
<input type="checkbox" name="secret" value="1"
|
||||
<?= !empty($post['is_secret']) ? 'checked':'' ?>>
|
||||
비밀글로 등록
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="form-item">
|
||||
<label class="form-tit" for="content">내용</label>
|
||||
<div class="form-col-group">
|
||||
<textarea id="content" name="content" class="text-area"
|
||||
placeholder="문의 내용을 작성해주세요"><?= htmlspecialchars($post['content'] ?? '') ?></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-item">
|
||||
<label class="form-tit" for="attach">첨부파일</label>
|
||||
<div class="form-col-group">
|
||||
<div class="attach-box">
|
||||
<input type="file" id="attach" name="attach[]" multiple>
|
||||
<small class="info-msg">* 최대 30MB 이내</small>
|
||||
</div>
|
||||
|
||||
<div id="drop-zone" class="drop-zone">
|
||||
<p>여기로 파일을 드래그하거나 클릭해서 선택하세요.</p>
|
||||
</div>
|
||||
|
||||
<ul id="file-list"></ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="btn-wrap right">
|
||||
<button type="button" class="btn btn-cancel" onclick="history.back()">취소</button>
|
||||
<button type="submit" class="btn btn-secondary"><?= $isEdit ? '수정 저장' : '작성완료' ?></button>
|
||||
</div>
|
||||
<form>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<?php include __DIR__ . "/_footer.php"; ?>
|
||||
</div>
|
||||
|
||||
<script src="/kngil/js/index.js"></script>
|
||||
<script src="/kngil/js/mypage.js"></script>
|
||||
<script src="/kngil/js/join.js"></script>
|
||||
<script type="module" src="/kngil/js/login.js"></script>
|
||||
<script src="/kngil/js/login_sms.js"></script>
|
||||
|
||||
<!-- CKEditor 표시용 초기화 (submit 관여 X) -->
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
ClassicEditor
|
||||
.create(document.querySelector('#content'), {
|
||||
language: 'ko',
|
||||
ckfinder: {
|
||||
uploadUrl: '/kngil/bbs/qa_img_upload.php'
|
||||
}
|
||||
})
|
||||
.catch(console.error);
|
||||
});
|
||||
</script>
|
||||
|
||||
<!-- 첨부파일 drag UX (submit 관여 X) -->
|
||||
<script>
|
||||
const dropZone = document.getElementById("drop-zone");
|
||||
const fileInput = document.getElementById("attach");
|
||||
const fileList = document.getElementById("file-list");
|
||||
let uploadFiles = [];
|
||||
|
||||
if (dropZone) {
|
||||
dropZone.addEventListener("click", () => fileInput.click());
|
||||
dropZone.addEventListener("dragover", e => { e.preventDefault(); dropZone.classList.add("dragover"); });
|
||||
dropZone.addEventListener("dragleave", () => dropZone.classList.remove("dragover"));
|
||||
dropZone.addEventListener("drop", e => {
|
||||
e.preventDefault();
|
||||
dropZone.classList.remove("dragover");
|
||||
addFiles(e.dataTransfer.files);
|
||||
});
|
||||
}
|
||||
|
||||
fileInput.addEventListener("change", () => addFiles(fileInput.files));
|
||||
|
||||
function addFiles(files) {
|
||||
for (const f of files) uploadFiles.push(f);
|
||||
render();
|
||||
sync();
|
||||
}
|
||||
|
||||
function render() {
|
||||
fileList.innerHTML = "";
|
||||
uploadFiles.forEach(f => {
|
||||
const li = document.createElement("li");
|
||||
li.textContent = `${f.name} (${(f.size/1024).toFixed(1)} KB)`;
|
||||
fileList.appendChild(li);
|
||||
});
|
||||
}
|
||||
|
||||
function sync() {
|
||||
const dt = new DataTransfer();
|
||||
uploadFiles.forEach(f => dt.items.add(f));
|
||||
fileInput.files = dt.files;
|
||||
}
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
469
kngil/skin/sales_results.skin.php
Normal file
469
kngil/skin/sales_results.skin.php
Normal file
@@ -0,0 +1,469 @@
|
||||
<?php
|
||||
include __DIR__ . '/layout_sales.php';
|
||||
sales_layout_start("영업실적");
|
||||
?>
|
||||
|
||||
<h2 class="text-2xl font-bold mb-4">영업실적</h2>
|
||||
|
||||
<!-- <button class="bg-blue-600 text-white px-4 py-2 rounded mb-3" id="btn-add-result">
|
||||
신규 실적 등록
|
||||
</button> -->
|
||||
|
||||
<div id="grid_results" style="width:100%;height:720px;"></div>
|
||||
|
||||
<script type="module">
|
||||
import { w2grid } from "https://cdn.jsdelivr.net/gh/vitmalina/w2ui@master/dist/w2ui.es6.min.js";
|
||||
|
||||
/* ------------------------------------------------------
|
||||
공통 유틸
|
||||
------------------------------------------------------ */
|
||||
function clean(v) {
|
||||
return (v === undefined || v === null) ? '' : v;
|
||||
}
|
||||
function cleanNumber(v) {
|
||||
if (v === undefined || v === null || v === '' || isNaN(v)) return 0;
|
||||
return Number(v);
|
||||
}
|
||||
function normalizeListValue(v) {
|
||||
if (typeof v === "object" && v !== null && v.id) return v.id;
|
||||
if (typeof v === "string") return v;
|
||||
return '';
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------
|
||||
🔵 직원 목록 / 거래처 목록 로드
|
||||
------------------------------------------------------ */
|
||||
let employeeList = [];
|
||||
let clientList = [];
|
||||
let productList = [];
|
||||
|
||||
async function loadEmployees() {
|
||||
let res = await fetch('/egbim/bbs/sales_members.php?action=list');
|
||||
let json = await res.json();
|
||||
|
||||
if (json.status === "ok") {
|
||||
employeeList = json.records.map(m => ({
|
||||
id: m.emp_no,
|
||||
text: `${m.emp_name} (${m.emp_no})`
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
async function loadClients() {
|
||||
let res = await fetch('/egbim/bbs/sales_clients.php?action=list');
|
||||
let json = await res.json();
|
||||
|
||||
if (json.status === "ok") {
|
||||
clientList = json.records.map(c => ({
|
||||
id: c.client_code,
|
||||
text: `${c.client_name} (${c.client_code})`
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
async function loadProducts() {
|
||||
let res = await fetch('/egbim/bbs/sales_products.php?action=list');
|
||||
let json = await res.json();
|
||||
|
||||
if (json.status === 'ok') {
|
||||
productList = json.records.map(p => ({
|
||||
id: p.code, // 저장용
|
||||
text: `${p.name} (${p.code})` // 화면 표시용
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------
|
||||
🔵 직원 + 거래처 모두 로드 후 GRID 생성
|
||||
------------------------------------------------------ */
|
||||
await loadEmployees();
|
||||
await loadClients();
|
||||
await loadProducts();
|
||||
|
||||
/* ------------------------------------------------------
|
||||
🔵 GRID
|
||||
------------------------------------------------------ */
|
||||
let grid = new w2grid({
|
||||
name: 'grid_results',
|
||||
box: '#grid_results',
|
||||
|
||||
show: {
|
||||
toolbar: true,
|
||||
footer: true,
|
||||
toolbarSave: true,
|
||||
toolbarReload: true,
|
||||
toolbarSearch: true,
|
||||
toolbarColumns: true,
|
||||
lineNumbers: true
|
||||
},
|
||||
|
||||
multiSearch: true,
|
||||
|
||||
searches: [
|
||||
{ field: 'sales_date', label: '실적일', type: 'date' },
|
||||
{ field: 'emp_no', label: '영업담당자', type: 'text' },
|
||||
{ field: 'client_code', label: '거래처명', type: 'text', operator: 'contains' },
|
||||
{ field: 'product_code', label: '제품명', type: 'text' },
|
||||
{ field: 'remarks', label: '비고', type: 'text' },
|
||||
],
|
||||
|
||||
columns: [
|
||||
{ field: 'sales_date', text: '실적일', size: '110px', editable: { type: 'date' }, sortable: true },
|
||||
|
||||
/* 🔵 영업담당자 콤보 */
|
||||
{
|
||||
field: 'emp_no',
|
||||
text: '영업담당자',
|
||||
size: '150px',
|
||||
editable: { type: 'combo', items: employeeList, showAll: true, filter: true},
|
||||
resizable: true,
|
||||
// render(record) {
|
||||
// // 1) combo 선택 직후: record.emp_no = { id, text }
|
||||
// if (typeof record.emp_no === "object" && record.emp_no !== null) {
|
||||
// return record.emp_no.text; // ← 즉시 표시됨
|
||||
// }
|
||||
|
||||
// // 2) 서버에서 불러온 값은 string → employeeList에서 매칭
|
||||
// const item = employeeList.find(e => e.id == record.emp_no);
|
||||
// return item ? item.text : record.emp_no;
|
||||
// },
|
||||
sortable: true
|
||||
},
|
||||
|
||||
/* 🔵 거래처명 콤보 — DB는 client_code 저장 */
|
||||
{
|
||||
field: 'client_code',
|
||||
text: '거래처명',
|
||||
size: '180px',
|
||||
editable: { type: 'combo', items: clientList, showAll: true, filter: true, match: 'contains', openOnFocus: true },
|
||||
// render(record, extra) {
|
||||
// let id = (typeof record.client_code === "object") ? record.client_code.id : record.client_code;
|
||||
// let item = clientList.find(c => c.id == id);
|
||||
// return item ? item.text : id;
|
||||
// },
|
||||
resizable: true,
|
||||
sortable: true
|
||||
},
|
||||
|
||||
{
|
||||
field: 'product_code',
|
||||
text: '제품명',
|
||||
size: '200px',
|
||||
editable: { type: 'combo', items: productList, filter: true, showAll: true },
|
||||
|
||||
// combo는 render 제거해야 정상표시됨
|
||||
// render(record) {
|
||||
// let item = productList.find(p => p.id === record.product_code);
|
||||
// return item ? item.text : record.product_code;
|
||||
// },
|
||||
resizable: true,
|
||||
sortable: true
|
||||
},
|
||||
|
||||
{ field: 'quantity', text: '수량', size: '80px',
|
||||
editable: { type: 'int' }, sortable: true, render: 'int', resizable: true, style: 'text-align:right' },
|
||||
|
||||
{ field: 'unit_price', text: '단가', size: '100px',
|
||||
editable: { type: 'int' }, sortable: true, render: 'int', resizable: true, style: 'text-align:right' },
|
||||
|
||||
{ field: 'discount', text: '할인액', size: '100px',
|
||||
editable: { type: 'float' }, sortable: true, render: 'int', resizable: true, style: 'text-align:right' },
|
||||
|
||||
{ field: 'total_amount', text: '총금액', size: '120px',
|
||||
editable: { type: 'float' }, sortable: true, render: 'int', resizable: true, style: 'text-align:right' },
|
||||
|
||||
{ field: 'remarks', text: '비고', size: '200px', editable: { type: 'text' }, resizable: true, sortable: true },
|
||||
|
||||
{ field: 'created_at', text: '등록일', size: '160px', resizable: true, sortable: true }
|
||||
],
|
||||
|
||||
toolbar: {
|
||||
items: [
|
||||
{ id: 'add', type: 'button', text: '추가', icon: 'w2ui-icon-plus' },
|
||||
{ id: 'delete', type: 'button', text: '삭제', icon: 'w2ui-icon-cross' }
|
||||
],
|
||||
|
||||
onClick(event) {
|
||||
const g = this.owner;
|
||||
|
||||
if (event.target === 'w2ui-reload') {
|
||||
loadResults();
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.target === 'add') {
|
||||
const newId = "new-" + Math.random().toString(36).substr(2, 9);
|
||||
g.add({
|
||||
recid: newId,
|
||||
sales_date: "",
|
||||
emp_no: "",
|
||||
client_code: "",
|
||||
product_code: "",
|
||||
quantity: 0,
|
||||
unit_price: 0,
|
||||
discount: 0,
|
||||
total_amount: 0,
|
||||
remarks: "",
|
||||
created_at: ""
|
||||
});
|
||||
g.refresh();
|
||||
updateSummary();
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.target === 'delete') {
|
||||
|
||||
const sel = g.getSelection();
|
||||
if (!sel.length) return;
|
||||
|
||||
if (!confirm("정말 삭제하시겠습니까?")) return;
|
||||
|
||||
sel.forEach(id => {
|
||||
|
||||
// 신규(new-xxx)는 DB 삭제 X
|
||||
if (String(id).startsWith("new-")) {
|
||||
g.remove(id);
|
||||
return;
|
||||
}
|
||||
|
||||
fetch("/egbim/bbs/sales_results.php", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
||||
body: new URLSearchParams({
|
||||
action: "delete",
|
||||
seq_no: id
|
||||
})
|
||||
})
|
||||
.then(res => res.json())
|
||||
.then(json => {
|
||||
console.log("삭제 응답:", json);
|
||||
})
|
||||
.catch(err => console.error("삭제 오류:", err));
|
||||
|
||||
g.remove(id);
|
||||
});
|
||||
|
||||
updateSummary();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
onChange(event) {
|
||||
event.onComplete = function(ev) {
|
||||
let rec = grid.get(ev.recid);
|
||||
if (!rec) return;
|
||||
|
||||
let field = grid.columns[ev.column].field;
|
||||
let val = ev.value_new;
|
||||
|
||||
// combo object → text 강제 변환
|
||||
if (typeof val === "object" && val !== null) {
|
||||
val = val.text;
|
||||
}
|
||||
|
||||
grid.set(ev.recid, { [field]: val });
|
||||
|
||||
// 계산 필드 자동 업데이트
|
||||
if (field === 'quantity' || field === 'unit_price' || field === 'discount') {
|
||||
let qty = parseInt(rec.quantity) || 0;
|
||||
let unit = parseInt(rec.unit_price) || 0;
|
||||
let dc = parseInt(rec.discount) || 0;
|
||||
|
||||
let total = Math.max(0, qty * unit - dc);
|
||||
grid.set(ev.recid, { total_amount: total });
|
||||
}
|
||||
|
||||
grid.refresh();
|
||||
};
|
||||
},
|
||||
|
||||
/* ------------------------------------------------------
|
||||
🔥 저장 처리 (insert + update)
|
||||
------------------------------------------------------ */
|
||||
onSave(event) {
|
||||
const changes = this.getChanges();
|
||||
if (!changes.length) return;
|
||||
|
||||
Promise.all(
|
||||
changes.map(ch => {
|
||||
|
||||
let rec = this.get(ch.recid); // 기존 record 전체 값
|
||||
|
||||
|
||||
/* -------------------------------------------
|
||||
🔵 1) 영업담당자(emp_no) 유효성 검사 및 변환
|
||||
------------------------------------------- */
|
||||
|
||||
// raw 값 가져오기 (object, string 모두 처리)
|
||||
let empRaw = ch.emp_no ?? rec.emp_no;
|
||||
console.log('1111333');
|
||||
|
||||
// 콤보일 경우 object → text 로 변환 ("홍길동 (01201)")
|
||||
if (typeof empRaw === "object" && empRaw !== null) {
|
||||
empRaw = empRaw.text;
|
||||
console.log('1111222');
|
||||
}
|
||||
|
||||
// 빈 값은 허용
|
||||
if (empRaw !== "") {
|
||||
console.log('1111444');
|
||||
// "(사번)" 추출
|
||||
let match = empRaw.match(/\((.*?)\)/);
|
||||
if (!match) {
|
||||
console.log('11115');
|
||||
alert("영업담당자 형식이 잘못되었습니다. 예: 홍길동 (01201)");
|
||||
throw "invalid emp_no format";
|
||||
}
|
||||
|
||||
let extractedEmpNo = match[1];
|
||||
|
||||
// 사번 유효성 체크
|
||||
let validEmpList = employeeList.map(e => e.id);
|
||||
if (!validEmpList.includes(extractedEmpNo)) {
|
||||
console.log('11116');
|
||||
alert("영업담당자는 목록에 있는 사람만 선택할 수 있습니다.");
|
||||
throw "invalid emp_no";
|
||||
}
|
||||
}
|
||||
|
||||
// ✔ 최종 DB에는 "홍길동 (01201)" 그대로 저장
|
||||
ch.emp_no = empRaw;
|
||||
|
||||
/* -------------------------------------------
|
||||
🔵 2) 거래처(client_code) 유효성 검사
|
||||
------------------------------------------- */
|
||||
let client = normalizeListValue(ch.client_code ?? rec.client_code);
|
||||
let validClientList = clientList.map(c => c.id);
|
||||
|
||||
let clientRaw = ch.client_code ?? rec.client_code;
|
||||
|
||||
if (typeof clientRaw === "object" && clientRaw !== null) {
|
||||
clientRaw = clientRaw.text;
|
||||
}
|
||||
|
||||
if (clientRaw !== "") {
|
||||
let match = clientRaw.match(/\(([^()]*)\)(?!.*\([^()]*\))/);
|
||||
if (!match) {
|
||||
alert("거래처명 형식이 잘못되었습니다. 예: 현대건설 (C002)");
|
||||
throw "invalid_client_code_format";
|
||||
}
|
||||
let code = match[1];
|
||||
|
||||
let validList = clientList.map(c => c.id);
|
||||
if (!validList.includes(code)) {
|
||||
alert("거래처명은 목록에서 선택해야 합니다.");
|
||||
throw "invalid_client_code";
|
||||
}
|
||||
}
|
||||
|
||||
ch.client_code = clientRaw;
|
||||
|
||||
/* -------------------------------------------
|
||||
🔵 3) 제품명(product_code) 유효성 검사
|
||||
------------------------------------------- */
|
||||
let product = normalizeListValue(ch.product_code ?? rec.product_code);
|
||||
let validProductList = productList.map(p => p.id);
|
||||
|
||||
let productRaw = ch.product_code ?? rec.product_code;
|
||||
|
||||
if (typeof productRaw === "object" && productRaw !== null) {
|
||||
productRaw = productRaw.text;
|
||||
}
|
||||
|
||||
if (productRaw !== "") {
|
||||
let match = productRaw.match(/\((.*?)\)$/);
|
||||
if (!match) {
|
||||
alert("제품명 형식이 잘못되었습니다. 예: EG-BIM (P001)");
|
||||
throw "invalid_product_code_format";
|
||||
}
|
||||
|
||||
let code = match[1];
|
||||
let validList = productList.map(p => p.id);
|
||||
|
||||
if (!validList.includes(code)) {
|
||||
alert("제품명은 목록에서 선택해야 합니다.");
|
||||
throw "invalid_product_code";
|
||||
}
|
||||
}
|
||||
|
||||
ch.product_code = productRaw;
|
||||
|
||||
let body = {
|
||||
action: String(ch.recid).startsWith("new-") ? "insert" : "update",
|
||||
seq_no: ch.recid,
|
||||
|
||||
sales_date: clean(ch.sales_date ?? rec.sales_date),
|
||||
emp_no: ch.emp_no,
|
||||
client_code: ch.client_code,
|
||||
product_code: ch.product_code,
|
||||
|
||||
quantity: cleanNumber(ch.quantity ?? rec.quantity),
|
||||
unit_price: cleanNumber(ch.unit_price ?? rec.unit_price),
|
||||
discount: cleanNumber(ch.discount ?? rec.discount),
|
||||
total_amount: cleanNumber(ch.total_amount ?? rec.total_amount),
|
||||
remarks: clean(ch.remarks ?? rec.remarks)
|
||||
};
|
||||
|
||||
return fetch("/egbim/bbs/sales_results.php", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
||||
body: new URLSearchParams(body)
|
||||
});
|
||||
|
||||
})
|
||||
).then(() => {
|
||||
loadResults();
|
||||
alert("저장되었습니다!");
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
|
||||
/* ------------------------------------------------------
|
||||
🔵 데이터 로드 + 합계
|
||||
------------------------------------------------------ */
|
||||
function loadResults() {
|
||||
fetch("/egbim/bbs/sales_results.php?action=list")
|
||||
.then(r => r.json())
|
||||
.then(res => {
|
||||
if (res.status === "ok") {
|
||||
grid.records = res.records.map(r => ({
|
||||
recid: r.seq_no,
|
||||
...r
|
||||
}));
|
||||
updateSummary();
|
||||
grid.refresh();
|
||||
}
|
||||
});
|
||||
}
|
||||
loadResults();
|
||||
|
||||
function updateSummary() {
|
||||
let sumQty = 0, sumUnit = 0, sumDiscount = 0, sumTotal = 0;
|
||||
|
||||
grid.records.forEach(r => {
|
||||
sumQty += Number(r.quantity || 0);
|
||||
sumUnit += Number(r.unit_price || 0);
|
||||
sumDiscount += Number(r.discount || 0);
|
||||
sumTotal += Number(r.total_amount || 0);
|
||||
});
|
||||
|
||||
grid.summary = [
|
||||
{
|
||||
recid: 'summary',
|
||||
sales_date: '<span style="float:right;font-weight:bold;">합계</span>',
|
||||
quantity: sumQty,
|
||||
unit_price: sumUnit,
|
||||
discount: sumDiscount,
|
||||
total_amount: sumTotal,
|
||||
w2ui: { summary: true }
|
||||
}
|
||||
];
|
||||
|
||||
grid.refresh();
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
<?php sales_layout_end(); ?>
|
||||
Reference in New Issue
Block a user