Compare commits
10 Commits
a8ba46b5ea
...
b296fe29c1
| Author | SHA1 | Date |
|---|---|---|
|
|
b296fe29c1 | |
|
|
7134e500dc | |
|
|
438fba33db | |
|
|
12d2ed9f5c | |
|
|
b66ada7470 | |
|
|
79603994a9 | |
|
|
41780ba327 | |
|
|
d38117f898 | |
|
|
28e764a24c | |
|
|
de1fe9a8ce |
|
|
@ -97,7 +97,9 @@ namespace NP.BO.Controllers
|
|||
}
|
||||
}
|
||||
//else if (u.RetireDate != null) { LoginStatus = 5; }
|
||||
else if (!"192.168.1.3,127.0.0.1,192.168.0.87,192.168.0.56,1.214.45.218".Contains(SUserInfo.LoginIP) && !u.userpass.Equals(NP.Base.Lib.KISA_SHA256.SHA256Hash(vm.User.userpass.Trim()))) {
|
||||
//else if (!"192.168.1.3,127.0.0.1,192.168.0.87,192.168.0.56,1.214.45.218".Contains(SUserInfo.LoginIP) && !u.userpass.Equals(NP.Base.Lib.KISA_SHA256.SHA256Hash(vm.User.userpass.Trim()))) {
|
||||
else if (!u.userpass.Equals(NP.Base.Lib.KISA_SHA256.SHA256Hash(vm.User.userpass.Trim())))
|
||||
{
|
||||
LoginStatus = 2;
|
||||
// 로그인 실패 카운트 증가
|
||||
vm.logincnt++;
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
<td class="link text-center @(Model.Data.intval > 0 ? "emphasis":"")"><a href="javascript:taskSummaryPendingLink(1);">@Model.Data.intval.ToString("#,0") 건</a></td>
|
||||
<td class="link text-center @(Model.Data.intval2 > 0 ? "emphasis":"")"><a href="javascript:taskSummaryPendingLink(2);">@Model.Data.intval2.ToString("#,0") 건</a></td>
|
||||
<td class="link text-center @(Model.Data.intval3 > 0 ? "emphasis":"")"><a href="javascript:taskSummaryPendingLink(3);">@Model.Data.intval3.ToString("#,0") 건</a></td>
|
||||
<td class="link text-center @(Model.Data.intval3 > 0 ? "emphasis":"")"><a href="javascript:taskSummaryPendingLink(6);">@Model.Data.intval7.ToString("#,0") 건</a></td>
|
||||
<td class="link text-center @(Model.Data.intval7 > 0 ? "emphasis":"")"><a href="javascript:taskSummaryPendingLink(6);">@Model.Data.intval7.ToString("#,0") 건</a></td>
|
||||
<td class="link text-center @(Model.Data.intval4 > 0 ? "emphasis":"")"><a href="javascript:taskSummaryPendingLink(4);">@Model.Data.intval4.ToString("#,0") 건</a></td>
|
||||
@*<td class="link text-center @(Model.Data.intval5 > 0 ? "emphasis":"")"><a href="/croom/deliveries">@Model.Data.intval5.ToString("#,0") 건</a></td>*@
|
||||
<td class="link text-center @(Model.Data.intval6 > 0 ? "emphasis":"")"><a href="javascript:taskSummaryPendingLink(5);">@Model.Data.intval6.ToString("#,0") 건</a></td>
|
||||
|
|
|
|||
|
|
@ -254,7 +254,7 @@
|
|||
if (t.statecode == 0)
|
||||
{
|
||||
<a href="#" class="btn btn-primary" onclick="save();">저장</a>
|
||||
<a href="#" class="btn btn-success" onclick="tempsave();">임시저장</a>
|
||||
@*<a href="#" class="btn btn-success" onclick="tempsave();">임시저장</a>*@
|
||||
<a href="#" class="btn btn-success" onclick="registIssue();">계산서 즉시발행</a>
|
||||
}
|
||||
else
|
||||
|
|
@ -262,7 +262,7 @@
|
|||
if (t.statecode == 100)
|
||||
{
|
||||
<a href="#" class="btn btn-primary" onclick="save();">저장</a>
|
||||
<a href="#" class="btn btn-success" onclick="tempsave();">임시저장</a>
|
||||
@*<a href="#" class="btn btn-success" onclick="tempsave();">임시저장</a>*@
|
||||
<a href="#" class="btn btn-success" onclick="view();">미리보기</a>
|
||||
<a href="#" class="btn btn-success" onclick="Issue();">계산서 즉시발행</a>
|
||||
|
||||
|
|
|
|||
|
|
@ -178,7 +178,7 @@ namespace NP.Base.Controllers
|
|||
}
|
||||
|
||||
bool isSkip = false;
|
||||
isSkip = Helpers.IsSkipIPorHost(IpHostSkipGb.PassWord, ip, Request.ServerVariables["HTTP_HOST"]);
|
||||
isSkip = Helpers.IsSkipIPorHost(IpHostSkipGb.SmsAuth, ip, Request.ServerVariables["HTTP_HOST"]);
|
||||
|
||||
if (isSkip)
|
||||
{
|
||||
|
|
@ -197,17 +197,10 @@ namespace NP.Base.Controllers
|
|||
return JsonBack(new { code = -1 });
|
||||
}
|
||||
|
||||
//210707 eduwreq 특정ip인증허용 정책 폐지
|
||||
//if (ip.StartsWith("10.10.4.") || ip.StartsWith("10.10.13.") || ip == "192.168.103.13" || ip == "192.168.0.87" || ip == "121.140.58.113")
|
||||
//return JsonBack(new JsonRtn() { code = 1});
|
||||
//else
|
||||
//{
|
||||
//정보에 모바일번호 없는 경우
|
||||
if (u != null && !string.IsNullOrEmpty(u.mobile))
|
||||
{
|
||||
return JsonBack(new { code = 1000, ip = ip, mobile = u.mobile, no = u.userno });
|
||||
}
|
||||
//기타에러
|
||||
else
|
||||
{
|
||||
return JsonBack(new { code = -2 });
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
using System;
|
||||
using NP.Base.Auth;
|
||||
using NP.Base.ENUM;
|
||||
using NP.Model;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Web;
|
||||
using System.Web.Mvc;
|
||||
|
||||
using NP.Model;
|
||||
using System.Collections;
|
||||
using NP.Base.Auth;
|
||||
using NP.Base.ENUM;
|
||||
namespace NP.Base.Controllers
|
||||
{
|
||||
/// <summary>
|
||||
|
|
@ -140,7 +140,6 @@ namespace NP.Base.Controllers
|
|||
return JsonOK(Dao.Save("lect.edub2b", e));
|
||||
}
|
||||
|
||||
|
||||
//[HttpPost]
|
||||
//public JsonResult SaveUserFile(String type, Int64? fgno)
|
||||
//{
|
||||
|
|
|
|||
|
|
@ -1,17 +1,14 @@
|
|||
using System;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NP.Model;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Web;
|
||||
using System.Web.Mvc;
|
||||
|
||||
using NP.Model;
|
||||
using System.Collections;
|
||||
using NP.Base.Auth;
|
||||
using NP.Base.ENUM;
|
||||
using System.Web.ModelBinding;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace NP.Base.Controllers
|
||||
{
|
||||
public partial class FOCommonController : NP.Base.BaseController
|
||||
|
|
@ -46,37 +43,14 @@ namespace NP.Base.Controllers
|
|||
{
|
||||
Dao.Save("sys.file.down", fno);
|
||||
var file = Dao.Get<File>("sys.file.get" + (getdel > 0 ? "all" : ""), fno).FirstOrDefault();
|
||||
//if (!string.IsNullOrEmpty(loginfo))
|
||||
//{
|
||||
// LogSet(GetLong(loginfo.Split('|')[0]), null, fno, GetInt(loginfo.Split('|')[1]), 5, null);
|
||||
//}
|
||||
|
||||
//if (((file.tablename ?? "").ToUpper() +"."+ (file.columnname??"").ToUpper()).Equals("삭제체크테이블.삭제체크컬럼"))
|
||||
//{
|
||||
// //프로젝트파일 권한 확인
|
||||
// if (Dao.Get<int>("sys.file.authcheck.orderfgno", new Hashtable() { {"FGNo", file.fgno }, {"UserNo", SUserInfo.UserNo } }).First() < 1)
|
||||
// {
|
||||
// return;
|
||||
// }
|
||||
//}
|
||||
//else if ((file.UsingTable ?? "").ToUpper().Equals("users.fgno"))
|
||||
//{
|
||||
// //이력서파일 권한 확인
|
||||
// if (Dao.Get<int>("sys.file.authcheck.usersfgno", new Hashtable() { { "FGNo", file.FGNo }, { "UserNo", SUserInfo.UserNo } }).First() < 1)
|
||||
// {
|
||||
// return;
|
||||
// }
|
||||
//}
|
||||
if (Request.UrlReferrer == null || (!SUserInfo.IsAdmin && file.tablename == "lectsd" && file.columnname == "fgno" && SUserInfo.UserNo != file.cno))
|
||||
{
|
||||
//Response.AppendHeader("Content-Disposition", cds.ToString());
|
||||
//return File(string.Format("{0}\\{1}", uploadDir, entity.SaveFileName), "application/file");
|
||||
Response.Clear();
|
||||
Response.ClearHeaders();
|
||||
Response.ClearContent();
|
||||
Response.ContentType = "Application/octet-stream";
|
||||
Response.AppendHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode("권한없음.png"));
|
||||
//Response.AppendHeader("Content-Length", file.filesize.ToString());
|
||||
Response.TransmitFile(string.Format("{0}", Server.MapPath("/img/repute_tail.png")));
|
||||
Response.Flush();
|
||||
Response.End();
|
||||
|
|
@ -84,17 +58,9 @@ namespace NP.Base.Controllers
|
|||
else
|
||||
{
|
||||
string fileurl = Server.MapPath((issubject == 1 ? file.fullurl2 : file.fullurl));
|
||||
//var cds = new System.Net.Mime.ContentDisposition
|
||||
//{
|
||||
// FileName = Server.UrlEncode(file.orgname), // 파일의 원래이름(등록할때의 이름)
|
||||
// Inline = false,
|
||||
//};
|
||||
//Response.AppendHeader("Content-Disposition", cds.ToString());
|
||||
//return File(string.Format("{0}\\{1}", uploadDir, entity.SaveFileName), "application/file");
|
||||
Response.Clear();
|
||||
Response.ClearHeaders();
|
||||
Response.ClearContent();
|
||||
//Response.ContentType = "Application/octet-stream";
|
||||
Response.ContentType = "text/plain";
|
||||
Response.AppendHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode(file.orgname));
|
||||
Response.AppendHeader("Content-Length", file.filesize.ToString());
|
||||
|
|
@ -360,12 +326,12 @@ namespace NP.Base.Controllers
|
|||
|
||||
if (IsEmail && users.Count == 1)
|
||||
{
|
||||
var MHtml = "<img src=\"" + fronturl + "/img/common/gnb_logo.gif\" alt=\"\" /><br /><br />안녕하세요, " + user.username + "님,<br />당신의 영남건설기술교육원 비밀번호를 재설정하기 위한 링크를 전달합니다.<br />" +
|
||||
"아래 링크를 클릭하셔서 비밀번호를 재설정해주세요.<br /><br />" +
|
||||
"<a href=\"" + fronturl + "/Account/FindMe?pwcallno=" + pwcallno + "&userno=" + user.userno + "\" target=\"_blank\" style=\"color: #0094ff;\">비밀번호 재설정</a><br /><br />이 링크는 24시간 뒤 만료됩니다.";
|
||||
var MHtml = $"안녕하세요, {user.username}님,<br />당신의 영남건설기술교육원 비밀번호를 재설정하기 위한 링크를 전달합니다.<br />" +
|
||||
$"아래 링크를 클릭하셔서 비밀번호를 재설정해주세요.<br /><br />" +
|
||||
$"<a href=\"{fronturl}/Account/FindMe?pwcallno={pwcallno}&userno={user.userno}\" target=\"_blank\" style=\"color: #0094ff;\">비밀번호 재설정</a><br /><br />이 링크는 24시간 뒤 만료됩니다.";
|
||||
|
||||
//int mailReuslt = SendEmailNew("[영남건설기술교육원] 비밀번호 찾기 안내", MHtml, email);
|
||||
return JsonOK(SendEmail(masteremail.Split(';')[1], GetInt(masteremail.Split(';')[2]), masteremail.Split(';')[3], masteremail.Split(';')[4], 999, user.email, masteremail.Split(';')[0], "영남건설기술교육원 운영자", "[영남건설기술교육원] 비밀번호 찾기 안내", MHtml, "", "0:0"));
|
||||
var mailResult = SendEmail(masteremail.Split(';')[1], GetInt(masteremail.Split(';')[2]), masteremail.Split(';')[3], masteremail.Split(';')[4], 999, user.email, masteremail.Split(';')[0], "영남건설기술교육원 운영자", "[영남건설기술교육원] 비밀번호 찾기 안내", MHtml, "", "0:0");
|
||||
return JsonOK(mailResult);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -656,16 +622,23 @@ namespace NP.Base.Controllers
|
|||
|
||||
[HttpPost]
|
||||
/// ### ty 교육신청제한
|
||||
public JsonResult GetCheckLectIs(string man, string cgcode, string edu, string grade, int cmno, int pcmno)
|
||||
public JsonResult GetCheckLectIs(string man, string cgcode, string edu, string grade, int cmno, int pcmno, string job1 = "")
|
||||
{
|
||||
int result = 0; // 0 이면 수강 가능, 그외 수강 불가
|
||||
//int result = 0; // 0 이면 수강 가능, 그외 수강 불가
|
||||
//result = CheckUserLect(man, cgcode, edu, grade, cmno, pcmno, SUserInfo.UserNo);
|
||||
|
||||
result = CheckUserLect(man, cgcode, edu, grade, cmno, pcmno, SUserInfo.UserNo);
|
||||
#region + // 2025-09 (스마트검색 개발 건 미사용으로 주석처리, 필요시 복원)
|
||||
var result = new KeyValuePair<int, string>();
|
||||
result = CheckUserLectInfo(cmno, pcmno, SUserInfo.UserNo, man, cgcode, edu, grade, job1);
|
||||
|
||||
return JsonBack(result);
|
||||
return JsonBack(result.Key);
|
||||
#endregion
|
||||
|
||||
//return JsonBack(result);
|
||||
}
|
||||
|
||||
|
||||
#region + 이건 과거로직이다 아마도 앞으로 사용하지 않을 것 같다
|
||||
// pms: 5640 적용
|
||||
//public int CheckUserLect(string man, string cgcode, string edu, string grade, int cmno, int pcmno, long userno)
|
||||
//{
|
||||
|
|
@ -761,7 +734,309 @@ namespace NP.Base.Controllers
|
|||
// return result;
|
||||
|
||||
//}
|
||||
#endregion
|
||||
|
||||
#region + 2025-09 (스마트검색 개발 건 미사용으로 주석처리, 필요시 복원)
|
||||
|
||||
// 본문에 주석이 너무많아 주석처리는 아니고 그냥 미사용
|
||||
// FO > CourseController.CheckUserLect, FOCommonController.CheckUserLect 동일한 코드 (Dao문제로 2개구현, 공통이나, 서비스로 뺴야한다)
|
||||
|
||||
/// <summary>
|
||||
/// 수강 제약조건 확인 (FO > CourseController.CheckUserLect 와 동일, 함께 수정해야함 => Dao문제로 2개구현)
|
||||
/// </summary>
|
||||
/// <param name="cmno">강좌키</param>
|
||||
/// <param name="pcmno">연계강좌키</param>
|
||||
/// <param name="userno">회원번호</param>
|
||||
/// <param name="man">기술인분류</param>
|
||||
/// <param name="cgcode"></param>
|
||||
/// <param name="edu">교육목적</param>
|
||||
/// <param name="grade">등급</param>
|
||||
/// <returns> Code (0:수강가능, -2,동일한과정 재신청 제약, -10:최초교육제약, -20:승급교육제약, -100:에러) , Message </returns>
|
||||
public KeyValuePair<int, string> CheckUserLectInfo(int cmno, int pcmno, long userno, string man, string cgcode, string edu, string grade, string job1 = "")
|
||||
{
|
||||
var result = new KeyValuePair<int, string>(0, "수강신청 가능");
|
||||
|
||||
#region + DB에서 코드 값 찾기
|
||||
/*****************************************************************************************************
|
||||
* a) 기술인분류 SELECT * FROM comcode WHERE cgroup = 'typeman' AND isUse = 1
|
||||
* b) 과정분류 SELECT * FROM cg WHERE isUse = 1
|
||||
* c) 교육목적 SELECT * FROM comcode WHERE cgroup = 'typeedu' AND isUse = 1
|
||||
* d) 등급 SELECT * FROM comcode WHERE cgroup = 'typegrade' AND isUse = 1
|
||||
* e) 직무분야 SELECT * FROM comcode WHERE cgroup = 'typejob' AND isUse = 1
|
||||
* f) 직무분야 전체 SELECT * FROM comcode WHERE cgroup LIKE 'typejob%' AND isUse = 1
|
||||
*******************************************************************************************************/
|
||||
#endregion
|
||||
|
||||
// result (0:수강가능, 이 외 수강불가)
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
#region + (탈출) 1. 건설사업관리기술인 관련 제한 조건 (lectEnrolls 참조하지 않음, Request 값만...)
|
||||
// 조건: 건설사업관리기술인(28) + 초급/중급(36,37) + 역량강화(103,104) 은 신청불가
|
||||
if (edu == "31")
|
||||
{
|
||||
bool isRestrictedContinueEdu =
|
||||
man == "28"
|
||||
&& (grade == "36" || grade == "37")
|
||||
&& (cgcode == "103" || cgcode == "104");
|
||||
|
||||
if (isRestrictedContinueEdu)
|
||||
{
|
||||
return new KeyValuePair<int, string>(-30, "계속교육 제약");
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region + Get: lect.enroll.get (lectEnrolls = 회원 수강신청 내역)
|
||||
var p = new Hashtable();
|
||||
p.Add("uno", userno);
|
||||
|
||||
IList<LectEnroll> lectEnrolls = Dao.Get<LectEnroll>("lect.enroll.get", p);
|
||||
#endregion
|
||||
|
||||
// 회원의 이전 수강신청내역이 있다면
|
||||
if (lectEnrolls != null && lectEnrolls.Any())
|
||||
{
|
||||
|
||||
#region + (탈출) 2. 동일한 과정은 1개만 수강 가능 (cm.cmno)
|
||||
if (lectEnrolls.Any(l => l.cmno == cmno))
|
||||
{
|
||||
// -2는 동일 과정 중복
|
||||
return new KeyValuePair<int, string>(-2, "동일강좌 중복제약");
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region + (탈출) 3. 교육목적 -> 기본교육(29) 관련 제한 조건
|
||||
if (edu == "29")
|
||||
{
|
||||
// 기존 신청 내역 중 기본교육(29)이 있는지 확인 (기본교육은 1개만 신청가능)
|
||||
bool hasExistingBasicEdu = lectEnrolls.Any(l => l.TYPEEDU == 29);
|
||||
if (hasExistingBasicEdu)
|
||||
{
|
||||
return new KeyValuePair<int, string>(-30, "기본교육 제약");
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region + (탈출) 4. 교육목적 -> 최초교육(30) 관련 제한 조건
|
||||
// - 최초교육(30)의 기술인분류(25,27,28)가 과정분류 역량강화(103,104)인 최초교육은 1개만 신청 가능.
|
||||
if (edu == "30")
|
||||
{
|
||||
// 1) 현재 신청하는 교육이 제한 대상인지 확인
|
||||
bool isApplyingForRestrictedFirstEdu =
|
||||
(man == "25" || man == "27" || man == "28")
|
||||
&& (cgcode == "103" || cgcode == "104");
|
||||
|
||||
if (isApplyingForRestrictedFirstEdu)
|
||||
{
|
||||
// 2) 이미 신청 내역 중에 제한 대상에 해당하는 최초교육이 있는지 확인
|
||||
bool hasExistingRestrictedFirstEdu = lectEnrolls.Any(l =>
|
||||
l.TYPEEDU == 30
|
||||
&& (l.TYPEMAN == 25 || l.TYPEMAN == 27 || l.TYPEMAN == 28)
|
||||
&& (l.CGCODE == "103" || l.CGCODE == "104")
|
||||
);
|
||||
|
||||
// 조건을 만족하는 기존 교육이 발견되면, 중복신청 막기 처리
|
||||
if (hasExistingRestrictedFirstEdu)
|
||||
{
|
||||
return new KeyValuePair<int, string>(-10, "최초교육 제약");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//if (edu == "30")
|
||||
//{
|
||||
// // 1) 현재 신청하는 교육이 제한 대상인지 확인
|
||||
// bool isApplyingForRestrictedFirstEdu =
|
||||
// (man == "25" || man == "27" || man == "28")
|
||||
// && (cgcode == "103" || cgcode == "104");
|
||||
|
||||
// if (isApplyingForRestrictedFirstEdu)
|
||||
// {
|
||||
// // 2) 이미 신청 내역 중에 제한 대상에 해당하는 최초교육이 있는지 확인
|
||||
// bool hasExistingRestrictedFirstEdu = lectEnrolls.Any(l =>
|
||||
// l.TYPEEDU == 30
|
||||
// && (l.TYPEMAN == 25 || l.TYPEMAN == 27 || l.TYPEMAN == 28)
|
||||
// && (l.CGCODE == "107")
|
||||
// );
|
||||
|
||||
// // 조건을 만족하는 기존 교육이 발견되면, 중복신청 막기 처리
|
||||
// if (hasExistingRestrictedFirstEdu)
|
||||
// {
|
||||
// return new KeyValuePair<int, string>(-10, "최초교육 제약");
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
#endregion
|
||||
|
||||
#region + (탈출) 5. 교육목적 -> 승급교육(35) 관련 제한 조건
|
||||
// 승급교육(35) 관련 제한 조건 (A, B, C, D 그룹)
|
||||
if (edu == "35") //교육목적
|
||||
{
|
||||
// 제약의 공통 전제조건: 고급(38) 또는 특급(39) 등급인 경우에만 적용
|
||||
bool isAdvancedGrade = grade == "38" || grade == "39";
|
||||
|
||||
if (isAdvancedGrade)
|
||||
{
|
||||
// A: 동일 등급, 동일 직무분야 내에서 1개만 신청 가능
|
||||
// ((설계시공 또는 건설사업관리) / (역량강화(103,104) 또는 전문분야(105)))
|
||||
bool isApplyingForGroupA = (man == "25" || man == "28") && (cgcode == "103" || cgcode == "104" || cgcode == "105");
|
||||
if (isApplyingForGroupA)
|
||||
{
|
||||
//설계시공기술인
|
||||
bool hasExistingInGroupA25 = lectEnrolls.Any(l =>
|
||||
l.TYPEEDU == 35 //승급교육
|
||||
&& (l.TYPEGRADE.ToString() == grade)
|
||||
&& l.TYPEJOB.ToString() == job1
|
||||
&& (
|
||||
(l.TYPEMAN.ToString() == "25")
|
||||
&& (l.CGCODE == "103" || l.CGCODE == "104" || l.CGCODE == "105")
|
||||
)
|
||||
);
|
||||
|
||||
if (hasExistingInGroupA25)
|
||||
{
|
||||
return new KeyValuePair<int, string>(-20, "승급교육 제약A");
|
||||
}
|
||||
|
||||
//건설사업관리기술인
|
||||
bool hasExistingInGroupA28 = lectEnrolls.Any(l =>
|
||||
l.TYPEEDU == 35 //승급교육
|
||||
&& (l.TYPEGRADE.ToString() == grade)
|
||||
&& l.TYPEJOB.ToString() == job1
|
||||
&& (
|
||||
(l.TYPEMAN.ToString() == "28")
|
||||
&& (l.CGCODE == "103" || l.CGCODE == "104" || l.CGCODE == "105")
|
||||
)
|
||||
);
|
||||
|
||||
if (hasExistingInGroupA28) {
|
||||
return new KeyValuePair<int, string>(-20, "승급교육 제약A");
|
||||
}
|
||||
}
|
||||
|
||||
bool isApplyingForGroupA2 = (man == "25" || man == "28") && (cgcode == "105");
|
||||
if (isApplyingForGroupA2)
|
||||
{
|
||||
bool hasExistingInGroupA2 = lectEnrolls.Any(l =>
|
||||
l.TYPEEDU == 35
|
||||
&& l.TYPEGRADE.ToString() == grade
|
||||
&& l.TYPEJOB.ToString() == job1
|
||||
&& (
|
||||
(l.TYPEMAN.ToString() == "25" || l.TYPEMAN.ToString() == "28")
|
||||
&& (l.CGCODE == "105")
|
||||
)
|
||||
);
|
||||
|
||||
if (hasExistingInGroupA2)
|
||||
{
|
||||
return new KeyValuePair<int, string>(-20, "승급교육 제약A");
|
||||
}
|
||||
}
|
||||
|
||||
bool isApplyingForGroupA3 = (man == "25" || man == "28") && (cgcode == "107");
|
||||
if (isApplyingForGroupA3)
|
||||
{
|
||||
bool hasExistingInGroupA3 = lectEnrolls.Any(l =>
|
||||
l.TYPEEDU == 35
|
||||
&& l.TYPEGRADE.ToString() == grade
|
||||
&& l.TYPEJOB.ToString() == job1
|
||||
&& (
|
||||
(l.TYPEMAN.ToString() == "25" || l.TYPEMAN.ToString() == "28")
|
||||
&& (l.CGCODE == "107")
|
||||
)
|
||||
);
|
||||
|
||||
if (hasExistingInGroupA3)
|
||||
{
|
||||
return new KeyValuePair<int, string>(-20, "승급교육 제약A");
|
||||
}
|
||||
}
|
||||
|
||||
// B: 동일 등급, 동일 직무분야 내에서 1개만 신청 가능
|
||||
// ((설계시공/특성화) 또는 (건설사업관리/전문분야))
|
||||
bool isApplyingForGroupB = (man == "25" && cgcode == "107") || (man == "28" && cgcode == "105");
|
||||
if (isApplyingForGroupB)
|
||||
{
|
||||
bool hasExistingInGroupB = lectEnrolls.Any(l =>
|
||||
l.TYPEEDU == 35
|
||||
&& l.TYPEGRADE.ToString() == grade
|
||||
&& l.TYPEJOB.ToString() == job1
|
||||
&& (
|
||||
(l.TYPEMAN.ToString() == "25" && l.CGCODE == "107")
|
||||
|| (l.TYPEMAN.ToString() == "28" && l.CGCODE == "105")
|
||||
)
|
||||
);
|
||||
|
||||
if (hasExistingInGroupB)
|
||||
{
|
||||
return new KeyValuePair<int, string>(-20, "승급교육 제약B");
|
||||
}
|
||||
}
|
||||
|
||||
// C: 등급, 동일 직무분야 내에서 1개만 신청 가능
|
||||
// ((설계시공/특성화) 또는 (건설사업관리/역량강화))
|
||||
bool isApplyingForGroupC = (man == "25" && cgcode == "107") || (man == "28" && (cgcode == "103" || cgcode == "104"));
|
||||
if (isApplyingForGroupC)
|
||||
{
|
||||
bool hasExistingInGroupC = lectEnrolls.Any(l =>
|
||||
l.TYPEEDU == 35
|
||||
&& l.TYPEGRADE.ToString() == grade
|
||||
&& l.TYPEJOB.ToString() == job1
|
||||
&& (
|
||||
(l.TYPEMAN.ToString() == "25" && l.CGCODE == "107")
|
||||
|| (l.TYPEMAN.ToString() == "28" && (l.CGCODE == "103" || l.CGCODE == "104"))
|
||||
)
|
||||
);
|
||||
|
||||
if (hasExistingInGroupC)
|
||||
{
|
||||
return new KeyValuePair<int, string>(-20, "승급교육 제약C");
|
||||
}
|
||||
}
|
||||
|
||||
// D: 동일 등급, 동일 직무분야 내에서 1개만 신청 가능
|
||||
// ((건설사업관리/건설기술인 전문교육))
|
||||
bool isApplyingForGroupD = man == "28" && cgcode == "102";
|
||||
if (isApplyingForGroupD)
|
||||
{
|
||||
bool hasExistingInGroupD = lectEnrolls.Any(l =>
|
||||
l.TYPEEDU == 35
|
||||
&& l.TYPEGRADE.ToString() == grade
|
||||
&& l.TYPEJOB.ToString() == job1
|
||||
&& (l.TYPEMAN.ToString() == "28" && l.CGCODE == "102")
|
||||
);
|
||||
|
||||
if (hasExistingInGroupD)
|
||||
{
|
||||
return new KeyValuePair<int, string>(-20, "승급교육 제약D");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
// 이전에 수강 신청한 내역이 아무것도 없기에 제약조건을 걸 필요가 없음.
|
||||
result = new KeyValuePair<int, string>(0, "이전에 아무것도 수강신청한 내역이 없음");
|
||||
}
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
SetError($"CheckUserLectInfo: {ex.Message}");
|
||||
result = new KeyValuePair<int, string>(-100, ex.Message);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
public int CheckUserLect(string man, string cgcode, string edu, string grade, int cmno, int pcmno, long userno)
|
||||
{
|
||||
|
|
@ -771,7 +1046,9 @@ namespace NP.Base.Controllers
|
|||
string[] cgcodes = new string[0];
|
||||
string[] edus = new string[0];
|
||||
|
||||
if (DateTime.Now > DateTime.Parse("2030-01-02 00:00"))// ### ty 2024년 추가건이나 현재 적용대기로 전달 받음
|
||||
// 실제로직은 ELSE절이다.
|
||||
|
||||
if (DateTime.Now > DateTime.Parse("2099-01-02 00:00"))// ### ty 2024년 추가건이나 현재 적용대기로 전달 받음
|
||||
{
|
||||
// ### ty 2024년 적용!!!
|
||||
|
||||
|
|
@ -1302,5 +1579,77 @@ namespace NP.Base.Controllers
|
|||
|
||||
return JsonOKObj(result);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 비밀번호 변경
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
[ValidateAntiForgeryToken]
|
||||
public JsonResult UserChangePassword(string userid, string password)
|
||||
{
|
||||
try
|
||||
{
|
||||
#region + 유효성 검사 (실패 시 즉시 반환)
|
||||
// 1. 빈 문자열 확인
|
||||
if (string.IsNullOrEmpty(userid) || string.IsNullOrEmpty(password))
|
||||
{
|
||||
return Json(new { success = false, message = "아이디 또는 비밀번호를 입력해주세요.", data = -1 });
|
||||
}
|
||||
|
||||
// 2. 비밀번호 복잡도 검사 (8자 이상, 영문, 숫자, 특수문자 포함)
|
||||
var passwordRegex = new Regex("^(?=.*[a-zA-Z])(?=.*\\d)(?=.*[\\W_]).{8,}$");
|
||||
if (!passwordRegex.IsMatch(password))
|
||||
{
|
||||
return Json(new { success = false, message = "비밀번호는 8자 이상이며, 영문, 숫자, 특수문자를 포함해야 합니다.", data = -2 });
|
||||
}
|
||||
|
||||
// 3. 3번 이상 연속되는 동일한 문자/숫자/기호 검사
|
||||
var repeatRegex = new Regex("(.)\\1\\1");
|
||||
if (repeatRegex.IsMatch(password))
|
||||
{
|
||||
return Json(new { success = false, message = "연속으로 3번 이상 반복되는 문자를 사용할 수 없습니다.", data = -3 });
|
||||
}
|
||||
#endregion
|
||||
|
||||
// 모든 유효성 검사를 통과한 경우 진행
|
||||
var p = new Hashtable();
|
||||
long userNo = -1;
|
||||
|
||||
#region + Get: users.findme
|
||||
// userno 추출을 위한 목적
|
||||
p.Clear();
|
||||
p.Add("userid", userid);
|
||||
|
||||
Users user = Dao.Get<Users>("users.findme", p)
|
||||
.FirstOrDefault() ?? new Users();
|
||||
|
||||
userNo = user.userno;
|
||||
#endregion
|
||||
|
||||
#region + Save: users.change.password (비밀번호 재설정)
|
||||
if (userNo > 0)
|
||||
{
|
||||
p.Clear();
|
||||
p.Add("userid", userid);
|
||||
p.Add("userpass", Base.Lib.KISA_SHA256.SHA256Hash(password));
|
||||
p.Add("userno", userNo);
|
||||
p.Add("uip", GetUserIP());
|
||||
|
||||
Dao.Save("users.change.password", p);
|
||||
}
|
||||
#endregion
|
||||
|
||||
return Json(new { success = true, message = "비밀번호가 성공적으로 변경되었습니다.", data = 0 });
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
SetError($"UserChangePassword: {ex.Message}");
|
||||
return Json(new { success = false, message = "처리 중 오류가 발생했습니다. 다시 시도해주세요.", data = -10 });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@
|
|||
<typeAlias alias="lectexq" type="NP.Model.LectEXQ, NP.Model" />
|
||||
<typeAlias alias="lectsd" type="NP.Model.LectSD, NP.Model" />
|
||||
<typeAlias alias="lectsdboard" type="NP.Model.LectSDBoard, NP.Model" />
|
||||
<typeAlias alias="lectenroll" type="NP.Model.LectEnroll, NP.Model" />
|
||||
<typeAlias alias="exam" type="NP.Model.Exam, NP.Model"/>
|
||||
<typeAlias alias="examuser" type="NP.Model.ExamUser, NP.Model"/>
|
||||
<typeAlias alias="examuserrenew" type="NP.Model.ExamUserRenew, NP.Model"/>
|
||||
|
|
@ -2852,5 +2853,44 @@
|
|||
, l.uip=#uip#
|
||||
where l.lectno = #lectno#;
|
||||
</update>
|
||||
|
||||
<!-- 회원 수강신청 내역 -->
|
||||
<select id="lect.enroll.get" parameterClass="hashtable" resultClass="lectenroll">
|
||||
<![CDATA[
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
||||
|
||||
SELECT a.USERNO
|
||||
, b.lectno
|
||||
, b.ISCOMPLETE
|
||||
, b.completeno
|
||||
, c.cmno
|
||||
, c.CNAME
|
||||
, d.PCGNO
|
||||
, e.PAYNO
|
||||
, e.PSTATUS
|
||||
, f.CSHAPE
|
||||
, f.TYPEMAN
|
||||
, f.TYPEEDU
|
||||
, f.TYPEGRADE
|
||||
, f.TYPEJOB
|
||||
, d.CGCODE
|
||||
, d.CGNAME
|
||||
, f.CMISNO
|
||||
FROM users a
|
||||
INNER JOIN lect b
|
||||
ON a.USERNO = b.USERNO
|
||||
INNER JOIN cm c
|
||||
ON b.CMNO = c.CMNO
|
||||
INNER JOIN cg d
|
||||
ON c.cgno = d.cgno
|
||||
INNER JOIN pay e
|
||||
ON b.payno = e.PAYNO
|
||||
INNER JOIN pplog f
|
||||
ON b.USERNO = e.USERNO AND b.CMNO = f.CMNO AND e.PPLNO = f.PPLNO
|
||||
WHERE b.STATUS = 1
|
||||
AND (e.PSTATUS = 1 OR e.PSTATUS = 22)
|
||||
AND b.USERNO = #uno#;
|
||||
]]>
|
||||
</select>
|
||||
</statements>
|
||||
</sqlMap>
|
||||
|
|
@ -340,6 +340,32 @@
|
|||
where userno = #userno# and userpass = #userpass#
|
||||
</select>
|
||||
|
||||
<!-- 비밀번호 찾기 > 비밀번호 변경 -->
|
||||
<update id="users.change.password" parameterClass="hashtable">
|
||||
<![CDATA[
|
||||
UPDATE users
|
||||
SET userpass = #userpass#
|
||||
, udt = now()
|
||||
, status = (CASE WHEN status = 9 THEN 1 ELSE status END)
|
||||
, pwcalltime = null
|
||||
, pwcallno = null
|
||||
, uip = #uip#
|
||||
, uno = #userno#
|
||||
WHERE userid = #userid#;
|
||||
|
||||
INSERT INTO userpasslog (userno, userpass, cdt, uip)
|
||||
SELECT #userno#, #userpass#, NOW(), #uip#
|
||||
FROM (SELECT 1) a
|
||||
LEFT OUTER JOIN userpasslog b
|
||||
ON b.userno = #userno#
|
||||
WHERE b.userno IS NULL;
|
||||
|
||||
UPDATE userpasslog
|
||||
SET userpass = #userpass#
|
||||
WHERE userno = #userno#;
|
||||
]]>
|
||||
</update>
|
||||
|
||||
<update id="users.up" parameterClass="hashtable">
|
||||
<isNotNull property="userpass">
|
||||
insert into userpasslog (userno, userpass, cdt, uip)
|
||||
|
|
@ -715,15 +741,19 @@
|
|||
<update id="users.asno.save" parameterClass="hashtable">
|
||||
update users set asno=#asno# where userno=#userno#
|
||||
</update>
|
||||
|
||||
<!-- 비밀번호 찾기 -->
|
||||
<select id="users.findme" parameterClass="hashtable" resultClass="users">
|
||||
SELECT a.userno,a.username
|
||||
SELECT a.userno
|
||||
,a.username
|
||||
,a.userid
|
||||
,a.status
|
||||
,a.ci
|
||||
,CAST(AES_DECRYPT(UNHEX(a.mobile), <include refid="sql.digest"></include>) AS char) mobile
|
||||
,CAST(AES_DECRYPT(UNHEX(a.email), <include refid="sql.digest"></include>) AS char) email
|
||||
FROM users a
|
||||
WHERE a.usertype IN (1,11)
|
||||
<!-- hs => 이메일과 핸드폰번호 찾기의 상황을 알 수 없어 STATUS를 타입별로 분리하고, EMAIL에만 9를 추가 -->
|
||||
<!-- hs => 이메일과 핸드폰번호 찾기의 상황을 알 수 없어 STATUS를 타입별로 분리하고, EMAIL에만 9를 추가, CI도 추가 -->
|
||||
<isNotNull property="email">
|
||||
AND a.email=HEX(AES_ENCRYPT(#email#, <include refid="sql.digest"></include>))
|
||||
AND (a.STATUS = 1 OR a.STATUS = 9)
|
||||
|
|
@ -732,6 +762,14 @@
|
|||
AND a.mobile=HEX(AES_ENCRYPT(#mobile#, <include refid="sql.digest"></include>))
|
||||
AND a.STATUS = 1
|
||||
</isNotNull>
|
||||
<isNotNull property="ci">
|
||||
AND a.CI = #ci#
|
||||
AND (a.STATUS = 1 OR a.STATUS = 9)
|
||||
</isNotNull>
|
||||
<isNotNull property="userid">
|
||||
AND a.userid = #userid#
|
||||
AND (a.STATUS = 1 OR a.STATUS = 9)
|
||||
</isNotNull>
|
||||
</select>
|
||||
|
||||
<select id="users.findmes" parameterClass="hashtable" resultClass="users">
|
||||
|
|
@ -774,7 +812,15 @@
|
|||
|
||||
</select>
|
||||
<update id="users.resetuser" parameterClass="hashtable">
|
||||
update users set userpass=#userpass#, pwcalltime=null,pwcallno=null where userno=#userno# and pwcalltime is not null and pwcallno=#pwcallno# and date_add(pwcalltime, interval 24 hour) > <include refid="sql.now"></include>
|
||||
update users
|
||||
set userpass = #userpass#
|
||||
, pwcalltime = null
|
||||
, pwcallno = null
|
||||
, status = (CASE WHEN status = 9 THEN 1 ELSE status END)
|
||||
where userno=#userno#
|
||||
and pwcalltime is not null
|
||||
and pwcallno=#pwcallno#
|
||||
and date_add(pwcalltime, interval 24 hour) > <include refid="sql.now"></include>
|
||||
</update>
|
||||
<update id="users.usercheck" parameterClass="hashtable">
|
||||
update usercheck a
|
||||
|
|
|
|||
|
|
@ -1,19 +1,17 @@
|
|||
using System;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NP.Model;
|
||||
using NP.Model.ENUM;
|
||||
using OkCert3Com;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Web;
|
||||
using System.Web.Helpers;
|
||||
using System.Web.Mvc;
|
||||
|
||||
using NP.Model;
|
||||
using System.Security.Claims;
|
||||
using System.Collections;
|
||||
using System.Text;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Newtonsoft.Json;
|
||||
using OkCert3Com;
|
||||
|
||||
using XPayClientNet;
|
||||
using NP.Model.ENUM;
|
||||
|
||||
namespace NP.FO.Controllers
|
||||
{
|
||||
|
|
@ -151,15 +149,6 @@ namespace NP.FO.Controllers
|
|||
Server.ClearError();
|
||||
if (Request.IsAjaxRequest())
|
||||
{
|
||||
//public static bool IsAjaxRequest(this HttpRequest request)
|
||||
//{
|
||||
// if (request == null)
|
||||
// {
|
||||
// throw new ArgumentNullException("request");
|
||||
// }
|
||||
//
|
||||
// return (request["X-Requested-With"] == "XMLHttpRequest") || ((request.Headers != null) && (request.Headers["X-Requested-With"] == "XMLHttpRequest"));
|
||||
//}
|
||||
return JsonError<Exception>(Base.ENUM.JSONCode.Error, vm.msg + ":" + Request.Url.AbsolutePath + (exception ?? new Exception()).Message, exception);
|
||||
}
|
||||
return View("Error", vm);
|
||||
|
|
@ -504,6 +493,46 @@ namespace NP.FO.Controllers
|
|||
return View();
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// ID/PW 찾기 신규
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public ActionResult FindIDPW()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 비빌번호 재설정
|
||||
/// </summary>
|
||||
/// <param name="vm"></param>
|
||||
/// <returns></returns>
|
||||
public ActionResult NewPassword(VMUser vm)
|
||||
{
|
||||
try
|
||||
{
|
||||
#region + Get: users.findme
|
||||
var p = new Hashtable();
|
||||
p.Add("ci", vm.User.ci);
|
||||
|
||||
// status 1: 활성, 8: 휴면, 9: 비활성(정지, 삭제), 98: 탈퇴신청, 99: 탈퇴
|
||||
vm.User = Dao.Get<Users>("users.findme", p)
|
||||
.FirstOrDefault() ?? new Users();
|
||||
|
||||
#endregion
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
SetError($"NewPassword 에러 : {ex.Message}");
|
||||
}
|
||||
|
||||
return View(vm);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#region 본인인증 요청(mobile(가입이전,휴대폰인증),ipin)
|
||||
/// <summary>
|
||||
/// 본인인증 요청(mobile(가입이전,휴대폰인증),ipin)
|
||||
|
|
@ -518,7 +547,6 @@ namespace NP.FO.Controllers
|
|||
String REQ_URL = "";
|
||||
String RETURN_MSG = "";
|
||||
String SITE_URL = "https://" + Request.Url.Host;
|
||||
//String SITE_URL = GetConfig("fronturl");
|
||||
//인증요청사유코드
|
||||
//00 : 회원가입
|
||||
//01 : 성인인증
|
||||
|
|
@ -545,8 +573,7 @@ namespace NP.FO.Controllers
|
|||
//return url 설정
|
||||
RETURN_URL = "https://" + Request.Url.Host + "/Account/CertOk3" + sel + "?reason=" + reason + (!string.IsNullOrEmpty(param1) ? "¶m1=" + param1 : "") + (!string.IsNullOrEmpty(param2) ? "¶m2=" + param2 : "");
|
||||
RTN_URL = "https://" + Request.Url.Host + "/Account/CertOk3" + sel + "?reason=" + reason + (!string.IsNullOrEmpty(param1) ? "¶m1=" + param1 : "") + (!string.IsNullOrEmpty(param2) ? "¶m2=" + param2 : "");
|
||||
//RETURN_URL = GetConfig("fronturl") + "/Account/CertOk3" + sel + "?reason=" + reason + (!string.IsNullOrEmpty(param1) ? "¶m1=" + param1 : "") + (!string.IsNullOrEmpty(param2) ? "¶m2=" + param2 : "");
|
||||
//RTN_URL = GetConfig("fronturl") + "/Account/CertOk3" + sel + "?reason=" + reason + (!string.IsNullOrEmpty(param1) ? "¶m1=" + param1 : "") + (!string.IsNullOrEmpty(param2) ? "¶m2=" + param2 : "");
|
||||
|
||||
//모바일팝업
|
||||
if (sel == "MOBI")
|
||||
{
|
||||
|
|
@ -617,7 +644,7 @@ namespace NP.FO.Controllers
|
|||
String REQ_URL = "";
|
||||
String RETURN_MSG = "";
|
||||
String SITE_URL = "https://" + Request.Url.Host;
|
||||
//String SITE_URL = GetConfig("fronturl");
|
||||
|
||||
//인증요청사유코드
|
||||
//00 : 회원가입
|
||||
//01 : 성인인증
|
||||
|
|
@ -644,8 +671,7 @@ namespace NP.FO.Controllers
|
|||
//return url 설정
|
||||
RETURN_URL = "https://" + Request.Url.Host + "/Account/CertOk3" + sel + "2?reason=" + reason + (!string.IsNullOrEmpty(param1) ? "¶m1=" + param1 : "") + (!string.IsNullOrEmpty(param2) ? "¶m2=" + param2 : "");
|
||||
RTN_URL = "https://" + Request.Url.Host + "/Account/CertOk3" + sel + "2?reason=" + reason + (!string.IsNullOrEmpty(param1) ? "¶m1=" + param1 : "") + (!string.IsNullOrEmpty(param2) ? "¶m2=" + param2 : "");
|
||||
//RETURN_URL = GetConfig("fronturl") + "/Account/CertOk3" + sel + "?reason=" + reason + (!string.IsNullOrEmpty(param1) ? "¶m1=" + param1 : "") + (!string.IsNullOrEmpty(param2) ? "¶m2=" + param2 : "");
|
||||
//RTN_URL = GetConfig("fronturl") + "/Account/CertOk3" + sel + "?reason=" + reason + (!string.IsNullOrEmpty(param1) ? "¶m1=" + param1 : "") + (!string.IsNullOrEmpty(param2) ? "¶m2=" + param2 : "");
|
||||
|
||||
//모바일팝업
|
||||
if (sel == "MOBI")
|
||||
{
|
||||
|
|
@ -772,14 +798,6 @@ namespace NP.FO.Controllers
|
|||
CI_UPDATE = outputobj["CI_UPDATE"].ToString();
|
||||
TEL_COM_CD = outputobj["TEL_COM_CD"].ToString();
|
||||
TEL_NO = outputobj["TEL_NO"].ToString();
|
||||
//Users users = new Users()
|
||||
//{
|
||||
// username = RSLT_NAME,
|
||||
// birthday = RSLT_BIRTHDAY,
|
||||
// di=DI,
|
||||
// mobile = TEL_NO,
|
||||
// jointype=0
|
||||
//};
|
||||
TEL_NO = string.IsNullOrEmpty(TEL_NO) || TEL_NO.Replace("-", "").Length < 10 ? (TEL_NO ?? "") : TEL_NO.Replace("-", "").Length == 10 ? string.Format("{0}-{1}-{2}", TEL_NO.Replace("-", "").Substring(0, 3), TEL_NO.Replace("-", "").Substring(3, 3), TEL_NO.Replace("-", "").Substring(6)) : string.Format("{0}-{1}-{2}", TEL_NO.Replace("-", "").Substring(0, 3), TEL_NO.Replace("-", "").Substring(3, 4), TEL_NO.Replace("-", "").Substring(7));
|
||||
if (!string.IsNullOrEmpty(TEL_NO))
|
||||
{
|
||||
|
|
@ -1300,7 +1318,6 @@ namespace NP.FO.Controllers
|
|||
result = "er.잘못된 강좌코드 입니다.";
|
||||
break;
|
||||
default:
|
||||
// NoCert
|
||||
result = "er.인증에 실패하였습니다.";
|
||||
break;
|
||||
}
|
||||
|
|
@ -1370,15 +1387,7 @@ namespace NP.FO.Controllers
|
|||
CI = outputobj["CI"].ToString();
|
||||
CI_UPDATE = outputobj["CI_UPDATE"].ToString();
|
||||
VSSN = outputobj["VSSN"].ToString();
|
||||
//Users users = new Users()
|
||||
//{
|
||||
// username = RSLT_NAME,
|
||||
// birthday = RSLT_BIRTHDAY,
|
||||
// di = DI,
|
||||
// ci = CI,
|
||||
// vssn = VSSN,
|
||||
// jointype = 0
|
||||
//};
|
||||
|
||||
if (!string.IsNullOrEmpty(VSSN))
|
||||
{
|
||||
if (reason == "Join")
|
||||
|
|
@ -1515,7 +1524,7 @@ namespace NP.FO.Controllers
|
|||
+ RSLT_NAME + ":" + RSLT_BIRTHDAY + ":" + RSLT_SEX_CD + ":" + RSLT_NTV_FRNR_CD + ":"
|
||||
+ DI + ":" + CI + ":" + CI_UPDATE + ":" + VSSN + ":"
|
||||
+ RETURN_MSG;
|
||||
//vm.stringval = "CP_CD:" + CP_CD + "&RSLT_CD:" + RSLT_CD + "&RSLT_MSG:" + RSLT_MSG;
|
||||
|
||||
Dao.Save("sys.kcblog.in", new System.Collections.Hashtable() { { "cp_cd", CP_CD }, { "vssn", VSSN }, { "logmsg", "RSLT_CD:" + RSLT_CD + "&RSLT_MSG:" + RSLT_MSG } });
|
||||
ViewBag.reason = reason;
|
||||
}
|
||||
|
|
@ -1600,15 +1609,7 @@ namespace NP.FO.Controllers
|
|||
CI = outputobj["CI"].ToString();
|
||||
CI_UPDATE = outputobj["CI_UPDATE"].ToString();
|
||||
VSSN = outputobj["VSSN"].ToString();
|
||||
//Users users = new Users()
|
||||
//{
|
||||
// username = RSLT_NAME,
|
||||
// birthday = RSLT_BIRTHDAY,
|
||||
// di = DI,
|
||||
// ci = CI,
|
||||
// vssn = VSSN,
|
||||
// jointype = 0
|
||||
//};
|
||||
|
||||
if (!string.IsNullOrEmpty(VSSN))
|
||||
{
|
||||
rsltCd = CertOkRslt.Ok.ToString();
|
||||
|
|
@ -1764,7 +1765,7 @@ namespace NP.FO.Controllers
|
|||
+ RSLT_NAME + ":" + RSLT_BIRTHDAY + ":" + RSLT_SEX_CD + ":" + RSLT_NTV_FRNR_CD + ":"
|
||||
+ DI + ":" + CI + ":" + CI_UPDATE + ":" + VSSN + ":"
|
||||
+ RETURN_MSG;
|
||||
//vm.stringval = "CP_CD:" + CP_CD + "&RSLT_CD:" + RSLT_CD + "&RSLT_MSG:" + RSLT_MSG;
|
||||
|
||||
Dao.Save("sys.kcblog.in", new System.Collections.Hashtable() { { "cp_cd", CP_CD }, { "vssn", VSSN }, { "logmsg", "RSLT_CD:" + RSLT_CD + "&RSLT_MSG:" + RSLT_MSG } });
|
||||
}
|
||||
|
||||
|
|
@ -1818,7 +1819,6 @@ namespace NP.FO.Controllers
|
|||
paramStr += "," + reasonNo;
|
||||
paramStr += "," + rsltCd;
|
||||
|
||||
//paramEncStr = "stringval:" + EncString(paramStr);
|
||||
ViewBag.result = EncString(paramStr);
|
||||
}
|
||||
else
|
||||
|
|
@ -1837,7 +1837,6 @@ namespace NP.FO.Controllers
|
|||
paramStr += "," + reasonNo;
|
||||
paramStr += "," + rsltCd;
|
||||
|
||||
//paramEncStr = "stringval:" + EncString(paramStr);
|
||||
ViewBag.result = EncString(paramStr);
|
||||
}
|
||||
else
|
||||
|
|
@ -1847,7 +1846,6 @@ namespace NP.FO.Controllers
|
|||
}
|
||||
break;
|
||||
}
|
||||
//ViewBag.reason = reason;
|
||||
|
||||
if (errChk)
|
||||
{
|
||||
|
|
@ -1901,16 +1899,10 @@ namespace NP.FO.Controllers
|
|||
{
|
||||
var cookie = Request.Cookies.Get("RTNURL");
|
||||
ViewBag.RTNURL = cookie.Value;
|
||||
//원래 마케팅용이어서 expire는 제외
|
||||
//cookie.Expires = DateTime.Now.AddDays(-1);
|
||||
//Response.Cookies.Add(cookie);
|
||||
}
|
||||
if (Request.Cookies.Get("ru") != null)
|
||||
{
|
||||
ViewBag.RTNURL = Request.Cookies.Get("ru");
|
||||
//원래 마케팅용이어서 expire는 제외
|
||||
//cookie.Expires = DateTime.Now.AddDays(-1);
|
||||
//Response.Cookies.Add(cookie);
|
||||
}
|
||||
|
||||
if (ViewBag.UserNo > 0)
|
||||
|
|
|
|||
|
|
@ -701,6 +701,7 @@ namespace NP.FO.Controllers
|
|||
/// <returns></returns>
|
||||
public ActionResult SmartSearch(VMCourse vm)
|
||||
{
|
||||
#region + 참고사항
|
||||
/*
|
||||
stringval : 0: 건설기술진흥법교육 (현재 고정됨)
|
||||
stringval2 : SKILL (1: 교육장, 2:온라인) - cshape
|
||||
|
|
@ -713,6 +714,7 @@ namespace NP.FO.Controllers
|
|||
WHERE isuse = 1
|
||||
AND cgroup IN ('typejob40','typejob41','typejob42','typejob43','typejob44','typejob45','typejob46','typejob47','typejob48','typejob49'))
|
||||
*/
|
||||
#endregion
|
||||
|
||||
var p = new Hashtable();
|
||||
|
||||
|
|
@ -753,11 +755,23 @@ namespace NP.FO.Controllers
|
|||
vm.CMs = Dao.Get<CM>("cm.cms", p).ToList();
|
||||
}
|
||||
|
||||
// pms7301 에 따른 정렬조건
|
||||
vm.CMs = vm.CMs?.OrderBy(c =>
|
||||
c.cgcode == "107" ? 1 : // 1. 특성화
|
||||
(c.cgcode == "103" || c.cgcode == "104") ? 2 : // 2. 역량강화
|
||||
c.cgcode == "102" ? 3 : // 3. 직무
|
||||
c.cgcode == "105" ? 4 : // 4. 전문
|
||||
c.cgcode == "101" ? 5 : // 5. 기본
|
||||
6 // 그 외
|
||||
).ToList() ?? new List<CM>();
|
||||
|
||||
#region + ComCodes2 ~ 6
|
||||
vm.ComCodes2 = GetComCodes("typeman");
|
||||
vm.ComCodes3 = GetComCodes("typeedu");
|
||||
vm.ComCodes4 = GetComCodes("typegrade");
|
||||
vm.ComCodes5 = GetComCodes("typejob");
|
||||
vm.ComCodes6 = GetComCodes("typejobitem");
|
||||
#endregion
|
||||
|
||||
bool getComCheck = true;
|
||||
|
||||
|
|
@ -862,26 +876,26 @@ namespace NP.FO.Controllers
|
|||
ViewBag.IsMain = true;
|
||||
|
||||
#region + (사용중) ViewBag.rslt 신청 제약 조건
|
||||
var fOCommonController = new Base.Controllers.FOCommonController();
|
||||
fOCommonController.Dao = new Dao.CommonDao();
|
||||
ViewBag.rslt = fOCommonController.CheckUserLect(vm.stringval3, vm.stringval21, vm.stringval4, vm.stringval5, int.Parse(vm.stringval17), int.Parse(vm.stringval18), SUserInfo.UserNo);
|
||||
//var fOCommonController = new Base.Controllers.FOCommonController();
|
||||
//fOCommonController.Dao = new Dao.CommonDao();
|
||||
//ViewBag.rslt = fOCommonController.CheckUserLect(vm.stringval3, vm.stringval21, vm.stringval4, vm.stringval5, int.Parse(vm.stringval17), int.Parse(vm.stringval18), SUserInfo.UserNo);
|
||||
|
||||
#endregion
|
||||
|
||||
#region + 2025-09 (스마트검색 개발 건 미사용으로 주석처리, 필요시 복원)
|
||||
//var result = new KeyValuePair<int, string>();
|
||||
//result = CheckUserLectInfo(
|
||||
// cmno: Convert.ToInt16(vm.stringval17),
|
||||
// pcmno: Convert.ToInt16(vm.stringval18),
|
||||
// userno: SUserInfo.UserNo,
|
||||
// man: vm.stringval3,
|
||||
// cgcode: vm.stringval21,
|
||||
// edu: vm.stringval4,
|
||||
// grade: vm.stringval5,
|
||||
// job1: vm.stringval6
|
||||
// );
|
||||
var result = new KeyValuePair<int, string>();
|
||||
result = CheckUserLectInfo(
|
||||
cmno: Convert.ToInt16(vm.stringval17),
|
||||
pcmno: Convert.ToInt16(vm.stringval18),
|
||||
userno: SUserInfo.UserNo,
|
||||
man: vm.stringval3,
|
||||
cgcode: vm.stringval21,
|
||||
edu: vm.stringval4,
|
||||
grade: vm.stringval5,
|
||||
job1: vm.stringval6
|
||||
);
|
||||
|
||||
//ViewBag.rslt = result.Key;
|
||||
ViewBag.rslt = result.Key;
|
||||
#endregion
|
||||
|
||||
#region + ComCodes2 ~ 6 까지 설정
|
||||
|
|
@ -1034,6 +1048,30 @@ namespace NP.FO.Controllers
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
//if (edu == "30")
|
||||
//{
|
||||
// // 1) 현재 신청하는 교육이 제한 대상인지 확인
|
||||
// bool isApplyingForRestrictedFirstEdu =
|
||||
// (man == "25" || man == "27" || man == "28")
|
||||
// && (cgcode == "103" || cgcode == "104");
|
||||
|
||||
// if (isApplyingForRestrictedFirstEdu)
|
||||
// {
|
||||
// // 2) 이미 신청 내역 중에 제한 대상에 해당하는 최초교육이 있는지 확인
|
||||
// bool hasExistingRestrictedFirstEdu = lectEnrolls.Any(l =>
|
||||
// l.TYPEEDU == 30
|
||||
// && (l.TYPEMAN == 25 || l.TYPEMAN == 27 || l.TYPEMAN == 28)
|
||||
// && (l.CGCODE == "107")
|
||||
// );
|
||||
|
||||
// // 조건을 만족하는 기존 교육이 발견되면, 중복신청 막기 처리
|
||||
// if (hasExistingRestrictedFirstEdu)
|
||||
// {
|
||||
// return new KeyValuePair<int, string>(-10, "최초교육 제약");
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
#endregion
|
||||
|
||||
#region + (탈출) 5. 교육목적 -> 승급교육(35) 관련 제한 조건
|
||||
|
|
@ -1047,7 +1085,7 @@ namespace NP.FO.Controllers
|
|||
{
|
||||
// A: 동일 등급, 동일 직무분야 내에서 1개만 신청 가능
|
||||
// ((설계시공 또는 건설사업관리) / (역량강화 또는 전문분야))
|
||||
bool isApplyingForGroupA = (man == "25" || man == "28") && (cgcode == "103" || cgcode == "104" || cgcode == "105");
|
||||
bool isApplyingForGroupA = (man == "25" || man == "28") && (cgcode == "103" || cgcode == "104");
|
||||
if (isApplyingForGroupA)
|
||||
{
|
||||
bool hasExistingInGroupA = lectEnrolls.Any(l =>
|
||||
|
|
@ -1056,7 +1094,7 @@ namespace NP.FO.Controllers
|
|||
&& l.TYPEJOB.ToString() == job1
|
||||
&& (
|
||||
(l.TYPEMAN.ToString() == "25" || l.TYPEMAN.ToString() == "28")
|
||||
&& (l.CGCODE == "103" || l.CGCODE == "104" || l.CGCODE == "105")
|
||||
&& (l.CGCODE == "103" || l.CGCODE == "104")
|
||||
)
|
||||
);
|
||||
|
||||
|
|
@ -1066,6 +1104,44 @@ namespace NP.FO.Controllers
|
|||
}
|
||||
}
|
||||
|
||||
bool isApplyingForGroupA2 = (man == "25" || man == "28") && (cgcode == "105");
|
||||
if (isApplyingForGroupA2)
|
||||
{
|
||||
bool hasExistingInGroupA2 = lectEnrolls.Any(l =>
|
||||
l.TYPEEDU == 35
|
||||
&& l.TYPEGRADE.ToString() == grade
|
||||
&& l.TYPEJOB.ToString() == job1
|
||||
&& (
|
||||
(l.TYPEMAN.ToString() == "25" || l.TYPEMAN.ToString() == "28")
|
||||
&& (l.CGCODE == "105")
|
||||
)
|
||||
);
|
||||
|
||||
if (isApplyingForGroupA2)
|
||||
{
|
||||
return new KeyValuePair<int, string>(-20, "승급교육 제약A");
|
||||
}
|
||||
}
|
||||
|
||||
bool isApplyingForGroupA3 = (man == "25" || man == "28") && (cgcode == "107");
|
||||
if (isApplyingForGroupA3)
|
||||
{
|
||||
bool hasExistingInGroupA3 = lectEnrolls.Any(l =>
|
||||
l.TYPEEDU == 35
|
||||
&& l.TYPEGRADE.ToString() == grade
|
||||
&& l.TYPEJOB.ToString() == job1
|
||||
&& (
|
||||
(l.TYPEMAN.ToString() == "25" || l.TYPEMAN.ToString() == "28")
|
||||
&& (l.CGCODE == "107")
|
||||
)
|
||||
);
|
||||
|
||||
if (isApplyingForGroupA3)
|
||||
{
|
||||
return new KeyValuePair<int, string>(-20, "승급교육 제약A");
|
||||
}
|
||||
}
|
||||
|
||||
// B: 동일 등급, 동일 직무분야 내에서 1개만 신청 가능
|
||||
// ((설계시공/특성화) 또는 (건설사업관리/전문분야))
|
||||
bool isApplyingForGroupB = (man == "25" && cgcode == "107") || (man == "28" && cgcode == "105");
|
||||
|
|
@ -1128,7 +1204,6 @@ namespace NP.FO.Controllers
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
|
|
@ -1147,6 +1222,7 @@ namespace NP.FO.Controllers
|
|||
|
||||
return result;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,16 +1,10 @@
|
|||
using System;
|
||||
using NP.Model;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using System.Web.Mvc;
|
||||
|
||||
using NP.Model;
|
||||
using NP.Base.Auth;
|
||||
|
||||
using XPayClientNet;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Collections;
|
||||
|
||||
namespace NP.FO.Controllers
|
||||
{
|
||||
|
|
@ -34,24 +28,17 @@ namespace NP.FO.Controllers
|
|||
}
|
||||
else
|
||||
{
|
||||
//if (Request.IsSecureConnection &&
|
||||
// (Request.Url.AbsolutePath.ToUpper().StartsWith("/CROOM/") ||
|
||||
// Request.Url.AbsolutePath.ToUpper() == "/CROOM" ||
|
||||
// Request.Url.AbsolutePath.ToUpper().StartsWith("/CDMS/")) &&
|
||||
// Request.Url.AbsolutePath.ToUpper() != "/CDMS/HTTPS")
|
||||
if (
|
||||
Request.IsSecureConnection &&
|
||||
Request.Url.AbsolutePath.ToUpper().StartsWith("/CDMS/") &&
|
||||
Request.Url.AbsolutePath.ToUpper() != "/CDMS/HTTPS" && false
|
||||
)
|
||||
{
|
||||
//Response.Redirect("http://" + Request.Url.Host + Request.Url.PathAndQuery, true);
|
||||
filterContext.Result = new RedirectResult("http://" + Request.Url.Host + Request.Url.PathAndQuery);
|
||||
}
|
||||
else if ("Y".Equals(GetConfig("usessl")) &&
|
||||
!Request.IsSecureConnection &&
|
||||
!Request.Url.AbsolutePath.StartsWith("/Open/") &&
|
||||
//!(Request.Url.AbsolutePath.ToUpper().StartsWith("/CROOM/") || Request.Url.AbsolutePath.ToUpper() == "/CROOM") &&
|
||||
!(Request.Url.AbsolutePath.ToUpper().StartsWith("/CDMS/") || Request.Url.AbsolutePath.ToUpper() == "/CDMS") &&
|
||||
!Request.Url.AbsolutePath.ToUpper().StartsWith("/ACCOUNT/ERROR"))
|
||||
{
|
||||
|
|
@ -64,14 +51,8 @@ namespace NP.FO.Controllers
|
|||
Response.Cookies["yicte"].Value = Request.Cookies["yicte"].Value + ";SameSite=None; Secure";
|
||||
}
|
||||
var cm = new Model.MenuPage() { };
|
||||
//if (Request.Url.AbsolutePath.ToUpper().StartsWith("/DIVISION/A"))
|
||||
//{
|
||||
// cm = GetMENUPAGES.Where(w => (w.usertype == 0 || w.usertype == SUserInfo.UserType) && w.pageurl.Equals(Request.Url.PathAndQuery)).OrderByDescending(od => od.pdepth).FirstOrDefault();
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
cm = GetMENUPAGES.Where(w => (w.usertype == 0 || w.usertype == SUserInfo.UserType) && (w.pageurl ?? "").ToUpper().Equals(Request.Url.AbsolutePath.ToUpper())).OrderByDescending(od => od.pdepth).FirstOrDefault();
|
||||
//}
|
||||
|
||||
if (cm != null || Request.Url.AbsolutePath.ToUpper().Equals("/HOME/HTML")
|
||||
|| Request.Url.AbsolutePath.ToUpper().StartsWith("/ACCOUNT/BANEMAIL")
|
||||
|| Request.Url.AbsolutePath.ToUpper().StartsWith("/ACCOUNT/LOGOUT")
|
||||
|
|
@ -104,15 +85,9 @@ namespace NP.FO.Controllers
|
|||
new NP.Model.PageLog() { uno = SUserInfo.UserNo, uip = GetUserIP(), logsite = 1, pno = cm.pno < 1 ? (int?)null : cm.pno, loginfo = (cm.ppagename ?? "") + " > " + cm.pagename })));
|
||||
}
|
||||
}
|
||||
else if (GetMENUPAGES.Where(w => (w.pageurl ?? "").ToUpper().Equals(Request.Url.AbsolutePath.ToUpper())).OrderByDescending(od => od.pdepth).FirstOrDefault() != null
|
||||
//&& !Request.Url.AbsolutePath.ToUpper().StartsWith("/CDMS/PLAY")
|
||||
//&& !Request.Url.AbsolutePath.ToUpper().StartsWith("/CONTENTS")
|
||||
)
|
||||
else if (GetMENUPAGES.Where(w => (w.pageurl ?? "").ToUpper().Equals(Request.Url.AbsolutePath.ToUpper())).OrderByDescending(od => od.pdepth).FirstOrDefault() != null)
|
||||
{
|
||||
filterContext.Result = new RedirectResult("/Account/Index?fobase=xx&ru=" + Request.Url.AbsolutePath, true);
|
||||
//학습창 등이 안뜨고 로그인창으로 갈 경우 여기에 urlreferrer suserinfo, viewbag.ssuser~, GetMENUPAGES 등의 값들을 로깅해본다.
|
||||
//~~
|
||||
//Response.Redirect("/Account/Index?ru=" + Request.Url.AbsolutePath, true);
|
||||
}
|
||||
else if (!Request.Url.AbsolutePath.ToUpper().StartsWith("/OPEN/") &&
|
||||
!Request.Url.AbsolutePath.ToUpper().StartsWith("/HOME/POPUP") &&
|
||||
|
|
@ -123,23 +98,11 @@ namespace NP.FO.Controllers
|
|||
{
|
||||
filterContext.Result = new RedirectResult("/Account/Error");
|
||||
}
|
||||
//if (Request.IsSecureConnection &&
|
||||
//!Request.Url.AbsolutePath.ToUpper().StartsWith("/ACCOUNT/") &&
|
||||
//!Request.Url.AbsolutePath.ToUpper().StartsWith("/OPEN/"))
|
||||
//{
|
||||
// //Redirect("http://" + Request.Url.Host + Request.Url.PathAndQuery);
|
||||
// filterContext.Result = new RedirectResult("http://" + Request.Url.Host + Request.Url.PathAndQuery);
|
||||
//}
|
||||
else if (GetMENUPAGES.Where(w => (w.pageurl ?? "").ToUpper().Equals(Request.Url.AbsolutePath.ToUpper())).OrderByDescending(od => od.pdepth).FirstOrDefault() != null
|
||||
//&& !Request.Url.AbsolutePath.ToUpper().StartsWith("/CDMS/PLAY")
|
||||
//&& !Request.Url.AbsolutePath.ToUpper().StartsWith("/CONTENTS")
|
||||
)
|
||||
|
||||
else if (GetMENUPAGES.Where(w => (w.pageurl ?? "").ToUpper().Equals(Request.Url.AbsolutePath.ToUpper())).OrderByDescending(od => od.pdepth).FirstOrDefault() != null)
|
||||
{
|
||||
filterContext.Result = new RedirectResult("/Account/Index?fobase=1&ru=" + Request.Url.AbsolutePath, true);
|
||||
SetError("fobaseerror:path=" + Request.Url.AbsolutePath + "&urlrefer=" + Request.UrlReferrer + "&userinfo=" + SUserInfo.UserNo + "&ssuer=" + ViewBag.SSUserNo);
|
||||
//학습창 등이 안뜨고 로그인창으로 갈 경우 여기에 urlreferrer suserinfo, viewbag.ssuser~, GetMENUPAGES 등의 값들을 로깅해본다.
|
||||
//~~
|
||||
//Response.Redirect("/Account/Index?ru=" + Request.Url.AbsolutePath, true);
|
||||
}
|
||||
else if (!Request.Url.AbsolutePath.ToUpper().StartsWith("/OPEN/") &&
|
||||
!Request.Url.AbsolutePath.ToUpper().StartsWith("/HOME/POPUP") &&
|
||||
|
|
@ -151,13 +114,6 @@ namespace NP.FO.Controllers
|
|||
{
|
||||
filterContext.Result = new RedirectResult("/Account/Error");
|
||||
}
|
||||
//if (Request.IsSecureConnection &&
|
||||
//!Request.Url.AbsolutePath.ToUpper().StartsWith("/ACCOUNT/") &&
|
||||
//!Request.Url.AbsolutePath.ToUpper().StartsWith("/OPEN/"))
|
||||
//{
|
||||
// //Redirect("http://" + Request.Url.Host + Request.Url.PathAndQuery);
|
||||
// filterContext.Result = new RedirectResult("http://" + Request.Url.Host + Request.Url.PathAndQuery);
|
||||
//}
|
||||
}
|
||||
}
|
||||
private static IList<NP.Model.Popup> POPUPS { get; set; }
|
||||
|
|
@ -224,7 +180,6 @@ namespace NP.FO.Controllers
|
|||
{
|
||||
if (BANNER == null)
|
||||
{
|
||||
//var banners = GetBANNERS;
|
||||
BANNER = "";
|
||||
if (GetBANNERS.Where(w => w.ismain == 0).Count() > 0)
|
||||
{
|
||||
|
|
@ -251,13 +206,9 @@ namespace NP.FO.Controllers
|
|||
{
|
||||
if (BANNERCROOM == null)
|
||||
{
|
||||
//var banners = GetBANNERS;
|
||||
BANNERCROOM = "";
|
||||
if (GetBANNERS.Where(w => w.ismain == 1).Count() > 0)
|
||||
{
|
||||
//BANNERCROOM = string.Join("", GetBANNERS.Where(w => w.ismain == 1).Select(s =>
|
||||
// string.Format("<div class=\"mpgsdCont\" style=\"background:url({0})no-repeat left center;\"><img src=\"{1}\" alt=\"\" /></div>"
|
||||
// , (new BaseModel()).rootfolder + s.fileurl, (new BaseModel()).rootfolder + s.fileurl2)));
|
||||
}
|
||||
}
|
||||
return BANNERCROOM;
|
||||
|
|
@ -340,7 +291,6 @@ namespace NP.FO.Controllers
|
|||
}
|
||||
else
|
||||
{
|
||||
//sbmauth.Append(string.Format("<li class=\"topmenu{1}\"><a href=\"#\" onclick=\"gomenu({2}, {3}, '{4}', this)\">{0}</a><span></span><ul>", m.pagename, m.pno,menu.pno,menu.pagetype,menu.pageurl));
|
||||
sbmauth.Append(string.Format("<li class=\"topmenu{1}\"><a href=\"#\" style=\"cursor:default;\">{0}</a><span></span><ul>", m.pagename, m.pno,menu.pno,menu.pagetype,menu.pageurl));
|
||||
}
|
||||
if (m.usertype == 0)
|
||||
|
|
@ -351,7 +301,6 @@ namespace NP.FO.Controllers
|
|||
}
|
||||
else
|
||||
{
|
||||
//sbm.Append(string.Format("<li class=\"topmenu{1}\"><a href=\"#\" onclick=\"gomenu({2}, {3}, '{4}', this)\">{0}</a><span></span><ul>", m.pagename, m.pno, menu.pno, menu.pagetype, menu.pageurl));
|
||||
sbm.Append(string.Format("<li class=\"topmenu{1}\"><a href=\"#\" style=\"cursor:default;\">{0}</a><span></span><ul>", m.pagename, m.pno, menu.pno, menu.pagetype, menu.pageurl));
|
||||
}
|
||||
|
||||
|
|
@ -419,23 +368,6 @@ namespace NP.FO.Controllers
|
|||
}
|
||||
protected void PayAll(VMPay vm)
|
||||
{
|
||||
//ViewBag.IsOldTLS = false;
|
||||
//try
|
||||
//{
|
||||
// if (Request.IsSecureConnection)
|
||||
// {
|
||||
// System.Net.Security.SslStream sss = new System.Net.Security.SslStream(Request.UrlReferrer.);
|
||||
// Console.WriteLine(sss.SslProtocol);
|
||||
// //if (ssp.SslProtocol != System.Security.Authentication.SslProtocols.Tls12)
|
||||
// //{
|
||||
// // ViewBag.IsOldTLS = true;
|
||||
// //}
|
||||
// }
|
||||
//}
|
||||
//catch (Exception ex)
|
||||
//{
|
||||
// Console.WriteLine(ex.Message);
|
||||
//}
|
||||
vm.PayItems = new List<PayItem>() { };
|
||||
if (vm.ispaycart)
|
||||
{
|
||||
|
|
@ -482,22 +414,11 @@ namespace NP.FO.Controllers
|
|||
vm.pginfo = GetConfig("pginfo");
|
||||
vm.pginfomobile = GetConfig("pginfomobile");
|
||||
vm.signkey = ComputeHash(vm.pginfo.Split('|')[2]);
|
||||
|
||||
//vm.payitemname = Utf8ToEuckr();
|
||||
vm.viewname5 = "https://" + Request.Url.Host + "/Course/PayClose";
|
||||
//vm.viewname5 = GetConfig("fronturl") + "/Course/PayClose";
|
||||
vm.previewname = vm.previewname ?? "/My/Cart";
|
||||
vm.deliveramt = GetInt(GetConfig("deliveramt"));
|
||||
}
|
||||
//private String Utf8ToEuckr(String s)
|
||||
//{
|
||||
// byte[] pbSource = System.Text.Encoding.UTF8.GetBytes(s);
|
||||
// byte[] pbDest = System.Text.Encoding.Convert(
|
||||
// System.Text.Encoding.UTF8, System.Text.Encoding.GetEncoding("euc-kr"), pbSource);
|
||||
// pbSource = System.Text.Encoding.Convert(System.Text.Encoding.GetEncoding("euc-kr"), System.Text.Encoding.UTF8, pbDest);
|
||||
// char[] psUnicode = System.Text.UTF8Encoding.UTF8.GetChars(pbSource);
|
||||
// return new string(psUnicode);
|
||||
//}
|
||||
|
||||
protected ActionResult PayReturn(VMPay vm)
|
||||
{
|
||||
//20220802 추가
|
||||
|
|
@ -834,7 +755,6 @@ namespace NP.FO.Controllers
|
|||
item.eend2 = item.eend.ToString("yyyy년 MM월 dd일");
|
||||
}
|
||||
|
||||
//vm.SelectCMInningscd.scdInfoSummary = string.Format("{0}", vm.SelectCMInningscd.estart.ToString("yyyy년 MM월 dd일까지"));
|
||||
if (vm.SelectCMInningscd.estart < Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00")))
|
||||
{
|
||||
vm.SelectCMInningscd.isEnd = true;
|
||||
|
|
@ -846,4 +766,3 @@ namespace NP.FO.Controllers
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -231,6 +231,7 @@
|
|||
<Content Include="css\jquery-ui-1.12.1\jquery-ui.min.css" />
|
||||
<Content Include="css\lecture.css" />
|
||||
<Content Include="css\dev.css" />
|
||||
<Content Include="css\login.css" />
|
||||
<Content Include="css\mainpopup.css" />
|
||||
<Content Include="css\mypage.css" />
|
||||
<Content Include="css\slick.css" />
|
||||
|
|
@ -328,6 +329,7 @@
|
|||
<Content Include="img\common\intranet_logo_b.png" />
|
||||
<Content Include="img\common\join_select01.png" />
|
||||
<Content Include="img\common\join_select02.png" />
|
||||
<Content Include="img\common\join_select03-4.png" />
|
||||
<Content Include="img\common\join_select03.png" />
|
||||
<Content Include="img\common\join_sns01.jpg" />
|
||||
<Content Include="img\common\join_sns02.jpg" />
|
||||
|
|
@ -715,7 +717,6 @@
|
|||
<Content Include="Views\My\MyAssInfo.cshtml" />
|
||||
<Content Include="Views\Course\ApplyEdu.cshtml" />
|
||||
<Content Include="Views\Course\ApplyComplete.cshtml" />
|
||||
<Content Include="Views\Course\ApplyPay_221227.cshtml" />
|
||||
<Content Include="Views\Course\XpayREQ.cshtml" />
|
||||
<Content Include="Views\Course\XpayReturnURL.cshtml" />
|
||||
<Content Include="Views\My\Document.cshtml" />
|
||||
|
|
@ -727,7 +728,6 @@
|
|||
<Content Include="Views\Shared\Partial\MobileChk.cshtml" />
|
||||
<Content Include="Views\Home\PrivacyPolicy.cshtml" />
|
||||
<Content Include="Views\Home\UsePolicy.cshtml" />
|
||||
<Content Include="Views\Course\ApplyAgree_old.cshtml" />
|
||||
<Content Include="Views\Open\PlayOpen.cshtml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
|
@ -744,7 +744,6 @@
|
|||
<Content Include="Views\Home\Indexbk2.cshtml" />
|
||||
<Content Include="Views\Account\PwChange.cshtml" />
|
||||
<Content Include="Views\Account\DormantCancel.cshtml" />
|
||||
<Content Include="Views\Course\ApplyPay_1005.cshtml" />
|
||||
<Content Include="Views\Shared\Partial\policy.cshtml" />
|
||||
<Content Include="Views\Shared\Partial\privacy.cshtml" />
|
||||
<Content Include="Views\Shared\Partial\Select.cshtml" />
|
||||
|
|
@ -758,6 +757,8 @@
|
|||
<Content Include="Views\Home\Index_20250403백업_추후에배포.cshtml" />
|
||||
<Content Include="Views\My\Document_250617_삭제예정.cshtml" />
|
||||
<Content Include="Views\Course\SmartSearch.cshtml" />
|
||||
<Content Include="Views\Account\FindIDPW.cshtml" />
|
||||
<Content Include="Views\Account\NewPassword.cshtml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Base\Base.csproj">
|
||||
|
|
|
|||
|
|
@ -60,6 +60,26 @@
|
|||
}
|
||||
self.close();
|
||||
</text>
|
||||
} else if (ViewBag.reason == "FINDIDPW") {
|
||||
<text>
|
||||
if ("@(RSLT_NAME)" != "" && "@CI" != "") {
|
||||
try {
|
||||
$(opener.document).find("#mform").find("#User_di").val("@(DI)");
|
||||
$(opener.document).find("#mform").find("#User_ci").val("@(CI)");
|
||||
$(opener.document).find("#mform").find("#User_authplatform").val("@(AuthPlatform.Mobile.GetHashCode())");
|
||||
$(opener.document).find("#mform").attr("action", "/Account/NewPassword");
|
||||
$(opener.document).find("#mform").submit();
|
||||
alert("인증완료");
|
||||
self.close();
|
||||
}
|
||||
catch (ex) {
|
||||
console.error(ex.message);
|
||||
}
|
||||
} else {
|
||||
alert("입력하신 아이디 또는 비밀번호와 일치하는 계정이 없습니다.\n 다시 확인해주세요.");
|
||||
}
|
||||
self.close();
|
||||
</text>
|
||||
} else if (ViewBag.reason == "LectinningAuth") {
|
||||
<text>
|
||||
alert("인증완료");
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@
|
|||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
$(document).ready(function () {
|
||||
if ('@(ViewBag.ret)' == '0') {
|
||||
if ('@(RSLT_CD)' == 'B000') {
|
||||
|
|
@ -52,6 +53,26 @@
|
|||
}
|
||||
self.close();
|
||||
</text>
|
||||
} else if (ViewBag.reason == "FINDIDPW") {
|
||||
<text>
|
||||
if ("@(RSLT_NAME)" != "" && "@CI" != "") {
|
||||
try {
|
||||
$(opener.document).find("#mform").find("#User_di").val("@(DI)");
|
||||
$(opener.document).find("#mform").find("#User_ci").val("@(CI)");
|
||||
$(opener.document).find("#mform").find("#User_authplatform").val("@(AuthPlatform.Mobile.GetHashCode())");
|
||||
$(opener.document).find("#mform").attr("action", "/Account/NewPassword");
|
||||
$(opener.document).find("#mform").submit();
|
||||
alert("인증완료");
|
||||
self.close();
|
||||
}
|
||||
catch (ex) {
|
||||
console.error(ex.message);
|
||||
}
|
||||
} else {
|
||||
alert("입력하신 아이디 또는 비밀번호와 일치하는 계정이 없습니다.\n 다시 확인해주세요.");
|
||||
}
|
||||
self.close();
|
||||
</text>
|
||||
} else if (ViewBag.reason == "AuthPlatformChange") {
|
||||
<text>
|
||||
if ("@(RSLT_NAME)" == $(opener.document).find("#mform").find("#username").val()) {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,65 @@
|
|||
@model NP.Model.VMUser
|
||||
<div class="container">
|
||||
<form id="mform" action="" method="post">
|
||||
@Html.HiddenFor(w => w.User.birthday)
|
||||
@Html.HiddenFor(w => w.User.username)
|
||||
@Html.HiddenFor(w => w.User.mobile)
|
||||
@Html.HiddenFor(w => w.User.vssn)
|
||||
@Html.HiddenFor(w => w.User.di)
|
||||
@Html.HiddenFor(w => w.User.ci)
|
||||
@Html.HiddenFor(w => w.intval2)
|
||||
@Html.HiddenFor(w => w.User.jointype)
|
||||
@Html.HiddenFor(w => w.User.authplatform)
|
||||
</form>
|
||||
<form id="frm" method="post" action="@ViewBag.result">
|
||||
<input type="hidden" id="stringval" name="stringval" value="" />
|
||||
</form>
|
||||
<div class="jnSel">
|
||||
<h4 style=" font-size: 20px; font-weight: 400; text-align: left; margin: 0 0 30px;">
|
||||
인증 수단을 선택하여 주세요.
|
||||
<span style="display: block;color: red; font-size: 16px;">
|
||||
※ 로그인 5회 이상 실패로 로그인이 제한된 경우 본인인증 후 비밀번호 재설정을 통하여 해제가 가능합니다.
|
||||
</span>
|
||||
</h4>
|
||||
<div>
|
||||
<div class="jnsCont">
|
||||
<img src="../img/common/join_select03-4.png" alt="이메일 인증">
|
||||
<p>이메일 인증</p>
|
||||
<a href="/Account/FindMe">인증하기</a>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="jnsCont">
|
||||
<img src="../img/common/join_select02.png" alt="휴대폰 본인인증">
|
||||
<p>휴대폰 본인인증</p>
|
||||
<a href="javascript:void(0);" onclick="certok3reqview('MOBI', 'FINDIDPW');">인증하기</a>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="jnsCont">
|
||||
<img src="../img/common/join_select01.png" alt="i-PIN 인증">
|
||||
<p>i-PIN 인증</p>
|
||||
<a href="javascript:void(0);" onclick="certok3reqview('IPIN', 'FINDIDPW');">인증하기</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@Html.Partial("./Partial/OkCert3", null, new ViewDataDictionary { })
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
$(function () {
|
||||
|
||||
});
|
||||
|
||||
function showAlertPopup() {
|
||||
$('html, body').addClass('lock');
|
||||
|
||||
$("#alertPop").css({
|
||||
"display": "flex",
|
||||
"justify-content": "center",
|
||||
"align-items": "center"
|
||||
}).hide().fadeIn("fast");
|
||||
}
|
||||
|
||||
</script>
|
||||
|
|
@ -7,12 +7,19 @@
|
|||
{
|
||||
<div class="lgnForm" style="max-width: 500px; margin: 0 auto; text-align: center;">
|
||||
<p class="idpwTxt">
|
||||
<span><b>@Model.User.username (@Model.User.userid)</b>님, 인증이 완료되었습니다.</span>
|
||||
<span><b>@Model.User.username </b>님, 아이디는 @Model.User.userid 입니다.</span>
|
||||
<span>새롭게 사용할 비밀번호를 입력해주세요.</span>
|
||||
</p>
|
||||
<ul class="lgnInput">
|
||||
<li><input type="password" name="User.userpass" id="up1" placeholder="비밀번호(8자 이상, 영문/숫자/특수기호 포함)" /></li>
|
||||
<li><input type="password" id="up2" placeholder="비밀번호 확인(동일한 비밀번호 입력)" /></li>
|
||||
<li><input type="password" name="User.userpass" id="up1" placeholder="비밀번호(8자 이상, 영문/숫자/특수기호 포함)" autocomplete="new-password" /></li>
|
||||
<li><input type="password" id="up2" placeholder="비밀번호 확인(동일한 비밀번호 입력)" autocomplete="new-password" /></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li class="idpwBtn">
|
||||
<p id="capslock-warning"></p>
|
||||
<p id="password-match-warning"></p>
|
||||
<br />
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="idpwBtn">
|
||||
<li><a href="javascript:void(0);" onclick="save()">비밀번호 재설정</a></li>
|
||||
|
|
@ -53,7 +60,20 @@
|
|||
<script>
|
||||
|
||||
$(document).ready(function () {
|
||||
initCapsLockWarning('', '#capslock-warning');
|
||||
initializePasswordToggle('#up1, #up2');
|
||||
|
||||
$('#up1, #up2').on('keyup', function () {
|
||||
const password = $('#up1').val();
|
||||
const confirmPassword = $('#up2').val();
|
||||
const messageElement = $('#password-match-warning');
|
||||
|
||||
if (password.length >= 8 && confirmPassword && password !== confirmPassword) {
|
||||
messageElement.html('<strong style="color: red;">비밀번호가 일치하지 않습니다.</strong>');
|
||||
} else {
|
||||
messageElement.html('');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function findme() {
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@
|
|||
<a href="#" class="lgnBtn" onclick="login();">로그인</a>
|
||||
|
||||
<ul class="lgnFind">
|
||||
<li><a href="/Account/FindMe">아이디/비밀번호찾기</a></li>
|
||||
<li><a href="/Account/FindIDPW">아이디/비밀번호찾기</a></li>
|
||||
<li><a href="/Account/JoinTSel">회원가입</a></li>
|
||||
</ul>
|
||||
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
var googleClientId = ViewBag.googleClientID;
|
||||
}
|
||||
<head>
|
||||
<!-- 소셜로그인에 대해서는 추후 사용하도록 둔다 -->
|
||||
@*<script type="text/javascript" src="/js/naveridlogin_js_sdk_2.0.0.js"></script>
|
||||
<script type="text/javascript" src="/js/kakao.js"></script>
|
||||
<script src="https://apis.google.com/js/platform.js?onload=googleInit" async defer></script>*@
|
||||
|
|
@ -17,10 +18,10 @@
|
|||
<div class="lgnWrap">
|
||||
<ul class="lgnForm">
|
||||
<li>
|
||||
<input type="text" name="uid" id="uid" placeholder="아이디" value="@ViewBag.SavedId" />
|
||||
<input type="text" name="uid" id="uid" placeholder="아이디" value="@ViewBag.SavedId" autocomplete="username" />
|
||||
</li>
|
||||
<li>
|
||||
<input type="password" name="upw" id="upw" placeholder="비밀번호" />
|
||||
<input type="password" name="upw" id="upw" placeholder="비밀번호" autocomplete="current-password" />
|
||||
<button type="button" id="togglePassword" class="toggle-password-btn"></button>
|
||||
</li>
|
||||
</ul>
|
||||
|
|
@ -28,14 +29,22 @@
|
|||
<input type="checkbox" name="issaveid" id="issaveid" @(ViewBag.SavedId == "" ? "" : "checked")>
|
||||
<label for="issaveid">아이디저장</label>
|
||||
</div>
|
||||
<p style="margin-bottom: 30px; border: 1px solid red; padding: 5px;">※ 2021년 7월 1일 이전에 회원가입을 하신 분 들은 본인인증을 위하여 회원가입을 다시 진행 해주시길 부탁드립니다.</p>
|
||||
|
||||
@*<div class="notice-box-red">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" class="bi bi-exclamation-circle-fill icon" viewBox="0 0 16 16">
|
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8 4a.905.905 0 0 0-.9.995l.35 3.507a.552.552 0 0 0 1.1 0l.35-3.507A.905.905 0 0 0 8 4zm.002 6a1 1 0 1 0 0 2 1 1 0 0 0 0-2z" />
|
||||
</svg>
|
||||
<p>2021년 7월 1일 이전에 가입하신 회원님은 본인인증을 위해<br/> 회원가입을 다시 진행해 주시길 바랍니다.</p>
|
||||
</div>*@
|
||||
|
||||
<p id="capslock-warning"></p>
|
||||
<br/>
|
||||
<a href="javascript:void(0);" class="lgnBtn" onclick="login();">로그인</a>
|
||||
|
||||
<ul class="lgnFind">
|
||||
<li><a href="/Account/FindMe">아이디/비밀번호찾기</a></li>
|
||||
<li><a href="/Account/FindIDPW">아이디/비밀번호찾기</a></li>
|
||||
<li><a href="/Account/JoinIdVeri">회원가입</a></li>
|
||||
</ul>
|
||||
|
||||
<br />
|
||||
|
||||
@*<div id="naverIdLogin" style="display:none"></div>*@
|
||||
|
|
@ -46,6 +55,9 @@
|
|||
|
||||
$(document).ready(function () {
|
||||
|
||||
// Caps Lock
|
||||
initCapsLockWarning('#upw', '#capslock-warning');
|
||||
|
||||
if (opener != null && opener._ismain == 1) {
|
||||
opener.location.href = "/Account/Index";
|
||||
self.close();
|
||||
|
|
@ -79,6 +91,8 @@
|
|||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** INPUT 패스워드 눈알처리 */
|
||||
$('.lgnForm').on('click', '#togglePassword', function () {
|
||||
const passwordInput = $('#upw');
|
||||
|
|
@ -94,6 +108,7 @@
|
|||
$(this).toggleClass('is-toggled');
|
||||
});
|
||||
|
||||
// 우선 숨겨둔다
|
||||
/* snsInit(); */
|
||||
|
||||
});
|
||||
|
|
@ -158,16 +173,16 @@
|
|||
++logincnt;
|
||||
if (logincnt > 4) {
|
||||
//msg("비밀번호 5회 이상 오류로 로그인이 제한되었습니다.\n교육원으로 문의해주세요.");
|
||||
msg("해당 계정은 로그인이 제한된 계정 입니다.<br/>교육원으로 문의 주세요.<br/>T : 1544-7660<br/>");
|
||||
msg("로그인 5회 실패로 인하여 로그인이 제한 되었습니다.<br/>제한을 해제 하시려면 아이디 / 비밀번호 찾기에서<br/>본인인증 후 비밀번호를 재설정 해주세요.");
|
||||
logincnt = 0;
|
||||
}
|
||||
else {
|
||||
msg("입력하신 아이디/비밀번호와 일치하는 계정이 없습니다. 다시 확인해주세요.<br/>5회이상 비밀번호 오류 시 로그인이 제한됩니다.");
|
||||
msg("입력하신 아이디 또는 비밀번호와 일치하는 계정이 없습니다.<br/>다시 확인해주세요.<br/><br/><b style='color:blue;'>※ 5회이상 비밀번호 오류 시 로그인이 제한되므로 정확하게 입력해주세요.</b>");
|
||||
}
|
||||
}
|
||||
else if (capResult.msg == "-5") { // 비활성상태
|
||||
//msg("비밀번호 5회 이상 오류로 로그인이 제한되었습니다.\n교육원으로 문의해주세요.");
|
||||
msg("해당 계정은 로그인이 제한된 계정 입니다.<br/>교육원으로 문의 주세요.<br/>T : 1544-7660<br/>");
|
||||
msg("로그인 5회 실패로 인하여 로그인이 제한 되었습니다.<br/>제한을 해제 하시려면 아이디 / 비밀번호 찾기에서<br/>본인인증 후 비밀번호를 재설정 해주세요.");
|
||||
}
|
||||
else if (capResult.msg == "-6") { // 탈퇴신청중
|
||||
msg("회원탈퇴가 접수되었습니다.<br/>탈퇴 완료까지 평일 기준 1일 정도 소요될 예정입니다.");
|
||||
|
|
@ -180,7 +195,9 @@
|
|||
}
|
||||
submit();
|
||||
}
|
||||
} else { msg("입력하신 아이디/비밀번호와 일치하는 계정이 없습니다. 다시 확인해주세요.<br/>5회이상 비밀번호 오류 시 로그인이 제한됩니다."); }
|
||||
} else {
|
||||
msg("입력하신 아이디 또는 비밀번호와 일치하는 계정이 없습니다.<br/>다시 확인해주세요.<br/><br/><b style='color:blue;'>※ 5회이상 비밀번호 오류 시 로그인이 제한되므로 정확하게 입력해주세요.</b>");
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
|
@ -21,23 +21,16 @@
|
|||
<div class="jnsCont">
|
||||
<img src="../img/common/join_select01.png" alt="i-PIN 인증">
|
||||
<p>i-PIN 인증</p>
|
||||
<a href="#" onclick="certok3request('IPIN', 'Join');">인증하기</a>
|
||||
<a href="#" onclick="certok3reqview('IPIN', 'Join');">인증하기</a>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="jnsCont">
|
||||
<img src="../img/common/join_select02.png" alt="휴대폰 본인인증">
|
||||
<p>휴대폰 본인인증</p>
|
||||
<a href="#" onclick="certok3request('MOBI', 'Join');">인증하기</a>
|
||||
<a href="#" onclick="certok3reqview('MOBI', 'Join');">인증하기</a>
|
||||
</div>
|
||||
</div>
|
||||
@*<div>
|
||||
<div class="jnsCont">
|
||||
<img src="../img/common/join_select03.png" alt="카드인증">
|
||||
<p>카드인증</p>
|
||||
<a href="#">인증하기</a>
|
||||
</div>
|
||||
</div>*@
|
||||
</div>
|
||||
@Html.Partial("./Partial/OkCert3", null, new ViewDataDictionary { })
|
||||
<p class="subDsc mt20">본인 인증 시 제공되는 정보는 해당 인증기관에서 직접 수집하며, 인증 이외의 용도로 이용 또는 저장하지 않습니다.</p>
|
||||
|
|
@ -53,20 +46,7 @@
|
|||
$("#frm").submit();
|
||||
}
|
||||
else {
|
||||
msg(val.replace("er.",""))
|
||||
msg(val.replace("er.", ""))
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@*@{
|
||||
string errMsg = "";
|
||||
if (ViewBag.rsltCd != "")
|
||||
{
|
||||
errMsg = ((string)ViewBag.rsltCd).Replace("er.", "");
|
||||
<script>
|
||||
$(function () {
|
||||
msg("@errMsg")
|
||||
})
|
||||
</script>
|
||||
}
|
||||
}*@
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,194 @@
|
|||
@model NP.Model.VMUser
|
||||
@{
|
||||
// 상태 (확장대비)
|
||||
int userStatus = Model.User.status;
|
||||
|
||||
// 인증CI
|
||||
string ci = Model.User.ci ?? "";
|
||||
}
|
||||
|
||||
@if (!string.IsNullOrEmpty(ci) && !string.IsNullOrEmpty(Model.User.userid))
|
||||
{ // 인증 결과가 있는 사용자만
|
||||
<form method="post">
|
||||
@Html.AntiForgeryToken()
|
||||
<input type="hidden" id="userid" name="userid" value="@Model.User.userid" />
|
||||
<div class="lgnForm" style="max-width: 500px; margin: 0 auto; text-align: center;">
|
||||
<p class="idpwTxt">
|
||||
<span><b>@Model.User.username </b>님, 아이디는 @Model.User.userid 입니다.</span>
|
||||
<span>새롭게 사용할 비밀번호를 입력해주세요.</span>
|
||||
</p>
|
||||
<ul class="lgnInput" style="margin-top:5px;">
|
||||
<li><input type="password" id="up1" placeholder="비밀번호(8자 이상, 영문/숫자/특수기호 포함)" autocomplete="new-password" /></li>
|
||||
<li><input type="password" id="up2" placeholder="비밀번호 확인(동일한 비밀번호 입력)" autocomplete="new-password" /></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li class="idpwBtn" style="margin-top:5px;">
|
||||
<p id="capslock-warning"></p>
|
||||
<p id="password-match-warning"></p>
|
||||
<br />
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="idpwBtn">
|
||||
<li><a href="javascript:void(0);" onclick="fnPasswordChange()">비밀번호 재설정</a></li>
|
||||
<li><a href="/">취소</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@section scriptsHeader{
|
||||
@Html.Partial("./Partial/ScriptPost")
|
||||
}
|
||||
</form>
|
||||
<script>
|
||||
|
||||
$(function () {
|
||||
initCapsLockWarning('', '#capslock-warning');
|
||||
initializePasswordToggle('#up1, #up2');
|
||||
|
||||
$('#up1, #up2').on('keyup', function () {
|
||||
const password = $('#up1').val();
|
||||
const confirmPassword = $('#up2').val();
|
||||
const messageElement = $('#password-match-warning');
|
||||
|
||||
if (password.length >= 8 && confirmPassword && password !== confirmPassword) {
|
||||
messageElement.html('<strong style="color: red;">비밀번호가 일치하지 않습니다.</strong>');
|
||||
} else {
|
||||
messageElement.html('');
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
@*/**
|
||||
* 비밀번호 변경 유효성 검사 및 서버 요청 함수
|
||||
* if/else if 구조를 사용하여 return 없이 각 유효성 검사를 순차적으로 진행
|
||||
* 1. 입력 값 공백 여부 확인
|
||||
* 2. 비밀번호 복잡도 규칙 확인
|
||||
* 3. 연속된 문자/숫자 반복 확인
|
||||
* 4. 비밀번호와 비밀번호 확인 값 일치 여부 확인
|
||||
*/*@
|
||||
function fnPasswordChange() {
|
||||
try {
|
||||
var up1 = $.trim($('#up1').val());
|
||||
var up2 = $.trim($('#up2').val());
|
||||
var passwordRegex = /^(?=.*[a-zA-Z])(?=.*\d)(?=.*[\W_]).{8,}$/;
|
||||
var repeatRegex = /(.)\1\1/;
|
||||
|
||||
if (up1 === "" || up2 === "") {
|
||||
msg('비밀번호를 입력해주세요.');
|
||||
$('#up1').focus();
|
||||
} else if (!passwordRegex.test(up1)) {
|
||||
msg('비밀번호는 8자 이상이며, 영문/숫자/특수기호를 모두 포함해야 합니다.');
|
||||
$('#up1').focus();
|
||||
} else if (repeatRegex.test(up1)) {
|
||||
msg('연속으로 3번 이상 반복되는 문자/숫자를 사용할 수 없습니다.');
|
||||
$('#up1').focus();
|
||||
} else if (up1 !== up2) {
|
||||
msg('비밀번호 확인이 일치하지 않습니다.');
|
||||
$('#up2').focus();
|
||||
} else {
|
||||
// param
|
||||
const formData = new URLSearchParams();
|
||||
formData.append('userid', document.getElementById('userid').value);
|
||||
formData.append('password', up2);
|
||||
formData.append('__RequestVerificationToken', document.querySelector('input[name="__RequestVerificationToken"]').value);
|
||||
|
||||
fetch("/FOCommon/UserChangePassword", {
|
||||
method: "POST",
|
||||
body: formData
|
||||
})
|
||||
.then(response => {
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP error! status: ${response.status}`);
|
||||
}
|
||||
return response.json();
|
||||
})
|
||||
.then(data => {
|
||||
console.log('서버로부터 받은 전체 응답:', data);
|
||||
|
||||
if (data.success) {
|
||||
confirmCustom(
|
||||
"비밀번호가 변경 되었습니다.",
|
||||
[
|
||||
{
|
||||
text: '확인',
|
||||
callback: function () {
|
||||
window.location.href = "/";
|
||||
}
|
||||
}
|
||||
],
|
||||
{ top: '30%' }
|
||||
);
|
||||
} else {
|
||||
msg(data.message);
|
||||
console.log('실패 코드 (from server): ' + data.data);
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
msg("서버와 통신 중 오류가 발생했습니다. 잠시 후 다시 시도해주세요.");
|
||||
console.error("통신에러 : ", error);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
} catch (e) {
|
||||
msg("오류가 발생했습니다");
|
||||
console.error("AJAX Error: ", e.message);
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
}
|
||||
else
|
||||
{ // 인증결과가 없는 회원의 확인창을 띄울 빈 껍데기
|
||||
<style>
|
||||
.idpwBtn2 {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 100vh;
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
</style>
|
||||
<div class="lgnForm" style="max-width: 500px; margin: 0 auto; text-align: center;">
|
||||
<p class="idpwTxt">
|
||||
<span>새롭게 사용할 비밀번호를 입력해주세요.</span>
|
||||
</p>
|
||||
<ul class="lgnInput">
|
||||
<li><input type="password" placeholder="비밀번호(8자 이상, 영문/숫자/특수기호 포함)" readonly="readonly" /></li>
|
||||
<li><input type="password" placeholder="비밀번호 확인(동일한 비밀번호 입력)" readonly="readonly" /></li>
|
||||
</ul>
|
||||
<ul class="idpwBtn2">
|
||||
<li><a href="/">취소</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
$(function () {
|
||||
confirmCustom(
|
||||
"입력하신 정보에 맞는 회원이 없습니다.<br/>새로 회원가입을 진행해주세요.",
|
||||
[
|
||||
{
|
||||
text: '회원가입 바로가기',
|
||||
callback: function () {
|
||||
window.location.href = '/Account/JoinIdVeri';
|
||||
}
|
||||
},
|
||||
{
|
||||
text: '확인',
|
||||
callback: function () {
|
||||
window.location.href = '/Account/FindIDPW';
|
||||
|
||||
}
|
||||
}
|
||||
],
|
||||
{ top: '30%' }
|
||||
);
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
}
|
||||
|
|
@ -190,7 +190,7 @@
|
|||
<p class="subTxt">
|
||||
1. <span class="subTxt">동영상강의 진도율 90% 이상</span><br />
|
||||
2. <span class="subTxt">과제물 제출(표지 제외 A4용지 2장 이상 분량)</span><br />
|
||||
3. <span class="subTxt">시험평가 60점 이상 득점</span><span style="color:red">(집체교육 당일 평가 응시)</span><br /><br />
|
||||
3. <span class="subTxt">시험평가 60점 이상 득점</span>@*<span style="color:red">(집체교육 당일 평가 응시)</span>*@<br /><br />
|
||||
|
||||
<span class="subTxt red">※ 위 3가지 조건 모두 만족하셔야 수료가 가능합니다.</span><br />
|
||||
</p>
|
||||
|
|
|
|||
|
|
@ -241,7 +241,7 @@
|
|||
|
||||
<input type="hidden" name="LGD_BUYER" id="LGD_BUYER" value="@Model.User.username">
|
||||
<input type="hidden" name="LGD_PRODUCTINFO" id="LGD_PRODUCTINFO" value="@(Model.CM.cname.Replace(",", " "))">
|
||||
<input type="hidden" name="LGD_BUYEREMAIL" id="LGD_BUYEREMAIL" value="@Model.User.email">
|
||||
<input type="hidden" name="LGD_BUYEREMAIL" id="LGD_BUYEREMAIL" value="">@*Model.User.email*@
|
||||
<!-- Xpay 결제 end -->
|
||||
</form>
|
||||
@section scriptsHeader{
|
||||
|
|
|
|||
|
|
@ -1,6 +1,16 @@
|
|||
@model NP.Model.VMCourse
|
||||
@{
|
||||
|
||||
var host = Request.Url.Host;
|
||||
|
||||
// 개발과 로컬일 때 스마트검색 결과의 검색영역 보임 처리
|
||||
bool isDevSite = (host == "www.ynicte.com" || host == "ynicte.nptc.kr");
|
||||
string firstSchBoxDisplayStyle = isDevSite ? "" : "display:none;";
|
||||
|
||||
}
|
||||
|
||||
<div class="container">
|
||||
<div class="schBox" style="display:none;">
|
||||
<div class="schBox" style="@firstSchBoxDisplayStyle">
|
||||
<form id="smartSearchForm" method="post">
|
||||
<input type="hidden" name="cmno" id="cmno" />
|
||||
<input type="hidden" id="cmino" name="CM.cmino" />
|
||||
|
|
@ -8,14 +18,17 @@
|
|||
<input type="hidden" name="stringval" id="stringval" value="@Model.stringval" />
|
||||
@if (Model.stringval == "0" || Model.stringval == null || Model.stringval == "")
|
||||
{
|
||||
if (isDevSite)
|
||||
{
|
||||
<h3>개발서버 테스트용</h3>
|
||||
}
|
||||
<ul class="schTab">
|
||||
<li id="liTab1" class="current" style="font-size:16pt;"><a href="#">건설기술진흥법교육</a></li>
|
||||
<li id="liTab2" style="font-size:16pt;display:none;"><a href="#">기타교육</a></li>
|
||||
<li id="liTab1" class="current" style="font-size:16pt;"><a href="javascript:void(0);">건설기술진흥법교육</a></li>
|
||||
<li id="liTab2" style="font-size:16pt;display:none;"><a href="javascript:void(0);">기타교육</a></li>
|
||||
</ul>
|
||||
<ul class="schCont">
|
||||
<li>
|
||||
<select name="stringval2" id="stringval2">
|
||||
@*<option value="0" @(Model.stringval2 == "0" ? "selected" : "")>온라인교육</option>*@
|
||||
<option value="1" @(Model.stringval2 == "1" ? "selected" : "")>교육장교육</option>
|
||||
<option value="2" @(Model.stringval2 == "2" ? "selected" : "")>온라인교육</option>
|
||||
</select>
|
||||
|
|
@ -38,19 +51,18 @@
|
|||
<li>
|
||||
@Html.DropDownListFor(x => x.stringval7, new SelectList(Model.ComCodes6, "ccode", "cname"), "-선택-")
|
||||
</li>
|
||||
<li><a href="#" id="btnSearch">검색</a></li>
|
||||
<li><a href="javascript:void(0);" id="btnSearch">검색</a></li>
|
||||
</ul>
|
||||
}
|
||||
else if (Model.stringval == "1")
|
||||
{
|
||||
<ul class="schTab">
|
||||
<li id="liTab1"><a href="#" style="font-size:16pt;">건설기술진흥법교육</a></li>
|
||||
<li id="liTab2" class="current" style="font-size:16pt;"><a href="#">기타교육</a></li>
|
||||
<li id="liTab1"><a href="javascript:void(0);" style="font-size:16pt;">건설기술진흥법교육</a></li>
|
||||
<li id="liTab2" class="current" style="font-size:16pt;"><a href="javascript:void(0);">기타교육</a></li>
|
||||
</ul>
|
||||
<ul class="schCont">
|
||||
<li>
|
||||
<select name="stringval2" id="stringval2">
|
||||
@*<option value="0" @(Model.stringval2 == "0" ? "selected" : "")>온라인교육</option>*@
|
||||
<option value="1" @(Model.stringval2 == "1" ? "selected" : "")>교육장교육</option>
|
||||
<option value="2" @(Model.stringval2 == "2" ? "selected" : "")>온라인교육</option>
|
||||
</select>
|
||||
|
|
@ -58,30 +70,15 @@
|
|||
<li>
|
||||
@Html.DropDownListFor(x => x.stringval3, new SelectList(Model.CMsEtc, "cgno", "cgname"), "-선택-")
|
||||
</li>
|
||||
<li><a href="#" id="btnSearch">검색</a></li>
|
||||
<li><a href="javascript:void(0);" id="btnSearch">검색</a></li>
|
||||
</ul>
|
||||
}
|
||||
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@*<p class="subDsc mt15">본인의 기술인 정보를 모르실 경우에는 아래링크를 클릭하여 정보 확인 후 교육신청을 하여 주시기 바랍니다.</p>
|
||||
<ul class="smtLnk">
|
||||
<li><a href="https://homenet.kocea.or.kr:1443" target="_blank">한국건설기술인협회 이동</a></li>
|
||||
<li><a href="https://www.kira.or.kr" target="_blank">건축사협회 이동</a></li>
|
||||
</ul>*@
|
||||
|
||||
@*<div id="subTab01" class="tabCont" style="display: block;">
|
||||
<h4 class="clsTitle" style="margin-top:7px">아래의 교육과정 중 원하시는 교육을 선택하여 주세요.</h4>
|
||||
<h4 class="clsTitle" style="color: #0070C0; margin-top: 7px">아래의 모든 교육과정들이 이전단계에서 입력하신 교육목적으로 인정가능 합니다.</h4>
|
||||
</div>*@
|
||||
<br />
|
||||
@if (Model.stringval2 == "2" && Model.stringval4 == "32")
|
||||
{
|
||||
@*<p class='subDsc' style='color:red;'>※ 온라인 교육은 입금완료시 교육이 바로 시작되며 동영상 시청이 가능합니다.</p>*@
|
||||
<p class='' style="font-weight: bold; font-size: 14pt;">※ 현재 신청중인 교육은 <span style='color: red; font-weight: bold'>집체교육 참석없이</span> 교육종료일까지 수료조건을 만족하시면 됩니다.</p>
|
||||
|
||||
}
|
||||
else if (Model.stringval2 == "2")
|
||||
{
|
||||
|
|
@ -98,10 +95,11 @@
|
|||
<li>
|
||||
<div class="smtlCont">
|
||||
<h5>
|
||||
<em style="font-size:15px" class="@(item.cshape == 0 ? "org" : item.cshape == 1 ? "grn" : "blu")">
|
||||
@(item.cshape == 0 ? "온라인" : item.cshape == 1 ? "교육장교육" : "온라인교육")
|
||||
</em>
|
||||
@*<span style="font-size:22px">@($"{item.cname} | {item.studytime}시간과정 | 교육비{item.infee}")</span></h5>*@
|
||||
@if (!string.IsNullOrEmpty(item.cgcode))
|
||||
{ // cg코드를 <span style='color:green; font-weight:bold;'>[전문분야교육]</span> 형태로 변경해주는 Helper 메서드 사용
|
||||
@Html.Raw(this.GetCgLabel(item.cgcode))
|
||||
}
|
||||
|
||||
@{
|
||||
string strTitle = string.Format("{0} | {1}시간과정 |<span class='red' style='vertical-align: initial;'> {2}과정 </span>", item.cname, item.studytime, (item.isrefund == 1 ? "환급" : "비환급"), item.infee.ToString("#,0"));
|
||||
}
|
||||
|
|
@ -111,27 +109,13 @@
|
|||
<li>
|
||||
<a onclick="javascript: openIntro(@item.cmno);" class="smtlChkBtn smtlChk01" style="right:130px;">강좌소개</a>
|
||||
</li>
|
||||
@*<li style="font-size:18px;"><a href="#" class="smtlBtn02" id="btnIntro" onclick="javascript: openIntro(@item.cmno)">강좌소개</a></li>*@
|
||||
<li>
|
||||
<a href="#" class="smtlBtn02 smtlChkBtn" id=@("btnSelect" + item.cmno) onclick="javascript: getCmInning(@item.cshape, @item.cmno)">교육신청</a>
|
||||
<a href="javascript:void(0);" class="smtlBtn02 smtlChkBtn" id=@("btnSelect" + item.cmno) onclick="javascript: getCmInning(@item.cshape, @item.cmno)">교육신청</a>
|
||||
<input type="hidden" id="typeedu" name="typeedu" value="@item.typeedu">
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@*20220728 교육장정보 감추기*@
|
||||
@*@if (item.cshape == 1 || (item.cshape == 2 && item.scdtype == 0)) //오프라인 경우 교육장 정보를 보여준다.
|
||||
{
|
||||
<ul class="smtlTab" id="divPlace_@item.cmno" style="display:none">
|
||||
<li class="current" onclick="javascript:setStudyplace(this,@item.cmno);"><a href="javascript:getSubCm(item.cshape, @item.cmno);">전체</a></li>
|
||||
@foreach (var t in Model.ComCodes)
|
||||
{
|
||||
<li onclick="javascript:setStudyplace(this,@item.cmno);"><a href="javascript:getCmInning(item.cshape, @item.cmno, @t.ccode);">@t.cname 교육장</a></li>
|
||||
<li onclick="javascript:setStudyplace(this,@item.cmno);"><a href="javascript:getSubCm(1, @item.cmno, @t.ccode);">@t.cname 교육장</a></li>
|
||||
}
|
||||
</ul>
|
||||
}*@
|
||||
|
||||
@*20220728온라인/오프라인 안내*@
|
||||
<div id="divInfo_@item.cmno" class="smtlChk">
|
||||
</div>
|
||||
|
|
@ -170,7 +154,7 @@
|
|||
<div class="clsPopWrap">
|
||||
<div class="clsPopTitle">
|
||||
<h5>강좌소개</h5>
|
||||
<a href="#" onclick="javascript: closeIntro();"></a>
|
||||
<a href="javascript:void(0);" onclick="javascript: closeIntro();"></a>
|
||||
</div>
|
||||
<div class="clsPopCont">
|
||||
<ul class="smtList pop">
|
||||
|
|
@ -181,14 +165,14 @@
|
|||
<p>교육분류 : <span id="spnCmKind"></span></p>
|
||||
<p>인정시간 : <span class="sky"><span id="spnCmStudyHour"></span></span>시간</p>
|
||||
<p style="display:none;" id="completeStd">수료기준 : 진도 <span id="spnCmAttend"></span>% 이상, 시험 <span id="spnCmFinal"></span>점 이상, 과제 <span id="spnCmSubject"></span>점 이상<span id="spnisoffabs"></span></p>
|
||||
@*@if (Model.CM.cshape != 1)
|
||||
{
|
||||
<p id="completeStd">수료기준 : 진도 <span id="spnCmAttend"></span>% 이상, 시험 <span id="spnCmFinal"></span>점 이상, 과제 <span id="spnCmSubject"></span>점 이상</p>
|
||||
}*@
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<dl class="fairIntro spnCmEduname" style="">
|
||||
<dt>교육종류</dt>
|
||||
<dd><span id="spnCmEduname"></span></dd>
|
||||
</dl>
|
||||
<dl class="fairIntro spnCmUsername" style="display:none;">
|
||||
<dt>강사정보</dt>
|
||||
<dd><span id="spnCmUsername"></span></dd>
|
||||
|
|
@ -225,9 +209,13 @@
|
|||
var _cmno;
|
||||
$(document).ready(function () {
|
||||
// 페이지 접근시 보이는 문구
|
||||
var isDevSite = @isDevSite.ToString().ToLower();
|
||||
|
||||
msg('<b style="color:red; font-size:28px;"> ※ 안 내 ※</b><br/><br/><b style="color:blue; font-size:24px;">현재 페이지의 모든 교육과정들이 이수하고자 하는 교육목적으로 인정가능 합니다.</b>');
|
||||
|
||||
$("#pageTitle h3").text("교육과정선택")
|
||||
|
||||
$("#pageTitle h3").text("교육과정선택");
|
||||
|
||||
$('#liTab1').click(function () {
|
||||
$.when(
|
||||
$("#stringval").val("0"),
|
||||
|
|
@ -240,6 +228,7 @@
|
|||
});
|
||||
|
||||
});
|
||||
|
||||
$('#liTab2').click(function () {
|
||||
$.when(
|
||||
$("#stringval").val("1"),
|
||||
|
|
@ -251,6 +240,7 @@
|
|||
$("#smartSearchForm").submit();
|
||||
});
|
||||
});
|
||||
|
||||
$('#btnSearch').click(function () {
|
||||
if ($("#liTab1").hasClass("current")) {
|
||||
$("#stringval").val("0");
|
||||
|
|
@ -266,6 +256,7 @@
|
|||
$("#stringval").change(function () {
|
||||
$("#smartSearchForm").submit();
|
||||
});
|
||||
|
||||
$("#stringval2").change(function () {
|
||||
$("#stringval3").val("");
|
||||
$("#stringval4").val("");
|
||||
|
|
@ -273,33 +264,39 @@
|
|||
$("#stringval6").val("");
|
||||
$("#smartSearchForm").submit();
|
||||
});
|
||||
|
||||
$("#stringval3").change(function () {
|
||||
$("#stringval4").val("");
|
||||
$("#stringval5").val("");
|
||||
$("#stringval6").val("");
|
||||
$("#smartSearchForm").submit();
|
||||
});
|
||||
|
||||
$("#stringval4").change(function () {
|
||||
$("#stringval5").val("");
|
||||
$("#stringval6").val("");
|
||||
$("#smartSearchForm").submit();
|
||||
});
|
||||
|
||||
$("#stringval5").change(function () {
|
||||
$("#stringval6").val("");
|
||||
$("#smartSearchForm").submit();
|
||||
});
|
||||
|
||||
$("#stringval6").change(function () {
|
||||
$("#smartSearchForm").submit();
|
||||
});
|
||||
});
|
||||
|
||||
function openIntro(cmno) {
|
||||
$(".spnCmEduname").hide();
|
||||
$(".spnCmUsername").hide();
|
||||
$(".spnCmIntroHtml").hide();
|
||||
$(".spnCmTargetHtml").hide();
|
||||
$(".spnCmGoalHtml").hide();
|
||||
$(".spnCmContentHtml").hide();
|
||||
$("#divIntro").show();
|
||||
|
||||
capp("/focommon/getcmuser", { cmno: cmno }, "renderCmNo");
|
||||
}
|
||||
|
||||
|
|
@ -309,17 +306,19 @@
|
|||
var typegrade = $("#stringval5").find("option:selected").text();
|
||||
var typejob = $("#stringval6").find("option:selected").text();
|
||||
var cmkind;
|
||||
|
||||
cmkind = typeman + " | " + typeedu + " | " + typegrade + " | " + typejob;
|
||||
|
||||
if ($("#stringval").val() == "1") {
|
||||
cmkind = $("#stringval3").find("option:selected").text();
|
||||
}
|
||||
|
||||
$.each(capResult.obj, function (i, d) {
|
||||
//20220729 온라인인경우 수료기준을 보여준다.
|
||||
if (@(Model.stringval2) == 1) {
|
||||
if (@(Model.stringval2 == null ? 0 : Convert.ToInt32(Model.stringval2)) == 1) {
|
||||
$("#completeStd").hide();
|
||||
}
|
||||
else if (@(Model.stringval2) == 2) {
|
||||
else if (@(Model.stringval2 == null ? 0 : Convert.ToInt32(Model.stringval2)) == 2) {
|
||||
$("#completeStd").show();
|
||||
}
|
||||
|
||||
|
|
@ -329,22 +328,57 @@
|
|||
$("#spnCmAttend").text(d.attendcut);
|
||||
$("#spnCmFinal").text(d.finalcut);
|
||||
$("#spnCmSubject").text(d.subjectcut);
|
||||
|
||||
if (d.username != null && d.username != "" && d.username != undefined) {
|
||||
$("#spnCmUsername").text(d.username);
|
||||
$(".spnCmUsername").show();
|
||||
}
|
||||
|
||||
if (d.cgcode != "101") {
|
||||
if (d.cgcode == "102") {
|
||||
$("#spnCmEduname").html("직무분야교육");
|
||||
CmEdunameChk = 1;
|
||||
}
|
||||
else if (d.cgcode == "103" || d.cgcode == "104") {
|
||||
$("#spnCmEduname").html("역량강화교육");
|
||||
CmEdunameChk = 1;
|
||||
}
|
||||
else if (d.cgcode == "105") {
|
||||
$("#spnCmEduname").html("전문분야교육");
|
||||
CmEdunameChk = 1;
|
||||
}
|
||||
else if (d.cgcode == "107") {
|
||||
$("#spnCmEduname").html("특성화교육");
|
||||
CmEdunameChk = 1;
|
||||
}
|
||||
else {
|
||||
CmEdunameChk = 0;
|
||||
}
|
||||
|
||||
if (CmEdunameChk == 1) {
|
||||
$(".spnCmEduname").show();
|
||||
}
|
||||
}
|
||||
else {
|
||||
$(".spnCmEduname").hide();
|
||||
}
|
||||
|
||||
|
||||
if (d.introhtml != null && d.introhtml != "" && d.introhtml != undefined) {
|
||||
$("#spnCmIntroHtml").html(d.introhtml);
|
||||
$(".spnCmIntroHtml").show();
|
||||
}
|
||||
|
||||
if (d.targethtml != null && d.targethtml != "" && d.targethtml != undefined) {
|
||||
$("#spnCmTargetHtml").html(d.targethtml);
|
||||
$(".spnCmTargetHtml").show();
|
||||
}
|
||||
|
||||
if (d.goalhtml != null && d.goalhtml != "" && d.goalhtml != undefined) {
|
||||
$("#spnCmGoalHtml").html(d.goalhtml);
|
||||
$(".spnCmGoalHtml").show();
|
||||
}
|
||||
|
||||
if (d.contenthtml != null && d.contenthtml != "" && d.contenthtml != undefined) {
|
||||
$("#spnCmContentHtml").html(d.contenthtml);
|
||||
$(".spnCmContentHtml").show();
|
||||
|
|
@ -377,9 +411,12 @@
|
|||
|
||||
if (btnSelect.html() == '교육신청') {
|
||||
btnSelect.html('닫기');
|
||||
//capp("/focommon/GetScdForMixEdu", { cmno: model.cm.cmno, month: $("#selMonth").val() }, "renderScd");
|
||||
//교육일정에 등록되어 있는 일정 중 선택이 가능한 첫번째 일정 선택으로 달 파라미터 제거
|
||||
capp("/focommon/GetScdForMixEdu", { cmno: cmno}, "renderScdInning(1," + cshape + "," + cmno + ")");
|
||||
|
||||
capp(
|
||||
"/focommon/GetScdForMixEdu",
|
||||
{ cmno: cmno },
|
||||
"renderScdInning(1," + cshape + "," + cmno + ")"
|
||||
);
|
||||
}
|
||||
else {
|
||||
divInfo.empty();
|
||||
|
|
@ -453,7 +490,6 @@
|
|||
data.studyplace = d.studyplace;
|
||||
data.studyplacename = d.studyplacename;
|
||||
|
||||
// 리스트에 생성된 객체 삽입
|
||||
studyPlaceTmp.push(data);
|
||||
}
|
||||
});
|
||||
|
|
@ -465,14 +501,15 @@
|
|||
}
|
||||
return acc;
|
||||
}, []);
|
||||
|
||||
// 오름차순
|
||||
studyPlace = studyPlace.sort(function (a, b) {
|
||||
return a.studyplace < b.studyplace ? -1 : a.studyplace > b.studyplace ? 1 : 0;
|
||||
});
|
||||
|
||||
if (studyPlace.length > 0) {
|
||||
/*strStudyPlaceTag = "<ul class='smtlTab' id='divPlace_" + cmno + "'>";*/
|
||||
strStudyPlaceTag = "<li class='current' onclick='javascript:setStudyplace(this," + cmno + ");'><a href='javascript:getCmInningPlace(" + cshape + ", " + cmno + ");' style='font-size:20px;'>전체</a></li>";
|
||||
|
||||
$.each(studyPlace, function (i, d) {
|
||||
strStudyPlaceTag += "<li onclick='javascript:setStudyplace(this," + cmno + ");'><a href='javascript:getCmInningPlace(" + cshape + ", " + cmno + ", " + d.studyplace + ");'style='font-size:20px;'>" + d.studyplacename + " 교육장</a></li>";
|
||||
});
|
||||
|
|
@ -494,7 +531,7 @@
|
|||
|
||||
var ulScd = $("#ulScd" + cmno);
|
||||
ulScd.empty();
|
||||
//var seq = 0;
|
||||
|
||||
if (capResult.obj.length < 1) {
|
||||
var li = $("<li />");
|
||||
if (cshape == 1) {
|
||||
|
|
@ -509,13 +546,12 @@
|
|||
var li = $("<li />");
|
||||
var pData = $("<p />");
|
||||
var aApplyClass = $("<a />", { "onclick": "javascript:applyClassEdu(" + d.cmno + ", " + d.pcmno + ", " + d.cmino + ", " + d.cmisno + ");" });
|
||||
/*var spanApplyClass = $("<span />", { "class": "smtlChkBtn smtlChk03", "style": "font-size:18px" });*/
|
||||
var spanApplyClass = $("<span />", { "class": "smtlChkBtn smtlChk03" }, { "style": "font-size:18px" });
|
||||
var spanApplyClassN = $("<span />", { "class": "smtlChkBtn smtlChk05" }, { "style": "font-size:18px" });
|
||||
var radioEduDay = "<input type='radio' style='display:none' name='rdoScds' value='" + d.cmisno + "' ";
|
||||
/*var radioEduDay = "<input type='radio' style='display:none' name='rdoScds' value='" + d.cmisno + "' onclick='javascript:applyClassEdu(" + d.cmno + ", " + d.pcmno + ", " + d.cmino + ", " + d.cmisno + ") + "' ";*/
|
||||
var strStudyPlacename = "";
|
||||
let comment = d.comment == null ? "" : "<span style='margin-left:12px'>(" + d.comment + ")</span>"
|
||||
|
||||
if (d.studyplace != null && d.studyplace != '' && d.studyplacename != null && d.studyplacename != '') {
|
||||
strStudyPlacename = '[' + d.studyplacename + '교육장]';
|
||||
}
|
||||
|
|
@ -524,54 +560,6 @@
|
|||
pData.html("<label>" + "<span style='color:blue'>" + strStudyPlacename + "</span>" + " <span style='color: red'>[종료] </label>" + radioEduDay + " disabled> <span style='color:gray'>" + d.scdInfoSummary + comment + "</span></span>");
|
||||
}
|
||||
else {
|
||||
/* by 인덕
|
||||
if (d.quota != 0) {
|
||||
// 제한인원 지정됨
|
||||
if (d.remainPeople <= 0) { // remainPeople(등록가능인원수) <= 0
|
||||
spanApplyClassN.text("수강신청");
|
||||
aApplyClass.append(spanApplyClassN);
|
||||
pData.html("<label>" + "<span style='color:blue'>" + strStudyPlacename + "</span>" + " <span style='color: red'>[접수마감] </span>" + radioEduDay + " disabled> <span style='color:gray'>" + d.scdInfoSummary + "</span></span>");
|
||||
pData.append(spanApplyClassN);
|
||||
}
|
||||
else {
|
||||
if (d.isselected == 1) { // isselected = (cm.setime('%Y%m%d',학습종료) == cminningscd.estart('%Y%m%d',교육시작) ? 1 : 0)
|
||||
spanApplyClass.text("수강신청");
|
||||
aApplyClass.append(spanApplyClass);
|
||||
pData.html("<label>" + "<span style='color:blue'>" + strStudyPlacename + "</span>" + " <span style='color: red'>[접수중] </span>" + radioEduDay + " checked> " + d.scdInfoSummary + "<span style='color: red;display:none;'> (" + d.remainPeople + "명 남음)</span></span>");
|
||||
pData.append(aApplyClass);
|
||||
}
|
||||
else {
|
||||
spanApplyClass.text("수강신청");
|
||||
aApplyClass.append(spanApplyClass);
|
||||
pData.html("<label>" + "<span style='color:blue'>" + strStudyPlacename + "</span>" + " <span style='color: red'>[접수중] </span>" + radioEduDay + "'> " + d.scdInfoSummary + "<span style='color: red;display:none;'> (" + d.remainPeople + "명 남음)</span> " + "</span>");
|
||||
pData.append(aApplyClass);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
// 제한인원 무제한
|
||||
if (d.remainPeople <= 0) { // remainPeople(등록가능인원수) <= 0
|
||||
spanApplyClassN.text("수강신청");
|
||||
aApplyClass.append(spanApplyClassN);
|
||||
pData.html("<label>" + "<span style='color:blue'>" + strStudyPlacename + "</span>" + " <span style='color: red'>[접수마감] </span>" + radioEduDay + " disabled> <span style='color:gray'>" + d.scdInfoSummary + "</span></span>");
|
||||
pData.append(spanApplyClassN);
|
||||
}
|
||||
else {
|
||||
if (d.isselected == 1) { // isselected = (cm.setime('%Y%m%d',학습종료) == cminningscd.estart('%Y%m%d',교육시작) ? 1 : 0)
|
||||
spanApplyClass.text("수강신청");
|
||||
aApplyClass.append(spanApplyClass);
|
||||
pData.html("<label>" + "<span style='color:blue'>" + strStudyPlacename + "</span>" + " " + radioEduDay + " checked> " + d.scdInfoSummary + "</label></label>");
|
||||
pData.append(spanApplyClass);
|
||||
}
|
||||
else {
|
||||
spanApplyClass.text("수강신청");
|
||||
aApplyClass.append(spanApplyClass);
|
||||
pData.html("<label>" + "<span style='color:blue'>" + strStudyPlacename + "</span>" + " " + radioEduDay + "'> " + d.scdInfoSummary + "</label></label>");
|
||||
pData.append(aApplyClass);
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
d.scdInfoSummary = (d.scdInfoSummary).replace("까지", "")
|
||||
if (d.remainPeople <= 0) { // remainPeople(등록가능인원수) <= 0
|
||||
spanApplyClassN.text("접수마감");
|
||||
|
|
@ -584,7 +572,7 @@
|
|||
console.log("교육신청")
|
||||
aApplyClass.append(spanApplyClass);
|
||||
if (d.quota != 0) {
|
||||
if (d.isselected == 1) { // isselected = (cm.setime('%Y%m%d',학습종료) == cminningscd.estart('%Y%m%d',교육시작) ? 1 : 0)
|
||||
if (d.isselected == 1) {
|
||||
// 사용안하는것 추측됨
|
||||
pData.html("<label>" + "<span style='color:blue'>" + strStudyPlacename + "</span>" + " <span style='color: red'>[접수중] </span>" + radioEduDay + " checked> " + d.scdInfoSummary + comment + "<span style='color: red;display:none;'> (" + d.remainPeople + "명 남음)</span></span>");
|
||||
pData.append(aApplyClass);
|
||||
|
|
@ -596,7 +584,7 @@
|
|||
}
|
||||
else {
|
||||
// 사용안하는것 추측됨
|
||||
if (d.isselected == 1) { // isselected = (cm.setime('%Y%m%d',학습종료) == cminningscd.estart('%Y%m%d',교육시작) ? 1 : 0)
|
||||
if (d.isselected == 1) {
|
||||
pData.html("<label>" + "<span style='color:blue'>" + strStudyPlacename + "</span>" + " " + radioEduDay + " checked> " + d.scdInfoSummary + comment + "</label></label>");
|
||||
pData.append(spanApplyClass);
|
||||
}
|
||||
|
|
@ -624,158 +612,10 @@
|
|||
}
|
||||
|
||||
if (issearchable) {
|
||||
//if (cshape == 1) {
|
||||
// $("#divPlace_" + cmno).show();
|
||||
//}
|
||||
//else {
|
||||
// $("#divPlace_" + cmno).hide();
|
||||
//}
|
||||
capp("/focommon/GetScdForMixEdu", { cmno: cmno, studyPlace: studyPlace}, "renderScdInning(0, " + cshape + "," + cmno + ")");
|
||||
}
|
||||
}
|
||||
|
||||
//20220729 교육장, 교육일정 정보 생성
|
||||
////function renderScdPlace(cshape, cmno, place) {
|
||||
//// let strTmp = "";
|
||||
//// let strStudyPlaceTag = "";
|
||||
|
||||
//// var divInfo = $("#divInfo_" + cmno);
|
||||
//// divInfo.empty();
|
||||
|
||||
//// var divPlace = $("#divPlace_" + cmno);
|
||||
//// divPlace.empty();
|
||||
|
||||
//// var divScd = $("#divScd" + cmno);
|
||||
//// divScd.empty();
|
||||
|
||||
//// //교육장 만들기
|
||||
//// if (capResult.obj.length > 0) {
|
||||
//// var studyPlaceTmp = new Array();
|
||||
|
||||
//// $.each(capResult.obj, function (i, d) {
|
||||
//// var data = new Object();
|
||||
//// if (d.studyplace != null) {
|
||||
//// data.studyplace = d.studyplace;
|
||||
//// data.studyplacename = d.studyplacename;
|
||||
|
||||
//// // 리스트에 생성된 객체 삽입
|
||||
//// studyPlaceTmp.push(data);
|
||||
//// }
|
||||
//// });
|
||||
|
||||
//// // 교육장소코드, 교육장소명 Distinct
|
||||
//// let studyPlace = studyPlaceTmp.reduce(function (acc, current) {
|
||||
//// if (acc.findIndex(({ studyplace }) => studyplace === current.studyplace) === -1) {
|
||||
//// acc.push(current);
|
||||
//// }
|
||||
//// return acc;
|
||||
//// }, []);
|
||||
//// // 오름차순
|
||||
//// studyPlace = studyPlace.sort(function (a, b) {
|
||||
//// return a.studyplace < b.studyplace ? -1 : a.studyplace > b.studyplace ? 1 : 0;
|
||||
//// });
|
||||
|
||||
//// if (studyPlace.length > 0) {
|
||||
//// /*strStudyPlaceTag = "<ul class='smtlTab' id='divPlace_" + cmno + "'>";*/
|
||||
//// strStudyPlaceTag = "<li class='current' onclick='javascript:setStudyplace(this," + cmno + ");'><a href='javascript:getCmInningPlace(" + cshape + ", " + cmno + ");'>전체</a></li>";
|
||||
//// $.each(studyPlace, function (i, d) {
|
||||
//// strStudyPlaceTag += "<li onclick='javascript:setStudyplace(this," + cmno + ");'><a href='javascript:getCmInningPlace(" + cshape + ", " + cmno + ", " + d.studyplace + ");'>" + d.studyplacename + " 교육장</a></li>";
|
||||
//// });
|
||||
//// }
|
||||
//// }
|
||||
|
||||
//// // 교육장소 생성하기
|
||||
//// if (strStudyPlaceTag != '') {
|
||||
//// divPlace.append(strStudyPlaceTag);
|
||||
//// divPlace.show();
|
||||
//// }
|
||||
|
||||
//// //강좌일정 태그 생성
|
||||
//// strTmp = "<ul id='ulScd" + cmno + "'></ul>";
|
||||
//// divScd.append(strTmp);
|
||||
|
||||
//// var ulScd = $("#ulScd" + cmno);
|
||||
//// ulScd.empty();
|
||||
//// //var seq = 0;
|
||||
//// if (capResult.obj.length < 1) {
|
||||
//// var li = $("<li />");
|
||||
//// li.append("<label> - 선택 가능한 교육종료일이 없습니다.</label>");
|
||||
//// ulScd.append(li);
|
||||
//// }
|
||||
|
||||
//// $.each(capResult.obj, function (i, d) {
|
||||
//// var li = $("<li />");
|
||||
//// var pData = $("<p />");
|
||||
//// var aApplyClass = $("<a />", { "onclick": "javascript:applyClassEdu(" + d.cmno + ", " + d.pcmno + ", " + d.cmino + ", " + d.cmisno + ");" });
|
||||
//// /*var spanApplyClass = $("<span />", { "class": "smtlChkBtn smtlChk03", "style": "font-size:18px" });*/
|
||||
//// var spanApplyClass = $("<span />", {"style": "font-size:18px" });
|
||||
//// alert(strStudyPlacename);
|
||||
//// var strStudyPlacename = "";
|
||||
//// if (d.studyplacename != '') {
|
||||
//// strStudyPlacename = '[' + d.studyplacename + ']';
|
||||
//// }
|
||||
|
||||
//// if (d.isEnd == true) {
|
||||
//// pData.html("<label>" + strStudyPlacename + " <label style='color: red'>[종료] </label>" + radioEduDay + " disabled> <span style='color:gray'>" + d.scdInfoSummary + "</span></label>");
|
||||
//// }
|
||||
//// else {
|
||||
//// if (d.quota != 0) {
|
||||
//// if (d.remainPeople <= 0) {
|
||||
//// pData.html("<label>" + strStudyPlacename + " <label style='color: red'>[접수마감] </label>" + radioEduDay + " disabled> <span style='color:gray'>" + d.scdInfoSummary + "</span></label>");
|
||||
//// }
|
||||
//// else {
|
||||
//// if (d.isselected == 1) {
|
||||
//// spanApplyClass.text("수강신청");
|
||||
//// aApplyClass.append(spanApplyClass);
|
||||
//// pData.html("<label>" + strStudyPlacename + " <label style='color: red'>[접수중] </label>" + radioEduDay + " checked> " + d.scdInfoSummary + "<label style='color: red;display:none;'> (" + d.remainPeople + "명 남음)</label></label>");
|
||||
|
||||
//// }
|
||||
//// else {
|
||||
//// spanApplyClass.text("수강신청");
|
||||
//// aApplyClass.append(spanApplyClass);
|
||||
//// pData.html("<label>" + strStudyPlacename + " <label style='color: red'>[접수중] </label>" + radioEduDay + "'> " + d.scdInfoSummary + "<label style='color: red;display:none;'> (" + d.remainPeople + "명 남음)</label> " + "</label>");
|
||||
//// pData.append(aApplyClass);
|
||||
//// }
|
||||
//// //if (seq == 0) {
|
||||
//// // li.append("<label>" + radioEduDay + " checked> " + d.scdInfoSummary + "<label style='color: red;display:none;'> (" + d.remainPeople + "명 남음)</label></label>");
|
||||
//// //}
|
||||
//// //else {
|
||||
//// // li.append("<label>" + radioEduDay + "'> " + d.scdInfoSummary + "<label style='color: red;display:none;'> (" + d.remainPeople + "명 남음)</label></label>");
|
||||
//// //}
|
||||
//// }
|
||||
//// }
|
||||
//// else {
|
||||
//// if (d.isselected == 1) {
|
||||
//// pData.html("<label>" + strStudyPlacename + " " + radioEduDay + " checked> " + d.scdInfoSummary + "</label></label>");
|
||||
//// }
|
||||
//// else {
|
||||
//// pData.html("<label>" + strStudyPlacename + " " + radioEduDay + "'> " + d.scdInfoSummary + "</label></label>");
|
||||
//// }
|
||||
//// //if (seq == 0) {
|
||||
//// // li.append("<label>" + radioEduDay + " checked> " + d.scdInfoSummary + "</label>");
|
||||
//// //}
|
||||
//// //else {
|
||||
//// // li.append("<label>" + radioEduDay + "'> " + d.scdInfoSummary + "</label>");
|
||||
//// //}
|
||||
//// }
|
||||
//// }
|
||||
|
||||
|
||||
//// //aApplyClass.append(spanApplyClass);
|
||||
//// //pData.append(aApplyClass);
|
||||
//// li.append(pData);
|
||||
//// //li.append(aApplyClass);
|
||||
//// ulScd.append(li);
|
||||
|
||||
//// //ulScd.append(li2);
|
||||
//// });
|
||||
//// //20220726
|
||||
//// //alert("model.cmisno" + model.cmisno);
|
||||
//// //if (model.cmisno != null) {
|
||||
//// // $("input:radio[name='rdoScds'][value='" + model.cmisno + "']").click();
|
||||
//// //}
|
||||
////}
|
||||
|
||||
//20220729 개발전
|
||||
function getSubCm(cshape, no, place) {
|
||||
var issearchable = false;
|
||||
|
|
@ -803,7 +643,6 @@
|
|||
var cmno = _cmno;
|
||||
var ulSubCm = $("#ulSubCm_" + cmno);
|
||||
ulSubCm.empty();
|
||||
//var applyClass = "<li><p class='subDsc' style='color:red;'>※ 입금완료시 교육이 바로 시작되며 동영상 시청이 가능합니다</p >※ 각 기수별 <span style='color:red;'>교육종료일을 꼭 확인하시고</span> 교육신청 부탁드립니다.</li>";
|
||||
$.each(capResult.obj, function (i, d) {
|
||||
var li = $("<li />");
|
||||
var p = $("<p />");
|
||||
|
|
@ -829,19 +668,15 @@
|
|||
}
|
||||
|
||||
if (d.cshape == 0) {
|
||||
//p.html("<label style='cursor:default; font-size:18px'>" + d.tseq + "기 | " + d.cname + " | <span style='" + ((d.retimeymd == "2099-12-31") ? 'display:none' : '') + "'><span class='gry'>" + d.ssrename + "</span></span><span class='red'> " + (d.retimeymd == "2099-12-31" ? "신청일로부터 " + d.studydays + "일 (" + d.studytime + " 시간)" : "(" + d.studytime + "시간)") + "</span> | <span class=red>" + bindComma(d.infee) + "원</span></label>");
|
||||
p.html("<label style='cursor:default; font-size:18px'>" + d.tseq + "기 | " + d.cname + " | <span style='" + ((d.retimeymd == "2099-12-31") ? 'display:none' : '') + "'><span class='gry'>" + d.ssrename + "</span></span><span class='red'> " + (d.retimeymd == "2099-12-31" ? "(" + d.studytime + " 시간)" : "(" + d.studytime + "시간)") + "</span> | <span class=red>" + bindComma(d.infee) + "원</span></label>");
|
||||
}
|
||||
else if (d.cshape == 1) {
|
||||
//p.html("<label style='cursor:default; font-size:18px'>" + d.tseq + "기 | <span class='blu'>[" + d.studyplacename + "교육장]</span> " + d.cname + " | <span style='" + ((d.retimeymd == "2099-12-31") ? 'display:none' : '') + "'><span class='gry'>" + d.ssrename + "</span></span><span class='red'> " + (d.retimeymd == "2099-12-31" ? "신청일로부터 " + d.studydays + "일 (" + d.studytime + " 시간)" : "("+d.ssretimeToDay +"일)") + "</span> | <span class=red>" +bindComma(d.infee)+"원</span></label>");
|
||||
p.html("<label style='cursor:default; font-size:18px'>" + d.tseq + "기 | <span class='blu'>[" + d.studyplacename + "교육장]</span> " + d.cname + " | <span style='" + ((d.retimeymd == "2099-12-31") ? 'display:none' : '') + "'><span class='gry'>" + d.ssrename + "</span></span><span class='red'> " + (d.retimeymd == "2099-12-31" ? "(" + d.studytime + " 시간)" : "("+d.ssretimeToDay +"일)") + "</span> | <span class=red>" +bindComma(d.infee)+"원</span></label>");
|
||||
}
|
||||
else if (d.cshape == 2) {
|
||||
//p.html("<label style='cursor:default; font-size:18px'>" + d.tseq + "기 | " + d.cname + " | <span style='" + ((d.retimeymd == "2099-12-31") ? 'display:none' : '') + "'><span class='gry'>" + d.ssrename + "</span></span><span class='red'> " + (d.retimeymd == "2099-12-31" ? "신청일로부터 " + d.studydays + "일 (" + d.studytime + " 시간)" : "(" + d.studytime + "시간)") + "</span> | <span class=red>" + bindComma(d.infee) + "원 ※ 집체교육 선택 필수</span></label>");
|
||||
//p.html("<label style='cursor:default; font-size:18px'>" + d.tseq + "기 | " + d.cname + " | <span style='" + ((d.retimeymd == "2099-12-31") ? 'display:none' : '') + "'><span class='red'>교육종료일(" + d.setimeymd + "까지)</span></span><span> " + (d.retimeymd == "2099-12-31" ? "신청일로부터 " + d.studydays + "일 (" + d.studytime + " 시간)" : "(" + d.studytime + "시간)") + "</span></label>");
|
||||
//p.html("<label style='cursor:default; font-size:18px'>" + d.cname + "<span style='" + ((d.retimeymd == "2099-12-31") ? 'display:none' : '') + "'></span><span> " + (d.retimeymd == "2099-12-31" ? "신청일로부터 " + d.studydays + "일 (" + d.studytime + " 시간)" : "(" + d.studytime + "시간)") + "</span></label>");
|
||||
p.html("<label style='cursor:default; font-size:18px'>" + d.cname + "<span style='" + ((d.retimeymd == "2099-12-31") ? 'display:none' : '') + "'></span><span> " + (d.retimeymd == "2099-12-31" ? "(" + d.studytime + " 시간)" : "(" + d.studytime + "시간)") + "</span></label>");
|
||||
}
|
||||
|
||||
spanIntro.text("강좌소개");
|
||||
li.append(p);
|
||||
a.append(spanIntro);
|
||||
|
|
@ -859,23 +694,30 @@
|
|||
}
|
||||
}
|
||||
|
||||
@*/** 수강신청 버튼 클릭 */*@
|
||||
function applyClassEdu(cmno, pcmno, cmino, cmisno) {
|
||||
//수강신청
|
||||
var uno = ('@ViewBag.SSUserNo' != '') ? parseInt(@ViewBag.SSUserNo) : 0;
|
||||
|
||||
if (uno > 0) {
|
||||
|
||||
if (@ViewBag.SSUserNo > 0) {
|
||||
////var cmino = $("#cmino");
|
||||
$("#cmino").val(cmino);
|
||||
///*var cmisno = $("#cmisno");*/
|
||||
$("#cmisno").val(cmisno);
|
||||
|
||||
checkLectCompleteEdu(cmno, "@Model.stringval3", "@Model.stringval4", "@Model.stringval5", $("#pcmno_" + pcmno + "_cgcode").val(), pcmno, "chkLect");
|
||||
checkLectCompleteEdu(cmno, "@Model.stringval3", "@Model.stringval4", "@Model.stringval5", "@Model.stringval6", $("#pcmno_" + pcmno + "_cgcode").val(), pcmno, "chkLectNew");
|
||||
}
|
||||
else {
|
||||
//msg("로그인 후 신청 할 수 있습니다.");
|
||||
let searchRslt = $("#smartSearchForm").serialize()
|
||||
searchRslt += "&stringval17=" + cmno + "&stringval18=" + pcmno + "&stringval19=" + cmino + "&stringval20=" + cmisno;
|
||||
searchRslt += "&stringval21=" + $("#pcmno_" + pcmno + "_cgcode").val()
|
||||
location.href = "/Account/index?" + searchRslt;
|
||||
|
||||
let searchRslt = $("#smartSearchForm").serialize();
|
||||
let url = `/Account/index?${searchRslt}
|
||||
&stringval17=${cmno}
|
||||
&stringval18=${pcmno}
|
||||
&stringval19=${cmino}
|
||||
&stringval20=${cmisno}
|
||||
&stringval21=${$("#pcmno_" + pcmno + "_cgcode").val()}`;
|
||||
|
||||
url = url.replace(/\s/g, '');
|
||||
location.href = url;
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
@ -884,7 +726,7 @@
|
|||
function applyClass(cmno, pcmno) {
|
||||
//수강신청
|
||||
if (@ViewBag.SSUserNo > 0) {
|
||||
checkLectComplete(cmno, "@Model.stringval3", "@Model.stringval4", "@Model.stringval5", $("#pcmno_" + pcmno + "_cgcode").val(), pcmno, "chkLect");
|
||||
checkLectComplete(cmno, "@Model.stringval3", "@Model.stringval4", "@Model.stringval5", "@Model.stringval6", $("#pcmno_" + pcmno + "_cgcode").val(), pcmno, "chkLect");
|
||||
}
|
||||
else {
|
||||
msg("로그인 후 신청 할 수 있습니다.");
|
||||
|
|
@ -896,21 +738,91 @@
|
|||
let _cgcode = 0;
|
||||
let _grade = 0;
|
||||
|
||||
function checkLectCompleteEdu(cmno, man, edu, grade, cgcode, pcmno) {
|
||||
function checkLectCompleteEdu(cmno, man, edu, grade, job, cgcode, pcmno) {
|
||||
_cmno = cmno;
|
||||
_edu = edu;
|
||||
_cgcode = cgcode;
|
||||
_grade = grade;
|
||||
|
||||
capp("/focommon/GetCheckLectIs", { cmno: cmno, man: man, edu: edu, grade: grade, cgcode: cgcode, pcmno: pcmno }, "chkLect"); // 1
|
||||
|
||||
//capp("/focommon/GetCheckLectIs",
|
||||
// {
|
||||
// cmno: cmno,
|
||||
// man: man,
|
||||
// edu: edu,
|
||||
// grade: grade,
|
||||
// job1: job,
|
||||
// cgcode: cgcode,
|
||||
// pcmno: pcmno
|
||||
// }, "chkLect"); // 1
|
||||
capp("/focommon/GetCheckLectIs",
|
||||
{
|
||||
cmno: cmno,
|
||||
man: man,
|
||||
edu: edu,
|
||||
grade: grade,
|
||||
job1: job,
|
||||
cgcode: cgcode,
|
||||
pcmno: pcmno
|
||||
}, "chkLectNew"); // 1
|
||||
}
|
||||
|
||||
//20220729 개발전
|
||||
function checkLectComplete(cmno, man, edu, grade, cgcode, pcmno) {
|
||||
_cmno = cmno;
|
||||
capp("/focommon/GetCheckLectIs", { cmno: cmno, man: man, edu: edu, grade: grade, cgcode: cgcode, pcmno: pcmno }, "chkLect"); // 1
|
||||
@*capResult.code == code;*@
|
||||
capp(
|
||||
"/focommon/GetCheckLectIs",
|
||||
{
|
||||
cmno: cmno,
|
||||
man: man,
|
||||
edu: edu,
|
||||
grade: grade,
|
||||
cgcode: cgcode,
|
||||
pcmno: pcmno
|
||||
},
|
||||
"chkLect"
|
||||
); // 1
|
||||
}
|
||||
|
||||
//
|
||||
function chkLectNew() {
|
||||
if (capResult.code == 1000) {
|
||||
var resultCode = capResult.obj;
|
||||
|
||||
if (resultCode == 0) {
|
||||
checkLectIsComplete(_cmno);
|
||||
}
|
||||
else {
|
||||
switch (resultCode) {
|
||||
case -2:
|
||||
msg("<span style='font-size: 15pt;'>이미 동일한 내용의 교육을 신청,수강 또는 수료한 과정입니다.</span>");
|
||||
break;
|
||||
case -10:
|
||||
case -20:
|
||||
case -30:
|
||||
msg(`
|
||||
<span style='text-align: center;margin: 0 auto;display: inline-block;font-size: 15pt;line-height: 22pt;'>
|
||||
이 교육은 아래의 사유 중 하나에 해당되어 신청되지 않는 교육입니다.<br><br>
|
||||
<p class='hello' style=' color: red; text-align:left; font-size:13pt;'>
|
||||
- 선택한 교육목적으로 인정되지 않는 경우<br>
|
||||
- 이미 신청 또는 수료한 교육과 함께 수료하면 인정이 되지 않는 경우
|
||||
</p><br>
|
||||
따라서 현재 화면에 나와있는 다른 교육으로 신청하여 주시기 바랍니다.<br><br>
|
||||
<span style='display: block; margin - left: calc(50 % - 77px);'>
|
||||
문의 : 1544 - 7660
|
||||
</span>
|
||||
</span>
|
||||
`);
|
||||
break;
|
||||
case -100:
|
||||
msg("<span style='font-size: 15pt;'>잠시 후 다시 시도해주세요.</span>");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -918,6 +830,7 @@
|
|||
function chkLect() { //2 --> 4
|
||||
let chk = @(DateTime.Now > DateTime.Parse("2030-01-02 00:00") ? "true" : "false"); // ### ty 2024년 추가건 // chk == 1 ? 2024년 표시 문구 나오기
|
||||
let chkMsg = "";
|
||||
|
||||
if (capResult.code == 1000) {
|
||||
if (capResult.obj == 0) {
|
||||
|
||||
|
|
@ -932,10 +845,11 @@
|
|||
}
|
||||
|
||||
if (chk && chkMsg != "") {
|
||||
msg(chkMsg)
|
||||
msg(chkMsg);
|
||||
|
||||
$(".mainokbutton").on("click", function () {
|
||||
checkLectIsComplete(_cmno);
|
||||
})
|
||||
});
|
||||
}
|
||||
else {
|
||||
checkLectIsComplete(_cmno);
|
||||
|
|
@ -943,7 +857,6 @@
|
|||
}
|
||||
else if (capResult.obj == 1) {
|
||||
if (chk) {
|
||||
|
||||
msg("<span style='text-align: center;margin: 0 auto;display: inline-block;font-size: 15pt;line-height: 22pt;'>" +
|
||||
"<p class='hello' style=' color: red; text-align:left; font-size:15pt;'>" +
|
||||
" 이미 같은 교육목적과 등급으로 신청 또는 이수한 내역이 있습니다." +
|
||||
|
|
@ -957,15 +870,13 @@
|
|||
}
|
||||
}
|
||||
else {
|
||||
@* msg("<sapn style='font-size: 15pt;'>이미 수강/수료한 과정입니다.</span>");*@
|
||||
msg("<sapn style='font-size: 15pt;'>이미 동일한 내용의 교육을 신청,수강 또는 수료한 과정입니다.</span>");
|
||||
msg("<span style='font-size: 15pt;'>이미 동일한 내용의 교육을 신청,수강 또는 수료한 과정입니다.</span>");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function checkLectIsComplete(cmno) { //3
|
||||
|
||||
capp("/focommon/GetCheckLectIsComplete", { cmno: cmno }, "check");
|
||||
}
|
||||
|
||||
|
|
@ -973,7 +884,6 @@
|
|||
var cnt = capResult.obj;
|
||||
if (cnt > 0) {
|
||||
// 강좌를 만들 수 있지만 이미 생성된 조건?
|
||||
@* msg("이미 수강/수료한 과정입니다.");*@
|
||||
msg("<sapn style='font-size: 15pt;'>이미 동일한 내용의 교육을 신청,수강 또는 수료한 과정입니다.</span>");
|
||||
return;
|
||||
}
|
||||
|
|
@ -982,4 +892,37 @@
|
|||
$("#smartSearchForm").attr("action", "/Course/ApplyEdu").submit();
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
@functions {
|
||||
|
||||
/// <summary>
|
||||
/// 과정 코드(cgcode)에 따라 사용자에게 보여줄 라벨(span 태그 형태)을 반환.
|
||||
/// </summary>
|
||||
/// <param name="code">과정 코드 (예: "107", "105" 등)</param>
|
||||
/// <returns>
|
||||
/// HTML span 태그 문자열.
|
||||
/// 예: <span style='color:blue; font-weight:bold;'>[역량강화교육]</span>
|
||||
/// </returns>
|
||||
string GetCgLabel(string code)
|
||||
{
|
||||
switch (code)
|
||||
{
|
||||
case "101":
|
||||
return "<span style='color:blue; font-weight:bold; font-size:22px' data-code=" + code +">[기본교육]</span>";
|
||||
case "107":
|
||||
return "<span style='color:blue; font-weight:bold; font-size:22px' data-code=" + code +">[특성화교육]</span>";
|
||||
case "103":
|
||||
case "104":
|
||||
return "<span style='color:green; font-weight:bold; font-size:22px' data-code=" + code +">[역량강화교육]</span>";
|
||||
case "105":
|
||||
return "<span style='color:#FF6600; font-weight:bold; font-size:22px' data-code=" + code +">[전문분야교육]</span>";
|
||||
case "102":
|
||||
return "<span style='color:purple; font-weight:bold; font-size:22px' data-code=" + code +">[직무분야교육]</span>";
|
||||
default:
|
||||
return "<span style='font-weight:bold; font-size:22px' data-code=" + code +">[" + code + "]</span>";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -19,7 +19,6 @@
|
|||
<ul class="schCont">
|
||||
<li>
|
||||
<select name="stringval2" id="stringval2">
|
||||
@*<option value="0" @(Model.stringval2 == "0" ? "selected" : "")>온라인교육</option>*@
|
||||
<option value="1" @(Model.stringval2 == "1" ? "selected" : "")>교육장교육</option>
|
||||
<option value="2" @(Model.stringval2 == "2" ? "selected" : "")>온라인교육</option>
|
||||
</select>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,10 @@
|
|||
@model NP.Model.VMHome
|
||||
|
||||
<head>
|
||||
<style>
|
||||
<style type="text/css">
|
||||
.mainTab li:after {
|
||||
content: none;
|
||||
}
|
||||
|
||||
.mainTop * {
|
||||
font-family: 'Noto Sans KR', sans-serif;
|
||||
font-size: 11pt;
|
||||
|
|
@ -10,6 +13,330 @@
|
|||
color: #fff;
|
||||
line-height: 1.6em;
|
||||
}
|
||||
|
||||
/* --- 교육신청 주의사항 팝업 CSS 시작 --- */
|
||||
|
||||
.edu-popup-container, .edu-popup-container button, .edu-popup-container input {
|
||||
font-family: 'Malgun Gothic', '맑은 고딕', Dotum, '돋움', sans-serif;
|
||||
}
|
||||
|
||||
#edu-modal-overlay {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: rgba(0, 0, 0, 0.6);
|
||||
display: none;
|
||||
z-index: 9999;
|
||||
opacity: 0;
|
||||
transition: opacity 0.3s ease;
|
||||
}
|
||||
|
||||
#edu-layer-popup {
|
||||
position: fixed;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%) scale(0.95);
|
||||
width: 90%;
|
||||
max-width: 780px;
|
||||
background-color: #fff;
|
||||
border-radius: 12px;
|
||||
display: none;
|
||||
z-index: 10000;
|
||||
box-shadow: 0 5px 20px rgba(0,0,0,0.2);
|
||||
box-sizing: border-box;
|
||||
overflow: hidden;
|
||||
opacity: 0;
|
||||
transition: opacity 0.3s ease, transform 0.3s ease;
|
||||
}
|
||||
|
||||
#edu-modal-overlay.active, #edu-layer-popup.active {
|
||||
display: block;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
#edu-layer-popup.active {
|
||||
transform: translate(-50%, -50%) scale(1);
|
||||
}
|
||||
|
||||
.edu-popup-header {
|
||||
background-color: #2c3e50;
|
||||
color: #fff;
|
||||
padding: 18px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.edu-popup-header h2 {
|
||||
margin: 0;
|
||||
font-size: 24px;
|
||||
font-weight: 700;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.edu-popup-content {
|
||||
padding: 35px 50px;
|
||||
line-height: 1.8;
|
||||
}
|
||||
|
||||
.edu-popup-content h3 {
|
||||
color: #d90429;
|
||||
text-align: center;
|
||||
font-size: 26px;
|
||||
font-weight: 700;
|
||||
margin-top: 0;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
/* ★[수정] 중앙 정렬을 위한 컨테이너 */
|
||||
.edu-popup-content .text-center {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* ★[수정] 리스트 기본 스타일 제거 */
|
||||
.edu-popup-content .text-center ol {
|
||||
padding-left: 0;
|
||||
list-style-type: none;
|
||||
display: inline-block; /* 컨텐츠 크기에 맞게 중앙 정렬 */
|
||||
text-align: left; /* 리스트 내용은 다시 좌측 정렬 */
|
||||
}
|
||||
|
||||
/* ★[수정] 리스트 아이템 스타일 (글자 크기 증가 및 중앙 정렬) */
|
||||
.edu-popup-content .text-center li {
|
||||
text-align: center; /* 텍스트 중앙 정렬 */
|
||||
font-size: 20px; /* 글자 크기 증가 */
|
||||
font-weight: 500;
|
||||
line-height: 1.7;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
/* ★[수정] 중요(빨간색) 텍스트 스타일 */
|
||||
.edu-popup-content .text-center > .text-red {
|
||||
font-size: 20px; /* 글자 크기 증가 */
|
||||
font-weight: 600;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.text-red {
|
||||
color: #d90429;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.text-blue {
|
||||
color: #1A5276;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.edu-details-btn {
|
||||
display: block;
|
||||
width: 220px;
|
||||
margin: 30px auto;
|
||||
padding: 10px;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
color: #555;
|
||||
background-color: #fff;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 5px;
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
transition: background-color 0.2s, border-color 0.2s;
|
||||
}
|
||||
|
||||
.edu-details-btn:hover {
|
||||
background-color: #f5f5f5;
|
||||
border-color: #bbb;
|
||||
}
|
||||
|
||||
.edu-popup-content .info {
|
||||
font-size: 17px;
|
||||
margin-top: 30px;
|
||||
color: #333;
|
||||
font-weight: 600;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.edu-consent-check {
|
||||
margin-top: 35px;
|
||||
text-align: center;
|
||||
font-size: 17px;
|
||||
}
|
||||
|
||||
.edu-consent-check input[type="checkbox"] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.edu-consent-check label {
|
||||
position: relative;
|
||||
padding-left: 35px;
|
||||
cursor: pointer;
|
||||
line-height: 28px;
|
||||
display: inline-block;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.edu-consent-check label::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 1px; /* [수정] 수직 정렬 */
|
||||
width: 26px;
|
||||
height: 26px;
|
||||
border: 2px solid #aaa;
|
||||
background-color: #fff;
|
||||
border-radius: 5px;
|
||||
transition: all 0.2s;
|
||||
}
|
||||
|
||||
.edu-consent-check input[type="checkbox"]:checked + label::before {
|
||||
background-color: #2c3e50;
|
||||
border-color: #2c3e50;
|
||||
}
|
||||
|
||||
.edu-consent-check label::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
left: 9px;
|
||||
top: 5px; /* [수정] 수직 정렬 */
|
||||
width: 8px;
|
||||
height: 15px;
|
||||
border: solid white;
|
||||
border-width: 0 3px 3px 0;
|
||||
transform: rotate(45deg);
|
||||
opacity: 0;
|
||||
transition: opacity 0.2s;
|
||||
}
|
||||
|
||||
.edu-consent-check input[type="checkbox"]:checked + label::after {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.edu-popup-footer {
|
||||
text-align: center;
|
||||
padding: 25px;
|
||||
background-color: #f9f9f9;
|
||||
border-top: 1px solid #eee;
|
||||
}
|
||||
|
||||
.edu-popup-footer button {
|
||||
width: 130px;
|
||||
padding: 12px 0;
|
||||
font-size: 19px;
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
border: 1px solid #aaa;
|
||||
background-color: #fff;
|
||||
margin: 0 10px;
|
||||
border-radius: 6px;
|
||||
transition: all 0.2s;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
#edu-confirm-btn {
|
||||
background-color: #2c3e50;
|
||||
color: #fff;
|
||||
border-color: #2c3e50;
|
||||
}
|
||||
|
||||
#edu-confirm-btn:hover {
|
||||
background-color: #34495e;
|
||||
}
|
||||
|
||||
#edu-cancel-btn:hover {
|
||||
background-color: #f0f0f0;
|
||||
}
|
||||
|
||||
@@media (max-width: 768px) {
|
||||
.edu-popup-header h2 {
|
||||
font-size: 22px;
|
||||
}
|
||||
|
||||
.edu-popup-content {
|
||||
padding: 30px 35px;
|
||||
}
|
||||
|
||||
.edu-popup-content h3 {
|
||||
font-size: 22px;
|
||||
}
|
||||
|
||||
.edu-popup-content .text-center li, .edu-popup-content .text-center > .text-red {
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.edu-popup-content .info, .edu-consent-check {
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.edu-popup-footer button {
|
||||
width: 120px;
|
||||
font-size: 17px;
|
||||
}
|
||||
}
|
||||
|
||||
@@media (max-width: 480px) {
|
||||
.edu-popup-header h2 {
|
||||
font-size: 19px;
|
||||
}
|
||||
|
||||
.edu-popup-content {
|
||||
padding: 25px 20px;
|
||||
}
|
||||
|
||||
.edu-popup-content h3 {
|
||||
font-size: 19px;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
.edu-popup-content .text-center li, .edu-popup-content .text-center > .text-red {
|
||||
font-size: 16px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.edu-details-btn {
|
||||
width: 180px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.edu-popup-content .info {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.edu-consent-check {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.edu-consent-check label {
|
||||
padding-left: 30px;
|
||||
}
|
||||
|
||||
.edu-consent-check label::before {
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
}
|
||||
|
||||
.edu-consent-check label::after {
|
||||
left: 8px;
|
||||
top: 4px;
|
||||
width: 6px;
|
||||
height: 12px;
|
||||
}
|
||||
|
||||
.edu-popup-footer {
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.edu-popup-footer button {
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
padding: 13px 0;
|
||||
}
|
||||
|
||||
.edu-popup-footer button:first-child {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
/* --- 교육신청 주의사항 팝업 CSS 끝 --- */
|
||||
</style>
|
||||
</head>
|
||||
@section main{
|
||||
|
|
@ -71,12 +398,6 @@
|
|||
<div>
|
||||
<div>
|
||||
<ul>
|
||||
@*<li><a href="javascript:schIpt('1', '0', '온라인교육');">온라인교육</a></li>*@
|
||||
@*20220726 교육장교육 선택 활성화*@
|
||||
@*@if ((ViewBag.SSUserNo == 120) && (Request.Url.Authority == "www.ynicte.com" || Request.Url.Authority == "ynicte.nptc.kr"))
|
||||
{
|
||||
<li><a href="javascript:schIpt('1', '1', '교육장교육');">교육장교육</a></li>
|
||||
}*@
|
||||
<li><a href="javascript:schIpt('1', '1', '교육장교육');">교육장교육</a></li>
|
||||
<li><a href="javascript:schIpt('1', '2', '온라인교육');">온라인교육</a></li>
|
||||
</ul>
|
||||
|
|
@ -197,7 +518,6 @@
|
|||
<div>
|
||||
<div>
|
||||
<ul>
|
||||
@*<li><a href="javascript:schIpt('1', '0', '온라인교육');">온라인교육</a></li>*@
|
||||
<li><a href="javascript:schIpt('1', '1', '교육장교육');">교육장교육</a></li>
|
||||
<li><a href="javascript:schIpt('1', '2', '혼합교육');">온라인교육</a></li>
|
||||
</ul>
|
||||
|
|
@ -243,25 +563,67 @@
|
|||
</div>
|
||||
</form>
|
||||
}
|
||||
|
||||
|
||||
<div class="edu-popup-container">
|
||||
<div id="edu-modal-overlay"></div>
|
||||
<div id="edu-layer-popup">
|
||||
<header class="edu-popup-header">
|
||||
<h2>교육신청 전 필수 확인</h2>
|
||||
</header>
|
||||
<main class="edu-popup-content">
|
||||
<h3>건설사업관리(계속교육) 신청 시 주의사항</h3>
|
||||
<div class="text-center">
|
||||
<ol>
|
||||
<li>
|
||||
1. 건설사업관리의 현재 등급이 고급 또는 특급인 경우<br />
|
||||
계속교육 이수 시 반드시<br />
|
||||
전체 교육이수시간 중 <span class="text-red">역량강화 교육은 1개 과정만 이수하여야 합니다.</span>
|
||||
</li>
|
||||
<li>
|
||||
2. 역량강화 교육은 교육신청 시 교육과정명 앞에 [역량강화교육]으로 표기되어 있습니다.
|
||||
</li>
|
||||
</ol>
|
||||
<p class="text-red">※ (중요) 역량강화교육으로만 2개 과정 이수 불가</p>
|
||||
</div>
|
||||
<button class="edu-details-btn" onclick="goLink();">상세안내 보러가기</button>
|
||||
|
||||
<p class="info">※ 해당 내용에 대하여 문의하실 분은 교육원으로 연락 주시면 안내 드리겠습니다.</p>
|
||||
|
||||
<div class="edu-consent-check">
|
||||
<input type="checkbox" id="edu-consent">
|
||||
<label for="edu-consent">
|
||||
<span class="text-blue">상기 내용을 이해하였으며 잘못 이수된 교육은 인정되지 않음을 확인하였습니다.</span>
|
||||
</label>
|
||||
</div>
|
||||
</main>
|
||||
<footer class="edu-popup-footer">
|
||||
<button id="edu-confirm-btn" onclick="educationConfirmSubmit();">확인</button>
|
||||
<button id="edu-cancel-btn" onclick="closeEducationPopup();">취소</button>
|
||||
</footer>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<textarea style="display: none;" id="texthide01">@ViewBag.POPUPS</textarea>
|
||||
|
||||
@section scriptsHeader{
|
||||
<script src="~/js/jquery-ui.min.js"></script>
|
||||
<style>
|
||||
.mainTab li:after {
|
||||
content: none;
|
||||
}
|
||||
</style>
|
||||
}
|
||||
@section scripts{
|
||||
<script>
|
||||
|
||||
$(window).on("load", function () {
|
||||
$(".iframebox").each(function () {
|
||||
document.getElementById("ifrpop" + $(this).attr("ifrnum")).contentWindow.document.body.style.overflow = "hidden";
|
||||
});
|
||||
});
|
||||
|
||||
$(document).ready(function () {
|
||||
initSearch();
|
||||
|
||||
//showEducationPopup();
|
||||
|
||||
|
||||
if (ismobile() || window) {
|
||||
if ($("#texthide01").val() != '') {
|
||||
$.each($($("#texthide01").val().split('nptechpopuplistseparator')), function (i, p) {
|
||||
|
|
@ -272,10 +634,8 @@
|
|||
"<a class=\"closepopa\" href=\"#\" onclick=\"hidepop();$('#popbox" + p[0] + "').remove();\">✖</a></div>" +
|
||||
"<div class=\"iframebox\" ifrnum=\""+p[0]+"\"><iframe id=\"ifrpop" + p[0] + "\" style=\"border: 0 none; height: " + (getint(p[6]) - 4) + "px; width: " + (getint(p[5])) + "px;\"></iframe></div>" +
|
||||
"<div class=\"iframeclosebox\"></div></div></div>");
|
||||
//"<div class=\"iframeclosebox\"><a class=\"\" style=\"border: 1px solid #ddd; padding: 5px 15px;\" onclick=\"hide7('popbox" + p[0] + "', " + p[0] + ")\"> 7일간 숨기기</a></div></div></div>");
|
||||
$("#ifrpop" + p[0]).attr("src", "/Home/Popup?pno=" + p[0]);
|
||||
$("#popbox" + p[0]).show();
|
||||
//$("html").css("overflow", "hidden");
|
||||
}
|
||||
});
|
||||
$(".poptitlebox").on("click", function () {
|
||||
|
|
@ -288,11 +648,7 @@
|
|||
$(".draggablethis").draggable();
|
||||
}
|
||||
|
||||
// 영남 요청으로 클릭 이벤트 제거 2024.03.14(pms:4484)
|
||||
//$('#liTab1').click(function () {
|
||||
// $("#stringval").val("0");
|
||||
// $("#indexForm").submit();
|
||||
//});
|
||||
|
||||
$('#liTab2').click(function () {
|
||||
$("#stringval").val("1");
|
||||
$("#indexForm").submit();
|
||||
|
|
@ -304,17 +660,13 @@
|
|||
})
|
||||
|
||||
$(".msBtn").click(function () {
|
||||
@*// // 2024.08.07 로그인제한 해제
|
||||
if (@ViewBag.SSUserNo <= 0) {
|
||||
msg("로그인 후 진행 할 수 있습니다.", null, null, null, "location.href='" + '/Account/Index' + "'");
|
||||
return;
|
||||
}*@
|
||||
if ($("#liTab1").hasClass("current")) {
|
||||
$("#stringval").val("0");
|
||||
}
|
||||
else if ($("#liTab2").hasClass("current")) {
|
||||
$("#stringval").val("1");
|
||||
}
|
||||
|
||||
$("#stringval2").val($("#sch1").val());
|
||||
$("#stringval3").val($("#sch2").val());
|
||||
$("#stringval4").val($("#sch3").val());
|
||||
|
|
@ -337,13 +689,28 @@
|
|||
}
|
||||
|
||||
if ($("#msSel2 > span").text() != "품질관리기술인" && $("#sch6").val() == "") {
|
||||
@*msg("전문분야을 입력하세요.");*@ $("#stringval2").focus(); return;
|
||||
$("#stringval2").focus(); return;
|
||||
}
|
||||
|
||||
|
||||
// 2025-09 (스마트검색 개발 건 미사용으로 주석처리, 필요시 복원)
|
||||
// 건설사업관리(계속교육) 신청 시 주의사항
|
||||
if ($("#stringval3").val() == "28"
|
||||
&& $("#stringval4").val() == "31"
|
||||
&& ($("#stringval5").val() == "38" || $("#stringval5").val() == "39")
|
||||
) {
|
||||
showEducationPopup();
|
||||
} else {
|
||||
$("#indexForm").attr("action", "/Course/SmartSearch").submit();
|
||||
}
|
||||
|
||||
|
||||
//$("#indexForm").attr("action", "/Course/SmartSearch").submit();
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
$('.msSel span').click(function () {
|
||||
if ($(this).parent().is('.active')) {
|
||||
if ($(this).is('.on')) {
|
||||
|
|
@ -364,17 +731,18 @@
|
|||
msg('교육목적을 선택해주세요.');
|
||||
} else if ($(this).parent().attr('id') == 'msSel5') {
|
||||
msg('등급을 선택해주세요.');
|
||||
} @*else if ($(this).parent().attr('id') == 'msSel6' ) {
|
||||
msg('전문분야를 선택해주세요.');
|
||||
}*@
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if (@Model.isalreadyreq == 1) {
|
||||
msg("이미 신청된 강좌입니다. 메인화면으로 이동되었습니다.");
|
||||
}
|
||||
});
|
||||
function schIpt(num, code, name) {
|
||||
|
||||
});
|
||||
|
||||
|
||||
function schIpt(num, code, name) {
|
||||
|
||||
switch (num) {
|
||||
case '1':
|
||||
|
|
@ -453,7 +821,7 @@
|
|||
$("#liedu08").css("display", "none") // 계속교육 막기
|
||||
$("#liedu09").css("display", "none") // 필수교육 막기
|
||||
|
||||
@if(DateTime.Now > DateTime.Parse("2030-01-02 00:00")) // ### ty 2024년 추가건
|
||||
@*@if(DateTime.Now > DateTime.Parse("2030-01-02 00:00")) // ### ty 2024년 추가건
|
||||
{
|
||||
@:if (num => 2) {
|
||||
@: if ($("#sch1").val() == "1" && $("#sch2").val() == "28") {
|
||||
|
|
@ -477,8 +845,7 @@
|
|||
@: $("#liedu09").css("display", "none") // 일반계속교육 막기
|
||||
@: }
|
||||
@:}
|
||||
}
|
||||
|
||||
}*@
|
||||
|
||||
|
||||
if (num == 2) {
|
||||
|
|
@ -571,7 +938,6 @@
|
|||
}
|
||||
|
||||
if ($("#msSel6").attr("class").indexOf("disable") > -1) {
|
||||
//해당 div도 같이 숨김 --> javascript:schIpt('5', '57', '품질관리');">품질관리
|
||||
$("#msSel6 > div").css("display", "none");
|
||||
}
|
||||
else {
|
||||
|
|
@ -610,8 +976,6 @@
|
|||
|
||||
if (num == 5) {
|
||||
$("#msSel6 li").css("display", "none")
|
||||
//msSel5Code = code;
|
||||
|
||||
$("[id='lijob" + code + "']").css("display", "")
|
||||
$("#msSel6 span").text("전문분야")
|
||||
$("#msSel6").removeClass("active").addClass("disable")
|
||||
|
|
@ -656,11 +1020,6 @@
|
|||
$("#ligrade3").hide();
|
||||
$("#ligrade4").hide();
|
||||
|
||||
//$("#liedu03").hide();
|
||||
//$("#liedu04").hide();
|
||||
//$("#liedu05").hide();
|
||||
//$("#liedu06").hide();
|
||||
//$("#liedu07").hide();
|
||||
}
|
||||
else {
|
||||
$("#liedu2").show();
|
||||
|
|
@ -737,7 +1096,7 @@
|
|||
|
||||
});
|
||||
}
|
||||
}// else if (num == 5 &&
|
||||
}
|
||||
}
|
||||
|
||||
function initSearch() {
|
||||
|
|
@ -768,19 +1127,44 @@
|
|||
location.href = url;
|
||||
}
|
||||
}
|
||||
|
||||
var _hide7;
|
||||
function hide7(id, pno) {
|
||||
_hide7 = id;
|
||||
capp("/focommon/hidepop", { pno: pno }, "cbhide7");
|
||||
}
|
||||
|
||||
function cbhide7() {
|
||||
hidepop();
|
||||
$("#" + _hide7).remove();
|
||||
}
|
||||
|
||||
function hidepop() {
|
||||
if ($(".popupitem").length == 1) {
|
||||
$("html").css("overflow", "auto");
|
||||
}
|
||||
}
|
||||
|
||||
/** 교육신청 전 필수 확인 찹업 */
|
||||
function showEducationPopup() {
|
||||
$('#edu-modal-overlay, #edu-layer-popup').addClass('active');
|
||||
}
|
||||
|
||||
function closeEducationPopup() {
|
||||
$('#edu-modal-overlay, #edu-layer-popup').removeClass('active');
|
||||
}
|
||||
|
||||
function educationConfirmSubmit() {
|
||||
if ($('#edu-consent').is(':checked')) {
|
||||
$("#indexForm").attr("action", "/Course/SmartSearch").submit();
|
||||
}
|
||||
else {
|
||||
msg("내용을 확인하고 동의란에 체크해주세요.");
|
||||
}
|
||||
}
|
||||
|
||||
function goLink() {
|
||||
window.open('https://www.cte.or.kr/Board/View?BNo=6781&opno=&scc=&pagenum=1&menupageno=88&pmenupageno=24');
|
||||
}
|
||||
</script>
|
||||
}
|
||||
|
|
@ -15,9 +15,7 @@
|
|||
<head>
|
||||
<script type="text/javascript" src="/js/naveridlogin_js_sdk_2.0.0.js"></script>
|
||||
<script type="text/javascript" src="/js/kakao.js"></script>
|
||||
|
||||
<style type="text/css">
|
||||
/** 회원탈퇴 관련 css */
|
||||
<style>
|
||||
.mpgpop_base {
|
||||
display: none;
|
||||
justify-content: center;
|
||||
|
|
@ -105,8 +103,39 @@
|
|||
line-height: 1.6;
|
||||
font-size: 0.95rem;
|
||||
}
|
||||
</style>
|
||||
|
||||
/** 알림 팝업 버튼 스타일 (mpgpop_ 접두사 적용) */
|
||||
|
||||
.mpgpop_btn_base {
|
||||
display: block;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
border: 1px solid #999;
|
||||
border-radius: 4px;
|
||||
background-color: #fff;
|
||||
color: #333;
|
||||
cursor: pointer;
|
||||
transition: background-color 0.2s ease;
|
||||
}
|
||||
|
||||
/* 마우스를 올렸을 때의 효과 */
|
||||
.mpgpop_btn_base:hover {
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
/* '회원가입 바로가기' 버튼 전용 스타일 */
|
||||
.mpgpop_btn_signup {
|
||||
width: 220px;
|
||||
padding: 12px 0;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* '확인' 버튼 전용 스타일 */
|
||||
.mpgpop_btn_confirm {
|
||||
width: 120px;
|
||||
padding: 10px 0;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<form id="mform" method="post" enctype="multipart/form-data">
|
||||
<div id="naverIdLogin" style="display:none"></div>
|
||||
|
|
|
|||
|
|
@ -43,6 +43,10 @@
|
|||
<div id="bglayer" style="display:none;"></div>
|
||||
<div id="layermessage"><div></div><a href="#" class="mainokbutton" onclick="javascript:hidelayermsg();">확인</a></div>
|
||||
<div id="bgprogress">...</div>
|
||||
<div id="customConfirmBox" style="display: none;">
|
||||
<div id="customConfirmBox-msg"></div>
|
||||
<div id="customConfirmBox-buttons"></div>
|
||||
</div>
|
||||
<div id="confirmbox"><div id="confirmboxmsg">dddd</div><div class="confirmbtnbox"><a href="#" class="btn btn1 confirmokbutton" onclick="confirmok();" style="color:white !important">예</a><a href="#" class="btn btn0 confirmokbutton" onclick="confirmtoggle();" style="color:white !important">아니오</a></div></div>
|
||||
<script>
|
||||
var _ismain = 1;
|
||||
|
|
|
|||
|
|
@ -143,6 +143,62 @@
|
|||
white-space: nowrap;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
|
||||
/* 팝업 전체 배경 및 위치 */
|
||||
#customConfirmBox {
|
||||
position: fixed;
|
||||
line-height: 20px;
|
||||
right: 5px;
|
||||
z-index: 10001;
|
||||
font-weight: bold;
|
||||
border-radius: 5px;
|
||||
display: none;
|
||||
top: 30%;
|
||||
left: 20%;
|
||||
width: 60%;
|
||||
text-align: center;
|
||||
height: auto;
|
||||
bottom: auto;
|
||||
padding: 30px;
|
||||
opacity: 0.9;
|
||||
background-color: #fefefe;
|
||||
color: #333;
|
||||
border: 1px solid #ddd;
|
||||
word-break: break-all;
|
||||
}
|
||||
/* 메시지 텍스트 영역 */
|
||||
#customConfirmBox-msg {
|
||||
}
|
||||
/* 버튼들을 감싸는 영역 */
|
||||
#customConfirmBox-buttons {
|
||||
}
|
||||
#customConfirmBox-buttons button {
|
||||
margin: 0 auto;
|
||||
display: block;
|
||||
min-width: 110px;
|
||||
width: auto;
|
||||
padding: 0 20px;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
text-align: center;
|
||||
background: #002C5D;
|
||||
color: #fff;
|
||||
font-size: 10pt;
|
||||
font-weight: 300;
|
||||
border-radius: 15px;
|
||||
border: none;
|
||||
}
|
||||
|
||||
#customConfirmBox-buttons button:first-child {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
#customConfirmBox-buttons button:not(:first-child) {
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
|
||||
.btn0 {background-color: #002c5d; padding: 7px 30px;}
|
||||
.btn1 {background-color: #002c5d; padding: 7px 40px;}
|
||||
.btn:hover{background-color: #144d89; color: yellow;background-image: url(/img/repute_tail.png); background-position: 10px center; background-repeat: no-repeat; background-size: 20px;}
|
||||
|
|
|
|||
|
|
@ -23,12 +23,23 @@ input[type="password"]::-ms-reveal {
|
|||
}
|
||||
|
||||
/* 기본 상태 (보이는 눈 아이콘) */
|
||||
#togglePassword {
|
||||
background-image: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23888"%3E%3Cpath d="M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/%3E%3C/svg%3E');
|
||||
}
|
||||
/*#togglePassword {
|
||||
background-image: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"%3E%3Cpath d="M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.44-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L21.73 22 20.46 23.27 3.27 6 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z"/%3E%3C/svg%3E');
|
||||
}*/
|
||||
|
||||
#togglePassword {
|
||||
/* 슬래시(stroke) 색을 눈알(fill) 색과 동일하게 #888로 변경 */
|
||||
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3C!-- 눈 부분 (회색) --%3E%3Cpath fill='%23888' d='M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.44-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l-2.9-2.9c-.6.3-1.28.44-2.01.44-2.76 0-5-2.24-5-5 0-.72.15-1.4.44-2.01L7.53 9.8C6.2 10.3 5.06 11.08 4.2 12z'/%3E%3C!-- 동공 부분 (회색) --%3E%3Cpath fill='%23888' d='M12 9c1.66 0 3 1.34 3 3 0 .22-.03.44-.08.65l1.55 1.55c.67-.33 1.41-.53 2.2-.53-2.76 0-5 2.24-5 5 0-.79.2-1.53.53-2.2l-1.55-1.55c.05-.21.08-.43.08-.65 0-1.66-1.34-3-3-3z'/%3E%3C!-- 슬래시 부분 (회색) --%3E%3Cpath stroke='%23888' stroke-width='1.5' d='M4.27 3.27L20.73 19.73'/%3E%3C/svg%3E");
|
||||
/* 기타 스타일 */
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
cursor: pointer;
|
||||
border: none;
|
||||
background-color: transparent;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
#togglePassword.is-toggled {
|
||||
background-image: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23888"%3E%3Cpath d="M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.44-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L21.73 22 20.46 23.27 3.27 6 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z"/%3E%3C/svg%3E');
|
||||
background-image: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23888"%3E%3Cpath d="M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/%3E%3C/svg%3E');
|
||||
}
|
||||
|
||||
.lgnForm li {
|
||||
|
|
@ -119,3 +130,27 @@ input[type="password"]::-ms-reveal {
|
|||
.lgnChk input[type="checkbox"]:checked + label::after {
|
||||
opacity: 1; /* 보이게 처리 */
|
||||
}
|
||||
|
||||
/* 알림 상자 기본 스타일 */
|
||||
.notice-box-red {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
background-color: #f8d7da;
|
||||
border-left: 5px solid #dc3545;
|
||||
padding: 15px 20px;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
/* 알림 상자 안의 아이콘 스타일 */
|
||||
.notice-box-red .icon {
|
||||
fill: #dc3545;
|
||||
min-width: 24px;
|
||||
margin-right: 15px;
|
||||
}
|
||||
|
||||
/* 알림 상자 안의 p 태그 스타일 */
|
||||
.notice-box-red p {
|
||||
margin: 0;
|
||||
color: #721c24;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
|
@ -6781,7 +6781,7 @@ html.lock, body.lock {
|
|||
font-size: 14pt;
|
||||
|
||||
border: none; /* 테두리 제거 */
|
||||
border-radius: 8px; /* 둥근 모서리 처리 */
|
||||
border-radius: 12px; /* 둥근 모서리 처리 */
|
||||
text-decoration: none; /* a 태그의 밑줄 제거 */
|
||||
cursor: pointer; /* 마우스 오버 시 손가락 모양 커서 */
|
||||
font-weight: bold; /* 폰트 약간 두껍게 */
|
||||
|
|
@ -10981,10 +10981,20 @@ span.org {
|
|||
clear: both;
|
||||
}
|
||||
|
||||
.jnSel > div { /*float: left;*/
|
||||
width: 33.3333%;
|
||||
.jnSel > div {
|
||||
/* float: left; */
|
||||
width: calc(33.3333% - 3px);
|
||||
padding: 0 30px;
|
||||
display: inline-block;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.jnSel > div:nth-of-type(1) {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.jnSel > div:last-child {
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
.jnsCont {
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 2.1 KiB |
186
FO/js/site.js
186
FO/js/site.js
|
|
@ -1394,6 +1394,9 @@ function isRepeatedString(str) {
|
|||
}
|
||||
|
||||
|
||||
var _confirmokcb;
|
||||
var _confirmokcbcancel;
|
||||
|
||||
/**
|
||||
* 확인(Confirm) 상자를 토글(표시/숨김)하고, 사용자의 응답에 따라 특정 콜백 함수를 실행합니다.
|
||||
* 이 함수는 일반적으로 사용자에게 확인 메시지를 보여주고 "예" 또는 "아니오"와 같은 선택을 요구할 때 사용됩니다.
|
||||
|
|
@ -1453,8 +1456,6 @@ function confirmtoggle(b, m, cb, cbcancel, top) {
|
|||
}
|
||||
}
|
||||
|
||||
var _confirmokcb;
|
||||
var _confirmokcbcancel;
|
||||
function confirmok() {
|
||||
$("#confirmbox").hide();
|
||||
if (_confirmokcb != "" &&
|
||||
|
|
@ -1466,6 +1467,70 @@ function confirmok() {
|
|||
}
|
||||
eval(_confirmokcb);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 사용자 정의 버튼을 포함하는 확인(Confirm) 상자를 표시.
|
||||
* 이 함수는 다양한 버튼 텍스트와 각각의 콜백 함수를 동적으로 생성하여 사용자에게 선택지를 제공.
|
||||
*
|
||||
* @param {string} message - 확인 상자에 표시될 메시지 내용.
|
||||
* @param {Array<Object>} buttons - 버튼 구성을 위한 객체 배열. 각 객체는 'text'와 'callback' 속성을 포함해야 함.
|
||||
* @param {string} buttons[].text - 버튼에 표시될 텍스트.
|
||||
* @param {function} buttons[].callback - 버튼 클릭 시 실행될 콜백 함수.
|
||||
* @param {Object} [options] - 추가 옵션 객체 (선택 사항).
|
||||
* @param {string} [options.top] - 확인 상자의 수직('top') 위치를 지정하는 CSS 값 (예: "100px", "20%").
|
||||
*/
|
||||
/**
|
||||
* 사용자 정의 버튼을 포함하는 확인(Confirm) 상자를 표시.
|
||||
* (id가 "customConfirmBox"인 DOM 요소를 사용하도록 수정됨)
|
||||
*
|
||||
* @param {string} message - 확인 상자에 표시될 메시지 내용.
|
||||
* @param {Array<Object>} buttons - 버튼 구성을 위한 객체 배열.
|
||||
* @param {Object} [options] - 추가 옵션 객체 (선택 사항).
|
||||
*/
|
||||
function confirmCustom(message, buttons, options) {
|
||||
// 옵션 기본값 설정
|
||||
options = options || {};
|
||||
buttons = buttons || [];
|
||||
|
||||
const confirmBox = $("#customConfirmBox");
|
||||
const messageBox = $("#customConfirmBox-msg");
|
||||
const buttonContainer = $("#customConfirmBox-buttons");
|
||||
|
||||
|
||||
// 1. 메시지 설정
|
||||
messageBox.html(message);
|
||||
|
||||
// 2. 기존 버튼 모두 제거
|
||||
buttonContainer.empty();
|
||||
|
||||
// 3. 버튼 배열을 순회하며 동적으로 버튼 생성
|
||||
buttons.forEach(function (btnInfo) {
|
||||
const button = $("<button type='button'></button>");
|
||||
button.text(btnInfo.text);
|
||||
button.on("click", function () {
|
||||
confirmBox.hide();
|
||||
bglayer(false);
|
||||
|
||||
if (typeof btnInfo.callback === 'function') {
|
||||
btnInfo.callback();
|
||||
}
|
||||
});
|
||||
buttonContainer.append(button);
|
||||
});
|
||||
|
||||
// 4. 위치 옵션 처리
|
||||
if (options.top) {
|
||||
confirmBox.css("top", options.top);
|
||||
} else {
|
||||
confirmBox.css("top", '');
|
||||
}
|
||||
|
||||
// 5. 확인 상자 표시
|
||||
bglayer();
|
||||
confirmBox.show();
|
||||
}
|
||||
|
||||
window.ismobile = function () {
|
||||
var check = false;
|
||||
(function (a) { if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) check = true; })(navigator.userAgent || navigator.vendor || window.opera);
|
||||
|
|
@ -1536,3 +1601,120 @@ function strEnConvert(str) {
|
|||
|
||||
return rslt;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* CapsLock 키 활성화 상태를 감지하여 사용자에게 알려주는 기능을 초기화하는 함수.
|
||||
* 특정 입력 필드 또는 페이지 전역의 CapsLock 상태를 감지해 지정된 영역에 경고 메시지를 표시함.
|
||||
*
|
||||
* @param {string} inputSelectors - CapsLock 상태를 감지할 입력 필드의 CSS 선택자.
|
||||
* 여러 개일 경우 콤마(,)로 구분 (예: '#pw, #pw2').
|
||||
* 빈 문자열('')을 전달하면 페이지 전역의 CapsLock 상태를 감지함.
|
||||
* @param {string} displaySelector - CapsLock 경고 메시지를 표시할 HTML 요소의 CSS 선택자 (예: '#caps-lock-area').
|
||||
* @returns {void}
|
||||
*/
|
||||
function initCapsLockWarning(inputSelectors, displaySelector) {
|
||||
const displayElement = document.querySelector(displaySelector);
|
||||
if (!displayElement) {
|
||||
console.error('표시할 영역을 찾을 수 없습니다:', displaySelector);
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* 키보드 이벤트로부터 CapsLock 상태를 확인하고, 상태에 따라 경고 메시지를 표시하거나 숨기는 내부 함수.
|
||||
* @param {KeyboardEvent} event - 발생한 키보드 이벤트 객체.
|
||||
* @returns {void}
|
||||
*/
|
||||
const checkCapsLock = (event) => {
|
||||
const capsLockOn = event.getModifierState && event.getModifierState('CapsLock');
|
||||
|
||||
if (capsLockOn) {
|
||||
displayElement.innerHTML = '<strong style="color: red;">Caps Lock 이 켜져 있습니다.</strong>' + '';
|
||||
displayElement.style.display = 'block';
|
||||
} else {
|
||||
displayElement.innerHTML = '';
|
||||
displayElement.style.display = 'none';
|
||||
}
|
||||
};
|
||||
|
||||
if (inputSelectors && inputSelectors.trim() !== '') {
|
||||
const elements = document.querySelectorAll(inputSelectors);
|
||||
if (elements.length === 0) {
|
||||
console.error('입력 필드를 찾을 수 없습니다:', inputSelectors);
|
||||
return;
|
||||
}
|
||||
elements.forEach(element => {
|
||||
element.addEventListener('keyup', checkCapsLock);
|
||||
element.addEventListener('keydown', checkCapsLock);
|
||||
element.addEventListener('blur', () => {
|
||||
displayElement.style.display = 'none';
|
||||
});
|
||||
});
|
||||
} else {
|
||||
window.addEventListener('keyup', checkCapsLock);
|
||||
window.addEventListener('keydown', checkCapsLock);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 비밀번호 보이기/숨기기 기능을 초기화하는 함수.
|
||||
* @param {string} targetInputSelectors - 기능을 적용할 input 요소들의 CSS 선택자 (콤마로 구분 가능)
|
||||
*/
|
||||
function initializePasswordToggle(targetInputSelectors) {
|
||||
const passwordInputs = document.querySelectorAll(targetInputSelectors);
|
||||
|
||||
if (passwordInputs.length === 0) {
|
||||
console.error("비밀번호 입력창을 찾을 수 없습니다:", targetInputSelectors);
|
||||
return;
|
||||
}
|
||||
|
||||
passwordInputs.forEach(passwordInput => {
|
||||
const originalWidth = passwordInput.getBoundingClientRect().width;
|
||||
const wrapper = document.createElement('div');
|
||||
|
||||
passwordInput.parentNode.insertBefore(wrapper, passwordInput);
|
||||
wrapper.appendChild(passwordInput);
|
||||
|
||||
Object.assign(wrapper.style, {
|
||||
position: 'relative',
|
||||
width: `${originalWidth}px`,
|
||||
});
|
||||
|
||||
const eyeOpenSvg = `<svg class="eye-open" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>`;
|
||||
const eyeClosedSvg = `<svg class="eye-closed" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">
|
||||
<path d="M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.44-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l-2.9-2.9c-.6.3-1.28.44-2.01.44-2.76 0-5-2.24-5-5 0-.72.15-1.4.44-2.01L7.53 9.8C6.2 10.3 5.06 11.08 4.2 12z"/>
|
||||
<path d="M12 9c1.66 0 3 1.34 3 3 0 .22-.03.44-.08.65l1.55 1.55c.67-.33 1.41-.53 2.2-.53-2.76 0-5 2.24-5 5 0-.79.2-1.53.53-2.2l-1.55-1.55c.05-.21.08-.43.08-.65 0-1.66-1.34-3-3-3z"/>
|
||||
<path fill="none" stroke="currentColor" stroke-width="1.5" d="M4.27 3.27L20.73 19.73"/>
|
||||
</svg>`;
|
||||
const toggleButton = document.createElement('button');
|
||||
|
||||
toggleButton.type = 'button';
|
||||
toggleButton.innerHTML = eyeOpenSvg + eyeClosedSvg;
|
||||
wrapper.appendChild(toggleButton);
|
||||
|
||||
Object.assign(passwordInput.style, {
|
||||
paddingRight: '45px',
|
||||
width: '100%',
|
||||
boxSizing: 'border-box'
|
||||
});
|
||||
|
||||
Object.assign(toggleButton.style, {
|
||||
position: 'absolute', top: '50%', right: '15px', transform: 'translateY(-50%)',
|
||||
background: 'none', border: 'none', cursor: 'pointer',
|
||||
padding: '0', width: '24px', height: '24px'
|
||||
});
|
||||
|
||||
const eyeClosedIcon = toggleButton.querySelector('.eye-open');
|
||||
const eyeOpenIcon = toggleButton.querySelector('.eye-closed');
|
||||
|
||||
Object.assign(eyeOpenIcon.style, { width: '100%', height: '100%', fill: '#888' });
|
||||
Object.assign(eyeClosedIcon.style, { width: '100%', height: '100%', fill: '#888', display: 'none' });
|
||||
|
||||
toggleButton.addEventListener('click', function () {
|
||||
const isPassword = passwordInput.type === 'password';
|
||||
passwordInput.type = isPassword ? 'text' : 'password';
|
||||
eyeOpenIcon.style.display = isPassword ? 'none' : 'block';
|
||||
eyeClosedIcon.style.display = isPassword ? 'block' : 'none';
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
using System;
|
||||
|
||||
/* CM.cs 에 기존 lect들이 모여있다. */
|
||||
namespace NP.Model
|
||||
{
|
||||
/// <summary>
|
||||
/// 회원 수강신청 정보
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public class LectEnroll
|
||||
{
|
||||
/* 영남 테이블명세서.xlsx 파일 내 설명*/
|
||||
|
||||
/// <summary>회원번호</summary>
|
||||
public int USERNO { get; set; }
|
||||
/// <summary>수강키 (lect.lectno) [2]</summary>
|
||||
public long lectno { get; set; }
|
||||
/// <summary>수료여부</summary>
|
||||
public byte ISCOMPLETE { get; set; }
|
||||
/// <summary>AS-IS 수료번호 (lect.completeno)</summary>
|
||||
public string completeno { get; set; }
|
||||
/// <summary>강좌/과정키 (cm.cmno)</summary>
|
||||
public int cmno { get; set; }
|
||||
/// <summary>과정명 (cm.cname)</summary>
|
||||
public string CNAME { get; set; }
|
||||
/// <summary>상위분류키 (cg.pcgno)</summary>
|
||||
public short PCGNO { get; set; }
|
||||
/// <summary>결제키 (pay.payno)</summary>
|
||||
public long PAYNO { get; set; }
|
||||
/// <summary>결제상태 (pay.pstatus)</summary>
|
||||
public byte PSTATUS { get; set; }
|
||||
/// <summary>강의유형</summary>
|
||||
public byte CSHAPE { get; set; }
|
||||
/// <summary>기술인분류 (cm.typeman)</summary>
|
||||
public short TYPEMAN { get; set; }
|
||||
/// <summary>교육목적 (cm.typeedu)</summary>
|
||||
public short TYPEEDU { get; set; }
|
||||
/// <summary>등급 (cm.typegrade)</summary>
|
||||
public short TYPEGRADE { get; set; }
|
||||
/// <summary>직무분야 (cm.typejob)</summary>
|
||||
public short TYPEJOB { get; set; }
|
||||
/// <summary>분류코드 (cg.cgcode)</summary>
|
||||
public string CGCODE { get; set; }
|
||||
/// <summary>분류명 (cg.cgname)</summary>
|
||||
public string CGNAME { get; set; }
|
||||
/// <summary>일정키 (cminningscd.cmisno)</summary>
|
||||
public long CMISNO { get; set; }
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -47,6 +47,7 @@
|
|||
<Compile Include="Board.cs" />
|
||||
<Compile Include="CRoom.cs" />
|
||||
<Compile Include="Documents.cs" />
|
||||
<Compile Include="Lect2.cs" />
|
||||
<Compile Include="Pay.cs" />
|
||||
<Compile Include="Common.cs" />
|
||||
<Compile Include="ENUM.cs" />
|
||||
|
|
|
|||
Loading…
Reference in New Issue