From 7cfc771d3ace8f057ef7f534b9ee7c9649ac7d8f Mon Sep 17 00:00:00 2001
From: HelenHuang <LinHuang@pollex.com.tw>
Date: 星期四, 30 十二月 2021 10:09:25 +0800
Subject: [PATCH] [Fix] TODO#133359 [調整文案 - 「你」調整成「您」]

---
 PAMapp/pages/questionnaire/_agentNo.vue |  521 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 508 insertions(+), 13 deletions(-)

diff --git a/PAMapp/pages/questionnaire/_agentNo.vue b/PAMapp/pages/questionnaire/_agentNo.vue
index 9e60e96..7599a69 100644
--- a/PAMapp/pages/questionnaire/_agentNo.vue
+++ b/PAMapp/pages/questionnaire/_agentNo.vue
@@ -1,12 +1,12 @@
 <template>
-  <div class="ques-page--reset" v-if="isLogin">
+  <div class="ques-page--reset" v-if="isUserLogin">
     <div class="ques-header">
         <div class="ques-header__mob-banner"></div>
         <div
           class="ques-header__info"
           v-if="myRequest.contactType==='phone'">
           <div class="text--middle">
-              <div class="mdTxt">雿���蝜急撘�</div>
+              <div class="mdTxt">�����蝜急撘�</div>
               <div class="mt-10">
                   <span>�����</span>
                   <span>{{myRequest.phone}}</span>
@@ -16,7 +16,7 @@
               <div class="datepicker required">
                   <span class="mdTxt">�����蝯∠�靘踵���</span>
                   <PhoneContactTimePicker
-                  :scheduleList.sync="myRequest.hopeContactTime"/>
+                  :scheduleList="myRequest.hopeContactTime"/>
               </div>
           </div>
           <div class="mt-30">
@@ -31,7 +31,7 @@
         </div>
         <div class="ques-header__info" v-else>
           <div class="text--middle">
-              <div class="mdTxt">雿���蝜急撘�</div>
+              <div class="mdTxt">�����蝜急撘�</div>
               <div class="mt-10 ques-header__input-block">
                   <span>Email嚗�</span>
                   <span>{{myRequest.email}}</span>
@@ -55,7 +55,7 @@
               <div class="datepicker">
                   <span class="mdTxt">�����蝯∠�靘踵���</span>
                   <PhoneContactTimePicker
-                  :scheduleList.sync="myRequest.hopeContactTime"/>
+                  :scheduleList="myRequest.hopeContactTime"/>
               </div>
           </div>
         </div>
@@ -80,7 +80,7 @@
           :options="genderOptions" />
       </div>
       <div class="pam-paragraph">
-        <div class="mdTxt">撟湧翩</div>
+        <div class="mdTxt">���僑朣�</div>
         <SingleSelectBtn class="mt-10"
           :singleSelected.sync="myRequest.age"
           :options="ageRangeOptions" />
@@ -92,12 +92,12 @@
         <el-button type="primary"
           :disabled="isDisabledSubmitBtn"
           @click.native="sentDemand">
-          �
+          {{isEditBtn ? '��' : '�'}}
         </el-button>
       </div>
     </div>
 
-    <PopUpFrame :isOpen.sync="showDrawer" :drawerSize=" '95%' ">
+    <PopUpFrame :isOpen.sync="showDrawer">
       <div class="qaTextTitle mdTxt">
         <strong>�閬岷������</strong>
       </div>
@@ -115,8 +115,8 @@
     </PopUpFrame>
 
     <PopUpFrame :isOpen.sync="sendReserve" @update:isOpen="closeReservePopUp">
-        <div class="text--middle  mt-30 sendReserve-txt">�����������憿批���</div>
-        <div class="text--middle  sendReserve-txt">�����蝯∴��</div>
+        <div class="text--middle  mt-30 sendReserve-txt">�������</div>
+        <div class="text--middle sendReserve-txt">�����“�������蝯∴��</div>
         <div class="text--center mdTxt">
           <el-button type="primary"
             @click="closeReservePopUp">
