From ae4db5435180c44b37f521c463b17f2023ac1d8c Mon Sep 17 00:00:00 2001
From: wayne <wayne8692wayne8692@gmail.com>
Date: 星期五, 18 二月 2022 09:25:50 +0800
Subject: [PATCH] [update] 若顧問停用時,將無法登入 (文案待確認)

---
 PAMapp/pages/accountSetting/index.vue |  605 ++++++++++++++++++++++++++++++------------------------
 1 files changed, 337 insertions(+), 268 deletions(-)

diff --git a/PAMapp/pages/accountSetting/index.vue b/PAMapp/pages/accountSetting/index.vue
index ff8eec9..bf3a713 100644
--- a/PAMapp/pages/accountSetting/index.vue
+++ b/PAMapp/pages/accountSetting/index.vue
@@ -1,134 +1,221 @@
 <template>
-<div class="account-page">
-    <div class="account-page-title">�犖撣唾�身摰�</div>
-    <section class="account-card" :class="{'edit': !userNameDisabled }"> 
-        <div class="header">
-            <div class="block">
-                <div class="setting-title">憪��</div>
-                <div class="contact-type">
-                    <input
-                        :disabled="userNameDisabled"
-                        v-model="userNameValue" 
-                        ref="userName"
-                        class="input name-input"
-                        >
-                    <div class="error-txt">
-                        <span v-show="!nameValid" class="error">甇斗���‵</span>
-                    </div>
-                </div>
-                
-            </div>
-            <i class="icon-edit icon" @click="editField('userName')" :class="{'icon-color-change': !userNameDisabled}"></i>
+  <div class="pam-account-setting">
+    <div class="pam-paragraph text--middle">�犖撣唾�身摰�</div>
+    <div class="pam-paragraph account-info " >
+      <div class="account-info__title text--middle">憪��</div>
+      <div class="account-info__input" :class="{'edit': !userNameDisabled }">
+        <input
+          :disabled="userNameDisabled"
+          v-model="userNameValue"
+          ref="userName"
+          class="account-info__input-text">
+        <div class="account-info__input-error">
+            <span v-show="!nameValid" class="error">甇斗���‵</span>
         </div>
-        
-    </section>
-
-    <section class="account-card" :class="{'edit': !userPhoneDisabled }"> 
-        <div class="header">
-            <div class="block">   
-            <div class="setting-title">蝬��</div>
-            <div class="contact-type">
-                ����Ⅳ
-                <input
-                    :disabled="userPhoneDisabled"
-                    v-model="phoneValue" 
-                    :class="{
-                    'is-invalid': !phoneValid
-                    }"
-                    ref="userPhone"
-                    class="contact-input input"
-                    :placeholder="phoneValue || '撠������Ⅳ'"
-                >
-                <div class="error-txt">
-                    <span v-show="!phoneValid" class="error">����Ⅳ�撘�炊</span>
-                </div>
-            </div>
-            </div>
-            
-            <i class="icon-edit icon" 
-                @click="editField('userPhone')"
-                :class="{'icon-color-change': !userPhoneDisabled}"></i>
-        </div>
-        
-    </section>
-
-    <section class="account-card" :class="{'edit': !userEmailDisabled }"> 
-        <div class="header">
-            <div class="block">
-            <div class="setting-title">蝬��</div>
-                <div class="contact-type">Email
-                    <input 
-                        :disabled="userEmailDisabled"
-                        v-model="emailValue"
-                        :class="{
-                        'is-invalid': !emailValid
-                        }"
-                        ref="userEmail"
-                        class="contact-input input"
-                        :placeholder="emailValue || '撠���� Email'"
-                        >
-                    <div class="error-txt">
-                        <span v-show="!emailValid" class="error">靽∠拳�撘�炊</span>
-                    </div>
-                </div>
-                </div>
-                
-                <i class="icon-edit icon" @click="editField('userEmail')" 
-                        :class="{'icon-color-change': !userEmailDisabled}"></i>
-        </div>
-        
-    </section>
-
-    <div class="account-setting-btn mb-30">
-        <el-button 
-            :disabled="isSubmitBtnDisabled"
-            @click.native="updateAccountSetting">�</el-button>
+      </div>
+      <div class="account-info__icon text--middle">
+        <i class="icon-edit" @click="editField('userName')" :class="{'icon-color-change': !userNameDisabled}"></i>
+      </div>
     </div>
 
