This commit is contained in:
kdh0120 2020-12-14 01:27:53 +00:00
parent fdda9dbbff
commit 35f08f754d
7 changed files with 524 additions and 7 deletions

View File

@ -0,0 +1,236 @@
@model NP.Model.VMCRoom
@{
var sv4 = "," + (Model.stringval4 ?? "") + ",";
}
<form id="mform" method="post">
<section class="panel panel-default clearfix devsearch" data-cleartbody="tbody1">
<div class="step-content">
<div class="step-pane active form-inline">
<div class="form-groupx">
<table class="table table-striped b-t b-light no-odd">
<colgroup>
<col width="150" />
<col width="*" />
</colgroup>
<tr>
<th>기간별조회</th>
<td class="text-left">
<a href="#" style="padding: 6px 12px;" onclick="setdate(1)" class="btn btn-select btn-xxs">오늘</a>
<a href="#" style="padding: 6px 12px;" onclick="setdate(7)" class="btn btn-select btn-xxs">7일</a>
<a href="#" style="padding: 6px 12px;" onclick="setdate(15)" class="btn btn-select btn-xxs">15일</a>
<a href="#" style="padding: 6px 12px;" onclick="setdate(30)" class="btn btn-select btn-xxs">1개월</a>
<a href="#" style="padding: 6px 12px;" onclick="setdate(60)" class="btn btn-select btn-xxs">2개월</a>
<a href="#" style="padding: 6px 12px;" onclick="setdate(0)" class="btn btn-select btn-xxs">전체</a>
@Html.Partial("./Partial/Date", string.IsNullOrEmpty(Model.stringval) ? (DateTime?)null : Convert.ToDateTime(Model.stringval), new ViewDataDictionary { { "name", "stringval" } }) ~ @Html.Partial("./Partial/Date", string.IsNullOrEmpty(Model.stringval2) ? (DateTime?)null : Convert.ToDateTime(Model.stringval2), new ViewDataDictionary { { "name", "stringval2" } })
</td>
</tr>
@if (!ViewBag.IsSiteAdmin)
{
<tr>
<th>고객사명</th>
<td class="text-left">
@Html.Partial("./Partial/Text", Model.stringval3, Helpers.DicText(new NP.Model.TextDic() { Name = "stringval3", Value = Model.stringval3, PH = "고객사명", CssClass = "" }))
</td>
</tr>
}
<tr>
@Html.HiddenFor(m => m.stringval4)
<th>환급여부</th>
<td class="text-left">
<label><input type="checkbox" name="rebate" value="1" @(sv4.Contains(",1,") ? "checked" : "") /> 환급</label>&nbsp;&nbsp;
<label><input type="checkbox" name="rebate" value="0" @(sv4.Contains(",0,") ? "checked" : "") /> 비환급</label>
</td>
</tr>
<tr>
<th>검색어</th>
<td class="text-left">
@Html.Partial("./Partial/Select", null, new ViewDataDictionary { { "valuetext", ":전체검색;username:이름;userid:ID;itemname:상품명" }, { "name", "stringval5" }, { "selected", Model.stringval5 } })
@Html.Partial("./Partial/Text", Model.stringval6, Helpers.DicText(new NP.Model.TextDic() { Name = "stringval6", Value = Model.stringval6, PH = "", CssClass = "ff" }))
@Html.Partial("./Partial/Button", new NP.Model.Button() { Special = "search", OnClick = "searchthis()" })
</td>
</tr>
</table>
</div>
</div>
</div>
</section>
<div class="tar buttonbox">
@Html.Partial("./Partial/pagerow", new ViewDataDictionary { { "tbodyid", "tbody1" }, { "searchmethod", "submit()" }, { "pagesize", Model.pagerowcount } })
<a href="#" onclick="javascript: printcontract();" class="btn btn-s-xs btn-success" style="margin-left: 5px;">위탁계약서 일괄인쇄</a>
<a href="#" onclick="javascript: printannotation();" class="btn btn-s-xs btn-success" style="margin-left: 5px;">입교통지서 일괄인쇄</a>
<a href="#" onclick="javascript: printcertification();" class="btn btn-s-xs btn-success" style="margin-left: 5px;">수료증 일괄인쇄</a>
</div>
<section class="panel panel-default">
<div class="table-responsive" id="excel1">
<table class="table table-striped b-t b-light no-odd">
<thead>
<tr>
<th><input type="checkbox" onclick="javascript: checkall('excel1', this);" /></th>
<th width="100">신청자(ID)<br />회사명</th>
<th>상품명</th>
<th>신청일</th>
<th width="100">위탁계약서</th>
<th width="100">입교통지서</th>
<th width="100">수료증</th>
</tr>
</thead>
<tbody class="data" id="tbody1">
@foreach(var d in Model.Lects)
{
<tr>
<td><input type="checkbox" class="autocheck" value="@d.lectno" data-lectno="@d.lectno" data-cshape="@(d.cshape == 0 ? 0 : 1)" data-iscomplete="@d.iscomplete"/></td>
<td>@string.Format("{0}({1}){2}",d.username,d.userid,d.asname)</td>
<td>@d.cname</td>
<td>@d.cdtymd</td>
<td>
@if(d.cshape != 0)
{
<a href="#" onclick="javascript: educontract(@d.lectno);">[인쇄]</a>
}
</td>
<td><a href="#" onclick="javascript:eduannotation(@d.lectno)">[인쇄]</a></td>
<td>
@if(d.iscomplete == 1)
{
<a href="#" onclick="javascript:certification(@d.lectno)">[인쇄]</a>
}
</td>
</tr>
}
</tbody>
</table>
</div>
</section>
</form>
<form id="dform" method="post" action="">
@Html.Partial("./Partial/dform", Model, new ViewDataDictionary { { "preform", 1 } })
</form>
@section styles{
<style type="text/css">
tr.error{
color:red;
}
</style>
}
@section scriptsHeader{
@Html.Partial("./Partial/ScriptDate")
}
@section scripts{
<script>
var now = '@DateTime.Now.ToString("yyyy-MM-dd")';
var ds = '@(Model.stringval20)'.split(';');
$(document).ready(function () {
$("#stringval6").on("keydown", function (e) {
if (e.keyCode == 13) {
searchthis();
}
});
});
function setdate(idx) {
switch (idx) {
case 1: setv("stringval", now); setv("stringval2", now); break;
case 7: setv("stringval", ds[0]); setv("stringval2", now); break;
case 15: setv("stringval", ds[1]); setv("stringval2", now); break;
case 30: setv("stringval", ds[2]); setv("stringval2", now); break;
case 60: setv("stringval", ds[3]); setv("stringval2", now); break;
default:
setv("stringval", ""); setv("stringval2", ""); break;
}
$("#stringval,#stringval2").css("background-color", "#25313e");
setTimeout(function () {
$("#stringval,#stringval2").css("background-color", "#fafafa");
}, 300);
//submit();
}
function searchthis() {
setv("stringval4", getcheckv("rebate"));
submit();
}
function certification(lectno) {
var pop = window.open('@ViewBag.reporturl/certification.aspx?lectno='+lectno, "certprint", "width=" + (screen.availWidth) + ", height=" + (screen.availHeight) + ", scrollbars=yes, resizable=yes, status=no, location=no, left=0, top=0");
if (pop == null) {
msg("팝업이 차단되어 있습니다. 차단을 해제해 주세요.");
}
}
function educontract(lectno) {
var pop = window.open('@ViewBag.reporturl/educontract.aspx?lectno='+lectno, "certprint", "width=" + (screen.availWidth) + ", height=" + (screen.availHeight) + ", scrollbars=yes, resizable=yes, status=no, location=no, left=0, top=0");
if (pop == null) {
msg("팝업이 차단되어 있습니다. 차단을 해제해 주세요.");
}
}
function eduannotation(lectno) {
var pop = window.open('@ViewBag.reporturl/eduannotation.aspx?lectno='+lectno, "certprint", "width=" + (screen.availWidth) + ", height=" + (screen.availHeight) + ", scrollbars=yes, resizable=yes, status=no, location=no, left=0, top=0");
if (pop == null) {
msg("팝업이 차단되어 있습니다. 차단을 해제해 주세요.");
}
}
function printcontract() {
//시작하기전에 errorclass 제거
$("#tbody1 tr").removeClass("error");
var isOK = true;
var cnt = 0;
var lectnos = "";
if ($("#tbody1 tr input.autocheck:checked").length < 1) {
var isOK = false;
msg("선택된 인원이 없습니다.");
} else {
$.each($("#tbody1 tr input.autocheck:checked"), function (i, c) {
if ($(c).attr("data-cshape") == 0) {
$(c).closest("tr").addClass("error");
cnt++;
} else {
lectnos += ","+$(c).attr("data-lectno");
}
});
if (cnt > 0) {
isOK = false;
}
if (isOK) {
educontract(lectnos.substring(1));
} else {
msg("오프라인교육만 조회하실 수 있습니다.");
}
}
}
function printannotation() {
var lectnos = "";
if ($("#tbody1 tr input.autocheck:checked").length < 1) {
msg("선택된 인원이 없습니다.");
} else {
$.each($("#tbody1 tr input.autocheck:checked"), function (i, c) {
lectnos += "," + $(c).attr("data-lectno");
});
eduannotation(lectnos.substring(1));
}
}
function printcertification() {
//시작하기전에 errorclass 제거
$("#tbody1 tr").removeClass("error");
var isOK = true;
var cnt = 0;
var lectnos = "";
if ($("#tbody1 tr input.autocheck:checked").length < 1) {
var isOK = false;
msg("선택된 인원이 없습니다.");
} else {
$.each($("#tbody1 tr input.autocheck:checked"), function (i, c) {
if ($(c).attr("data-iscomplete") == 0) {
$(c).closest("tr").addClass("error");
cnt++;
} else {
lectnos += "," + $(c).attr("data-lectno");
}
});
if (cnt > 0) {
isOK = false;
}
if (isOK) {
certification(lectnos.substring(1));
} else {
msg("수료가 완료된 강좌만 출력할 수 있습니다.");
}
}
}
</script>
}

