common.js.bak 124 KB

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