From 26cb328f8ff645270f434af7656db35edcaede2e Mon Sep 17 00:00:00 2001 From: backuppc Date: Thu, 10 Jul 2025 14:36:05 +0900 Subject: [PATCH] udpate login.html --- Project/Dialog/fDashboard.cs | 4 + Project/Dialog/fLogin_WB.cs | 61 +- Project/EETGW.csproj | 5 +- Project/Manager/DataBaseManager.cs | 32 +- Project/Web/Controller/DashBoardController.cs | 41 +- Project/Web/Controller/HomeController.cs | 570 ++++++++++-------- Project/Web/Model/PageModel.cs | 11 +- Project/Web/Startup.cs | 2 +- Project/Web/wwwroot/DashBoard/index.html | 2 +- Project/Web/wwwroot/dashboard.html | 114 ---- Project/Web/wwwroot/login.html | 145 ++++- Project/fMain.cs | 24 +- Sub/arCtl | 2 +- SubProject/FBS0000/FBS0000.csproj | 8 +- SubProject/FCOMMON/DataBaseManager.cs | 151 ++++- SubProject/FCOMMON/FCOMMON.csproj | 11 +- SubProject/FCOMMON/Models/GroupUserModel.cs | 12 + SubProject/FCOMMON/Models/ItemModel.cs | 17 + SubProject/FCOMMON/Models/UserGroupModel.cs | 9 + SubProject/FCOMMON/Models/UserModel.cs | 19 + SubProject/FEQ0000/PurchaseCR/fPurchaseCR.cs | 2 +- .../PurchaseCR/fPurchaseCR_ConfRequest.cs | 2 +- SubProject/FEQ0000/PurchaseEB/fPurchaseEB.cs | 2 +- .../PurchaseEB/fPurchaseEB_ConfRequest.cs | 2 +- SubProject/FEQ0000/PurchaseNR/fPurchaseNR.cs | 2 +- .../PurchaseNR/fPurchaseNR_ConfRequest.cs | 2 +- SubProject/FEQ0000/fPurchaseConfirm.cs | 2 +- .../FPJ0000/OtConfirm/fOTConfirm.Designer.cs | 105 ++-- SubProject/FPJ0000/OtConfirm/fOTConfirm.cs | 40 +- SubProject/FPJ0000/OtConfirm/fOTConfirm.resx | 6 + SubProject/FPM0000/FPM0000.csproj | 4 + 31 files changed, 866 insertions(+), 543 deletions(-) delete mode 100644 Project/Web/wwwroot/dashboard.html create mode 100644 SubProject/FCOMMON/Models/GroupUserModel.cs create mode 100644 SubProject/FCOMMON/Models/ItemModel.cs create mode 100644 SubProject/FCOMMON/Models/UserGroupModel.cs create mode 100644 SubProject/FCOMMON/Models/UserModel.cs diff --git a/Project/Dialog/fDashboard.cs b/Project/Dialog/fDashboard.cs index 217f5ae..ae76866 100644 --- a/Project/Dialog/fDashboard.cs +++ b/Project/Dialog/fDashboard.cs @@ -21,7 +21,11 @@ namespace Project.Dialog public fDashboard() { InitializeComponent(); + +#if WEB InitializeWebView2(); +#endif + } private void InitializeWebView2() { diff --git a/Project/Dialog/fLogin_WB.cs b/Project/Dialog/fLogin_WB.cs index cc49e72..44f3e65 100644 --- a/Project/Dialog/fLogin_WB.cs +++ b/Project/Dialog/fLogin_WB.cs @@ -76,7 +76,10 @@ namespace Project.Dialog // 시스템에 설치된 WebView2 사용 await this.webView21.EnsureCoreWebView2Async(); } - // OWIN 서버의 DashBoard 페이지로 연결 + // WebView2에서 C# 메서드를 호출할 수 있도록 설정 + webView21.CoreWebView2.WebMessageReceived += WebView2_WebMessageReceived; + + // OWIN 서버의 Login 페이지로 연결 webView21.Source = new Uri("http://127.0.0.1:9000/Home/Login"); label1.Visible = false; } @@ -85,6 +88,62 @@ namespace Project.Dialog MessageBox.Show($"WebView2 초기화 실패: {ex.Message}"); } } + // WebView2에서 보낸 메시지를 받아서 처리 + private void WebView2_WebMessageReceived(object sender, CoreWebView2WebMessageReceivedEventArgs e) + { + try + { + var message = e.TryGetWebMessageAsString(); + + if (message == "LOGIN_SUCCESS") + { + // UI 스레드에서 실행 + this.Invoke(new Action(() => + { + // button1_Click과 동일한 로직 실행 + ExecuteLoginLogic(); + })); + } + } + catch (Exception ex) + { + Console.WriteLine($"WebView2 메시지 처리 오류: {ex.Message}"); + } + } + + // 로그인 성공 시 실행할 로직 (button1_Click과 동일) + private void ExecuteLoginLogic() + { + DateTime dt = DateTime.Now; + + // 로그인 정보가 이미 설정되어 있다고 가정 (웹에서 처리됨) + if (string.IsNullOrEmpty(FCOMMON.info.Login.no)) + { + MessageBox.Show("로그인 정보가 설정되지 않았습니다."); + return; + } + + try + { + // 로그인정보 기록 + AddLoginInfo(); + + //210221 + MakeAutoJobReportbyLogin(); + + //210613 + MakeAutoJobReportByAuto(); + + DialogResult = DialogResult.OK; + FCOMMON.info.Login.loginusetime = (DateTime.Now - dt).TotalMilliseconds; + } + catch (Exception ex) + { + Util.MsgE("로그인 처리 중 오류가 발생했습니다.\n\n" + ex.Message); + DialogResult = System.Windows.Forms.DialogResult.Cancel; + } + } + protected override void OnLoad(EventArgs e) { base.OnLoad(e); diff --git a/Project/EETGW.csproj b/Project/EETGW.csproj index ba38a2e..6dc38dd 100644 --- a/Project/EETGW.csproj +++ b/Project/EETGW.csproj @@ -51,7 +51,7 @@ Full False ..\..\..\..\..\Amkor\GroupWare\ - DEBUG;TRACE + TRACE;DEBUG;WEB prompt 4 false @@ -642,9 +642,6 @@ PreserveNewest - - PreserveNewest - diff --git a/Project/Manager/DataBaseManager.cs b/Project/Manager/DataBaseManager.cs index d6cd165..65a21ea 100644 --- a/Project/Manager/DataBaseManager.cs +++ b/Project/Manager/DataBaseManager.cs @@ -16,36 +16,8 @@ namespace Project.Manager cn.ConnectionString = cs; return cn; } - - /// - /// 입력된 id의 그룹정보를 반환 - /// - /// - /// - /// - public static GroupUserModel GetGroupUser(string gcode, string uid) - { - var retval = new GroupUserModel(); - var cn = getCn(); - - var sql = "select * from EETGW_GroupUser where gcode = @gcode and uid = @uid"; - var cmd = new System.Data.SqlClient.SqlCommand(sql,cn); - cmd.Parameters.Add("gcode", SqlDbType.VarChar).Value = gcode; - cmd.Parameters.Add("uid", SqlDbType.VarChar).Value = uid; - cn.Open(); - var rdr = cmd.ExecuteReader(); - var cnt = 0; - foreach(var dr in rdr) - { - cnt += 1; - } - - retval.Gcode = gcode; - retval.uid = uid; - - cn.Dispose(); - return retval; - } + + public static List getGroupList(string GroupColumn, string table, string where = "") diff --git a/Project/Web/Controller/DashBoardController.cs b/Project/Web/Controller/DashBoardController.cs index 4345a30..86ff028 100644 --- a/Project/Web/Controller/DashBoardController.cs +++ b/Project/Web/Controller/DashBoardController.cs @@ -39,23 +39,43 @@ namespace Project.Web.Controllers } + [HttpGet] + public HttpResponseMessage GetUserGroups() + { + var dt = DBM.GetUserGroups(); + var txtjson = JsonConvert.SerializeObject(dt, new JsonSerializerSettings + { + NullValueHandling = NullValueHandling.Ignore + }); + + var resp = new HttpResponseMessage() + { + Content = new StringContent( + txtjson, + System.Text.Encoding.UTF8, + "application/json") + }; + + return resp; + } + + [HttpGet] public HttpResponseMessage GetholyUser() { var sql = string.Empty; - sql = $"select uid,cate,sdate,edate,HolyReason " + - $"from EETGW_HolydayRequest " + - $"where gcode = '{FCOMMON.info.Login.gcode}'" + - $"and conf = 1 and HolyDays > 0 and sdate <= GETDATE() and edate >= GETDATE()"; - - if (info.Login.gcode == null) - info.Login.gcode = "EET1P"; - - sql = sql.Replace("{gcode}", FCOMMON.info.Login.gcode); + sql = $" select uid,cate,sdate,edate,HolyReason,Users.name " + + $" from EETGW_HolydayRequest INNER JOIN " + + $" Users ON EETGW_HolydayRequest.uid = Users.id " + + $" where EETGW_HolydayRequest.gcode = @gcode" + + $" and conf = 1 and HolyDays > 0 and sdate <= GETDATE() and edate >= GETDATE()"; + + //sql = sql.Replace("{gcode}", FCOMMON.info.Login.gcode); var cs = Properties.Settings.Default.gwcs;// "Data Source=K4FASQL.kr.ds.amkor.com,50150;Initial Catalog=EE;Persist Security Info=True;User ID=eeadm;Password=uJnU8a8q&DJ+ug-D!"; var cn = new System.Data.SqlClient.SqlConnection(cs); var cmd = new System.Data.SqlClient.SqlCommand(sql, cn); + cmd.Parameters.AddWithValue("gcode", FCOMMON.info.Login.gcode); var da = new System.Data.SqlClient.SqlDataAdapter(cmd); var dt = new System.Data.DataTable(); da.Fill(dt); @@ -77,10 +97,9 @@ namespace Project.Web.Controllers }; return resp; - - } + [HttpGet] public HttpResponseMessage Index() { diff --git a/Project/Web/Controller/HomeController.cs b/Project/Web/Controller/HomeController.cs index d67aa20..c3b3a71 100644 --- a/Project/Web/Controller/HomeController.cs +++ b/Project/Web/Controller/HomeController.cs @@ -1,299 +1,349 @@ -//using System; -//using System.Linq; -//using System.Net.Http; -//using System.Web.Http; -//using Newtonsoft.Json; -//using System.Collections.Generic; +using System; +using System.Linq; +using System.Net.Http; +using System.Web.Http; +using Newtonsoft.Json; +using System.Collections.Generic; +using FCOMMON; -//namespace Project.Web.Controllers -//{ -// // 로그인 요청 모델 -// public class LoginRequest -// { -// public string UserId { get; set; } -// public string Password { get; set; } -// public bool RememberMe { get; set; } -// } +namespace Project.Web.Controllers +{ + // 로그인 요청 모델 + public class LoginRequest + { + public string Gcode { get; set; } + public string UserId { get; set; } + public string Password { get; set; } + public bool RememberMe { get; set; } + } -// // 로그인 응답 모델 -// public class LoginResponse -// { -// public bool Success { get; set; } -// public string Message { get; set; } -// public string RedirectUrl { get; set; } -// public object UserData { get; set; } -// } + // 로그인 응답 모델 + public class LoginResponse + { + public bool Success { get; set; } + public string Message { get; set; } + public string RedirectUrl { get; set; } + public object UserData { get; set; } + } -// public class HomeController : BaseController -// { -// [HttpPost] -// public void Index([FromBody]string value) -// { + public class HomeController : BaseController + { + [HttpPost] + public void Index([FromBody]string value) + { -// } + } -// // PUT api/values/5 -// public void Put(int id, [FromBody]string value) -// { -// } + // PUT api/values/5 + public void Put(int id, [FromBody]string value) + { + } -// // DELETE api/values/5 -// public void Delete(int id) -// { -// } + // DELETE api/values/5 + public void Delete(int id) + { + } -// [HttpGet] -// public string Test() -// { -// return "test"; -// } + [HttpGet] + public string Test() + { + return "test"; + } -// [HttpPost] -// public HttpResponseMessage Login([FromBody] LoginRequest request) -// { -// var response = new LoginResponse(); + [HttpGet] + public string TestLogin() + { + return "HomeController Login Test - 접근 성공!"; + } -// try -// { -// // 입력값 검증 -// if (string.IsNullOrEmpty(request?.UserId) || string.IsNullOrEmpty(request?.Password)) -// { -// response.Success = false; -// response.Message = "사용자 ID와 비밀번호를 입력해주세요."; -// return CreateJsonResponse(response); -// } + [HttpPost] + public HttpResponseMessage Login([FromBody] LoginRequest request) + { + var response = new LoginResponse(); -// // TODO: 여기에 실제 데이터베이스 로그인 로직을 구현하세요 -// // 예시: 데이터베이스에서 사용자 정보 확인 -// bool isValidUser = ValidateUser(request.UserId, request.Password); + try + { + // 입력값 검증 + if (string.IsNullOrEmpty(request?.Gcode) || string.IsNullOrEmpty(request?.UserId) || string.IsNullOrEmpty(request?.Password)) + { + response.Success = false; + response.Message = "그룹코드/사용자ID/비밀번호를 입력해주세요."; + return CreateJsonResponse(response); + } -// if (isValidUser) -// { -// // 로그인 성공 -// response.Success = true; -// response.Message = "로그인에 성공했습니다."; -// response.RedirectUrl = "/DashBoard"; - -// // 사용자 정보 설정 (세션 또는 쿠키) -// SetUserSession(request.UserId, request.RememberMe); - -// // 사용자 데이터 반환 -// response.UserData = new -// { -// UserId = request.UserId, -// LoginTime = DateTime.Now, -// RememberMe = request.RememberMe -// }; -// } -// else -// { -// // 로그인 실패 -// response.Success = false; -// response.Message = "사용자 ID 또는 비밀번호가 올바르지 않습니다."; -// } -// } -// catch (Exception ex) -// { -// response.Success = false; -// response.Message = "로그인 처리 중 오류가 발생했습니다: " + ex.Message; -// } + // TODO: 여기에 실제 데이터베이스 로그인 로직을 구현하세요 + // 예시: 데이터베이스에서 사용자 정보 확인 + bool isValidUser = ValidateUser(request.Gcode, request.UserId, request.Password); -// return CreateJsonResponse(response); -// } + if (isValidUser) + { + // 로그인 성공 + response.Success = true; + response.Message = "로그인에 성공했습니다."; + response.RedirectUrl = "/DashBoard"; -// [HttpPost] -// public HttpResponseMessage Logout() -// { -// var response = new LoginResponse(); + // 사용자 정보 설정 (세션 또는 쿠키) + SetUserSession(request.Gcode, request.UserId, request.RememberMe); -// try -// { -// // TODO: 여기에 로그아웃 로직을 구현하세요 -// // 예시: 세션 정리, 쿠키 삭제 등 -// ClearUserSession(); + // 사용자 데이터 반환 + response.UserData = new + { + Gcode = request.Gcode, + UserId = request.UserId, + LoginTime = DateTime.Now, + RememberMe = request.RememberMe + }; + } + else + { + // 로그인 실패 + response.Success = false; + response.Message = "사용자 ID 또는 비밀번호가 올바르지 않습니다."; + } + } + catch (Exception ex) + { + response.Success = false; + response.Message = "로그인 처리 중 오류가 발생했습니다: " + ex.Message; + } -// response.Success = true; -// response.Message = "로그아웃되었습니다."; -// response.RedirectUrl = "/Login"; -// } -// catch (Exception ex) -// { -// response.Success = false; -// response.Message = "로그아웃 처리 중 오류가 발생했습니다: " + ex.Message; -// } + return CreateJsonResponse(response); + } -// return CreateJsonResponse(response); -// } + [HttpPost] + public HttpResponseMessage Logout() + { + var response = new LoginResponse(); -// [HttpGet] -// public HttpResponseMessage CheckLoginStatus() -// { -// var response = new LoginResponse(); + try + { + // TODO: 여기에 로그아웃 로직을 구현하세요 + // 예시: 세션 정리, 쿠키 삭제 등 + ClearUserSession(); -// try -// { -// // TODO: 여기에 로그인 상태 확인 로직을 구현하세요 -// // 예시: 세션 또는 쿠키에서 사용자 정보 확인 -// var currentUser = GetCurrentUser(); + response.Success = true; + response.Message = "로그아웃되었습니다."; + response.RedirectUrl = "/Login"; + } + catch (Exception ex) + { + response.Success = false; + response.Message = "로그아웃 처리 중 오류가 발생했습니다: " + ex.Message; + } -// if (currentUser != null) -// { -// response.Success = true; -// response.Message = "로그인된 상태입니다."; -// response.UserData = currentUser; -// } -// else -// { -// response.Success = false; -// response.Message = "로그인되지 않은 상태입니다."; -// response.RedirectUrl = "/Login"; -// } -// } -// catch (Exception ex) -// { -// response.Success = false; -// response.Message = "로그인 상태 확인 중 오류가 발생했습니다: " + ex.Message; -// } + return CreateJsonResponse(response); + } -// return CreateJsonResponse(response); -// } + [HttpGet] + public HttpResponseMessage CheckLoginStatus() + { + var response = new LoginResponse(); -// // 헬퍼 메서드들 -// private bool ValidateUser(string userId, string password) -// { -// // TODO: 실제 데이터베이스 검증 로직을 여기에 구현하세요 -// // 예시: 데이터베이스에서 사용자 정보 조회 및 비밀번호 검증 -// var encpass = Pub.MakePasswordEnc(password.Trim()); + try + { + // TODO: 여기에 로그인 상태 확인 로직을 구현하세요 + // 예시: 세션 또는 쿠키에서 사용자 정보 확인 + var currentUser = GetCurrentUser(); + + if (currentUser != null) + { + response.Success = true; + response.Message = "로그인된 상태입니다."; + response.UserData = currentUser; + } + else + { + response.Success = false; + response.Message = "로그인되지 않은 상태입니다."; + response.RedirectUrl = "/Login"; + } + } + catch (Exception ex) + { + response.Success = false; + response.Message = "로그인 상태 확인 중 오류가 발생했습니다: " + ex.Message; + } + + return CreateJsonResponse(response); + } + + // 헬퍼 메서드들 + private bool ValidateUser(string gcode, string userId, string password) + { + // TODO: 실제 데이터베이스 검증 로직을 여기에 구현하세요 + // 예시: 데이터베이스에서 사용자 정보 조회 및 비밀번호 검증 + var encpass = Pub.MakePasswordEnc(password.Trim()); + + var GInfo = DBM.GetUserGroup(gcode); + if (GInfo == null) return false; + var UGInfo = DBM.GetGroupUser(gcode, userId); + if (UGInfo == null) return false; + var UInfo = DBM.GetUserInfo(userId); + if (UInfo == null) return false; + return UInfo.password.Equals(encpass); + } + + private void SetUserSession(string gcode, string userId, bool rememberMe) + { + // TODO: 세션 또는 쿠키에 사용자 정보 저장 + // 예시: HttpContext.Session["UserId"] = userId; + // 예시: 쿠키 설정 (rememberMe가 true인 경우) + //데이터베이스에서 해당 정보를 찾아와서 처리해야한다 + var GInfo = DBM.GetUserGroup(gcode); + var UGInfo = DBM.GetGroupUser(gcode, userId); + var UInfo = DBM.GetUserInfo(userId); + + info.Login.no = userId; + info.Login.nameK = UInfo.name; + info.Login.dept = GInfo.name; + info.Login.level = UGInfo.level; + info.Login.email = UInfo.email; + info.Login.hp = UInfo.hp; + info.Login.tel = UInfo.tel; + info.Login.title = GInfo.name + "(" + UInfo.grade + ")"; + info.NotShowJobReportview = Pub.setting.NotShowJobreportPRewView; + info.Login.gcode = gcode;// gcode; + info.Login.process = UInfo.id == "dev" ? "개발자" : UGInfo.Process; + info.Login.permission = UGInfo.level; + info.Login.gpermission = GInfo.perm; + info.ShowBuyerror = Pub.setting.Showbuyerror; //210625 -// // 임시 테스트용 (실제로는 데이터베이스에서 확인) -// return userId == "admin" && password == "admin"; -// } - -// private void SetUserSession(string userId, bool rememberMe) -// { -// // TODO: 세션 또는 쿠키에 사용자 정보 저장 -// // 예시: HttpContext.Session["UserId"] = userId; -// // 예시: 쿠키 설정 (rememberMe가 true인 경우) -// //데이터베이스에서 해당 정보를 찾아와서 처리해야한다 - -// FCOMMON.info.Login.no = userId; -// FCOMMON.info.Login.nameK = drUser.name; -// FCOMMON.info.Login.dept = cmbDept.Text;// userdr.dept;// cmbDept.Text; -// FCOMMON.info.Login.level = drGrpUser.level; -// FCOMMON.info.Login.email = drUser.email; -// FCOMMON.info.Login.nameE = drUser.nameE; -// FCOMMON.info.Login.hp = drUser.hp; -// FCOMMON.info.Login.tel = drUser.tel; -// FCOMMON.info.Login.title = drUser.dept + "(" + drUser.grade + ")"; -// FCOMMON.info.NotShowJobReportview = Pub.setting.NotShowJobreportPRewView; -// //var gcode = FCOMMON.DBM.ExecuteScalar("select isnull(gcode,'NOGCODE') from UserGroup where dept ='" + cmbDept.Text + "'"); -// var gperm = FCOMMON.DBM.ExecuteScalar("select isnull(permission,0) from UserGroup where dept ='" + cmbDept.Text + "'"); -// FCOMMON.info.Login.gcode = gCode;// gcode; -// FCOMMON.info.Login.process = drUser.id == "dev" ? "개발자" : drGrpUser.Process; -// FCOMMON.info.Login.permission = 0; -// FCOMMON.info.Login.gpermission = int.Parse(gperm); -// //FCOMMON.info.datapath = Pub.setting.SharedDataPath; -// FCOMMON.info.ShowBuyerror = Pub.setting.Showbuyerror; //210625 + //로그인기록저장 + Pub.setting.lastid = userId;// tbID.Text.Trim(); + Pub.setting.lastdpt = GInfo.name; + Pub.setting.lastgcode = GInfo.gcode; + Pub.setting.Save(); -// } + } -// private void ClearUserSession() -// { -// // TODO: 세션 또는 쿠키에서 사용자 정보 삭제 -// FCOMMON.info.Login.no = string.Empty; -// FCOMMON.info.Login.level = 0; -// FCOMMON.info.Login.gcode = string.Empty; -// FCOMMON.info.Login.permission = 0; -// FCOMMON.info.Login.gpermission = 0; -// Console.WriteLine("logout"); -// } + private void ClearUserSession() + { + // TODO: 세션 또는 쿠키에서 사용자 정보 삭제 + FCOMMON.info.Login.no = string.Empty; + FCOMMON.info.Login.level = 0; + FCOMMON.info.Login.gcode = string.Empty; + FCOMMON.info.Login.permission = 0; + FCOMMON.info.Login.gpermission = 0; + Console.WriteLine("logout"); + } -// private object GetCurrentUser() -// { -// // TODO: 현재 로그인된 사용자 정보 반환 -// // 예시: HttpContext.Session["UserId"]에서 사용자 정보 조회 -// return null; // 임시로 null 반환 -// } + private object GetCurrentUser() + { + // TODO: 현재 로그인된 사용자 정보 반환 + // 예시: HttpContext.Session["UserId"]에서 사용자 정보 조회 + if (string.IsNullOrEmpty(FCOMMON.info.Login.no)) return null; + else return FCOMMON.info.Login; + } -// private HttpResponseMessage CreateJsonResponse(object data) -// { -// var json = JsonConvert.SerializeObject(data, new JsonSerializerSettings -// { -// NullValueHandling = NullValueHandling.Ignore -// }); + private HttpResponseMessage CreateJsonResponse(object data) + { + var json = JsonConvert.SerializeObject(data, new JsonSerializerSettings + { + NullValueHandling = NullValueHandling.Ignore + }); -// return new HttpResponseMessage() -// { -// Content = new StringContent( -// json, -// System.Text.Encoding.UTF8, -// "application/json") -// }; -// } + return new HttpResponseMessage() + { + Content = new StringContent( + json, + System.Text.Encoding.UTF8, + "application/json") + }; + } -// [HttpGet] -// public HttpResponseMessage Login() -// { -// // 직접 파일을 읽어서 반환 -// var filePath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Web", "wwwroot", "login.html"); -// var contents = string.Empty; + [HttpGet] + public HttpResponseMessage Login() + { + // 직접 파일을 읽어서 반환 + var filePath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Web", "wwwroot", "login.html"); + var contents = string.Empty; -// if (System.IO.File.Exists(filePath)) -// { -// contents = System.IO.File.ReadAllText(filePath, System.Text.Encoding.UTF8); -// } -// else -// { -// // 파일이 없으면 404 에러 페이지 또는 기본 메시지 -// contents = "

404 - File Not Found

The requested file was not found: " + filePath + "

"; -// } + if (System.IO.File.Exists(filePath)) + { + contents = System.IO.File.ReadAllText(filePath, System.Text.Encoding.UTF8); + } + else + { + // 파일이 없으면 404 에러 페이지 또는 기본 메시지 + contents = "

404 - File Not Found

The requested file was not found: " + filePath + "

"; + } -// //공용값 적용 -// ApplyCommonValue(ref contents); + //공용값 적용 + ApplyCommonValue(ref contents); -// var resp = new HttpResponseMessage() -// { -// Content = new StringContent( -// contents, -// System.Text.Encoding.UTF8, -// "text/html") -// }; + var resp = new HttpResponseMessage() + { + Content = new StringContent( + contents, + System.Text.Encoding.UTF8, + "text/html") + }; -// return resp; -// } + return resp; + } -// [HttpGet] -// public HttpResponseMessage Index() -// { -// // 직접 파일을 읽어서 반환 -// var filePath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Web", "wwwroot", "index.html"); -// var contents = string.Empty; + [HttpGet] + public HttpResponseMessage Index() + { + // 직접 파일을 읽어서 반환 + var filePath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Web", "wwwroot", "index.html"); + var contents = string.Empty; -// if (System.IO.File.Exists(filePath)) -// { -// contents = System.IO.File.ReadAllText(filePath, System.Text.Encoding.UTF8); -// } -// else -// { -// // 파일이 없으면 404 에러 페이지 또는 기본 메시지 -// contents = "

