{"version":3,"sources":["webpack:///./app/common/directives/spModal/services/template/alertTemplate.html","webpack:///./app/common/directives/spModal/services/template/confirmTemplate.html","webpack:///./app/components/common/studentInfo/studentInfo.html","webpack:///./app/components/common/zipcode/zipcode.html","webpack:///./app/components/common/report/report.html","webpack:///./app/components/common/univcode/univcode.html","webpack:///./app/components/common/fileManager/fileManager.html","webpack:///./app/components/common/haksaTab/haksaTab.html","webpack:///./app/components/common/haksaContentTab/haksaTab.content.html","webpack:///./app/components/common/noticePopup/noticePopup.html","webpack:///./app/components/layout/footer/footer.html","webpack:///./app/components/layout/topLogo/topLogo.html","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./app/common/config/translateConfig.js","webpack:///./app/common/config/constant.js","webpack:///./app/common/config/remote.constants.service.js","webpack:///./app/common/config/i18n/datepicker.i18n.ko.js","webpack:///./app/common/config/index.js","webpack:///./app/common/config/i18n/i18nLoader.js","webpack:///./app/common/directives/html/haksaYear.js","webpack:///./app/common/directives/html/haksaSelect.js","webpack:///./app/common/directives/html/haksaCheckRole.js","webpack:///./app/common/directives/html/haksaRadio.js","webpack:///./app/common/directives/html/focus.js","webpack:///./app/common/directives/html/comma.js","webpack:///./app/common/directives/dynamicComponent/dynamic.directive.js","webpack:///./app/common/directives/dynamicComponent/dynamic.directive.tab.js","webpack:///./app/common/directives/loadingProgress/loading.component.js","webpack:///./app/common/directives/loadingProgress/loading.service.js","webpack:///./app/common/directives/loadingProgress/config.js","webpack:///./app/common/directives/loadingProgress/index.js","webpack:///./app/common/directives/spModal/Constant.js","webpack:///./app/common/directives/spModal/factories/SpModal.js","webpack:///./app/common/directives/spModal/services/Toast.js","webpack:///./app/common/directives/spModal/filters/toTrusted.js","webpack:///./app/common/directives/spModal/index.js","webpack:///./app/common/directives/index.js","webpack:///./app/common/directives/html/ngEnter.js","webpack:///./app/common/directives/html/compareDate.js","webpack:///./app/common/directives/html/gridViewBtn.js","webpack:///./app/common/directives/html/ngDecimal.js","webpack:///./app/common/services/bsac.common.service.js","webpack:///./app/common/services/bsac.unic.service.js","webpack:///./app/common/services/common.service.js","webpack:///./app/common/services/abee.common.service.js","webpack:///./app/common/services/utils.service.js","webpack:///./app/common/services/estb.common.service.js","webpack:///./app/common/services/auth.common.service.js","webpack:///./app/common/services/bsac.aff.service.js","webpack:///./app/common/services/index.js","webpack:///./app/common/index.js","webpack:///./app/components/common/studentInfo/studentInfo.components.js","webpack:///./app/components/common/studentInfo/studentInfo.service.js","webpack:///./app/components/common/studentInfo/index.js","webpack:///./app/components/common/zipcode/zipcode.controller.js","webpack:///./app/components/common/zipcode/zipcode.service.js","webpack:///./app/components/common/zipcode/index.js","webpack:///./app/components/common/report/report.controller.js","webpack:///./app/components/common/report/report.service.js","webpack:///./app/components/common/report/index.js","webpack:///./app/components/common/univcode/univcode.controller.js","webpack:///./app/components/common/univcode/univcode.service.js","webpack:///./app/components/common/univcode/index.js","webpack:///./app/components/common/fileManager/fileManager.controller.js","webpack:///./app/components/common/fileManager/fileManager.service.js","webpack:///./app/components/common/fileManager/index.js","webpack:///./app/components/common/haksaTab/haksaTab.controller.js","webpack:///./app/components/common/haksaTab/index.js","webpack:///./app/components/common/haksaContentTab/haksaTab.content.controller.js","webpack:///./app/components/common/haksaContentTab/index.js","webpack:///./app/components/common/noticePopup/noticePopup.controller.js","webpack:///./app/components/common/noticePopup/index.js","webpack:///./app/components/common/index.js","webpack:///./app/components/layout/footer/footer.controller.js","webpack:///./app/components/layout/footer/index.js","webpack:///./app/components/layout/topLogo/topLogo.controller.js","webpack:///./app/components/layout/topLogo/index.js"],"names":["module","exports","map","./af","./af.js","./ar","./ar-dz","./ar-dz.js","./ar-kw","./ar-kw.js","./ar-ly","./ar-ly.js","./ar-ma","./ar-ma.js","./ar-sa","./ar-sa.js","./ar-tn","./ar-tn.js","./ar.js","./az","./az.js","./be","./be.js","./bg","./bg.js","./bm","./bm.js","./bn","./bn.js","./bo","./bo.js","./br","./br.js","./bs","./bs.js","./ca","./ca.js","./cs","./cs.js","./cv","./cv.js","./cy","./cy.js","./da","./da.js","./de","./de-at","./de-at.js","./de-ch","./de-ch.js","./de.js","./dv","./dv.js","./el","./el.js","./en-au","./en-au.js","./en-ca","./en-ca.js","./en-gb","./en-gb.js","./en-ie","./en-ie.js","./en-il","./en-il.js","./en-nz","./en-nz.js","./eo","./eo.js","./es","./es-do","./es-do.js","./es-us","./es-us.js","./es.js","./et","./et.js","./eu","./eu.js","./fa","./fa.js","./fi","./fi.js","./fo","./fo.js","./fr","./fr-ca","./fr-ca.js","./fr-ch","./fr-ch.js","./fr.js","./fy","./fy.js","./gd","./gd.js","./gl","./gl.js","./gom-latn","./gom-latn.js","./gu","./gu.js","./he","./he.js","./hi","./hi.js","./hr","./hr.js","./hu","./hu.js","./hy-am","./hy-am.js","./id","./id.js","./is","./is.js","./it","./it.js","./ja","./ja.js","./jv","./jv.js","./ka","./ka.js","./kk","./kk.js","./km","./km.js","./kn","./kn.js","./ko","./ko.js","./ku","./ku.js","./ky","./ky.js","./lb","./lb.js","./lo","./lo.js","./lt","./lt.js","./lv","./lv.js","./me","./me.js","./mi","./mi.js","./mk","./mk.js","./ml","./ml.js","./mn","./mn.js","./mr","./mr.js","./ms","./ms-my","./ms-my.js","./ms.js","./mt","./mt.js","./my","./my.js","./nb","./nb.js","./ne","./ne.js","./nl","./nl-be","./nl-be.js","./nl.js","./nn","./nn.js","./pa-in","./pa-in.js","./pl","./pl.js","./pt","./pt-br","./pt-br.js","./pt.js","./ro","./ro.js","./ru","./ru.js","./sd","./sd.js","./se","./se.js","./si","./si.js","./sk","./sk.js","./sl","./sl.js","./sq","./sq.js","./sr","./sr-cyrl","./sr-cyrl.js","./sr.js","./ss","./ss.js","./sv","./sv.js","./sw","./sw.js","./ta","./ta.js","./te","./te.js","./tet","./tet.js","./tg","./tg.js","./th","./th.js","./tl-ph","./tl-ph.js","./tlh","./tlh.js","./tr","./tr.js","./tzl","./tzl.js","./tzm","./tzm-latn","./tzm-latn.js","./tzm.js","./ug-cn","./ug-cn.js","./uk","./uk.js","./ur","./ur.js","./uz","./uz-latn","./uz-latn.js","./uz.js","./vi","./vi.js","./x-pseudo","./x-pseudo.js","./yo","./yo.js","./zh-cn","./zh-cn.js","./zh-hk","./zh-hk.js","./zh-tw","./zh-tw.js","webpackContext","req","id","webpackContextResolve","__webpack_require__","e","Error","code","keys","Object","resolve","translate","$translateProvider","$datepickerProvider","cfpLoadingBarProvider","$stateProvider","$compileProvider","$ariaProvider","config","bindRoleForClick","state","abstract","translateReady","$translate","onReady","useLoader","preferredLanguage","useSanitizeValueStrategy","useLocalStorage","aHrefSanitizationWhitelist","angular","extend","defaults","dateFormat","modelDateFormat","autoclose","dateType","includeBar","parentSelector","spinnerTemplate","lowercase","$$lowercase","constants","window","location","host","i18nCode","langCode","korean","english","ajaxCode","KO","EN","rowType","insert","update","delete","noticeList","hostUrl","testServer","_default","$http","_classCallCheck","this","getClientConstants","getDefaultRemoteValues","method","url","response","data","_context2","t0","message","some","indexOf","viewServer","mrdServer","_ngInjectExport","$provide","PLURAL_CATEGORY","localStorage","getItem","value","DATETIME_FORMATS","AMPMS","DAY","ERANAMES","ERAS","FIRSTDAYOFWEEK","MONTH","SHORTDAY","SHORTMONTH","STANDALONEMONTH","WEEKENDRANGE","fullDate","longDate","medium","mediumDate","mediumTime","short","shortDate","shortTime","NUMBER_FORMATS","CURRENCY_SYM","DECIMAL_SEP","GROUP_SEP","PATTERNS","gSize","lgSize","maxFrac","minFrac","minInt","negPre","negSuf","posPre","posSuf","localeID","pluralCat","n","opt_precision","translateConfig","constant","service","remoteConstantsService","factory","$q","commonService","options","deferred","defer","params","lang","key","timeout","then","setI18nData","catch","promise","datePickerI18n","name","haksaYear","restrict","replace","template","controller","$scope","thisYear","Date","getFullYear","currentYear","loopCnt","yearList","i","push","toString","haksaSelect","scope","selectList","keyName","haksaCheckRole","globalDataService","link","element","attrs","userRole","getGlobalData","split","role","trim","show","hide","haksaRadio","radioList","enabled","ngModel","ngDisabled","changModelValue","controllerAs","focus","$rootScope","$timeout","$broadcast","html_focus","elem","attr","$on","focusOn","comma_ngInjectExport","$filter","require","ctrl","$formatters","unshift","$modelValue","$parsers","viewValue","plainNumber","b","val","dynamicComponent","$compile","componentName","commonData","html","concat","append","$inject","$element","dynamic_directive_tab_classCallCheck","find","length","_this","loading_component_classCallCheck","active","$watch","loading","loadingProgress","loading_service_classCallCheck","isLoading","control","$httpProvider","interceptors","interceptor","$window","request","test","start","when","requestError","rejection","end","reject","msgCode","responseError","status","component","loadingComponent","loadingService","MODAL_CLASS","ng1","SpModalProvider","modalStack","defaultOptions","size","className","top","height","modalAction","onOpen","onClose","onResult","modalIn","removeClass","addClass","modalOut","remove","$get","$controller","$document","$templateCache","$templateRequest","$body","body","SpModal","SpModal_classCallCheck","hasOwnProperty","init","_self","$new","$modalWrapper","$backdrop","get","close","bind","ctrlInput","instance","result","getModalAction","arguments","modalTemplate","linkFn","stopPropagation","$event","$spModal","css","getSize","$$phase","$apply","pop","$destroy","setDefaultOptions","replaceMessage","ToastService","Toast_classCallCheck","put","alertTemplate","confirmTemplate","opts","alertModal","_defaultOptions","title","okMessage","_typeof","setSize","setParams","setModalAction","open","confirmModal","vm","ok","no","noMessage","toTrusted","$sce","text","trustAsHtml","provider","filter","directive","spModal","dynamicComponentTab","event","which","$eval","ngEnter","preventDefault","stDt","endDt","elemDt","elemDtOr","otherDt","otherDtOr","date","compareDateOrder","$$parentForm","compareDate","jQuery","otherDate","isNaN","$invalid","$setValidity","target","type","$attributes","limit","ngDecimal","charCode","keyCode","document","getElementById","node","selectionStart","selection","len","sel","createRange","txt","dul","duplicate","moveToElementText","moveStart","caret","charAt","BsacCommonService","$mdDialog","bsac_common_service_classCallCheck","arrDataSet","arrGrpCd","arrCampFg","arrUseYn","arrModeFg","arrWhere","arrUnivGrscFg","strDataSet","strGrpCd","strCampFg","strUseYn","strModeFg","strWhere","strUnivGrscFg","arrCnt","httpPost","headers","Content-Type","strType","DatasetList","ex","strUserNo","strDeptUseFg","strMngtYn1","strMngtYn2","strSvcId","strYy","strPosiGrpCd","strUpDeptCd","strUseFg","strCampCd","strUserDeptCd","strFg","strShafScheYy","strShafScheShtmCd","strUnivGrscCd","strUnitBussCd","strSchpScheFg","strStdNo","useGrd","btnFind","btnNew","btnDelete","btnSave","btnPrint","btnHelp","btnChange","dsObj","nRow","getRowType","orgBuffer","strColIds","strColNms","strComIds","retMsg","colIdAry","colNmAry","comIdAry","colIdLen","nCol","isF","o","objDataSet","userNo","ipAddress","gfnDataSetLogForPublic","vType","rType","regId","regIp","modId","modIp","strFormat","row","nColCnt","stdNo","mrdpath","strParam","undefined","locals","reportInfo","parent","querySelector","disableParentScroll","clickOutsideToClose","fullscreen","strWhereStr","bsacUnicService","Toast","bsac_unic_service_classCallCheck","strSmUnitBussCd","arrUnivGrscCd","arrMenuNo2","alert","strAplyYy","strAplyShtmCd","DataSet","SvcId","YY","ShtmCd","UnivGrscCd","UnitBussCd","schpScheFg","strCd","strScheShtmCd","strMenuNo1","arrSvcId","Upload","authCommonService","$location","$ocLazyLoad","common_service_classCallCheck","serviceCode","inject","default","Promise","all","match","$$absUrl","absUrl","roleCd","substring","publicTitle","$emit","langObj","setItem","JSON","stringify","toJson","_this$constants$i18nC","selectedLang","use","getCurrentLangCodeInLocalStorage","langCodeValue","datasetList","dataset","forEach","rowObj","field","unitBussCd","pmgCd","substr","menuPgmCd","pgmCd","changeUnitBussCd","getUnitBussCdFrom","getSystemCdReverse","list","checkParam","isPublic","convertUnitBussCd","convertMenuNm","param","VariableList","ErrorCode","ErrorMsg","catchException","tabInfo","report","ssoUseYn","file","upload","rename","encodeURI","resp","dsFile","DS_FILE","fileName","decodeURI","_context4","_this2","responseType","Blob","disposition","exec","filename","navigator","msSaveOrOpenBlob","msSaveBlob","a","createElement","fileURL","URL","createObjectURL","href","download","click","showFileException","_context5","error","ArrayBuffer","decodedString","String","fromCharCode","apply","Uint8Array","msg","parse","downloadUrl","_context6","showDataList","cmmnCd","korNm","showData","langCd","getSelectedLangCode","KorNm","EngNm","str","form","$error","$name","required","maxlength","fastDate","multiple","popupHtml","pgmNm","$state","GLOBAL","dataList","sessionStorage","json","fromJson","dateCheck","idSt","pwdSt","global","G_SYS_CAMP_FG","G_MNG_DEPT_FG","G_LOGIN_CAMP_FG","loginCampFg","G_USER_ID","userId","G_USER_NM","userNm","G_USER_NO","G_ROLE_CD","G_CAMP_CD","campCd","G_CAMP_FG","campFg","G_USER_FG_CD","userFg","G_EMAIL","email1","G_DEPT_CD","deptCd","G_DEPT_KOR_NM","deptKorNm","G_DEPT_TT_KOR_NM","deptTtKorNm","G_NOW_SUST_CD","sustCd","G_NOW_COLG_CD","colgCd","G_PLURAL_FG","pluralFg","G_HAND_NO","handNo","G_MNG_DEPT_CD","mngDeptCd","G_IP_ADDRESS","setGlobalDataList","globalData","getGlobalDataList","clear","AbeeCommonService","abee_common_service_classCallCheck","strDisplayType","strBussCd","strDisplayLvl","strBussFg","strUserFg","strDeptCd","strDeepCorsNo","utils_service_classCallCheck","Array","isArray","isUndefined","format","nowFormat","moment","showDate","korCode","engCode","EstbCommonService","estb_common_service_classCallCheck","argDataSet","argCampFg","argModeFg","argInitFg","strResvFg","strInitFg","argBdcdFg","strBdCd","auth_common_service_classCallCheck","remote","clearGlobalData","reload","userPwd","_context3","toUpperCase","logout","BsacAffService","bsac_aff_service_classCallCheck","arrSystemCd","strSystemCd","BsacUnicService","utilsService","common","directives","services","studentInfoService","user","getStudentInfo","studentInfo","studentInfo_service_classCallCheck","photoCheck","receiveData","DS_SREG300","studentInfoComponents","SpGrid","zipcodeService","zipcode_controller_classCallCheck","initGrid","searchNm","grid","pagingOptions","currentPage","pageSize","pageBlockSize","listGrid","selectable","enablePaging","gridSize","columnDef","width","align","bindHtml","gridAction","onRowDblClick","convertToZipObj","setData","gridData","totalRecordCount","parseInt","totalCount","_context","zipNo","_ref","zipCode","korTtAddr","lnmAddress","getSelectedRow","cancel","_minPage","_maxPage","zipcode_service_classCallCheck","searchValue","getMessage","pgmId","reportService","bsacCommonService","report_controller_classCallCheck","divHight","that","on","_","$digest","off","showReport","info","reportEncryptType","encryptReportParam","encParams","viewer","m2soft","crownix","Viewer","setParameterEncrypt","openFile","mrdPath","arrServerType","report_service_classCallCheck","bindings","univcodeService","univcode_controller_classCallCheck","univList","schCd","schNm","convertToObj","univcode_service_classCallCheck","sqlMap","search","DS_COMMON","utils","fileManager_controller_classCallCheck","invaildFile","isNullOrEmpty","bindColumn","isNewFile","countBtn","isDisableDownload","isDisableDelete","btnStyle","confirm","removeFileResource","handleDelete","call","invaildFileList","$errorParam","getUploadMsg","isExceptExtension","getExtensionOfFile","isDisableUploadExistMessage","pathColumn","bindFileSize","handleUpload","extension","ext","handleDownload","fullPathFile","fileManager_service_classCallCheck","maxsize","isDisableUpload","haksaTab_controller_classCallCheck","doShowNaviBtn","position","from","reduce","acc","cur","menuDivWidth","viewTabsCount","Math","ceil","plusTab","tabs","doVisibleMenu","index","go","tab","invisible","haksaTab_content_controller_classCallCheck","viewTabs","idx","activeTab","toDash","getActiveTabState","_this3","menusWidth","sum","visibleButton","disabled","activeTabName","splice","$1","toLowerCase","_this4","noticePopup_controller_classCallCheck","noticeMsg","zipcode","univcode","fileManager","haksaTab","haksaContentTab","noticePopup","langType","setCurrentLangCodeInLocalStorage"],"mappings":"2EAAAA,EAAAC,QAAA,4qBCAAD,EAAAC,QAAA,0rBCAAD,EAAAC,QAAA,sBCAAD,EAAAC,QAAA,suGCAAD,EAAAC,QAAA,01CCAAD,EAAAC,QAAA,woFCAAD,EAAAC,QAAA,ujDCAAD,EAAAC,QAAA,iZCAAD,EAAAC,QAAA,+wBCAAD,EAAAC,QAAA,ujBCAAD,EAAAC,QAAA,+mFCAAD,EAAAC,QAAA,0JCAA,IAAAC,EAAA,CACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,gBAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,UAAA,IACAC,aAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,UAAA,IACAC,aAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,YAAA,I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","file":"app~pub.js","sourcesContent":["module.exports = \"
\\r\\n
\\r\\n

{{ modal.params.title }}

\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","module.exports = \"
\\r\\n
\\r\\n

{{ modal.params.title }}

\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","module.exports = \"\";","module.exports = \"\\r\\n
\\r\\n
\\r\\n
\\r\\n

{{ 'MSG000399' | translate }}

\\t\\t\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\t\\t\\r\\n
\\r\\n \\t\\t\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n 0\\\">\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\t\\t\\r\\n
\\r\\n
\\r\\n \\t\\t\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","module.exports = \"\\r\\n\\r\\n
\\r\\n
\\t\\t\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\t\\t\\r\\n
\\r\\n
\";","module.exports = \"
\\r\\n
\\r\\n
\\r\\n
\\r\\n

{{ 'MSG000390' | translate }}

\\t\\t\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\t\\t\\r\\n
\\r\\n \\t\\t\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n 0 && $ctrl.grid.listGrid.getData().length >= $ctrl.pagingOptions.pageSize\\\">\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\t\\t\\r\\n
\\r\\n
\\r\\n \\t\\t\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","module.exports = \"
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\t\\t\\r\\n
\\t\\t\\r\\n
\\t\\t\\r\\n
\\r\\n
\";","module.exports = \"
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\";","module.exports = \"
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\";","module.exports = \"
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\t\\t\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","module.exports = \"
\\r\\n\\tⓒ 2019 Ajou University.\\r\\n 도움말 \\t\\r\\n\\t
\\r\\n\\t\\t언어(Language)\\r\\n\\t\\t\\t
\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t
\\t\\t\\r\\n\\t
\\t\\r\\n\\t\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
    \\r\\n
  • \\r\\n
    \\r\\n
    {{ 'MSG001454' | translate }}
    \\t\\t\\r\\n \\t\\t\\r\\n \\t\\t\\r\\n \\t\\t\\r\\n \\t\\t\\r\\n \\t\\t\\r\\n \\t\\t\\r\\n \\t\\t\\r\\n
    \\r\\n
  • \\r\\n \\t\\t\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\";","module.exports = \"\\r\\n\";","var map = {\n\t\"./af\": 128,\n\t\"./af.js\": 128,\n\t\"./ar\": 129,\n\t\"./ar-dz\": 130,\n\t\"./ar-dz.js\": 130,\n\t\"./ar-kw\": 131,\n\t\"./ar-kw.js\": 131,\n\t\"./ar-ly\": 132,\n\t\"./ar-ly.js\": 132,\n\t\"./ar-ma\": 133,\n\t\"./ar-ma.js\": 133,\n\t\"./ar-sa\": 134,\n\t\"./ar-sa.js\": 134,\n\t\"./ar-tn\": 135,\n\t\"./ar-tn.js\": 135,\n\t\"./ar.js\": 129,\n\t\"./az\": 136,\n\t\"./az.js\": 136,\n\t\"./be\": 137,\n\t\"./be.js\": 137,\n\t\"./bg\": 138,\n\t\"./bg.js\": 138,\n\t\"./bm\": 139,\n\t\"./bm.js\": 139,\n\t\"./bn\": 140,\n\t\"./bn.js\": 140,\n\t\"./bo\": 141,\n\t\"./bo.js\": 141,\n\t\"./br\": 142,\n\t\"./br.js\": 142,\n\t\"./bs\": 143,\n\t\"./bs.js\": 143,\n\t\"./ca\": 144,\n\t\"./ca.js\": 144,\n\t\"./cs\": 145,\n\t\"./cs.js\": 145,\n\t\"./cv\": 146,\n\t\"./cv.js\": 146,\n\t\"./cy\": 147,\n\t\"./cy.js\": 147,\n\t\"./da\": 148,\n\t\"./da.js\": 148,\n\t\"./de\": 149,\n\t\"./de-at\": 150,\n\t\"./de-at.js\": 150,\n\t\"./de-ch\": 151,\n\t\"./de-ch.js\": 151,\n\t\"./de.js\": 149,\n\t\"./dv\": 152,\n\t\"./dv.js\": 152,\n\t\"./el\": 153,\n\t\"./el.js\": 153,\n\t\"./en-au\": 154,\n\t\"./en-au.js\": 154,\n\t\"./en-ca\": 155,\n\t\"./en-ca.js\": 155,\n\t\"./en-gb\": 156,\n\t\"./en-gb.js\": 156,\n\t\"./en-ie\": 157,\n\t\"./en-ie.js\": 157,\n\t\"./en-il\": 158,\n\t\"./en-il.js\": 158,\n\t\"./en-nz\": 159,\n\t\"./en-nz.js\": 159,\n\t\"./eo\": 160,\n\t\"./eo.js\": 160,\n\t\"./es\": 161,\n\t\"./es-do\": 162,\n\t\"./es-do.js\": 162,\n\t\"./es-us\": 163,\n\t\"./es-us.js\": 163,\n\t\"./es.js\": 161,\n\t\"./et\": 164,\n\t\"./et.js\": 164,\n\t\"./eu\": 165,\n\t\"./eu.js\": 165,\n\t\"./fa\": 166,\n\t\"./fa.js\": 166,\n\t\"./fi\": 167,\n\t\"./fi.js\": 167,\n\t\"./fo\": 168,\n\t\"./fo.js\": 168,\n\t\"./fr\": 169,\n\t\"./fr-ca\": 170,\n\t\"./fr-ca.js\": 170,\n\t\"./fr-ch\": 171,\n\t\"./fr-ch.js\": 171,\n\t\"./fr.js\": 169,\n\t\"./fy\": 172,\n\t\"./fy.js\": 172,\n\t\"./gd\": 173,\n\t\"./gd.js\": 173,\n\t\"./gl\": 174,\n\t\"./gl.js\": 174,\n\t\"./gom-latn\": 175,\n\t\"./gom-latn.js\": 175,\n\t\"./gu\": 176,\n\t\"./gu.js\": 176,\n\t\"./he\": 177,\n\t\"./he.js\": 177,\n\t\"./hi\": 178,\n\t\"./hi.js\": 178,\n\t\"./hr\": 179,\n\t\"./hr.js\": 179,\n\t\"./hu\": 180,\n\t\"./hu.js\": 180,\n\t\"./hy-am\": 181,\n\t\"./hy-am.js\": 181,\n\t\"./id\": 182,\n\t\"./id.js\": 182,\n\t\"./is\": 183,\n\t\"./is.js\": 183,\n\t\"./it\": 184,\n\t\"./it.js\": 184,\n\t\"./ja\": 185,\n\t\"./ja.js\": 185,\n\t\"./jv\": 186,\n\t\"./jv.js\": 186,\n\t\"./ka\": 187,\n\t\"./ka.js\": 187,\n\t\"./kk\": 188,\n\t\"./kk.js\": 188,\n\t\"./km\": 189,\n\t\"./km.js\": 189,\n\t\"./kn\": 190,\n\t\"./kn.js\": 190,\n\t\"./ko\": 191,\n\t\"./ko.js\": 191,\n\t\"./ku\": 192,\n\t\"./ku.js\": 192,\n\t\"./ky\": 193,\n\t\"./ky.js\": 193,\n\t\"./lb\": 194,\n\t\"./lb.js\": 194,\n\t\"./lo\": 195,\n\t\"./lo.js\": 195,\n\t\"./lt\": 196,\n\t\"./lt.js\": 196,\n\t\"./lv\": 197,\n\t\"./lv.js\": 197,\n\t\"./me\": 198,\n\t\"./me.js\": 198,\n\t\"./mi\": 199,\n\t\"./mi.js\": 199,\n\t\"./mk\": 200,\n\t\"./mk.js\": 200,\n\t\"./ml\": 201,\n\t\"./ml.js\": 201,\n\t\"./mn\": 202,\n\t\"./mn.js\": 202,\n\t\"./mr\": 203,\n\t\"./mr.js\": 203,\n\t\"./ms\": 204,\n\t\"./ms-my\": 205,\n\t\"./ms-my.js\": 205,\n\t\"./ms.js\": 204,\n\t\"./mt\": 206,\n\t\"./mt.js\": 206,\n\t\"./my\": 207,\n\t\"./my.js\": 207,\n\t\"./nb\": 208,\n\t\"./nb.js\": 208,\n\t\"./ne\": 209,\n\t\"./ne.js\": 209,\n\t\"./nl\": 210,\n\t\"./nl-be\": 211,\n\t\"./nl-be.js\": 211,\n\t\"./nl.js\": 210,\n\t\"./nn\": 212,\n\t\"./nn.js\": 212,\n\t\"./pa-in\": 213,\n\t\"./pa-in.js\": 213,\n\t\"./pl\": 214,\n\t\"./pl.js\": 214,\n\t\"./pt\": 215,\n\t\"./pt-br\": 216,\n\t\"./pt-br.js\": 216,\n\t\"./pt.js\": 215,\n\t\"./ro\": 217,\n\t\"./ro.js\": 217,\n\t\"./ru\": 218,\n\t\"./ru.js\": 218,\n\t\"./sd\": 219,\n\t\"./sd.js\": 219,\n\t\"./se\": 220,\n\t\"./se.js\": 220,\n\t\"./si\": 221,\n\t\"./si.js\": 221,\n\t\"./sk\": 222,\n\t\"./sk.js\": 222,\n\t\"./sl\": 223,\n\t\"./sl.js\": 223,\n\t\"./sq\": 224,\n\t\"./sq.js\": 224,\n\t\"./sr\": 225,\n\t\"./sr-cyrl\": 226,\n\t\"./sr-cyrl.js\": 226,\n\t\"./sr.js\": 225,\n\t\"./ss\": 227,\n\t\"./ss.js\": 227,\n\t\"./sv\": 228,\n\t\"./sv.js\": 228,\n\t\"./sw\": 229,\n\t\"./sw.js\": 229,\n\t\"./ta\": 230,\n\t\"./ta.js\": 230,\n\t\"./te\": 231,\n\t\"./te.js\": 231,\n\t\"./tet\": 232,\n\t\"./tet.js\": 232,\n\t\"./tg\": 233,\n\t\"./tg.js\": 233,\n\t\"./th\": 234,\n\t\"./th.js\": 234,\n\t\"./tl-ph\": 235,\n\t\"./tl-ph.js\": 235,\n\t\"./tlh\": 236,\n\t\"./tlh.js\": 236,\n\t\"./tr\": 237,\n\t\"./tr.js\": 237,\n\t\"./tzl\": 238,\n\t\"./tzl.js\": 238,\n\t\"./tzm\": 239,\n\t\"./tzm-latn\": 240,\n\t\"./tzm-latn.js\": 240,\n\t\"./tzm.js\": 239,\n\t\"./ug-cn\": 241,\n\t\"./ug-cn.js\": 241,\n\t\"./uk\": 242,\n\t\"./uk.js\": 242,\n\t\"./ur\": 243,\n\t\"./ur.js\": 243,\n\t\"./uz\": 244,\n\t\"./uz-latn\": 245,\n\t\"./uz-latn.js\": 245,\n\t\"./uz.js\": 244,\n\t\"./vi\": 246,\n\t\"./vi.js\": 246,\n\t\"./x-pseudo\": 247,\n\t\"./x-pseudo.js\": 247,\n\t\"./yo\": 248,\n\t\"./yo.js\": 248,\n\t\"./zh-cn\": 249,\n\t\"./zh-cn.js\": 249,\n\t\"./zh-hk\": 250,\n\t\"./zh-hk.js\": 250,\n\t\"./zh-tw\": 251,\n\t\"./zh-tw.js\": 251\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) { // check for number or string\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn id;\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 592;","/* @ngInject */\nfunction translate($translateProvider, $datepickerProvider, cfpLoadingBarProvider, $stateProvider, $compileProvider, $ariaProvider) {\n\n //$translateProvider.translations('kor', transKo);\n // $translateProvider.userUrlLoader({\n // url: '/i18n/getMessageAll.do'\n // });\n //$translateProvider.useUrlLoader('common/i18n/i18n_EN.json');\n\n // $translateProvider.useStaticFilesLoader({\n // prefix: 'common/i18n/i18n_',\n // suffix: '.json'\n // });\n\n // $translateProvider.useUrlLoader('/i18n/getMessageAll.do', {\n // queryParameter : 'lang'\n // });\n\n $ariaProvider.config({\n bindRoleForClick : false\n });\n\n /////// 다국어 설정 //\n $stateProvider\n .state('root', {\n abstract: true,\n resolve: {\n translateReady: ['$translate', function($translate) {\n return $translate.onReady();\n }]\n }\n });\n\n $translateProvider.useLoader('i18nLoader');\n $translateProvider.preferredLanguage('KO');\n $translateProvider.useSanitizeValueStrategy('sanitizeParameters');\n $translateProvider.useLocalStorage();\n\n\n // href 에서 unsafe가 안나오게 설정 (https?|ftp|mailto|javascript)\n $compileProvider.aHrefSanitizationWhitelist(/^\\s*(javascript):/);\n\n //datepicker\n angular.extend($datepickerProvider.defaults, {\n dateFormat: 'yyyy-MM-dd',\n modelDateFormat: 'yyyyMMdd',\n autoclose: true,\n dateType: 'string'\n });\n\n cfpLoadingBarProvider.includeBar = false;\n cfpLoadingBarProvider.parentSelector = '#wrap';\n cfpLoadingBarProvider.spinnerTemplate =\n '
';\n\n\n //SpGrid에서 angular 1.6.6 사용으로 인해 lowercase <- $$lowercase(1.7.7) 호환성 추가\n angular.lowercase = angular.$$lowercase;\n\n}\n\nexport default translate;","console.log(window.location.host);\nconst hostUrl = window.location.host;\nconst testServer = ['127.0.0.1', 'localhost'];\nlet report;\n\nconst constants = {\n i18nCode : {\n langCode: {\n korean: \"KO\",\n english: \"EN\"\n },\n ajaxCode: { // 1042: Korean, 1033: English\n KO: \"1042\",\n EN: \"1033\"\n }\n },\n rowType : {\n insert: 'i',\n update: 'u',\n delete: 'd'\n },\n noticeList : [ // 탭 타이틀 옆 유의사항 버튼이 나오는 메뉴 리스트\n 'g040601',\n 'g010803',\n 'u200101',\n 'u200102',\n 'e020404',\n 'u021311',\n// 'u021312',\n 'u021305',\n 'u060709',\n 'u081202',\n 'u030704',\n 'u010803',\n 'u010809',\n 'u021312'\n ]\n};\n\n\nexport default constants;","console.log(window.location.host);\nconst hostUrl = window.location.host;\nconst testServer = ['127.0.0.1', 'localhost'];\n/* @ngInject */\nexport default class {\n constructor( $http) {\n angular.extend(this, {\n $http\n });\n\n this.constants;\n }\n\n async remote() {\n if(this.constants) return this.constants;\n\n try {\n this.constants = await this.getClientConstants();\n }catch (e) {\n console.error(e.message())\n this.getDefaultRemoteValues(this.constants);\n }\n\n return this.constants;\n }\n\n // 서버에서 front-end 설정정보를 가져온다\n async getClientConstants() {\n try{\n const response = await this.$http({\n method: 'POST',\n url: '/client/constants.do'\n });\n\n return response.data;\n }catch (ex) {\n console.error(ex);\n throw new Error(ex.message());\n }\n }\n\n getDefaultRemoteValues(constants) {\n constants = {};\n constants.ssoUseYn = 'Y';\n constants.tabinfoLimitSize = 10;\n\n let report;\n if (testServer.some(url => hostUrl.indexOf(url) > -1)) {\n constants.viewServer = \"http://report-test.ajou.ac.kr:8081\";\n constants.mrdServer = \"http://uaims.ajou.ac.kr:8091/report\";\n } else {\n constants.viewServer = \"http://202.30.0.53:8081\";\n constants.mrdServer = \"https://aims.ajou.ac.kr/report\";\n }\n }\n}\n","/* @ngInject */\r\nexport default function ($provide, constants) {\r\n const PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\r\n\r\n // 다국어 영문이면 데이터피커에 한글 세팅 안함\r\n if(constants.i18nCode.langCode.english === localStorage.getItem('NG_TRANSLATE_LANG_KEY')) return;\r\n\r\n $provide.value(\"$locale\", {\r\n \"DATETIME_FORMATS\": {\r\n \"AMPMS\": [\r\n \"\\uc624\\uc804\",\r\n \"\\uc624\\ud6c4\"\r\n ],\r\n \"DAY\": [\r\n \"\\uc77c\\uc694\\uc77c\",\r\n \"\\uc6d4\\uc694\\uc77c\",\r\n \"\\ud654\\uc694\\uc77c\",\r\n \"\\uc218\\uc694\\uc77c\",\r\n \"\\ubaa9\\uc694\\uc77c\",\r\n \"\\uae08\\uc694\\uc77c\",\r\n \"\\ud1a0\\uc694\\uc77c\"\r\n ],\r\n \"ERANAMES\": [\r\n \"\\uae30\\uc6d0\\uc804\",\r\n \"\\uc11c\\uae30\"\r\n ],\r\n \"ERAS\": [\r\n \"\\uae30\\uc6d0\\uc804\",\r\n \"\\uc11c\\uae30\"\r\n ],\r\n \"FIRSTDAYOFWEEK\": 6,\r\n \"MONTH\": [\r\n \"1\\uc6d4\",\r\n \"2\\uc6d4\",\r\n \"3\\uc6d4\",\r\n \"4\\uc6d4\",\r\n \"5\\uc6d4\",\r\n \"6\\uc6d4\",\r\n \"7\\uc6d4\",\r\n \"8\\uc6d4\",\r\n \"9\\uc6d4\",\r\n \"10\\uc6d4\",\r\n \"11\\uc6d4\",\r\n \"12\\uc6d4\"\r\n ],\r\n \"SHORTDAY\": [\r\n \"\\uc77c\",\r\n \"\\uc6d4\",\r\n \"\\ud654\",\r\n \"\\uc218\",\r\n \"\\ubaa9\",\r\n \"\\uae08\",\r\n \"\\ud1a0\"\r\n ],\r\n \"SHORTMONTH\": [\r\n \"1\\uc6d4\",\r\n \"2\\uc6d4\",\r\n \"3\\uc6d4\",\r\n \"4\\uc6d4\",\r\n \"5\\uc6d4\",\r\n \"6\\uc6d4\",\r\n \"7\\uc6d4\",\r\n \"8\\uc6d4\",\r\n \"9\\uc6d4\",\r\n \"10\\uc6d4\",\r\n \"11\\uc6d4\",\r\n \"12\\uc6d4\"\r\n ],\r\n \"STANDALONEMONTH\": [\r\n \"1\\uc6d4\",\r\n \"2\\uc6d4\",\r\n \"3\\uc6d4\",\r\n \"4\\uc6d4\",\r\n \"5\\uc6d4\",\r\n \"6\\uc6d4\",\r\n \"7\\uc6d4\",\r\n \"8\\uc6d4\",\r\n \"9\\uc6d4\",\r\n \"10\\uc6d4\",\r\n \"11\\uc6d4\",\r\n \"12\\uc6d4\"\r\n ],\r\n \"WEEKENDRANGE\": [\r\n 5,\r\n 6\r\n ],\r\n \"fullDate\": \"y\\ub144 M\\uc6d4 d\\uc77c EEEE\",\r\n \"longDate\": \"y\\ub144 M\\uc6d4 d\\uc77c\",\r\n \"medium\": \"y. M. d. a h:mm:ss\",\r\n \"mediumDate\": \"y. M. d.\",\r\n \"mediumTime\": \"a h:mm:ss\",\r\n \"short\": \"yy. M. d. a h:mm\",\r\n \"shortDate\": \"yy. M. d.\",\r\n \"shortTime\": \"a h:mm\"\r\n },\r\n \"NUMBER_FORMATS\": {\r\n \"CURRENCY_SYM\": \"\\u20a9\",\r\n \"DECIMAL_SEP\": \".\",\r\n \"GROUP_SEP\": \",\",\r\n \"PATTERNS\": [\r\n {\r\n \"gSize\": 3,\r\n \"lgSize\": 3,\r\n \"maxFrac\": 3,\r\n \"minFrac\": 0,\r\n \"minInt\": 1,\r\n \"negPre\": \"-\",\r\n \"negSuf\": \"\",\r\n \"posPre\": \"\",\r\n \"posSuf\": \"\"\r\n },\r\n {\r\n \"gSize\": 3,\r\n \"lgSize\": 3,\r\n \"maxFrac\": 2,\r\n \"minFrac\": 2,\r\n \"minInt\": 1,\r\n \"negPre\": \"-\\u00a4\",\r\n \"negSuf\": \"\",\r\n \"posPre\": \"\\u00a4\",\r\n \"posSuf\": \"\"\r\n }\r\n ]\r\n },\r\n \"id\": \"ko-kr\",\r\n \"localeID\": \"ko_KR\",\r\n \"pluralCat\": function (n, opt_precision) {\r\n return PLURAL_CATEGORY.OTHER;\r\n }\r\n });\r\n}","import 'angular-translate';\nimport translateConfig from './translateConfig'\nimport constants from './constant';\nimport remoteConstantsService from './remote.constants.service';\nimport i18nLoader from './i18n/i18nLoader';\nimport datePickerI18n from './i18n/datepicker.i18n.ko';\n\nlet config = angular.module('stuweb.common.config', ['pascalprecht.translate'])\n .config(translateConfig)\n .constant('constants', constants)\n .service('remoteConstantsService', remoteConstantsService)\n .factory('i18nLoader', i18nLoader)\n .config(datePickerI18n)\n .name;\n\nexport default config;","/* @ngInject */\nexport default ($q, $http, commonService, constants) => {\n return options => {\n const deferred = $q.defer();\n\n $http({\n method: 'POST',\n url: '/i18n/getMessageAll.do',\n params : {\n lang : options.key\n }\n ,\n timeout : 10000\n }).then(e => {\n commonService.setI18nData(options.key, e.data);\n deferred.resolve(e.data);\n }).catch(e=>{\n if(options.key === \"null\") options.key = constants.i18nCode.langCode.korean;\n\n $http({\n url: 'common/i18n/i18n_' + options.key + '.json'\n }).then(e => {\n commonService.setI18nData(options.key, e.data);\n deferred.resolve(e.data);\n });\n });\n\n return deferred.promise;\n };\n}","function haksaYear() {\n return {\n restrict: 'E',\n replace: true,\n template: '',\n controller: /* @ngInject */ function ($scope) {\n let thisYear = new Date().getFullYear();\n const currentYear = thisYear + 5;\n const loopCnt = currentYear - (thisYear - 21);\n const yearList = [];\n for (let i = 0; i < loopCnt; ++i) {\n yearList.push((currentYear - i).toString());\n }\n $scope.data = yearList;\n }\n }\n}\n\nexport default haksaYear;","/* @ngInject */\nfunction haksaSelect() {\n return {\n scope : {\n selectList : '=',\n key : '@',\n keyName : '@'\n },\n replace : true,\n restrict: 'E',\n template : \"\"\n }\n}\n\nexport default haksaSelect;","/* @ngInject */\nfunction haksaCheckRole(globalDataService) {\n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n var userRole = globalDataService.getGlobalData(\"G_ROLE_CD\");\n if(!attrs.haksaCheckRole) return;\n\n var arrRole = attrs.haksaCheckRole.split(\",\");\n var matchedRole = arrRole.some(function (role) {\n return userRole === role.trim();\n })\n\n if (matchedRole) {\n element.show();\n } else {\n element.hide();\n }\n\n }\n }\n}\n\nexport default haksaCheckRole;","/* @ngInject */\nfunction haksaRadio() {\n return {\n scope : {\n radioList : '=',\n key : '@',\n keyName : '@',\n enabled : '=',\n ngModel : '=' ,\n ngDisabled : '='\n },\n replace : true,\n restrict: 'E',\n template : \"
\\n\" +\n \"
\\n\" +\n \" \\n\" +\n \"
\\n\" +\n \"
\",\n controller : /* @ngInject */ function ($scope) {\n const vm = this;\n vm.changModelValue = function (key) {\n $scope.ngModel = key;\n }\n },\n controllerAs : \"vm\"\n }\n}\n\nexport default haksaRadio;","const focusOn = function() {\n return function (scope, elem, attr) {\n scope.$on('focusOn', function (e, name) {\n if (name === attr.focusOn) {\n elem[0].focus();\n }\n });\n };\n}\n\nconst focus = /* @ngInject */ function ($rootScope, $timeout) {\n return function(name) {\n $timeout(function (){\n $rootScope.$broadcast('focusOn', name);\n });\n }\n}\n\nexport default {\n focusOn,\n focus\n}","/* @ngInject */\nexport default function($filter) {\n return {\n require: 'ngModel',\n link: function (scope, elem, attrs, ctrl) {\n if (!ctrl) {\n return;\n }\n ctrl.$formatters.unshift(function () {\n return $filter('number')(ctrl.$modelValue);\n });\n ctrl.$parsers.unshift(function (viewValue) {\n var plainNumber = viewValue.replace(/[\\,\\.\\-\\+]/g, ''),\n b = $filter('number')(plainNumber);\n elem.val(b);\n return plainNumber;\n });\n }\n };\n}","function dynamicComponent($compile) {\n return {\n scope : {\n componentName : '=',\n commonData : '='\n },\n restrict : 'E',\n replace : true,\n link : function (scope, element, attrs) {\n const html = angular.element(`<${scope.componentName}>`);\n element.append(html);\n $compile(html)(scope);\n }\n }\n}\n\ndynamicComponent.$inject = ['$compile'];\n\nexport default dynamicComponent;","function dynamicComponent($compile) {\n return {\n scope : {\n componentName : '=',\n commonData : '='\n },\n restrict : 'E',\n replace : true,\n link : function (scope, element, attrs) {\n const html = angular.element(`<${scope.componentName}>`);\n element.append(html);\n $compile(html)(scope);\n },\n controller : class {\n constructor($scope, $element) {\n 'ngInject';\n angular.extend(this, {$scope, $element});\n }\n\n $postLink() {\n // 컨텐츠에 유의사항이 없으면 컨텐츠 영역의 유의사항 버튼 안보이게 처리\n if(this.$element.find('.description').length > 0){\n this.$element.find('.nb-btn-help').show();\n this.$element.find('.description').hide();\n }\n }\n }\n }\n}\n\ndynamicComponent.$inject = ['$compile'];\n\nexport default dynamicComponent;","class controller{\n constructor($scope, $rootScope) {\n this.active = \"\";\n $rootScope.$watch(\"isLoading\", (loading) => {\n this.active = loading ? 'active' : '';\n });\n }\n\n}\ncontroller.$inject = ['$scope', '$rootScope'];\n\nlet loadingProgress = {\n restrict : \"E\",\n controller,\n controllerAs : \"vm\",\n scope : {},\n template : '
' +\n '
' +\n '
{{ \\\"MSG000301\\\" | translate }}
' +\t\t//// MSG000301 : 로딩중입니다\t\n '
' +\n '
'\n}\n\nexport default loadingProgress;","class loading{\n constructor($rootScope) {\n this.$rootScope = $rootScope;\n }\n\n start(){\n this.$rootScope.isLoading = true;\n }\n\n end(){\n if ( this.$rootScope.isLoading ){\n this.$rootScope.isLoading = false;\n }\n }\n}\nloading.$inject = ['$rootScope'];\n\nexport default loading;","function control($httpProvider) {\n 'ngInject'\n $httpProvider.interceptors.push(interceptor);\n}\n//\n// class control {\n// constructor($httpProvider) {\n// $httpProvider.interceptors.push(interceptor);\n// }\n// }\n\nfunction interceptor ($q, $timeout, $window, $rootScope, loading) {\n 'ngInject'\n return {\n request: function (config) {\n if (/\\.do/i.test(config.url)) {\n loading.start();\n }\n return config || $q.when(config);\n },\n requestError: function (rejection) {\n loading.end();\n return $q.reject(rejection);\n },\n response: function (response) {\n //Return the response or promise.\n if (/\\.do/i.test(response.config.url)) {\n loading.end();\n }\n if (response.data.msgCode == \"error\") {\n $q.reject();\n }\n return response || $q.when(response);\n },\n responseError: function (rejection) {\n loading.end();\n if (rejection.status === 401) {\n $window.location = '/index.html';\n }\n return $q.reject(rejection);\n }\n }\n}\n\n// control.$inject = ['$httpProvider'];\n// interceptor.$inject = ['$q', '$timeout', '$window', '$rootScope', 'loading'];\nexport default control;","import loadingComponent from './loading.component';\nimport loadingService from './loading.service';\nimport config from './config';\n\nlet loadingProgress = angular.module('loadingProgress', [])\n .component('loadingProgress', loadingComponent)\n .service('loading', loadingService)\n .config(config)\n .name;\n\nexport default loadingProgress;","const MODAL_WRAPPER_ZINDEX = 1050;\r\nconst BACKDROP_ZINDEX = 1040;\r\nconst DEFAULT_MODAL_CONTROLLER_AS = 'modal';\r\nconst MODAL_CLASS = 'sp-modal';\r\n\r\nexport {\r\n MODAL_WRAPPER_ZINDEX,\r\n BACKDROP_ZINDEX,\r\n DEFAULT_MODAL_CONTROLLER_AS,\r\n MODAL_CLASS\r\n};","import {\r\n BACKDROP_ZINDEX,\r\n MODAL_WRAPPER_ZINDEX,\r\n DEFAULT_MODAL_CONTROLLER_AS,\r\n MODAL_CLASS\r\n} from '../Constant';\r\n\r\nconst ng1 = angular;\r\n\r\nconst SpModalProvider = ( ) => {\r\n\r\n\r\n const BACKDROP_TEMPLATE = `
`;\r\n const MODAL_WRAPPER_TEMPLATE = `
\r\n
\r\n
`;\r\n\r\n let modalStack = [];\r\n let defaultOptions = {\r\n template : null,\r\n params : {},\r\n controller : null,\r\n size : \"sm\",\r\n className : 'sp-biz-modal',\r\n top : null,\r\n height : -1,\r\n // realHeight : null,\r\n modalAction : {\r\n onOpen : function(){\r\n\r\n },\r\n onClose : function(){\r\n\r\n },\r\n onResult : function(){\r\n\r\n }\r\n }\r\n };\r\n\r\n\r\n /**\r\n * 유틸리티 함수\r\n * @param $element\r\n */\r\n const modalIn = $element =>{\r\n $element.removeClass(\"out\");\r\n $element.addClass(\"in\");\r\n }\r\n\r\n /**\r\n * 유틸리티 함수\r\n * @param $element\r\n */\r\n const modalOut = $element => {\r\n $element.remove();\r\n }\r\n\r\n /**\r\n * 사이즈 클래스 제거 함수\r\n */\r\n const sizeClassRemove = $spModal =>{\r\n $spModal.removeClass(\"sp-modal-fl\");\r\n $spModal.removeClass(\"sp-modal-lg\");\r\n $spModal.removeClass(\"sp-modal-md\");\r\n $spModal.removeClass(\"sp-modal-sm\");\r\n $spModal.removeClass(\"sp-modal-xs\");\r\n }\r\n\r\n const setDefaultOptions = options => {\r\n defaultOptions = ng1.extend({}, defaultOptions, options);\r\n };\r\n\r\n const $get = ( $rootScope, $controller, $document, $q, $templateCache, $templateRequest, $compile, $window, $timeout) => {\r\n 'ngInject';\r\n let $body = ng1.element($document[0].body);\r\n\r\n return class SpModal {\r\n constructor(options) {\r\n this.options = ng1.extend({}, defaultOptions, options);\r\n if( options.hasOwnProperty(\"modalAction\")){\r\n this.options.modalAction = angular.extend({}, defaultOptions.modalAction, options.modalAction );\r\n }\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n let _self = this;\r\n let options = this.options;\r\n\r\n this.scope = $rootScope.$new();\r\n this.$modalWrapper = ng1.element(MODAL_WRAPPER_TEMPLATE);\r\n this.$backdrop = ng1.element(BACKDROP_TEMPLATE);\r\n\r\n this.$modalWrapper.find(`.${MODAL_CLASS}`).append($templateCache.get(options.template));\r\n\r\n this.close = this.close.bind(this);\r\n this.scope.close = this.close;\r\n\r\n let ctrlInput = {\r\n $scope : _self.scope,\r\n $element : ng1.element(_self.$modalWrapper),\r\n instance : {\r\n close : _self.scope.close,\r\n result : function(){\r\n _self.getModalAction().onResult( arguments[0] );\r\n }\r\n }\r\n };\r\n\r\n this.controller = $controller( options.controller, ctrlInput, false, options.controllerAs || DEFAULT_MODAL_CONTROLLER_AS );\r\n this.scope[options.controllerAs || DEFAULT_MODAL_CONTROLLER_AS] = this.controller;\r\n\r\n let linkFn = $compile( this.$modalWrapper );\r\n let modalTemplate = linkFn( this.scope );\r\n\r\n $body.append( modalTemplate )\r\n .append( this.$backdrop );\r\n\r\n\r\n if( this.controller.hasOwnProperty(\"init\") ){\r\n this.controller.init();\r\n }\r\n\r\n this.controller.close = this.close.bind(this);\r\n this.controller.stopPropagation = function( $event ){\r\n $event.stopPropagation();\r\n };\r\n\r\n if( options.className ) {\r\n this.controller.className = options.className;\r\n }\r\n\r\n this.controller.params = options.params;\r\n }\r\n\r\n /**\r\n * Modal Params 리턴\r\n * @return params\r\n */\r\n getParams(){\r\n return this.options.params;\r\n };\r\n\r\n /**\r\n * Modal Component Params 설정\r\n * @param params\r\n */\r\n setParams( params ){\r\n this.options.params = params;\r\n this.controller.params = params;\r\n };\r\n\r\n /**\r\n * modalAction 설정\r\n * @param modalAction\r\n * @returns {SpModal}\r\n */\r\n setModalAction( modalAction ){\r\n this.options.modalAction = ng1.extend({}, this.options.modalAction, modalAction);\r\n return this;\r\n };\r\n\r\n /**\r\n * modalAction 리턴\r\n * @returns {modalAction|{onOpen, onClose, onResult}|*|{onResult}}\r\n */\r\n getModalAction(){return this.options.modalAction; };\r\n\r\n /**\r\n * Modal\r\n */\r\n getSize(){ return this.options.size; };\r\n\r\n /**\r\n * Modal Size 리턴\r\n * @param size\r\n * @returns {SpModal}\r\n */\r\n setSize( size ){ this.options.size = size; }\r\n\r\n\r\n /**\r\n * modalInstance Return\r\n * @returns {SpModal}\r\n */\r\n open(){\r\n let $spModal = this.$modalWrapper.find(`.${MODAL_CLASS}`);\r\n $body.css('overflow','hidden');\r\n this.getModalAction().onOpen( this.controller );\r\n modalIn(this.$modalWrapper);\r\n modalIn(this.$backdrop);\r\n if ( this.options.height != -1 ) {\r\n this.$modalWrapper.find('.sp-modal-body').css('height',`${this.options.height}px`);\r\n }\r\n this.$modalWrapper.css(\"zIndex\", MODAL_WRAPPER_ZINDEX + (modalStack.length*10) );\r\n this.$backdrop.css(\"zIndex\" , BACKDROP_ZINDEX + (modalStack.length*11) );\r\n // this.setTopPosition();\r\n sizeClassRemove($spModal);\r\n $spModal.addClass(\"sp-modal-\" + this.getSize());\r\n modalStack.push(this);\r\n\r\n\r\n if (this.scope.$$phase !== '$apply' && this.scope.$$phase !== '$digest' ) {\r\n this.scope.$apply();\r\n }\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * @deprecated\r\n */\r\n // setTopPosition(){\r\n // let _self = this;\r\n // let $spModal = _self.$modalWrapper.find(`.${MODAL_CLASS}`);\r\n // let height = this.options.realHeight || $spModal.height();\r\n // let top = this.options.top ? this.options.top : ( $window.innerHeight / 2 ) - ( height / 2 );\r\n // $spModal.css(\"top\", top);\r\n // }\r\n\r\n /**\r\n * Modal Instance Close\r\n * @returns {SpModal}\r\n */\r\n close(){\r\n $body.css('overflow','auto');\r\n this.getModalAction().onClose( this.controller );\r\n modalOut(this.$backdrop);\r\n modalOut(this.$modalWrapper);\r\n modalStack.pop();\r\n\r\n // set focus To child Popup\r\n if(modalStack.length > 0 && modalStack[0].controller.hasOwnProperty('focus'))\r\n modalStack[0].controller.focus('ToastPopup');\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Modal Instance Destroy\r\n */\r\n destroy(){\r\n this.$backdrop.remove();\r\n this.$modalWrapper.remove();\r\n this.scope.$destroy();\r\n }\r\n\r\n }\r\n };\r\n\r\n return {\r\n $get,\r\n setDefaultOptions\r\n }\r\n}\r\n\r\nexport default SpModalProvider;","import alertTemplate from './template/alertTemplate.html';\r\nimport confirmTemplate from './template/confirmTemplate.html';\r\n\r\nconst ng1 = angular;\r\nconst replaceMessage = message => {\r\n message = message || '';\r\n return message.replace( /\\\\r/g, '
')\r\n .replace( /\\\\n/g, '
');\r\n}\r\n\r\nclass ToastService{\r\n constructor(SpModal, $q, $templateCache) {\r\n 'ngInject';\r\n this.SpModal = SpModal;\r\n this.$q = $q;\r\n this.$templateCache = $templateCache;\r\n\r\n /*\r\n alert, confirm template 설정\r\n */\r\n $templateCache.put(\"alertTemplate\", alertTemplate);\r\n $templateCache.put(\"confirmTemplate\", confirmTemplate);\r\n\r\n }\r\n\r\n /**\r\n * Toast alert 메소드 - 모달 형태의 alert을 띄움\r\n * @param opts - alert options\r\n * @return Prmoise - promise 객체\r\n */\r\n alert( opts ){\r\n let defer = this.$q.defer();\r\n\r\n const alertModal = new this.SpModal({\r\n template : \"alertTemplate\",\r\n className : \"sp-message-modal\",\r\n controller : ['focus', function(focus){\r\n let vm = this;\r\n vm.focus = focus;\r\n vm.focus('ToastPopup');\r\n\r\n vm.replaceMessage = replaceMessage;\r\n }]\r\n });\r\n\r\n let _defaultOptions = {\r\n title : angular.translate(\"MSG004257\"),\t\t//// MSG004257 : 알림\r\n message : \"\",\r\n okMessage : angular.translate(\"MSG000394\"),\t\t//// MSG000394 : 확인\r\n size : \"xs\"\r\n };\r\n\r\n if( opts === \"\" || typeof opts === \"undefined\" || opts === null ){\r\n throw new Error([\"Toast alert : message 인자는 필수 값입니다. requried\"]);\r\n }\r\n\r\n if( typeof opts == \"string\" ){\r\n opts = ng1.extend({}, _defaultOptions, {\r\n message : opts\r\n });\r\n } else if ( typeof opts == \"object\" ){\r\n opts = ng1.extend({}, _defaultOptions, opts );\r\n }\r\n\r\n alertModal.setSize(opts.size);\r\n alertModal.setParams(opts);\r\n\r\n alertModal.setModalAction({\r\n onClose(){\r\n defer.resolve();\r\n }\r\n });\r\n\r\n alertModal.open();\r\n return defer.promise;\r\n }\r\n\r\n\r\n /**\r\n * Toast confirm 메소드 - 모달 형태의 confirm을 띄움\r\n * @param opts - alert options\r\n * @return Prmoise - promise 객체\r\n */\r\n confirm( opts ){\r\n let defer = this.$q.defer();\r\n\r\n const confirmModal = new this.SpModal({\r\n template : \"confirmTemplate\",\r\n className : \"sp-message-modal\",\r\n controller: ['instance', function(instance){\r\n let vm = this;\r\n\r\n vm.replaceMessage = replaceMessage;\r\n\r\n vm.ok = function(){\r\n instance.close();\r\n vm.params.defer.resolve();\r\n };\r\n\r\n vm.no = function(){\r\n instance.close();\r\n vm.params.defer.reject();\r\n };\r\n\r\n }]\r\n });\r\n\r\n let _defaultOptions = {\r\n title : angular.translate(\"MSG000394\"),\t\t//// MSG000394 : 확인\r\n message : \"\",\r\n okMessage : angular.translate(\"MSG000394\"),\t\t//// MSG000394 : 확인\r\n noMessage : angular.translate(\"MSG000395\"),\t\t//// MSG000395 : 취소\r\n size : \"xs\",\r\n defer : defer\r\n };\r\n\r\n if( opts === \"\" || typeof opts === \"undefined\" || opts === null ){\r\n throw new Error([\"Toast confirm : message 인자는 필수 값입니다. requried\"]);\r\n }\r\n\r\n if( typeof opts == \"string\" ){\r\n opts = ng1.extend({}, _defaultOptions, {\r\n message : opts\r\n });\r\n } else if ( typeof opts == \"object\" ){\r\n opts = ng1.extend({}, _defaultOptions, opts );\r\n }\r\n\r\n confirmModal.setSize(opts.size);\r\n confirmModal.setParams(opts);\r\n\r\n confirmModal.open();\r\n\r\n return defer.promise;\r\n }\r\n}\r\n\r\nexport default ToastService;\r\n","const toTrusted = ( $sce ) => {\r\n return text => $sce.trustAsHtml(text);\r\n};\r\n\r\n//inject dependency\r\ntoTrusted.$inject = ['$sce'];\r\n\r\nexport default toTrusted;","import {\r\n SpModalProvider\r\n} from './factories';\r\n\r\nimport {\r\n ToastService\r\n} from './services';\r\n\r\nimport {\r\n toTrusted\r\n} from './filters';\r\n\r\nexport default angular.module('haksaSpModal', [])\r\n .provider('SpModal', SpModalProvider)\r\n .filter('to_trusted', toTrusted)\r\n .service('Toast', ToastService )\r\n .name;\r\n","import * as html from './html';\nimport dynamicComponent from './dynamicComponent/dynamic.directive';\nimport dynamicComponentTab from './dynamicComponent/dynamic.directive.tab';\nimport loadingProgress from './loadingProgress'\nimport spModal from './spModal';\n\nlet directive = angular.module('stuweb.common.directive', [\n loadingProgress,\n spModal\n])\n .directive('haksaYear', html.haksaYear)\n .directive('haksaSelect', html.haksaSelect)\n .directive('haksaCheckRole', html.haksaCheckRole)\n .directive('haksaRadio', html.haksaRadio)\n .directive('dynamicComponent', dynamicComponent)\n .directive('dynamicTab', dynamicComponentTab)\n .factory('focus', html.focus.focus)\n .directive('focusOn', html.focus.focusOn)\n .directive('ngEnter', html.ngEnter)\n .directive('compareDate', html.compareDate)\n .directive('comma', html.comma)\n .directive('gridViewBtn', html.girdViewBtn)\n .directive('ngDecimal', html.ngDecimal)\n\n .name\n\n\n\nexport default directive;","/* @ngInject */\nexport default function ngEnter() {\n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n element.bind(\"keydown keypress\", function (event) {\n if (event.which === 13) {\n scope.$apply(function () {\n scope.$eval(attrs.ngEnter);\n });\n event.preventDefault();\n }\n })\n }\n }\n}","/* @ngInject */\nexport default function() {\n return {\n restrict: 'A',\n require: '?ngModel',\n link: function (scope, elem, attrs, ctrl) {\n elem.bind('blur', function () {\n\n const date = arrangeDate(attrs, ctrl);\n const otherDate = ctrl.$$parentForm[attrs.compareDate];\n\n if(isNaN(new Date(ctrl.$modelValue)) === true || isNaN(new Date(ctrl.$$parentForm[attrs.compareDate].$modelValue)) === true) {\n return;\n }\n\n if(date.stDt > date.endDt) {\n ctrl.$invalid = true;\n ctrl.$setValidity('fastDate', false)\n } else {\n ctrl.$invalid = false;\n ctrl.$setValidity('fastDate', true);\n otherDate.$invalid = false;\n otherDate.$setValidity('fastDate', true);\n }\n });\n }\n };\n}\n\nfunction arrangeDate(attrs, ctrl) {\n const elemDt = new Date(ctrl.$modelValue);\n const elemDtOr = attrs.compareDateOrder;\n\n const otherDt = new Date(ctrl.$$parentForm[attrs.compareDate].$modelValue);\n const otherDtOr = jQuery('input[name=\"' + attrs.compareDate+ '\"').attr('compare-date-order');\n\n let stDt, endDt;\n if( elemDtOr < otherDtOr){\n stDt = elemDt;\n endDt = otherDt;\n } else {\n stDt = otherDt;\n endDt = elemDt\n }\n\n return {\n stDt : stDt,\n endDt : endDt\n }\n}","/* @ngInject */\r\nexport default function () {\r\n return {\r\n restrict : \"E\",\r\n scope : {\r\n target : \"=\",\r\n type : \"@\"\r\n },\r\n replace : true,\r\n template : \"
\\n\" +\r\n \" \\n\" +\r\n \"
\"\r\n }\r\n}","/* @ngInject */\r\nexport default function(){\r\n return {\r\n restrict: 'A',\r\n link: function($scope, $element, $attributes){\r\n var limit = $attributes.ngDecimal;\r\n function caret(node) {\r\n if(node.selectionStart) {\r\n return node.selectionStart;\r\n }\r\n else if(!document.selection) {\r\n return 0;\r\n }\r\n //node.focus();\r\n var c\t\t= \"\\\\001\";\r\n var sel\t= document.selection.createRange();\r\n var txt\t= sel.text;\r\n var dul\t= sel.duplicate();\r\n var len\t= 0;\r\n try{ dul.moveToElementText(node); }catch(e) { return 0; }\r\n sel.text\t= txt + c;\r\n len\t\t= (dul.text.indexOf(c));\r\n sel.moveStart('character',-1);\r\n sel.text\t= \"\";\r\n return len;\r\n }\r\n $element.bind('change', event=>{\r\n \tif(/[^1-9.-]/.test($element.val())) {\r\n \t\t$element.val('');\r\n \t}\r\n })\r\n $element.bind('keypress', function(event){\r\n var charCode = (event.which) ? event.which : event.keyCode;\r\n var elem=document.getElementById($element.attr(\"id\"));\r\n if (charCode == 45){\r\n var caretPosition=caret(elem);\r\n if(caretPosition==0){\r\n if($element.val().charAt(0)!=\"-\" ){\r\n if($element.val() <=limit){\r\n $element.val(\"-\"+$element.val());\r\n }\r\n }\r\n if($element.val().indexOf(\"-\")!=-1){\r\n event.preventDefault();\r\n return false;\r\n }\r\n }\r\n else{\r\n event.preventDefault();\r\n }\r\n }\r\n if (charCode == 46){\r\n if ($element.val().indexOf('.') !=-1){\r\n event.preventDefault();\r\n return false;\r\n }\r\n return true;\r\n }\r\n if (charCode != 45 && charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57)){\r\n event.preventDefault();\r\n return false;\r\n }\r\n if( $element.val().split(\".\")[1] ) {\r\n if($element.val().split(\".\")[1].length>limit-1){\r\n event.preventDefault();\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n });\r\n }\r\n };\r\n}","class BsacCommonService {\n constructor($http, $q, commonService, globalDataService, constants, $mdDialog) {\n 'ngInject';\n angular.extend(this, {\n $http, $q, commonService, globalDataService, constants, $mdDialog\n });\n }\n\n gfnComboLoad(arrDataSet, arrGrpCd, arrCampFg, arrUseYn, arrModeFg, arrWhere, arrUnivGrscFg) {\n var deferred = this.$q.defer();\n\n if (!arrCampFg) arrCampFg = [];\n if (!arrUseYn) arrUseYn = [];\n if (!arrModeFg) arrModeFg = [];\n if (!arrWhere) arrWhere = [];\n if (!arrUnivGrscFg) arrUnivGrscFg = [];\n\n var strDataSet = \"\";\n var strDataSetParam = \"\";\n var strGrpCd = \"\";\n var strCampFg = \"\";\n var strUseYn = \"\";\n var strModeFg = \"\";\n var strWhere = \"\";\n var strUnivGrscFg = \"\";\n var arrCnt = arrDataSet.length;\n\n for (var i = 0; i < arrCnt; i++) {\n if (!arrDataSet || !arrDataSet[i]) {\n throw Error(angular.translate(\"MSG000302\"));\t\t//// MSG000302 : DataSet명을 입력하세요\t\n return;\n }\n if (!arrGrpCd || !arrGrpCd[i]) {\n throw Error(angular.translate(\"MSG000303\"));\t\t//// MSG000303 : 그룹코드를 입력하세요\t\n return;\n }\n if (arrCampFg && !arrCampFg[i]) {\n arrCampFg[i] = \"T\";\n }\n\n if (arrUseYn && !arrUseYn[i]) {\n arrUseYn[i] = \"1\";\n } else if (arrUseYn && arrUseYn[i] === \"T\") {\n arrUseYn[i] = \"T\";\n }\n\n if (arrModeFg && !arrModeFg[i]) {\n arrModeFg[i] = \"X\";\n }\n if (arrWhere && !arrWhere[i]) {\n arrWhere[i] = \"X\";\n }\n if (arrUnivGrscFg && !arrUnivGrscFg[i]) {\n arrUnivGrscFg[i] = \"T\";\n }\n\n if (i == 0) {\n strDataSet += arrDataSet[i];\n strDataSetParam += arrDataSet[i] + \"=\" + arrDataSet[i];\n strGrpCd += arrGrpCd[i];\n strCampFg += arrCampFg[i];\n strUseYn += arrUseYn[i];\n strModeFg += arrModeFg[i];\n strWhere += arrWhere[i];\n strUnivGrscFg += arrUnivGrscFg[i];\n } else {\n strDataSet += \"|\" + arrDataSet[i];\n strDataSetParam += \" \" + arrDataSet[i] + \"=\" + arrDataSet[i];\n strGrpCd += \"|\" + arrGrpCd[i];\n strCampFg += \"|\" + arrCampFg[i];\n strUseYn += \"|\" + arrUseYn[i];\n strModeFg += \"|\" + arrModeFg[i];\n strWhere += \"|\" + arrWhere[i];\n strUnivGrscFg += \"|\" + arrUnivGrscFg[i];\n\n }\n }\n\n this.commonService.httpPost({\n method: 'POST',\n url: '/com/com/cmmn/code/findCodeCombo.action',\n headers: {\n 'Content-Type': 'application/json'\n },\n data: {\n \"strType\": \"\",\n \"strDataSet\": strDataSet,\n \"strGrpCd\": strGrpCd,\n \"strCampFg\": strCampFg,\n \"strUseYn\": strUseYn,\n \"strModeFg\": strModeFg,\n \"strWhere\": strWhere,\n \"strUnivGrscFg\": strUnivGrscFg\n }\n })\n .then(function (data) {\n deferred.resolve(data.DatasetList);\n }, function (ex) {\n deferred.reject(ex);\n })\n\n return deferred.promise;\n }\n \n gfnComboLoadEng(arrDataSet, arrGrpCd, arrCampFg, arrUseYn, arrModeFg, arrWhere, arrUnivGrscFg) {\n var deferred = this.$q.defer();\n\n if (!arrCampFg) arrCampFg = [];\n if (!arrUseYn) arrUseYn = [];\n if (!arrModeFg) arrModeFg = [];\n if (!arrWhere) arrWhere = [];\n if (!arrUnivGrscFg) arrUnivGrscFg = [];\n\n var strDataSet = \"\";\n var strDataSetParam = \"\";\n var strGrpCd = \"\";\n var strCampFg = \"\";\n var strUseYn = \"\";\n var strModeFg = \"\";\n var strWhere = \"\";\n var strUnivGrscFg = \"\";\n var arrCnt = arrDataSet.length;\n\n for (var i = 0; i < arrCnt; i++) {\n if (!arrDataSet || !arrDataSet[i]) {\n throw Error(angular.translate(\"MSG000302\"));\t\t//// MSG000302 : DataSet명을 입력하세요\t\n return;\n }\n if (!arrGrpCd || !arrGrpCd[i]) {\n throw Error(angular.translate(\"MSG000303\"));\t\t//// MSG000303 : 그룹코드를 입력하세요\t\n return;\n }\n if (arrCampFg && !arrCampFg[i]) {\n arrCampFg[i] = \"T\";\n }\n\n if (arrUseYn && !arrUseYn[i]) {\n arrUseYn[i] = \"1\";\n } else if (arrUseYn && arrUseYn[i] === \"T\") {\n arrUseYn[i] = \"T\";\n }\n\n if (arrModeFg && !arrModeFg[i]) {\n arrModeFg[i] = \"X\";\n }\n if (arrWhere && !arrWhere[i]) {\n arrWhere[i] = \"X\";\n }\n if (arrUnivGrscFg && !arrUnivGrscFg[i]) {\n arrUnivGrscFg[i] = \"T\";\n }\n\n if (i == 0) {\n strDataSet += arrDataSet[i];\n strDataSetParam += arrDataSet[i] + \"=\" + arrDataSet[i];\n strGrpCd += arrGrpCd[i];\n strCampFg += arrCampFg[i];\n strUseYn += arrUseYn[i];\n strModeFg += arrModeFg[i];\n strWhere += arrWhere[i];\n strUnivGrscFg += arrUnivGrscFg[i];\n } else {\n strDataSet += \"|\" + arrDataSet[i];\n strDataSetParam += \" \" + arrDataSet[i] + \"=\" + arrDataSet[i];\n strGrpCd += \"|\" + arrGrpCd[i];\n strCampFg += \"|\" + arrCampFg[i];\n strUseYn += \"|\" + arrUseYn[i];\n strModeFg += \"|\" + arrModeFg[i];\n strWhere += \"|\" + arrWhere[i];\n strUnivGrscFg += \"|\" + arrUnivGrscFg[i];\n\n }\n }\n\n this.commonService.httpPost({\n method: 'POST',\n url: '/com/com/cmmn/code/findCodeComboEng.action',\n headers: {\n 'Content-Type': 'application/json'\n },\n data: {\n \"strType\": \"\",\n \"strDataSet\": strDataSet,\n \"strGrpCd\": strGrpCd,\n \"strCampFg\": strCampFg,\n \"strUseYn\": strUseYn,\n \"strModeFg\": strModeFg,\n \"strWhere\": strWhere,\n \"strUnivGrscFg\": strUnivGrscFg\n }\n })\n .then(function (data) {\n deferred.resolve(data.DatasetList);\n }, function (ex) {\n deferred.reject(ex);\n })\n\n return deferred.promise;\n }\n \n /*==============================================================================\n * 메소드명 : gfnFindDeptList3\n * 설명 : CMMN034, CMMN050 테이블에서 조건에 따라 부서 코드 / 명을 목록으로 가져온다.\n * 작성자 : 나윤재\n * 메소드 인수 1 : 데이터셋 명\t\t (필수)\n * 메소드 인수 2 : 사용자 번호 (필수 : 사번/학번)\n * 메소드 인수 3 : 부서사용 구분 (필수 : C0040001(캠퍼스전체), C0040002(부서전체), C0040003(하위부서), C0040004(지정부서))\n * 메소드 인수 4 : 학사운영실관리부서포함여부 (필수 : \"1\":포함, \"0\":미포함)\n * 메소드 인수 5 : 행정관리부서포함여부 (필수 : \"1\":포함, \"0\":미포함)\n * 메소드 인수 6 : 모드\t\t\t\t (필수 : \"T\":전체, \"S\":선택, \"X\":데이터시작)\n * 메소드 인수 7 : 개별 서비스ID \n * 메소드 인수 8 : 년도\n * 메소드 인수 9 : 소속 그룹\n * 메소드 인수 10 : 상위부서코드 \n *\t1 : 대학\n *\t2 : 학부/학과(대학)\n *\t3 : 전공(대학)\n *\t4 : 대학원\n *\t5 : 학과(대학원)\n *\t6 : 전공(대학원) \n *\t7 : 학과/전공(대학원)\n *\t8 : 학부/학과/전공(대학)\n *\t9 : 대학/대학원 \n * 메소드 인수 11 : 사용구분 \n * 메소드 인수 12 : 캠퍼스 구분 \n * 메소드 인수 13 : 사용자부서코드 \n * 메소드 인수 14 : 동작구분 \n ==============================================================================*/\n gfnFindDeptList3(strDataSet, strUserNo, strDeptUseFg, \n strMngtYn1, strMngtYn2, strModeFg, strSvcId, strYy, \n strPosiGrpCd, strUpDeptCd, strUseFg, strCampCd, strUserDeptCd, strFg)\n {\t\n \tvar deferred = this.$q.defer();\n \t// DATASET \n \tvar strDataSetParam = strDataSet + \"=\" + strDataSet;\n \tif(strDeptUseFg == \"C0040001\") {\n \t\tthis.commonService.httpPost({\n method: 'POST',\n url: '/com/com/cmmn/code/findCodeCombo.action',\n headers: {\n 'Content-Type': 'application/json'\n },\n data: {\n \t/*\"strSvcId\" : strSvcId,\n \t\"strDataSetParam\" : strDataSetParam , */\n \"strType\": \"\",\n \"strDataSet\": strDataSet,\n \"strGrpCd\": \"C0001\",\n \"strCampFg\": \"T\",\n \"strUseYn\": \"1\",\n \"strModeFg\": strModeFg,\n \"strWhere\": \"X\",\n \"strUnivGrscFg\": \"T\" \n }\n })\n .then(function (data) {\t\n deferred.resolve(data.DatasetList);\n }, function (ex) {\n deferred.reject(ex);\n })\n return deferred.promise;\n \t} else {\n \t\tif(strSvcId == null) strSvcId = \"FIND_DEPT3\";\n \t\tthis.commonService.httpPost({\n method: 'POST',\n url: '/com/com/cmmn/code/findDeptList3.action',\n headers: {\n 'Content-Type': 'application/json'\n },\n data: {\n \t/*\"strSvcId\" : strSvcId ,\n \"strDataSetParam\" : strDataSetParam , */\n \"strDataSet\": strDataSet, \t\t // 데이터셋 명\n \"strUserNo\": strUserNo,\t\t\t// 사용자 번호 \n \"strDeptUseFg\": strDeptUseFg,\t// 부서사용 구분\n \"strMngtYn1\": strMngtYn1,\t\t// 학사운영실관리부서포함여부\n \"strMngtYn2\": strMngtYn2,\t\t// 행정관리부서포함여부\n \"strModeFg\": strModeFg,\t\t\t // 표시 모드\n \"strYy\": strYy,\t\t\t\t\t// 년도\n \"strPosiGrpCd\": strPosiGrpCd,\t// 소속그룹 옵션\n \"strUpDeptCd\": strUpDeptCd,\t\t// 상위부서코드 \n \"strUseFg\": strUseFg,\t\t\t// 사용구분\n \"strCampCd\": strCampCd,\t\t\t // 캠퍼스 구분 \n \"strUserDeptCd\": strUserDeptCd,\t// 사용자 부서코드 \n \"strFg\": strFg\t\t\t\t\t // 사용자 부서코드 \n }\n })\n .then(function (data) {\n deferred.resolve(data.DatasetList);\n }, function (ex) {\n deferred.reject(ex);\n })\n return deferred.promise;\n \t}\n }\n\n\n /*==============================================================================\n * 메소드명 : gfnFindSchpScheFg\n * 설명 : UNIC110 테이블에서 학사력 코드에 따라 현재 기간이 유효한지 체크\n * 작성자 : 선지헌\n * 메소드 인수 1 : 데이터셋 명\t\t(필수)\n * 메소드 인수 2 : 학사력년도\t\t(필수 : 2008)\n * 메소드 인수 3 : 학사력학기코드\t(필수 : U0002001)\n * 메소드 인수 4 : 대학/대학원 코드\t(필수 : \"DS03\" 등)\n * 메소드 인수 5 : 업무구분 (필수 : ex) 수업 : 02)\n * 메소드 인수 6 : 학사력구분 (필수 : 공통코드)\n * 메소드 인수 7 : SVC ID (필수 : 최소 \"\")\n * 리턴컬럼 :\n 1. SCHP_SCHE_FG\n 2. FR_DT\n 3. TO_DT\n 4. FR_TM\n 5. TO_TM\n 6. SCHE_CTNT\n 7. CUR_DTTM\n 8. VALID_YN\n\t==============================================================================*/\n gfnFindSchpScheFg(strDataSet, strShafScheYy, strShafScheShtmCd, strUnivGrscCd, strUnitBussCd, strSchpScheFg) {\n var deferred = this.$q.defer();\n \n this.commonService.httpPost({\n method: 'POST',\n url: '/uni/uni/unic/base/findSchpScheFg.action',\n headers: {\n 'Content-Type': 'application/json'\n },\n data: {\n \"strShafScheYy\": strShafScheYy,\n \"strShafScheShtmCd\": strShafScheShtmCd,\n \"strUnivGrscCd\": strUnivGrscCd,\n \"strUnitBussCd\": strUnitBussCd,\n \"strSchpScheFg\": strSchpScheFg\n }\n }).then(function (data) {\n deferred.resolve(data.DatasetList[strDataSet]);\n }, function (ex) {\n deferred.reject(ex);\n })\n\n return deferred.promise;\n }\n \n /*==============================================================================\n * 메소드명 : gfnFindSchpScheFgDegrCors\n * 설명 : UNIC110 테이블에서 학사력 코드에 따라 현재 기간이 유효한지 체크\n * 작성자 : 손동경 \n * 메소드 인수 1 : 데이터셋 명\t\t(필수)\n * 메소드 인수 2 : 학사력년도\t\t(필수 : 2008)\n * 메소드 인수 3 : 학사력학기코드\t(필수 : U0002001)\n * 메소드 인수 4 : 대학/대학원 코드\t(필수 : \"DS03\" 등)\n * 메소드 인수 5 : 업무구분 (필수 : ex) 수업 : 02)\n * 메소드 인수 6 : 학사력구분 (필수 : 공통코드)\n * 메소드 인수 7 : SVC ID (필수 : 최소 \"\")\n * 리턴컬럼 :\n \t\t1. SCHP_SCHE_FG\n \t\t2. FR_DT\n \t\t3. TO_DT\n \t\t4. FR_TM\n \t\t5. TO_TM\n \t\t6. SCHE_CTNT\n \t\t7. CUR_DTTM\n \t\t8. VALID_YN\n ==============================================================================*/\n gfnFindSchpScheFgDegrCors(strDataSet, strShafScheYy, strShafScheShtmCd, strUnivGrscCd, strUnitBussCd, strSchpScheFg, strSvcId) {\n var deferred = this.$q.defer();\n\n this.commonService.httpPost({\n method: 'POST',\n url: '/uni/uni/unic/base/findSchpScheFgDegrCors.action',\n headers: {\n 'Content-Type': 'application/json'\n },\n data: {\n \"strShafScheYy\": strShafScheYy,\t\t\t\t// 학사력년도\n \"strShafScheShtmCd\": strShafScheShtmCd,\t\t // 학사력학기코드\n \"strUnivGrscCd\": strUnivGrscCd,\t\t\t\t// 대학대학원코드\n \"strUnitBussCd\": strUnitBussCd,\t\t\t\t // 학사력업무구분\n \"strSchpScheFg\": strSchpScheFg,\t\t \t// 학사력구분\n \"strStdNo\" : this.globalDataService.getGlobalData(\"G_USER_NO\" ) // 학위가정구분\n }\n }).then(function (data) {\n deferred.resolve(data.DatasetList[strDataSet]);\n }, function (ex) {\n deferred.reject(ex);\n })\n\n return deferred.promise;\n }\n \n\n /*==============================================================================\n /* 메소드명 : gfnBtnControl\n * 설명 : 사용권한에 따라 화면의 기본 버튼들을 컨트롤 한다.\n * 메소드인수1 : 사용권한\n ==============================================================================*/\n\tgfnBtnControl(useGrd){\n\t\tif(useGrd === \"1\") {\n\t\t\treturn {\n\t\t\t\t\t\tbtnFind\t\t:\ttrue\n\t\t\t\t\t,\tbtnNew\t\t:\tfalse\n\t\t\t\t\t,\tbtnDelete\t:\tfalse\n\t\t\t\t\t,\tbtnSave\t\t:\tfalse\n\t\t\t\t\t,\tbtnPrint\t:\tfalse\n\t\t\t\t\t,\tbtnHelp\t\t:\tfalse\n\t\t\t\t\t,\tbtnChange\t:\tfalse\n\t\t\t\t\t}\n\t\t} else if(useGrd === \"2\") {\n\t\t\treturn {\n\t\t\t\t\t\tbtnFind\t\t:\ttrue\n\t\t\t\t\t,\tbtnNew\t\t:\tfalse\n\t\t\t\t\t,\tbtnDelete\t:\tfalse\n\t\t\t\t\t,\tbtnSave\t\t:\tfalse\n\t\t\t\t\t,\tbtnPrint\t:\ttrue\n\t\t\t\t\t,\tbtnHelp\t\t:\ttrue\n\t\t\t\t\t,\tbtnChange\t:\ttrue\n\t\t\t\t\t}\n\t\t} else if(useGrd === \"3\") {\n\t\t\treturn {\n\t\t\t\t\t\tbtnFind\t\t:\ttrue\n\t\t\t\t\t,\tbtnNew\t\t:\tfalse\n\t\t\t\t\t,\tbtnDelete\t:\tfalse\n\t\t\t\t\t,\tbtnSave\t\t:\ttrue\n\t\t\t\t\t,\tbtnPrint\t:\ttrue\n\t\t\t\t\t,\tbtnHelp\t\t:\ttrue\n\t\t\t\t\t,\tbtnChange\t:\tfalse\n\t\t\t\t\t}\n\t\t} else if(useGrd === \"4\") {\n\t\t\treturn {\n\t\t\t\tbtnFind\t\t:\ttrue\n\t\t\t,\tbtnNew\t\t:\ttrue\n\t\t\t,\tbtnDelete\t:\tfalse\n\t\t\t,\tbtnSave\t\t:\ttrue\n\t\t\t,\tbtnPrint\t:\ttrue\n\t\t\t,\tbtnHelp\t\t:\ttrue\n\t\t\t,\tbtnChange\t:\tfalse\n\t\t\t}\n\t\t} else if(useGrd === \"5\") {\n\t\t\treturn {\n\t\t\t\tbtnFind\t\t:\ttrue\n\t\t\t,\tbtnNew\t\t:\ttrue\n\t\t\t,\tbtnDelete\t:\ttrue\n\t\t\t,\tbtnSave\t\t:\ttrue\n\t\t\t,\tbtnPrint\t:\ttrue\n\t\t\t,\tbtnHelp\t\t:\ttrue\n\t\t\t,\tbtnChange\t:\tfalse\n\t\t\t}\n\t\t} else if(useGrd === \"6\") {\n\t\t\treturn {\n\t\t\t\tbtnFind\t\t:\ttrue\n\t\t\t,\tbtnNew\t\t:\ttrue\n\t\t\t,\tbtnDelete\t:\ttrue\n\t\t\t,\tbtnSave\t\t:\ttrue\n\t\t\t,\tbtnPrint\t:\ttrue\n\t\t\t,\tbtnHelp\t\t:\ttrue\n\t\t\t,\tbtnChange\t:\ttrue\n\t\t\t}\n\t\t}\n\t}\n \n /*==============================================================================\n * 메소드명 : gfnIsUpdated\n * 설명 : 데이터셋의 변경유무 체크\n * 메소드인수1 : 데이터셋 콤포넌트의 이름\n * 리턴값 : true : 변경된 자료 존재, false : 변경된 자료 미존재\n ==============================================================================*/\n gfnIsUpdated(dsObj) {\n \tfor(let nRow = 0; nRow < dsObj.length; nRow++) {\n \t\tif(dsObj.getRowType(nRow) == \"insert\" || dsObj.getRowType(nRow) == \"update\" ) {\n \t\t\treturn true;\n \t\t}\n \t}\n \tif(dsObj.orgBuffer) {\n \t\treturn true;\n \t}\n \treturn false;\n };\n \n /*==============================================================================\n * 메소드명 : gfnChkEssItem\n * 설명 : 필수입력체크(setFocus 사용)\n * 메소드인수1 : 데이터셋\n * 메소드인수2 : 체크대상 컬럼 아이디 목록\n * 메소드인수3 : 체크대상 컬럼 이름 목록\n * 메소드인수4 : 컴포넌트 아이디 목록\n * 리턴값 : 리턴 메시지\n ==============================================================================*/\n gfnChkEssItem(dsObj, strColIds, strColNms, strComIds) {\n \tvar deferred = this.$q.defer();\n \tvar retMsg = [];\n\n \tretMsg[0] = \"success\";\t\t// 성공 / 실패 \n \tretMsg[1] = \"\";\t\t\t\t// 틀린 첫번째 줄\n \tretMsg[2] = \"\";\t\t\t\t// 틀린 코드\n \tretMsg[3] = \"\";\t\t\t\t// 틀린 코드 입력 컴포넌트\n \t\n \tif(dsObj == null){\n \t\tdeferred.resolve(retMsg);\n\t return deferred.promise;\n \t}\n \t\n \t//var nColCnt:int = gfnCntStr(strColIds);\n \tvar colIdAry = strColIds.split(\"$\");\n \tvar colNmAry = strColNms.split(\"$\");\n \tvar comIdAry = strComIds.split(\"$\");\n \t\n \tvar colIdLen = colIdAry.length;\n \t\n \t// if(colIdLen != colNmAry.length) return;\n \t// if(colIdLen != comIdAry.length) return;\n \t\n \t// trace(\"=============colIdLen = \"+colIdLen+\" =======================================\");\n \t// trace(ObjectUtil.toString(colIdAry));\n \t// trace(\"==================================================================================\");\n \tvar len = dsObj.length;\n \tfor(var nRow=0; nRow < len; nRow++) {\n \t\t// if( dsObj.getRowType( nRow ) != \"normal\") {\n \t\t// trace(\"--------------------nRow= \"+nRow+\" = \"+dsObj.getRowType( nRow )+\" -------------------\");\n \t\t\tfor(var nCol = 0; nCol < colIdLen; nCol++) {\n \t\t\t\tvar isF = false;\n \t\t\t\t// trace(\"colIdAry[nCol]=\"+colIdAry[nCol]);\n \t\t\t\t// trace(\"dsObj.getColumn(nRow, colIdAry[nCol])=\"+dsObj.getColumn(nRow, colIdAry[nCol]));\n \t\t\t\tvar o = dsObj[nRow][colIdAry[nCol]];\n \t\t\t\tif(o) {\n \t\t\t\t\t\n \t\t\t\t} else {\n \t\t\t\t\tif(o.trim().length == 0) {\n \t\t\t\t\t\tisF = true;\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t\t\n \t\t\t\tif(isF) {\n \t\t\t\t\t// trace(\"nRow=\"+nRow+\" colIdAry[nCol]=\"+colIdAry[nCol]+\" colNmAry[nCol]=\"+colNmAry[nCol]+\" comIdAry[nCol]=\"+comIdAry[nCol]);\n \t\t\t\t\tretMsg[0] = \"[\" + colNmAry[nCol] +angular.translate(\"MSG000304\");\t\t//// MSG000304 : ] 항목을 입력하세요.[필수입력항목]\t\n \t\t\t\t\tretMsg[1] = nRow;\n \t\t\t\t\tretMsg[2] = colIdAry[nCol];\n \t\t\t\t\tretMsg[3] = comIdAry[nCol];\n \t\t\t\t\tdeferred.resolve(retMsg);\n\n \t\t\t return deferred.promise;\n \t\t\t\t}\n \t\t\t}\n \t\t// }\n \t}\n \tdeferred.resolve(retMsg);\n return deferred.promise;\n };\n \n /*==============================================================================\n * 메소드명 : gfnDataSetLog\n * 설명 : 저장전 등록자ID, 등록자IP, 수정자ID, 수정자IP 셋팅\n * 메소드인수1 : 대상 데이터셋\n ==============================================================================*/\n // 동작하도록 수정하였습니다. Ip주소는 현재 얻어오지 못하고 있습니다.\n gfnDataSetLog(objDataSet) { \t\n \tvar userNo = this.globalDataService.getGlobalData(\"G_USER_NO\");\n \tvar ipAddress = this.globalDataService.getGlobalData(\"G_IP_ADDRESS\");\n \t\n \tthis.gfnDataSetLogForPublic(objDataSet, userNo, ipAddress);\n };\n \n // 외부인용 gfnDataSetLog \n gfnDataSetLogForPublic(objDataSet, userNo, ipAddress) {\n \tif(objDataSet == null) return;\n \t\n \tvar len = objDataSet.length;\n \tvar vType = \"\";\n \t\n \tfor(var i = 0; i < len; i++) {\n \t\tvType = objDataSet[i].rType;\n \t\tif(vType == \"i\" || vType == \"u\") {\n \t\t\tif(vType == \"i\" ) {\n \t\t\t\tobjDataSet[i].regId = userNo ; //등록자ID\n \t\t\t\tobjDataSet[i].regIp = ipAddress ;\t //등록자IP \n \t\t\t}\n \t\t\t// Object.assign: 메서드는 열거할 수 있는 하나 이상의 출처 객체로부터 대상 객체로 속성을 복사할 때 사용합니다. 대상 객체를 반환합니다.\n \t\t\tobjDataSet[i].modId = userNo; \t\t\t//수정자ID\n \t\t\tobjDataSet[i].modIp = ipAddress;\t\t////수정자IP \n \t\t}\n \t}\n };\n \n /*==============================================================================\n * 메소드명 : gfnSystemDate\n * 설명 : 공통Function을 조회하여 해당 DB 시스템일시값을 전달한다.\n * 메소드인수1 : DataSet명\n * 메소드인수2 : 테이블명\n * 메소드인수3 : tranCallBack 에서 받을수 있는 svcId\n ==============================================================================*/\n gfnSystemDate(strDataSet, strFormat, strSvcId) {\n \tif(strDataSet == null || strDataSet == \"\") strDataSet = \"DS_DUMMY\";\n \tif(strFormat == null || strFormat == \"\") strFormat = \"YYYYMMDD HH24:MI:SS\";\n \tif(strSvcId == null || strSvcId == \"\") strSvcId = \"SYSTEMDATE\";\n \t\n \tvar deferred = this.$q.defer();\n \tthis.commonService.httpPost({\n method: 'POST',\n url: '/com/com/cmmn/code/findSystemDate.action',\n headers: {\n 'Content-Type': 'application/json'\n },\n data: {\n \"strFormat\" : strFormat,\n \"strDataSet\": strDataSet,\n }\n })\n .then(function (data) {\n deferred.resolve(data.DatasetList);\n }, function (ex) {\n deferred.reject(ex);\n })\n return deferred.promise;\n }\n\n /*==============================================================================\n\t * 메소드명 : gfnChkEssItem1Row\n\t * 설명 : 저장시 테이터 필수항목 체크(1 레코드)\n\t * 메소드인수1 : 데이터셋\n\t * 메소드인수2 : 체크대상 컬럼 아이디 목록\n\t * 메소드인수3 : 체크대상 컬럼 이름 목록\n\t * 메소드인수4 : 데이터셋의 Check할 행\n\t * 리턴값 : 리턴 메시지\n\t==============================================================================*/\n gfnChkEssItem1Row(row, strColIds, strColNms){\n const retMsg = [];\n\n retMsg[0] = \"success\";\t\t// 성공 / 실패\n retMsg[1] = \"\";\t\t\t\t// 틀린 첫번째 줄\n retMsg[2] = \"\";\t\t\t\t// 틀린 코드\n retMsg[3] = \"\";\t\t\t\t// 틀린 코드 입력 컴포넌트\n\n if(row === null){\n return retMsg;\n }\n\n const colIdAry = strColIds.split(\"$\");\n const colNmAry = strColNms.split(\"$\");\n const nColCnt = colIdAry.length;\n\n for (let nCol=0; nCol < nColCnt; nCol++) {\n const o = row[colIdAry[nCol]];\n if(!o){\n retMsg[0] = \"[\" + colNmAry[nCol] +angular.translate(\"MSG000304\");\t\t//// MSG000304 : ] 항목을 입력하세요.[필수입력항목]\t\n retMsg[1] = colIdAry[nCol];\n\n return retMsg;\n }\n }\n return retMsg;\n }\n \n /*==============================================================================\n * 메소드명 : gfnFindUnicStudentDegrCorsCheck\n * 설명 : 접속한 학생이 특별과정의 학생인지 체크\n * 작성자 : 손동경 \n * 메소드 인수 1 : 데이터셋 명\t\t(필수)\n * 메소드 인수 2 : SVC ID (필수 : 최소 \"\")\n * 리턴컬럼 :\n \t\t1. DEGR_CORS_CD\n ==============================================================================*/\n gfnFindUnicStudentDegrCorsCheck(strDataSet, strSvcId) {\n \tconst stdNo = this.globalDataService.getGlobalData(\"G_USER_NO\");\n \t\n \t// DATASET \n \tif(strDataSet === null || strDataSet === \"\") \n \t{\n \t\tstrDataSet = \"DS_DEGR_CORS_CHECK\";\n \t}\n \t\t\n \tconst strDataSetArg = strDataSet + \"=\" + \"DS_DEGR_CORS_CHECK\";\n \t\n \t// SVC ID\n \tif(strSvcId === null || strSvcId === \"\") strSvcId = \"FIND_STUDENT_DEGR_CORS_CHECK\";\n\n \tvar deferred = this.$q.defer();\n \tthis.commonService.httpPost({\n method: 'POST',\n url: '/uni/uni/unic/base/findUnicStudentDegrCorsCheck.action',\n headers: {\n 'Content-Type': 'application/json'\n },\n data: {\n \"stdNo\" : stdNo\n }\n })\n .then(function (data) {\n deferred.resolve(data.DatasetList);\n }, function (ex) {\n deferred.reject(ex);\n })\n return deferred.promise;\n }\n \n /*==============================================================================\n * 메소드명 : openReportPopupDkaWeb\n * 설명 : 팝업열기 mardpath는 /uNavy_RD/url이후부터 설정하면됨\n ==============================================================================*/\n openReportPopupDkaWeb(mrdpath, strParam, strTParam = \"\", strTitle = \"\", strDtb = \"\") {\n //\n return this.$mdDialog.show({\n locals : {reportInfo : {mrdpath, strParam}},\n template: '',\n parent: document.querySelector('md-tabs-content-wrapper'),\n disableParentScroll: true,\n clickOutsideToClose: true,\n controller: /* @ngInject */ ($scope, reportInfo) => {\n $scope.reportInfo = reportInfo;\n },\n fullscreen: false, // Only for -xs, -sm breakpoints.\n })\n\n // var strCampFg = Global.getVariable(\"G_CAMP_CD\").toString();\n // var rdViewerUrl = Global.getVariable(\"BSAC_REPORT_URL\").toString() ;\n // var prnFileUrl = Global.getVariable(\"BSAC_BASE_URL\").toString() + \"report/\" + mrdpath + \".mrd\";\n //\n // var strRdParam = \"\";\n // var strToday = \"\";\n // //------------------------------------------ 필수값 ------------------------------------------------\n // strRdParam = \t\"strParam='\"+strParam+\"'\"; // 1. rd에서 사용되는 $ 조회키값\n // strRdParam += \t\" prnFileUrl='\" + prnFileUrl + \"'\"; // 2. rd파일 URL\n // strRdParam += \t\" strCampFg='\" + strCampFg + \"'\"; // 3. 아주대학교 로고 뽑기위한 캠퍼스코드\n // strRdParam += \t\" strTitle='\" + strTitle + \"'\"; // 4. 새창 타이틀명\n // strRdParam += \t\" strDtb='\"+ strDtb +\"'\";\n // //------------------------------------------ 선택값 ------------------------------------------------\n // // 화면에 임의출력할 내용을 보낼때 추가 , 형식은 rd에서 사용할 변수명[내용]\n // // ※ 주의 : 팝업용과 현재페이지에서 보여주기용은 변수만드는 방법이 조금 다름\n // if(strTParam != \"\") strRdParam += \" strTParam='\"+strTParam+\"'\" ;\n //\n // var strReportParam:String = gfnReportParam(strParam, strCampFg, strTParam);\n //\n // //2010.11.10, 김창섭 암호화 때문에 추가\n // //파일명과 파라미터를 암호화 처리함.\n // var strEncData_param:String = \"\"; //파라미터\n // var strEncData_file:String = \"\"; //파일경로\n //\n // strEncData_param = encrypt(strReportParam,EncKey);\n // strEncData_file = encrypt(prnFileUrl,EncKey);\n //\n // strReportParam = strEncData_param;\n // prnFileUrl = strEncData_file;\n //\n // //2010.11.10\n // if(ExternalInterface.available) {\n // ExternalInterface.call(\"openRdPopupDkaWeb\", rdViewerUrl, prnFileUrl, strReportParam, strTitle);\n // }\n //const reportDiv = '
';\n //const body = document.getElementById('pageContainer');\n //document.body.appendChild(reportDiv);\n\n // const p = angular.element(\"#pageContainer\");\n // p.append('
');\n //\n //\n // //body.appendChild(reportDiv);\n // const viewer = new m2soft.crownix.Viewer(`${this.constants.report.viewServer}/ReportingServer/service`, 'crownix-viewer');\n // viewer.openFile(`${this.constants.report.mrdServer}/${mrdpath}.mrd`,\n // `/rf [${this.constants.report.viewServer}/DataServer/rdagent.jsp] /rsn [rd_uni] /rp ${strParam}`);\n\n //var viewer = new m2soft.crownix.Viewer('http://202.30.0.53:8081/ReportingServer/service', 'crownix-viewer');\n //viewer.openFile('https://aims.ajou.ac.kr/report/uni/scor/inqy/ScorStdSngjQueryList.mrd', '/rf [http://202.30.0.53:8081/DataServer/rdagent.jsp] /rsn [rd_uni] /rp [201521536] [] [] [] [] ');\n }\n \n \n /*==============================================================================\n * 메소드명 : gfnFindDeptList2\n * 설명 : CMMN050 테이블에서 조건에 따라 부서 코드 / 명을 목록으로 가져온다.\n * 작성자 : 선지헌 \n * 메소드 인수 1 : 데이터셋 명\t\t(필수)\n * 메소드 인수 2 : 캠퍼스 구분\t\t(필수 : \"S\":서울, \"K\":경주, \"T\":전체)\n * 메소드 인수 3 : 사용여부 \t\t(필수 : \"Y\" : 1, \"N\" : 0, \"T\")\n * 메소드 인수 4 : 상위부서코드\t\t(필수 : \"\" 로 넣어도 가능함.)\n * 메소드 인수 5 : 모드\t\t\t\t(필수 : \"T\":전체, \"S\":선택, \"X\":데이터시작)\n * 메소드 인수 6 : 권한코드\t\t\t(필수 : 일단은 배열만 선언해서 전달.)\n * 메소드 인수 7 : 소속 그룹 (strPosiGrpCd) (필수)\n *\t\t\t 1 : 대학\n *\t\t\t 2 : 학부/학과(대학)\n *\t\t\t 3 : 전공(대학)\n *\t\t\t 4 : 대학원\n *\t\t\t 5 : 학과(대학원)\n *\t\t\t 6 : 전공(대학원) \n *\t\t\t 7 : 학과/전공(대학원)\n *\t\t\t 8 : 학부/학과/전공(대학)\n *\t\t\t 9 : 대학/대학원\n * 99 : 상위코드만으로 제약조건 걸기\n * 메소드 인수 8 : 개별 서비스ID \n * 메소드 인수 9 : 년도\n * 메소드 인수 10 : Where 조건절 \n * 리턴컬럼 :\n \t\t1. deptCd\n \t\t2. upDeptCd\n \t\t3. deptKorNm\n \t\t4. deptTtKorNm\n \t\t5. campFg\n \t\t6. posiGrpCd\n \t\t7. posiGrpNm \n ==============================================================================*/\n async gfnFindDeptList2(strDataSet, strCampFg, strUseFg, strUpDeptCd, strModeFg, arrRoleCd = \"\", strPosiGrpCd, strSvcId, strYy = \"\", strWhereStr = \"\") {\n \tif(strPosiGrpCd === \"\" || strPosiGrpCd === null) strPosiGrpCd = \"1\";\n \tif(strSvcId === null || strSvcId === undefined) strSvcId = \"FIND_DEPT2\";\n \t\n \tconst response = await this.commonService.httpPost({\n url: '/com/com/cmmn/code/findDeptList2.action',\n data: {\n \"strCampFg\" : strCampFg,\t\t// 캠퍼스구분\n \"strUseFg\": strUseFg,\t\t\t// 사용여부\n \"strDataSet\" : strDataSet,\t\t// 데이터셋 명\n \"strUpDeptCd\" : strUpDeptCd,\t// 상위부서코드\n \"strModeFg\" : strModeFg,\t\t// 표시 모드\n \"strYy\" : strYy,\t\t\t\t// 년도\n \"strPosiGrpCd\" : strPosiGrpCd,\n \"strWhereStr\" : strWhereStr\n }\n })\n \n return response.DatasetList;\n };\n\n}\n\nexport default BsacCommonService;","class bsacUnicService{\n constructor($http, $q, commonService, Toast , globalDataService) {\n 'ngInject';\n this.$http = $http;\n this.$q = $q;\n this.commonService = commonService;\n this.Toast = Toast;\n this.globalDataService = globalDataService;\n }\n /*==============================================================================\n * 메소드명 : ufnFindUnicSmallUnitBusinessScheduleReg\n * 설명 : 업무(학적/입시/수업등)에 따른 상세 업무별 기본 학년도학기를 조회하여 가져온다.\n * 메소드 인수 1 : 데이터셋 명\n * 메소드 인수 2 : 대학/대학원구분(DS03:대학, DS04:대학원)\n * 메소드 인수 3 : 단위업무코드:G_MENU_NO2\n * 메소드 인수 4 : 소단위업무코드: 공통코드(C0050; //소단위업무구분) 참조\n * 메소드인수 5 : 서비스 ID\n =============================================================================*/\n ufnFindUnicSmallUnitBusinessScheduleReg(strDataSet, strUnivGrscCd, strUnitBussCd, strSmUnitBussCd) {\n var deferred = this.$q.defer();\n\n this.commonService.httpPost({\n method: 'POST',\n url: '/uni/uni/unic/base/findUnicSmallUnitBusinessScheduleReg.action',\n headers: {\n 'Content-Type': 'application/json'\n },\n data: {\n \"strType\": \"\",\n \"strUnivGrscCd\": strUnivGrscCd,\n \"strUnitBussCd\": strUnitBussCd,\n \"strSmUnitBussCd\": strSmUnitBussCd\n }\n })\n .then(function (data) {\n deferred.resolve(data.DatasetList[strDataSet]);\n }, function (ex) {\n deferred.reject(ex);\n })\n\n return deferred.promise;\n }\n \n /*==============================================================================\n * 메소드명 : ufnFindCurYyShtmCd\n * 설명 : 업무에 따른 기본 년도학기를 조회하여 가져온다.\n * 메소드인수1 : 캠퍼스구분 \n * 메소드인수2 : 대학/대학원코드 \n * 메소드인수3 : 메뉴2 \n * 메소드인수4 : 서비스 ID\n * 작성자 : 선지헌 \n =============================================================================*/\n ufnFindCurYyShtmCd(arrCampFg, arrUnivGrscCd, arrMenuNo2, strSvcId)\n { \n \tvar deferred = this.$q.defer();\n \t// trace(\"basc_unic.as ufnFindCurYyShtmCd arrCampFg=\"+arrCampFg+\", arrUnivGrscCd=\"+arrUnivGrscCd+\", arrMenuNo2=\"+arrMenuNo2+\", strSvcId=\"+strSvcId);\n \tif(arrCampFg == null || arrCampFg.length == 0) \n \t{\n \t\tarrCampFg = \"S\";\n \t}\n \t\n \tif(arrUnivGrscCd == null || arrUnivGrscCd.length == 0) {\n \t\tthis.Toast.alert(angular.translate(\"MSG000305\"));\t\t//// MSG000305 : 대학/대학원코드를 입력하세요\t\n \t\treturn false;\n \t}\n \t\n \tif(arrMenuNo2 == null || arrMenuNo2.length == 0) {\n \t\tthis.Toast.alert(angular.translate(\"MSG000306\"));\t\t//// MSG000306 : 메뉴2을 입력하세요\t\n \t\treturn false;\n \t}\n \t\n \tif (strSvcId == null || strSvcId.length == 0)\n \t{\n \t\tstrSvcId = \"FIND_CUR_YYSHTM\";\n \t}\n \t\n \tthis.commonService.httpPost({\n method: 'POST',\n url: '/uni/uni/unic/base/findCurYyShtmCd.action',\n headers: {\n 'Content-Type': 'application/json'\n },\n data: {\n \"strCampFg\": arrCampFg,\n \"strUnivGrscCd\": arrUnivGrscCd,\n \"strUnitBussCd\": arrMenuNo2\n }\n })\n .then(function (data) {\n deferred.resolve(data.DatasetList);\n }, function (ex) {\n deferred.reject(ex);\n });\n\n return deferred.promise;\n\n };\n \n \n /*==============================================================================\n * 메소드명 : ufnFindStudentSchpScheFg\n * 설명 : [학사 - 학생]업무에 대한 학사력기간을 조회한다.\n * 작성자 : 오기열\n * 메소드 인수 1 : 데이터셋 명\t\t(필수)\n * 메소드 인수 2 : 신청년도\t\t(필수 : 2008)\n * 메소드 인수 3 : 신청학기코드\t(필수 : U0002001)\n * 메소드 인수 4 : 학생학사력구분 (필수 : 공통코드)\n * 메소드 인수 5 : SVC ID (필수 : 최소 \"\")\n ==============================================================================*/\n ufnFindStudentSchpScheFg(strDataSet, strAplyYy, strAplyShtmCd, strSchpScheFg, strSvcId)\n {\n \tvar deferred = this.$q.defer();\n \t\n \t// DATASET \n \tif(strDataSet == null || strDataSet == \"\") \n \t{\n \t\tstrDataSet = \"DS_STUD001\";\n \t}\n \t\t\n \tvar strDataSetArg = strDataSet + \"=\" + \"DS_STUD001\";\n \t\n \t// SVC ID\n \tif(strSvcId == null || strSvcId == \"\") strSvcId = \"FIND_SCHE_FG\";\n\n \tthis.commonService.httpPost({\n method: 'POST',\n url: '/uni/uni/stud/base/findStudentSchpScheFg.action',\n headers: {\n 'Content-Type': 'application/json'\n },\n data: {\n \tstrAplyYy: strAplyYy\t\t\t\t// 신청년도\n \t ,\tstrAplyShtmCd: strAplyShtmCd\t// 신청학기코드\n \t ,\tstrSchpScheFg: strSchpScheFg\t// 학생학사력구분\n }\n })\n .then(function (data) {\n deferred.resolve(data.DatasetList);\n }, function (ex) {\n deferred.reject(ex);\n });\n\n return deferred.promise;\n }\n \n /*==============================================================================\n * 메소드명 : ufnFindUnicSchoolScheduleScheFg\n * 설명 : 년도학기별, 단위업무별로 학사력 유형에 따라 시작일자, 종료일자를 조회한다.\n * 작성자 : 김상봉\n * 메소드 인수 1: dataset 명\n * 메소드 인수 2: 서비스ID\n * 메소드 인수 3: 학년도\n * 메소드 인수 4: 학기코드\n * 메소드 인수 5: 대학/대학원코드\n * 메소드 인수 6: 업무코드(G_MENU_NO2)\n * 메소드 인수 7: 학사력구분\n \n ==============================================================================*/\n ufnFindUnicSchoolScheduleScheFg(DataSet, SvcId, YY, ShtmCd, UnivGrscCd, UnitBussCd, schpScheFg)\n {\n \tvar deferred = this.$q.defer();\n \t\n \tvar strDataSet = DataSet;\n var strSvcId = SvcId;\n \n \tif(strDataSet == null || strDataSet == \"\"){\n \t\tstrDataSet = \"DS_UNIC110\";\n \t}\n \tif(strSvcId == \"\"){\n \t\tstrSvcId = \"FIND_UNIC110\";\n \t}\t\n \tvar strDataSetArg = strDataSet + \"=\" + strDataSet;\n\n\t\tthis.commonService.httpPost({\n method: 'POST',\n url: '/uni/uni/unic/base/findUnicSchoolScheduleReg.action',\n headers: {\n 'Content-Type': 'application/json'\n },\n data: {\n \tstrType : \"type\"\t\t\t\n \t ,\tstrCd : \"systemCd\"\n \t ,\tstrShafScheYy: YY\t\n \t ,\tstrScheShtmCd: ShtmCd\t\n \t ,\tstrUnivGrscCd: UnivGrscCd\t\n \t ,\tstrUnitBussCd: UnitBussCd\t\n \t ,\tstrMenuNo1: this.globalDataService.getGlobalData(\"G_MENU_NO1\")\n \t ,\tschpScheFg: schpScheFg\n }\n })\n .then(function (data) {\n deferred.resolve(data.DatasetList);\n }, function (ex) {\n deferred.reject(ex);\n });\n\n return deferred.promise;\n \t\n }\n \n /*==============================================================================\n * 메소드명 : findScheduleFg\n * 설명 : 년도학기별, 단위업무별로 학사력 유형에 따라 시작일자, 종료일자를 조회한다.\n * 작성자 : 김상봉\n * 메소드 인수 1: dataset 명\n * 메소드 인수 2: 서비스ID\n * 메소드 인수 3: 학년도\n * 메소드 인수 4: 학기코드\n * 메소드 인수 5: 대학/대학원코드\n * 메소드 인수 6: 업무코드(G_MENU_NO2)\n * 메소드 인수 7: 학사력구분\n \n ==============================================================================*/\n findScheduleFg(DataSet, SvcId, YY, ShtmCd, UnivGrscCd, UnitBussCd, schpScheFg)\n {\n \tvar deferred = this.$q.defer();\n \t\n \tvar strDataSet = DataSet;\n var strSvcId = SvcId;\n \n \tif(strDataSet == null || strDataSet == \"\"){\n \t\tstrDataSet = \"DS_UNIC110\";\n \t}\n \tif(strSvcId == \"\"){\n \t\tstrSvcId = \"FIND_UNIC110\";\n \t}\t\n \tvar strDataSetArg = strDataSet + \"=\" + strDataSet;\n\n\t\tthis.commonService.httpPost({\n method: 'POST',\n url: '/uni/uni/unic/base/findUnicSchoolScheduleRegDegrCors.action',\n headers: {\n 'Content-Type': 'application/json'\n },\n data: {\n \tstrType : \"type\"\t\t\t\n \t ,\tstrCd : \"systemCd\"\n \t ,\tstrShafScheYy: YY\t\n \t ,\tstrScheShtmCd: ShtmCd\t\n \t ,\tstrUnivGrscCd: UnivGrscCd\t\n \t ,\tstrUnitBussCd: UnitBussCd\t\n \t ,\tstrMenuNo1: this.globalDataService.getGlobalData(\"G_MENU_NO1\")\n \t ,\tschpScheFg: schpScheFg\n \t ,\tstrStdNo: this.globalDataService.getGlobalData(\"G_USER_NO\") // 2013.09.02 추가 \n }\n })\n .then(function (data) {\n deferred.resolve(data.DatasetList);\n }, function (ex) {\n deferred.reject(ex);\n });\n\n return deferred.promise;\n \t\n }\n \n /*==============================================================================\n * 메소드명 : ufnFindUnicSmallUnitBusinessScheduleRegDegrCors\n * 설명 : 업무(학적/입시/수업등)에 따른 상세 업무별 기본 학년도학기를 조회하여 가져온다.\n * 메소드 인수 1 : 데이터셋 명\t\t \n * 메소드 인수 2 : 대학/대학원구분(DS03:대학, DS04001:일반대학원)\n * 메소드 인수 3 : 단위업무코드:G_MENU_NO2 \n * 메소드 인수 4 : 소단위업무코드: 공통코드(C0050; //소단위업무구분) 참조\n * 메소드인수 5 : 서비스 ID\n * 메소드 인ㅅ 6 : 학위과정코드 \n * 작성자 : 손동경 2013.08.23\n =============================================================================*/\n \n ufnFindUnicSmallUnitBusinessScheduleRegDegrCors(strDataSet, strUnivGrscCd, strUnitBussCd, strSmUnitBussCd, strSvcId)\n {\n \tvar deferred = this.$q.defer();\n \t\n \tvar strDataSetParam = strDataSet + \"=\" + strDataSet;\n \t\n \tif(strSvcId == null) strSvcId = \"FIND_SMALL_SCHEDULE\";\n\n\t\tthis.commonService.httpPost({\n method: 'POST',\n url: '/uni/uni/unic/base/findUnicSmallUnitBusinessScheduleRegDegrCors.action',\n headers: {\n 'Content-Type': 'application/json'\n },\n data: {\n \tstrUnivGrscCd: strUnivGrscCd\t\n \t ,\tstrUnitBussCd: strUnitBussCd\t\n \t ,\tstrSmUnitBussCd: strSmUnitBussCd\t\n \t ,\tstrStdNo: this.globalDataService.getGlobalData(\"G_USER_NO\")\t\n }\n })\n .then(function (data) {\n deferred.resolve(data.DatasetList);\n }, function (ex) {\n deferred.reject(ex);\n });\n\n return deferred.promise;\n \t\n }\n \n /*============================================================================\n 3. 학사 공통함수 정의\n ============================================================================*/\n /* 메소드명 : ufnUnivGrscCodeNameLoad\n * 설명 : 대학/대학원코드를 부서테이블(CMMN050)에서 조회하여 가져온다.\n * ex) 대학/대학원코드 : 대학/일반대학원/영상전문대학원/..\n * 메소드인수1 : Dataset명\n * 메소드인수2 : 캠퍼스구분 \n * 메소드인수3 : 대학(U), 대학원(G), 대학/대학원(UG)\n * 메소드인수4 : Transaction service ID\n * 반환값 : deptCd - 대학/대학원코드\n * deptKorNm - 대학/대학원명\n * 작성자 : 오기열\n *\n ============================================================================*/\n\tufnUnivGrscCodeNameLoad(arrDataSet, arrCampFg, arrUnivGrscFg, arrSvcId) {\n\tvar deferred = this.$q.defer();\n \t\n \tif(arrDataSet == null || arrDataSet.length == 0) \t\tarrDataSet = \"DS_UNIV_GRSC_CD\";\n \tif(arrCampFg == null || arrCampFg.length == 0) \t\t\tarrCampFg = this.globalDataService.getGlobalData(\"G_CAMP_CD\");\n if(arrUnivGrscFg == null || arrUnivGrscFg.length == 0) \tarrUnivGrscFg = \"UG\";\n \tif(arrSvcId == null || arrSvcId.length == 0)\t\t\tarrSvcId = \"UNIVGRSCCODE_LOAD\";\n \t\n \t\n \tthis.commonService.httpPost({\n url: '/uni/uni/unic/base/findUnivGrscCodeName.action',\n data: {\n \tstrCampFg: arrCampFg\t\n\t ,\tstrMenuNo1: arrUnivGrscFg\n }\n })\n .then(function (data) {\n deferred.resolve(data.DatasetList);\n }, function (ex) {\n deferred.reject(ex);\n });\n\n return deferred.promise;\n }\n\t\n\t \n /*==============================================================================\n * 메소드명 : ufnFindCurYyShtmCdDegrCors\n * 설명 : 업무에 따른 기본 년도학기를 조회하여 가져온다.\n * 메소드인수1 : 캠퍼스구분 \n * 메소드인수2 : 대학/대학원코드 \n * 메소드인수3 : 메뉴2 \n * 메소드인수4 : 서비스 ID\n * 작성자 : 손동경\n =============================================================================*/\n ufnFindCurYyShtmCdDegrCors(arrCampFg, arrUnivGrscCd, arrMenuNo2, strSvcId)\n {\n \tif(arrCampFg === null || arrCampFg.length == 0) \n \t{\n \t\tarrCampFg = \"S\";\n \t}\n \t\n \tif(arrUnivGrscCd === null || arrUnivGrscCd.length == 0) {\n \t\tthis.Toast.alert(angular.translate(\"MSG000305\"));\t\t//// MSG000305 : 대학/대학원코드를 입력하세요\t\n \t\treturn false;\n \t}\n \t\n \tif(arrMenuNo2 === null || arrMenuNo2.length == 0) {\n \t\tthis.Toast.alert(angular.translate(\"MSG000306\"));\t\t//// MSG000306 : 메뉴2을 입력하세요\t\n \t\treturn false;\n \t}\n \t\n \tif (strSvcId == null || strSvcId.length == 0)\n \t{\n \t\tstrSvcId = \"FIND_CUR_YYSHTM\";\n \t}\n\n \tvar deferred = this.$q.defer();\n\t\tthis.commonService.httpPost({\n method: 'POST',\n url: '/uni/uni/unic/base/findCurYyShtmCdDegrCors.action',\n headers: {\n 'Content-Type': 'application/json'\n },\n data: {\n \t\"strType\" : \"\" \t\n \t ,\t\"strCampFg\" : arrCampFg\t\n \t ,\t\"strUnivGrscCd\" : arrUnivGrscCd\n \t ,\t\"strUnitBussCd\" : arrMenuNo2\n \t ,\t\"strStdNo\" : this.globalDataService.getGlobalData(\"G_USER_NO\")\t\n }\n })\n .then(function (data) {\n deferred.resolve(data.DatasetList);\n }, function (ex) {\n deferred.reject(ex);\n });\n\n return deferred.promise;\n \t\n }\n\n}\n\nexport default bsacUnicService;","class commonService {\n constructor($http, $q, Toast, $mdDialog, Upload, $translate, constants, globalDataService, $rootScope, $window, authCommonService, $location, $ocLazyLoad) {\n 'ngInject';\n angular.extend(this, {\n $http, $q, Toast, $mdDialog, Upload, $translate, constants, globalDataService, $rootScope, $window, authCommonService, $location, $ocLazyLoad\n });\n }\n\n async dynamicLoadModule(serviceCode) {\n let module;\n switch (serviceCode) {\n case 'uni':\n module = await import(/* webpackChunkName: \"../dist/uni\" */ '../../components/uni');\n this.$ocLazyLoad.inject(module.default);\n break;\n case 'pat':\n module = await import(/* webpackChunkName: \"../dist/pat\" */ '../../components/pat');\n this.$ocLazyLoad.inject(module.default);\n break;\n case 'gun':\n module = await import(/* webpackChunkName: \"../dist/gun\" */ '../../components/gun');\n this.$ocLazyLoad.inject(module.default);\n break;\n case 'haksa':\n module = await import(/* webpackChunkName: \"../dist/haksa\" */ '../../components/haksa');\n this.$ocLazyLoad.inject(module.default);\n break;\n }\n }\n\n // 외부인에서 사용하는 것인지 체크후 isPublic에 결과 등록\n isPublic() {\n const match = this.$location.$$absUrl.match(/\\w+.html/i);\n const match2 = this.$location.absUrl();\n if(match && match[0] === 'public.html')\n {\n \treturn true;\n \t\n \t/*if (match2.indexOf('e020402') !== -1)\n \t{\n \t\treturn false;\n \t}\n \telse\n \t{\n \t\treturn true;\n \t}*/\n }\n else return false;\n }\n\n isStudent() {\n const roleCd = this.globalDataService.getGlobalData(\"G_ROLE_CD\") && this.globalDataService.getGlobalData(\"G_ROLE_CD\").substring(0,1);\n if (roleCd === 'S' || roleCd === 'V') {\n return true;\n }\n else\n return false;\n }\n\n setPublicTitle(scope, publicTitle) {\n scope.$emit(\"publicTitle\", publicTitle);\n }\n\n setI18nData(key, langObj) {\n localStorage.setItem('NG_TRANSLATE_LANG_DATA_' + key, JSON.stringify(langObj));\n }\n\n getI18nData(key) {\n const data = localStorage.getItem('NG_TRANSLATE_LANG_DATA_' + key);\n return data ? angular.toJson(data) : \"\";\n }\n\n getCurrentLangCodeInLocalStorage() {\n return localStorage.getItem('NG_TRANSLATE_LANG_KEY');\n }\n\n setCurrentLangCodeInLocalStorage(langCode) {\n localStorage.setItem('NG_TRANSLATE_LANG_KEY', langCode);\n }\n\n getSelectedLangCode(){\n const {langCode, ajaxCode} = this.constants.i18nCode;\n\n let selectedLang = this.$translate.use();\n if(\"null\" !== this.getCurrentLangCodeInLocalStorage() && this.getCurrentLangCodeInLocalStorage()) selectedLang = this.getCurrentLangCodeInLocalStorage();\n else if(\"null\" === selectedLang || !selectedLang) {\n selectedLang = langCode.korean;\n this.$translate.use(langCode.korean);\n }\n\n for(const code in langCode){\n let langCodeValue = langCode[code];\n if(selectedLang === langCodeValue) return ajaxCode[langCodeValue];\n }\n\n throw new Error(\"not Match lang Code\");\n }\n\n checkParam(datasetList){\n for(const dataset in datasetList){\n datasetList[dataset].forEach(function (rowObj) {\n for(const field in rowObj){\n const value = rowObj[field];\n if(value === null) {\n rowObj[field] = \"\";\n }\n }\n }\n )\n }\n }\n\n getSystemCd(code){\n switch (code) {\n case \"S\" :\n return \"U\";\n case \"V\" :\n return \"U\";\n case \"H\" :\n return \"G\";\n default :\n return code;\n }\n }\n\n getSystemCdReverse(code){\n switch (code) {\n case \"S\" :\n return \"V\";\n case \"U\" :\n return \"V\";\n case \"G\" :\n return \"H\";\n default :\n return code;\n }\n }\n\n //학사용 UnitBussCd 변경 함수\n convertUnitBussCdForHaksa(unitBussCd) {\n switch (unitBussCd) {\n case \"31\": return \"01\"; // 학적\n case \"32\": return \"02\"; // 교과수업(Cls.Info.)\n case \"33\": return \"03\"; // 성적\n case \"34\": return \"05\"; // 장학\n case \"34\": return \"06\"; // 등록\n case \"35\": return \"07\"; // 교직\n case \"33\": return \"08\"; // 졸업\n case \"36\": return \"10\"; // 학생\n case \"31\": return \"12\"; // 국제협력\n case \"35\": return \"15\"; // 공학인증\n case \"37\": return \"18\"; // 통합상담\n case \"36\": return \"20\"; // 강의실예약\n case \"36\": return \"23\"; // 생활관(Dorm.)\n case \"37\": return \"24\"; // 다산학부대학\n case \"32\": return \"26\"; // 비교과\n default:\n return unitBussCd;\n }\n }\n\n //대학원용 UnitBussCd 변경 함수ㄴ\n convertUnitBussCdForGrad(unitBussCd) {\n switch (unitBussCd) {\n case \"31\" : return \"01\";\t// 학적(Personal Info.)\n case \"32\" : return \"02\";\t// 교과수업(Class Info.)\n case \"33\" : return \"03\";\t// 성적(Grades)\n case \"34\" : return \"04\";\t// 장학\n case \"34\" : return \"05\";\t// 등록(Reg.)\n case \"33\" : return \"07\";\t// 졸업(Gradu.)\n case \"37\" : return \"10\";\t// 통합상담\n case \"36\" : return \"11\";\t// 학생\n case \"36\" : return \"23\";\t// 생활관(Dorm.)\n case \"37\" : return \"24\";\t// 기초교육대학\n case \"36\" : return \"25\";\t// 강의실예약\n case \"35\" : return \"26\";\t// 비교과\n\n default:\n return unitBussCd;\n }\n }\n\n getUnitBussCdFrom(pmgCd) {\n return pmgCd.substr(1,2);\n }\n\n convertUnitBussCd(params) {\n if(!params['strUnitBussCd']) return;\n\n const menuPgmCd = this.globalDataService.getGlobalData(\"G_MENU_NO4\");\n if (menuPgmCd && menuPgmCd.length < 3) return;\n\n // 진로설정 성적조회(U190802), 학생경력관리(U190803) 일 때 설정된 변환 안함\n // 2023.10.04 생활관현금영수증신청(u230104, G230104(대학원)) 일때 변환 안함\n if(['U190802', 'U190803', 'U230104', 'G230104'].some(pgmCd=>pgmCd === menuPgmCd)) return;\n\n // (학부졸업요건 신청(논문 등)[\"U330104\"] : \"08\"으로 고정함\n if(\"U330104\" === menuPgmCd) {\n params['strUnitBussCd'] = \"08\";\n return;\n }\n \n // 중간설문응답[\"U151610\"] : \"02\"로 고정함\n if(\"U151610\" === menuPgmCd) {\n params['strUnitBussCd'] = \"02\";\n return;\n }\n\n // 예약상담 및 온라인 상담 신청서 등록 || 인증/교직 - 포트폴리오 관리 : \"01\"으로 고정함\n if(\"U180101\" === menuPgmCd || \"U151611\" === menuPgmCd) {\n params['strUnitBussCd'] = \"01\";\n return;\n }\n \n // 장학/등록 > 분할납부신청 : \"06\"으로 고정함\n if(\"U340104\" === menuPgmCd) {\n params['strUnitBussCd'] = \"06\";\n return;\n }\n \n // (국내교류학점신청[\"U310101\"] : \"03\"으로 고정함\n if(\"U310101\" === menuPgmCd) {\n params['strUnitBussCd'] = \"03\";\n return;\n }\n \n const changeUnitBussCd = this.getUnitBussCdFrom(menuPgmCd);\n\n // params['strUnitBussCd'] = systemCd === 'S' ? this.convertUnitBussCdForHaksa(strUnitBussCd) : this.convertUnitBussCdForGrad(strUnitBussCd);\n params['strUnitBussCd'] = changeUnitBussCd;\n }\n \n convertMenuNm(params) {\n if(!params['strMenuNm']) return;\n\n const menuPgmCd = this.globalDataService.getGlobalData(\"G_MENU_NO4\");\n if (menuPgmCd && menuPgmCd.length < 3) return;\n \n // 면담시간예약(글쓰기튜터, AWAC튜터) : \"24\"로 고정함\n if(['U245801', 'U249301'].some(pgmCd=>pgmCd === menuPgmCd)) {\n \tparams['strMenuNm'] = \"24\";\n \treturn;\n }\n }\n\n /*\n 학사코드 프로그램코드 (S)를 V로 변경\n */\n convetPgmCdToHaksaPgmCd(pmgCd) {\n return this.getSystemCdReverse(pmgCd.substring(0, 1)) + pmgCd.substring(1);\n }\n\n \n httpPost(req) {\n var deferred = this.$q.defer();\n\n if(req.list){\n this.checkParam(req.list);\n }\n\n if(req.data && !this.isPublic()) { // 새로운 메뉴작업으로 인한 unitBussCd 변경로직 추가\n this.convertUnitBussCd(req.data);\n this.convertMenuNm(req.data);\n }\n\n console.time(req.url);\n this.$http({\n method: req.method || 'POST',\n url: '/nt/cvt.do',\n headers: req.headers || {\n 'Content-Type': 'application/json'\n },\n data: {\n \"url\": req.url,\n \"param\" : req.data,\n \"list\" : req.list\n }\n })\n .then(response=>{\n console.timeEnd(req.url);\n if(response.data.VariableList.ErrorCode === '-1'){\n console.error(response);\n this.Toast.alert(response.data.VariableList.ErrorMsg);\n deferred.reject(response.data.VariableList);\n }else{\n deferred.resolve(response.data);\n }\n },ex=>{\n console.timeEnd(req.url);\n this.catchException(ex);\n });\n\n return deferred.promise;\n }\n\n /*catchException(ex) {\n const msg = ex.data && ex.data.ErrorMsg ? ex.data.ErrorMsg : ex.data || ex.message;\n const errorCode = ex.data && ex.data.ErrorCode ? ex.data.ErrorCode : '';\n console.error(ex);\n if(errorCode === \"401\") {\n this.$window.location.href = '/auth/SSOLogin.do';\n } else if (errorCode === \"402\") {\n this.$window.location.href = '/auth/SSOLogout.do';\n } else if (errorCode === \"403\") {\n this.authCommonService.clearSession();\n } else if (errorCode === \"500\") {\n this.Toast.alert(\"Internal Server Error\");\n }\n else {\n this.Toast.alert(msg);\n }\n }*/\n\n\n // 서버에서 front-end 설정정보를 가져온다\n async getClientConstants() {\n try{\n const response = await this.$http({\n method: 'POST',\n url: '/client/constants.do'\n });\n\n return response.data;\n }catch (ex) {\n console.error(ex);\n const {tabInfo, report, ssoUseYn} = this.constants;\n return {tabInfo, report, ssoUseYn};\n }\n }\n\n // 서버에서 front-end 설정정보를 가져온다\n async encryptReportParam(params) {\n try{\n const response = await this.$http({\n method: 'POST',\n url: '/client/encryptReportParam.do',\n data : params\n });\n\n return response.data;\n }catch (ex) {\n console.error(ex);\n const {tabInfo, report, ssoUseYn} = this.constants;\n return {tabInfo, report, ssoUseYn};\n }\n }\n\n async upload(file){\n try{\n\n if(!file) throw new Error('');\n\n const resp = await this.Upload.upload({\n url: '/nt/upload.do',\n data: {file: this.Upload.rename(file, encodeURI(file.name))}\n });\n\n const dsFile = resp.data.DatasetList.DS_FILE[0];\n dsFile.fileName = decodeURI(dsFile.fileName);\n return dsFile;\n\n }catch (e) {\n this.Toast.alert(`fail upload : ${e.message}`);\n }\n }\n\n download(req){\n this.$http({\n method: 'POST',\n url: '/nt/download.do',\n headers: {\n 'Content-Type': 'application/json'\n },\n data: {\n \"url\": req.url,\n \"param\" : req.data\n },\n responseType: 'arraybuffer'\n })\n .then(response=>{\n const file = new Blob([response.data]);\n const disposition = /=(.*)/.exec(response.headers(\"Content-Disposition\"))[1];\n const filename = decodeURI(disposition);\n\n if(window.navigator.msSaveOrOpenBlob) //IE & Edge\n {\n //msSaveBlob only available for IE & Edge\n window.navigator.msSaveBlob(file, filename);\n }\n else //Chrome & FF\n {\n var a = document.createElement(\"a\");\n var fileURL = window.URL.createObjectURL(file);\n a.href = fileURL;\n a.download = filename;\n a.click();\n }\n },ex=>{\n this.showFileException(ex);\n });\n }\n \n async imageLoader(req){\n \ttry{\n \t\tconst response = await this.$http({\n method: 'POST',\n url: '/nt/download.do',\n headers: {\n 'Content-Type': 'application/json'\n },\n data: {\n \"url\": req.url,\n \"param\" : req.data\n },\n responseType: 'arraybuffer'\n });\n \n \t\tconst file = new Blob([response.data]);\n \t\treturn URL.createObjectURL(file);\n \t\t\n \t}catch(ex){\n \t\tthis.showFileException(ex);\n \t}\n }\n\n showFileException(ex) {\n const error = ex.data && ex.data.ErrorMsg ? ex.data.ErrorMsg : ex.data;\n if(error instanceof ArrayBuffer){\n const decodedString = String.fromCharCode.apply(null, new Uint8Array(error));\n const msg = JSON.parse(decodedString);\n this.Toast.alert(msg.ErrorMsg);\n }else{\n this.Toast.alert(error);\n }\n }\n\n async downloadUrl(downloadUrl, fileName) {\n try {\n const response = await this.$http({\n method: 'POST',\n url: '/nt/download.do',\n headers: {\n 'Content-Type': 'application/json'\n },\n data: {\n \"url\": downloadUrl\n },\n responseType: 'arraybuffer'\n });\n const file = new Blob([response.data]);\n //const filename = /=(.*)/.exec(response.headers(\"Content-Disposition\"))[1]\n\n if (window.navigator.msSaveOrOpenBlob) { // IE & Edge\n //msSaveBlob only available for IE & Edge\n window.navigator.msSaveBlob(file, fileName);\n } else { // Chrome & FF\n const a = document.createElement(\"a\");\n const fileURL = window.URL.createObjectURL(file);\n a.href = fileURL;\n a.download = fileName;\n a.click();\n }\n } catch (ex) {\n this.showFileException(ex);\n }\n }\n\n convertKeyToName(showDataList, key, cmmnCd = \"cmmnCd\", korNm = \"korNm\") {\n if(!key) return \"\";\n\n const showData = showDataList.find(function (data) {\n return data[cmmnCd] === key;\n }) \n if(showData === undefined) return '';\n\n return showData[korNm];\n }\n \n convertKeyToNamelang(showDataList, key, cmmnCd = \"cmmnCd\", korNm) {\n if(!key) return \"\";\n\n const showData = showDataList.find(function (data) {\n return data[cmmnCd] === key;\n })\n \n //페이지 언어 설정에 따라 리텀값 바꿔줌\n const langCd = this.getSelectedLangCode();\n \n if(langCd ===\"1033\")\n {\n \tkorNm = \"engNm\";\n }\n else if(langCd ===\"1042\")\n {\n \tkorNm = \"korNm\";\n }\n \n if(showData === undefined) return '';\n\n return showData[korNm];\n }\n \n //단순 문자열 반환용\n convertStringTolang(KorNm , EngNm) {\n\n //페이지 언어 설정에 따라 리텀값 바꿔줌\n const langCd = this.getSelectedLangCode();\n var result = \"\";\n\n if(langCd ===\"1033\")\n {\n \tresult = EngNm;\n }\n else if(langCd ===\"1042\")\n {\n \tresult = KorNm;\n } \n\n return result;\n }\n\n convertToComma(str) {\n if(!str) return str;\n\n return str.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n }\n\n isInValidForm(form) {\n if(form != undefined && form.$invalid){\n var msg, focus;\n if(form.$error.date !== undefined){\n msg = angular.translate(\"MSG000307\");\t\t//// MSG000307 : 날짜 형식이 유효하지 않습니다.\t\n focus = form.$error.date[form.$error.date.length-1].$name;\n } else if(form.$error.required !== undefined){\n msg = angular.translate(\"MSG000308\");\t\t//// MSG000308 : 필수 입력입니다.\t\n focus = form.$error.required[form.$error.required.length-1].$name;\n } else if(form.$error.maxlength !== undefined){\n msg = angular.translate(\"MSG000309\");\t\t//// MSG000309 : 값이 큽니다.\t\n focus = form.$error.maxlength[form.$error.maxlength.length-1].$name;\n } else if(form.$error.parse !== undefined){\n msg = angular.translate(\"MSG000308\");\t\t//// MSG000308 : 필수 입력입니다.\t\n focus = form.$error.parse[form.$error.parse.length-1].$name;\n } else if(form.$error.fastDate !== undefined){\n msg = angular.translate(\"MSG000310\");\t\t//// MSG000310 : 시작일자가 종료일보다 빠릅니다.\t\n focus = form.$error.fastDate[form.$error.fastDate.length-1].$name;\n }\n\n return {\n result : true,\n msg : msg,\n focus : focus\n };\n }\n\n return {\n result: false\n };\n }\n\n getMsgFromCode(code)\n {\n let retMsg = \"\";\n switch ( code )\n {\n\n case \"MSG_LOAD01\" : retMsg = angular.translate(\"MSG000311\");\tbreak;\t\t//// MSG000311 : 화면이 로드 되었습니다.\n\n case \"MSG_FIND01\" : retMsg = angular.translate(\"MSG000312\");\tbreak;\t\t//// MSG000312 : 조회중입니다. 잠시만 기다리세요.\t\n case \"MSG_FIND02\" : retMsg = angular.translate(\"MSG000313\");\tbreak;\t\t//// MSG000313 : 조회 완료 되었습니다.\t\n case \"MSG_FIND03\" : retMsg = angular.translate(\"MSG000314\");\tbreak;\t\t//// MSG000314 : 조회 중 오류가 발생했습니다.\t\n case \"MSG_FIND04\" : retMsg = angular.translate(\"MSG000315\");\tbreak;\t\t//// MSG000315 : 해당 데이터가 없습니다.\t\n\n case \"MSG_DEL01\" : retMsg = angular.translate(\"MSG000316\");\tbreak;\t\t//// MSG000316 : 삭제중 입니다. 잠시만 기다리세요.\t\n case \"MSG_DEL02\" : retMsg = angular.translate(\"MSG000317\");\tbreak;\t\t//// MSG000317 : 삭제 완료 되었습니다.\t\n case \"MSG_DEL03\" : retMsg = angular.translate(\"MSG000318\");\tbreak;\t\t//// MSG000318 : 삭제 중 오류가 발생했습니다.\t\n case \"MSG_DEL04\" : retMsg = angular.translate(\"MSG000319\");\tbreak;\t\t//// MSG000319 : 삭제할 항목을 선택하여 주십시오.\t\n case \"MSG_DEL05\" : retMsg = angular.translate(\"MSG000320\");\tbreak;\t\t//// MSG000320 : 삭제 하시겠습니까? \\n저장을 누르시면 완전히 삭제가됩니다.\t\n \n case \"MSG_CANCEL01\" : retMsg = angular.translate(\"MSG000329\");\tbreak;\t\t//// MSG000329 : 작업을 취소 하였습니다.\t\n case \"MSG_CANCEL02\" :\t retMsg = angular.translate(\"MSG004062\");\tbreak; //// MSG004062 : 취소가 완료되었습니다 \n case \"MSG_CANCEL03\" : retMsg = angular.translate(\"MSG000756\"); break;\t\t//// MSG000756 : 취소 하시겠습니까?\n \n case \"MSG_SAVE01\" : retMsg = angular.translate(\"MSG000321\");\tbreak;\t\t//// MSG000321 : 저장중입니다. 잠시만 기다리세요.\t\n case \"MSG_SAVE02\" : retMsg = angular.translate(\"MSG000322\");\tbreak;\t\t//// MSG000322 : 저장 완료 되었습니다.\t\n case \"MSG_SAVE03\" : retMsg = angular.translate(\"MSG000323\");\tbreak;\t\t//// MSG000323 : 저장 중 오류가 발생했습니다.\t\n case \"MSG_SAVE04\" : retMsg = angular.translate(\"MSG000324\");\tbreak;\t\t//// MSG000324 : 등록요청 완료 하였습니다.\t\n case \"MSG_SAVE05\" : retMsg = angular.translate(\"MSG000325\"); \tbreak;\t\t//// MSG000325 : 변경된 작업이 있습니다. 저장하시겠습니까?\t\n case \"MSG_SAVE06\" : retMsg = angular.translate(\"MSG000326\");\tbreak;\t\t//// MSG000326 : 변경된 작업이 없습니다.\t\n\n case \"MSG_APPY01\" : retMsg = angular.translate(\"MSG000327\");\tbreak;\t\t//// MSG000327 : 신청 완료 되었습니다.\t\n case \"MSG_APPY02\"\t :\t retMsg = angular.translate(\"MSG002672\");\tbreak;\t\t//// MSG002672 : 신청 하시겠습니까?\t \n \n case \"MSG_ADD01\" : retMsg = angular.translate(\"MSG000328\");\tbreak;\t\t//// MSG000328 : 신규 등록 합니다.\t\n case \"MSG_EXCEL01\" : retMsg = angular.translate(\"MSG000330\");\tbreak;\t\t//// MSG000330 : 조회된 데이터를 EXCEL로 변환 합니다.\t\n case \"MSG_EXCEL02\" : retMsg = angular.translate(\"MSG000331\");\tbreak;\t\t//// MSG000331 : 변환할 데이터가 없습니다.\t\n case \"MSG_CLOSE01\" : retMsg = angular.translate(\"MSG000332\");\tbreak;\t\t//// MSG000332 : 화면을 종료 합니다.\t\n case \"MSG_HELP01\" : retMsg = angular.translate(\"MSG000333\");\tbreak;\t\t//// MSG000333 : 도움말 화면을 호출하였습니다,\t\n case \"MSG_PRINT01\" : retMsg = angular.translate(\"MSG000334\");\tbreak;\t\t//// MSG000334 : 미리보기 화면을 띄움니다.\t\n case \"MSG_PRINT02\" : retMsg = angular.translate(\"MSG000335\");\tbreak;\t\t//// MSG000335 : 조회 내역을 출력 합니다.\t\n case \"MSG_PRINT03\" : retMsg = angular.translate(\"MSG000336\");\tbreak;\t\t//// MSG000336 : 출력 작업중 오류가 발생했습니다.\t\n case \"MSG_PRINT04\" : retMsg = angular.translate(\"MSG000337\");\tbreak;\t\t//// MSG000337 : 출력 작업이 완료 돼었습니다.\t\n case \"MSG_PROCESS01\" : retMsg = angular.translate(\"MSG000338\");\tbreak;\t\t//// MSG000338 : 처리되었습니다.\t\n\n case \"MSG_VALID01\" : retMsg = angular.translate(\"MSG000339\");\tbreak;\t\t//// MSG000339 : 지금은 시스템 오픈 일정에 해당하지 않습니다.\\n따라서 데이터의 추가 및 삭제, 수정은 수행할 수 없습니다!\t\n /**************************************************************/\n\n /************ 프레임웍 에러코드 정의 **************************/\n case \"FW_ERR00\" : retMsg = angular.translate(\"MSG000340\");\tbreak;\t\t//// MSG000340 : 요청사항 수행시 예외사항이 발생하였습니다.\\n자세한 사항은 담당자에게 문의하여주시기 바랍니다.\t\n case \"FW_ERR01\" : retMsg = angular.translate(\"MSG000341\");\tbreak;\t\t//// MSG000341 : 요청사항 수행시 비즈니스 예외사항이 발생하였습니다.\\n자세한 사항은 담당자에게 문의하여주시기 바랍니다.\t\n case \"FW_ERR02\" : retMsg = angular.translate(\"MSG000342\");\tbreak;\t\t//// MSG000342 : 입력시 예외사항이 발생하였습니다.\\n자세한 사항은 담당자에게 문의하여주시기 바랍니다.\t\n case \"FW_ERR03\" : retMsg = angular.translate(\"MSG000343\");\tbreak;\t\t//// MSG000343 : 입력하시려는 키가 중복되었습니다.\\n자세한 사항은 담당자에게 문의하여주시기 바랍니다.\t\n case \"FW_ERR04\" : retMsg = angular.translate(\"MSG000344\");\tbreak;\t\t//// MSG000344 : 수정시 예외사항이 발생하였습니다.\\n자세한 사항은 담당자에게 문의하여주시기 바랍니다.\t\n case \"FW_ERR05\" : retMsg = angular.translate(\"MSG000345\");\tbreak;\t\t//// MSG000345 : 삭제시 예외사항이 발생하였습니다.\\n자세한 사항은 담당자에게 문의하여주시기 바랍니다.\t\n case \"FW_ERR06\" : retMsg = angular.translate(\"MSG000346\");\tbreak;\t\t//// MSG000346 : 수정 또는 삭제시 예외사항이 발생하였습니다.\\n자세한 사항은 담당자에게 문의하여주시기 바랍니다.\t\n case \"FW_ERR07\" : retMsg = angular.translate(\"MSG000347\");\tbreak;\t\t//// MSG000347 : 요청사항을 DB에 저장할 수 없습니다.\\n자세한 사항은 담당자에게 문의하여주시기 바랍니다.\t\n case \"FW_ERR08\" : retMsg = angular.translate(\"MSG000348\");\tbreak;\t\t//// MSG000348 : 서버 작업중으로 인하여\\n해당프로그램에 대해서 작업할 수 없습니다.\\n잠시후 다시 시도해 주시기 바랍니다.\t\n case \"FW_ERR09\" : retMsg = angular.translate(\"MSG000349\");\tbreak;\t\t//// MSG000349 : 잘못된 메서드 호출 입니다.(TaskID에 해당하는 메서드가 없습니다.\t\n /*************************************************************/\n\n /************ 공통업무 에러코드 정의 **************************/\n case \"CMMNSHCO01\" : retMsg = angular.translate(\"MSG000350\");\tbreak;\t\t//// MSG000350 : 학교코드 등록시 에러가 발생하였습니다.\t\n case \"CMMNSHCO02\" : retMsg = angular.translate(\"MSG000351\");\tbreak;\t\t//// MSG000351 : 학교코드 수정시 에러가 발생하였습니다.\t\n case \"CMMNSHCO03\" : retMsg = angular.translate(\"MSG000352\");\tbreak;\t\t//// MSG000352 : 학교코드 삭제시 에러가 발생하였습니다.\t\n case \"CMMNSHCO04\" : retMsg = angular.translate(\"MSG000353\");\tbreak;\t\t//// MSG000353 : 수정할 학교코드를 찾지못하였습니다.\t\n case \"CMMNSHCO05\" : retMsg = angular.translate(\"MSG000354\");\tbreak;\t\t//// MSG000354 : 학교코드가 중복되었습니다.\t\n case \"CMMNSHCO06\" : retMsg = angular.translate(\"MSG000355\");\tbreak;\t\t//// MSG000355 : 요청사항 수행중 예외사항이 발생하였습니다.\t\n\n /*============================================================================\n 1. 학사 메세지 정의\n ============================================================================*/\n /************ 학사업무 에러코드 정의 **************************/\n case \"MSG_UNIC01\" : retMsg = angular.translate(\"MSG000356\"); /** 박경대 등록 **/\t\t//// MSG000356 : 파일을 업로드 하지 않았습니다.\t\n case \"MSG_UNIC02\" : retMsg = angular.translate(\"MSG000357\"); /** 박경대 등록 **/\t\t//// MSG000357 : 업로드 된 파일에 데이터가 존재하지 않습니다.\t\n case \"MSG_UNIC03\" : retMsg = angular.translate(\"MSG000358\"); /** 박경대 등록 **/\t\t//// MSG000358 : 대상건수가 존재하지 않습니다.\t\n\n /************** 교과 수업 *************************************/\n case \"MSG_COUR01\" : retMsg = angular.translate(\"MSG000359\"); /** 선지헌 등록 **/\t\t//// MSG000359 : 교과목 조회 조건은 국문 2글자 영문 4글자 이상 입력해야 합니다!\t\n case \"MSG_COUR02\" : retMsg = angular.translate(\"MSG000360\"); /** 오기열 등록 - CheckBox 항목 미선택시 메세지 **/\t\t//// MSG000360 : 항목을 선택하여 주십시요.\t\n case \"MSG_COUR03\" : retMsg = angular.translate(\"MSG000361\"); /** 오기열 등록 **/\t\t//// MSG000361 : [승인]된 교과과정은 수정처리가 불가능 합니다.\t\n case \"MSG_COUR04\" : retMsg = angular.translate(\"MSG000362\"); /** 오기열 등록 **/\t\t//// MSG000362 : 변경된 내용이 없습니다.\t\n case \"MSG_COUR05\" : retMsg = angular.translate(\"MSG000363\"); /** 선지헌 등록 **/\t\t//// MSG000363 : 개인번호나 교원명은 필수조회조건입니다!\t\n case \"MSG_COUR06\" : retMsg = angular.translate(\"MSG000364\"); /** 오기열 등록 **/\t\t//// MSG000364 : 동일한 분반으로 합반이 되어있습니다.\t\n case \"MSG_COUR07\" : retMsg = angular.translate(\"MSG000365\"); /** 선지헌 등록 **/\t\t//// MSG000365 : 교원번호, 교원명, 학수번호, 교과목명중 최소 하나의 조회조건이 필요합니다!\t\n case \"MSG_COUR08\" : retMsg = angular.translate(\"MSG000366\");\t\t/** 선지헌 등록 **/\t\t//// MSG000366 : 미공시된 강의계획서는 조회할 수 없습니다!\t\n case \"MSG_COUR09\" : retMsg = angular.translate(\"MSG000367\");\t\t\t\t/** 선지헌 등록 **/\t\t//// MSG000367 : 처리할 항목을 선택하여 주십시오.\t\n case \"MSG_COUR10\" : retMsg = angular.translate(\"MSG000368\");\t/** 선지헌 등록 **/\t\t//// MSG000368 : 처리 되었습니다. 저장버튼을 누르면 DB에 반영됩니다.\t\n case \"MSG_COUR11\" : retMsg = angular.translate(\"MSG000369\");\t/** 선지헌 등록 **/\t\t//// MSG000369 : 강의시간표를 조회하여 강의를 선택하여 주십시오\t\n case \"MSG_COUR12\" : retMsg = angular.translate(\"MSG000370\");\t/** 선지헌 등록 **/\t\t//// MSG000370 : 담당교원 조회 조건은 국문 2글자 영문 4글자 이상 입력해야 합니다!\t\n case \"MSG_COUR13\" : retMsg = angular.translate(\"MSG000371\");\t\t\t\t\t\t/** 선지헌 등록 **/\t\t//// MSG000371 : 복원 완료 되었습니다.\t\n /**************************************************************/\n\n case \"MSG_GRDT01\" : retMsg = angular.translate(\"MSG000372\");\t\t//// MSG000372 : 학번은 필수 조회조건입니다!\t\n case \"MSG_GRDT02\" : retMsg = angular.translate(\"MSG000373\");\t\t//// MSG000373 : 먼저 조회를 수행하여 주십시오!\t\n }\n return retMsg;\n }\n\n showZipPopup(){\n return this.$mdDialog.show({\n template: ``,\n parent: angular.element('#pageContainer'),\n disableParentScroll: false,\n clickOutsideToClose:true,\n fullscreen: false // Only for -xs, -sm breakpoints.\n })\n }\n\n showUnivPopup(){\n return this.$mdDialog.show({\n template: '',\n parent: document.querySelector('md-tabs-content-wrapper'),\n disableParentScroll: false,\n clickOutsideToClose:true,\n multiple:true,\n fullscreen: false // Only for -xs, -sm breakpoints.\n })\n }\n\n messagePopup() {\n return this.$mdDialog.show({\n template: '',\n parent: document.querySelector('md-tabs-content-wrapper'),\n disableParentScroll: false,\n clickOutsideToClose:true,\n multiple:true,\n fullscreen: false // Only for -xs, -sm breakpoints.\n })\n }\n\n showNoticePopup(popupHtml, pgmNm){\n return this.$mdDialog.show({\n template: ``,\n parent: angular.element('#pageContainer'),\n disableParentScroll: false,\n clickOutsideToClose:true,\n fullscreen: false, // Only for -xs, -sm breakpoints.\n controller : /* @ngInject */ $scope=>{\n $scope.popupHtml = popupHtml;\n $scope.pgmNm = pgmNm;\n }\n })\n }\n \n doApplyScope(scope){\n \tif (scope.$$phase !== '$apply' && scope.$$phase !== '$digest' ) {\n scope.$apply();\n }\n }\n}\n\nclass globalDataService{\n constructor($state, $rootScope) {\n 'ngInject';\n this.$state = $state;\n this.$rootScope = $rootScope;\n this.GLOBAL = \"GLOBAL\";\n }\n\n setGlobalDataList(dataList) {\n sessionStorage.setItem(this.GLOBAL, angular.toJson(dataList));\n }\n\n getGlobalDataList() {\n const json = sessionStorage.getItem(this.GLOBAL);\n if(json == undefined) return null;\n\n return angular.fromJson(json)\n }\n isLogin () {\n return sessionStorage.getItem(this.GLOBAL) != undefined;\n }\n\n initGlobalDataList(dataList) {\n\n if (dataList.dateCheck === \"NO\") {\n this.Toast.alert(angular.translate(\"MSG000374\"));\t\t//// MSG000374 : 현재 사용기간이 아닙니다!\t\n return;\n }\n\n if (dataList.idSt === \"C0006001\") {\n this.Toast.alert(angular.translate(\"MSG000375\"));\t\t//// MSG000375 : 현재 신청하신 ID를 관리자가 등록중입니다!\t\n return;\n }\n\n if ( dataList.pwdSt !== \"OK\" || dataList.dateCheck !== \"OK\" || dataList.idSt !== \"C0006002\" ) {\n return;\n }\n\n var global = {\n G_SYS_CAMP_FG: \"S\",\n G_MNG_DEPT_FG: \"N\",\n\n G_LOGIN_CAMP_FG: dataList.loginCampFg,\n G_USER_ID: dataList.userId,\n G_USER_NM: dataList.userNm,\n G_USER_NO: dataList.userNo,\n G_ROLE_CD: dataList.roleCd,\n\n G_CAMP_CD: dataList.campCd,\n G_CAMP_FG: dataList.campFg,\n G_USER_FG_CD: dataList.userFg,\n G_EMAIL: dataList.email1,\n G_DEPT_CD: dataList.deptCd,\n\n G_DEPT_KOR_NM: dataList.deptKorNm,\n G_DEPT_TT_KOR_NM: dataList.deptTtKorNm,\n G_NOW_SUST_CD: dataList.sustCd,\n G_NOW_COLG_CD: dataList.colgCd,\n G_PLURAL_FG: dataList.pluralFg,\n\n G_HAND_NO: dataList.handNo,\n G_MNG_DEPT_CD: dataList.mngDeptCd,\n G_IP_ADDRESS: dataList.ipAddress\n }\n\n if (global.G_MNG_DEPT_CD != \"\" && global.G_MNG_DEPT_CD != \"\" && global.G_CAMP_CD != \"\") {\n //서울은 관리부서 여부, 경주는 겸직부서여부를 관리부서 여부에 세팅\n global.G_MNG_DEPT_FG = \"Y\";\n }\n if (global.G_CAMP_CD == \"K\") {\n global.G_MNG_DEPT_FG = global.G_PLURAL_FG;\n }\n\n this.setGlobalDataList(global);\n }\n\n setGlobalData(data) {\n var globalData = this.getGlobalDataList();\n angular.extend(globalData, data);\n this.setGlobalDataList(globalData);\n }\n\n getGlobalData(key) {\n var globalData = this.getGlobalDataList();\n return globalData[key];\n }\n\n clearGlobalData(){\n sessionStorage.clear();\n }\n \n \n}\nexport {\n commonService,\n globalDataService\n}","class AbeeCommonService {\n constructor($http, $q, commonService, globalDataService) {\n 'ngInject';\n this.$http = $http;\n this.$q = $q;\n this.commonService = commonService;\n this.globalDataService = globalDataService;\n }\n\n /*==============================================================================\n * 메소드명 : fnFindProgramList\n * 설명 : 로그인자에 따른 프로그램(심화 과정)명 추출\n * 작성자 : 이주영 \n * 메소드 인수 1 : 데이터셋 명\t\t(필수)\n * 메소드 인수 2 : 캠퍼스 구분\t\t(필수 : \"S\":서울, \"K\":경주, \"T\":전체)\n * 메소드 인수 3 : 출력 유형 \t\t(필수): 1:전체를 포함한 과정전체, 1:전체를 포함한 로그인자의과정 3.과정전체(기본값존재), 4.로그인자의 과정\n * 메소드 인수 4 : 사용여부 \t\t(필수 : A:전체, Y:사용중인Data만, N:사용 불가인Data만)\n * 메소드 인수 5 : 개별 서비스ID\n \n * 리턴컬럼 :\n \t\t1. deepCorsNo\n 2. deepCorsKorNm\n\n ==============================================================================*/\n fnFindProgramList(strDataSet, strCampFg, strDisplayType, strBussCd, strSvcId)\n { \n\t var deferred = this.$q.defer();\n \tvar strDisplayLvl= \"\";\n \tvar strBussFg =\"\";\n \tvar strUserFg =\"\";\n \t/*\n \tfor(var i:int = 0 ; i < DataSet(Global.getVariable(\"DS_UDRIMS_USER_ROLE\")).getRowCount() ; i++) {\n \t\t//strRole[i] = DataSet(Global.getVariable(\"DS_UDRIMS_USER_ROLE\")).GetColumn(i, \"roleCd\");\n \t\t//PD교수 만 프로그램명이 다 보이게 함.\n \t\t//081001 김현정과장 요구로 센터, 전체시스템관리자만 모두 볼수있게 수정\n \t\t//PD교수는 자기학과만 보이게\n \t\tif (DataSet(Global.getVariable(\"DS_UDRIMS_USER_ROLE\")).getColumn(i, \"roleCd\") == \"C01EC1\" || DataSet(Global.getVariable(\"DS_UDRIMS_USER_ROLE\")).getColumn(i, \"roleCd\") == \"U15ES1\"){\n \t\t\tstrDisplayLvl = \"1\";\n \t\t\tbreak;\n \t\t} else{\n \t\t\tstrDisplayLvl = \"0\";\n \t\t}\n \t}\n \t*/\n \tif(strDisplayType != '4'){\n \t\tstrDisplayLvl = \"0\";\n \t}\n \t\n if(strBussCd == 'K01'){\n\t\t\tstrBussFg= \"K\";\n\t\t} else if(strBussCd == 'K02'){\n\t\t\tstrBussFg= \"E\";\n\t\t} else if(strBussCd == 'K03'){\n\t\t\tstrBussFg= \"L\";\n\t\t}\n\t\t\n\t\tif(this.globalDataService.getGlobalData(\"G_USER_FG_CD\") == 'C0002006') { //학부학생일 경우\n\t\t\tstrUserFg = \"S\";\n\t\t} else if(this.globalDataService.getGlobalData(\"G_USER_FG_CD\") == 'C0002007') { //대학원학생일 경우\n\t\t\tstrUserFg = \"G\";\n\t\t} \n \t\n \t\n if(strSvcId == null) strSvcId = \"FIND_PROGRAM\";\n \t\tthis.commonService.httpPost({\n \t method: 'POST',\n \t url: '/uni/uni/abee/cmmn/findProgramList.action',\n \t headers: {\n \t 'Content-Type': 'application/json'\n \t },\n \t data: {\n \t \"strCampFg\": strCampFg,\t\t\t\t\t\t\t\t\t\t\t\t// 캠퍼스구분\n \t \"strBussCd\": strBussCd,\t\t\t\t\t\t\t\t\t\t\t\t// 인증구분\n \"strDataSet\": strDataSet,\t\t\t\t\t\t\t\t\t\t\t// 데이터셋 명\n \"strDisplayType\": strDisplayType,\t\t\t\t\t\t\t\t\t// 전체 혹은 아닌것\n \t \"strDisplayLvl\": strDisplayLvl,\t\t\t\t\t\t\t\t\t\t// 권한에 따른 디스플레이 값 세팅\n \t \"strUserNo\": this.globalDataService.getGlobalData(\"G_USER_NO\"), \t// 로그인 사용자\n \t \"strDeptCd\": this.globalDataService.getGlobalData(\"G_DEPT_CD\"), \t// 로그인 사용자 소속학과\n \t \"strBussFg\": strBussFg , \n \t \"strUserFg\": strUserFg\n \t \n \t }\n \t })\n \t .then(function (data) { \n \t deferred.resolve(data.DatasetList);\n \t }, function (ex) {\n \t deferred.reject(ex);\n })\n\n return deferred.promise;\n\n };\n \n \n async fnFindDeptList(strDataSet, strCampFg, strDisplayType, strUseYn, strSvcId, strDeepCorsNo, strYy) {\n \tconst response = await this.commonService.httpPost({\n \t\turl : \"/uni/uni/abee/cmmn/findDeptList.action\",\n \t\tdata : {\n \t\t\t\"strCampFg\" : strCampFg,\n \t\t\t\"strUseFg\" : strUseYn,\n \t\t\t\"strDataSet\" : strDataSet,\n \t\t\t\"strDeepCorsNo\" : strDeepCorsNo,\n \t\t\t\"strYy\" : strYy,\n \t\t\t\"strDisplayType\" : strDisplayType\n \t\t}\n \t});\n \t\n \treturn response.DatasetList;\n }\n\n};\n\nexport default AbeeCommonService;","import moment from 'moment';\n\n/* @ngInject */\nexport default class {\n constructor(commonService, constants) {\n angular.extend(this,{\n commonService, constants\n });\n }\n\n isNullOrEmpty(val) {\n \tif(Array.isArray(val)){\n \t\tif(val.length === 0){\n \t\treturn true;\n \t\t}\n \t\treturn false;\n \t}\n return angular.isUndefined(val) || val === null || val === \"\"\n }\n \n formatDate(date, format = 'YYYY-MM-DD', nowFormat = \"\"){\n \tif(!date) return '';\n \tif(nowFormat != \"\") date = moment(date, nowFormat);\n \t\n \tconst showDate = moment(date).format(format);\n \treturn showDate !== 'Invalid date'? showDate : date ;\n }\n\n getExtensionOfFile(fileName) {\n const match = fileName.match(/.(\\w+)$/);\n if(match === null) return fileName;\n\n return match[1];\n }\n\n getCurrentLangCodeAmong(korCode, engCode) {\n const langCd = this.commonService.getSelectedLangCode();\n return langCd === this.constants.i18nCode.ajaxCode.KO ? korCode : engCode;\n }\n\n\n}","class EstbCommonService {\n constructor($http, $q, commonService, globalDataService) {\n 'ngInject';\n this.$http = $http;\n this.$q = $q;\n this.commonService = commonService;\n this.globalDataService = globalDataService;\n }\n\n /*==============================================================================\n * 프로그램 : 행정정보-시설 공통처리모듈\n * 화 일 명 : estb_common.js\n * 작 성 자 : 정윤구\n * 작성일자 : 2008-03-25\n * 수정일자 :\n * 기능설명 : 자산 관련 공통기능을 처리하기 위한 공통처리모듈\n ==============================================================================*/\n /*==============================================================================\n * 메소드명 : gfnBdComboLoad\n * 설명 : 건물코드 테이블을 조회하여 콤보박스를 생성한다.\n * 메소드인수1 : DataSet명\n * 메소드인수2 : 캠퍼스구분 (T:전체, C:캠퍼스공통, S:서울캠퍼스, K:경주캠퍼스)\n * 메소드인수3 : 전체공란 첨부여부(T:전체, S:선택, E:공란, X:데이터시작) \n ==============================================================================*/\n async gfnBdComboLoad(argDataSet, argCampFg, argModeFg, argInitFg = \"\", strResvFg = \"\", strUserFg = \"\") {\n \tif(argDataSet == null || argDataSet == \"\") {\n \t\targDataSet = \"DS_BD_NM_SH\";\n \t};\n \t\n \tconst response = await this.commonService.httpPost({\n \t\turl : \"/pat/pat/estb/base/findEstbSetBdCd.action\",\n \t\tdata : {\n \t\t\t\"strDataSet\" : argDataSet,\n \t\t\t\"strCampFg\" : argCampFg,\n \t\t\t\"strModeFg\" : argModeFg,\n \t\t\t\"strInitFg\" : argInitFg,\n \t\t\t\"strResvFg\" : strResvFg,\n \t\t\t\"strUserFg\" : strUserFg\n \t\t}\n \t});\n \treturn response.DatasetList;\n };\n \n /*==============================================================================\n * 메소드명 : gfnHoComboLoad\n * 설명 : 건물코드 테이블을 조회하여 콤보박스를 생성한다.\n * 메소드인수1 : DataSet명\n * 메소드인수2 : 캠퍼스구분 (T:전체, C:캠퍼스공통, S:서울캠퍼스, K:경주캠퍼스)\n * 메소드인수3 : 전체공란 첨부여부(T:전체, S:선택, E:공란, X:데이터시작) \n ==============================================================================*/\n async gfnHoComboLoad(argDataSet, argCampFg, argModeFg, argInitFg = \"\", argBdcdFg = \"\", strResvFg = \"\", strUserFg = \"\") {\n \tif(argDataSet == null || argDataSet == \"\") {\n \t\targDataSet = \"DS_HO_NM_SH\";\n \t};\n \t \t\n \tconst response = await this.commonService.httpPost({\n \t\turl : \"/pat/pat/estb/base/findEstbSetRoomNo.action\",\n \t\tdata : { \n \t\t\t\"strDataSet\" : argDataSet,\n \t\t\t\"strCampFg\" : argCampFg,\n \t\t\t\"strModeFg\" : argModeFg,\n \t\t\t\"strInitFg\" : argInitFg,\n \t\t\t\"strResvFg\" : strResvFg,\n \t\t\t\"strUserFg\" : strUserFg,\n \t\t\t\"strBdCd\" : argBdcdFg\n \t\t}\n \t});\n \treturn response.DatasetList;\n };\n \n};\n\nexport default EstbCommonService;","/* @ngInject */\r\nexport default class {\r\n constructor($http, $window, globalDataService, constants, $rootScope, remoteConstantsService) {\r\n angular.extend(this, {\r\n $http, $window, globalDataService, constants, $rootScope, remoteConstantsService\r\n });\r\n\r\n this.init();\r\n }\r\n\r\n async init() {\r\n const {ssoUseYn} = await this.remoteConstantsService.remote();\r\n this.ssoUseYn = ssoUseYn;\r\n }\r\n\r\n clearSession(){\r\n //this.frontDataService.leftMenu = [];\r\n this.globalDataService.clearGlobalData();\r\n //this.tabService.removeTabAll();\r\n //this.tabService.activeTab(0);\r\n this.$window.location.reload();\r\n //this.$rootScope.$broadcast(\"changeLayout\", \"login\");\r\n }\r\n\r\n async login({userId, userPwd}) {\r\n try{\r\n const response = await this.$http({\r\n method: 'POST',\r\n url: '/auth/login.do',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n data: {\r\n \"userId\": userId,\r\n \"userPwd\" : userPwd,\r\n \"type\" : 'check'\r\n }\r\n });\r\n\r\n if (response.data.ErrorCode === '-1') {\r\n this.Toast.alert(response.data.ErrorMsg);\r\n return;\r\n }\r\n\r\n return response.data;\r\n\r\n }catch (ex) {\r\n console.error(ex);\r\n const msg = ex.data && ex.data.ErrorMsg ? ex.data.ErrorMsg : ex.data;\r\n throw new Error(msg);\r\n }\r\n }\r\n\r\n async logout() {\r\n try{\r\n const response = await this.$http({\r\n method: 'POST',\r\n url: '/auth/logout.do'\r\n });\r\n\r\n return response.data;\r\n }catch (ex) {\r\n console.error(ex);\r\n const msg = ex.data && ex.data.ErrorMsg ? ex.data.ErrorMsg : ex.data;\r\n throw new Error(msg);\r\n }\r\n }\r\n\r\n async postLogout(){\r\n if (this.ssoUseYn.toUpperCase() === 'Y') {\r\n this.$window.location.href = '/auth/SSOLogout.do';\r\n } else {\r\n this.globalDataService.clearGlobalData();\r\n this.logout().then(response=>{\r\n this.$window.location.reload();\r\n });\r\n }\r\n }\r\n\r\n async checkSession() {\r\n try{\r\n const response = await this.$http({\r\n method: 'POST',\r\n url: '/auth/checkSession.do'\r\n });\r\n\r\n return response.data;\r\n }catch (ex) {\r\n console.error(ex);\r\n const msg = ex.data && ex.data.ErrorMsg ? ex.data.ErrorMsg : ex.data;\r\n throw new Error(msg);\r\n }\r\n }\r\n\r\n async postCheckSession() {\r\n if(!this.ssoUseYn) await this.init();\r\n\r\n if (this.ssoUseYn.toUpperCase() === 'Y') {\r\n this.$window.location.href = '/auth/SSOLogin.do';\r\n } else {\r\n this.$rootScope.$broadcast('changeLayout', 'login');\r\n }\r\n }\r\n};","class BsacAffService {\n constructor($http, $q, commonService, globalDataService) {\n 'ngInject';\n this.$http = $http;\n this.$q = $q;\n this.commonService = commonService;\n this.globalDataService = globalDataService;\n }\n \n /*====================================================================================================\n = 업 무 명 : 부속기관 공통 스크립트\n = 프로그램 : 메세지 처리 공통모듈\n = 화 일 명 : bsac_aff.js\n = 작 성 자 : \n = 작성일자 : 2010.01.11\n = 수정일자 : \n = 기능설명 : 메세지처리를 위한 공통 함수와 메세지 내용을 담고 있다.\n = 기 타 : 1. MasterFrame에 include된다.\n = 2. 함수 추가시 접두사로 반드시 ufnXXXXXX을 기본으로 한다.\n ====================================================================================================*/ \n /* 메소드명 : defalutAffYyShtmInqLoad\n * 설명 : 학사(취업), 부속기관 업무에 따른 기본 년도학기를 조회하여 가져온다.\n * 메소드인수1 : 캠퍼스구분 \n * 메소드인수2 : 시스템코드\n * 메소드인수3 : 대학/대학원코드 \n * 메소드인수4 : 메뉴2 \n */ \n defalutAffYyShtmInqLoad( strDataSet, arrCampFg, arrSystemCd, \n \t\t\t\t\t\t\t\t\t\t\tarrUnivGrscCd, arrMenuNo2, strSvcId) {\n\n \tconst deferred = this.$q.defer();\n \tif(arrCampFg === null) arrCampFg ;\n \tif(arrUnivGrscCd === null) arrUnivGrscCd ;\n \tif(arrMenuNo2 === null) arrMenuNo2 ;\n \t\n \tif(arrCampFg === null || arrCampFg.length === 0) {\n \t\tthis.Toast.alert(\"캠퍼스명을 입력하세요\");\n \t\treturn;\n \t}\n \tif(arrSystemCd === null || arrSystemCd.length === 0) {\n \t\tthis.Toast.alert(\"시스템코드를 입력하세요\");\n \t\treturn;\n \t}\n \tif(arrUnivGrscCd === null || arrUnivGrscCd.length === 0) {\n \t\tthis.Toast.alert(\"대학/대학원코드를 입력하세요\");\n \t\treturn;\n \t}\n \tif(arrMenuNo2 === null || arrMenuNo2.length === 0) {\n \t\tthis.Toast.alert(\"메뉴2을 입력하세요\");\n \t\treturn;\n \t}\n \t\n \tthis.commonService.httpPost({\n\t method: 'POST',\n\t url: '/pat/pat/soci/base/findSociYearSchlTermRegInq.action',\n\t headers: {\n\t 'Content-Type': 'application/json'\n\t },\n\t data: {\n\t \t\"strType\" : \"\"\n\t ,\t\"strCampFg\"\t: arrCampFg\n\t ,\t\"strSystemCd\" : arrSystemCd\n\t ,\t\"strUnivGrscCd\" : arrUnivGrscCd\n\t ,\t\"strUnitBussCd\" : arrMenuNo2\n\t }\n\t })\n\t .then(function (data) { \n\t deferred.resolve(data.DatasetList);\n\t }, function (ex) {\n\t deferred.reject(ex);\n })\n\n return deferred.promise;\n\n } \n\n\n}\n\nexport default BsacAffService;","import BsacCommonService from './bsac.common.service';\nimport BsacUnicService from \"./bsac.unic.service\";\nimport {commonService, globalDataService } from \"./common.service\";\nimport AbeeCommonService from \"./abee.common.service\";\nimport utilsService from './utils.service';\nimport EstbCommonService from './estb.common.service';\nimport authCommonService from './auth.common.service';\nimport BsacAffService from './bsac.aff.service.js';\n\nlet service = angular.module('stuweb.common.service', [])\n .service(\"bsacCommonService\", BsacCommonService)\n .service(\"bsacUnicService\", BsacUnicService)\n .service(\"commonService\", commonService)\n .service(\"authCommonService\", authCommonService)\n .service(\"globalDataService\", globalDataService)\n .service(\"abeeCommonService\", AbeeCommonService)\n .service(\"utils\", utilsService)\n .service(\"estbCommonService\", EstbCommonService)\n .service(\"bsacAffService\", BsacAffService)\n .name;\n\nexport default service;","import 'angular';\nimport 'angular-animate';\nimport 'angular-aria';\nimport 'oclazyload';\nimport '@uirouter/angularjs';\nimport 'angular-route';\nimport 'angular-messages';\nimport \"@babel/polyfill\"\nimport 'angular-loading-bar';\nimport 'ng-file-upload';\nimport 'angular-ui-bootstrap';\nimport 'angular-bootstrap-calendar'\n\nimport 'angular-translate';\nimport 'angular-translate-handler-log';\nimport 'angular-translate-loader-url';\nimport 'angular-translate-storage-cookie';\nimport 'angular-translate-storage-local';\nimport 'angular-translate-loader-static-files';\nimport 'angular-cookies';\nimport 'angular-tree-control';\nimport 'angular-tree-control/css/tree-control-attribute.css';\nimport 'angular-tree-control/css/tree-control.css';\nimport 'angular-tree-control/context-menu';\n\nimport config from './config';\nimport directives from './directives';\nimport services from './services';\n\nlet common = angular.module(\"stuweb.common\", [\n 'ngMaterial', 'SpGrid', 'SpTab', 'oc.lazyLoad', 'mgcrea.ngStrap', 'ui.router', 'mwl.calendar', 'ui.bootstrap', 'ngCookies', 'treeControl', 'contextMenu',\n 'ngAnimate', 'angular-loading-bar', 'ngFileUpload',\n config,\n directives,\n services\n]).name;\n\n\nexport default common;","import template from \"./studentInfo.html\";\nclass controller {\n constructor($scope, studentInfoService) {\n 'ngInject';\n angular.extend(this, {$scope, studentInfoService});\n this.user = {};\n\n this.studentInfoService.getStudentInfo('1').then(response => {\n this.user = response;\n });\n }\n}\n\n\nconst studentInfo = {\n restrict : 'E',\n controllerAs : 'vm',\n controller : controller,\n template\n}\n\nexport default studentInfo;","class studentInfoService {\n constructor(commonService, $q, globalDataService){\n this.commonService = commonService;\n this.$q = $q;\n this.globalDataService = globalDataService;\n }\n\n getStudentInfo(photoCheck) {\n const deferred = this.$q.defer();\n this.commonService.httpPost({\n method: 'POST',\n url: '/uni/uni/unic/base/findUnicUnivBaseInformationDiv.action',\n headers: {\n 'Content-Type': 'application/json'\n },\n data: {\n \"strStdNo\": this.globalDataService.getGlobalData(\"G_USER_NO\"),\n \"photoCheck\": photoCheck\n }\n }).then(function (data) {\n const receiveData = data.DatasetList.DS_SREG300;\n if(receiveData.length === 0) deferred.reject(\"data is empty\");\n\n deferred.resolve(receiveData[0]);\n }, function (ex) {\n console.error(ex);\n deferred.reject(ex)\n });\n\n return deferred.promise;\n }\n \n}\nstudentInfoService.$inject = ['commonService', '$q', 'globalDataService'];\n\nexport default studentInfoService;","import studentInfoComponents from './studentInfo.components';\nimport studentInfoService from './studentInfo.service';\n\nlet studentInfo = angular.module('studentInfo', [])\n .component('haksaStudentInfo', studentInfoComponents)\n .service('studentInfoService', studentInfoService)\n .name;\n\nexport default studentInfo;","export default class controller{\n constructor($mdDialog, SpGrid, zipcodeService, Toast) {\n 'ngInject';\n angular.extend(this, {\n $mdDialog, SpGrid, zipcodeService, Toast\n })\n\n this.initGrid();\n this.searchNm;\n }\n\n initGrid(){\n this.grid = {};\n\n this.pagingOptions = {\n currentPage: 1\n , pageSize: 10\n , pageBlockSize: 10\n };\n\n this.grid.listGrid = new this.SpGrid({\n selectable : true,\n enablePaging: false,\n pagingOptions: this.pagingOptions,\n gridSize : {\n height : \"200px\"\n },\n columnDef : [\n {\n id: \"zipCode\",\n width: \"80px\",\n name: angular.translate(\"MSG000396\")\t\t//// MSG000396 : 우편번호\t\n },\n {\n id: \"rnaAddress\",\n name: angular.translate(\"MSG000389\"),\t\t//// MSG000389 : 주소\t\n align: \"left\",\n type:\"html\",\n width: \"300px\",\n bindHtml: \"[도로명] {{row.lnmAddress}} [지번] {{row.rnaAddress}}\"\n\n }\n ],\n gridAction : {\n onRowDblClick : row=>{\n this.$mdDialog.hide(this.convertToZipObj(row));\n }\n }\n });\n }\n\n async find(currentPage){\n if(!this.searchNm) {\n this.Toast.alert(angular.translate(\"MSG000397\"));\t\t//// MSG000397 : 동 이름을 입력하여 주십시오\t\n return;\n } else if(this.searchNm.length < 3){\n this.Toast.alert(angular.translate(\"MSG000398\"));\t\t//// MSG000398 : 주소는 2자리 이상 입력하고 검색해주십시오.\t\n return;\n }\n\n try{\n const response = await this.zipcodeService.find(this.searchNm, currentPage);\n\n this.grid.listGrid.setData(response.gridData);\n this.pagingOptions.totalRecordCount = parseInt(response.totalCount);\n }catch (e) {\n this.Toast.alert(e.message);\n }\n\n }\n\n convertToZipObj({zipCode, lnmAddress}) {\n return {zipNo : zipCode, korTtAddr : lnmAddress}\n }\n\n ok(){\n this.$mdDialog.hide(this.convertToZipObj(this.grid.listGrid.getSelectedRow()));\n }\n\n close(){\n this.$mdDialog.cancel();\n }\n\n onPageClick(_minPage, _maxPage) {\n this.find(this.pagingOptions.currentPage);\n }\n}","export default class zipcodeService{\n constructor(commonService, $q, $http, Toast) {\n 'ngInject';\n angular.extend(this, {\n commonService, $q, $http, Toast\n })\n }\n\n async find(searchNm, currentPage){\n try {\n const response = await this.$http({\n method: 'POST',\n url: '/client/selectZipPopupList.do',\n headers: {\n 'Content-Type': 'application/json'\n },\n data: {\n searchValue : searchNm,\n currentPage : currentPage,\n }\n });\n\n return response.data;\n }catch (e) {\n console.error(e.getMessage());\n this.Toast.alert(e.getMessage());\n }\n }\n\n}","import controller from './zipcode.controller';\nimport template from \"./zipcode.html\";\nimport service from './zipcode.service';\n\nconst pgmId = \"zipcode\"\nexport default angular.module(pgmId, [])\n .component(pgmId, {\n restrict : 'E',\n controller,\n template,\n })\n .service(`${pgmId}Service`, service)\n .name;","/* @ngInject */\nexport default class controller{\n constructor($mdDialog, reportService, bsacCommonService, constants , $scope, $timeout , $element, $window, commonService, remoteConstantsService, Toast) {\n angular.extend(this, {\n $mdDialog, reportService, bsacCommonService, constants, $scope, $timeout, $element, $window, commonService, remoteConstantsService, Toast\n })\n\n this.divHight = \"1500px\";\n const that = this;\n angular.element($window).on('resize', _=>{\n that.divHight = angular.element(\".md-dialog-container\").attr(\"style\").split(\";\")[1].split(\":\")[1].trim();\n\n // manuall $digest required as resize event\n // is outside of angular\n that.$scope.$digest();\n });\n\n this.$scope.$on(\"$destroy\", function() {\n angular.element($window).off('resize');\n });\n }\n\n $onInit() {\n this.showReport(this.info);\n }\n\n close(){\n this.$mdDialog.cancel();\n }\n\n async showReport(){\n const {viewServer, mrdServer, reportEncryptType} = await this.remoteConstantsService.remote();\n const mrdpath = `${mrdServer}/${this.info.mrdpath}.mrd`;\n const strParam = `/rf [${viewServer}/DataServer/rdagent.jsp] /rp ${this.info.strParam}`;\n\n const encParams = await this.commonService.encryptReportParam({mrdpath, strParam});\n\n if(encParams.strParam == \"no\"){\n \tthis.$mdDialog.cancel();\n \tthis.Toast.alert(\"학번이 변조되었습니다.\");\n \treturn;\n }\n \t\n const viewer = new m2soft.crownix.Viewer(`${viewServer}/ReportingServer/service`, 'crownix-viewer');\n viewer.setParameterEncrypt(reportEncryptType);\n viewer.openFile(encParams.mrdpath, encParams.strParam);\n }\n\n getServerType(mrdPath) {\n\n const arrServerType = mrdPath.match(/[\\/]?(\\w+)/i);\n if(arrServerType.length === 2) return arrServerType[1];\n\n throw new Error('Invalid ServerType For Report');\n }\n}","/* @ngInject */\nexport default class zipcodeService{\n constructor(commonService, $q) {\n angular.extend(this, {\n commonService, $q\n })\n }\n}","import controller from './report.controller';\nimport template from \"./report.html\";\nimport service from './report.service';\n\nconst pgmId = \"report\"\nexport default angular.module(pgmId, [])\n .component(pgmId, {\n bindings : {info : \"=\"},\n restrict : 'E',\n controller,\n template,\n })\n .service(`${pgmId}Service`, service)\n .name;","export default class controller{\n constructor($mdDialog, SpGrid, univcodeService, Toast) {\n 'ngInject';\n angular.extend(this, {\n $mdDialog, SpGrid, univcodeService, Toast\n })\n\n this.initGrid();\n this.searchNm;\n }\n\n initGrid(){\n this.grid = {};\n\n this.pagingOptions = {\n currentPage: 1\n , pageSize: 10\n , pageBlockSize: 10\n };\n\n this.grid.listGrid = new this.SpGrid({\n selectable : true,\n enablePaging: true,\n pagingOptions: this.pagingOptions,\n gridSize : {\n height : \"300px\"\n },\n columnDef : [\n {\n id: \"schNm\",\n width: \"350px\",\n name: angular.translate(\"MSG000387\"),\t\t//// MSG000387 : 학교명\t\n align: \"left\"\n },\n {\n id: \"schEngNm\",\n name: angular.translate(\"MSG000388\"),\t\t//// MSG000388 : 학교명(영문)\t\n width: \"350px\",\n align: \"left\"\n },\n {\n id: \"addr\",\n name: angular.translate(\"MSG000389\"),\t\t//// MSG000389 : 주소\t\n align: \"left\"\n }\n ],\n gridAction : {\n onRowDblClick : row=>{\n this.$mdDialog.hide(row);\n }\n }\n });\n }\n\n async find(){\n try{\n const univList = await this.univcodeService.find(this.searchNm);\n this.grid.listGrid.setData(univList);\n }catch (e) {\n this.Toast.alert(e);\n }\n\n }\n\n convertToObj({schCd, schNm}) {\n return {schCd : schCd, schNm : schNm}\n }\n\n ok(){\n this.$mdDialog.hide(this.convertToObj(this.grid.listGrid.getSelectedRow()));\n }\n\n close(){\n this.$mdDialog.cancel();\n }\n}","export default class univcodeService{\n constructor(commonService, $q) {\n 'ngInject';\n angular.extend(this, {\n commonService, $q\n })\n }\n\n find(searchNm){\n const deferred = this.$q.defer();\n this.commonService.httpPost({\n method: 'POST',\n url: 'exm/gexa/base/findGexaCommon.action',\n headers: {\n 'Content-Type': 'application/json'\n },\n data: {\n \tsqlMap: \"GexaCommon.univList\",\n \tsearch : searchNm\n }\n }).then(function (data) {\n const receiveData = data.DatasetList.DS_COMMON;\n if(receiveData.length === 0) deferred.reject(\"data is empty\");\n\n deferred.resolve(receiveData);\n }, function (ex) {\n console.error(ex);\n deferred.reject(ex)\n });\n\n return deferred.promise;\n }\n\n}","import controller from './univcode.controller';\nimport template from \"./univcode.html\";\nimport service from './univcode.service';\n\nconst pgmId = \"univcode\"\nexport default angular.module(pgmId, [])\n .component(pgmId, {\n restrict : 'E',\n controller,\n template,\n })\n .service(`${pgmId}Service`, service)\n .name;","/* @ngInject */\nexport default class controller{\n constructor(Toast, reportService, bsacCommonService, constants , $scope, Upload, commonService, utils) {\n angular.extend(this, {\n Toast, reportService, bsacCommonService, constants, $scope, Upload, commonService, utils\n })\n\n this.file; // 선택된 파일 정보\n this.invaildFile; // 파일 유효성 체크 정보\n }\n\n $onInit() {\n if (!this.utils.isNullOrEmpty(this.dataset[this.bindColumn])) {\n this.isNewFile = false;\n\n let countBtn= 3;\n if(this.isDisableDownload) countBtn--;\n if(this.isDisableDelete) countBtn--;\n\n this.btnStyle = `btn${countBtn}`;\n }\n }\n\n async delete() {\n if(this.utils.isNullOrEmpty(this.dataset[this.bindColumn])){\n this.Toast.alert(angular.translate(\"MSG000376\"));\t\t//// MSG000376 : 삭제 할 파일이 없습니다.\t\n return;\n }\n\n await this.Toast.confirm(angular.translate(\"MSG000377\"));\t\t//// MSG000377 : 선택하신 파일정보를 삭제합니다.\\n\\n계속 진행하시겠습니까?\t\n\n if(this.isNewFile){\n this.$scope.$apply([\n this.dataset[this.bindColumn] = \"\"\n ])\n\n this.removeFileResource();\n return;\n }\n\n this.handleDelete.call(this.parent);\n }\n\n getUploadMsg(invaildFileList){\n const invaildFile = invaildFileList[0];\n switch (invaildFile.$error ) {\n case 'maxSize':\n return invaildFile.$errorParam + angular.translate(\"MSG000378\");\t\t//// MSG000378 : 이하 파일만 업로드 가능합니다.\t\n case 'pattern':\n return invaildFile.$errorParam + angular.translate(\"MSG000379\");\t\t//// MSG000379 : 파일만 업로드 가능합니다.\t\n }\n }\n\n upload(file, invaildFile) {\n if(invaildFile.length > 0){\n this.Toast.alert(this.getUploadMsg(invaildFile));\n this.removeFileResource();\n return;\n }\n\n if(!file) return;\n\n if(this.isExceptExtension(file)) {\n this.Toast.alert(this.utils.getExtensionOfFile(file.name) + \" 확장자는 업로드가 불가능합니다.\");\n return;\n }\n\n if (!this.isDisableUploadExistMessage && !this.isNewFile && !this.utils.isNullOrEmpty(this.dataset[this.bindColumn])) {\n this.Toast.alert(angular.translate(\"MSG000380\"));\t\t//// MSG000380 : 파일을 수정하고자 할때는 기존 파일을 삭제 후 추가하시기 바랍니다.\t\n this.file = null;\n return;\n }\n\n this.isNewFile = true;\n this.dataset[this.bindColumn] = file.name;\n this.dataset[this.pathColumn] = null; // 새로 파일이 등록 되면 기존의 pathColumn 초기화\n if(this.bindFileSize) this.dataset[this.bindFileSize] = file.size;\n this.handleUpload.call(this.parent, file);\n }\n\n isExceptExtension(file) {\n const extension = this.utils.getExtensionOfFile(file.name);\n const exceptExtList = ['exe', 'jsp', 'java'];\n\n return exceptExtList.some(ext => ext === extension);\n }\n\n removeFileResource(){\n this.file = null;\n this.invaildFile = null;\n }\n\n async download() {\n const bindColumn = this.dataset[this.bindColumn];\n const pathColumn = this.dataset[this.pathColumn];\n\n if(this.utils.isNullOrEmpty(bindColumn)){\n this.Toast.alert(angular.translate(\"MSG000381\"));\t\t//// MSG000381 : 다운로드 할 파일이 없습니다.\t\n return;\n }\n\n if(this.utils.isNullOrEmpty(pathColumn)){\n this.Toast.alert(angular.translate(\"MSG000382\"));\t\t//// MSG000382 : 선택한 파일을 업로드 해 주세요\n return;\n }\n\n // download handle이 등록되어 있으면 등록된 로직으로 다운로드 실행\n if(this.handleDownload) {\n this.handleDownload.call(this.parent)\n return;\n }\n\n await this.commonService.download({\n url: '/uni/com/downloadInFlexHaksa.jsp',\n data: {\n fullPathFile: this.dataset[this.pathColumn]\n }\n })\n }\n}","/* @ngInject */\nexport default class zipcodeService{\n constructor(commonService, $q) {\n angular.extend(this, {\n commonService, $q\n })\n }\n}","import controller from './fileManager.controller';\nimport template from \"./fileManager.html\";\nimport service from './fileManager.service';\n\nconst pgmId = \"fileManager\"\nexport default angular.module(pgmId, [])\n .component(pgmId, {\n bindings : {\n handleDelete : \"=\", handleUpload : \"=\", handleDownload : \"=\",\n dataset : \"=\", bindColumn : \"=\", pathColumn : \"=\", parent : \"=\",\n filter : \"=\", maxsize : \"=\", isDisableDownload : \"<\", isDisableDelete : \"<\",\n isDisableUpload: \"<\", bindFileSize: \"=\", isDisableUploadExistMessage : \"<\"\n },\n restrict : 'E',\n controller,\n template,\n })\n .service(`${pgmId}Service`, service)\n .name;","/* @ngInject */\nexport default class {\n constructor($scope, $state, SpGrid, bsacCommonService, globalDataService, bsacUnicService, $window) {\n angular.extend(this, {\n $scope, $state, SpGrid, bsacCommonService, globalDataService, bsacUnicService, $window\n })\n\n }\n\n $onInit() {\n const that = this;\n angular.element(this.$window).on('resize', _=>{\n that.doShowNaviBtn();\n that.$scope.$apply();\n });\n\n this.position = 0;\n that.doShowNaviBtn();\n }\n\n\n doShowNaviBtn() {\n const menusWidth = Array.from(angular.element('.tabs dd')).reduce((acc, cur) => acc + angular.element(cur).width(), 0);\n const menuDivWidth = angular.element('.tabs').width();\n const sum = menuDivWidth - menusWidth;\n\n this.viewTabsCount = Math.ceil((menuDivWidth - 40) / 200);\n let leftTabs = this.tabs.length - this.position;\n const plusTab = leftTabs - this.viewTabsCount;\n if(plusTab < 0){\n this.position += (plusTab + 1);\n this.doVisibleMenu();\n }\n }\n\n activeTab(index) {\n const checkedIndex = index + 1;+\n this.$state.go(this.tabs[index].state).then(_=>{\n this.tabs.forEach(tab => tab.active = false);\n this.tabs[index].active = true;\n });\n };\n\n prev() {\n if(this.position > 0)\n this.position -= 1;\n\n this.doVisibleMenu();\n }\n\n doVisibleMenu(){\n this.tabs.forEach((tab, i) => {\n if (i < this.position) {\n tab.invisible = true;\n } else {\n tab.invisible = false;\n }\n });\n }\n\n next() {\n if(this.tabs.length - this.viewTabsCount >= this.position)\n this.position += 1;\n\n this.doVisibleMenu();\n }\n}\n\n","import controller from \"./haksaTab.controller\";\nimport template from \"./haksaTab.html\";\n\nconst pgmId = 'haksaTabs';\nconst module = angular.module(pgmId, [\n])\n .component(pgmId, {\n bindings :{\n tabs : \"=\"\n },\n restrict : 'E',\n controller,\n template\n })\n .name;\n\nexport default module;","/* @ngInject */\nexport default class {\n constructor($scope, $state, SpGrid, bsacCommonService, globalDataService, bsacUnicService, $window, $element, $compile, constants) {\n angular.extend(this, {\n $scope, $state, SpGrid, bsacCommonService, globalDataService, bsacUnicService, $window, $element, $compile, constants\n })\n\n this.viewTabs = [];\n \n this.$scope.$on('haksaContentTab_ActiveTAb', (e, idx)=>{\n \tthis.activeTab(idx);\n });\n }\n\n $onInit() {\n const that = this;\n angular.element(this.$window).on('resize', _=>{\n that.doShowNaviBtn();\n that.$scope.$apply();\n });\n\n this.position = 0;\n this.doShowNaviBtn();\n\n if (this.id === undefined) {\n this.viewTabs.push(this.toDash(this.getActiveTabState()));\n } else {\n this.$scope.$on(this.id, _=> {\n this.viewTabs.push(this.toDash(this.getActiveTabState()));\n });\n }\n }\n\n\n doShowNaviBtn() {\n const menusWidth = Array.from(this.$element.find('.tabs dd')).reduce((acc, cur) => acc + this.$element.find(cur).width(), 0);\n const menuDivWidth = this.$element.find('.tabs').width();\n const sum = menuDivWidth - menusWidth;\n\n this.viewTabsCount = Math.ceil((menuDivWidth - 40) / 200);\n let leftTabs = this.tabs.length - this.position;\n const plusTab = leftTabs - this.viewTabsCount;\n if(plusTab < 0){\n this.position += (plusTab + 1);\n this.doVisibleMenu();\n }\n\n if (sum < 10) {\n this.visibleButton = true;\n } else {\n this.visibleButton = false;\n }\n\n }\n\n getActiveTabState() {\n const tab = this.tabs.find(tab => tab.active);\n return tab.state;\n }\n\n activeTab(index) {\n \tconst activeTab = this.tabs[index];\n \tif(activeTab.disabled === true) return;\n \t\n this.activeTabName = activeTab.state;\n this.viewTabs.splice(0);\n this.viewTabs.push(this.toDash(this.activeTabName));\n\n this.tabs.forEach(tab => tab.active = false);\n activeTab.active = true;\n this.$scope.$emit(\"clickHaksaContentTabs\",index);\n };\n\n toDash(str){\n return str.replace(/([A-Z])/g, ($1)=>{return \"-\"+$1.toLowerCase();});\n }\n\n prev() {\n if(this.position > 0)\n this.position -= 1;\n\n this.doVisibleMenu();\n }\n\n doVisibleMenu(){\n this.tabs.forEach((tab, i) => {\n if (i < this.position) {\n tab.invisible = true;\n } else {\n tab.invisible = false;\n }\n });\n }\n\n next() {\n if(this.tabs.length - this.viewTabsCount >= this.position)\n this.position += 1;\n\n this.doVisibleMenu();\n }\n}","import controller from \"./haksaTab.content.controller\";\nimport template from \"./haksaTab.content.html\";\n\nconst pgmId = 'haksaContentTabs';\nconst module = angular.module(pgmId, [\n])\n .component(pgmId, {\n bindings :{\n tabs : \"=\",\n id : \"<\"\n },\n restrict : 'E',\n controller,\n template\n })\n .name;\n\nexport default module;","/* @ngInject */\r\nexport default class {\r\n constructor($templateCache, $mdDialog) {\r\n angular.extend(this, {$templateCache, $mdDialog});\r\n this.noticeMsg = \"\";\r\n }\r\n\r\n $onInit() {\r\n this.noticeMsg = this.popupHtml || 'Not Find a Template In this Menu';\r\n }\r\n\r\n close() {\r\n this.$mdDialog.cancel();\r\n }\r\n}","import controller from \"./noticePopup.controller\";\r\nimport template from './noticePopup.html';\r\n\r\nconst pgmId = 'noticePopup';\r\nconst module = angular.module(pgmId, [\r\n])\r\n .component(pgmId, {\r\n bindings :{\r\n popupHtml : \"<\",\r\n pgmNm : \"<\"\r\n },\r\n restrict : 'E',\r\n controller,\r\n template\r\n })\r\n .name;\r\n\r\nexport default module;","import studentInfo from './studentInfo';\nimport zipcode from './zipcode';\nimport report from './report';\nimport univcode from './univcode';\nimport fileManager from './fileManager'\nimport haksaTab from './haksaTab';\nimport haksaContentTab from './haksaContentTab';\nimport noticePopup from './noticePopup';\n\nlet common = angular.module('stuweb.components.common', [\n studentInfo,\n zipcode,\n univcode,\n report,\n fileManager,\n haksaTab,\n haksaContentTab,\n noticePopup\n]).name;\n\nexport default common;\n\n","/* @ngInject */\r\nexport default class {\r\n constructor($translate, commonService, $window, $scope, $location) {\r\n angular.extend(this, {\r\n $translate, commonService, $window, $scope, $location\r\n });\r\n\r\n this.langType = this.commonService.getCurrentLangCodeInLocalStorage();\r\n\r\n this.$scope.$on('change_lang_type', (e,type)=>{\r\n this.langType = type;\r\n })\r\n\r\n }\r\n\r\n changeTranslate(lang) {\r\n this.commonService.setCurrentLangCodeInLocalStorage(lang);\r\n const match = this.$location.absUrl();\r\n if(this.commonService.isPublic())\r\n {\r\n \tif (match.indexOf('e020402') !== -1 || match.indexOf('e020101') !== -1)\r\n \t{\r\n \t\tthis.$window.location.reload();\r\n \tthis.$translate.use(lang);\r\n \t}\r\n \telse\r\n \t{\r\n \t\tthis.$translate.use(lang);\r\n \t}\r\n }\r\n else\r\n {\r\n this.$window.location.reload();\r\n \tthis.$translate.use(lang);\r\n }\r\n }\r\n}","import template from './footer.html';\nimport controller from './footer.controller';\n\nconst module = angular.module('footer', [])\n .component('haksaFooter', {\n controller,\n template\n }).name;\n\nexport default module;","/* @ngInject */\r\nexport default class {\r\n constructor($translate, commonService, $window, constants) {\r\n angular.extend(this, {\r\n $translate, commonService, $window, constants\r\n });\r\n\r\n this.lang = this.commonService.getCurrentLangCodeInLocalStorage() || this.constants.i18nCode.langCode.korean;\r\n }\r\n}","import template from './topLogo.html';\nimport controller from './topLogo.controller';\n\nconst module = angular.module('topLogo', [])\n .component('topLogo', {\n controller,\n template\n }).name;\n\nexport default module;"],"sourceRoot":""}