@@ -124,11 +124,506 @@
           </el-button>
         </div>
     </PopUpFrame>
+
+    <PopUpFrame :isOpen.sync="isEditPopup">
+      <div class="text--middle text--center mb-10">撌脫
+        <span class="bold">{{appointmentTime | formatDate}}</span>
+      �脰�����</div>
+      <div class="text--middle text--center mb-30">��蝜潛�楊頛荔��</div>
+      <div class="text--center mdTxt">
+        <el-button @click="$router.go(-1)">餈��</el-button>
+        <el-button @click="isEditPopup = false" type="primary">蝺刻摩</el-button>
+      </div>
+    </PopUpFrame>
   </div>
 </template>
 
-<script src="./questionnaire.component.ts"></script>
+<script lang="ts">
+import { Vue, Component, State, Action, Watch, namespace } from 'nuxt-property-decorator';
+import { getRequestsFromStorage, removeRequestQuestionFromStorage, setRequestsToStorage } from '~/shared/storageRequests';
+import _ from 'lodash';
 
-<style lang="scss">
-  @import "./questionnaire.component.scss";
+import appointmentService from '~/shared/services/appointment.service';
+import authService from '~/shared/services/auth.service';
+import queryConsultantService from '~/shared/services/query-consultant.service';
+import { Consultant } from '~/shared/models/consultant.model';
+import { ContactType } from '~/shared/models/enum/ContactType';
+import { Gender } from '~/shared/models/enum/Gender';
+import { RegisterInfo } from '~/shared/models/registerInfo';
+import { AppointmentParams, AppointmentRequests } from '~/shared/models/appointment.model';
+
+  const roleStorage = namespace('localStorage');
+  @Component
+  export default class Questionnaire extends Vue {
+    @State('myConsultantList') myConsultantList!: Consultant[];
+    @Action storeConsultantList!: () => Promise<number>;
+    @roleStorage.Getter isUserLogin!:boolean;
+    @roleStorage.State recommendConsultantItem!:string;
+
+    genderOptions=[
+      {
+        title:'���',
+        label:Gender.MALE,
+      },
+      {
+        title:'憟單��',
+        label:Gender.FEMALE,
+      }
+    ];
+
+    requirementOptions=[
+      {
+        title:'�摨瑁����',
+        label:'�摨瑁����',
+      },
+      {
+        title:'摮戊��',
+        label:'摮戊��',
+      },
+      {
+        title:'鞈閬��',
+        label:'鞈閬��',
+      },
+      {
+        title:'璅暑��隡�',
+        label:'璅暑��隡�',
+      },
+      {
+        title:'靽�瑼�/閬��',
+        label:'靽�瑼�/閬��',
+      },
+      {
+        title:'����',
+        label:'����',
+      },
+    ];
+
+    ageRangeOptions=[
+      {
+        title:'20甇脖誑銝�',
+        label:'under_20',
+      },
+      {
+        title:'21-30 甇�',
+        label:'21-30'
+      },
+      {
+        title:'31-40 甇�',
+        label:'31-40'
+      },
+      {
+        title:'41-50 甇�',
+        label:'41-50'
+      },
+      {
+        title:'51-60 甇�',
+        label:'51-60',
+      },
+      {
+        title:'61-70 甇�',
+        label:'61-70',
+      },
+      {
+        title:'71 甇脖誑銝�',
+        label:'over_71',
+      }
+    ];
+
+    quesAboutList = [
+                  {
+                      title:'�摨瑁����',
+                      content:'����澈擃憿批末嚗�靽�兢蝳�嚗��������嚗��飩������摮拙��粥銝��頝荔�犖����迤閬����'
+                  },
+                  {
+                      title:'摮戊��',
+                      content:'摮拙���������葦銋摮貊��撠靘�蒂�雿嚗飛���������������瓷嚗��楝銝���韏瑕飛��'
+                  },
+                  {
+                      title:'鞈閬��',
+                      content:'��迤��瓷撖��雓寡�����嚗鈭箇�����蝳西瓷��◢�����Ⅱ靽�蝛拙��嚗�摰嗆��靘�末��皞���'
+                  },
+                  {
+                      title:'璅暑��隡�',
+                      content:'�銝�頛拙����隡��摮���翰瘣鳴�停敺�����������隡瓷����撌勗�帘摰�嚗蝎曉蔗���僑鈭箇�������'
+                  },
+                  {
+                      title:'靽�瑼�/閬��',
+                      content:'��瑼Z�撌梁������蝚血����靘�◢�蝘餉��瘙��'
+                  },
+                  {
+                      title:'����',
+                      content:'���������憸券�����鈭怒�����嚗���摰帘摰漲嚗��隞亙��澈��ˊ�靽���嚗�'
+                  }
+    ];
+
+    myRequest: AppointmentRequests = {
+      phone          : this.userInfo?.phone ? this.userInfo.phone                               : '',
+      email          : this.userInfo?.email ? this.userInfo.email                               : '',
+      contactType    : _.isEqual(this.userInfo?.contactType,ContactType.SMS) ? ContactType.PHONE: ContactType.EMAIL,
+      gender         : '',
+      age            : '',
+      job            : '',
+      requirement    : [],
+      hopeContactTime: [{
+        selectWeekOptions : [],
+        selectTimesOptions: [],
+      }],
+      agentNo: '',
+    };
+
+    showDrawer= false;
+    sendReserve = false;
+    isEditPopup = false;
+    isEditBtn = false;
+
+    appointmentId = 0;
+    appointmentTime = '';
+
+    beforeRouteEnter(to: any, from: any, next: any) {
+      next(vm => {
+        const isUserLogin = authService.isUserLogin();
+        if (from.name === 'login' && !isUserLogin) {
+          vm.$router.go(-1);
+          return;
+        }
+
+        if (!isUserLogin) {
+          vm.$router.push('/login');
+        }
+      })
+    }
+
+    async fetch() {
+      if (authService.isUserLogin()) {
+        await this.storeConsultantList();
+      };
+    }
+
+    mounted(): void {
+      this.setMyRequest();
+    }
+
+    private setMyRequest(): void {
+      const storageMyRequest = getRequestsFromStorage();
+      const storageMyRequirement = this.recommendConsultantItem ? JSON.parse(this.recommendConsultantItem).requirements:[];
+
+      if (storageMyRequest) {
+        this.myRequest = {
+          ...storageMyRequest,
+          hopeContactTime: storageMyRequest.hopeContactTime?.length
+                            ? storageMyRequest.hopeContactTime
+                            : [{
+                                selectWeekOptions: [],
+                                selectTimesOptions: [],
+                              }],
+        };
+      }
+
+      if (storageMyRequirement) {
+        this.myRequest = {
+          ...this.myRequest,
+          requirement: storageMyRequirement
+        }
+        removeRequestQuestionFromStorage();
+      }
+    }
+
+    get phoneValid(): boolean {
+      const rule = /^09[0-9]{8}$/;
+      return this.myRequest.phone
+            ? rule.test(this.myRequest.phone) && _.isEqual(this.myRequest.phone.length,10)
+            : true;
+    }
+
+    get userInfo(): RegisterInfo {
+      const initUserInfo = JSON.parse(localStorage.getItem('userInfo')!);
+      return initUserInfo;
+    }
+
+    get isDisabledSubmitBtn(): boolean {
+           return _.includes(this.myRequest.contactType,ContactType.PHONE)
+      ? !this.isHopeContactTimeDone()
+      : !this.phoneValid;
+    }
+
+    private isHopeContactTimeDone():boolean{
+      return this.myRequest.hopeContactTime[0]?.selectWeekOptions.length >0 && this.myRequest.hopeContactTime[0]?.selectTimesOptions.length >0;
+    }
+
+    sentDemand() {
+      if (this.isEditBtn) {
+        this.sentEditAppointmentDemand();
+      } else {
+        queryConsultantService.addFavoriteConsultant([this.$route.params.agentNo]).then(res => this.sentAppointmentDemand());
+      }
+
+    }
+
+    private sentAppointmentDemand() {
+        const data: AppointmentParams = {
+          ...this.myRequest,
+          requirement: _.map(this.myRequest.requirement,o=>o).toString(),
+          hopeContactTime: this.myRequest.phone && this.phoneValid ? this.getHopeContactTime() :'',
+          agentNo: this.$route.params.agentNo
+        };
+
+        queryConsultantService.appointmentDemand(data).then(res => {
+            this.sendReserve = true;
+            this.myRequest.hopeContactTime = [];
+            setRequestsToStorage(this.myRequest);
+        });
+    }
+
+    private sentEditAppointmentDemand() {
+      const info = {
+          ...this.myRequest,
+          requirement: _.map(this.myRequest.requirement,o=>o).toString(),
+          hopeContactTime: this.myRequest.phone && this.phoneValid ? this.getHopeContactTime() :'',
+          id: this.appointmentId,
+          otherRequirement: null
+        }
+        appointmentService.editAppointment(info).then(res => {
+          this.sendReserve = true;
+          this.myRequest.hopeContactTime = [];
+          setRequestsToStorage(this.myRequest);
+        });
+    }
+
+    getHopeContactTime() {
+        const selectedHopeContactTime = this.myRequest.hopeContactTime.filter((i) => i.selectWeekOptions?.length && i.selectTimesOptions?.length);
+        return selectedHopeContactTime.map(i => {
+            return `'${i.selectWeekOptions}��${i.selectTimesOptions}'`}
+        ).toString();
+    }
+
+    closeReservePopUp() {
+        this.sendReserve = false;
+        this.$router.push('/')
+    }
+
+    private getLatestReserved(agentNo) {
+      const agentInfo = this.myConsultantList.filter(item => item.agentNo === agentNo);
+
+      const appointmentInfo = agentInfo.length > 0 && agentInfo[0].appointments
+        ? agentInfo[0].appointments!
+              .filter((appointment) => appointment.communicateStatus !== 'contacted')
+              .map((reversedAppointment) => {
+                return {
+                  ...reversedAppointment,
+                  sortDate: new Date(reversedAppointment.appointmentDate)
+                }
+              })
+              .sort((preAppointment, nextAppointment) => +nextAppointment.sortDate - +preAppointment.sortDate)[0]
+        : null;
+      return this.getReservedData(appointmentInfo);
+    }
+
+    private getReservedData(appointmentInfo) {
+      if (appointmentInfo) {
+        const hopeContactTime = appointmentInfo!.hopeContactTime.split("'")
+              .filter(item => item && item !== ',');
+        this.getAppointmentId(appointmentInfo);
+        return {
+            age: appointmentInfo.age,
+            agentNo: appointmentInfo.agentNo,
+            contactType: appointmentInfo.contactType,
+            email: appointmentInfo.email || '',
+            gender: appointmentInfo.gender,
+            hopeContactTime: hopeContactTime.map(item => {
+                const info = item.split('��');
+                return {
+                    selectWeekOptions: info[0].split(','),
+                    selectTimesOptions: info[1].split(',')
+                }
+            }),
+            job: appointmentInfo.job,
+            phone: appointmentInfo.phone || '',
+            requirement: appointmentInfo.requirement.split(',')
+          }
+      } else {
+        return null;
+      }
+    }
+
+    private getAppointmentId(appointmentInfo) {
+      this.appointmentId = appointmentInfo.id;
+      this.appointmentTime = appointmentInfo.lastModifiedDate
+                  ? appointmentInfo.lastModifiedDate
+                  : appointmentInfo.appointmentDate;
+    }
+    @Watch('myConsultantList') onMyConsultantListChange() {
+      if (authService.isUserLogin() && this.myConsultantList.length > 0) {
+          const editAppointment = this.getLatestReserved(this.$route.params.agentNo);
+
+          if (editAppointment && editAppointment.agentNo) {
+            this.myRequest = JSON.parse(JSON.stringify(editAppointment));
+            if (!this.$route.query || this.$route.query.edit !== 'true') {
+              this.isEditPopup = true;
+            }
+            this.isEditBtn = true;
+            return;
+          }
+      }
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+.sendReserve-txt{
+  display: flex;
+  justify-content: center;
+  margin-top: 10px;
+  margin-bottom: 26px;
+}
+
+//drawer��摨���見撘�
+.qa-dialog-footer{
+  display: flex;
+  justify-content: center;
+  margin-bottom: 81px;
+  color: #ED1B2E;
+  cursor: pointer;
+}
+
+//����見撘����
+.ques-footer{
+  justify-content: center;
+  margin: 30px 0;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  .el-button {
+    width: 120px;
+    height:50px;
+    background-color: #ED1B2E;
+    color:#FFFFFF;
+    font-weight: normal;
+    @extend .text--middle ;
+    &.el-button--default {
+        color: $PRIMARY_RED;
+        background-color: #FFFFFF;
+        border-color: $PRIMARY_RED;
+    }
+    &.el-button--primary {
+        background-color: $PRIMARY_RED;
+        border-color: $PRIMARY_RED;
+    }
+    &.is-disabled {
+    color: $PRIMARY_WHITE;
+    background-color: $MID_GREY;
+    border-color: $MID_GREY;
+    border-style: solid;
+    pointer-events: none;
+    }
+  }
+}
+
+//閰喟敦���rawer銝剝�摰寧征��之撠身蝵�
+.qa-dialog{
+  overflow-y:auto;
+  height: 60vh;
+  margin-top: 20px;
+}
+
+//閰喟敦���rawer銝餉����
+.qaTextTitle{
+  margin-top:30px;
+  display: flex;
+  justify-content: center;
+}
+
+.datepicker{
+  display: flex;
+  flex-direction: column;
+}
+
+.required {
+  position: relative;
+  &::before {
+      content: '*';
+      position: absolute;
+      color: #FF0000;
+      transform: translate(-12px, 0);
+  }
+}
+
+.ques-page--reset.pam-page-container {
+  margin: 0px auto;
+}
+
+.ques-header {
+  position: relative;
+}
+
+.ques-header__mob-banner {
+  width: 100%;
+  min-height: 80px;
+  background-color: #F8F9FA;
+  background-image: url('~/assets/images/questionnaire/reserve_bg_mob.svg');
+  background-repeat: no-repeat;
+  background-size: cover;
+  background-position: center;
+}
+
+  .ques-header__info {
+    position: relative;
+    padding:30px 20px;
+    margin: 0px 20px;
+    background-color: #B3E7E3;
+    border-radius: 10px;
+  }
+
+  .ques-header__input-block {
+    display: flex;
+    align-items: center;
+    @extend .text--middle,.mt-10 ;
+    .ques-header__input{
+      &.is-invalid{
+        border: 2px solid $PRIMARY_RED !important;
+      }
+      flex: 1;
+      height: 50px;
+      border-radius: 10px;
+      border: 1px #CCCCCC solid;
+      background-color: $PRIMARY_WHITE;
+      padding: 15px 10px;
+      box-sizing: border-box;
+      -webkit-box-sizing: border-box;
+      -moz-box-sizing: border-box;
+    }
+  }
+
+  .ques-container {
+    position: relative;
+    margin: 0px 20px;
+  }
+
+
+  @include desktop{
+  .ques-header{
+    display: flex;
+    justify-content: flex-end;
+    min-height: 460px;
+    background-image: url('~/assets/images/questionnaire/reserve_bg_web.svg');
+    background-repeat: no-repeat;
+    background-size: contain;
+    background-position: bottom;
+  }
+  .ques-header__mob-banner{
+    display: none;
+  }
+  .ques-header__info{
+    margin: 30px 20px;
+    width:500px;
+    min-height: 400px;
+    -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
+    -moz-box-sizing: border-box;    /* Firefox, other Gecko */
+    box-sizing: border-box;
+  }
+  .ques-container{
+    margin: 0px;
+  }
+}
+
 </style>
+

--
Gitblit v1.8.0