From 1d6d2d14200ed9432347ef8013e3fc117fa2161b Mon Sep 17 00:00:00 2001 From: Mila <Mila@pollex.com.tw> Date: 星期四, 20 一月 2022 14:57:27 +0800 Subject: [PATCH] Merge branch 'master' into Phase3 --- PAMapp/pages/questionnaire/_agentNo.vue | 324 +++++++++++++++++++++++++++-------------------------- 1 files changed, 165 insertions(+), 159 deletions(-) diff --git a/PAMapp/pages/questionnaire/_agentNo.vue b/PAMapp/pages/questionnaire/_agentNo.vue index f79843c..6593094 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" /> @@ -97,7 +97,7 @@ </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"> @@ -126,7 +126,10 @@ </PopUpFrame> <PopUpFrame :isOpen.sync="isEditPopup"> - <div class="text--middle mt-30 sendReserve-txt">��蝜潛�楊頛舫��嚗�</div> + <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> @@ -136,19 +139,33 @@ </template> <script lang="ts"> -import { Vue, Component, State, Action, Watch } from 'nuxt-property-decorator'; -import { addFavoriteConsultant, appointmentDemand, AppointmentParams, AppointmentRequests ,editAppointment,RegisterInfo } from '~/assets/ts/api/consultant'; -import { getRequestQuestionFromStorage, getRequestsFromStorage, removeRequestQuestionFromStorage, setRequestsToStorage } from '~/assets/ts/storageRequests'; +import { Vue, Component, State, Action, Watch, namespace } from 'nuxt-property-decorator'; +import { getRequestsFromStorage, removeRequestQuestionFromStorage, setRequestsToStorage } from '~/shared/storageRequests'; import _ from 'lodash'; -import { isLogin } from '~/assets/ts/auth'; -import { Consultant } from '~/assets/ts/models/consultant.model'; -import { ContactType } from '~/assets/ts/models/enum/ContactType'; -import { Gender } from '~/assets/ts/models/enum/Gender'; +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>; + @State('myConsultantList') + myConsultantList!: Consultant[]; + + @Action + storeConsultantList!: () => Promise<number>; + + @roleStorage.Getter + isUserLogin!:boolean; + + @roleStorage.State + recommendConsultantItem!:string; genderOptions=[ { @@ -206,10 +223,6 @@ label:'41-50' }, { - title:'46-55 甇�', - label:'46-55', - }, - { title:'51-60 甇�', label:'51-60', }, @@ -246,7 +259,7 @@ }, { title:'����', - content:'���� ���������憸券�����鈭怒�����嚗���摰帘摰漲嚗��隞亙��澈��ˊ�靽���嚗�' + content:'���������憸券�����鈭怒�����嚗���摰帘摰漲嚗��隞亙��澈��ˊ�靽���嚗�' } ]; @@ -271,33 +284,34 @@ isEditBtn = false; appointmentId = 0; + appointmentTime = ''; + + //////////////////////////////////////////////////////////////////////////// beforeRouteEnter(to: any, from: any, next: any) { next(vm => { - if (from.name === 'login' && !isLogin()) { + const isUserLogin = authService.isUserLogin(); + if (from.name === 'login' && !isUserLogin) { vm.$router.go(-1); return; } - if (!isLogin()) { + if (!isUserLogin) { vm.$router.push('/login'); } }) } - async fetch() { - if (isLogin()) { - await this.storeConsultantList(); - }; - } - mounted(): void { + if (authService.isUserLogin()) { + this.storeConsultantList(); + }; this.setMyRequest(); } private setMyRequest(): void { const storageMyRequest = getRequestsFromStorage(); - const storageMyQuestion = getRequestQuestionFromStorage(); + const storageMyRequirement = this.recommendConsultantItem ? JSON.parse(this.recommendConsultantItem).requirements:[]; if (storageMyRequest) { this.myRequest = { @@ -311,14 +325,129 @@ }; } - if (storageMyQuestion) { + if (storageMyRequirement) { this.myRequest = { ...this.myRequest, - requirement: storageMyQuestion + requirement: storageMyRequirement } removeRequestQuestionFromStorage(); } } + + //////////////////////////////////////////////////////////////////////////// + + @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; + } + } + } + + 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) => ( + { ...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 { + ...appointmentInfo, + hopeContactTime: hopeContactTime.map(item => { + const info = item.split('��'); + return { + selectWeekOptions: info[0].split(','), + selectTimesOptions: info[1].split(',') + } + }), + requirement: appointmentInfo.requirement.split(',') + } + } else { + return null; + } + } + + private getAppointmentId(appointmentInfo) { + this.appointmentId = appointmentInfo.id; + this.appointmentTime = appointmentInfo.lastModifiedDate + ? appointmentInfo.lastModifiedDate + : appointmentInfo.appointmentDate; + } + + //////////////////////////////////////////////////////////////////////////// + + sentDemand() { + if (this.isEditBtn) { + this.editAppointmentDemand(); + } else { + queryConsultantService.addFavoriteConsultant([this.$route.params.agentNo]).then(res => this.sentAppointmentDemand()); + } + } + + private editAppointmentDemand() { + 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); + }); + } + + 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 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('/') + } + + //////////////////////////////////////////////////////////////////////////// get phoneValid(): boolean { const rule = /^09[0-9]{8}$/; @@ -338,133 +467,10 @@ : !this.phoneValid; } - get isLogin() { - return isLogin(); - } - 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 { - 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 - }; - - 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 - } - 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.appointmentId = appointmentInfo.id; - 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 { - age: '', - agentNo: '', - contactType: '', - email: '', - gender: '', - hopeContactTime: [], - job: '', - phone: '', - requirement: [] - } - } - } - - @Watch('myConsultantList') onMyConsultantListChange() { - if (this.isLogin && this.myConsultantList.length > 0) { - const editAppointment = this.getLatestReserved(this.$route.params.agentNo); - - if (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> @@ -521,7 +527,7 @@ //閰喟敦���rawer銝剝�摰寧征��之撠身蝵� .qa-dialog{ overflow-y:auto; - height: 500px; + height: 60vh; margin-top: 20px; } -- Gitblit v1.9.3