From 40f5938230b4da2045eb170f92ba6967be1dac5a Mon Sep 17 00:00:00 2001 From: HelenHuang <LinHuang@pollex.com.tw> Date: 星期三, 23 二月 2022 18:21:37 +0800 Subject: [PATCH] fixed# [加入顧問清單API] 變更傳給後端的時間格式為ISO string --- PAMapp/pages/questionnaire/_agentNo.vue | 113 +++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 94 insertions(+), 19 deletions(-) diff --git a/PAMapp/pages/questionnaire/_agentNo.vue b/PAMapp/pages/questionnaire/_agentNo.vue index 6593094..d81c21e 100644 --- a/PAMapp/pages/questionnaire/_agentNo.vue +++ b/PAMapp/pages/questionnaire/_agentNo.vue @@ -23,9 +23,13 @@ <div class="mdTxt">�隞��蝜急撘�</div> <div class="ques-header__input-block"> <span>Email嚗�</span> - <input class="ques-header__input" + <input class="ques-header__input break" + :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> @@ -34,14 +38,14 @@ <div class="mdTxt">�����蝜急撘�</div> <div class="mt-10 ques-header__input-block"> <span>Email嚗�</span> - <span>{{myRequest.email}}</span> + <span class=" break">{{myRequest.email}}</span> </div> </div> <div class="mt-30"> <div class="mdTxt">�隞��蝜急撘�</div> <div class="ques-header__input-block"> - <span>�����</span> - <input class="ques-header__input" + <span>���� : </span> + <input class="ques-header__input ml-4" :class="{'is-invalid': !phoneValid}" placeholder="隢撓�" maxlength="10" @@ -115,12 +119,21 @@ </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> + <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"> - ������ + @click="reviewPlatform"> + � </el-button> </div> </PopUpFrame> @@ -143,14 +156,19 @@ import { getRequestsFromStorage, removeRequestQuestionFromStorage, setRequestsToStorage } from '~/shared/storageRequests'; import _ from 'lodash'; +import accountSettingService from '~/shared/services/account-setting.service'; import appointmentService from '~/shared/services/appointment.service'; import authService from '~/shared/services/auth.service'; import queryConsultantService from '~/shared/services/query-consultant.service'; +import reviewsService from '~/shared/services/reviews.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'; +import { UserSetting } from '~/shared/models/account.model'; +import { SatisfactionType } from '~/shared/models/enum/satisfaction-type'; +import { UserReviewParams } from '~/shared/models/reviews.model'; const roleStorage = namespace('localStorage'); @Component @@ -166,6 +184,11 @@ @roleStorage.State recommendConsultantItem!:string; + + @roleStorage.Mutation + storageUserInfo!: (params: RegisterInfo) => void; + + score = 0; genderOptions=[ { @@ -264,8 +287,9 @@ ]; myRequest: AppointmentRequests = { - phone : this.userInfo?.phone ? this.userInfo.phone : '', - email : this.userInfo?.email ? this.userInfo.email : '', + name : '', + phone : '', + email : '', contactType : _.isEqual(this.userInfo?.contactType,ContactType.SMS) ? ContactType.PHONE: ContactType.EMAIL, gender : '', age : '', @@ -312,6 +336,7 @@ private setMyRequest(): void { const storageMyRequest = getRequestsFromStorage(); const storageMyRequirement = this.recommendConsultantItem ? JSON.parse(this.recommendConsultantItem).requirements:[]; + const contactTypePromise = accountSettingService.getUserAccountSetting(); if (storageMyRequest) { this.myRequest = { @@ -332,6 +357,14 @@ } removeRequestQuestionFromStorage(); } + + contactTypePromise.then((contactTypeDetail) => { + this.myRequest = { + ...this.myRequest, + ...contactTypeDetail + } + }) + } //////////////////////////////////////////////////////////////////////////// @@ -353,10 +386,9 @@ 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') + .filter((appointment) => appointment.communicateStatus === 'reserved') .map((reversedAppointment) => ( { ...reversedAppointment, sortDate: new Date(reversedAppointment.appointmentDate) @@ -401,8 +433,17 @@ if (this.isEditBtn) { this.editAppointmentDemand(); } else { - queryConsultantService.addFavoriteConsultant([this.$route.params.agentNo]).then(res => this.sentAppointmentDemand()); + queryConsultantService.addFavoriteConsultant([{ agentNo: this.$route.params.agentNo, createdTime: new Date().toISOString()}]).then(res => this.sentAppointmentDemand()); } + const editSettingInfo: UserSetting = { + name: this.myRequest.name, + phone: this.myRequest.phone, + email: this.myRequest.email, + } + + accountSettingService.updateAccountSetting(editSettingInfo).then((_) => { + this.storageUserInfo(this.userInfo); + }); } private editAppointmentDemand() { @@ -431,6 +472,7 @@ queryConsultantService.appointmentDemand(data).then(res => { this.sendReserve = true; this.myRequest.hopeContactTime = []; + this.appointmentId = res['id']; setRequestsToStorage(this.myRequest); }); } @@ -440,6 +482,17 @@ return selectedHopeContactTime.map(i => { return `'${i.selectWeekOptions}��${i.selectTimesOptions}'`} ).toString(); + } + + reviewPlatform(): void { + const reviewPlatformParams: UserReviewParams = { + appointmentId: this.appointmentId, + score: this.score, + type: SatisfactionType.SYSTEM + }; + reviewsService.reviewPlatform(reviewPlatformParams).then((_) => { + this.closeReservePopUp(); + }); } closeReservePopUp() { @@ -456,6 +509,11 @@ : true; } + 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; + } + get userInfo(): RegisterInfo { const initUserInfo = JSON.parse(localStorage.getItem('userInfo')!); return initUserInfo; @@ -463,7 +521,7 @@ get isDisabledSubmitBtn(): boolean { return _.includes(this.myRequest.contactType,ContactType.PHONE) - ? !this.isHopeContactTimeDone() + ? !this.isHopeContactTimeDone() || !this.emailValid : !this.phoneValid; } @@ -479,7 +537,6 @@ display: flex; justify-content: center; margin-top: 10px; - margin-bottom: 26px; } //drawer��摨���見撘� @@ -490,7 +547,9 @@ color: #ED1B2E; cursor: pointer; } - +.error { + color:$PRIMARY_RED +} //����見撘���� .ques-footer{ justify-content: center; @@ -552,7 +611,10 @@ transform: translate(-12px, 0); } } - +.break{ + word-break: break-all; + line-height: 1.2; +} .ques-page--reset.pam-page-container { margin: 0px auto; } @@ -585,7 +647,7 @@ @extend .text--middle,.mt-10 ; .ques-header__input{ &.is-invalid{ - border: 2px solid $PRIMARY_RED !important; + border: 1px solid $PRIMARY_RED !important; } flex: 1; height: 50px; @@ -598,12 +660,24 @@ -moz-box-sizing: border-box; } } - + .ml-4{ + margin-left: 4px; + } .ques-container { position: relative; 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{ @@ -631,5 +705,6 @@ } } + </style> -- Gitblit v1.8.0