View File

@ -0,0 +1,186 @@
@model NP.Model.VMCM
<form id="mform" method="post" class="form-horizontal">
<section class="panel panel-default" style="border-top: 1px solid #ddd; margin-top: 5px;">
<header class="panel-heading"><strong><i class="fa fa-bars"></i> 기본설정<span class=""></span></strong></header>
<div class="panel-body">
<div class="form-group">
<label class="col-sm-4 col-md-2 control-label">기수 유형 | 강좌명 | 분반</label>
<div class="col-sm-8 col-md-10"><input type="text" class="form-control" disabled value="@(Model.CM.tmname) | @Model.CM.cshapename | @(Model.CM.cname) | @(Model.CM.classno)반" /></div>
</div>
<div class="line line-dashed line-lg pull-in"></div><div class="form-group">
<label class="col-sm-4 col-md-2 control-label">신청기간/교육기간</label>
<div class="col-sm-8 col-md-10">
@(Model.CM.rsrename) / @(Model.CM.sssename) (@(Model.CM.ssseterm)일)
</div>
</div>
<div class="line line-dashed line-lg pull-in"></div><div class="form-group">
<label class="col-sm-4 col-md-2 control-label">제한인원</label>
<div class="col-sm-8 col-md-10">@(Model.CM.quotastr)</div>
</div>
<div class="line line-dashed line-lg pull-in"></div><div class="form-group">
<label class="col-sm-4 col-md-2 control-label">수강인원</label>
<div class="col-sm-8 col-md-10">@(Model.CM.countlect)</div>
</div>
<div class="line line-dashed line-lg pull-in"></div><div class="form-group">
<label class="col-sm-4 col-md-2 control-label">대기인원</label>
<div class="col-sm-8 col-md-10">@(Model.CM.countstandby)</div>
</div>
</div>
</section>
<div>
<ul class="pagination pagination-md" style="margin: 0;">
<li><a href="/croom/cmlects?intval=@(Model.CM.cmno)">신청현황</a></li>
<li class="active"><a href="#">대기현황</a></li>
</ul>
</div>
<section class="panel panel-default" style="border-top: 1px solid #ddd; margin-top: 5px;">
<header class="panel-heading"><strong><i class="fa fa-bars"></i> 신청자 명단<span class=""></span></strong></header>
<div style="padding: 5px 20px; background-color: #fff;">
@Html.Partial("./Partial/Select", null, new ViewDataDictionary { { "valuetext", ":-승인상태;3:대기중;4:수강승인;5:수강취소" }, { "name", "addstringval" }, { "selected", Model.addstringval }, { "onchange", "submit()" } })
@Html.Partial("./Partial/Select", null, new ViewDataDictionary { { "valuetext", ":-결제상태;0:결제대기;1:입금대기;2:완료;3:취소;4:환불신청;5:부분환불;6:전액환불" }, { "name", "addstringval2" }, { "selected", Model.addstringval2 }, { "onchange", "submit()" } })
&nbsp;&nbsp;
<a href="#" class="btn btn-default" onclick="golist()">목록</a>
<a href="#" class="btn btn-danger" style="float:right;" onclick="save2(5)">선택취소</a>
<a href="#" class="btn btn-success" style="float:right; margin-right:10px;" onclick="save2(4)">선택승인</a>
<a href="#" class="btn btn-default" style="float:right; margin-right:10px;" onclick="save2(6)">선택대기</a>
</div>
<div class="table-responsive" id="excel1">
<table class="table table-striped b-t b-light">
<thead>
<tr>
<th><input type="checkbox" onclick="javascript: checkall('excel1', this);" /></th>
<th width="40">No</th>
<th>소속</th>
<th>신청자(ID)</th>
<th>교육생</th>
<th>신청일</th>
<th>승인상태</th>
<th>결제상태</th>
</tr>
</thead>
<tbody class="data" id="tbody1">
@foreach (var d in Model.Lects)
{
<tr>
<td>
@if (d.pstatus == 21 || d.pstatus == 55 || d.pstatus == 52)
{
<input type="checkbox" class="autocheck" value="@d.lectno" data-lectno="@d.lectno" data-emailinfo="@(d.username):@(d.email)" />
}
</td>
<td>@d.rnorvt</td>
<td>@(d.asname)</td>
<td>@(d.cnoname)(@d.cnoid)</td>
<td class="link text-center"><a href="#" onclick="viewlect(this, @d.ustatus, @d.lectno, @d.fileno, '@d.fileurl', '@d.orgname', @d.status, @d.pstatus,'@string.Format("{0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}",d.asname,d.username, d.userid??"",d.uduty, d.depart??"", d.email, d.telno, d.mobile,d.ckfcfyear,d.assignuser,d.edus)')">@d.username</a></td>
<td>@d.cdtymd</td>
<td>
@(d.pstatusname3)<br />
@(d.pstatusname3 != "대기중" ? "(" + d.oktime.ToString("yyyy-MM-dd HH:mm") + ")" : string.Empty)
</td>
<td class="link text-center"><a href="#" onclick="viewrefund(@d.payno, @d.pstatus, @d.payuserno)">@d.pstatusname</a></td>
</tr>
}
</tbody>
</table>
</div>
</section>
@Html.Pager((int)Model.pagenum, 10, Model.pagerowcount, Model.pagetotalcount)
@Html.Partial("./Partial/DForm", Model, new ViewDataDictionary { })
</form>
<form id="dform" method="post" action="/croom/lectcms">
@Html.Partial("./Partial/DForm", Model, new ViewDataDictionary { { "preform", 1 } })
</form>
<div id="thisbox" class="findbox draggable regbox" style="width: 500px; z-index: 1041; top: 60px; overflow: auto;">
<h4><i class="fa fa-bars"></i> <span id="pcap">교육생 정보</span><a href="#" class="btn btn-default btn-xs f-r closethisbox">닫기</a></h4>
<table class="regtable">
<colgroup><col style="width:150px;" /><col /></colgroup>
<tr><th>소속</th><td id="asname"></td></tr>
<tr><th>이름(ID)</th><td id="usernameid"></td></tr>
<tr><th>직위</th><td id="positiondepart"></td></tr>
<tr><th>이메일</th><td id="email"></td></tr>
<tr><th>휴대전화번호</th><td id="mobile"></td></tr>
<tr class="trhidebox"><th>대기여부</th><td>@Html.Partial("./Partial/Radio", null, new ViewDataDictionary() { { "valuetext", "3:신청중;4:승인;5:미승인" }, { "checked", 3 }, { "name", "status" } })</td></tr>
</table>
<div class="findboxbtnbox" id="btnsavelect">
<a href="#" class="btn btn-primary" onclick="save();">대기여부 저장</a>
</div>
<br /><br />
</div>
@section scriptsHeader{
@Html.Partial("./Partial/semscript")
}
@section scripts{
<script>
var _lectno;
var _pstatus;
function viewlect(a, ustatus, lectno, fileno, fileurl, orgname, status, pstatus, datas) {
if (ustatus != 99) {
_lectno = lectno;
_pstatus = pstatus;
var ds = datas.split(':');
$("#asname").text(ds[0]);
$("#usernameid").text(ds[1] + "(" + ds[2] + ")");
$("#positiondepart").text(ds[3]);
$("#email").text(ds[5]);
$("#mobile").text(ds[7]);
bglayer(); $("#thisbox").slideDown("fast");
$("#btnsavelect, tr.trhidebox").hide();
if (status == 3 || status == 4 || status == 5) {
setrv("status", status);
$("#btnsavelect, tr.trhidebox").hide();
if (pstatus == 1) {
$("#btnsavelect").attr("style", "display:none;");
}
}
}
}
function save() {
if ($("#status3").prop("checked")) {
msg2("승인 또는 미승인을 선택 후 저장해주세요.");
} else if (confirm("대기상태를 저장하시겠습니까?")) {
capp("/acommon/lectstatus3", { lectno: _lectno, status: getrv("status"), pstatus: _pstatus }, "cbsave", null, null, null, true);
}
}
function cbsave() {
if (capResult.code == 1000) {
msg2("상태를 변경했습니다.", null, null, null, true);
submit("mform", 500, true);
} else if (capResult.code == -1) {
msg("결제가 완료된 대상은 상태를 변경할 수 없습니다.");
}
else { msgadmin2(); }
}
function viewrefund(payno, pstatus, userno) {
if (pstatus != 1) {
winopen("/croom/payview?isexamready=0&payno=" + payno + "&userno=" + userno, 'payview', 1200, screen.height - 200);
} else {
winopen("/croom/payrefund?payno=" + payno, 'payview', 1200, screen.height - 200);
}
}
function thisrefresh() {
submit();
}
function save2(type) {
if ($("#tbody1 tr input.autocheck:checked").length < 1) {
msg("선택된 인원이 없습니다.");
} else if (confirm("선택한 교육생의 승인상태를 변경을 하시겠습니까?")) {
var nos = "";
var emailinfos = "";
var usernames = "";
$.each($("#tbody1 tr input.autocheck:checked"), function (i, c) {
nos += "," + $(c).attr("data-lectno");
emailinfos += "," + $(c).attr("data-emailinfo").replace(","," ");
});
capp("/acommon/lectstatus2", { lectnos: nos.substr(1), status: type, cname: "@(Model.CM.cname)", emailinfos: emailinfos.substr(1) }, "cbsave2");
}
}
function cbsave2() {
if (capResult.code == 1000) {
msg("변경되었습니다.", null, null, null, true);
submit("mform", 500, true);
} else { msgadmin2(); }
}
</script>
}