404 - File Not Found

The requested file was not found: " + filePath + "

"; -// } + if (System.IO.File.Exists(filePath)) + { + contents = System.IO.File.ReadAllText(filePath, System.Text.Encoding.UTF8); + } + else + { + // 파일이 없으면 404 에러 페이지 또는 기본 메시지 + contents = "

404 - File Not Found

The requested file was not found: " + filePath + "

"; + } -// //공용값 적용 -// ApplyCommonValue(ref contents); + //공용값 적용 + ApplyCommonValue(ref contents); -// var resp = new HttpResponseMessage() -// { -// Content = new StringContent( -// contents, -// System.Text.Encoding.UTF8, -// "text/html") -// }; + var resp = new HttpResponseMessage() + { + Content = new StringContent( + contents, + System.Text.Encoding.UTF8, + "text/html") + }; -// return resp; -// } - -// } -//} + return resp; + } + + [HttpGet] + public HttpResponseMessage GetPreviousLoginInfo() + { + try + { + // pub.setting에서 이전 로그인 정보 읽기 + var previousLoginInfo = new + { + Gcode = Pub.setting.lastgcode ?? "", + UserId = Pub.setting.lastid ?? "", + Dept = Pub.setting.lastdpt ?? "", + RememberMe = false // 기본값으로 설정 + }; + + return CreateJsonResponse(new + { + Success = true, + Data = previousLoginInfo + }); + } + catch (Exception ex) + { + return CreateJsonResponse(new + { + Success = false, + Message = "이전 로그인 정보를 가져오는 중 오류가 발생했습니다: " + ex.Message + }); + } + } + + } +} diff --git a/Project/Web/Model/PageModel.cs b/Project/Web/Model/PageModel.cs index dc96b1a..c372a0e 100644 --- a/Project/Web/Model/PageModel.cs +++ b/Project/Web/Model/PageModel.cs @@ -6,16 +6,7 @@ using System.Threading.Tasks; namespace Project.Web.Model { - public class GroupUserModel - { - public string Gcode { get; set; } - public string uid { get; set; } - } - public class UserModel - { - public string uid { get; set; } - public string password { get; set; } - } + public class PageModel { public List> RouteData { get; set; } diff --git a/Project/Web/Startup.cs b/Project/Web/Startup.cs index a1c316d..9beefa9 100644 --- a/Project/Web/Startup.cs +++ b/Project/Web/Startup.cs @@ -24,7 +24,7 @@ namespace Project.OWIN config.Routes.MapHttpRoute( name: "DefaultApi", - routeTemplate: "api/{controller}/{action}/{id}", + routeTemplate: "{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } ); diff --git a/Project/Web/wwwroot/DashBoard/index.html b/Project/Web/wwwroot/DashBoard/index.html index 898f3a3..b9ec525 100644 --- a/Project/Web/wwwroot/DashBoard/index.html +++ b/Project/Web/wwwroot/DashBoard/index.html @@ -233,7 +233,7 @@ data.forEach(item => { tableRows += ` - ${item.uid || '-'} + ${item.name || '-'}(${item.uid}) ${item.cate || '-'} diff --git a/Project/Web/wwwroot/dashboard.html b/Project/Web/wwwroot/dashboard.html deleted file mode 100644 index b4c50ff..0000000 --- a/Project/Web/wwwroot/dashboard.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - 근태현황 대시보드 - - - -
-
-
-
-
-
출근
-

0

-
-
-
-
-
-
-
휴가
-

0

-
-
-
-
-
-
-
휴가요청
-

0

-
-
-
-
-
-
-
구매요청
-

0

-
-
-
-
-
-
- 휴가자 현황 -
-
- - - - - - - - - - - - -
이름출근 시간퇴근 시간상태
-
-
-
- - - - diff --git a/Project/Web/wwwroot/login.html b/Project/Web/wwwroot/login.html index 3b4dee5..e64bb0f 100644 --- a/Project/Web/wwwroot/login.html +++ b/Project/Web/wwwroot/login.html @@ -116,6 +116,17 @@ transform: translateY(-1.5rem) scale(0.85); color: #3b82f6; } + /* 드롭다운 스타일 */ + select.input-field option { + background-color: #1f2937; + color: white; + } + select.input-field:focus option:checked { + background-color: #3b82f6; + } + select.input-field option:hover { + background-color: #374151; + } @@ -133,8 +144,28 @@

로그인하여 시스템에 접속하세요

- +
+ +
+ + +
+ + + +
+
+
{ @@ -342,12 +380,103 @@ }, 3000); } + // 그룹 목록 로드 + function loadUserGroups() { + fetch('http://127.0.0.1:9000/DashBoard/GetUserGroups') + .then(response => response.json()) + .then(data => { + const gcodeSelect = document.getElementById('gcode'); + + // 기존 옵션 제거 (첫 번째 옵션 제외) + while (gcodeSelect.children.length > 1) { + gcodeSelect.removeChild(gcodeSelect.lastChild); + } + + // 데이터 추가 + data.forEach(group => { + if (group.gcode && group.name) { + const option = document.createElement('option'); + option.value = group.gcode; + option.textContent = group.name; + option.className = 'text-gray-800'; + gcodeSelect.appendChild(option); + } + }); + + // 이전 로그인 정보 설정 + setPreviousLoginInfo(); + }) + .catch(error => { + console.error('그룹 목록 로드 중 오류 발생:', error); + showError('부서 목록을 불러오는 중 오류가 발생했습니다.'); + }); + } + + // 이전 로그인 정보 설정 + function setPreviousLoginInfo() { + // HomeController의 GetPreviousLoginInfo API 호출 + fetch('http://127.0.0.1:9000/Home/GetPreviousLoginInfo') + .then(response => response.json()) + .then(data => { + if (data.Success && data.Data) { + handlePreviousLoginInfo(data.Data); + } + }) + .catch(error => { + console.error('이전 로그인 정보 로드 중 오류 발생:', error); + // 오류가 발생해도 기본 포커스 설정 + setTimeout(() => { + document.getElementById('gcode').focus(); + }, 100); + }); + } + + // 이전 로그인 정보 처리 + function handlePreviousLoginInfo(data) { + let hasPreviousInfo = false; + + if (data && data.Gcode) { + // 부서 선택 + const gcodeSelect = document.getElementById('gcode'); + gcodeSelect.value = data.Gcode; + + // 부서 선택 시 라벨 애니메이션 적용 + const label = gcodeSelect.nextElementSibling; + if (label && label.classList.contains('floating-label')) { + label.style.transform = 'translateY(-1.5rem) scale(0.85)'; + label.style.color = '#3b82f6'; + } + hasPreviousInfo = true; + } + + if (data && data.UserId) { + // 사용자 ID 설정 + document.getElementById('userId').value = data.UserId; + + // 사용자 ID 입력 시 라벨 애니메이션 적용 + const userIdInput = document.getElementById('userId'); + const label = userIdInput.nextElementSibling; + if (label && label.classList.contains('floating-label')) { + label.style.transform = 'translateY(-1.5rem) scale(0.85)'; + label.style.color = '#3b82f6'; + } + hasPreviousInfo = true; + } + + // 이전 로그인 정보가 있으면 비밀번호 필드에, 없으면 부서 선택에 포커스 + setTimeout(() => { + if (hasPreviousInfo) { + document.getElementById('password').focus(); + } else { + document.getElementById('gcode').focus(); + } + }, 100); + } + // 페이지 로드 시 애니메이션 document.addEventListener('DOMContentLoaded', function() { - // 입력 필드에 자동 포커스 - setTimeout(() => { - document.getElementById('userId').focus(); - }, 500); + // 그룹 목록 로드 + loadUserGroups(); }); diff --git a/Project/fMain.cs b/Project/fMain.cs index 7df7faf..d35de86 100644 --- a/Project/fMain.cs +++ b/Project/fMain.cs @@ -204,19 +204,19 @@ namespace Project void Func_Login() { - if (System.Diagnostics.Debugger.IsAttached) - { - using (var flogIn = new Dialog.fLogin_WB()) - if (flogIn.ShowDialog() != System.Windows.Forms.DialogResult.OK) +#if WEB + + using (var f = new Dialog.fLogin_WB()) + if (f.ShowDialog() != System.Windows.Forms.DialogResult.OK) + Application.ExitThread(); + +#else + + using (var f = new Dialog.fLogin()) + if (f.ShowDialog() != System.Windows.Forms.DialogResult.OK) Application.ExitThread(); - } - else - { - using (var flogIn = new Dialog.fLogin()) - if (flogIn.ShowDialog() != System.Windows.Forms.DialogResult.OK) - Application.ExitThread(); - } - +#endif + this.mn_purchase.Visible = FCOMMON.Util.getBit(FCOMMON.info.Login.gpermission, (int)FCOMMON.eGroupPermission.menu_purchase); this.mn_project.Visible = FCOMMON.Util.getBit(FCOMMON.info.Login.gpermission, (int)FCOMMON.eGroupPermission.menu_project); diff --git a/Sub/arCtl b/Sub/arCtl index 2491541..a4b2a09 160000 --- a/Sub/arCtl +++ b/Sub/arCtl @@ -1 +1 @@ -Subproject commit 249154147d963ce57aef40e549bea01e304e8134 +Subproject commit a4b2a097f8f4de828c883de35cdf5d28e0d5f3e4 diff --git a/SubProject/FBS0000/FBS0000.csproj b/SubProject/FBS0000/FBS0000.csproj index 3f3b56f..71ea575 100644 --- a/SubProject/FBS0000/FBS0000.csproj +++ b/SubProject/FBS0000/FBS0000.csproj @@ -38,10 +38,6 @@ ..\..\DLL\arCommUtil.dll - - False - ..\..\Sub\arCtl\bin\debug\arControl.Net4.dll - ..\..\DLL\ArSetting.Net4.dll @@ -322,6 +318,10 @@ + + {f31c242c-1b15-4518-9733-48558499fe4b} + arControl + {26982882-c1ff-45f8-861c-d67558725ff1} FCM0000 diff --git a/SubProject/FCOMMON/DataBaseManager.cs b/SubProject/FCOMMON/DataBaseManager.cs index b853b1c..3084990 100644 --- a/SubProject/FCOMMON/DataBaseManager.cs +++ b/SubProject/FCOMMON/DataBaseManager.cs @@ -4,6 +4,8 @@ using System.Linq; using System.Text; using System.Data.SqlClient; using System.Windows.Forms; +using FCOMMON.Models; +using System.Data; namespace FCOMMON { @@ -17,21 +19,124 @@ namespace FCOMMON return cn; } - public struct sItemInfo + + public static UserModel GetUserInfo(string uid) { - public int idx; - public string sid; - public string model; - public string supply; - public string name; - public string unit; - public float scale; - public string price; - public int supplyidx; - public string project; - public int qty; + var retval = new UserModel(); + var cn = getCn(); + + var sql = "select * from Users where id = @id"; + var cmd = new System.Data.SqlClient.SqlCommand(sql, cn); + cmd.Parameters.Add("id", SqlDbType.VarChar).Value = uid; + cn.Open(); + var rdr = cmd.ExecuteReader(); + var cnt = 0; + while (rdr.Read()) + { + retval.name = rdr["name"].ToString(); + retval.password = rdr["password"].ToString(); + retval.id = rdr["id"].ToString(); + retval.email = rdr["email"].ToString(); + retval.hp = rdr["email"].ToString(); + retval.tel = rdr["tel"].ToString(); + retval.grade = rdr["grade"].ToString(); + cnt += 1; + } + + cn.Dispose(); + if (cnt == 0) return null; + return retval; } + public static UserGroupModel GetUserGroup(string gcode) + { + var retval = new UserGroupModel(); + var cn = getCn(); + + var sql = "select * from UserGroup where gcode = @gcode"; + var cmd = new System.Data.SqlClient.SqlCommand(sql, cn); + cmd.Parameters.Add("gcode", SqlDbType.VarChar).Value = gcode; + cn.Open(); + var rdr = cmd.ExecuteReader(); + var cnt = 0; + while (rdr.Read()) + { + retval.gcode = rdr["gcode"].ToString(); + retval.name = rdr["dept"].ToString(); + cnt += 1; + } + cn.Dispose(); + if (cnt == 0) return null; + return retval; + } + /// + /// 입력된 id의 그룹정보를 반환 + /// + /// + /// + /// + public static GroupUserModel GetGroupUser(string gcode, string uid) + { + var retval = new GroupUserModel(); + var cn = getCn(); + + var sql = "select * from EETGW_GroupUser where gcode = @gcode and uid = @uid"; + var cmd = new System.Data.SqlClient.SqlCommand(sql, cn); + cmd.Parameters.Add("gcode", SqlDbType.VarChar).Value = gcode; + cmd.Parameters.Add("uid", SqlDbType.VarChar).Value = uid; + cn.Open(); + var rdr = cmd.ExecuteReader(); + var cnt = 0; + while (rdr.Read()) + { + retval.Gcode = rdr["gcode"].ToString(); + retval.uid = rdr["uid"].ToString(); + retval.level = int.Parse(rdr["level"]?.ToString() ?? "0"); + retval.Process = rdr["Process"].ToString(); + cnt += 1; + } + + + cn.Dispose(); + if (cnt == 0) return null; + return retval; + } + + + public static List GetUserGroups() + { + var cn = getCn(); + cn.Open(); + + List retval = new List(); + var sql = " select gcode,dept,permission,managerinfo,devinfo,usemail" + + " from UserGroup " + + " order by usemail desc,dept"; + + var cmd = new SqlCommand(sql, cn); + try + { + var rdr = cmd.ExecuteReader(); + while (rdr.Read()) + { + retval.Add(new UserGroupModel + { + gcode = rdr["gcode"]?.ToString() ?? string.Empty, + name = rdr["dept"]?.ToString() ?? string.Empty, + perm = int.Parse(rdr["permission"]?.ToString() ?? "0"), + }); + } + } + catch + { + + } + cn.Close(); + cn.Dispose(); + return retval; + } + + public static List GetItemStorageList() { @@ -489,12 +594,12 @@ namespace FCOMMON } - public static sItemInfo getLastPurchaseInfo(int idx) + public static ItemModel getLastPurchaseInfo(int idx) { var cn = getCn(); cn.Open(); - var retval = new sItemInfo(); + var retval = new ItemModel(); retval.idx = -1; string sql = "select isnull(max(idx),-1) from Purchase where pumidx = " + idx.ToString(); @@ -530,12 +635,12 @@ namespace FCOMMON return retval; } - public static sItemInfo getLastPurchaseCRInfo(int idx) + public static ItemModel getLastPurchaseCRInfo(int idx) { var cn = getCn(); cn.Open(); - var retval = new sItemInfo(); + var retval = new ItemModel(); retval.idx = -1; string sql = "select isnull(max(idx),-1) from EETGW_PurchaseCR WITH (nolock) where pumidx = " + idx.ToString(); @@ -679,12 +784,12 @@ namespace FCOMMON return cnt == 1; } - public static sItemInfo getItemInfo(int idx) + public static ItemModel getItemInfo(int idx) { var cn = getCn(); cn.Open(); - var retval = new sItemInfo(); + var retval = new ItemModel(); retval.idx = -1; string sql = "select * from Items WITH (nolock) where gcode='" + FCOMMON.info.Login.gcode + "' and idx = " + idx.ToString(); @@ -709,7 +814,7 @@ namespace FCOMMON cn.Dispose(); return retval; } - public static int addItemInfo(sItemInfo info) + public static int addItemInfo(ItemModel info) { int retval = -1; var cn = getCn(); @@ -748,12 +853,12 @@ namespace FCOMMON cn.Dispose(); return retval; } - public static sItemInfo getItemInfo(string sid) + public static ItemModel getItemInfo(string sid) { var cn = getCn(); cn.Open(); - var retval = new sItemInfo(); + var retval = new ItemModel(); retval.idx = -1; string sql = "select * from Items WITH (nolock) where [gcode] = '" + FCOMMON.info.Login.gcode + "' and [sid] = '" + sid + "'"; @@ -796,7 +901,7 @@ namespace FCOMMON var cn = getCn(); cn.Open(); - var retval = new sItemInfo(); + var retval = new ItemModel(); retval.idx = -1; string sql = "select [id],[name],([name] +'(' +[id] +')') as dispName,isnull([dept],'') as dept,isnull(grade,'') as grade," + @@ -908,7 +1013,7 @@ namespace FCOMMON var cn = getCn(); cn.Open(); - var sql = "select isnull(code,''),isnull(memo,''),isnull(svalue,''),isnull(svalue2,'')"+ + var sql = "select isnull(code,''),isnull(memo,''),isnull(svalue,''),isnull(svalue2,'')" + " from Common WITH (nolock) " + " where gcode='" + FCOMMON.info.Login.gcode + "' and Grp = '{0}' and svalue = '{1}'"; diff --git a/SubProject/FCOMMON/FCOMMON.csproj b/SubProject/FCOMMON/FCOMMON.csproj index 65f49f2..4d041d0 100644 --- a/SubProject/FCOMMON/FCOMMON.csproj +++ b/SubProject/FCOMMON/FCOMMON.csproj @@ -36,9 +36,6 @@ false - - ..\..\Sub\arCtl\obj\Debug\arControl.Net4.dll - ..\..\DLL\ArSetting.Net4.dll @@ -176,6 +173,10 @@ + + + + @@ -245,6 +246,10 @@ + + {f31c242c-1b15-4518-9733-48558499fe4b} + arControl + {150859d3-1c5d-4e20-b324-f9ebe188d893} FTPClass diff --git a/SubProject/FCOMMON/Models/GroupUserModel.cs b/SubProject/FCOMMON/Models/GroupUserModel.cs new file mode 100644 index 0000000..9c46829 --- /dev/null +++ b/SubProject/FCOMMON/Models/GroupUserModel.cs @@ -0,0 +1,12 @@ +namespace FCOMMON.Models +{ + + + public class GroupUserModel + { + public string Gcode { get; set; } + public string uid { get; set; } + public string Process { get; set; } + public int level { get; set; } + } +} diff --git a/SubProject/FCOMMON/Models/ItemModel.cs b/SubProject/FCOMMON/Models/ItemModel.cs new file mode 100644 index 0000000..b3fe35f --- /dev/null +++ b/SubProject/FCOMMON/Models/ItemModel.cs @@ -0,0 +1,17 @@ +namespace FCOMMON.Models +{ + public class ItemModel + { + public int idx; + public string sid; + public string model; + public string supply; + public string name; + public string unit; + public float scale; + public string price; + public int supplyidx; + public string project; + public int qty; + } +} diff --git a/SubProject/FCOMMON/Models/UserGroupModel.cs b/SubProject/FCOMMON/Models/UserGroupModel.cs new file mode 100644 index 0000000..1d30799 --- /dev/null +++ b/SubProject/FCOMMON/Models/UserGroupModel.cs @@ -0,0 +1,9 @@ +namespace FCOMMON.Models +{ + public class UserGroupModel + { + public string gcode { get; set; } + public string name { get; set; } + public int perm { get; set; } + } +} diff --git a/SubProject/FCOMMON/Models/UserModel.cs b/SubProject/FCOMMON/Models/UserModel.cs new file mode 100644 index 0000000..3091c06 --- /dev/null +++ b/SubProject/FCOMMON/Models/UserModel.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FCOMMON.Models +{ + public class UserModel + { + public string id { get; set; } + public string password { get; set; } + public string name { get; set; } + public string grade { get; set; } + public string email { get; set; } + public string hp { get; set; } + public string tel { get; set; } + } +} diff --git a/SubProject/FEQ0000/PurchaseCR/fPurchaseCR.cs b/SubProject/FEQ0000/PurchaseCR/fPurchaseCR.cs index e6fda5e..e079396 100644 --- a/SubProject/FEQ0000/PurchaseCR/fPurchaseCR.cs +++ b/SubProject/FEQ0000/PurchaseCR/fPurchaseCR.cs @@ -635,7 +635,7 @@ namespace FEQ0000 var iteminfo = FCOMMON.DBM.getItemInfo(sid); if (iteminfo.idx < 0) { - FCOMMON.DBM.sItemInfo newitem = new FCOMMON.DBM.sItemInfo(); + FCOMMON.Models.ItemModel newitem = new FCOMMON.Models.ItemModel(); newitem.sid = newdr.sid; newitem.name = newdr.pumname; newitem.price = newdr.pumprice.ToString(); diff --git a/SubProject/FEQ0000/PurchaseCR/fPurchaseCR_ConfRequest.cs b/SubProject/FEQ0000/PurchaseCR/fPurchaseCR_ConfRequest.cs index 68c1e5b..36adfc7 100644 --- a/SubProject/FEQ0000/PurchaseCR/fPurchaseCR_ConfRequest.cs +++ b/SubProject/FEQ0000/PurchaseCR/fPurchaseCR_ConfRequest.cs @@ -170,7 +170,7 @@ namespace FEQ0000 var iteminfo = FCOMMON.DBM.getItemInfo(sid); if (iteminfo.idx < 0) { - FCOMMON.DBM.sItemInfo newitem = new FCOMMON.DBM.sItemInfo(); + FCOMMON.Models.ItemModel newitem = new FCOMMON.Models.ItemModel(); newitem.sid = newdr.sid; newitem.name = newdr.pumname; newitem.price = newdr.pumprice.ToString(); diff --git a/SubProject/FEQ0000/PurchaseEB/fPurchaseEB.cs b/SubProject/FEQ0000/PurchaseEB/fPurchaseEB.cs index cb51fd1..8224808 100644 --- a/SubProject/FEQ0000/PurchaseEB/fPurchaseEB.cs +++ b/SubProject/FEQ0000/PurchaseEB/fPurchaseEB.cs @@ -580,7 +580,7 @@ namespace FEQ0000 var iteminfo = FCOMMON.DBM.getItemInfo(sid); if (iteminfo.idx < 0) { - FCOMMON.DBM.sItemInfo newitem = new FCOMMON.DBM.sItemInfo(); + FCOMMON.Models.ItemModel newitem = new FCOMMON.Models.ItemModel(); newitem.sid = newdr.sid; newitem.name = newdr.pumname; newitem.price = newdr.pumprice.ToString(); diff --git a/SubProject/FEQ0000/PurchaseEB/fPurchaseEB_ConfRequest.cs b/SubProject/FEQ0000/PurchaseEB/fPurchaseEB_ConfRequest.cs index 88b40ad..774db64 100644 --- a/SubProject/FEQ0000/PurchaseEB/fPurchaseEB_ConfRequest.cs +++ b/SubProject/FEQ0000/PurchaseEB/fPurchaseEB_ConfRequest.cs @@ -163,7 +163,7 @@ namespace FEQ0000 var iteminfo = FCOMMON.DBM.getItemInfo(sid); if (iteminfo.idx < 0) { - FCOMMON.DBM.sItemInfo newitem = new FCOMMON.DBM.sItemInfo(); + FCOMMON.Models.ItemModel newitem = new FCOMMON.Models.ItemModel(); newitem.sid = newdr.sid; newitem.name = newdr.pumname; newitem.price = newdr.pumprice.ToString(); diff --git a/SubProject/FEQ0000/PurchaseNR/fPurchaseNR.cs b/SubProject/FEQ0000/PurchaseNR/fPurchaseNR.cs index 8559900..fbad665 100644 --- a/SubProject/FEQ0000/PurchaseNR/fPurchaseNR.cs +++ b/SubProject/FEQ0000/PurchaseNR/fPurchaseNR.cs @@ -654,7 +654,7 @@ namespace FEQ0000 var iteminfo = FCOMMON.DBM.getItemInfo(sid); if (iteminfo.idx < 0) { - FCOMMON.DBM.sItemInfo newitem = new FCOMMON.DBM.sItemInfo(); + FCOMMON.Models.ItemModel newitem = new FCOMMON.Models.ItemModel(); newitem.sid = newdr.sid; newitem.name = newdr.pumname; newitem.price = newdr.pumprice.ToString(); diff --git a/SubProject/FEQ0000/PurchaseNR/fPurchaseNR_ConfRequest.cs b/SubProject/FEQ0000/PurchaseNR/fPurchaseNR_ConfRequest.cs index 6c9cf43..784e282 100644 --- a/SubProject/FEQ0000/PurchaseNR/fPurchaseNR_ConfRequest.cs +++ b/SubProject/FEQ0000/PurchaseNR/fPurchaseNR_ConfRequest.cs @@ -169,7 +169,7 @@ namespace FEQ0000 var iteminfo = FCOMMON.DBM.getItemInfo(sid); if (iteminfo.idx < 0) { - FCOMMON.DBM.sItemInfo newitem = new FCOMMON.DBM.sItemInfo(); + FCOMMON.Models.ItemModel newitem = new FCOMMON.Models.ItemModel(); newitem.sid = newdr.sid; newitem.name = newdr.pumname; newitem.price = newdr.pumprice.ToString(); diff --git a/SubProject/FEQ0000/fPurchaseConfirm.cs b/SubProject/FEQ0000/fPurchaseConfirm.cs index 0958a8c..e8cabb1 100644 --- a/SubProject/FEQ0000/fPurchaseConfirm.cs +++ b/SubProject/FEQ0000/fPurchaseConfirm.cs @@ -469,7 +469,7 @@ namespace FEQ0000 var iteminfo = FCOMMON.DBM.getItemInfo(sid); if (iteminfo.idx < 0) { - FCOMMON.DBM.sItemInfo newitem = new FCOMMON.DBM.sItemInfo(); + FCOMMON.Models.ItemModel newitem = new FCOMMON.Models.ItemModel(); newitem.sid = newdr.sid; newitem.name = newdr.pumname; newitem.price = newdr.pumprice.ToString(); diff --git a/SubProject/FPJ0000/OtConfirm/fOTConfirm.Designer.cs b/SubProject/FPJ0000/OtConfirm/fOTConfirm.Designer.cs index b2826fb..029c889 100644 --- a/SubProject/FPJ0000/OtConfirm/fOTConfirm.Designer.cs +++ b/SubProject/FPJ0000/OtConfirm/fOTConfirm.Designer.cs @@ -30,16 +30,16 @@ { this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(fOTConfirm)); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle10 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle11 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle12 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle13 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle14 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle15 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle16 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle17 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle18 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle19 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle20 = new System.Windows.Forms.DataGridViewCellStyle(); this.bn = new System.Windows.Forms.BindingNavigator(this.components); this.bs = new System.Windows.Forms.BindingSource(this.components); this.dsMSSQL = new FPJ0000.dsPRJ(); @@ -100,6 +100,8 @@ this.otEnd = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.projectNameDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.descriptionDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.목록내보내기ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ((System.ComponentModel.ISupportInitialize)(this.bn)).BeginInit(); this.bn.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.bs)).BeginInit(); @@ -110,6 +112,7 @@ this.splitContainer1.Panel2.SuspendLayout(); this.splitContainer1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.dv1)).BeginInit(); + this.contextMenuStrip1.SuspendLayout(); this.SuspendLayout(); // // bn @@ -511,6 +514,7 @@ this.otEnd, this.projectNameDataGridViewTextBoxColumn, this.descriptionDataGridViewTextBoxColumn}); + this.dv1.ContextMenuStrip = this.contextMenuStrip1; this.dv1.DataSource = this.bs; this.dv1.Dock = System.Windows.Forms.DockStyle.Fill; this.dv1.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; @@ -553,9 +557,9 @@ // wwDataGridViewTextBoxColumn // this.wwDataGridViewTextBoxColumn.DataPropertyName = "ww"; - dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); - this.wwDataGridViewTextBoxColumn.DefaultCellStyle = dataGridViewCellStyle1; + dataGridViewCellStyle11.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle11.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.wwDataGridViewTextBoxColumn.DefaultCellStyle = dataGridViewCellStyle11; this.wwDataGridViewTextBoxColumn.HeaderText = "WW"; this.wwDataGridViewTextBoxColumn.Name = "wwDataGridViewTextBoxColumn"; this.wwDataGridViewTextBoxColumn.ReadOnly = true; @@ -564,8 +568,8 @@ // pdateDataGridViewTextBoxColumn // this.pdateDataGridViewTextBoxColumn.DataPropertyName = "pdate"; - dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.pdateDataGridViewTextBoxColumn.DefaultCellStyle = dataGridViewCellStyle2; + dataGridViewCellStyle12.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.pdateDataGridViewTextBoxColumn.DefaultCellStyle = dataGridViewCellStyle12; this.pdateDataGridViewTextBoxColumn.HeaderText = "날짜"; this.pdateDataGridViewTextBoxColumn.Name = "pdateDataGridViewTextBoxColumn"; this.pdateDataGridViewTextBoxColumn.ReadOnly = true; @@ -574,8 +578,8 @@ // WeekName // this.WeekName.DataPropertyName = "WeekName"; - dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.WeekName.DefaultCellStyle = dataGridViewCellStyle3; + dataGridViewCellStyle13.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.WeekName.DefaultCellStyle = dataGridViewCellStyle13; this.WeekName.HeaderText = "*"; this.WeekName.Name = "WeekName"; this.WeekName.ReadOnly = true; @@ -616,8 +620,8 @@ // statusDataGridViewTextBoxColumn // this.statusDataGridViewTextBoxColumn.DataPropertyName = "status"; - dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.statusDataGridViewTextBoxColumn.DefaultCellStyle = dataGridViewCellStyle4; + dataGridViewCellStyle14.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.statusDataGridViewTextBoxColumn.DefaultCellStyle = dataGridViewCellStyle14; this.statusDataGridViewTextBoxColumn.HeaderText = "상태"; this.statusDataGridViewTextBoxColumn.Name = "statusDataGridViewTextBoxColumn"; this.statusDataGridViewTextBoxColumn.ReadOnly = true; @@ -634,11 +638,11 @@ // otDataGridViewTextBoxColumn // this.otDataGridViewTextBoxColumn.DataPropertyName = "ot"; - dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.TopCenter; - dataGridViewCellStyle5.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(224)))), ((int)(((byte)(192))))); - dataGridViewCellStyle5.ForeColor = System.Drawing.Color.Red; - dataGridViewCellStyle5.Format = "N1"; - this.otDataGridViewTextBoxColumn.DefaultCellStyle = dataGridViewCellStyle5; + dataGridViewCellStyle15.Alignment = System.Windows.Forms.DataGridViewContentAlignment.TopCenter; + dataGridViewCellStyle15.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(224)))), ((int)(((byte)(192))))); + dataGridViewCellStyle15.ForeColor = System.Drawing.Color.Red; + dataGridViewCellStyle15.Format = "N1"; + this.otDataGridViewTextBoxColumn.DefaultCellStyle = dataGridViewCellStyle15; this.otDataGridViewTextBoxColumn.HeaderText = "초과"; this.otDataGridViewTextBoxColumn.Name = "otDataGridViewTextBoxColumn"; this.otDataGridViewTextBoxColumn.ReadOnly = true; @@ -647,10 +651,10 @@ // ot2DataGridViewTextBoxColumn // this.ot2DataGridViewTextBoxColumn.DataPropertyName = "ot2"; - dataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle6.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); - dataGridViewCellStyle6.Format = "N1"; - this.ot2DataGridViewTextBoxColumn.DefaultCellStyle = dataGridViewCellStyle6; + dataGridViewCellStyle16.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle16.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); + dataGridViewCellStyle16.Format = "N1"; + this.ot2DataGridViewTextBoxColumn.DefaultCellStyle = dataGridViewCellStyle16; this.ot2DataGridViewTextBoxColumn.HeaderText = "승인(대체)"; this.ot2DataGridViewTextBoxColumn.Name = "ot2DataGridViewTextBoxColumn"; this.ot2DataGridViewTextBoxColumn.Width = 88; @@ -658,10 +662,10 @@ // otPMS // this.otPMS.DataPropertyName = "otPMS"; - dataGridViewCellStyle7.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle7.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); - dataGridViewCellStyle7.Format = "N1"; - this.otPMS.DefaultCellStyle = dataGridViewCellStyle7; + dataGridViewCellStyle17.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle17.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); + dataGridViewCellStyle17.Format = "N1"; + this.otPMS.DefaultCellStyle = dataGridViewCellStyle17; this.otPMS.HeaderText = "승인(PMS)"; this.otPMS.Name = "otPMS"; this.otPMS.Width = 91; @@ -669,8 +673,8 @@ // otReasonDataGridViewTextBoxColumn // this.otReasonDataGridViewTextBoxColumn.DataPropertyName = "otReason"; - dataGridViewCellStyle8.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); - this.otReasonDataGridViewTextBoxColumn.DefaultCellStyle = dataGridViewCellStyle8; + dataGridViewCellStyle18.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); + this.otReasonDataGridViewTextBoxColumn.DefaultCellStyle = dataGridViewCellStyle18; this.otReasonDataGridViewTextBoxColumn.HeaderText = "사유"; this.otReasonDataGridViewTextBoxColumn.Name = "otReasonDataGridViewTextBoxColumn"; this.otReasonDataGridViewTextBoxColumn.Width = 54; @@ -678,10 +682,10 @@ // otStartDataGridViewTextBoxColumn // this.otStartDataGridViewTextBoxColumn.DataPropertyName = "otStart"; - dataGridViewCellStyle9.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle9.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(224)))), ((int)(((byte)(192))))); - dataGridViewCellStyle9.Format = "HH:mm:ss"; - this.otStartDataGridViewTextBoxColumn.DefaultCellStyle = dataGridViewCellStyle9; + dataGridViewCellStyle19.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle19.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(224)))), ((int)(((byte)(192))))); + dataGridViewCellStyle19.Format = "HH:mm:ss"; + this.otStartDataGridViewTextBoxColumn.DefaultCellStyle = dataGridViewCellStyle19; this.otStartDataGridViewTextBoxColumn.HeaderText = "시작"; this.otStartDataGridViewTextBoxColumn.Name = "otStartDataGridViewTextBoxColumn"; this.otStartDataGridViewTextBoxColumn.ReadOnly = true; @@ -690,10 +694,10 @@ // otEnd // this.otEnd.DataPropertyName = "otEnd"; - dataGridViewCellStyle10.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle10.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(224)))), ((int)(((byte)(192))))); - dataGridViewCellStyle10.Format = "HH:mm:ss"; - this.otEnd.DefaultCellStyle = dataGridViewCellStyle10; + dataGridViewCellStyle20.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle20.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(224)))), ((int)(((byte)(192))))); + dataGridViewCellStyle20.Format = "HH:mm:ss"; + this.otEnd.DefaultCellStyle = dataGridViewCellStyle20; this.otEnd.HeaderText = "종료"; this.otEnd.Name = "otEnd"; this.otEnd.ReadOnly = true; @@ -715,6 +719,20 @@ this.descriptionDataGridViewTextBoxColumn.ReadOnly = true; this.descriptionDataGridViewTextBoxColumn.Width = 51; // + // contextMenuStrip1 + // + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.목록내보내기ToolStripMenuItem}); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(153, 48); + // + // 목록내보내기ToolStripMenuItem + // + this.목록내보내기ToolStripMenuItem.Name = "목록내보내기ToolStripMenuItem"; + this.목록내보내기ToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.목록내보내기ToolStripMenuItem.Text = "목록 내보내기"; + this.목록내보내기ToolStripMenuItem.Click += new System.EventHandler(this.목록내보내기ToolStripMenuItem_Click); + // // fOTConfirm // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F); @@ -739,6 +757,7 @@ ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); this.splitContainer1.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.dv1)).EndInit(); + this.contextMenuStrip1.ResumeLayout(false); this.ResumeLayout(false); this.PerformLayout(); @@ -806,5 +825,7 @@ private System.Windows.Forms.DataGridViewTextBoxColumn otEnd; private System.Windows.Forms.DataGridViewTextBoxColumn projectNameDataGridViewTextBoxColumn; private System.Windows.Forms.DataGridViewTextBoxColumn descriptionDataGridViewTextBoxColumn; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private System.Windows.Forms.ToolStripMenuItem 목록내보내기ToolStripMenuItem; } } \ No newline at end of file diff --git a/SubProject/FPJ0000/OtConfirm/fOTConfirm.cs b/SubProject/FPJ0000/OtConfirm/fOTConfirm.cs index 36c3a29..38dd631 100644 --- a/SubProject/FPJ0000/OtConfirm/fOTConfirm.cs +++ b/SubProject/FPJ0000/OtConfirm/fOTConfirm.cs @@ -43,7 +43,7 @@ namespace FPJ0000 this.dtSD.Text = DateTime.Now.AddMonths(-1).ToShortDateString(); //공정목록 - // var taProc = new dsReportTableAdapters.ProcessListTableAdapter(); + // var taProc = new dsReportTableAdapters.ProcessListTableAdapter(); var dtProcList = FCOMMON.DBM.GroupUserProcessList();//taProc.GetData(FCOMMON.info.Login.gcode); int curLevel = Math.Max(FCOMMON.info.Login.level, FCOMMON.DBM.getAuth(FCOMMON.DBM.eAuthType.otconfirm)); //cmbProcess.Items.Clear(); @@ -138,7 +138,7 @@ namespace FPJ0000 { var processStr = "%"; var dtUserList = taUserList.GetData(processStr, FCOMMON.info.Login.gcode); - foreach (dsReport.ProcessUserListRow dr in dtUserList.OrderBy(t=>t.name)) + foreach (dsReport.ProcessUserListRow dr in dtUserList.OrderBy(t => t.name)) { string cmbdata = string.Format("{1}({0})", dr.id, dr.name); this.cmbUser.Items.Add(cmbdata); @@ -150,7 +150,7 @@ namespace FPJ0000 { var processStr = prc;// cmbProcess.Text; var dtUserList = taUserList.GetData(processStr, FCOMMON.info.Login.gcode); - foreach (dsReport.ProcessUserListRow dr in dtUserList.OrderBy(t=>t.name)) + foreach (dsReport.ProcessUserListRow dr in dtUserList.OrderBy(t => t.name)) { string cmbdata = string.Format("{1}({0})", dr.id, dr.name); this.cmbUser.Items.Add(cmbdata); @@ -296,7 +296,7 @@ namespace FPJ0000 } - + private void toolStripLabel3_Click(object sender, EventArgs e) { //사용자목록처리 @@ -348,7 +348,7 @@ namespace FPJ0000 if (e.KeyCode == Keys.Enter) btFind.PerformClick(); } - + private void lbStt_Click(object sender, EventArgs e) { var f = new FCOMMON.fSelectDay(DateTime.Parse(dtSD.Text)); @@ -413,7 +413,7 @@ namespace FPJ0000 private void toolStripButton1_Click(object sender, EventArgs e) { //전체승인 - using(var f = new fOTConfirmValue()) + using (var f = new fOTConfirmValue()) { if (f.ShowDialog() != DialogResult.OK) return; } @@ -469,7 +469,7 @@ namespace FPJ0000 { if (f.ShowDialog() == DialogResult.OK) { - foreach(var row in rows) + foreach (var row in rows) row.EndEdit(); try @@ -492,8 +492,8 @@ namespace FPJ0000 } } - private void toolStripButton8_Click(object sender, EventArgs e) - { + private void toolStripButton8_Click(object sender, EventArgs e) + { var sdo = DateTime.Parse(dtSD.Text); var sd = DateTime.Parse(sdo.AddMonths(-1).ToString("yyyy-MM-01")); var ed = sd.AddMonths(1).AddDays(-1); @@ -501,8 +501,8 @@ namespace FPJ0000 dtED.Text = ed.ToShortDateString(); } - private void toolStripButton7_Click(object sender, EventArgs e) - { + private void toolStripButton7_Click(object sender, EventArgs e) + { var sdo = DateTime.Parse(dtSD.Text); var sd = DateTime.Parse(sdo.AddMonths(1).ToString("yyyy-MM-01")); var ed = sd.AddMonths(1).AddDays(-1); @@ -514,5 +514,23 @@ namespace FPJ0000 { } + + private void 목록내보내기ToolStripMenuItem_Click(object sender, EventArgs e) + { + using (var sd = new SaveFileDialog()) + { + sd.Filter = "콤마로 분리된 파일|*.csv"; + sd.FilterIndex = 0; + if (sd.ShowDialog() != DialogResult.OK) return; + var fn = dv1.ExportData(sd.FileName); + + var dlg = AR.UTIL.MsgQ("생성된 파일을 확인할까요?"); + if (dlg != DialogResult.Yes) return; + + AR.UTIL.RunExplorer(fn); + + } + + } } } \ No newline at end of file diff --git a/SubProject/FPJ0000/OtConfirm/fOTConfirm.resx b/SubProject/FPJ0000/OtConfirm/fOTConfirm.resx index 470bb9f..a9eeead 100644 --- a/SubProject/FPJ0000/OtConfirm/fOTConfirm.resx +++ b/SubProject/FPJ0000/OtConfirm/fOTConfirm.resx @@ -227,6 +227,9 @@ TgDQASA1MVpwzwAAAABJRU5ErkJggg== + + 83, 17 + 325, 17 @@ -316,6 +319,9 @@ True + + 493, 17 + 252, 17 diff --git a/SubProject/FPM0000/FPM0000.csproj b/SubProject/FPM0000/FPM0000.csproj index 3310cd2..d8fa570 100644 --- a/SubProject/FPM0000/FPM0000.csproj +++ b/SubProject/FPM0000/FPM0000.csproj @@ -127,6 +127,10 @@ + + {f31c242c-1b15-4518-9733-48558499fe4b} + arControl + {26982882-c1ff-45f8-861c-d67558725ff1} FCM0000