From b447eada56299711ac3fb1bc9a698469441e8338 Mon Sep 17 00:00:00 2001
From: 劉鈞霖 <benson@gmail.com>
Date: 星期一, 29 十一月 2021 18:19:22 +0800
Subject: [PATCH] [ Update ] : 顧問登入驗證碼串接以及錯誤控制( 文案暫時 )完成

---
 PAMapp/pages/consultantLogin/index.vue |  130 ++++++++++++++++++++++++------------------
 1 files changed, 74 insertions(+), 56 deletions(-)

diff --git a/PAMapp/pages/consultantLogin/index.vue b/PAMapp/pages/consultantLogin/index.vue
index 5fa40b7..0c14a5f 100644
--- a/PAMapp/pages/consultantLogin/index.vue
+++ b/PAMapp/pages/consultantLogin/index.vue
@@ -10,24 +10,16 @@
             class="pam-consultant-login__input"
             placeholder="頛詨eService撣唾��">
           <div class="pam-consultant-login__inputIcon text--primary cursor--pointer fix-chrome-click--issue"
-            @click="isRemember = !isRemember">
-            <i :class="[isRemember ? 'icon-checkbox-1' : 'icon-checkbox','pr-5']"></i>
+            @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 fix-chrome-click--issue"
-            :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撖Ⅳ">
@@ -37,37 +29,37 @@
           </div>
         </div>
       </div>
-      <!-- <div class="pam-paragraph">
+      <div class="pam-paragraph">
         <div class="pam-consultant-login__title">
           <div>撽�Ⅳ</div>
           <div class="text--dark-blue fs-16 cursor--pointer fix-chrome-click--issue"
-            @click="regenerateCode">������</div>
+            @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>
       <div class="pam-consultant-login__confirmBlock pam-paragraph">
         <button class="pam-consultant-login__confirm cursor--pointer fix-chrome-click--issue"
-          @click="loginWithConsultant">�</button>
+          @click="sendInfo">�</button>
       </div>
     </div>
   </div>
 </template>
 
 <script lang="ts">
-  import { namespace } from 'nuxt-property-decorator';
+  import { Vue, Component , namespace } from 'nuxt-property-decorator';
+  import { getImgOfVerification, logInToConsultant, getVerificationStatus } from '~/assets/ts/api/consultant';
   import { Role } from '~/assets/ts/models/enum/Role';
-  import { Vue, Component } from 'vue-property-decorator';
-  import { getForgotPasswordLink, getVerificationCodeImg, logInToConsultant } from '~/assets/ts/api/consultant';
+  import { MessageBox } from 'element-ui';
 
   const roleStorage = namespace('localStorage');
   @Component({
@@ -77,63 +69,89 @@
     @roleStorage.Mutation storageIdToken!: (token: string) => void;
     @roleStorage.Mutation storageRole!: (role: string) => void;
 
-    isRemember = false;
+    isRememberUserName = false;
     isShowPassword = false;
-    forgotPasswordLink = ''; // 撠
-    imgOfVerificationCode = ''; // 撠
+    imgSrc = '';
+    verificationCode='';
     consultantDto = {
       username: '',
       password: '',
-      verificationCode: '',
+    }
+
+    get isAlreadyDone():boolean{
+      return !!(this.verificationCode && this.consultantDto.username && this.consultantDto.password);
     }
 
     mounted() {
-      this.getRememberUserName();
-      this.regenerateCode();
-      this.getLinkOfForgotPassword();
+      this.getInitUserName();
+      this.regenerateImgOfVerification();
     };
 
-    private getRememberUserName(): void {
+    private getInitUserName(): void {
       const username = localStorage.getItem('consultantUserName')
       if (username) {
         this.consultantDto.username = username;
-        this.isRemember = true;
+        this.isRememberUserName = true;
       }
     }
 
-    private getLinkOfForgotPassword(): void {
-      getForgotPasswordLink().then(link => {
-        this.forgotPasswordLink = link;
-      });
-    };
-    public regenerateCode(): void {
-      getVerificationCodeImg().then(imgOfbase64 => {
-        this.imgOfVerificationCode = imgOfbase64;
-      });
+    public regenerateImgOfVerification(): void {
+      getImgOfVerification().then( imgOfBase64 =>
+        this.imgSrc = imgOfBase64
+      );
     };
 
-    public loginWithConsultant(): void {
-      this.recordAccount();
+    public isRememberChange():void{
+      this.isRememberUserName = !this.isRememberUserName;
+      this.storeUserName();
+    }
 
-      logInToConsultant(this.consultantDto).then(res => {
-            this.storageIdToken(res.data.id_token);
-            this.storageRole(Role.ADMIN);
-            this.$router.push('/myAppointmentList/appointmentList');
-      }, (error) => {
-        this.consultantDto.password = '';
-        this.consultantDto.verificationCode = '';
+    public sendInfo():void{
+      this.isAlreadyDone ? this.verify() : this.showErrorMessageBox('隢Ⅱ隤董����Ⅳ隞亙���Ⅳ��憛怠神摰');
+    }
+
+    private verify():void{
+      getVerificationStatus(this.verificationCode).then( verifySuccess => {
+        verifySuccess.data ? this.loginWithConsultant() : this.showErrorMessageBox('撽�Ⅳ頛詨�隤�');
       });
     }
 
-    private recordAccount(): void {
-      localStorage.setItem('consultantUserName', this.isRemember ? this.consultantDto.username : '');
+    private loginWithConsultant(): void {
+      logInToConsultant(this.consultantDto).then(res => {
+        this.storageIdToken(res.data.id_token);
+        this.storageRole(Role.ADMIN);
+        this.storeUserName();
+        this.$router.push('/myAppointmentList/appointmentList');
+      }, (error) => {
+          this.clearValue();
+      });
+    }
+
+    private showErrorMessageBox(errorMsg:string):void{
+      this.clearValue();
+      MessageBox({
+        message: errorMsg,
+        showClose:false,
+        showConfirmButton:true,
+        confirmButtonText:'蝣箄��',
+        customClass:'pam-message-box',
+        closeOnClickModal:false,
+      });
+    }
+
+    private storeUserName(): void {
+      localStorage.setItem('consultantUserName', this.isRememberUserName ? this.consultantDto.username : '');
     };
+
+    private clearValue():void{
+      this.consultantDto.password = '';
+      this.verificationCode = '';
+    }
   };
 
 </script>
 
-<style lang="scss"
-  scoped>
+<style lang="scss" scoped>
   .mt-20 {
     margin-top: 20px;
   }
@@ -193,9 +211,9 @@
     }
 
     &__forgot-password {
-        color: $PRIMARY_RED;
+      color: $PRIMARY_RED;
       text-decoration: none;
-        font-size: 16px;
+      font-size: 16px;
     }
 
     &__verifyBlock {
@@ -205,8 +223,8 @@
 
     &__verifyImg {
       width: 126px;
-      border: 1px black solid;
       height: 50px;
+      border:1px #cccccc solid;
       img {
         width: 100%;
         height: 100%;

--
Gitblit v1.8.0