-</div>
+    <!-- NOTE: 銝餉�蝯⊥撘� -->
+    <div class="pam-paragraph account-info" v-if="!isPrimaryContactTypeEmail">
+      <div class="account-info__title text--middle">蝬��</div>
+      <div class="account-info__input " :class="{'edit': !userPhoneDisabled }">
+        <div class="text--middle mb-10">����Ⅳ</div>
+        <input :disabled="userPhoneDisabled"
+          v-model="phoneValue"
+          :class="{'is-invalid': !phoneValid}"
+          ref="userPhone"
+          class="account-info__input-text"
+          :placeholder="phoneValue ||'撠������Ⅳ'">
+        <div class="account-info__input-error">
+            <span v-show="!phoneValid" class="error">����Ⅳ�撘�炊</span>
+        </div>
+      </div>
+    </div>
+
+    <div class="pam-paragraph account-info" v-if="isPrimaryContactTypeEmail">
+      <div class="account-info__title text--middle">蝬��</div>
+      <div class="account-info__input" :class="{'edit': !userEmailDisabled }">
+        <div class="text--middle mb-10">Email</div>
+        <el-input
+              :disabled ="userEmailDisabled"
+              type="textarea"
+              autosize
+              resize="none"
+              v-model="emailValue"
+              :class="{'is-invalid': !emailValid }"
+              ref="userEmail"
+              class="account-info__input-text text--break-all"
+              style="margin-left:-10px"
+              :placeholder="emailValue || '撠���� Email'">
+          </el-input>
+        <div class="account-info__input-error">
+            <span v-show="!emailValue" class="error">靽∠拳�撘�炊</span>
+        </div>
+      </div>
+    </div>
+
+    <!-- NOTE: ���蝯⊥撘� -->
+
+    <div
+      v-if="(!defaultUserSetting.phone || !defaultUserSetting.email) && !otherContactType"
+      class="text--underline text--primary"
+      @click="editOtherContactType">+�隞��蝜急撘�</div>
+
+    <template v-if="(defaultUserSetting.phone && defaultUserSetting.email) || otherContactType">
+
+      <div v-if="!isPrimaryContactTypeEmail">
+
+         <div class="pam-paragraph account-info">
+        <div class="account-info__title text--middle">��</div>
+          <div class="account-info__input " :class="{'edit': !userEmailDisabled }" >
+          <div class="text--middle mb-10 account-info-dele-other-contact-type">
+            <div>Email</div>
+            <div class="account-info__icon text--middle">
+              <i class="icon-delet" v-if="defaultUserSetting.mail" @click="isShowDeleteDialog = true"></i>
+              <i class="icon-edit"  @click="editField('userEmail')" :class="{'icon-color-change': !userEmailDisabled}"></i>
+            </div>
+          </div>
+          <el-input
+              type="textarea"
+              autosize
+              :disabled="userEmailDisabled"
+              resize="none"
+              v-model="emailValue"
+              :class="{'is-invalid': !emailValid }"
+              ref="userEmail"
+              class="account-info__input-text text--break-all"
+              style="margin-left:-10px"
+              :placeholder="emailValue || '撠���� Email'">
+          </el-input>
+            <div class="account-info__input-error">
+              <span v-show="!emailValid" class="error">靽∠拳�撘�炊</span>
+            </div>
+        </div>
+          </div>
+
+      </div>
+
+      <div class="pam-paragraph account-info" v-if="isPrimaryContactTypeEmail">
+
+        <div class="account-info__title text--middle">��</div>
+          <div class="account-info__input" :class="{'edit': !userPhoneDisabled }">
+          <div class="text--middle mb-10 account-info-dele-other-contact-type">
+            <div>����Ⅳ</div>
+            <div class="account-info__icon text--middle">
+              <i class="icon-delet" v-if="defaultUserSetting.phone" @click="isShowDeleteDialog = true"></i>
+              <i class="icon-edit" @click="editField('userPhone')" :class="{'icon-color-change': !userPhoneDisabled}"></i>
+            </div>
+          </div>
+          <input
+            v-model="phoneValue"
+            :disabled="userPhoneDisabled"
+            :class="{'is-invalid': !phoneValid}"
+            ref="userPhone"
+            class="account-info__input-text"
+            :placeholder="phoneValue ||'撠������Ⅳ'">
+          <div class="account-info__input-error">
+              <span v-show="!phoneValid" class="error">����Ⅳ�撘�炊</span>
+          </div>
+        </div>
+          </div>
+
+    </template>
+
+
+    <PopUpFrame :isOpen.sync="updateDone">
+      <div class="text--center mdTxt fs-18">
+        <p class="mt-20 text--center ">撣唾��������</p>
+        <el-button
+                type="primary"
+                @click="confirmUpdateAndBackToHome"
+                class="mt-20"
+              >������</el-button>
+      </div>
+    </PopUpFrame>
+
+    <PopUpFrame :isOpen.sync="isShowDeleteDialog">
+      <div class="text--center mdTxt fs-18">
+      <p class="mt-20 text--center ">��蝣箄����甈���</p>
+          <el-button
+              @click="isShowDeleteDialog = false"
+              class="mt-20"
+            >����</el-button>
+        <el-button
+                type="primary"
+                @click="deleteOtherContactType"
+                class="mt-20"
+              >蝣箄��</el-button>
+      </div>
+    </PopUpFrame>
+
+    <div class="pam-paragraph account-confirm">
+      <el-button :disabled="isSubmitBtnDisabled "
+        @click.native="updateAccountSetting">
+          �
+      </el-button>
+    </div>
+  </div>
 </template>
 
 <script lang="ts">
 import { Vue,Component } from 'vue-property-decorator'
