From 6fa4bba623713c396432ba8b863846883d6a1906 Mon Sep 17 00:00:00 2001 From: wayne <wayne8692wayne8692@gmail.com> Date: 星期三, 26 一月 2022 10:52:23 +0800 Subject: [PATCH] Merge branch 'pollex-dev' into sit --- PAMapp/pages/questionnaire/_agentNo.vue | 242 ++++++++++++++++++++++++++++-------------------- 1 files changed, 141 insertions(+), 101 deletions(-) diff --git a/PAMapp/pages/questionnaire/_agentNo.vue b/PAMapp/pages/questionnaire/_agentNo.vue index 4bb0532..120c844 100644 --- a/PAMapp/pages/questionnaire/_agentNo.vue +++ b/PAMapp/pages/questionnaire/_agentNo.vue @@ -24,8 +24,12 @@ <div class="ques-header__input-block"> <span>Email嚗�</span> <input class="ques-header__input" + :class="{ 'is-invalid': !emailValid}" placeholder="隢撓�" v-model="myRequest.email"> + </div> + <div class="error mt-5 mb-5" style="margin-left:65px"> + <span v-show="!emailValid">Email�撘�炊</span> </div> </div> </div> @@ -115,9 +119,23 @@ </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="mdTxt mt-30 sendReserve-txt">�������</div> + <div class="mdTxt sendReserve-txt mb-30">�����“�������蝯∴��</div> + <!-- TODO: �銝脫 api, ���像�皛踵�漲 --> + <!-- <div class="pam-app-review mb-10"> + <div class="mdTxt mb-10">撠 + <span class="mdTxt text--primary text--bold ">������</span> + 撟喳��擃���� + </div> + <div class="mdTxt">�蝯虫�嗾憿��嚗�</div> + </div> + <el-rate v-model="score" class="pam-satisfaction-rate fix-chrome-click--issue"></el-rate> --> <div class="text--center mdTxt"> + <!-- <el-button @click="closeReservePopUp">����</el-button> + <el-button type="primary" + @click="closeReservePopUp"> + � + </el-button> --> <el-button type="primary" @click="closeReservePopUp"> ������ @@ -155,10 +173,19 @@ 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; + @State('myConsultantList') + myConsultantList!: Consultant[]; + + @Action + storeConsultantList!: () => Promise<number>; + + @roleStorage.Getter + isUserLogin!:boolean; + + @roleStorage.State + recommendConsultantItem!:string; + + score ="" ; genderOptions=[ { @@ -252,7 +279,7 @@ }, { title:'����', - content:'���������憸券�����鈭怒�����嚗���摰帘摰漲嚗��隞亙��澈��ˊ�靽���嚗�' + content:'���������憸券�����鈭怒�����嚗���摰帘摰漲嚗��隞亙��澈��ˊ�靽���嚗�' } ]; @@ -279,6 +306,8 @@ appointmentId = 0; appointmentTime = ''; + //////////////////////////////////////////////////////////////////////////// + beforeRouteEnter(to: any, from: any, next: any) { next(vm => { const isUserLogin = authService.isUserLogin(); @@ -293,13 +322,10 @@ }) } - async fetch() { - if (authService.isUserLogin()) { - await this.storeConsultantList(); - }; - } - mounted(): void { + if (authService.isUserLogin()) { + this.storeConsultantList(); + }; this.setMyRequest(); } @@ -328,35 +354,89 @@ } } - 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; + //////////////////////////////////////////////////////////////////////////// + + @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; + } + } } - get userInfo(): RegisterInfo { - const initUserInfo = JSON.parse(localStorage.getItem('userInfo')!); - return initUserInfo; + 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 === 'reserved') + .map((reversedAppointment) => ( + { ...reversedAppointment, + sortDate: new Date(reversedAppointment.appointmentDate) + })) + .sort((preAppointment, nextAppointment) => +nextAppointment.sortDate - +preAppointment.sortDate)[0] + : null; + return this.getReservedData(appointmentInfo); } - get isDisabledSubmitBtn(): boolean { - return _.includes(this.myRequest.contactType,ContactType.PHONE) - ? !this.isHopeContactTimeDone() - : !this.phoneValid; + 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 isHopeContactTimeDone():boolean{ - return this.myRequest.hopeContactTime[0]?.selectWeekOptions.length >0 && this.myRequest.hopeContactTime[0]?.selectTimesOptions.length >0; + private getAppointmentId(appointmentInfo) { + this.appointmentId = appointmentInfo.id; + this.appointmentTime = appointmentInfo.lastModifiedDate + ? appointmentInfo.lastModifiedDate + : appointmentInfo.appointmentDate; } + + //////////////////////////////////////////////////////////////////////////// sentDemand() { if (this.isEditBtn) { - this.sentEditAppointmentDemand(); + 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() { @@ -374,22 +454,7 @@ }); } - 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() { + private getHopeContactTime() { const selectedHopeContactTime = this.myRequest.hopeContactTime.filter((i) => i.selectWeekOptions?.length && i.selectTimesOptions?.length); return selectedHopeContactTime.map(i => { return `'${i.selectWeekOptions}��${i.selectTimesOptions}'`} @@ -401,70 +466,35 @@ 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); + 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; } - 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; - } + get emailValid() { + const rule = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/; + return this.myRequest.email ? rule.test(this.myRequest.email) : true; } - private getAppointmentId(appointmentInfo) { - this.appointmentId = appointmentInfo.id; - this.appointmentTime = appointmentInfo.lastModifiedDate - ? appointmentInfo.lastModifiedDate - : appointmentInfo.appointmentDate; + get userInfo(): RegisterInfo { + const initUserInfo = JSON.parse(localStorage.getItem('userInfo')!); + return initUserInfo; } - @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; - } - } + get isDisabledSubmitBtn(): boolean { + return _.includes(this.myRequest.contactType,ContactType.PHONE) + ? !this.isHopeContactTimeDone() || !this.emailValid + : !this.phoneValid; } + + private isHopeContactTimeDone():boolean{ + return this.myRequest.hopeContactTime[0]?.selectWeekOptions.length >0 && this.myRequest.hopeContactTime[0]?.selectTimesOptions.length >0; + } + } </script> @@ -473,7 +503,6 @@ display: flex; justify-content: center; margin-top: 10px; - margin-bottom: 26px; } //drawer��摨���見撘� @@ -598,6 +627,16 @@ margin: 0px 20px; } +.pam-app-review{ + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.pam-satisfaction-rate{ + margin-bottom: 45px; +} @include desktop{ .ques-header{ @@ -625,5 +664,6 @@ } } + </style> -- Gitblit v1.8.0