From c5219a512b54562182c66d4501b258fb94d38e32 Mon Sep 17 00:00:00 2001 From: HelenHuang <LinHuang@pollex.com.tw> Date: 星期四, 31 三月 2022 10:55:53 +0800 Subject: [PATCH] Update: 預設錯誤訊息改從title取 --- PAMapp/pages/consultantLogin/index.vue | 228 ++++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 146 insertions(+), 82 deletions(-) diff --git a/PAMapp/pages/consultantLogin/index.vue b/PAMapp/pages/consultantLogin/index.vue index bda41c9..e098605 100644 --- a/PAMapp/pages/consultantLogin/index.vue +++ b/PAMapp/pages/consultantLogin/index.vue @@ -6,125 +6,187 @@ <div class="pam-consultant-login__title">撣唾��</div> <div class="position-r mt-10"> <input type="text" - v-model="consultantDto.account" + v-model="consultantDto.username" class="pam-consultant-login__input" placeholder="頛詨eService撣唾��"> - <div class="pam-consultant-login__inputIcon text--primary cursor--pointer" - @click="recordAccount"> - <i :class="[isRemember ? 'icon-checkbox-1' : 'icon-checkbox','pr-5']"></i> + <div class="pam-consultant-login__inputIcon text--primary cursor--pointer fix-chrome-click--issue" + @click="isRememberChange"> + <i :class="[isRememberUserName ? 'icon-checkbox-1' : 'icon-checkbox','pr-5']"></i> 閮�� </div> </div> </div> <div class="pam-paragraph"> - <div class="pam-consultant-login__title "> - <div>撖Ⅳ</div> - <a class="pam-consultant-login__forgot-password cursor--pointer" - :href="forgotPasswordLink" - target="_blank" - rel="靽�犖憯�"> - 敹��Ⅳ嚗� - </a> - </div> + <div class="pam-consultant-login__title ">撖Ⅳ</div> <div class="position-r mt-10"> - <input :type="[isShowPassword ? 'text' : 'password']" + <input :type="[ isShowPassword ? 'text' : 'password']" v-model="consultantDto.password" class="pam-consultant-login__input" placeholder="頛詨eService撖Ⅳ"> - <div class="pam-consultant-login__inputIcon cursor--pointer" + <div class="pam-consultant-login__inputIcon cursor--pointer fix-chrome-click--issue" @click="isShowPassword = !isShowPassword"> - <i :class="[isShowPassword ? 'icon-eye-1 fs-25' : 'icon-eye' , 'text--primary']"></i> + <i :class="[isShowPassword ? 'icon-eye':'icon-eye-1 fs-25', 'text--primary']"></i> </div> </div> </div> <div class="pam-paragraph"> <div class="pam-consultant-login__title"> - <div>撽�Ⅳ</div> - <div class="text--dark-blue fs-16 cursor--pointer" - @click="regenerateCode">������</div> + <div>撽�Ⅳ <span class="text--dark-blue fs-16">(����之撠神)</span></div> + <div class="text--primary fs-16 cursor--pointer fix-chrome-click--issue" + @click="regenerateImgOfVerification">������</div> </div> <div class="pam-consultant-login__verifyBlock mt-10"> <div class="w-55"> <input type="text" - v-model="consultantDto.verificationCode" + v-model="verificationCode" + maxlength="4" class="pam-consultant-login__input"> </div> <div class="pam-consultant-login__verifyImg"> - <img src="~/assets/images/logo.png" alt="撽�Ⅳ"> + <img :src="imgSrc" alt="撽�Ⅳ"> </div> </div> </div> <div class="pam-consultant-login__confirmBlock pam-paragraph"> - <button class="pam-consultant-login__confirm cursor--pointer" - @click="fakeLogin">�</button> + <button class="pam-consultant-login__confirm cursor--pointer fix-chrome-click--issue" + @click="sendInfo">�</button> </div> </div> </div> </template> <script lang="ts"> - import { Vue, Component} from 'vue-property-decorator'; - import { getForgotPasswordLink , getVerificationCodeImg , login } from '~/assets/ts/api/consultant'; - import { Role } from '../../components/NavBar.vue'; + import { Vue, Component , namespace } from 'nuxt-property-decorator'; + import { AxiosError } from 'axios'; + import { Role } from '~/shared/models/enum/Role'; + import messageBoxService from '~/shared/services/message-box.service'; + import loginService from '~/shared/services/login.service' +import { AgentInfo } from '~/shared/models/agent-info.model'; + + const loginStore = namespace('login.store'); + const roleStorage = namespace('localStorage'); + @Component({ - layout: 'default' + layout: 'home' }) export default class ConsultantLogin extends Vue { - isRemember = false; - isShowPassword = false; - consultantDto = { - account: '', - password: '', - verificationCode: '', - } - forgotPasswordLink = ''; - imgOfVerificationCode=''; - mounted() { - this.regenerateCode(); - this.getLinkOfForgotPassword(); - }; - private getLinkOfForgotPassword():void{ - getForgotPasswordLink().then(link=>{ - console.log('link',link); - this.forgotPasswordLink = link; - }); - }; - recordAccount(): void { - this.isRemember = !this.isRemember; - if (this.isRemember) { - console.log('sotre account'); - } - }; - regenerateCode(): void { - getVerificationCodeImg().then((imgOfbase64:any)=>{ - this.imgOfVerificationCode = imgOfbase64; - }); - }; - // loginWithConsultant():void{ - // console.log('consultantDto',this.consultantDto); - // logInToConsultant(this.consultantDto).then(res=>{ - // localStorage.setItem('roleOfState',Role.CONSULTANT); - // this.$router.push('/myAppointmentList/appointmentList'); - // }); - // } + @roleStorage.Mutation + storageIdToken!: (token: string) => void; - fakeLogin(): void { - const user = { - username: 'admin', - password: 'admin' + @roleStorage.Mutation + storageRole!: (role: string) => void; + + @roleStorage.Mutation + storageConsultantId!:(id:string) => void; + + @loginStore.Action + getLoginConsultantDetail!: (agentNo: string) => Promise<AgentInfo>; + + consultantDto = { + password: '', + username: '', + }; + imgSrc = ''; + isRememberUserName = false; + isShowPassword = false; + verificationCode=''; + + //////////////////////////////////////////////////////////////////// + + mounted() { + this.getInitUserName(); + this.regenerateImgOfVerification(); + }; + + private getInitUserName(): void { + const username = localStorage.getItem('consultantUserName') + if (username) { + this.consultantDto.username = username; + this.isRememberUserName = true; + } + } + + //////////////////////////////////////////////////////////////////// + + + public regenerateImgOfVerification(): void { + loginService.getImgOfVerification().then( imgOfBase64 => + this.imgSrc = imgOfBase64 + ); + }; + + public isRememberChange():void{ + this.isRememberUserName = !this.isRememberUserName; + this.storeUserName(); + } + + public sendInfo():void{ + this.isAlreadyDone + ? this.verify() + : messageBoxService.showErrorMessage('隢Ⅱ隤董����Ⅳ隞亙���Ⅳ��憛怠神摰'); + } + + get isAlreadyDone():boolean{ + return !!(this.verificationCode && this.consultantDto.username && this.consultantDto.password); + } + + + //////////////////////////////////////////////////////////////////// + + private verify():void{ + loginService.getVerificationStatus(this.verificationCode).then( verifySuccess => { + if(verifySuccess.data){ + this.loginWithConsultant(); + }else{ + this.clearValue(); + this.regenerateImgOfVerification(); + messageBoxService.showErrorMessage('撽�Ⅳ頛詨�隤�'); } - console.log('user',user); - login(user).then((res) => { - localStorage.setItem('id_token', res.data.id_token); - localStorage.setItem('roleOfState',Role.ADMIN) - this.$router.push('/myAppointmentList/appointmentList'); - }) + }); + } + + private loginWithConsultant(): void { + loginService.logInToConsultant(this.consultantDto).then(res => { + this.getLoginConsultantDetail(this.consultantDto.username); + this.storageIdToken(res.data.id_token); + this.storageRole(Role.ADMIN); + this.storageConsultantId(this.consultantDto.username) + this.storeUserName(); + this.$router.push('/myAppointmentList/appointmentList'); + }).catch((error:AxiosError)=>{ + this.checkHttpErrorStatus(error); + }); + } + private checkHttpErrorStatus(error:any):void{ + this.clearValue(); + this.regenerateImgOfVerification(); + switch (error.response.status) { + case 401: + const errorMsg = error.response.data.detail; + messageBoxService.showErrorMessage(errorMsg); + break; + + default: + const defaultErrorMsg = error.response.data.title + messageBoxService.showErrorMessage('',defaultErrorMsg); + break; + } + } + + private storeUserName(): void { + localStorage.setItem('consultantUserName', this.isRememberUserName ? this.consultantDto.username : ''); + }; + + private clearValue():void{ + if (!this.isRememberUserName) this.consultantDto.username=''; + this.consultantDto.password = ''; + this.verificationCode = ''; } }; </script> -<style lang="scss" - scoped> + +<style lang="scss" scoped> .mt-20 { margin-top: 20px; } @@ -182,11 +244,13 @@ right: 15px; } } - &__forgot-password{ - color: $PRIMARY_RED; - text-decoration:none; - font-size: 16px; + + &__forgot-password { + color: $PRIMARY_RED; + text-decoration: none; + font-size: 16px; } + &__verifyBlock { display: flex; justify-content: space-between; @@ -194,9 +258,9 @@ &__verifyImg { width: 126px; - border: 1px black solid; height: 50px; - img{ + border:1px #cccccc solid; + img { width: 100%; height: 100%; } -- Gitblit v1.8.0