-import { getUserAccountSetting, updateAccountSetting } from '~/assets/ts/api/consultant';
-import { UserSetting } from '~/assets/ts/models/account.model';
+import { namespace } from 'vuex-class';
+
+import _ from 'lodash';
+
+import accountSettingService from '~/shared/services/account-setting.service';
+import { UserSetting } from '~/shared/models/account.model';
+
+const localStorageStore = namespace('localStorage');
 
 @Component
 export default class AccountSetting extends Vue {
-        _userSetting!: UserSetting;
-        userNameDisabled = true;
-        userPhoneDisabled = true;
-        userEmailDisabled = true ;
-        userNameValue = '';
-        phoneValue = '' ;
-        emailValue = '' ;
 
-        onEditMode = false;
-        formValidStatus = {
-            name: true,
+  @localStorageStore.Getter
+  isPrimaryContactTypeEmail!: boolean;
+
+
+  defaultUserSetting: UserSetting = {
+    name :  '',
+    phone:  '',
+    email:  '',
+  };
+
+  userNameDisabled  = true;
+  userPhoneDisabled = true;
+  userEmailDisabled = true ;
+  otherContactType = false;
+  isShowDeleteDialog = false;
+
+  updateDone        = false;
+  userNameValue     = '';
+  phoneValue        = '' ;
+  emailValue        = '' ;
+  formValidStatus = {
+            name : true,
             phone: true,
             email: true,
-        };
+    };
 
-        get nameValid(): boolean {
-            this.formValidStatus.name = this.userNameValue ? true : false;
-            return this.formValidStatus.name;
+////////////////////////////////////////////////////////////
+  mounted(){
+            accountSettingService.getUserAccountSetting().then((userInfo: UserSetting)=>{
+                this.defaultUserSetting = _.cloneDeep({
+                    name : userInfo.name || '',
+                    phone: userInfo.phone || '',
+                    email: userInfo.email || '',
+                });
+                this.phoneValue    = this.defaultUserSetting.phone!;
+                this.userNameValue = this.defaultUserSetting.name!;
+                this.emailValue    = this.defaultUserSetting.email!;
+            })
         }
+////////////////////////////////////////////////////////////
 
-        get phoneValid(): boolean {
-            const rule = /^09[0-9]{8}$/;
-            this.formValidStatus.phone = this.phoneValue ? rule.test(this.phoneValue) : true;
-            return this.formValidStatus.phone;
-        }
-
-        get emailValid(): boolean {
-            const rule = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
-            this.formValidStatus.email = this.emailValue ? rule.test(this.emailValue) : true;;
-            return this.formValidStatus.email;
-        }
-
-        editField(fieldName: string): void {
-            this.onEditMode = true;
+  editField(fieldName: string): void {
             const enablePromise = new Promise((resolve, reject) => { // 甇斤promise隤��
                 resolve((this as any)[`${fieldName}Disabled`] = false);
             });
@@ -137,179 +224,161 @@
                 targetInput.focus();
             });
         }
+  updateAccountSetting(): void {
+      const editSettingInfo: UserSetting = {
+          name: this.userNameValue,
+          phone: this.phoneValue,
+          email: this.emailValue
+      }
+      accountSettingService.updateAccountSetting(editSettingInfo).then((res: any) => {
+          this.resetSettingForm();
+          this.updateDone = true;
+          this.defaultUserSetting = editSettingInfo;
+      });
+  }
 
-        get isSubmitBtnDisabled(): boolean {
-            const isFormValid = this.formValidStatus.name && this.formValidStatus.phone && this.formValidStatus.email;
-            return !isFormValid || !this.onEditMode
-                || (!this.phoneValue && !this.emailValue);
-        }
-
-        updateAccountSetting(): void {
-            // const dataChanged = (): boolean => {
-            //     return this._userSetting.name !== this.userNameValue
-            //         || this._userSetting.phone !== this.phoneValue
-            //         || this._userSetting.email !== this.emailValue;
-            // };
-            // if (dataChanged) {
-
-            // }
-            if (!this.onEditMode) return;
-            const editSettingInfo: UserSetting = {
-                name: this.userNameValue,
-                phone: this.phoneValue,
-                email: this.emailValue
-            }
-            updateAccountSetting(editSettingInfo).then((res: any) => {
-                console.log('updateRes:', res);
-                this.resetSettingForm();
-            });
-        }
-
-        private resetSettingForm(): void {
-            this.onEditMode = false;
+  private resetSettingForm(): void {
             this.userNameDisabled = true;
             this.userPhoneDisabled = true;
             this.userEmailDisabled = true ;
         }
 
-        mounted(){
-            getUserAccountSetting().then((userInfo: UserSetting)=>{
-                this._userSetting = {
-                    name: userInfo.name || '',
-                    phone: userInfo.phone || '',
-                    email: userInfo.email || '',
-                };
+  editOtherContactType(){
+    this.otherContactType = true;
+    setTimeout(() => {
+      if (this.isPrimaryContactTypeEmail) {
+        this.editField('userPhone');
+      } else {
+        this.editField('userEmail');
+      }
+    }, 0);
+  }
 
-                this.phoneValue = this._userSetting.phone!;
-                this.userNameValue = this._userSetting.name!;
-                this.emailValue = this._userSetting.email!;
-            })
+  deleteOtherContactType(): void {
+    const editSettingInfo: UserSetting = {
+        name: this.userNameValue,
+        phone: '',
+        email: '',
+    };
+
+    if (this.isPrimaryContactTypeEmail) {
+      editSettingInfo.email = this.emailValue;
+    } else {
+      editSettingInfo.phone = this.phoneValue;
+    }
+
+    accountSettingService.updateAccountSetting(editSettingInfo).then((res: any) => {
+        this.resetSettingForm();
+        this.updateDone = true;
+        if (this.isPrimaryContactTypeEmail) {
+          this.phoneValue = '';
+          this.defaultUserSetting.phone = '';
+        } else {
+          this.emailValue = '';
+          this.defaultUserSetting.email = '';
         }
+        this.isShowDeleteDialog = false;
+        this.otherContactType = false;
+    });
+
+  }
+
+////////////////////////////////////////////////////////////
+
+  get nameValid(): boolean {
+            this.formValidStatus.name = this.userNameValue ? true : false;
+            return this.formValidStatus.name;
+        }
+
+  get phoneValid(): boolean {
+            const rule = /^09[0-9]{8}$/;
+            this.formValidStatus.phone = this.phoneValue ? rule.test(this.phoneValue) : true;
+            return this.formValidStatus.phone;
+        }
+
+  get emailValid(): boolean {
+            const rule = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
+            this.formValidStatus.email = this.emailValue ? rule.test(this.emailValue) : true;
+            return this.formValidStatus.email;
+        }
+  get isSubmitBtnDisabled(): boolean {
+            const isFormValid = this.formValidStatus.name && this.formValidStatus.phone && this.formValidStatus.email;
+            const isOtherContactTypeChange = this.isPrimaryContactTypeEmail
+                                            ? this.defaultUserSetting.phone !== this.phoneValue
+                                            : this.defaultUserSetting.email !== this.emailValue;
+            return !isFormValid
+                  || (this.userNameValue === this.defaultUserSetting.name
+                  && !isOtherContactTypeChange);
+        }
+
+  confirmUpdateAndBackToHome():void{
+      this.updateDone = false
+      this.$router.push('/accountSetting')
+  }
 
 }
 
 
 </script>
 
-<style lang="scss" scoped>
-.account-page{
-    .block{
-        display: flex;
+<style lang="scss">
+.pam-account-setting {
+  .account-info{
+    display: flex;
+    align-items: baseline;
+    border-bottom: 1px gray solid;
+    padding: 15px 15px 15px 30px;
+    .account-info__title{
+      width: 58px;
     }
-    .account-page-title{
+    .account-info__input{
+      flex: 1;
+      &.edit {
+        .account-info__input-text{
+          border: 1px solid lightgray;
+          background-color: #fff;
+        }
+      }
+      .account-info__input-text{
+        border: 0;
+        background-color: rgba(0,0,0,0) ;
+        outline-color: gainsboro;
+        box-sizing: border-box;
+        -webkit-box-sizing: border-box;
+        -moz-box-sizing: border-box;
+        padding: 3px 10px;
+        width: 100%;
         font-size: 20px;
-        margin-bottom: 34px;
+        &:disabled{
+          padding: 0px;
+        }
+      }
+      .account-info__input-error{
+        @extend .smTxt_bold,.text--primary;
+        margin-top: 10px;
+      }
     }
-    .account-card{
-        display: flex;
-        flex-direction: column;
-        border-bottom: 1px solid gray;
-        margin-bottom: 33px;
-        .contact-type{
-            width: 184px;
-            margin-right: 16px;
-            font-size: 20px;
-            display: flex;
-            flex-direction: column;
-            align-items: flex-start;
-        }
-        &.edit {
-            input {
-                border: 1px solid lightgray;
-                background-color: #fff;
-            }
-        }
+    .account-info__icon{
+      margin-left: 20px;
+      .icon-color-change{
+        color:$PRIMARY_RED;
+      }
     }
-    .account-setting-btn{
-        display: flex;
-        justify-content: center;
-    }
-}
-.error-txt{
-    padding-bottom: 10px;
-    .error {
-        @extend .smTxt_bold;
-        @extend .text--primary;
-        height: 16px;
-        }
-}
-.name-input{
-            width: 184px;
-            height:27px;
-            margin-bottom: 20px;
-            font-size: 20px;
-            margin-top: -3px;
-        }
-.setting-title{
-            margin-left: 28px;
-            margin-bottom:10px;
-            width: 58px;
-            font-size: 20px;
-        }
-.header{
+  }
+  .account-confirm{
     display: flex;
-    align-items: baseline;
-    justify-content: space-evenly;
-}
-.contact-input{
-    font-size: 20px;
-    margin-bottom: 10px;
-    text-overflow: ellipsis;
-    margin-top: 10px;
-    width: 184px;
-}
-.input{
-    border: 0;
-    background-color: rgba(0,0,0,0) ;
-    outline-color: gainsboro;
-}
-.input:focus{
-    background-color: #fff;
-}
-.icon-color-change{
-    color:$PRIMARY_RED;
-    font-size: 20px;
-}
-.icon{
-    font-size:20px;
-    // color:#1B365D;
-}
-@include desktop{
-    
-    .header{
+    justify-content: center;
+  }
+  .account-info-dele-other-contact-type{
     display: flex;
-    align-items: baseline;
     justify-content: space-between;
-    }
-    .setting-title{
-            margin-bottom:10px;
-            width: 58px;
-            font-size: 18px;
-            font-weight: bold;
-        }
-    .account-page{
-    .account-page-title{
-        font-size: 20px;
-        margin-bottom: 34px;
-        font-weight: bold;
-    }
-    }
-    .account-card{
-        display: flex;
-        flex-direction: column;
-        border-bottom: 1px solid gray;
-        margin-bottom: 33px;
-        .contact-type{
-            margin-left: 10px;
-            font-size: 20px;
-        }
-    }
-    .name-input{
-        width: 550px;
-    }
-    .contact-input{
-        width:550px
-    }
-    }
+  }
 
-</style>
\ No newline at end of file
+  .el-textarea__inner{
+    background-color: rgba(0,0,0,0) ;
+    border: none !important;
+    padding:1px !important;
+  }
+}
+
+</style>

--
Gitblit v1.8.0