{"version":3,"file":"dv-components-dv-login.mjs","sources":["../../../projects/dv-components/dv-login/dv-login.component.ts","../../../projects/dv-components/dv-login/dv-components-dv-login.ts"],"sourcesContent":["/**\r\n * 로그인 콤포넌트\r\n */\r\nimport { Component, OnInit, OnDestroy, EventEmitter, Output, AfterViewChecked, ChangeDetectorRef, NgZone  } from \"@angular/core\";\r\nimport { ViewChild, ElementRef } from \"@angular/core\";\r\nimport { UserInfo } from \"dv-components/utils\";\r\nimport { ClientInfo, DVCom } from \"dv-components/utils\";\r\n\r\ndeclare let dvCom: DVCom;\r\n\r\nexport const loginTemplate = `\r\n<style>\r\n#company {\r\n    margin-top: 70px;\r\n    margin-bottom:5px;\r\n    margin-right: 10px;\r\n    font-size: 15pt;\r\n    font-weight: bold;\r\n    text-shadow: 1px 5px 2px rgba(24,62,44, 0.5);\r\n}\r\n\r\n#loginBox {\r\n    border-radius: 5px;\r\n    border: solid 2px;\r\n    margin-top:0;\r\n    padding:20px;\r\n    margin: 10px;\r\n}\r\n#loginBox #loginText { padding: 10px; }\r\n#loginBox #loginTitle {\r\n    font-size: 28px;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n}\r\n#loginBox #loginTitle img { height: 32px; }\r\n#loginBox #loginTitle span { padding-left: 10px; }\r\n</style>\r\n<div\r\n    id=\"company\"\r\n    class=\"text-end foreground-theme\">\r\n    {{clientInfo.customer}} {{ clientInfo.clientName }}\r\n</div>\r\n<div  id=\"loginBox\" class=\"dv-border-theme\">\r\n    <div\r\n        id=\"loginTitle\"\r\n        class=\"foreground-theme\">\r\n        <img src=\"/assets/img/logo_5.png\"/>\r\n        <span *ngIf=\"!!clientInfo === true\">\r\n            <strong>\r\n                {{clientInfo.clientName}} V{{clientInfo.clientVersion}}\r\n            </strong>\r\n        </span>\r\n    </div>\r\n    <div id=\"loginText\" class=\"foreground-theme\">아이디(사원번호)와 비밀번호를 입력하세요.</div>\r\n    <form>\r\n        <div class=\"grid\">\r\n            <div class=\"col-12\">\r\n                <p-divider></p-divider>\r\n            </div>\r\n            <div *ngIf=\"visibleCompany===true\" class=\"col-12\">\r\n                <div class=\"p-inputgroup\">\r\n                    <span class=\"p-inputgroup-addon\"><i class=\"fas fa-home\"></i></span>\r\n                    <dv-dropdown\r\n                        [item]=\"companyCategory\"\r\n                        styleClass=\"center-item\"\r\n                        optionLabel=\"coNm\">\r\n                    </dv-dropdown>\r\n                    <dv-button\r\n                        icon=\"fas fa-sync-alt\"\r\n                        tooltip=\"등록된 회사를 다시 가져옵니다.\"\r\n                        additionalClass=\"p-inputgroup-addon right-item\"\r\n                        (handleClick)=\"reloadCompanyClick()\">\r\n                    </dv-button>\r\n                </div>\r\n            </div>\r\n            <div class=\"col-12\">\r\n                <div class=\"p-inputgroup\">\r\n                    <span class=\"p-inputgroup-addon\"><i class=\"fas fa-user\"></i></span>\r\n                    <input pInputText type=\"text\"\r\n                        #txtUserID\r\n                        autocomplete=\"username\"\r\n                        id = \"txtUserID\"\r\n                        [(ngModel)]=\"userID\"\r\n                        class=\"form-control input-select-control\"\r\n                        name=\"txtId\"\r\n                        placeholder=\"아이디(사원번호)\"\r\n                        (keyup.enter)=\"onEnterkeyPress($event, 'id')\"\r\n                        minlength=\"4\"\r\n                        maxlength=\"15\"\r\n                        style=\"border-radius:0;\"\r\n                        required>\r\n                </div>\r\n            </div>\r\n            <div class=\"col-12\">\r\n                <div class=\"p-inputgroup\">\r\n                    <span class=\"p-inputgroup-addon\"><i class=\"fas fa-unlock\"></i></span>\r\n                    <input pInputText type=\"password\"\r\n                        #txtUserPWD\r\n                        id=\"txtUserPWD\"\r\n                        autocomplete=\"new-password\"\r\n                        [(ngModel)]=\"userPWD\"\r\n                        class=\"form-control input-select-control\"\r\n                        name=\"txtPassword\"\r\n                        placeholder=\"패스워드\"\r\n                        minlength=\"6\"\r\n                        (keyup.enter)=\"onEnterkeyPress($event, 'pwd')\"\r\n                        maxlength=\"14\"\r\n                        style=\"border-radius:0;\"\r\n                        required>\r\n                </div>\r\n            </div>\r\n            <div class=\"col-12\" [hidden]=\"!statusText\">\r\n                <p\r\n                    class=\"text-center text-danger\"\r\n                    style=\"font-size: 10pt; font-weight: bold\">\r\n                        {{statusText}}\r\n                </p>\r\n            </div>\r\n            <div class=\"col-12\">\r\n                <p-divider></p-divider>\r\n            </div>\r\n            <div class=\"col-12 td-white\">\r\n                <dv-button\r\n                    label=\"로그인\"\r\n                    additionalClass=\"btn-flex btn-lg\"\r\n                    (handleClick)=\"loginClick()\">\r\n                </dv-button>\r\n            </div>\r\n        </div>\r\n    </form>\r\n</div>\r\n`;\r\n\r\n@Component ({\r\n    selector: \"dv-login\",\r\n    template: \"\"\r\n})\r\nexport abstract class DvLoginComponent implements OnInit, AfterViewChecked, OnDestroy {\r\n    @ViewChild(\"txtUserID\", { static: true }) public txtUserID: ElementRef;\r\n    @ViewChild(\"txtUserPWD\", { static: true }) public txtUserPWD: ElementRef;\r\n    @Output() public loginEmit = new EventEmitter<boolean>();\r\n    public clientInfo: ClientInfo = null;\r\n    public userInfo: UserInfo;\r\n    public userID: string;\r\n    public userPWD: string;\r\n    public statusText: string;\r\n    public visibleCompany = true;\r\n    public dialogObj = {\r\n        title: \"dvWMS\",\r\n        message: \"\",\r\n        btnLabel: \"확 인\"\r\n    };\r\n    public companyCategory = {\r\n        selected : null,\r\n        options: []\r\n    };\r\n    public myTimer: any = null;\r\n    public errorMessage: string;\r\n    constructor(\r\n        public cdRef: ChangeDetectorRef,\r\n        public zone: NgZone\r\n        ) {\r\n        this.userInfo = dvCom.userInfo;\r\n    }\r\n\r\n    protected abstract loginCall(myUserId: string, myPassword: string): void;\r\n    protected abstract getCompanyList(): void;\r\n\r\n    public ngOnInit(): void {\r\n        let url: string[] = [];\r\n        url = document.location.href.split(\"?\");\r\n        if (url.length > 1 && url[1].indexOf(\"id=guest\") !== -1) {\r\n            const id: string = \"guest\";\r\n            this.userID = id;\r\n            this.userPWD = id;\r\n        }\r\n        this.getCompanyList();\r\n        if (dvCom.clientInfo) {\r\n            this.clientInfo = dvCom.clientInfo;\r\n        }\r\n        this.idComponentFocus(false);\r\n    }\r\n    public ngOnDestroy() {\r\n        if (this.myTimer !== null) {\r\n            window.clearInterval(this.myTimer);\r\n            this.myTimer = null;\r\n        }\r\n    }\r\n    public idComponentFocus(isLogout: boolean) {\r\n        this.myTimer = setInterval(() => {\r\n            if (!!(this.userInfo.isLogin) === false ||  this.userInfo.isLogin === false) {\r\n                const idComponent: any = document.getElementById(\"txtUserID\");\r\n                const pwdComponent: any = document.getElementById(\"txtUserPWD\");\r\n                if (isLogout === true) {\r\n                    this.userPWD = null;\r\n                    pwdComponent.value = \"\";\r\n                }\r\n                idComponent.select();\r\n                idComponent.focus();\r\n            }\r\n            window.clearInterval(this.myTimer);\r\n            this.myTimer = null;\r\n        }, 1000);\r\n    }\r\n    public ngAfterViewChecked() {\r\n        try {\r\n            if (dvCom.clientInfo) {\r\n                this.clientInfo = dvCom.clientInfo;\r\n            }\r\n        } catch (err) {\r\n            console.log(err);\r\n        }\r\n        this.cdRef.detectChanges();\r\n    }\r\n    public getVisibleCompany() {\r\n        if (this.companyCategory.options.length === 0) {\r\n            this.visibleCompany = true;\r\n        } else if (this.companyCategory.options.length > 1) {\r\n            this.visibleCompany = true;\r\n        } else {\r\n            this.visibleCompany = false;\r\n        }\r\n    }\r\n    public reloadCompanyClick() {\r\n        this.companyCategory = {\r\n            selected : null,\r\n            options: []\r\n        };\r\n        this.getCompanyList();\r\n    }\r\n    public onEnterkeyPress(key, mode) {\r\n        const btnElement = document.getElementById(\"btnLogin\");\r\n        if (btnElement) {\r\n            btnElement.focus();\r\n        }\r\n        this.loginClick();\r\n    }\r\n    public guestClick(guest: string): void {\r\n        this.loginGen(guest, guest);\r\n    }\r\n    private verifyLogin(myUserId, myPassword): boolean {\r\n        if (this.companyCategory.selected === undefined ||\r\n            this.companyCategory.selected === null) {\r\n            this.statusText = \"소속된 회사가 선택되지 않았습니다. Reload 버튼을 터치 하십시오.\";\r\n            return false;\r\n        }\r\n        if (myUserId === undefined || myUserId === \"\") {\r\n            this.statusText = \"아이디를 입력해주세요.\";\r\n            if (!!this.txtUserID === true && !!this.txtUserID.nativeElement === true) {\r\n                this.txtUserID.nativeElement.focus();\r\n            }\r\n            return false;\r\n        }\r\n        if (myUserId.length < 4) {\r\n            this.statusText = \"아이디는 4자 이상입력하셔야 합니다.\";\r\n            if (!!this.txtUserID === true && !!this.txtUserID.nativeElement === true) {\r\n                this.txtUserID.nativeElement.focus();\r\n            }\r\n            return false;\r\n        }\r\n        if (myPassword === undefined || myPassword === \"\") {\r\n            this.statusText = \"패스워드를 입력해주세요.\";\r\n            if (!!this.txtUserPWD === true && !!this.txtUserPWD.nativeElement === true) {\r\n                this.txtUserPWD.nativeElement.focus();\r\n            }\r\n            return false;\r\n        }\r\n        if (myPassword.length < 4) {\r\n            this.statusText = \"패스워드는 4자 이상입력하셔야 합니다.\";\r\n            if (!!this.txtUserPWD === true && !!this.txtUserPWD.nativeElement === true) {\r\n                this.txtUserPWD.nativeElement.focus();\r\n            }\r\n            return false;\r\n        }\r\n        return true;\r\n    }\r\n    public loginGen(myUserId, myPassword): void {\r\n        this.statusText = \"\";\r\n        if (!this.verifyLogin(myUserId, myPassword)) { return; }\r\n        this.loginCall(myUserId, myPassword);\r\n    }\r\n    public decryptUserInfo(user) {\r\n        user.userSeq = dvCom.decrypt(user.userSeq, dvCom.aesKey);\r\n        user.authority = dvCom.decrypt(user.authority, dvCom.aesKey);\r\n        user.empCd = dvCom.decrypt(user.empCd, dvCom.aesKey);\r\n        user.loginId = dvCom.decrypt(user.loginId, dvCom.aesKey);\r\n    }\r\n    public succeedUserData(user) {\r\n        this.decryptUserInfo(user);\r\n        this.userInfo.userID = user.loginId.replace(user.coCd, \"\").replace(\"_\", \"\");\r\n        this.userInfo.userName = user.usrNm;\r\n        this.userInfo.userSeq = user.userSeq;\r\n        this.userInfo.userNo = user.empCd;\r\n        this.userInfo.departCode = user.deptCd;\r\n        this.userInfo.departName = user.deptNm;\r\n        this.userInfo.grpCD = user.grpCd;\r\n        this.userInfo.workType = user.workType;\r\n        this.userInfo.centerCode = user.centerCd;\r\n        this.userInfo.centerName = user.centerNm;\r\n        this.userInfo.factCode = user.divCd;\r\n        this.userInfo.factName = user.divNm;\r\n        this.userInfo.companyCode = user.coCd;\r\n        this.userInfo.companyName = user.coNm;\r\n        this.userInfo.userAuthority = user.authority;\r\n        this.userInfo.isLogin = true;\r\n        this.userInfo.userPWD = user.usrPwd;\r\n        dvCom.aesKey = user.aesKey;\r\n        dvCom.mainApp.clientInfo = dvCom.clientInfo;\r\n        dvCom.mainApp.mainStatusText = \"dvWMS Succeed log in...\";\r\n        this.loginEmit.emit(this.userInfo.isLogin);\r\n    }\r\n    // public method Area\r\n    public loginClick(): void {\r\n        if (dvCom.isPopupModalShow) {\r\n            return;\r\n        }\r\n        this.zone.run(() => {\r\n            if (!this.userID) {\r\n                if (!!this.txtUserID === true && !!this.txtUserID.nativeElement === true) {\r\n                    this.userID = this.txtUserID.nativeElement.value;\r\n                }\r\n            }\r\n            if (!this.userPWD) {\r\n                if (!!this.txtUserPWD === true && !!this.txtUserPWD.nativeElement === true) {\r\n                    this.userPWD = this.txtUserPWD.nativeElement.value;\r\n                }\r\n            }\r\n            this.loginGen(this.userID, this.userPWD);\r\n        });\r\n     }\r\n    public extractData(data: any): void {\r\n        if (!data) {\r\n            dvCom.alertBoxShow(\"서버 에러\", \"네트워크가 불안정하거나 웹 서버가 연결되지 않았습니다. 관리자에게 문의 하십시오.\", \"확인\");\r\n            return;\r\n        }\r\n        if (data.resultMode === \"F\" || data.rows.length === 0) {\r\n            if (!!this.txtUserID === true && !!this.txtUserID.nativeElement === true) {\r\n                this.txtUserID.nativeElement.blur();\r\n            }\r\n            if (!!this.txtUserPWD === true && !!this.txtUserPWD.nativeElement === true) {\r\n                this.txtUserPWD.nativeElement.blur();\r\n            }\r\n            dvCom.alertBoxShow(\"로그인 에러\", \"아이디와 비밀번호가 틀립니다.\", \"확인\");\r\n            return;\r\n        }\r\n        const user: any = data.rows[0];\r\n        if (user.result === 0) {\r\n            dvCom.alertBoxShow(\"로그인 에러\", \"존재하지 않는 아이디 입니다. 아이디를 확인해주십시오.\", \"확인\");\r\n        } else if (user.result === 1) {\r\n            dvCom.alertBoxShow(\"로그인 에러\", \"비밀 번호가 틀렸습니다. 비밀 번호를 확인해주십시오.\", \"확인\");\r\n        } else if (user.result === 2) {\r\n            this.succeedUserData(user);\r\n        } else {\r\n            dvCom.alertBoxShow(\"로그인 에러\", \"사용자 로그인 중 알수 없는 오류가 발생 했습니다. 관리자에게 문의 하십시오.\", \"확인\");\r\n        }\r\n    }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}