6709 외 jquery-ui cdn링크 로컬변경, 및 zipfile 로직 변경
|
|
@ -318,6 +318,7 @@
|
||||||
<Content Include="css\img\intranet_logo_b.png" />
|
<Content Include="css\img\intranet_logo_b.png" />
|
||||||
<Content Include="css\img\loading-sm.gif" />
|
<Content Include="css\img\loading-sm.gif" />
|
||||||
<Content Include="css\img\loading.gif" />
|
<Content Include="css\img\loading.gif" />
|
||||||
|
<Content Include="favicon.ico" />
|
||||||
<Content Include="Img\common\gnb_close.png" />
|
<Content Include="Img\common\gnb_close.png" />
|
||||||
<Content Include="Img\common\logo2.png" />
|
<Content Include="Img\common\logo2.png" />
|
||||||
<Content Include="Img\gnb_logo.png" />
|
<Content Include="Img\gnb_logo.png" />
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,7 @@
|
||||||
</style>
|
</style>
|
||||||
}
|
}
|
||||||
@section scriptsHeader{
|
@section scriptsHeader{
|
||||||
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
|
<script src="~/js/jquery.min.js"></script>
|
||||||
@Html.Partial("./Partial/Summernote")
|
@Html.Partial("./Partial/Summernote")
|
||||||
}
|
}
|
||||||
@section scripts{
|
@section scripts{
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,7 @@
|
||||||
margin-left: 1px;
|
margin-left: 1px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@*<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>*@
|
@*<script src="~/js/jquery.min.js"></script>*@
|
||||||
<script>
|
<script>
|
||||||
function exceldown2(fid, url, checktbody, exname, limitstringval, jsonDataStr) {
|
function exceldown2(fid, url, checktbody, exname, limitstringval, jsonDataStr) {
|
||||||
var limit = 24;
|
var limit = 24;
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,6 @@
|
||||||
<meta http-equiv="Pragma" content="no-cache" />
|
<meta http-equiv="Pragma" content="no-cache" />
|
||||||
<meta http-equiv="Cache-Control" content="No-Cache" />
|
<meta http-equiv="Cache-Control" content="No-Cache" />
|
||||||
<title>@ViewData["Title"] - 영남건설기술교육원 Back-Office</title>
|
<title>@ViewData["Title"] - 영남건설기술교육원 Back-Office</title>
|
||||||
@*<link rel="shortcut icon" href="/images/nptech.ico" />*@
|
|
||||||
<meta name="description" content="y&partners" />
|
<meta name="description" content="y&partners" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
|
||||||
@Styles.Render("~/Content/css")
|
@Styles.Render("~/Content/css")
|
||||||
|
|
@ -19,7 +18,7 @@
|
||||||
@RenderSection("stylecdn", required: false)
|
@RenderSection("stylecdn", required: false)
|
||||||
@Scripts.Render("~/bundles/jquery")
|
@Scripts.Render("~/bundles/jquery")
|
||||||
@Scripts.Render("~/bundles/scripts")
|
@Scripts.Render("~/bundles/scripts")
|
||||||
<script src="/js/site.js?v=240102"></script>
|
<script src="/js/site.js?v=250402"></script>
|
||||||
<!--[if lt IE 9]>
|
<!--[if lt IE 9]>
|
||||||
<script src="/js/ie/html5shiv.js"></script>
|
<script src="/js/ie/html5shiv.js"></script>
|
||||||
<script src="/js/ie/respond.min.js"></script>
|
<script src="/js/ie/respond.min.js"></script>
|
||||||
|
|
@ -67,7 +66,7 @@
|
||||||
<body class="mainbody sitebody">
|
<body class="mainbody sitebody">
|
||||||
<section class="vbox">
|
<section class="vbox">
|
||||||
<header class="bg-dark dk header navbar navbar-fixed-top-xs">
|
<header class="bg-dark dk header navbar navbar-fixed-top-xs">
|
||||||
<div class="navbar-header aside-md" @*style="width: 420px;"*@>
|
<div class="navbar-header aside-md">
|
||||||
<a class="btn btn-link visible-xs" data-toggle="class:nav-off-screen,open" data-target="#nav,html">
|
<a class="btn btn-link visible-xs" data-toggle="class:nav-off-screen,open" data-target="#nav,html">
|
||||||
<i class="fa fa-bars"></i>
|
<i class="fa fa-bars"></i>
|
||||||
</a>
|
</a>
|
||||||
|
|
@ -86,7 +85,7 @@
|
||||||
</li>
|
</li>
|
||||||
}
|
}
|
||||||
<li class="dropdown">
|
<li class="dropdown">
|
||||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">@ViewBag.SSUserName 님<b class="caret"></b></a>
|
<a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown">@ViewBag.SSUserName 님<b class="caret"></b></a>
|
||||||
<ul class="dropdown-menu animated fadeInRight">
|
<ul class="dropdown-menu animated fadeInRight">
|
||||||
<span class="arrow top"></span>
|
<span class="arrow top"></span>
|
||||||
@if (ViewBag.IsStaging)
|
@if (ViewBag.IsStaging)
|
||||||
|
|
@ -101,7 +100,7 @@
|
||||||
{
|
{
|
||||||
<li><a href="~/Content/file/YNICTEManual@(ViewBag.SSUserType == 11 ? "axds" : (ViewBag.SSUserType == 81) ? "axds" : "axds").pdf" target="_blank">매뉴얼 다운로드</a></li>
|
<li><a href="~/Content/file/YNICTEManual@(ViewBag.SSUserType == 11 ? "axds" : (ViewBag.SSUserType == 81) ? "axds" : "axds").pdf" target="_blank">매뉴얼 다운로드</a></li>
|
||||||
}
|
}
|
||||||
<li><a href="#" onclick="showramemainlayer('/user/editinfo');" title="개인정보수정">개인정보수정</a></li>
|
<li><a href="javascript:;" onclick="showramemainlayer('/user/editinfo');" title="개인정보수정">개인정보수정</a></li>
|
||||||
<li><a href="/Account/Logout" title="로그아웃">로그아웃</a></li>
|
<li><a href="/Account/Logout" title="로그아웃">로그아웃</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
|
@ -127,10 +126,8 @@
|
||||||
liindex++;
|
liindex++;
|
||||||
var ms = ((List<NP.Model.Menu>)ViewBag.Menus).Where(w => w.pmenuno == m.menuno && w.ishid < 1).ToList();
|
var ms = ((List<NP.Model.Menu>)ViewBag.Menus).Where(w => w.pmenuno == m.menuno && w.ishid < 1).ToList();
|
||||||
<li class="depth@(m.menulevel) @(pmenus.Contains("/" + m.menuno + "/") ? "active" : "")">
|
<li class="depth@(m.menulevel) @(pmenus.Contains("/" + m.menuno + "/") ? "active" : "")">
|
||||||
@*<a href="@((ms.FirstOrDefault()??new NP.Model.Menu() { }).menuurl)" class="@(pmenus.Contains("/" + m.menuno + "/") ? "active" : "")">*@
|
<a href="javascript:;" class="@(pmenus.Contains("/" + m.menuno + "/") ? "active" : "")">
|
||||||
<a href="#" class="@(pmenus.Contains("/" + m.menuno + "/") ? "active" : "")">
|
|
||||||
<i class="fa fa-@(liindex == 1 ? "bell" : liindex == 2 ? "user" : liindex == 3 ? "users" : liindex == 4 ? "file-text" : liindex == 5 ? "calendar" : liindex == 6 ? "bullhorn" : liindex == 7 ? "wrench" : liindex == 8 ? "krw" : "circle") icon"><b class="bg-dark"></b></i>
|
<i class="fa fa-@(liindex == 1 ? "bell" : liindex == 2 ? "user" : liindex == 3 ? "users" : liindex == 4 ? "file-text" : liindex == 5 ? "calendar" : liindex == 6 ? "bullhorn" : liindex == 7 ? "wrench" : liindex == 8 ? "krw" : "circle") icon"><b class="bg-dark"></b></i>
|
||||||
@*<span class="pull-right"><i class="fa fa-angle-down text"></i><i class="fa fa-angle-up text-active"></i></span>*@
|
|
||||||
<span>@m.menuname</span>
|
<span>@m.menuname</span>
|
||||||
</a>
|
</a>
|
||||||
<ul class="nav lt">
|
<ul class="nav lt">
|
||||||
|
|
@ -156,8 +153,8 @@
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<footer class="footer lt hidden-xs b-t b-dark">
|
<footer class="footer lt hidden-xs b-t b-dark">
|
||||||
<a href="#" data-toggle="class:nav-xs" class="pull-up btn btn-sm btn-dark btn-icon" style="padding: 0;" onclick="$('section.scrollable').animate({ scrollTop: 0 }, 400);">▲</a>
|
<a href="javascript:;" data-toggle="class:nav-xs" class="pull-up btn btn-sm btn-dark btn-icon" style="padding: 0;" onclick="$('section.scrollable').animate({ scrollTop: 0 }, 400);">▲</a>
|
||||||
<a href="#" data-toggle="class:nav-xs" class="pull-up btn btn-sm btn-dark btn-icon" style="padding: 0;" onclick="$('section.scrollable').animate({ scrollTop: 10000 }, 400);">▼</a>
|
<a href="javascript:;" data-toggle="class:nav-xs" class="pull-up btn btn-sm btn-dark btn-icon" style="padding: 0;" onclick="$('section.scrollable').animate({ scrollTop: 10000 }, 400);">▼</a>
|
||||||
<a href="#nav" data-toggle="class:nav-xs" class="pull-right btn btn-sm btn-dark btn-icon leftmenutoggle @(ViewBag.ckmainlmenu)">
|
<a href="#nav" data-toggle="class:nav-xs" class="pull-right btn btn-sm btn-dark btn-icon leftmenutoggle @(ViewBag.ckmainlmenu)">
|
||||||
<i class="fa fa-angle-left text"></i>
|
<i class="fa fa-angle-left text"></i>
|
||||||
<i class="fa fa-angle-right text-active"></i>
|
<i class="fa fa-angle-right text-active"></i>
|
||||||
|
|
@ -169,9 +166,6 @@
|
||||||
<section id="content">
|
<section id="content">
|
||||||
<section class="vbox">
|
<section class="vbox">
|
||||||
<section class="scrollable padder">
|
<section class="scrollable padder">
|
||||||
@*<div class="form-group" style="margin-top: 10px;">
|
|
||||||
<input type="text" class="form-control" name="MainTotalSearch" id="maintotalsearch" placeholder="통합검색 (입력후 엔터)" value="@(ViewBag.MainSearch??"")" />
|
|
||||||
</div>*@
|
|
||||||
<div class="m-b-md"><h3 class="m-b-none" style="border-bottom: 1px solid #ddd; padding-bottom: 10px;"><i class="fa fa-tags text"></i> <span id="mainmenutitle">@(((NP.Model.Menu)ViewBag.CMenu) == null ? "Home" : ((NP.Model.Menu)ViewBag.CMenu).menuname)</span></h3></div>
|
<div class="m-b-md"><h3 class="m-b-none" style="border-bottom: 1px solid #ddd; padding-bottom: 10px;"><i class="fa fa-tags text"></i> <span id="mainmenutitle">@(((NP.Model.Menu)ViewBag.CMenu) == null ? "Home" : ((NP.Model.Menu)ViewBag.CMenu).menuname)</span></h3></div>
|
||||||
<div class="con-body">@RenderBody()</div>
|
<div class="con-body">@RenderBody()</div>
|
||||||
<br class="mainbr" /><br class="mainbr" /><br class="mainbr" />
|
<br class="mainbr" /><br class="mainbr" /><br class="mainbr" />
|
||||||
|
|
@ -193,26 +187,26 @@
|
||||||
<div class="progress-bar progress-bar-danger" data-toggle="tooltip" data-original-title="30%" style="width: 100%">processing...</div>
|
<div class="progress-bar progress-bar-danger" data-toggle="tooltip" data-original-title="30%" style="width: 100%">processing...</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="layermessage"><br /><div class="msg"></div><br /><a href="#" class="btn btn-danger mainokbutton" onclick="javascript:hidelayermsg();">확인</a></div>
|
<div id="layermessage"><br /><div class="msg"></div><br /><a href="javascript:;" class="btn btn-danger mainokbutton" onclick="javascript:hidelayermsg();">확인</a></div>
|
||||||
<div id="bglayer2">
|
<div id="bglayer2">
|
||||||
<div class="progress progress-xs progress-striped active" style="position: absolute; top: 40%; left: 30%; right: 30%; height: 20px; display: none;">
|
<div class="progress progress-xs progress-striped active" style="position: absolute; top: 40%; left: 30%; right: 30%; height: 20px; display: none;">
|
||||||
<div class="progress-bar progress-bar-danger" data-toggle="tooltip" data-original-title="30%" style="width: 100%">processing...</div>
|
<div class="progress-bar progress-bar-danger" data-toggle="tooltip" data-original-title="30%" style="width: 100%">processing...</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="layermessage2"><br /><div class="msg"></div><br /><a href="#" class="btn btn-danger mainokbutton2" onclick="javascript:hidelayermsg2();">확인</a></div>
|
<div id="layermessage2"><br /><div class="msg"></div><br /><a href="javascript:;" class="btn btn-danger mainokbutton2" onclick="javascript:hidelayermsg2();">확인</a></div>
|
||||||
<div id="uploadbox">
|
<div id="uploadbox">
|
||||||
<div class="alert alert-danger">
|
<div class="alert alert-danger">
|
||||||
<h4><i class="fa fa-bell-alt"></i> 파일선택</h4>
|
<h4><i class="fa fa-bell-alt"></i> 파일선택</h4>
|
||||||
<input type="file" id="mainuploadfile" style="display: none;" onchange="javascript: mainchangefile(this);" />
|
<input type="file" id="mainuploadfile" style="display: none;" onchange="javascript: mainchangefile(this);" />
|
||||||
<input type="text" id="mainuploadlabel" readonly="readonly" style="width: 70%;" placeholder="파일을 등록하려면 클릭하세요." onclick="javascript: maingetfile();" />
|
<input type="text" id="mainuploadlabel" readonly="readonly" style="width: 70%;" placeholder="파일을 등록하려면 클릭하세요." onclick="javascript: maingetfile();" />
|
||||||
<a href="#" class="btn btn-xs btn-danger" onclick="javascript: mainSendFile(this);">등록하기</a>
|
<a href="javascript:;" class="btn btn-xs btn-danger" onclick="javascript: mainSendFile(this);">등록하기</a>
|
||||||
<a href="#" class="btn btn-xs btn-default" onclick="javascript: mainFileClose(this);">닫기</a>
|
<a href="javascript:;" class="btn btn-xs btn-default" onclick="javascript: mainFileClose(this);">닫기</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="bgprogress" class="progress"><div class="progress-bar progress-bar-primary progress-bar-striped active" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100" style="width:130px;">처리중입니다.</div></div>
|
<div id="bgprogress" class="progress"><div class="progress-bar progress-bar-primary progress-bar-striped active" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100" style="width:130px;">처리중입니다.</div></div>
|
||||||
<div id="mainuploadbox">
|
<div id="mainuploadbox">
|
||||||
<div class="alert alert-danger">
|
<div class="alert alert-danger">
|
||||||
<h4><i class="fa fa-bell-alt"></i>엑셀일괄등록<a href="#" class="btn btn-xs btn-danger btn-rounded f-r" onclick="showmainupload(false)">X</a></h4>
|
<h4><i class="fa fa-bell-alt"></i>엑셀일괄등록<a href="javascript:;" class="btn btn-xs btn-danger btn-rounded f-r" onclick="showmainupload(false)">X</a></h4>
|
||||||
<br />
|
<br />
|
||||||
<div class="boxborder">
|
<div class="boxborder">
|
||||||
<ul>
|
<ul>
|
||||||
|
|
@ -228,8 +222,8 @@
|
||||||
</div>
|
</div>
|
||||||
<br />
|
<br />
|
||||||
<div>
|
<div>
|
||||||
<a href="#" class="btn btn-s-md btn-danger" onclick="javascript: mainupload(this);">등록하기</a>
|
<a href="javascript:;" class="btn btn-s-md btn-danger" onclick="javascript: mainupload(this);">등록하기</a>
|
||||||
<a href="#" class="btn btn-s-md btn-default" onclick="showmainupload(false)">닫기</a>
|
<a href="javascript:;" class="btn btn-s-md btn-default" onclick="showmainupload(false)">닫기</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -261,8 +255,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
//window.history.pushState('forward', null, '#SomeIDYouAreNotUsing');
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -81,13 +81,13 @@
|
||||||
</div>
|
</div>
|
||||||
<label class="regbox" style="font-size:12px;">
|
<label class="regbox" style="font-size:12px;">
|
||||||
* 등록 안내<br />
|
* 등록 안내<br />
|
||||||
- 상위분류선택 : 상위분류 있음 선택 시 반드시 상위분류를 지정,<br/> 그 밑에 분류를 생성합니다.<br />
|
- 상위분류선택 : 상위분류 있음 선택 시 반드시 상위분류를 지정,<br /> 그 밑에 분류를 생성합니다.<br />
|
||||||
- 과정분류명 : 20자 이내로 입력합니다.<br />
|
- 과정분류명 : 20자 이내로 입력합니다.<br />
|
||||||
- 과정분류코드 : 영문,숫자,한글 혼용 가능하며 20자 이내로 입력합니다.<br /> 중복 지정은 불가하며 중복 체크 시에는 대소문자를 구별하지 않습니다.
|
- 과정분류코드 : 영문,숫자,한글 혼용 가능하며 20자 이내로 입력합니다.<br /> 중복 지정은 불가하며 중복 체크 시에는 대소문자를 구별하지 않습니다.
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
@section scriptsHeader{
|
@section scriptsHeader{
|
||||||
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
|
<script src="~/js/jquery.min.js"></script>
|
||||||
}
|
}
|
||||||
@section scripts{
|
@section scripts{
|
||||||
<script>
|
<script>
|
||||||
|
|
@ -95,11 +95,9 @@
|
||||||
$("input[name='isparent']").on("change", function () {
|
$("input[name='isparent']").on("change", function () {
|
||||||
$("#pcgno").val("");
|
$("#pcgno").val("");
|
||||||
$("#trpcgno").show();
|
$("#trpcgno").show();
|
||||||
//$("#triscover").show();
|
|
||||||
$("#iscover").val("0");
|
$("#iscover").val("0");
|
||||||
if ($(this).val() == 0) {
|
if ($(this).val() == 0) {
|
||||||
$("#trpcgno").hide();
|
$("#trpcgno").hide();
|
||||||
//$("#triscover").hide();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -272,7 +272,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@section scriptsHeader{
|
@section scriptsHeader{
|
||||||
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
|
<script src="~/js/jquery.min.js"></script>
|
||||||
@Html.Partial("./Partial/ScriptDate")
|
@Html.Partial("./Partial/ScriptDate")
|
||||||
}
|
}
|
||||||
@section scripts{
|
@section scripts{
|
||||||
|
|
|
||||||
|
|
@ -216,7 +216,7 @@
|
||||||
}
|
}
|
||||||
@section scriptsHeader{
|
@section scriptsHeader{
|
||||||
@Html.Partial("./Partial/FileScript")
|
@Html.Partial("./Partial/FileScript")
|
||||||
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
|
<script src="~/js/jquery.min.js"></script>
|
||||||
}
|
}
|
||||||
@section scripts{
|
@section scripts{
|
||||||
<script>
|
<script>
|
||||||
|
|
|
||||||
|
|
@ -36,8 +36,9 @@
|
||||||
<add key="reporturl" value="http://ynicter.nptc.kr" />
|
<add key="reporturl" value="http://ynicter.nptc.kr" />
|
||||||
<add key="isstaging" value="1" />
|
<add key="isstaging" value="1" />
|
||||||
<!--<add key="masteremail" value="edu@ynicte.or.kr;mail.ynicte.or.kr;25;ynicte@ynicte.or.kr;k7758870!%" />-->
|
<!--<add key="masteremail" value="edu@ynicte.or.kr;mail.ynicte.or.kr;25;ynicte@ynicte.or.kr;k7758870!%" />-->
|
||||||
<add key="masteremail" value="yicte@cte.or.kr;smtp.daum.net;465;yicte2020;yicte04003" />
|
<!--<add key="masteremail" value="yicte@cte.or.kr;smtp.daum.net;465;yicte2020;yicte04003" />-->
|
||||||
<add key="popbillManager" value="070-5088-4781;박희란" />
|
<add key="masteremail" value="yicte@cte.or.kr;smtp.daum.net;465;yicte2020;txwhczubbkcbotfd" />
|
||||||
|
<add key="popbillManager" value="070-5088-4781;박희란" />
|
||||||
|
|
||||||
<add key="usessl" value="Y" />
|
<add key="usessl" value="Y" />
|
||||||
<add key="daokey" value="ynictelms2020" />
|
<add key="daokey" value="ynictelms2020" />
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 4.6 KiB |
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 4.5 KiB |
|
After Width: | Height: | Size: 6.2 KiB |
|
After Width: | Height: | Size: 6.3 KiB |
378
BO/js/site.js
|
|
@ -346,6 +346,94 @@ function rcchange(s) {
|
||||||
eval($(s).attr("data-scmethod"));
|
eval($(s).attr("data-scmethod"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 로딩이미지 보여주기 */
|
||||||
|
function showLoadingImage() {
|
||||||
|
// 이미 존재하는 경우 중복 생성 방지
|
||||||
|
if (document.getElementById('custom-loading-overlay')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 로딩 이미지 요소 생성
|
||||||
|
const loadingDiv = document.createElement('div');
|
||||||
|
loadingDiv.id = 'custom-loading-overlay';
|
||||||
|
|
||||||
|
// 인라인 스타일 대신 클래스 사용을 위한 스타일 추가
|
||||||
|
const style = document.createElement('style');
|
||||||
|
style.textContent = `
|
||||||
|
#custom-loading-overlay {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
z-index: 9999;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-loading-spinner {
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 100%;
|
||||||
|
-webkit-animation: sk-scaleout 1.0s infinite ease-in-out;
|
||||||
|
animation: sk-scaleout 1.0s infinite ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
@-webkit-keyframes sk-scaleout {
|
||||||
|
0% { -webkit-transform: scale(0) }
|
||||||
|
100% { -webkit-transform: scale(1.0); opacity: 0; }
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes sk-scaleout {
|
||||||
|
0% { transform: scale(0); -webkit-transform: scale(0); }
|
||||||
|
100% { transform: scale(1.0); -webkit-transform: scale(1.0); opacity: 0; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 애니메이션 미지원 브라우저용 대체 스타일 */
|
||||||
|
.no-animation #custom-loading-spinner {
|
||||||
|
background-color: #3498db;
|
||||||
|
border: 5px solid #f3f3f3;
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
document.head.appendChild(style);
|
||||||
|
|
||||||
|
// 브라우저 애니메이션 지원 확인
|
||||||
|
const supportsAnimation = 'AnimationEvent' in window ||
|
||||||
|
'WebKitAnimationEvent' in window ||
|
||||||
|
'MozAnimationEvent' in window ||
|
||||||
|
'msAnimationEvent' in window ||
|
||||||
|
'OAnimationEvent' in window;
|
||||||
|
|
||||||
|
// 기본 로딩 스피너
|
||||||
|
const spinnerDiv = document.createElement('div');
|
||||||
|
spinnerDiv.id = 'custom-loading-spinner';
|
||||||
|
|
||||||
|
// 애니메이션을 지원하지 않는 브라우저에는 정적 스타일 적용
|
||||||
|
if (!supportsAnimation) {
|
||||||
|
loadingDiv.className = 'no-animation';
|
||||||
|
}
|
||||||
|
|
||||||
|
loadingDiv.appendChild(spinnerDiv);
|
||||||
|
document.body.appendChild(loadingDiv);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 로딩이미지 제거 */
|
||||||
|
function hideLoadingImage() {
|
||||||
|
const loadingDiv = document.getElementById('custom-loading-overlay');
|
||||||
|
if (loadingDiv) {
|
||||||
|
// 스타일 요소도 정리
|
||||||
|
const style = document.querySelector('style[id^="custom-loading-style"]');
|
||||||
|
if (style) {
|
||||||
|
document.head.removeChild(style);
|
||||||
|
}
|
||||||
|
document.body.removeChild(loadingDiv);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function ajaxing(tf) {
|
function ajaxing(tf) {
|
||||||
if (!_jsislayer2) {
|
if (!_jsislayer2) {
|
||||||
bglayer(false);
|
bglayer(false);
|
||||||
|
|
@ -782,105 +870,208 @@ function prg(id) {
|
||||||
function prgstop() {
|
function prgstop() {
|
||||||
$("#bglayer .progress, #bglayer2 .progress").hide();
|
$("#bglayer .progress, #bglayer2 .progress").hide();
|
||||||
}
|
}
|
||||||
function capfile(url, data, callback, noeval, setBG, jsislayer2, abscaller) {
|
function capfile(url, data, callback, noeval, setBG, jsislayer2) {
|
||||||
|
// 로딩바 표시 추가
|
||||||
|
showLoadingImage();
|
||||||
|
|
||||||
noeval = noeval || false;
|
noeval = noeval || false;
|
||||||
_abscaller = abscaller || false;
|
|
||||||
_jsislayer2 = jsislayer2 || false;
|
_jsislayer2 = jsislayer2 || false;
|
||||||
_setBG = setBG || false;
|
_setBG = setBG || false;
|
||||||
capfilecallback = callback;
|
// 백그라운드 레이어 표시
|
||||||
if (_setBG) {
|
if (_setBG) {
|
||||||
prg('');
|
|
||||||
bglayer();
|
bglayer();
|
||||||
}
|
}
|
||||||
if (_jsislayer2) {
|
if (_jsislayer2) {
|
||||||
prg('2');
|
|
||||||
bglayer2();
|
bglayer2();
|
||||||
}
|
}
|
||||||
|
// iOS 호환성을 위한 처리
|
||||||
|
// FormData 객체 확인 및 필요시 수정
|
||||||
|
if (data instanceof FormData) {
|
||||||
|
// iOS에서 FormData 디버깅을 위한 로그 (개발 중에만 사용)
|
||||||
|
console.log("FormData 항목 수:", [...data.entries()].length);
|
||||||
|
}
|
||||||
|
// 콜백 함수 실행 헬퍼
|
||||||
|
function executeCallback(result) {
|
||||||
|
// 로딩바 숨김 추가
|
||||||
|
hideLoadingImage();
|
||||||
|
|
||||||
|
if (_setBG) {
|
||||||
|
$("#bglayer").hide();
|
||||||
|
}
|
||||||
|
if (noeval) {
|
||||||
|
// 함수 객체로 직접 호출
|
||||||
|
if (typeof callback === 'function') {
|
||||||
|
callback(result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// 기존 방식 유지 (eval 사용)
|
||||||
|
// 보안상 권장되지 않지만 기존 코드 호환성 유지
|
||||||
|
try {
|
||||||
|
window.capResult = result; // 전역 변수로 결과 저장
|
||||||
|
if (typeof callback === 'string') {
|
||||||
|
if (callback.substr(callback.length - 1, 1) == ")") {
|
||||||
|
eval(callback);
|
||||||
|
} else {
|
||||||
|
eval(callback + "()");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error("콜백 실행 오류:", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
var ajaxRequest = $.ajax({
|
var ajaxRequest = $.ajax({
|
||||||
type: "POST",
|
type: "POST",
|
||||||
url: url,
|
url: url,
|
||||||
contentType: false,
|
contentType: false,
|
||||||
processData: false,
|
processData: false,
|
||||||
data: data
|
data: data,
|
||||||
|
timeout: 60000,
|
||||||
|
xhr: function () {
|
||||||
|
var xhr = $.ajaxSettings.xhr();
|
||||||
|
// 업로드 진행 상황 모니터링 (iOS에서 파일 업로드 진행 확인)
|
||||||
|
if (xhr.upload) {
|
||||||
|
xhr.upload.addEventListener('progress', function (e) {
|
||||||
|
if (e.lengthComputable) {
|
||||||
|
var percent = Math.round((e.loaded / e.total) * 100);
|
||||||
|
console.log("업로드 진행률: " + percent + "%");
|
||||||
|
}
|
||||||
|
}, false);
|
||||||
|
}
|
||||||
|
return xhr;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
ajaxRequest.error(function (e) {
|
// 에러 처리
|
||||||
prgstop();
|
ajaxRequest.fail(function (jqXHR, textStatus, errorThrown) {
|
||||||
isCaping = false;
|
console.error("Ajax 요청 실패:", textStatus, errorThrown);
|
||||||
console.log(e.responseText);
|
// 타임아웃인 경우 별도 처리
|
||||||
if (_jsislayer2) {
|
if (textStatus === "timeout") {
|
||||||
msg2("개발담당자에게 문의해주세요...");
|
alert("요청 시간이 초과되었습니다. 다시 시도해 주세요.");
|
||||||
|
// 로딩바 숨김 추가 (타임아웃 시)
|
||||||
|
hideLoadingImage();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
msg("개발담당자에게 문의해주세요...");
|
// 기존 에러 처리 로직 유지 (하지만 에러 시 다른 처리를 권장)
|
||||||
|
executeCallback({
|
||||||
|
code: -1,
|
||||||
|
message: "요청 처리 중 오류가 발생했습니다",
|
||||||
|
error: textStatus
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
ajaxRequest.done(function (data) {
|
ajaxRequest.done(function (data) {
|
||||||
prgstop();
|
if (data && data.code == 1000) {
|
||||||
if (_setBG) {
|
executeCallback(data);
|
||||||
$("#bglayer").hide();
|
|
||||||
}
|
|
||||||
capResult = data;
|
|
||||||
if (capResult.code == 1000 || _abscaller) {
|
|
||||||
eval(capfilecallback.substr(capfilecallback.length - 1, 1) == ")" ? capfilecallback : (capfilecallback + "()"));
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
console.log(capResult.code);
|
console.warn("서버 응답 코드가 1000이 아닙니다:", data);
|
||||||
console.log(capResult.msg);
|
executeCallback(data);
|
||||||
console.log(capResult.obj);
|
|
||||||
}
|
|
||||||
if (_jsislayer2) {
|
|
||||||
bglayer2(false);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
bglayer(false);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
function capfileform(url, fid, callback, iseval, getpost, autoMsg, noBG, jsislayer2) {
|
function capfileform(url, fid, callback, iseval, getpost, autoMsg, noBG, jsislayer2) {
|
||||||
_jsislayer2 = jsislayer2 || false;
|
_jsislayer2 = jsislayer2 || false;
|
||||||
if (!isCaping) {
|
if (!isCaping) {
|
||||||
|
// 로딩바 표시 추가
|
||||||
|
showLoadingImage();
|
||||||
|
|
||||||
isAutoMsg = autoMsg || false;
|
isAutoMsg = autoMsg || false;
|
||||||
_bging = noBG || false;
|
_bging = noBG || false;
|
||||||
if (!_bging) {
|
if (!_bging) { ajaxing(); }
|
||||||
prg('');
|
if (_jsislayer2) { bglayer2(); }
|
||||||
ajaxing();
|
|
||||||
}
|
|
||||||
if (_jsislayer2) {
|
|
||||||
prg('2');
|
|
||||||
bglayer2();
|
|
||||||
}
|
|
||||||
_callback = callback;
|
_callback = callback;
|
||||||
capResult = null;
|
capResult = null;
|
||||||
capOK = false;
|
capOK = false;
|
||||||
isCaping = true;
|
isCaping = true;
|
||||||
clearComma();
|
// 폼 요소 직접 참조
|
||||||
|
const form = document.getElementById(fid);
|
||||||
|
// iOS 호환성을 위한 FormData 생성 방식 개선
|
||||||
|
let formData;
|
||||||
|
try {
|
||||||
|
// 기본 FormData 생성 시도
|
||||||
|
formData = new FormData(form);
|
||||||
|
// iOS 호환성 검사 - 파일 입력 필드 확인
|
||||||
|
const fileInputs = form.querySelectorAll('input[type="file"]');
|
||||||
|
let hasFiles = false;
|
||||||
|
fileInputs.forEach(input => {
|
||||||
|
if (input.files && input.files.length > 0) {
|
||||||
|
hasFiles = true;
|
||||||
|
// 파일 입력 필드 값이 제대로 FormData에 들어갔는지 확인
|
||||||
|
const fieldName = input.name || 'file';
|
||||||
|
if (!formData.has(fieldName)) {
|
||||||
|
console.log(`iOS 호환성: 수동으로 ${fieldName} 추가`);
|
||||||
|
// 수동으로 파일 추가
|
||||||
|
for (let i = 0; i < input.files.length; i++) {
|
||||||
|
formData.append(fieldName, input.files[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// 디버깅용 로그
|
||||||
|
console.log('FormData 생성 완료:', hasFiles ? '파일 포함' : '파일 없음');
|
||||||
|
} catch (error) {
|
||||||
|
console.error('FormData 생성 오류:', error);
|
||||||
|
// 대체 방식으로 FormData 생성
|
||||||
|
formData = new FormData();
|
||||||
|
// 폼 필드 수동 추가
|
||||||
|
const formElements = form.elements;
|
||||||
|
for (let i = 0; i < formElements.length; i++) {
|
||||||
|
const field = formElements[i];
|
||||||
|
const name = field.name;
|
||||||
|
if (!name) continue;
|
||||||
|
if (field.type === 'file') {
|
||||||
|
for (let j = 0; j < field.files.length; j++) {
|
||||||
|
formData.append(name, field.files[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (field.type !== 'submit' && field.type !== 'button') {
|
||||||
|
formData.append(name, field.value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 네트워크 요청 타임아웃 설정
|
||||||
|
const ajaxTimeout = 60000; // 60초
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: getpost || "post",
|
type: getpost || "post",
|
||||||
url: url,
|
url: url,
|
||||||
data: new FormData($('#' + fid)[0]),
|
data: formData,
|
||||||
contentType: false,
|
contentType: false,
|
||||||
processData: false,
|
processData: false,
|
||||||
|
timeout: ajaxTimeout,
|
||||||
success: function (r) {
|
success: function (r) {
|
||||||
isCaping = false;
|
isCaping = false;
|
||||||
capResult = r;
|
capResult = r;
|
||||||
setcap();
|
setcap();
|
||||||
}, error: function (e) {
|
// 로딩바 숨김 추가
|
||||||
|
hideLoadingImage();
|
||||||
|
},
|
||||||
|
error: function (e) {
|
||||||
isCaping = false;
|
isCaping = false;
|
||||||
|
console.log('Ajax 오류:', e.status, e.statusText);
|
||||||
console.log(e.responseText);
|
console.log(e.responseText);
|
||||||
if (_jsislayer2) {
|
if (e.status === 0 && e.statusText === 'timeout') {
|
||||||
msg2("개발담당자에게 문의해주세요....");
|
alert("요청 시간이 초과되었습니다. 다시 시도해주세요.");
|
||||||
|
}
|
||||||
|
else if (_jsislayer2) {
|
||||||
|
alert("개발담당자에게 문의해주세요");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
msg("개발담당자에게 문의해주세요....");
|
alert("개발담당자에게 문의해주세요.");
|
||||||
}
|
}
|
||||||
}, complete: function () {
|
// 로딩바 숨김 추가
|
||||||
prgstop();
|
hideLoadingImage();
|
||||||
|
},
|
||||||
|
complete: function () {
|
||||||
ajaxing(false);
|
ajaxing(false);
|
||||||
|
// complete에도 로딩바 숨김 추가 (중복 호출 방지를 위해 다른 방법 고려 가능)
|
||||||
|
hideLoadingImage();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
alert("다른 작업을 처리중입니다. 잠시후 다시 작업해주세요.");
|
console.log("다른 작업을 처리중입니다. 잠시후 다시 작업해주세요.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//function (xhr, textStatus) {
|
//function (xhr, textStatus) {
|
||||||
|
|
@ -934,52 +1125,107 @@ function cap(url, formid, callback, getpost, autoMsg, noBG, jsislayer2) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var _jsislayer2 = false;
|
var _jsislayer2 = false;
|
||||||
function capp(url, p, callback, getpost, autoMsg, noBG, jsislayer2, noclearcomma) {
|
function capp(url, p, callback, getpost, autoMsg, noBG, jsislayer2, hideBG, noerror, sync) {
|
||||||
noclearcomma = noclearcomma || false;
|
|
||||||
_jsislayer2 = jsislayer2 || false;
|
_jsislayer2 = jsislayer2 || false;
|
||||||
|
_noerror = noerror || false;
|
||||||
|
_hideBG = hideBG || false;
|
||||||
|
|
||||||
|
// 동기식 요청은 권장되지 않지만, 기존 코드 호환성을 위해 유지
|
||||||
|
// 단, 경고 메시지 출력
|
||||||
|
_async = !(sync || false);
|
||||||
|
if (sync) {
|
||||||
|
console.warn("동기식 Ajax 요청은 권장되지 않으며 iOS에서 문제를 일으킬 수 있습니다.");
|
||||||
|
}
|
||||||
|
|
||||||
if (!isCaping) {
|
if (!isCaping) {
|
||||||
isAutoMsg = autoMsg || false;
|
isAutoMsg = autoMsg || false;
|
||||||
_bging = noBG || false;
|
_bging = noBG || false;
|
||||||
|
|
||||||
if (!_bging) {
|
if (!_bging) {
|
||||||
prg('');
|
|
||||||
ajaxing();
|
ajaxing();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_jsislayer2) {
|
if (_jsislayer2) {
|
||||||
prg('2');
|
|
||||||
bglayer2();
|
bglayer2();
|
||||||
}
|
}
|
||||||
|
|
||||||
_callback = callback;
|
_callback = callback;
|
||||||
capResult = null;
|
capResult = null;
|
||||||
capOK = false;
|
capOK = false;
|
||||||
isCaping = true;
|
isCaping = true;
|
||||||
if (!noclearcomma) {
|
|
||||||
clearComma();
|
// 기존 함수 호출 유지, 존재 확인 후 실행
|
||||||
|
if (typeof clearComma === 'function') {
|
||||||
|
try {
|
||||||
|
clearComma();
|
||||||
|
} catch (e) {
|
||||||
|
console.error("clearComma 함수 실행 오류:", e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
$.ajax({
|
|
||||||
|
// Ajax 요청 설정
|
||||||
|
const ajaxSettings = {
|
||||||
type: getpost || "post",
|
type: getpost || "post",
|
||||||
url: url,
|
url: url,
|
||||||
data: p,
|
data: p,
|
||||||
|
async: _async,
|
||||||
|
timeout: _async ? 30000 : undefined, // 비동기 요청만 타임아웃 설정
|
||||||
success: function (r) {
|
success: function (r) {
|
||||||
isCaping = false;
|
isCaping = false;
|
||||||
capResult = r;
|
capResult = r;
|
||||||
setcap();
|
// iOS 호환성을 위한 추가 처리
|
||||||
}, error: function (e) {
|
setTimeout(function () {
|
||||||
|
setcap();
|
||||||
|
}, 0);
|
||||||
|
},
|
||||||
|
error: function (xhr, status, error) {
|
||||||
isCaping = false;
|
isCaping = false;
|
||||||
console.log(e.responseText);
|
console.log("Ajax 오류:", status, error);
|
||||||
if (_jsislayer2) {
|
|
||||||
msg2("개발담당자에게 문의해주세요.");
|
if (xhr.responseText) {
|
||||||
|
console.log("응답 내용:", xhr.responseText);
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
msg("개발담당자에게 문의해주세요.");
|
// 타임아웃 오류 별도 처리
|
||||||
|
if (status === "timeout") {
|
||||||
|
if (_jsislayer2) {
|
||||||
|
alert("요청 시간이 초과되었습니다. 다시 시도해 주세요.");
|
||||||
|
} else {
|
||||||
|
alert("요청 시간이 초과되었습니다. 다시 시도해 주세요.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}, complete: function () {
|
else if (!_noerror) {
|
||||||
prgstop();
|
if (_jsislayer2) {
|
||||||
ajaxing(false);
|
alert("잠시 후 다시 요청해주세요.");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
alert("잠시 후 다시 요청해주세요.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
complete: function () {
|
||||||
|
// iOS에서의 지연 문제 방지를 위한 setTimeout 사용
|
||||||
|
setTimeout(function () {
|
||||||
|
ajaxing(false);
|
||||||
|
}, 0);
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
|
|
||||||
|
// iOS 특정 버전에서의 캐시 문제 방지
|
||||||
|
if (navigator.userAgent.match(/(iPad|iPhone|iPod)/g)) {
|
||||||
|
ajaxSettings.cache = false;
|
||||||
|
|
||||||
|
// URL에 타임스탬프 추가하여 캐시 방지
|
||||||
|
const timestamp = new Date().getTime();
|
||||||
|
ajaxSettings.url = ajaxSettings.url +
|
||||||
|
(ajaxSettings.url.indexOf('?') >= 0 ? '&' : '?') +
|
||||||
|
'_t=' + timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
$.ajax(ajaxSettings);
|
||||||
}
|
}
|
||||||
else {
|
else if (!_noerror) {
|
||||||
alert("다른 작업을 처리중입니다. 잠시후 다시 작업해주세요.");
|
console.log("다른 작업을 처리중입니다. 잠시후 다시 작업해주세요.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -853,6 +853,7 @@ namespace NP.Base.Controllers
|
||||||
{
|
{
|
||||||
System.IO.Directory.CreateDirectory(Server.MapPath(vm.Contents+"/" + vm.CT.ccode));
|
System.IO.Directory.CreateDirectory(Server.MapPath(vm.Contents+"/" + vm.CT.ccode));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Request.Files.GetMultiple("file").First().FileName.Split('.').Last().ToUpper() == "ZIP")
|
if (Request.Files.GetMultiple("file").First().FileName.Split('.').Last().ToUpper() == "ZIP")
|
||||||
{
|
{
|
||||||
//압축해제
|
//압축해제
|
||||||
|
|
@ -962,6 +963,7 @@ namespace NP.Base.Controllers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 컨텐츠 삭제
|
/// 컨텐츠 삭제
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
||||||
|
|
@ -976,25 +976,30 @@ namespace NP.Base.Controllers
|
||||||
{
|
{
|
||||||
return JsonOK(0);
|
return JsonOK(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//directory 없을시 생성
|
//directory 없을시 생성
|
||||||
if (!System.IO.Directory.Exists(Server.MapPath(vm.Files + "/SubjectZip")))
|
if (!System.IO.Directory.Exists(Server.MapPath(vm.Files + "/SubjectZip")))
|
||||||
{
|
{
|
||||||
System.IO.Directory.CreateDirectory(Server.MapPath(vm.Files + "/SubjectZip"));
|
System.IO.Directory.CreateDirectory(Server.MapPath(vm.Files + "/SubjectZip"));
|
||||||
}
|
}
|
||||||
|
|
||||||
//zip으로 묶어서 다운로드
|
//zip으로 묶어서 다운로드
|
||||||
var zipName = "SubjectFile_" + cmno + "_" + classno + "_" + sdno + ".zip";
|
var zipName = "SubjectFile_" + cmno + "_" + classno + "_" + sdno + ".zip";
|
||||||
var zipUrl = vm.Files + "/SubjectZip/" + zipName;
|
var zipUrl = vm.Files + "/SubjectZip/" + zipName;
|
||||||
|
|
||||||
//이미 생성된 zip파일 존재하면 삭제
|
//이미 생성된 zip파일 존재하면 삭제
|
||||||
if (System.IO.File.Exists(Server.MapPath(zipUrl)))
|
if (System.IO.File.Exists(Server.MapPath(zipUrl)))
|
||||||
{
|
{
|
||||||
System.IO.File.Delete(Server.MapPath(zipUrl));
|
System.IO.File.Delete(Server.MapPath(zipUrl));
|
||||||
}
|
}
|
||||||
|
|
||||||
//zip 생성
|
//zip 생성
|
||||||
List<File> newfile = new List<File>();
|
List<File> newfile = new List<File>();
|
||||||
foreach (var f in sds)
|
foreach (var f in sds)
|
||||||
{
|
{
|
||||||
newfile.Add(new File() { orgname = string.Format("{0}_{1}.{2}", f.userid, f.username, f.fileurl.Split('.').Last()), fileurl = Server.MapPath(vm.Subjects + f.fileurl) });
|
newfile.Add(new File() { orgname = string.Format("{0}_{1}.{2}", f.userid, f.username, f.fileurl.Split('.').Last()), fileurl = Server.MapPath(vm.Subjects + f.fileurl) });
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!newfile.Count.Equals(0))
|
if (!newfile.Count.Equals(0))
|
||||||
{
|
{
|
||||||
if (base.ZipFiles(newfile, zipUrl, ""))
|
if (base.ZipFiles(newfile, zipUrl, ""))
|
||||||
|
|
@ -1013,6 +1018,7 @@ namespace NP.Base.Controllers
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 토론
|
/// 토론
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
||||||
|
|
@ -1548,7 +1548,7 @@ namespace NP.Base
|
||||||
public JsonResult SaveSmsMulti(IList<NP.Model.MemoUser> Users)
|
public JsonResult SaveSmsMulti(IList<NP.Model.MemoUser> Users)
|
||||||
{
|
{
|
||||||
Memo m = new Memo() {Users = Users };
|
Memo m = new Memo() {Users = Users };
|
||||||
//m.mcontents = m.mcontents.Length > 1000 ? m.mcontents.Substring(0, 1000) : m.mcontents;
|
|
||||||
var us = m.Users.Where(w => w.isok == 1).ToList();
|
var us = m.Users.Where(w => w.isok == 1).ToList();
|
||||||
if (us.Count() > 0)
|
if (us.Count() > 0)
|
||||||
{
|
{
|
||||||
|
|
@ -1568,8 +1568,6 @@ namespace NP.Base
|
||||||
talkUserTmp.Add(talkUser);
|
talkUserTmp.Add(talkUser);
|
||||||
talkUserTmp[0].mno = m.mno;
|
talkUserTmp[0].mno = m.mno;
|
||||||
|
|
||||||
//System.Text.StringBuilder sbm = new System.Text.StringBuilder("");
|
|
||||||
//System.Text.StringBuilder sbs = new System.Text.StringBuilder("");
|
|
||||||
var cbnum = GetConfig("mtssendnum");
|
var cbnum = GetConfig("mtssendnum");
|
||||||
|
|
||||||
talkUserTmp[0].ismms = System.Text.Encoding.Default.GetBytes(talkUserTmp[0].mcontents).Length > 90;
|
talkUserTmp[0].ismms = System.Text.Encoding.Default.GetBytes(talkUserTmp[0].mcontents).Length > 90;
|
||||||
|
|
@ -1657,6 +1655,7 @@ namespace NP.Base
|
||||||
|
|
||||||
return JsonOK(0);
|
return JsonOK(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -1667,36 +1666,57 @@ namespace NP.Base
|
||||||
public bool ZipFiles(IList<NP.Model.File> targetFile, string zipFilePath, string password)
|
public bool ZipFiles(IList<NP.Model.File> targetFile, string zipFilePath, string password)
|
||||||
{
|
{
|
||||||
bool retVal = false;
|
bool retVal = false;
|
||||||
ICSharpCode.SharpZipLib.Zip.ZipFile zfile = ICSharpCode.SharpZipLib.Zip.ZipFile.Create(System.IO.Path.Combine(System.Web.HttpContext.Current.Server.MapPath(zipFilePath)));
|
|
||||||
|
// Zip 파일 경로 생성
|
||||||
|
string fullZipPath = System.IO.Path.Combine(System.Web.HttpContext.Current.Server.MapPath(zipFilePath));
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// 패스워드가 있는 경우 패스워드 지정.
|
using (var zfile = ICSharpCode.SharpZipLib.Zip.ZipFile.Create(fullZipPath))
|
||||||
if (password != null && password != String.Empty)
|
|
||||||
{
|
{
|
||||||
zfile.Password = password;
|
// 패스워드가 있는 경우 패스워드 지정
|
||||||
|
if (!string.IsNullOrEmpty(password))
|
||||||
|
{
|
||||||
|
zfile.Password = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
zfile.BeginUpdate();
|
||||||
|
|
||||||
|
foreach (var item in targetFile)
|
||||||
|
{
|
||||||
|
// 파일 경로를 검증
|
||||||
|
if (!string.IsNullOrEmpty(item.fileurl) && System.IO.File.Exists(item.fileurl))
|
||||||
|
{
|
||||||
|
zfile.Add(item.fileurl, System.IO.Path.GetFileName(item.orgname));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
zfile.CommitUpdate();
|
||||||
}
|
}
|
||||||
zfile.BeginUpdate();
|
|
||||||
foreach (var item in targetFile)
|
retVal = true; // 작업 성공
|
||||||
{
|
|
||||||
zfile.Add(item.fileurl, System.IO.Path.GetFileName(item.orgname));
|
|
||||||
}
|
|
||||||
zfile.CommitUpdate();
|
|
||||||
retVal = true;
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
retVal = false;
|
retVal = false;
|
||||||
// 오류가 난 경우 생성 했던 파일을 삭제.
|
|
||||||
if (System.IO.File.Exists(System.Web.HttpContext.Current.Server.MapPath(zipFilePath)))
|
// 오류가 난 경우 생성했던 파일을 삭제.
|
||||||
System.IO.File.Delete(System.Web.HttpContext.Current.Server.MapPath(zipFilePath));
|
if (System.IO.File.Exists(fullZipPath))
|
||||||
}
|
{
|
||||||
finally
|
try
|
||||||
{
|
{
|
||||||
zfile.Close();
|
System.IO.File.Delete(fullZipPath);
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
// 파일 삭제 시 실패는 무시
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
// SHA256 256bit 암호화
|
// SHA256 256bit 암호화
|
||||||
protected string ComputeHash(string input)
|
protected string ComputeHash(string input)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,26 +1,20 @@
|
||||||
using System;
|
using NP.Model;
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Web;
|
|
||||||
using System.Web.Mvc;
|
using System.Web.Mvc;
|
||||||
|
|
||||||
using NP.Model;
|
|
||||||
using System.Collections;
|
|
||||||
using NP.Base.Auth;
|
|
||||||
using NP.Base.ENUM;
|
|
||||||
using QRCoder;
|
|
||||||
namespace NP.Base.Controllers
|
namespace NP.Base.Controllers
|
||||||
{
|
{
|
||||||
public partial class FCommonController : NP.Base.BaseController
|
public partial class FCommonController : NP.Base.BaseController
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public JsonResult GetAttend(Int64 lectno)
|
public JsonResult GetAttend(Int64 lectno)
|
||||||
{
|
{
|
||||||
var rtn = new Hashtable() { };
|
var rtn = new Hashtable() { };
|
||||||
var d = Dao.Get<LectInningPage>("lect.lectinningpages", new System.Collections.Hashtable() { { "lectno", lectno }, { "userno", SUserInfo.UserNo } });
|
var d = Dao.Get<LectInningPage>("lect.lectinningpages", new Hashtable() { { "lectno", lectno }, { "userno", SUserInfo.UserNo } });
|
||||||
rtn.Add("d", d);
|
rtn.Add("d", d);
|
||||||
var ds = new List<LectInningPage>() { };
|
var ds = new List<LectInningPage>() { };
|
||||||
foreach(var iseq in d.Select(s => s.iseq).Distinct())
|
foreach(var iseq in d.Select(s => s.iseq).Distinct())
|
||||||
|
|
@ -31,21 +25,24 @@ namespace NP.Base.Controllers
|
||||||
rtn.Add("h", ds);
|
rtn.Add("h", ds);
|
||||||
return JsonBack(rtn);
|
return JsonBack(rtn);
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public JsonResult PageLogs(String d1, String d2)
|
public JsonResult PageLogs(string d1, string d2)
|
||||||
{
|
{
|
||||||
return JsonBack(Dao.Get<PageLog>("lect.pagelogs", new System.Collections.Hashtable() { { "from"+(string.IsNullOrEmpty(d1)?"x":""), d1 }, { "to" + (string.IsNullOrEmpty(d2) ? "x" : ""), d2 + " 23:59:59" }, { "userno", SUserInfo.UserNo }, { "logsite", 1 } }));
|
return JsonBack(Dao.Get<PageLog>("lect.pagelogs", new Hashtable() { { "from"+(string.IsNullOrEmpty(d1)?"x":""), d1 }, { "to" + (string.IsNullOrEmpty(d2) ? "x" : ""), d2 + " 23:59:59" }, { "userno", SUserInfo.UserNo }, { "logsite", 1 } }));
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public JsonResult CMRSGo(Int64 lectno, int rsno)
|
public JsonResult CMRSGo(long lectno, int rsno)
|
||||||
{
|
{
|
||||||
var rtn = new Hashtable() { };
|
var rtn = new Hashtable() { };
|
||||||
rtn.Add("q", Dao.Get<RSCQ>("cr.mycmrsq", new System.Collections.Hashtable() { { "lectno", lectno }, { "userno", SUserInfo.UserNo }, { "rsno", rsno } }));
|
rtn.Add("q", Dao.Get<RSCQ>("cr.mycmrsq", new Hashtable() { { "lectno", lectno }, { "userno", SUserInfo.UserNo }, { "rsno", rsno } }));
|
||||||
rtn.Add("qi", Dao.Get<RSCQ>("cr.mycmrsqi", new System.Collections.Hashtable() { { "lectno", lectno }, { "userno", SUserInfo.UserNo }, { "rsno", rsno } }));
|
rtn.Add("qi", Dao.Get<RSCQ>("cr.mycmrsqi", new Hashtable() { { "lectno", lectno }, { "userno", SUserInfo.UserNo }, { "rsno", rsno } }));
|
||||||
return JsonBack(rtn);
|
return JsonBack(rtn);
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public JsonResult LectRSSave(Int64 lectno, int rsno, String sd)
|
public JsonResult LectRSSave(long lectno, int rsno, String sd)
|
||||||
{
|
{
|
||||||
var d = new LectRS() { lectno = lectno, userno = SUserInfo.UserNo, rsno = rsno, uno = SUserInfo.UserNo, uip = GetUserIP(), Ds = new List<LectRS>() { } };
|
var d = new LectRS() { lectno = lectno, userno = SUserInfo.UserNo, rsno = rsno, uno = SUserInfo.UserNo, uip = GetUserIP(), Ds = new List<LectRS>() { } };
|
||||||
foreach(var s in sd.Split(';'))
|
foreach(var s in sd.Split(';'))
|
||||||
|
|
@ -54,11 +51,13 @@ namespace NP.Base.Controllers
|
||||||
}
|
}
|
||||||
return JsonOK(Dao.Save("cr.lectrs.in", d));
|
return JsonOK(Dao.Save("cr.lectrs.in", d));
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public JsonResult SaveExam(Int64 lectno, int estno, String savedata, int issubmit, String qnos, bool isbackup = false, int cblock = 0)
|
public JsonResult SaveExam(long lectno, int estno, string savedata, int issubmit, string qnos, bool isbackup = false, int cblock = 0)
|
||||||
{
|
{
|
||||||
var Exam = Dao.Get<CMEX>("cr.userexam.detailforexamforsubmit", new System.Collections.Hashtable() { {"lectno",lectno }, { "exno", estno}, { "userno", SUserInfo.UserNo } }).FirstOrDefault();
|
var Exam = Dao.Get<CMEX>("cr.userexam.detailforexamforsubmit", new Hashtable() { {"lectno",lectno }, { "exno", estno}, { "userno", SUserInfo.UserNo } }).FirstOrDefault();
|
||||||
String OverTime = null;
|
|
||||||
|
string OverTime = null;
|
||||||
if (Exam == null)
|
if (Exam == null)
|
||||||
{
|
{
|
||||||
issubmit = 0;
|
issubmit = 0;
|
||||||
|
|
@ -68,14 +67,17 @@ namespace NP.Base.Controllers
|
||||||
{
|
{
|
||||||
return JsonOK(-44,true);
|
return JsonOK(-44,true);
|
||||||
}
|
}
|
||||||
|
|
||||||
var qis = Dao.Get<QuestionItem>("cr.questionitem.listforcheck", qnos);
|
var qis = Dao.Get<QuestionItem>("cr.questionitem.listforcheck", qnos);
|
||||||
var ue = new LectEX() {lectno=lectno, userno = SUserInfo.UserNo, uno = SUserInfo.UserNo, uip = GetUserIP(), exno = Exam.exno, cblock = cblock };
|
var ue = new LectEX() {lectno=lectno, userno = SUserInfo.UserNo, uno = SUserInfo.UserNo, uip = GetUserIP(), exno = Exam.exno, cblock = cblock };
|
||||||
ue.extype = Exam.extype;
|
ue.extype = Exam.extype;
|
||||||
//ue.sip = SIP;
|
|
||||||
ue.UED = new List<LectEXQ>() { };
|
ue.UED = new List<LectEXQ>() { };
|
||||||
foreach (String sss in savedata.Split(';'))
|
|
||||||
|
foreach (string sss in savedata.Split(';'))
|
||||||
{
|
{
|
||||||
String[] ss = sss.Split(':');
|
string[] ss = sss.Split(':');
|
||||||
|
|
||||||
if (ss[4] == "0")
|
if (ss[4] == "0")
|
||||||
{
|
{
|
||||||
ue.UED.Add(new LectEXQ()
|
ue.UED.Add(new LectEXQ()
|
||||||
|
|
@ -107,24 +109,47 @@ namespace NP.Base.Controllers
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ue.issubmit = issubmit;
|
ue.issubmit = issubmit;
|
||||||
ue.zstring20 = OverTime;
|
ue.zstring20 = OverTime;
|
||||||
|
|
||||||
var rtn = Dao.Save("cr.examsubmit" + (isbackup ? "backup" : ""), ue);
|
var rtn = Dao.Save("cr.examsubmit" + (isbackup ? "backup" : ""), ue);
|
||||||
|
|
||||||
return JsonOK("1".Equals(OverTime) ? 0 : rtn, true);
|
return JsonOK("1".Equals(OverTime) ? 0 : rtn, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 과제제출
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="d"></param>
|
||||||
|
/// <returns></returns>
|
||||||
[ValidateInput(false)]
|
[ValidateInput(false)]
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public JsonResult SubjectSave(LectSD d)
|
public JsonResult SubjectSave(LectSD d)
|
||||||
{
|
{
|
||||||
d.uno = SUserInfo.UserNo; d.uip = GetUserIP();
|
d.uno = SUserInfo.UserNo; d.uip = GetUserIP();
|
||||||
d.userno = SUserInfo.UserNo;
|
d.userno = SUserInfo.UserNo;
|
||||||
|
|
||||||
if (Request.Files.GetMultiple("file1").Where(w => !string.IsNullOrEmpty(w.FileName)).Count() > 0)
|
if (Request.Files.GetMultiple("file1").Where(w => !string.IsNullOrEmpty(w.FileName)).Count() > 0)
|
||||||
{
|
{
|
||||||
d.fgno = SetFile(Request.Files.GetMultiple("file1").Where(w => !string.IsNullOrEmpty(w.FileName)).ToList(), d.fgno ?? 0, "lectsd", "fgno", 1, "XX", false, true, d.cmno);
|
d.fgno = SetFile(Request.Files.GetMultiple("file1")
|
||||||
d.fgno = d.fgno == 0 ? (Int64?)null : d.fgno;
|
.Where(w => !string.IsNullOrEmpty(w.FileName))
|
||||||
|
.ToList(),
|
||||||
|
d.fgno ?? 0,
|
||||||
|
"lectsd",
|
||||||
|
"fgno",
|
||||||
|
1,
|
||||||
|
"XX",
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
d.cmno);
|
||||||
|
|
||||||
|
d.fgno = d.fgno == 0 ? (long?)null : d.fgno;
|
||||||
}
|
}
|
||||||
|
|
||||||
return JsonOK(Dao.Save("cr.lectsd.save", d));
|
return JsonOK(Dao.Save("cr.lectsd.save", d));
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public JsonResult LectSDBoardSave(LectSDBoard d)
|
public JsonResult LectSDBoardSave(LectSDBoard d)
|
||||||
{
|
{
|
||||||
|
|
@ -142,11 +167,13 @@ namespace NP.Base.Controllers
|
||||||
Dao.Insert("cr.lectsdboard.in", d);
|
Dao.Insert("cr.lectsdboard.in", d);
|
||||||
return JsonOK(d.bno);
|
return JsonOK(d.bno);
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public JsonResult LectSDBoardDel(Int64 bno)
|
public JsonResult LectSDBoardDel(Int64 bno)
|
||||||
{
|
{
|
||||||
return JsonOK(Dao.Save("cr.lectsdboard.del", new Hashtable() { {"userno", SUserInfo.UserNo },{"bno", bno },{"uno", SUserInfo.UserNo },{ "uip", GetUserIP()} }));
|
return JsonOK(Dao.Save("cr.lectsdboard.del", new Hashtable() { {"userno", SUserInfo.UserNo },{"bno", bno },{"uno", SUserInfo.UserNo },{ "uip", GetUserIP()} }));
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public JsonResult LectSDBoardCMTSave(BoardCMT c)
|
public JsonResult LectSDBoardCMTSave(BoardCMT c)
|
||||||
{
|
{
|
||||||
|
|
@ -158,11 +185,13 @@ namespace NP.Base.Controllers
|
||||||
}
|
}
|
||||||
return JsonOK(Dao.Save("cr.lectsdboardcmt.up", c));
|
return JsonOK(Dao.Save("cr.lectsdboardcmt.up", c));
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public JsonResult LectSDBoardCMTDel(Int64 bcno)
|
public JsonResult LectSDBoardCMTDel(Int64 bcno)
|
||||||
{
|
{
|
||||||
return JsonOK(Dao.Save("cr.lectsdboardcmt.del", new Hashtable() { { "bcno", bcno }, { "cno", SUserInfo.UserNo }, { "uno", SUserInfo.UserNo }, { "uip", GetUserIP() } }));
|
return JsonOK(Dao.Save("cr.lectsdboardcmt.del", new Hashtable() { { "bcno", bcno }, { "cno", SUserInfo.UserNo }, { "uno", SUserInfo.UserNo }, { "uip", GetUserIP() } }));
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public JsonResult AttCertCheck(long lectno)
|
public JsonResult AttCertCheck(long lectno)
|
||||||
{
|
{
|
||||||
|
|
@ -177,6 +206,7 @@ namespace NP.Base.Controllers
|
||||||
{
|
{
|
||||||
return JsonBack(new JsonRtn() { code = 1000, obj = 2 });
|
return JsonBack(new JsonRtn() { code = 1000, obj = 2 });
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(data.strval))
|
if (!string.IsNullOrEmpty(data.strval))
|
||||||
{
|
{
|
||||||
return JsonBack(new JsonRtn() { code = 1000, obj = 3, msg = data.strval });
|
return JsonBack(new JsonRtn() { code = 1000, obj = 3, msg = data.strval });
|
||||||
|
|
@ -187,6 +217,7 @@ namespace NP.Base.Controllers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public JsonResult AttCertCheckForLectinning(long lectno, long cmino)
|
public JsonResult AttCertCheckForLectinning(long lectno, long cmino)
|
||||||
{
|
{
|
||||||
|
|
@ -215,8 +246,9 @@ namespace NP.Base.Controllers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public JsonResult LectComplete(Int64 lectno)
|
public JsonResult LectComplete(long lectno)
|
||||||
{
|
{
|
||||||
var ispass = Dao.Get<Lect>("grade.ispass", new Hashtable() { { "lectno", lectno } } ).FirstOrDefault().ispass;
|
var ispass = Dao.Get<Lect>("grade.ispass", new Hashtable() { { "lectno", lectno } } ).FirstOrDefault().ispass;
|
||||||
if (ispass == 1)
|
if (ispass == 1)
|
||||||
|
|
@ -230,19 +262,18 @@ namespace NP.Base.Controllers
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public JsonResult ReExamForUser(int exno, Int64 lectno, int extype)
|
public JsonResult ReExamForUser(int exno, long lectno, int extype)
|
||||||
{
|
{
|
||||||
// #xodus extype 추가
|
// #xodus extype 추가
|
||||||
//재응시로그추가로인해 업데이트건 3개일때부터 정상처리
|
//재응시로그추가로인해 업데이트건 3개일때부터 정상처리
|
||||||
return JsonOK(Dao.Save("lect.reexam", new System.Collections.Hashtable() { { "exno", exno }, { "lectno", lectno }, { "extype", extype }, { "uno", SUserInfo.UserNo }, { "uip", GetUserIP() } }) > 2 ? 1 : 0);
|
return JsonOK(Dao.Save("lect.reexam", new Hashtable() { { "exno", exno }, { "lectno", lectno }, { "extype", extype }, { "uno", SUserInfo.UserNo }, { "uip", GetUserIP() } }) > 2 ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public JsonResult delfileOk(int sdno, Int64 lectno)
|
public JsonResult delfileOk(int sdno, long lectno)
|
||||||
{
|
{
|
||||||
//재응시로그추가로인해 업데이트건 3개일때부터 정상처리
|
//재응시로그추가로인해 업데이트건 3개일때부터 정상처리
|
||||||
int result = Dao.Save("lect.lectsd.del", new System.Collections.Hashtable() { { "sdno", sdno }, { "lectno", lectno }, { "uno", SUserInfo.UserNo }, { "uip", GetUserIP() } });
|
int result = Dao.Save("lect.lectsd.del", new Hashtable() { { "sdno", sdno }, { "lectno", lectno }, { "uno", SUserInfo.UserNo }, { "uip", GetUserIP() } });
|
||||||
return JsonOK(result);
|
return JsonOK(result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,9 @@
|
||||||
using System;
|
using NP.Base.ENUM;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.IO;
|
||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
using NP.Base.ENUM;
|
|
||||||
|
|
||||||
public static class Helpers
|
public static class Helpers
|
||||||
{
|
{
|
||||||
|
|
@ -153,6 +151,7 @@ public static class Helpers
|
||||||
}
|
}
|
||||||
return System.Web.Mvc.MvcHtmlString.Create(sb.ToString());
|
return System.Web.Mvc.MvcHtmlString.Create(sb.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String GetYearOption(int minYear, String selected)
|
public static String GetYearOption(int minYear, String selected)
|
||||||
{
|
{
|
||||||
String op = "";
|
String op = "";
|
||||||
|
|
@ -162,6 +161,7 @@ public static class Helpers
|
||||||
}
|
}
|
||||||
return op;
|
return op;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String GetMonthOption(String selected)
|
public static String GetMonthOption(String selected)
|
||||||
{
|
{
|
||||||
String op = "";
|
String op = "";
|
||||||
|
|
@ -171,6 +171,7 @@ public static class Helpers
|
||||||
}
|
}
|
||||||
return op;
|
return op;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static System.Web.Mvc.MvcHtmlString Radio(this System.Web.Mvc.HtmlHelper helper, NP.Model.InputRadio ir)
|
public static System.Web.Mvc.MvcHtmlString Radio(this System.Web.Mvc.HtmlHelper helper, NP.Model.InputRadio ir)
|
||||||
{
|
{
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
@ -275,6 +276,7 @@ public static class Helpers
|
||||||
}
|
}
|
||||||
return System.Web.Mvc.MvcHtmlString.Create(sb.ToString());
|
return System.Web.Mvc.MvcHtmlString.Create(sb.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static System.Web.Mvc.MvcHtmlString Pager(this System.Web.Mvc.HtmlHelper helper, int currentPage, int pagesToShowSize, int pageSize, int totalRecords, String methodname = "gopage")
|
public static System.Web.Mvc.MvcHtmlString Pager(this System.Web.Mvc.HtmlHelper helper, int currentPage, int pagesToShowSize, int pageSize, int totalRecords, String methodname = "gopage")
|
||||||
{
|
{
|
||||||
StringBuilder html = new StringBuilder(@"<footer class='panel-footer'><input type='hidden' id='pagenum' name='pagenum' value='" + currentPage.ToString() + "' /><div class='row'><div class='col-sm-6 text-left'><small class='text-muted inline m-t-sm m-b-sm'>" + totalRecords.ToString("#,0") + " 개의 데이터 </small></div>");
|
StringBuilder html = new StringBuilder(@"<footer class='panel-footer'><input type='hidden' id='pagenum' name='pagenum' value='" + currentPage.ToString() + "' /><div class='row'><div class='col-sm-6 text-left'><small class='text-muted inline m-t-sm m-b-sm'>" + totalRecords.ToString("#,0") + " 개의 데이터 </small></div>");
|
||||||
|
|
@ -314,6 +316,7 @@ public static class Helpers
|
||||||
html.Append(@"</ul></div></div></footer>");
|
html.Append(@"</ul></div></div></footer>");
|
||||||
return System.Web.Mvc.MvcHtmlString.Create(html.ToString());
|
return System.Web.Mvc.MvcHtmlString.Create(html.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static System.Web.Mvc.MvcHtmlString Pager2(this System.Web.Mvc.HtmlHelper helper, int currentPage, int pagesToShowSize, int pageSize, int totalRecords, String methodname = "gopage", String fid = "mform", String pid = "pagenum")
|
public static System.Web.Mvc.MvcHtmlString Pager2(this System.Web.Mvc.HtmlHelper helper, int currentPage, int pagesToShowSize, int pageSize, int totalRecords, String methodname = "gopage", String fid = "mform", String pid = "pagenum")
|
||||||
{
|
{
|
||||||
StringBuilder html = new StringBuilder(@"<div class='paging'><input type='hidden' id='pagenum' name='pagenum' value='" + currentPage.ToString() + "' />");
|
StringBuilder html = new StringBuilder(@"<div class='paging'><input type='hidden' id='pagenum' name='pagenum' value='" + currentPage.ToString() + "' />");
|
||||||
|
|
@ -352,6 +355,7 @@ public static class Helpers
|
||||||
html.Append(@"</div>");
|
html.Append(@"</div>");
|
||||||
return System.Web.Mvc.MvcHtmlString.Create(html.ToString());
|
return System.Web.Mvc.MvcHtmlString.Create(html.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String GetFromToOption(int start, int end, String textAppend, String selected)
|
public static String GetFromToOption(int start, int end, String textAppend, String selected)
|
||||||
{
|
{
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
@ -361,10 +365,12 @@ public static class Helpers
|
||||||
}
|
}
|
||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string RenderView(this System.Web.Mvc.Controller controller, string viewName, object model)
|
public static string RenderView(this System.Web.Mvc.Controller controller, string viewName, object model)
|
||||||
{
|
{
|
||||||
return RenderView(controller, viewName, new System.Web.Mvc.ViewDataDictionary(model));
|
return RenderView(controller, viewName, new System.Web.Mvc.ViewDataDictionary(model));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string RenderView(this System.Web.Mvc.Controller controller, string viewName, System.Web.Mvc.ViewDataDictionary viewData)
|
public static string RenderView(this System.Web.Mvc.Controller controller, string viewName, System.Web.Mvc.ViewDataDictionary viewData)
|
||||||
{
|
{
|
||||||
var controllerContext = controller.ControllerContext;
|
var controllerContext = controller.ControllerContext;
|
||||||
|
|
@ -398,6 +404,76 @@ public static class Helpers
|
||||||
/// <param name="isDeleteZipFile">zip파일 삭제 여부</param>
|
/// <param name="isDeleteZipFile">zip파일 삭제 여부</param>
|
||||||
/// <returns>압축 풀기 성공 여부 </returns>
|
/// <returns>압축 풀기 성공 여부 </returns>
|
||||||
public static bool UnZipFiles(string zipFilePath, string unZipTargetFolderPath, string password = null, bool isDeleteZipFile = false)
|
public static bool UnZipFiles(string zipFilePath, string unZipTargetFolderPath, string password = null, bool isDeleteZipFile = false)
|
||||||
|
{
|
||||||
|
// 반환 값
|
||||||
|
bool retVal = false;
|
||||||
|
|
||||||
|
// ZIP 파일 존재 여부 확인
|
||||||
|
if (File.Exists(zipFilePath))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (var zipInputStream = new ICSharpCode.SharpZipLib.Zip.ZipInputStream(File.OpenRead(zipFilePath)))
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(password))
|
||||||
|
{
|
||||||
|
zipInputStream.Password = password; // 패스워드 설정
|
||||||
|
}
|
||||||
|
|
||||||
|
ICSharpCode.SharpZipLib.Zip.ZipEntry theEntry;
|
||||||
|
|
||||||
|
// 압축 파일 내의 엔트리를 읽으면서 처리
|
||||||
|
while ((theEntry = zipInputStream.GetNextEntry()) != null)
|
||||||
|
{
|
||||||
|
// 압축 엔트리 이름 처리
|
||||||
|
string directoryName = Path.GetDirectoryName(theEntry.Name);
|
||||||
|
string fileName = Path.GetFileName(theEntry.Name);
|
||||||
|
|
||||||
|
// 디렉터리 생성
|
||||||
|
if (!string.IsNullOrEmpty(directoryName))
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(Path.Combine(unZipTargetFolderPath, directoryName));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 파일이 있는 경우
|
||||||
|
if (!string.IsNullOrEmpty(fileName))
|
||||||
|
{
|
||||||
|
string fullPath = Path.Combine(unZipTargetFolderPath, theEntry.Name);
|
||||||
|
|
||||||
|
// 파일스트림 생성 및 파일 복사
|
||||||
|
using (FileStream streamWriter = File.Create(fullPath))
|
||||||
|
{
|
||||||
|
byte[] data = new byte[2048];
|
||||||
|
int size;
|
||||||
|
while ((size = zipInputStream.Read(data, 0, data.Length)) > 0)
|
||||||
|
{
|
||||||
|
streamWriter.Write(data, 0, size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 압축 해제가 성공적으로 완료되었음을 표시
|
||||||
|
retVal = true;
|
||||||
|
|
||||||
|
// ZIP 파일 삭제를 원하는 경우 처리
|
||||||
|
if (isDeleteZipFile)
|
||||||
|
{
|
||||||
|
File.Delete(zipFilePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
retVal = false; // 예외 발생 시 실행 실패로 표시
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return retVal;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
public static bool UnZipFiles(string zipFilePath, string unZipTargetFolderPath, string password = null, bool isDeleteZipFile = false)
|
||||||
{
|
{
|
||||||
bool retVal = false;
|
bool retVal = false;
|
||||||
|
|
||||||
|
|
@ -469,6 +545,8 @@ public static class Helpers
|
||||||
}
|
}
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
public static string MD5Hash(string data)
|
public static string MD5Hash(string data)
|
||||||
{
|
{
|
||||||
|
|
@ -522,4 +600,5 @@ public static class Helpers
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,9 @@
|
||||||
<typeAlias alias="document" type="NP.Model.document, NP.Model" />
|
<typeAlias alias="document" type="NP.Model.document, NP.Model" />
|
||||||
<typeAlias alias="textvalue" type="NP.Model.textvalue, NP.Model" />
|
<typeAlias alias="textvalue" type="NP.Model.textvalue, NP.Model" />
|
||||||
<typeAlias alias="completion" type="NP.Model.Completion, NP.Model" />
|
<typeAlias alias="completion" type="NP.Model.Completion, NP.Model" />
|
||||||
</alias>
|
<typeAlias alias="croomlectsdinfo" type="NP.Model.CRoomLectSdInfo, NP.Model" />
|
||||||
|
|
||||||
|
</alias>
|
||||||
<cacheModels>
|
<cacheModels>
|
||||||
<cacheModel id="croomCache" implementation="LRU" >
|
<cacheModel id="croomCache" implementation="LRU" >
|
||||||
<flushInterval hours="1" />
|
<flushInterval hours="1" />
|
||||||
|
|
@ -1911,5 +1913,39 @@
|
||||||
]]>
|
]]>
|
||||||
</select>-->
|
</select>-->
|
||||||
|
|
||||||
|
<!-- 사용자의 과제정보 (userno: 유저키, lectno: 수강키, iscurlect: 수강기간일자내 포함 여부) -->
|
||||||
|
<select id="cr.lectsdinfo" parameterClass="hashtable" resultClass="croomlectsdinfo">
|
||||||
|
SELECT b.sdname
|
||||||
|
, a.lectno
|
||||||
|
, a2.cmno
|
||||||
|
, a.userno
|
||||||
|
, b.sdno
|
||||||
|
, a.sdate
|
||||||
|
, a.edate
|
||||||
|
, a.attrate
|
||||||
|
, b.sdcondition
|
||||||
|
, (CASE
|
||||||
|
WHEN c.submittime IS NOT NULL
|
||||||
|
THEN TRUE
|
||||||
|
ELSE FALSE
|
||||||
|
END) AS isSubmit
|
||||||
|
, c.submittime
|
||||||
|
, (CASE WHEN c.checktime IS NOT NULL
|
||||||
|
THEN TRUE
|
||||||
|
ELSE FALSE
|
||||||
|
END) AS isCheck
|
||||||
|
, c.checktime
|
||||||
|
, a.edate
|
||||||
|
, a.sdate
|
||||||
|
, NOW() BETWEEN sdate AND edate AS iscurrentlecture
|
||||||
|
FROM lect a
|
||||||
|
INNER JOIN cm a2 ON a2.cmno = a.cmno
|
||||||
|
INNER JOIN cmsd b ON b.cmno = a.cmno AND b.sdtype = 0 AND b.isdel = 0
|
||||||
|
LEFT OUTER JOIN lectsd c ON c.lectno = a.lectno AND c.sdno = b.sdno
|
||||||
|
WHERE a.userno = #userno#
|
||||||
|
<isNotNull property="lectno" prepend="and">a.lectno = #lectno#</isNotNull>
|
||||||
|
<isNotNull property="iscurlect" prepend="and">NOW() BETWEEN a.sdate AND a.edate</isNotNull>
|
||||||
|
</select>
|
||||||
|
|
||||||
</statements>
|
</statements>
|
||||||
</sqlMap>
|
</sqlMap>
|
||||||
|
|
|
||||||
|
|
@ -1,109 +1,319 @@
|
||||||
using System;
|
using NP.Model;
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Web;
|
|
||||||
using System.Web.Mvc;
|
using System.Web.Mvc;
|
||||||
|
|
||||||
using NP.Model;
|
|
||||||
using NP.Base;
|
|
||||||
using System.Web.Routing;
|
|
||||||
|
|
||||||
namespace NP.FO.Controllers
|
namespace NP.FO.Controllers
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 강의실 컨트롤러
|
||||||
|
/// </summary>
|
||||||
public class CRoomController : CRoomBaseController
|
public class CRoomController : CRoomBaseController
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 강의실 컨트롤러 메서드가 실행전 호출됨
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="filterContext"></param>
|
||||||
protected override void OnActionExecuting(ActionExecutingContext filterContext)
|
protected override void OnActionExecuting(ActionExecutingContext filterContext)
|
||||||
{
|
{
|
||||||
base.OnActionExecuting(filterContext);
|
base.OnActionExecuting(filterContext);
|
||||||
ViewBag.Files = (new NP.Model.VMBase()).Files;
|
ViewBag.Files = new VMBase().Files;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 강의실 > 홈
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
public ActionResult Index()
|
public ActionResult Index()
|
||||||
{
|
{
|
||||||
vm.Lect = Dao.Get<Lect>("cr.main.mygrade", new System.Collections.Hashtable() { { "lectno", vm.croomlectno }, { "cmno", vm.croomcmno},{ "userno", SUserInfo.UserNo} }).FirstOrDefault();
|
ViewBag.fronturl = $"https://{Request.Url.Host}";
|
||||||
|
string bmnos = null;
|
||||||
|
|
||||||
|
#region + vm.Lect = cr.main.mygrade
|
||||||
|
var p5 = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "lectno", vm.croomlectno },
|
||||||
|
{ "cmno", vm.croomcmno },
|
||||||
|
{ "userno", SUserInfo.UserNo }
|
||||||
|
};
|
||||||
|
|
||||||
|
vm.Lect = Dao.Get<Lect>("cr.main.mygrade", p5).FirstOrDefault();
|
||||||
|
#endregion
|
||||||
|
|
||||||
ViewBag.fronturl = "https://" + Request.Url.Host;
|
|
||||||
//ViewBag.fronturl = GetConfig("fronturl");
|
|
||||||
ViewBag.Mobile = Dao.Get<Users>("users.users", new System.Collections.Hashtable() { { "userno", SUserInfo.UserNo } }).FirstOrDefault().mobile;
|
|
||||||
if (vm.Lect == null)
|
if (vm.Lect == null)
|
||||||
{
|
{
|
||||||
return Redirect("/My/Lecture");
|
return Redirect("/My/Lecture");
|
||||||
}
|
}
|
||||||
String bmnos = null;
|
|
||||||
|
#region + ViewBag.Mobile = users.users
|
||||||
|
var p6 = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "userno", SUserInfo.UserNo }
|
||||||
|
};
|
||||||
|
|
||||||
|
ViewBag.Mobile = Dao.Get<Users>("users.users", p6).FirstOrDefault().mobile;
|
||||||
|
#endregion
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(ViewBag.mainboardmaster))
|
if (!string.IsNullOrEmpty(ViewBag.mainboardmaster))
|
||||||
{
|
{
|
||||||
foreach(var s in ViewBag.mainboardmaster.Split(';'))
|
foreach (var s in ViewBag.mainboardmaster.Split(';'))
|
||||||
{
|
{
|
||||||
bmnos += "," + s.Split(':')[0];
|
bmnos += "," + s.Split(':')[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var pplogGet = Dao.Get<Lect>("lect.pplog.get", new System.Collections.Hashtable() { { "userno", SUserInfo.UserNo }, { "lectno", vm.Lect.lectno } }).FirstOrDefault();
|
|
||||||
|
#region + var pplogGet = lect.pplog.get
|
||||||
|
var p2 = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "userno", SUserInfo.UserNo },
|
||||||
|
{ "lectno", vm.Lect.lectno }
|
||||||
|
};
|
||||||
|
var pplogGet = Dao.Get<Lect>("lect.pplog.get", p2).FirstOrDefault();
|
||||||
|
|
||||||
vm.Lect.zstring1 = pplogGet.zstring1;
|
vm.Lect.zstring1 = pplogGet.zstring1;
|
||||||
vm.Lect.zstring2 = pplogGet.zstring2;
|
vm.Lect.zstring2 = pplogGet.zstring2;
|
||||||
vm.Lect.zstring3 = pplogGet.zstring3;
|
vm.Lect.zstring3 = pplogGet.zstring3;
|
||||||
vm.Lect.zstring4 = pplogGet.zstring4;
|
vm.Lect.zstring4 = pplogGet.zstring4;
|
||||||
vm.Lect.zstring5 = pplogGet.zstring5;
|
vm.Lect.zstring5 = pplogGet.zstring5;
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region + vm.Datas = cr.main.boardalarm
|
||||||
|
var p3 = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "bmnos", !string.IsNullOrEmpty(bmnos) ? bmnos.Substring(1) : bmnos },
|
||||||
|
{ "lect", vm.croomlectno },
|
||||||
|
{ "cmno", vm.croomcmno },
|
||||||
|
{ "lectno", vm.croomlectno },
|
||||||
|
{ "userno", SUserInfo.UserNo }
|
||||||
|
};
|
||||||
|
|
||||||
|
vm.Datas = Dao.Get<Data>("cr.main.boardalarm", p3);
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region + vm.LectInnings = cr.cminnings
|
||||||
|
var p1 = new Hashtable();
|
||||||
|
p1.Add("lectno", vm.croomlectno);
|
||||||
|
p1.Add("userno", SUserInfo.UserNo);
|
||||||
|
|
||||||
|
// 진도율 100% 이하일떄 6개 제한을 둠
|
||||||
|
if (vm.Lect.attrate < 100)
|
||||||
|
{
|
||||||
|
p1.Add("limit", 6);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 진도율이 100% 이하 또는 디버깅용 로컬일때가 아니면
|
||||||
|
// "오늘 시청 가능한 limit 개 차시 중" 이 위에 limit 만큼 보여짐
|
||||||
|
if (vm.Lect.attrate < 100)
|
||||||
|
{
|
||||||
|
p1.Add("notstudy", 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
vm.LectInnings = Dao.Get<LectInning>("cr.cminnings", p1);
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
vm.intval2 = Convert.ToInt32(GetConfig("inninglimit") ?? "10");
|
||||||
|
|
||||||
vm.Datas = Dao.Get<Data>("cr.main.boardalarm", new System.Collections.Hashtable() { { "bmnos", bmnos != null ? bmnos.Substring(1) : bmnos},{ "lect", vm.croomlectno },{ "cmno", vm.croomcmno }, { "lectno", vm.croomlectno }, { "userno", SUserInfo.UserNo } });
|
|
||||||
vm.LectInnings = Dao.Get<LectInning>("cr.cminnings", new System.Collections.Hashtable() { { "lectno", vm.croomlectno },{ "userno",SUserInfo.UserNo}, { "notstudy" + (Request.IsLocal ? "x" : ""), 1 },{ "limit", 6} });
|
|
||||||
vm.intval2 = Convert.ToInt32((GetConfig("inninglimit") ?? "10"));
|
|
||||||
foreach (var lectInning in vm.LectInnings)
|
foreach (var lectInning in vm.LectInnings)
|
||||||
{
|
{
|
||||||
//lectInning.daylectinninglimit = lectInning.daylectinninglimit == 0 ? 9999 : lectInning.daylectinninglimit;
|
|
||||||
lectInning.daylectinninglimit = vm.intval2;
|
lectInning.daylectinninglimit = vm.intval2;
|
||||||
}
|
}
|
||||||
if (vm.LectInnings.Count() > 0 /*&& !string.IsNullOrEmpty(vm.LectInnings.FirstOrDefault().existslectinning)*/ )
|
|
||||||
|
if (vm.LectInnings.Count() > 0)
|
||||||
{
|
{
|
||||||
vm.intval = Dao.Get<LectInning>("cr.lectinnings", new System.Collections.Hashtable() { /*{ "lectno", vm.croomlectno }*/ {"userno",SUserInfo.UserNo }, { "isfinishtoday", 1 } }).Count();
|
#region + vm.intval = cr.lectinnings
|
||||||
|
var p7 = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "userno", SUserInfo.UserNo },
|
||||||
|
{ "isfinishtoday", 1 }
|
||||||
|
};
|
||||||
|
|
||||||
|
vm.intval = Dao.Get<LectInning>("cr.lectinnings", p7).Count();
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
return CView();
|
return CView();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 강의실 > 강좌소개
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
public ActionResult Plan()
|
public ActionResult Plan()
|
||||||
{
|
{
|
||||||
vm.CM = Dao.Get<CM>("cm.cm", new System.Collections.Hashtable() { { "cmno", vm.croomcmno },{ "htmlcolumns", ",a.introhtml,a.targethtml,a.goalhtml,a.contenthtml,a.studyplace,cc.cname studyplacename" } }).First();
|
var p = new Hashtable();
|
||||||
vm.CMPRs = Dao.Get<CMPR>("cm.cmprs", new System.Collections.Hashtable() { { "cmno", vm.CM.cmno }, { "usertype", 11 } });
|
|
||||||
vm.CMEV = Dao.Get<CMEV>("cm.cmev", new System.Collections.Hashtable() { { "cmno", vm.CM.cmno } }).First();
|
#region + vm.CM = cm.cm
|
||||||
vm.intval = Dao.Get<Lect>("lect.lects.my", new System.Collections.Hashtable() { { "lecnto", vm.croomlectno } }).First().isrebate;
|
p = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "cmno", vm.croomcmno },
|
||||||
|
{ "htmlcolumns", ",a.introhtml,a.targethtml,a.goalhtml,a.contenthtml,a.studyplace,cc.cname studyplacename" }
|
||||||
|
};
|
||||||
|
vm.CM = Dao.Get<CM>("cm.cm", p).First();
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region + vm.CMPRs = cm.cmprs
|
||||||
|
p.Clear();
|
||||||
|
p = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "cmno", vm.CM.cmno },
|
||||||
|
{ "usertype", 11 }
|
||||||
|
};
|
||||||
|
|
||||||
|
vm.CMPRs = Dao.Get<CMPR>("cm.cmprs", p);
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region + vm.CMEV = cm.cmev
|
||||||
|
p.Clear();
|
||||||
|
p = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "cmno", vm.CM.cmno }
|
||||||
|
};
|
||||||
|
vm.CMEV = Dao.Get<CMEV>("cm.cmev", p).First();
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region + vm.intval = lect.lects.my
|
||||||
|
p.Clear();
|
||||||
|
p = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "lectno", vm.croomlectno }
|
||||||
|
};
|
||||||
|
vm.intval = Dao.Get<Lect>("lect.lects.my", p).First().isrebate;
|
||||||
|
#endregion
|
||||||
|
|
||||||
return CView();
|
return CView();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 강의실 > 동영상시청
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
public ActionResult Innings()
|
public ActionResult Innings()
|
||||||
{
|
{
|
||||||
vm.LectInnings = Dao.Get<LectInning>("cr.cminnings", new System.Collections.Hashtable() { { "lectno", vm.croomlectno }, { "userno", SUserInfo.UserNo } });
|
#region + vm.LectInnings = cr.cminnings
|
||||||
vm.intval2 = Convert.ToInt32((GetConfig("inninglimit") ?? "10"));
|
var p = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "lectno", vm.croomlectno },
|
||||||
|
{ "userno", SUserInfo.UserNo }
|
||||||
|
};
|
||||||
|
vm.LectInnings = Dao.Get<LectInning>("cr.cminnings", p);
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
vm.intval2 = Convert.ToInt32(GetConfig("inninglimit") ?? "10");
|
||||||
|
|
||||||
foreach (var lectInning in vm.LectInnings)
|
foreach (var lectInning in vm.LectInnings)
|
||||||
{
|
{
|
||||||
//lectInning.daylectinninglimit = lectInning.daylectinninglimit == 0 ? 9999 : lectInning.daylectinninglimit;
|
|
||||||
lectInning.daylectinninglimit = vm.intval2;
|
lectInning.daylectinninglimit = vm.intval2;
|
||||||
}
|
}
|
||||||
ViewBag.Mobile = Dao.Get<Users>("users.users", new System.Collections.Hashtable() { { "userno", SUserInfo.UserNo } }).FirstOrDefault().mobile;
|
|
||||||
|
#region + ViewBag.Mobile = users.users
|
||||||
|
var p2 = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "userno", SUserInfo.UserNo }
|
||||||
|
};
|
||||||
|
ViewBag.Mobile = Dao.Get<Users>("users.users", p2).FirstOrDefault().mobile;
|
||||||
|
#endregion
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(vm.LectInnings.FirstOrDefault().existslectinning) && vm.LectInnings.Count() > 0)
|
if (!string.IsNullOrEmpty(vm.LectInnings.FirstOrDefault().existslectinning) && vm.LectInnings.Count() > 0)
|
||||||
{
|
{
|
||||||
vm.intval = Dao.Get<LectInning>("cr.lectinnings", new System.Collections.Hashtable() { /*{ "lectno", vm.croomlectno }*/ {"userno",SUserInfo.UserNo }, { "isfinishtoday", 1 } }).Count();
|
#region + vm.intval = cr.lectinnings
|
||||||
|
var p3 = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "userno", SUserInfo.UserNo },
|
||||||
|
{ "isfinishtoday", 1 }
|
||||||
|
};
|
||||||
|
vm.intval = Dao.Get<LectInning>("cr.lectinnings", p3).Count();
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
vm.CMRSes = Dao.Get<CMRS>("cr.mycmrs", new System.Collections.Hashtable() { { "lectno", vm.croomlectno }, { "userno", SUserInfo.UserNo } });
|
|
||||||
|
#region + vm.CMRSes = cr.mycmrs
|
||||||
|
var p4 = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "lectno", vm.croomlectno },
|
||||||
|
{ "userno", SUserInfo.UserNo }
|
||||||
|
};
|
||||||
|
vm.CMRSes = Dao.Get<CMRS>("cr.mycmrs", p4);
|
||||||
|
#endregion
|
||||||
|
|
||||||
return CView();
|
return CView();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 강의실 > 설문참여
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
public ActionResult Research()
|
public ActionResult Research()
|
||||||
{
|
{
|
||||||
vm.CMRSes = Dao.Get<CMRS>("cr.mycmrs", new System.Collections.Hashtable() { { "lectno", vm.croomlectno },{ "userno",SUserInfo.UserNo} });
|
#region + vm.CMRSes = cr.mycmrs
|
||||||
Lect lect = Dao.Get<Lect>("cr.checklectdate", new System.Collections.Hashtable() { { "lectno", vm.croomlectno } }).First();
|
var p = new Hashtable()
|
||||||
ViewBag.isres = DateTime.Now <= lect.edate? 1 : -1;
|
{
|
||||||
|
{ "lectno", vm.croomlectno },
|
||||||
|
{ "userno", SUserInfo.UserNo }
|
||||||
|
};
|
||||||
|
vm.CMRSes = Dao.Get<CMRS>("cr.mycmrs", p);
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region + lect = cr.checklectdate
|
||||||
|
var p2 = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "lectno", vm.croomlectno }
|
||||||
|
};
|
||||||
|
Lect lect = Dao.Get<Lect>("cr.checklectdate", p2).First();
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
ViewBag.isres = DateTime.Now <= lect.edate ? 1 : -1;
|
||||||
|
|
||||||
return CView();
|
return CView();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 강의실 > 성적확인
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
public ActionResult Grade()
|
public ActionResult Grade()
|
||||||
{
|
{
|
||||||
vm.Lect = Dao.Get<Lect>("cr.main.mygrade", new System.Collections.Hashtable() { { "lectno", vm.croomlectno }, { "cmno", vm.croomcmno },{ "userno", SUserInfo.UserNo} }).FirstOrDefault();
|
#region + vm.Lect = cr.main.mygrade
|
||||||
|
var p = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "lectno", vm.croomlectno },
|
||||||
|
{ "cmno", vm.croomcmno },
|
||||||
|
{ "userno", SUserInfo.UserNo }
|
||||||
|
};
|
||||||
|
|
||||||
|
vm.Lect = Dao.Get<Lect>("cr.main.mygrade", p).FirstOrDefault();
|
||||||
|
#endregion
|
||||||
|
|
||||||
return CView();
|
return CView();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 강의실 > 게시판 (croombmno 1:수료절차안내, 2:Q&A ...)
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="cvm"></param>
|
||||||
|
/// <returns></returns>
|
||||||
public ActionResult Boards(VMCRoom cvm)
|
public ActionResult Boards(VMCRoom cvm)
|
||||||
{
|
{
|
||||||
ViewBag.croombmno = cvm.croombmno.ToString();
|
ViewBag.croombmno = cvm.croombmno.ToString();
|
||||||
cvm.BM = Dao.Get<BoardMaster>("board.bms", new System.Collections.Hashtable() { { "bmno", cvm.croombmno } }).First();
|
|
||||||
|
#region + cvm.BM = board.bms
|
||||||
|
var p = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "bmno", cvm.croombmno }
|
||||||
|
};
|
||||||
|
cvm.BM = Dao.Get<BoardMaster>("board.bms", p).First();
|
||||||
|
#endregion
|
||||||
|
|
||||||
if (cvm.BM.isuseopening == 1)
|
if (cvm.BM.isuseopening == 1)
|
||||||
{
|
{
|
||||||
|
#region + cvm.BMOs = board.bmos
|
||||||
cvm.BMOs = Dao.Get<BoardMasterOpening>("board.bmos", cvm.BM.bmno);
|
cvm.BMOs = Dao.Get<BoardMasterOpening>("board.bmos", cvm.BM.bmno);
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
cvm.pagerowcount = cvm.pagerowcount < 1 ? 10 : cvm.pagerowcount;
|
cvm.pagerowcount = cvm.pagerowcount < 1 ? 10 : cvm.pagerowcount;
|
||||||
|
|
||||||
|
#region + cvm.Boards = board.bs
|
||||||
var ht = SetHash(cvm);
|
var ht = SetHash(cvm);
|
||||||
ht.Add("bmno", cvm.BM.bmno);
|
ht.Add("bmno", cvm.BM.bmno);
|
||||||
ht.Add("isopen", 1);
|
ht.Add("isopen", 1);
|
||||||
|
|
@ -112,137 +322,302 @@ namespace NP.FO.Controllers
|
||||||
ht.Add("scc", cvm.scc);
|
ht.Add("scc", cvm.scc);
|
||||||
ht.Add("cmno", cvm.croomcmno < 1 ? base.vm.croomcmno : cvm.croomcmno);
|
ht.Add("cmno", cvm.croomcmno < 1 ? base.vm.croomcmno : cvm.croomcmno);
|
||||||
cvm.Boards = Dao.Get<Board>("board.bs", ht);
|
cvm.Boards = Dao.Get<Board>("board.bs", ht);
|
||||||
|
#endregion
|
||||||
|
|
||||||
cvm.pagetotalcount = GetCount(cvm.Boards.FirstOrDefault());
|
cvm.pagetotalcount = GetCount(cvm.Boards.FirstOrDefault());
|
||||||
cvm.pageviewcount = cvm.Boards.Count();
|
cvm.pageviewcount = cvm.Boards.Count();
|
||||||
|
|
||||||
return CView(cvm);
|
return CView(cvm);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ActionResult BoardView(VMCRoom cvm)
|
public ActionResult BoardView(VMCRoom cvm)
|
||||||
{
|
{
|
||||||
ViewBag.croombmno = cvm.croombmno.ToString();
|
ViewBag.croombmno = cvm.croombmno.ToString();
|
||||||
if (SUserInfo.UserNo < 1) { return Redirect("/Account/Index"); }
|
|
||||||
cvm.Board = Dao.Get<Board>("board.bs", new System.Collections.Hashtable() { { "bno", cvm.BNo }, { "getcontents", 1 } }).First();
|
if (SUserInfo.UserNo < 1)
|
||||||
if (cvm.Board.issecr == 1 && !(cvm.Board.cno == SUserInfo.UserNo || cvm.Board.pcno == SUserInfo.UserNo)) { return Redirect("/"); }
|
{
|
||||||
|
return Redirect("/Account/Index");
|
||||||
|
}
|
||||||
|
|
||||||
|
#region + cvm.Board = board.bs
|
||||||
|
var p = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "bno", cvm.BNo },
|
||||||
|
{ "getcontents", 1 }
|
||||||
|
};
|
||||||
|
cvm.Board = Dao.Get<Board>("board.bs", p).First();
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
if (cvm.Board.issecr == 1 && !(cvm.Board.cno == SUserInfo.UserNo || cvm.Board.pcno == SUserInfo.UserNo))
|
||||||
|
{
|
||||||
|
return Redirect("/");
|
||||||
|
}
|
||||||
|
|
||||||
if (cvm.Board.cno != SUserInfo.UserNo)
|
if (cvm.Board.cno != SUserInfo.UserNo)
|
||||||
{
|
{
|
||||||
|
#region + board.bd.read
|
||||||
Dao.Save("board.bd.read", cvm.BNo);
|
Dao.Save("board.bd.read", cvm.BNo);
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
cvm.FileList = new List<File>() { };
|
cvm.FileList = new List<File>() { };
|
||||||
|
|
||||||
if (cvm.Board.fgno != null)
|
if (cvm.Board.fgno != null)
|
||||||
{
|
{
|
||||||
cvm.FileList = GetFiles(cvm.Board.fgno.Value);
|
cvm.FileList = GetFiles(cvm.Board.fgno.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cvm.Board.isreply == 1)
|
if (cvm.Board.isreply == 1)
|
||||||
{
|
{
|
||||||
|
#region + cvm.BoardCMTs = board.boardcmts
|
||||||
cvm.BoardCMTs = Dao.Get<BoardCMT>("board.boardcmts", cvm.Board.bno);
|
cvm.BoardCMTs = Dao.Get<BoardCMT>("board.boardcmts", cvm.Board.bno);
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
return CView(cvm);
|
return CView(cvm);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ActionResult BoardReg(VMCRoom vm)
|
public ActionResult BoardReg(VMCRoom vm)
|
||||||
{
|
{
|
||||||
ViewBag.croombmno = vm.croombmno.ToString();
|
ViewBag.croombmno = vm.croombmno.ToString();
|
||||||
if (SUserInfo.UserNo < 1) { return Redirect("/Account/Index?ru=" + Request.Url.PathAndQuery); }
|
|
||||||
|
if (SUserInfo.UserNo < 1)
|
||||||
|
{
|
||||||
|
return Redirect($"/Account/Index?ru={Request.Url.PathAndQuery}");
|
||||||
|
}
|
||||||
|
|
||||||
vm.BMOs = new List<BoardMasterOpening>() { };
|
vm.BMOs = new List<BoardMasterOpening>() { };
|
||||||
vm.Board = new Board() { pbno = vm.PBNo };
|
vm.Board = new Board()
|
||||||
|
{
|
||||||
|
pbno = vm.PBNo
|
||||||
|
};
|
||||||
|
|
||||||
if (vm.BNo > 0)
|
if (vm.BNo > 0)
|
||||||
{
|
{
|
||||||
vm.Board = Dao.Get<Board>("board.bs", new System.Collections.Hashtable() { { "bno", vm.BNo }, { "getcontents", 1 } }).First();
|
#region + vm.Board = board.bs
|
||||||
|
var p = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "bno", vm.BNo },
|
||||||
|
{ "getcontents", 1 }
|
||||||
|
};
|
||||||
|
vm.Board = Dao.Get<Board>("board.bs", p).First();
|
||||||
|
#endregion
|
||||||
|
|
||||||
if (vm.Board.isuseopening == 1)
|
if (vm.Board.isuseopening == 1)
|
||||||
{
|
{
|
||||||
|
#region + vm.BMOs = board.bmos
|
||||||
vm.BMOs = Dao.Get<BoardMasterOpening>("board.bmos", vm.Board.bmno);
|
vm.BMOs = Dao.Get<BoardMasterOpening>("board.bmos", vm.Board.bmno);
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ((vm.PBNo ?? 0) > 0)
|
if ((vm.PBNo ?? 0) > 0)
|
||||||
{
|
{
|
||||||
vm.Board.psubject = Dao.Get<Board>("board.bs", new System.Collections.Hashtable() { { "bno", vm.PBNo } }).First().subject;
|
#region + vm.Board.psubject = "board.bs"
|
||||||
|
var p = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "bno", vm.PBNo }
|
||||||
|
};
|
||||||
|
vm.Board.psubject = Dao.Get<Board>("board.bs", p).First().subject;
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
vm.BM = Dao.Get<BoardMaster>("board.bms", new System.Collections.Hashtable() { { "bmno", vm.croombmno } }).First();
|
|
||||||
|
#region + vm.BM = board.bms
|
||||||
|
var p2 = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "bmno", vm.croombmno }
|
||||||
|
};
|
||||||
|
vm.BM = Dao.Get<BoardMaster>("board.bms", p2).First();
|
||||||
|
#endregion
|
||||||
|
|
||||||
vm.Board.isreply = vm.BM.isreply;
|
vm.Board.isreply = vm.BM.isreply;
|
||||||
vm.Board.isuseopening = vm.BM.isuseopening;
|
vm.Board.isuseopening = vm.BM.isuseopening;
|
||||||
vm.Board.bmno = vm.BM.bmno;
|
vm.Board.bmno = vm.BM.bmno;
|
||||||
|
|
||||||
if (vm.BM.isuseopening == 1)
|
if (vm.BM.isuseopening == 1)
|
||||||
{
|
{
|
||||||
|
#region + vm.BMOs = board.bmos
|
||||||
vm.BMOs = Dao.Get<BoardMasterOpening>("board.bmos", vm.BM.bmno);
|
vm.BMOs = Dao.Get<BoardMasterOpening>("board.bmos", vm.BM.bmno);
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (vm.Board.issecr == 1 && vm.Board.cno != SUserInfo.UserNo) { return Redirect("/"); }
|
|
||||||
|
if (vm.Board.issecr == 1 && vm.Board.cno != SUserInfo.UserNo)
|
||||||
|
{
|
||||||
|
return Redirect("/");
|
||||||
|
}
|
||||||
|
|
||||||
vm.FileList = new List<File>() { };
|
vm.FileList = new List<File>() { };
|
||||||
|
|
||||||
if (vm.Board.fgno != null)
|
if (vm.Board.fgno != null)
|
||||||
{
|
{
|
||||||
vm.FileList = GetFiles(vm.Board.fgno.Value);
|
vm.FileList = GetFiles(vm.Board.fgno.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vm.Board.isreply == 1 && vm.Board.bno > 0)
|
if (vm.Board.isreply == 1 && vm.Board.bno > 0)
|
||||||
{
|
{
|
||||||
|
#region + vm.BoardCMTs = board.boardcmts
|
||||||
vm.BoardCMTs = Dao.Get<BoardCMT>("board.boardcmts", vm.Board.bno);
|
vm.BoardCMTs = Dao.Get<BoardCMT>("board.boardcmts", vm.Board.bno);
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
return CView(vm);
|
return CView(vm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 강의실 > 시험응시/과제제출
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="vm"></param>
|
||||||
|
/// <returns></returns>
|
||||||
public ActionResult Estimation(VMCRoom vm)
|
public ActionResult Estimation(VMCRoom vm)
|
||||||
{
|
{
|
||||||
vm.Datas = Dao.Get<Data>("cr.myestimation", new System.Collections.Hashtable() { { "lectno", vm.croomlectno },{ "userno", SUserInfo.UserNo },
|
#region + vm.Datas = cr.myestimation
|
||||||
{"exam"+(vm.tabidx == 0 || vm.tabidx == 1?"":"x"),1 },
|
var p1 = new Hashtable()
|
||||||
{"subject"+(vm.tabidx == 0 || vm.tabidx == 2?"":"x"),1 },
|
|
||||||
{"discuss"+(vm.tabidx == 0 || vm.tabidx == 3?"":"x"),1 }
|
|
||||||
});
|
|
||||||
|
|
||||||
ViewBag.exCheck = true; // true일때 lms에서 시험내용으로 진입 가능
|
|
||||||
|
|
||||||
var lectCheck = Dao.Get<Data>("cr.myExCheck", new System.Collections.Hashtable() { { "lectno", vm.croomlectno }, { "userno", SUserInfo.UserNo } });
|
|
||||||
|
|
||||||
if (lectCheck.Count > 0)
|
|
||||||
{
|
{
|
||||||
ViewBag.exCheck = true;
|
{ "lectno", vm.croomlectno },
|
||||||
}
|
{ "userno", SUserInfo.UserNo },
|
||||||
else
|
{ "exam"+(vm.tabidx == 0 || vm.tabidx == 1 ? "" : "x"), 1 },
|
||||||
|
{ "subject"+(vm.tabidx == 0 || vm.tabidx == 2 ? "" : "x"), 1 },
|
||||||
|
{ "discuss"+(vm.tabidx == 0 || vm.tabidx == 3 ? "" : "x"), 1 }
|
||||||
|
};
|
||||||
|
|
||||||
|
vm.Datas = Dao.Get<Data>("cr.myestimation", p1);
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
// true일때 lms에서 시험내용으로 진입 가능
|
||||||
|
#region + var lectCheck = cr.myExCheck
|
||||||
|
ViewBag.exCheck = true;
|
||||||
|
|
||||||
|
var p2 = new Hashtable()
|
||||||
{
|
{
|
||||||
ViewBag.exCheck = false;
|
{ "lectno", vm.croomlectno },
|
||||||
}
|
{ "userno", SUserInfo.UserNo }
|
||||||
|
};
|
||||||
|
var lectCheck = Dao.Get<Data>("cr.myExCheck", p2);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
ViewBag.exCheck = lectCheck.Count > 0 ? true : false;
|
||||||
|
|
||||||
return CView(vm);
|
return CView(vm);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ActionResult EstimationExam(VMCRoom vm)
|
public ActionResult EstimationExam(VMCRoom vm)
|
||||||
{
|
{
|
||||||
vm.LectEX = Dao.Get<LectEX>("cr.lectex", new System.Collections.Hashtable() { { "lectno", vm.croomlectno },{ "userno", SUserInfo.UserNo },{ "exno", vm.estno} }).First();
|
string ua = (Request?.UserAgent ?? "").ToLower();
|
||||||
String ua = "";
|
ViewBag.IsPortalAppBrowser = ua.Contains("daumapp") || ua.Contains("naver");
|
||||||
try
|
|
||||||
|
#region + vm.LectEX = cr.lectex
|
||||||
|
var p = new Hashtable()
|
||||||
{
|
{
|
||||||
ua = (Request.UserAgent ?? "").ToLower();
|
{ "lectno", vm.croomlectno },
|
||||||
}
|
{ "userno", SUserInfo.UserNo },
|
||||||
catch (Exception ex)
|
{ "exno", vm.estno }
|
||||||
{
|
};
|
||||||
ua = "";
|
vm.LectEX = Dao.Get<LectEX>("cr.lectex", p).First();
|
||||||
}
|
#endregion
|
||||||
ViewBag.IsPortalAppBrowser = ua.ToLower().Contains("daumapp") || ua.ToLower().Contains("naver");
|
|
||||||
return CView(vm);
|
return CView(vm);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ActionResult Exam(VMCRoom vm)
|
public ActionResult Exam(VMCRoom vm)
|
||||||
{
|
{
|
||||||
vm.UserExamDatas = Dao.Get<LectEXQ>("cr.userexamdata.start", new System.Collections.Hashtable() { { "lectno", vm.croomlectno}, { "exno", vm.estno },
|
#region + vm.UserExamDatas = cr.userexamdata.start
|
||||||
{ "userno", SUserInfo.UserNo }, { "uip", GetUserIP() },{"uno", SUserInfo.UserNo } });
|
var p = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "lectno", vm.croomlectno},
|
||||||
|
{ "exno", vm.estno },
|
||||||
|
{ "userno", SUserInfo.UserNo },
|
||||||
|
{ "uip", GetUserIP() },
|
||||||
|
{"uno", SUserInfo.UserNo }
|
||||||
|
};
|
||||||
|
vm.UserExamDatas = Dao.Get<LectEXQ>("cr.userexamdata.start", p);
|
||||||
|
#endregion
|
||||||
|
|
||||||
vm.QuestionItems = new List<QuestionItem>();
|
vm.QuestionItems = new List<QuestionItem>();
|
||||||
|
|
||||||
if (vm.UserExamDatas.Count() > 0 && vm.UserExamDatas.Where(w => w.atype == 0).Count() > 0)
|
if (vm.UserExamDatas.Count() > 0 && vm.UserExamDatas.Where(w => w.atype == 0).Count() > 0)
|
||||||
{
|
{
|
||||||
vm.QuestionItems = Dao.Get<QuestionItem>("cr.userexamquestionitem.get", new System.Collections.Hashtable() { { "orderby", vm.UserExamDatas.First().israndqi == 1 ? "a.qno, rand()" : "a.qno, a.qino" }, { "qnos", string.Join(",", vm.UserExamDatas.Where(w => w.atype == 0).ToList().Select(s => s.qno)) } });
|
#region + vm.QuestionItems = cr.userexamquestionitem.get
|
||||||
|
var p2 = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "orderby", vm.UserExamDatas.First().israndqi == 1 ? "a.qno, rand()" : "a.qno, a.qino" },
|
||||||
|
{ "qnos", string.Join(",", vm.UserExamDatas.Where(w => w.atype == 0).ToList().Select(s => s.qno)) }
|
||||||
|
};
|
||||||
|
vm.QuestionItems = Dao.Get<QuestionItem>("cr.userexamquestionitem.get", p2);
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
return CView(vm);
|
return CView(vm);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ActionResult ExamRecord(VMCRoom vm)
|
public ActionResult ExamRecord(VMCRoom vm)
|
||||||
{
|
{
|
||||||
vm.LectEX = Dao.Get<LectEX>("lect.lectex.result", new System.Collections.Hashtable() { { "lectno", vm.croomlectno }, { "exno", vm.estno }, { "userno", SUserInfo.UserNo } }).First();
|
#region + vm.LectEX = lect.lectex.result
|
||||||
vm.UserExamDatas = Dao.Get<LectEXQ>("lect.lectexq.result", new System.Collections.Hashtable() { { "lectno", vm.croomlectno }, { "exno", vm.estno }, { "userno", SUserInfo.UserNo } });
|
var p = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "lectno", vm.croomlectno },
|
||||||
|
{ "exno", vm.estno },
|
||||||
|
{ "userno", SUserInfo.UserNo }
|
||||||
|
};
|
||||||
|
vm.LectEX = Dao.Get<LectEX>("lect.lectex.result", p).First();
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region + vm.UserExamDatas = lect.lectexq.result
|
||||||
|
p.Clear();
|
||||||
|
p = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "lectno", vm.croomlectno },
|
||||||
|
{ "exno", vm.estno },
|
||||||
|
{ "userno", SUserInfo.UserNo }
|
||||||
|
};
|
||||||
|
vm.UserExamDatas = Dao.Get<LectEXQ>("lect.lectexq.result", p);
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region + vm.QuestionItems = lect.lectexqqi.list
|
||||||
vm.QuestionItems = Dao.Get<QuestionItem>("lect.lectexqqi.list", string.Join(",", vm.UserExamDatas.Select(s => s.qno)));
|
vm.QuestionItems = Dao.Get<QuestionItem>("lect.lectexqqi.list", string.Join(",", vm.UserExamDatas.Select(s => s.qno)));
|
||||||
//정답비률
|
#endregion
|
||||||
|
|
||||||
|
#region + vm.EQs = lect.lectexresult.rightrate (정답비율)
|
||||||
vm.EQs = Dao.Get<CMEXQ>("lect.lectexresult.rightrate", string.Join(",", vm.UserExamDatas.Select(s => s.eqno)));
|
vm.EQs = Dao.Get<CMEXQ>("lect.lectexresult.rightrate", string.Join(",", vm.UserExamDatas.Select(s => s.eqno)));
|
||||||
//선택비율
|
#endregion
|
||||||
vm.EQs2 = Dao.Get<CMEXQ>("lect.lectexresult.selectrate", new System.Collections.Hashtable() { {"lectno",vm.croomlectno }, { "exno", vm.estno }, { "userno", SUserInfo.UserNo } });
|
|
||||||
|
#region + vm.EQs2 = lect.lectexresult.selectrate (선택비율)
|
||||||
|
p.Clear();
|
||||||
|
p = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "lectno", vm.croomlectno },
|
||||||
|
{ "exno", vm.estno },
|
||||||
|
{ "userno", SUserInfo.UserNo }
|
||||||
|
};
|
||||||
|
vm.EQs2 = Dao.Get<CMEXQ>("lect.lectexresult.selectrate", p);
|
||||||
|
#endregion
|
||||||
|
|
||||||
return CView(vm);
|
return CView(vm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 강의실 > 시험응시/과제제출 > 과제제출 안내 (제출폼)
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="vm"></param>
|
||||||
|
/// <returns></returns>
|
||||||
public ActionResult EstimationSubject(VMCRoom vm)
|
public ActionResult EstimationSubject(VMCRoom vm)
|
||||||
{
|
{
|
||||||
vm.FileList = new List<File>() { };
|
vm.FileList = new List<File>() { };
|
||||||
vm.LectSD = Dao.Get<LectSD>("cr.lectsd", new System.Collections.Hashtable() { { "lectno", vm.croomlectno }, { "userno", SUserInfo.UserNo }, { "sdno", vm.estno } }).First();
|
|
||||||
var fgnos = "";
|
#region + vm.LectSD = cr.lectsd
|
||||||
|
var p = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "lectno", vm.croomlectno },
|
||||||
|
{ "userno", SUserInfo.UserNo },
|
||||||
|
{ "sdno", vm.estno }
|
||||||
|
};
|
||||||
|
vm.LectSD = Dao.Get<LectSD>("cr.lectsd", p).First();
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
string fgnos = "";
|
||||||
|
|
||||||
if (vm.LectSD.sdfgno != null)
|
if (vm.LectSD.sdfgno != null)
|
||||||
{
|
{
|
||||||
fgnos = "," + vm.LectSD.sdfgno.Value.ToString();
|
fgnos = "," + vm.LectSD.sdfgno.Value.ToString();
|
||||||
|
|
@ -251,64 +626,107 @@ namespace NP.FO.Controllers
|
||||||
{
|
{
|
||||||
fgnos += "," + vm.LectSD.fgno.Value.ToString();
|
fgnos += "," + vm.LectSD.fgno.Value.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fgnos != "")
|
if (fgnos != "")
|
||||||
{
|
{
|
||||||
vm.FileList = GetFiles(fgnos.Substring(1));
|
vm.FileList = GetFiles(fgnos.Substring(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
return CView(vm);
|
return CView(vm);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ActionResult EstimationDiscuss(VMCRoom vm)
|
public ActionResult EstimationDiscuss(VMCRoom vm)
|
||||||
{
|
{
|
||||||
vm.FileList = new List<File>() { };
|
vm.FileList = new List<File>() { };
|
||||||
vm.LectSD = Dao.Get<LectSD>("cr.lectsd2", new System.Collections.Hashtable() { { "lectno", vm.croomlectno }, { "userno", SUserInfo.UserNo }, { "sdno", vm.estno } }).First();
|
|
||||||
|
#region + vm.LectSD = cr.lectsd2
|
||||||
|
var p = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "lectno", vm.croomlectno },
|
||||||
|
{ "userno", SUserInfo.UserNo },
|
||||||
|
{ "sdno", vm.estno }
|
||||||
|
};
|
||||||
|
vm.LectSD = Dao.Get<LectSD>("cr.lectsd2", p).First();
|
||||||
|
#endregion
|
||||||
|
|
||||||
if (vm.LectSD.sdfgno != null)
|
if (vm.LectSD.sdfgno != null)
|
||||||
{
|
{
|
||||||
vm.FileList = GetFiles(vm.LectSD.sdfgno.Value);
|
vm.FileList = GetFiles(vm.LectSD.sdfgno.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region + vm.LectSDBoards = cr.lectsdboards
|
||||||
vm.LectSDBoards = Dao.Get<LectSDBoard>("cr.lectsdboards", vm.LectSD.sdno);
|
vm.LectSDBoards = Dao.Get<LectSDBoard>("cr.lectsdboards", vm.LectSD.sdno);
|
||||||
|
#endregion
|
||||||
|
|
||||||
return CView(vm);
|
return CView(vm);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ActionResult DiscussReg(VMCRoom vm)
|
public ActionResult DiscussReg(VMCRoom vm)
|
||||||
{
|
{
|
||||||
vm.FileList = new List<File>() { };
|
vm.FileList = new List<File>() { };
|
||||||
//if (vm.BNo < 1)
|
|
||||||
//{
|
#region + vm.LectSD = cr.lectsd2
|
||||||
// vm.LectSD = Dao.Get<LectSD>("cr.lectsd2", new System.Collections.Hashtable() { { "lectno", vm.croomlectno }, { "userno", SUserInfo.UserNo }, { "sdno", vm.estno } }).First();
|
var p = new Hashtable()
|
||||||
// if (vm.LectSD.bno > 0)
|
{
|
||||||
// {
|
{ "lectno", vm.croomlectno },
|
||||||
// vm.BNo = vm.LectSD.bno;
|
{ "userno", SUserInfo.UserNo },
|
||||||
// }
|
{ "sdno", vm.estno }
|
||||||
//}
|
};
|
||||||
vm.LectSD = Dao.Get<LectSD>("cr.lectsd2", new System.Collections.Hashtable() { { "lectno", vm.croomlectno }, { "userno", SUserInfo.UserNo }, { "sdno", vm.estno } }).First();
|
vm.LectSD = Dao.Get<LectSD>("cr.lectsd2", p).First();
|
||||||
|
#endregion
|
||||||
|
|
||||||
vm.LectSDBoard = new LectSDBoard() { };
|
vm.LectSDBoard = new LectSDBoard() { };
|
||||||
|
|
||||||
if (vm.BNo > 0)
|
if (vm.BNo > 0)
|
||||||
{
|
{
|
||||||
//vm.LectSD = Dao.Get<LectSD>("cr.lectsd2", new System.Collections.Hashtable() { { "lectno", vm.croomlectno }, { "userno", SUserInfo.UserNo }, { "sdno", vm.estno } }).First();
|
vm.BNo = vm.LectSD.bno > 0 ? vm.LectSD.bno : vm.BNo;
|
||||||
if (vm.LectSD.bno > 0)
|
|
||||||
|
#region + vm.LectSDBoard = cr.lectsdboard
|
||||||
|
p.Clear();
|
||||||
|
p = new Hashtable()
|
||||||
{
|
{
|
||||||
vm.BNo = vm.LectSD.bno;
|
{ "bno", vm.BNo },
|
||||||
}
|
{ "userno", SUserInfo.UserNo }
|
||||||
vm.LectSDBoard = Dao.Get<LectSDBoard>("cr.lectsdboard", new System.Collections.Hashtable() { { "bno", vm.BNo }, { "userno", SUserInfo.UserNo } }).First();
|
};
|
||||||
|
vm.LectSDBoard = Dao.Get<LectSDBoard>("cr.lectsdboard", p).First();
|
||||||
|
#endregion
|
||||||
|
|
||||||
if (vm.LectSDBoard.cno != SUserInfo.UserNo)
|
if (vm.LectSDBoard.cno != SUserInfo.UserNo)
|
||||||
{
|
{
|
||||||
return RedirectToAction("/CRoom/Esitimation?" + base.vm.croomparam);
|
return RedirectToAction("/CRoom/Esitimation?" + base.vm.croomparam);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vm.LectSDBoard.fgno != null)
|
if (vm.LectSDBoard.fgno != null)
|
||||||
{
|
{
|
||||||
vm.FileList = GetFiles(vm.LectSDBoard.fgno.Value);
|
vm.FileList = GetFiles(vm.LectSDBoard.fgno.Value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return CView(vm);
|
return CView(vm);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ActionResult DiscussView(VMCRoom vm)
|
public ActionResult DiscussView(VMCRoom vm)
|
||||||
{
|
{
|
||||||
vm.FileList = new List<File>() { };
|
vm.FileList = new List<File>() { };
|
||||||
vm.LectSDBoard = Dao.Get<LectSDBoard>("cr.lectsdboard", new System.Collections.Hashtable() { { "bno", vm.BNo },{"userno", SUserInfo.UserNo } }).First();
|
|
||||||
|
#region + vm.LectSDBoard = cr.lectsdboard
|
||||||
|
var p = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "bno", vm.BNo },
|
||||||
|
{ "userno", SUserInfo.UserNo }
|
||||||
|
};
|
||||||
|
vm.LectSDBoard = Dao.Get<LectSDBoard>("cr.lectsdboard", p).First();
|
||||||
|
#endregion
|
||||||
|
|
||||||
if (vm.LectSDBoard.fgno != null)
|
if (vm.LectSDBoard.fgno != null)
|
||||||
{
|
{
|
||||||
vm.FileList = GetFiles(vm.LectSDBoard.fgno.Value);
|
vm.FileList = GetFiles(vm.LectSDBoard.fgno.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region + vm.BoardCMTs = cr.lectsdboardcmt
|
||||||
vm.BoardCMTs = Dao.Get<BoardCMT>("cr.lectsdboardcmt", vm.LectSDBoard.bno);
|
vm.BoardCMTs = Dao.Get<BoardCMT>("cr.lectsdboardcmt", vm.LectSDBoard.bno);
|
||||||
|
#endregion
|
||||||
|
|
||||||
return CView(vm);
|
return CView(vm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1627,13 +1627,13 @@ namespace NP.FO.Controllers
|
||||||
case CourseType.품질관리기술인교육:
|
case CourseType.품질관리기술인교육:
|
||||||
{
|
{
|
||||||
courseInfo.CourseInfos.Add(new CourseInfo() { cname = "품질관리 전문교육(특급)", cmno = 1054 });
|
courseInfo.CourseInfos.Add(new CourseInfo() { cname = "품질관리 전문교육(특급)", cmno = 1054 });
|
||||||
courseInfo.CourseInfos.Add(new CourseInfo() { cname = "건설기술인 기본교육", cmno = 872 });
|
//courseInfo.CourseInfos.Add(new CourseInfo() { cname = "건설기술인 기본교육", cmno = 872 });
|
||||||
courseInfo.CourseInfos.Add(new CourseInfo() { cname = "건설사업관리기술인교육", cmno = 1052 });
|
//courseInfo.CourseInfos.Add(new CourseInfo() { cname = "건설사업관리기술인교육", cmno = 1052 });
|
||||||
courseInfo.CourseInfos.Add(new CourseInfo() { cname = "품질관리기술인교육", cmno = 1050 });
|
courseInfo.CourseInfos.Add(new CourseInfo() { cname = "품질관리기술인교육", cmno = 1050 });
|
||||||
courseInfo.CourseInfos.Add(new CourseInfo() { cname = "설계시공기술인교육", cmno = 1048 });
|
//courseInfo.CourseInfos.Add(new CourseInfo() { cname = "설계시공기술인교육", cmno = 1048 });
|
||||||
courseInfo.CourseInfos.Add(new CourseInfo() { cname = "건설정책역량강화교육", cmno = 1046 });
|
//courseInfo.CourseInfos.Add(new CourseInfo() { cname = "건설정책역량강화교육", cmno = 1046 });
|
||||||
courseInfo.CourseInfos.Add(new CourseInfo() { cname = "전문분야교육", cmno = 870 });
|
//courseInfo.CourseInfos.Add(new CourseInfo() { cname = "전문분야교육", cmno = 870 });
|
||||||
courseInfo.CourseInfos.Add(new CourseInfo() { cname = "특성화전문교육", cmno = 869 });
|
//courseInfo.CourseInfos.Add(new CourseInfo() { cname = "특성화전문교육", cmno = 869 });
|
||||||
courseInfo.CourseInfos.Add(new CourseInfo() { cname = "품질관리 초급 전문교육(직무분야 교육)", cmno = 868 });
|
courseInfo.CourseInfos.Add(new CourseInfo() { cname = "품질관리 초급 전문교육(직무분야 교육)", cmno = 868 });
|
||||||
courseInfo.CourseInfos.Add(new CourseInfo() { cname = "품질관리 최초 전문교육(직무분야 교육)", cmno = 867 });
|
courseInfo.CourseInfos.Add(new CourseInfo() { cname = "품질관리 최초 전문교육(직무분야 교육)", cmno = 867 });
|
||||||
courseInfo.CourseInfos.Add(new CourseInfo() { cname = "품질관리 특급 전문교육(직무분야 교육)", cmno = 937 });
|
courseInfo.CourseInfos.Add(new CourseInfo() { cname = "품질관리 특급 전문교육(직무분야 교육)", cmno = 937 });
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,9 @@
|
||||||
using System;
|
using NP.Model;
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Web;
|
|
||||||
using System.Web.Mvc;
|
using System.Web.Mvc;
|
||||||
using System.Collections;
|
|
||||||
using NP.Model;
|
|
||||||
using NP.Base;
|
|
||||||
using System.Web.Routing;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace NP.FO.Controllers
|
namespace NP.FO.Controllers
|
||||||
{
|
{
|
||||||
|
|
@ -31,29 +26,77 @@ namespace NP.FO.Controllers
|
||||||
ViewBag.ismain = true;
|
ViewBag.ismain = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 마이페이지 > 나의강의실 > 홈
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="vm"></param>
|
||||||
|
/// <returns></returns>
|
||||||
public ActionResult Index(VMMy vm)
|
public ActionResult Index(VMMy vm)
|
||||||
{
|
{
|
||||||
ViewBag.mpgContclass = "";
|
ViewBag.mpgContclass = "";
|
||||||
vm.Assign = Dao.Get<Assign>("users.users.assign", new System.Collections.Hashtable() { { "userno", SUserInfo.UserNo } }).FirstOrDefault();
|
|
||||||
//신청중,수강중,나의할일,나의알림
|
#region + vm.Assign = users.users.assign
|
||||||
vm.Datas = Dao.Get<Data>("lect.mydata", SUserInfo.UserNo).Where(x => x.time2 >= DateTime.Now).ToList(); //수강종료일이 지난건 노출하지않도록
|
var p = new Hashtable() {
|
||||||
|
{ "userno", SUserInfo.UserNo }
|
||||||
|
};
|
||||||
|
vm.Assign = Dao.Get<Assign>("users.users.assign", p).FirstOrDefault();
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region + vm.Datas = lect.mydata
|
||||||
|
// 신청중,수강중,나의할일,나의알림
|
||||||
|
vm.Datas = Dao.Get<Data>("lect.mydata", SUserInfo.UserNo)
|
||||||
|
.Where(x => x.time2 >= DateTime.Now)
|
||||||
|
.ToList(); //수강종료일이 지난건 노출하지않도록
|
||||||
|
#endregion
|
||||||
|
|
||||||
var sd = Request.Url.Host.Split('.')[0];
|
var sd = Request.Url.Host.Split('.')[0];
|
||||||
|
|
||||||
if (GetConfig("isdevtest") != "" && !Request.Url.Host.Contains("118.219.255.") && Request.Url.Host != "cte.nptc.kr" && Request.Url.Host != "ynicte.nptc.kr" && Request.Url.Host != "222.122.63.91" && MainSubDomain.ToUpper() != sd.ToUpper())
|
if (GetConfig("isdevtest") != "" && !Request.Url.Host.Contains("118.219.255.") && Request.Url.Host != "cte.nptc.kr" && Request.Url.Host != "ynicte.nptc.kr" && Request.Url.Host != "222.122.63.91" && MainSubDomain.ToUpper() != sd.ToUpper())
|
||||||
{
|
{
|
||||||
vm.Boards = Dao.Get<Board>("board.bs.forassign", new System.Collections.Hashtable() { { "subdomain", sd }, { "limit", 2 },{ "isdefault",3} });
|
#region + vm.Boards = board.bs.forassign
|
||||||
|
var p2 = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "subdomain", sd },
|
||||||
|
{ "limit", 2 },
|
||||||
|
{ "isdefault", 3 }
|
||||||
|
};
|
||||||
|
vm.Boards = Dao.Get<Board>("board.bs.forassign", p2);
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
vm.CMs = new List<CM>() { };
|
vm.CMs = new List<CM>() { };
|
||||||
|
|
||||||
if (vm.Datas.Where(w=>w.dtype == 1).Count() < 1 && !Request.Url.Host.Contains("118.219.255.") && Request.Url.Host != "222.122.63.91" && Request.Url.Host.Split('.')[0].ToUpper() == MainSubDomain.ToUpper())
|
if (vm.Datas.Where(w=>w.dtype == 1).Count() < 1 && !Request.Url.Host.Contains("118.219.255.") && Request.Url.Host != "222.122.63.91" && Request.Url.Host.Split('.')[0].ToUpper() == MainSubDomain.ToUpper())
|
||||||
{
|
{
|
||||||
//신청중인강좌 없고 고객사사이트가 아니면 수강완료한 강좌 중 후행과정 -> 선행과정 -> 직급추천과정 2개 출력
|
#region + vm.CMs = lect.myrecomm
|
||||||
|
// 신청중인강좌 없고 고객사사이트가 아니면 수강완료한 강좌 중 후행과정 -> 선행과정 -> 직급추천과정 2개 출력
|
||||||
vm.CMs = Dao.Get<CM>("lect.myrecomm", SUserInfo.UserNo);
|
vm.CMs = Dao.Get<CM>("lect.myrecomm", SUserInfo.UserNo);
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
//20220803
|
|
||||||
vm.Lects = Dao.Get<Lect>("lect.mylectures", new System.Collections.Hashtable() { { "userno", SUserInfo.UserNo }, { "cgcode", vm.intval > 0 ? TestCode3 : null }, { "cshape", vm.stringval } });
|
#region + vm.Lects = lect.mylectures
|
||||||
|
var p3 = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "userno", SUserInfo.UserNo },
|
||||||
|
{ "cgcode", vm.intval > 0 ? TestCode3 : null },
|
||||||
|
{ "cshape", vm.stringval }
|
||||||
|
};
|
||||||
|
vm.Lects = Dao.Get<Lect>("lect.mylectures", p3);
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region + vm.CRoomLectSdInfo = cr.lectsdinfo
|
||||||
|
// 사용자의 과제정보
|
||||||
|
var p4 = new Hashtable()
|
||||||
|
{
|
||||||
|
{ "userno", SUserInfo.UserNo },
|
||||||
|
{ "iscurlect", true },
|
||||||
|
};
|
||||||
|
vm.CRoomLectSdInfo = Dao.Get<CRoomLectSdInfo>("cr.lectsdinfo", p4);
|
||||||
|
#endregion
|
||||||
|
|
||||||
foreach (var item in vm.Datas)
|
foreach (var item in vm.Datas)
|
||||||
{
|
{
|
||||||
//time5 = lect.sdate / time6 = lect.edate / pstatus=intval4
|
// time5 = lect.sdate / time6 = lect.edate / pstatus=intval4
|
||||||
if (item.intval4 == 22)
|
if (item.intval4 == 22)
|
||||||
{
|
{
|
||||||
item.lectStatus = "미입금";
|
item.lectStatus = "미입금";
|
||||||
|
|
@ -61,29 +104,20 @@ namespace NP.FO.Controllers
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// 입금상태
|
// 입금상태
|
||||||
if(item.time5 > DateTime.Now)
|
if (item.time5 > DateTime.Now)
|
||||||
{
|
{
|
||||||
item.lectStatus = "입교확정";
|
item.lectStatus = "입교확정";
|
||||||
}
|
}
|
||||||
else if(item.time5 <= DateTime.Now && item.time2 >= DateTime.Now )
|
else if (item.time5 <= DateTime.Now && item.time2 >= DateTime.Now)
|
||||||
{
|
{
|
||||||
item.lectStatus = "교육진행중";
|
item.lectStatus = "교육진행중";
|
||||||
}
|
}
|
||||||
/*else if (item.time6 < DateTime.Now)
|
|
||||||
{
|
|
||||||
if (item.iscomplete == null || item.iscomplete == 0)
|
|
||||||
{
|
|
||||||
item.lectStatus = "미수료";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
item.lectStatus = "수료";
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return View(vm);
|
return View(vm);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ActionResult BoardList(VMCC vm)
|
public ActionResult BoardList(VMCC vm)
|
||||||
{
|
{
|
||||||
vm.BM = Dao.Get<BoardMaster>("board.bms.forassign", new System.Collections.Hashtable() { { "subdomain", Request.Url.Host.Split('.')[0] }, {"isdefault", 3 } }).First();
|
vm.BM = Dao.Get<BoardMaster>("board.bms.forassign", new System.Collections.Hashtable() { { "subdomain", Request.Url.Host.Split('.')[0] }, {"isdefault", 3 } }).First();
|
||||||
|
|
|
||||||
11
FO/FO.csproj
|
|
@ -222,6 +222,13 @@
|
||||||
<Content Include="css\examcommon.css" />
|
<Content Include="css\examcommon.css" />
|
||||||
<Content Include="css\exam\base.css" />
|
<Content Include="css\exam\base.css" />
|
||||||
<Content Include="css\exam\button.css" />
|
<Content Include="css\exam\button.css" />
|
||||||
|
<Content Include="css\jquery-ui-1.12.1\images\ui-icons_444444_256x240.png" />
|
||||||
|
<Content Include="css\jquery-ui-1.12.1\images\ui-icons_555555_256x240.png" />
|
||||||
|
<Content Include="css\jquery-ui-1.12.1\images\ui-icons_777620_256x240.png" />
|
||||||
|
<Content Include="css\jquery-ui-1.12.1\images\ui-icons_777777_256x240.png" />
|
||||||
|
<Content Include="css\jquery-ui-1.12.1\images\ui-icons_cc0000_256x240.png" />
|
||||||
|
<Content Include="css\jquery-ui-1.12.1\images\ui-icons_ffffff_256x240.png" />
|
||||||
|
<Content Include="css\jquery-ui-1.12.1\jquery-ui.min.css" />
|
||||||
<Content Include="css\lecture.css" />
|
<Content Include="css\lecture.css" />
|
||||||
<Content Include="css\dev.css" />
|
<Content Include="css\dev.css" />
|
||||||
<Content Include="css\mainpopup.css" />
|
<Content Include="css\mainpopup.css" />
|
||||||
|
|
@ -529,10 +536,12 @@
|
||||||
<Content Include="js\bootstrap.js" />
|
<Content Include="js\bootstrap.js" />
|
||||||
<Content Include="js\examcommon.js" />
|
<Content Include="js\examcommon.js" />
|
||||||
<Content Include="js\exam.js" />
|
<Content Include="js\exam.js" />
|
||||||
|
<Content Include="js\jquery-ui.min.js" />
|
||||||
<Content Include="js\jquery.mmenu.js" />
|
<Content Include="js\jquery.mmenu.js" />
|
||||||
<Content Include="js\kakao.js" />
|
<Content Include="js\kakao.js" />
|
||||||
<Content Include="js\moment.js" />
|
<Content Include="js\moment.js" />
|
||||||
<Content Include="js\naveridlogin_js_sdk_2.0.0.js" />
|
<Content Include="js\naveridlogin_js_sdk_2.0.0.js" />
|
||||||
|
<Content Include="js\polyfill.min.js" />
|
||||||
<Content Include="js\study.js" />
|
<Content Include="js\study.js" />
|
||||||
<Content Include="js\jquery-1.8.3.min.js" />
|
<Content Include="js\jquery-1.8.3.min.js" />
|
||||||
<Content Include="js\croom.js" />
|
<Content Include="js\croom.js" />
|
||||||
|
|
@ -544,6 +553,8 @@
|
||||||
<Content Include="js\slick.min.js" />
|
<Content Include="js\slick.min.js" />
|
||||||
<Content Include="js\sly.min.js" />
|
<Content Include="js\sly.min.js" />
|
||||||
<Content Include="js\summernote.js" />
|
<Content Include="js\summernote.js" />
|
||||||
|
<Content Include="js\video.js" />
|
||||||
|
<Content Include="js\videojs-ie8.min.js" />
|
||||||
<Content Include="Spring\ControllersStaging.xml">
|
<Content Include="Spring\ControllersStaging.xml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</Content>
|
</Content>
|
||||||
|
|
|
||||||
|
|
@ -42,8 +42,6 @@
|
||||||
<tbody>
|
<tbody>
|
||||||
@foreach (var d in Model.Datas.Where(w => w.dtype > -1))
|
@foreach (var d in Model.Datas.Where(w => w.dtype > -1))
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th>
|
<th>
|
||||||
@*
|
@*
|
||||||
|
|
@ -123,9 +121,57 @@
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// 과제 등...
|
// 과제 등...
|
||||||
|
|
||||||
|
|
||||||
|
// 조건 분리 @(d.intval4 == 1 ? 4 : d.intval3 == 1 ? 3 : d.intval3 == 0 && d.intval >= d.intval2 ? 2 : 1)
|
||||||
|
int evaStatus;
|
||||||
|
if (d.intval4 == 1)
|
||||||
|
{
|
||||||
|
evaStatus = 4;
|
||||||
|
}
|
||||||
|
else if (d.intval3 == 1)
|
||||||
|
{
|
||||||
|
evaStatus = 3;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
evaStatus = (d.intval3 == 0 && d.intval >= d.intval2) ? 2 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 조건 분리 evaType@(d.intval4 == 1 ? "04" : d.intval3 == 1 ? "03" : d.intval3 == 0 && d.intval >= d.intval2 ? "02" : "01")
|
||||||
|
string evaTypeCss;
|
||||||
|
if (d.intval4 == 1)
|
||||||
|
{
|
||||||
|
evaTypeCss = "evaType04";
|
||||||
|
}
|
||||||
|
else if (d.intval3 == 1)
|
||||||
|
{
|
||||||
|
evaTypeCss = "evaType03";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
evaTypeCss = (d.intval3 == 0 && d.intval >= d.intval2) ? "evaType02" : "evaType01";
|
||||||
|
}
|
||||||
|
|
||||||
|
// 조건 분리 @(d.intval4 == 1 ? "[평가완료]" : d.intval3 == 1 ? "[참여완료]" : d.intval3 == 0 && d.intval >= d.intval2 ? "[참여가능]" : "[참여불가]")
|
||||||
|
string statusText;
|
||||||
|
if (d.intval4 == 1)
|
||||||
|
{
|
||||||
|
statusText = "[평가완료]";
|
||||||
|
}
|
||||||
|
else if (d.intval3 == 1)
|
||||||
|
{
|
||||||
|
statusText = "[참여완료]";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
statusText = (d.intval3 == 0 && d.intval >= d.intval2) ? "[참여가능]" : "[참여불가]";
|
||||||
|
}
|
||||||
|
|
||||||
<td>
|
<td>
|
||||||
<a href="javascript:;" onclick="eva(@d.dtype, @d.intval10, @(d.intval4 == 1 ? 4 : d.intval3 == 1 ? 3 : d.intval3 == 0 && d.intval >= d.intval2 ? 2 : 1))"
|
<a href="javascript:;" onclick="eva(@d.dtype, @d.intval10, @evaStatus)" class="@evaTypeCss">
|
||||||
class="evaType@(d.intval4 == 1 ? "04" : d.intval3 == 1 ? "03" : d.intval3 == 0 && d.intval >= d.intval2 ? "02" : "01")">@(d.intval4 == 1 ? "[평가완료]" : d.intval3 == 1 ? "[참여완료]" : d.intval3 == 0 && d.intval >= d.intval2 ? "[참여가능]" : "[참여불가]")</a>
|
<text>@statusText</text>
|
||||||
|
</a>
|
||||||
</td>
|
</td>
|
||||||
}
|
}
|
||||||
</tr>
|
</tr>
|
||||||
|
|
@ -188,19 +234,40 @@
|
||||||
* @@param a {event} - e
|
* @@param a {event} - e
|
||||||
*/
|
*/
|
||||||
function gotab(idx, a) {
|
function gotab(idx, a) {
|
||||||
if (!$(a).parent().hasClass("current")){
|
if (!$(a).parent().hasClass("current")) {
|
||||||
setv("tabidx", idx);
|
setv("tabidx", idx);
|
||||||
submit();
|
submit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@*
|
||||||
|
/**
|
||||||
|
* 평가, 과제 참여
|
||||||
|
* @param type {number} - 유형 (과제,시험)
|
||||||
|
* @param no
|
||||||
|
* @param status {number} - 상태
|
||||||
|
*/ *@
|
||||||
function eva(type, no, status) {
|
function eva(type, no, status) {
|
||||||
if (status == 1) {
|
if (status == 1) {
|
||||||
msg("진도율 조건에 맞지않거나 수강일이 종료되어 참여하실 수 없습니다.");
|
msg("진도율 조건에 맞지않거나 수강일이 종료되어 참여하실 수 없습니다.");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
let typeString;
|
||||||
|
|
||||||
|
if (type < 2) {
|
||||||
|
typeString = "Exam";
|
||||||
|
}
|
||||||
|
else if (type == 2) {
|
||||||
|
typeString = "Subject";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
typeString = "Discuss";
|
||||||
|
}
|
||||||
|
|
||||||
|
let submitUrl = `/CRoom/Estimation${typeString}`;
|
||||||
|
|
||||||
setv("estno", no);
|
setv("estno", no);
|
||||||
$("#mform").attr("action", "/CRoom/Estimation" + (type < 2 ?"Exam":type==2?"Subject":"Discuss")).submit();
|
$("#mform").attr("action", submitUrl).submit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -8,10 +8,6 @@
|
||||||
<dd>
|
<dd>
|
||||||
<table class="evaDetail">
|
<table class="evaDetail">
|
||||||
<tbody>
|
<tbody>
|
||||||
@*<tr>
|
|
||||||
<th>과제회차</th>
|
|
||||||
<td>1회</td>
|
|
||||||
</tr>*@
|
|
||||||
<tr>
|
<tr>
|
||||||
<th>과제제목</th>
|
<th>과제제목</th>
|
||||||
<td>@Model.LectSD.sdname</td>
|
<td>@Model.LectSD.sdname</td>
|
||||||
|
|
@ -48,11 +44,6 @@
|
||||||
<dd>
|
<dd>
|
||||||
<table>
|
<table>
|
||||||
<tbody>
|
<tbody>
|
||||||
@*<tr>
|
|
||||||
<td colspan="2" class="teskTxt">
|
|
||||||
<textarea name="atext" id="atext" cols="30" rows="10" class="teskTxt">@(Model.LectSD.atext??"")</textarea>
|
|
||||||
</td>
|
|
||||||
</tr>*@
|
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2">
|
<td colspan="2">
|
||||||
<div class="teskFilex">
|
<div class="teskFilex">
|
||||||
|
|
@ -87,28 +78,39 @@
|
||||||
@Html.HiddenFor(m => m.tabidx)
|
@Html.HiddenFor(m => m.tabidx)
|
||||||
@Html.HiddenFor(m => m.estno)
|
@Html.HiddenFor(m => m.estno)
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
@section scriptsHeader{
|
@section scriptsHeader{
|
||||||
@Html.Partial("./Partial/filescript")
|
@Html.Partial("./Partial/filescript")
|
||||||
}
|
}
|
||||||
|
|
||||||
@section scripts{
|
@section scripts{
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
function save() {
|
function save() {
|
||||||
if (getBytes(val("atext")) < 1 && $("input[name=file1]").val() == "") {
|
if (getBytes(val("atext")) < 1 && $("input[name=file1]").val() == "") {
|
||||||
msg("첨부된 파일이 없습니다.과제를 업로드 후 제출 버튼을 눌러주세요.");
|
msg("첨부된 파일이 없습니다.과제를 업로드 후 제출 버튼을 눌러주세요.");
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
confirmtoggle(true, "제출하시겠습니까?", "savego()");
|
confirmtoggle(true, "제출하시겠습니까?", "savego()");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function savego() {
|
function savego() {
|
||||||
capfileform("/fcommon/subjectsave", "sform", "cbsave");
|
capfileform(
|
||||||
|
"/fcommon/subjectsave",
|
||||||
|
"sform",
|
||||||
|
"cbsave");
|
||||||
}
|
}
|
||||||
|
|
||||||
function cbsave() {
|
function cbsave() {
|
||||||
if (capResult.code == 1000) {
|
if (capResult.code == 1000) {
|
||||||
msg("저장되었습니다.", null, null, null, "submit()");
|
msg("저장되었습니다.", null, null, null, "submit()");
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
msg("운영자에게 문의해주세요.");
|
msg("운영자에게 문의해주세요.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -117,27 +119,39 @@
|
||||||
if (capResult.code == 1000) {
|
if (capResult.code == 1000) {
|
||||||
var ul = $(_filedela).closest("ul");
|
var ul = $(_filedela).closest("ul");
|
||||||
$(_filedela).closest("li").remove();
|
$(_filedela).closest("li").remove();
|
||||||
|
|
||||||
if ($(ul).find("li input.file").length + $(ul).find("li a.file").length < getint($(ul).attr("data-filecount"))) {
|
if ($(ul).find("li input.file").length + $(ul).find("li a.file").length < getint($(ul).attr("data-filecount"))) {
|
||||||
$(ul).append("<li><input type=\"file\" class=\"file\" name=\"" + $(ul).attr("data-fname") + "\" accept=\"media_type\" onchange=\"filechange(this)\" /><a href=\"#\" class=\"filedel\" onclick=\"filedel(0, this)\">삭제</a></li>");
|
$(ul).append("<li><input type=\"file\" class=\"file\" name=\"" + $(ul).attr("data-fname") + "\" accept=\"media_type\" onchange=\"filechange(this)\" /><a href=\"#\" class=\"filedel\" onclick=\"filedel(0, this)\">삭제</a></li>");
|
||||||
}
|
}
|
||||||
|
|
||||||
var empli = false;
|
var empli = false;
|
||||||
|
|
||||||
$.each($(ul).find("li"), function (i, li) {
|
$.each($(ul).find("li"), function (i, li) {
|
||||||
if ($(li).find("input.file").val() == "") {
|
if ($(li).find("input.file").val() == "") {
|
||||||
if (empli) {
|
if (empli) {
|
||||||
$(li).addClass("delme");
|
$(li).addClass("delme");
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
empli = true;
|
empli = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$(ul).find("li.delme").remove();
|
$(ul).find("li.delme").remove();
|
||||||
|
|
||||||
let sdno = @(Model.LectSD.sdno);
|
let sdno = @(Model.LectSD.sdno);
|
||||||
let lectno = @(Model.LectSD.lectno);
|
let lectno = @(Model.LectSD.lectno);
|
||||||
capp("/fcommon/delfileOk", { lectno: lectno, sdno: sdno });
|
|
||||||
|
capp(
|
||||||
|
"/fcommon/delfileOk",
|
||||||
|
{
|
||||||
|
lectno: lectno,
|
||||||
|
sdno: sdno
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
}
|
}
|
||||||
|
|
@ -18,11 +18,9 @@
|
||||||
<tr>
|
<tr>
|
||||||
<th>구분</th>
|
<th>구분</th>
|
||||||
<th>진도율</th>
|
<th>진도율</th>
|
||||||
@*<th>진행평가</th>*@
|
|
||||||
<th>최종평가</th>
|
<th>최종평가</th>
|
||||||
<th>과제평가</th>
|
<th>과제평가</th>
|
||||||
<th style="display:@(Model.Lect.isoffabs == 1 ? "" : "none")">집체교육(7h)</th>
|
<th style="display:@(Model.Lect.isoffabs == 1 ? "" : "none")">집체교육(7h)</th>
|
||||||
@*<th>토론평가</th>*@
|
|
||||||
<th>총점</th>
|
<th>총점</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
|
@ -30,28 +28,17 @@
|
||||||
<tr>
|
<tr>
|
||||||
<td>나의성적</td>
|
<td>나의성적</td>
|
||||||
<td>@(Model.Lect.attrate)%</td>
|
<td>@(Model.Lect.attrate)%</td>
|
||||||
@*<td>@(Model.Lect.ex0lectpoint)점</td>*@
|
|
||||||
<td>@(Model.Lect.ex1lectpoint)점</td>
|
<td>@(Model.Lect.ex1lectpoint)점</td>
|
||||||
<td>@(Model.Lect.sd0lectpoint)점</td>
|
<td>@(Model.Lect.sd0lectpoint)점</td>
|
||||||
<td style="display:@(Model.Lect.isoffabs == 1 ? "" : "none")">@(Model.Lect.istatus == 2 ? "출석완료" : "-")</td>
|
<td style="display:@(Model.Lect.isoffabs == 1 ? "" : "none")">@(Model.Lect.istatus == 2 ? "출석완료" : "-")</td>
|
||||||
@*<td>@(Model.Lect.sd1lectpoint)점</td>*@
|
|
||||||
<td style="color:#ff0000;">@(Model.Lect.apoint + Model.Lect.mpoint + Model.Lect.fpoint + Model.Lect.spoint + Model.Lect.dpoint)점</td>
|
<td style="color:#ff0000;">@(Model.Lect.apoint + Model.Lect.mpoint + Model.Lect.fpoint + Model.Lect.spoint + Model.Lect.dpoint)점</td>
|
||||||
|
|
||||||
@*<td>@(Model.Lect.attrate)%(@(Model.Lect.apoint)점)</td>
|
|
||||||
<td>@(Model.Lect.mpoint)점</td>
|
|
||||||
<td>@(Model.Lect.fpoint)점</td>
|
|
||||||
<td>@(Model.Lect.spoint)점</td>
|
|
||||||
<td>@(Model.Lect.dpoint)점</td>
|
|
||||||
<td style="color:#ff0000;">@(Model.Lect.apoint + Model.Lect.mpoint + Model.Lect.fpoint + Model.Lect.spoint + Model.Lect.dpoint)점</td>*@
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>수료기준</td>
|
<td>수료기준</td>
|
||||||
<td>@(Model.Lect.acut)%이상</td>
|
<td>@(Model.Lect.acut)%이상</td>
|
||||||
@*<td>@(Model.Lect.mcut)점이상</td>*@
|
|
||||||
<td>@(Model.Lect.fcut)점이상</td>
|
<td>@(Model.Lect.fcut)점이상</td>
|
||||||
<td>@(Model.Lect.scut)점이상</td>
|
<td>@(Model.Lect.scut)점이상</td>
|
||||||
<td style="display:@(Model.Lect.isoffabs == 1 ? "" : "none")">집체교육 참석(7h)</td>
|
<td style="display:@(Model.Lect.isoffabs == 1 ? "" : "none")">집체교육 참석(7h)</td>
|
||||||
@*<td>@(Model.Lect.dcut)점이상</td>*@
|
|
||||||
<td style="color:#ff0000;">@(Model.Lect.cut)점이상</td>
|
<td style="color:#ff0000;">@(Model.Lect.cut)점이상</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr style="display:none;">
|
<tr style="display:none;">
|
||||||
|
|
@ -167,7 +154,7 @@
|
||||||
<div class="lctcHalf">
|
<div class="lctcHalf">
|
||||||
<div>
|
<div>
|
||||||
<div class="lctcList" style="height:200px;">
|
<div class="lctcList" style="height:200px;">
|
||||||
<h5>최근게시글 @*<a href="#">더보기</a>*@</h5>
|
<h5>최근게시글</h5>
|
||||||
<ul>
|
<ul>
|
||||||
@foreach (var d in Model.Datas.Where(w => w.dtype == 100))
|
@foreach (var d in Model.Datas.Where(w => w.dtype == 100))
|
||||||
{
|
{
|
||||||
|
|
@ -188,11 +175,11 @@
|
||||||
{
|
{
|
||||||
if (d.intval == 2)
|
if (d.intval == 2)
|
||||||
{
|
{
|
||||||
<li><a href="#" style="cursor: default"><p>[출석] @(d.intval2)차시<span>(@(d.strval3)까지)</span></p></a></li>
|
<li><a href="javascript:;" style="cursor: default"><p>[출석] @(d.intval2)차시<span>(@(d.strval3)까지)</span></p></a></li>
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<li><a href="#" style="cursor: default"><p>[@(d.intval == 3 ? (d.intval4 == 0 ? "진행평가" : "최종평가") : d.intval == 4 ? "과제" : "토론")] @(d.intval == 3 ? "응시" : d.intval == 4 ? "제출" : "참여")<span>(@d.time2.ToString("MM/dd")까지)</span></p></a></li>
|
<li><a href="javascript:;" style="cursor: default"><p>[@(d.intval == 3 ? (d.intval4 == 0 ? "진행평가" : "최종평가") : d.intval == 4 ? "과제" : "토론")] @(d.intval == 3 ? "응시" : d.intval == 4 ? "제출" : "참여")<span>(@d.time2.ToString("MM/dd")까지)</span></p></a></li>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@if (Model.Datas.Where(w => w.dtype < 100).Count() < 1)
|
@if (Model.Datas.Where(w => w.dtype < 100).Count() < 1)
|
||||||
|
|
@ -204,7 +191,19 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="lctcWeek">
|
<div class="lctcWeek">
|
||||||
<h5>오늘 시청 가능한 10개 차시 중 (@Model.intval/@Model.intval2)를 수강하셨습니다. <a href="/CRoom/Innings?@Model.croomparam">수강 중인 강의 모두 보기</a></h5>
|
@{
|
||||||
|
string lectInningsTitle = string.Empty;
|
||||||
|
|
||||||
|
if (Model.Lect.attrate < 100)
|
||||||
|
{
|
||||||
|
lectInningsTitle = string.Format("오늘 시청 가능한 10개 차시 중 ({0}/{1})를 수강하셨습니다.", Model.intval, Model.intval2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lectInningsTitle = " ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
<h5>@Html.Raw(lectInningsTitle) <a href="/CRoom/Innings?@Model.croomparam">수강 중인 강의 모두 보기</a></h5>
|
||||||
<table>
|
<table>
|
||||||
<tbody>
|
<tbody>
|
||||||
@foreach (var d in Model.LectInnings)
|
@foreach (var d in Model.LectInnings)
|
||||||
|
|
@ -221,7 +220,6 @@
|
||||||
{
|
{
|
||||||
<dl>
|
<dl>
|
||||||
<dt>@(d.edate < DateTime.Now ? "학습기간종료" : d.isonline == 0 && d.istatus == 2 ? "출석완료" : d.isonline == 0 && d.idate < DateTime.Now ? "결석" : d.isonline == 0 ? "출석전" : d.stime == null ? "학습전(0%)" : d.istatus == 2 ? "학습완료" : string.Format("학습중({0}%)", d.sttime > 0 ? (d.totstudy * 100 / (d.sttime * 60)) : 0))</dt>
|
<dt>@(d.edate < DateTime.Now ? "학습기간종료" : d.isonline == 0 && d.istatus == 2 ? "출석완료" : d.isonline == 0 && d.idate < DateTime.Now ? "결석" : d.isonline == 0 ? "출석전" : d.stime == null ? "학습전(0%)" : d.istatus == 2 ? "학습완료" : string.Format("학습중({0}%)", d.sttime > 0 ? (d.totstudy * 100 / (d.sttime * 60)) : 0))</dt>
|
||||||
@*<dt style="color:#888888"><span style="color:red;">@(d.isonline == 0 ? (d.cshape != 2 ? "강의시작일" : "집체교육") : "교육기간")</span> : @(d.isonline == 0 ? (d.cshape != 2 ? string.Format("{0} {1}:{2}", d.idate.ToString("MM/dd"), d.ist.Substring(0, 2), d.ist.Substring(2, 2)) : d.eend.ToString("MM/dd")) :d.cshape != 1 ? d.cdt.ToString("MM/dd")+" ~ "+d.estart.ToString("MM/dd") : (d.sdate.ToString("MM/dd") + " ~ " + d.edate.ToString("MM/dd")))</dt>*@
|
|
||||||
<dt style="color:#888888"><span style="color:red;">@(d.isonline == 0 ? (d.cshape != 2 ? "강의시작일" : "집체교육") : "교육기간")</span> : @(d.isonline == 0 ? (d.cshape != 2 ? string.Format("{0} {1}:{2}", d.idate.ToString("MM/dd"), d.ist.Substring(0, 2), d.ist.Substring(2, 2)) : d.eend.ToString("MM/dd")) :(d.sdate.ToString("MM/dd") + " ~ " + d.edate.ToString("MM/dd")))</dt>
|
<dt style="color:#888888"><span style="color:red;">@(d.isonline == 0 ? (d.cshape != 2 ? "강의시작일" : "집체교육") : "교육기간")</span> : @(d.isonline == 0 ? (d.cshape != 2 ? string.Format("{0} {1}:{2}", d.idate.ToString("MM/dd"), d.ist.Substring(0, 2), d.ist.Substring(2, 2)) : d.eend.ToString("MM/dd")) :(d.sdate.ToString("MM/dd") + " ~ " + d.edate.ToString("MM/dd")))</dt>
|
||||||
@if (d.cshape != 1 && d.isonline == 1)
|
@if (d.cshape != 1 && d.isonline == 1)
|
||||||
{
|
{
|
||||||
|
|
@ -256,7 +254,7 @@
|
||||||
<li class="lctc2">
|
<li class="lctc2">
|
||||||
@if (d.isonline == 1)
|
@if (d.isonline == 1)
|
||||||
{
|
{
|
||||||
if(!isplay)
|
if (!isplay)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (d.isseq == 1 && d.iseq != 1 && d.preistatus < 2)
|
if (d.isseq == 1 && d.iseq != 1 && d.preistatus < 2)
|
||||||
|
|
@ -273,7 +271,7 @@
|
||||||
preflag = 1;
|
preflag = 1;
|
||||||
}
|
}
|
||||||
//학습기간 종료후에도 시청은 가능하고, 출석인정은 되지않도록 변경 2021-01-25
|
//학습기간 종료후에도 시청은 가능하고, 출석인정은 되지않도록 변경 2021-01-25
|
||||||
<a href="#" onclick="playerOpen(@d.cmino, @(d.sdate < DateTime.Now && d.edate.AddYears(1) > DateTime.Now ? 1 : 0), @(preflag), @(d.istatus != 2 && Model.intval >= d.daylectinninglimit ? 0 : 1), @(d.daylectinninglimit));" class="lctcStdy">학습하기</a>
|
<a href="javascript:;" onclick="playerOpen(@d.cmino, @(d.sdate < DateTime.Now && d.edate.AddYears(1) > DateTime.Now ? 1 : 0), @(preflag), @(d.istatus != 2 && Model.intval >= d.daylectinninglimit ? 0 : 1), @(d.daylectinninglimit));" class="lctcStdy">학습하기</a>
|
||||||
}
|
}
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
@ -307,7 +305,6 @@
|
||||||
} else {
|
} else {
|
||||||
_cmino = cmino;
|
_cmino = cmino;
|
||||||
chkcontent();
|
chkcontent();
|
||||||
@*viewcontents(cmino, false, @Model.croomlectno);*@
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function chkcontent() {
|
function chkcontent() {
|
||||||
|
|
@ -331,7 +328,6 @@
|
||||||
confirmtoggle(true, "학습을 처음 시작할 때 본인인증이 필요합니다. 본인인증은 회차 당 1회에 한 해 진행됩니다.<br/> 본인인증을 하시겠습니까?", "chkmobile()");
|
confirmtoggle(true, "학습을 처음 시작할 때 본인인증이 필요합니다. 본인인증은 회차 당 1회에 한 해 진행됩니다.<br/> 본인인증을 하시겠습니까?", "chkmobile()");
|
||||||
}
|
}
|
||||||
// ### 모바일 인증 중단 처리
|
// ### 모바일 인증 중단 처리
|
||||||
// viewcontents(_cmino, false,@Model.croomlectno);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
msg("휴대폰 번호가 공란입니다.<br/>정보수정을 통해 번호를 입력해주세요.");
|
msg("휴대폰 번호가 공란입니다.<br/>정보수정을 통해 번호를 입력해주세요.");
|
||||||
|
|
@ -353,7 +349,6 @@
|
||||||
}
|
}
|
||||||
function cbchkmobile() {
|
function cbchkmobile() {
|
||||||
if (capResult.code == 1000) {
|
if (capResult.code == 1000) {
|
||||||
//msg("인증이 성공하였습니다.\n 확인 버튼을 클릭하시면 학습이 가능합니다.");
|
|
||||||
$("#mobile").css("background", "#ddd");
|
$("#mobile").css("background", "#ddd");
|
||||||
mobilechkclose();
|
mobilechkclose();
|
||||||
viewcontents(_cmino, false,@Model.croomlectno);
|
viewcontents(_cmino, false,@Model.croomlectno);
|
||||||
|
|
|
||||||
|
|
@ -26,21 +26,22 @@
|
||||||
</script>
|
</script>
|
||||||
}
|
}
|
||||||
|
|
||||||
@*<div class="lrnSch">
|
<!-- info -->
|
||||||
<a href="#" onclick="showatt()">출결이력조회</a>
|
|
||||||
</div>*@
|
|
||||||
<div class="lctcScore" style="text-align:center; background:#ffdfdf;">
|
<div class="lctcScore" style="text-align:center; background:#ffdfdf;">
|
||||||
<span>현재 오늘 학습 가능한 10회차 중 <span style="color:red;">@(Model.intval2 - Model.intval)</span>회차 학습가능 합니다.</span><br />
|
<span>현재 오늘 학습 가능한 10회차 중 <span style="color:red;">@(Model.intval2 - Model.intval)</span>회차 학습가능 합니다.</span><br />
|
||||||
<span>※ 관련 법령에 의해 일일 최대 학습시간은 학습중인 모든 과정에 대하여 10시간(10회차)입니다.</span>
|
<span>※ 관련 법령에 의해 일일 최대 학습시간은 학습중인 모든 과정에 대하여 10시간(10회차)입니다.</span>
|
||||||
</div>
|
</div>
|
||||||
@*<h3>오늘의 학습회차(@Model.intval/@Model.intval2)</h3>*@
|
|
||||||
<br />
|
<br />
|
||||||
|
<!-- // info -->
|
||||||
|
|
||||||
<div class="lctcWeek lrnList">
|
<div class="lctcWeek lrnList">
|
||||||
<input type="hidden" id="mobile" name="mobile" value="@(ViewBag.Mobile)" />
|
<input type="hidden" id="mobile" name="mobile" value="@(ViewBag.Mobile)" />
|
||||||
<table>
|
<table>
|
||||||
<tbody>
|
<tbody>
|
||||||
@foreach (var d in Model.LectInnings)
|
@foreach (var d in Model.LectInnings)
|
||||||
{
|
{
|
||||||
|
// d.istatus == 2 가 학습완료다
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th style="display:none;"><em style="background:url(@(d.isonline == 0 ? "/img/lecture/week_thumb02.jpg" : (string.IsNullOrEmpty(d.tasteurl)?"/img/lecture/week_thumb01.jpg":(Model.Files + d.tasteurl))))no-repeat center center"></em></th>
|
<th style="display:none;"><em style="background:url(@(d.isonline == 0 ? "/img/lecture/week_thumb02.jpg" : (string.IsNullOrEmpty(d.tasteurl)?"/img/lecture/week_thumb01.jpg":(Model.Files + d.tasteurl))))no-repeat center center"></em></th>
|
||||||
<td>
|
<td>
|
||||||
|
|
@ -103,8 +104,9 @@
|
||||||
{
|
{
|
||||||
preflag = 1;
|
preflag = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
//학습기간 종료후에도 시청은 가능하고, 출석인정은 되지않도록 변경 2021-01-25
|
//학습기간 종료후에도 시청은 가능하고, 출석인정은 되지않도록 변경 2021-01-25
|
||||||
<a href="#" onclick="playerOpen(@d.cmino, @(d.sdate < DateTime.Now && d.edate.AddYears(1) > DateTime.Now ? 1 : 0), @(preflag), @(d.istatus != 2 && Model.intval >= d.daylectinninglimit ? 0 : 1), @(d.daylectinninglimit));" class="lctcStdy">학습하기</a>
|
<a href="javascript:;" onclick="playerOpen(@d.cmino, @(d.sdate < DateTime.Now && d.edate.AddYears(1) > DateTime.Now ? 1 : 0), @(preflag), @(d.istatus != 2 && Model.intval >= d.daylectinninglimit ? 0 : 1), @(d.daylectinninglimit));" class="lctcStdy">학습하기</a>
|
||||||
}
|
}
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
@ -187,75 +189,101 @@
|
||||||
</div><!-- clsPopWrap -->
|
</div><!-- clsPopWrap -->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@Html.Partial("./Partial/MobileChk", null, new ViewDataDictionary { { "bindmethod", "cbchkmobile" } })
|
@Html.Partial("./Partial/MobileChk", null, new ViewDataDictionary { { "bindmethod", "cbchkmobile" } })
|
||||||
@Html.Partial("./Partial/OkCert3", null, new ViewDataDictionary { })
|
@Html.Partial("./Partial/OkCert3", null, new ViewDataDictionary { })
|
||||||
|
|
||||||
@section scriptsHeader{
|
@section scriptsHeader{
|
||||||
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
|
<script src="~/js/jquery-ui.min.js"></script>
|
||||||
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
|
<link href="~/css/jquery-ui-1.12.1/jquery-ui.min.css" rel="stylesheet" />
|
||||||
}
|
}
|
||||||
|
|
||||||
@section scripts{
|
@section scripts{
|
||||||
<script>
|
<script>
|
||||||
var _cmino = 0;
|
var _cmino = 0;
|
||||||
var _authplatform = 0;
|
var _authplatform = 0;
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
$("body").on("click", ".atdOpen", function () {
|
$("body").on("click", ".atdOpen", function () {
|
||||||
var atdNum = $(this).attr('atdOpen');
|
var atdNum = $(this).attr('atdOpen');
|
||||||
if ($(this).is('.on')) {
|
if ($(this).is('.on')) {
|
||||||
$('.atdOpen').removeClass('on');
|
$('.atdOpen').removeClass('on');
|
||||||
$('.atdDown').css('display', 'none');
|
$('.atdDown').css('display', 'none');
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
$('.atdOpen').removeClass('on');
|
$('.atdOpen').removeClass('on');
|
||||||
$('.atdDown').css('display', 'none');
|
$('.atdDown').css('display', 'none');
|
||||||
$(this).addClass('on');
|
$(this).addClass('on');
|
||||||
$('.atdDown' + atdNum).css('display', 'table-row');
|
$('.atdDown' + atdNum).css('display', 'table-row');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$('.datepicker').datepicker({ dateFormat: 'yy-mm-dd' });
|
$('.datepicker').datepicker({ dateFormat: 'yy-mm-dd' });
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
function playerOpen(cmino, timeflag, preflag, notoverflag, daylectinninglimit) {
|
function playerOpen(cmino, timeflag, preflag, notoverflag, daylectinninglimit) {
|
||||||
if (timeflag < 1) {
|
if (timeflag < 1) {
|
||||||
msg("학습기간이 아닙니다.");
|
msg("학습기간이 아닙니다.");
|
||||||
} else if (preflag < 1) {
|
}
|
||||||
|
else if (preflag < 1) {
|
||||||
msg("이전 회차 학습을 완료한 이후 학습이 가능합니다.");
|
msg("이전 회차 학습을 완료한 이후 학습이 가능합니다.");
|
||||||
} else if (notoverflag < 1) {
|
}
|
||||||
|
else if (notoverflag < 1) {
|
||||||
msg("관련 법령에 의해 일일 최대 학습가능한 시간은 10시간(10차시)입니다.");
|
msg("관련 법령에 의해 일일 최대 학습가능한 시간은 10시간(10차시)입니다.");
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
_cmino = cmino;
|
_cmino = cmino;
|
||||||
chkcontent();
|
chkcontent();
|
||||||
//viewcontents(cmino, false, @Model.croomlectno);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function chkcontent() {
|
function chkcontent() {
|
||||||
capp("/fcommon/attcertcheckforlectinning", {lectno : @Model.croomlectno, cmino : _cmino}, "cbchkcontent");
|
capp(
|
||||||
|
"/fcommon/attcertcheckforlectinning",
|
||||||
|
{
|
||||||
|
lectno: @Model.croomlectno
|
||||||
|
, cmino: _cmino
|
||||||
|
},
|
||||||
|
"cbchkcontent"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function cbchkcontent() {
|
function cbchkcontent() {
|
||||||
if (capResult.code == 1000) {
|
if (capResult.code == 1000) {
|
||||||
if (capResult.obj == 1) {
|
if (capResult.obj == 1) {
|
||||||
msg("학습을 시작합니다.", null, null, null, "viewcontents("+_cmino+",false,@(Model.croomlectno))");
|
msg("학습을 시작합니다.", null, null, null, "viewcontents("+_cmino+",false,@(Model.croomlectno))");
|
||||||
return false;
|
return false;
|
||||||
//viewcontents(_cmino, false,@Model.croomlectno);
|
}
|
||||||
} else if (capResult.obj == 2) {
|
else if (capResult.obj == 2) {
|
||||||
msg("학습을 시작합니다.", null, null, null, "viewcontents("+_cmino+",false,@(Model.croomlectno))");
|
msg("학습을 시작합니다.", null, null, null, "viewcontents("+_cmino+",false,@(Model.croomlectno))");
|
||||||
return false;
|
return false;
|
||||||
//viewcontents(_cmino, false,@Model.croomlectno);
|
}
|
||||||
} else {
|
else {
|
||||||
_authplatform = capResult.msg;
|
_authplatform = capResult.msg;
|
||||||
|
|
||||||
// ### 모바일 인증 처리
|
// ### 모바일 인증 처리
|
||||||
if(_authplatform == "0"){
|
if (_authplatform == "0"){
|
||||||
msg("학습인증수단이 없는 회원입니다. 정보수정을 통해 학습인증수단을 입력해주세요.");
|
msg("학습인증수단이 없는 회원입니다. 정보수정을 통해 학습인증수단을 입력해주세요.");
|
||||||
} else if (_authplatform == "1") {
|
}
|
||||||
|
else if (_authplatform == "1") {
|
||||||
confirmtoggle(true, "학습을 처음 시작할 때 본인인증이 필요합니다. 본인인증은 회차 당 1회에 한 해 진행됩니다.<br/> 본인인증을 하시겠습니까?", "chkipin()");
|
confirmtoggle(true, "학습을 처음 시작할 때 본인인증이 필요합니다. 본인인증은 회차 당 1회에 한 해 진행됩니다.<br/> 본인인증을 하시겠습니까?", "chkipin()");
|
||||||
} else if (_authplatform == "2") {
|
}
|
||||||
|
else if (_authplatform == "2") {
|
||||||
confirmtoggle(true, "학습을 처음 시작할 때 본인인증이 필요합니다. 본인인증은 회차 당 1회에 한 해 진행됩니다.<br/> 본인인증을 하시겠습니까?", "chkmobile()");
|
confirmtoggle(true, "학습을 처음 시작할 때 본인인증이 필요합니다. 본인인증은 회차 당 1회에 한 해 진행됩니다.<br/> 본인인증을 하시겠습니까?", "chkmobile()");
|
||||||
}
|
}
|
||||||
// ### 모바일 인증 중단 처리
|
|
||||||
//msg("학습을 시작합니다.", null, null, null, "viewcontents("+_cmino+",false,@(Model.croomlectno))");
|
//msg("학습을 시작합니다.", null, null, null, "viewcontents("+_cmino+",false,@(Model.croomlectno))");
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
msg("휴대폰 번호가 공란입니다.<br/>정보수정을 통해 번호를 입력해주세요.");
|
msg("휴대폰 번호가 공란입니다.<br/>정보수정을 통해 번호를 입력해주세요.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function chkipin() {
|
function chkipin() {
|
||||||
certok3reqview('IPIN', 'LectinningAuth', @Model.croomlectno, _cmino);
|
certok3reqview('IPIN', 'LectinningAuth', @Model.croomlectno, _cmino);
|
||||||
bglayer(false);
|
bglayer(false);
|
||||||
|
|
@ -272,12 +300,10 @@
|
||||||
}
|
}
|
||||||
function cbchkmobile() {
|
function cbchkmobile() {
|
||||||
if (capResult.code == 1000) {
|
if (capResult.code == 1000) {
|
||||||
//msg("인증이 성공하였습니다.\n 확인 버튼을 클릭하시면 학습이 가능합니다.");
|
|
||||||
$("#mobile").css("background", "#ddd");
|
$("#mobile").css("background", "#ddd");
|
||||||
mobilechkclose();
|
mobilechkclose();
|
||||||
msg("학습을 시작합니다.", null, null, null, "viewcontents("+_cmino+",false,@(Model.croomlectno))");
|
msg("학습을 시작합니다.", null, null, null, "viewcontents("+_cmino+",false,@(Model.croomlectno))");
|
||||||
return false;
|
return false;
|
||||||
//viewcontents(_cmino, false,@Model.croomlectno);
|
|
||||||
} else if (capResult.code == 1) {
|
} else if (capResult.code == 1) {
|
||||||
msg("유효시간이 만료되었습니다.\n 창을 닫고 인증을 다시 진행해주세요.");
|
msg("유효시간이 만료되었습니다.\n 창을 닫고 인증을 다시 진행해주세요.");
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -298,7 +298,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@section scriptsHeader{
|
@section scriptsHeader{
|
||||||
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
|
<script src="~/js/jquery-ui.min.js"></script>
|
||||||
<style>
|
<style>
|
||||||
.mainTab li:after {
|
.mainTab li:after {
|
||||||
content: none;
|
content: none;
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
{
|
{
|
||||||
<div class="mpgPtnr">
|
<div class="mpgPtnr">
|
||||||
<div class="lctcList">
|
<div class="lctcList">
|
||||||
<h5>공지사항 <a href="/My/BoardList?master=my">더보기</a></h5>
|
<h5>공지사항<a href="/My/BoardList?master=my">더보기</a></h5>
|
||||||
<ul>
|
<ul>
|
||||||
@if (Model.Boards.Count() < 1)
|
@if (Model.Boards.Count() < 1)
|
||||||
{
|
{
|
||||||
|
|
@ -34,7 +34,6 @@
|
||||||
<div class="mpgDsc">
|
<div class="mpgDsc">
|
||||||
<ul>
|
<ul>
|
||||||
<li><b>회사명 : </b>@Model.Assign.asname</li>
|
<li><b>회사명 : </b>@Model.Assign.asname</li>
|
||||||
@*<li><b>연락처(이메일) : </b>@(Model.Assign.mphone) @(Model.Assign.taxemail == null ? "" : "(" + Model.Assign.taxemail + ")")</li>*@
|
|
||||||
</ul>
|
</ul>
|
||||||
@if (Model.Assign.status == 1)
|
@if (Model.Assign.status == 1)
|
||||||
{
|
{
|
||||||
|
|
@ -72,11 +71,7 @@
|
||||||
<b>@d.strval</b>
|
<b>@d.strval</b>
|
||||||
</h5>
|
</h5>
|
||||||
<dl>
|
<dl>
|
||||||
@*<dt class="mpglSta3">@(d.time2 > DateTime.Now ? "진행중" : "종료")</dt>*@
|
|
||||||
@*<dt class="mpglSta@(d.intval5 == 0 && d.intval4 == 1 ? 3 : 1)">@(d.intval5 == 1 ? "환불요청" : d.intval4 == 1 ? "결제완료" : d.intval4 == 21 ? "결제대기" : d.intval4 == 22 ? "미입금" : d.intval4 == 51 ? "심사중" : d.intval4 == 55 ? "승인대기" : "")</dt>*@
|
|
||||||
@* <dt class="@(d.pstatus == 1 && d.rfdstatus < 1 ? "ltaDlbk":"ltaDlred")">@(d.pstatus == 55 ? "승인대기" : d.pstatus == 51 ? "심사중" : d.pstatus == 21 ? "결제대기" : d.pstatus == 22 ? "미입금" : d.pstatus == 1 && d.rfdstatus > 0 ? "환불요청" : d.pstatus == 1 ? "결제완료" : d.rstatus == 1 ? "부분환불" : d.rstatus == 2 ? "전액환불" : "-")</dt>*@
|
|
||||||
<dt class="mpglSta3">@d.lectStatus</dt>
|
<dt class="mpglSta3">@d.lectStatus</dt>
|
||||||
@*<dt style="color:#888888">교육기간 : @(d.intval3 == 1 ? d.time.ToString("yy-MM-dd") : d.time5.ToString("yy-MM-dd")) ~ @(d.intval3 == 1 ? d.time2.ToString("yy-MM-dd") : d.time3.ToString("yy-MM-dd"))</dt>*@
|
|
||||||
<dt style="color:#888888">교육기간 : @(d.time.ToString("yyyy년 MM월 dd일")) ~ @(d.time2.ToString("yyyy년 MM월 dd일"))</dt>
|
<dt style="color:#888888">교육기간 : @(d.time.ToString("yyyy년 MM월 dd일")) ~ @(d.time2.ToString("yyyy년 MM월 dd일"))</dt>
|
||||||
@if (d.intval3 != 1)
|
@if (d.intval3 != 1)
|
||||||
{
|
{
|
||||||
|
|
@ -84,12 +79,6 @@
|
||||||
}
|
}
|
||||||
<dt style="color:black;">@d.studytime<span>시간과정</span></dt>
|
<dt style="color:black;">@d.studytime<span>시간과정</span></dt>
|
||||||
@Html.Raw(d.intval6 == 1 ? "<span class=\"grn\" style='color: red;'>환급과정</span>" : "<span class=\"grn\" style='color: red;'>비환급과정</span>")
|
@Html.Raw(d.intval6 == 1 ? "<span class=\"grn\" style='color: red;'>환급과정</span>" : "<span class=\"grn\" style='color: red;'>비환급과정</span>")
|
||||||
|
|
||||||
@* <dd>복습기간 : @(d.time2.AddYears(1).ToString("yy-MM-dd"))</dd>*@
|
|
||||||
@* @if (false && d.intval3 == 2 && d.time3 > Convert.ToDateTime("1900-01-01"))
|
|
||||||
{
|
|
||||||
<dd>집체교육 : @d.time3.ToString("yy/MM/dd")</dd>
|
|
||||||
}*@
|
|
||||||
</dl>
|
</dl>
|
||||||
|
|
||||||
</a>
|
</a>
|
||||||
|
|
@ -163,8 +152,6 @@
|
||||||
strUrl = "/My/PayInfo?payno=" + d.longval2;
|
strUrl = "/My/PayInfo?payno=" + d.longval2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@*<a href="@(d.intval5 != 1 && d.intval4 == 1 && d.intval8 == 1 ? "/CRoom/Index?croomlectno=" + d.longval : d.intval5 != 1 && d.intval4 == 1 && d.intval8 == 0
|
|
||||||
? "/My/Ready" : d.intval5 != 1 && d.intval4 == 51 ? "/Course/ApplyPay" : d.intval5 != 1 && d.intval4 == 21 ? "/Course/ApplyPay?payno=" + d.longval2 : "/My/PayInfo?payno=" + d.longval2)" class="gocroom">*@
|
|
||||||
<a href="#" onclick="gopaies1()" data-cshape=@d.intval3 class="gocroom">
|
<a href="#" onclick="gopaies1()" data-cshape=@d.intval3 class="gocroom">
|
||||||
<h5>
|
<h5>
|
||||||
<span class="@(d.intval3 == 0 ? "org" : d.intval3 == 1 ? "nav_grn" : "nav_blu")">@(d.intval3 == 0 ? "온라인교육" : d.intval3 == 1 ? "교육장교육" : "온라인교육")</span>
|
<span class="@(d.intval3 == 0 ? "org" : d.intval3 == 1 ? "nav_grn" : "nav_blu")">@(d.intval3 == 0 ? "온라인교육" : d.intval3 == 1 ? "교육장교육" : "온라인교육")</span>
|
||||||
|
|
@ -176,14 +163,10 @@
|
||||||
{
|
{
|
||||||
<span style=" font-weight: 400; font-size: 11pt; line-height: 20px; vertical-align: middle; color: #0000ff; background-color: #fff; padding:0;">@d.studyplacename 교육장</span>
|
<span style=" font-weight: 400; font-size: 11pt; line-height: 20px; vertical-align: middle; color: #0000ff; background-color: #fff; padding:0;">@d.studyplacename 교육장</span>
|
||||||
}
|
}
|
||||||
@* @Html.Raw(d.intval6 == 1 ? "<span class=\"grn\">환급</span>" : "")*@
|
|
||||||
<b>@d.strval</b>
|
<b>@d.strval</b>
|
||||||
</h5>
|
</h5>
|
||||||
<dl>
|
<dl>
|
||||||
@*<dt class="mpglSta3">@(d.time2 > DateTime.Now ? "진행중" : "종료")</dt>*@
|
|
||||||
@*<dt>@(d.intval4 == 55 ? "승인대기" : d.intval14 == 51 ? "심사중" : d.intval14 == 21 ? "결제대기" : d.intval14 == 22 ? "미입금" : d.intval14 == 1)</dt>*@
|
|
||||||
<dt>@d.lectStatus</dt>
|
<dt>@d.lectStatus</dt>
|
||||||
@*<dt style="color:#888888">교육기간 : @(d.intval3 == 1 ? d.time.ToString("yy-MM-dd") : d.time5.ToString("yy-MM-dd")) ~ @(d.intval3 == 1 ? d.time2.ToString("yy-MM-dd") : d.time3.ToString("yy-MM-dd"))</dt>*@
|
|
||||||
@if (d.intval3 == 2)
|
@if (d.intval3 == 2)
|
||||||
{
|
{
|
||||||
<dt style="color:#888888">교육기간 : @(d.time3.ToString("yyyy년 MM월 dd일")) ~ @(d.time4.ToString("yyyy년 MM월 dd일"))</dt>
|
<dt style="color:#888888">교육기간 : @(d.time3.ToString("yyyy년 MM월 dd일")) ~ @(d.time4.ToString("yyyy년 MM월 dd일"))</dt>
|
||||||
|
|
@ -198,12 +181,6 @@
|
||||||
}
|
}
|
||||||
<dt style="color:black;">@d.studytime<span>시간과정</span></dt>
|
<dt style="color:black;">@d.studytime<span>시간과정</span></dt>
|
||||||
@Html.Raw(d.intval6 == 1 ? "<span class=\"grn\" style='color: red;'>환급과정</span>" : "<span class=\"grn\" style='color: red;'>비환급과정</span>")
|
@Html.Raw(d.intval6 == 1 ? "<span class=\"grn\" style='color: red;'>환급과정</span>" : "<span class=\"grn\" style='color: red;'>비환급과정</span>")
|
||||||
|
|
||||||
@* <dd>복습기간 : @(d.time2.AddYears(1).ToString("yy-MM-dd"))</dd>*@
|
|
||||||
@* @if (false && d.intval3 == 2 && d.time3 > Convert.ToDateTime("1900-01-01"))
|
|
||||||
{
|
|
||||||
<dd>집체교육 : @d.time3.ToString("yy/MM/dd")</dd>
|
|
||||||
}*@
|
|
||||||
</dl>
|
</dl>
|
||||||
|
|
||||||
</a>
|
</a>
|
||||||
|
|
@ -211,26 +188,6 @@
|
||||||
status1CNT++;
|
status1CNT++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@*@if (Model.Datas.Where(w=>w.dtype == 1).Count() < 1 && Model.CMs.Count() > 0)
|
|
||||||
{
|
|
||||||
foreach (var d in Model.CMs)
|
|
||||||
{
|
|
||||||
<li>
|
|
||||||
<a href="/Course/@d.cgcode.Replace("Test", "Cert")Detail?cmno=@d.cmno">
|
|
||||||
<h5>
|
|
||||||
<em>@(d.tyear)-@(d.tseq)기</em>
|
|
||||||
<span class="nav">@(d.cshape == 0 ? "ON" : d.cshape == 1 ? "OFF" : "혼합")</span>
|
|
||||||
@Html.Raw(d.isrefund == 1 ? "<span class=\"grn\">환급</span>" : "")
|
|
||||||
<b>@d.cname</b>
|
|
||||||
</h5>
|
|
||||||
<dl>
|
|
||||||
<dt class="mpglSta3">추천강좌</dt>
|
|
||||||
<dd>신청기간 : @d.rstime.Value.ToString("yy/MM/dd") ~ @d.retime.Value.ToString("yy/MM/dd")</dd>
|
|
||||||
</dl>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
}
|
|
||||||
}*@
|
|
||||||
</ul>
|
</ul>
|
||||||
@if (Model.Datas.Where(w => w.dtype == 1).Count() < 1)
|
@if (Model.Datas.Where(w => w.dtype == 1).Count() < 1)
|
||||||
{
|
{
|
||||||
|
|
@ -248,11 +205,44 @@
|
||||||
<ul class="mpgnList" id="mpgl01">
|
<ul class="mpgnList" id="mpgl01">
|
||||||
@foreach (var d in Model.Datas.Where(w => w.dtype == 3).OrderBy(o => o.intval))
|
@foreach (var d in Model.Datas.Where(w => w.dtype == 3).OrderBy(o => o.intval))
|
||||||
{
|
{
|
||||||
if(d.cshape != 1) {
|
if (d.cshape != 1)
|
||||||
|
{
|
||||||
|
string croomLink = string.Format("/CRoom/Index?croomlectno={0}", d.longval);
|
||||||
|
|
||||||
|
// 6709. 과제(intval 4)일 경우 링크가 달라야 한다
|
||||||
|
switch (d.intval)
|
||||||
|
{
|
||||||
|
case 4:
|
||||||
|
// 기존 쿼리에서는 sdno를 가져올 수 없어서 vm.CRoomLectSdInfo 를 추가함
|
||||||
|
// => 쿼리조건 기준은 사용자번호를 기준으로 현재 수강중인 강좌기간내의 과제들을 모두 가져와서 들고 있음
|
||||||
|
var lectsdInfo = new NP.Model.CRoomLectSdInfo();
|
||||||
|
|
||||||
|
if (Model.CRoomLectSdInfo != null)
|
||||||
|
{
|
||||||
|
lectsdInfo = Model.CRoomLectSdInfo
|
||||||
|
.Where(x => x.lectno == d.longval)
|
||||||
|
.SingleOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lectsdInfo != null && lectsdInfo.lectno > 0)
|
||||||
|
{
|
||||||
|
croomLink = string.Format("/CRoom/EstimationSubject?croomlectno={0}&croomcmno={1}&estno={2}&tabidx=0", d.longval, d.intval7, lectsdInfo.sdno);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
croomLink = string.Format("/CRoom/Index?croomlectno={0}", d.longval);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
croomLink = string.Format("/CRoom/Index?croomlectno={0}", d.longval);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
<li>
|
<li>
|
||||||
<div>
|
<div>
|
||||||
@*<a href="/CRoom/Index?croomlectno=@d.longval" data-cshape=@d.intval3 class="gocroom">*@
|
<a href="@croomLink" data-cshape=@d.cshape class="gocroom">
|
||||||
<a href="/CRoom/Index?croomlectno=@d.longval" data-cshape=@d.cshape class="gocroom">
|
|
||||||
@if (d.intval == 1)
|
@if (d.intval == 1)
|
||||||
{
|
{
|
||||||
<h5><span>[학습]</span>@d.strval (@(d.intval3)반)</h5>
|
<h5><span>[학습]</span>@d.strval (@(d.intval3)반)</h5>
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
<script type="text/javascript" src="/js/jquery-1.8.3.min.js"></script>
|
<script type="text/javascript" src="/js/jquery-1.8.3.min.js"></script>
|
||||||
<script type="text/javascript" src="/js/placeholders.min.js"></script>
|
<script type="text/javascript" src="/js/placeholders.min.js"></script>
|
||||||
<script type="text/javascript" src="/js/slick.min.js"></script>
|
<script type="text/javascript" src="/js/slick.min.js"></script>
|
||||||
<script type="text/javascript" src="/js/site.js?v=230214"></script>
|
<script type="text/javascript" src="/js/site.js?v=250321"></script>
|
||||||
<script type="text/javascript" src="/js/master.js"></script>
|
<script type="text/javascript" src="/js/master.js"></script>
|
||||||
<script src="https://vjs.zencdn.net/ie8/1.1.2/videojs-ie8.min.js"></script>
|
<script type="text/javascript" src="/js/videojs-ie8.min.js"></script>
|
||||||
<script src="https://vjs.zencdn.net/7.7.6/video.js"></script>
|
<script type="text/javascript" src="/js/video.js"></script>
|
||||||
<script src="https://cdn.polyfill.io/v2/polyfill.min.js"></script>
|
<script type="text/javascript" src="/js/polyfill.min.js"></script>
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
|
<link href="~/css/jquery-ui-1.12.1/jquery-ui.min.css" rel="stylesheet" />
|
||||||
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
|
<script src="~/js/jquery-ui.min.js"></script>
|
||||||
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
|
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
$('.datepicker-input').datepicker({
|
$('.datepicker-input').datepicker({
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
@Html.Partial("./Partial/JS")
|
@Html.Partial("./Partial/JS")
|
||||||
@RenderSection("scriptsHeader", required: false)
|
@RenderSection("scriptsHeader", required: false)
|
||||||
<script type="text/javascript" src="/js/study.js?v=190919"></script>
|
<script type="text/javascript" src="/js/study.js?v=190919"></script>
|
||||||
<script src="https://polyfill.io/v3/polyfill.js?features=fetch"></script>
|
<script type="text/javascript" src="~/js/polyfill.min.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
@RenderBody()
|
@RenderBody()
|
||||||
|
|
|
||||||
|
|
@ -34,15 +34,14 @@
|
||||||
<add key="fronturl" value="https://www.ynicte.com" />
|
<add key="fronturl" value="https://www.ynicte.com" />
|
||||||
<add key="adminurl" value="http://admin.ynicte.com" />
|
<add key="adminurl" value="http://admin.ynicte.com" />
|
||||||
<add key="reporturl" value="http://ynicter.nptc.kr" />
|
<add key="reporturl" value="http://ynicter.nptc.kr" />
|
||||||
<!--<add key="masteremail" value="edu@ynicte.or.kr;mail.ynicte.or.kr;25;ynicte@ynicte.or.kr;k7758870!%" />-->
|
<add key="masteremail" value="yicte2020@daum.net;smtp.daum.net;465;yicte2020;txwhczubbkcbotfd" />
|
||||||
<add key="masteremail" value="yicte@cte.or.kr;smtp.daum.net;465;yicte2020;yicte04003" />
|
|
||||||
<add key="usessl" value="Y" />
|
<add key="usessl" value="Y" />
|
||||||
<add key="ssonoauth" value="Y" />
|
<add key="ssonoauth" value="Y" />
|
||||||
<add key="daokey" value="ynictelms2020" />
|
<add key="daokey" value="ynictelms2020" />
|
||||||
|
|
||||||
<!--<add key="configpath" value="Product" />-->
|
<add key="configpath" value="Product" />
|
||||||
<!--<add key="configpath" value="ProductDev" />-->
|
<!--<add key="configpath" value="ProductDev" />-->
|
||||||
<add key="configpath" value="Staging" />
|
<!--<add key="configpath" value="Staging" />-->
|
||||||
<add key="isstaging" value="1" />
|
<add key="isstaging" value="1" />
|
||||||
|
|
||||||
<add key="thumbnailexe" value="D:\\dev_tool\\ffmpeg.exe" />
|
<add key="thumbnailexe" value="D:\\dev_tool\\ffmpeg.exe" />
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 4.6 KiB |
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 4.5 KiB |
|
After Width: | Height: | Size: 6.2 KiB |
592
FO/js/site.js
|
|
@ -20,11 +20,9 @@
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
//$("body").on("blur", "input[type='text'],input[type='password']", function () {
|
|
||||||
// //$("body").focus();
|
|
||||||
//});
|
|
||||||
$("body").on("keydown", ".int, .intdot", function (e) {
|
$("body").on("keydown", ".int, .intdot", function (e) {
|
||||||
//109,189
|
|
||||||
}).on("keyup", ".int, .intdot, input.mobile,input[type='text'],input[type='password']", function (e) {
|
}).on("keyup", ".int, .intdot, input.mobile,input[type='text'],input[type='password']", function (e) {
|
||||||
if (($(this).hasClass("int") || $(this).hasClass("intdot") || $(this).hasClass("mobile")) && $(this).val() !== null && $(this).val() !== '' && e.keyCode != 8 && e.keyCode != 109 && e.keyCode != 189 && e.keyCode != 46 && e.keyCode != 190 && e.keyCode != 110 && e.keyCode != 109 && e.keycode != 189 && e.keyCode != 13
|
if (($(this).hasClass("int") || $(this).hasClass("intdot") || $(this).hasClass("mobile")) && $(this).val() !== null && $(this).val() !== '' && e.keyCode != 8 && e.keyCode != 109 && e.keyCode != 189 && e.keyCode != 46 && e.keyCode != 190 && e.keyCode != 110 && e.keyCode != 109 && e.keycode != 189 && e.keyCode != 13
|
||||||
&& !(e.keyCode > 47 && e.keyCode < 58) && !(e.keyCode > 95 && e.keyCode < 106)) {
|
&& !(e.keyCode > 47 && e.keyCode < 58) && !(e.keyCode > 95 && e.keyCode < 106)) {
|
||||||
|
|
@ -92,11 +90,7 @@ $(document).ready(function () {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}).on("click", ".int, .intdot", function () {
|
}).on("click", ".int, .intdot", function () {
|
||||||
//if ($(this).hasClass("phplaceholder")) {
|
$(this)[0].select();
|
||||||
// $("#" + $(this).attr("id").substr(3)).focus();
|
|
||||||
//} else {
|
|
||||||
$(this)[0].select();
|
|
||||||
//}
|
|
||||||
}).on("focus", ".int, .intdot, input[type='text'], input[type='password']", function () {
|
}).on("focus", ".int, .intdot, input[type='text'], input[type='password']", function () {
|
||||||
if ($(this).hasClass("int") || $(this).hasClass("intdot")) {
|
if ($(this).hasClass("int") || $(this).hasClass("intdot")) {
|
||||||
$(this).val($(this).val().replace(/,/gi, ''));
|
$(this).val($(this).val().replace(/,/gi, ''));
|
||||||
|
|
@ -121,13 +115,6 @@ $(document).ready(function () {
|
||||||
$(this).val(v.substr(0, 4) + "-" + v.substr(4, 2) + "-" + v.substr(6));
|
$(this).val(v.substr(0, 4) + "-" + v.substr(4, 2) + "-" + v.substr(6));
|
||||||
}
|
}
|
||||||
}).on("focusout", ".int, .intdot, input[type='text'], input[type='password']", function () {
|
}).on("focusout", ".int, .intdot, input[type='text'], input[type='password']", function () {
|
||||||
//focusoutobj = $(this);
|
|
||||||
//if (!$(this).hasClass("nocomma")) {
|
|
||||||
// setTimeout(function () {
|
|
||||||
// var fv = $.trim($(focusoutobj).val());
|
|
||||||
// bindComma2(fv);
|
|
||||||
// }, 10);
|
|
||||||
//}
|
|
||||||
$("label.phplaceholder").remove();
|
$("label.phplaceholder").remove();
|
||||||
});
|
});
|
||||||
$('#breadcrumb dd > span').click(function () {
|
$('#breadcrumb dd > span').click(function () {
|
||||||
|
|
@ -218,7 +205,6 @@ function uploadeditorimage(files, el, fdata, _callback, _url) {
|
||||||
contentType: false,
|
contentType: false,
|
||||||
processData: false,
|
processData: false,
|
||||||
success: function (result) {
|
success: function (result) {
|
||||||
//_uploadeditorimagertn = JSON.parse(result);
|
|
||||||
_uploadeditorimagertn = result;
|
_uploadeditorimagertn = result;
|
||||||
eval(_uploadeditorimagecallback.substr(_uploadeditorimagecallback.length - 1, 1) == ")" ? _uploadeditorimagecallback : (_uploadeditorimagecallback + "()"));
|
eval(_uploadeditorimagecallback.substr(_uploadeditorimagecallback.length - 1, 1) == ")" ? _uploadeditorimagecallback : (_uploadeditorimagecallback + "()"));
|
||||||
}
|
}
|
||||||
|
|
@ -266,39 +252,66 @@ function viewcontentsok() {
|
||||||
cbviewcontents();
|
cbviewcontents();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
var _cdmsisopenning = 0;
|
var _cdmsisopenning = 0;
|
||||||
|
|
||||||
|
// 팝업 창 참조를 전역으로 유지
|
||||||
|
let globalPopup = null;
|
||||||
|
|
||||||
function cbviewcontents() {
|
function cbviewcontents() {
|
||||||
if (_vcistaste || (capResult.code == 1000)) {
|
if (_vcistaste || capResult.code == 1000) {
|
||||||
|
// 백그라운드 레이어 숨기기
|
||||||
$("#bglayer").hide();
|
$("#bglayer").hide();
|
||||||
_cdmsisopenning = 1;
|
_cdmsisopenning = 1;
|
||||||
if (ismobile()) {
|
|
||||||
var win = window.open("/CDMS/Play" + (_vc_istaste ? "Taste" : "") + "?cmino=" + _vc_cmino + "&ismobile=1&lectno=" + _vc_lectno + "&pseq=" + _vc_pseq, 'contentsview');
|
const url = `/CDMS/Play${_vc_istaste ? "Taste" : ""}?cmino=${_vc_cmino}&ismobile=${ismobile() ? '1' : '0'}&lectno=${_vc_lectno}&pseq=${_vc_pseq}`;
|
||||||
if (win == null) {
|
|
||||||
msg("팝업이 차단되어 있습니다. 차단을 해제해 주세요(0)");
|
// 팝업 옵션
|
||||||
|
const nWidth = 1080;
|
||||||
|
const nHeight = screen.availHeight - 100;
|
||||||
|
const nLeft = Math.round((screen.availWidth - nWidth) / 2);
|
||||||
|
const nTop = Math.round((screen.availHeight - nHeight) / 2);
|
||||||
|
|
||||||
|
const popOption = `
|
||||||
|
width=${nWidth},
|
||||||
|
height=${nHeight},
|
||||||
|
top=${nTop},
|
||||||
|
left=${nLeft},
|
||||||
|
toolbar=no,
|
||||||
|
menubar=no,
|
||||||
|
location=no,
|
||||||
|
resizable=yes,
|
||||||
|
status=yes,
|
||||||
|
scrollbars=yes`.replace(/\s+/g, '');
|
||||||
|
|
||||||
|
// 이미 팝업이 열려 있는지 확인
|
||||||
|
if (globalPopup && !globalPopup.closed) {
|
||||||
|
try {
|
||||||
|
// 1초 딜레이 적용
|
||||||
|
setTimeout(() => {
|
||||||
|
globalPopup.location.href = url; // URL 업데이트 (필요에 따라)
|
||||||
|
globalPopup.focus(); // 이미 열린 팝업 창 활성화
|
||||||
|
}, 1000);
|
||||||
|
} catch (e) {
|
||||||
|
console.error("기존 팝업 접근 실패: ", e);
|
||||||
|
globalPopup = null; // 접근 실패 시 참조 정리
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
var cpop = open("/Open/Popup", "checkpop", 'width=100,height=100');
|
globalPopup = window.open(url, 'contentsview', popOption);
|
||||||
if (cpop == null) {
|
|
||||||
msg("팝업이 차단되어 있습니다. 차단을 해제해 주세요(1)");
|
if (!globalPopup) {
|
||||||
|
msg("팝업이 차단되어 있습니다. 차단을 해제해 주세요.");
|
||||||
} else {
|
} else {
|
||||||
cpop.close();
|
try {
|
||||||
var nWidth = "1080";
|
globalPopup.focus(); // 포커스 이동
|
||||||
var nHeight = screen.availHeight - 100;
|
} catch (e) {
|
||||||
var popOption = "";
|
console.error("팝업 포커스 실패: ", e);
|
||||||
popOption += "width=" + nWidth + ",";
|
|
||||||
popOption += "height=" + nHeight + ",";
|
|
||||||
popOption += "toolbar=no,menubar=no,location=no,";
|
|
||||||
popOption += "resizable=yes,status=yes,scrollbars=yes";
|
|
||||||
if (window.open("/CDMS/Play" + (_vc_istaste ? "Taste" : "") + "?cmino=" + _vc_cmino + "&ismobile=0&lectno=" + _vc_lectno + "&pseq=" + _vc_pseq, 'contentsview', popOption) != null) {
|
|
||||||
//window.open("/CDMS/Play" + (_vc_istaste ? "Taste" : "") + "?cmino=" + _vc_cmino + "&ismobile=0&lectno=" + _vc_lectno + "&pseq=" + _vc_pseq, 'contentsview', popOption).focus();
|
|
||||||
console.log('iscdms');
|
|
||||||
}
|
}
|
||||||
else { msg("팝업이 차단되어 있습니다. 차단을 해제해 주세요"); }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else {
|
location.href = "/Account/Index?ru=" + location.href.replace(/#/gi, '');
|
||||||
location.href = "/Account/Index?ru="+location.href.replace(/#/gi,'');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -603,132 +616,309 @@ function cap(url, formid, callback, getpost, autoMsg, noBG, jsislayer2) {
|
||||||
console.log("다른 작업을 처리중입니다. 잠시후 다시 작업해주세요.");
|
console.log("다른 작업을 처리중입니다. 잠시후 다시 작업해주세요.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function capp(url, p, callback, getpost, autoMsg, noBG, jsislayer2, hideBG, noerror, sync) {
|
function capp(url, p, callback, getpost, autoMsg, noBG, jsislayer2, hideBG, noerror, sync) {
|
||||||
_jsislayer2 = jsislayer2 || false;
|
_jsislayer2 = jsislayer2 || false;
|
||||||
_noerror = noerror || false;
|
_noerror = noerror || false;
|
||||||
_hideBG = hideBG || false;
|
_hideBG = hideBG || false;
|
||||||
|
|
||||||
|
// 동기식 요청은 권장되지 않지만, 기존 코드 호환성을 위해 유지
|
||||||
|
// 단, 경고 메시지 출력
|
||||||
_async = !(sync || false);
|
_async = !(sync || false);
|
||||||
|
if (sync) {
|
||||||
|
console.warn("동기식 Ajax 요청은 권장되지 않으며 iOS에서 문제를 일으킬 수 있습니다.");
|
||||||
|
}
|
||||||
|
|
||||||
if (!isCaping) {
|
if (!isCaping) {
|
||||||
isAutoMsg = autoMsg || false;
|
isAutoMsg = autoMsg || false;
|
||||||
_bging = noBG || false;
|
_bging = noBG || false;
|
||||||
|
|
||||||
if (!_bging) {
|
if (!_bging) {
|
||||||
ajaxing();
|
ajaxing();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_jsislayer2) {
|
if (_jsislayer2) {
|
||||||
bglayer2();
|
bglayer2();
|
||||||
}
|
}
|
||||||
|
|
||||||
_callback = callback;
|
_callback = callback;
|
||||||
capResult = null;
|
capResult = null;
|
||||||
capOK = false;
|
capOK = false;
|
||||||
isCaping = true;
|
isCaping = true;
|
||||||
clearComma();
|
|
||||||
$.ajax({
|
// 기존 함수 호출 유지, 존재 확인 후 실행
|
||||||
|
if (typeof clearComma === 'function') {
|
||||||
|
try {
|
||||||
|
clearComma();
|
||||||
|
} catch (e) {
|
||||||
|
console.error("clearComma 함수 실행 오류:", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ajax 요청 설정
|
||||||
|
const ajaxSettings = {
|
||||||
type: getpost || "post",
|
type: getpost || "post",
|
||||||
url: url,
|
url: url,
|
||||||
data: p,
|
data: p,
|
||||||
async: _async,
|
async: _async,
|
||||||
|
timeout: _async ? 30000 : undefined, // 비동기 요청만 타임아웃 설정
|
||||||
success: function (r) {
|
success: function (r) {
|
||||||
isCaping = false;
|
isCaping = false;
|
||||||
capResult = r;
|
capResult = r;
|
||||||
setcap();
|
// iOS 호환성을 위한 추가 처리
|
||||||
}, error: function (e) {
|
setTimeout(function () {
|
||||||
|
setcap();
|
||||||
|
}, 0);
|
||||||
|
},
|
||||||
|
error: function (xhr, status, error) {
|
||||||
isCaping = false;
|
isCaping = false;
|
||||||
console.log(e.responseText);
|
console.log("Ajax 오류:", status, error);
|
||||||
if (_jsislayer2) {
|
|
||||||
//msg2("잠시 후 다시 요청해주세요.");
|
if (xhr.responseText) {
|
||||||
|
console.log("응답 내용:", xhr.responseText);
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
//msg("잠시 후 다시 요청해주세요.");
|
// 타임아웃 오류 별도 처리
|
||||||
|
if (status === "timeout") {
|
||||||
|
if (_jsislayer2) {
|
||||||
|
alert("요청 시간이 초과되었습니다. 다시 시도해 주세요.");
|
||||||
|
} else {
|
||||||
|
alert("요청 시간이 초과되었습니다. 다시 시도해 주세요.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}, complete: function () {
|
else if (!_noerror) {
|
||||||
ajaxing(false);
|
if (_jsislayer2) {
|
||||||
|
alert("잠시 후 다시 요청해주세요.");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
alert("잠시 후 다시 요청해주세요.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
complete: function () {
|
||||||
|
// iOS에서의 지연 문제 방지를 위한 setTimeout 사용
|
||||||
|
setTimeout(function () {
|
||||||
|
ajaxing(false);
|
||||||
|
}, 0);
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
|
|
||||||
|
// iOS 특정 버전에서의 캐시 문제 방지
|
||||||
|
if (navigator.userAgent.match(/(iPad|iPhone|iPod)/g)) {
|
||||||
|
ajaxSettings.cache = false;
|
||||||
|
|
||||||
|
// URL에 타임스탬프 추가하여 캐시 방지
|
||||||
|
const timestamp = new Date().getTime();
|
||||||
|
ajaxSettings.url = ajaxSettings.url +
|
||||||
|
(ajaxSettings.url.indexOf('?') >= 0 ? '&' : '?') +
|
||||||
|
'_t=' + timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
$.ajax(ajaxSettings);
|
||||||
}
|
}
|
||||||
else if (!_noerror){
|
else if (!_noerror) {
|
||||||
console.log("다른 작업을 처리중입니다. 잠시후 다시 작업해주세요.");
|
console.log("다른 작업을 처리중입니다. 잠시후 다시 작업해주세요.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function capfile(url, data, callback, noeval, setBG, jsislayer2) {
|
function capfile(url, data, callback, noeval, setBG, jsislayer2) {
|
||||||
|
// 로딩바 표시 추가
|
||||||
|
showLoadingImage();
|
||||||
|
|
||||||
noeval = noeval || false;
|
noeval = noeval || false;
|
||||||
_jsislayer2 = jsislayer2 || false;
|
_jsislayer2 = jsislayer2 || false;
|
||||||
_setBG = setBG || false;
|
_setBG = setBG || false;
|
||||||
capfilecallback = callback;
|
// 백그라운드 레이어 표시
|
||||||
if (_setBG) {
|
if (_setBG) {
|
||||||
bglayer();
|
bglayer();
|
||||||
}
|
}
|
||||||
if (_jsislayer2) {
|
if (_jsislayer2) {
|
||||||
bglayer2();
|
bglayer2();
|
||||||
}
|
}
|
||||||
|
// iOS 호환성을 위한 처리
|
||||||
|
// FormData 객체 확인 및 필요시 수정
|
||||||
|
if (data instanceof FormData) {
|
||||||
|
// iOS에서 FormData 디버깅을 위한 로그 (개발 중에만 사용)
|
||||||
|
console.log("FormData 항목 수:", [...data.entries()].length);
|
||||||
|
}
|
||||||
|
// 콜백 함수 실행 헬퍼
|
||||||
|
function executeCallback(result) {
|
||||||
|
// 로딩바 숨김 추가
|
||||||
|
hideLoadingImage();
|
||||||
|
|
||||||
|
if (_setBG) {
|
||||||
|
$("#bglayer").hide();
|
||||||
|
}
|
||||||
|
if (noeval) {
|
||||||
|
// 함수 객체로 직접 호출
|
||||||
|
if (typeof callback === 'function') {
|
||||||
|
callback(result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// 기존 방식 유지 (eval 사용)
|
||||||
|
// 보안상 권장되지 않지만 기존 코드 호환성 유지
|
||||||
|
try {
|
||||||
|
window.capResult = result; // 전역 변수로 결과 저장
|
||||||
|
if (typeof callback === 'string') {
|
||||||
|
if (callback.substr(callback.length - 1, 1) == ")") {
|
||||||
|
eval(callback);
|
||||||
|
} else {
|
||||||
|
eval(callback + "()");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error("콜백 실행 오류:", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
var ajaxRequest = $.ajax({
|
var ajaxRequest = $.ajax({
|
||||||
type: "POST",
|
type: "POST",
|
||||||
url: url,
|
url: url,
|
||||||
contentType: false,
|
contentType: false,
|
||||||
processData: false,
|
processData: false,
|
||||||
data: data
|
data: data,
|
||||||
|
timeout: 60000,
|
||||||
|
xhr: function () {
|
||||||
|
var xhr = $.ajaxSettings.xhr();
|
||||||
|
// 업로드 진행 상황 모니터링 (iOS에서 파일 업로드 진행 확인)
|
||||||
|
if (xhr.upload) {
|
||||||
|
xhr.upload.addEventListener('progress', function (e) {
|
||||||
|
if (e.lengthComputable) {
|
||||||
|
var percent = Math.round((e.loaded / e.total) * 100);
|
||||||
|
console.log("업로드 진행률: " + percent + "%");
|
||||||
|
}
|
||||||
|
}, false);
|
||||||
|
}
|
||||||
|
return xhr;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
ajaxRequest.error(function (e) {
|
// 에러 처리
|
||||||
console.log(e);
|
ajaxRequest.fail(function (jqXHR, textStatus, errorThrown) {
|
||||||
capResult = data;
|
console.error("Ajax 요청 실패:", textStatus, errorThrown);
|
||||||
if (!noeval) {
|
// 타임아웃인 경우 별도 처리
|
||||||
eval(capfilecallback.substr(capfilecallback.length - 1, 1) == ")" ? capfilecallback : (capfilecallback + "()"));
|
if (textStatus === "timeout") {
|
||||||
|
alert("요청 시간이 초과되었습니다. 다시 시도해 주세요.");
|
||||||
|
// 로딩바 숨김 추가 (타임아웃 시)
|
||||||
|
hideLoadingImage();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ajaxRequest.done(capfilecallback);
|
// 기존 에러 처리 로직 유지 (하지만 에러 시 다른 처리를 권장)
|
||||||
|
executeCallback({
|
||||||
|
code: -1,
|
||||||
|
message: "요청 처리 중 오류가 발생했습니다",
|
||||||
|
error: textStatus
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
ajaxRequest.done(function (data) {
|
ajaxRequest.done(function (data) {
|
||||||
if (_setBG) {
|
if (data && data.code == 1000) {
|
||||||
$("#bglayer").hide();
|
executeCallback(data);
|
||||||
}
|
}
|
||||||
capResult = data;
|
else {
|
||||||
if (capResult.code == 1000) {
|
console.warn("서버 응답 코드가 1000이 아닙니다:", data);
|
||||||
if (!noeval) {
|
executeCallback(data);
|
||||||
eval(capfilecallback.substr(capfilecallback.length - 1, 1) == ")" ? capfilecallback : (capfilecallback + "()"));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ajaxRequest.done(capfilecallback);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function capfileform(url, fid, callback, iseval, getpost, autoMsg, noBG, jsislayer2) {
|
function capfileform(url, fid, callback, iseval, getpost, autoMsg, noBG, jsislayer2) {
|
||||||
_jsislayer2 = jsislayer2 || false;
|
_jsislayer2 = jsislayer2 || false;
|
||||||
if (!isCaping) {
|
if (!isCaping) {
|
||||||
|
// 로딩바 표시 추가
|
||||||
|
showLoadingImage();
|
||||||
|
|
||||||
isAutoMsg = autoMsg || false;
|
isAutoMsg = autoMsg || false;
|
||||||
_bging = noBG || false;
|
_bging = noBG || false;
|
||||||
if (!_bging) {
|
if (!_bging) { ajaxing(); }
|
||||||
ajaxing();
|
if (_jsislayer2) { bglayer2(); }
|
||||||
}
|
|
||||||
if (_jsislayer2) {
|
|
||||||
bglayer2();
|
|
||||||
}
|
|
||||||
_callback = callback;
|
_callback = callback;
|
||||||
capResult = null;
|
capResult = null;
|
||||||
capOK = false;
|
capOK = false;
|
||||||
isCaping = true;
|
isCaping = true;
|
||||||
//clearComma();
|
// 폼 요소 직접 참조
|
||||||
|
const form = document.getElementById(fid);
|
||||||
|
// iOS 호환성을 위한 FormData 생성 방식 개선
|
||||||
|
let formData;
|
||||||
|
try {
|
||||||
|
// 기본 FormData 생성 시도
|
||||||
|
formData = new FormData(form);
|
||||||
|
// iOS 호환성 검사 - 파일 입력 필드 확인
|
||||||
|
const fileInputs = form.querySelectorAll('input[type="file"]');
|
||||||
|
let hasFiles = false;
|
||||||
|
fileInputs.forEach(input => {
|
||||||
|
if (input.files && input.files.length > 0) {
|
||||||
|
hasFiles = true;
|
||||||
|
// 파일 입력 필드 값이 제대로 FormData에 들어갔는지 확인
|
||||||
|
const fieldName = input.name || 'file';
|
||||||
|
if (!formData.has(fieldName)) {
|
||||||
|
console.log(`iOS 호환성: 수동으로 ${fieldName} 추가`);
|
||||||
|
// 수동으로 파일 추가
|
||||||
|
for (let i = 0; i < input.files.length; i++) {
|
||||||
|
formData.append(fieldName, input.files[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// 디버깅용 로그
|
||||||
|
console.log('FormData 생성 완료:', hasFiles ? '파일 포함' : '파일 없음');
|
||||||
|
} catch (error) {
|
||||||
|
console.error('FormData 생성 오류:', error);
|
||||||
|
// 대체 방식으로 FormData 생성
|
||||||
|
formData = new FormData();
|
||||||
|
// 폼 필드 수동 추가
|
||||||
|
const formElements = form.elements;
|
||||||
|
for (let i = 0; i < formElements.length; i++) {
|
||||||
|
const field = formElements[i];
|
||||||
|
const name = field.name;
|
||||||
|
if (!name) continue;
|
||||||
|
if (field.type === 'file') {
|
||||||
|
for (let j = 0; j < field.files.length; j++) {
|
||||||
|
formData.append(name, field.files[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (field.type !== 'submit' && field.type !== 'button') {
|
||||||
|
formData.append(name, field.value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 네트워크 요청 타임아웃 설정
|
||||||
|
const ajaxTimeout = 60000; // 60초
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: getpost || "post",
|
type: getpost || "post",
|
||||||
url: url,
|
url: url,
|
||||||
data: new FormData($('#' + fid)[0]),
|
data: formData,
|
||||||
contentType: false,
|
contentType: false,
|
||||||
processData: false,
|
processData: false,
|
||||||
|
timeout: ajaxTimeout,
|
||||||
success: function (r) {
|
success: function (r) {
|
||||||
isCaping = false;
|
isCaping = false;
|
||||||
capResult = r;
|
capResult = r;
|
||||||
setcap();
|
setcap();
|
||||||
}, error: function (e) {
|
// 로딩바 숨김 추가
|
||||||
|
hideLoadingImage();
|
||||||
|
},
|
||||||
|
error: function (e) {
|
||||||
isCaping = false;
|
isCaping = false;
|
||||||
|
console.log('Ajax 오류:', e.status, e.statusText);
|
||||||
console.log(e.responseText);
|
console.log(e.responseText);
|
||||||
if (_jsislayer2) {
|
if (e.status === 0 && e.statusText === 'timeout') {
|
||||||
msg2("개발담당자에게 문의해주세요.");
|
alert("요청 시간이 초과되었습니다. 다시 시도해주세요.");
|
||||||
|
}
|
||||||
|
else if (_jsislayer2) {
|
||||||
|
alert("개발담당자에게 문의해주세요");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
msg("개발담당자에게 문의해주세요.");
|
alert("개발담당자에게 문의해주세요.");
|
||||||
}
|
}
|
||||||
}, complete: function () {
|
// 로딩바 숨김 추가
|
||||||
|
hideLoadingImage();
|
||||||
|
},
|
||||||
|
complete: function () {
|
||||||
ajaxing(false);
|
ajaxing(false);
|
||||||
|
// complete에도 로딩바 숨김 추가 (중복 호출 방지를 위해 다른 방법 고려 가능)
|
||||||
|
hideLoadingImage();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -736,6 +926,181 @@ function capfileform(url, fid, callback, iseval, getpost, autoMsg, noBG, jsislay
|
||||||
console.log("다른 작업을 처리중입니다. 잠시후 다시 작업해주세요.");
|
console.log("다른 작업을 처리중입니다. 잠시후 다시 작업해주세요.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setcap() {
|
||||||
|
// 결과가 없는 경우 예외 처리
|
||||||
|
if (!capResult) {
|
||||||
|
console.error("capResult가 정의되지 않았습니다");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (capResult.code === 1000) {
|
||||||
|
capOK = true;
|
||||||
|
capResultObj = capResult.obj;
|
||||||
|
capResultMsg = capResult.msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 인증 관련 오류 처리
|
||||||
|
if (capResult.code == 9991) {
|
||||||
|
alert("인증시간이 초과되어 로그아웃되었습니다.");
|
||||||
|
setTimeout(function () {
|
||||||
|
location.href = '/Account/Error?code=9991';
|
||||||
|
}, 100); // iOS에서 alert 후 즉시 리디렉션 문제 방지
|
||||||
|
}
|
||||||
|
else if (capResult.code == 9992) {
|
||||||
|
alert("로그인 정보가 일치하지 않아 다시 로그인을 진행하셔야 합니다.\n(다른 디바이스에 로그인 또는 Cookie정보를 확인할 수 없습니다.)");
|
||||||
|
setTimeout(function () {
|
||||||
|
location.href = '/Account/Error?code=9992';
|
||||||
|
}, 100); // iOS에서 alert 후 즉시 리디렉션 문제 방지
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// 자동 메시지 처리
|
||||||
|
if (isAutoMsg) {
|
||||||
|
switch (capResult.code) {
|
||||||
|
case 1000: showOK(); break;
|
||||||
|
case 9999: alert("서버접속이 원활하지 않습니다"); break;
|
||||||
|
case 9998: alert("권한이 없는 요청입니다"); break;
|
||||||
|
case 9997: alert("권한(로그인)이 없는 요청입니다"); break;
|
||||||
|
case 9996: alert("검색된 데이터가 없습니다"); break;
|
||||||
|
case 9995: alert("적용된 데이터가 없습니다"); break;
|
||||||
|
default:
|
||||||
|
// 개발 모드에서만 상세 로그 출력
|
||||||
|
console.log("응답 코드:", capResult.code);
|
||||||
|
console.log("응답 메시지:", capResult.msg);
|
||||||
|
if (capResult.obj) console.log("응답 데이터:", capResult.obj);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
capResultMsg = capResult.code + ": " + capResult.msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 콜백 함수 실행
|
||||||
|
if (_callback) {
|
||||||
|
try {
|
||||||
|
if (typeof _callback === "function") {
|
||||||
|
_callback(capResult);
|
||||||
|
}
|
||||||
|
else if (typeof _callback === "string") {
|
||||||
|
// 문자열 콜백 처리 - eval 사용을 최소화
|
||||||
|
if (_callback.indexOf(")") > -1) {
|
||||||
|
// 이미 괄호가 포함된 경우
|
||||||
|
window.setTimeout(function () {
|
||||||
|
try {
|
||||||
|
eval(_callback);
|
||||||
|
} catch (e) {
|
||||||
|
console.error("콜백 실행 오류:", e);
|
||||||
|
}
|
||||||
|
}, 0);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// 괄호 추가 필요
|
||||||
|
window.setTimeout(function () {
|
||||||
|
try {
|
||||||
|
eval(_callback + "()");
|
||||||
|
} catch (e) {
|
||||||
|
console.error("콜백 실행 오류:", e);
|
||||||
|
}
|
||||||
|
}, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error("콜백 실행 중 오류 발생:", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** 로딩이미지 보여주기 */
|
||||||
|
function showLoadingImage() {
|
||||||
|
// 이미 존재하는 경우 중복 생성 방지
|
||||||
|
if (document.getElementById('custom-loading-overlay')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 로딩 이미지 요소 생성
|
||||||
|
const loadingDiv = document.createElement('div');
|
||||||
|
loadingDiv.id = 'custom-loading-overlay';
|
||||||
|
|
||||||
|
// 인라인 스타일 대신 클래스 사용을 위한 스타일 추가
|
||||||
|
const style = document.createElement('style');
|
||||||
|
style.textContent = `
|
||||||
|
#custom-loading-overlay {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
z-index: 9999;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-loading-spinner {
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 100%;
|
||||||
|
-webkit-animation: sk-scaleout 1.0s infinite ease-in-out;
|
||||||
|
animation: sk-scaleout 1.0s infinite ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
@-webkit-keyframes sk-scaleout {
|
||||||
|
0% { -webkit-transform: scale(0) }
|
||||||
|
100% { -webkit-transform: scale(1.0); opacity: 0; }
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes sk-scaleout {
|
||||||
|
0% { transform: scale(0); -webkit-transform: scale(0); }
|
||||||
|
100% { transform: scale(1.0); -webkit-transform: scale(1.0); opacity: 0; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 애니메이션 미지원 브라우저용 대체 스타일 */
|
||||||
|
.no-animation #custom-loading-spinner {
|
||||||
|
background-color: #3498db;
|
||||||
|
border: 5px solid #f3f3f3;
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
document.head.appendChild(style);
|
||||||
|
|
||||||
|
// 브라우저 애니메이션 지원 확인
|
||||||
|
const supportsAnimation = 'AnimationEvent' in window ||
|
||||||
|
'WebKitAnimationEvent' in window ||
|
||||||
|
'MozAnimationEvent' in window ||
|
||||||
|
'msAnimationEvent' in window ||
|
||||||
|
'OAnimationEvent' in window;
|
||||||
|
|
||||||
|
// 기본 로딩 스피너
|
||||||
|
const spinnerDiv = document.createElement('div');
|
||||||
|
spinnerDiv.id = 'custom-loading-spinner';
|
||||||
|
|
||||||
|
// 애니메이션을 지원하지 않는 브라우저에는 정적 스타일 적용
|
||||||
|
if (!supportsAnimation) {
|
||||||
|
loadingDiv.className = 'no-animation';
|
||||||
|
}
|
||||||
|
|
||||||
|
loadingDiv.appendChild(spinnerDiv);
|
||||||
|
document.body.appendChild(loadingDiv);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 로딩이미지 제거 */
|
||||||
|
function hideLoadingImage() {
|
||||||
|
const loadingDiv = document.getElementById('custom-loading-overlay');
|
||||||
|
if (loadingDiv) {
|
||||||
|
// 스타일 요소도 정리
|
||||||
|
const style = document.querySelector('style[id^="custom-loading-style"]');
|
||||||
|
if (style) {
|
||||||
|
document.head.removeChild(style);
|
||||||
|
}
|
||||||
|
document.body.removeChild(loadingDiv);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function ajaxing(tf) {
|
function ajaxing(tf) {
|
||||||
if (!_jsislayer2) {
|
if (!_jsislayer2) {
|
||||||
bglayer(false);
|
bglayer(false);
|
||||||
|
|
@ -773,64 +1138,7 @@ function clearComma() {
|
||||||
$(c).val($(c).val().replace(/,/gi, ''));
|
$(c).val($(c).val().replace(/,/gi, ''));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
function setcap() {
|
|
||||||
if (capResult.code === 1000) {
|
|
||||||
capOK = true;
|
|
||||||
capResultObj = capResult.obj;
|
|
||||||
capResultMsg = capResult.msg;
|
|
||||||
}
|
|
||||||
if (capResult.code == 9991) {
|
|
||||||
if (ispop()) {
|
|
||||||
parent.location.href = capResult.obj + '?istimeout=true';
|
|
||||||
}
|
|
||||||
else if ((parent.ismainlayout || 0) == 1) {
|
|
||||||
parent.location.href = capResult.obj + '?istimeout=true';
|
|
||||||
}
|
|
||||||
else if (opener != null) {
|
|
||||||
parent.location.href = capResult.obj + '?istimeout=true';
|
|
||||||
self.close();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
//msg("인증시간이 초과되어 로그아웃되었습니다.");
|
|
||||||
location.href = capResult.obj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (isAutoMsg) {
|
|
||||||
switch (capResult.code) {
|
|
||||||
case 1000:
|
|
||||||
showOK();
|
|
||||||
break;
|
|
||||||
case 9999:
|
|
||||||
msg("서버접속이 원활하지 않습니다 <" + capResult.code + ": " + capResult.msg + ">");
|
|
||||||
break;
|
|
||||||
case 9998:
|
|
||||||
msg("권한이 없는 요청입니다. <" + capResult.code + ": " + capResult.msg + ">");
|
|
||||||
break;
|
|
||||||
case 9997:
|
|
||||||
msg("권한(로그인)이 없는 요청입니다. <" + capResult.code + ": " + capResult.msg + ">");
|
|
||||||
break;
|
|
||||||
case 9996:
|
|
||||||
msg("검색된 데이터가 없습니다. <" + capResult.code + ": " + capResult.msg + ">");
|
|
||||||
break;
|
|
||||||
case 9995:
|
|
||||||
msg("적용된 데이터가 없습니다. <" + capResult.code + ": " + capResult.msg + ">");
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
console.log(capResult.code);
|
|
||||||
console.log(capResult.msg);
|
|
||||||
console.log(capResult.obj);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
capResultMsg = capResult.code + ": " + capResult.msg;
|
|
||||||
}
|
|
||||||
if ((_callback || "") != "") {
|
|
||||||
eval(_callback.indexOf(")") > -1 ? _callback : (_callback + "()"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var _focusitem;
|
var _focusitem;
|
||||||
var _focusitem2;
|
var _focusitem2;
|
||||||
var _okm;
|
var _okm;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,37 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace NP.Model
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 강의실 과제제출 정보
|
||||||
|
/// </summary>
|
||||||
|
public class CRoomLectSdInfo
|
||||||
|
{
|
||||||
|
/// <summary>수강번호(수강키)</summary>
|
||||||
|
public int lectno { get; set; }
|
||||||
|
/// <summary>회원번호</summary>
|
||||||
|
public int userno { get; set; }
|
||||||
|
/// <summary>과제토론명</summary>
|
||||||
|
public string sdname { get; set; }
|
||||||
|
/// <summary>과제토론키</summary>
|
||||||
|
public int sdno { get; set; }
|
||||||
|
/// <summary>온라인강좌 수강시작일</summary>
|
||||||
|
public DateTime sdate { get; set; }
|
||||||
|
/// <summary>온라인강좌 수강종료일</summary>
|
||||||
|
public DateTime edate { get; set; }
|
||||||
|
/// <summary>출석율(%)</summary>
|
||||||
|
public int attrate { get; set; }
|
||||||
|
/// <summary>과제토론 참여조건</summary>
|
||||||
|
public byte sdcondition { get; set; }
|
||||||
|
/// <summary>과제토론 제출여부</summary>
|
||||||
|
public bool issubmit { get; set; }
|
||||||
|
/// <summary>과제토론 제출일시</summary>
|
||||||
|
public DateTime submittime { get; set; }
|
||||||
|
/// <summary>과제토론 평가여부</summary>
|
||||||
|
public bool ischeck { get; set; }
|
||||||
|
/// <summary>과제토론 평가일시</summary>
|
||||||
|
public DateTime checktime { get; set; }
|
||||||
|
/// <summary>현재 기간내 수강여부</summary>
|
||||||
|
public bool iscurrentlecture { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -45,6 +45,7 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="BaseModel.cs" />
|
<Compile Include="BaseModel.cs" />
|
||||||
<Compile Include="Board.cs" />
|
<Compile Include="Board.cs" />
|
||||||
|
<Compile Include="CRoom.cs" />
|
||||||
<Compile Include="Documents.cs" />
|
<Compile Include="Documents.cs" />
|
||||||
<Compile Include="Pay.cs" />
|
<Compile Include="Pay.cs" />
|
||||||
<Compile Include="Common.cs" />
|
<Compile Include="Common.cs" />
|
||||||
|
|
|
||||||
|
|
@ -25,5 +25,7 @@ namespace NP.Model
|
||||||
public Users User { get; set; }
|
public Users User { get; set; }
|
||||||
public IList<CM> CMs { get; set; }
|
public IList<CM> CMs { get; set; }
|
||||||
public CM cmm { get; set; }
|
public CM cmm { get; set; }
|
||||||
|
|
||||||
|
public IList<CRoomLectSdInfo> CRoomLectSdInfo { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||