common.js 125 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735
  1. // 화면 연계 관련 함수들
  2. var gvMyUIDPath = null;
  3. var gvOpUIDPath = null;
  4. var gvChUIDPath = null;
  5. var gvDate = null;
  6. var gvParamPath = null;
  7. var gvPropPath = null;
  8. var gvAuthPath = null;
  9. var gvTitlePath = null;
  10. var gvScnTypePath = null;
  11. var gvErrorMsgPath = null;
  12. var gvSystemPath = null;
  13. var gvMenuPath = null;
  14. var gvMenuGroupCdPath = null;
  15. var gvMenuPrestDeptCdPath = null;
  16. var gvMenuItemCdPath = null;
  17. var gvMenuParamPath = null;
  18. var gvSystemCd = null;
  19. //var gvMyCBOnClosePath = null;
  20. //var gvOpCBOnClosePath = null;
  21. // 레포트 연계 관련
  22. var gvReportPath = null;
  23. var gvSubReportPath = null;
  24. var gvReportPropsPath = null;
  25. var gvReportParamsPath = null;
  26. var gvReportOptionsPath = null;
  27. //환자정보 연계 관련
  28. var gvPatientInfoPath = null;
  29. var gvOperationInfoPath = null;
  30. var gvConsultInfoPath = null;
  31. var gvPatientInfoFlagPath = null;
  32. var gvOrderBasicInfoPath = null;
  33. //공통메뉴 관련
  34. var gvPopupMenuPath = null;
  35. //온라인 도움말 관련
  36. var gvHelpPage = null;
  37. // 화면정보
  38. var gvTaskBarHeight = 34; // 작업표시줄 높이
  39. var gvDefaultScrWidth = 1211; // 기본 nU 프로그램 화면 너비(캡션 & 보더 폭 제외)
  40. var gvDefaultScrHeight = 784; // 기본 nU 프로그램 화면 높이(캡션 & 보더 폭 제외)
  41. // 화면좌표저장여부
  42. var gvSaveLoc = null;
  43. // 경북대 20101028
  44. var fEssentialBackColor = "#ffe4b5";
  45. /**
  46. * @-----------------------------------------------------------------------------------
  47. * @desc : 폼이 로딩되고 스크립트엔진이 초기화 되며 실행되는 함수
  48. * @param :
  49. * @return :
  50. * @-----------------------------------------------------------------------------------
  51. */
  52. function xforms_model_construct() {
  53. gvPropPath="/root/properties";
  54. gvMyUIDPath=gvPropPath+"/uid/myself";
  55. gvOpUIDPath=gvPropPath+"/uid/opener";
  56. gvChUIDPath=gvPropPath+"/uid/children/";
  57. // gvMyCBOnClosePath=gvPropPath+"/callback/onclose/myself";
  58. // gvOpCBOnClosePath=gvPropPath+"/callback/onclose/opener";
  59. gvParamPath=gvPropPath+"/parameters";
  60. gvChildClosePath=gvPropPath+"/childclose";
  61. gvSystemPath=gvPropPath+"/domain";
  62. gvAuthPath=gvPropPath+"/auth";
  63. gvMenuPath=gvPropPath+"/menu";
  64. gvMenuGroupCdPath=gvMenuPath+"/menugroupcd";
  65. gvMenuPrestDeptCdPath=gvMenuPath+"/menuprestdeptcd";
  66. gvMenuItemCdPath=gvMenuPath+"/menuitemcd";
  67. gvMenuParamPath=gvMenuPath+"/menuparam";
  68. gvTitlePath=gvPropPath+"/title";
  69. gvScnTypePath=gvPropPath+"/stype";
  70. gvErrorMsgPath=gvPropPath+"/error";
  71. gvReportPath=gvPropPath+"/report/mainreport";
  72. gvSubReportPath=gvPropPath+"/report/subreport";
  73. gvReportPropsPath=gvReportPath+"/props";
  74. gvReportParamsPath=gvReportPath+"/params";
  75. gvReportOptionsPath=gvReportPath+"/options";
  76. gvPatientInfoPath=gvPropPath+"/patient";
  77. gvOperationInfoPath=gvPatientInfoPath+"/operationinfo";
  78. gvConsultInfoPath=gvPatientInfoPath+"/consultinfo";
  79. gvPatientInfoFlagPath=gvPatientInfoPath+"/patientflag";
  80. gvOrderBasicInfoPath=gvPropPath+"/orderbasicinfo";
  81. gvPopupMenuPath=gvPropPath+"/popupmenu";
  82. gvSaveLocPath = gvPropPath + "/saveloc";
  83. model.makeValue(gvSaveLocPath, "true");
  84. // 화면의 UID 설정(생성시간을 사용)
  85. // window.load()는 xforms_model_construct() 후 리턴되므로 여기에서 uid를 설정해야함
  86. gvDate = new Date();
  87. var uid = gvDate.getTime();
  88. model.makeValue(gvMyUIDPath,uid);
  89. model.makeValue(gvOpUIDPath,"");
  90. model.makeValue(gvSystemPath,"");
  91. if (isPopup()) {
  92. // opener uid를 가져온다.
  93. model.setValue(gvOpUIDPath,opener.model.getValue(gvMyUIDPath));
  94. // opener callback할 함수을 저장한다.
  95. // model.makeValue(gvOpCBOnClosePath,opener.model.getValue(gvMyCBOnClosePath));
  96. // opener의 latest에 uid를 넣어준다.
  97. opener.model.makeValue(gvChUIDPath+"latest",uid);
  98. // opener의 권한정보를 가져온다.
  99. // 2008.08.29 김기호 수정-직접 부여된 권한코드가 존재할 경우 해당 권한코드로 바꾼다.
  100. var spclauth = getGlobalVariable("spclscrnauth");
  101. setGlobalVariable("spclscrnauth", "");
  102. if (spclauth != "") {
  103. model.makeValue(gvAuthPath, spclauth);
  104. } else {
  105. // 특정하게 부여한 코드가 없는 경우는 부모창의 권한코드를 상속받는다.
  106. model.makeValue(gvAuthPath, opener.model.getValue(gvAuthPath));
  107. }
  108. // opener의 메뉴파라미터정보를 가져온다.
  109. model.makeValue(gvMenuParamPath,opener.model.getValue(gvMenuParamPath));
  110. // 연결된 시스템의 시스템 코드를 저장한다.(타시스템 화면 Open시 필요)
  111. model.setValue(gvSystemPath,getGlobalVariable("systemcode"),true);
  112. setGlobalVariable("systemcode","");
  113. // 윈도우 크기 설정
  114. setWindowSize();
  115. // 타이블 정보를 설정한다. 아래 addOpenWindow() 이전에 수행되어야 한다.
  116. initTitle();
  117. // 열린 화면 목록에 등록
  118. addOpenWindow();
  119. } else {
  120. // 타이블 정보를 설정한다.
  121. initTitle();
  122. // 메뉴에서 설정한 권한 값을 가져온다.
  123. // 2008.08.29 김기호 수정-직접 부여된 권한코드가 존재할 경우 해당 권한코드로 바꾼다.
  124. var spclauth = getGlobalVariable("spclscrnauth");
  125. setGlobalVariable("spclscrnauth", "");
  126. if (spclauth != "") {
  127. // 특정하게 부여한 코드가 존재하면 메뉴권한에서 내려준 권한을 무시하고 새로 부여한 코드로 덮어쓴다.
  128. setGlobalVariable("scrnauth", spclauth);
  129. }
  130. setScreenAuth();
  131. // 메뉴Parameter정보를 설정한다.
  132. setScreenMenuParameter();
  133. }
  134. // 메뉴정보를 설정한다.
  135. setScreenMenuGroup();
  136. // 메뉴Item정보를 설정한다.
  137. setScreenMenuItem();
  138. // 메뉴에서 설정한 사용부서 값을 가져온다.
  139. setScreenPrestDeptCd();
  140. event.stopPropagation(); // 이벤트 버블링 막기(아니면 이 루틴이 3번 호출된다.)
  141. }
  142. /**
  143. * @-----------------------------------------------------------------------------------
  144. * @desc : 폼이 로딩된 후 모든 초기화가 끝나고 폼이 화면에 표시된 이후에 발생(컨트롤에 접근가능)
  145. * @param :
  146. * @return :
  147. * @-----------------------------------------------------------------------------------
  148. */
  149. function xforms_ready() {
  150. // 팝업메뉴 초기화
  151. window.setPopupMenu(false);
  152. // 팝업아이콘 설정 - 2012.06.14
  153. window.setIcon(htmlwindow.faviconURL);
  154. // 화면별 도움말key 설정
  155. //지정된 컨트롤에 접근하기 위한 단축키를 설정할 수 있다.
  156. //기본적으로 accesskey 속성은 컨트롤에 onaccesskey 이벤트 발생 후 DOMActivate 이벤트를 Dispatch 한다.
  157. // 다른 화면에 포함된 iviewer 인 경우 accesskey 없앰(아니면 도움말이 여러번 뜨는 현상 발생 & 리포트도 iviewer 임(id:ivr_report)
  158. if(window.type != "iviewer") {
  159. body.attribute("accesskey") = "f12";
  160. }
  161. }
  162. /**
  163. * @-----------------------------------------------------------------------------------
  164. * @desc : 창이 닫힐경우 실행되는 함수
  165. * @param :
  166. * @return :
  167. * @-----------------------------------------------------------------------------------
  168. */
  169. function xforms_close() {
  170. // event 처리를 model에서만 수행하고 head 부터는 propagation 막기.
  171. if( document.all.item(event.currentTarget).elementName == "xhtml:head" ) {
  172. event.stopPropagation();
  173. return;
  174. }
  175. if ( isPopup() ) {
  176. // opener의 childeren UID 정보를 삭제한다.
  177. opener.model.removenode(gvChUIDPath+"child::*[text()=""+getMyUID()+""]");
  178. //이전에 열린 모달 있으면 메세지 출력
  179. if(window.type == "modal"){
  180. var viewerObj = getViewer("sysMessage");
  181. if (viewerObj != null && viewerObj.window.javascript.fGetLastModal != undefined){
  182. var modalWindowNm = viewerObj.window.javascript.fGetLastModal(getMyUID());
  183. if(modalWindowNm != null && modalWindowNm != ""){
  184. messageBox("먼저 열린 모달화면을 닫은 후","C003","("+modalWindowNm.split('|')[3]+")");
  185. }
  186. }
  187. }
  188. }
  189. //event.stopPropagation();
  190. }
  191. /**
  192. * @-----------------------------------------------------------------------------------
  193. * @desc : 폼을 종료할 때 실행
  194. * @param :
  195. * @return :
  196. * @-----------------------------------------------------------------------------------
  197. */
  198. function xforms_model_destruct() {
  199. // event 처리를 model에서만 수행하고 head 부터는 propagation 막기.
  200. if( document.all.item(event.currentTarget).elementName == "xhtml:head" ) {
  201. event.stopPropagation();
  202. return;
  203. }
  204. //메인화면이 닫혔는지 여부
  205. var mainClose = getGlobalVariable("mainclose");
  206. if ( mainClose != "Y")
  207. {
  208. //메인화면이 정상 상태에서만 수행한다.
  209. if ( isPopup() ) {
  210. // 화면이 닫힐 때의 좌표정보를 저장한다.
  211. if (getSaveLoc() == "true") {
  212. setScreenLocation(getScreenID(),window.left,window.top);
  213. } else if (getSaveLoc == "false") {
  214. //setSaveLoc("true");
  215. }
  216. // 열린화면 목록에서 삭제한다.
  217. removeOpenWindow();
  218. //topmost처리를 위한 구현
  219. //opener.body.disabled = false;
  220. //opener.body.dispatch(model.getValue(gvOpCBOnClosePath));
  221. }
  222. }
  223. //event.stopPropagation();
  224. }
  225. /**
  226. * @-----------------------------------------------------------------------------------
  227. * @desc : 화면 좌표 저장여부를 선택한다. "true/false"
  228. * 기본값 "true", "false" 로 설정하면 화면 종료시에 좌표를 저장하지 않는다.
  229. * @param : type : 설정 여부
  230. * @return :
  231. * @-----------------------------------------------------------------------------------
  232. */
  233. function setSaveLoc(type) {
  234. model.setValue(gvSaveLocPath, type);
  235. }
  236. /**
  237. * @-----------------------------------------------------------------------------------
  238. * @desc : 화면 좌표 저장정보를 가지고 온다.
  239. * @param :
  240. * @return : 화면 정보
  241. * @-----------------------------------------------------------------------------------
  242. */
  243. function getSaveLoc() {
  244. return model.getValue(gvSaveLocPath);
  245. }
  246. /**
  247. * @-----------------------------------------------------------------------------------
  248. * @desc : 온라인 도움말을 수행한다.
  249. * @param :
  250. * @return :
  251. * @-----------------------------------------------------------------------------------
  252. */
  253. function onaccesskey(){
  254. if (event.keyCode == "123") {
  255. getHelpPage();
  256. event.stopPropagation();
  257. }
  258. }
  259. /**
  260. * @-----------------------------------------------------------------------------------
  261. * @desc : 화면타이틀을 담아 놓는다.
  262. * @param :
  263. * @return :
  264. * @author : 수정자 : 조국(2011.03.28 // 메인화면 Title, 팝업 Title 수정, wasname 추가)
  265. * @-----------------------------------------------------------------------------------
  266. */
  267. function initTitle() {
  268. var titleValue = null;
  269. var syscd = model.getValue(gvSystemPath);
  270. var msgViewer = getViewer("sysMessage");
  271. if( syscd == null || syscd == "") {
  272. titleValue = document.title;
  273. } else {
  274. titleValue = document.title + "(" + getGlobalVariable("sysname"+syscd) + ")";
  275. }
  276. model.makeValue(gvTitlePath,titleValue);
  277. if (!isPopup() && getGlobalVariable("userinfos") != "" && typeof(parent) == "undefined") {
  278. var scrnTitle = "" ;
  279. var tmpTitle = "";
  280. scrnTitle += htmlwindow.systemSymbol + " "; // system symbol
  281. if (titleValue.indexOf(htmlwindow.systemSymbol) > -1) {
  282. scrnTitle += titleValue.substring(titleValue.indexOf("]")+2, titleValue.indexOf(" ")); // titleValue.indexOf(" ")에서 공백이 아닌 ㄱ + 한자의 1번 특수문자임
  283. } else {
  284. scrnTitle += titleValue;
  285. }
  286. scrnTitle += " ";
  287. scrnTitle += "[" +getUserInfo("systeminstnm") + "]";
  288. scrnTitle += "          "; // 공백이 아닌 ㄱ + 한자의 1번 특수문자임
  289. scrnTitle += new String(htmlwindow.vision) + " ";
  290. scrnTitle += getUserInfo("dutplcenm") + " ";
  291. scrnTitle += getUserName() + " ";
  292. scrnTitle += getTitleLoginDate() + " ";
  293. scrnTitle += new String(htmlwindow.wasname);
  294. htmldocument.title = scrnTitle;
  295. }
  296. if (isPopup()) {
  297. var popupTitle = "";
  298. popupTitle += htmlwindow.systemSymbol + " ";
  299. popupTitle += titleValue;
  300. popupTitle += " ";
  301. popupTitle += "[" + getUserInfo("systeminstnm") + "]" + " ";
  302. document.title = popupTitle;
  303. }
  304. }
  305. /**
  306. * @-----------------------------------------------------------------------------------
  307. * @desc : 현재 화면의 타이틀을 리턴
  308. * @param :
  309. * @return : gvTitlePath
  310. * @-----------------------------------------------------------------------------------
  311. */
  312. function getTitle() {
  313. return model.getValue(gvTitlePath);
  314. }
  315. /**
  316. * @-----------------------------------------------------------------------------------
  317. * @desc : 로그인 시간 반환
  318. * @param :
  319. * @return : dtstr
  320. * @-----------------------------------------------------------------------------------
  321. */
  322. function getTitleLoginDate() {
  323. var weekarr = new Array("일", "월", "화", "수", "목", "금", "토");
  324. var dt = getUserInfo("logindt");
  325. var dtyear = dt.substring(0,4);
  326. var dtmonth = dt.substring(4,6);
  327. var dtday = dt.substring(6,8);
  328. var dthour = dt.substring(8,10);
  329. var dtmin = dt.substring(10,12);
  330. var dtval = new Date(dtmonth+"/"+dtday+"/"+dtyear);
  331. var dtweek = weekarr[dtval.getDay()];
  332. var dtstr = dtyear + "년" + dtmonth + "월" + dtday + "일 (" + dtweek + ") " + dthour +"시" + dtmin +"분";
  333. return dtstr;
  334. }
  335. /**
  336. * @-----------------------------------------------------------------------------------
  337. * @desc : MIS시스템 코드를 반환한다.
  338. * @param :
  339. * @return : missystemcd
  340. * @-----------------------------------------------------------------------------------
  341. */
  342. function getMISSystemCd() {
  343. var systemcd = getSystemCd();
  344. var systeminstcd = systemcd.substring(3,6);
  345. var missystemcd = "";
  346. /*
  347. 직할병원의 001 로 비직할인 경우 해당 시스템코드의 MIS로(예:MIS015)
  348. */
  349. if (systeminstcd == "011" || systeminstcd == "012" || systeminstcd == "013" || systeminstcd == "014") {
  350. missystemcd = "MIS001";
  351. } else {
  352. missystemcd = "MIS" + systeminstcd;
  353. }
  354. /*
  355. if(systeminstcd == "999"){
  356. missystemcd = "MIS999";
  357. }else if(systeminstcd == "888"){
  358. missystemcd = "MIS888";
  359. }else if(systeminstcd == "011" || systeminstcd == "012" || systeminstcd == "013" || systeminstcd == "016"){
  360. missystemcd = "MIS001";
  361. }else{
  362. missystemcd = systemcd;
  363. }
  364. */
  365. return missystemcd;
  366. }
  367. /**
  368. * @-----------------------------------------------------------------------------------
  369. * @desc : 시스템 코드를 반환한다.
  370. * @param :
  371. * @return : gvSystemCd
  372. * @-----------------------------------------------------------------------------------
  373. */
  374. function getSystemCd() {
  375. if (gvSystemCd != null) {
  376. return gvSystemCd;
  377. }
  378. if (htmlwindow.systemcd == undefined) {
  379. gvSystemCd = "";
  380. } else {
  381. gvSystemCd = new String(htmlwindow.systemcd);
  382. }
  383. return gvSystemCd;
  384. }
  385. /**
  386. * @-----------------------------------------------------------------------------------
  387. * @desc : 주어진 이름의 TF Viewer 객체를 반환한다.
  388. * @param :
  389. * @return : TF Viewer 명칭
  390. * @-----------------------------------------------------------------------------------
  391. */
  392. function getViewer(name) {
  393. return viewer.item(getSystemCd()+"_"+name);
  394. }
  395. /**
  396. * @-----------------------------------------------------------------------------------
  397. * @desc : menugroupcd를 설정한다.
  398. * @param :
  399. * @return :
  400. * @-----------------------------------------------------------------------------------
  401. */
  402. function setScreenMenuGroup(){
  403. model.makeValue(gvMenuGroupCdPath, getGlobalVariable("menugroupcd"));
  404. }
  405. /**
  406. * @-----------------------------------------------------------------------------------
  407. * @desc : menuitemcd를 설정한다.
  408. * @param :
  409. * @return :
  410. * @-----------------------------------------------------------------------------------
  411. */
  412. function setScreenMenuItem(){
  413. model.makeValue(gvMenuItemCdPath, getGlobalVariable("menuitemcd"));
  414. }
  415. /**
  416. * @-----------------------------------------------------------------------------------
  417. * @desc : 메뉴에서 설정한 사용부서 코드를 설정한다.
  418. * @param :
  419. * @return :
  420. * @-----------------------------------------------------------------------------------
  421. */
  422. function setScreenPrestDeptCd(){
  423. model.makeValue(gvMenuPrestDeptCdPath, getGlobalVariable("prestdeptcd"));
  424. }
  425. /**
  426. * @-----------------------------------------------------------------------------------
  427. * @desc : 메뉴에서 설정한 사용부서 코드를 반환한다.
  428. * @param :
  429. * @return :
  430. * @-----------------------------------------------------------------------------------
  431. */
  432. function getScreenPrestDeptCd(){
  433. return model.getValue(gvMenuPrestDeptCdPath);
  434. }
  435. /**
  436. * @-----------------------------------------------------------------------------------
  437. * @desc : 메뉴Parameter정보를 설정한다.
  438. * @param :
  439. * @return :
  440. * @-----------------------------------------------------------------------------------
  441. */
  442. function setScreenMenuParameter(){
  443. model.makeValue(gvMenuParamPath, getGlobalVariable("menuparam"));
  444. if(window.type != "iviewer") setGlobalVariable("menuparam","");
  445. }
  446. /**
  447. * @-----------------------------------------------------------------------------------
  448. * @desc : 메뉴Parameter정보를 반환한다.
  449. * @param :
  450. * @return :
  451. * @-----------------------------------------------------------------------------------
  452. */
  453. function getScreenMenuParameter(){
  454. return model.getValue(gvMenuParamPath);
  455. }
  456. /**
  457. * @-----------------------------------------------------------------------------------
  458. * @desc : url로부터 화면ID를 얻어온다. url이 null이면 현재 화면의 url을 사용한다.
  459. * @param :
  460. * @return :
  461. * @-----------------------------------------------------------------------------------
  462. */
  463. function getScreenID(url) {
  464. if (url == null) {
  465. url = document.url;
  466. }
  467. var sp = url.split("/");
  468. return sp[sp.length-1].split(".")[0].substr(0,10);
  469. }
  470. /**
  471. * @-----------------------------------------------------------------------------------
  472. * @desc : 화면별 권한을 저장한다.
  473. * @param :
  474. * @return :
  475. * @-----------------------------------------------------------------------------------
  476. */
  477. function setScreenAuth(auth){
  478. var viewerObj = getViewer("bizMain");
  479. //미리보기(F5) 상태 체크
  480. if ( viewerObj == null ) {
  481. setGlobalVariable("scrnauth","11100000");
  482. }
  483. model.makeValue(gvAuthPath, getGlobalVariable("scrnauth"));
  484. if(window.type != "iviewer") setGlobalVariable("scrnauth","");
  485. }
  486. /**
  487. * @-----------------------------------------------------------------------------------
  488. * @desc : 메뉴권한과 상관없이 강제로 화면의 권한을 지정한다.
  489. * auth : 권한코드(r:읽기/x:실행/p:출력)
  490. * flag : true / false (true 인 경우 setScreenBtnDisabled()를 자동으로 호출해서 버튼컨트롤에서 지정한 _auth 를 적용시킨다.) 기본값 true
  491. * @param :
  492. * @return :
  493. * @-----------------------------------------------------------------------------------
  494. */
  495. function setSpclScrnAuth(auth, flag) {
  496. model.makeValue(gvAuthPath, getAuthCode(auth));
  497. if (flag == null) {
  498. flag = true;
  499. }
  500. if (flag == true) {
  501. setScreenBtnDisabled();
  502. }
  503. }
  504. /**
  505. * @-----------------------------------------------------------------------------------
  506. * @desc : 현재 화면의 권한 정보를 확인
  507. * @param :
  508. * @return :
  509. * @-----------------------------------------------------------------------------------
  510. */
  511. function checkAuth(auth) {
  512. var f = auth.charAt(0);
  513. var a = getAuth();
  514. var v = '0';
  515. switch(f) {
  516. case 'r': // 조회권한
  517. case 'R':
  518. v = a.charAt(0);
  519. break;
  520. case 'x': // 처리권한
  521. case 'X':
  522. v = a.charAt(1);
  523. break;
  524. case 'p':
  525. case 'P':
  526. v = a.charAt(2);
  527. break;
  528. }
  529. if (v == '1') {
  530. return true;
  531. } else {
  532. return false;
  533. }
  534. }
  535. /**
  536. * @-----------------------------------------------------------------------------------
  537. * @desc : 현재 화면의 권한값 자체를 리턴
  538. * @param :
  539. * @return :
  540. * @-----------------------------------------------------------------------------------
  541. */
  542. function getAuth() {
  543. return model.getValue(gvAuthPath);
  544. }
  545. /**
  546. * @-----------------------------------------------------------------------------------
  547. * @desc : 버튼 권한 속성(_auth)에 따라 화면권한(RXP)을 처리한다.
  548. * @param : documentObj 화면으로부터 obj를 받아 온다.
  549. * @return :
  550. * @-----------------------------------------------------------------------------------
  551. */
  552. function setScreenBtnDisabled( documentObj ) {
  553. if (documentObj == null) {
  554. documentObj = document;
  555. }
  556. var childObjCnt = documentObj.controls.length;
  557. var childObj;
  558. for (var i=0; i < childObjCnt; i++) {
  559. childObj = documentObj.controls.item(i);
  560. if (childObj.elementName == "xforms:iviewer") {
  561. setScreenBtnDisabled( childObj.document );
  562. } else if (childObj.elementName == "xforms:button") {
  563. var btnAuth = childObj.attribute("_auth");
  564. if(btnAuth.toUpperCase() == "R" || btnAuth.toUpperCase() == "X" || btnAuth.toUpperCase() == "P"){
  565. childObj.disabled = !checkAuth(btnAuth);
  566. }
  567. }
  568. }
  569. }
  570. /**
  571. * @-----------------------------------------------------------------------------------
  572. * @desc : 현재 화면의 UID 정보
  573. * @param :
  574. * @return : 현재 화면의 UID를 리턴
  575. * @-----------------------------------------------------------------------------------
  576. */
  577. function getMyUID() {
  578. return model.getValue(gvMyUIDPath);
  579. }
  580. /**
  581. * @-----------------------------------------------------------------------------------
  582. * @desc : Opener의 UID 정보
  583. * @param :
  584. * @return : Opener의 UID를 리턴, Opener가 없으면 "" 리턴
  585. * @-----------------------------------------------------------------------------------
  586. */
  587. function getOpenerUID() {
  588. return model.getValue(gvOpUIDPath);
  589. }
  590. /**
  591. * @-----------------------------------------------------------------------------------
  592. * @desc : child 윈도우의 UID 정보
  593. * @param : wid : child 화면의 window id
  594. * @return : WID로 연 child 윈도우의 최초 UID를 리턴
  595. * @-----------------------------------------------------------------------------------
  596. */
  597. function getChildUID(wid) {
  598. var cid = model.getValue(gvChUIDPath+wid);
  599. if (cid==null) { cid=""; }
  600. return cid;
  601. }
  602. /**
  603. * @-----------------------------------------------------------------------------------
  604. * @desc : Opener가 다른 화면으로 변경되었는지 여부를 반환한다.
  605. * @param :
  606. * @return :
  607. * @-----------------------------------------------------------------------------------
  608. */
  609. function checkOpener() {
  610. if (isPopup()) {
  611. return (getOpenerUID()==opener.model.getValue(gvMyUIDPath));
  612. } else {
  613. return false;
  614. }
  615. }
  616. /**
  617. * @-----------------------------------------------------------------------------------
  618. * @desc : wid를 사용하여 open된 child window 객체들 중에서 UID가 바뀌지 않은 window객체를 리턴한다.
  619. * child window가 없거나 있더라도 UID가 바뀌었다면 null을 리턴한다.
  620. * @param :
  621. * @return :
  622. * @-----------------------------------------------------------------------------------
  623. */
  624. function getChildWindow(wid) {
  625. return findChildWindow(getChildUID(wid));
  626. }
  627. /**
  628. * @-----------------------------------------------------------------------------------
  629. * @desc : 열려있는 child 윈도우 중에서 현재의 UID가 주어진 cid와 동일한
  630. * window 객체를 찾아서 리턴한다. 없으면 null
  631. * @param :
  632. * @return : child or null
  633. * @-----------------------------------------------------------------------------------
  634. */
  635. function findChildWindow(cid) {
  636. var child = null;
  637. for(i=0;i<window.children.length;i++) {
  638. child = window.children.item(i);
  639. if (child.model.getValue(gvMyUIDPath)==cid) return child;
  640. }
  641. return null;
  642. }
  643. /**
  644. * @-----------------------------------------------------------------------------------
  645. * @desc : 열려있는 child 윈도우 중에서 화면 ID가 sid인 화면의 window 객체를
  646. * 찾아서 리턴한다. 없으면 null
  647. * @param :
  648. * @return :
  649. * @-----------------------------------------------------------------------------------
  650. */
  651. function findChildWindowByScreenID(sid) {
  652. var child = null;
  653. for(i=0;i<window.children.length;i++) {
  654. child = window.children.item(i);
  655. if (child.javascript.getScreenID()==sid) return child;
  656. }
  657. return null;
  658. }
  659. /**
  660. * @-----------------------------------------------------------------------------------
  661. * @desc : 화면전환시 child닫기로 지정된 경우 해당 child를 모두 닫는다.
  662. * @param :
  663. * @return :
  664. * @-----------------------------------------------------------------------------------
  665. */
  666. function closeChildWindow() {
  667. if(model.getValue(gvChildClosePath) == "Y"){
  668. var childCnt = window.children.length;
  669. for( var i = childCnt; i > 0; i-- ) {
  670. window.children.item(i-1).close();
  671. }
  672. }
  673. }
  674. /**
  675. * @-----------------------------------------------------------------------------------
  676. * @desc : 화면전환시 child가 close되도록 저장
  677. * @param :
  678. * @return :
  679. * @-----------------------------------------------------------------------------------
  680. */
  681. function setCloseChildWindow(){
  682. model.makeValue(gvChildClosePath,"Y");
  683. }
  684. /**
  685. * @-----------------------------------------------------------------------------------
  686. * @desc : 자신이 팝업인지 아닌지를 리턴한다.
  687. * @param :
  688. * @return :
  689. * @-----------------------------------------------------------------------------------
  690. */
  691. function isPopup() {
  692. var stype = window.type;
  693. if (stype == "iviewer" || stype == "main") {
  694. return false;
  695. } else {
  696. return true;
  697. }
  698. }
  699. /**
  700. * @-----------------------------------------------------------------------------------
  701. * @desc : wid로 open한 child window를 activate한다.
  702. * @param :
  703. * @return :
  704. * @-----------------------------------------------------------------------------------
  705. */
  706. function activateChild(wid) {
  707. var cwnd = window.children.item(wid);
  708. if (cwnd != null) {
  709. cwnd.activate();
  710. }
  711. }
  712. /**
  713. * @-----------------------------------------------------------------------------------
  714. * @desc : opener를 activate한다.
  715. * @param :
  716. * @return :
  717. * @-----------------------------------------------------------------------------------
  718. */
  719. function activateOpener() {
  720. if (isPopup()) {
  721. opener.javascript.activateMyWindow();
  722. }
  723. }
  724. /**
  725. * @-----------------------------------------------------------------------------------
  726. * @desc : 자기 자신 window를 activate한다.
  727. * @param :
  728. * @return :
  729. * @-----------------------------------------------------------------------------------
  730. */
  731. function activateMyWindow() {
  732. if (isPopup()) {
  733. window.restore();
  734. window.activate();
  735. } else { // main viewer 인 경우
  736. htmlwindow.focus();
  737. }
  738. }
  739. /**
  740. * @-----------------------------------------------------------------------------------
  741. * @desc : 화면 상태 반환
  742. * @param :
  743. * @return :
  744. * @-----------------------------------------------------------------------------------
  745. */
  746. function getScreenDisabled(){
  747. return body.disabled;
  748. }
  749. /**
  750. * @-----------------------------------------------------------------------------------
  751. * @desc : 메뉴Object 상태설정
  752. * @param :
  753. * @return :
  754. * @-----------------------------------------------------------------------------------
  755. */
  756. function setMenuDisabled(type){
  757. htmlwindow.setMenuDisabled(type);
  758. }
  759. /**
  760. * @-----------------------------------------------------------------------------------
  761. * @desc : 화면의 중심에 띄울수 있도록 X,Y 절대 좌표를 계산해준다.
  762. * monNo 가 null 이면 현재 모니터 기준으로 계산
  763. * @param : xPos : x좌표, yPos : y좌표, userProp : 사용자 설정, monNo : 모니터 번호
  764. * @return : loc
  765. * @-----------------------------------------------------------------------------------
  766. */
  767. function locateCenter(xPos, yPos, userProp, monNo) {
  768. var taskbarHeight = 0;
  769. if (monNo == "" || monNo == null) {
  770. // 파라메터에서 모니터를 지정하지 않았으면 현재 모니터 번호를 사용
  771. monNo = getCurrentMonitorNumber();
  772. }
  773. monNo = parseInt(monNo)-1;
  774. if (monNo < 0) {
  775. monNo = 0;
  776. } else if (monNo == 0) {
  777. // 현재 모니터번호가 1번이면 작업표시줄 부분을 화면 Height 에서 빼야 하므로 설정.
  778. taskbarHeight = gvTaskBarHeight;
  779. }
  780. var monSize = getMonitorSize(monNo);
  781. // 기본 화면 사이즈 설정.
  782. var width = gvDefaultScrWidth, height = gvDefaultScrHeight;
  783. // 화면이 작은 경우 스크롤이 정상적으로 보일 수 있도록 화면사이즈 변경.
  784. // 현재 해상도가 1280*1024 가 아닌경우 기본화면 사이즈 재설정.
  785. if (monSize[0] < width) {
  786. width = monSize[0];
  787. }
  788. if (monSize[1] < height + taskbarHeight) {
  789. height = monSize[1] - taskbarHeight; // 작업표시줄 높이 빼기.
  790. }
  791. if (userProp != null) {
  792. var wexp = new RegExp("(width:)([0-9]+)(px)", "gi");
  793. var hexp = new RegExp("(height:)([0-9]+)(px)", "gi");
  794. var w = userProp.match(wexp);
  795. var h = userProp.match(hexp);
  796. /*
  797. width, height 값 설정되어 있는경우, 해당 width, height 를 이용해서 화면의 가운데에 보여지도록 한다.
  798. align=center 를 사용하면 2번 모니터로 보여지지 않기 때문.
  799. */
  800. if (w != null && w.length == 1) {
  801. width = w[0].match(new RegExp("([0-9]+)", "gi"));
  802. }
  803. if (h != null && h.length == 1) {
  804. height = h[0].match(new RegExp("([0-9]+)", "gi"));
  805. }
  806. }
  807. if (xPos == "" || xPos == null) {
  808. // 파라메터에서 X 좌표를 지정하지 않았으면 중심좌표를 계산해서 사용
  809. if (width != "") {
  810. xPos = parseInt(monSize[0])/2 - width/2;
  811. if (xPos < 0) {
  812. xPos = 0;
  813. }
  814. } else {
  815. xPos = 0;
  816. }
  817. } else {
  818. // 화면 좌표가 (-) 로 입력될 경우 0 으로 재설정 - 업무화면에서 (-) 좌표로 입력하는 경우가 있음
  819. if (parseInt(xPos) < 0) {
  820. xPos = 0;
  821. }
  822. }
  823. if (yPos == "" || yPos == null) {
  824. // 파라메터에서 Y 좌표를 지정하지 않았으면 중심좌표를 계산해서 사용
  825. if (height != "") {
  826. yPos = monSize[1]/2 - height/2 - taskbarHeight; // Y축은 작업표시줄(34)를 빼서 가운데로.
  827. if (yPos < 0) {
  828. yPos = 0;
  829. }
  830. } else {
  831. yPos = 0;
  832. }
  833. } else {
  834. // 화면 좌표가 (-) 로 입력될 경우 0 으로 재설정 - 업무화면에서 (-) 좌표로 입력하는 경우가 있음
  835. if (parseInt(yPos) < 0) {
  836. yPos = 0;
  837. }
  838. }
  839. loc = getAbsoluteLocation(monNo,xPos,yPos);
  840. return loc;
  841. }
  842. /**
  843. * @-----------------------------------------------------------------------------------
  844. * @desc : xrw 화면 로딩
  845. * @param : open Type : modal, modeless
  846. * id : 화면 id
  847. * idType : url, scn
  848. * monNo : 모니터 no
  849. * xPos : x좌표
  850. * yPos : y좌표
  851. wid : child 화면의 window id
  852. ref : 새로 띄우는 window 로 전달할 부모 인스턴스의 XPath
  853. resultref : 부모 인스턴스에서 전달하는 ref 의 내용이 저장될 새로 띄우는 windows 의 인스턴스 XPath
  854. userProp : 새로 띄우는 window 의 style지정(window 사이즈 및 위치지정가능)
  855. prevPos : 사용자별 좌표정보 적용여부 : true(적용) -기본/ false(적용안함)
  856. * @return :
  857. * @-----------------------------------------------------------------------------------
  858. */
  859. function openInternal(openType,id,idType,monNo,xPos,yPos,wid,ref,resultref,userProp,prevPos) {
  860. if (!checkTimeout()) {
  861. // session timeout 상태가 아니면 session 시간 갱신
  862. setGlobalVariable("last_submit", (new Date()).getTime());
  863. }
  864. var url = null;
  865. var sid = getScreenID(id);
  866. if (wid == null || wid == "") {
  867. wid = sid;
  868. }
  869. if (prevPos == null) { // 이전 저장 좌표 사용 여부
  870. prevPos = true;
  871. }
  872. if ( idType == "url" ) { // idType == "url" 이면 ID를 그대로 URL로 open한다.
  873. url = id;
  874. } else { // idType == "scn"
  875. //url = sid+".xrw";
  876. url = getScreenURL(sid);
  877. }
  878. // 좌표값 결정 로직
  879. var prop = null;
  880. if (monNo == null && xPos == null && yPos == null) {
  881. // 파라메터로 모니터,X,Y 값을 모두 지정하지 않은 경우는 이전 좌표 저장 값과 상관 없이 현재 모니터의 중앙에 open 한다.
  882. var viewerObj = getViewer("sysMessage");
  883. if (viewerObj != null && viewerObj.window.javascript.fSetStatusMessage != undefined) {
  884. // 현재 모니터에서의 중앙 좌표값 계산을 위한 로직
  885. /* -- 여기부터
  886. monNo = getCurrentMonitorNumber()-1;
  887. var monSize = viewerObj.window.javascript.fGetMonitorSize(monNo);
  888. xPos = monSize[0]/2 - 605; // 1211px/2
  889. yPos = monSize[1]/2 - 392; // 784px/2
  890. if (xPos < 0) { xPos = 0; }
  891. if (yPos < 0) { yPos = 0; }
  892. var loc = getAbsoluteLocation(monNo,xPos,yPos);
  893. */
  894. // -- 여기까지 함수로 만들자. locateCenter(userProp,monNo) : 리턴 --> x,y 절대좌표
  895. var loc = locateCenter(xPos, yPos, userProp);
  896. xPos = loc[0];
  897. yPos = loc[1];
  898. prop = "top:"+yPos+"px;left:"+xPos+"px;width:" + gvDefaultScrWidth + "px;height:" + gvDefaultScrHeight + "px;";
  899. } else {
  900. // 상태 메시지 Bar가 없는 미리보기의 경우이다.
  901. prop = "align:center;width:" + gvDefaultScrWidth + "px;height:" + gvDefaultScrHeight + "px;";
  902. }
  903. } else {
  904. // 파라메터로 모니터,X,Y 중 하나라도 명시했다면 우선 이전에 저장된 좌표를 찾아서 그 위치에 띄운다.
  905. var xyPos = getScreenLocation(sid); // 이전 좌표를 찾는다.
  906. var loc = null;
  907. if ( prevPos && xyPos != "") {
  908. // 이전 좌표를 찾았으므로 이전 좌표를 적용한다.
  909. loc = xyPos.split("|");
  910. } else {
  911. // 이전 좌표가 없으므로 파라메토로 주어진 좌표를 사용한다.
  912. // locateCenter() 함수를 사용한다.
  913. /* -- 여기부터
  914. var width = "", height = "";
  915. if (userProp != null) {
  916. var wexp = new RegExp("(width:)([0-9]+)(px)", "gi");
  917. var hexp = new RegExp("(height:)([0-9]+)(px)", "gi");
  918. var w = userProp.match(wexp);
  919. var h = userProp.match(hexp);
  920. // width, height 값 설정되어 있는경우, 해당 width, height 를 이용해서 화면의 가운데에 보여지도록 한다.
  921. // align=center 를 사용하면 2번 모니터로 보여지지 않기 때문.
  922. if (w != null && w.length == 1) {
  923. width = w[0].match(new RegExp("([0-9]+)", "gi"));
  924. }
  925. if (h != null && h.length == 1) {
  926. height = h[0].match(new RegExp("([0-9]+)", "gi"));
  927. }
  928. }
  929. if (monNo == "" || monNo == null) {
  930. // 파라메터에서 모니터를 지정하지 않았으면 현재 모니터 번호를 사용
  931. monNo = getCurrentMonitorNumber();
  932. }
  933. monNo = parseInt(monNo)-1;
  934. if (monNo < 0) {
  935. monNo = 0;
  936. }
  937. var monSize = getMonitorSize(monNo);
  938. if (xPos == "" || xPos == null) {
  939. // 파라메터에서 X 좌표를 지정하지 않았으면 중심좌표를 계산해서 사용
  940. if (width != "") {
  941. xPos = parseInt(monSize[0])/2 - width/2;
  942. } else {
  943. xPos = 0;
  944. }
  945. }
  946. if (yPos == "" || yPos == null) {
  947. // 파라메터에서 Y 좌표를 지정하지 않았으면 중심좌표를 계산해서 사용
  948. if (height != "") {
  949. yPos = monSize[1]/2 - height/2;
  950. } else {
  951. yPos = 0;
  952. }
  953. }
  954. loc = getAbsoluteLocation(monNo,xPos,yPos);
  955. */
  956. // -- 여기까지
  957. // xPos, yPos
  958. loc = locateCenter(xPos, yPos, userProp,monNo);
  959. }
  960. xPos = loc[0];
  961. yPos = loc[1];
  962. prop="top:"+yPos+"px;left:"+xPos+"px;";
  963. }
  964. // 사용자 지정 프로퍼티 추가(뒤에 추가해야 중복된게 있어도 우선적으로 적용된다.)
  965. if (userProp != null) {
  966. prop = prop + userProp;
  967. }
  968. // 2012.06.11 아이콘설정
  969. // 2012.06.15 xforms_ready함수에서 model.setIcon 함수로 대체
  970. //prop = prop + "icon:" + htmlwindow.faviconURL;
  971. // 같은 화면ID로 이미 열려있는지 확인하여, 기존에 이미 동일 화면 ID로 열려있는 창이 있다면
  972. // 그 창을 Activate 시킨다. (2008.2.12 변경)
  973. var viewerObj = getViewer("sysMessage");
  974. var wd = null;
  975. if (viewerObj != null && viewerObj.window.javascript.fGetOpenWindow != undefined) {
  976. // 메인화면이 있는 경우이다. 메인뷰어를 확인하고 그 이후에 열린화면 목록에서 확인한다.
  977. // 메인화면에 해당 화면이 열려 있는 경우는 제외(보험심사화면에서는 메인화면의 화면과 같은 화면ID의 화면을 Modeless로 연다)
  978. // var mainWnd = getMainViewer();
  979. // if (mainWnd != null && mainWnd.javascript.getScreenID() == sid) {
  980. // wd = mainWnd;
  981. // } else {
  982. wd = viewerObj.window.javascript.fGetOpenWindow(sid);
  983. // }
  984. } else { // 미리 보기인 경우이다. 자신과 opener, child 윈도우에서 찾는다.
  985. if (isPopup() && opener.javascript.getScreenID() == sid) {
  986. wd = opener;
  987. } else if (getScreenID() == sid) {
  988. wd = window;
  989. } else {
  990. wd = findChildWindowByScreenID(sid);
  991. }
  992. }
  993. var cid = "";
  994. if (wd != null && openType =="modeless") { // modeless고 기존에 동일 화면 ID로 떠있는 경우:activate
  995. cid = wd.javascript.getMyUID();
  996. wd.javascript.activateMyWindow(); // 열려있는 화면을 Activate 한다.
  997. wd.body.dispatch("onActivate"); // Activate시 실행
  998. } else { // replace이거나 기존에 동일 화면ID로 떠있는 화면이 없는 경우 : 새로 생성
  999. window.load(url,openType,wid,prop,ref,resultref);
  1000. if (openType!="replace") {
  1001. // open된 윈도우가 자신의 uid를 latest로 넣어주었으므로 그 값을
  1002. // wid를 키로하여 저장해놓는다.
  1003. cid = model.getValue(gvChUIDPath+"latest");
  1004. model.makeValue(gvChUIDPath+wid,cid);
  1005. model.makeValue(gvChUIDPath+"latest",""); // latest는 삭제
  1006. }
  1007. }
  1008. return cid;
  1009. /**
  1010. // wid 로 열린화면이 있는지 확인하기 위하여 uid를 확인한다.
  1011. var cid = getChildUID(wid);
  1012. // uid가 존재한다면 이전에 열린적이 있으므로 children중에서 있는지 확인한다.
  1013. if (cid != "") {
  1014. var child = findChildWindow(cid);
  1015. // 같은 uid가 존재한다면 그것을 activate 하고 리턴한다.
  1016. if ( child!=null ) {
  1017. child.activate();
  1018. return cid;
  1019. }
  1020. }
  1021. // 새로 여는 경우 또는 열었지만 그것이 replace되어서 uid가 바뀐 경우 윈도우 생성한다.
  1022. window.load(url,openType,wid,prop,ref,resultref);
  1023. if (openType!="replace") {
  1024. // open된 윈도우가 자신의 uid를 latest로 넣어주었으므로 그 값을
  1025. // wid를 키로하여 저장해놓는다.
  1026. cid = model.getValue(gvChUIDPath+"latest");
  1027. model.makeValue(gvChUIDPath+wid,cid);
  1028. model.makeValue(gvChUIDPath+"latest",""); // latest는 삭제
  1029. return cid;
  1030. } else {
  1031. return "";
  1032. } **/
  1033. }
  1034. /**
  1035. * @-----------------------------------------------------------------------------------
  1036. * @desc : modeless 로 창을 띄움
  1037. * @param : id : 화면아이디
  1038. monNo : 창을 띄우고자 하는 모니터번호(1, 2, ..., N)
  1039. xPos : 창의 X 좌표(모니터 맨 왼쪽:0)
  1040. yPos : 창의 Y 좌표(모니터 맨 위:0)
  1041. wid : child 화면의 window id
  1042. ref : 새로 띄우는 window 로 전달할 부모 인스턴스의 XPath
  1043. resultref : 부모 인스턴스에서 전달하는 ref 의 내용이 저장될 새로 띄우는 windows 의 인스턴스 XPath
  1044. userProp : 새로 띄우는 window 의 style지정(window 사이즈 및 위치지정가능)
  1045. prevPos : 사용자별 좌표정보 적용여부 : true(적용) -기본/ false(적용안함)
  1046. resizeType : 화면사이즈 적용 종류("none" : 화면해상도기준&작업표시줄 크기제외(기본)
  1047. / "free" : 정의된 화면사이즈 그대로
  1048. / "notaskbar" : 화면해상도기준 & 작업표시줄크기 무시)
  1049. * @return : openInternal
  1050. * @-----------------------------------------------------------------------------------
  1051. */
  1052. function open(id,monNo,xPos,yPos,wid,ref,resultref,userProp,prevPos, authCode, resizeType) {
  1053. if (userProp == null) {
  1054. userProp = "max:hidden;";
  1055. } else {
  1056. userProp = "max:hidden;" + userProp;
  1057. }
  1058. // 특정 권한코드를 부여한 경우, 해당 화면은 부여한 권한코드값으로 권한값이 바뀌게 된다.(메뉴권한이 있어도 덮어 쓴다.)
  1059. if (authCode == null) {
  1060. setGlobalVariable("spclscrnauth", getAuthCode(""));
  1061. } else {
  1062. setGlobalVariable("spclscrnauth", getAuthCode(authCode));
  1063. }
  1064. if (resizeType == null || resizeType == "" || resizeType == "none") {
  1065. setGlobalVariable("resizetype", "none");
  1066. } else if (resizeType == "notaskbar") {
  1067. setGlobalVariable("resizetype", "notaskbar");
  1068. } else if (resizeType == "free") {
  1069. setGlobalVariable("resizetype", "free");
  1070. }
  1071. return openInternal("modeless",id,"scn",monNo,xPos,yPos,wid,ref,resultref,userProp,prevPos);
  1072. }
  1073. /**
  1074. * @-----------------------------------------------------------------------------------
  1075. * @desc : replace로 창을 띄움
  1076. * @param :
  1077. * @return : openInternal
  1078. * @-----------------------------------------------------------------------------------
  1079. */
  1080. function navigate(id,monNo,xPos,yPos,wid,ref,resultref, authCode) {
  1081. //화면권한
  1082. var scrnauth = model.getValue(gvAuthPath);
  1083. setGlobalVariable("scrnauth", scrnauth);
  1084. //child close
  1085. closeChildWindow();
  1086. if (authCode == null) {
  1087. setGlobalVariable("spclscrnauth", getAuthCode(""));
  1088. } else {
  1089. setGlobalVariable("spclscrnauth", getAuthCode(authCode));
  1090. }
  1091. return openInternal("replace",id,"scn",monNo,xPos,yPos,wid,ref,resultref);
  1092. }
  1093. /**
  1094. * @-----------------------------------------------------------------------------------
  1095. * @desc : modal로 창을 띄움
  1096. * @param :
  1097. * @return :
  1098. * @-----------------------------------------------------------------------------------
  1099. */
  1100. function modal(id,monNo,xPos,yPos,wid,ref,resultref,userProp,prevPos, authCode, resizeType) {
  1101. var rtn = "";
  1102. body.disabled = true;
  1103. if (userProp == null) {
  1104. userProp = "min:hidden;max:hidden;";
  1105. } else {
  1106. userProp = "min:hidden;max:hidden;" + userProp;
  1107. }
  1108. if (authCode == null) {
  1109. setGlobalVariable("spclscrnauth", getAuthCode(""));
  1110. } else {
  1111. setGlobalVariable("spclscrnauth", getAuthCode(authCode));
  1112. }
  1113. if (resizeType == null || resizeType == "" || resizeType == "none") {
  1114. setGlobalVariable("resizetype", "none");
  1115. } else if (resizeType == "notaskbar") {
  1116. setGlobalVariable("resizetype", "notaskbar");
  1117. } else if (resizeType == "free") {
  1118. setGlobalVariable("resizetype", "free");
  1119. }
  1120. rtn = openInternal("modal",id,"scn",monNo,xPos,yPos,wid,ref,resultref,userProp,prevPos);
  1121. body.disabled = false;
  1122. return rtn;
  1123. }
  1124. /**
  1125. * @-----------------------------------------------------------------------------------
  1126. * @desc : 사용자가 입력하는 권한코드를 실제 코드로 변경해서 반환한다.
  1127. * @param : auth : 권한코드
  1128. * @return : 10000000, 11000000, 11100000
  1129. * @-----------------------------------------------------------------------------------
  1130. */
  1131. function getAuthCode(auth) {
  1132. var authCode = "";
  1133. switch (auth.toUpperCase()) {
  1134. case 'R': authCode = "10000000"; break;
  1135. case 'X': authCode = "11000000"; break;
  1136. case 'P': authCode = "11100000"; break;
  1137. default : authCode = "";
  1138. }
  1139. return authCode;
  1140. }
  1141. /*
  1142. function topmost(id,monNo,xPos,yPos,wid,ref,resultref,userProp,prevPos,onCloseEvent) {
  1143. var rtn = "";
  1144. body.disabled = true;
  1145. if (userProp == null) {
  1146. userProp = "min:hidden;max:hidden;";
  1147. } else {
  1148. userProp = "min:hidden;max:hidden;" + userProp;
  1149. }
  1150. model.makeValue(gvMyCBOnClosePath,onCloseEvent);
  1151. rtn = openInternal("modeless_topmost",id,"scn",monNo,xPos,yPos,wid,ref,resultref,userProp,prevPos);
  1152. body.disabled = false;
  1153. return rtn;
  1154. }
  1155. */
  1156. /**
  1157. * @-----------------------------------------------------------------------------------
  1158. * @desc : modeless 화면 로딩
  1159. * @param :
  1160. * @return : openInternal
  1161. * @-----------------------------------------------------------------------------------
  1162. */
  1163. function openUrl(url,monNo,xPos,yPos,wid,ref,resultref,userProp,prevPos, authCode) {
  1164. if (userProp == null) {
  1165. userProp = "max:hidden;";
  1166. } else {
  1167. userProp = "max:hidden;" + userProp;
  1168. }
  1169. if (authCode == null) {
  1170. setGlobalVariable("spclscrnauth", getAuthCode(""));
  1171. } else {
  1172. setGlobalVariable("spclscrnauth", getAuthCode(authCode));
  1173. }
  1174. return openInternal("modeless",url,"url",monNo,xPos,yPos,wid,ref,resultref,userProp,prevPos);
  1175. }
  1176. /**
  1177. * @-----------------------------------------------------------------------------------
  1178. * @desc : url을 받아서 화면 replace
  1179. * @param :
  1180. * @return : openInternal
  1181. * @-----------------------------------------------------------------------------------
  1182. */
  1183. function navigateUrl(url,monNo,xPos,yPos,wid,ref,resultref, authCode) {
  1184. //화면권한
  1185. var scrnauth = model.getValue(gvAuthPath);
  1186. setGlobalVariable("scrnauth", scrnauth);
  1187. if (authCode == null) {
  1188. setGlobalVariable("spclscrnauth", getAuthCode(""));
  1189. } else {
  1190. setGlobalVariable("spclscrnauth", getAuthCode(authCode));
  1191. }
  1192. return openInternal("replace",url,"url",monNo,xPos,yPos,wid,ref,resultref);
  1193. }
  1194. /**
  1195. * @-----------------------------------------------------------------------------------
  1196. * @desc : modal로 화면 로딩
  1197. * @param :
  1198. * @return : openInternal
  1199. * @-----------------------------------------------------------------------------------
  1200. */
  1201. function modalUrl(url,monNo,xPos,yPos,wid,ref,resultref,userProp,prevPos, authCode) {
  1202. if (userProp == null) {
  1203. userProp = "min:hidden;max:hidden;";
  1204. } else {
  1205. userProp = "min:hidden;max:hidden;" + userProp;
  1206. }
  1207. if (authCode == null) {
  1208. setGlobalVariable("spclscrnauth", getAuthCode(""));
  1209. } else {
  1210. setGlobalVariable("spclscrnauth", getAuthCode(authCode));
  1211. }
  1212. return openInternal("modal",url,"url",monNo,xPos,yPos,wid,ref,resultref,userProp,prevPos);
  1213. }
  1214. /**
  1215. * @-----------------------------------------------------------------------------------
  1216. * @desc : 타시스템 Open
  1217. * @param :
  1218. * @return : cid
  1219. * @-----------------------------------------------------------------------------------
  1220. */
  1221. function openExternal(syscd,id,monNo,xPos,yPos,wid,ref,resultref,userProp,prevPos) {
  1222. var url = getScreenURL(id,syscd);
  1223. setGlobalVariable("systemcode", syscd.toUpperCase());
  1224. var cid = openInternal("modeless",url,"url",monNo,xPos,yPos,wid,ref,resultref,userProp,prevPos);
  1225. setGlobalVariable("systemcode", "");
  1226. return cid;
  1227. }
  1228. /**
  1229. * @-----------------------------------------------------------------------------------
  1230. * @desc : 일반 HTML Open
  1231. * @param :
  1232. * @return : rtn
  1233. * @-----------------------------------------------------------------------------------
  1234. */
  1235. function openHtml(url,wid,prop) {
  1236. var rtn = null;
  1237. if (prop == null) {
  1238. rtn = htmlwindow.open(url,wid);
  1239. } else {
  1240. rtn = htmlwindow.open(url,wid,prop);
  1241. }
  1242. return rtn;
  1243. }
  1244. /**
  1245. * @-----------------------------------------------------------------------------------
  1246. * @desc : 화면 Size에 맞게 창크기 조정
  1247. * @param :
  1248. * @return :
  1249. * @-----------------------------------------------------------------------------------
  1250. */
  1251. function setWindowSize(){
  1252. var taskbarHeight = 0;
  1253. //화면사이즈
  1254. var pageWidth = body.attribute("pagewidth") == "" ? gvDefaultScrWidth : parseInt(body.attribute("pagewidth"));
  1255. var pageHeight = body.attribute("pageheight") == "" ? gvDefaultScrHeight + 16 : parseInt(body.attribute("pageheight")) + 16; // 16 은 top, bottom margin
  1256. var monNo = getCurrentMonitorNumber();
  1257. monNo = parseInt(monNo)-1;
  1258. if (monNo < 0) {
  1259. monNo = 0;
  1260. } else if (monNo == 0) {
  1261. taskbarHeight = gvTaskBarHeight;
  1262. }
  1263. //창 여백
  1264. //추후 OS나 스타일에 맞게 여백을 설정하여야 함
  1265. var captionSize = Math.abs(app.registry("HKEY_CURRENT_USER", "Control Panel\\Desktop\\WindowMetrics", "CaptionHeight" , "STRING"))/15;
  1266. // Windows 7 - 테두리 사이즈로 인한 화면 크기 조정값(2012.03.28 added by CBJ)
  1267. var paddedSize = Math.abs(app.registry("HKEY_CURRENT_USER", "Control Panel\\Desktop\\WindowMetrics", "PaddedBorderWidth" , "STRING"))/15;
  1268. var marginWidth = 8 + (paddedSize * 2);
  1269. var marginHeight = ((paddedSize * 2 )+captionSize)+9;
  1270. //var marginWidth = 8;
  1271. //var marginHeight = captionSize+9;
  1272. //화면 여백 설정
  1273. body.attribute("margin-top") = 8;
  1274. body.attribute("margin-bottom") = 8;
  1275. // 창의 크기(제목표시줄 + 보더폭까지 합친 크기)
  1276. var wWidth = pageWidth+marginWidth;
  1277. var wHeight = pageHeight+marginHeight;
  1278. // 화면 해상도가 기준해상도와 달라서 창의 크기가 바뀌어야 하는 경우..
  1279. var monSize = getMonitorSize(monNo);
  1280. if (monSize[0] < wWidth) {
  1281. wWidth = monSize[0];
  1282. }
  1283. var resizeType = getGlobalVariable("resizetype");
  1284. if (resizeType == "notaskbar") {
  1285. // 작업표시줄 크기를 무시 & 주어진 화면크기가 현재 해상도보다 큰경우 해상도에 맞춰 줄여줌
  1286. if (monSize[1] < wHeight) {
  1287. wHeight = monSize[1];
  1288. if (wWidth < monSize[0]) {
  1289. wWidth += 16;
  1290. }
  1291. }
  1292. } else if (resizeType == "none") {
  1293. // 창의 크기 + 작업표시줄 크기가 현재 화면 해상도보다 큰 경우 화면크기-작업표시줄 크기 만큼 줄여줌.
  1294. if (monSize[1] < wHeight + taskbarHeight) {
  1295. wHeight = monSize[1] - taskbarHeight;
  1296. // 세로 높이가 줄어들면서 가로 스크롤이 생기므로 인해 가로스크롤 넓이 만큼 Width 를 늘려줌.
  1297. if (wWidth < monSize[0]) {
  1298. wWidth += 16;
  1299. }
  1300. }
  1301. } else if (resizeType == "free") {
  1302. // 작업표시줄 크기를 무시 & 주어진 화면 크기그대로 표시
  1303. //wHeight;
  1304. //wWidth;
  1305. }
  1306. //창크기 조정
  1307. window.setSize(wWidth, wHeight);
  1308. }
  1309. /**
  1310. * @-----------------------------------------------------------------------------------
  1311. * @desc : 시스템 메시지 출력함수
  1312. * @param :
  1313. * @return :
  1314. * @-----------------------------------------------------------------------------------
  1315. */
  1316. function setSystemMessage(msg) {
  1317. var viewerObj = getViewer("sysMessage");
  1318. if (viewerObj != null && viewerObj.window.javascript.fSetStatusMessage != undefined) {
  1319. viewerObj.window.javascript.fSetStatusMessage(msg);
  1320. }
  1321. }
  1322. /**
  1323. * @-----------------------------------------------------------------------------------
  1324. * @desc : 화면 좌표 정보를 저장한다.
  1325. * @param :
  1326. * @return :
  1327. * @-----------------------------------------------------------------------------------
  1328. */
  1329. function setScreenLocation(sid,xpos,ypos) {
  1330. var viewerObj = getViewer("sysMessage");
  1331. if (viewerObj != null && viewerObj.window.javascript.fSetScreenLocation != undefined) {
  1332. viewerObj.window.javascript.fSetScreenLocation(sid,xpos,ypos);
  1333. }
  1334. }
  1335. /**
  1336. * @-----------------------------------------------------------------------------------
  1337. * @desc : 화면 좌표 정보를 가져온다.
  1338. * @param :
  1339. * @return :
  1340. * @-----------------------------------------------------------------------------------
  1341. */
  1342. function getScreenLocation(sid) {
  1343. var viewerObj = getViewer("sysMessage");
  1344. if (viewerObj != null && viewerObj.window.javascript.fGetScreenLocation != undefined) {
  1345. return viewerObj.window.javascript.fGetScreenLocation(sid);
  1346. } else {
  1347. return "";
  1348. }
  1349. }
  1350. /**
  1351. * @-----------------------------------------------------------------------------------
  1352. * @desc : 모니터번호 기준좌표를 절대좌표로 변환한다.
  1353. * @param :
  1354. * @return :
  1355. * @-----------------------------------------------------------------------------------
  1356. */
  1357. function getAbsoluteLocation(mon,xpos,ypos) {
  1358. var viewerObj = getViewer("sysMessage");
  1359. if (viewerObj != null && viewerObj.window.javascript.fGetAbsoluteCoordinate != undefined) {
  1360. return viewerObj.window.javascript.fGetAbsoluteCoordinate(mon,xpos,ypos);
  1361. } else {
  1362. var abspos = new Array(2);
  1363. abspos[0] = xpos;
  1364. abspos[1] = ypos;
  1365. return abspos;
  1366. }
  1367. }
  1368. /**
  1369. * @-----------------------------------------------------------------------------------
  1370. * @desc : 주어진 화면 좌표를 모니터 번호와 모니터 기준의 상대좌표로 변환한다.
  1371. * @param :
  1372. * @return :
  1373. * @-----------------------------------------------------------------------------------
  1374. */
  1375. function getRelativeCoordinate(xpos,ypos){
  1376. var viewerObj = getViewer("sysMessage");
  1377. if (viewerObj != null && viewerObj.window.javascript.fGetRelativeCoordinate != undefined) {
  1378. var coord = viewerObj.window.javascript.fGetRelativeCoordinate(xpos,ypos);
  1379. coord[0] = coord[0]+1;
  1380. return coord;
  1381. } else {
  1382. var coord = new Array(3);
  1383. coord[0] = 1;
  1384. coord[1] = xpos;
  1385. coord[2] = ypos;
  1386. return coord;
  1387. }
  1388. }
  1389. /**
  1390. * @-----------------------------------------------------------------------------------
  1391. * @desc : 화면이 로딩된 모니터 번호를 반환한다.
  1392. * @param :
  1393. * @return : getRelativeCoordinate 호출
  1394. * @-----------------------------------------------------------------------------------
  1395. */
  1396. function getCurrentMonitorNumber() {
  1397. return getRelativeCoordinate(window.left,window.top)[0];
  1398. }
  1399. /**
  1400. * @-----------------------------------------------------------------------------------
  1401. * @desc : 모니터 사이즈 반환
  1402. * @param :
  1403. * @return :
  1404. * @-----------------------------------------------------------------------------------
  1405. */
  1406. function getMonitorSize(monNo) {
  1407. var viewerObj = getViewer("sysMessage");
  1408. if (viewerObj != null && viewerObj.window.javascript.fGetMonitorSize != undefined) {
  1409. return viewerObj.window.javascript.fGetMonitorSize(monNo);
  1410. } else {
  1411. var monSize = new Array(2);
  1412. monSize[0] = 1280;
  1413. monSize[1] = 1024;
  1414. return monSize;
  1415. }
  1416. }
  1417. /**
  1418. * @-----------------------------------------------------------------------------------
  1419. * @desc : 자신의 화면을 열린윈도우 목록에 등록한다.
  1420. * @param :
  1421. * @return :
  1422. * @-----------------------------------------------------------------------------------
  1423. */
  1424. function addOpenWindow() {
  1425. var viewerObj = getViewer("sysMessage");
  1426. if (viewerObj != null && viewerObj.window.javascript.fAddOpenWindow != undefined) {
  1427. // viewerObj.window.javascript.fAddOpenWindow(getScreenID()+"|"+getMyUID()+"|"+getTitle(),window);
  1428. viewerObj.window.javascript.fAddOpenWindow(getScreenID()+"|"+getMyUID()+"|"+window.type+"|"+getTitle(),window);
  1429. }
  1430. }
  1431. /**
  1432. * @-----------------------------------------------------------------------------------
  1433. * @desc : 자신의 화면을 열린윈도우 목록에서 삭제한다.
  1434. * @param :
  1435. * @return :
  1436. * @-----------------------------------------------------------------------------------
  1437. */
  1438. function removeOpenWindow() {
  1439. var viewerObj = getViewer("sysMessage");
  1440. if (viewerObj != null && viewerObj.window.javascript.fRemoveOpenWindow != undefined) {
  1441. // viewerObj.window.javascript.fRemoveOpenWindow(getScreenID()+"|"+getMyUID()+"|"+getTitle());
  1442. viewerObj.window.javascript.fRemoveOpenWindow(getScreenID()+"|"+getMyUID()+"|"+window.type+"|"+getTitle());
  1443. }
  1444. }
  1445. /**
  1446. * @-----------------------------------------------------------------------------------
  1447. * @desc : 열린 화면들 중에서 화면 ID가 sid인 화면의 윈도우 객체를 반환한다.
  1448. * 해당 화면이 없으면 null을 반환한다.
  1449. * @param :
  1450. * @return :
  1451. * @-----------------------------------------------------------------------------------
  1452. */
  1453. function getOpenWindow(sid) {
  1454. var viewerObj = getViewer("sysMessage");
  1455. if (viewerObj != null && viewerObj.window.javascript.fGetOpenWindow != undefined) {
  1456. return viewerObj.window.javascript.fGetOpenWindow(sid);
  1457. } else {
  1458. return null;
  1459. }
  1460. }
  1461. /**
  1462. * @-----------------------------------------------------------------------------------
  1463. * @desc : his main 윈도우 객체를 반환한다. 해당 window가 없으면 null을 반환한다.
  1464. * @param :
  1465. * @return :
  1466. * @-----------------------------------------------------------------------------------
  1467. */
  1468. function getMainViewer(){
  1469. var viewerObj = getViewer("bizMain");
  1470. //미리보기(F5) 상태 체크
  1471. if ( viewerObj == null )
  1472. {
  1473. viewerObj = htmldocument.all.TFViewer1;
  1474. }
  1475. if ( viewerObj == null )
  1476. {
  1477. return null;
  1478. } else{
  1479. return viewerObj.window;
  1480. }
  1481. }
  1482. //
  1483. // 화면간 데이터 전달
  1484. //
  1485. /**
  1486. * @-----------------------------------------------------------------------------------
  1487. * @desc : parameter 저장용 인스턴스 경로를 리턴
  1488. * @param :
  1489. * @return :
  1490. * @-----------------------------------------------------------------------------------
  1491. */
  1492. function getParameterPath() {
  1493. return gvParamPath;
  1494. }
  1495. /**
  1496. * @-----------------------------------------------------------------------------------
  1497. * @desc : name 명으로 value 값을 저장, 기존에 같은 name이 있으면 첫번째 값을 덮어씀
  1498. * @param :
  1499. * @return :
  1500. * @-----------------------------------------------------------------------------------
  1501. */
  1502. function setParameter(name, value){
  1503. var valueNode = instance1.selectSingleNode(gvParamPath+"/"+name+"/"+name+"value");
  1504. model.makeValue(gvParamPath+"/"+name+"/"+name+"value", value);
  1505. }
  1506. /**
  1507. * @-----------------------------------------------------------------------------------
  1508. * @desc : name 명으로 value 값을 추가
  1509. * @param :
  1510. * @return :
  1511. * @-----------------------------------------------------------------------------------
  1512. */
  1513. function addParameter(name, value){
  1514. var valueNode = instance1.selectSingleNode(gvParamPath+"/"+name+"/"+name+"value");
  1515. if(valueNode==null){
  1516. model.makeValue(gvParamPath+"/"+name+"/"+name+"value", value);
  1517. }else{
  1518. var nameNode = instance1.selectSingleNode(gvParamPath+"/"+name);
  1519. valueNode = instance1.createNode("element", name+"value", "");
  1520. valueNode.text = value;
  1521. nameNode.appendChild(valueNode);
  1522. }
  1523. }
  1524. /**
  1525. * @-----------------------------------------------------------------------------------
  1526. * @desc : index 번째 name의 값을 가져옴, index 생략하면 1
  1527. * @param :
  1528. * @return :
  1529. * @-----------------------------------------------------------------------------------
  1530. */
  1531. function getParameter(name, index){
  1532. if (index==null) { index = 1; }
  1533. return model.getValue(gvParamPath+"/"+name+"/"+name+"value["+index+"]");
  1534. }
  1535. /**
  1536. * @-----------------------------------------------------------------------------------
  1537. * @desc : 파라미터저장용 인스턴스의 하위노드갯수(파라미터 개수)를 반환한다.
  1538. * @param : name : 파라미터이름
  1539. * @return :
  1540. * @-----------------------------------------------------------------------------------
  1541. */
  1542. function getParameterCount(name){
  1543. return new Number(instance1.selectnodes(gvParamPath+"/"+name+"/"+name+"value").length);
  1544. }
  1545. /**
  1546. * @-----------------------------------------------------------------------------------
  1547. * @desc : name 명으로 저장된 데이터들 중에서 index 번째 위치에 있는 값을 삭제한다.
  1548. * index를 생략하면 첫번째 위치의 값을 삭제한다.
  1549. * @param :
  1550. * @return :
  1551. * @-----------------------------------------------------------------------------------
  1552. */
  1553. function removeParameter(name, index){
  1554. if (index==null) { index = 1; }
  1555. model.removeNode(gvParamPath+"/"+name+"/"+name+"value["+index+"]");
  1556. }
  1557. /**
  1558. * @-----------------------------------------------------------------------------------
  1559. * @desc : name의 모든 값울 삭제함
  1560. * @param :
  1561. * @return :
  1562. * @-----------------------------------------------------------------------------------
  1563. */
  1564. function clearParameter(name){
  1565. model.removeNode(gvParamPath+"/"+name);
  1566. }
  1567. /**
  1568. * @-----------------------------------------------------------------------------------
  1569. * @desc : 업무구분코드로 시작되는 문자열을 넘기면, 업무구문 문자열을 반환한다.
  1570. * @param :
  1571. * @return :
  1572. * @-----------------------------------------------------------------------------------
  1573. */
  1574. function getBizName(bizCode) {
  1575. var firstChar = bizCode.charAt(2);
  1576. var bizName = "";
  1577. switch(firstChar) {
  1578. case 'P': // 원무
  1579. case 'p':
  1580. bizName = "pam";
  1581. break;
  1582. case 'M': // EMR
  1583. case 'm':
  1584. bizName = "emr";
  1585. break;
  1586. case 'A': // 진료지원
  1587. case 'a':
  1588. bizName = "ast";
  1589. break;
  1590. case 'L': // LIS
  1591. case 'l':
  1592. bizName = "lis";
  1593. break;
  1594. case 'R': // MIS
  1595. case 'r':
  1596. bizName = "mis";
  1597. break;
  1598. case 'Z': // 공통
  1599. case 'z':
  1600. bizName = "com";
  1601. break;
  1602. case 'S': // 통합통계
  1603. case 's':
  1604. bizName = "sts";
  1605. break;
  1606. case 'C': // CRM
  1607. case 'c':
  1608. bizName = "crm";
  1609. break;
  1610. case 'I': // CRC(임상지원센터)
  1611. case 'i':
  1612. bizName = "crc";
  1613. break;
  1614. case 'D': // CRD(전자카드)
  1615. case 'd':
  1616. bizName = "crd";
  1617. break;
  1618. case 'T': // 임시
  1619. case 't':
  1620. bizName = "tmp";
  1621. break;
  1622. default: // unknown
  1623. bizName = "";
  1624. break;
  1625. }
  1626. return bizName;
  1627. }
  1628. /**
  1629. * @-----------------------------------------------------------------------------------
  1630. * @desc : 메인화면의 domain을 리턴한다.
  1631. * @param :
  1632. * @return : domainStr
  1633. * @-----------------------------------------------------------------------------------
  1634. */
  1635. function getMainDomain() {
  1636. var domainStr = getGlobalVariable("domain");
  1637. if (domainStr == "") { // 미리보기의 경우
  1638. domainStr = "http://his999dev.knu.ac.kr:8088";
  1639. }
  1640. return domainStr;
  1641. }
  1642. /**
  1643. * @-----------------------------------------------------------------------------------
  1644. * @desc : syscd 가 주어지면 해당 시스템의 접속 도메인 URL을 반환
  1645. * syscd가 null 이면 현재 화면이 연결된 연결된 시스템의 접속 도메인 URL을 반환
  1646. * @param : syscd : 시스템코드
  1647. * @return : domainStr
  1648. * @-----------------------------------------------------------------------------------
  1649. */
  1650. function getDomain(syscd) {
  1651. var domainStr = null;
  1652. if (syscd == null || syscd == "") {
  1653. syscd = model.getValue(gvSystemPath);
  1654. }
  1655. if (syscd == null || syscd == "") {
  1656. domainStr = getMainDomain();
  1657. } else {
  1658. domainStr = getGlobalVariable("sysurl" + syscd.toUpperCase());
  1659. }
  1660. return domainStr;
  1661. }
  1662. /**
  1663. * @-----------------------------------------------------------------------------------
  1664. * @desc : 현재화면의 화면ID를 반환한다.
  1665. * @param :
  1666. * @return : 화면ID
  1667. * @-----------------------------------------------------------------------------------
  1668. */
  1669. function getScreenURL(sid,syscd) {
  1670. return getDomain(syscd)+getScreenURI(sid);
  1671. }
  1672. /**
  1673. * @-----------------------------------------------------------------------------------
  1674. * @desc : 화면의 URI 를 가져온다.
  1675. * @param :
  1676. * @return : 화면URI
  1677. * @-----------------------------------------------------------------------------------
  1678. */
  1679. function getScreenURI(sid) {
  1680. return "/himed/webapps/hit/web/xrw/"+sid+".xrw";
  1681. }
  1682. /**
  1683. * @-----------------------------------------------------------------------------------
  1684. * @desc : submitID 에 대한 HTTP URI 를 반환한다.
  1685. * @param :
  1686. * @return : HTTP URI
  1687. * @-----------------------------------------------------------------------------------
  1688. */
  1689. function getActionURI(submitID) {
  1690. var bizName = getBizName(submitID);
  1691. var scrnID = getScreenID();
  1692. return "/himed/webapps/hit/web/xrw/.live?submit_id="+submitID+"&business_id="+bizName+"&screen_id="+scrnID;
  1693. }
  1694. /**
  1695. * @-----------------------------------------------------------------------------------
  1696. * @desc : submitID 에 대한 HTTP URL 를 반환한다.
  1697. * @param :
  1698. * @return : HTTP URL
  1699. * @-----------------------------------------------------------------------------------
  1700. */
  1701. function getActionURL(submitID) {
  1702. return getDomain()+getActionURI(submitID);
  1703. }
  1704. var gvOnSubmit = false;
  1705. var gvShowAlert = false;
  1706. var gvSuppressError = false;
  1707. var gvForceSubmit = false;
  1708. var gvHtmlRedirect = false;
  1709. // 영구적으로 창을 띄우지 않을 것인지에 대한 글로벌 변수 ( added by 이상준 2009-08-20 )
  1710. var gvSuppressErrorCheck = false;
  1711. /**
  1712. * @-----------------------------------------------------------------------------------
  1713. * @desc : 다음 submit() 호출에 대하여만 서버에서 메시지로 내려준 내용을 MessageBox()로 보여준다.
  1714. * @param :
  1715. * @return :
  1716. * @-----------------------------------------------------------------------------------
  1717. */
  1718. function setAlertOn() {
  1719. gvShowAlert = true;
  1720. }
  1721. /**
  1722. * @-----------------------------------------------------------------------------------
  1723. * @desc : 다음 submit() 호출에 대하여만 서버에러 메시지 창을 띄우지 않는다.
  1724. * (SuppressErrorCheck 가 true 인 경우 영구적으로 에러메시지 창을 띄우지 않는다. added by 이상준 2009-08-20 )
  1725. * @param :
  1726. * @return :
  1727. * @-----------------------------------------------------------------------------------
  1728. */
  1729. function setErrorOff(SuppressErrorCheck) {
  1730. gvSuppressError = true;
  1731. if(SuppressErrorCheck == true)
  1732. {
  1733. gvSuppressErrorCheck = true;
  1734. }
  1735. }
  1736. /**
  1737. * @-----------------------------------------------------------------------------------
  1738. * @desc : 영구적으로 에러메시지 창을 띄우지 않는 변수를 다시 false 로 바꾼다.
  1739. * @param :
  1740. * @return :
  1741. * @-----------------------------------------------------------------------------------
  1742. */
  1743. function setErrorOn() {
  1744. gvSuppressError = false;
  1745. gvSuppressErrorCheck = false;
  1746. }
  1747. /**
  1748. * @-----------------------------------------------------------------------------------
  1749. * @desc : 다음 submit() 호출에 대하여만 session timeout 에 상관없이 submit()이 실행되도록 한다.
  1750. * @param :
  1751. * @return :
  1752. * @-----------------------------------------------------------------------------------
  1753. */
  1754. function setForceOn() {
  1755. gvForceSubmit = true;
  1756. }
  1757. /**
  1758. * @-----------------------------------------------------------------------------------
  1759. * @desc : 다음 submit() 호출에 대하여만 결과가 HTML로 올 경우 HTML 을 보여주도록 설정한다.
  1760. * @param :
  1761. * @return :
  1762. * @-----------------------------------------------------------------------------------
  1763. */
  1764. function setHtmlRedirect() {
  1765. gvHtmlRedirect = true;
  1766. }
  1767. /**
  1768. * @-----------------------------------------------------------------------------------
  1769. * @desc : 세션 타임 아웃 확인
  1770. * @param :
  1771. * @return : true, false
  1772. * @-----------------------------------------------------------------------------------
  1773. */
  1774. function checkTimeout() {
  1775. var timeOut = parseInt(getGlobalVariable("session_timeout"));
  1776. if (isNaN(timeOut) || timeOut <= 0) { // timeout 적용하지 않음
  1777. return false;
  1778. }
  1779. var lastTime = getGlobalVariable("last_submit");
  1780. var curTime = (new Date()).getTime();
  1781. if (curTime - parseInt(lastTime) > (timeOut*60000)) {
  1782. return true;
  1783. } else {
  1784. return false;
  1785. }
  1786. }
  1787. /**
  1788. * @-----------------------------------------------------------------------------------
  1789. * @desc : 해당서브밋을 서버로 요청한다.
  1790. * @param : submitID : 서브밋아이디
  1791. * refresh : model 에 리프레시 적용 유무
  1792. * ref : 참조대상 노드셋
  1793. * resultref : 서브밋 결과 노드셋
  1794. * encoding : 인코딩설정 (기본값 UTF-8)
  1795. * @return :
  1796. * @-----------------------------------------------------------------------------------
  1797. */
  1798. function submit(submitID, refresh, ref, resultref, encoding) {
  1799. var showAlert = gvShowAlert;
  1800. var suppressError = gvSuppressError;
  1801. gvShowAlert = false;
  1802. if(gvSuppressErrorCheck == false)
  1803. {
  1804. gvSuppressError = false;
  1805. }
  1806. var islogout = false;
  1807. if (!gvForceSubmit) {
  1808. gvForceSubmit = false;
  1809. if (checkTimeout()) {
  1810. // 암호확인창 띄우기
  1811. body.disabled = true;
  1812. setParameter("type", "session");
  1813. // 암호확인 창에서 종료를 선택했는지 여부를 확인
  1814. setParameter("islogout", "false");
  1815. modal("SPZUM00400", "", "", "", "", "", "","width:279px;height:180px;align:center;sysmenu:hidden;");
  1816. // debugger;
  1817. body.disabled = false;
  1818. if (getParameter("islogout") == "true") {
  1819. // 종료를 선택했다. -> submit 을 날리지 않고 당 메소드를 종료하고 logout 절차를 진행한다.
  1820. islogout = true;
  1821. } else {
  1822. if (checkTimeout()) {
  1823. gvHtmlRedirect = false;
  1824. return false; // 암호확인 안됨
  1825. }
  1826. }
  1827. }
  1828. // submit 시간 업데이트
  1829. setGlobalVariable("last_submit", (new Date()).getTime());
  1830. }
  1831. // 종료를 선택했으면 로그아웃절차를 수행
  1832. if (islogout) {
  1833. var status = getViewer("sysMessage");//message Object
  1834. status.window.javascript.fLogout("session");
  1835. return;
  1836. } else {
  1837. // 동시 submit 막기 위한 확인 절차
  1838. if (gvOnSubmit) {
  1839. gvHtmlRedirect = false;
  1840. return false;
  1841. } else {
  1842. gvOnSubmit = true;
  1843. }
  1844. var actionURL = getActionURL(submitID)
  1845. + getUserSessionString(); // 사용자정보 query string 추가.
  1846. if ( refresh == null ) {
  1847. refresh = true;
  1848. }
  1849. var retvalue = false;
  1850. try {
  1851. var sid = document.all(submitID);
  1852. if (!sid) {
  1853. messageBox("Submit["+submitID+"]이 정의되지","E007");
  1854. gvOnSubmit = false;
  1855. gvHtmlRedirect = false;
  1856. return false;
  1857. }
  1858. // ref와 resultref를 설정한다.
  1859. // null 이거나 "" 이면 설정하지 않는다.
  1860. if ( ref != null && ref != "" ) {
  1861. sid.attribute("ref") = ref;
  1862. }
  1863. if ( resultref != null && resultref != "" ) {
  1864. sid.attribute("resultref") = resultref;
  1865. }
  1866. // action url을 설정한다.
  1867. sid.attribute("action") = actionURL;
  1868. if (encoding != null && encoding != "") {
  1869. sid.attribute("encoding") = encoding;
  1870. } else {
  1871. sid.attribute("encoding") = "utf-8";
  1872. }
  1873. //sid.attribute("type") = "custom";
  1874. // 서버에 submit하기전에 이전 에러 메시지 인스턴스를 비운다.
  1875. model.removeNode(gvErrorMsgPath);
  1876. // 서버에 submit한다.
  1877. var ret = model.send(submitID, refresh, false, true);
  1878. if ( ret == 200 ) {
  1879. // 후처리
  1880. retvalue = showSystemMessage(showAlert,suppressError);
  1881. } else {
  1882. if (!suppressError) {
  1883. messageBox("Submit["+submitID+"] 실행을","E009","[ret:"+ret+"]");
  1884. }
  1885. retvalue = false;
  1886. }
  1887. } catch (e) {
  1888. if (!suppressError) {
  1889. messageBox("Submit["+submitID+"] 실행을","E009","[exception:"+e+"]");
  1890. }
  1891. retvalue = false;
  1892. }
  1893. gvOnSubmit = false;
  1894. gvHtmlRedirect = false;
  1895. return retvalue;
  1896. }
  1897. }
  1898. /**
  1899. * @-----------------------------------------------------------------------------------
  1900. * @desc : submit 수행 시 에러가 난 경우 발생
  1901. * @param :
  1902. * @return :
  1903. * @-----------------------------------------------------------------------------------
  1904. */
  1905. function xforms_submit_error() {
  1906. if (error.errorcode == 3003) {
  1907. messageBox("받은 데이터 중 유효하지 않은 문자가 존재하여 화면 출력을","E009","[errorcode:"+error.errorcode+"]");
  1908. event.stopPropagation();
  1909. }
  1910. }
  1911. /**
  1912. * @-----------------------------------------------------------------------------------
  1913. * @desc : 서버에서 전달된 메시지를 화면에 보여준다.
  1914. * @param :
  1915. * @return : true, false
  1916. * @-----------------------------------------------------------------------------------
  1917. */
  1918. function showSystemMessage(showAlert,suppressError) {
  1919. var type = model.getValue(gvErrorMsgPath+"/type");
  1920. var code = model.getValue(gvErrorMsgPath+"/code");
  1921. var msg = model.getValue(gvErrorMsgPath+"/msg");
  1922. var desc = model.getValue(gvErrorMsgPath+"/description");
  1923. if ( "error" == type ) {
  1924. if (suppressError == null || !suppressError) {
  1925. body.disabled = true;
  1926. window.load("../../../com/commonweb/xrw/SPZZZ00100_시스템에러.xrw","modal","","width:514px;height:198px;align:center;",gvErrorMsgPath,"/root/main");
  1927. body.disabled = false;
  1928. }
  1929. return false;
  1930. } else {
  1931. setSystemMessage(msg);
  1932. if (showAlert != null && showAlert) {
  1933. messageBox(msg,"I");
  1934. }
  1935. return true;
  1936. }
  1937. }
  1938. /**
  1939. * @-----------------------------------------------------------------------------------
  1940. * @desc : submit시 서버 시스템 오류 또는 HTML 데이터가 내려올 경우
  1941. * @param :
  1942. * @return :
  1943. * @-----------------------------------------------------------------------------------
  1944. */
  1945. function onredirecthtml() {
  1946. if( document.all(event.target).elementName == "xforms:submission" && gvHtmlRedirect == false) {
  1947. event.preventDefault();
  1948. event.stopPropagation();
  1949. }
  1950. gvHtmlRedirect = false;
  1951. }
  1952. /**
  1953. * @-----------------------------------------------------------------------------------
  1954. * @desc : submit 결과에 <resultKM ../> 이 있을 경우
  1955. * @param :
  1956. * @return :
  1957. * @-----------------------------------------------------------------------------------
  1958. */
  1959. function onerror() {
  1960. var msg = error.description;
  1961. var svrtime = error.errorSource;
  1962. var pctime = (new Date()).getTime();
  1963. // 서버시간과의 차이를 저장해 놓는다.
  1964. setGlobalVariable("timediff", svrtime - pctime);
  1965. event.stopPropagation();
  1966. // 에러 내용을 instance에 저장
  1967. handleSystemMessage(msg);
  1968. }
  1969. /**
  1970. * @-----------------------------------------------------------------------------------
  1971. * @desc : submit 결과로 전달돤 error event의 내용을 처리한다.
  1972. * @param :
  1973. * @return :
  1974. * @-----------------------------------------------------------------------------------
  1975. */
  1976. function handleSystemMessage(msg) {
  1977. // 에러 내용을 instance에 저장
  1978. var msgItem = msg.split("|");
  1979. model.makeValue(gvErrorMsgPath+"/type",msgItem[0]); // error 또는 info
  1980. model.makeValue(gvErrorMsgPath+"/code",msgItem[1]); // error인 경우 에러코드
  1981. model.makeValue(gvErrorMsgPath+"/msg",msgItem[2].replace(";","\n"),true); // 메시지의 newline 기호인 ; 를 실제 줄바꿈으로변경
  1982. var description = "";
  1983. if (msgItem[3] != null && msgItem[3] != "undefined") {
  1984. description = msgItem[3];
  1985. }
  1986. if (msgItem[4] != null && msgItem[4] != "undefined") {
  1987. description = description + "\n" + msgItem[4];
  1988. }
  1989. model.makeValue(gvErrorMsgPath+"/description",description); // error인 경우 발생위치
  1990. }
  1991. /**
  1992. * @-----------------------------------------------------------------------------------
  1993. * @desc : 사용자 정보 세션 데이터를 항상 서버 submit과 함께 올리기 위하여
  1994. * 해당 데이터를 action URL에 query string으로 추가한다.
  1995. * 이때 사용할 query string을 생성한다.
  1996. * @param :
  1997. * @return :
  1998. * @-----------------------------------------------------------------------------------
  1999. */
  2000. function getUserSessionString() {
  2001. var sessionStr = "&macaddr="+getUserInfo("macaddr");
  2002. var isAnonymous = getGlobalVariable("anonymous");
  2003. if (isAnonymous == "true") { // 미리보기인 경우 세션정보를 파라메터로 추가한다.
  2004. sessionStr = sessionStr + "&anony_session="+encodeURI(getUserInfos());
  2005. }
  2006. return sessionStr;
  2007. }
  2008. /**
  2009. *
  2010. *I001=처리되었습니다.
  2011. *I002=완료되었습니다.
  2012. *I003=필수입력입니다.
  2013. *I004=없습니다.
  2014. *I005=환자입니다.
  2015. *I006=가능합니다.
  2016. *I007=확인하십시오.
  2017. *I008=하십시오.
  2018. *I009=입니다.
  2019. *I010=있습니다.
  2020. *I011=않습니다.
  2021. *
  2022. *C001=입력하십시오 !
  2023. *C002=선택하십시오 !
  2024. *C003=진행하십시오 !
  2025. *
  2026. *E001=할 수 없습니다.
  2027. *E002=권한이 없습니다.
  2028. *E003=초과하였습니다.
  2029. *E004=일치하지 않습니다.
  2030. *E005=선택되었습니다.
  2031. *E006=중복되었습니다.
  2032. *E007=않았습니다.
  2033. *E008=입니다.
  2034. *E009=실패하였습니다.
  2035. *E010=사원만 가능합니다.
  2036. *E011=이전만 가능합니다.
  2037. *E012=이후만 가능합니다.
  2038. *E013=데이터가 없습니다.
  2039. *E014=존재하지 않습니다.
  2040. *E015=자리까지만 가능합니다.
  2041. *E016=유효하지 않습니다.
  2042. *
  2043. *Q001=삭제 하시겠습니까 ?
  2044. *Q002=저장 하시겠습니까 ?
  2045. *Q003=계속 진행하시겠습니까?
  2046. *Q004=실행 하시겠습니까?
  2047. *Q005=조회 하시겠습니까?
  2048. *Q006=확정 하시겠습니까?
  2049. *Q007=취소 하시겠습니까?
  2050. *Q008=추가 하시겠습니까?
  2051. *Q009=적용 하시겠습니까?
  2052. *Q010=초기화 하시겠습니까?
  2053. *Q011=확인 하시겠습니까?
  2054. *Q012=수정 하시겠습니까?
  2055. *Q013= 선택 하시겠습니까?
  2056. *Q014= 등록 하시겠습니까?
  2057. *Q015= 재요청 하시겠습니까?
  2058. *Q016= 종결된 기록지입니다. 기록내용을 수정하시겠습니까?
  2059. *
  2060. *S001=하시려면 예(Yes)\n아니면 아니오(No)
  2061. *S002=저장하시려면 예(Yes)\n변경하시려면 아니오(No)
  2062. *S003=pMessage 하시려면 예(Yes)\n pOptMsg 하시려면 아니오(No)
  2063. *S004=하시려면 예(Yes)\n아니면 아니오(No)\n무시하시려면 취소를 선택하세요
  2064. *S005=종결된 기록지입니다. 작업유형을 선택하십시오\n\n예 : 기록수정 / 아니오 : 신규기록생성
  2065. *S006=pMessage 하시려면 예(Yes)\n pOptMsg[0] 하시려면 아니오(No)\n pOptMsg[1] 하시려면 취소를 선택하십시오.
  2066. *
  2067. *return :
  2068. */
  2069. /**
  2070. * @-----------------------------------------------------------------------------------
  2071. * @desc : msg_code : I(Information), C(Critical), E(Exclamation), Q(Question, YN), S(Select, YNC)
  2072. * @param : pMessage : 메시지 타입, pCode : 코드정보
  2073. * @return : yes=6, no=7
  2074. * @-----------------------------------------------------------------------------------
  2075. */
  2076. function messageBox(pMessage, pCode, pOptMsg) {
  2077. var alertMsg = null;
  2078. var msgTitle = null;
  2079. var msgType = null;
  2080. var msgData = null;
  2081. var msgRtn = "";
  2082. // Title Message
  2083. switch( pCode.substr(0,1) ){
  2084. case "I": msgTitle = "정보";
  2085. msgType = "64";
  2086. break;
  2087. case "C": msgTitle = "오류";
  2088. msgType = "16";
  2089. break;
  2090. case "E": msgTitle = "경고";
  2091. msgType = "48";
  2092. break;
  2093. case "Q": msgTitle = "확인";
  2094. msgType = "36";
  2095. break;
  2096. case "S": msgTitle = "선택";
  2097. msgType = "35";
  2098. break;
  2099. default : msgTitle = "오류";
  2100. msgType = "16";
  2101. }
  2102. // Message Data
  2103. switch( pCode ){
  2104. case "I000": alertMsg = ""; break;
  2105. case "I001": alertMsg = " 처리되었습니다."; break;
  2106. case "I002": alertMsg = " 완료되었습니다."; break;
  2107. case "I003": alertMsg = " 필수입력입니다."; break;
  2108. case "I004": alertMsg = " 없습니다."; break;
  2109. case "I005": alertMsg = " 환자입니다."; break;
  2110. case "I006": alertMsg = " 가능합니다."; break;
  2111. case "I007": alertMsg = " 확인하십시오."; break;
  2112. case "I008": alertMsg = " 하십시오."; break;
  2113. case "I009": alertMsg = " 입니다."; break;
  2114. case "I010": alertMsg = " 있습니다."; break;
  2115. case "I011": alertMsg = " 않습니다.";break;
  2116. case "C000": alertMsg = ""; break;
  2117. case "C001": alertMsg = " 입력하십시오."; break;
  2118. case "C002": alertMsg = " 선택하십시오."; break;
  2119. case "C003": alertMsg = " 진행하십시오."; break;
  2120. case "E000": alertMsg = ""; break;
  2121. case "E001": alertMsg = " 할 수 없습니다."; break;
  2122. case "E002": alertMsg = " 권한이 없습니다."; break;
  2123. case "E003": alertMsg = " 초과하였습니다."; break;
  2124. case "E004": alertMsg = " 일치하지 않습니다."; break;
  2125. case "E005": alertMsg = " 선택되었습니다."; break;
  2126. case "E006": alertMsg = " 중복되었습니다."; break;
  2127. case "E007": alertMsg = " 않았습니다."; break;
  2128. case "E008": alertMsg = " 입니다."; break;
  2129. case "E009": alertMsg = " 실패하였습니다."; break;
  2130. case "E010": alertMsg = " 사원만 가능합니다."; break;
  2131. case "E011": alertMsg = " 이전만 가능합니다."; break;
  2132. case "E012": alertMsg = " 이후만 가능합니다."; break;
  2133. case "E013": alertMsg = " 데이터가 없습니다."; break;
  2134. case "E014": alertMsg = " 존재하지 않습니다."; break;
  2135. case "E015": alertMsg = " 자리까지만 가능합니다."; break;
  2136. case "E016": alertMsg = " 유효하지 않습니다."; break;
  2137. case "Q000": alertMsg = ""; break;
  2138. case "Q001": alertMsg = " 삭제 하시겠습니까?"; break;
  2139. case "Q002": alertMsg = " 저장 하시겠습니까?"; break;
  2140. case "Q003": alertMsg = " 계속 진행하시겠습니까?"; break;
  2141. case "Q004": alertMsg = " 실행 하시겠습니까?"; break;
  2142. case "Q005": alertMsg = " 조회 하시겠습니까?"; break;
  2143. case "Q006": alertMsg = " 확정 하시겠습니까?"; break;
  2144. case "Q007": alertMsg = " 취소 하시겠습니까?"; break;
  2145. case "Q008": alertMsg = " 추가 하시겠습니까?"; break;
  2146. case "Q009": alertMsg = " 적용 하시겠습니까?"; break;
  2147. case "Q010": alertMsg = " 초기화 하시겠습니까?"; break;
  2148. case "Q011": alertMsg = " 확인 하시겠습니까?"; break;
  2149. case "Q012": alertMsg = " 수정 하시겠습니까?"; break;
  2150. case "Q013": alertMsg = " 선택 하시겠습니까?";break;
  2151. case "Q014": alertMsg = " 등록 하시겠습니까?";break;
  2152. case "Q015": alertMsg = " 재요청 하시겠습니까?";break;
  2153. case "Q016": alertMsg = " 종결된 기록지입니다. 기록내용을 수정하시겠습니까?";break;
  2154. case "S001": alertMsg = " 하시려면 예(Yes)\n아니면 아니오(No)를 선택하십시오."; break;
  2155. case "S002": alertMsg = " 저장하시려면 예(Yes)\n변경하시려면 아니오(No)를 선택하십시오"; break;
  2156. case "S003": alertMsg = " 하시려면 예(Yes)\n" + pOptMsg + " 하시려면 아니오(No)를 선택하십시오.";break;
  2157. case "S004": alertMsg = " 하시려면 예(Yes)\n아니면 아니오(No)\n무시하시려면 취소를 선택하십시오";break;
  2158. case "S005": alertMsg = " 종결된 기록지입니다. 작업유형을 선택하십시오\n\n예 : 기록수정 / 아니오 : 신규기록생성";break;
  2159. case "S006": alertMsg = " 하시려면 예(Yes)\n" + pOptMsg.split("|")[0] + " 하시려면 아니오(No)\n" + pOptMsg.split("|")[1] + " 하시려면 취소를 선택하십시오";break;
  2160. case "S007": alertMsg = " \n재등록 하시려면 예(Yes), " + pOptMsg.split("|")[0] + " 아니오(No), " + pOptMsg.split("|")[1] + " 취소를 선택하십시오.";break;
  2161. default : alertMsg = "";
  2162. }
  2163. if(pOptMsg == null || pOptMsg == ""){
  2164. msgData = pMessage+alertMsg;
  2165. } else {
  2166. if (pCode == "S003" || pCode == "S006" || pCode == "S007") {
  2167. msgData = pMessage+alertMsg;
  2168. } else {
  2169. msgData = pMessage+alertMsg + "\n" + pOptMsg;
  2170. }
  2171. }
  2172. body.disabled = true;
  2173. msgRtn = window.alert( msgData, msgTitle, msgType );
  2174. body.disabled = false;
  2175. return msgRtn;
  2176. }
  2177. /*--------------------------------------------------------------------
  2178. //사용자 세션정보 제공함수들
  2179. ---------------------------------------------------------------------*/
  2180. /**
  2181. * @-----------------------------------------------------------------------------------
  2182. * @desc : 사용자 세션정보 제공함수 UserId
  2183. * @param :
  2184. * @return :
  2185. * @-----------------------------------------------------------------------------------
  2186. */
  2187. function getUserId() {
  2188. return getUserInfo("userid");
  2189. }
  2190. /**
  2191. * @-----------------------------------------------------------------------------------
  2192. * @desc : 사용자 세션정보 제공함수 UserName
  2193. * @param :
  2194. * @return :
  2195. * @-----------------------------------------------------------------------------------
  2196. */
  2197. function getUserName() {
  2198. return getUserInfo("usernm");
  2199. }
  2200. /**
  2201. * @-----------------------------------------------------------------------------------
  2202. * @desc : 사용자 세션정보 제공함수 UserInfo
  2203. * @param :
  2204. * @return :
  2205. * @-----------------------------------------------------------------------------------
  2206. */
  2207. function getUserInfo(key) {
  2208. if ( getGlobalVariable("userinfos") == "" ) {
  2209. setDefaultUserInfo();
  2210. }
  2211. return getGlobalVariable(key);
  2212. }
  2213. /**
  2214. * @-----------------------------------------------------------------------------------
  2215. * @desc : 사용자 세션정보 제공함수 userinfos
  2216. * @param :
  2217. * @return :
  2218. * @-----------------------------------------------------------------------------------
  2219. */
  2220. function getUserInfos() {
  2221. if ( getGlobalVariable("userinfos") == "" ) {
  2222. setDefaultUserInfo();
  2223. }
  2224. return getGlobalVariable("userinfos");
  2225. }
  2226. /**
  2227. * @-----------------------------------------------------------------------------------
  2228. * @desc : 사용자 정보를 셋팅
  2229. * @param :
  2230. * @return :
  2231. * @-----------------------------------------------------------------------------------
  2232. */
  2233. function setDefaultUserInfo() {
  2234. var userInfoKeyStr="userid|usernm|posinstcd|posinstnm|posdeptcd|posdeptnm|dutplceinstcd|dutplceinstnm|dutplcecd|dutplcenm|jobkindcd|jobkindnm|jobposcd|jobposnm|jobrespcd|jobrespnm|prfshipflagcd|prfshipflagnm|licnsno|specordyn|deptabbr|orddeptflag|wardflag|systemcd|systemnm|systeminstcd|systeminstnm|logindt|kmiip|kmiport|usergrp|ipaddr|dutinstcd|dutinstnm|dutunitcd|dutunitnm|mpphonno|orginstcd|orginstnm|orgdeptcd|orgdeptnm|userkindcd|ordsupdeptcd";
  2235. var userInfoKeyArr = userInfoKeyStr.split("|");
  2236. var userInfoStr = "";
  2237. try {
  2238. var fso = new ActiveXObject("Scripting.FileSystemObject");
  2239. var f = fso.GetFile("session.txt");
  2240. var ts = f.OpenAsTextStream(1);
  2241. userInfoStr = ts.ReadLine();
  2242. ts.Close();
  2243. } catch(e) {
  2244. }
  2245. var userInfoArr = userInfoStr.split("|");
  2246. var len = userInfoKeyArr.length;
  2247. setGlobalVariable("anonymous","true"); // 사용자세션정보가 미리보기용임
  2248. for(i=0;i<len;i++) {
  2249. setGlobalVariable(userInfoKeyArr[i],userInfoArr[i]);
  2250. }
  2251. setGlobalVariable("userinfos", userInfoStr);
  2252. }
  2253. /*--------------------------------------------------------------------
  2254. //공통 세션변수 관련 함수
  2255. ---------------------------------------------------------------------*/
  2256. /**
  2257. * @-----------------------------------------------------------------------------------
  2258. * @desc : 세션 변수명을 반환한다.
  2259. * @param :
  2260. * @return :
  2261. * @-----------------------------------------------------------------------------------
  2262. */
  2263. function getPropertyName(key, bizCode){
  2264. var bizName = "";
  2265. var propertyName = "";
  2266. if (bizCode == null || bizCode == "" || bizCode == "undefined")
  2267. {
  2268. bizName = "";
  2269. }else{
  2270. bizName = getBizName(bizCode)+"_";
  2271. }
  2272. return getSystemCd()+"_"+bizName+"gsv_"+key;
  2273. }
  2274. /**
  2275. * @-----------------------------------------------------------------------------------
  2276. * @desc : 세션변수를 저장한다.
  2277. * @param :
  2278. * @return :
  2279. * @-----------------------------------------------------------------------------------
  2280. */
  2281. function setGlobalVariable(key, value, bizCode){
  2282. model.property(getPropertyName(key, bizCode)) = value;
  2283. return true;
  2284. }
  2285. /**
  2286. * @-----------------------------------------------------------------------------------
  2287. * @desc : 세션변수를 반환한다.
  2288. * @param :
  2289. * @return :
  2290. * @-----------------------------------------------------------------------------------
  2291. */
  2292. function getGlobalVariable(key, bizCode){
  2293. return model.property(getPropertyName(key, bizCode));
  2294. }
  2295. /**
  2296. * @-----------------------------------------------------------------------------------
  2297. * @desc : 사용자가 속한 특수 사용자 그룹 목록을 반환한다.
  2298. * @param :
  2299. * @return :
  2300. * @-----------------------------------------------------------------------------------
  2301. */
  2302. function getUserGroupList() {
  2303. var usergrp = getUserInfo("usergrp");
  2304. if (usergrp == null || usergrp == "") {
  2305. return null;
  2306. } else {
  2307. return usergrp.split(",");
  2308. }
  2309. }
  2310. /**
  2311. * @-----------------------------------------------------------------------------------
  2312. * @desc : 사용자가 주어진 특수 사용자 그룹에 속해있는지 여부를 반환한다.
  2313. * @param :
  2314. * @return :
  2315. * @-----------------------------------------------------------------------------------
  2316. */
  2317. function checkUserGroup(grpname) {
  2318. var usergrplist = getUserGroupList();
  2319. if (usergrplist == null) {
  2320. return false;
  2321. }
  2322. for(var i=0;i<usergrplist.length;i++) {
  2323. if (grpname == usergrplist[i]) {
  2324. return true;
  2325. }
  2326. }
  2327. return false;
  2328. }
  2329. /*-------------------------------------------------------------------
  2330. //환자정보 관련 함수
  2331. ---------------------------------------------------------------------*/
  2332. /**
  2333. * @-----------------------------------------------------------------------------------
  2334. * @desc : 환자정보 셋팅
  2335. * @param : 환자정보 key
  2336. * pid : 환자번호
  2337. * pname : 환자명
  2338. * age : 나이(54/M)
  2339. * addr : 주소
  2340. * insukind : 보험유형
  2341. * ininfo : 재원정보
  2342. * body : 몸무게 키
  2343. * btype : 혈액형
  2344. * orddept : 진료과
  2345. * apntdr : 의사정보 - 지정의
  2346. * attndr : 의사정보 - 주치의
  2347. * diagnosis : 진단명
  2348. * operation : 수술정보
  2349. * allergy : 알러지 정보(Y^Y)
  2350. * newallergy : 새로운 알러지 확인 정보(Y)
  2351. * infection : 감염정보(Y^Y^Y)
  2352. * intncare : 특례(Y)
  2353. * vip : vip(Y)
  2354. * one : one(Y)
  2355. * healexam : 건진(Y)
  2356. * coop : 협력(Y)
  2357. * cp : cp(Y)
  2358. * addrdetl : 상세주소
  2359. * regstno : 주민번호
  2360. * telno : 전화번호
  2361. * zipcd : 우편번호
  2362. * @return : false
  2363. * @-----------------------------------------------------------------------------------
  2364. */
  2365. function setPatientInfo(key, value) {
  2366. var viewerObj = getViewer("patientInfo");
  2367. if ( viewerObj != null){
  2368. if ( key != "pid" && value.split("|")[0] == getPatientId()){
  2369. return viewerObj.window.javascript.fSetPatientInfo(key, value.split("|")[1]);
  2370. }else{
  2371. return viewerObj.window.javascript.fSetPatientInfo(key, value);
  2372. }
  2373. }
  2374. return false;
  2375. }
  2376. /**
  2377. * @-----------------------------------------------------------------------------------
  2378. * @desc : 환자정보 전체 저장
  2379. * @param :
  2380. * @return : false
  2381. * @-----------------------------------------------------------------------------------
  2382. */
  2383. function setPatientInfos(values){
  2384. var viewerObj = getViewer("patientInfo");
  2385. if ( viewerObj != null ){
  2386. return viewerObj.window.javascript.fSetPatientInfos(values);
  2387. }
  2388. return false;
  2389. }
  2390. /**
  2391. * @-----------------------------------------------------------------------------------
  2392. * @desc : 환자정보 삭제
  2393. * @param :
  2394. * @return : false
  2395. * @-----------------------------------------------------------------------------------
  2396. */
  2397. function delPatientInfos(){
  2398. var viewerObj = getViewer("patientInfo");
  2399. if ( viewerObj != null ){
  2400. return viewerObj.window.javascript.fDelPatientInfos();
  2401. }
  2402. return false;
  2403. }
  2404. /**
  2405. * @-----------------------------------------------------------------------------------
  2406. * @desc : 환자정보 조회
  2407. * @param :
  2408. * @return : 환자정보 or ""
  2409. * @-----------------------------------------------------------------------------------
  2410. */
  2411. function getPatientInfo(key) {
  2412. var viewerObj = getViewer("patientInfo");
  2413. if ( viewerObj != null ){
  2414. return viewerObj.window.javascript.fGetPatientInfo(key);
  2415. }
  2416. return "";
  2417. }
  2418. /**
  2419. * @-----------------------------------------------------------------------------------
  2420. * @desc : 환자기본정보 전체 조회
  2421. * @param :
  2422. * @return : 환자정보 or ""
  2423. * @-----------------------------------------------------------------------------------
  2424. */
  2425. function getPatientInfos() {
  2426. var viewerObj = getViewer("patientInfo");
  2427. if ( viewerObj != null ){
  2428. return viewerObj.window.javascript.fGetPatientInfos();
  2429. }
  2430. return "";
  2431. }
  2432. /**
  2433. * @-----------------------------------------------------------------------------------
  2434. * @desc : 환자번호 조회
  2435. * @param :
  2436. * @return : 환자번호 or ""
  2437. * @-----------------------------------------------------------------------------------
  2438. */
  2439. function getPatientId() {
  2440. var viewerObj = getViewer("patientInfo");
  2441. if ( viewerObj != null ){
  2442. return viewerObj.window.javascript.fGetPatientId();
  2443. }
  2444. return "";
  2445. }
  2446. /**
  2447. * @-----------------------------------------------------------------------------------
  2448. * @desc : 환자명 조회
  2449. * @param :
  2450. * @return : 환자명 or ""
  2451. * @-----------------------------------------------------------------------------------
  2452. */
  2453. function getPatientName() {
  2454. var viewerObj = getViewer("patientInfo");
  2455. if ( viewerObj != null ){
  2456. return viewerObj.window.javascript.fGetPatientName();
  2457. }
  2458. return "";
  2459. }
  2460. /**
  2461. * @-----------------------------------------------------------------------------------
  2462. * @desc : 환자구분을 설정한다.
  2463. * @param :
  2464. * @return : 환자구분 or false
  2465. * @-----------------------------------------------------------------------------------
  2466. */
  2467. function setPatientFlag(value){
  2468. var viewerObj = getViewer("patientInfo");
  2469. if ( viewerObj != null){
  2470. return viewerObj.window.javascript.fSetPatientFlag(value);
  2471. }
  2472. return false;
  2473. }
  2474. /**
  2475. * @-----------------------------------------------------------------------------------
  2476. * @desc : 환자구분에 따른 상세정보를 설정한다.
  2477. * @param :
  2478. * @return : 환자구분 or false
  2479. * @-----------------------------------------------------------------------------------
  2480. */
  2481. function setPatientInfoDetail(srcPath){
  2482. var viewerObj = getViewer("patientInfo");
  2483. var srcPath = instance1.selectSingleNode(srcPath);
  2484. if ( viewerObj != null && srcPath != null){
  2485. var destPath = viewerObj.window.javascript.fGetPatientInfoPath();
  2486. if( destPath != ""){
  2487. viewerObj.window.model.makeNode(destPath);
  2488. viewerObj.window.model.copyNode(destPath, srcPath);
  2489. return viewerObj.window.javascript.fCheckPatientId(destPath, "paminfo");
  2490. }else{
  2491. messageBox("환자구분이","E014");
  2492. }
  2493. }
  2494. return false;
  2495. }
  2496. /**
  2497. * @-----------------------------------------------------------------------------------
  2498. * @desc : 환자상세정보를 key 별로 저장한다.
  2499. * 반드시 setPatientInfoDetail(srcPath) 를 통해 최초 한번은 환자상세정보를 설정해야 한다.
  2500. * @param :
  2501. * @return : 환자상세정보 or false
  2502. * @-----------------------------------------------------------------------------------
  2503. */
  2504. function setPatientInfoDetailByKey(key, value) {
  2505. var viewerObj = getViewer("patientInfo");
  2506. if ( viewerObj != null){
  2507. if (key == "pid") {
  2508. return viewerObj.window.javascript.fSetPatientInfoDetailByKey(key, value);
  2509. } else {
  2510. if (value.split("|")[0] == getPatientId()) {
  2511. return viewerObj.window.javascript.fSetPatientInfoDetailByKey(key, value.split("|")[1]);
  2512. }
  2513. }
  2514. }
  2515. return false;
  2516. }
  2517. /**
  2518. * @-----------------------------------------------------------------------------------
  2519. * @desc : 환자구분에 따른 상세정보를 key에 해당하는 value반환한다.
  2520. * @param :
  2521. * @return : 환자상세정보 or ""
  2522. * @-----------------------------------------------------------------------------------
  2523. */
  2524. function getPatientInfoDetail(key) {
  2525. var viewerObj = getViewer("patientInfo");
  2526. if ( viewerObj != null ){
  2527. return viewerObj.window.javascript.fGetPatientInfoDetail(key);
  2528. }
  2529. return "";
  2530. }
  2531. /**
  2532. * @-----------------------------------------------------------------------------------
  2533. * @desc : 환자구분에 따른 상세정보 전체를 반환한다.
  2534. * 지정한 노드로 노드 copy한다.
  2535. * @param :
  2536. * @return : 환자상세정보 or false
  2537. * @-----------------------------------------------------------------------------------
  2538. */
  2539. function getPatientInfoDetails(destPath) {
  2540. var viewerObj = getViewer("patientInfo");
  2541. var destPath = instance1.selectSingleNode(destPath);
  2542. if ( viewerObj != null && destPath != null){
  2543. srcPath = viewerObj.window.javascript.fGetPatientInfoPath();
  2544. if(srcPath != ""){
  2545. srcPath = viewerObj.window.instance1.selectSingleNode(srcPath);
  2546. if(srcPath != null){
  2547. model.copyNode(destPath, srcPath);
  2548. return true;
  2549. }
  2550. }
  2551. }
  2552. return false;
  2553. }
  2554. /**
  2555. * @-----------------------------------------------------------------------------------
  2556. * @desc : 수술관련 상세정보를 설정한다.
  2557. * @param :
  2558. * @return : 수술정보정보 or false
  2559. * @-----------------------------------------------------------------------------------
  2560. */
  2561. function setOperationInfo(srcPath){
  2562. var viewerObj = getViewer("patientInfo");
  2563. var srcPath = instance1.selectSingleNode(srcPath);
  2564. if ( viewerObj != null && srcPath != null){
  2565. viewerObj.window.model.makeNode(gvOperationInfoPath);
  2566. viewerObj.window.model.copyNode(gvOperationInfoPath, srcPath);
  2567. return viewerObj.window.javascript.fCheckPatientId(gvOperationInfoPath, "operation");
  2568. }
  2569. return false;
  2570. }
  2571. /**
  2572. * @-----------------------------------------------------------------------------------
  2573. * @desc : 수술관련 상세정보를 key 별로 설정한다.
  2574. * 반드시 setOperationInfo(srcPath) 를 통해 최초 한번은 수술정보를 설정해야 한다.
  2575. * @param :
  2576. * @return : 수술 상세정보 or false
  2577. * @-----------------------------------------------------------------------------------
  2578. */
  2579. function setOperationInfoDetailByKey(key, value) {
  2580. var viewerObj = getViewer("patientInfo");
  2581. if ( viewerObj != null){
  2582. if (key == "pid") {
  2583. return viewerObj.window.javascript.fSetOperationInfoDetailByKey(key, value);
  2584. } else {
  2585. if (value.split("|")[0] == getPatientId()) {
  2586. return viewerObj.window.javascript.fSetOperationInfoDetailByKey(key, value.split("|")[1]);
  2587. }
  2588. }
  2589. }
  2590. return false;
  2591. }
  2592. /**
  2593. * @-----------------------------------------------------------------------------------
  2594. * @desc : key에 해당하는 수술관련 정보를 반환한다.
  2595. * @param :
  2596. * @return :
  2597. * @-----------------------------------------------------------------------------------
  2598. */
  2599. function getOperationInfo(key){
  2600. var viewerObj = getViewer("patientInfo");
  2601. if ( viewerObj != null){
  2602. return viewerObj.window.javascript.fGetOperationInfo(key);
  2603. }
  2604. return "";
  2605. }
  2606. /**
  2607. * @-----------------------------------------------------------------------------------
  2608. * @desc : 수술관련 정보를 지정한 노드로 모두 copyNode한다.
  2609. * @param :
  2610. * @return :
  2611. * @-----------------------------------------------------------------------------------
  2612. */
  2613. function getOperationInfos(destPath){
  2614. var viewerObj = getViewer("patientInfo");
  2615. var destPath = instance1.selectSingleNode(destPath);
  2616. if ( viewerObj != null && destPath != null){
  2617. var srcPath = viewerObj.window.instance1.selectSingleNode(gvOperationInfoPath);
  2618. if(srcPath != null){
  2619. model.copyNode(destPath, srcPath);
  2620. return true;
  2621. }
  2622. }
  2623. return false;
  2624. }
  2625. /**
  2626. * @-----------------------------------------------------------------------------------
  2627. * @desc : 협진관련 상세정보를 설정한다.
  2628. * @param :
  2629. * @return :
  2630. * @-----------------------------------------------------------------------------------
  2631. */
  2632. function setConsultInfo(srcPath){
  2633. var viewerObj = getViewer("patientInfo");
  2634. var srcPath = instance1.selectSingleNode(srcPath);
  2635. if ( viewerObj != null && srcPath != null){
  2636. viewerObj.window.model.makeNode(gvConsultInfoPath);
  2637. viewerObj.window.model.copyNode(gvConsultInfoPath, srcPath);
  2638. return viewerObj.window.javascript.fCheckPatientId(gvConsultInfoPath, "consult");
  2639. }
  2640. return false;
  2641. }
  2642. /**
  2643. * @-----------------------------------------------------------------------------------
  2644. * @desc : 협진관련 상세정보를 key 별로 저장한다.
  2645. * 반드시 setConsultInfo(srcPath) 를 통해 최초 한번은 협진정보를 설정해야 한다.
  2646. * @param : key : 협진관련키, value: 데이터값
  2647. * @return : 협진상세정보 or false
  2648. * @-----------------------------------------------------------------------------------
  2649. */
  2650. function setConsultInfoDetailByKey(key, value) {
  2651. var viewerObj = getViewer("patientInfo");
  2652. if ( viewerObj != null){
  2653. if (key == "pid") {
  2654. return viewerObj.window.javascript.fSetConsultInfoDetailByKey(key, value);
  2655. } else {
  2656. if (value.split("|")[0] == getPatientId()) {
  2657. return viewerObj.window.javascript.fSetConsultInfoDetailByKey(key, value.split("|")[1]);
  2658. }
  2659. }
  2660. }
  2661. return false;
  2662. }
  2663. /**
  2664. * @-----------------------------------------------------------------------------------
  2665. * @desc : key에 해당하는 협진관련 정보를 반환한다.
  2666. * @param :
  2667. * @return : 협진정보 or ""
  2668. * @-----------------------------------------------------------------------------------
  2669. */
  2670. function getConsultInfo(key){
  2671. var viewerObj = getViewer("patientInfo");
  2672. if ( viewerObj != null){
  2673. return viewerObj.window.javascript.fGetConsultInfo(key);
  2674. }
  2675. return "";
  2676. }
  2677. /**
  2678. * @-----------------------------------------------------------------------------------
  2679. * @desc : 협진관련 정보를 지정한 노드로 모두 copyNode한다.
  2680. * @param :
  2681. * @return :
  2682. * @-----------------------------------------------------------------------------------
  2683. */
  2684. function getConsultInfos(destPath) {
  2685. var viewerObj = getViewer("patientInfo");
  2686. var destPath = instance1.selectSingleNode(destPath);
  2687. if ( viewerObj != null && destPath != null){
  2688. var srcPath = viewerObj.window.instance1.selectSingleNode(gvConsultInfoPath);
  2689. if(srcPath != null){
  2690. model.copyNode(destPath, srcPath);
  2691. return true;
  2692. }
  2693. }
  2694. return false;
  2695. }
  2696. /**
  2697. * @-----------------------------------------------------------------------------------
  2698. * @desc : 처방기본데이터 copyNode
  2699. * @param : destPath : 대상경로
  2700. * @return : true or false
  2701. * @-----------------------------------------------------------------------------------
  2702. */
  2703. function getOrderBasicInfo(destPath){
  2704. var viewerObj = getViewer("sysMessage");
  2705. var destPath = instance1.selectSingleNode(destPath);
  2706. if ( viewerObj != null && destPath != null){
  2707. var srcPath = viewerObj.window.instance1.selectSingleNode(gvOrderBasicInfoPath);
  2708. if(srcPath != null){
  2709. model.copyNode(destPath, srcPath);
  2710. return true;
  2711. }
  2712. }
  2713. return false;
  2714. }
  2715. /*-------------------------------------------------------------------
  2716. //레포트 연계 관련 함수
  2717. ---------------------------------------------------------------------*/
  2718. /**
  2719. * @-----------------------------------------------------------------------------------
  2720. * @desc : 레포트를 실행한다.
  2721. * @param : rid : 레포트명
  2722. * dataType : 연계방법
  2723. * paramsXPath : 매개변수필드 XPath
  2724. * submitId : SubmitID
  2725. * print : 출력여부
  2726. * printDialog : 인쇄 창 보임 여부
  2727. * fileType : 저장타입
  2728. * fileName : 파일명
  2729. * fileDialog : 파일 저장 창 보임여부
  2730. * closeYn : 미리보기창닫기여부
  2731. * monNo : 모니터 번호
  2732. * parentObjId : 부모객체명
  2733. * printPaperBin : 트레이번호
  2734. * userService : 데이터 소스
  2735. * showButton : 툴바버튼보임여부
  2736. * printCount : 프린트장수
  2737. * zoomRate : 미리보기뷰어 비율
  2738. * printOption : 출력시 선택 옵션
  2739. * dataXPath : 데이터 XPath
  2740. * mainDataXPath : 메인리포트 반복XPath
  2741. * subDataXPath : 서브리포트1 반복Xpath
  2742. * @return :
  2743. * @-----------------------------------------------------------------
  2744. */
  2745. function exeReportPreview(rid, dataType, paramsXPath, submitId, print, printDialog, fileType, fileName, fileDialog, closeYn, monNo, parentObjId, printPaperBin, userService, showButton, printCount, zoomRate, printOption, dataXPath, mainDataXPath, subDataXPath)
  2746. {
  2747. var reportNode = instance1.selectSingleNode(gvReportPath);
  2748. var syscd = getSystemCd();
  2749. syscd = syscd.substr(3,3);
  2750. //if(syscd == "888" || syscd == "999" || syscd == "") syscd = "001";
  2751. if(syscd == "") syscd = "001";
  2752. //레포트 관련 내용 초기화
  2753. if(reportNode != null){
  2754. model.removeNodeset(gvReportPath);
  2755. }
  2756. model.makeNode(gvReportPath);
  2757. model.makeNode(gvReportParamsPath);
  2758. model.makeNode(gvReportPropsPath);
  2759. model.makeNode(gvReportOptionsPath);
  2760. paramsXPath = instance1.selectSingleNode(paramsXPath);
  2761. if(paramsXPath != null){
  2762. model.copyNode(gvReportParamsPath, paramsXPath);
  2763. }
  2764. model.makeValue(gvReportParamsPath+"/userid", getUserId());
  2765. model.makeValue(gvReportParamsPath+"/logoimgurl", getImageURL("error_logo"+getLogoImageKey()));
  2766. model.makeValue(gvReportParamsPath+"/url", rid);
  2767. model.makeValue(gvReportPropsPath+"/rex_rptname", rid);
  2768. model.makeValue(gvReportPropsPath+"/rex_datatype", dataType);
  2769. model.makeValue(gvReportPropsPath+"/rex_submitid", submitId);
  2770. model.makeValue(gvReportPropsPath+"/rex_userservice", userService);
  2771. model.makeValue(gvReportPropsPath+"/rex_data_xpath", dataXPath);
  2772. model.makeValue(gvReportPropsPath+"/rex_xpath", mainDataXPath);
  2773. model.makeValue(gvReportPropsPath+"/rex_xpath1", subDataXPath);
  2774. model.makeValue(gvReportOptionsPath+"/rex_print", print);
  2775. model.makeValue(gvReportOptionsPath+"/rex_printdialog", printDialog);
  2776. model.makeValue(gvReportOptionsPath+"/rex_printpaperbin", printPaperBin);
  2777. model.makeValue(gvReportOptionsPath+"/rex_filetype", fileType);
  2778. model.makeValue(gvReportOptionsPath+"/rex_filename", fileName);
  2779. model.makeValue(gvReportOptionsPath+"/rex_filedialog", fileDialog);
  2780. model.makeValue(gvReportOptionsPath+"/rex_close", closeYn);
  2781. model.makeValue(gvReportOptionsPath+"/rex_showbutton", showButton);
  2782. model.makeValue(gvReportOptionsPath+"/rex_printcount", printCount);
  2783. model.makeValue(gvReportOptionsPath+"/rex_zoomrate", zoomRate);
  2784. model.makeValue(gvReportOptionsPath+"/rex_printoption", printOption);
  2785. if(parentObjId == null || parentObjId == ""){
  2786. if(document.all("ivr_report") == null){
  2787. //popup
  2788. setParameter("onready","true");
  2789. modal("SPZUR00100", monNo);
  2790. }else{
  2791. //iviewer
  2792. ivr_report.window.javascript.fInitRexpert();
  2793. }
  2794. }else{
  2795. var parentObj = document.all(parentObjId);
  2796. if(parentObj != null){
  2797. var childObj = document.all("ivr_"+parentObjId);
  2798. if(childObj != null){
  2799. childObj.window.javascript.fInitRexpert();
  2800. }
  2801. }
  2802. }
  2803. }
  2804. /**
  2805. * @-----------------------------------------------------------------------------------
  2806. * @desc : 레포트 미리보기 Object를 생성한다.
  2807. * @param :
  2808. * @return :
  2809. * @-----------------------------------------------------------------------------------
  2810. */
  2811. function makeReportPreview(left, top, width, height, parentObjId){
  2812. if(left==null || top==null || width==null || height==null){
  2813. messageBox("미리보기 크기정보가", "I004");
  2814. }else{
  2815. if(parentObjId == null || parentObjId == ""){
  2816. if(document.all("ivr_report") == null){
  2817. if(document.all("grp_biz") == null){
  2818. body.createChild("xforms:iviewer", "id:ivr_report; src:../../../com/commonweb/xrw/SPZUR00100_보고서.xrw; left:"+left+"px; top:"+top+"px; width:"+width+"px; height:"+height+
  2819. "px;");
  2820. }else{
  2821. grp_biz.createChild("xforms:iviewer", "id:ivr_report; src:../../../com/commonweb/xrw/SPZUR00100_보고서.xrw; left:"+left+"px; top:"+top+"px; width:"+width+"px; height:"+height+
  2822. "px;");
  2823. }
  2824. }
  2825. }else{
  2826. var parentObj = document.all(parentObjId);
  2827. if(parentObj != null){
  2828. parentObj.createChild("xforms:iviewer", "id:ivr_"+parentObjId+"; src:../../../com/commonweb/xrw/SPZUR00100_보고서.xrw; left:"+left+"px; top:"+top+"px; width:"+width+"px; height:"+height+
  2829. "px;");
  2830. childObj = document.all("ivr_"+parentObjId);
  2831. }
  2832. }
  2833. }
  2834. }
  2835. /**
  2836. * @-----------------------------------------------------------------------------------
  2837. * @desc : 레포트내용을 clear한다.
  2838. * @param :
  2839. * @return :
  2840. * @-----------------------------------------------------------------------------------
  2841. */
  2842. function resetReportPreview(parentObjId){
  2843. if(parentObjId == null || parentObjId == ""){
  2844. if(document.all("ivr_report") == null){
  2845. var child = getChildWindow("SPZUR00100");
  2846. if(child != null){
  2847. child.javascript.fCloseReport();
  2848. }
  2849. }else{
  2850. ivr_report.window.javascript.fCloseReport();
  2851. }
  2852. }else{
  2853. var parentObj = document.all(parentObjId);
  2854. if(parentObj != null){
  2855. childObj = document.all("ivr_"+parentObjId);
  2856. if(childObj != null){
  2857. childObj.window.javascript.fCloseReport();
  2858. }
  2859. }
  2860. }
  2861. }
  2862. /**
  2863. * @-----------------------------------------------------------------------------------
  2864. * @desc : 레포트 삭제한다.
  2865. * @param :
  2866. * @return :
  2867. * @-----------------------------------------------------------------------------------
  2868. */
  2869. function removeReportPreview(parentObjId){
  2870. if(parentObjId == null || parentObjId == ""){
  2871. if(document.all("ivr_report") != null){
  2872. parentObjId = document.all("ivr_report").parent.attribute("id");
  2873. document.all(parentObjId).removeChild("ivr_report");
  2874. }
  2875. }else{
  2876. var parentObj = document.all(parentObjId);
  2877. if(parentObj != null){
  2878. parentObj.removeChild("ivr_"+parentObjId);
  2879. }
  2880. }
  2881. }
  2882. /**
  2883. * @-----------------------------------------------------------------------------------
  2884. * @desc : 서식화면출력
  2885. * @param :
  2886. * @return :
  2887. * @-----------------------------------------------------------------------------------
  2888. */
  2889. function screenPrint(){
  2890. modal("SPZUR00200");
  2891. }
  2892. /**
  2893. * @-----------------------------------------------------------------------------------
  2894. * @desc : 보고서 이미지 url
  2895. * @param :
  2896. * @return :
  2897. * @-----------------------------------------------------------------------------------
  2898. */
  2899. function getImageURL(imgcd, type){
  2900. if (type == null || type == "") {
  2901. type = "gif";
  2902. }
  2903. return getDomain()+"/himed/webapps/com/commonweb/images/"+imgcd+"." + type;
  2904. }
  2905. /**
  2906. * @-----------------------------------------------------------------------------------
  2907. * @desc : 병원별 logo이미지
  2908. * @param : syscd : 시스템 코드
  2909. * @return :
  2910. * @-----------------------------------------------------------------------------------
  2911. */
  2912. function getLogoImageURL(syscd){
  2913. return getImageURL("logo"+getLogoImageKey(syscd));
  2914. }
  2915. /**
  2916. * @-----------------------------------------------------------------------------------
  2917. * @desc : 병원별 logo이미지
  2918. * @param : syscd : 시스템 코드
  2919. * @return :
  2920. * @-----------------------------------------------------------------------------------
  2921. */
  2922. function getLogoEImageURL(syscd){
  2923. return getImageURL("logo"+getLogoImageKey(syscd)+"e","jpg");
  2924. }
  2925. /**
  2926. * @-----------------------------------------------------------------------------------
  2927. * @desc : EMR 서식용
  2928. * @param :
  2929. * @return :
  2930. * @-----------------------------------------------------------------------------------
  2931. */
  2932. function getBigLogoImageURL(type, syscd) {
  2933. if (type.toUpperCase() == "H") {
  2934. type == "";
  2935. } else if (type.toUpperCase() == "E") {
  2936. type = "e";
  2937. }
  2938. return getImageURL("biglogo" + getLogoImageKey(syscd) + type, "jpg");
  2939. }
  2940. /**
  2941. * @-----------------------------------------------------------------------------------
  2942. * @desc : 로고를 얻기위하여 해당 시스템코드에 대한 이미지키를 반환한다.
  2943. * @param : syscd : 시스템코드
  2944. * @return : 시스템코드
  2945. * @-----------------------------------------------------------------------------------
  2946. */
  2947. function getLogoImageKey(syscd){
  2948. var imageKey = "";
  2949. if(syscd == null || syscd == ""){
  2950. syscd = getSystemCd();
  2951. }
  2952. if(syscd.toUpperCase() == "MIS001") {
  2953. imageKey = getUserInfo("dutplceinstcd");
  2954. }else{
  2955. imageKey = syscd.substr(3,3);
  2956. }
  2957. /*if(!((imageKey >="011" && imageKey <= "018")|| imageKey == "103")){
  2958. imageKey = "001";
  2959. }*/
  2960. return imageKey;
  2961. }
  2962. /**
  2963. * @-----------------------------------------------------------------------------------
  2964. * @desc : loading 화면
  2965. * @param :
  2966. * @return :
  2967. * @-----------------------------------------------------------------------------------
  2968. */
  2969. function openLoadingBar(msg){
  2970. setParameter("msg", msg);
  2971. open("SPZZZ00400", "", "", "", "", "", "","width:327px; height:121px; caption:hidden; resize:false;");
  2972. //open("SPZZZ00400", monNo, "", "", "", "", "","width:327px; height:121px; caption:hidden; resize:false; align:center;");
  2973. //open("SPZZZ00400", "", "", "", "SPZZZ00400", "/root/properties/loadingmsg", "/root/main/msg", "width:327px; height:121px; caption:hidden; align:center;" );
  2974. }
  2975. /**
  2976. * @-----------------------------------------------------------------------------------
  2977. * @desc : closing 화면
  2978. * @param :
  2979. * @return :
  2980. * @-----------------------------------------------------------------------------------
  2981. */
  2982. function closeLoadingBar(){
  2983. var child = getChildWindow("SPZZZ00400");
  2984. if(child != null) {
  2985. child.close();
  2986. }
  2987. }
  2988. /**
  2989. * @-----------------------------------------------------------------------------------
  2990. * @desc : 로그인 비밀번호 확인 화면 호출
  2991. * @param :
  2992. * @return :
  2993. * @-----------------------------------------------------------------------------------
  2994. */
  2995. function openPasswordValidate(titlemsg, helpMsg){
  2996. setParameter("titlemsg", titlemsg);
  2997. setParameter("helpmsg", helpMsg);
  2998. modal("SPZUM00400", "", "", "", "", "", "","width:280px;height:270px;align:center;");
  2999. return getParameter("pwdvalid");
  3000. }
  3001. /*-------------------------------------------------------------------
  3002. //Caching API
  3003. ---------------------------------------------------------------------*/
  3004. var gvCommonCachePath="/root/hidden/common/cache";
  3005. /**
  3006. * @-----------------------------------------------------------------------------------
  3007. * @desc : Cache에서 itemname으로 저장된 인스턴스 내용을 resultref로 복사한다.
  3008. * 해당 itemname으로 복사가 되었으면 true를 복사된 내용이 없으면 false를 반환한다.
  3009. * - itemname : cache에서 가져올 내용에 대한 key
  3010. * - resultref : cache의 내용을 하위로 복사
  3011. * @param :
  3012. * @return : true
  3013. * @-----------------------------------------------------------------------------------
  3014. */
  3015. function copyFromCache(itemname,resultref) {
  3016. var viewerObj = getViewer("sysMessage");
  3017. if (viewerObj == null) {
  3018. return false;
  3019. }
  3020. //itemnode = viewerObj.window.instance1.selectSingleNode(gvCommonCachePath+"/"+itemname);
  3021. var srcPath = gvCommonCachePath+"/"+itemname;
  3022. model.makeNode(resultref); // 복사할 resultref 노드 생성
  3023. // Cache 존재 여부 확인
  3024. var itemnode = viewerObj.window.instance1.selectSingleNode(srcPath);
  3025. if (itemnode == null) {
  3026. return false;
  3027. } else {
  3028. // 유효 기간 확인
  3029. var dueDate = itemnode.getAttribute("duedate");
  3030. var curDate = (new Date()).valueOf();
  3031. if (dueDate < curDate) { // 유효 기간 지남
  3032. return false;
  3033. }
  3034. }
  3035. // resultref 로 복사
  3036. model.copyNode(resultref,itemnode);
  3037. return true;
  3038. }
  3039. /**
  3040. * @-----------------------------------------------------------------------------------
  3041. * @desc : resultref 하위의 인스턴스 내용을 cache에 저장한다.
  3042. * - itemname : cache에 담을 내용에 대한 Key
  3043. * - resultref : 하위 인스턴스를 cache로 복사
  3044. * - 유효기간 : 분 (디폴트는 10시간)
  3045. * @param :
  3046. * @return :
  3047. * @-----------------------------------------------------------------------------------
  3048. */
  3049. function storeIntoCache(itemname,resultref,duemin) {
  3050. var viewerObj = getViewer("sysMessage");
  3051. if (viewerObj == null) {
  3052. return;
  3053. }
  3054. var destPath = gvCommonCachePath+"/"+itemname;
  3055. viewerObj.window.model.makeNode(destPath); // 복사할 Cache 노드 생성
  3056. // resultref 존재 여부 확인
  3057. var itemnode = instance1.selectSingleNode(resultref);
  3058. if (itemnode == null) {
  3059. return;
  3060. }
  3061. // Cache로 복사한 후 유효기간을 attribute로 지정
  3062. viewerObj.window.model.copyNode(destPath,itemnode);
  3063. itemnode = viewerObj.window.instance1.selectSingleNode(destPath);
  3064. if (itemnode != null) {
  3065. var dueDate = (new Date()).valueOf();
  3066. if (duemin == null) {
  3067. duemin = 600; // 10 hours
  3068. }
  3069. dueDate = dueDate + duemin*60*1000;
  3070. itemnode.setAttribute("duedate",dueDate);
  3071. }
  3072. }
  3073. /**
  3074. * @-----------------------------------------------------------------------------------
  3075. * @desc : 온라인 도움말 화면이 있는 경우 ready 에서 실행.
  3076. * @param : 온라인 도움말 파일의 크기를 설정해서 온라인 도움말 기능을 활성화시킨다.
  3077. * 활성화시키지 않으면 F1 키를 통한 온라인 도움말 기능을 사용할 수 없다.
  3078. * 온라인 도움말 파일의 이름은 해당 도움말을 사용할 화면 아이디와 동일해야 한다.
  3079. * @return :
  3080. * @-----------------------------------------------------------------------------------
  3081. */
  3082. function setHelp(width, height, scnID) {
  3083. if (width == null || width == "" || width == "undefined") {
  3084. width = "800";
  3085. }
  3086. if (height == null || height == "" || height == "undefined") {
  3087. height = "600";
  3088. }
  3089. if (scnID == null || height == "" || scnID == "undefined") {
  3090. scnID = getScreenID();
  3091. }
  3092. setParameter(scnID + "_help_width", width);
  3093. setParameter(scnID + "_help_height", height);
  3094. }
  3095. /**
  3096. * @-----------------------------------------------------------------------------------
  3097. * @desc : 온라인 도움말 조회
  3098. * @param :
  3099. * @return :
  3100. * @-----------------------------------------------------------------------------------
  3101. */
  3102. function getHelpPage() {
  3103. // 일단 임시로 AP에 있는 온라인 도움말만 조회되도록.
  3104. var scnID = getScreenID();
  3105. //var width = getParameter(scnID + "_help_width");
  3106. //var height = getParameter(scnID + "_help_height");
  3107. // 로컬(개발자 PC)인지 확인
  3108. if (getSystemCd().substring(0, 3).toUpperCase() == "DEV") {
  3109. alert("해당 환경에서는 온라인도움말을 지원하지 않습니다.\n\n★★ 지원 환경 ★★\n1. 개발 HIS(his012dev)\n2. 개발 MIS(mis001dev)\n3. 개발 CRM(crm001dev)\n4. 교육 HIS(his012edu)\n5. 교육 MIS(mis001edu)\n6. 운영 HIS(his012)\n7. 운영 MIS(mis001)");
  3110. return;
  3111. }
  3112. // 현재는 HIS012 에서만 조회가능. 추가기능 필요.
  3113. if (gvHelpPage == null || gvHelpPage.closed) {
  3114. gvHelpPage = openHtml(getDomain() + "/docs/help/" + getBizName(scnID) + "/" + scnID + ".htm","Help","scrollbars=yes,toolbar=no,width=800,height=600");
  3115. } else {
  3116. gvHelpPage.focus();
  3117. }
  3118. }
  3119. /**
  3120. * @-----------------------------------------------------------------------------------
  3121. * @desc : EMR 에서 제공하는 각종 기록지, 처방화면등을 타업무에서 사용시 구분하기 위한 진입점 함수로 아래 화면을 통해 여러가지 화면으로 분기될 수 있다.
  3122. * EMR진료 기록지 조정
  3123. * modal로 화면에 숨겨진 팝업을 띄운다. 여러화면 동시에 open되어, submit간의 충돌을 방지한다.
  3124. * @param : scrnid : 화면ID
  3125. * @return :
  3126. * @author : 오지훈(2008.07.28 공통에 추가-김기호)
  3127. * @-----------------------------------------------------------------------------------
  3128. */
  3129. function openEmrScrn(scrnid){
  3130. setParameter("SPMMB08400_scrnid", scrnid);
  3131. modal("SPMMB08400", 1, 0, 0, "", "", "", "left:0; right:0; width:0; height:0; sysmenu:hidden; caption:hidden; min:hidden, max:hidden;");
  3132. return true;
  3133. }
  3134. /**
  3135. * @-----------------------------------------------------------------------------------
  3136. * @desc : model.download() 확장. 다운로드 경로에 한글이 존재할 경우 encodeURI() 로 감싸야 하는 불편함제거를 위함
  3137. * @
  3138. * @param : submitid - 다운로드를 실행할 서브밋 아이디
  3139. * @ param - 서브밋 실행시 필요한 파라메터
  3140. * @ localfile - 로컬에 저장할 파일이름(& 로 시작해야 하며 각 파라메터는 &로 구분해야 한다. - url)
  3141. * @ showui - 다운로드시 UI 를 보여줄 것인지여부(옵션)
  3142. * @return :
  3143. * @author : 김기호(2008.11.12)
  3144. * @-----------------------------------------------------------------------------------
  3145. */
  3146. function download(submitid, param, localfile, showui) {
  3147. if (showui == null) {
  3148. showui = true;
  3149. }
  3150. model.download(encodeURI(getActionURL(submitid) + param), localfile, showui);
  3151. }
  3152. /**
  3153. * @-----------------------------------------------------------------------------------
  3154. * @desc : DOMActivate
  3155. * @param :
  3156. * @return :
  3157. * @-----------------------------------------------------------------------------------
  3158. */
  3159. function DOMActivate(){
  3160. if(checkOpener()){
  3161. if(opener.javascript.getParameter("domactivate") == "true"){
  3162. var btnobj = document.all.item(event.target);
  3163. var btnid = btnobj.attribute("id");
  3164. if(btnid.substring(0, 4) == "btn_"){
  3165. opener.javascript.addBtnID(btnid);
  3166. }
  3167. }
  3168. }
  3169. }
  3170. /**
  3171. * @-----------------------------------------------------------------------------------
  3172. * @desc : 버튼 객체 참조
  3173. * @param :
  3174. * @return :
  3175. * @-----------------------------------------------------------------------------------
  3176. */
  3177. function btnObj(btnID, btnTxt){
  3178. this.btnID = btnID;
  3179. this.btnTxt = btnTxt;
  3180. }
  3181. /**
  3182. * @-----------------------------------------------------------------------------------
  3183. * @desc : 버튼 컨트롤 정보
  3184. * @param :
  3185. * @return :
  3186. * @-----------------------------------------------------------------------------------
  3187. */
  3188. function getBtnCtrlInfo(){
  3189. var cnt = 0;
  3190. var ctrlID;
  3191. var loopcnt = document.controls.length;
  3192. var btnCtrlArr = new Array();
  3193. for(var i = 0; i < loopcnt; i++){
  3194. ctrlID = document.controls.item(i);
  3195. if(ctrlID.attribute("class").substring(0, 3)=="btn"){
  3196. btnCtrlArr[cnt] = new btnObj(ctrlID.attribute("id"), ctrlID.attribute("text"));
  3197. cnt++;
  3198. }
  3199. }
  3200. /* btnCtrlArr 객체의 정보를 가져와서 출력해 본다.
  3201. for(var i = 0; i < btnCtrlArr.length; i++){
  3202. alert(btnCtrlArr[i].btnID + " : " + btnCtrlArr[i].btnTxt);
  3203. }*/
  3204. return btnCtrlArr;
  3205. }
  3206. /**
  3207. * @-----------------------------------------------------------------------------------
  3208. * @desc : 일일기준과 1회 기준의 용량과 수량을 보여주는 것을 결정하여 결과를 리턴함)
  3209. * @param : option : A: 모두 보여줌
  3210. * B: 1일 기준으로 보여줌
  3211. * C: 1회 기준으로 보여줌
  3212. * D: 병원의 기준값을 리턴함
  3213. * E: 용량중 일일용량만 보여주고 일회 용량은 숨기는 것으로 한다.
  3214. * F: 용량중 일회용량만 보여주고 일일 용량은 숨기는 것으로 한다.
  3215. * G: 수량중 일일 수량만 보여준다. 일회 수량은 Hidden
  3216. * H: 수량중 일회 수량은 보여주고 일회수량은 Hidden
  3217. * grd_obj : 설정할 그리드를 리턴한다.
  3218. * colnm_size : 컬럼 사이즈를 적어준다.
  3219. * comnm_vol1 : 1일 총용량 컬럼
  3220. * colnm_qty1 : 1일 수량 컬럼
  3221. * comnm_vol2 : 1회 총용량 컬럼
  3222. * colnm_qty2 : 1회 수량 컬럼
  3223. * colnm_size_qty : 수량 컬럼 사이즈를 적어준다.
  3224. * @-----------------------------------------------------------------------------------
  3225. */
  3226. function grdBaseColHidn(option, grd_obj, colnm_size, colnm_vol1, colnm_qty1, colnm_vol2, colnm_qty2, colnm_size_qty) {
  3227. var hardcd = "";
  3228. var sysMessageobj = getViewer("sysMessage");
  3229. if (sysMessageobj != null) {
  3230. hardcd = sysMessageobj.window.instance1.selectSingleNode("/root/properties/orderbasicinfo/hardcdlist/hardcd[hardcdno='230']/hardcd").text;
  3231. }
  3232. if (option == null || option == "" || option == "undefined") {
  3233. option = hardcd;
  3234. }
  3235. if (colnm_size == null || colnm_size == "" || colnm_size == "undefined") {
  3236. sColnm_size = 37;
  3237. } else {
  3238. sColnm_size = colnm_size;
  3239. }
  3240. if (grd_obj == null || grd_obj == "" || grd_obj == "undefined") {
  3241. sGrd_objnm = "grd_prcplist";
  3242. } else {
  3243. sGrd_objnm = grd_obj;
  3244. }
  3245. if (colnm_vol1 == null || colnm_vol1 == "" || colnm_vol1 == "undefined") {
  3246. sColnm_vol1 = "prcpvol";
  3247. } else {
  3248. sColnm_vol1 = colnm_vol1
  3249. }
  3250. if (colnm_qty1 == null || colnm_qty1 == "" || colnm_qty1 == "undefined") {
  3251. sColnm_qty1 = "prcpqty";
  3252. } else {
  3253. sColnm_qty1 = colnm_qty1
  3254. }
  3255. if (colnm_vol2 == null || colnm_vol2 == "" || colnm_vol2 == "undefined") {
  3256. sColnm_vol2 = "drprcpetc7";
  3257. } else {
  3258. sColnm_vol2 = colnm_vol2;
  3259. }
  3260. if (colnm_qty2 == null || colnm_qty2 == "" || colnm_qty2 == "undefined") {
  3261. sColnm_qty2 = "drprcpetc8";
  3262. } else {
  3263. sColnm_qty2 = colnm_qty2;
  3264. }
  3265. if (colnm_size_qty == null || colnm_size_qty == "" || colnm_size_qty == "undefined") {
  3266. sColnm_size_qty = sColnm_size;
  3267. } else {
  3268. sColnm_size_qty = colnm_size_qty;
  3269. }
  3270. // 둘다 보여준다.
  3271. if (option =="A") {
  3272. // 그리드명이 있을 경우
  3273. if (grd_obj == null || grd_obj == "" || grd_obj == "undefined") {
  3274. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_vol1)) = false;
  3275. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_qty1)) = false;
  3276. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_vol2)) = false;
  3277. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_qty2)) = false;
  3278. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_vol1)) = sColnm_size;
  3279. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_qty1)) = sColnm_size_qty;
  3280. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_vol2)) = sColnm_size;
  3281. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_qty2)) = sColnm_size_qty;
  3282. }
  3283. // 일일 용량을 기준으로 보여준다.
  3284. } else if (option =="B") {
  3285. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_vol1)) = false;
  3286. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_qty1)) = false;
  3287. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_vol2)) = true;
  3288. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_qty2)) = true;
  3289. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_vol1)) = sColnm_size;
  3290. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_qty1)) = sColnm_size_qty;
  3291. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_vol2)) = 0;
  3292. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_qty2)) = 0;
  3293. // 일회 용량을 기준으로 보여준다.
  3294. } else if (option =="C") {
  3295. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_vol1)) = true;
  3296. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_qty1)) = true;
  3297. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_vol2)) = false;
  3298. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_qty2)) = false;
  3299. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_vol1)) = 0;
  3300. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_qty1)) = 0;
  3301. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_vol2)) = sColnm_size;
  3302. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_qty2)) = sColnm_size_qty;
  3303. // 기준값을 리턴한다.
  3304. } else if (option =="D") {
  3305. // 기준값을 가지고 컬럼의 상태를 결정한다.
  3306. return hardcd
  3307. } else if (option =="E") {
  3308. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_vol1)) = false;
  3309. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_vol2)) = true;
  3310. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_vol1)) = sColnm_size;
  3311. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_vol2)) = 0;
  3312. } else if (option =="F") {
  3313. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_vol1)) = true;
  3314. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_vol2)) = false;
  3315. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_vol1)) = 0;
  3316. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_vol2)) = sColnm_size;
  3317. } else if (option =="G") {
  3318. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_qty1)) = false;
  3319. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_qty2)) = true;
  3320. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_qty1)) = sColnm_size_qty;
  3321. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_qty2)) = 0;
  3322. } else if (option =="H") {
  3323. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_qty1)) = true;
  3324. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_qty2)) = false;
  3325. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_qty1)) = 0;
  3326. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_qty2)) = sColnm_size_qty;
  3327. } else {
  3328. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_vol1)) = false;
  3329. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_qty1)) = false;
  3330. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_vol2)) = true;
  3331. document.all(sGrd_objnm).colHidden(document.all(sGrd_objnm).colRef(sColnm_qty2)) = true;
  3332. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_vol1)) = sColnm_size;
  3333. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_qty1)) = sColnm_size_qty;
  3334. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_vol2)) = 0;
  3335. document.all(sGrd_objnm).colWidth(document.all(sGrd_objnm).colRef(sColnm_qty2)) = 0;
  3336. }
  3337. }
  3338. /**
  3339. * @--------------------------------------------------------------------
  3340. * @desc : 렉스포트형 바코드 출력
  3341. * @param : rexnm : 레포트코드
  3342. * closeYn : 미리보기 여부(보기:true, 안보기:비우거나 false)
  3343. * printCount : 출력 숫자
  3344. * dataXPath : 파라메터 위치
  3345. * paramsXPath : 파라메터 위치
  3346. * infoXPath : 바코드 프린터 정보 위치
  3347. * @return : TRUE or FALSE
  3348. * @--------------------------------------------------------------------
  3349. */
  3350. function fPrintRexbar(rexnm, closeYn, printCount, dataXPath, paramsXPath, infoXPath){
  3351. var posx = '';
  3352. var posy = '';
  3353. var printnm = '';
  3354. if(infoXPath == "" || infoXPath == "undefined" || infoXPath == null) infoXPath = "/root/main/barcdprntsetup/prntsetupinfo";
  3355. if(model.getValue(infoXPath + "/setupinfo/rexgbn") != "1") return false;
  3356. try{
  3357. if(model.getXpathValue("count(" + infoXPath + "/setupinfo/pcl/pcllist[barnm='"+rexnm+"']/barnm)") > "0"){
  3358. posx = model.getValue(infoXPath + "/setupinfo/pcl/pcllist[barnm='"+rexnm+"']/xpos");
  3359. posy = model.getValue(infoXPath + "/setupinfo/pcl/pcllist[barnm='"+rexnm+"']/ypos");
  3360. printnm = model.getValue(infoXPath + "/setupinfo/pcl/pcllist[barnm='"+rexnm+"']/prtnm");
  3361. }else{
  3362. posx = model.getValue(infoXPath + "/setupinfo/blank/left");
  3363. posy = model.getValue(infoXPath + "/setupinfo/blank/top");
  3364. printnm = model.getValue(infoXPath + "/setupinfo/comm01/setupval");
  3365. }
  3366. if(posx == '') posx = "0";
  3367. if(posy == '') posy = "0";
  3368. if(closeYn == "true") printnm = "";
  3369. exeReportPreview(rexnm, 'XMLSTR', paramsXPath, '', printnm,
  3370. '', '', '', '', '',
  3371. '', '', '', '', '',
  3372. printCount, '', 'offsetx=' + posx + ';offsety=' + posy + ';', dataXPath, '',
  3373. '');
  3374. }
  3375. catch(e){
  3376. alert("출력시 오류가 발생하였습니다\n" + e);
  3377. return true;
  3378. }
  3379. return true;
  3380. }