SPZUM00400_암호확인.xfdl 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <FDL version="1.5">
  3. <TypeDefinition url="..\..\..\default_typedef.xml"/>
  4. <Form id="SPZUM00400" classname="Guide_SA_01" inheritanceid="" position="absolute 0 0 300 177" titletext="암호확인" class="frm_POP" onload="SPZUM00400_onload" onkeydown="SPZUM00400_onkeydown">
  5. <Layouts>
  6. <Layout>
  7. <Static id="stt_infoBox" class="sta_DA_box" position="absolute 12 66 288 143"/>
  8. <Static id="stt_titleText" text="암호확인" class="sta_POP_title" position="absolute 12 8 266 28" usedecorate="false" wordwrap="none" transparenthittest="true"/>
  9. <Button id="btn_close" taborder="2" anchor="default" position="absolute 274 12 288 25" positiontype="position" class="btn_POP_cls" onclick="btn_close_onclick"/>
  10. <Button id="btn_confirm" taborder="3" text="확인" class="btn5" position="absolute 197 147 241 167" onclick="btn_confirm_onclick"/>
  11. <Static id="stt_subTitle" text="사용자 정보" class="tit_2" position="absolute 12 46 288 86" style="linespace:2;background:URL('theme://images/icon_tit_bullet2.png');align:left top;"/>
  12. <Static id="stt_userTitle" text="사용자" class="cell_1" position="absolute 13 68 113 92"/>
  13. <Static id="stt_deptTitle" text="근무지 부서" class="cell_1" position="absolute 13 93 113 117"/>
  14. <Static id="stt_passwordTitle" text="비밀번호 입력" class="cell_1" position="absolute 13 118 113 142"/>
  15. <Static id="stt_userNm" position="absolute 116 70 284 91" style="font:Dotum,11,bold;"/>
  16. <Static id="stt_deptNm" position="absolute 116 95 284 116"/>
  17. <Edit id="edt_password" taborder="4" class="input_essential" position="absolute 116 120 284 140" onkeyup="edt_password_onkeyup" password="true" imemode="alpha" autoselect="true"/>
  18. <Button id="btn_cancel" taborder="5" text="취소" class="btn5" position="absolute 244 147 288 167" onclick="btn_cancel_onclick"/>
  19. <Static id="stt_helpMsg" text="도움말" class="hand" position="absolute 12 184 282 224" visible="false"/>
  20. </Layout>
  21. </Layouts>
  22. <Bind/>
  23. <Objects>
  24. <Dataset id="ds_login" firefirstcount="0" firenextcount="0" useclientlayout="false" updatecontrol="true" enableevent="true" loadkeymode="keep" loadfiltermode="keep" reversesubsum="false">
  25. <ColumnInfo>
  26. <ConstColumn id="ConstColumn0" type="STRING" size="30" value="n"/>
  27. <Column id="Column0" type="STRING" size="256"/>
  28. <Column id="Column1" type="STRING" size="256"/>
  29. <Column id="Column2" type="STRING" size="256"/>
  30. </ColumnInfo>
  31. </Dataset>
  32. </Objects>
  33. <Script type="xscript4.0"><![CDATA[/***************************************************************************************
  34. * System Name : HIT
  35. * Job Name :
  36. * File Name : SPZUM00400_암호확인.xfdl
  37. * Creator : 임준호
  38. * Make Date : 2014-02-26
  39. *
  40. * Description : 암호확인 팝업
  41. *---------------------------------------------------------------------------------------
  42. * Modify Date Modifier Modify Description
  43. *---------------------------------------------------------------------------------------
  44. * 2014-02-26 임준호
  45. *
  46. *---------------------------------------------------------------------------------------
  47. ****************************************************************************************/
  48. //=======================================================================================
  49. // Lib Include
  50. //---------------------------------------------------------------------------------------
  51. include "com_commonxp::comm_main.xjs"
  52. //=======================================================================================
  53. // Global Form Variable
  54. //---------------------------------------------------------------------------------------
  55. var lgv_bPwdvalid = false;
  56. var lgv_bExcept = true;
  57. //=======================================================================================
  58. // Function
  59. //---------------------------------------------------------------------------------------
  60. /****************************************************************************************
  61. * Argument :
  62. * Description : 비밀번호 확인
  63. ****************************************************************************************/
  64. function lf_confirmPassword(exLgRsYn){
  65. trace("## exLgRsYn : " + exLgRsYn);
  66. if(utlf_isNull(edt_password.value)){
  67. alert("비밀번호를 입력하세요.");
  68. edt_password.setFocus();
  69. return;
  70. }
  71. var sIndsReq = "ds_req";
  72. var objColInfo = new Array();
  73. if(plgv_sType == "logdetail") {
  74. objColInfo.push({col: "userid", val: "EMR"});
  75. } else {
  76. objColInfo.push({col: "userid", val: sysf_getUserId()});
  77. }
  78. objColInfo.push({col: "pwd", val: edt_password.value});
  79. if(plgv_sType == "session" || plgv_sType == "duplogin"){
  80. // 재로그인 관련으로 이 팝업창이 떴을때 logoutdt 시간을 넘겨주고 비지니스 단에서 로그아웃, 로그인시간을 다시 갱신한다. 2015.11.03 김상목
  81. // 마지막 서브밋 시간과 현재 시간을 비교해서 한시간이 지났으면 logoutdt를 last_submit + 1시간 뒤로 하고
  82. // 아직 한시간이 지나지 않았다면 logoutdt를 현재시간으로 설정
  83. var logoutDateObj;
  84. var timeOut = toNumber(sysf_getSystemInfo("sessiontimeout"));
  85. if (utlf_isNull(timeOut) || timeOut <= 0) { // timeout 적용하지 않음
  86. logoutDateObj = new Date();
  87. } else {
  88. var curTime = (new Date()).getTime();
  89. var last_submit = agv_nLastTransactionTime; // 마지막으로 서브밋한 시간
  90. var lastSubmitDateObj = new Date(last_submit);
  91. if (curTime - parseInt(last_submit) >= (60*60000)) { // 마지막 서브밋 시간과 현재시간의 차이가 1시간이 넘는다면 로그아웃 시간은 마지막 서브밋 시간에서 한시간 뒤로 설정
  92. logoutDateObj = new Date(lastSubmitDateObj.getYear(), lastSubmitDateObj.getMonth(), lastSubmitDateObj.getDate()
  93. , lastSubmitDateObj.getHours() + 1, lastSubmitDateObj.getMinutes(), lastSubmitDateObj.getSeconds(), lastSubmitDateObj.getMilliseconds());
  94. } else { // 1시간이 넘지 않는다면 로그아웃 시간을 현재시간으로 설정
  95. logoutDateObj = new Date();
  96. }
  97. }
  98. var year = logoutDateObj.getYear().toString();
  99. var month = (logoutDateObj.getMonth() + 1).toString();
  100. var date = logoutDateObj.getDate().toString();
  101. var hour = logoutDateObj.getHours().toString();
  102. var minute = logoutDateObj.getMinutes().toString();
  103. var second = logoutDateObj.getSeconds().toString();
  104. var millisecond = logoutDateObj.getMilliseconds().toString();
  105. var logoutdt = year + utlf_lPad(month, 2, '0') + utlf_lPad(date, 2, '0') + utlf_lPad(hour, 2, '0') + utlf_lPad(minute, 2, '0') + utlf_lPad(second, 2, '0') + utlf_lPad(millisecond, 3, '0');
  106. objColInfo.push({col: "logoutdt", val: logoutdt});
  107. objColInfo.push({col: "sessionStr", val: gv_sSessionToken});
  108. }
  109. dsf_createDsRow(sIndsReq, objColInfo);
  110. var isCDW = false;
  111. try {
  112. isCDW = gv_isCDW;
  113. } catch(e) {
  114. }
  115. var CDWyn = (isCDW) ? "Y" : "N";
  116. tranf_submit({
  117. id: "TRZUM00401"
  118. , service: "hismainapp.HisMain"
  119. , method: "reqGetPasswordValidation"
  120. , args: "CDWyn="+wrapQuote(CDWyn) + " " +
  121. "exLgRsYn="+wrapQuote(exLgRsYn)
  122. , inds : "req="+sIndsReq
  123. , outds: "ds_login=ret"
  124. , async: true
  125. , force: true
  126. , callback: "cbf_TRZUM00401"
  127. });
  128. }
  129. /****************************************************************************************
  130. * Argument :
  131. * Description : 타입별로 컴포넌트 위치 변경
  132. ****************************************************************************************/
  133. function movePosition(sType){
  134. if(sType == "session" || sType == "duplogin"){
  135. stt_subTitle.position.height = 40;
  136. stt_infoBox.move(stt_infoBox.position.left, stt_infoBox.position.top+12);
  137. stt_userTitle.move(stt_userTitle.position.left, stt_userTitle.position.top+12);
  138. stt_deptTitle.move(stt_deptTitle.position.left, stt_deptTitle.position.top+12);
  139. stt_passwordTitle.move(stt_passwordTitle.position.left, stt_passwordTitle.position.top+12);
  140. stt_userNm.move(stt_userNm.position.left, stt_userNm.position.top+12);
  141. stt_deptNm.move(stt_deptNm.position.left, stt_deptNm.position.top+12);
  142. edt_password.move(edt_password.position.left, edt_password.position.top+12);
  143. btn_confirm.move(btn_confirm.position.left, btn_confirm.position.top+12);
  144. btn_cancel.move(btn_cancel.position.left, btn_cancel.position.top+12);
  145. this.parent.position.height = this.parent.position.height + 12;
  146. }else{
  147. }
  148. }
  149. //=======================================================================================
  150. // Transaction Callback
  151. //---------------------------------------------------------------------------------------
  152. /****************************************************************************************
  153. * Argument : 01.sSvcId : 서비스 ID
  154. * : 02.nErrorCode : 에러코드
  155. * : 03.sErrorMsg : 에러메시지
  156. * Description : TRZUM00401의 콜백함수
  157. ****************************************************************************************/
  158. function cbf_TRZUM00401(sSvcId, nErrorCode, sErrorMsg){
  159. if(ds_login.rowcount > 0){
  160. var sValid = ds_login.getColumn(0, "valid");
  161. var exLgYn = ds_login.getColumn(0, "exLgYn"); // 휴진일 예외 로그인 여부
  162. var validmsg = ds_login.getColumn(0, "validmsg"); // 휴진정보
  163. // 휴진 교수 예외로그인 처리
  164. if(exLgYn == "Y") {
  165. var objArg = new Object();
  166. objArg.sUserId = sysf_getUserId();
  167. objArg.sResnmsg = validmsg;
  168. var rtnVal = frmf_modalInternal("SPZUM00500", "com_hismainxp::SPZUM00500_예외로그인.xfdl", objArg, false, null, null, null, 300, 290, "layered=true", null, null, null, "P");
  169. if(rtnVal == "Y"){
  170. lf_confirmPassword(rtnVal);
  171. return;
  172. }else{
  173. sysf_messageBox("휴진일에는 로그인 사유를 입력해야만 로그인 할 수 있습니다.");
  174. return;
  175. }
  176. }
  177. if(sValid == "Y"){
  178. lf_loginSucc();
  179. }else{
  180. // var validmsg = ds_login.getColumn(0, "validmsg");
  181. if(!utlf_isNull(validmsg) && plgv_sType != "logdetail") {
  182. sysf_messageBox(validmsg, "E"); // 전공의 당직 로그인 제어(근무시간 외 로그인 금지) 2017.05.29 smkim
  183. } else {
  184. // 암호 틀림
  185. sysf_messageBox("암호가", "E004");
  186. }
  187. }
  188. }else{
  189. sysf_messageBox("암호가", "E004");
  190. }
  191. try {
  192. edt_password.setFocus();
  193. } catch (e) {
  194. }
  195. }
  196. function lf_loginSucc(){
  197. if(plgv_sType != "logdetail") {
  198. // 암호 확인 OK
  199. var newSessionStr = ds_login.getColumn(0, "newSessionStr");
  200. if(!utlf_isNull(newSessionStr)) {
  201. // 로그인 시간 변경 되면서 세션 다시 갱신
  202. gds_userInfo.setColumn(0,"sessioninfo", newSessionStr);
  203. gv_sSessionToken = newSessionStr;
  204. }
  205. var newSessionStr_enc = ds_login.getColumn(0, "newSessionStr_enc");
  206. if(!utlf_isNull(newSessionStr_enc)) {
  207. gds_userInfo.setColumn(0,"sessioninfo_enc", newSessionStr_enc);
  208. gv_sSessionToken_ENC = newSessionStr_enc;
  209. }
  210. }
  211. // if(plgv_sType == "session" || plgv_sType == "duplogin" ){
  212. // // 암호 확인 OK, 최근 submit 시간 업데이트한다.
  213. // //setGlobalVariable("last_submit", (new Date()).getTime());
  214. // }
  215. //btn_cancel.dispatch("DOMActivate");
  216. var isCDW = false;
  217. try {
  218. isCDW = gv_isCDW;
  219. } catch(e) {
  220. }
  221. if(isCDW == "false" || isCDW != true) {
  222. agv_objAppBottomPath.form.lf_connectMsgsvr();
  223. }
  224. sysf_accountTrace(" 암 호 확 인 ");
  225. this.close(false);
  226. }
  227. //=======================================================================================
  228. // Event
  229. //---------------------------------------------------------------------------------------
  230. /****************************************************************************************
  231. * Components :
  232. * Components ID : SPZUM00400
  233. * Event : onload
  234. * Argument : 01.obj : Form
  235. * : 02.e : LoadEventInfo
  236. * Description :
  237. ****************************************************************************************/
  238. function SPZUM00400_onload(obj:Form, e:LoadEventInfo){
  239. //frmf_initForm(obj);
  240. // 중복로그인으로 암호확인 팝업이 떴을 때 메인프레임이 enable false 되면서 이 팝업도 같이 enable false 된다.
  241. this.enable = true;
  242. stt_userNm.text = sysf_getUserName() + "(" + sysf_getUserId() + ")";
  243. stt_deptNm.text = sysf_getUserInfo("dutplcenm");
  244. if(plgv_sType == "session"){
  245. stt_subTitle.text = "오랜 시간 사용자 입력이 없어\n정보보호를 위해 본인확인을 합니다.";
  246. //stt_titlemsg2.visible = true;
  247. //stt_titlemsg2.text = "";
  248. //stt_helpMsg.visible = false;
  249. movePosition(plgv_sType);
  250. }else if (plgv_sType == "duplogin"){
  251. stt_subTitle.text = "동일 사용자가 로그인 하였습니다\n정보보호를 위해 본인확인을 합니다.";
  252. //stt_titlemsg2.visible = true;
  253. //stt_titlemsg2.text = "";
  254. //stt_helpMsg.visible = false;
  255. movePosition(plgv_sType);
  256. frmf_setFocus(true);
  257. }else{
  258. if (plgv_sType == "logdetail") {
  259. stt_userNm.text = "의무기록";
  260. stt_deptNm.text = "의료정보과";
  261. }
  262. stt_subTitle.text = plgv_sTitlemsg;
  263. if(!utlf_isNull(plgv_sHelpmsg)){
  264. this.parent.position.height = this.parent.position.height + 50;
  265. this.position.height = this.position.height + 50;
  266. stt_helpMsg.visible = true;
  267. stt_helpMsg.text = plgv_sHelpmsg;
  268. }
  269. }
  270. edt_password.setFocus();
  271. if(plgv_sType == "pwdcnfm" || "logdetail"){
  272. btn_cancel.text = "취소";
  273. }else{
  274. btn_cancel.text = "종료";
  275. }
  276. }
  277. /****************************************************************************************
  278. * Components : Button
  279. * Components ID : btn_cancel
  280. * Event : onclick
  281. * Argument : 01.obj : Button
  282. * : 02.e : ClickEventInfo
  283. * Description : 취소
  284. ****************************************************************************************/
  285. function btn_cancel_onclick(obj:Button, e:ClickEventInfo)
  286. {
  287. var nRtn = null;
  288. if(plgv_sType == "pwdcnfm" || plgv_sType == "logdetail"){
  289. //비밀번호 확인용
  290. this.close(true);
  291. } else if(plgv_sType == "session") {
  292. this.close(true);
  293. } else{
  294. //세션 타임아웃 및 중복 로그인용
  295. nRtn = sysf_messageBox("현재 로그인한 사용자를 강제로 로그아웃시킵니다.\n저장하지 않은 모든 내용은 사라집니다.\n그래도 종료를", "Q003");
  296. if(nRtn == 6){
  297. this.close(true);
  298. }
  299. }
  300. }
  301. /****************************************************************************************
  302. * Components : Button
  303. * Components ID : btn_confirm
  304. * Event : onclick
  305. * Argument : 01.obj : Button
  306. * : 02.e : ClickEventInfo
  307. * Description : 비밀번호 확인
  308. ****************************************************************************************/
  309. function btn_confirm_onclick(obj:Button, e:ClickEventInfo){
  310. lf_confirmPassword("");
  311. }
  312. /****************************************************************************************
  313. * Components : Button
  314. * Components ID : btn_close
  315. * Event : onclick
  316. * Argument : 01.obj : Button
  317. * : 02.e : ClickEventInfo
  318. * Description : 팝업 닫기
  319. ****************************************************************************************/
  320. function btn_close_onclick(obj:Button, e:ClickEventInfo){
  321. this.close(true);
  322. }
  323. /****************************************************************************************
  324. * Components : Edit
  325. * Components ID : edt_password
  326. * Event : onkeyup
  327. * Argument : 01.obj : Edit
  328. * : 02.e : KeyEventInfo
  329. * Description : 비밀번호 입력 후 엔터키 처리
  330. ****************************************************************************************/
  331. function edt_password_onkeyup(obj:Edit, e:KeyEventInfo){
  332. if(e.keycode == 13){
  333. lf_confirmPassword("");
  334. }
  335. }
  336. function SPZUM00400_onkeydown(obj:Form, e:KeyEventInfo)
  337. {
  338. if(e.altKey) { // Alt 키가 눌러져 있는지 체크
  339. if(e.keycode == 115) return true; // F4키
  340. }
  341. }
  342. ]]></Script>
  343. </Form>
  344. </FDL>