View File

@ -0,0 +1,101 @@
@model NP.Model.VMUser
@{
var _method = ViewData["bindmethod"].ToString();
}
<div class="clsPop" id="mobilechk">
<div>
<div>
<div class="clsPopWrap">
<div class="clsPopTitle"><h5>본인인증</h5><a href="#" onclick="mobilechkclose()"></a></div>
<div class="clsPopCont">
<form id="fform" method="post" enctype="multipart/form-data">
<div id="boxassignnewdata">
<p class="clspNon" style="padding-bottom:10px;">인증요청한 휴대번호 : <span id="boxmobile"></span></p>
<p class="clspNon" style="padding-top:10px;">핸드폰으로 전송된 인증번호 6자리를 입력하신 후 확인버튼을 눌러주세요.</p>
<div class="clspInput" style="padding-bottom:10px;">
<input type="text" class="int nocomma" style="width:auto;" maxlength="6" id="mobile_lakey" name="lakey" placeholder="인증번호를 입력" />
<input type="button" value="재전송" onclick="resendlakey()" />
</div>
<div class="clspInput">
<span id="lblrtime">(남은 시간 0분 00초)</span>
<input type="button" value="시간연장" onclick="pluslearnauthtime()" />
</div>
</div>
<div class="clspInput">
<input type="button" style="background:#878787;" class="btn-find" value="확인" onclick="chklakey()" />
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<script>
$(document).ready(function () {
});
var _vd_tm1;
var _vd_tmsec;
function mobilechkclose() {
clearInterval(_vd_tm1);
$("#mobilechk").slideUp("fast");
}
var mobile;
function mobilechkview() {
$("#mobile_lakey").val("");
if ($("#mobile").val() != "") {
mobile = $("#mobile").val();
}
$("#boxmobile").text(mobile);
$("#mobilechk").slideDown("fast");
clearInterval(_vd_tm1);
_vd_tmsec = 180;
_vd_tm1 = setInterval(sendlatimer, 1000);
}
function resendlakey() {
$("#lblrtime").text("(남은 시간 3분 00초)");
clearInterval(_vd_tm1);
_vd_tmsec = 180;
_vd_tm1 = setInterval(sendlatimer, 1000);
msg("인증번호를 재전송하였습니다.");
capp("/focommon/sendlakey", { lectno: $("#mastercroomlectno").val(), mobile: mobile }, "sendkey");
}
function sendlatimer() {
_vd_tmsec--;
if (_vd_tmsec < 1) {
clearInterval(_vd_tm1);
msg("유효시간이 만료되었습니다.<br/>창을 닫고 다시 진행해주세요.");
mobilechkclose();
}
if (_vd_tmsec > 59) {
$("#lblrtime").text("(남은 시간 " + (parseInt(_vd_tmsec / 60)) + "분 " + (_vd_tmsec % 60) + "초)");
} else {
$("#lblrtime").text("(남은 시간 " + (_vd_tmsec) + "초)");
}
}
var authno = 0;
function pluslearnauthtime() {
clearInterval(_vd_tm1);
_vd_tmsec = 180;
_vd_tm1 = setInterval(sendlatimer, 1000);
capp("/focommon/extendlakey", { authno: authno }, "extlakey");
}
function extlakey() {
msg("인증시간 연장");
}
function sendkey() {
if (capResult.obj > 0) {
//msg("인증코드 발송");
authno = capResult.obj;
mobilechkview();
} else if (capResult.code == -1) {
msg("해당 번호로 등록한 회원이 두명이상입니다.<br/>운영자에게 문의해주시기 바랍니다.");
} else if (capResult.code == -2) {
msg("해당 번호로 등록한 회원이 없습니다.");
}else {
msg("발송실패, 인증코드를 재전송해주세요.");
}
}
function chklakey() {
capp("/focommon/chklakey", { lakey: $("#mobile_lakey").val(), authno: authno }, "@(_method)");
}
</script>

View File

@ -28,13 +28,7 @@ body {}
@media (min-width:1221px) {
#gnb {position: fixed; z-index:100; top: 0; left: 0; right: 0; height: 100px; background: #fff;}
.gngLogo {height: 100px; position: absolute; top: 0; left: 0; z-index: 1;}
.gngLogo a {
display: block;
height: 100%;
width: 200px;
text-indent: -9999px;
background: url('../../img/common/intranet_logo_b.png')no-repeat center center;
}
.gngLogo a {display: block;height: 100%;width: 200px;text-indent: -9999px;background: url('../../img/common/intranet_logo_b.png')no-repeat center center;}
.gnbWrap:after {content: ''; display: table; clear: both;}
.gnbRht {float: right;}
.gnbRht:after {content: ''; display: table; clear: both;}