집합교육 수정 기능 추가
parent
a158d08c51
commit
88b81bde7c
|
|
@ -33,5 +33,6 @@
|
|||
<classpathentry kind="lib" path="src/main/webapp/WEB-INF/lib/ClipReport4.0-Common.jar"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v8.5"/>
|
||||
<classpathentry kind="lib" path="src/main/webapp/WEB-INF/classes"/>
|
||||
<classpathentry kind="lib" path="D:/app_geoinfo/app/eclipse/workspace/geoinfo_eGov_work/src/main/webapp/WEB-INF/lib/json-simple-1.1.1.jar"/>
|
||||
<classpathentry kind="output" path="target/classes"/>
|
||||
</classpath>
|
||||
|
|
|
|||
14
2_apply.bat
14
2_apply.bat
|
|
@ -1,14 +1,22 @@
|
|||
@echo off
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
|
||||
set source_prefix=src\main\webapp\
|
||||
set target_prefix=C:\Users\dbnt\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\geoinfo_admin\
|
||||
set target_directory=C:\Users\dbnt\git\dbnt\geoinfo.or.kr\old-geoinfo-or-kr-admin\
|
||||
|
||||
set source_file=
|
||||
set target_file=
|
||||
rem For 192.168.10.20
|
||||
hostname | find "DESKTOP-9C42CR8" > nul
|
||||
if %errorlevel% == 0 (
|
||||
set target_prefix=D:\app_geoinfo\app\eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\old-geoinfo-or-kr-admin\
|
||||
set target_directory=D:\app_geoinfo\app\eclipse\workspace\old-geoinfo-or-kr-admin\
|
||||
) else (
|
||||
echo goodbye
|
||||
)
|
||||
|
||||
for /f "delims=" %%i in (list.txt) do (
|
||||
|
||||
for /f "delims=" %%i in (admin_list.txt) do (
|
||||
set line=%%i
|
||||
|
||||
if "!line:~-5!" == ".java" (
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
src\main\resources\egovframework\egovProps\globals.properties_thkim_disabled
|
||||
src\main\webapp\WEB-INF\config\springmvc\action-servlet.xml
|
||||
src\main\webapp\WEB-INF\views\admins\user\left.jsp
|
||||
src\main\webapp\images\renew\arrow-right.png
|
||||
|
|
@ -18,3 +17,9 @@ src\main\webapp\WEB-INF\views\admins\user\home-training-index.jsp
|
|||
src\main\webapp\WEB-INF\views\admins\user\home-training-approval-system.jsp
|
||||
src\main\webapp\WEB-INF\views\admins\user\visit-training-index.jsp
|
||||
src\main\webapp\WEB-INF\views\admins\user\visit-training-approval-system.jsp
|
||||
src\main\java\geoinfo\util\MyUtil.java
|
||||
src\main\webapp\WEB-INF\lib\json-simple-1.1.1.jar
|
||||
src\main\java\geoinfo\admins\main\MainController.java
|
||||
src\main\resources\geoinfo\sqlmap\mappers\admins\main\Login_SQL.xml
|
||||
src\main\webapp\WEB-INF\views\admins\main\main.jsp
|
||||
src\main\webapp\WEB-INF\views\admins\frame\mainframe.jsp
|
||||
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1,88 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
|
||||
<mapper namespace="geoinfo.admins.user.service.HomeTrainingMapper">
|
||||
|
||||
<resultMap id="spAddHomeTrainingRegResult" type="java.util.HashMap">
|
||||
<result property="wvtRegId" column="p_wvt_reg_id" jdbcType="NUMERIC"/>
|
||||
<result property="resultCode" column="p_result_code" jdbcType="VARCHAR"/>
|
||||
<result property="errMsg" column="p_err_msg" jdbcType="VARCHAR"/>
|
||||
</resultMap>
|
||||
|
||||
<select id="callSpAddHomeTrainingReg" parameterType="map" statementType="CALLABLE" resultMap="spAddHomeTrainingRegResult">
|
||||
{ CALL SP_ADD_HOME_TRAINING_REG(
|
||||
#{trainingName},
|
||||
#{trainingDatetime},
|
||||
#{trainingLocation},
|
||||
#{trainingAdmin},
|
||||
#{trainingTel},
|
||||
#{regStartDate},
|
||||
#{regEndDate},
|
||||
#{userId},
|
||||
#{p_wvt_reg_id, mode=OUT, jdbcType=INTEGER},
|
||||
#{p_result_code, mode=OUT, jdbcType=INTEGER},
|
||||
#{p_err_msg, mode=OUT, jdbcType=VARCHAR}
|
||||
) }
|
||||
</select>
|
||||
|
||||
<!--
|
||||
p_wvt_reg_id : 조회할 레코드의 일련번호(숫자)
|
||||
p_training_name : 집합교육명
|
||||
p_start_date : 확정된 날짜의 검색 시작일자
|
||||
p_end_date : 확정된 날짜의 검색 종료일자
|
||||
p_state_code : 상태 코드
|
||||
p_ncount : 페이지당 한번에 가져올 갯수
|
||||
p_npage : 페이지 번호
|
||||
-->
|
||||
<select id="callSpGetHomeTrainingReg" parameterType="map" resultType="egovMap">
|
||||
<![CDATA[
|
||||
select * FROM TABLE(SP_GET_HOME_TRAINING_REG(#{wvtRegId},#{trainingName},#{startDate},#{endDate},#{stateCode},#{ncount},#{npage}))
|
||||
]]>
|
||||
</select>
|
||||
|
||||
<select id="callSpCntHomeTrainingReg" parameterType="map" resultType="long">
|
||||
select SP_CNT_HOME_TRAINING_REG(#{wvtRegId},#{trainingName},#{startDate},#{endDate},#{stateCode}) from DUAL
|
||||
</select>
|
||||
|
||||
|
||||
|
||||
|
||||
<select id="callSpGetHomeTrainingReq" parameterType="map" resultType="egovMap">
|
||||
<![CDATA[
|
||||
select * FROM TABLE(
|
||||
SP_GET_HOME_TRAINING_REQ(
|
||||
#{wvtId},
|
||||
#{wvtRegId},
|
||||
#{companyName},
|
||||
#{reqName},
|
||||
#{reqTel},
|
||||
#{stateCode},
|
||||
#{ncount},
|
||||
#{npage}
|
||||
)
|
||||
)
|
||||
]]>
|
||||
</select>
|
||||
|
||||
<select id="callSpCntHomeTrainingReq" parameterType="map" resultType="long">
|
||||
select SP_CNT_HOME_TRAINING_REQ(
|
||||
#{wvtId},
|
||||
#{wvtRegId},
|
||||
#{companyName},
|
||||
#{reqName},
|
||||
#{reqTel},
|
||||
#{stateCode}
|
||||
) from DUAL
|
||||
</select>
|
||||
|
||||
|
||||
<select id="callSpDelHomeTrainingReg" parameterType="map" statementType="CALLABLE">
|
||||
CALL SP_DEL_HOME_TRAINING_REG(
|
||||
#{whtRegId},
|
||||
#{userId},
|
||||
#{p_result_code, mode=OUT, jdbcType=INTEGER},
|
||||
#{p_err_msg, mode=OUT, jdbcType=VARCHAR}
|
||||
)
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1,42 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
|
||||
<mapper namespace="geoinfo.admins.main.service.MainMapper">
|
||||
|
||||
<select id="encryptChk" parameterType="map" resultType="String">
|
||||
<![CDATA[
|
||||
SELECT ENCRYPT_CHANGE
|
||||
FROM WEB_MEMBER_IN
|
||||
WHERE TRIM(USERID) = #{id}
|
||||
]]>
|
||||
</select>
|
||||
|
||||
<select id="getMemberInfo" parameterType="map" resultType="egovMap">
|
||||
<![CDATA[
|
||||
SELECT USERID,
|
||||
USER_NAME,
|
||||
PASSWD,
|
||||
CLS
|
||||
FROM WEB_MEMBER_IN
|
||||
WHERE TRIM(USERID) = #{id}
|
||||
AND TRIM(PASSWD) = #{pw}
|
||||
]]>
|
||||
</select>
|
||||
|
||||
<update id="updateEncrypt" parameterType="map">
|
||||
<![CDATA[
|
||||
UPDATE WEB_MEMBER_IN
|
||||
SET PASSWD = #{pw},
|
||||
ENCRYPT_CHANGE = 'Y'
|
||||
WHERE USERID = #{id}
|
||||
]]>
|
||||
</update>
|
||||
|
||||
<insert id="insertAccessLog" parameterType="map">
|
||||
<![CDATA[
|
||||
INSERT INTO TBL_ACCESS_LOG (USERID, IPADD, REGDATE, DEPARTMENT, MENU, WORK)
|
||||
VALUES (#{id}, #{ipAdd}, SYSDATE, '지하공간', '관리자로그인', '로그인')
|
||||
]]>
|
||||
</insert>
|
||||
|
||||
</mapper>
|
||||
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1,88 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
|
||||
xmlns:p="http://www.springframework.org/schema/p" xmlns:oxm="http://www.springframework.org/schema/oxm" xmlns:util="http://www.springframework.org/schema/util"
|
||||
xsi:schemaLocation="
|
||||
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
|
||||
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
|
||||
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
|
||||
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd">
|
||||
|
||||
<context:component-scan base-package="geoinfo,com">
|
||||
<context:include-filter type="annotation" expression="org.springframework.context.annotation.Configuration" />
|
||||
<context:include-filter type="annotation" expression="org.springframework.stereotype.Service" />
|
||||
<context:include-filter type="annotation" expression="org.springframework.stereotype.Repository" />
|
||||
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
|
||||
</context:component-scan>
|
||||
|
||||
<mvc:annotation-driven />
|
||||
|
||||
<!-- <mvc:default-servlet-handler /> -->
|
||||
|
||||
<!-- <mvc:interceptors> -->
|
||||
<!-- <mvc:interceptor> -->
|
||||
<!-- <mvc:mapping path="/**"/> -->
|
||||
<!-- <bean id="loggerInterceptor" class="ictway.com.git.geoinfo.interceptor.loggerInterceptor"></bean> -->
|
||||
<!-- </mvc:interceptor> -->
|
||||
|
||||
<!-- <mvc:interceptor> <mvc:mapping path="/**"/> <bean id="loginInterceptor" class="com.ygt.gtyoon.interceptor.LoginInterceptor"></bean> </mvc:interceptor> -->
|
||||
<!-- </mvc:interceptors> -->
|
||||
|
||||
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
|
||||
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" p:order="0" />
|
||||
<!-- <bean id="jsonView" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" /> -->
|
||||
|
||||
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
|
||||
<property name="contentNegotiationManager">
|
||||
<bean class="org.springframework.web.accept.ContentNegotiationManager">
|
||||
<constructor-arg>
|
||||
<bean class="org.springframework.web.accept.PathExtensionContentNegotiationStrategy">
|
||||
<constructor-arg>
|
||||
<map>
|
||||
<entry key="json" value="application/json" />
|
||||
<entry key="xml" value="application/xml" />
|
||||
</map>
|
||||
</constructor-arg>
|
||||
</bean>
|
||||
</constructor-arg>
|
||||
</bean>
|
||||
</property>
|
||||
|
||||
<property name="defaultViews">
|
||||
<list>
|
||||
<bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
|
||||
<property name="contentType" value="application/json;charset=UTF-8" />
|
||||
<property name="prefixJson" value="false" />
|
||||
<property name="extractValueFromSingleKeyModel" value="true" />
|
||||
<property name="modelKeys" value="jsonView" />
|
||||
<property name="objectMapper">
|
||||
<bean class="geoinfo.com.jackson.JacksonObjectMapper" />
|
||||
</property>
|
||||
</bean>
|
||||
<bean class="org.springframework.web.servlet.view.xml.MarshallingView">
|
||||
<constructor-arg>
|
||||
<bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
|
||||
<property name="packagesToScan">
|
||||
<list>
|
||||
<value>geoinfo.**.service</value>
|
||||
</list>
|
||||
</property>
|
||||
</bean>
|
||||
</constructor-arg>
|
||||
</bean>
|
||||
</list>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" p:order="1" p:viewClass="org.springframework.web.servlet.view.JstlView" p:prefix="/WEB-INF/views/" p:suffix=".jsp">
|
||||
</bean>
|
||||
|
||||
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
|
||||
<property name="definitions">
|
||||
<list>
|
||||
<value>/WEB-INF/tiles/tiles-layout.xml</value>
|
||||
</list>
|
||||
</property>
|
||||
<property name="preparerFactoryClass" value="org.springframework.web.servlet.view.tiles3.SpringBeanPreparerFactory" />
|
||||
</bean>
|
||||
|
||||
</beans>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.5 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 758 B |
Binary file not shown.
|
After Width: | Height: | Size: 191 B |
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.29289 8.8929C5.68342 8.50238 6.31658 8.50238 6.70711 8.8929L12 14.1858L17.2929 8.8929C17.6834 8.50238 18.3166 8.50238 18.7071 8.8929C19.0976 9.28342 19.0976 9.91659 18.7071 10.3071L12.7071 16.3071C12.3166 16.6976 11.6834 16.6976 11.2929 16.3071L5.29289 10.3071C4.90237 9.91659 4.90237 9.28342 5.29289 8.8929Z" fill="black"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 480 B |
Binary file not shown.
|
After Width: | Height: | Size: 276 B |
|
|
@ -0,0 +1,23 @@
|
|||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
|
||||
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<script src="${pageContext.request.contextPath}/js/jquery/jquery-1.10.2.min.js"></script>
|
||||
<script src="${pageContext.request.contextPath}/js/admins/user.js"></script>
|
||||
<script src="${pageContext.request.contextPath}/js/admins/common.js"></script>
|
||||
<link rel="stylesheet" HREF="${pageContext.request.contextPath}/css/admins/style.css" type="text/css">
|
||||
|
||||
<script>
|
||||
var context = "${pageContext.request.contextPath}";
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1><span class="main-title">집합교육 - </span><span class="sub-title">집합교육 신청 승인</span></h1>
|
||||
<div class="home-trainning-approval-system">
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,540 @@
|
|||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
|
||||
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<script src="${pageContext.request.contextPath}/js/jquery/jquery-1.10.2.min.js"></script>
|
||||
<script src="${pageContext.request.contextPath}/js/admins/user.js"></script>
|
||||
<script src="${pageContext.request.contextPath}/js/admins/common.js"></script>
|
||||
<link rel="stylesheet" HREF="${pageContext.request.contextPath}/css/admins/style.css" type="text/css">
|
||||
|
||||
<script>
|
||||
var context = "${pageContext.request.contextPath}";
|
||||
|
||||
let xhr;
|
||||
if(window.XMLHttpRequest) {
|
||||
xhr = new XMLHttpRequest();
|
||||
} else {
|
||||
// IE5, IE6 일때
|
||||
xhr = new ActiveXObject("Microsoft.XMLHTTP");
|
||||
}
|
||||
|
||||
function unixTimestampToFormattedDate(unixTimestamp) {
|
||||
const date = new Date(unixTimestamp);
|
||||
|
||||
const year = date.getFullYear();
|
||||
const month = ('0' + (date.getMonth() + 1)).slice(-2); // 월은 0부터 시작하므로 1을 더하고, 두 자리로 만들기 위해 0을 앞에 붙인 후 마지막 두 자리만 취함
|
||||
const day = ('0' + date.getDate()).slice(-2); // 일도 두 자리로 만들기 위해 0을 앞에 붙인 후 마지막 두 자리만 취함
|
||||
|
||||
const daysOfWeek = ['일', '월', '화', '수', '목', '금', '토'];
|
||||
const dayOfWeek = daysOfWeek[date.getDay()];
|
||||
|
||||
return year + '-' + month + '-' + day + '(' + dayOfWeek + ')';
|
||||
}
|
||||
|
||||
|
||||
function formatUnixTimestamp(unixTimestamp) {
|
||||
const date = new Date(unixTimestamp);
|
||||
|
||||
const year = date.getFullYear();
|
||||
const month = date.getMonth() + 1; // getMonth()는 0부터 시작하므로 1을 더합니다.
|
||||
const day = date.getDate();
|
||||
let hours = date.getHours();
|
||||
const minutes = date.getMinutes();
|
||||
|
||||
let ampm = "오전";
|
||||
if (hours >= 12) {
|
||||
ampm = "오후";
|
||||
hours = hours - 12;
|
||||
}
|
||||
if (hours === 0) {
|
||||
hours = 12; // 자정은 12시로 표시
|
||||
}
|
||||
|
||||
return year+"년 " + month +"월 " + day + "일 " + ampm + " " + hours + "시";
|
||||
}
|
||||
|
||||
function onClickDeleteCourseItem(e) {
|
||||
|
||||
const whtRegIdEle = document.querySelector('input[name="wht-reg-id"]:checked');
|
||||
if( whtRegIdEle == false ) {
|
||||
alert('삭제할 교육을 선택하십시오');
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
const whtRegId = whtRegIdEle.getAttribute('data-seq');
|
||||
const trainingName = whtRegIdEle.getAttribute('data-training-name');
|
||||
|
||||
if(confirm("아래 집합교육을 삭제 하시겠습니까? \n\n " + trainingName + "[" + whtRegId + "]")) {
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
var jsonData = new Array();
|
||||
jsonData.push({whtRegId});
|
||||
|
||||
console.log('%o', jsonData);
|
||||
|
||||
|
||||
xhr.open('POST', 'home-training-index/item/delete.do', true);
|
||||
xhr.setRequestHeader('Content-type', 'application/json');
|
||||
|
||||
xhr.onreadystatechange = function() {
|
||||
if (xhr.readyState === 4 && xhr.status === 200) {
|
||||
// 요청 성공 시 처리
|
||||
console.log(xhr.responseText);
|
||||
const obj = JSON.parse(xhr.responseText);
|
||||
updateList();
|
||||
alert(obj.message);
|
||||
} else if (xhr.readyState === 4) {
|
||||
// 요청 실패 시 처리
|
||||
console.error('요청 실패:', xhr.status);
|
||||
}
|
||||
};
|
||||
|
||||
xhr.send(JSON.stringify(jsonData));
|
||||
}
|
||||
|
||||
|
||||
function getCurrentTimeFormatted() {
|
||||
const now = new Date();
|
||||
|
||||
const year = now.getFullYear();
|
||||
const month = ('0' + (now.getMonth() + 1)).slice(-2); // 월은 0부터 시작하므로 1을 더하고, 두 자리로 만들기 위해 0을 앞에 붙인 후 마지막 두 자리를 가져옵니다.
|
||||
const day = ('0' + now.getDate()).slice(-2);
|
||||
const hours = ('0' + now.getHours()).slice(-2);
|
||||
const minutes = ('0' + now.getMinutes()).slice(-2);
|
||||
const seconds = ('0' + now.getSeconds()).slice(-2);
|
||||
|
||||
return year + month + day + "_" + hours + minutes + seconds;
|
||||
}
|
||||
|
||||
|
||||
function downloadTableAsCSV(tableId) {
|
||||
|
||||
let filename = getCurrentTimeFormatted() + '_' + String(document.getElementById('home-visit-item-training-name').innerHTML).replace(/ /g, "_") + '.csv';
|
||||
|
||||
|
||||
// 테이블 요소 가져오기
|
||||
var table = document.getElementById(tableId);
|
||||
|
||||
// CSV 문자열 생성
|
||||
var csv = [];
|
||||
var rows = table.querySelectorAll("tr");
|
||||
|
||||
for (var i = 0; i < rows.length; i++) {
|
||||
var row = [], cols = rows[i].querySelectorAll("td, th");
|
||||
|
||||
for (var j =
|
||||
0; j < cols.length; j++) {
|
||||
// 특수 문자 처리 및 공백 제거
|
||||
var data = cols[j].innerText.replace(/(\r\n|\n|\r)/gm, "").replace(/(\s\s)/gm, " ");
|
||||
data = data.replace(/"/g, '""'); // 큰따옴표 이스케이프
|
||||
row.push('"' + data + '"');
|
||||
}
|
||||
|
||||
csv.push(row.join(","));
|
||||
}
|
||||
|
||||
var csvString = csv.join("\n");
|
||||
|
||||
// CSV 파일 다운로드
|
||||
var link = document.createElement("a");
|
||||
link.style.display = "none";
|
||||
link.setAttribute("target", "_blank");
|
||||
link.setAttribute("href", 'data:text/csv;charset=utf-8,' + encodeURIComponent(
|
||||
csvString));
|
||||
link.setAttribute("download", filename);
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
document.body
|
||||
.removeChild(link);
|
||||
}
|
||||
|
||||
function onClickCourseItem(e) {
|
||||
const wvtRegId = e.getAttribute('data-seq');
|
||||
const trainingName = e.getAttribute('data-training-name');
|
||||
|
||||
|
||||
// 클릭된 행에서 input radio 요소 찾기
|
||||
const radioInput = e.querySelector('input[type="radio"][name="wht-reg-id"]');
|
||||
|
||||
// input radio 요소 체크
|
||||
if (radioInput) {
|
||||
radioInput.checked = true;
|
||||
}
|
||||
|
||||
xhr.open('GET', 'home-training-index/item/list.do?wvtRegId=' + wvtRegId, true);
|
||||
xhr.setRequestHeader('Content-type', 'application/json');
|
||||
|
||||
xhr.onreadystatechange = function() {
|
||||
if (xhr.readyState === 4 && xhr.status === 200) {
|
||||
// 요청 성공 시 처리
|
||||
const obj = JSON.parse(xhr.responseText);
|
||||
const data = obj.data;
|
||||
|
||||
// 명단 보여주기
|
||||
document.getElementById('home-visit-item').style.display = "block";
|
||||
|
||||
// 교육명 설정
|
||||
document.getElementById('home-visit-item-training-name').innerHTML = trainingName;
|
||||
|
||||
// 목록 생성
|
||||
{
|
||||
const homeVisitItemListEle = document.getElementById('home-visit-item-list');
|
||||
let homeVisitItemListHTML = '';
|
||||
let actualEducationParticipants = 0;
|
||||
for( idx in data ) {
|
||||
|
||||
|
||||
//A:신청함, D:삭제, C:취소, T:출첵 완료
|
||||
if( data[idx].stateCode === 'D' ) {
|
||||
continue;
|
||||
} else if( data[idx].stateCode === 'C' ) {
|
||||
continue;
|
||||
}
|
||||
actualEducationParticipants ++;
|
||||
|
||||
homeVisitItemListHTML +=
|
||||
`
|
||||
<tr onClick="onClickCourseItem(this)" data-seq="` + data[idx].whtRegId +`" data-training-name="` + data[idx].trainingName +`" >
|
||||
<td>` + data[idx].reqName + `</td>
|
||||
<td>` + data[idx].companyName + `</td>
|
||||
<td>` + data[idx].reqDept + `</td>
|
||||
<td>` + data[idx].reqPosition + `</td>
|
||||
<td>` + data[idx].reqTel + `</td>
|
||||
<td>` + data[idx].reqEmail + `</td>
|
||||
<td>` + `` + `</td>
|
||||
</tr>
|
||||
`;
|
||||
}
|
||||
//<td>` + formatUnixTimestamp(data[idx].trainingDatetime) + `</td>
|
||||
if( actualEducationParticipants === 0 ) {
|
||||
homeVisitItemListHTML =
|
||||
`
|
||||
<tr>
|
||||
<td colspan="7">참여한 인원이 없습니다.</td>
|
||||
</tr>
|
||||
`;
|
||||
}
|
||||
homeVisitItemListEle.innerHTML = homeVisitItemListHTML;
|
||||
}
|
||||
|
||||
} else if (xhr.readyState === 4) {
|
||||
// 요청 실패 시 처리
|
||||
console.error('요청 실패:', xhr.status);
|
||||
}
|
||||
};
|
||||
|
||||
xhr.send();
|
||||
}
|
||||
|
||||
function getNameByStateCodeHomeVisitList(stateCode) {
|
||||
//A:접수중,D:삭제,C:취소,P:예정,F:마감
|
||||
if( stateCode === 'A' ) {
|
||||
return '접수중';
|
||||
} else if( stateCode === 'D' ) {
|
||||
return '삭제됨';
|
||||
} else if( stateCode === 'C' ) {
|
||||
return '취소됨';
|
||||
} else if( stateCode === 'P' ) {
|
||||
return '오픈전';
|
||||
} else if( stateCode === 'F' ) {
|
||||
return '마감됨';
|
||||
}
|
||||
}
|
||||
|
||||
function updateList() {
|
||||
xhr.open('GET', 'home-training-index/list.do', true);
|
||||
xhr.setRequestHeader('Content-type', 'application/json');
|
||||
|
||||
xhr.onreadystatechange = function() {
|
||||
if (xhr.readyState === 4 && xhr.status === 200) {
|
||||
// 요청 성공 시 처리
|
||||
const obj = JSON.parse(xhr.responseText);
|
||||
const data = obj.data;
|
||||
|
||||
const homeVisitListEle = document.getElementById('home-visit-list');
|
||||
let homeVisitListHTML = '';
|
||||
|
||||
let aliveEducationsCount = 0;
|
||||
for( idx in data ) {
|
||||
|
||||
////A:접수중,D:삭제,C:취소,P:예정,F:마감
|
||||
if( data[idx].stateCode === 'D' ) {
|
||||
continue;
|
||||
} else if( data[idx].stateCode === 'C' ) {
|
||||
continue;
|
||||
}
|
||||
aliveEducationsCount++;
|
||||
|
||||
homeVisitListHTML +=
|
||||
`
|
||||
<tr onClick="onClickCourseItem(this)" data-seq="` + data[idx].whtRegId +`" data-training-name="` + data[idx].trainingName +`" >
|
||||
<td><input type="radio" name="wht-reg-id" value="` + data[idx].whtRegId +`" data-seq="` + data[idx].whtRegId +`" data-training-name="` + data[idx].trainingName +`"></td>
|
||||
<td>` + data[idx].whtRegId + `</td>
|
||||
<td>` + data[idx].trainingName + `</td>
|
||||
<td>` + formatUnixTimestamp(data[idx].trainingDatetime) + `</td>
|
||||
<td>` + data[idx].trainingLocation + `</td>
|
||||
<td>` + unixTimestampToFormattedDate(data[idx].regStartDate) + `~` + unixTimestampToFormattedDate(data[idx].regEndDate) + `</td>
|
||||
<td>` + data[idx].attendance + `명 ` + getNameByStateCodeHomeVisitList(data[idx].stateCode) + `</td>
|
||||
</tr>
|
||||
`;
|
||||
}
|
||||
if( aliveEducationsCount === 0 ) {
|
||||
homeVisitListHTML =
|
||||
`
|
||||
<tr>
|
||||
<td colspan="7">등록된 집합교육이 없습니다.</td>
|
||||
</tr>
|
||||
`;
|
||||
}
|
||||
homeVisitListEle.innerHTML = homeVisitListHTML;
|
||||
|
||||
} else if (xhr.readyState === 4) {
|
||||
// 요청 실패 시 처리
|
||||
console.error('요청 실패:', xhr.status);
|
||||
}
|
||||
};
|
||||
|
||||
xhr.send();
|
||||
}
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
|
||||
const addBtnEle = document.getElementById('add-btn');
|
||||
if( addBtnEle ) {
|
||||
addBtnEle.addEventListener('click', function () {
|
||||
var contentAddTable = document.getElementById('ContentAdd');
|
||||
if (contentAddTable.style.display === 'none' || contentAddTable.style.display === '') {
|
||||
contentAddTable.style.display = 'block';
|
||||
} else {
|
||||
contentAddTable.style.display = 'none';
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
const rows = document.querySelectorAll('.table-contents tbody tr td:nth-child(7)');
|
||||
|
||||
rows.forEach(function (cell) {
|
||||
|
||||
const text = cell.textContent;
|
||||
const number = parseInt(text.match(/\d+/));
|
||||
|
||||
if (number >= 100) {
|
||||
cell.style.color = 'red';
|
||||
} else {
|
||||
cell.style.color = 'blue';
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
const requestRegistryButtonEle = document.getElementById('request-registry-button');
|
||||
if( requestRegistryButtonEle ) {
|
||||
requestRegistryButtonEle.addEventListener('click', function () {
|
||||
|
||||
var dataIndexValue;
|
||||
|
||||
var jsonData = new Array();
|
||||
for (var i = 0; i < 1 ; i++) { // 여러 개를 한 번에 입력받는다면 입력받는 레코드만큼 loop를 순환하도록 수정되어야 한다.
|
||||
var jsonItem = {};
|
||||
//dataIndexValue = tableDataElements[i].getAttribute('data-index');
|
||||
|
||||
// 집합교육명
|
||||
var trainingNameEle = document.getElementById('training-name');
|
||||
if (trainingNameEle) {
|
||||
jsonItem.trainingName = trainingNameEle.value;
|
||||
}
|
||||
// 교육일시
|
||||
var trainingDatetimeEle = document.getElementById('training-datetime');
|
||||
if (trainingDatetimeEle) {
|
||||
jsonItem.trainingDatetime = trainingDatetimeEle.value;
|
||||
}
|
||||
// 교육장소
|
||||
var trainingLocationEle = document.getElementById('training-location');
|
||||
if (trainingLocationEle) {
|
||||
jsonItem.trainingLocation = trainingLocationEle.value;
|
||||
}
|
||||
// 접수기간 - 시작
|
||||
var regStartDateEle = document.getElementById('reg-start-date');
|
||||
if (regStartDateEle) {
|
||||
jsonItem.regStartDate = regStartDateEle.value;
|
||||
}
|
||||
// 접수기간 - 종료
|
||||
var regEndDateEle = document.getElementById('reg-end-date');
|
||||
if (regEndDateEle) {
|
||||
jsonItem.regEndDate = regEndDateEle.value;
|
||||
}
|
||||
jsonData.push(jsonItem);
|
||||
}
|
||||
|
||||
console.log('%o', jsonData);
|
||||
|
||||
|
||||
|
||||
xhr.open('POST', 'home-training-index/add.do', true);
|
||||
xhr.setRequestHeader('Content-type', 'application/json');
|
||||
|
||||
xhr.onreadystatechange = function() {
|
||||
if (xhr.readyState === 4 && xhr.status === 200) {
|
||||
// 요청 성공 시 처리
|
||||
console.log(xhr.responseText);
|
||||
const obj = JSON.parse(xhr.responseText);
|
||||
updateList();
|
||||
alert(obj.message);
|
||||
} else if (xhr.readyState === 4) {
|
||||
// 요청 실패 시 처리
|
||||
console.error('요청 실패:', xhr.status);
|
||||
}
|
||||
};
|
||||
|
||||
xhr.send(JSON.stringify(jsonData));
|
||||
});
|
||||
}
|
||||
|
||||
const trainingDatetimeInput = document.getElementById('training-datetime');
|
||||
const regEndDateInput = document.getElementById('reg-end-date');
|
||||
|
||||
trainingDatetimeInput.addEventListener('change', function() {
|
||||
const selectedDatetime = new Date(this.value);
|
||||
const year = selectedDatetime.getFullYear();
|
||||
const month = ('0' + (selectedDatetime.getMonth() + 1)).slice(-2);
|
||||
const day = ('0' + selectedDatetime.getDate()).slice(-2);
|
||||
const formattedDate = year + '-' + month + '-' + day;
|
||||
|
||||
regEndDateInput.value = formattedDate;
|
||||
|
||||
|
||||
let [date, time] = this.value.split('T');
|
||||
time = time.split(':');
|
||||
time[1] = '00'; // 분을 00으로 설정
|
||||
const newDatetime = date + 'T' + time.join(':');
|
||||
this.value = newDatetime;
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
{
|
||||
const regStartDateInput = document.getElementById('reg-start-date');
|
||||
|
||||
const today = new Date();
|
||||
const year = today.getFullYear();
|
||||
const month = ('0' + (today.getMonth() + 1)).slice(-2);
|
||||
const day = ('0' + today.getDate()).slice(-2);
|
||||
const formattedDate = year + '-' + month + '-' + day;
|
||||
|
||||
regStartDateInput.value = formattedDate;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
updateList();
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>집합교육</h1>
|
||||
<div class="home-trainning">
|
||||
<div class="contentBtn">
|
||||
<button class="modify" onClick="alert('기능 준비중');">수정</button>
|
||||
<button class="delete" onClick="onClickDeleteCourseItem(this);">삭제</button>
|
||||
</div>
|
||||
<table class="Table_Main course-list-table table-contents" id="course-list-table">
|
||||
<colgroup>
|
||||
<col style="width:40px;">
|
||||
<col style="width:40px;">
|
||||
<col style="width:280px;">
|
||||
<col style="width:200px;">
|
||||
<col style="width:215px;">
|
||||
<col style="width:265px;">
|
||||
<col style="width:90px;">
|
||||
</colgroup>
|
||||
<thead class="Table_List">
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>번호</th>
|
||||
<th>집합교육명</th>
|
||||
<th>교육일시</th>
|
||||
<th>교육장소</th>
|
||||
<th>접수기간</th>
|
||||
<th>신청</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="home-visit-list">
|
||||
</tbody>
|
||||
</table>
|
||||
<button class="AddBtn" id="add-btn">추가</button>
|
||||
|
||||
<!-- 추가 버튼 눌렸을 경우 -->
|
||||
<table class="Table_Main new-course-creation-table" id="ContentAdd">
|
||||
<colgroup>
|
||||
<col style="width:340px;">
|
||||
<col style="width:200px;">
|
||||
<col style="width:250px;">
|
||||
<col style="width:270px;">
|
||||
<col style="width:100px;">
|
||||
</colgroup>
|
||||
<thead class="Table_List">
|
||||
<tr>
|
||||
<th>집합교육명</th>
|
||||
<th>교육일시</th>
|
||||
<th>교육장소</th>
|
||||
<th>접수기간</th>
|
||||
<th>신청</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="new-course-creation-tbody">
|
||||
<tr>
|
||||
<td><input type="text" id="training-name" name="training-name" class="training-name" placeholder="교육명을 입력하세요" /></td>
|
||||
<td><input type="datetime-local" id="training-datetime" name="training-datetime" class="training-datetime" placeholder="" /></td>
|
||||
<td><input type="text" id="training-location" name="training-location" class="training-location" placeholder="교육장소를 입력하세요" /></td>
|
||||
<td><input type="date" id="reg-start-date" name="reg-start-date" class="reg-start-date reg-start-end-date" placeholder="" /> ~ <input type="date" value="2024-11-04" id="reg-end-date" name="reg-end-date" class="reg-end-date reg-start-end-date" placeholder="" /></td>
|
||||
<td><button id="request-registry-button" class="register">등록</button></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
<!-- 명단 클릭 했을 경우 -->
|
||||
<div class="home-visit-item" id="home-visit-item">
|
||||
<h2 class="DateTitle">교육 대상자 명단</h2>
|
||||
<span class="DateText">⁕ 신청 집합교육명 : <span id="home-visit-item-training-name" class="home-visit-item-training-name"></span>
|
||||
<button onClick="downloadTableAsCSV('home-visit-item-table')" id="export-list-of-participants-attending-the-education" class="export-list-of-participants-attending-the-education" style="float: right; margin-bottom: 10px;">교육 대상자 명단 내보내기</button>
|
||||
</span>
|
||||
<table class="Table_Main table-contents" id="home-visit-item-table">
|
||||
<colgroup>
|
||||
<col style="width:80px;">
|
||||
<col style="width:230px;">
|
||||
<col style="width:200px;">
|
||||
<col style="width:200px;">
|
||||
<col style="width:150px;">
|
||||
<col style="width:70px;">
|
||||
<col style="width:120px;">
|
||||
</colgroup>
|
||||
<thead class="Table_List">
|
||||
<tr>
|
||||
<th>신청자</th>
|
||||
<th>소속기관</th>
|
||||
<th>부서</th>
|
||||
<th>직급</th>
|
||||
<th>연락처</th>
|
||||
<th>이메일</th>
|
||||
<th>비고</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="home-visit-item-list">
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Binary file not shown.
|
|
@ -0,0 +1,195 @@
|
|||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
|
||||
<%@ taglib prefix="fn" uri = "http://java.sun.com/jsp/jstl/functions" %>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<script src="${pageContext.request.contextPath}/js/admins/common.js"></script>
|
||||
<script>
|
||||
|
||||
window.onload = function() {
|
||||
// 페이지 로딩 후 실행될 코드
|
||||
const activeEle = document.getElementById('${pId}');
|
||||
if( activeEle ) {
|
||||
activeEle.classList.add('active');
|
||||
const menuItemEle = findClosestMenuItem(activeEle, 'menu-item');
|
||||
if( menuItemEle ) {
|
||||
menuItemEle.classList.add('active');
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
//상위 element에서 특정 class를 갖는 element를 검색한다.
|
||||
function findClosestMenuItem(element, className) {
|
||||
let currentElement = element.parentElement; // 현재 element의 부모 element부터 시작
|
||||
|
||||
while (currentElement) {
|
||||
if (currentElement.classList.contains(className)) {
|
||||
return currentElement; // 'menu-item' 클래스를 찾으면 해당 element 반환
|
||||
}
|
||||
currentElement = currentElement.parentElement; // 상위 element로 이동
|
||||
}
|
||||
|
||||
return null; // 'menu-item' 클래스를 가진 element를 찾지 못하면 null 반환
|
||||
}
|
||||
|
||||
|
||||
function onClickSubMenuItem(e) {
|
||||
// 클릭된 요소 가져오기
|
||||
const clickedElement = e.target;
|
||||
|
||||
// data-url 속성 값 가져오기
|
||||
const dataUrl = clickedElement.dataset.url;
|
||||
|
||||
goUrl(dataUrl, '${menuId}');
|
||||
|
||||
}
|
||||
</script>
|
||||
<link rel="stylesheet" HREF="${pageContext.request.contextPath}/css/admins/style.css" type="text/css">
|
||||
<style type="text/css">
|
||||
<!--
|
||||
body
|
||||
{
|
||||
background-image: url(${pageContext.request.contextPath}/images/admins/left_bak.jpg);
|
||||
margin-left:0;
|
||||
margin-top:0;
|
||||
margin-right:0;
|
||||
margin-bottom:0;
|
||||
}
|
||||
img { border:0; }
|
||||
-->
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<table width="244" border="0" cellpadding="0" cellspacing="0" >
|
||||
<!-- <tr height=10><td colspan="3"><img src="/admins/img/left_top_border.gif"></td></tr>
|
||||
<tr height=30><td colspan="3"><img src="/admins/img/user/left_title.gif"></td></tr>-->
|
||||
<tr>
|
||||
<td width="244" height="668" valign="top" background="${pageContext.request.contextPath}/images/admins/left_bak.jpg">
|
||||
<table>
|
||||
<tr>
|
||||
<td><img src="${pageContext.request.contextPath}/images/admins/user/1_tit_01.gif" width="244" height="62" /></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td width=209>
|
||||
<c:choose>
|
||||
<c:when test="${pId eq '00'}" >
|
||||
<img src="${pageContext.request.contextPath}/images/admins/user/1_left_01_over.gif" style="cursor:hand" onClick="javascript:goUrl('00', '${menuId}')">
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<img src="${pageContext.request.contextPath}/images/admins/user/1_left_01.gif" style="cursor:hand" onClick="javascript:goUrl('00', '${menuId}')">
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
<c:choose>
|
||||
<c:when test="${pId eq '01'}" >
|
||||
<img src="${pageContext.request.contextPath}/images/admins/user/1_left_02_over.gif" style="cursor:hand" onClick="javascript:goUrl('01', '${menuId}')">
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<img src="${pageContext.request.contextPath}/images/admins/user/1_left_02.gif" style="cursor:hand" onClick="javascript:goUrl('01', '${menuId}')">
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
<c:choose>
|
||||
<c:when test="${pId eq '02'}" >
|
||||
<img src="${pageContext.request.contextPath}/images/admins/user/1_left_03_over.gif" style="cursor:hand" onClick="javascript:goUrl('02', '${menuId}')">
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<img src="${pageContext.request.contextPath}/images/admins/user/1_left_03.gif" style="cursor:hand" onClick="javascript:goUrl('02', '${menuId}')">
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
<c:choose>
|
||||
<c:when test="${pId eq '03'}" >
|
||||
<img src="${pageContext.request.contextPath}/images/admins/user/1_left_04_over.gif" style="cursor:hand" onClick="javascript:goUrl('03', '${menuId}')">
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<img src="${pageContext.request.contextPath}/images/admins/user/1_left_04.gif" style="cursor:hand" onClick="javascript:goUrl('03', '${menuId}')">
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<c:choose>
|
||||
<c:when test="${pId eq '40'}" >
|
||||
<img src="${pageContext.request.contextPath}/images/admins/user/1_left_05_over.png" style="cursor:hand" onClick="javascript:goUrl('40', '${menuId}')">
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<img src="${pageContext.request.contextPath}/images/admins/user/1_left_05.png" style="cursor:hand" onClick="javascript:goUrl('40', '${menuId}')">
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<c:choose>
|
||||
<c:when test="${pId eq '05'}" >
|
||||
<img src="${pageContext.request.contextPath}/images/admins/user/1_left_06_over.gif" style="cursor:hand" onClick="javascript:goUrl('05', '${menuId}')">
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<img src="${pageContext.request.contextPath}/images/admins/user/1_left_06.gif" style="cursor:hand" onClick="javascript:goUrl('05', '${menuId}')">
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<c:choose>
|
||||
<c:when test="${pId eq '07'}" >
|
||||
<img src="${pageContext.request.contextPath}/images/admins/user/1_left_07_over.gif" style="cursor:hand" onClick="javascript:goUrl('07', '${menuId}')">
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<img src="${pageContext.request.contextPath}/images/admins/user/1_left_07.gif" style="cursor:hand" onClick="javascript:goUrl('07', '${menuId}')">
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="menu-item">
|
||||
<span style="cursor:hand" onClick="javascript:goUrl('home-training-index', '${menuId}')"><img src="${pageContext.request.contextPath}/images/renew/arrow-right.png" /> 집합교육 관리</span>
|
||||
<ul class="sub-menu">
|
||||
<li class="sub-menu-item" data-url="home-training-index" id="home-training-index" onClick="javascript:onClickSubMenuItem(event)"><img src="${pageContext.request.contextPath}/images/renew/arrow-right.png" /> 집합교육 개설</li>
|
||||
<!-- <li class="sub-menu-item" data-url="home-training-approval-system" id="home-training-approval-system" onClick="onClickSubMenuItem(event)" ><img src="${pageContext.request.contextPath}/images/renew/arrow-right.png" /> 방문교육 신청 승인</li> -->
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="menu-item">
|
||||
<span style="cursor:hand" data-url="visit-training-index" onClick="javascript:onClickSubMenuItem(event)"><img src="${pageContext.request.contextPath}/images/renew/arrow-right.png" /> 방문교육 관리</span>
|
||||
<ul class="sub-menu">
|
||||
<li class="sub-menu-item" data-url="visit-training-index" id="visit-training-index" onClick="javascript:onClickSubMenuItem(event)"><img src="${pageContext.request.contextPath}/images/renew/arrow-right.png" /> 교육가능 일자 지정</li>
|
||||
<li class="sub-menu-item" data-url="visit-training-approval-system" id="visit-training-approval-system" onClick="onClickSubMenuItem(event)" ><img src="${pageContext.request.contextPath}/images/renew/arrow-right.png" /> 방문교육 신청 승인</li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- <tr><td colspan="3"> </td></tr>
|
||||
<tr height=177><td colspan="3"><img src="/admins/img/left_logo.gif"></td></tr> -->
|
||||
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,173 @@
|
|||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<title>국토지반정보 포털 관리시스템</title>
|
||||
<script src="${pageContext.request.contextPath}/js/jquery/jquery-1.10.2.min.js"></script>
|
||||
<script>
|
||||
var context = "${pageContext.request.contextPath}";
|
||||
|
||||
function getCookie(name)
|
||||
{
|
||||
var nameOfCookie = name + "=";
|
||||
var x = 0;
|
||||
while ( x <= document.cookie.length )
|
||||
{
|
||||
var y = (x+nameOfCookie.length);
|
||||
if ( document.cookie.substring( x, y ) == nameOfCookie ) {
|
||||
if ( (endOfCookie=document.cookie.indexOf( ";", y )) == -1 )
|
||||
endOfCookie = document.cookie.length;
|
||||
return unescape( document.cookie.substring( y, endOfCookie ) );
|
||||
}
|
||||
x = document.cookie.indexOf( " ", x ) + 1;
|
||||
if ( x == 0 )
|
||||
break;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
/*
|
||||
function download_approved() { //공지사항 띄우기
|
||||
var cookie_name = 'download_approved_01';
|
||||
if (getCookie(cookie_name) != "download_approved_01")
|
||||
{
|
||||
noticeWindow2 = window.open('/admins/popup/download_approved.jsp',cookie_name,'scrollbars=no,width=500,height=380,left=550,top=200', true);
|
||||
if (noticeWindow2) {
|
||||
noticeWindow2.focus();
|
||||
}
|
||||
}
|
||||
}//body 부분 추가onload="download_approved();"
|
||||
*/
|
||||
$(document).ready(function(){
|
||||
$("#layer_pop").click(function(){
|
||||
$("div").css("background-image","url(${pageContext.request.contextPath}/images/admins/btn_1.png)");
|
||||
//$(this).text('승인 대기 0건');
|
||||
});
|
||||
});
|
||||
|
||||
function removeDOM() {
|
||||
document.documentElement.innerHTML = ''; // 전체 DOM 제거
|
||||
window.location.href = "about:blank"; // 페이지 변경
|
||||
}
|
||||
|
||||
document.addEventListener('keydown', function(event) {
|
||||
var e = event || window.event; // IE 호환성을 위한 event 객체 가져오기
|
||||
if ((e.ctrlKey && e.shiftKey && e.keyCode === 73) || e.keyCode === 123) {
|
||||
// Ctrl+Shift+I 또는 F12 키 눌림 감지
|
||||
console.log('디버깅이 감지되었습니다.');
|
||||
removeDOM();
|
||||
e.returnValue = false; // 개발자 도구 열림 방지 (IE)
|
||||
if (e.preventDefault) e.preventDefault(); // 개발자 도구 열림 방지 (표준)
|
||||
}
|
||||
|
||||
/** Ctrl+P 막기 **/
|
||||
if (e.ctrlKey && e.keyCode == 80) {
|
||||
e.cancelBubble = true;
|
||||
e.returnValue = false; // IE
|
||||
if (e.preventDefault) e.preventDefault(); // 표준
|
||||
if (e.stopPropagation) e.stopPropagation(); // 표준
|
||||
}
|
||||
});
|
||||
|
||||
/** 스크린 캡처 막기 **/
|
||||
document.addEventListener('keyup', function(e) {
|
||||
if (e.key == 'PrintScreen') {
|
||||
navigator.clipboard.writeText('');
|
||||
}
|
||||
});
|
||||
|
||||
</script>
|
||||
<style type="text/css">
|
||||
#layer_pop{
|
||||
position:absolute;
|
||||
width:115px;
|
||||
height:18px;
|
||||
top:112px;
|
||||
left:950px;
|
||||
background-image:url("${pageContext.request.contextPath}/images/admins/btn_1.png");
|
||||
background-repeat : no-repeat;
|
||||
border : 0px solid #333;
|
||||
font-size: 12px;
|
||||
text-align:center;
|
||||
color : #FFFFFF;
|
||||
cursor : pointer;
|
||||
vertical-align: middle;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<table border='0' width="100%"cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td valign="top" background="${pageContext.request.contextPath}/images/admins/frame/top_main_bak.gif">
|
||||
<table width="934" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<!--- 탑메뉴 시작 --->
|
||||
<td width="244" valign="top">
|
||||
<a href="${pageContext.request.contextPath}/index.do">
|
||||
<img src="${pageContext.request.contextPath}/images/admins/frame/top_main.gif" width="244" height="135" border="0" usemap="#Map" />
|
||||
</a>
|
||||
</td>
|
||||
<td width="690" valign="top"><img src="${pageContext.request.contextPath}/images/admins/frame/top_menu.gif" width="690" height="135" border="0" usemap="#Map2" /></td>
|
||||
<!--- 탑메뉴 끝 --->
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td width="100%">
|
||||
<table width="100%" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td width="244" height="668" valign="top" background="${pageContext.request.contextPath}/images/admins/left_bak.jpg">
|
||||
<iframe width="244" height="668" marginheight="0" src="${pageContext.request.contextPath}/admins/${menuId}/left.do?pId=${pId}&menuId=${menuId}" name="leftFrame" frameborder="0" scrolling="no"></iframe>
|
||||
</td>
|
||||
<td width="10" valign="top"> </td>
|
||||
|
||||
<td width="100%" valign="top">
|
||||
<iframe height="650" width="1200" marginheight="0" src="${pageContext.request.contextPath}/admins/frame/mainframe.do?menuId=${menuId}&pId=${pId}&viewName=${viewName}&idx=${idx}" name="mainFrame" frameborder="0" scrolling="no"></iframe>
|
||||
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
<tr>
|
||||
<td background="${pageContext.request.contextPath}/images/admins/frame/bottom_bak.gif">
|
||||
<table width="934" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><img src="${pageContext.request.contextPath}/images/admins/frame/bottom.gif" width="934" height="55" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
</table>
|
||||
<map name="Map" id="Map">
|
||||
<area shape="rect" coords="160,98,217,116" href="${pageContext.request.contextPath}/admins/main/logout.do" target="_top"/>
|
||||
</map>
|
||||
|
||||
<map name="Map2" id="Map2">
|
||||
<area shape="rect" coords="10,91,96,119" href="${pageContext.request.contextPath}/admins/main/main.do?menuId=user&pId=00" target="_top"/>
|
||||
<area shape="rect" coords="108,91,254,120" href="${pageContext.request.contextPath}/admins/main/main.do?menuId=userLog&pId=00" target="_top" />
|
||||
<area shape="rect" coords="265,91,404,122" href="${pageContext.request.contextPath}/admins/main/main.do?menuId=chLog&pId=00" target="_top" />
|
||||
<area shape="rect" coords="419,91,486,121" href="${pageContext.request.contextPath}/admins/main/main.do?menuId=notice&pId=00" target="_top" />
|
||||
<area shape="rect" coords="500,92,556,121" href="${pageContext.request.contextPath}/admins/main/main.do?menuId=board&pId=00" target="_top" />
|
||||
<area shape="rect" coords="566,93,681,121" href="${pageContext.request.contextPath}/admins/main/main.do?menuId=manager&pId=00" target="_top" />
|
||||
</map>
|
||||
<%-- <c:choose>
|
||||
<c:when test="${nDownApp gt 0}">
|
||||
<div id="layer_pop" onclick="mainFrame.iframeMain.location.href ='${pageContext.request.contextPath}/admins/chLog/20.do?check=1';" style = "background-image:url('${pageContext.request.contextPath}/images/admins/btn_2.png');">승인 대기 <c:out value="${nDownApp}"/>건</div>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<div id="layer_pop" onclick="mainFrame.iframeMain.location.href ='${pageContext.request.contextPath}/admins/chLog/20.do?check=1';" style = "">승인 대기 0건</div>
|
||||
</c:otherwise>
|
||||
</c:choose> --%>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />
|
||||
<title></title>
|
||||
<script src="${pageContext.request.contextPath}/js/map/main.js"></script>
|
||||
<script>
|
||||
var waitWin;
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body leftmargin="0" topmargin="0" marginheight="0" marginwidth="0">
|
||||
<!--
|
||||
iframe의 width 최소값은 727입니다.
|
||||
727보다 작게 할 경우 iframe 내부에 가로스크롤바가 생길 수 있습니다.
|
||||
727보다 크게 하는 경우는 문제 없습니다.
|
||||
-->
|
||||
|
||||
<iframe src="${pageContext.request.contextPath}/admins/${menuId}/${pId}.do" frameborder="0" height="650" width="1200" scrolling="yes" name="iframeMain" style="overflow-x: hidden;"></iframe>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 2.0 KiB |
|
|
@ -0,0 +1,782 @@
|
|||
@charset "UTF-8";
|
||||
/* 기본 */
|
||||
img {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
margin-left: 16;
|
||||
margin-top: 20;
|
||||
margin-right: 16;
|
||||
margin-bottom: 0;
|
||||
scrollbar-face-color: #FFFFFF;
|
||||
scrollbar-shadow-color: #A0A0A0;
|
||||
scrollbar-highlight-color: #FFFFFF;
|
||||
scrollbar-3dlight-color: #A0A0A0;
|
||||
scrollbar-darkshadow-color: #F6F6F6;
|
||||
scrollbar-track-color: #F6F6F6;
|
||||
scrollbar-arrow-color: #A0A0A0;
|
||||
}
|
||||
|
||||
/* 페이지 네비게이션 */
|
||||
.navi_cur {
|
||||
font-family: "굴림체";
|
||||
font-size: 9pt;
|
||||
color: #3F3F3F;
|
||||
line-height: 150%;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
a.navi:link {
|
||||
font-family: "굴림체";
|
||||
font-size: 9pt;
|
||||
color: #3F3F3F;
|
||||
text-decoration: none;
|
||||
line-height: 150%;
|
||||
}
|
||||
|
||||
a.navi:visited {
|
||||
font-family: "굴림체";
|
||||
font-size: 9pt;
|
||||
color: #3F3F3F;
|
||||
text-decoration: none;
|
||||
line-height: 150%;
|
||||
}
|
||||
|
||||
a.navi:hover {
|
||||
font-family: "굴림체";
|
||||
font-size: 9pt;
|
||||
color: #3F3F3F;
|
||||
text-decoration: underline;
|
||||
line-height: 150%;
|
||||
}
|
||||
|
||||
/* 목록 헤드와 내용 */
|
||||
.list_head {
|
||||
font-size: 9pt;
|
||||
font-family: 굴림체;
|
||||
font-weight: bold;
|
||||
line-height: 150%;
|
||||
color: #B64E0F;
|
||||
}
|
||||
|
||||
.list_head2 {
|
||||
font-size: 9pt;
|
||||
font-family: 굴림체;
|
||||
font-weight: bold;
|
||||
line-height: 150%;
|
||||
color: #1180B5;
|
||||
}
|
||||
|
||||
.list_head_noti {
|
||||
font-size: 9pt;
|
||||
font-family: 굴림체;
|
||||
font-weight: bold;
|
||||
line-height: 150%;
|
||||
color: #B64E0F;
|
||||
}
|
||||
|
||||
.list_content {
|
||||
font-size: 9pt;
|
||||
font-family: 굴림체;
|
||||
line-height: 150%;
|
||||
color: #525252;
|
||||
}
|
||||
|
||||
/* search */
|
||||
.search {
|
||||
font-size: 9pt;
|
||||
color: #545454;
|
||||
}
|
||||
|
||||
.search1 {
|
||||
font-size: 9pt;
|
||||
color: #545454;
|
||||
}
|
||||
|
||||
.date_search {
|
||||
font-size: 9pt;
|
||||
font-weight: bold;
|
||||
color: #545454;
|
||||
}
|
||||
|
||||
/* 폼 */
|
||||
Select {
|
||||
font-size: 9pt;
|
||||
}
|
||||
|
||||
input {
|
||||
font-size: 9pt;
|
||||
}
|
||||
|
||||
.write {
|
||||
background-color: #FFFFFF;
|
||||
border-color: #C5C5C5;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
font-size: 10pt;
|
||||
}
|
||||
|
||||
.input {
|
||||
font-size: 9pt;
|
||||
border: 1x solid #C8D0D5;
|
||||
text-align: left;
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
.input1 {
|
||||
font-size: 9pt;
|
||||
border: 1x solid #8C8C8C;
|
||||
}
|
||||
|
||||
.input2 {
|
||||
font-size: 9pt;
|
||||
border: 1x solid #D1DEDE;
|
||||
text-align: justify;
|
||||
padding-right: 3px;
|
||||
background-color: #F4F7F7;
|
||||
height: 17px;
|
||||
padding-left: 3px;
|
||||
}
|
||||
|
||||
.input3 {
|
||||
font-size: 9pt;
|
||||
border: 1x solid #8C8C8C;
|
||||
text-align: center;
|
||||
padding-top: 2px;
|
||||
}
|
||||
|
||||
Input.search {
|
||||
background-color: #F9F9F9;
|
||||
border-color: #C5C5C5;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
font-size: 10pt;
|
||||
}
|
||||
|
||||
/* 일반 */
|
||||
a:link {
|
||||
font-family: "굴림체";
|
||||
font-size: 9pt;
|
||||
color: #525252;
|
||||
text-decoration: none;
|
||||
line-height: 150%;
|
||||
}
|
||||
|
||||
a:visited {
|
||||
font-family: "굴림체";
|
||||
font-size: 9pt;
|
||||
color: #525252;
|
||||
text-decoration: none;
|
||||
line-height: 150%;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
font-family: "굴림체";
|
||||
font-size: 9pt;
|
||||
color: #FF8000;
|
||||
text-decoration: underline;
|
||||
line-height: 150%;
|
||||
}
|
||||
|
||||
/* FAQ */
|
||||
.faq_q {
|
||||
font-size: 9pt;
|
||||
line-height: 150%;
|
||||
color: #1F177C;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.faq_a {
|
||||
font-size: 9pt;
|
||||
line-height: 150%;
|
||||
color: #1F177C;
|
||||
}
|
||||
|
||||
/* QnA */
|
||||
.qna_head {
|
||||
font-size: 9pt;
|
||||
font-family: 굴림체;
|
||||
font-weight: bold;
|
||||
line-height: 150%;
|
||||
color: #939393;
|
||||
}
|
||||
|
||||
.qna_content {
|
||||
font-size: 9pt;
|
||||
font-family: 굴림체;
|
||||
line-height: 150%;
|
||||
color: #939393;
|
||||
padding-left: 5px;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
.qna_contentH {
|
||||
font-size: 9pt;
|
||||
font-family: 굴림체;
|
||||
line-height: 150%;
|
||||
color: #939393;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.qna_reply {
|
||||
font-size: 9pt;
|
||||
font-family: 굴림체;
|
||||
line-height: 120%;
|
||||
color: #3F83FF;
|
||||
padding-left: 5px;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
.qna_reply_gray {
|
||||
font-size: 9pt;
|
||||
font-family: 굴림체;
|
||||
line-height: 150%;
|
||||
color: #939393;
|
||||
}
|
||||
|
||||
/* 팝업타이틀, 입력창(input, select) 추가 2017.08.01 */
|
||||
.pop_title {
|
||||
height: 20px;
|
||||
border-bottom: 1px solid #31b0e5;
|
||||
background: url("../../images/admins/bullet03.png") 10px 10px no-repeat;
|
||||
padding: 7px 0 7px 27px;
|
||||
font-size: 14px;
|
||||
font-family: 굴림체;
|
||||
font-weight: bold;
|
||||
line-height: 150%;
|
||||
color: #1180B5;
|
||||
}
|
||||
|
||||
.input_txt {
|
||||
padding: 3px;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 3px;
|
||||
color: #666;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
/* 2023.10.11 LHJ 게시판 제목에서 길이 초과된 뒷부분 생략 추가 */
|
||||
#Table_List {
|
||||
table-layout: fixed;
|
||||
}
|
||||
|
||||
#Table_List td {
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* 2023.10.23 LHJ 팝업 미리보기 화면 추가 */
|
||||
.popup_noti {
|
||||
width: 500px;
|
||||
height: 600px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.bg_noti:nth-child(1) {
|
||||
flex-grow: 2.5;
|
||||
background-color: #FFCCB3;
|
||||
}
|
||||
|
||||
.bg_noti:nth-child(2) {
|
||||
flex-grow: 1.5;
|
||||
background-color: #FFF2D0;
|
||||
}
|
||||
|
||||
.bg_noti:nth-child(3) {
|
||||
flex-grow: 6;
|
||||
background-color: #DCF1EA;
|
||||
}
|
||||
|
||||
.bg_white {
|
||||
position: absolute;
|
||||
top: 10%;
|
||||
left: 7%;
|
||||
right: 7%;
|
||||
bottom: 5%;
|
||||
background-color: white;
|
||||
border: 1px solid black;
|
||||
}
|
||||
|
||||
.subject_noti {
|
||||
position: absolute;
|
||||
top: 10%;
|
||||
left: 7%;
|
||||
right: 7%;
|
||||
font-family: "NanumGothicB";
|
||||
font-weight: bold;
|
||||
font-size: 15pt;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 2;
|
||||
-webkit-box-orient: vertical;
|
||||
}
|
||||
|
||||
.contents_noti pre {
|
||||
display: block;
|
||||
padding: inherit;
|
||||
margin: inherit;
|
||||
font-size: inherit;
|
||||
line-height: inherit;
|
||||
color: inherit;
|
||||
word-break: break-all;
|
||||
word-wrap: break-word;
|
||||
white-space: pre-wrap;
|
||||
background-color: inherit;
|
||||
border: inherit;
|
||||
border-radius: inherit;
|
||||
font-family: inherit;
|
||||
}
|
||||
|
||||
.contents_noti {
|
||||
position: absolute;
|
||||
top: 27%;
|
||||
left: 7%;
|
||||
right: 7%;
|
||||
bottom: 5%;
|
||||
font-family: "Nanum Gothic";
|
||||
font-size: 9pt;
|
||||
overflow-y: auto;
|
||||
text-overflow: ellipsis;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 10;
|
||||
-webkit-box-orient: vertical;
|
||||
}
|
||||
|
||||
.menu-item {
|
||||
padding: 0px 5px;
|
||||
width: 230px;
|
||||
text-align: center;
|
||||
margin-bottom: 9px;
|
||||
}
|
||||
.menu-item span {
|
||||
box-sizing: border-box;
|
||||
display: inline-block;
|
||||
width: 220px;
|
||||
padding: 5px 20px;
|
||||
padding-left: 31px;
|
||||
box-shadow: inset 2px 2px 6px #b7b7b7;
|
||||
border-radius: 20px;
|
||||
text-align: left;
|
||||
background: #ffffff;
|
||||
color: #888888;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
margin-left: 4px;
|
||||
}
|
||||
.menu-item .sub-menu {
|
||||
display: none;
|
||||
}
|
||||
.menu-item.active {
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
.menu-item.active span {
|
||||
color: #2b85c6;
|
||||
}
|
||||
.menu-item.active .sub-menu {
|
||||
display: block;
|
||||
margin: 0px;
|
||||
margin-top: 3px;
|
||||
padding: 0px;
|
||||
text-align: right;
|
||||
}
|
||||
.menu-item.active .sub-menu .sub-menu-item {
|
||||
box-sizing: border-box;
|
||||
display: inline-block;
|
||||
width: 180px;
|
||||
padding: 5px 20px;
|
||||
padding-left: 31px;
|
||||
box-shadow: inset 2px 2px 6px #b7b7b7;
|
||||
border-radius: 20px;
|
||||
text-align: left;
|
||||
background: #ffffff;
|
||||
color: #888888;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
margin-left: 4px;
|
||||
margin-right: 4px;
|
||||
margin-bottom: 3px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.menu-item.active .sub-menu .sub-menu-item.active {
|
||||
color: #2b85c6;
|
||||
}
|
||||
|
||||
.main-title {
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.sub-title {
|
||||
font-size: 20px;
|
||||
color: #df8107;
|
||||
}
|
||||
|
||||
.home-trainning {
|
||||
width: 100%;
|
||||
max-width: 1600px;
|
||||
position: relative;
|
||||
/* 신청인정보 */
|
||||
}
|
||||
.home-trainning th,
|
||||
.home-trainning tr {
|
||||
height: 36px;
|
||||
}
|
||||
.home-trainning .contentBtn {
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
justify-content: end;
|
||||
margin: 10px 0;
|
||||
}
|
||||
.home-trainning button {
|
||||
background-color: #007BFF;
|
||||
color: #fff;
|
||||
border-radius: 6px;
|
||||
border: none;
|
||||
padding: 5px 10px;
|
||||
}
|
||||
.home-trainning .Table_Main {
|
||||
width: 100%;
|
||||
max-width: 1600px;
|
||||
border: 1px solid #e9e9e9;
|
||||
text-align: center;
|
||||
}
|
||||
.home-trainning .Table_Main.course-list-table tbody tr {
|
||||
cursor: pointer;
|
||||
}
|
||||
.home-trainning .Table_Main.course-list-table tbody tr:hover {
|
||||
background: #f1f1f1;
|
||||
}
|
||||
.home-trainning .Table_Main.new-course-creation-table {
|
||||
margin-bottom: 50px;
|
||||
}
|
||||
.home-trainning .Table_Main.new-course-creation-table .new-course-creation-tbody tr td input {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
height: 35px;
|
||||
border: none;
|
||||
padding: 0px 5px;
|
||||
font-size: 14px;
|
||||
}
|
||||
.home-trainning .Table_Main.new-course-creation-table .new-course-creation-tbody tr td input.reg-start-end-date {
|
||||
width: 40%;
|
||||
padding: 0px;
|
||||
}
|
||||
.home-trainning .Table_List {
|
||||
background: #e9eff4;
|
||||
}
|
||||
.home-trainning .application {
|
||||
width: 60px;
|
||||
padding: 5px;
|
||||
background: #E9F0F5;
|
||||
border-radius: 6px;
|
||||
border: none;
|
||||
font-weight: 600;
|
||||
font-size: 12px;
|
||||
}
|
||||
.home-trainning .applicationEnd {
|
||||
color: red;
|
||||
}
|
||||
.home-trainning .home-visit-item {
|
||||
display: none;
|
||||
}
|
||||
.home-trainning #UserDate {
|
||||
margin: 25px 0;
|
||||
display: none;
|
||||
}
|
||||
.home-trainning .DateTitle {
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
line-height: 18px;
|
||||
display: inline-block;
|
||||
margin-right: 20px;
|
||||
}
|
||||
.home-trainning .AddBtn {
|
||||
display: block;
|
||||
margin: 30px auto;
|
||||
padding: 10px 20px;
|
||||
background-color: #007BFF;
|
||||
color: white;
|
||||
border: none;
|
||||
border-radius: 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.home-trainning button:hover {
|
||||
background-color: #0056b3;
|
||||
}
|
||||
.home-trainning #ContentAdd {
|
||||
display: none;
|
||||
}
|
||||
.home-trainning .DateTitle {
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
line-height: 18px;
|
||||
display: inline-block;
|
||||
margin-right: 20px;
|
||||
}
|
||||
.home-trainning .DateText {
|
||||
font-size: 15px;
|
||||
font-weight: 400;
|
||||
line-height: 12px;
|
||||
align-items: center;
|
||||
}
|
||||
.home-trainning .DateText .home-visit-item-training-name {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.visit-trainning {
|
||||
/* 기본 레이아웃 설정 */
|
||||
/* 캘린더 CSS */
|
||||
/* Form css */
|
||||
/* 관리자용 css */
|
||||
}
|
||||
.visit-trainning .page-content-wrapper {
|
||||
display: inline-block;
|
||||
width: auto;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.visit-trainning .page-sidebar-wrapper {
|
||||
float: left;
|
||||
width: 222px;
|
||||
height: 1000px;
|
||||
}
|
||||
.visit-trainning .page-content {
|
||||
width: 100%;
|
||||
}
|
||||
.visit-trainning .content-bg {
|
||||
background-color: #e9eff4;
|
||||
padding: 30px;
|
||||
}
|
||||
.visit-trainning .CalendarOverlay {
|
||||
display: inline-flex;
|
||||
}
|
||||
.visit-trainning .Calendar {
|
||||
padding: 30px;
|
||||
background: white;
|
||||
border-radius: 16px;
|
||||
flex-direction: column;
|
||||
justify-content: flex-start;
|
||||
align-items: flex-start;
|
||||
gap: 12px;
|
||||
display: flex;
|
||||
}
|
||||
.visit-trainning .Header {
|
||||
align-self: stretch;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
display: inline-flex;
|
||||
}
|
||||
.visit-trainning .yyyy-mm {
|
||||
color: black;
|
||||
font-size: 24px;
|
||||
font-family: Inter;
|
||||
font-weight: 900;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
.visit-trainning .Frame9 {
|
||||
justify-content: flex-start;
|
||||
align-items: flex-start;
|
||||
gap: 12px;
|
||||
display: flex;
|
||||
}
|
||||
.visit-trainning .Chevron {
|
||||
padding: 8px;
|
||||
justify-content: flex-start;
|
||||
align-items: flex-start;
|
||||
gap: 10px;
|
||||
display: flex;
|
||||
}
|
||||
.visit-trainning .page-prev {
|
||||
margin-top: 3px;
|
||||
width: 26px;
|
||||
height: 26px;
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
.visit-trainning .page-next {
|
||||
margin-top: 3px;
|
||||
width: 26px;
|
||||
height: 26px;
|
||||
transform: rotate(-90deg);
|
||||
}
|
||||
.visit-trainning .month {
|
||||
margin: 0px auto;
|
||||
}
|
||||
.visit-trainning .month .Days {
|
||||
flex-direction: column;
|
||||
justify-content: flex-start;
|
||||
align-items: center;
|
||||
display: flex;
|
||||
}
|
||||
.visit-trainning .month .Row {
|
||||
justify-content: flex-start;
|
||||
align-items: center;
|
||||
display: flex;
|
||||
}
|
||||
.visit-trainning .month .Cell {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
width: 64px;
|
||||
height: 64px;
|
||||
padding: 10px;
|
||||
box-sizing: border-box;
|
||||
padding: 20px;
|
||||
}
|
||||
.visit-trainning .month .Cell:hover {
|
||||
background-color: #e9eff4;
|
||||
}
|
||||
.visit-trainning .month .Day {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
width: 64px;
|
||||
height: 64px;
|
||||
padding: 10px;
|
||||
border: 1px solid #D5D4DF;
|
||||
box-sizing: border-box;
|
||||
padding: 20px;
|
||||
}
|
||||
.visit-trainning .month .Week {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
text-align: center;
|
||||
color: black;
|
||||
font-size: 14px;
|
||||
font-family: Inter;
|
||||
font-weight: 600;
|
||||
word-wrap: break-word;
|
||||
border: 1px solid #fff;
|
||||
}
|
||||
.visit-trainning .month .Day {
|
||||
border: 1px #D5D4DF solid;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 14px;
|
||||
}
|
||||
.visit-trainning .month .inactive {
|
||||
width: 64px;
|
||||
height: 64 px;
|
||||
text-align: center;
|
||||
color: #A8A8A8;
|
||||
font-size: 14px;
|
||||
font-family: Inter;
|
||||
font-weight: 400;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
.visit-trainning .month .Weekdays {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
text-align: center;
|
||||
color: black;
|
||||
font-size: 14px;
|
||||
font-family: Inter;
|
||||
font-weight: 400;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
.visit-trainning .month .Su {
|
||||
color: #FF6666;
|
||||
}
|
||||
.visit-trainning .month .Sa {
|
||||
color: #3378C1;
|
||||
}
|
||||
.visit-trainning .month .today {
|
||||
background-color: #45539d;
|
||||
font-weight: bold;
|
||||
color: #fff;
|
||||
pointer-events: none;
|
||||
}
|
||||
.visit-trainning .Application {
|
||||
width: 430px;
|
||||
margin-top: 15px;
|
||||
float: right;
|
||||
}
|
||||
.visit-trainning .InputBox {
|
||||
width: 342px;
|
||||
height: 34px;
|
||||
background: white;
|
||||
border-radius: 6px;
|
||||
border: 1px solid rgba(66, 80, 102, 0.4);
|
||||
}
|
||||
.visit-trainning #Agency, .visit-trainning #Place {
|
||||
width: 160px;
|
||||
}
|
||||
.visit-trainning #Name {
|
||||
width: 91px;
|
||||
}
|
||||
.visit-trainning #Persons {
|
||||
width: 79px;
|
||||
}
|
||||
.visit-trainning #Tel, .visit-trainning #Place {
|
||||
margin-left: -13px;
|
||||
}
|
||||
.visit-trainning #Hope1, .visit-trainning #Hope2, .visit-trainning #Hope3 {
|
||||
width: 342px;
|
||||
margin-left: -20px;
|
||||
}
|
||||
.visit-trainning label {
|
||||
margin: 0 25px 0 20px;
|
||||
display: inline-block;
|
||||
text-align: left;
|
||||
line-height: 50px;
|
||||
font-size: 14px;
|
||||
}
|
||||
.visit-trainning .possible {
|
||||
width: 100px;
|
||||
height: 32px;
|
||||
padding: 5px;
|
||||
background: #E9F0F5;
|
||||
border-radius: 6px;
|
||||
border: none;
|
||||
}
|
||||
.visit-trainning .impossibility {
|
||||
width: 100px;
|
||||
height: 32px;
|
||||
padding: 5px;
|
||||
background: #EAEAEA;
|
||||
border-radius: 6px;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.visit-trainning-approval-system th,
|
||||
.visit-trainning-approval-system tr {
|
||||
height: 36px;
|
||||
}
|
||||
.visit-trainning-approval-system #Table_Main {
|
||||
width: 1020px;
|
||||
border: 1px solid #e9e9e9;
|
||||
text-align: center;
|
||||
}
|
||||
.visit-trainning-approval-system .Table_List {
|
||||
background: #e9eff4;
|
||||
}
|
||||
.visit-trainning-approval-system .caption {
|
||||
font-size: 11px;
|
||||
margin: 10px;
|
||||
}
|
||||
.visit-trainning-approval-system .HopeDay {
|
||||
color: #2e5aac;
|
||||
bordeR: 1px solid #89a7e0;
|
||||
padding: 5px;
|
||||
background: #fff;
|
||||
border-radius: 2px;
|
||||
}
|
||||
.visit-trainning-approval-system .cancel {
|
||||
border: 1px solid red;
|
||||
color: red;
|
||||
border-radius: 2px;
|
||||
padding: 4px 8px;
|
||||
background-color: #fff;
|
||||
}
|
||||
.visit-trainning-approval-system .HopeDay.clicked {
|
||||
background-color: #89a7e0;
|
||||
color: white;
|
||||
}
|
||||
.visit-trainning-approval-system .statusConfirmed {
|
||||
color: #2e5aac;
|
||||
}
|
||||
|
||||
/*# sourceMappingURL=style.css.map */
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"sourceRoot":"","sources":["sass/style.scss"],"names":[],"mappings":";AAAA;AACA;EAAM;;;AACN;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;AACA;EAAY;EAAoB;EAAiB;EAAgB;EAAkB;;;AACnF;EAAc;EAAoB;EAAiB;EAAgB;EAAuB;;;AAC1F;EAAgB;EAAoB;EAAiB;EAAgB;EAAuB;;;AAC5F;EAAc;EAAoB;EAAiB;EAAgB;EAA4B;;;AAE/F;AACA;EAAe;EAAe;EAAkB;EAAkB;EAAkB;;;AACpF;EAAe;EAAe;EAAkB;EAAkB;EAAkB;;;AACpF;EAAkB;EAAe;EAAkB;EAAkB;EAAkB;;;AACvF;EAAiB;EAAe;EAAkB;EAAkB;;;AAEpE;AACA;EAAY;EAAe;;;AAC3B;EAAY;EAAe;;;AAC3B;EAAe;EAAe;EAAkB;;;AAEhD;AACA;EAAY;;;AACZ;EAAU;;;AACV;EAAY;EAA0B;EAAsB;EAAkB;EAAoB;;;AAClG;EAAW;EAAe;EAA0B;EAAkB;;;AACtE;EAAW;EAAe;;;AAC1B;EAAW;EAAe;EAAyB;EAAqB;EAAoB;EAA2B;EAAc;;;AACrI;EAAW;EAAe;EAAyB;EAAoB;;;AACvE;EAAe;EAA0B;EAAsB;EAAkB;EAAoB;;;AAErG;AACA;EAAU;EAAoB;EAAgB;EAAgB;EAAuB;;;AACrF;EAAY;EAAoB;EAAgB;EAAgB;EAAuB;;;AACvF;EAAW;EAAoB;EAAgB;EAAgB;EAA4B;;;AAE3F;AACA;EAAY;EAAe;EAAkB;EAAe;;;AAC5D;EAAW;EAAe;EAAkB;;;AAG5C;AACA;EAAc;EAAe;EAAkB;EAAkB;EAAkB;;;AACnF;EAAgB;EAAe;EAAkB;EAAkB;EAAe;EAAkB;;;AACpG;EAAiB;EAAe;EAAkB;EAAkB;EAAe;;;AACnF;EAAe;EAAe;EAAkB;EAAkB;EAAe;EAAkB;;;AACnG;EAAkB;EAAe;EAAkB;EAAkB;;;AAErE;AACA;EAAa;EAAa;EAAiC;EAAwE;EAAwB;EAAiB;EAAkB;EAAkB;EAAkB;;;AAClO;EAAY;EAAa;EAAuB;EAAmB;EAAY;;;AAE/E;AACA;EAAa;;;AACb;EAAgB;EAAyB;EAAqB;;;AAE9D;AACA;EACI;EACH;EACG;EACA;EACA;;;AAEJ;EACI;EACA;;;AAEJ;EACI;EACA;;;AAEJ;EACI;EACA;;;AAEJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACC;EACA;EACA;EACA;EACA;;;AAEL;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAED;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;;AACA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;;AAEJ;EACI;;AACA;EACI;;AAEJ;EACI;EACA;EACA;EACA;EACA;;AACA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACI;;;AAOpB;EACI;;;AAEJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;AAwEA;;AAvEA;AAAA;EAEI;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGQ;EACI;;AACA;EACI;;AAOhB;EACI;;AAIY;EACI;EACA;EACA;EACA;EACA;EACA;;AACA;EACI;EACA;;AAQ5B;EACI;;AAEJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAEJ;EACI;;AAIJ;EACI;;AAEJ;EACI;EACA;;AAEJ;EACI;EACA;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;;AAEJ;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AACA;EACI;;;AAMZ;AACI;AAmBA;AA8IA;AAsCA;;AAtMA;EACI;EACA;EACA;;AAEJ;EACI;EACA;EACA;;AAEJ;EACI;;AAEJ;EACI;EACA;;AAIJ;EACI;;AAEJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACK;EACA;EACA;EACA;EACA;;AAEL;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;;AACA;EACI;EACA;EACA;EACA;;AAEJ;EACG;EACA;EACA;;AAEH;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEJ;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEJ;EACG;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEH;EACI;EACA;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEJ;EACI;;AAEJ;EACI;;AAEJ;EACI;EACA;EACA;EACA;;AAKR;EACI;EACA;EACA;;AAEJ;EACI;EACC;EACA;EACA;EACA;;AAEL;EACI;;AAEJ;EACI;;AAEJ;EACI;;AAEJ;EACI;;AAEJ;EACI;EACC;;AAGL;EACI;EACC;EACA;EACA;EACA;;AAKL;EACI;EACA;EACA;EACA;EACA;EACA;;AAEJ;EACK;EACD;EACA;EACA;EACA;EACA;;;AAMJ;AAAA;EAEI;;AAEJ;EACI;EACA;EACA;;AAEJ;EACI;;AAEJ;EACG;EACC;;AAIJ;EACI;EACA;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAEJ;EACG","file":"style.css"}
|
||||
|
|
@ -0,0 +1,120 @@
|
|||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
|
||||
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<script src="${pageContext.request.contextPath}/js/jquery/jquery-1.10.2.min.js"></script>
|
||||
<script src="${pageContext.request.contextPath}/js/admins/user.js"></script>
|
||||
<script src="${pageContext.request.contextPath}/js/admins/common.js"></script>
|
||||
<link rel="stylesheet" HREF="${pageContext.request.contextPath}/css/admins/style.css" type="text/css">
|
||||
|
||||
<script>
|
||||
var context = "${pageContext.request.contextPath}";
|
||||
|
||||
function changeStatus(button) {
|
||||
|
||||
button.classList.toggle("clicked");
|
||||
// 클릭된 HopeDay 버튼의 부모 요소(tr)를 가져옵니다.
|
||||
var row = button.parentElement.parentElement;
|
||||
|
||||
// 해당 열의 반려 버튼을 숨깁니다.
|
||||
var cancelButton = row.querySelector('.cancel');
|
||||
if (cancelButton) {
|
||||
cancelButton.style.display = 'none';
|
||||
}
|
||||
|
||||
// 클릭한 버튼의 날짜를 상태 열에 표시합니다.
|
||||
var statusCell = row.querySelectorAll('td')[10]; // 상태 칸 찾기
|
||||
statusCell.colSpan = "2"; // 상태 칸 확장
|
||||
statusCell.innerHTML = `${button.innerText} 예약 확정`;
|
||||
statusCell.classList.add("statusConfirmed");
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1><span class="main-title">방문교육 - </span><span class="sub-title">방문교육 신청 승인</span></h1>
|
||||
|
||||
<div class="visit-trainning-approval-system">
|
||||
<p class="caption">본 방문교육 신청 후 교육일정이 확정되기 전까지 변경 및 취소가 가능하며 일자 확정시 변경 및 취소는 불가하며, 확정일자를 클릭하여 공문 스캔본과 함께 신청서를
|
||||
이메일(ryujisong@kict.re.kr)로
|
||||
접수하셔야 합니다.</p>
|
||||
|
||||
<table id="Table_Main_1">
|
||||
<colgroup>
|
||||
<col style="width:40px;">
|
||||
<col style="width:180px;">
|
||||
<col style="width:90px;">
|
||||
<col style="width:90px;">
|
||||
<col style="width:100px;">
|
||||
<col style="width:120px;">
|
||||
<col style="width:50px;">
|
||||
<col style="width:85px;">
|
||||
<col style="width:85px;">
|
||||
<col style="width:85px;">
|
||||
<col style="width:35px;">
|
||||
<col style="width:35px;">
|
||||
</colgroup>
|
||||
<thead class="Table_List">
|
||||
<tr>
|
||||
<th>번호</th>
|
||||
<th>현장명</th>
|
||||
<th>기관명</th>
|
||||
<th>신청자</th>
|
||||
<th>연락처</th>
|
||||
<th>이메일</th>
|
||||
<th>예상인원</th>
|
||||
<th>1차희망일</th>
|
||||
<th>2차희망일</th>
|
||||
<th>3차희망일</th>
|
||||
<th colspan="2">상태</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>3</td>
|
||||
<td>용산구 재개발</td>
|
||||
<td>디비엔텍</td>
|
||||
<td>홍길동</td>
|
||||
<td>032-721-5678</td>
|
||||
<td>aaa@naver.com</td>
|
||||
<td>25명</td>
|
||||
<td><button class="HopeDay" onclick="changeStatus(this);">2024-10-11</button></td>
|
||||
<td><button class="HopeDay" onclick="changeStatus(this);">2024-10-13</button></td>
|
||||
<td><button class="HopeDay" onclick="changeStatus(this);">2024-10-15</button></td>
|
||||
<td colspan="2"><button class="cancel">반려</button></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>2</td>
|
||||
<td>로봇타워 신축공사</td>
|
||||
<td>디비엔텍</td>
|
||||
<td>홍길동</td>
|
||||
<td>032-721-5678</td>
|
||||
<td>aaa@naver.com</td>
|
||||
<td>30명</td>
|
||||
<td><button class="HopeDay" onclick="changeStatus(this);">2024-10-11</button></td>
|
||||
<td><button class="HopeDay" onclick="changeStatus(this);">2024-10-12</button></td>
|
||||
<td><button class="HopeDay" onclick="changeStatus(this);">2024-10-13</button></td>
|
||||
<td colspan="2"><button class="cancel">반려</button></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>1</td>
|
||||
<td>인천항만 부두 확장 공사</td>
|
||||
<td>디비엔텍</td>
|
||||
<td>홍길동</td>
|
||||
<td>032-721-5678</td>
|
||||
<td>aaa@naver.com</td>
|
||||
<td>40명</td>
|
||||
<td><button class="HopeDay" onclick="changeStatus(this);">2024-10-11</button></td>
|
||||
<td><button class="HopeDay" onclick="changeStatus(this);">2024-10-12</button></td>
|
||||
<td><button class="HopeDay" onclick="changeStatus(this);">2024-10-13</button></td>
|
||||
<td colspan="2"><button class="cancel">반려</button></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,241 @@
|
|||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
|
||||
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<script src="${pageContext.request.contextPath}/js/jquery/jquery-1.10.2.min.js"></script>
|
||||
<script src="${pageContext.request.contextPath}/js/admins/user.js"></script>
|
||||
<script src="${pageContext.request.contextPath}/js/admins/common.js"></script>
|
||||
<link rel="stylesheet" HREF="${pageContext.request.contextPath}/css/admins/style.css" type="text/css">
|
||||
|
||||
<script>
|
||||
var context = "${pageContext.request.contextPath}";
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
const daysCells = document.querySelectorAll('.Day'); // 각 날짜 셀을 가져옴
|
||||
const yyyyMmElement = document.querySelector('.yyyy-mm');
|
||||
const prevMonthBtn = document.getElementById('prevMonth');
|
||||
const nextMonthBtn = document.getElementById('nextMonth');
|
||||
|
||||
var currentYear = new Date().getFullYear();
|
||||
var currentMonth = new Date().getMonth(); // 0 = January, 11 = December
|
||||
|
||||
// 달력을 렌더링하는 함수
|
||||
function renderCalendar() {
|
||||
const monthNames = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"];
|
||||
const firstDayOfMonth = new Date(currentYear, currentMonth, 1).getDay(); // 해당 월의 첫 번째 날의 요일
|
||||
const lastDateOfMonth = new Date(currentYear, currentMonth + 1, 0).getDate(); // 해당 월의 마지막 날짜
|
||||
const today = new Date();
|
||||
|
||||
// 이전 달의 마지막 날짜 계산
|
||||
const lastDateOfPrevMonth = new Date(currentYear, currentMonth, 0).getDate(); // 지난달의 마지막 날짜
|
||||
|
||||
// 달의 헤더 업데이트
|
||||
yyyyMmElement.textContent = currentYear + '.' + monthNames[currentMonth];
|
||||
|
||||
// 모든 날짜 셀 초기화 (빈칸으로 채우기)
|
||||
daysCells.forEach(cell => {
|
||||
cell.textContent = ''; // 셀을 비운다
|
||||
cell.classList.remove('today', 'Su', 'Sa', 'inactive'); // 추가된 클래스를 초기화
|
||||
});
|
||||
|
||||
// 지난달 날짜를 첫 주에 채우기
|
||||
let dayCounter = 1;
|
||||
for (let i = firstDayOfMonth - 1; i >= 0; i--) {
|
||||
const cell = daysCells[i];
|
||||
cell.textContent = lastDateOfPrevMonth - (firstDayOfMonth - 1 - i); // 지난달의 마지막 며칠 표시
|
||||
cell.classList.add('inactive'); // 지난달 날짜에 비활성화 클래스 추가
|
||||
}
|
||||
|
||||
// 이번 달 날짜 채우기
|
||||
for (let i = firstDayOfMonth; i < firstDayOfMonth + lastDateOfMonth; i++) {
|
||||
const cell = daysCells[i];
|
||||
cell.textContent = dayCounter; // 날짜 숫자 추가
|
||||
|
||||
// 오늘 날짜 강조
|
||||
if (currentYear === today.getFullYear() && currentMonth === today.getMonth() && dayCounter === today.getDate()) {
|
||||
cell.classList.add('today');
|
||||
}
|
||||
|
||||
// 일요일은 빨간색, 토요일은 파란색
|
||||
if (i % 7 === 0) {
|
||||
cell.classList.add('Su'); // 일요일
|
||||
} else if (i % 7 === 6) {
|
||||
cell.classList.add('Sa'); // 토요일
|
||||
}
|
||||
|
||||
dayCounter++;
|
||||
}
|
||||
|
||||
// 다음 달 날짜를 마지막 주에 채우기
|
||||
let nextMonthCounter = 1;
|
||||
for (let i = firstDayOfMonth + lastDateOfMonth; i < daysCells.length; i++) {
|
||||
const cell = daysCells[i];
|
||||
cell.textContent = nextMonthCounter; // 다음 달의 첫 며칠 표시
|
||||
cell.classList.add('inactive'); // 다음 달 날짜에 비활성화 클래스 추가
|
||||
nextMonthCounter++;
|
||||
}
|
||||
}
|
||||
|
||||
// 이전 달로 이동
|
||||
prevMonthBtn.addEventListener('click', () => {
|
||||
currentMonth--;
|
||||
if (currentMonth < 0) {
|
||||
currentMonth = 11;
|
||||
currentYear--;
|
||||
}
|
||||
renderCalendar();
|
||||
});
|
||||
|
||||
// 다음 달로 이동
|
||||
nextMonthBtn.addEventListener('click', () => {
|
||||
currentMonth++;
|
||||
if (currentMonth > 11) {
|
||||
currentMonth = 0;
|
||||
currentYear++;
|
||||
}
|
||||
renderCalendar();
|
||||
});
|
||||
|
||||
// 초기 달력 렌더링
|
||||
renderCalendar();
|
||||
});
|
||||
|
||||
|
||||
// 관리자화면
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
|
||||
const rows = document.querySelectorAll('#Table_contents tbody tr td:nth-child(7)');
|
||||
|
||||
rows.forEach(function (cell) {
|
||||
|
||||
const text = cell.textContent;
|
||||
const number = parseInt(text.match(/\d+/));
|
||||
|
||||
if (number >= 100) {
|
||||
cell.style.color = 'red';
|
||||
} else {
|
||||
cell.style.color = 'blue';
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1><span class="main-title">방문교육 - </span><span class="sub-title">방문가능 일자 지정</span></h1>
|
||||
|
||||
<div class="visit-trainning">
|
||||
<div class="page-content-wrapper">
|
||||
<div class="page-content">
|
||||
<div class="content-bg">
|
||||
<div class="CalendarOverlay">
|
||||
<div class="Calendar">
|
||||
<div class="Header">
|
||||
<!-- 관리자화면 버튼 -->
|
||||
<div>
|
||||
<button class="possible">당해 일괄불가</button>
|
||||
<button class="possible">당월 일괄불가</button>
|
||||
</div>
|
||||
<div class="Frame9">
|
||||
<div class="Chevron">
|
||||
<div class="Frame10">
|
||||
<img src="${pageContext.request.contextPath}/images/renew/chevron.svg" alt="chevron-prev" class="page-prev" id="prevMonth">
|
||||
</div>
|
||||
</div>
|
||||
<div class="yyyy-mm">
|
||||
2024.08
|
||||
</div>
|
||||
<div class="Chevron">
|
||||
<div class="Frame10">
|
||||
<img src="${pageContext.request.contextPath}/images/renew/chevron.svg" alt="chevron-next" class="page-next" id="nextMonth">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<button class="impossibility">당월 일괄가능</button>
|
||||
<button class="impossibility">당해 일괄가능</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="month">
|
||||
<div class="Days">
|
||||
<div class="Row">
|
||||
<div class="Cell">
|
||||
<div class="Week">일</div>
|
||||
</div>
|
||||
<div class="Cell">
|
||||
<div class="Week">월</div>
|
||||
</div>
|
||||
<div class="Cell">
|
||||
<div class="Week">화</div>
|
||||
</div>
|
||||
<div class="Cell">
|
||||
<div class="Week">수</div>
|
||||
</div>
|
||||
<div class="Cell">
|
||||
<div class="Week">목</div>
|
||||
</div>
|
||||
<div class="Cell">
|
||||
<div class="Week">금</div>
|
||||
</div>
|
||||
<div class="Cell">
|
||||
<div class="Week">토</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="Row">
|
||||
<div class="Cell Day"></div>
|
||||
<div class="Cell Day"></div>
|
||||
<div class="Cell Day"></div>
|
||||
<div class="Cell Day"></div>
|
||||
<div class="Cell Day"></div>
|
||||
<div class="Cell Day"></div>
|
||||
<div class="Cell Day"></div>
|
||||
</div>
|
||||
<div class="Row">
|
||||
<div class="Cell Day"></div>
|
||||
<div class="Cell Day"></div>
|
||||
<div class="Cell Day"></div>
|
||||
<div class="Cell Day"></div>
|
||||
<div class="Cell Day"></div>
|
||||
<div class="Cell Day"></div>
|
||||
<div class="Cell Day"></div>
|
||||
</div>
|
||||
<div class="Row">
|
||||
<div class="Cell Day"></div>
|
||||
<div class="Cell Day"></div>
|
||||
<div class="Cell Day"></div>
|
||||
<div class="Cell Day"></div>
|
||||
<div class="Cell Day"></div>
|
||||
<div class="Cell Day"></div>
|
||||
<div class="Cell Day"></div>
|
||||
</div>
|
||||
<div class="Row">
|
||||
<div class="Cell Day"></div>
|
||||
<div class="Cell Day"></div>
|
||||
<div class="Cell Day"></div>
|
||||
<div class="Cell Day"></div>
|
||||
<div class="Cell Day"></div>
|
||||
<div class="Cell Day"></div>
|
||||
<div class="Cell Day"></div>
|
||||
</div>
|
||||
<div class="Row">
|
||||
<div class="Cell Day"></div>
|
||||
<div class="Cell Day"></div>
|
||||
<div class="Cell Day"></div>
|
||||
<div class="Cell Day"></div>
|
||||
<div class="Cell Day"></div>
|
||||
<div class="Cell Day"></div>
|
||||
<div class="Cell Day"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1 +1,10 @@
|
|||
explorer C:\Users\dbnt\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\geoinfo_admin
|
||||
|
||||
|
||||
rem For 192.168.10.20
|
||||
hostname | find "DESKTOP-9C42CR8" > nul
|
||||
if %errorlevel% == 0 (
|
||||
explorer D:\app_geoinfo\app\eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\old-geoinfo-or-kr-admin
|
||||
) else (
|
||||
echo goodbye
|
||||
)
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
explorer src\main\webapp\css\admins\sass\
|
||||
|
|
@ -188,7 +188,10 @@ public class MainController {
|
|||
if( getMemberInfo != null && getMemberInfo.get("cls") != null) {
|
||||
System.out.println("mainService.getMemberInfo - 후:" + getMemberInfo.get("cls").toString() + "- IP:" + ipAdd);
|
||||
} else {
|
||||
System.out.println("mainService.getMemberInfo - 후: getMemberInfo.get(\"cls\") is null - IP:" + ipAdd);
|
||||
System.out.println("mainService.getMemberInfo - 후: getMemberInfo.get(\"cls\") is null - \n" +
|
||||
"ID:[" + params.get("id") == null ? "null" : params.get("id") + "] " + "\n" +
|
||||
"Password:[" + params.get("pw") == null ? "null" : params.get("pw") + "] " + "\n" +
|
||||
"IP:" + ipAdd);
|
||||
}
|
||||
} else {
|
||||
System.out.println("mainService.getMemberInfo - 후: null - IP:" + ipAdd);
|
||||
|
|
@ -201,6 +204,7 @@ public class MainController {
|
|||
if(ip.equals(ipAdd)) {
|
||||
isAuth = true;
|
||||
System.out.println("관리자 접속을 허용합니다:" + ipAdd);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(isAuth) {
|
||||
|
|
|
|||
|
|
@ -742,6 +742,106 @@ public class GeneralUserMngController {
|
|||
jsonResponse.put("message", failMsg);
|
||||
}
|
||||
|
||||
System.out.println("\n--------------------------------------------------------------\n" +
|
||||
request.getRequestURI() + " OUT:" +
|
||||
"\n--------------------------------------------------------------\n" +
|
||||
"jsonResponse.toJSONString():[" + jsonResponse.toJSONString() + "]\n" +
|
||||
"\n--------------------------------------------------------------\n");
|
||||
|
||||
return jsonResponse;
|
||||
}
|
||||
|
||||
/**
|
||||
* 집합교육 수정
|
||||
* @param request
|
||||
* @param strJSON
|
||||
* @param response
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping(value = "admins/user/home-training-index/update.do", method = RequestMethod.POST)
|
||||
@ResponseBody
|
||||
public JSONObject updateHomeTraining(
|
||||
HttpServletRequest request,
|
||||
@RequestBody String strJSON,
|
||||
HttpServletResponse response) {
|
||||
|
||||
|
||||
JSONObject jsonResponse = new JSONObject();
|
||||
|
||||
System.out.println(
|
||||
"\n--------------------------------------------------------------\n" +
|
||||
request.getRequestURI() + " IN:" +
|
||||
"\n--------------------------------------------------------------\n" +
|
||||
"strJSON" + strJSON + "\n" +
|
||||
"\n--------------------------------------------------------------\n"
|
||||
);
|
||||
JSONParser jsonParser = new JSONParser();
|
||||
JSONArray jsonArr = null;
|
||||
boolean isFail = false;
|
||||
String failMsg = "";
|
||||
try {
|
||||
jsonArr = (JSONArray)jsonParser.parse(strJSON);
|
||||
for (Object obj : jsonArr) {
|
||||
JSONObject jsonObject = (JSONObject) obj;
|
||||
|
||||
// JSONObject를 HashMap으로 변환
|
||||
HashMap<String, Object> params = new HashMap<>();
|
||||
for (Object key : jsonObject.keySet()) {
|
||||
String keyStr = (String) key;
|
||||
Object value = jsonObject.get(keyStr);
|
||||
params.put(keyStr, value);
|
||||
}
|
||||
try {
|
||||
HashMap<String, Object> hashMap = homeTrainingService.updateHomeTraining(request, response, params);
|
||||
int nRetCode = MyUtil.getIntegerFromObject(hashMap.get("p_result_code"));
|
||||
String lpszRetMsg = MyUtil.getStringFromObject(hashMap.get("p_err_msg"));
|
||||
|
||||
if( nRetCode == 100 ) {
|
||||
jsonResponse.put("resultCode", nRetCode);
|
||||
jsonResponse.put("result", "true");
|
||||
jsonResponse.put("message", "수정이 완료되었습니다.");
|
||||
} else {
|
||||
if( nRetCode == 11 ) {
|
||||
lpszRetMsg += "\n" +
|
||||
"사업명: " + params.get("constName");
|
||||
}
|
||||
jsonResponse.put("resultCode", nRetCode);
|
||||
jsonResponse.put("result", "false");
|
||||
jsonResponse.put("message", lpszRetMsg);
|
||||
|
||||
isFail = true;
|
||||
failMsg = lpszRetMsg;
|
||||
break;
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
// TODO Auto-generated catch block
|
||||
String strTxt =
|
||||
"---------- BUG REPORTING START ----------" + "\n" +
|
||||
"에러 문구:[" + request.getRequestURI() + " " + "]" + "\n" +
|
||||
"strJSON:[\n" + strJSON + "\n]\n" +
|
||||
"e.getMessage():[\n" + e.getMessage() + "\n]\n" + "\n" +
|
||||
"new Date().toString():[" + new Date().toString() + "]\n" + "\n" +
|
||||
"---------- BUG REPORTING END ----------" + "\n" +
|
||||
"";
|
||||
System.out.println(strTxt);
|
||||
jsonResponse.put("resultCode", -1);
|
||||
jsonResponse.put("result", "false");
|
||||
jsonResponse.put("message", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
} catch (org.json.simple.parser.ParseException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
if( isFail ) {
|
||||
jsonResponse.put("resultCode", -2);
|
||||
jsonResponse.put("result", "false");
|
||||
jsonResponse.put("message", failMsg);
|
||||
}
|
||||
|
||||
System.out.println("\n--------------------------------------------------------------\n" +
|
||||
request.getRequestURI() + " OUT:" +
|
||||
"\n--------------------------------------------------------------\n" +
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import egovframework.rte.psl.dataaccess.util.EgovMap;
|
|||
@Mapper("homeTrainingMapper")
|
||||
public interface HomeTrainingMapper {
|
||||
public HashMap<String, Object> callSpAddHomeTrainingReg(HashMap<String, Object> params) throws SQLException;
|
||||
public HashMap<String, Object> callSpUdtHomeTrainingReg(HashMap<String, Object> params) throws SQLException;
|
||||
public List<EgovMap> callSpGetHomeTrainingReg(HashMap<String, Object> params) throws SQLException;
|
||||
public long callSpCntHomeTrainingReg(HashMap<String, Object> params) throws SQLException;
|
||||
public List<EgovMap> callSpGetHomeTrainingReq(HashMap<String, Object> params) throws SQLException;
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import org.json.simple.JSONObject;
|
|||
public interface HomeTrainingService {
|
||||
|
||||
HashMap<String, Object> addHomeTraining(HttpServletRequest request, HttpServletResponse response, HashMap<String, Object> params) throws Exception;
|
||||
HashMap<String, Object> updateHomeTraining(HttpServletRequest request, HttpServletResponse response, HashMap<String, Object> params) throws Exception;
|
||||
void getHomeTraining(HttpServletRequest request, HttpServletResponse response, JSONObject jsonResponse, HashMap<String, Object> params) throws Exception;
|
||||
void getHomeTrainingItemList(HttpServletRequest request, HttpServletResponse response, JSONObject jsonResponse, HashMap<String, Object> params) throws Exception;
|
||||
HashMap<String, Object> deleteHomeTrainingItem(HttpServletRequest request, HttpServletResponse response, HashMap<String, Object> params) throws Exception;
|
||||
|
|
|
|||
|
|
@ -58,6 +58,37 @@ public class HomeTrainingServiceImpl implements HomeTrainingService {
|
|||
|
||||
}
|
||||
|
||||
@Override
|
||||
public HashMap<String, Object> updateHomeTraining(HttpServletRequest request, HttpServletResponse response, HashMap<String, Object> params) throws Exception {
|
||||
|
||||
if (!UserInfo.isValidSession(request, response, "admin")) {
|
||||
throw new Exception("로그인이 필요한 서비스입니다.");
|
||||
}
|
||||
|
||||
params.put("trainingAdmin", "류지송");
|
||||
params.put("trainingTel", "031-995-0934");
|
||||
String userId = (String)request.getSession().getAttribute("admin.userID");
|
||||
params.put("userId", userId);
|
||||
String str = MyUtil.getStringFromObject( params.get("trainingDatetime") );
|
||||
// DateTimeFormatter를 사용하여 문자열을 LocalDateTime으로 파싱합니다.
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
|
||||
LocalDateTime dateTime = LocalDateTime.parse(str, formatter);
|
||||
Timestamp timestamp = Timestamp.valueOf(dateTime);
|
||||
params.put("trainingDatetime", timestamp);
|
||||
|
||||
|
||||
params.put("wvtRegId", MyUtil.getLongFromObject( params.get("wvtRegId")) );
|
||||
|
||||
|
||||
try {
|
||||
homeTrainingMapper.callSpUdtHomeTrainingReg(params);
|
||||
return params;
|
||||
} catch (SQLException e) {
|
||||
throw new Exception( e.getMessage() );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void getHomeTraining(HttpServletRequest request, HttpServletResponse response, JSONObject jsonResponse, HashMap<String, Object> params) throws Exception {
|
||||
|
|
|
|||
|
|
@ -25,6 +25,22 @@
|
|||
) }
|
||||
</select>
|
||||
|
||||
<select id="callSpUdtHomeTrainingReg" parameterType="map" statementType="CALLABLE">
|
||||
{ CALL SP_UDT_HOME_TRAINING_REG(
|
||||
#{wvtRegId},
|
||||
#{trainingName},
|
||||
#{trainingDatetime},
|
||||
#{trainingLocation},
|
||||
#{trainingAdmin},
|
||||
#{trainingTel},
|
||||
#{regStartDate},
|
||||
#{regEndDate},
|
||||
#{userId},
|
||||
#{p_result_code, mode=OUT, jdbcType=INTEGER},
|
||||
#{p_err_msg, mode=OUT, jdbcType=VARCHAR}
|
||||
) }
|
||||
</select>
|
||||
|
||||
<!--
|
||||
p_wvt_reg_id : 조회할 레코드의 일련번호(숫자)
|
||||
p_training_name : 집합교육명
|
||||
|
|
|
|||
|
|
@ -14,13 +14,10 @@ dataconnection1.version=
|
|||
|
||||
#dataconnection1.url=jdbc:oracle:thin:@192.168.0.29:1521:xe
|
||||
#dataconnection1.url=jdbc:oracle:thin:@192.168.0.8:3452:orcl
|
||||
#dataconnection1.url=jdbc:oracle:thin:@118.219.150.34:1521:ORAGEODEV
|
||||
dataconnection1.url=jdbc:oracle:thin:@grok-10.com:1521:ORAGEODEV
|
||||
|
||||
dataconnection1.url=jdbc:oracle:thin:@118.219.150.34:1521:ORAGEODEV
|
||||
|
||||
dataconnection1.user=geoinfo
|
||||
#dataconnection1.password=geoinfo
|
||||
dataconnection1.password=dbnt060928!rlaxogh
|
||||
dataconnection1.password=geoinfo
|
||||
dataconnection1.encoding=
|
||||
|
||||
dataconnection2.conntype=jdbc
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@
|
|||
}
|
||||
|
||||
|
||||
function downloadTableAsCSV(tableId) {
|
||||
function downloadTableAsCSVUtf8(tableId) {
|
||||
|
||||
let filename = getCurrentTimeFormatted() + '_' + String(document.getElementById('home-visit-item-training-name').innerHTML).replace(/ /g, "_") + '.csv';
|
||||
|
||||
|
|
@ -127,8 +127,7 @@
|
|||
for (var i = 0; i < rows.length; i++) {
|
||||
var row = [], cols = rows[i].querySelectorAll("td, th");
|
||||
|
||||
for (var j =
|
||||
0; j < cols.length; j++) {
|
||||
for (var j = 0; j < cols.length; j++) {
|
||||
// 특수 문자 처리 및 공백 제거
|
||||
var data = cols[j].innerText.replace(/(\r\n|\n|\r)/gm, "").replace(/(\s\s)/gm, " ");
|
||||
data = data.replace(/"/g, '""'); // 큰따옴표 이스케이프
|
||||
|
|
@ -144,8 +143,7 @@
|
|||
var link = document.createElement("a");
|
||||
link.style.display = "none";
|
||||
link.setAttribute("target", "_blank");
|
||||
link.setAttribute("href", 'data:text/csv;charset=utf-8,' + encodeURIComponent(
|
||||
csvString));
|
||||
link.setAttribute("href", 'data:text/csv;charset=utf-8,' + encodeURIComponent( csvString ));
|
||||
link.setAttribute("download", filename);
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
|
|
@ -153,6 +151,51 @@
|
|||
.removeChild(link);
|
||||
}
|
||||
|
||||
|
||||
function downloadTableAsCSVAscii(tableId) {
|
||||
let filename = getCurrentTimeFormatted() + '_' + String(document.getElementById('home-visit-item-training-name').innerHTML).replace(/ /g, "_") + '.csv';
|
||||
|
||||
|
||||
// 테이블 요소 가져오기
|
||||
var table = document.getElementById(tableId);
|
||||
|
||||
// CSV 문자열 생성
|
||||
var csv = [];
|
||||
var rows = table.querySelectorAll("tr");
|
||||
|
||||
for (var i = 0; i < rows.length; i++) {
|
||||
var row = [], cols = rows[i].querySelectorAll("td, th");
|
||||
|
||||
for (var j = 0; j < cols.length; j++) {
|
||||
// 특수 문자 처리 및 공백 제거
|
||||
var data = cols[j].innerText.replace(/(\r\n|\n|\r)/gm, "").replace(/(\s\s)/gm, " ");
|
||||
data = data.replace(/"/g, '""'); // 큰따옴표 이스케이프
|
||||
row.push('"' + data + '"');
|
||||
}
|
||||
|
||||
csv.push(row.join(","));
|
||||
}
|
||||
|
||||
var csvString = csv.join("\n");
|
||||
|
||||
var BOM = "\uFEFF";
|
||||
var csvData = BOM + csvString;
|
||||
var blob = new Blob([csvData], { type: "text/csv;charset=windows-1252" });
|
||||
|
||||
// CSV 파일 다운로드
|
||||
var link = document.createElement("a");
|
||||
link.style.display = "none";
|
||||
link.setAttribute("target", "_blank");
|
||||
link.setAttribute("href", window.URL.createObjectURL(blob) );
|
||||
link.setAttribute("download", filename);
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
document.body
|
||||
.removeChild(link);
|
||||
|
||||
}
|
||||
|
||||
|
||||
function onClickCourseItem(e) {
|
||||
const wvtRegId = e.getAttribute('data-seq');
|
||||
const trainingName = e.getAttribute('data-training-name');
|
||||
|
|
@ -199,7 +242,10 @@
|
|||
|
||||
homeVisitItemListHTML +=
|
||||
`
|
||||
<tr onClick="onClickCourseItem(this)" data-seq="` + data[idx].whtRegId +`" data-training-name="` + data[idx].trainingName +`" >
|
||||
<tr onClick="onClickCourseItem(this)"
|
||||
data-seq="` + data[idx].whtRegId +`" ` +
|
||||
`data-training-name="` + trainingName + `" ` +
|
||||
`>
|
||||
<td>` + data[idx].reqName + `</td>
|
||||
<td>` + data[idx].companyName + `</td>
|
||||
<td>` + data[idx].reqDept + `</td>
|
||||
|
|
@ -272,9 +318,26 @@
|
|||
|
||||
homeVisitListHTML +=
|
||||
`
|
||||
<tr onClick="onClickCourseItem(this)" data-seq="` + data[idx].whtRegId +`" data-training-name="` + data[idx].trainingName +`" >
|
||||
<td><input type="radio" name="wht-reg-id" value="` + data[idx].whtRegId +`" data-seq="` + data[idx].whtRegId +`" data-training-name="` + data[idx].trainingName +`"></td>
|
||||
<td>` + data[idx].whtRegId + `</td>
|
||||
<tr onClick="onClickCourseItem(this)" ` +
|
||||
`data-seq="` + data[idx].whtRegId +`" ` +
|
||||
`data-training-name="` + data[idx].trainingName +`" ` +
|
||||
`data-training-date-time="` + data[idx].trainingDatetime +`" ` +
|
||||
`data-training-location="` + data[idx].trainingLocation +`" ` +
|
||||
`data-reg-start-date="` + data[idx].regStartDate +`" ` +
|
||||
`data-reg-end-date="` + data[idx].regEndDate +`" ` +
|
||||
`data-attendance="` + data[idx].attendance +`" ` +
|
||||
`data-state-code="` + data[idx].stateCode +`" ` +
|
||||
`>
|
||||
<td><input type="radio" name="wht-reg-id" value="` + data[idx].whtRegId +`" data-seq="` + data[idx].whtRegId + `" ` +
|
||||
`data-training-name="` + data[idx].trainingName +`" ` +
|
||||
`data-training-date-time="` + data[idx].trainingDatetime +`" ` +
|
||||
`data-training-location="` + data[idx].trainingLocation +`" ` +
|
||||
`data-reg-start-date="` + data[idx].regStartDate +`" ` +
|
||||
`data-reg-end-date="` + data[idx].regEndDate +`" ` +
|
||||
`data-attendance="` + data[idx].attendance +`" ` +
|
||||
`data-state-code="` + data[idx].stateCode +`" ` +
|
||||
`></td>
|
||||
<td>` + aliveEducationsCount + `</td>
|
||||
<td>` + data[idx].trainingName + `</td>
|
||||
<td>` + formatUnixTimestamp(data[idx].trainingDatetime) + `</td>
|
||||
<td>` + data[idx].trainingLocation + `</td>
|
||||
|
|
@ -431,13 +494,150 @@
|
|||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
updateList();
|
||||
});
|
||||
|
||||
|
||||
function openModal(e) {
|
||||
|
||||
const whtRegIdEle = document.querySelector('input[name="wht-reg-id"]:checked');
|
||||
|
||||
if( typeof whtRegIdEle === 'undefined' ) {
|
||||
alert('수정할 교육을 선택하십시오');
|
||||
return false;
|
||||
}
|
||||
|
||||
if( whtRegIdEle == false ) {
|
||||
alert('수정할 교육을 선택하십시오');
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
const wvtRegId = whtRegIdEle.getAttribute('data-seq');
|
||||
const trainingName = whtRegIdEle.getAttribute('data-training-name');
|
||||
const trainingDateTime = whtRegIdEle.getAttribute('data-training-date-time');
|
||||
const trainingLocation = whtRegIdEle.getAttribute('data-training-location');
|
||||
const regStartDate = whtRegIdEle.getAttribute('data-reg-start-date');
|
||||
const regEndDate = whtRegIdEle.getAttribute('data-reg-end-date');
|
||||
|
||||
const modifyWvtRegIdEle = document.getElementById('modify-wvt-reg-id');
|
||||
if( modifyWvtRegIdEle ) {
|
||||
modifyWvtRegIdEle.value = wvtRegId;
|
||||
}
|
||||
const modifyTrainingNameEle = document.getElementById('modify-training-name');
|
||||
if( modifyTrainingNameEle ) {
|
||||
modifyTrainingNameEle.value = trainingName;
|
||||
}
|
||||
const modifyTrainingDatetimeEle = document.getElementById('modify-training-datetime');
|
||||
if( modifyTrainingDatetimeEle ) {
|
||||
const d = new Date(Number(trainingDateTime));
|
||||
const dateTimeLocalValue = (new Date(d.getTime() - d.getTimezoneOffset() * 60000).toISOString()).slice(0, -1);
|
||||
modifyTrainingDatetimeEle.value = dateTimeLocalValue;
|
||||
}
|
||||
const modifyTrainingLocationEle = document.getElementById('modify-training-location');
|
||||
if( modifyTrainingLocationEle ) {
|
||||
modifyTrainingLocationEle.value = trainingLocation;
|
||||
}
|
||||
const modifyRegStartDateEle = document.getElementById('modify-reg-start-date');
|
||||
if( modifyRegStartDateEle ) {
|
||||
const d = new Date(Number(regStartDate));
|
||||
const dateTimeLocalValue = (new Date(d.getTime() - d.getTimezoneOffset() * 60000).toISOString()).slice(0, -14);
|
||||
modifyRegStartDateEle.value = dateTimeLocalValue;
|
||||
}
|
||||
const modifyRegEndDateEle = document.getElementById('modify-reg-end-date');
|
||||
if( modifyRegEndDateEle ) {
|
||||
const d = new Date(Number(regEndDate));
|
||||
const dateTimeLocalValue = (new Date(d.getTime() - d.getTimezoneOffset() * 60000).toISOString()).slice(0, -14);
|
||||
modifyRegEndDateEle.value = dateTimeLocalValue;
|
||||
}
|
||||
|
||||
|
||||
const myModalEle = document.getElementById('my-modal');
|
||||
|
||||
myModalEle.style.display = "block";
|
||||
|
||||
|
||||
// 모달 바깥 영역 클릭 시 모달 닫기
|
||||
window.onclick = function(event) {
|
||||
if (event.target == e) {
|
||||
e.style.display = "none";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function closeMyModal(e) {
|
||||
const myModalEle = document.getElementById('my-modal');
|
||||
myModalEle.style.display = "none";
|
||||
const modifyButtonEle = document.getElementById('modify-button');
|
||||
modifyButtonEle.style.display = "inline-block";
|
||||
}
|
||||
|
||||
function onClickModifyButton(e) {
|
||||
var dataIndexValue;
|
||||
|
||||
var jsonData = new Array();
|
||||
for (var i = 0; i < 1 ; i++) { // 여러 개를 한 번에 입력받는다면 입력받는 레코드만큼 loop를 순환하도록 수정되어야 한다.
|
||||
var jsonItem = {};
|
||||
//dataIndexValue = tableDataElements[i].getAttribute('data-index');
|
||||
|
||||
//wvtRegId
|
||||
var wvtRegIdEle = document.getElementById('modify-wvt-reg-id');
|
||||
if (wvtRegIdEle) {
|
||||
jsonItem.wvtRegId = wvtRegIdEle.value;
|
||||
}
|
||||
|
||||
// 집합교육명
|
||||
var trainingNameEle = document.getElementById('modify-training-name');
|
||||
if (trainingNameEle) {
|
||||
jsonItem.trainingName = trainingNameEle.value;
|
||||
}
|
||||
// 교육일시
|
||||
var trainingDatetimeEle = document.getElementById('modify-training-datetime');
|
||||
if (trainingDatetimeEle) {
|
||||
jsonItem.trainingDatetime = trainingDatetimeEle.value;
|
||||
}
|
||||
// 교육장소
|
||||
var trainingLocationEle = document.getElementById('modify-training-location');
|
||||
if (trainingLocationEle) {
|
||||
jsonItem.trainingLocation = trainingLocationEle.value;
|
||||
}
|
||||
// 접수기간 - 시작
|
||||
var regStartDateEle = document.getElementById('modify-reg-start-date');
|
||||
if (regStartDateEle) {
|
||||
jsonItem.regStartDate = regStartDateEle.value;
|
||||
}
|
||||
// 접수기간 - 종료
|
||||
var regEndDateEle = document.getElementById('modify-reg-end-date');
|
||||
if (regEndDateEle) {
|
||||
jsonItem.regEndDate = regEndDateEle.value;
|
||||
}
|
||||
jsonData.push(jsonItem);
|
||||
}
|
||||
|
||||
console.log('%o', jsonData);
|
||||
|
||||
|
||||
|
||||
xhr.open('POST', 'home-training-index/update.do', true);
|
||||
xhr.setRequestHeader('Content-type', 'application/json');
|
||||
|
||||
xhr.onreadystatechange = function() {
|
||||
if (xhr.readyState === 4 && xhr.status === 200) {
|
||||
// 요청 성공 시 처리
|
||||
console.log(xhr.responseText);
|
||||
const obj = JSON.parse(xhr.responseText);
|
||||
closeMyModal(null);
|
||||
updateList();
|
||||
alert(obj.message);
|
||||
} else if (xhr.readyState === 4) {
|
||||
// 요청 실패 시 처리
|
||||
console.error('요청 실패:', xhr.status);
|
||||
}
|
||||
};
|
||||
|
||||
xhr.send(JSON.stringify(jsonData));
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
|
||||
|
|
@ -445,7 +645,7 @@
|
|||
<h1>집합교육</h1>
|
||||
<div class="home-trainning">
|
||||
<div class="contentBtn">
|
||||
<button class="modify" onClick="alert('기능 준비중');">수정</button>
|
||||
<button id="modify-button" class="modify" onClick="openModal(this);">수정</button>
|
||||
<button class="delete" onClick="onClickDeleteCourseItem(this);">삭제</button>
|
||||
</div>
|
||||
<table class="Table_Main course-list-table table-contents" id="course-list-table">
|
||||
|
|
@ -508,7 +708,7 @@
|
|||
<div class="home-visit-item" id="home-visit-item">
|
||||
<h2 class="DateTitle">교육 대상자 명단</h2>
|
||||
<span class="DateText">⁕ 신청 집합교육명 : <span id="home-visit-item-training-name" class="home-visit-item-training-name"></span>
|
||||
<button onClick="downloadTableAsCSV('home-visit-item-table')" id="export-list-of-participants-attending-the-education" class="export-list-of-participants-attending-the-education" style="float: right; margin-bottom: 10px;">교육 대상자 명단 내보내기</button>
|
||||
<button onClick="downloadTableAsCSVAscii('home-visit-item-table')" id="export-list-of-participants-attending-the-education" class="export-list-of-participants-attending-the-education" style="float: right; margin-bottom: 10px;">교육 대상자 명단 내보내기</button>
|
||||
</span>
|
||||
<table class="Table_Main table-contents" id="home-visit-item-table">
|
||||
<colgroup>
|
||||
|
|
@ -535,6 +735,37 @@
|
|||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div id="my-modal" class="my-modal">
|
||||
<div id="my-modal-box" class="modal-box">
|
||||
<div class="modal-content">
|
||||
<span id="my-modal-close" class="my-modal-close" onClick="closeMyModal(this);">×</span>
|
||||
<div class="my-modal-modify-home-training-header">
|
||||
교육 내용 수정
|
||||
</div>
|
||||
<div class="my-modal-modify-home-training-body">
|
||||
<div class="input-item">
|
||||
<input type="hidden" id="modify-wvt-reg-id" />
|
||||
<label>집합교육명</label> <input type="text" id="modify-training-name" />
|
||||
</div>
|
||||
<div class="input-item">
|
||||
<label>교육일시</label> <input type="datetime-local" id="modify-training-datetime" placeholder="">
|
||||
</div>
|
||||
<div class="input-item">
|
||||
<label>교육장소</label> <input type="text" id="modify-training-location" />
|
||||
</div>
|
||||
<div class="input-item">
|
||||
<label>접수기간</label>
|
||||
<input type="date" id="modify-reg-start-date" class="modify-reg-start-end-date" placeholder="">
|
||||
~
|
||||
<input type="date" id="modify-reg-end-date" class="modify-reg-start-end-date" placeholder="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="my-modal-modify-home-training-footer">
|
||||
<button onClick="onClickModifyButton(this);" id="my-modal-modify-button" class="my-modal-modify-button" >수정</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -600,3 +600,84 @@ a:hover {font-family: "굴림체"; font-size: 9pt; color: #FF8000; text-decora
|
|||
color: #2e5aac;
|
||||
}
|
||||
}
|
||||
|
||||
.my-modal {
|
||||
display: none;
|
||||
position: fixed;
|
||||
z-index: 1;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: auto;
|
||||
background-color: rgba(0,0,0,0.4);
|
||||
|
||||
.modal-content {
|
||||
background-color: #fefefe;
|
||||
margin: 15% auto;
|
||||
padding: 20px;
|
||||
border: 1px solid #888;
|
||||
width: 40%;
|
||||
position: relative;
|
||||
.my-modal-close {
|
||||
color: #aaa;
|
||||
position: absolute;
|
||||
right: 15px;
|
||||
top: 0px;
|
||||
font-size: 48px;
|
||||
font-weight: bold;
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: black;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
.my-modal-modify-home-training-header {
|
||||
text-align: center;
|
||||
font-size: 28px;
|
||||
margin-bottom: 18px;
|
||||
font-weight: 500;
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
.my-modal-modify-home-training-body {
|
||||
.input-item {
|
||||
margin-bottom: 8px;
|
||||
label {
|
||||
display: inline-block;
|
||||
width: 105px;
|
||||
text-align: right;
|
||||
font-size: 16px;
|
||||
&::after {
|
||||
content: ':';
|
||||
}
|
||||
}
|
||||
input {
|
||||
display: inline-block;
|
||||
width: 320px;
|
||||
font-size: 14px;
|
||||
padding: 5px 10px;
|
||||
&.modify-reg-start-end-date {
|
||||
width: 149px;
|
||||
}
|
||||
}
|
||||
.my-modal-modify-button {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.my-modal-modify-home-training-footer {
|
||||
text-align: center;
|
||||
margin-top: 20px;
|
||||
.my-modal-modify-button {
|
||||
width: auto;
|
||||
padding: 5px 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -779,4 +779,74 @@ a:hover {
|
|||
color: #2e5aac;
|
||||
}
|
||||
|
||||
.my-modal {
|
||||
display: none;
|
||||
position: fixed;
|
||||
z-index: 1;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: auto;
|
||||
background-color: rgba(0, 0, 0, 0.4);
|
||||
}
|
||||
.my-modal .modal-content {
|
||||
background-color: #fefefe;
|
||||
margin: 15% auto;
|
||||
padding: 20px;
|
||||
border: 1px solid #888;
|
||||
width: 40%;
|
||||
position: relative;
|
||||
}
|
||||
.my-modal .modal-content .my-modal-close {
|
||||
color: #aaa;
|
||||
position: absolute;
|
||||
right: 15px;
|
||||
top: 0px;
|
||||
font-size: 48px;
|
||||
font-weight: bold;
|
||||
}
|
||||
.my-modal .modal-content .my-modal-close:hover, .my-modal .modal-content .my-modal-close:focus {
|
||||
color: black;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
.my-modal .modal-content .my-modal-modify-home-training-header {
|
||||
text-align: center;
|
||||
font-size: 28px;
|
||||
margin-bottom: 18px;
|
||||
font-weight: 500;
|
||||
color: #333333;
|
||||
}
|
||||
.my-modal .modal-content .my-modal-modify-home-training-body .input-item {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
.my-modal .modal-content .my-modal-modify-home-training-body .input-item label {
|
||||
display: inline-block;
|
||||
width: 105px;
|
||||
text-align: right;
|
||||
font-size: 16px;
|
||||
}
|
||||
.my-modal .modal-content .my-modal-modify-home-training-body .input-item label::after {
|
||||
content: ":";
|
||||
}
|
||||
.my-modal .modal-content .my-modal-modify-home-training-body .input-item input {
|
||||
display: inline-block;
|
||||
width: 320px;
|
||||
font-size: 14px;
|
||||
padding: 5px 10px;
|
||||
}
|
||||
.my-modal .modal-content .my-modal-modify-home-training-body .input-item input.modify-reg-start-end-date {
|
||||
width: 149px;
|
||||
}
|
||||
.my-modal .modal-content .my-modal-modify-home-training-footer {
|
||||
text-align: center;
|
||||
margin-top: 20px;
|
||||
}
|
||||
.my-modal .modal-content .my-modal-modify-home-training-footer .my-modal-modify-button {
|
||||
width: auto;
|
||||
padding: 5px 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/*# sourceMappingURL=style.css.map */
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
{"version":3,"sourceRoot":"","sources":["sass/style.scss"],"names":[],"mappings":";AAAA;AACA;EAAM;;;AACN;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;AACA;EAAY;EAAoB;EAAiB;EAAgB;EAAkB;;;AACnF;EAAc;EAAoB;EAAiB;EAAgB;EAAuB;;;AAC1F;EAAgB;EAAoB;EAAiB;EAAgB;EAAuB;;;AAC5F;EAAc;EAAoB;EAAiB;EAAgB;EAA4B;;;AAE/F;AACA;EAAe;EAAe;EAAkB;EAAkB;EAAkB;;;AACpF;EAAe;EAAe;EAAkB;EAAkB;EAAkB;;;AACpF;EAAkB;EAAe;EAAkB;EAAkB;EAAkB;;;AACvF;EAAiB;EAAe;EAAkB;EAAkB;;;AAEpE;AACA;EAAY;EAAe;;;AAC3B;EAAY;EAAe;;;AAC3B;EAAe;EAAe;EAAkB;;;AAEhD;AACA;EAAY;;;AACZ;EAAU;;;AACV;EAAY;EAA0B;EAAsB;EAAkB;EAAoB;;;AAClG;EAAW;EAAe;EAA0B;EAAkB;;;AACtE;EAAW;EAAe;;;AAC1B;EAAW;EAAe;EAAyB;EAAqB;EAAoB;EAA2B;EAAc;;;AACrI;EAAW;EAAe;EAAyB;EAAoB;;;AACvE;EAAe;EAA0B;EAAsB;EAAkB;EAAoB;;;AAErG;AACA;EAAU;EAAoB;EAAgB;EAAgB;EAAuB;;;AACrF;EAAY;EAAoB;EAAgB;EAAgB;EAAuB;;;AACvF;EAAW;EAAoB;EAAgB;EAAgB;EAA4B;;;AAE3F;AACA;EAAY;EAAe;EAAkB;EAAe;;;AAC5D;EAAW;EAAe;EAAkB;;;AAG5C;AACA;EAAc;EAAe;EAAkB;EAAkB;EAAkB;;;AACnF;EAAgB;EAAe;EAAkB;EAAkB;EAAe;EAAkB;;;AACpG;EAAiB;EAAe;EAAkB;EAAkB;EAAe;;;AACnF;EAAe;EAAe;EAAkB;EAAkB;EAAe;EAAkB;;;AACnG;EAAkB;EAAe;EAAkB;EAAkB;;;AAErE;AACA;EAAa;EAAa;EAAiC;EAAwE;EAAwB;EAAiB;EAAkB;EAAkB;EAAkB;;;AAClO;EAAY;EAAa;EAAuB;EAAmB;EAAY;;;AAE/E;AACA;EAAa;;;AACb;EAAgB;EAAyB;EAAqB;;;AAE9D;AACA;EACI;EACH;EACG;EACA;EACA;;;AAEJ;EACI;EACA;;;AAEJ;EACI;EACA;;;AAEJ;EACI;EACA;;;AAEJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACC;EACA;EACA;EACA;EACA;;;AAEL;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAED;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;;AACA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;;AAEJ;EACI;;AACA;EACI;;AAEJ;EACI;EACA;EACA;EACA;EACA;;AACA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACI;;;AAOpB;EACI;;;AAEJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;AAwEA;;AAvEA;AAAA;EAEI;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGQ;EACI;;AACA;EACI;;AAOhB;EACI;;AAIY;EACI;EACA;EACA;EACA;EACA;EACA;;AACA;EACI;EACA;;AAQ5B;EACI;;AAEJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAEJ;EACI;;AAIJ;EACI;;AAEJ;EACI;EACA;;AAEJ;EACI;EACA;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;;AAEJ;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AACA;EACI;;;AAMZ;AACI;AAmBA;AA8IA;AAsCA;;AAtMA;EACI;EACA;EACA;;AAEJ;EACI;EACA;EACA;;AAEJ;EACI;;AAEJ;EACI;EACA;;AAIJ;EACI;;AAEJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACK;EACA;EACA;EACA;EACA;;AAEL;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;;AACA;EACI;EACA;EACA;EACA;;AAEJ;EACG;EACA;EACA;;AAEH;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEJ;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEJ;EACG;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEH;EACI;EACA;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEJ;EACI;;AAEJ;EACI;;AAEJ;EACI;EACA;EACA;EACA;;AAKR;EACI;EACA;EACA;;AAEJ;EACI;EACC;EACA;EACA;EACA;;AAEL;EACI;;AAEJ;EACI;;AAEJ;EACI;;AAEJ;EACI;;AAEJ;EACI;EACC;;AAGL;EACI;EACC;EACA;EACA;EACA;;AAKL;EACI;EACA;EACA;EACA;EACA;EACA;;AAEJ;EACK;EACD;EACA;EACA;EACA;EACA;;;AAMJ;AAAA;EAEI;;AAEJ;EACI;EACA;EACA;;AAEJ;EACI;;AAEJ;EACG;EACC;;AAIJ;EACI;EACA;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAEJ;EACG","file":"style.css"}
|
||||
{"version":3,"sourceRoot":"","sources":["sass/style.scss"],"names":[],"mappings":";AAAA;AACA;EAAM;;;AACN;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;AACA;EAAY;EAAoB;EAAiB;EAAgB;EAAkB;;;AACnF;EAAc;EAAoB;EAAiB;EAAgB;EAAuB;;;AAC1F;EAAgB;EAAoB;EAAiB;EAAgB;EAAuB;;;AAC5F;EAAc;EAAoB;EAAiB;EAAgB;EAA4B;;;AAE/F;AACA;EAAe;EAAe;EAAkB;EAAkB;EAAkB;;;AACpF;EAAe;EAAe;EAAkB;EAAkB;EAAkB;;;AACpF;EAAkB;EAAe;EAAkB;EAAkB;EAAkB;;;AACvF;EAAiB;EAAe;EAAkB;EAAkB;;;AAEpE;AACA;EAAY;EAAe;;;AAC3B;EAAY;EAAe;;;AAC3B;EAAe;EAAe;EAAkB;;;AAEhD;AACA;EAAY;;;AACZ;EAAU;;;AACV;EAAY;EAA0B;EAAsB;EAAkB;EAAoB;;;AAClG;EAAW;EAAe;EAA0B;EAAkB;;;AACtE;EAAW;EAAe;;;AAC1B;EAAW;EAAe;EAAyB;EAAqB;EAAoB;EAA2B;EAAc;;;AACrI;EAAW;EAAe;EAAyB;EAAoB;;;AACvE;EAAe;EAA0B;EAAsB;EAAkB;EAAoB;;;AAErG;AACA;EAAU;EAAoB;EAAgB;EAAgB;EAAuB;;;AACrF;EAAY;EAAoB;EAAgB;EAAgB;EAAuB;;;AACvF;EAAW;EAAoB;EAAgB;EAAgB;EAA4B;;;AAE3F;AACA;EAAY;EAAe;EAAkB;EAAe;;;AAC5D;EAAW;EAAe;EAAkB;;;AAG5C;AACA;EAAc;EAAe;EAAkB;EAAkB;EAAkB;;;AACnF;EAAgB;EAAe;EAAkB;EAAkB;EAAe;EAAkB;;;AACpG;EAAiB;EAAe;EAAkB;EAAkB;EAAe;;;AACnF;EAAe;EAAe;EAAkB;EAAkB;EAAe;EAAkB;;;AACnG;EAAkB;EAAe;EAAkB;EAAkB;;;AAErE;AACA;EAAa;EAAa;EAAiC;EAAwE;EAAwB;EAAiB;EAAkB;EAAkB;EAAkB;;;AAClO;EAAY;EAAa;EAAuB;EAAmB;EAAY;;;AAE/E;AACA;EAAa;;;AACb;EAAgB;EAAyB;EAAqB;;;AAE9D;AACA;EACI;EACH;EACG;EACA;EACA;;;AAEJ;EACI;EACA;;;AAEJ;EACI;EACA;;;AAEJ;EACI;EACA;;;AAEJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACC;EACA;EACA;EACA;EACA;;;AAEL;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAED;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;;AACA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;;AAEJ;EACI;;AACA;EACI;;AAEJ;EACI;EACA;EACA;EACA;EACA;;AACA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACI;;;AAOpB;EACI;;;AAEJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;AAwEA;;AAvEA;AAAA;EAEI;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGQ;EACI;;AACA;EACI;;AAOhB;EACI;;AAIY;EACI;EACA;EACA;EACA;EACA;EACA;;AACA;EACI;EACA;;AAQ5B;EACI;;AAEJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAEJ;EACI;;AAIJ;EACI;;AAEJ;EACI;EACA;;AAEJ;EACI;EACA;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;;AAEJ;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AACA;EACI;;;AAMZ;AACI;AAmBA;AA8IA;AAsCA;;AAtMA;EACI;EACA;EACA;;AAEJ;EACI;EACA;EACA;;AAEJ;EACI;;AAEJ;EACI;EACA;;AAIJ;EACI;;AAEJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACK;EACA;EACA;EACA;EACA;;AAEL;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;;AACA;EACI;EACA;EACA;EACA;;AAEJ;EACG;EACA;EACA;;AAEH;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEJ;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEJ;EACG;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEH;EACI;EACA;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEJ;EACI;;AAEJ;EACI;;AAEJ;EACI;EACA;EACA;EACA;;AAKR;EACI;EACA;EACA;;AAEJ;EACI;EACC;EACA;EACA;EACA;;AAEL;EACI;;AAEJ;EACI;;AAEJ;EACI;;AAEJ;EACI;;AAEJ;EACI;EACC;;AAGL;EACI;EACC;EACA;EACA;EACA;;AAKL;EACI;EACA;EACA;EACA;EACA;EACA;;AAEJ;EACK;EACD;EACA;EACA;EACA;EACA;;;AAMJ;AAAA;EAEI;;AAEJ;EACI;EACA;EACA;;AAEJ;EACI;;AAEJ;EACG;EACC;;AAIJ;EACI;EACA;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAEJ;EACG;;;AAIP;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEC;EACD;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AACA;EAEA;EACA;EACA;;AAID;EACC;EACA;EACA;EACA;EACA;;AAIA;EACC;;AACA;EACC;EACA;EACA;EACA;;AACA;EACC;;AAGF;EACC;EACA;EACA;EACA;;AACA;EACC;;AAQJ;EACC;EACA;;AACA;EACC;EACA;EACA","file":"style.css"}
|
||||
Loading…
Reference in New Issue