SMZUM00300_상태메시지.xrw 58 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860
  1. <?xml version="1.0" encoding="EUC-KR"?>
  2. <?xml-stylesheet type="text/css" href="../../../com/hismainweb/css/hismain.css" ?>
  3. <xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3.org/2002/01/xforms" xmlns:ev="http://www.w3.org/2001/xml-events">
  4. <xhtml:head>
  5. <xhtml:title>메세지</xhtml:title>
  6. <model id="model1">
  7. <instance id="instance1">
  8. <root xmlns="">
  9. <properties>
  10. <screenloc>
  11. </screenloc>
  12. <clonenode>
  13. <scn>
  14. <sid/>
  15. <leftpos/>
  16. <toppos/>
  17. <status/>
  18. <mon/>
  19. </scn>
  20. </clonenode>
  21. <actscreen/>
  22. <menugroupinfo/>
  23. <configclone>
  24. <item>
  25. <cfgname/>
  26. <cfgvalue/>
  27. </item>
  28. </configclone>
  29. <popupmenu>
  30. <items>
  31. <name>소스보기</name>
  32. <func>fViewSource</func>
  33. </items>
  34. <items>
  35. <name>인스턴스</name>
  36. <func>fViewInstance</func>
  37. </items>
  38. <items>
  39. <name>로그보기</name>
  40. <func>fViewLog</func>
  41. </items>
  42. <items>
  43. <name>-</name>
  44. <func/>
  45. </items>
  46. <items>
  47. <name>화면출력</name>
  48. <func>fScreenPrint</func>
  49. </items>
  50. <items>
  51. <name>-</name>
  52. <func/>
  53. </items>
  54. <items>
  55. <name>버전정보</name>
  56. <func>fViewerAbout</func>
  57. </items>
  58. </popupmenu>
  59. </properties>
  60. <send>
  61. <screenloc>
  62. </screenloc>
  63. <prcpdd/>
  64. <instcd/>
  65. <awtyn/>
  66. <securitydata>
  67. <menugrupcd/>
  68. <menuitemcd/>
  69. <scrncd/>
  70. </securitydata>
  71. <awtgrpcd/>
  72. <awtstnsyn/>
  73. </send>
  74. <main>
  75. <msg/>
  76. <userinfo>
  77. <deptnm/>
  78. <usernm/>
  79. <logindt/>
  80. <wsnm/>
  81. </userinfo>
  82. </main>
  83. <hidden>
  84. <zbccode/>
  85. <jobkindlist/>
  86. </hidden>
  87. </root>
  88. </instance>
  89. <script type="javascript" ev:event="xforms-ready">
  90. <![CDATA[
  91. // Viewer가 완전히 로딩되기 이전에 model.property 를 사용하면 Viewer 다운현상
  92. // 메뉴Submit과 ready submit 동시 발생으로 인한 IE 다운현상
  93. // 메뉴가 로딩된후 관련 값을을 model.property에 설정하도록 viewer 내에서 타이머로 처리
  94. gMenuTimerID = window.setInterval("fMenuReady()",200);
  95. if(getUserInfo("dutplceinstcd")== "032") {
  96. caption1.attribute("background-color") = "#fdc87e";
  97. } else {
  98. caption1.attribute("background-color") = "#99ccff";
  99. }
  100. ]]>
  101. </script>
  102. <submission id="TRZUM00301" mediatype="application/x-www-form-urlencoded" method="post" ref="/root/send" resultref="/root/properties/screenloc"/>
  103. <submission id="TRZUM00302" mediatype="application/x-www-form-urlencoded" method="post" ref="/root/send" resultref="/root/properties/orderbasicinfo"/>
  104. <submission id="TXZUM00301" mediatype="application/x-www-form-urlencoded" method="post" ref="/root/send/screenloc" resultref="/root/hidden/screenloc"/>
  105. <submission id="TXZUM00302" mediatype="application/x-www-form-urlencoded" method="post" ref="/root/send" resultref="/root/properties/screenloc"/>
  106. <submission id="TXZUM00303" mediatype="application/x-www-form-urlencoded" method="post" ref="/root/send"/>
  107. <submission id="TXZUM00304" mediatype="application/x-www-form-urlencoded" method="post" ref="/root/send"/>
  108. <submission id="TXZUM00305" mediatype="application/x-www-form-urlencoded" method="post" ref="/root/send/securitydata"/>
  109. <submission id="TXZUM00306" mediatype="application/x-www-form-urlencoded" method="post" ref="/root/send"/>
  110. <submission id="TRZBC00101" mediatype="application/x-www-form-urlencoded" method="post"/>
  111. <submission id="TRZBC00105" mediatype="application/x-www-form-urlencoded" method="post"/>
  112. <submission id="TRZUM20001" mediatype="application/x-www-form-urlencoded" method="post" ref="/root/send" resultref="/root/hidden"/>
  113. </model>
  114. <script type="javascript" src="../../../com/commonweb/js/common.js"/>
  115. <script type="javascript" src="../../../com/commonweb/js/dateHelper.js"/>
  116. <script type="javascript" src="../../../com/commonweb/js/stringHelper.js"/>
  117. <script type="javascript" src="../../../com/basiccodeweb/js/ZBC006.js"/>
  118. <script type="javascript" src="../../../com/noticeinfoweb/js/noticepopup.js"/>
  119. <script type="javascript">
  120. <![CDATA[
  121. var screenLocSave = null; // 화면좌표 저장여부
  122. var msgsvrIPKeyStr = null; // msg server connect IP
  123. var msgsvrPortKeyStr = null; // msg server connect Port
  124. var msgsvrRetyrKeyStr = null; // msg server connect retry time
  125. var isConnected = false; // msg server 연결 여부
  126. var gPingTimerID = ""; // msg server 재접속 타이머 아이디
  127. var msg = ""; // 보낼 메시지
  128. var startTime = "";
  129. var endTime = "";
  130. var HISSystem = ""; //HIS여부
  131. var basicCodeList = "";
  132. // var gScreenTimerID = ""; // 화면 좌표 정보 loading용 타이머
  133. var gMenuTimerID = ""; // 최초 메뉴그룹 정보 저장용 타이머
  134. var gActivateWindowTimerID = ""; // 열린화면에서 선택한 화면을 activate() 하기위한 타이머
  135. //
  136. // function fLoadScreenInfo() {
  137. // alert("fLoadScreenInfo:"+htmlwindow.menuLoaded);
  138. // if (htmlwindow.menuLoaded) {
  139. // submit("TRZUM00301");
  140. // if (gScreenTimerID != "") {
  141. // window.clearInterval(gScreenTimerID);
  142. // gScreenTimerID = "";
  143. // }
  144. // }
  145. // }
  146. //
  147. function fInitialize(){
  148. /* fInitializeOnLoading() 함수로 이동*/
  149. //전체 공통 세션용 변수 reset
  150. model.resetProperty();
  151. //fDelGlobalVariable();
  152. //팝업 메뉴를 보이게 할지 여부 (true: 보인다. false: 숨긴다)
  153. // 반드시 Boolean type 을 사용한다. - 김기호 2008.02.19
  154. app.showPopupMenu(new Boolean(htmlwindow.DEVSystem));
  155. //로그 파일을 삭제한다. (해당 폴더까지 삭제함)
  156. //app.deleteLog();
  157. //1개월 로그만 남기고, 로그 파일을 삭제한다. (해당 폴더까지 삭제함) added by CBJ 2012.03.23
  158. app.deleteLog(1);
  159. //메인화면 상태 저장
  160. setGlobalVariable("mainclose", "N");
  161. //스크립트 버전정보 저장
  162. model.makeValue("/root/properties/jsversion",ScriptEngineMajorVersion()+"."+ScriptEngineMinorVersion()+"."+ScriptEngineBuildVersion());
  163. //사용중인 뷰어의 버전
  164. model.makeValue("/root/properties/tfviewerversion",app.appVersion );
  165. // 서버시간과 차이값을 저장해 놓는다.
  166. if (htmlwindow == null) {
  167. setGlobalVariable("timediff", "0");
  168. } else {
  169. setGlobalVariable("timediff", htmlwindow.diffTime);
  170. setGlobalVariable("currenttimemillis", htmlwindow.currentTimeMillis);
  171. }
  172. // 시간 동기화 120920 손병은
  173. var newDate = getNewDate();
  174. //window.exec("c:\\Program Files\\himed\\components\\KNUH\\kdate.bat",newDate.getDateFormat("YYYY/MM/DD hh:mm:ss"));
  175. // 세션 타임아웃 값을 저장해 놓는다.
  176. if (htmlwindow != null) {
  177. setGlobalVariable("session_timeout", htmlwindow.sessionTimeout);
  178. setGlobalVariable("last_submit", (new Date()).getTime());
  179. // setGlobalVariable("last_submit", newDate);
  180. }
  181. //사용자 정보 저장
  182. fSetUserInfo();
  183. fSetStatusUserInfo();
  184. initTitle();
  185. fSetMonitorInfo();
  186. fSetUrls();
  187. if (htmlwindow != null) {
  188. screenLocSave = new String(htmlwindow.screenLocSave);
  189. HISSystem = new String(htmlwindow.HISSystem);
  190. basicCodeList = new String(htmlwindow.basicCode);
  191. } else {
  192. screenLocSave = "false";
  193. HISSystem = "true";
  194. basicCodeList = "";
  195. }
  196. if(getUserInfo("dutplceinstcd")== "032") {
  197. caption1.attribute("background-color") = "#fdc87e";
  198. }
  199. // fInitializeOnLoading 에서 옮겨옴
  200. if (htmlwindow != null) {
  201. msgsvrIPKeyStr = new String(htmlwindow.msgsvrIP); // msg server connect IP
  202. msgsvrPortKeyStr = new String(htmlwindow.msgsvrPort); // msg server connect Port
  203. msgsvrRetryKeyStr = new String(htmlwindow.msgsvrRetyr) + "000"; // msg server retry time
  204. var retrymillis = parseInt(msgsvrRetryKeyStr);
  205. if (isNaN(retrymillis)) {
  206. retrymillis = 60000;
  207. }
  208. // msg server 접속 사용 여부 처리
  209. var msgsvrConnectKeyStr = new String(htmlwindow.msgsvrConnect);
  210. if (msgsvrConnectKeyStr == "true") {
  211. fConnectMsgsvr(); // msg server 접속시도
  212. gPingTimerID = window.setInterval("fMsgsvrPing()",retrymillis); // 타이머 기동
  213. }
  214. }
  215. if (screenLocSave == "true") {
  216. // TFMenu와 동시 submit 될때 오류가 발생하므로 menu가 로드된 후에만 실행되도록 타이머로 처리
  217. //gScreenTimerID = window.setInterval("fLoadScreenInfo()",500);
  218. setErrorOff();
  219. submit("TRZUM00301");
  220. }
  221. if (basicCodeList != "") {
  222. var basicCode = basicCodeList.split("|");
  223. setErrorOff();
  224. zbcfGetCodeListCache(null,basicCode);
  225. }
  226. // 마정민 대리 요청으로 의사이외의 직종에서도 처방기본정보 조회 가능하도록 수정 - 2008.10.09 김기호
  227. // && getUserInfo("jobkindcd") == "0330"
  228. fInitializsOrderBasicInfo();
  229. // 비밀번호 공지사항 띄우기. 손병은.
  230. if(submit("TRZUM20001")){
  231. var lastpwdchgdt = model.getValue("/root/hidden/lastpwdchgdt/lastpwdchgdt").substring(0,8);
  232. var logindt = getUserInfo("logindt").substring(0,8);
  233. var difmon;
  234. if(lastpwdchgdt == ""){
  235. //fOpenPwdNotice();
  236. fOpenPwdNotice2();
  237. }
  238. }
  239. //사용자별 바로가기 메뉴 호출
  240. window.htmlwindow.getShortcutMenuItem();
  241. //메뉴그룹 저장 및 기본화면 호출
  242. fSetMenuGroupInfo();
  243. // PC의 세션타임아웃 값 설정
  244. fSetSessionTimeout();
  245. // 사용자 설정에 따라서 메시지 팝업창을 띄워준다.
  246. var popupyn = fGetUserConfig("msgpopupflag");
  247. if (popupyn != "") {
  248. fOpenMsgPopup();
  249. }
  250. // 전자인증서 유효여부 체크(갱신)
  251. if (getSystemCd().substring(3, 6).toLowerCase() == "his" && (new Boolean(htmlwindow.DEVSystem) != true)) {
  252. fCheckSign();
  253. }
  254. /*
  255. // 비밀번호 주기적 변경토록 강제. 손병은.
  256. if(submit("TRZUM20001")){
  257. var lastpwdchgdt = model.getValue("/root/hidden/lastpwdchgdt/lastpwdchgdt").substring(0,8);
  258. var logindt = getUserInfo("logindt").substring(0,8);
  259. var difmon;
  260. if(lastpwdchgdt == ""){
  261. modal("SPZUM20000", "", null, null, null, "/root/hidden/lastpwdchgdt", "/root/hidden/lastpwdchgdt", "sysmenu:hidden;width:500px;height:310px");
  262. }else{
  263. difmon = getDifMonths(lastpwdchgdt, logindt);
  264. if(difmon >=6 )
  265. modal("SPZUM20000", "", null, null, null, "/root/hidden/lastpwdchgdt", "/root/hidden/lastpwdchgdt", "width:500px;height:310px");
  266. }
  267. }
  268. */
  269. // 조국 임시 공지사항 띄우기
  270. var jobkindcd = getUserInfo("jobkindcd");
  271. var userInstcd = getUserInfo("dutplceinstcd");
  272. if((getSystemCd().substring(0,3).toLowerCase() == "his") && (jobkindcd=="0330" || jobkindcd=="1140")) {
  273. fOpenNoticePopup();
  274. }
  275. if((getSystemCd().substring(0,3).toLowerCase() == "mis")) {
  276. fOpenNoticePopup();
  277. }
  278. /*
  279. if(userInstcd== "032") {
  280. caption1.attribute("background-color") = "#fdc87e";
  281. } else {
  282. caption1.attribute("class") = "message";
  283. }
  284. */
  285. // IRM메시지 있는지 체크(나중에 구현. 손병은)
  286. //checkIrm();
  287. }
  288. // start, end format: yyyymmdd
  289. function getDifDays(start, end)
  290. {
  291. var dateStart = new Date(start.substring(0, 4), start.substring(4, 6) - 1, start.substring(6, 8));
  292. var dateEnd = new Date(end.substring(0, 4), end.substring(4, 6) - 1, end.substring(6, 8));
  293. var difDays = (dateEnd.getTime() - dateStart.getTime()) / (24 * 60 * 60 * 1000);
  294. // because view this function
  295. //window.alert("- run getDifDays()\n- " + start + " ~ " + end + " => " + Math.ceil(difDays));
  296. return Math.ceil(difDays);
  297. }
  298. // start, end format: yyyymmdd
  299. function getDifMonths(start, end)
  300. {
  301. var startYear = start.substring(0, 4);
  302. var endYear = end.substring(0, 4);
  303. var startMonth = start.substring(4, 6) - 1;
  304. var endMonth = end.substring(4, 6) - 1;
  305. var startDay = start.substring(6, 8);
  306. var endDay = end.substring(6, 8);
  307. // 연도 차이가 나는 경우
  308. if (eval(startYear) < eval(endYear)) {
  309. // 종료일 월이 시작일 월보다 수치로 빠른 경우
  310. if (eval(startMonth) > eval(endMonth)) {
  311. var newEnd = startYear + "1231";
  312. var newStart = endYear + "0101";
  313. return (eval(getDifMonths(start, newEnd)) + eval(getDifMonths(newStart, end))).toFixed(2);
  314. // 종료일 월이 시작일 월보다 수치로 같거나 늦은 경우
  315. } else {
  316. var formMonth = eval(startMonth) + 1;
  317. if (eval(formMonth) < 10) formMonth = "0" + formMonth;
  318. var newStart = endYear + "" + formMonth + "" + startDay;
  319. var addMonths = (eval(endYear) - eval(startYear)) * 12;
  320. return (eval(addMonths) + eval(getDifMonths(newStart, end))).toFixed(2);
  321. }
  322. } else {
  323. // 월별 일수차 (30일 기준 차이 일수)
  324. var difDaysOnMonth = new Array(1, -2, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1);
  325. var difDaysTotal = getDifDays(start, end);
  326. for (i = startMonth; i < endMonth; i++) {
  327. if (i == 1 && isLeapYear(startYear)) difDaysTotal -= (difDaysOnMonth[i] + 1);
  328. else difDaysTotal -= difDaysOnMonth[i];
  329. }
  330. // because view this function
  331. //window.alert("- run getDifMonths()\n- " + start + " ~ " + end + " => " + (difDaysTotal / 30).toFixed(2));
  332. return (difDaysTotal / 30).toFixed(2);
  333. }
  334. }
  335. /**
  336. * @group :
  337. * @ver : 2009.06.29
  338. * @by : 차현철
  339. * @---------------------------------------------------
  340. * @type : function
  341. * @access : public
  342. * @desc : 개인별환경설정 및 처방환경설정에 세팅된 정보를 가져온다
  343. * @return :
  344. * @---------------------------------------------------
  345. */
  346. function fInitializsOrderBasicInfo () {
  347. if (HISSystem == "true") {
  348. model.setValue("/root/send/prcpdd", getCurrentDate());
  349. model.setValue("/root/send/instcd", getUserInfo("dutplceinstcd"));
  350. // 처방기본정보 조회
  351. setErrorOff();
  352. submit("TRZUM00302");
  353. }
  354. }
  355. function fInitializeOnLoading() {
  356. //전체 공통 세션용 변수 reset
  357. model.resetProperty();
  358. //fDelGlobalVariable();
  359. //팝업 메뉴를 보이게 할지 여부 (true: 보인다. false: 숨긴다)
  360. // 반드시 Boolean type 을 사용한다. - 김기호 2008.02.19
  361. app.showPopupMenu(new Boolean(htmlwindow.DEVSystem));
  362. //로그 파일을 삭제한다. (해당 폴더까지 삭제함)
  363. //app.deleteLog();
  364. //메인화면 상태 저장
  365. setGlobalVariable("mainclose", "N");
  366. //스크립트 버전정보 저장
  367. model.makeValue("/root/properties/jsversion",ScriptEngineMajorVersion()+"."+ScriptEngineMinorVersion()+"."+ScriptEngineBuildVersion());
  368. //사용중인 뷰어의 버전
  369. model.makeValue("/root/properties/tfviewerversion",app.appVersion );
  370. // 서버시간과 차이값을 저장해 놓는다.
  371. if (htmlwindow == null) {
  372. setGlobalVariable("timediff", "0");
  373. } else {
  374. setGlobalVariable("timediff", htmlwindow.diffTime);
  375. }
  376. // 세션 타임아웃 값을 저장해 놓는다.
  377. if (htmlwindow != null) {
  378. setGlobalVariable("session_timeout", htmlwindow.sessionTimeout);
  379. setGlobalVariable("last_submit", (new Date()).getTime());
  380. }
  381. //사용자 정보 저장
  382. fSetUserInfo();
  383. fSetStatusUserInfo();
  384. // initTitle();
  385. fSetMonitorInfo();
  386. fSetUrls();
  387. /* 특정 클라이언트에서 과도한 Ping 메시지 발생으로 인하여 아래의 로직은 finitialize 에서 한번만 수행함
  388. if (htmlwindow != null) {
  389. msgsvrIPKeyStr = new String(htmlwindow.msgsvrIP); // msg server connect IP
  390. msgsvrPortKeyStr = new String(htmlwindow.msgsvrPort); // msg server connect Port
  391. msgsvrRetryKeyStr = new String(htmlwindow.msgsvrRetyr) + "000"; // msg server retry time
  392. var retrymillis = parseInt(msgsvrRetryKeyStr);
  393. if (isNaN(retrymillis)) {
  394. retrymillis = 60000;
  395. }
  396. // msg server 접속 사용 여부 처리
  397. var msgsvrConnectKeyStr = new String(htmlwindow.msgsvrConnect);
  398. if (msgsvrConnectKeyStr == "true") {
  399. fConnectMsgsvr(); // msg server 접속시도
  400. gPingTimerID = window.setInterval("fMsgsvrPing()",retrymillis); // 타이머 기동
  401. }
  402. }
  403. */
  404. if (htmlwindow != null) {
  405. screenLocSave = new String(htmlwindow.screenLocSave);
  406. HISSystem = new String(htmlwindow.HISSystem);
  407. basicCodeList = new String(htmlwindow.basicCode);
  408. } else {
  409. screenLocSave = "false";
  410. HISSystem = "true";
  411. basicCodeList = "";
  412. }
  413. }
  414. function fMenuReady() {
  415. // menu가 로딩되지 않아 이중 submit 관련 처리를 해야 하는 경우
  416. //fInitializeOnLoading();
  417. if (htmlwindow.menuLoaded) {
  418. if (gMenuTimerID != "") { // 타이머 클리어
  419. window.clearInterval(gMenuTimerID);
  420. gMenuTimerID = "";
  421. }
  422. fInitialize();
  423. }
  424. }
  425. //메뉴그룹에 해당하는 정보믈 설정한다.
  426. function fSetMenuGroupInfo(){
  427. if (htmlwindow != null ) {
  428. var menuGrpInfo = new String(htmlwindow.menuGroupInfo);
  429. var menuGrpInfoArr = menuGrpInfo.split("^");
  430. //메뉴그룹 저장
  431. setGlobalVariable("menugroupcd", menuGrpInfoArr[0]);
  432. //사용부서 저장
  433. setGlobalVariable("prestdeptcd", menuGrpInfoArr[2]);
  434. //기본화면
  435. if( menuGrpInfoArr[1] != "" ){
  436. fOpenMenuItem(menuGrpInfoArr[1]);
  437. }else{
  438. fOpenMenuItem("SMZUM00200|M|||");
  439. }
  440. }
  441. }
  442. //메뉴에서 선택한 화면을 연다.
  443. function fOpenMenuItem(idx){
  444. var main = getViewer("bizMain");
  445. if(! isNull(idx)){
  446. var itemID = idx.split("|");
  447. var xrw = "../../../com/hismainweb/xrw/"+itemID[0]+".xrw";//xrw url
  448. var isMain = itemID[1];// M or P
  449. //화면권한 생성
  450. setGlobalVariable("scrnauth", itemID[2]);
  451. //메뉴아이템 저장
  452. setGlobalVariable("menuitemcd", itemID[3]);
  453. //메뉴파라미터 저장
  454. setGlobalVariable("menuparam", itemID[4]);
  455. // 화면접근권한이 없는 경우 : scrnauth = 00000000 / r:0 x:0 p:0
  456. if (itemID[2] == "00000000") {
  457. var denyXrw = "../../../com/commonweb/xrw/SPZZZ00500_권한제한안내.xrw";
  458. //openUrl(xrw);
  459. modal("SPZZZ00500", null, null, null,"SPZZZ00500", null, null, "width:588;height:354");
  460. return;
  461. }
  462. // 보안 로깅 기능 추가. 손병은 130911
  463. model.setValue("/root/send/securitydata/menugrupcd",new String(htmlwindow.menuGroupInfo).split("^")[0].split("|")[0]);
  464. model.setValue("/root/send/securitydata/menuitemcd",itemID[3]);
  465. model.setValue("/root/send/securitydata/scrncd",itemID[0]);
  466. submit("TXZUM00305",false);
  467. //업무화면 호출
  468. if( isMain == "P"){//Modeless로 띄울 경우
  469. // 메뉴에서 설정한 권한 값을 가져온다.
  470. setScreenAuth();
  471. // 메뉴에서 설정한 사용부서 값을 가져온다.
  472. setScreenPrestDeptCd();
  473. // 메뉴Parameter정보를 설정한다.
  474. setScreenMenuParameter();
  475. //openUrl(xrw, "", "", "", itemID[3]+"_"+itemID[0]);//화면명이 id인 popup창을 띄운다.
  476. //openUrl(xrw);
  477. //메뉴에서 클릭한 경우에도 이전에 뜬 좌표 정보를 조회해서 화면을 띄워준다.
  478. //2010-03-10 오지훈
  479. var xyPos = getScreenLocation(itemID[0]);
  480. if(xyPos != ""){
  481. loc = xyPos.split("|");
  482. open(itemID[0], loc[0], loc[1], loc[2]);
  483. }else{
  484. open(itemID[0]);
  485. }
  486. //바로가기로 오픈 하는 창에 포커스를 준다.
  487. screenKey = fGetWindowKey(itemID[0]);
  488. if(screenKey != null){
  489. model.setValue("/root/properties/actscreen", screenKey);
  490. fActivateOpenWindowTimer();
  491. }
  492. }else{
  493. if (main.window.javascript.closeChildWindow != undefined) {
  494. main.window.javascript.closeChildWindow();
  495. }
  496. main.window.load(xrw);
  497. main.activate();
  498. }
  499. }
  500. }
  501. // 에러가 발생해도 에러 메시지를 보이면 안된다. 에러나면 무조건 return 처리
  502. function fCheckSign() {
  503. body.createChild("xforms:object", "id:KMClientAX; clsid:{d3c608b5-b664-4962-91b7-289da892953a}; visibility:hidden; left:0px; top:0px; width:0px; height:0px; ");
  504. var kmiip = getUserInfo("kmiip");
  505. var kmiport = getUserInfo("kmiport");
  506. var userid = getUserId();
  507. var dn = "";
  508. try {
  509. if (!KMClientAX.kmsConnect(kmiip, kmiport)) {
  510. // KMI 연결실패
  511. model.addLog("KMClientAC.kmsConnect() Fail [" + userid + "] time [" + getCurrentDateTime() + "]");
  512. return;
  513. }
  514. if (KMClientAX.kmsInit() == "") {
  515. // KMI 모듈초기화 실패
  516. KMClientAX.kmsDisconnect();
  517. model.addLog("KMClientAC.kmsInit() Fail [" + userid + "] time [" + getCurrentDateTime() + "]");
  518. return;
  519. }
  520. if ((dn = KMClientAX.GetKeyAndCert(userid)) == "") {
  521. // 인증서 획득시 오류
  522. KMClientAX.kmsDisconnect();
  523. model.addLog("KMClientAC.GetKeyAndCert() Fail [" + userid + "] time [" + getCurrentDateTime() + "]");
  524. return;
  525. }
  526. switch (KMClientAX.IsCertNew(userid, dn)) {
  527. case 2 : // 인증서 갱신실패
  528. messageBox("전자 서명을 위한 인증서 갱신에", "E009", getKMIErrMsg());
  529. break;
  530. case 3 : // 인증서 만료
  531. messageBox("전자 서명을 위한 인증서가 만료되어 사용", "E001", "인증서를 재발급 받으시기 바랍니다.");
  532. break;
  533. default :
  534. model.addLog("KMClientAX.IsCertNew() execute [" + userid + "] time [" + getCurrentDateTime() + "]");
  535. }
  536. KMClientAX.LocalDelKeyAndCert(userid, "");
  537. KMClientAX.kmsDisconnect();
  538. } catch (e) {
  539. // 예외 발생시에도 return;
  540. model.addLog("fCheckSign() Fail [" + userid + "] time [" + getCurrentDateTime() + "]");
  541. return;
  542. }
  543. }
  544. /*
  545. //전체 공통 팝업 메뉴
  546. //원본소스 보기
  547. function fViewSource(){
  548. window.viewSource();
  549. }
  550. //인스턴스 보기
  551. function fViewInstance(){
  552. window.viewInstance();
  553. }
  554. //로그보기
  555. function fViewLog(){
  556. window.viewLog();
  557. }
  558. //화면출력
  559. function fScreenPrint(){
  560. window.print();
  561. }
  562. //버전정보
  563. function fViewerAbout(){
  564. window.about();
  565. }
  566. */
  567. /**
  568. * @group :
  569. * @ver : 2007.06.26
  570. * @by : 이민섭
  571. * @---------------------------------------------------2
  572. * @type : function
  573. * @access : public
  574. * @desc : 메시지 서버 접속
  575. * @return :
  576. * @---------------------------------------------------
  577. */
  578. function fConnectMsgsvr() {
  579. socket.connect(msgsvrIPKeyStr, msgsvrPortKeyStr); // ip와, port 설정 후 연결을 시도한다.
  580. }
  581. /**
  582. * @group :
  583. * @ver : 2007.06.26
  584. * @by : 이민섭
  585. * @---------------------------------------------------
  586. * @type : function
  587. * @access : public
  588. * @desc : 받은 메시지 처리
  589. * @return :
  590. * @---------------------------------------------------
  591. */
  592. function fMsgCut() {
  593. }
  594. /**
  595. * @group :
  596. * @ver : 2007.06.26
  597. * @by : 이민섭
  598. * @---------------------------------------------------
  599. * @type : function
  600. * @access : public
  601. * @desc : Ping 메시지 전송
  602. * @return :
  603. * @---------------------------------------------------
  604. */
  605. function fMsgsvrPing() {
  606. if(!isConnected || (startTime > endTime) ) {
  607. fConnectMsgsvr(); // reconnect 시도
  608. } else {
  609. var nTime = new Date();
  610. startTime = getDateTime( nTime ,'S');
  611. socket.sendString(fMakePingMessage(getUserId())); // ping 메시지 전송
  612. }
  613. }
  614. /**
  615. * @group :
  616. * @ver : 2012.01.25
  617. * @by : 손병은
  618. * @---------------------------------------------------
  619. * @type : function
  620. * @access : public
  621. * @desc : User 확인 메시지 전송
  622. * @return :
  623. * @---------------------------------------------------
  624. */
  625. function fMsgsvrUserNotify() {
  626. socket.sendString(fMakeUserNotifyMessage(getUserId()));
  627. }
  628. /**
  629. * @group :
  630. * @ver : 2012.01.25
  631. * @by : 손병은
  632. * @---------------------------------------------------
  633. * @type : function
  634. * @access : public
  635. * @desc : User 확인 메시지 전송
  636. * @return :
  637. * @---------------------------------------------------
  638. */
  639. function fMsgsvrIrm() {
  640. socket.sendString(fMakeIrmMessage(getUserId()));
  641. }
  642. /**
  643. * @group :
  644. * @ver : 2007.06.26
  645. * @by : 이민섭
  646. * @---------------------------------------------------
  647. * @type : function
  648. * @access : public
  649. * @desc : 로그인을 위한 사용자 아이디로 변환 (10자리로 표현)
  650. * @return :
  651. * @---------------------------------------------------
  652. */
  653. function fMakeLoginMessage(id) {
  654. var idStr = id.toString().getRightPad(10," ");
  655. var loginMsg = "L"+"0000000000" + idStr + "0000";
  656. return loginMsg;
  657. }
  658. /**
  659. * @group :
  660. * @ver : 2007.06.26
  661. * @by : 이민섭
  662. * @---------------------------------------------------
  663. * @type : function
  664. * @access : public
  665. * @desc : 단순 Ping 메시지를 생성한다.
  666. * @return :
  667. * @---------------------------------------------------
  668. */
  669. function fMakePingMessage(id) {
  670. var idStr = id.toString().getRightPad(10," ");
  671. var pingMsg = "z"+"0000000000" + idStr + "0000";
  672. return pingMsg;
  673. }
  674. /**
  675. * @group :
  676. * @ver : 2012.01.25
  677. * @by : 손병은
  678. * @---------------------------------------------------
  679. * @type : function
  680. * @access : public
  681. * @desc : User 확인 메시지 전송.
  682. * @return :
  683. * @---------------------------------------------------
  684. */
  685. function fMakeUserNotifyMessage(id) {
  686. var idStr = id.toString().getRightPad(10," ");
  687. var userNotifyMsg = "O"+"0000000000" + idStr + "0000";
  688. return userNotifyMsg;
  689. }
  690. /**
  691. * @group :
  692. * @ver : 2013.02.14
  693. * @by : 손병은
  694. * @---------------------------------------------------
  695. * @type : function
  696. * @access : public
  697. * @desc : IRM생성 메시지 전송.
  698. * @return :
  699. * @---------------------------------------------------
  700. */
  701. function fMakeIrmMessage(id) {
  702. var idStr = id.toString().getRightPad(10," ");
  703. var irmMsg = "I"+"0000000000" + idStr + "0000";
  704. return irmMsg;
  705. }
  706. function checkIrm(){
  707. var menuGrpInfo = new String(htmlwindow.menuGroupInfo);
  708. var menuGrpInfoArr = menuGrpInfo.split("^");
  709. }
  710. /**
  711. * @group :
  712. * @ver : 2007.06.26
  713. * @by : 이민섭
  714. * @---------------------------------------------------
  715. * @type : function
  716. * @access : public
  717. * @desc : 받은 메시지 한글자씩 잘라 메인화면에 아이콘 표시
  718. * @return :
  719. * @---------------------------------------------------
  720. */
  721. function fSetMessage(str) {
  722. var msg;
  723. for (var i=0; i < str.length; i++) {
  724. msg = str.charAt(i);
  725. if (msg.length >0 && ( msg == "N" || msg == "E" || msg == "U" || msg == "1" || msg == "2" || msg == "3" || msg == "O" )) {
  726. htmlwindow.changeMsgIcon(msg); // 메인 화면에 메시지 알림 표시
  727. }else if(msg == "IRM"){
  728. }
  729. }
  730. }
  731. function fOpenMsgPopup() {
  732. // 연결 아이콘 초기화
  733. if (isConnected) {
  734. htmlwindow.changeMsgIcon("E"); // 메인 화면에 연결 끊김 표시
  735. } else {
  736. htmlwindow.changeMsgIcon("N"); // 메인 화면에 연결 끊김 표시
  737. }
  738. // 메시지 팝업 띄운다.
  739. modal("SPZMI00101", "", "1022", "81", "SPZMI00101", "", "");
  740. // 연결 아이콘 초기화
  741. if (isConnected) {
  742. htmlwindow.changeMsgIcon("E"); // 메인 화면에 연결 끊김 표시
  743. } else {
  744. htmlwindow.changeMsgIcon("N"); // 메인 화면에 연결 끊김 표시
  745. }
  746. }
  747. //경북대 - 손병은 추가
  748. //임시 공지사항 팝업 함수화. 2011-04-06
  749. function fOpenPopup(popupUrl, popupWid, w, h){
  750. var leftPosition = (htmlwindow.screen.availWidth) ? (htmlwindow.screen.availWidth-w)/2 : 0;
  751. var topPosition = (htmlwindow.screen.availHeight) ? (htmlwindow.screen.availHeight-h)/2 : 0;
  752. var prop = 'height='+h+',width='+w+',top='+topPosition+',left='+leftPosition;
  753. openHtml(getDomain() + popupUrl, popupWid, prop);
  754. }
  755. // 손병은 추가
  756. // 비밀번호 변경 공지사항 팝업
  757. function fOpenPwdNotice(){
  758. var userInstcd = getUserInfo("dutplceinstcd");
  759. var popupWid = "pwdpopup";
  760. var h = 300;
  761. var w = 400;
  762. var leftPosition = (htmlwindow.screen.availWidth) ? (htmlwindow.screen.availWidth-w)/2 : 0;
  763. var topPosition = (htmlwindow.screen.availHeight) ? (htmlwindow.screen.availHeight-h)/2 : 0;
  764. var prop = 'height='+h+',width='+w+',top='+topPosition+',left='+leftPosition;
  765. var popupUrl = "/himed2/webapps/com/hismainweb/html/passwd.html";
  766. openHtml(getDomain() + popupUrl, popupWid, prop);
  767. }
  768. // 손병은 추가
  769. // 비밀번호 변경 공지사항 팝업2
  770. function fOpenPwdNotice2(){
  771. modal("SPZUM20000");
  772. }
  773. // //경북대 - 조국 추가
  774. // //공지사항 팝업메뉴 이동 : hismainweb => noticeinfoweb (2013/09/13_손성훈)
  775. // //임시 공지사항 팝업 호출
  776. // function fOpenNoticePopup() {
  777. //
  778. // var userInstcd = getUserInfo("dutplceinstcd");
  779. // var jobkindcd = getUserInfo("jobkindcd");
  780. //
  781. // if((getSystemCd().substring(0,3).toLowerCase() == "his") && (userInstcd == "031")) {
  782. // /* 본원. 의사& 간호사 공통 공지 ----------------------------------------------------- */
  783. // var popupUrl = "/himed/webapps/com/hismainweb/html/tempnotice.html";
  784. // var popupWid = "noticepopup";
  785. //
  786. // var w = 550;
  787. // var h = 450;
  788. // /*------------------------------------------------------------------------------------- */
  789. //
  790. // // /* 본원. 의사& 간호사 개별 공지 -----------------------------------------------------
  791. // // var jobkindcd = getUserInfo("jobkindcd");
  792. // // var userInstcd = getUserInfo("dutplceinstcd");
  793. //
  794. // // var popupUrl;
  795. // // var w;
  796. // // var h;
  797. // // if(jobkindcd=="0330"){
  798. // // popupUrl = "/himed/webapps/com/hismainweb/html/tempnotice.html";
  799. // // w = 550;
  800. // // h = 300;
  801. // // }else if(jobkindcd=="1140") {
  802. // // popupUrl = "/himed/webapps/com/hismainweb/html/tempnotice_nurse.html";
  803. // // w = 500;
  804. // // h = 400;
  805. // // }
  806. //
  807. // var popupWid = "noticepopup";
  808. // //------------------------------------------------------------------------------------- */
  809. //
  810. // } else if((getSystemCd().substring(0,3).toLowerCase() == "his") && (userInstcd == "032")) {
  811. // var jobkindcd = getUserInfo("jobkindcd");
  812. // var userInstcd = getUserInfo("dutplceinstcd");
  813. //
  814. // var popupUrl;
  815. // var w;
  816. // var h;
  817. // if(jobkindcd=="0330"){
  818. // popupUrl = "/himed/webapps/com/hismainweb/html/tempnotice032.html";
  819. // w = 550;
  820. // h = 450;
  821. // }else if(jobkindcd=="1140") {
  822. // popupUrl = "/himed/webapps/com/hismainweb/html/tempnotice032_nurse.html";
  823. // w = 500;
  824. // h = 450;
  825. // }
  826. //
  827. // var popupWid = "noticepopup";
  828. //
  829. // } else if((getSystemCd().substring(0,3).toLowerCase() == "mis") && (userInstcd == "032")) {
  830. // var popupUrl = "/himed/webapps/com/hismainweb/html/tempnotice_mis032.html";
  831. // var popupWid = "noticepopup";
  832. // var w = 550;
  833. // var h = 450;
  834. // }else if((getSystemCd().substring(0,3).toLowerCase() == "mis") && (userInstcd == "031")) {
  835. // var popupUrl = "/himed/webapps/com/hismainweb/html/tempnotice_mis031.html";
  836. // var popupWid = "noticepopup";
  837. // var w = 550;
  838. // var h = 450;
  839. // }
  840. //
  841. // var leftPosition = (htmlwindow.screen.availWidth) ? (htmlwindow.screen.availWidth-w)/2 : 0;
  842. // var topPosition = (htmlwindow.screen.availHeight) ? (htmlwindow.screen.availHeight-h)/2 : 0;
  843. // var prop = 'height='+h+',width='+w+',top='+topPosition+',left='+leftPosition;
  844. //
  845. // // 공지사항 올림 내림 설정.
  846. // if((getSystemCd().substring(0,3).toLowerCase() == "mis") && ((userInstcd == "031") || (userInstcd == "032"))) {
  847. // if(userInstcd == "031" || userInstcd == "032"){
  848. // //openHtml(getDomain() + popupUrl, popupWid, prop);
  849. // }
  850. //
  851. //
  852. // }else if((getSystemCd().substring(0,3).toLowerCase() == "his") && ((userInstcd == "031") || (userInstcd == "032"))){
  853. // if( userInstcd == "031" || userInstcd == "032"){
  854. // //openHtml(getDomain() + popupUrl, popupWid, prop);
  855. // }
  856. // }
  857. // /* */
  858. // }
  859. //
  860. // 개인별 화면 좌표 관리 기능 구현을 위한 스크립트
  861. //
  862. var gvScreenRootPath="/root/properties/screenloc";
  863. var gvScreenLocPath = "/root/properties/screenloc/scn";
  864. var gvScreenClonePath="/root/properties/clonenode/scn";
  865. var gvScreenIDNode = "sid";
  866. var gvScreenLeftPosNode = "leftpos";
  867. var gvScreenTopPosNode = "toppos";
  868. var gvScreenMonitorNoNode = "mon";
  869. var gvScreenStatusNode ="status";
  870. // 모니터 정보를 저장해 놓기 위한 변수
  871. var gvMons = 1;
  872. var gvStartXY = null;
  873. var gvWidthHeight = null;
  874. var gvMonInit = null;
  875. // 열린화면 윈도우 객체 저장을 위한 Dictionary 객체
  876. var gvDic = new ActiveXObject("Scripting.Dictionary");
  877. // 개인별 AWT 사용여부 변수
  878. var gvUserAwtYN ;
  879. var gvUserAwtGrpCd;
  880. var gvUserAwtStnsYN ;
  881. // 개인별 AWT 세팅
  882. function fSetUserAwtYN(flag){
  883. gvUserAwtYN = flag;
  884. if(getUserInfo("dutplceinstcd")== "031"){
  885. if(gvUserAwtYN == "Y"){
  886. imgawt.src = "../../../com/hismainweb/images/awt_on_031.gif";
  887. }else{
  888. imgawt.src = "../../../com/hismainweb/images/awt_off_031.gif";
  889. }
  890. }else if(getUserInfo("dutplceinstcd")== "032"){
  891. if(gvUserAwtYN == "Y"){
  892. imgawt.src = "../../../com/hismainweb/images/awt_on_032.gif";
  893. }else{
  894. imgawt.src = "../../../com/hismainweb/images/awt_off_032.gif";
  895. }
  896. }
  897. model.setValue("/root/send/awtyn", flag);
  898. submit("TXZUM00303",false);
  899. }
  900. // 개인별 AWT 사용여부 가져옴.
  901. function fGetUserAwtYN(){
  902. return gvUserAwtYN ;
  903. }
  904. // 개인별 AWT 그룹코드 세팅 2013.08.23 손병은
  905. function fSetUserAwtGrpCd(grpcd){
  906. gvUserAwtGrpCd = grpcd;
  907. model.setValue("/root/send/awtgrpcd",grpcd);
  908. submit("TXZUM00304",false);
  909. }
  910. // 개인별 AWT 그룹코드 가져옴 2013.08.23 손병은
  911. function fGetUserAwtGrpCd(){
  912. return gvUserAwtGrpCd;
  913. }
  914. // 개인별 AWT 구문 세팅
  915. function fSetUserAwtStnsYN(flag){
  916. gvUserAwtStnsYN = flag;
  917. if(getUserInfo("dutplceinstcd")== "031"){
  918. if(gvUserAwtStnsYN == "Y"){
  919. imgawtstns.src = "../../../com/hismainweb/images/awtstns_on_031.gif";
  920. }else{
  921. imgawtstns.src = "../../../com/hismainweb/images/awtstns_off_031.gif";
  922. }
  923. }else if(getUserInfo("dutplceinstcd")== "032"){
  924. if(gvUserAwtStnsYN == "Y"){
  925. imgawtstns.src = "../../../com/hismainweb/images/awtstns_on_032.gif";
  926. }else{
  927. imgawtstns.src = "../../../com/hismainweb/images/awtstns_off_032.gif";
  928. }
  929. }
  930. model.setValue("/root/send/awtstnsyn", flag);
  931. submit("TXZUM00306",false);
  932. }
  933. // 개인별 AWT 구문 세팅 가져옴 2013.12.26 손병은
  934. function fGetUserAwtStnsYN(){
  935. return gvUserAwtStnsYN;
  936. }
  937. function fGetUpdatedScreenLocations() {
  938. var nodes = instance1.selectnodes(gvScreenLocPath+"[status=&quot;I&quot;]");
  939. var sendNode = instance1.selectsinglenode("/root/send/screenloc");
  940. var node = null;
  941. for(var i=0;i<nodes.length;i++) {
  942. node = nodes.item(i).clonenode(true);
  943. sendNode.appendchild(node);
  944. }
  945. model.refresh();
  946. }
  947. /**********************************************************/
  948. /* common.js 에서 호출하는 메소드들이므로 수정하지 않는다. */
  949. /**********************************************************/
  950. function fSetStatusUserInfo() {
  951. deptNm.value = getUserInfo("dutplcenm");
  952. userNm.value = getUserName();
  953. loginDt.value = getTitleLoginDate();
  954. wsNm.value = htmlwindow.wasname;
  955. if(getUserInfo("systemcd") == "HIS031" || getUserInfo("systemcd") == "HIS032" ){
  956. imgawtstns.visible = true;
  957. imgawt.visible = true;
  958. fSetUserAwtYN(getUserInfo("awtyn"));
  959. fSetUserAwtStnsYN(getUserInfo("awtstnsyn"));
  960. }
  961. gvUserAwtGrpCd = getUserInfo("awtgrpcd");
  962. model.refresh();
  963. }
  964. function fSetStatusMessage(msg) {
  965. model.setValue("/root/main/msg",msg);
  966. model.refresh();
  967. }
  968. // Dictionary에 열린화면 윈도우 객체를 저장한다
  969. function fAddOpenWindow(key, winObj) {
  970. gvDic.item(key) = winObj;
  971. }
  972. // Dictionary에서 주어진 key에 해당되는 윈도우 객체를 제거한다.
  973. function fRemoveOpenWindow(key) {
  974. if (gvDic.exists(key)) {
  975. gvDic.remove(key);
  976. }
  977. }
  978. // 현재 Dictionary 객체에 열린화면으로 등록되어 있는 목록을 배열로 반환한다.
  979. function fGetOpenWindowList() {
  980. var keys = (new VBArray(gvDic.keys())).toArray();
  981. return keys;
  982. }
  983. // 열린화면에서 선택한 화면을 activate() 하면 다시 뒤로 숨어버리는 문제가 있어
  984. // 이를 타이머를 사용하여 일정 시간 후에 activate() 되도록 변경함
  985. function fActivateOpenWindowTimer() {
  986. if (gActivateWindowTimerID != "") { // 타이머 클리어
  987. window.clearInterval(gActivateWindowTimerID);
  988. gActivateWindowTimerID = "";
  989. }
  990. var actScnId = model.getValue("/root/properties/actscreen");
  991. if (actScnId != null && actScnId !="") {
  992. if (actScnId == "main") { // main window activate
  993. htmlwindow.setFocus();
  994. } else {
  995. fActivateOpenWindow(actScnId);
  996. }
  997. }
  998. }
  999. // 주어진 key에 해당되는 윈도우 객체를 활성화한다.
  1000. function fActivateOpenWindow(key) {
  1001. if (gvDic.exists(key)) {
  1002. var winObj = gvDic.item(key);
  1003. if(winObj != null) {
  1004. winObj.restore();
  1005. winObj.activate();
  1006. }
  1007. }
  1008. }
  1009. // 열려있는 화면들 중에서 화면 ID를 사용하여 윈도우 객체를 찾아서 반환한다.
  1010. function fGetOpenWindow(sid) {
  1011. var wlist = fGetOpenWindowList();
  1012. var wkey = null;
  1013. wkey = fGetWindowKey(sid)
  1014. if (wkey != null) {
  1015. if (gvDic.exists(wkey)) {
  1016. return gvDic.item(wkey);
  1017. }
  1018. }
  1019. return null;
  1020. }
  1021. // 열려있는 팝업 화면들을 모두 닫는다.
  1022. function fCloseAllWindow(key) {
  1023. var wlist = null;
  1024. var key = null;
  1025. wlist = fGetOpenWindowList();
  1026. var i = 0;
  1027. // for(i=0;i<wlist.length;i++) {
  1028. for(i=wlist.length-1; i>=0 ;i--) {
  1029. //while (wlist.length > 0) {
  1030. key = wlist[i];
  1031. //alert(key+","+wlist.length);
  1032. if (gvDic.exists(key)) {
  1033. var winObj = gvDic.item(key);
  1034. if(winObj != null && winObj.children.length == 0 && winObj.type != "main") {
  1035. winObj.close();
  1036. }
  1037. }
  1038. wlist = fGetOpenWindowList(); // 갱신된 윈도우 목록을 다시 가져온다.
  1039. }
  1040. }
  1041. function fOpenScreenList(popupX, popupY) {
  1042. //var popupX = event.ScreenX-224;
  1043. //var popupY = event.ScreenY;
  1044. model.resetInstanceNode("/root/properties/actscreen");
  1045. window.load("SPZUM01200_열린화면.xrw", "modal", "SMZUM01200", "top:"+popupY+"px; left:"+popupX+"px; width:224px; height:301px; caption:hidden; ");
  1046. var actScnId = model.getValue("/root/properties/actscreen");
  1047. if (actScnId != null && actScnId !="") {
  1048. gActivateWindowTimerID = window.setInterval("fActivateOpenWindowTimer()",100); // 타이머 기동으로 해결됨
  1049. }
  1050. /*
  1051. var actScnId = model.getValue("/root/properties/actscreen");
  1052. if (actScnId != null && actScnId !="") {
  1053. if (actScnId == "main") { // main window activate
  1054. htmlwindow.setFocus();
  1055. } else {
  1056. fActivateOpenWindow(actScnId);
  1057. }
  1058. } */
  1059. }
  1060. // UID로 주어진 화면보다 나중에 생성된 화면들 중에서 바로 다음에 생성된 Modal 화면의 정보를 반환한다.
  1061. // 반환되는 모달 화면 정보는 "화면ID|UID|modal|화면명" 형태의 문자열이다.
  1062. // 해당 Modal 화면이 없으면 "" 을 반환한다.
  1063. function fGetLastModal(uid) {
  1064. var wlist = fGetOpenWindowList();
  1065. var modal_name = "";
  1066. var split_temp = null;
  1067. var uid_pattern = "|"+uid+"|";
  1068. for(var i=wlist.length-1;i>=0;i--) {
  1069. // find modal
  1070. if ( wlist[i].indexOf(uid_pattern) >= 0) break;
  1071. // modal 여부 확인
  1072. split_temp = wlist[i].split("|");
  1073. if (split_temp.length > 3 && split_temp[2] == "modal") {
  1074. modal_name = wlist[i];
  1075. }
  1076. }
  1077. return modal_name;
  1078. }
  1079. function fDecode64(inp) {
  1080. inp = new String(inp);
  1081. var ttb = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
  1082. var ret = new Array(inp.length*3/4);
  1083. var c1, c2, c3;
  1084. var e1, e2, e3, e4;
  1085. var i = 0;
  1086. var j = 0;
  1087. do {
  1088. e1 = ttb.indexOf(inp.charAt(i++));
  1089. e2 = ttb.indexOf(inp.charAt(i++));
  1090. e3 = ttb.indexOf(inp.charAt(i++));
  1091. e4 = ttb.indexOf(inp.charAt(i++));
  1092. c1 = (e1<<2)|(e2>>4);
  1093. c2 = ((e2&15)<<4)|(e3>>2);
  1094. c3 = ((e3&3)<<6)|e4;
  1095. ret[j++] = c1;
  1096. if (e3 != 64) {
  1097. ret[j++] = c2;
  1098. }
  1099. if (e4 != 64) {
  1100. ret[j++] = c3;
  1101. }
  1102. } while (i < inp.length);
  1103. return ret;
  1104. }
  1105. function fDecodeUTF8(barr) {
  1106. var str="";
  1107. for(i=0; i<barr.length; i++) {
  1108. if((barr[i] & 240) == 224) {
  1109. c = ((barr[i]&15)<<12) | ((barr[i+1]&63)<<6) | (barr[i+2]&63) ;
  1110. str += String.fromCharCode(c);
  1111. i +=2;
  1112. } else {
  1113. str += String.fromCharCode(barr[i]);
  1114. }
  1115. }
  1116. return str;
  1117. }
  1118. function fReadCookie(name) {
  1119. var nameEQ = name + "=";
  1120. var ca = htmldocument.cookie.split(';');
  1121. for(var i=0;i < ca.length;i++) {
  1122. var c = ca[i];
  1123. while (c.charAt(0)==' ') c = c.substring(1,c.length);
  1124. if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  1125. }
  1126. return null;
  1127. }
  1128. function fSetUserInfo() {
  1129. var userInfoStr = fDecodeUTF8(fDecode64(fReadCookie(htmlwindow.sessionCookie)));
  1130. var userInfoArr = userInfoStr.split("|");
  1131. var userInfoKeyStr = new String(htmlwindow.sessionFormat);
  1132. var userInfoKeyArr = userInfoKeyStr.split("|");
  1133. var len = userInfoArr.length;
  1134. for(i=0;i<len;i++) {
  1135. setGlobalVariable(userInfoKeyArr[i], userInfoArr[i]);
  1136. }
  1137. setGlobalVariable("userinfos", userInfoStr);
  1138. setGlobalVariable("domain", htmlwindow.domainName);
  1139. setGlobalVariable("domainSSL", htmlwindow.domainNameSSL);
  1140. setGlobalVariable("macaddr", fGetMacAddress());
  1141. // 서버시간 차이 구하기
  1142. var logintime = getGlobalVariable("logindt"); // yyyymmddhhmmssSSS
  1143. }
  1144. // 타시스템 연결 URL 정보를 프로퍼티에 담아놓는다.
  1145. function fSetUrls() {
  1146. var urls = new String(htmlwindow.systemUrls);
  1147. var urlSplit = urls.split("|");
  1148. var len = urlSplit.length;
  1149. var i = 0;
  1150. var sysCode = null;
  1151. var sysName = null;
  1152. var sysUrl = null;
  1153. while(i<len-1) {
  1154. sysCode = urlSplit[i++];
  1155. sysName = urlSplit[i++];
  1156. sysUrl = urlSplit[i++];
  1157. //alert(sysCode+","+sysName+","+sysUrl);
  1158. setGlobalVariable("sysname"+sysCode, sysName);
  1159. setGlobalVariable("sysurl"+sysCode, "http://"+sysUrl);
  1160. }
  1161. }
  1162. // 화면 좌표 정보 데이터를 모두 삭제한다.(DB도 함께)
  1163. function fClearAllScreenLocation() {
  1164. submit("TXZUM00302");
  1165. }
  1166. // sid와 절대좌표를 넘기면 sid를 key로 화면의 모니터번호와 상대좌표정보를 인스턴스에 저장한다.
  1167. function fSetScreenLocation(sid, leftpos, toppos) {
  1168. var coord = fGetRelativeCoordinate(leftpos,toppos);
  1169. var mon = coord[0];
  1170. var offsetx = coord[1];
  1171. var offsety = coord[2];
  1172. var sidnode = instance1.selectsinglenode(gvScreenLocPath+"[sid=&quot;"+sid+"&quot;]");
  1173. if ( sidnode == null ) {
  1174. // screen location is not found, add a new screen location
  1175. model.setValue(gvScreenClonePath+"/"+gvScreenIDNode,sid);
  1176. model.setValue(gvScreenClonePath+"/"+gvScreenLeftPosNode,offsetx);
  1177. model.setValue(gvScreenClonePath+"/"+gvScreenTopPosNode,offsety);
  1178. model.setValue(gvScreenClonePath+"/"+gvScreenMonitorNoNode,mon);
  1179. model.setValue(gvScreenClonePath+"/"+gvScreenStatusNode,"I");
  1180. var scnnode = instance1.selectsinglenode(gvScreenClonePath).clonenode(true);
  1181. var parentnode = instance1.selectsinglenode(gvScreenRootPath);
  1182. parentnode.appendchild(scnnode);
  1183. } else {
  1184. // screen location is found
  1185. sidnode.selectsinglenode(gvScreenLeftPosNode).text=offsetx;
  1186. sidnode.selectsinglenode(gvScreenTopPosNode).text=offsety;
  1187. sidnode.selectsinglenode(gvScreenMonitorNoNode).text=mon;
  1188. sidnode.selectsinglenode(gvScreenStatusNode).text="I";
  1189. }
  1190. }
  1191. // sid를 key로 해당 화면의 절대좌표정보를 "x|y" 형태의 문자열로 반환한다. 좌표정보가 없으면 ""를 반환한다.
  1192. function fGetScreenLocation(sid) {
  1193. var sidnode = instance1.selectsinglenode(gvScreenLocPath+"[sid=&quot;"+sid+"&quot;]");
  1194. if ( sidnode == null ) {
  1195. return "";
  1196. } else {
  1197. var offsetx = parseInt(sidnode.selectsinglenode(gvScreenLeftPosNode).text);
  1198. var offsety = parseInt(sidnode.selectsinglenode(gvScreenTopPosNode).text);
  1199. var mon = parseInt(sidnode.selectsinglenode(gvScreenMonitorNoNode).text);
  1200. if (mon >= gvMons) {
  1201. mon = 0;
  1202. }
  1203. // 화면을 벗어나지 안도록 범위 체크한다.
  1204. if (offsetx >= 0 && offsetx < gvWidthHeight[mon][0]) {
  1205. offsetx = offsetx + gvStartXY[mon][0];
  1206. } else {
  1207. offsetx = gvStartXY[mon][0];
  1208. }
  1209. if (offsety >= 0 && offsety < gvWidthHeight[mon][1]) {
  1210. offsety = offsety + gvStartXY[mon][1];
  1211. } else {
  1212. offsety = gvStartXY[mon][1];
  1213. }
  1214. return offsetx+ "|" + offsety;
  1215. }
  1216. }
  1217. // 모니터 개수, 시작좌표, 화면 크기 정보를 담아놓는다.
  1218. function fSetMonitorInfo() {
  1219. if (gvMonInit != null) {
  1220. return;
  1221. }
  1222. gvMonInit = true;
  1223. var coord = app.monitorcoordinates;
  1224. var resol = app.monitorresolution;
  1225. gvMons = app.monitornumber;
  1226. model.makeValue("/root/properties/monitor/mons",gvMons);
  1227. model.makeValue("/root/properties/monitor/coord",coord);
  1228. model.makeValue("/root/properties/monitor/resol",resol);
  1229. gvStartXY = new Array(gvMons);
  1230. gvWidthHeight = new Array(gvMons);
  1231. var coord = coord.split("|");
  1232. var resol = resol.split("|");
  1233. // 판독실 모니터 3, 4개로 인한 오류사항. 디버깅 이전까지 오류를 없애기 위해 설정.
  1234. if (gvMons > 2) {
  1235. gvMons = 2;
  1236. }
  1237. // 모니터 시작 좌표와 끝좌표를 계산해 놓는다.
  1238. for(var i=0;i<gvMons;i++) {
  1239. gvStartXY[i] = coord[i].split(",");
  1240. gvWidthHeight[i] = resol[i].split(",");
  1241. gvStartXY[i][0] = parseInt(gvStartXY[i][0]);
  1242. gvStartXY[i][1] = parseInt(gvStartXY[i][1]);
  1243. gvWidthHeight[i][0] = parseInt(gvWidthHeight[i][0]);
  1244. gvWidthHeight[i][1] = parseInt(gvWidthHeight[i][1]);
  1245. }
  1246. }
  1247. // 모니터 개수를 리턴한다.
  1248. function fGetMonitorNumbers() {
  1249. return gvMons;
  1250. }
  1251. // 모니터의 시작 좌표를 리턴한다.
  1252. function fGetMonitorStartXY(monno) {
  1253. if (monno >= gvMons || monno < 0) {
  1254. monno = 0;
  1255. }
  1256. return gvStartXY[monno];
  1257. }
  1258. // 모니터의 크기를 리턴한다.
  1259. function fGetMonitorSize(monno) {
  1260. if (monno >= gvMons || monno < 0) {
  1261. monno = 0;
  1262. }
  1263. return gvWidthHeight[monno];
  1264. }
  1265. // 주어진 모니터번호와 상대좌표를 사용하여 절대 좌표를 계산하여 배열로 리턴한다.
  1266. function fGetAbsoluteCoordinate(monno,leftpos,toppos) {
  1267. if (gvMonInit == null) {
  1268. fSetMonitorInfo();
  1269. }
  1270. if (monno >= gvMons || monno < 0) {
  1271. monno = 0;
  1272. }
  1273. var absleftpos = gvStartXY[monno][0] + parseInt(leftpos);
  1274. var abstoppos = gvStartXY[monno][1] + parseInt(toppos);
  1275. var retpos = new Array(2);
  1276. retpos[0] = absleftpos;
  1277. retpos[1] = abstoppos;
  1278. return retpos;
  1279. }
  1280. // 주어진 화면 좌표를 모니터 번호와 모니터 기준의 상대좌표로 변환해서 리턴한다.
  1281. function fGetRelativeCoordinate(leftpos, toppos) {
  1282. if (gvMonInit == null) {
  1283. fSetMonitorInfo();
  1284. }
  1285. var targetmon = 0;
  1286. var targetx = 0;
  1287. var targety = 0;
  1288. var offsetx = 0;
  1289. var offsety = 0;
  1290. for(i=0;i<gvMons;i++) {
  1291. offsetx = leftpos-gvStartXY[i][0];
  1292. offsety = toppos-gvStartXY[i][1];
  1293. // 범위에 들어가는 모니터를 찾아서 모니터 번호와 상대좌표를 계산한다.
  1294. if ( offsetx >= 0 && offsetx < gvWidthHeight[i][0] && offsety >= 0 && offsety < gvWidthHeight[i][1]) {
  1295. targetmon = i;
  1296. targetx = offsetx;
  1297. targety = offsety;
  1298. break;
  1299. }
  1300. }
  1301. var relativeCoord = new Array(3);
  1302. relativeCoord[0] = targetmon;
  1303. relativeCoord[1] = targetx;
  1304. relativeCoord[2] = targety;
  1305. return relativeCoord;
  1306. }
  1307. // 로그아웃 처리 기능이다.
  1308. function fLogout(type) {
  1309. // 메시지 Ping 타이머 클리어
  1310. if (gPingTimerID != "") {
  1311. window.clearInterval(gPingTimerID);
  1312. }
  1313. // 소켓 닫기
  1314. if (isConnected) {
  1315. fSetStatusMessage("메시지 서버와의 연결을 종료합니다.");
  1316. socket.close();
  1317. isConnected = false;
  1318. }
  1319. // 열린 팝업화면들을 모두 닫는다.
  1320. fSetStatusMessage("열려있는 창을 모두 닫습니다.");
  1321. fCloseAllWindow();
  1322. // 화면 좌표 정보 저장
  1323. if (screenLocSave == "true") {
  1324. fSetStatusMessage("화면 좌표 정보를 서버에 저장합니다.");
  1325. fGetUpdatedScreenLocations();
  1326. setForceOn();
  1327. if (submit("TXZUM00301")) {
  1328. model.removeNodeset("/root/send/screenloc/scn");
  1329. }
  1330. }
  1331. //전체 공통 세션용 변수 reset
  1332. model.resetProperty();
  1333. //fDelGlobalVariable();
  1334. if (type == "session") {
  1335. htmlwindow.logout();
  1336. }
  1337. }
  1338. //세션변수 clear
  1339. // 2008-02-28 사용안함 : 김기호
  1340. // model.resetProperty() 사용
  1341. function fDelGlobalVariable(){
  1342. var propertyStr = model.propertyNames("*");
  1343. var propertyArr = propertyStr.split("*");
  1344. for(var i = 0; i < propertyArr.length; i++ ) {
  1345. if(propertyArr[i].split("_")[0] == getSystemCd()){
  1346. model.property(propertyArr[i]) = "";
  1347. }
  1348. }
  1349. }
  1350. // Macaddress 주소를 반환한다.
  1351. function fGetMacAddress() {
  1352. var maclist = app.macaddress;
  1353. // 여러개인 경우 ^ 로 구분되므로 이중에서 하나를 선택한다.
  1354. // VMware 설치시 생성되는 macaddress는 005056XXYYZZ 형태이므로 이를 제외시킨다.
  1355. var macarr = maclist.split("^");
  1356. var macaddr = "";
  1357. for(var i=0;i<macarr.length;i++) {
  1358. macaddr = macarr[i];
  1359. if ( macaddr.indexOf("005056",0) != 0 ) {
  1360. break;
  1361. }
  1362. }
  1363. return macaddr;
  1364. }
  1365. // PC의 세션타임아웃 값 설정 함수
  1366. function fSetSessionTimeout() {
  1367. var stmnode = instance1.selectsinglenode("/root/properties/session/timeout");
  1368. var stmvalue = "";
  1369. if (stmnode != null) {
  1370. stmvalue = stmnode.selectsinglenode("sessntm").text;
  1371. if (isNaN(parseInt(stmvalue)) == false) {
  1372. setGlobalVariable("session_timeout", stmvalue);
  1373. }
  1374. }
  1375. }
  1376. //
  1377. // 사용자 설정 정보 관련 함수들
  1378. //
  1379. var gvUserConfigRootPath="/root/properties/config";
  1380. var gvUserConfigItemPath = gvUserConfigRootPath+"/item";
  1381. var gvUserConfigClonePath="/root/properties/configclone/item";
  1382. function fGetUserConfig(cfgname) {
  1383. var cfgnode = instance1.selectsinglenode(gvUserConfigItemPath+"[cfgname=&quot;"+cfgname+"&quot;]");
  1384. var cfgvalue = "";
  1385. if ( cfgnode != null ) {
  1386. // configuration is found
  1387. cfgvalue = cfgnode.selectsinglenode("cfgvalue").text;
  1388. }
  1389. //alert(cfgname+","+cfgvalue);
  1390. return cfgvalue;
  1391. }
  1392. function fSetUserConfig(cfgname, cfgvalue) {
  1393. var cfgnode = instance1.selectsinglenode(gvUserConfigItemPath+"[cfgname=&quot;"+cfgname+"&quot;]");
  1394. if ( cfgnode == null ) {
  1395. // config is not found, add a new config
  1396. model.setValue(gvUserConfigClonePath+"/cfgname",cfgname);
  1397. model.setValue(gvUserConfigClonePath+"/cfgvalue",cfgvalue);
  1398. var clonenode = instance1.selectsinglenode(gvUserConfigClonePath).clonenode(true);
  1399. var parentnode = instance1.selectsinglenode(gvUserConfigRootPath);
  1400. parentnode.appendchild(clonenode);
  1401. } else {
  1402. // screen location is found
  1403. cfgnode.selectsinglenode("cfgvalue").text=cfgvalue;
  1404. }
  1405. }
  1406. //
  1407. // 국민건강보험 연계용 함수들
  1408. //
  1409. var gvNhicUrl = null;
  1410. var gvNhicObject = null;
  1411. // NHIC Active-X 객체를 반환한다. 최초 호출시에는 객체를 생성한 후 반환한다.
  1412. // 객체가 생성되지 않는 경우에는 null을 리턴한다.
  1413. function fGetNhicObject() {
  1414. if (gvNhicObject != null) {
  1415. return gvNhicObject;
  1416. }
  1417. try {
  1418. body.createChild("xforms:object",
  1419. "id:nhicAX; clsid:{1669D75E-B1C3-46DF-A410-7FF60B39B762}; visibility:hidden; left:0px; top:0px; width:0px; height:0px; ");
  1420. gvNhicObject = nhicAX;
  1421. } catch (e) {
  1422. gvNhicObject = null;
  1423. }
  1424. return gvNhicObject;
  1425. }
  1426. // NHIC 연계 호출을 위한 공단 URL 문자열을 반환한다.
  1427. function fGetNhicURL() {
  1428. if (gvNhicUrl != null) {
  1429. return gvNhicUrl;
  1430. }
  1431. // 연계 URL 설정
  1432. if (htmlwindow != null) {
  1433. gvNhicUrl = new String(htmlwindow.nhicUrl);
  1434. } else {
  1435. gvNhicUrl = "http://nhic.codns.com:1443/services/nhic?WSDL"; // 개발용 URL
  1436. }
  1437. return gvNhicUrl;
  1438. }
  1439. //
  1440. // 전자인증 연계용 함수들
  1441. //
  1442. var _CERT_YEAR_ = 1970;
  1443. var _CERT_MONTH_ = 1;
  1444. var _CERT_DATE_ = 1;
  1445. var _CERT_UID_ = "";
  1446. var SKCommObject = null;
  1447. // SKCommAX 객체를 반환한다. 최초 호출시에는 객체를 생성한 후 반환한다.
  1448. // 객체가 생성되지 않는 경우에는 null을 리턴한다.
  1449. function fGetSKCommObject() {
  1450. if (SKCommObject != null) {
  1451. return SKCommObject;
  1452. }
  1453. try {
  1454. //body.createChild("xforms:object", "id:CertManX; clsid:{ec5d5118-9fde-4a3e-84f3-c2b711740e70}; visibility:hidden; left:0px; top:0px; width:0px; height:0px; ");
  1455. SKCommObject = CertManX;
  1456. } catch (e) {
  1457. SKCommObject = null;
  1458. }
  1459. return SKCommObject;
  1460. }
  1461. // 열려있는 화면들 중에서 화면 ID를 사용하여 화면Key를 반환한다.
  1462. function fGetWindowKey(sid) {
  1463. var wlist = fGetOpenWindowList();
  1464. var wkey = null;
  1465. for(var i = 0 ; i < wlist.length ; i++) {
  1466. if ( wlist[i].indexOf(sid) == 0 ) {
  1467. wkey = wlist[i];
  1468. }
  1469. }
  1470. return wkey;
  1471. }
  1472. //
  1473. // 공통코드 Cache 함수는 ZBC006.js 에 들어 있음
  1474. //
  1475. function fOpenPhoneInfoPopup(){
  1476. //modal("SPZUM01800", "", "1022", "151", "SPZUM01800", "", "","","","","notaskbar");
  1477. var posX = window.event.screenX-224;
  1478. var posY = window.event.screenY;
  1479. window.load("SPZUM01800_전화번호안내.xrw", "modal", "SPZUM01800", "top:"+posY+"px; left:"+posX+"px; width:245px; height:340px; caption:hidden; ");
  1480. }
  1481. function fOpenDeptInfoPopup(){
  1482. //modal("SPZUM01800", "", "1022", "151", "SPZUM01800", "", "","","","","notaskbar");
  1483. var posX = window.event.screenX-224;
  1484. var posY = window.event.screenY;
  1485. //setParameter("SPZUM01900_PARM_deptlist",htmlwindow.deptList);
  1486. window.load("SPZUM01900_부서선택.xrw", "modal", "SPZUM01900", "top:"+posY+"px; left:"+posX+"px; width:245px; height:50px; caption:hidden; ");
  1487. if(getParameter("SPZUM01900_RETN_selected") == "true"){
  1488. // 열린 팝업화면들을 모두 닫는다.
  1489. fSetStatusMessage("열려있는 창을 모두 닫습니다.");
  1490. fCloseAllWindow();
  1491. //htmlwindow.changeSession(getParameter("SPZUM01900_RETN_newsessionstr"));
  1492. fChangeDept(getParameter("SPZUM01900_RETN_newsessionstr"),getParameter("SPZUM01900_RETN_menugroupstr"));
  1493. }
  1494. }
  1495. function fChangeDept(sessionstr, menugroupstr){
  1496. fSetUserInfo();
  1497. fSetStatusUserInfo();
  1498. initTitle();
  1499. htmlwindow.changeMenu(menugroupstr);
  1500. //사용자별 바로가기 메뉴 호출
  1501. htmlwindow.getShortcutMenuItem();
  1502. // 처방기본정보 가져오기
  1503. fInitializsOrderBasicInfo();
  1504. //메뉴그룹 저장 및 기본화면 호출
  1505. fSetMenuGroupInfo();
  1506. delPatientInfos();
  1507. if(getUserInfo("dutplceinstcd")== "032") {
  1508. caption1.attribute("background-color") = "#fdc87e";
  1509. } else {
  1510. caption1.attribute("background-color") = "#99ccff";
  1511. }
  1512. // 이미지변환
  1513. htmlwindow.changeImage(getUserInfo("dutplceinstcd"));
  1514. }
  1515. ]]>
  1516. </script>
  1517. </xhtml:head>
  1518. <xhtml:body guideline="1,566;">
  1519. <object id="CertManX" clsid="{ec5d5118-9fde-4a3e-84f3-c2b711740e70}" visibility="hidden" style="left:0px; top:0px; width:0px; height:0px; "/>
  1520. <object id="socket" clsid="{81e9de7e-90be-4958-bbda-ac731c05aba8}" visibility="hidden" style="left:0px; top:0px; width:0px; height:0px; ">
  1521. <!-- 소켓 받은 메시지 이벤트 -->
  1522. <script type="javascript" ev:event="OnReceive(nDataLength, szID)">
  1523. <![CDATA[
  1524. var msg = socket.recvString(); // 받은 메시지
  1525. fSetMessage(msg);
  1526. if (msg == "z") {
  1527. var tTime = new Date();
  1528. endTime = getDateTime( tTime ,'S');
  1529. }
  1530. ]]>
  1531. </script>
  1532. <!-- 소켓 에러 이벤트 -->
  1533. <script type="javascript" ev:event="OnError(lError, szMsg)">
  1534. <![CDATA[
  1535. fSetStatusMessage("메시지 서버 연결에 실패했습니다. ");
  1536. socket.close(); // 소켓 닫기
  1537. isConnected = false; // 접속 여부 false
  1538. htmlwindow.changeMsgIcon("N"); // 메인 화면에 연결 끊김 표시
  1539. ]]>
  1540. </script>
  1541. <!-- 소켓 연결 이벤트 -->
  1542. <script type="javascript" ev:event="OnConnect(szID)">
  1543. <![CDATA[
  1544. isConnected = true; // 접속 여부 false
  1545. fSetStatusMessage("메시지 서버에 연결되었습니다.");
  1546. msg = fMakeLoginMessage(getUserId()); // 로그인 메시지를 생성한다.
  1547. socket.sendString(msg); // 로그인 메시지를 전송한다.
  1548. htmlwindow.changeMsgIcon("E"); // 연결 확인
  1549. ]]>
  1550. </script>
  1551. <!-- 소켓 close 이벤트 -->
  1552. <script type="javascript" ev:event="OnClose(szID)">
  1553. <![CDATA[
  1554. isConnected = false; // 접속 여부 false
  1555. htmlwindow.changeMsgIcon("N");
  1556. ]]>
  1557. </script>
  1558. </object>
  1559. <caption id="caption1" style="left:0px; top:0px; width:1203px; height:23px; vertical-align:middle; background-color:#99ccff; "/>
  1560. <output id="msg" ref="/root/main/msg" class="output_message_b" style="left:10px; top:3px; width:445px; height:19px; "/>
  1561. <output id="deptNm" ref="/root/main/userinfo/deptnm" class="output_userinfo" style="left:460px; top:3px; width:200px; height:19px; text-align:right; "/>
  1562. <output id="userNm" ref="/root/main/userinfo/usernm" class="output_userinfo" style="left:665px; top:3px; width:125px; height:19px; "/>
  1563. <caption id="caption2" class="output_userinfo" style="left:795px; top:3px; width:82px; height:19px; ">최초접속시간:</caption>
  1564. <output id="loginDt" ref="/root/main/userinfo/logindt" class="output_userinfo" style="left:877px; top:3px; width:168px; height:19px; "/>
  1565. <script type="javascript" ev:event="onmousedown">
  1566. <![CDATA[
  1567. //setPopupMenu("body", false, gvPopupMenuPath+"/items", "name", "func");
  1568. ]]>
  1569. </script>
  1570. <script type="javascript" ev:event="DOMFocusOut">
  1571. <![CDATA[
  1572. //initPopupMenu();
  1573. ]]>
  1574. </script>
  1575. <output id="wsNm" ref="/root/main/userinfo/wsnm" class="output_userinfo" style="left:1050px; top:3px; width:55px; height:19px; "/>
  1576. <img id="imgawt" visibility="hidden" style="left:1155px; top:6px; width:38px; height:11px; background-stretch:stretch; ">
  1577. <script type="javascript" ev:event="onclick">
  1578. <![CDATA[
  1579. var flag = fGetUserAwtYN();
  1580. if(flag == "Y"){
  1581. fSetUserAwtYN("N");
  1582. }else{
  1583. fSetUserAwtYN("Y");
  1584. }
  1585. model.refresh();
  1586. ]]>
  1587. </script>
  1588. </img>
  1589. <img id="imgawtstns" visibility="hidden" style="left:1110px; top:6px; width:38px; height:11px; background-stretch:stretch; ">
  1590. <script type="javascript" ev:event="onclick">
  1591. <![CDATA[
  1592. var flag = fGetUserAwtStnsYN();
  1593. if(flag == "Y"){
  1594. fSetUserAwtStnsYN("N");
  1595. }else{
  1596. fSetUserAwtStnsYN("Y");
  1597. }
  1598. model.refresh();
  1599. ]]>
  1600. </script>
  1601. </img>
  1602. </xhtml:body>
  1603. </xhtml:html>