From 8f60f9800584d6918d7bcda66ed18f8773a25f25 Mon Sep 17 00:00:00 2001 From: Tomas <tomasysh@gmail.com> Date: 星期四, 07 九月 2023 13:46:31 +0800 Subject: [PATCH] Update: 0907-P6: Bad use of null-like value --- PAMapp/pages/questionnaire/_agentNo.vue | 149 ++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 114 insertions(+), 35 deletions(-) diff --git a/PAMapp/pages/questionnaire/_agentNo.vue b/PAMapp/pages/questionnaire/_agentNo.vue index 120c844..9208efb 100644 --- a/PAMapp/pages/questionnaire/_agentNo.vue +++ b/PAMapp/pages/questionnaire/_agentNo.vue @@ -23,7 +23,7 @@ <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"> @@ -38,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" @@ -67,7 +67,7 @@ <div class="ques-container"> <div class="pam-paragraph"> <div class="mdTxt"> - �閬岷������ + �鈭圾����� <span class="hint text--bold"> (�銴) </span> @@ -76,6 +76,12 @@ <MultiSelectBtn class="mt-10" :mutiSelect.sync="myRequest.requirement" :options="requirementOptions" /> + </div> + <div class="pam-paragraph"> + <div class="mdTxt">隢株岷�撘�</div> + <SingleSelectBtn class="mt-10" + :singleSelected.sync="myRequest.consultationMethod" + :options="consultationMethodOptions" /> </div> <div class="pam-paragraph"> <div class="mdTxt">����批</div> @@ -103,7 +109,7 @@ <PopUpFrame :isOpen.sync="showDrawer"> <div class="qaTextTitle mdTxt"> - <strong>�閬岷������</strong> + <strong>�鈭圾�����</strong> </div> <div class="qa-dialog"> <div v-for="(qaText,index) in quesAboutList" :key="index" > @@ -121,24 +127,19 @@ <PopUpFrame :isOpen.sync="sendReserve" @update:isOpen="closeReservePopUp"> <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="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> --> + <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 @click="closeReservePopUp">����</el-button> <el-button type="primary" - @click="closeReservePopUp"> + @click="reviewPlatform"> � - </el-button> --> - <el-button type="primary" - @click="closeReservePopUp"> - ������ </el-button> </div> </PopUpFrame> @@ -161,14 +162,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 @@ -185,7 +191,10 @@ @roleStorage.State recommendConsultantItem!:string; - score ="" ; + @roleStorage.Mutation + storageUserInfo!: (params: RegisterInfo) => void; + + score = 0; genderOptions=[ { @@ -195,6 +204,17 @@ { title:'憟單��', label:Gender.FEMALE, + } + ]; + + consultationMethodOptions = [ + { + title: '蝺��', + label: 'online' + }, + { + title: '蝺��', + label: 'offline' } ]; @@ -284,8 +304,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 : '', @@ -296,6 +317,7 @@ selectTimesOptions: [], }], agentNo: '', + consultationMethod: '', }; showDrawer= false; @@ -352,6 +374,17 @@ } removeRequestQuestionFromStorage(); } + + if (authService.isUserLogin()) { + accountSettingService.getUserAccountSetting().then((contactTypeDetail) => { + this.myRequest = { + ...this.myRequest, + ...contactTypeDetail + } + }) + } + + } //////////////////////////////////////////////////////////////////////////// @@ -387,20 +420,23 @@ private getReservedData(appointmentInfo) { if (appointmentInfo) { - const hopeContactTime = appointmentInfo!.hopeContactTime.split("'") - .filter(item => item && item !== ','); - this.getAppointmentId(appointmentInfo); - - return { - ...appointmentInfo, - hopeContactTime: hopeContactTime.map(item => { + const hopeContactTime = appointmentInfo!.hopeContactTime + ? appointmentInfo!.hopeContactTime.split("'").filter(item => item && item !== ',').map(item => { const info = item.split('��'); return { selectWeekOptions: info[0].split(','), selectTimesOptions: info[1].split(',') } - }), - requirement: appointmentInfo.requirement.split(',') + }) + :[{selectWeekOptions : [],selectTimesOptions: []}]; + this.getAppointmentId(appointmentInfo); + + return { + ...appointmentInfo, + hopeContactTime: hopeContactTime, + requirement: appointmentInfo.requirement + ? appointmentInfo.requirement.split(',') + : [] } } else { return null; @@ -416,12 +452,36 @@ //////////////////////////////////////////////////////////////////////////// - sentDemand() { - if (this.isEditBtn) { - this.editAppointmentDemand(); + async sentDemand() { + if (!this.isEditBtn) { + // 雿輻 async/await 靘��甇交����蝯�� + const addFavoriteAgentList = [{ agentNo: this.$route.params.agentNo, createdTime: new Date().toISOString() }]; + const response = await queryConsultantService.addFavoriteConsultant(addFavoriteAgentList); + + // 蝣箔�甇交����蝯�� null ��� undefined + if (!response) { + throw new Error('queryConsultantService.addFavoriteConsultant returned null-like value.'); + } else { + if (typeof this.editAppointmentDemand === 'function') { + // 蝣箔�� this.editAppointmentDemand �銝��� + await this.editAppointmentDemand(); + } else { + // ���� this.editAppointmentDemand �摰儔����� + throw new Error('this.editAppointmentDemand is not defined or not a function.'); + } + } } else { - queryConsultantService.addFavoriteConsultant([this.$route.params.agentNo]).then(res => this.sentAppointmentDemand()); + await this.editAppointmentDemand(); } + + const editSettingInfo: UserSetting = { + name: this.myRequest.name, + phone: this.myRequest.phone, + email: this.myRequest.email, + }; + + await accountSettingService.updateAccountSetting(editSettingInfo); + this.storageUserInfo(this.userInfo); } private editAppointmentDemand() { @@ -450,6 +510,7 @@ queryConsultantService.appointmentDemand(data).then(res => { this.sendReserve = true; this.myRequest.hopeContactTime = []; + this.appointmentId = res['id']; setRequestsToStorage(this.myRequest); }); } @@ -459,6 +520,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() { @@ -513,7 +585,9 @@ color: #ED1B2E; cursor: pointer; } - +.error { + color:$PRIMARY_RED +} //����見撘���� .ques-footer{ justify-content: center; @@ -575,7 +649,10 @@ transform: translate(-12px, 0); } } - +.break{ + word-break: break-all; + line-height: 1.2; +} .ques-page--reset.pam-page-container { margin: 0px auto; } @@ -608,7 +685,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; @@ -621,7 +698,9 @@ -moz-box-sizing: border-box; } } - + .ml-4{ + margin-left: 4px; + } .ques-container { position: relative; margin: 0px 20px; -- Gitblit v1.9.3